Skip to content

Instantly share code, notes, and snippets.

@gunessenturk
Created September 13, 2018 03:42
Show Gist options
  • Save gunessenturk/5fec8bc84e6ce1c67b27071e38f482bd to your computer and use it in GitHub Desktop.
Save gunessenturk/5fec8bc84e6ce1c67b27071e38f482bd to your computer and use it in GitHub Desktop.
TDI_project_week1
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import datetime as ddtt\n",
"import numpy as np\n",
"import folium"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Get reported crime data\n",
"df = pd.read_csv('LA_Crime_Data_from_2010_to_11sep2018.csv')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"df = df.loc[ (df['Premise Description'] == 'STREET') \n",
" | (df['Premise Description'] == 'PARKING LOT') \n",
" | (df['Premise Description'] == 'SIDEWALK') \n",
" | (df['Premise Description'] == 'PARK/PLAYGROUND') \n",
" | (df['Premise Description'] == 'ALLEY')\n",
" | (df['Premise Description'] == 'GAS STATION')\n",
" | (df['Premise Description'] == 'BUS STOP')\n",
" | (df['Premise Description'] == 'OTHER/OUTSIDE')\n",
" | (df['Premise Description'] == 'PEDESTRIAN OVERCROSSING')\n",
" | (df['Premise Description'] == 'UNDERPASS/BRIDGE*')\n",
" | (df['Premise Description'] == 'SKATEBOARD FACILITY/SKATEBOARD PARK*')\n",
" ]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Clean column 'Location'\n",
"df['Location '] = df['Location '].str.replace('\\(','')\n",
"df['Location '] = df['Location '].str.replace('\\)','')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# Add columns 'Latitude', 'Longitude', 'Year Occurred', 'Month Occurred', 'Day Occurred'\n",
"df['Latitude'] = df['Location '].str.replace(',.*', '').astype('float')\n",
"df['Longitude'] = df['Location '].str.replace('.*,', '').astype('float')\n",
"df['Year Occurred'] = df['Date Occurred'].str.replace('.*/', '').astype('int')\n",
"df['Month Occurred'] = ( df['Date Occurred']\n",
" .str.replace('/.*/.*', '').astype('int') )\n",
"df['Day Occurred'] = ( df['Date Occurred']\n",
" .str.replace('^\\d\\d/', '').str.replace('/.*', '').astype('int') )"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Convert 'Date Occurred' and 'Date Reported' to datetime\n",
"df['Date Occurred'] = pd.to_datetime(df['Date Occurred'], format='%m/%d/%Y')\n",
"df['Date Reported'] = pd.to_datetime(df['Date Reported'], format='%m/%d/%Y')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"# Add column 'Weekday Occurred'\n",
"df['Weekday Occurred'] = df['Date Occurred'].apply(lambda x: ddtt.datetime.weekday(x))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"df.drop('Location ', axis=1, inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"df_crime_area = df[['Area Name', 'DR Number']].groupby(['Area Name']).count().reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"num_days = pd.Timestamp('September 11, 2018') - pd.Timestamp('January 1, 2010')\n",
"num_days = (num_days / np.timedelta64(1, 'D')).astype(int)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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MZGUJEmSJDViIilJkiRJasREUpIkSZLUiImkJEmSJKkRE0lJkiRJUiMmkpIkSZKkRkwkJUmSJEmNmEhKkiRJkhoxkZQkSZIkNWIiKUmSJElqxERSkiRJktSIiaQkSZIkqRETSUmSJElSIyaSkiRJkqRGTCQlSZIkSY2YSEqSJEmSGjGRlCRJkiQ1YiIpSZIkSWrERFKSJEmS1IiJpCRJkiSpERNJSZIkSVIjJpKSJEmSpEZMJCVJkiRJjZhISpIkSZIaMZGUJEmSJDViIilJkiRJasREUpIkSZLUiImkJEmSJKkRE0lJkiRJUiMmkpIkSZKkRkwkJUmSJEmNmEhKkiRJkhoxkZQkSZIkNWIiKUmSJElqxERSkiRJktSIiaQkSZIkqRETSUmSJElSIyaSkiRJkqRGTCQlSZIkSY2YSEqSJEmSGjGRlCRJkiQ1YiIpSZIkSWrERFKSJEmS1IiJpCRJkiSpERNJSZIkSVIjJpKSJEmSpEZMJCVJkiRJjZhISpIkSZIaMZGUJEmSJDViIilJkiRJasREUpIkSZLUiImkJEmSJKkRE0lJkiRJUiMmkpIkSZKkRkwkJUmSJEmNmEhKkiRJkhoxkZQkSZIkNWIiKUmSJElqxERSkiRJktSIiaQkSZIkqRETSUmSJElSIyaSkiRJkqRGTCQlSZIkSY2YSEqSJEmSGjGRlCRJkiQ1YiIpSZIkSWrERFKSJEmS1IiJpCRJkiSpERNJSZIkSVIjJpKSJEmSpEZMJCVJkiRJjZhISpIkSZIaMZGUJEmSJDViIilJkiRJasREUpIkSZLUiImkJEmSJKkRE0lJkiRJUiMmkpIkSZKkRkwkJUmSJEmNmEhKkiRJkhoxkZQkSZIkNWIiKUmSJElqxERSkiRJktSIiaQkSZIkqRETSUmSJElSIyaSkiRJkqRGTCQlSZIkSY2YSEqSJEmSGjGRlCRJkiQ1YiIpSZIkSWrERFKSJEmS1IiJpCRJkiSpERNJSZIkSVIjJpKSJEmSpEZMJCVJkiRJjZhISpIkSZIaMZGUJEmSJDViIilJkiRJasREUpIkSZLUiImkJEmSJKkRE0lJkiRJUiMmkpIkSZKkRkwkJUmSJEmNmEhKkiRJkhoxkZQkSZIkNWIiKUmSJElqxERSkiRJktSIiaQkSZIkqRETSUmSJElSIyaSkiRJkqRGTCQlSZIk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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11621a6d8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot number of reported crimes by area name\n",
"\n",
"plt.figure(figsize=(16,10))\n",
"plt.subplot(1, 1, 1)\n",
"bars = plt.bar(x=df_crime_area['Area Name'], \n",
" height=np.round(df_crime_area['DR Number'] / num_days) )\n",
"plt.tick_params(top='off', bottom='off', left='off', \n",
" right='off', labelleft='off', labelbottom='on')\n",
"plt.title('Number of Crimes per Day - Los Angeles City\\n (street or similar premise)', \n",
" fontsize=28)\n",
"for bar in bars:\n",
" plt.gca().text(bar.get_x() + bar.get_width()/2, bar.get_height() - 0.5, \n",
" '{:.0f}'.format(bar.get_height()), \n",
" ha='center', color='w', fontsize=20)\n",
" \n",
"x = plt.gca().xaxis\n",
"\n",
"for item in x.get_ticklabels():\n",
" item.set_rotation(70)\n",
" item.set_fontsize(24)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"df_18_jan = df[(df['Year Occurred'] == 2018) & (df['Month Occurred'] == 1)]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"LA_map_2018_jan = folium.Map(location=[33.9829, -118.3338],\n",
" zoom_start=10,\n",
"# tiles=\"Stamen Toner\")\n",
" tiles='cartodbpositron')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"for i in range(len(df_18_jan)):\n",
" lat = df_18_jan['Latitude'].iloc[i]\n",
" lon = df_18_jan['Longitude'].iloc[i]\n",
" folium.CircleMarker([lat, lon], radius=1, color='red', popup=df_18_jan['Area Name'].iloc[i]).add_to(LA_map_2018_jan)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVMgPSBmYWxzZTsgTF9OT19UT1VDSCA9IGZhbHNlOyBMX0RJU0FCTEVfM0QgPSBmYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjEvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS4yLjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdnaXQuY29tL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9tYXN0ZXIvZm9saXVtL3RlbXBsYXRlcy9sZWFmbGV0LmF3ZXNvbWUucm90YXRlLmNzcyIvPgogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIAogICAgICAgICAgICA8c3R5bGU+ICNtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEgewogICAgICAgICAgICAgICAgcG9zaXRpb24gOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgIHdpZHRoIDogMTAwLjAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhIiA+PC9kaXY+CiAgICAgICAgCjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgdmFyIG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSA9IEwubWFwKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2VudGVyOiBbMzMuOTgyOSwtMTE4LjMzMzhdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9vbTogMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciB0aWxlX2xheWVyXzFmMDlhZDZhMGQ0NzRkOWJiOWMzNmIzNmQ4NTQ4ZjJiID0gTC50aWxlTGF5ZXIoCiAgICAgICAgICAgICAgICAnaHR0cHM6Ly9jYXJ0b2RiLWJhc2VtYXBzLXtzfS5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgICAgICAgICB7CiAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgIm1heFpvb20iOiAxOCwKICAibWluWm9vbSI6IDEsCiAgIm5vV3JhcCI6IGZhbHNlLAogICJzdWJkb21haW5zIjogImFiYyIKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3Y2Q1MzBmNmJhODQwY2RhZjIzNWRhOThiMWJjYjA3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ1MiwtMTE4LjIyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5YTRjMjgxYjU4NTQ1Y2ZiOGE5ZjM2NzA3NWU3MTJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlYzk3NjIyZDBjZTQ1ZmRiMjJlMWIwYWY5NzY0NTVmID0gJCgnPGRpdiBpZD0iaHRtbF9kZWM5NzYyMmQwY2U0NWZkYjIyZTFiMGFmOTc2NDU1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGVuYmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTlhNGMyODFiNTg1NDVjZmI4YTlmMzY3MDc1ZTcxMmYuc2V0Q29udGVudChodG1sX2RlYzk3NjIyZDBjZTQ1ZmRiMjJlMWIwYWY5NzY0NTVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3Y2Q1MzBmNmJhODQwY2RhZjIzNWRhOThiMWJjYjA3LmJpbmRQb3B1cChwb3B1cF9hOWE0YzI4MWI1ODU0NWNmYjhhOWYzNjcwNzVlNzEyZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85N2UxODk1Yjg5NzQ0MTg1YTZkYzI2YWJhZTMxYzNjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4NSwtMTE4LjI5MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YzJhMmQxNTJiZWQ0YzhkYTAyYTNiMGM5ZWI2OTA3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNGQxZjI2MzllOGI0N2JkYjRjNzJjYjBlNjBhOTdmYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjRkMWYyNjM5ZThiNDdiZGI0YzcyY2IwZTYwYTk3ZmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YzJhMmQxNTJiZWQ0YzhkYTAyYTNiMGM5ZWI2OTA3Ny5zZXRDb250ZW50KGh0bWxfMjRkMWYyNjM5ZThiNDdiZGI0YzcyY2IwZTYwYTk3ZmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTdlMTg5NWI4OTc0NDE4NWE2ZGMyNmFiYWUzMWMzY2IuYmluZFBvcHVwKHBvcHVwXzhjMmEyZDE1MmJlZDRjOGRhMDJhM2IwYzllYjY5MDc3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEzZWIxZThjNzAxYzQ4ZWI4ZDUxMzFiZmM3MjlmMDc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQzNSwtMTE4LjI0MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDZjMTExYjVmM2Q0N2U3YTFkZDg0MTA5YzJhNjU0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMGQ4ZGVjMjc5OTk0MjY2OWZkNTQyMzAzMmNkM2ZkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTBkOGRlYzI3OTk5NDI2NjlmZDU0MjMwMzJjZDNmZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJkNmMxMTFiNWYzZDQ3ZTdhMWRkODQxMDljMmE2NTRhLnNldENvbnRlbnQoaHRtbF9lMGQ4ZGVjMjc5OTk0MjY2OWZkNTQyMzAzMmNkM2ZkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xM2ViMWU4YzcwMWM0OGViOGQ1MTMxYmZjNzI5ZjA3Ny5iaW5kUG9wdXAocG9wdXBfMmQ2YzExMWI1ZjNkNDdlN2ExZGQ4NDEwOWMyYTY1NGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmNmMTY0YWQ2MTM1NDViMGJhNzA1ZDY0YjNiZTU0NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzI4LC0xMTguMjY0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4NjNjMzQ1MjRhMzQwOTE5NzRmN2M4ZTY3NTI2NGQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E5Yjg2MDNmYzIzMjRmNTE5NDIzYmVlMjc3NTc2YmUyID0gJCgnPGRpdiBpZD0iaHRtbF9hOWI4NjAzZmMyMzI0ZjUxOTQyM2JlZTI3NzU3NmJlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTg2M2MzNDUyNGEzNDA5MTk3NGY3YzhlNjc1MjY0ZDguc2V0Q29udGVudChodG1sX2E5Yjg2MDNmYzIzMjRmNTE5NDIzYmVlMjc3NTc2YmUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjZjE2NGFkNjEzNTQ1YjBiYTcwNWQ2NGIzYmU1NDc4LmJpbmRQb3B1cChwb3B1cF9lODYzYzM0NTI0YTM0MDkxOTc0ZjdjOGU2NzUyNjRkOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjc4YTU1MTJkMGU0ODRlODgwYmM0MDFhMjg0ODdiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MDEsLTExOC4yMzU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ1ZWJiNDQ0NmU1NDA5Nzk3ODQyMWYzMGNjNWEwZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWMyN2RjMTg5NzIwNDNlZjk3YzRjMmYzNzM2YzAxODAgPSAkKCc8ZGl2IGlkPSJodG1sXzVjMjdkYzE4OTcyMDQzZWY5N2M0YzJmMzczNmMwMTgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NDVlYmI0NDQ2ZTU0MDk3OTc4NDIxZjMwY2M1YTBlZi5zZXRDb250ZW50KGh0bWxfNWMyN2RjMTg5NzIwNDNlZjk3YzRjMmYzNzM2YzAxODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGI3OGE1NTEyZDBlNDg0ZTg4MGJjNDAxYTI4NDg3YmQuYmluZFBvcHVwKHBvcHVwXzk0NWViYjQ0NDZlNTQwOTc5Nzg0MjFmMzBjYzVhMGVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3NzI3YzM5ODBhYjQ1ODU5MzE3NTc2ZmQxZjE1OGNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ4OCwtMTE4LjI0ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iOWI1MDJkOTQzMTU0NmU3OTE5ZTlkNWQwMWU5Y2RmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTRmZTJiNzc5MDQ0OWFjODFkOGRiYTAxNGNhNDg2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzE0ZmUyYjc3OTA0NDlhYzgxZDhkYmEwMTRjYTQ4NmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5YjUwMmQ5NDMxNTQ2ZTc5MTllOWQ1ZDAxZTljZGY4LnNldENvbnRlbnQoaHRtbF8zMTRmZTJiNzc5MDQ0OWFjODFkOGRiYTAxNGNhNDg2ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNzcyN2MzOTgwYWI0NTg1OTMxNzU3NmZkMWYxNThjZC5iaW5kUG9wdXAocG9wdXBfYjliNTAyZDk0MzE1NDZlNzkxOWU5ZDVkMDFlOWNkZjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDY4NTgwYWM1NmJmNDMwMmFiZmQ4NjNlNDY0MmI0MmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDE5LC0xMTguMjQ4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxNzEwMDc3OWI1MjQ1ZjY4NzcwMzJlY2U0MDI2MzQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1ODI4ZTY2MTRmYjRhODNiYzdmNzBkZjM0ZDI3YjI4ID0gJCgnPGRpdiBpZD0iaHRtbF85NTgyOGU2NjE0ZmI0YTgzYmM3ZjcwZGYzNGQyN2IyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTE3MTAwNzc5YjUyNDVmNjg3NzAzMmVjZTQwMjYzNDQuc2V0Q29udGVudChodG1sXzk1ODI4ZTY2MTRmYjRhODNiYzdmNzBkZjM0ZDI3YjI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ2ODU4MGFjNTZiZjQzMDJhYmZkODYzZTQ2NDJiNDJiLmJpbmRQb3B1cChwb3B1cF85MTcxMDA3NzliNTI0NWY2ODc3MDMyZWNlNDAyNjM0NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOGIyMWU0MGMwNTY0MTY5YmYwZDcyZjg0ODliYWJkNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MzcsLTExOC4yNDU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWQ3MGM2M2IzYjZjNDc5ZGE4ZTJjMzAyMTQwNWZiYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDEzNzE4NWE5Y2NlNDIxMWIzZTM3NWU0N2M0MzgzMzMgPSAkKCc8ZGl2IGlkPSJodG1sXzAxMzcxODVhOWNjZTQyMTFiM2UzNzVlNDdjNDM4MzMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZDcwYzYzYjNiNmM0NzlkYThlMmMzMDIxNDA1ZmJhNy5zZXRDb250ZW50KGh0bWxfMDEzNzE4NWE5Y2NlNDIxMWIzZTM3NWU0N2M0MzgzMzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDhiMjFlNDBjMDU2NDE2OWJmMGQ3MmY4NDg5YmFiZDUuYmluZFBvcHVwKHBvcHVwXzlkNzBjNjNiM2I2YzQ3OWRhOGUyYzMwMjE0MDVmYmE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4OTE2OTkxOTc4NjRkM2NiNjE3YmFiNzdlZjM1OTY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ2NywtMTE4LjI1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzZDE3YWFmOTgxZTRkYTFiNTdlMWRlNmRmYzVjNzg4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjZWE1NzlkODE1ZjRmOWU5YzNjMmU3NTU4YjVlYWEwID0gJCgnPGRpdiBpZD0iaHRtbF9kY2VhNTc5ZDgxNWY0ZjllOWMzYzJlNzU1OGI1ZWFhMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNkMTdhYWY5ODFlNGRhMWI1N2UxZGU2ZGZjNWM3ODguc2V0Q29udGVudChodG1sX2RjZWE1NzlkODE1ZjRmOWU5YzNjMmU3NTU4YjVlYWEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M4OTE2OTkxOTc4NjRkM2NiNjE3YmFiNzdlZjM1OTY5LmJpbmRQb3B1cChwb3B1cF9lM2QxN2FhZjk4MWU0ZGExYjU3ZTFkZTZkZmM1Yzc4OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OGIyNDYxNmVjN2Y0MjgyYTY4MWRhYjhiNGE5NjU0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NjQsLTExOC4yNDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzgwNTQzZTZjZWE4NDI5Y2JlNTE2ZWFlNzU5ZDAzYjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmM0YzI2NGE3NTMyNDcyNjgxNGFiMWNhNmNkMDJlNTUgPSAkKCc8ZGl2IGlkPSJodG1sXzJjNGMyNjRhNzUzMjQ3MjY4MTRhYjFjYTZjZDAyZTU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODA1NDNlNmNlYTg0MjljYmU1MTZlYWU3NTlkMDNiNy5zZXRDb250ZW50KGh0bWxfMmM0YzI2NGE3NTMyNDcyNjgxNGFiMWNhNmNkMDJlNTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzhiMjQ2MTZlYzdmNDI4MmE2ODFkYWI4YjRhOTY1NDYuYmluZFBvcHVwKHBvcHVwXzc4MDU0M2U2Y2VhODQyOWNiZTUxNmVhZTc1OWQwM2I3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2MjA1ZmI3MTA3NDRkNTA5ZmI1NDQ0MDNkODhiMzIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ2NywtMTE4LjI0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyZWJmYzYyZjA3ZDQ5OWU4ZjkwODgxYjYxM2I3YTg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0NjQ0Zjg0N2M0YzRlMmRhMDE0OGU5ZjYwNmNiZWVmID0gJCgnPGRpdiBpZD0iaHRtbF9kNDY0NGY4NDdjNGM0ZTJkYTAxNDhlOWY2MDZjYmVlZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjJlYmZjNjJmMDdkNDk5ZThmOTA4ODFiNjEzYjdhODUuc2V0Q29udGVudChodG1sX2Q0NjQ0Zjg0N2M0YzRlMmRhMDE0OGU5ZjYwNmNiZWVmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2MjA1ZmI3MTA3NDRkNTA5ZmI1NDQ0MDNkODhiMzIyLmJpbmRQb3B1cChwb3B1cF9mMmViZmM2MmYwN2Q0OTllOGY5MDg4MWI2MTNiN2E4NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZWU0ZDkyMGU0Yjc0ZjZmOTgyNDc2NTc3Mzk0NzdkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MjMsLTExOC4yNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDdiMDk1MzRmNWI0NDBjNDg5ZTdjMjljMDk3ZmY2ZjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTk3MjY3NzI5ZTIwNDk2Y2E0OTYyYTdkOWI3NTk5NGQgPSAkKCc8ZGl2IGlkPSJodG1sX2E5NzI2NzcyOWUyMDQ5NmNhNDk2MmE3ZDliNzU5OTRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kN2IwOTUzNGY1YjQ0MGM0ODllN2MyOWMwOTdmZjZmMi5zZXRDb250ZW50KGh0bWxfYTk3MjY3NzI5ZTIwNDk2Y2E0OTYyYTdkOWI3NTk5NGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWVlNGQ5MjBlNGI3NGY2Zjk4MjQ3NjU3NzM5NDc3ZDQuYmluZFBvcHVwKHBvcHVwX2Q3YjA5NTM0ZjViNDQwYzQ4OWU3YzI5YzA5N2ZmNmYyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkMjA1MWQxYjlmMTRkYzM4ZGY3YTMwODlmZjFmMmU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ2NywtMTE4LjI0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84N2RlNTUyNzk2OWU0M2ZkOGNlYWU1YWVjZDAyMDU1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNjc5MDc2ODNhMzY0NDJlOGJhNWRmYWMzNTVjMDI2NSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDY3OTA3NjgzYTM2NDQyZThiYTVkZmFjMzU1YzAyNjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3ZGU1NTI3OTY5ZTQzZmQ4Y2VhZTVhZWNkMDIwNTUwLnNldENvbnRlbnQoaHRtbF9kNjc5MDc2ODNhMzY0NDJlOGJhNWRmYWMzNTVjMDI2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZDIwNTFkMWI5ZjE0ZGMzOGRmN2EzMDg5ZmYxZjJlNy5iaW5kUG9wdXAocG9wdXBfODdkZTU1Mjc5NjllNDNmZDhjZWFlNWFlY2QwMjA1NTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGExNmE3MTJlNDJlNDM3ZGEwODc0Nzg4YWE0MThlOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDc2LC0xMTguMjYzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI0YTc1OTZjMmFiNjRlYTQ5OGNlYTU1MjVlYmEyZDM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3M2Q5NzZjMTM2NjRhZWVhMzFjZmNlMDJkOWI0N2U0ID0gJCgnPGRpdiBpZD0iaHRtbF81NzNkOTc2YzEzNjY0YWVlYTMxY2ZjZTAyZDliNDdlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjRhNzU5NmMyYWI2NGVhNDk4Y2VhNTUyNWViYTJkMzQuc2V0Q29udGVudChodG1sXzU3M2Q5NzZjMTM2NjRhZWVhMzFjZmNlMDJkOWI0N2U0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBhMTZhNzEyZTQyZTQzN2RhMDg3NDc4OGFhNDE4ZThmLmJpbmRQb3B1cChwb3B1cF8yNGE3NTk2YzJhYjY0ZWE0OThjZWE1NTI1ZWJhMmQzNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OWJmY2NiMDc2Yjg0YTAwOTMzMmNjNWNmOGRhMzFiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NDIsLTExOC4yNTY2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDgzYTJlNDhiOTc4NDgxY2FmMDM3MjMwYzNmM2NlMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWM0ODVhMzIzN2QwNGZhMmFiN2M1MGFjYzAyOWY0NTYgPSAkKCc8ZGl2IGlkPSJodG1sXzVjNDg1YTMyMzdkMDRmYTJhYjdjNTBhY2MwMjlmNDU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kODNhMmU0OGI5Nzg0ODFjYWYwMzcyMzBjM2YzY2UxMi5zZXRDb250ZW50KGh0bWxfNWM0ODVhMzIzN2QwNGZhMmFiN2M1MGFjYzAyOWY0NTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODliZmNjYjA3NmI4NGEwMDkzMzJjYzVjZjhkYTMxYjcuYmluZFBvcHVwKHBvcHVwX2Q4M2EyZTQ4Yjk3ODQ4MWNhZjAzNzIzMGMzZjNjZTEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiYjJmZjE1OTk5NTQ2Nzk5MzViMDE1ZDliNzFlYWU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDM4NywtMTE4LjI0MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NWUxNTcyODM2ZDk0MDE2YjE2YmY0MjJjZmU2MzMwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzVmMWJjZGE2MTc0NjQ4OTdjMDI1MDA1MmQyYzU5MCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjM1ZjFiY2RhNjE3NDY0ODk3YzAyNTAwNTJkMmM1OTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1ZTE1NzI4MzZkOTQwMTZiMTZiZjQyMmNmZTYzMzA5LnNldENvbnRlbnQoaHRtbF8yMzVmMWJjZGE2MTc0NjQ4OTdjMDI1MDA1MmQyYzU5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYmIyZmYxNTk5OTU0Njc5OTM1YjAxNWQ5YjcxZWFlNy5iaW5kUG9wdXAocG9wdXBfOTVlMTU3MjgzNmQ5NDAxNmIxNmJmNDIyY2ZlNjMzMDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjM1YmFiNjllNTAxNDI4ZmJlNDUxYmM3MWIxMjc0OWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjI4LC0xMTguMjM5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyNjA5ZjcxMWQ5ODQyOWJiMWIxOTIyYmMzNjc5ZjE2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjYjhhYzU4ZDRkZjQzZTU4ODhiNjc5YWQxMGFlMGY4ID0gJCgnPGRpdiBpZD0iaHRtbF83Y2I4YWM1OGQ0ZGY0M2U1ODg4YjY3OWFkMTBhZTBmOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjI2MDlmNzExZDk4NDI5YmIxYjE5MjJiYzM2NzlmMTYuc2V0Q29udGVudChodG1sXzdjYjhhYzU4ZDRkZjQzZTU4ODhiNjc5YWQxMGFlMGY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzNWJhYjY5ZTUwMTQyOGZiZTQ1MWJjNzFiMTI3NDlkLmJpbmRQb3B1cChwb3B1cF9mMjYwOWY3MTFkOTg0MjliYjFiMTkyMmJjMzY3OWYxNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDc2ZWYyNWFmYzM0NGI2ODZhY2ZmMTJmOWE0Y2U1YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NzQsLTExOC4yNTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmY2ZmQ0ZDY3ZTExNDcxZmFhYjZkMjQ0MDk1YjZiM2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmIwYmNmNzcxMGY3NGYwMGE3MjY3NDhmZmM1YzUxYjQgPSAkKCc8ZGl2IGlkPSJodG1sXzJiMGJjZjc3MTBmNzRmMDBhNzI2NzQ4ZmZjNWM1MWI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjZmZDRkNjdlMTE0NzFmYWFiNmQyNDQwOTViNmIzYy5zZXRDb250ZW50KGh0bWxfMmIwYmNmNzcxMGY3NGYwMGE3MjY3NDhmZmM1YzUxYjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODA3NmVmMjVhZmMzNDRiNjg2YWNmZjEyZjlhNGNlNWMuYmluZFBvcHVwKHBvcHVwXzZmNmZkNGQ2N2UxMTQ3MWZhYWI2ZDI0NDA5NWI2YjNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjYTZkY2ZhYTZhMTRjNzI4NmFiMDZiYmJmZTE5NWJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYxOSwtMTE4LjIzNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hM2YzNmI2ODA2NDM0OWY4YjEwY2U0ZWFlODUyZjBlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZTc4ZTY2ZTViMzI0ZjE5OGIxMDJhZTEyMjM2Y2U4MCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWU3OGU2NmU1YjMyNGYxOThiMTAyYWUxMjIzNmNlODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EzZjM2YjY4MDY0MzQ5ZjhiMTBjZTRlYWU4NTJmMGU4LnNldENvbnRlbnQoaHRtbF85ZTc4ZTY2ZTViMzI0ZjE5OGIxMDJhZTEyMjM2Y2U4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wY2E2ZGNmYWE2YTE0YzcyODZhYjA2YmJiZmUxOTViZi5iaW5kUG9wdXAocG9wdXBfYTNmMzZiNjgwNjQzNDlmOGIxMGNlNGVhZTg1MmYwZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmIyOGM2MWFhNmZlNDBhZjk2Mzg0OGM2NzNlNDc2YTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDk1LC0xMTguMjUyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4NjZjNWE1NzEzYTQ4Mjg5YWU1MTEyYzI3NjIzNGMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4MmIxZDRmOWQ0OTQ1NjBiZTk4ZjMzNzVlNzc4NGM4ID0gJCgnPGRpdiBpZD0iaHRtbF81ODJiMWQ0ZjlkNDk0NTYwYmU5OGYzMzc1ZTc3ODRjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTg2NmM1YTU3MTNhNDgyODlhZTUxMTJjMjc2MjM0YzAuc2V0Q29udGVudChodG1sXzU4MmIxZDRmOWQ0OTQ1NjBiZTk4ZjMzNzVlNzc4NGM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiMjhjNjFhYTZmZTQwYWY5NjM4NDhjNjczZTQ3NmEzLmJpbmRQb3B1cChwb3B1cF9hODY2YzVhNTcxM2E0ODI4OWFlNTExMmMyNzYyMzRjMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wY2UyYzYwZTZiOTQ0NTI2OWFjYTM2MTNjYzY0NmJiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0OTUsLTExOC4yNTI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDhkZTNjYjIzYzIwNDNmMmJkMTE4ZDk3YzMwOWU2ZjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjExZGZhMjhlODllNDcwYjgxMTU4MmVlMjBmNTQxNTcgPSAkKCc8ZGl2IGlkPSJodG1sX2IxMWRmYTI4ZTg5ZTQ3MGI4MTE1ODJlZTIwZjU0MTU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wOGRlM2NiMjNjMjA0M2YyYmQxMThkOTdjMzA5ZTZmNi5zZXRDb250ZW50KGh0bWxfYjExZGZhMjhlODllNDcwYjgxMTU4MmVlMjBmNTQxNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGNlMmM2MGU2Yjk0NDUyNjlhY2EzNjEzY2M2NDZiYjkuYmluZFBvcHVwKHBvcHVwXzA4ZGUzY2IyM2MyMDQzZjJiZDExOGQ5N2MzMDllNmY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmMzlmMTY3YzdiNzQ1NDJiMjdkNjQxMjE5ODY5ZTM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQwOCwtMTE4LjI2NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZmFjMTdhMGM0NWE0Yjg3YTQ5ZDRiODE1MTBkMjEyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84Y2RmNTBiZDZhZTg0YzM5YWE3Mzk4MDliYTZmMWZiNyA9ICQoJzxkaXYgaWQ9Imh0bWxfOGNkZjUwYmQ2YWU4NGMzOWFhNzM5ODA5YmE2ZjFmYjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBmYWMxN2EwYzQ1YTRiODdhNDlkNGI4MTUxMGQyMTI1LnNldENvbnRlbnQoaHRtbF84Y2RmNTBiZDZhZTg0YzM5YWE3Mzk4MDliYTZmMWZiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZjM5ZjE2N2M3Yjc0NTQyYjI3ZDY0MTIxOTg2OWUzOC5iaW5kUG9wdXAocG9wdXBfMGZhYzE3YTBjNDVhNGI4N2E0OWQ0YjgxNTEwZDIxMjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGZjNzYxODJlMmM5NDFhMGIyYTc4YzNmMWFmZjUwMDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjI3LC0xMTguMjQ2M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxN2I5ODQ5MzRiMjRjODRiZjZkNmUzM2NkY2Y2ZDJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3YjViYTYyN2FjOTQ2ZDI4YjUyYWQ4YjE1ZTZjYmM0ID0gJCgnPGRpdiBpZD0iaHRtbF9mN2I1YmE2MjdhYzk0NmQyOGI1MmFkOGIxNWU2Y2JjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE3Yjk4NDkzNGIyNGM4NGJmNmQ2ZTMzY2RjZjZkMmMuc2V0Q29udGVudChodG1sX2Y3YjViYTYyN2FjOTQ2ZDI4YjUyYWQ4YjE1ZTZjYmM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmYzc2MTgyZTJjOTQxYTBiMmE3OGMzZjFhZmY1MDA2LmJpbmRQb3B1cChwb3B1cF9jMTdiOTg0OTM0YjI0Yzg0YmY2ZDZlMzNjZGNmNmQyYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOThiMjlkMWVlMzk0ZDgwYjI3MTFjNzI3ZTg0YWM0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NzIsLTExOC4yMzI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGIwYTczMzVhYWFhNGM4MmE0YTE2NWVlNDM3MWJjN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDRhY2IxZjk3YWQzNDFjNWIxZGEzMTA1OGRmYzAwZWIgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0YWNiMWY5N2FkMzQxYzViMWRhMzEwNThkZmMwMGViIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYjBhNzMzNWFhYWE0YzgyYTRhMTY1ZWU0MzcxYmM3ZS5zZXRDb250ZW50KGh0bWxfZDRhY2IxZjk3YWQzNDFjNWIxZGEzMTA1OGRmYzAwZWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTk4YjI5ZDFlZTM5NGQ4MGIyNzExYzcyN2U4NGFjNDAuYmluZFBvcHVwKHBvcHVwXzBiMGE3MzM1YWFhYTRjODJhNGExNjVlZTQzNzFiYzdlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjODliNjAyOWUyNzRhMTc5Njg5ZTEzM2FmZmU5ZmI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQwMSwtMTE4LjI2NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjQ1M2Y5NmQ1ZTQ0MDI3OThhNDEwOTdkNWUyMTgyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YWY4MjZhN2JmNDk0NzQyOGE3OWFjYmRiMmVhYjg5YiA9ICQoJzxkaXYgaWQ9Imh0bWxfNWFmODI2YTdiZjQ5NDc0MjhhNzlhY2JkYjJlYWI4OWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE2NDUzZjk2ZDVlNDQwMjc5OGE0MTA5N2Q1ZTIxODI3LnNldENvbnRlbnQoaHRtbF81YWY4MjZhN2JmNDk0NzQyOGE3OWFjYmRiMmVhYjg5Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzg5YjYwMjllMjc0YTE3OTY4OWUxMzNhZmZlOWZiNC5iaW5kUG9wdXAocG9wdXBfMTY0NTNmOTZkNWU0NDAyNzk4YTQxMDk3ZDVlMjE4MjcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGIxOTAzNGNjMDI0NGVkYWI5MTUwYzhiN2ZiMTk1ODQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTEyLC0xMTguMjM0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y4YTA3NjY5OGJkYzQzYzZiY2RiYjE1Njc5YmNjN2ExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUzNjAxMWUxZmUxNjQ2MjBhNDExMmEzNThjZDJjYTM3ID0gJCgnPGRpdiBpZD0iaHRtbF81MzYwMTFlMWZlMTY0NjIwYTQxMTJhMzU4Y2QyY2EzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjhhMDc2Njk4YmRjNDNjNmJjZGJiMTU2NzliY2M3YTEuc2V0Q29udGVudChodG1sXzUzNjAxMWUxZmUxNjQ2MjBhNDExMmEzNThjZDJjYTM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiMTkwMzRjYzAyNDRlZGFiOTE1MGM4YjdmYjE5NTg0LmJpbmRQb3B1cChwb3B1cF9mOGEwNzY2OThiZGM0M2M2YmNkYmIxNTY3OWJjYzdhMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZGU2YTYzZTk2ZDU0Y2IzYjA5YzA2YmU1MWM3ZDJiYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MjMsLTExOC4yNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTU3M2VmMDBiNzNjNDNiMjk4Mzk4ZWJmMjdlNjkxMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWUzMjhlYmU3M2I1NGZkYjllODcwZTI5ZmYxNjIxYTUgPSAkKCc8ZGl2IGlkPSJodG1sX2VlMzI4ZWJlNzNiNTRmZGI5ZTg3MGUyOWZmMTYyMWE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTczZWYwMGI3M2M0M2IyOTgzOThlYmYyN2U2OTEwMi5zZXRDb250ZW50KGh0bWxfZWUzMjhlYmU3M2I1NGZkYjllODcwZTI5ZmYxNjIxYTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGRlNmE2M2U5NmQ1NGNiM2IwOWMwNmJlNTFjN2QyYmMuYmluZFBvcHVwKHBvcHVwXzU1NzNlZjAwYjczYzQzYjI5ODM5OGViZjI3ZTY5MTAyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0MzIzNjUwMzdhNzQ2NjVhMGU4MzNiZTUyYmZmZDdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQxNiwtMTE4LjIzOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YjBiZDJjMTQ1ZTY0ZDA5OTUxZDg5MjI2OGQ3YThkMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjA0NTcyMDYxNGM0MjcxOWI1NTFhYTYyNDU0NzIxZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDYwNDU3MjA2MTRjNDI3MTliNTUxYWE2MjQ1NDcyMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiMGJkMmMxNDVlNjRkMDk5NTFkODkyMjY4ZDdhOGQyLnNldENvbnRlbnQoaHRtbF8wNjA0NTcyMDYxNGM0MjcxOWI1NTFhYTYyNDU0NzIxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNDMyMzY1MDM3YTc0NjY1YTBlODMzYmU1MmJmZmQ3ZC5iaW5kUG9wdXAocG9wdXBfN2IwYmQyYzE0NWU2NGQwOTk1MWQ4OTIyNjhkN2E4ZDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGNjYzk0MWIzZTdlNDJkMmJhNzY5NjNjZTI0MTYxNmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDIxLC0xMTguMjQ2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2NjM3OGI5Njk2NjQyYzRiMTJiZGYwYTA4MTRjOWFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjMTViZTI1ZDU4NTRlODE4Y2NhMjJjN2UzMzY0MDQ2ID0gJCgnPGRpdiBpZD0iaHRtbF9kYzE1YmUyNWQ1ODU0ZTgxOGNjYTIyYzdlMzM2NDA0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjY2Mzc4Yjk2OTY2NDJjNGIxMmJkZjBhMDgxNGM5YWMuc2V0Q29udGVudChodG1sX2RjMTViZTI1ZDU4NTRlODE4Y2NhMjJjN2UzMzY0MDQ2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBjY2M5NDFiM2U3ZTQyZDJiYTc2OTYzY2UyNDE2MTZjLmJpbmRQb3B1cChwb3B1cF82NjYzNzhiOTY5NjY0MmM0YjEyYmRmMGEwODE0YzlhYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZWM5M2VkNjY3NGU0OGFiYjFkYTQwOWEyZDdjMjFjOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2MTUsLTExOC4yNDEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjJlYmQyMmVhZTAwNDY3MDg3NjBhNzg2YTdkZWM2ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmFiM2U3NjU4MTQyNDMwNDkzYjVhMGQ5MTUxN2VhY2YgPSAkKCc8ZGl2IGlkPSJodG1sX2ZhYjNlNzY1ODE0MjQzMDQ5M2I1YTBkOTE1MTdlYWNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMmViZDIyZWFlMDA0NjcwODc2MGE3ODZhN2RlYzZkNi5zZXRDb250ZW50KGh0bWxfZmFiM2U3NjU4MTQyNDMwNDkzYjVhMGQ5MTUxN2VhY2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmVjOTNlZDY2NzRlNDhhYmIxZGE0MDlhMmQ3YzIxYzkuYmluZFBvcHVwKHBvcHVwX2IyZWJkMjJlYWUwMDQ2NzA4NzYwYTc4NmE3ZGVjNmQ2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVmZjAzNDA1NWYyMzRlN2Q5NjU4NzIzMjA3MzdlN2UyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYzMiwtMTE4LjIzNDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MjhiYWI1ZjgxM2U0OTM0OWMwZjRlYWM4YTY4OTMyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMDllYmNjMWVkMjM0NzE3YjZiZmZlY2ZhZTVlZmU3MCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzA5ZWJjYzFlZDIzNDcxN2I2YmZmZWNmYWU1ZWZlNzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUyOGJhYjVmODEzZTQ5MzQ5YzBmNGVhYzhhNjg5MzJjLnNldENvbnRlbnQoaHRtbF8zMDllYmNjMWVkMjM0NzE3YjZiZmZlY2ZhZTVlZmU3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZmYwMzQwNTVmMjM0ZTdkOTY1ODcyMzIwNzM3ZTdlMi5iaW5kUG9wdXAocG9wdXBfNTI4YmFiNWY4MTNlNDkzNDljMGY0ZWFjOGE2ODkzMmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFjZWE2NDlkNzkyNDU1NjhlMTcxNzJiNGNkYjg3YjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDMzLC0xMTguMjUwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0ZTYyYTdhOGFiYzRiYjI5Y2QxZWYxZjNmODU3YWViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiYjBiMDk2ZWY5YTQ4NWJhMzRhM2M2ZmE0MTkxODE4ID0gJCgnPGRpdiBpZD0iaHRtbF84YmIwYjA5NmVmOWE0ODViYTM0YTNjNmZhNDE5MTgxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTRlNjJhN2E4YWJjNGJiMjljZDFlZjFmM2Y4NTdhZWIuc2V0Q29udGVudChodG1sXzhiYjBiMDk2ZWY5YTQ4NWJhMzRhM2M2ZmE0MTkxODE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxY2VhNjQ5ZDc5MjQ1NTY4ZTE3MTcyYjRjZGI4N2IxLmJpbmRQb3B1cChwb3B1cF9hNGU2MmE3YThhYmM0YmIyOWNkMWVmMWYzZjg1N2FlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jOWVkZTIwN2M2ZmI0ZDdiODcwNzQ0NjgxOWU4MTE2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzODcsLTExOC4yNDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDcxMzQ0ZWMyNzc1NDdlZjgzODA4YWM2ZDI3NjYyZTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjQ0ZmE3ZWUwMDhlNDhmZWIwNzhhNjkxNjMwODYxMjEgPSAkKCc8ZGl2IGlkPSJodG1sX2I0NGZhN2VlMDA4ZTQ4ZmViMDc4YTY5MTYzMDg2MTIxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzEzNDRlYzI3NzU0N2VmODM4MDhhYzZkMjc2NjJlOC5zZXRDb250ZW50KGh0bWxfYjQ0ZmE3ZWUwMDhlNDhmZWIwNzhhNjkxNjMwODYxMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzllZGUyMDdjNmZiNGQ3Yjg3MDc0NDY4MTllODExNjEuYmluZFBvcHVwKHBvcHVwXzQ3MTM0NGVjMjc3NTQ3ZWY4MzgwOGFjNmQyNzY2MmU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzczMmYzODc1MTMyMjQyY2NiZDllOWI5MjQ0MjU3ODkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ4LC0xMTguMjU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdmYzUwMDdjZGE3ODQ2MmM5OGM3OTAzNmQ2NzEwNjY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0ZTI1ZjkxODlhMDQzYmQ4ZTQ2Y2ZjYTc3NTUyODk3ID0gJCgnPGRpdiBpZD0iaHRtbF80NGUyNWY5MTg5YTA0M2JkOGU0NmNmY2E3NzU1Mjg5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2ZjNTAwN2NkYTc4NDYyYzk4Yzc5MDM2ZDY3MTA2Njcuc2V0Q29udGVudChodG1sXzQ0ZTI1ZjkxODlhMDQzYmQ4ZTQ2Y2ZjYTc3NTUyODk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczMmYzODc1MTMyMjQyY2NiZDllOWI5MjQ0MjU3ODkxLmJpbmRQb3B1cChwb3B1cF83ZmM1MDA3Y2RhNzg0NjJjOThjNzkwMzZkNjcxMDY2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNGYzMmYxMmNjMzk0NTBhOGNmODM3NDZlMGM5ODEyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1ODMsLTExOC4yMzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzI5NjhjZmE3YTAyNDg3N2I2N2NlOGU4NmQ0MzM1ODcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWVjNjRhOGIzZDUwNGIyMzhjMGNmNDkwZmQ4NzYzNjUgPSAkKCc8ZGl2IGlkPSJodG1sXzVlYzY0YThiM2Q1MDRiMjM4YzBjZjQ5MGZkODc2MzY1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83Mjk2OGNmYTdhMDI0ODc3YjY3Y2U4ZTg2ZDQzMzU4Ny5zZXRDb250ZW50KGh0bWxfNWVjNjRhOGIzZDUwNGIyMzhjMGNmNDkwZmQ4NzYzNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjRmMzJmMTJjYzM5NDUwYThjZjgzNzQ2ZTBjOTgxMjIuYmluZFBvcHVwKHBvcHVwXzcyOTY4Y2ZhN2EwMjQ4NzdiNjdjZThlODZkNDMzNTg3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlNTNkZDcxM2QxYzQzNDk5NmFjNmIyN2EyZjZkMTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQzOCwtMTE4LjI1NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Y2I2MWM3ZTU0MDE0Y2ExYTg2MGY4MmQwMmQ5YTNiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZjVlMGU4ZTMwNGI0ZjlmYThjODE4YTUwZGQyOWUwYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGY1ZTBlOGUzMDRiNGY5ZmE4YzgxOGE1MGRkMjllMGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjYjYxYzdlNTQwMTRjYTFhODYwZjgyZDAyZDlhM2JlLnNldENvbnRlbnQoaHRtbF8wZjVlMGU4ZTMwNGI0ZjlmYThjODE4YTUwZGQyOWUwYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZTUzZGQ3MTNkMWM0MzQ5OTZhYzZiMjdhMmY2ZDE2OC5iaW5kUG9wdXAocG9wdXBfNmNiNjFjN2U1NDAxNGNhMWE4NjBmODJkMDJkOWEzYmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg4ZjkxOGEzZWVjNDFhYmJkNDg1Mjc5NTA4ZDE3MTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDYxLC0xMTguMjgwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjZjI0MWRkMDg5NTQwNmFhZmQ5NGFkNzc1ZmU0MzU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0NWFmZTJkZGJkNDQ0NmNiNjAyMGI1ZThiN2Y1YjNjID0gJCgnPGRpdiBpZD0iaHRtbF8xNDVhZmUyZGRiZDQ0NDZjYjYwMjBiNWU4YjdmNWIzYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNmMjQxZGQwODk1NDA2YWFmZDk0YWQ3NzVmZTQzNTQuc2V0Q29udGVudChodG1sXzE0NWFmZTJkZGJkNDQ0NmNiNjAyMGI1ZThiN2Y1YjNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I4OGY5MThhM2VlYzQxYWJiZDQ4NTI3OTUwOGQxNzE2LmJpbmRQb3B1cChwb3B1cF81Y2YyNDFkZDA4OTU0MDZhYWZkOTRhZDc3NWZlNDM1NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMjZhMTE1MDAwOWU0MjA2YjUyMzZkMTg5NjI4YjY1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3NDgsLTExOC4yNTg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGExNWY3OWE2NWM0NDFjN2FiOGRiMDE4NGQxNTc5MGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTJkZDQzYTJjMmVhNDU4ZDhkNDQwMTZmYTA0MTYzMjYgPSAkKCc8ZGl2IGlkPSJodG1sXzkyZGQ0M2EyYzJlYTQ1OGQ4ZDQ0MDE2ZmEwNDE2MzI2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YTE1Zjc5YTY1YzQ0MWM3YWI4ZGIwMTg0ZDE1NzkwYS5zZXRDb250ZW50KGh0bWxfOTJkZDQzYTJjMmVhNDU4ZDhkNDQwMTZmYTA0MTYzMjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzI2YTExNTAwMDllNDIwNmI1MjM2ZDE4OTYyOGI2NTEuYmluZFBvcHVwKHBvcHVwXzhhMTVmNzlhNjVjNDQxYzdhYjhkYjAxODRkMTU3OTBhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0NWFiODcxNzNhOTQ3ODVhY2EzNjcxODQxNTE2MTY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDgzOSwtMTE4LjI3NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wODY5NjMyYzcxZTI0ZTEyOTE5ZjUzZjdhOWZmYzBlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTFiYzEzNzdkZjA0NjZlOTliM2EyOGVmYjE5OWI5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2UxYmMxMzc3ZGYwNDY2ZTk5YjNhMjhlZmIxOTliOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4Njk2MzJjNzFlMjRlMTI5MTlmNTNmN2E5ZmZjMGUyLnNldENvbnRlbnQoaHRtbF8zZTFiYzEzNzdkZjA0NjZlOTliM2EyOGVmYjE5OWI5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNDVhYjg3MTczYTk0Nzg1YWNhMzY3MTg0MTUxNjE2Ni5iaW5kUG9wdXAocG9wdXBfMDg2OTYzMmM3MWUyNGUxMjkxOWY1M2Y3YTlmZmMwZTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGVhNTM1MGI2YWZmNDY4NmE3NWE3OWIyZjEwNGM1YWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTQ5LC0xMTguMjc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyMWFkNDQ5ZmE2NDQzN2ZiNjIxY2ZmNzQ3ZTNiZDE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA2ZDc0MTg4ODZjMDRjMDFiM2I1NTdmMWFhZTA0ZGYzID0gJCgnPGRpdiBpZD0iaHRtbF8wNmQ3NDE4ODg2YzA0YzAxYjNiNTU3ZjFhYWUwNGRmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDIxYWQ0NDlmYTY0NDM3ZmI2MjFjZmY3NDdlM2JkMTkuc2V0Q29udGVudChodG1sXzA2ZDc0MTg4ODZjMDRjMDFiM2I1NTdmMWFhZTA0ZGYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhlYTUzNTBiNmFmZjQ2ODZhNzVhNzliMmYxMDRjNWFjLmJpbmRQb3B1cChwb3B1cF8wMjFhZDQ0OWZhNjQ0MzdmYjYyMWNmZjc0N2UzYmQxOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMWI1OWI4ODM2OTk0NjFiYmJlMDc5MWYzNTI0YmIxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NDksLTExOC4yNzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmJmZWEyZDA1OTY1NDE4N2IyZThhZjU5YTgxNTc1NjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjE4NzIzMzFkODcyNDFlOGE4MGE4Y2E5MzM2YzIzYTkgPSAkKCc8ZGl2IGlkPSJodG1sXzIxODcyMzMxZDg3MjQxZThhODBhOGNhOTMzNmMyM2E5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYmZlYTJkMDU5NjU0MTg3YjJlOGFmNTlhODE1NzU2My5zZXRDb250ZW50KGh0bWxfMjE4NzIzMzFkODcyNDFlOGE4MGE4Y2E5MzM2YzIzYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzFiNTliODgzNjk5NDYxYmJiZTA3OTFmMzUyNGJiMTkuYmluZFBvcHVwKHBvcHVwXzJiZmVhMmQwNTk2NTQxODdiMmU4YWY1OWE4MTU3NTYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmZjNlZTg1M2FkMDQ4YThhYmQ1N2ZiYWM0NzUzYzRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDgxNCwtMTE4LjI5NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZWI5ZjlhMGI2Mzg0ZjZjYjM3ZWJlYjYzOTk2ODk0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YmY1NTcwYjhmZTQ0M2JjODllNDY1M2M5YWRjNzk3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfNGJmNTU3MGI4ZmU0NDNiYzg5ZTQ2NTNjOWFkYzc5NzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RlYjlmOWEwYjYzODRmNmNiMzdlYmViNjM5OTY4OTRlLnNldENvbnRlbnQoaHRtbF80YmY1NTcwYjhmZTQ0M2JjODllNDY1M2M5YWRjNzk3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmYzZWU4NTNhZDA0OGE4YWJkNTdmYmFjNDc1M2M0Yy5iaW5kUG9wdXAocG9wdXBfZGViOWY5YTBiNjM4NGY2Y2IzN2ViZWI2Mzk5Njg5NGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWU3NjM4OTU2NDVjNDRiOGEzODVmNTIwNTQwOTRkZmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjcxLC0xMTguMjgwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZjYjc3ZWFlMTliMTRiYjI5MjZiNzNmM2RlNDFjNjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhMjFkYmI5MGU0NTRkNzU5MjlkYzI2ODE2N2M1Yjg5ID0gJCgnPGRpdiBpZD0iaHRtbF80YTIxZGJiOTBlNDU0ZDc1OTI5ZGMyNjgxNjdjNWI4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmNiNzdlYWUxOWIxNGJiMjkyNmI3M2YzZGU0MWM2OGMuc2V0Q29udGVudChodG1sXzRhMjFkYmI5MGU0NTRkNzU5MjlkYzI2ODE2N2M1Yjg5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FlNzYzODk1NjQ1YzQ0YjhhMzg1ZjUyMDU0MDk0ZGZhLmJpbmRQb3B1cChwb3B1cF82Y2I3N2VhZTE5YjE0YmIyOTI2YjczZjNkZTQxYzY4Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMjE3ODdkMzM0Njg0Mjc3YWI3NzdkNGRiYWM4YjgwZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2MzIsLTExOC4yNTEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWZiYWExODUwZGU1NDQ1ZGFmMGUzOWJjNWNiNTRhMTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmI4YmRlMDdhZWU4NDAyOGE0M2Y4ZmU2OWIyZTYzYTQgPSAkKCc8ZGl2IGlkPSJodG1sXzZiOGJkZTA3YWVlODQwMjhhNDNmOGZlNjliMmU2M2E0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZmJhYTE4NTBkZTU0NDVkYWYwZTM5YmM1Y2I1NGExOS5zZXRDb250ZW50KGh0bWxfNmI4YmRlMDdhZWU4NDAyOGE0M2Y4ZmU2OWIyZTYzYTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzIxNzg3ZDMzNDY4NDI3N2FiNzc3ZDRkYmFjOGI4MGUuYmluZFBvcHVwKHBvcHVwXzFmYmFhMTg1MGRlNTQ0NWRhZjBlMzliYzVjYjU0YTE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiODJjOGExZTFiNTQzMmE4ZjU3YzU1YzQ2OGI5YTMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU3MywtMTE4LjI2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMjIyOTFjZjNhOTg0ZDgzYjAzN2FhZjQyMTE4ZWVjMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDc5ZjA4Mzg2NzQ0MTI1OTIwMWE3OGJlM2Q3NzBjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQ3OWYwODM4Njc0NDEyNTkyMDFhNzhiZTNkNzcwY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyMjI5MWNmM2E5ODRkODNiMDM3YWFmNDIxMThlZWMwLnNldENvbnRlbnQoaHRtbF8zNDc5ZjA4Mzg2NzQ0MTI1OTIwMWE3OGJlM2Q3NzBjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYjgyYzhhMWUxYjU0MzJhOGY1N2M1NWM0NjhiOWEzMS5iaW5kUG9wdXAocG9wdXBfYjIyMjkxY2YzYTk4NGQ4M2IwMzdhYWY0MjExOGVlYzApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjc5NDg3MTlhYzAwNGQ0ZmJhOWNmYTBiMGNkNWRmNmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTksLTExOC4yNzM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTRiZTRhOGNkY2NmNDAzMzhmYzI1NTM3NjlkYmE3MGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGQwMzc3ZTU4YTg1NDM4NWJkN2Y3NTI4N2Y2YjZlMzggPSAkKCc8ZGl2IGlkPSJodG1sXzRkMDM3N2U1OGE4NTQzODViZDdmNzUyODdmNmI2ZTM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNGJlNGE4Y2RjY2Y0MDMzOGZjMjU1Mzc2OWRiYTcwZi5zZXRDb250ZW50KGh0bWxfNGQwMzc3ZTU4YTg1NDM4NWJkN2Y3NTI4N2Y2YjZlMzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjc5NDg3MTlhYzAwNGQ0ZmJhOWNmYTBiMGNkNWRmNmEuYmluZFBvcHVwKHBvcHVwX2E0YmU0YThjZGNjZjQwMzM4ZmMyNTUzNzY5ZGJhNzBmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4ZTEyN2QzNDJkMTQ5ZjhhMDJkMzNhNjQ0MzQ5OTQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU5OCwtMTE4LjI3MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODFjYjY5NjgzZTA0M2Y4OTBlYzkwNDRlMWMyZmI5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYTdiOTQ2MmNiZWE0MTVkYmI1ODE3NTQ0Mzk3NzBmMCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWE3Yjk0NjJjYmVhNDE1ZGJiNTgxNzU0NDM5NzcwZjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY4MWNiNjk2ODNlMDQzZjg5MGVjOTA0NGUxYzJmYjk2LnNldENvbnRlbnQoaHRtbF9hYTdiOTQ2MmNiZWE0MTVkYmI1ODE3NTQ0Mzk3NzBmMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOGUxMjdkMzQyZDE0OWY4YTAyZDMzYTY0NDM0OTk0MC5iaW5kUG9wdXAocG9wdXBfNjgxY2I2OTY4M2UwNDNmODkwZWM5MDQ0ZTFjMmZiOTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzhmNGNlOTkzNTE3NDIxN2E2Zjc0OGNmMjdjYmU3OTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODQ0LC0xMTguMjk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTUyOTFjZDMzOWNkNDRhYmJiMGFiMTRlZWE0NTA4MGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTI2MDE2MzU2ZmNmNGMyZDg1ZjZjM2ZmNWRkMzhlZmUgPSAkKCc8ZGl2IGlkPSJodG1sXzEyNjAxNjM1NmZjZjRjMmQ4NWY2YzNmZjVkZDM4ZWZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNTI5MWNkMzM5Y2Q0NGFiYmIwYWIxNGVlYTQ1MDgwZS5zZXRDb250ZW50KGh0bWxfMTI2MDE2MzU2ZmNmNGMyZDg1ZjZjM2ZmNWRkMzhlZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzhmNGNlOTkzNTE3NDIxN2E2Zjc0OGNmMjdjYmU3OTMuYmluZFBvcHVwKHBvcHVwXzE1MjkxY2QzMzljZDQ0YWJiYjBhYjE0ZWVhNDUwODBlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY2NWI0OTkzYjMzMDQxZjZiMDVhZjExNDAwN2UyY2YyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDUwNiwtMTE4LjI2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMWQ3YmRjNWE2OWU0NjU1OTE3MjI0MDM4ZDM1NzRhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81M2FjZWY1NWFjOTU0YTdmODJiYmI0Yjc5ZTVkYzhjNSA9ICQoJzxkaXYgaWQ9Imh0bWxfNTNhY2VmNTVhYzk1NGE3ZjgyYmJiNGI3OWU1ZGM4YzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExZDdiZGM1YTY5ZTQ2NTU5MTcyMjQwMzhkMzU3NGE3LnNldENvbnRlbnQoaHRtbF81M2FjZWY1NWFjOTU0YTdmODJiYmI0Yjc5ZTVkYzhjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NjViNDk5M2IzMzA0MWY2YjA1YWYxMTQwMDdlMmNmMi5iaW5kUG9wdXAocG9wdXBfMTFkN2JkYzVhNjllNDY1NTkxNzIyNDAzOGQzNTc0YTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjc2MjEyYmZhYWMzNGZjN2I2MDYwMWJjZjRlYWQ0NmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTk2LC0xMTguMjcwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzZjM3OWU2NzEzZDQ4NmZiZDk3NDliNjczYTkwZDRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxMjBiZTE1YzgzNDRhN2M4NzhiN2ZkNDljNTg5ZjZjID0gJCgnPGRpdiBpZD0iaHRtbF80MTIwYmUxNWM4MzQ0YTdjODc4YjdmZDQ5YzU4OWY2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNmMzc5ZTY3MTNkNDg2ZmJkOTc0OWI2NzNhOTBkNGQuc2V0Q29udGVudChodG1sXzQxMjBiZTE1YzgzNDRhN2M4NzhiN2ZkNDljNTg5ZjZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3NjIxMmJmYWFjMzRmYzdiNjA2MDFiY2Y0ZWFkNDZiLmJpbmRQb3B1cChwb3B1cF9lM2YzNzllNjcxM2Q0ODZmYmQ5NzQ5YjY3M2E5MGQ0ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYmM3ZjgwZjY2NGU0ODRjYWYzZmQ3NTc3MDRmMzE5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1OTYsLTExOC4yNzQ5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTM1ODMzOWI2NmY0NDg0OTgyNmVhNjJjMmQ2YjU2ZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTExOGFjMGRkMjBmNDlkNDgzZmE5YzA2NWNkZmI0NzYgPSAkKCc8ZGl2IGlkPSJodG1sXzExMThhYzBkZDIwZjQ5ZDQ4M2ZhOWMwNjVjZGZiNDc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzU4MzM5YjY2ZjQ0ODQ5ODI2ZWE2MmMyZDZiNTZkZS5zZXRDb250ZW50KGh0bWxfMTExOGFjMGRkMjBmNDlkNDgzZmE5YzA2NWNkZmI0NzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2JjN2Y4MGY2NjRlNDg0Y2FmM2ZkNzU3NzA0ZjMxOWEuYmluZFBvcHVwKHBvcHVwX2UzNTgzMzliNjZmNDQ4NDk4MjZlYTYyYzJkNmI1NmRlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcyNjQ1ODA4ZTE4NjQxY2Q4MTdmZWI5Njg2NmUxOGE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDY2MywtMTE4LjI3ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMmIzNGM5ZDhhNzE0OTc0ODg3NDdmYjMxNTJiYWMwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTY5ZWJlZGVlZjg0ZWE4YTU3NWNmOTM5MDQ5ODk4MCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTk2OWViZWRlZWY4NGVhOGE1NzVjZjkzOTA0OTg5ODAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyYjM0YzlkOGE3MTQ5NzQ4ODc0N2ZiMzE1MmJhYzBlLnNldENvbnRlbnQoaHRtbF9lOTY5ZWJlZGVlZjg0ZWE4YTU3NWNmOTM5MDQ5ODk4MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MjY0NTgwOGUxODY0MWNkODE3ZmViOTY4NjZlMThhNC5iaW5kUG9wdXAocG9wdXBfYjJiMzRjOWQ4YTcxNDk3NDg4NzQ3ZmIzMTUyYmFjMGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzgxZDc3OTAzNjVhNDQxNWJkYThhZjJlNTRjOTZiMTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTg0LC0xMTguMjgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDAwNWVlNGZkODJkNDkzOThlZDIyZTA3ZjA3ZGJkMTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjIyOTJiNGE1ZTUxNGRiYTk1OWZjOWQwNjFhNGFiZDkgPSAkKCc8ZGl2IGlkPSJodG1sXzYyMjkyYjRhNWU1MTRkYmE5NTlmYzlkMDYxYTRhYmQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMDA1ZWU0ZmQ4MmQ0OTM5OGVkMjJlMDdmMDdkYmQxMS5zZXRDb250ZW50KGh0bWxfNjIyOTJiNGE1ZTUxNGRiYTk1OWZjOWQwNjFhNGFiZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzgxZDc3OTAzNjVhNDQxNWJkYThhZjJlNTRjOTZiMTIuYmluZFBvcHVwKHBvcHVwXzAwMDVlZTRmZDgyZDQ5Mzk4ZWQyMmUwN2YwN2RiZDExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmMGNmZTNkYzI1NDQ3ZGQ4ZjM2MGJlNDFmZjFkYzRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDc4NiwtMTE4LjI3MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjhmZTY3OWFhODE0ODBlOTkzMjgxODE5ZGExNDdhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NGQyNmQ1ODc1OTA0OTQwODAxNTRmZDkxYTE4NzBlNSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTRkMjZkNTg3NTkwNDk0MDgwMTU0ZmQ5MWExODcwZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyOGZlNjc5YWE4MTQ4MGU5OTMyODE4MTlkYTE0N2E5LnNldENvbnRlbnQoaHRtbF85NGQyNmQ1ODc1OTA0OTQwODAxNTRmZDkxYTE4NzBlNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjBjZmUzZGMyNTQ0N2RkOGYzNjBiZTQxZmYxZGM0Yy5iaW5kUG9wdXAocG9wdXBfNDI4ZmU2NzlhYTgxNDgwZTk5MzI4MTgxOWRhMTQ3YTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjJlMjFhMzgzNmU0NGNlMTlmYTc3YjlmZTU4MDYwMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNzM4LC0xMTguMjY4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzZDY1MWYwZDk0NTRlZTFiMDQyNzNlNzFhNjU3OGY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlZWE4ZDY5NmRkZDQ5ZGQ5NDk4MGZhMzBhMWIwNWNjID0gJCgnPGRpdiBpZD0iaHRtbF9hZWVhOGQ2OTZkZGQ0OWRkOTQ5ODBmYTMwYTFiMDVjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDNkNjUxZjBkOTQ1NGVlMWIwNDI3M2U3MWE2NTc4Zjkuc2V0Q29udGVudChodG1sX2FlZWE4ZDY5NmRkZDQ5ZGQ5NDk4MGZhMzBhMWIwNWNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIyZTIxYTM4MzZlNDRjZTE5ZmE3N2I5ZmU1ODA2MDBiLmJpbmRQb3B1cChwb3B1cF9kM2Q2NTFmMGQ5NDU0ZWUxYjA0MjczZTcxYTY1NzhmOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MDRmZWFiZGNjMzY0Y2JlODM5ZTM5NjJlODU0NWI0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3NzYsLTExOC4yNjM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTA3ZmZiOTdiMGVhNDE4Mjg3NTkwYzRhYzFkY2MwYzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWIyZjRlZGM5NjYyNGJhNjhmMzhjOTgwMDI1NDEyMjIgPSAkKCc8ZGl2IGlkPSJodG1sXzViMmY0ZWRjOTY2MjRiYTY4ZjM4Yzk4MDAyNTQxMjIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMDdmZmI5N2IwZWE0MTgyODc1OTBjNGFjMWRjYzBjMy5zZXRDb250ZW50KGh0bWxfNWIyZjRlZGM5NjYyNGJhNjhmMzhjOTgwMDI1NDEyMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzA0ZmVhYmRjYzM2NGNiZTgzOWUzOTYyZTg1NDViNGUuYmluZFBvcHVwKHBvcHVwX2EwN2ZmYjk3YjBlYTQxODI4NzU5MGM0YWMxZGNjMGMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg0MGZhYjVmZWY2YTRmYjk4NTAwY2JkYmJhY2UyODg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU2NSwtMTE4LjI3NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYWJhMjIyNzgxZDE0ZTExODljM2IyODIwZDM1NWJmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTNhODgyMTg1YTA0ODJhYWZkMjY2YTRhYjkzN2Q3NyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGEzYTg4MjE4NWEwNDgyYWFmZDI2NmE0YWI5MzdkNzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhYmEyMjI3ODFkMTRlMTE4OWMzYjI4MjBkMzU1YmZiLnNldENvbnRlbnQoaHRtbF9kYTNhODgyMTg1YTA0ODJhYWZkMjY2YTRhYjkzN2Q3Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NDBmYWI1ZmVmNmE0ZmI5ODUwMGNiZGJiYWNlMjg4OC5iaW5kUG9wdXAocG9wdXBfYWFiYTIyMjc4MWQxNGUxMTg5YzNiMjgyMGQzNTViZmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTcyMmM4MDM3NGMyNGI1MjgxZWY5NTI2YTBkODdlOGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDc3LC0xMTguMjc1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1NmJkOTQ0ZWUxODRiOTliYTZiY2YxN2E2N2VhMzE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhZjdmMTkzNDYzNTQ4YWI4N2ZmNzQ5NzU3MGNmYjhjID0gJCgnPGRpdiBpZD0iaHRtbF9kYWY3ZjE5MzQ2MzU0OGFiODdmZjc0OTc1NzBjZmI4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTU2YmQ5NDRlZTE4NGI5OWJhNmJjZjE3YTY3ZWEzMTQuc2V0Q29udGVudChodG1sX2RhZjdmMTkzNDYzNTQ4YWI4N2ZmNzQ5NzU3MGNmYjhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE3MjJjODAzNzRjMjRiNTI4MWVmOTUyNmEwZDg3ZThkLmJpbmRQb3B1cChwb3B1cF8xNTZiZDk0NGVlMTg0Yjk5YmE2YmNmMTdhNjdlYTMxNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jN2M4YjZhNDBkNGE0NThjOGNjZWY3OWEwMTljNjNjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3ODEsLTExOC4yNzg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGNiYzcwMDI5MjZjNDRjZmI1ZmE0ODUzN2Y3ODQxYTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGMwNDA1M2ZjYzZlNDU4MTg4ZDA1ZTdlYzRhM2VlNmEgPSAkKCc8ZGl2IGlkPSJodG1sXzhjMDQwNTNmY2M2ZTQ1ODE4OGQwNWU3ZWM0YTNlZTZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wY2JjNzAwMjkyNmM0NGNmYjVmYTQ4NTM3Zjc4NDFhNy5zZXRDb250ZW50KGh0bWxfOGMwNDA1M2ZjYzZlNDU4MTg4ZDA1ZTdlYzRhM2VlNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzdjOGI2YTQwZDRhNDU4YzhjY2VmNzlhMDE5YzYzYzMuYmluZFBvcHVwKHBvcHVwXzBjYmM3MDAyOTI2YzQ0Y2ZiNWZhNDg1MzdmNzg0MWE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0YWZhNGE1NmJjNzQxNWFiYTZlM2Q1NmQwMGRjZTRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU5LC0xMTguMjczNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkZDM5NmI2N2VhOTQxMTlhMDNlY2VkMWNjNzQ2MjcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliMWRlMzRiNWNlZTRmNGZiMWY1OGMxMDVmZGMxMzFlID0gJCgnPGRpdiBpZD0iaHRtbF85YjFkZTM0YjVjZWU0ZjRmYjFmNThjMTA1ZmRjMTMxZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRkMzk2YjY3ZWE5NDExOWEwM2VjZWQxY2M3NDYyNzAuc2V0Q29udGVudChodG1sXzliMWRlMzRiNWNlZTRmNGZiMWY1OGMxMDVmZGMxMzFlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0YWZhNGE1NmJjNzQxNWFiYTZlM2Q1NmQwMGRjZTRiLmJpbmRQb3B1cChwb3B1cF8yZGQzOTZiNjdlYTk0MTE5YTAzZWNlZDFjYzc0NjI3MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTY0NDM2Y2I2ODg0NTY1YjJkNDIxMTUxMzNiZTkxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NTksLTExOC4yNzU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDRkYzcyNmEzY2NjNDc5Y2E0OTI4OGRkOTlmZDUzZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjdjZjE3YmUyZjAzNGYyYzk5NjdmNjA5ZjZhZTVhNmEgPSAkKCc8ZGl2IGlkPSJodG1sXzI3Y2YxN2JlMmYwMzRmMmM5OTY3ZjYwOWY2YWU1YTZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NGRjNzI2YTNjY2M0NzljYTQ5Mjg4ZGQ5OWZkNTNkZS5zZXRDb250ZW50KGh0bWxfMjdjZjE3YmUyZjAzNGYyYzk5NjdmNjA5ZjZhZTVhNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWU2NDQzNmNiNjg4NDU2NWIyZDQyMTE1MTMzYmU5MWMuYmluZFBvcHVwKHBvcHVwXzQ0ZGM3MjZhM2NjYzQ3OWNhNDkyODhkZDk5ZmQ1M2RlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0ODFlZjczNTk3NjRkOTdiNWQ5YzE5ZGFiYzE0ODQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDc0MiwtMTE4LjI1MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZGIxNzZhNTA2MmQ0MWY0ODc1ZDVkZjViMmMyNTA1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNmViY2Q1ZDQ4MzY0M2FiODM4N2FjODA5Yjk3NDQzOSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDZlYmNkNWQ0ODM2NDNhYjgzODdhYzgwOWI5NzQ0MzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFkYjE3NmE1MDYyZDQxZjQ4NzVkNWRmNWIyYzI1MDViLnNldENvbnRlbnQoaHRtbF9kNmViY2Q1ZDQ4MzY0M2FiODM4N2FjODA5Yjk3NDQzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNDgxZWY3MzU5NzY0ZDk3YjVkOWMxOWRhYmMxNDg0OC5iaW5kUG9wdXAocG9wdXBfMWRiMTc2YTUwNjJkNDFmNDg3NWQ1ZGY1YjJjMjUwNWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDBkNmFmNGRlZDY5NDYyZmJhZjRiZTJhYzBkNzdhMDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzA1LC0xMTguMzYxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNWM2YzcwMTQwYTQ4MDJhMjczYTFjYzJiZDQxYmE4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk1MjRiMTQzNjVkODRiMjBhZmRhZGIyMGVkMDU0ZjEyID0gJCgnPGRpdiBpZD0iaHRtbF85NTI0YjE0MzY1ZDg0YjIwYWZkYWRiMjBlZDA1NGYxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjVjNmM3MDE0MGE0ODAyYTI3M2ExY2MyYmQ0MWJhOC5zZXRDb250ZW50KGh0bWxfOTUyNGIxNDM2NWQ4NGIyMGFmZGFkYjIwZWQwNTRmMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDBkNmFmNGRlZDY5NDYyZmJhZjRiZTJhYzBkNzdhMDUuYmluZFBvcHVwKHBvcHVwX2NiNWM2YzcwMTQwYTQ4MDJhMjczYTFjYzJiZDQxYmE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IyM2VhNTdkY2VmYTQwNTA4N2E2NWNkMjgxZWZkYTkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDExLC0xMTguMzM1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMxNGFiMjlmY2EwZjQ1NTdiNmE3YzUzMDBmYTRiZmJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJhZTJkNDQ5ZmU4ODQ5ZWFhNmQ5Y2YwMGRiYzc5ZmU5ID0gJCgnPGRpdiBpZD0iaHRtbF8yYWUyZDQ0OWZlODg0OWVhYTZkOWNmMDBkYmM3OWZlOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMTRhYjI5ZmNhMGY0NTU3YjZhN2M1MzAwZmE0YmZiZS5zZXRDb250ZW50KGh0bWxfMmFlMmQ0NDlmZTg4NDllYWE2ZDljZjAwZGJjNzlmZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjIzZWE1N2RjZWZhNDA1MDg3YTY1Y2QyODFlZmRhOTEuYmluZFBvcHVwKHBvcHVwXzMxNGFiMjlmY2EwZjQ1NTdiNmE3YzUzMDBmYTRiZmJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg0N2U5Y2U3N2NhOTQ4YTk4ZTIzMzM4YTE0YmI5ZTZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI3OCwtMTE4LjMzNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NzNhOWQzODUzY2Q0NzU4OTJjZTcwNjMxYTMyM2Q1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOGU2NTE2ZmY5YWI0NzdjOWE4Zjc2YTlhY2RkNmI2MiA9ICQoJzxkaXYgaWQ9Imh0bWxfZThlNjUxNmZmOWFiNDc3YzlhOGY3NmE5YWNkZDZiNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTczYTlkMzg1M2NkNDc1ODkyY2U3MDYzMWEzMjNkNTUuc2V0Q29udGVudChodG1sX2U4ZTY1MTZmZjlhYjQ3N2M5YThmNzZhOWFjZGQ2YjYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0N2U5Y2U3N2NhOTQ4YTk4ZTIzMzM4YTE0YmI5ZTZkLmJpbmRQb3B1cChwb3B1cF81NzNhOWQzODUzY2Q0NzU4OTJjZTcwNjMxYTMyM2Q1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MGY3MTE3NjBjNzA0MDMzYmQwOGY1ZWE0NzU5ZTBjMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzNDIsLTExOC4yODE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGI3NGRlZDI0M2Y0NDhjMmJmYTUxNzRmMTJjM2JmMTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWZkY2JmOTFmMzFhNDIyOGI4ZjA3NmM4ZjMxMmYxYmIgPSAkKCc8ZGl2IGlkPSJodG1sXzFmZGNiZjkxZjMxYTQyMjhiOGYwNzZjOGYzMTJmMWJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiNzRkZWQyNDNmNDQ4YzJiZmE1MTc0ZjEyYzNiZjE0LnNldENvbnRlbnQoaHRtbF8xZmRjYmY5MWYzMWE0MjI4YjhmMDc2YzhmMzEyZjFiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MGY3MTE3NjBjNzA0MDMzYmQwOGY1ZWE0NzU5ZTBjMS5iaW5kUG9wdXAocG9wdXBfOGI3NGRlZDI0M2Y0NDhjMmJmYTUxNzRmMTJjM2JmMTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2I3MGEyYzg5ZGZjNDc5MjlkOTllNTM3MTUwMDMyODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTQyLC0xMTguMzA4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxMzYwOWI1NzAxZTQyY2ViNmYwODdlOGVjYWQ4MDU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiNjA5YzY3YmZjYzRkNWRhZWM3MTlkNzI3YTFmNDVjID0gJCgnPGRpdiBpZD0iaHRtbF9hYjYwOWM2N2JmY2M0ZDVkYWVjNzE5ZDcyN2ExZjQ1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMTM2MDliNTcwMWU0MmNlYjZmMDg3ZThlY2FkODA1OC5zZXRDb250ZW50KGh0bWxfYWI2MDljNjdiZmNjNGQ1ZGFlYzcxOWQ3MjdhMWY0NWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2I3MGEyYzg5ZGZjNDc5MjlkOTllNTM3MTUwMDMyODkuYmluZFBvcHVwKHBvcHVwX2MxMzYwOWI1NzAxZTQyY2ViNmYwODdlOGVjYWQ4MDU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiODU4NjA5ZmRlYTRiNGM4ZDRiNDc0YTVmZWE1YWI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE2MywtMTE4LjM1MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNDhmZWNlMjBkZGY0M2Y3ODc1YzE0YTA1ZjQxY2RmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZDQyZmIwMmI0YTM0MDZkYjVlZTdkZDFhZmMyMzkxZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmQ0MmZiMDJiNGEzNDA2ZGI1ZWU3ZGQxYWZjMjM5MWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQ4ZmVjZTIwZGRmNDNmNzg3NWMxNGEwNWY0MWNkZjQuc2V0Q29udGVudChodG1sXzJkNDJmYjAyYjRhMzQwNmRiNWVlN2RkMWFmYzIzOTFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiODU4NjA5ZmRlYTRiNGM4ZDRiNDc0YTVmZWE1YWI1LmJpbmRQb3B1cChwb3B1cF9lNDhmZWNlMjBkZGY0M2Y3ODc1YzE0YTA1ZjQxY2RmNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OTQwNTc5ZDU3Nzc0YWQ3OWE4ZTk5MTJkYTUzOWFkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzNiwtMTE4LjI5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDYwZTlkZTM4M2Q0NjE2OTFhOTQyN2VjODc5Mjc1OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wY2I5YzljMzYyZjQ0Njk1OWNmM2U0MDQzY2Y1MzIzMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGNiOWM5YzM2MmY0NDY5NTljZjNlNDA0M2NmNTMyMzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA2MGU5ZGUzODNkNDYxNjkxYTk0MjdlYzg3OTI3NTguc2V0Q29udGVudChodG1sXzBjYjljOWMzNjJmNDQ2OTU5Y2YzZTQwNDNjZjUzMjMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg5NDA1NzlkNTc3NzRhZDc5YThlOTkxMmRhNTM5YWQ0LmJpbmRQb3B1cChwb3B1cF80MDYwZTlkZTM4M2Q0NjE2OTFhOTQyN2VjODc5Mjc1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OThiNmNmNjBlYjE0Yjk4YTNlMDE2ZGM2YzJmZTAyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzMjcsLTExOC4zMDAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzYzNzVjNjc1ZWMwNDkwNWE0NWFmNTAxYjY0NGRlYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTUzMDFhOGNhNGYxNDY1Y2FiNmUwMjc0ZTZhYjM3ZmEgPSAkKCc8ZGl2IGlkPSJodG1sX2E1MzAxYThjYTRmMTQ2NWNhYjZlMDI3NGU2YWIzN2ZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2Mzc1YzY3NWVjMDQ5MDVhNDVhZjUwMWI2NDRkZWI4LnNldENvbnRlbnQoaHRtbF9hNTMwMWE4Y2E0ZjE0NjVjYWI2ZTAyNzRlNmFiMzdmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OThiNmNmNjBlYjE0Yjk4YTNlMDE2ZGM2YzJmZTAyMi5iaW5kUG9wdXAocG9wdXBfYzYzNzVjNjc1ZWMwNDkwNWE0NWFmNTAxYjY0NGRlYjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2Q0YTVlNjRhODg1NDRlYThlMDNiNDdhNzg4ZWFlMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjY4LC0xMTguMjgwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNmNDE0YTg5YzViYTRmYjM4MTY4NGMzZTg2NjE1NWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwODNjMGQyODJmMTQzOWM4ZWIyZjJkY2VjYjljMTA4ID0gJCgnPGRpdiBpZD0iaHRtbF82MDgzYzBkMjgyZjE0MzljOGViMmYyZGNlY2I5YzEwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjQxNGE4OWM1YmE0ZmIzODE2ODRjM2U4NjYxNTViZi5zZXRDb250ZW50KGh0bWxfNjA4M2MwZDI4MmYxNDM5YzhlYjJmMmRjZWNiOWMxMDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Q0YTVlNjRhODg1NDRlYThlMDNiNDdhNzg4ZWFlMTMuYmluZFBvcHVwKHBvcHVwXzNmNDE0YTg5YzViYTRmYjM4MTY4NGMzZTg2NjE1NWJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwMTAyNDQwNmJhYjRhMmE4NWEwZDYzNzk5YTg4NjY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE2LC0xMTguMzQ3M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdkOGIxNDlmNDg1ZDRkMWU5ZjRjN2YyMzFiZWEwMWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzMTFiZTI1YWU2YzQ5ZGRiOWEwMzVlNTU1ZDg2ZmM2ID0gJCgnPGRpdiBpZD0iaHRtbF9kMzExYmUyNWFlNmM0OWRkYjlhMDM1ZTU1NWQ4NmZjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZDhiMTQ5ZjQ4NWQ0ZDFlOWY0YzdmMjMxYmVhMDFiYy5zZXRDb250ZW50KGh0bWxfZDMxMWJlMjVhZTZjNDlkZGI5YTAzNWU1NTVkODZmYzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTAxMDI0NDA2YmFiNGEyYTg1YTBkNjM3OTlhODg2NjcuYmluZFBvcHVwKHBvcHVwXzdkOGIxNDlmNDg1ZDRkMWU5ZjRjN2YyMzFiZWEwMWJjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmYzE1ZWYwYzljYjQyNzU4ZjcxMTcwOTMwMjgzNTI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI1NSwtMTE4LjMwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FmNmQ0OTJiNjlmODQ0ODg4YTBjZTMzNzg2MzAxYzgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmNzQ0ODM3MTk0OTQ0MDhhMTI1YzhiNmY1NjQ0ODA2ID0gJCgnPGRpdiBpZD0iaHRtbF9lZjc0NDgzNzE5NDk0NDA4YTEyNWM4YjZmNTY0NDgwNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZjZkNDkyYjY5Zjg0NDg4OGEwY2UzMzc4NjMwMWM4MC5zZXRDb250ZW50KGh0bWxfZWY3NDQ4MzcxOTQ5NDQwOGExMjVjOGI2ZjU2NDQ4MDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGZjMTVlZjBjOWNiNDI3NThmNzExNzA5MzAyODM1MjYuYmluZFBvcHVwKHBvcHVwX2FmNmQ0OTJiNjlmODQ0ODg4YTBjZTMzNzg2MzAxYzgwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5MGYxMzdkMWRlNjQzNjQ5ODI5YmZiMmU0ZmIxYzUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDA2LC0xMTguMzI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTQ3Yjg4ZTdmMDY2NGIwNzg0NWM1MmU0OTRhNDczOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmM1M2JhZjA3M2M4NDg2MTk2YjU3ZDlmNzgyMTU2YWEgPSAkKCc8ZGl2IGlkPSJodG1sXzJjNTNiYWYwNzNjODQ4NjE5NmI1N2Q5Zjc4MjE1NmFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk0N2I4OGU3ZjA2NjRiMDc4NDVjNTJlNDk0YTQ3MzhmLnNldENvbnRlbnQoaHRtbF8yYzUzYmFmMDczYzg0ODYxOTZiNTdkOWY3ODIxNTZhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOTBmMTM3ZDFkZTY0MzY0OTgyOWJmYjJlNGZiMWM1Mi5iaW5kUG9wdXAocG9wdXBfOTQ3Yjg4ZTdmMDY2NGIwNzg0NWM1MmU0OTRhNDczOGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGVjZmNkMDc0YmYzNDhkYjg2YmI2YTExNTQyMTA2M2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODEsLTExOC4xNjY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjU3MjY2MWQyZjBiNGNhYjgxZjhhYjdmZDQzYmM0MWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjE0NTRlYmUzYWQ0NDNmZDhkMWNjMjg3NjU5Y2YwOGIgPSAkKCc8ZGl2IGlkPSJodG1sXzYxNDU0ZWJlM2FkNDQzZmQ4ZDFjYzI4NzY1OWNmMDhiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsZW5iZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTcyNjYxZDJmMGI0Y2FiODFmOGFiN2ZkNDNiYzQxYi5zZXRDb250ZW50KGh0bWxfNjE0NTRlYmUzYWQ0NDNmZDhkMWNjMjg3NjU5Y2YwOGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGVjZmNkMDc0YmYzNDhkYjg2YmI2YTExNTQyMTA2M2YuYmluZFBvcHVwKHBvcHVwXzY1NzI2NjFkMmYwYjRjYWI4MWY4YWI3ZmQ0M2JjNDFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1YjE5NjgxY2I2MzRiNDU4MmIwMDFhYzQ3ZjI1MjhhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDMyMiwtMTE4LjIxMTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MWY1ZWNiNTk5NjU0NzQxOTM2ZjI2MjQzNDIxN2IxMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMmU5Zjc0OWJmMDU0MTViYTllMDkwYjE4ZjZmYTBlMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjJlOWY3NDliZjA1NDE1YmE5ZTA5MGIxOGY2ZmEwZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxlbmJlY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxZjVlY2I1OTk2NTQ3NDE5MzZmMjYyNDM0MjE3YjEwLnNldENvbnRlbnQoaHRtbF8yMmU5Zjc0OWJmMDU0MTViYTllMDkwYjE4ZjZmYTBlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNWIxOTY4MWNiNjM0YjQ1ODJiMDAxYWM0N2YyNTI4YS5iaW5kUG9wdXAocG9wdXBfODFmNWVjYjU5OTY1NDc0MTkzNmYyNjI0MzQyMTdiMTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2I3ZTliMTY0ZjkwNDk0MmIwNjI0NTFiZGVkMzk5MTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjM2LC0xMTguMjAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2OWRhMGFlMTEzOTRiMDViOTg4M2M4NGJhZjJiMTBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVmNGM3ODBiNzA1NjQyM2JhZTkzZjZjM2IxZTEwMDRiID0gJCgnPGRpdiBpZD0iaHRtbF81ZjRjNzgwYjcwNTY0MjNiYWU5M2Y2YzNiMWUxMDA0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGVuYmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzY5ZGEwYWUxMTM5NGIwNWI5ODgzYzg0YmFmMmIxMGUuc2V0Q29udGVudChodG1sXzVmNGM3ODBiNzA1NjQyM2JhZTkzZjZjM2IxZTEwMDRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiN2U5YjE2NGY5MDQ5NDJiMDYyNDUxYmRlZDM5OTExLmJpbmRQb3B1cChwb3B1cF8zNjlkYTBhZTExMzk0YjA1Yjk4ODNjODRiYWYyYjEwZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDg2OGNiYzM0OTc0NTI3YWZmMmUzZWQyM2IzODU3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MzUsLTExOC4yMjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWJjYzhmMzY3N2U2NDMzMzhjNTZkYjcyOTBhMzUwNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTc1NTE1OTcyYmMxNDRkZmI4MjU0ZjJkNDA5NDc0NGMgPSAkKCc8ZGl2IGlkPSJodG1sXzE3NTUxNTk3MmJjMTQ0ZGZiODI1NGYyZDQwOTQ3NDRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsZW5iZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYmNjOGYzNjc3ZTY0MzMzOGM1NmRiNzI5MGEzNTA3NS5zZXRDb250ZW50KGh0bWxfMTc1NTE1OTcyYmMxNDRkZmI4MjU0ZjJkNDA5NDc0NGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2Q4NjhjYmMzNDk3NDUyN2FmZjJlM2VkMjNiMzg1NzMuYmluZFBvcHVwKHBvcHVwX2ViY2M4ZjM2NzdlNjQzMzM4YzU2ZGI3MjkwYTM1MDc1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3MjZiZGQ0ZmRmNjRjNDc4M2YyNmRiNTQ0N2I0ZmVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI0MSwtMTE4LjIwNTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGZlMjdhZTVlMjU0ZmNkOWUxZTQzNzEzOTc4MmUwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84Y2YyOTJjNTRhMjY0ODVjYTc0NmZjMmE0OTBiMmE0OSA9ICQoJzxkaXYgaWQ9Imh0bWxfOGNmMjkyYzU0YTI2NDg1Y2E3NDZmYzJhNDkwYjJhNDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxlbmJlY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwZmUyN2FlNWUyNTRmY2Q5ZTFlNDM3MTM5NzgyZTAzLnNldENvbnRlbnQoaHRtbF84Y2YyOTJjNTRhMjY0ODVjYTc0NmZjMmE0OTBiMmE0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NzI2YmRkNGZkZjY0YzQ3ODNmMjZkYjU0NDdiNGZlZS5iaW5kUG9wdXAocG9wdXBfMjBmZTI3YWU1ZTI1NGZjZDllMWU0MzcxMzk3ODJlMDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTk2YjlmOGVlMDE3NDk3YWI1ZjY0OGUyNmNmZTk1ZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjM2LC0xMTguMjAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JmNWQ0MzQ2NzM3NzRiMGY4MjEzZTQyMjAyY2FhOTAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjODFlZDA0ZjM2OTQyNWQ4NTk0Yzk2ZWUzMjgxODM2ID0gJCgnPGRpdiBpZD0iaHRtbF9lYzgxZWQwNGYzNjk0MjVkODU5NGM5NmVlMzI4MTgzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGVuYmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmY1ZDQzNDY3Mzc3NGIwZjgyMTNlNDIyMDJjYWE5MDIuc2V0Q29udGVudChodG1sX2VjODFlZDA0ZjM2OTQyNWQ4NTk0Yzk2ZWUzMjgxODM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk5NmI5ZjhlZTAxNzQ5N2FiNWY2NDhlMjZjZmU5NWRiLmJpbmRQb3B1cChwb3B1cF9iZjVkNDM0NjczNzc0YjBmODIxM2U0MjIwMmNhYTkwMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDNmOGU4OTI3NzI0NTVhOTZhMDUzNjc1NGVhNTM4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3MTksLTExOC4xNzc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2JlNWM5OTcyZTVmNDc4OGI0ZDlhYjA0NTY4YzNhMTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDBkMGIzMmFiZjJjNGVkZjgyMTRiMDJiNDhjNTc4MTkgPSAkKCc8ZGl2IGlkPSJodG1sXzQwZDBiMzJhYmYyYzRlZGY4MjE0YjAyYjQ4YzU3ODE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsZW5iZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmU1Yzk5NzJlNWY0Nzg4YjRkOWFiMDQ1NjhjM2ExOC5zZXRDb250ZW50KGh0bWxfNDBkMGIzMmFiZjJjNGVkZjgyMTRiMDJiNDhjNTc4MTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWQzZjhlODkyNzcyNDU1YTk2YTA1MzY3NTRlYTUzOGQuYmluZFBvcHVwKHBvcHVwX2NiZTVjOTk3MmU1ZjQ3ODhiNGQ5YWIwNDU2OGMzYTE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlMTljODQ0YjUxZjRhMWJhMmY4ZGM5YzIwN2QyNmE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQzNiwtMTE4LjIwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYzcwYmQ5ZWE4Zjc0NDA3YjFmMjI2OWJkZTBmMzYyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYmZhYjU2NjNiODM0Y2FlOWViNjRlN2E1ZTZjYTk2ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfY2JmYWI1NjYzYjgzNGNhZTllYjY0ZTdhNWU2Y2E5NmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxlbmJlY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RjNzBiZDllYThmNzQ0MDdiMWYyMjY5YmRlMGYzNjI2LnNldENvbnRlbnQoaHRtbF9jYmZhYjU2NjNiODM0Y2FlOWViNjRlN2E1ZTZjYTk2ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZTE5Yzg0NGI1MWY0YTFiYTJmOGRjOWMyMDdkMjZhOC5iaW5kUG9wdXAocG9wdXBfZGM3MGJkOWVhOGY3NDQwN2IxZjIyNjliZGUwZjM2MjYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTg5MGYxMGE4YzNjNGVjZjk3NDMwNDA0NjFmZWZmNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDYyLC0xMTguMjE1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjZjZlNWQxMTJmZDQ2MGZiZGU2YzFkZTI0Mzk2Y2M4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFjNTM5YjE4M2M4MzQzOWQ5MzlkYjNlZTJlY2YzOGI1ID0gJCgnPGRpdiBpZD0iaHRtbF8xYzUzOWIxODNjODM0MzlkOTM5ZGIzZWUyZWNmMzhiNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGVuYmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGNmNmU1ZDExMmZkNDYwZmJkZTZjMWRlMjQzOTZjYzguc2V0Q29udGVudChodG1sXzFjNTM5YjE4M2M4MzQzOWQ5MzlkYjNlZTJlY2YzOGI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E4OTBmMTBhOGMzYzRlY2Y5NzQzMDQwNDYxZmVmZjZiLmJpbmRQb3B1cChwb3B1cF80Y2Y2ZTVkMTEyZmQ0NjBmYmRlNmMxZGUyNDM5NmNjOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZDZlYjY3ODQ2YWE0MDFiOTkyNzNmMDU4NTE0MGE3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAyMjgsLTExOC4yMDA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWFhZjRkMTNlYmYyNDI1YmIzMjhiZDY4OTM1OTczNWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzgyZWI5NWM5ZjNjNDk4ZWIxMjFiMzVlYWZmZWU0Y2QgPSAkKCc8ZGl2IGlkPSJodG1sXzc4MmViOTVjOWYzYzQ5OGViMTIxYjM1ZWFmZmVlNGNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsZW5iZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YWFmNGQxM2ViZjI0MjViYjMyOGJkNjg5MzU5NzM1Zi5zZXRDb250ZW50KGh0bWxfNzgyZWI5NWM5ZjNjNDk4ZWIxMjFiMzVlYWZmZWU0Y2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWQ2ZWI2Nzg0NmFhNDAxYjk5MjczZjA1ODUxNDBhNzYuYmluZFBvcHVwKHBvcHVwXzlhYWY0ZDEzZWJmMjQyNWJiMzI4YmQ2ODkzNTk3MzVmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY0MWNlZGE4N2I1NzRjNTViMDBiNmMzOWY3OTY4ZGFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDg3MiwtMTE4LjE3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U3NmFkYzRlOGJkYzQ5YjQ4YzQ3YWUzZWY4Y2U2YzI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0ZDdlMmZkOWNlMDRjMWZhOGQ1OTdkYzY3YWIzYjQ1ID0gJCgnPGRpdiBpZD0iaHRtbF80NGQ3ZTJmZDljZTA0YzFmYThkNTk3ZGM2N2FiM2I0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGVuYmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTc2YWRjNGU4YmRjNDliNDhjNDdhZTNlZjhjZTZjMjQuc2V0Q29udGVudChodG1sXzQ0ZDdlMmZkOWNlMDRjMWZhOGQ1OTdkYzY3YWIzYjQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0MWNlZGE4N2I1NzRjNTViMDBiNmMzOWY3OTY4ZGFkLmJpbmRQb3B1cChwb3B1cF9lNzZhZGM0ZThiZGM0OWI0OGM0N2FlM2VmOGNlNmMyNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYjU2NmU0NjA2M2Q0ZTg3Yjg0MGM3YjEzODJhNzIzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NzEsLTExOC4xOTQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODNiMGI4Zjc5YWUyNGZmMDg4NGJjYzg2MmI0YzczNWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2RmYTg4MzI1MDAwNGY0NWFhZTk5OGNjZTBlYTAwMDggPSAkKCc8ZGl2IGlkPSJodG1sX2NkZmE4ODMyNTAwMDRmNDVhYWU5OThjY2UwZWEwMDA4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsZW5iZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84M2IwYjhmNzlhZTI0ZmYwODg0YmNjODYyYjRjNzM1YS5zZXRDb250ZW50KGh0bWxfY2RmYTg4MzI1MDAwNGY0NWFhZTk5OGNjZTBlYTAwMDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmI1NjZlNDYwNjNkNGU4N2I4NDBjN2IxMzgyYTcyM2UuYmluZFBvcHVwKHBvcHVwXzgzYjBiOGY3OWFlMjRmZjA4ODRiY2M4NjJiNGM3MzVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViYzQ0NWFmZjYwYjRkNTU4NThlMWY0MGUzNGViNmIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDY3NSwtMTE4LjIxNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzU4YmNjNGU5ZmE0ZDhiOWQzMTI4MWFiMzUzM2I2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iY2RkMzM3NzRmNDE0YTM2OGFhZTI0Y2YyZTU1NjU5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmNkZDMzNzc0ZjQxNGEzNjhhYWUyNGNmMmU1NTY1OWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxlbmJlY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjNThiY2M0ZTlmYTRkOGI5ZDMxMjgxYWIzNTMzYjYzLnNldENvbnRlbnQoaHRtbF9iY2RkMzM3NzRmNDE0YTM2OGFhZTI0Y2YyZTU1NjU5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYmM0NDVhZmY2MGI0ZDU1ODU4ZTFmNDBlMzRlYjZiMS5iaW5kUG9wdXAocG9wdXBfMmM1OGJjYzRlOWZhNGQ4YjlkMzEyODFhYjM1MzNiNjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2RhN2Q3ZmQyYzNhNDcxY2E4YWE3MTNlOTc2YmJlMzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTcsLTExOC4yMTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE2NzY3MDdiNmIyNGEyOTg5NzU3Yzk1MzM4MGYzMTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZThmYTRkZmE0OTA0NDFkYWI3NGNlMDExODAzNDRmOTMgPSAkKCc8ZGl2IGlkPSJodG1sX2U4ZmE0ZGZhNDkwNDQxZGFiNzRjZTAxMTgwMzQ0ZjkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsZW5iZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTY3NjcwN2I2YjI0YTI5ODk3NTdjOTUzMzgwZjMxMi5zZXRDb250ZW50KGh0bWxfZThmYTRkZmE0OTA0NDFkYWI3NGNlMDExODAzNDRmOTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2RhN2Q3ZmQyYzNhNDcxY2E4YWE3MTNlOTc2YmJlMzAuYmluZFBvcHVwKHBvcHVwXzUxNjc2NzA3YjZiMjRhMjk4OTc1N2M5NTMzODBmMzEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2MDQ4ODMwMmFiYTRjZWFiZmMxNWNiMzU5Y2JiOGM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQwNSwtMTE4LjIxNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZmE4NGNiZThjM2M0NzNmOTRkYTUzMTE2ZGM1NDA3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NDhiZDc2OTJkYzM0NzVjODkwNTJiY2VlY2M1MzMzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfODQ4YmQ3NjkyZGMzNDc1Yzg5MDUyYmNlZWNjNTMzMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxlbmJlY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmYTg0Y2JlOGMzYzQ3M2Y5NGRhNTMxMTZkYzU0MDc5LnNldENvbnRlbnQoaHRtbF84NDhiZDc2OTJkYzM0NzVjODkwNTJiY2VlY2M1MzMzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNjA0ODgzMDJhYmE0Y2VhYmZjMTVjYjM1OWNiYjhjNi5iaW5kUG9wdXAocG9wdXBfNmZhODRjYmU4YzNjNDczZjk0ZGE1MzExNmRjNTQwNzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzNkNWNiYzJlYzJmNGM2NzliODcwYzAxYTVlNWVlMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODMzLC0xMTguMTkwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4MTE0Yzc5NWNkNTQxOTQ4Yzc4NGQ4ZjFlY2Q2OWM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E4N2E3Y2ZjMzIxYTQ5OWViZWMwOGZhNWQ0MDdmZTgwID0gJCgnPGRpdiBpZD0iaHRtbF9hODdhN2NmYzMyMWE0OTllYmVjMDhmYTVkNDA3ZmU4MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGVuYmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzgxMTRjNzk1Y2Q1NDE5NDhjNzg0ZDhmMWVjZDY5YzQuc2V0Q29udGVudChodG1sX2E4N2E3Y2ZjMzIxYTQ5OWViZWMwOGZhNWQ0MDdmZTgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzczZDVjYmMyZWMyZjRjNjc5Yjg3MGMwMWE1ZTVlZTFiLmJpbmRQb3B1cChwb3B1cF9jODExNGM3OTVjZDU0MTk0OGM3ODRkOGYxZWNkNjljNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YjA4MDM4M2I5NTk0ZTBkYTI0ZTU4NDA1ZTdmNDlkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc0MTUsLTExOC4yODc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2ZlZDdkNjRkN2QyNDJiMmIwZjRhMGJmNzA5OTI5MzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWRmZmI2ODU3Yzc1NDY1NGE2MTk5MzEyMjM5NGM2Y2QgPSAkKCc8ZGl2IGlkPSJodG1sX2FkZmZiNjg1N2M3NTQ2NTRhNjE5OTMxMjIzOTRjNmNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXJib3I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NmZWQ3ZDY0ZDdkMjQyYjJiMGY0YTBiZjcwOTkyOTMyLnNldENvbnRlbnQoaHRtbF9hZGZmYjY4NTdjNzU0NjU0YTYxOTkzMTIyMzk0YzZjZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YjA4MDM4M2I5NTk0ZTBkYTI0ZTU4NDA1ZTdmNDlkNi5iaW5kUG9wdXAocG9wdXBfY2ZlZDdkNjRkN2QyNDJiMmIwZjRhMGJmNzA5OTI5MzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk1NWE1NjI0M2QwNDQ0ZTgxNjRmZDcxZjllYjM4ZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTE3LC0xMTguMjE3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2ZDQ5Njc0NjFmZDQ5MzBhMDE4ZGIzMWYzNjhkZTVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiMmY5YWU5NGUwMjQ5YWNhNGZmMDI5OTRhYTM0ZmNmID0gJCgnPGRpdiBpZD0iaHRtbF84YjJmOWFlOTRlMDI0OWFjYTRmZjAyOTk0YWEzNGZjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbGVuYmVjazwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjZkNDk2NzQ2MWZkNDkzMGEwMThkYjMxZjM2OGRlNWQuc2V0Q29udGVudChodG1sXzhiMmY5YWU5NGUwMjQ5YWNhNGZmMDI5OTRhYTM0ZmNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E5NTVhNTYyNDNkMDQ0NGU4MTY0ZmQ3MWY5ZWIzOGYxLmJpbmRQb3B1cChwb3B1cF8yNmQ0OTY3NDYxZmQ0OTMwYTAxOGRiMzFmMzY4ZGU1ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMjM0MWRmMzcyZDY0NTEzOTdhYmI2ODdhMDg3MWRjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA4MjYsLTExOC4xODY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmJjZTFmNTkzODNmNGIyNTk1NTQ3YjliOTA2Yzk2YjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2IzY2ZmN2NmNTQzNDkwNmExMjZiNDdlZjUwNzlkNDEgPSAkKCc8ZGl2IGlkPSJodG1sX2NiM2NmZjdjZjU0MzQ5MDZhMTI2YjQ3ZWY1MDc5ZDQxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xsZW5iZWNrPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYmNlMWY1OTM4M2Y0YjI1OTU1NDdiOWI5MDZjOTZiNC5zZXRDb250ZW50KGh0bWxfY2IzY2ZmN2NmNTQzNDkwNmExMjZiNDdlZjUwNzlkNDEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDIzNDFkZjM3MmQ2NDUxMzk3YWJiNjg3YTA4NzFkY2EuYmluZFBvcHVwKHBvcHVwX2JiY2UxZjU5MzgzZjRiMjU5NTU0N2I5YjkwNmM5NmI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxYzg0MmVhMDc0ODQ0MjViZGQzM2Y1MmU4YzkwOTMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYwOSwtMTE4LjIwNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTM5YzI2NjQ5M2Q0NWU2OTVjZjk0ZTg4MjczNzAzMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MDc2YWUzMzI3YzY0ZDFlYWRhODMzZDIzNGYyZTI3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTA3NmFlMzMyN2M2NGQxZWFkYTgzM2QyMzRmMmUyNzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGxlbmJlY2s8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QxMzljMjY2NDkzZDQ1ZTY5NWNmOTRlODgyNzM3MDMyLnNldENvbnRlbnQoaHRtbF81MDc2YWUzMzI3YzY0ZDFlYWRhODMzZDIzNGYyZTI3Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MWM4NDJlYTA3NDg0NDI1YmRkMzNmNTJlOGM5MDkzMy5iaW5kUG9wdXAocG9wdXBfZDEzOWMyNjY0OTNkNDVlNjk1Y2Y5NGU4ODI3MzcwMzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTNiZWNjYTk3YzdjNDBlY2E1NDcxNzgwZWEyZjhkZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy44NDQ4LC0xMTguMzA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODEzNTEzZWNlZGI2NDcyNTg1MTkxMWY0N2JiODk5NDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2NmMmYwZDQzNWFiNDk0YThkODQxODA1MWRiN2I5ZTUgPSAkKCc8ZGl2IGlkPSJodG1sXzNjZjJmMGQ0MzVhYjQ5NGE4ZDg0MTgwNTFkYjdiOWU1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXJib3I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxMzUxM2VjZWRiNjQ3MjU4NTE5MTFmNDdiYjg5OTQ1LnNldENvbnRlbnQoaHRtbF8zY2YyZjBkNDM1YWI0OTRhOGQ4NDE4MDUxZGI3YjllNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lM2JlY2NhOTdjN2M0MGVjYTU0NzE3ODBlYTJmOGRkMS5iaW5kUG9wdXAocG9wdXBfODEzNTEzZWNlZGI2NDcyNTg1MTkxMWY0N2JiODk5NDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjczNTQ5NDI3ZDkwNDFlYzg5Nzc5OGFhMDRkNzk1YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43ODY1LC0xMTguMjcyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzczMDI4Njc5ZTVkZTQyOGZiYzFlNjcwODYxZjNjZjFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhMTRlYjkxNjM0NTRmODY4NWNiMGViMDUyN2FiNDk3ID0gJCgnPGRpdiBpZD0iaHRtbF8zYTE0ZWI5MTYzNDU0Zjg2ODVjYjBlYjA1MjdhYjQ5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFyYm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MzAyODY3OWU1ZGU0MjhmYmMxZTY3MDg2MWYzY2YxYS5zZXRDb250ZW50KGh0bWxfM2ExNGViOTE2MzQ1NGY4Njg1Y2IwZWIwNTI3YWI0OTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjczNTQ5NDI3ZDkwNDFlYzg5Nzc5OGFhMDRkNzk1YTguYmluZFBvcHVwKHBvcHVwXzczMDI4Njc5ZTVkZTQyOGZiYzFlNjcwODYxZjNjZjFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5ZDgzMjYxMzIxODRmNjk4ZmM4ZTNjYWZlZjliNzUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzg0OCwtMTE4LjI2MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNjBjYTEyZDc4YWM0YjA3OThjYjZiMTllYTljYzBlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MjUyZmYzOTg4YTA0YzM1YjY4ZjAwNTQzYjFkZDQyMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzI1MmZmMzk4OGEwNGMzNWI2OGYwMDU0M2IxZGQ0MjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzYwY2ExMmQ3OGFjNGIwNzk4Y2I2YjE5ZWE5Y2MwZWIuc2V0Q29udGVudChodG1sXzcyNTJmZjM5ODhhMDRjMzViNjhmMDA1NDNiMWRkNDIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M5ZDgzMjYxMzIxODRmNjk4ZmM4ZTNjYWZlZjliNzUwLmJpbmRQb3B1cChwb3B1cF8zNjBjYTEyZDc4YWM0YjA3OThjYjZiMTllYTljYzBlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNmZkZTgzNDE3M2I0OGVlYTQzYjAyZDZmMzEzODQ2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjcyNywtMTE4LjMwMzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xM2FlZTgyMjg5OTk0NGI2YWJiYmI4ZTg3NGRkNTQ3NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZTI5MzNkNjBlZjE0YTVkOGNlM2M5YWNjOWRmOTYzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMWUyOTMzZDYwZWYxNGE1ZDhjZTNjOWFjYzlkZjk2MzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTNhZWU4MjI4OTk5NDRiNmFiYmJiOGU4NzRkZDU0NzUuc2V0Q29udGVudChodG1sXzFlMjkzM2Q2MGVmMTRhNWQ4Y2UzYzlhY2M5ZGY5NjMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2ZmRlODM0MTczYjQ4ZWVhNDNiMDJkNmYzMTM4NDY3LmJpbmRQb3B1cChwb3B1cF8xM2FlZTgyMjg5OTk0NGI2YWJiYmI4ZTg3NGRkNTQ3NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NGE3MzRlMTM2YWM0MzA0OTEyOWRlNmNhZjQwNmY2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjczMjEsLTExOC4yOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ODExM2NiZTUyZDk0MDA3YjNjOGI3YzdlNjU0ZDNkZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jY2JkOGJiNGVjYTc0MjllYTIwOGI2NGFkNTBkMzU5MSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2NiZDhiYjRlY2E3NDI5ZWEyMDhiNjRhZDUwZDM1OTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTgxMTNjYmU1MmQ5NDAwN2IzYzhiN2M3ZTY1NGQzZGQuc2V0Q29udGVudChodG1sX2NjYmQ4YmI0ZWNhNzQyOWVhMjA4YjY0YWQ1MGQzNTkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0YTczNGUxMzZhYzQzMDQ5MTI5ZGU2Y2FmNDA2ZjY0LmJpbmRQb3B1cChwb3B1cF85ODExM2NiZTUyZDk0MDA3YjNjOGI3YzdlNjU0ZDNkZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOWE2M2VkNDE1Mjk0MjJjYmNjMWM1NjlhMGY5OTU4ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc5NTgsLTExOC4yOTU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQ4ODA4MDYzOTcyNDI4ZWExMjQzMTdlM2JjMTg0Y2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDI3MWYzYWRhZWExNGNlMGJiNWJhZDlhZTZjNGExMzMgPSAkKCc8ZGl2IGlkPSJodG1sXzAyNzFmM2FkYWVhMTRjZTBiYjViYWQ5YWU2YzRhMTMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXJib3I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0ODgwODA2Mzk3MjQyOGVhMTI0MzE3ZTNiYzE4NGNkLnNldENvbnRlbnQoaHRtbF8wMjcxZjNhZGFlYTE0Y2UwYmI1YmFkOWFlNmM0YTEzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOWE2M2VkNDE1Mjk0MjJjYmNjMWM1NjlhMGY5OTU4ZC5iaW5kUG9wdXAocG9wdXBfMzQ4ODA4MDYzOTcyNDI4ZWExMjQzMTdlM2JjMTg0Y2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWU4ZDI0ZmM1MTY5NDRiZGIyZGJmZmFkODE3ZmFhMGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43ODY2LC0xMTguMzA0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3MzNkZjQwODYzYzRmY2Y5ODZmOWM2NWU5ZTlmMWNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5MDEyYzUzOWM5MDQ5NjNhNzIyZjk1YTEwZjRmYmFmID0gJCgnPGRpdiBpZD0iaHRtbF80OTAxMmM1MzljOTA0OTYzYTcyMmY5NWExMGY0ZmJhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFyYm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNzMzZGY0MDg2M2M0ZmNmOTg2ZjljNjVlOWU5ZjFjZC5zZXRDb250ZW50KGh0bWxfNDkwMTJjNTM5YzkwNDk2M2E3MjJmOTVhMTBmNGZiYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWU4ZDI0ZmM1MTY5NDRiZGIyZGJmZmFkODE3ZmFhMGQuYmluZFBvcHVwKHBvcHVwX2M3MzNkZjQwODYzYzRmY2Y5ODZmOWM2NWU5ZTlmMWNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5ZWM2ZGNiYWNkZjRhNjY4YTgyNDg2NGYyNDg3OTEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzA3OSwtMTE4LjI4NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iODQ1ZDlkYzg2ZWI0YTU4YWQwYmQ5ZWE3NDNhZmVlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGRmODRjNzEyMTg0Y2M5ODU0Zjk0MGJmNDA3NzExOSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhkZjg0YzcxMjE4NGNjOTg1NGY5NDBiZjQwNzcxMTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg0NWQ5ZGM4NmViNGE1OGFkMGJkOWVhNzQzYWZlZTIuc2V0Q29udGVudChodG1sXzQ4ZGY4NGM3MTIxODRjYzk4NTRmOTQwYmY0MDc3MTE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5ZWM2ZGNiYWNkZjRhNjY4YTgyNDg2NGYyNDg3OTEyLmJpbmRQb3B1cChwb3B1cF9iODQ1ZDlkYzg2ZWI0YTU4YWQwYmQ5ZWE3NDNhZmVlMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNmM3N2YwZjI3N2U0MzMxYmQzMzc3YzhlZWU2ZjVjOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjcyNywtMTE4LjI4NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNDkyYTllZDc4Yzc0ODVlOTIwZjk0YjljMDgyZWY4YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMGFiODQ1NjA4N2Y0NWQ3YjczMzFlNGMwYTg3YTMzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjBhYjg0NTYwODdmNDVkN2I3MzMxZTRjMGE4N2EzM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTQ5MmE5ZWQ3OGM3NDg1ZTkyMGY5NGI5YzA4MmVmOGIuc2V0Q29udGVudChodG1sXzIwYWI4NDU2MDg3ZjQ1ZDdiNzMzMWU0YzBhODdhMzNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI2Yzc3ZjBmMjc3ZTQzMzFiZDMzNzdjOGVlZTZmNWM4LmJpbmRQb3B1cChwb3B1cF9hNDkyYTllZDc4Yzc0ODVlOTIwZjk0YjljMDgyZWY4Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTZiZjI5MTFjMzg0NTgyOTZiZjI4ODIxMjgwMTBhNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc1MzcsLTExOC4zMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDdjOWUxOTZjN2M0NjE4YjYyZDY0ZTBlMDE5YzJhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZmI0MDA0ZjQ2NGE0NzNkOGMyNDU2NTNkNDkyY2ZlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmZiNDAwNGY0NjRhNDczZDhjMjQ1NjUzZDQ5MmNmZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2Q3YzllMTk2YzdjNDYxOGI2MmQ2NGUwZTAxOWMyYWUuc2V0Q29udGVudChodG1sX2ZmYjQwMDRmNDY0YTQ3M2Q4YzI0NTY1M2Q0OTJjZmVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhNmJmMjkxMWMzODQ1ODI5NmJmMjg4MjEyODAxMGE1LmJpbmRQb3B1cChwb3B1cF9jZDdjOWUxOTZjN2M0NjE4YjYyZDY0ZTBlMDE5YzJhZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lN2UxNDFhYjg2Y2E0MWI3OWM5ZGRhMGIzNzUzOTIwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjc3NTcsLTExOC4yNzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTlhYWUxMzEwZGIxNDU1N2FiNjhiYmMyNDYyZDllYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2U3MGRiYzMzOGUwNGU0YWJlOGIxYjI1ZTA3M2FhZWYgPSAkKCc8ZGl2IGlkPSJodG1sXzdlNzBkYmMzMzhlMDRlNGFiZThiMWIyNWUwNzNhYWVmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXJib3I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5YWFlMTMxMGRiMTQ1NTdhYjY4YmJjMjQ2MmQ5ZWM0LnNldENvbnRlbnQoaHRtbF83ZTcwZGJjMzM4ZTA0ZTRhYmU4YjFiMjVlMDczYWFlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lN2UxNDFhYjg2Y2E0MWI3OWM5ZGRhMGIzNzUzOTIwYi5iaW5kUG9wdXAocG9wdXBfZTlhYWUxMzEwZGIxNDU1N2FiNjhiYmMyNDYyZDllYzQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTA0NjIwNzUwOWY5NGZlNmFmMTEzMjJjZGI5YTJkMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43ODc1LC0xMTguMjQ3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEzZTQxNmRjMmQxNjRjZjdiMGZmYmFiZTI3YmIwZWVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1NWQ4ZmM3OWYwMzRkMjQ5MjA5MWUyNjViN2NkYzEyID0gJCgnPGRpdiBpZD0iaHRtbF80NTVkOGZjNzlmMDM0ZDI0OTIwOTFlMjY1YjdjZGMxMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFyYm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xM2U0MTZkYzJkMTY0Y2Y3YjBmZmJhYmUyN2JiMGVlYy5zZXRDb250ZW50KGh0bWxfNDU1ZDhmYzc5ZjAzNGQyNDkyMDkxZTI2NWI3Y2RjMTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTA0NjIwNzUwOWY5NGZlNmFmMTEzMjJjZGI5YTJkMjAuYmluZFBvcHVwKHBvcHVwXzEzZTQxNmRjMmQxNjRjZjdiMGZmYmFiZTI3YmIwZWVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmOGRlNGFkNTdmNzRiZDZhZjZhMWQ3NWQ3ZDA5YTc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuODA0OCwtMTE4LjIyMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZjM0YjNhZDRkNzc0NGFkYTFlMTk1NTUwZmE5NjA3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYWVmMTJhZGViNWI0YjViOWI2ZTFkZmM4ZjU0NjY1YiA9ICQoJzxkaXYgaWQ9Imh0bWxfZmFlZjEyYWRlYjViNGI1YjliNmUxZGZjOGY1NDY2NWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGYzNGIzYWQ0ZDc3NDRhZGExZTE5NTU1MGZhOTYwN2Uuc2V0Q29udGVudChodG1sX2ZhZWYxMmFkZWI1YjRiNWI5YjZlMWRmYzhmNTQ2NjViKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmOGRlNGFkNTdmNzRiZDZhZjZhMWQ3NWQ3ZDA5YTc4LmJpbmRQb3B1cChwb3B1cF84ZjM0YjNhZDRkNzc0NGFkYTFlMTk1NTUwZmE5NjA3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTU0ODc0ZTQ1Zjg0MGNmOTZkNGFhYzk1OTM0NTExMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjg2MjcsLTExOC4yOTQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzc4MWFlZmVkYWZkNDI3YTkxMGM1NWExYTkzN2I3OGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWYxNzRiOWE3MGFmNDRkMGE5Y2E0M2FmMTE4MzU4NzMgPSAkKCc8ZGl2IGlkPSJodG1sXzlmMTc0YjlhNzBhZjQ0ZDBhOWNhNDNhZjExODM1ODczIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXJib3I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3ODFhZWZlZGFmZDQyN2E5MTBjNTVhMWE5MzdiNzhmLnNldENvbnRlbnQoaHRtbF85ZjE3NGI5YTcwYWY0NGQwYTljYTQzYWYxMTgzNTg3Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTU0ODc0ZTQ1Zjg0MGNmOTZkNGFhYzk1OTM0NTExMS5iaW5kUG9wdXAocG9wdXBfNzc4MWFlZmVkYWZkNDI3YTkxMGM1NWExYTkzN2I3OGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzAxZjc0NTFmMzU5NDYyOTk1NGY1YjZiMzA3MDQ0OGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43OTQxLC0xMTguMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NDk3NDhmYmY1ODM0YjAxOTFkZjBjN2MyMGQ4YjAyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDc3MTFkNmVmZGQ0MGEzYWFlZmUyZGQ1M2Y1MTQ2ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWQ3NzExZDZlZmRkNDBhM2FhZWZlMmRkNTNmNTE0NmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQ5NzQ4ZmJmNTgzNGIwMTkxZGYwYzdjMjBkOGIwMjEuc2V0Q29udGVudChodG1sXzlkNzcxMWQ2ZWZkZDQwYTNhYWVmZTJkZDUzZjUxNDZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwMWY3NDUxZjM1OTQ2Mjk5NTRmNWI2YjMwNzA0NDhkLmJpbmRQb3B1cChwb3B1cF81NDk3NDhmYmY1ODM0YjAxOTFkZjBjN2MyMGQ4YjAyMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YjFmZjdiYWMzM2I0MWMyOGMzOGVhM2I5NzhkZmY2NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjgxMDIsLTExOC4zMDg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDg3YmQxMzBkNDgxNGIzOTg2Y2QzOGUxZmM1NzVjZTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWI4Nzg0MGE1YmViNDk5Mzg0OWQxNmM0NjVkZjczODUgPSAkKCc8ZGl2IGlkPSJodG1sX2FiODc4NDBhNWJlYjQ5OTM4NDlkMTZjNDY1ZGY3Mzg1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5IYXJib3I8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA4N2JkMTMwZDQ4MTRiMzk4NmNkMzhlMWZjNTc1Y2U2LnNldENvbnRlbnQoaHRtbF9hYjg3ODQwYTViZWI0OTkzODQ5ZDE2YzQ2NWRmNzM4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YjFmZjdiYWMzM2I0MWMyOGMzOGVhM2I5NzhkZmY2NS5iaW5kUG9wdXAocG9wdXBfMDg3YmQxMzBkNDgxNGIzOTg2Y2QzOGUxZmM1NzVjZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGNkYjA5ODEzMDM1NDEzOWJmNDRlNjFiYjdjOWM3MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy43NjI3LC0xMTguMjY2Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyNmNiNWQ2ZjRmZDQ5NjhiZTJiOGRmZTA1OGEwMmU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzNTU4MGE4ZDhjMTQ5NmNiN2YwMGU2NzNmOTI0YjE0ID0gJCgnPGRpdiBpZD0iaHRtbF82MzU1ODBhOGQ4YzE0OTZjYjdmMDBlNjczZjkyNGIxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SGFyYm9yPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMjZjYjVkNmY0ZmQ0OTY4YmUyYjhkZmUwNThhMDJlNy5zZXRDb250ZW50KGh0bWxfNjM1NTgwYThkOGMxNDk2Y2I3ZjAwZTY3M2Y5MjRiMTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGNkYjA5ODEzMDM1NDEzOWJmNDRlNjFiYjdjOWM3MWYuYmluZFBvcHVwKHBvcHVwX2QyNmNiNWQ2ZjRmZDQ5NjhiZTJiOGRmZTA1OGEwMmU3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4OTJiZWU1ZDk5NjRhMTdhMTJhYTAyZWYxNGFhM2RlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuNzM3OSwtMTE4LjMwNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MGFmMGFlMmRlNjk0MmM5YjY4ZDU0MzE1ZWQ1MGIwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Njc2OGM5ODgxNmU0M2E0YjcyZjQ0NDc4OTJhMzQ0MSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTY3NjhjOTg4MTZlNDNhNGI3MmY0NDQ3ODkyYTM0NDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhhcmJvcjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODBhZjBhZTJkZTY5NDJjOWI2OGQ1NDMxNWVkNTBiMDAuc2V0Q29udGVudChodG1sXzk2NzY4Yzk4ODE2ZTQzYTRiNzJmNDQ0Nzg5MmEzNDQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc4OTJiZWU1ZDk5NjRhMTdhMTJhYTAyZWYxNGFhM2RlLmJpbmRQb3B1cChwb3B1cF84MGFmMGFlMmRlNjk0MmM5YjY4ZDU0MzE1ZWQ1MGIwMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWNhYjJiMGM4YTc0M2QxOTk1MTcwMzUwNWM5YjMyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA5OTgsLTExOC4zMjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTU3NzYwNmUyYzA1NDkyOGIzY2Y0NDdhMmEyZjdmMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGIzZGQ2YTllNzQ0NDEyYWEzMzQxOWIzN2UwZjAyNzUgPSAkKCc8ZGl2IGlkPSJodG1sXzhiM2RkNmE5ZTc0NDQxMmFhMzM0MTliMzdlMGYwMjc1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1Nzc2MDZlMmMwNTQ5MjhiM2NmNDQ3YTJhMmY3ZjE2LnNldENvbnRlbnQoaHRtbF84YjNkZDZhOWU3NDQ0MTJhYTMzNDE5YjM3ZTBmMDI3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZWNhYjJiMGM4YTc0M2QxOTk1MTcwMzUwNWM5YjMyYy5iaW5kUG9wdXAocG9wdXBfZTU3NzYwNmUyYzA1NDkyOGIzY2Y0NDdhMmEyZjdmMTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjc3YmI3NjhkMDdkNGJhZTgwN2Y1MWUwYTAxNGE5YzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTgsLTExOC4zMzYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWU5NzkyNmE1MThkNDk1YjlhODljZTJkZTExNWQ4YmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk3OWNiMjJmNDlmNGI1ZWI0MWIxYmMyZmVjMmJiNmIgPSAkKCc8ZGl2IGlkPSJodG1sXzg5NzljYjIyZjQ5ZjRiNWViNDFiMWJjMmZlYzJiYjZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VlOTc5MjZhNTE4ZDQ5NWI5YTg5Y2UyZGUxMTVkOGJmLnNldENvbnRlbnQoaHRtbF84OTc5Y2IyMmY0OWY0YjVlYjQxYjFiYzJmZWMyYmI2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNzdiYjc2OGQwN2Q0YmFlODA3ZjUxZTBhMDE0YTljNy5iaW5kUG9wdXAocG9wdXBfZWU5NzkyNmE1MThkNDk1YjlhODljZTJkZTExNWQ4YmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQ3MzgzMTdmNzQ3NGYwNDg2YTdlNjg4Yzk2NDQzODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTg3LC0xMTguMzMzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzMDc1M2FiOWZhMzQ1OWNhOTdlYmY0NWVhZjk2ZmNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1MzYyY2RmYjU4MjQ5MDJhNDQzYmMyOGVlOWYzMjRiID0gJCgnPGRpdiBpZD0iaHRtbF9lNTM2MmNkZmI1ODI0OTAyYTQ0M2JjMjhlZTlmMzI0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzA3NTNhYjlmYTM0NTljYTk3ZWJmNDVlYWY5NmZjZC5zZXRDb250ZW50KGh0bWxfZTUzNjJjZGZiNTgyNDkwMmE0NDNiYzI4ZWU5ZjMyNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjQ3MzgzMTdmNzQ3NGYwNDg2YTdlNjg4Yzk2NDQzODguYmluZFBvcHVwKHBvcHVwX2UzMDc1M2FiOWZhMzQ1OWNhOTdlYmY0NWVhZjk2ZmNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0OWU3YTg5ZjVmYTQ1MzJhZTIxN2ZjNjU0OWQyNDM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTAxNiwtMTE4LjMzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiNTJmZDViNzI1ZjRlMzViMzZhODhmMDA0NmMwYWEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZjYTBkNzk1ZTdmMTQzZTE5YTdlYjJjZTA1OGZlYjRiID0gJCgnPGRpdiBpZD0iaHRtbF9mY2EwZDc5NWU3ZjE0M2UxOWE3ZWIyY2UwNThmZWI0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjUyZmQ1YjcyNWY0ZTM1YjM2YTg4ZjAwNDZjMGFhMC5zZXRDb250ZW50KGh0bWxfZmNhMGQ3OTVlN2YxNDNlMTlhN2ViMmNlMDU4ZmViNGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjQ5ZTdhODlmNWZhNDUzMmFlMjE3ZmM2NTQ5ZDI0MzkuYmluZFBvcHVwKHBvcHVwX2NiNTJmZDViNzI1ZjRlMzViMzZhODhmMDA0NmMwYWEwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwZTkxN2QzYTYzODQxYzA5ZDcxOGU3MTdhMDk3N2EyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDk4MSwtMTE4LjM1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JlOWM4YjIyMjg5MTRlMTI4YmNhYzM4ZWNhNmU3ZjQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiNWZhZDM4YWQwYjRiNDM5YzExZWU3Y2E4YzRiYmEyID0gJCgnPGRpdiBpZD0iaHRtbF84YjVmYWQzOGFkMGI0YjQzOWMxMWVlN2NhOGM0YmJhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZTljOGIyMjI4OTE0ZTEyOGJjYWMzOGVjYTZlN2Y0My5zZXRDb250ZW50KGh0bWxfOGI1ZmFkMzhhZDBiNGI0MzljMTFlZTdjYThjNGJiYTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzBlOTE3ZDNhNjM4NDFjMDlkNzE4ZTcxN2EwOTc3YTIuYmluZFBvcHVwKHBvcHVwX2JlOWM4YjIyMjg5MTRlMTI4YmNhYzM4ZWNhNmU3ZjQzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2OWI1MjRkZTBlNjRlZDg4YmQ3YWViMTk4ZWRjYzgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTAxNiwtMTE4LjM0MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZGY2Y2Y3YzhkNjA0Yjc2YjcyYWY1NjI3YmE2ODk2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGUzMjhkMDUwZTU0Y2E0OGM0ZTQyNTYyYzZkMzFkZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDBlMzI4ZDA1MGU1NGNhNDhjNGU0MjU2MmM2ZDMxZGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRmNmNmN2M4ZDYwNGI3NmI3MmFmNTYyN2JhNjg5NmIuc2V0Q29udGVudChodG1sX2QwZTMyOGQwNTBlNTRjYTQ4YzRlNDI1NjJjNmQzMWRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg2OWI1MjRkZTBlNjRlZDg4YmQ3YWViMTk4ZWRjYzgwLmJpbmRQb3B1cChwb3B1cF80ZGY2Y2Y3YzhkNjA0Yjc2YjcyYWY1NjI3YmE2ODk2Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYmNhMzdhYTI3ODk0ZjY2OTUwMjZmNGVlMWY1NWI5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjEwMTYsLTExOC4zMjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDBlNGQ2ZmViNGZhNDkwMzhlZjA4NDg3MzJmNmQzYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzI1MDFlNDQ1YTA1NDMxMGEwMjYzNWVjNDZjYWI3YTIgPSAkKCc8ZGl2IGlkPSJodG1sXzMyNTAxZTQ0NWEwNTQzMTBhMDI2MzVlYzQ2Y2FiN2EyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2QwZTRkNmZlYjRmYTQ5MDM4ZWYwODQ4NzMyZjZkM2I4LnNldENvbnRlbnQoaHRtbF8zMjUwMWU0NDVhMDU0MzEwYTAyNjM1ZWM0NmNhYjdhMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYmNhMzdhYTI3ODk0ZjY2OTUwMjZmNGVlMWY1NWI5YS5iaW5kUG9wdXAocG9wdXBfZDBlNGQ2ZmViNGZhNDkwMzhlZjA4NDg3MzJmNmQzYjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmNmNTE2Mjg5MWEzNDM3OThjN2Q5OTk4NGE1YWNjYjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xMDM0LC0xMTguMzMyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlNmM5MTJjYWI2NDQ3M2U4ZTdlY2NhYWRlNzVhYzZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhkOTRkY2MyNTliMDQxZWViNGRhNjI1YTlkOWI1NGFmID0gJCgnPGRpdiBpZD0iaHRtbF84ZDk0ZGNjMjU5YjA0MWVlYjRkYTYyNWE5ZDliNTRhZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTZjOTEyY2FiNjQ0NzNlOGU3ZWNjYWFkZTc1YWM2Yy5zZXRDb250ZW50KGh0bWxfOGQ5NGRjYzI1OWIwNDFlZWI0ZGE2MjVhOWQ5YjU0YWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmNmNTE2Mjg5MWEzNDM3OThjN2Q5OTk4NGE1YWNjYjQuYmluZFBvcHVwKHBvcHVwXzZlNmM5MTJjYWI2NDQ3M2U4ZTdlY2NhYWRlNzVhYzZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhNjUwYzlhNzA4NDQwOWRhZDVjZmE2OGZkNmYzMTUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTAwNiwtMTE4LjM0MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZWM4NmI3ZmYzNzI0MTRjYTI0OTkwN2VmMDRmMTBmZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYmEyOWM1N2I3NjE0YTAyYWNiZjg3ZDFjOGYyOGI5NyA9ICQoJzxkaXYgaWQ9Imh0bWxfY2JhMjljNTdiNzYxNGEwMmFjYmY4N2QxYzhmMjhiOTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2VjODZiN2ZmMzcyNDE0Y2EyNDk5MDdlZjA0ZjEwZmQuc2V0Q29udGVudChodG1sX2NiYTI5YzU3Yjc2MTRhMDJhY2JmODdkMWM4ZjI4Yjk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZhNjUwYzlhNzA4NDQwOWRhZDVjZmE2OGZkNmYzMTUwLmJpbmRQb3B1cChwb3B1cF9jZWM4NmI3ZmYzNzI0MTRjYTI0OTkwN2VmMDRmMTBmZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZGE4YWE3OGM2MDY0NmE1YjlhNTU0NzJmOTYzM2Q0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjEwMTgsLTExOC4zMDcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGI0Yjg4NmE5NTAxNDRiZjg5NDljMmRkZDgwYTFlNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2RlNGIzNWQyNTcxNDllNzg1ZGM3MmJhYTQ1MTZkNTMgPSAkKCc8ZGl2IGlkPSJodG1sXzNkZTRiMzVkMjU3MTQ5ZTc4NWRjNzJiYWE0NTE2ZDUzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiNGI4ODZhOTUwMTQ0YmY4OTQ5YzJkZGQ4MGExZTQxLnNldENvbnRlbnQoaHRtbF8zZGU0YjM1ZDI1NzE0OWU3ODVkYzcyYmFhNDUxNmQ1Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZGE4YWE3OGM2MDY0NmE1YjlhNTU0NzJmOTYzM2Q0MC5iaW5kUG9wdXAocG9wdXBfZGI0Yjg4NmE5NTAxNDRiZjg5NDljMmRkZDgwYTFlNDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTRjOWE0ZGE4YmRhNDhiY2IwOTAyMjJlYTkxNmNkN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTk4LC0xMTguMzMyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzYWFlYzc0ZjJlODRiNzliNmNjYzI0MmIwNDdlNDY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkZWE2ZTZjOTRjYTRjMDQ5NTgxOWNiMzVlOTFjMWZlID0gJCgnPGRpdiBpZD0iaHRtbF8wZGVhNmU2Yzk0Y2E0YzA0OTU4MTljYjM1ZTkxYzFmZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lM2FhZWM3NGYyZTg0Yjc5YjZjY2MyNDJiMDQ3ZTQ2OC5zZXRDb250ZW50KGh0bWxfMGRlYTZlNmM5NGNhNGMwNDk1ODE5Y2IzNWU5MWMxZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTRjOWE0ZGE4YmRhNDhiY2IwOTAyMjJlYTkxNmNkN2IuYmluZFBvcHVwKHBvcHVwX2UzYWFlYzc0ZjJlODRiNzliNmNjYzI0MmIwNDdlNDY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiZDgyYWYxZmExNDQ0OWNhODZkOWZhOTIxMmQxNGY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDk0NCwtMTE4LjM1MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOTJhNjE5OGMxOGQ0NjgyOWMzYWM4ZTQyNjFmNDM5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84ZDAwMDQ4YzI2MWE0NTNiOWZkNWExM2NjMmQ3ODg2ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGQwMDA0OGMyNjFhNDUzYjlmZDVhMTNjYzJkNzg4NmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjkyYTYxOThjMThkNDY4MjljM2FjOGU0MjYxZjQzOWMuc2V0Q29udGVudChodG1sXzhkMDAwNDhjMjYxYTQ1M2I5ZmQ1YTEzY2MyZDc4ODZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiZDgyYWYxZmExNDQ0OWNhODZkOWZhOTIxMmQxNGY4LmJpbmRQb3B1cChwb3B1cF8yOTJhNjE5OGMxOGQ0NjgyOWMzYWM4ZTQyNjFmNDM5Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YmViYTJhYjc2NjY0NzE4YWQyYTE1ZGI0MTIyMmIyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA5NzEsLTExOC4zMjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWJiMDJmMjNkZTQ4NDNkN2JhYTM5MGQ2Y2M0NGFiY2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzhlNjg4MGRkZmE3NDU3ZDliM2I3MTMwNjMyNDk2Y2YgPSAkKCc8ZGl2IGlkPSJodG1sX2M4ZTY4ODBkZGZhNzQ1N2Q5YjNiNzEzMDYzMjQ5NmNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViYjAyZjIzZGU0ODQzZDdiYWEzOTBkNmNjNDRhYmNjLnNldENvbnRlbnQoaHRtbF9jOGU2ODgwZGRmYTc0NTdkOWIzYjcxMzA2MzI0OTZjZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YmViYTJhYjc2NjY0NzE4YWQyYTE1ZGI0MTIyMmIyYS5iaW5kUG9wdXAocG9wdXBfZWJiMDJmMjNkZTQ4NDNkN2JhYTM5MGQ2Y2M0NGFiY2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2M4MTY3ZGIxNDIzNDE3NzlmZjYwNWI5NTc5ZjA0YTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTgxLC0xMTguMzIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NiMDQ0MjEwODAzZTRhNjFiMTNjYTUwZDczMjIxOTEyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZiOThjZmFmYWZkYjQ2YzlhOWJlNTU5ZjE0ZGI0ZmE2ID0gJCgnPGRpdiBpZD0iaHRtbF82Yjk4Y2ZhZmFmZGI0NmM5YTliZTU1OWYxNGRiNGZhNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjA0NDIxMDgwM2U0YTYxYjEzY2E1MGQ3MzIyMTkxMi5zZXRDb250ZW50KGh0bWxfNmI5OGNmYWZhZmRiNDZjOWE5YmU1NTlmMTRkYjRmYTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2M4MTY3ZGIxNDIzNDE3NzlmZjYwNWI5NTc5ZjA0YTguYmluZFBvcHVwKHBvcHVwX2NiMDQ0MjEwODAzZTRhNjFiMTNjYTUwZDczMjIxOTEyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EyOWVlZjZkMmNlNjRlMGE5YzljM2M0NDhkNDhmNmZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDk4MSwtMTE4LjM2MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMTY0ZDNiYzAzNTY0MDY2Yjk4MmNkODg0YThkZDNhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xZWZmOGQ1ZDc3Njc0YTk5OThkMjkyNzRlOGQ0YzhhYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWVmZjhkNWQ3NzY3NGE5OTk4ZDI5Mjc0ZThkNGM4YWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDE2NGQzYmMwMzU2NDA2NmI5ODJjZDg4NGE4ZGQzYTAuc2V0Q29udGVudChodG1sXzFlZmY4ZDVkNzc2NzRhOTk5OGQyOTI3NGU4ZDRjOGFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EyOWVlZjZkMmNlNjRlMGE5YzljM2M0NDhkNDhmNmZiLmJpbmRQb3B1cChwb3B1cF9kMTY0ZDNiYzAzNTY0MDY2Yjk4MmNkODg0YThkZDNhMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYjNmMTdiYjY0ZWI0ZDJhOTEwZjMzNTFjZGQ5NDZkZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjEwMTYsLTExOC4zMzYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2M5YjFmYmIyOGNjNGRmYjg5ZjYyM2JjMmZiOTMxM2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjZhZDUyMjc0YmQxNDQ3ZjhiM2Q5ZjY0ZDJhNjkxODggPSAkKCc8ZGl2IGlkPSJodG1sXzY2YWQ1MjI3NGJkMTQ0N2Y4YjNkOWY2NGQyYTY5MTg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjOWIxZmJiMjhjYzRkZmI4OWY2MjNiYzJmYjkzMTNkLnNldENvbnRlbnQoaHRtbF82NmFkNTIyNzRiZDE0NDdmOGIzZDlmNjRkMmE2OTE4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lYjNmMTdiYjY0ZWI0ZDJhOTEwZjMzNTFjZGQ5NDZkZi5iaW5kUG9wdXAocG9wdXBfY2M5YjFmYmIyOGNjNGRmYjg5ZjYyM2JjMmZiOTMxM2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjg2YWM5YzdlMDYzNGEyNTllZTY4ODVhN2NhMWQyYzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTgxLC0xMTguMzU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjllM2Q4NjM3NjI1NGI3YmI5OTkwZjNlNDVkYTRiOWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWY2NGE4Zjc1MTRkNGUyNGEyY2E1ZWYzNGM1Y2RiYTkgPSAkKCc8ZGl2IGlkPSJodG1sX2VmNjRhOGY3NTE0ZDRlMjRhMmNhNWVmMzRjNWNkYmE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5ZTNkODYzNzYyNTRiN2JiOTk5MGYzZTQ1ZGE0YjllLnNldENvbnRlbnQoaHRtbF9lZjY0YThmNzUxNGQ0ZTI0YTJjYTVlZjM0YzVjZGJhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yODZhYzljN2UwNjM0YTI1OWVlNjg4NWE3Y2ExZDJjNy5iaW5kUG9wdXAocG9wdXBfNjllM2Q4NjM3NjI1NGI3YmI5OTkwZjNlNDVkYTRiOWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTkyNDhmM2ZmMTRhNGMyN2FkMGVkOWQzN2I0ZWZiYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTg3LC0xMTguMzMzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E4NWNkYjEyN2QyMjQ2NjFiMGZjNGJiOGJhNzUyZjlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E3NDQ5NjNmZjVlODQ5Zjg5ODQ4NWM0N2JhMGJiNmNiID0gJCgnPGRpdiBpZD0iaHRtbF9hNzQ0OTYzZmY1ZTg0OWY4OTg0ODVjNDdiYTBiYjZjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hODVjZGIxMjdkMjI0NjYxYjBmYzRiYjhiYTc1MmY5Zi5zZXRDb250ZW50KGh0bWxfYTc0NDk2M2ZmNWU4NDlmODk4NDg1YzQ3YmEwYmI2Y2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTkyNDhmM2ZmMTRhNGMyN2FkMGVkOWQzN2I0ZWZiYWUuYmluZFBvcHVwKHBvcHVwX2E4NWNkYjEyN2QyMjQ2NjFiMGZjNGJiOGJhNzUyZjlmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0OWY0Mjk5NjA4YjQyMzA5YzEwNTFkYzNjYTBmYWY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDkyNiwtMTE4LjMyMTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kMDg4MmUyY2U1YjQ0NDNhYWY1NmY1NTgzZmFjZjk2OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZmRjZWI0NWYyMGI0MGQyODM2OTBlMWIxZDRhMDkwNiA9ICQoJzxkaXYgaWQ9Imh0bWxfZWZkY2ViNDVmMjBiNDBkMjgzNjkwZTFiMWQ0YTA5MDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDA4ODJlMmNlNWI0NDQzYWFmNTZmNTU4M2ZhY2Y5Njguc2V0Q29udGVudChodG1sX2VmZGNlYjQ1ZjIwYjQwZDI4MzY5MGUxYjFkNGEwOTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM0OWY0Mjk5NjA4YjQyMzA5YzEwNTFkYzNjYTBmYWY0LmJpbmRQb3B1cChwb3B1cF9kMDg4MmUyY2U1YjQ0NDNhYWY1NmY1NTgzZmFjZjk2OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Mjg0MjgyYmU3Mjk0YzBkYjAxNGFmNmYxMzZlNTFlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA4NjIsLTExOC4zMjQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2JjNzY3ZWI0MzMzNGRkMzg0YjQxNDViYzc4MWQxZDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGEyZTVkMmZiODY1NDRkMDlkNGI3YjBjMzkxNWIyNDkgPSAkKCc8ZGl2IGlkPSJodG1sXzRhMmU1ZDJmYjg2NTQ0ZDA5ZDRiN2IwYzM5MTViMjQ5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiYzc2N2ViNDMzMzRkZDM4NGI0MTQ1YmM3ODFkMWQ1LnNldENvbnRlbnQoaHRtbF80YTJlNWQyZmI4NjU0NGQwOWQ0YjdiMGMzOTE1YjI0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81Mjg0MjgyYmU3Mjk0YzBkYjAxNGFmNmYxMzZlNTFlNS5iaW5kUG9wdXAocG9wdXBfY2JjNzY3ZWI0MzMzNGRkMzg0YjQxNDViYzc4MWQxZDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDg5YmZjZWFlYTVlNGJiMmI1ZDAxNjkxNTc5NmMzMjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xMDE2LC0xMTguMzM4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E0OWI4NTlkN2U4NjRlYzNhYjI5ZTk4OGQ2MDNkZjQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QxODA0MzZjNTlmMzQ3ZWU5ZWNlMjc5NWYxZDczODU4ID0gJCgnPGRpdiBpZD0iaHRtbF9kMTgwNDM2YzU5ZjM0N2VlOWVjZTI3OTVmMWQ3Mzg1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNDliODU5ZDdlODY0ZWMzYWIyOWU5ODhkNjAzZGY0OS5zZXRDb250ZW50KGh0bWxfZDE4MDQzNmM1OWYzNDdlZTllY2UyNzk1ZjFkNzM4NTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDg5YmZjZWFlYTVlNGJiMmI1ZDAxNjkxNTc5NmMzMjYuYmluZFBvcHVwKHBvcHVwX2E0OWI4NTlkN2U4NjRlYzNhYjI5ZTk4OGQ2MDNkZjQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmOTM3ODgyNGY1NzRlMGVhNWZjMzIyZWM0Y2ZlYjcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDg2MiwtMTE4LjMwNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjA1YmJlZjhjNDI0NzgyYWIwZTQ4ZmM5NGJkZTI3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDk0MzE1YzdlNWQ0YWMwYWZkNTA5NDliZDU2NTY5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWQ5NDMxNWM3ZTVkNGFjMGFmZDUwOTQ5YmQ1NjU2OWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjIwNWJiZWY4YzQyNDc4MmFiMGU0OGZjOTRiZGUyNzcuc2V0Q29udGVudChodG1sXzlkOTQzMTVjN2U1ZDRhYzBhZmQ1MDk0OWJkNTY1NjlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmOTM3ODgyNGY1NzRlMGVhNWZjMzIyZWM0Y2ZlYjcyLmJpbmRQb3B1cChwb3B1cF9mMjA1YmJlZjhjNDI0NzgyYWIwZTQ4ZmM5NGJkZTI3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOWYzMTJiMmQ4NTc0NmIxYmJjY2E3MDc0YWJiZGVkNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA5ODcsLTExOC4zMzM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2NjMWIzODQyODhlNGQwYWE5M2MyODc5MzlhYTAyYjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE0MDdhZThhNTlhNDQ5MjlmNjYyNjUxY2E5MDhjNjAgPSAkKCc8ZGl2IGlkPSJodG1sXzRhNDA3YWU4YTU5YTQ0OTI5ZjY2MjY1MWNhOTA4YzYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjYzFiMzg0Mjg4ZTRkMGFhOTNjMjg3OTM5YWEwMmI1LnNldENvbnRlbnQoaHRtbF80YTQwN2FlOGE1OWE0NDkyOWY2NjI2NTFjYTkwOGM2MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOWYzMTJiMmQ4NTc0NmIxYmJjY2E3MDc0YWJiZGVkNC5iaW5kUG9wdXAocG9wdXBfY2NjMWIzODQyODhlNGQwYWE5M2MyODc5MzlhYTAyYjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmVhZmUzNWZiOWJjNDQ5ZjgyMmEzZTRkYjEzYTQzNDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTg3LC0xMTguMzMzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1OGQ1NDdkYjY0ZDRiN2FiZjQ3NWRlOTA3Mjg2ODY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4MGMyOGRlZDU0MjRiYjA5NjI2ZTc5MWY3NGY2OWI4ID0gJCgnPGRpdiBpZD0iaHRtbF85ODBjMjhkZWQ1NDI0YmIwOTYyNmU3OTFmNzRmNjliOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNThkNTQ3ZGI2NGQ0YjdhYmY0NzVkZTkwNzI4Njg2Ni5zZXRDb250ZW50KGh0bWxfOTgwYzI4ZGVkNTQyNGJiMDk2MjZlNzkxZjc0ZjY5YjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmVhZmUzNWZiOWJjNDQ5ZjgyMmEzZTRkYjEzYTQzNDQuYmluZFBvcHVwKHBvcHVwX2Q1OGQ1NDdkYjY0ZDRiN2FiZjQ3NWRlOTA3Mjg2ODY2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0OWJjY2E0ODg4ODRiZWViNDZjYzM0YjdhZWY2Yzk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTAxNywtMTE4LjMxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxZmIxOWQzNmZhMDRmZjhiMTk3NzZiZTI0MTk4NzY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAxMzUxNWRmNjcyNDQ0YjA5YTFkY2E3NGI3Y2EzMWJlID0gJCgnPGRpdiBpZD0iaHRtbF8wMTM1MTVkZjY3MjQ0NGIwOWExZGNhNzRiN2NhMzFiZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MWZiMTlkMzZmYTA0ZmY4YjE5Nzc2YmUyNDE5ODc2Ny5zZXRDb250ZW50KGh0bWxfMDEzNTE1ZGY2NzI0NDRiMDlhMWRjYTc0YjdjYTMxYmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQ5YmNjYTQ4ODg4NGJlZWI0NmNjMzRiN2FlZjZjOTUuYmluZFBvcHVwKHBvcHVwXzgxZmIxOWQzNmZhMDRmZjhiMTk3NzZiZTI0MTk4NzY3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJlMDA2ODUyZDRhZjQxYjU5ZTU3OTY0MmMxOWYxNDFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDg2MywtMTE4LjMwNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMTFjNzJlNDk4M2M0ZWQzOGFmOTNhMmVhZTUzODlmNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NjE0YjkzNjBiNTk0YTgwOTE5YTc1NDVkMTA2MTUzNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjYxNGI5MzYwYjU5NGE4MDkxOWE3NTQ1ZDEwNjE1MzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDExYzcyZTQ5ODNjNGVkMzhhZjkzYTJlYWU1Mzg5Zjcuc2V0Q29udGVudChodG1sXzY2MTRiOTM2MGI1OTRhODA5MTlhNzU0NWQxMDYxNTM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlMDA2ODUyZDRhZjQxYjU5ZTU3OTY0MmMxOWYxNDFkLmJpbmRQb3B1cChwb3B1cF8wMTFjNzJlNDk4M2M0ZWQzOGFmOTNhMmVhZTUzODlmNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NDIwZTNmZWUzZWI0NTJmYTRjZGRiNmY2OWNjN2U5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA4NjUsLTExOC4zMTY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGZmNzEwMmIxODIzNDdkYjkxZmFlYjgxY2Q5OTMzZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDMxZDM5ZjJhYmMzNDE1ZTljZjVmNDA2NzEwZTQyMjcgPSAkKCc8ZGl2IGlkPSJodG1sXzQzMWQzOWYyYWJjMzQxNWU5Y2Y1ZjQwNjcxMGU0MjI3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmZjcxMDJiMTgyMzQ3ZGI5MWZhZWI4MWNkOTkzM2U0LnNldENvbnRlbnQoaHRtbF80MzFkMzlmMmFiYzM0MTVlOWNmNWY0MDY3MTBlNDIyNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NDIwZTNmZWUzZWI0NTJmYTRjZGRiNmY2OWNjN2U5OS5iaW5kUG9wdXAocG9wdXBfZGZmNzEwMmIxODIzNDdkYjkxZmFlYjgxY2Q5OTMzZTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjQ5OTg5MjQ4NDZlNGJiNzk5NGU3NDhjMDIyZDI1OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTgsLTExOC4zNDc5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzJjYzBhY2U1Y2U2NDk3MGJiZTdhYjRlMWUwZDM5YzIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjY4YmVmMjU0Y2IzNDQ2NGE4NGY4NzczNTc3OTRjMzAgPSAkKCc8ZGl2IGlkPSJodG1sX2I2OGJlZjI1NGNiMzQ0NjRhODRmODc3MzU3Nzk0YzMwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ib2xseXdvb2Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyY2MwYWNlNWNlNjQ5NzBiYmU3YWI0ZTFlMGQzOWMyLnNldENvbnRlbnQoaHRtbF9iNjhiZWYyNTRjYjM0NDY0YTg0Zjg3NzM1Nzc5NGMzMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNDk5ODkyNDg0NmU0YmI3OTk0ZTc0OGMwMjJkMjU4Yi5iaW5kUG9wdXAocG9wdXBfMzJjYzBhY2U1Y2U2NDk3MGJiZTdhYjRlMWUwZDM5YzIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTcwN2M5Y2MzMDRkNDdjNzhiYzcyNDIwOTI5ZTFhNzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xMDE2LC0xMTguMzM4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4NTI5OWNmMmFkMDQ4MDViNWIzN2Y0NDU5OTIyODkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU5Y2EzNTU1OGZlNTQzNjE5YWYxOTBjYjE5NDAwNjI2ID0gJCgnPGRpdiBpZD0iaHRtbF81OWNhMzU1NThmZTU0MzYxOWFmMTkwY2IxOTQwMDYyNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+SG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODUyOTljZjJhZDA0ODA1YjViMzdmNDQ1OTkyMjg5MS5zZXRDb250ZW50KGh0bWxfNTljYTM1NTU4ZmU1NDM2MTlhZjE5MGNiMTk0MDA2MjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTcwN2M5Y2MzMDRkNDdjNzhiYzcyNDIwOTI5ZTFhNzQuYmluZFBvcHVwKHBvcHVwXzc4NTI5OWNmMmFkMDQ4MDViNWIzN2Y0NDU5OTIyODkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmNjhiZGM0NjNkODQ4NzViNGQ3NWU4MDlhZDFmNzdlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDgzNSwtMTE4LjMyNjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDU4M2MzM2NkYjc0YmNmYTJhYTkxZTQwNTJmZDlhZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDNiOTc2MTJjMTM0YWI4ODhlNmM5MGNiZDJlOTZkMyA9ICQoJzxkaXYgaWQ9Imh0bWxfOWQzYjk3NjEyYzEzNGFiODg4ZTZjOTBjYmQyZTk2ZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGQ1ODNjMzNjZGI3NGJjZmEyYWE5MWU0MDUyZmQ5YWUuc2V0Q29udGVudChodG1sXzlkM2I5NzYxMmMxMzRhYjg4OGU2YzkwY2JkMmU5NmQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmNjhiZGM0NjNkODQ4NzViNGQ3NWU4MDlhZDFmNzdlLmJpbmRQb3B1cChwb3B1cF84ZDU4M2MzM2NkYjc0YmNmYTJhYTkxZTQwNTJmZDlhZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZDkzNDExMDRiMDY0NTZiODUxNTljMzcyZGFiYThlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1MTcsLTExOC4zNjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTAwN2RjYjdmOTEyNDliOThmZjdkNDQ4ODhlYzk1MTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJhYmFlODY3OTZmNDYyMzg4ZGU5YmY1MmZhY2MzOWYgPSAkKCc8ZGl2IGlkPSJodG1sXzRiYWJhZTg2Nzk2ZjQ2MjM4OGRlOWJmNTJmYWNjMzlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxzaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTAwN2RjYjdmOTEyNDliOThmZjdkNDQ4ODhlYzk1MTQuc2V0Q29udGVudChodG1sXzRiYWJhZTg2Nzk2ZjQ2MjM4OGRlOWJmNTJmYWNjMzlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NkOTM0MTEwNGIwNjQ1NmI4NTE1OWMzNzJkYWJhOGU0LmJpbmRQb3B1cChwb3B1cF85MDA3ZGNiN2Y5MTI0OWI5OGZmN2Q0NDg4OGVjOTUxNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ODY1OGFjZGZlMjc0ZDM3YjU3NWQzOWRhZDE3ZDlhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0ODIsLTExOC4zNTE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTE1YWEyNGFhZjZhNGQ4Mzk4MzcxNWZiNTNhMGY2ZDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWUwZTdjMTY0Y2I0NGU0ZmI4NDJiMzRlN2M5M2M5MmEgPSAkKCc8ZGl2IGlkPSJodG1sXzFlMGU3YzE2NGNiNDRlNGZiODQyYjM0ZTdjOTNjOTJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxzaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTE1YWEyNGFhZjZhNGQ4Mzk4MzcxNWZiNTNhMGY2ZDYuc2V0Q29udGVudChodG1sXzFlMGU3YzE2NGNiNDRlNGZiODQyYjM0ZTdjOTNjOTJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4NjU4YWNkZmUyNzRkMzdiNTc1ZDM5ZGFkMTdkOWE4LmJpbmRQb3B1cChwb3B1cF9hMTVhYTI0YWFmNmE0ZDgzOTgzNzE1ZmI1M2EwZjZkNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZDkwY2IyOTg1OWU0MjhjYTlmMTFmOGRiZDExYTU0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2ODksLTExOC4zNDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZWU4ZmU5OGZmMDQ0MWM4ODRjMTVmOTAyNDE3NGIzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDc1MWUxMDdkMDU0MjY0OTJiNDU4YzY4MGYwYjU0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDA3NTFlMTA3ZDA1NDI2NDkyYjQ1OGM2ODBmMGI1NDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbHNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iZWU4ZmU5OGZmMDQ0MWM4ODRjMTVmOTAyNDE3NGIzNS5zZXRDb250ZW50KGh0bWxfMDA3NTFlMTA3ZDA1NDI2NDkyYjQ1OGM2ODBmMGI1NDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGQ5MGNiMjk4NTllNDI4Y2E5ZjExZjhkYmQxMWE1NGEuYmluZFBvcHVwKHBvcHVwX2JlZThmZTk4ZmYwNDQxYzg4NGMxNWY5MDI0MTc0YjM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0ZjQyMDcxOTRjNjQ3ZTU4ODkyOTYwYTU2MTI4ODZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDczOSwtMTE4LjMzMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNTM3ODBmNDdjZWY0Mjg1YmI1OGE3OTAyMjZkZjI5MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82OWM1NzM3Mzg3ZmE0ZjJiYjY1NDE3ZDBhZTkyZmU4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjljNTczNzM4N2ZhNGYyYmI2NTQxN2QwYWU5MmZlOGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbHNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTM3ODBmNDdjZWY0Mjg1YmI1OGE3OTAyMjZkZjI5MC5zZXRDb250ZW50KGh0bWxfNjljNTczNzM4N2ZhNGYyYmI2NTQxN2QwYWU5MmZlOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTRmNDIwNzE5NGM2NDdlNTg4OTI5NjBhNTYxMjg4NmYuYmluZFBvcHVwKHBvcHVwXzM1Mzc4MGY0N2NlZjQyODViYjU4YTc5MDIyNmRmMjkwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhZDUwN2Y4NWIxZDQzNzdiNGE0YjEyYWY2MDk2ZmNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYzNywtMTE4LjM1NjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hN2FiZDk3Yjg5MzU0NTlhOWRhOTEwNjlmMjMwNjRiZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYWVlZTYwNGM5Yjk0NjExYmQ3MmFhY2I5NjUwZGYwNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZmFlZWU2MDRjOWI5NDYxMWJkNzJhYWNiOTY1MGRmMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbHNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hN2FiZDk3Yjg5MzU0NTlhOWRhOTEwNjlmMjMwNjRiZC5zZXRDb250ZW50KGh0bWxfZmFlZWU2MDRjOWI5NDYxMWJkNzJhYWNiOTY1MGRmMDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2FkNTA3Zjg1YjFkNDM3N2I0YTRiMTJhZjYwOTZmY2MuYmluZFBvcHVwKHBvcHVwX2E3YWJkOTdiODkzNTQ1OWE5ZGE5MTA2OWYyMzA2NGJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM0NWE2ZjFjMTc0OTQwMWNiMWY5N2UyNjExZTJkYzYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDM1MiwtMTE4LjM1NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNDMzNDUwN2Y5OTk0MGQwOWIwODNlMjAyNzZjOGMyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NmIyNzExMjRhMWM0MjAxOWQ2OGY3YWFiN2EwNzZkZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDZiMjcxMTI0YTFjNDIwMTlkNjhmN2FhYjdhMDc2ZGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbHNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNDMzNDUwN2Y5OTk0MGQwOWIwODNlMjAyNzZjOGMyNy5zZXRDb250ZW50KGh0bWxfNDZiMjcxMTI0YTFjNDIwMTlkNjhmN2FhYjdhMDc2ZGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzQ1YTZmMWMxNzQ5NDAxY2IxZjk3ZTI2MTFlMmRjNjAuYmluZFBvcHVwKHBvcHVwXzM0MzM0NTA3Zjk5OTQwZDA5YjA4M2UyMDI3NmM4YzI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1MTI4OThkMGJkNjQ5OGZiMmExMTcyNjkyOTIxMzNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ1NywtMTE4LjM0NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZTY3NTU4OWY1NmY0N2I4OTk5N2IwMGU5YzQxZjY0MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYTQ5ZTgzMzM5NWU0NDM5OWI4N2QyODRlMTYzODI2NiA9ICQoJzxkaXYgaWQ9Imh0bWxfMGE0OWU4MzMzOTVlNDQzOTliODdkMjg0ZTE2MzgyNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbHNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZTY3NTU4OWY1NmY0N2I4OTk5N2IwMGU5YzQxZjY0MS5zZXRDb250ZW50KGh0bWxfMGE0OWU4MzMzOTVlNDQzOTliODdkMjg0ZTE2MzgyNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzUxMjg5OGQwYmQ2NDk4ZmIyYTExNzI2OTI5MjEzM2UuYmluZFBvcHVwKHBvcHVwXzdlNjc1NTg5ZjU2ZjQ3Yjg5OTk3YjAwZTljNDFmNjQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5OTFjZTczMDRkMjQwMWRiZDJlY2M0ZjE5YTg4MjQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQxNCwtMTE4LjMzOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNDY0ODkyZTNmZTI0MjE1OGVkMDExMzI1NTg0OWIwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NDc4NTFjYjMwNGQ0ZDZhYTkwYjU5ODQ3NDVmZWM0YSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDQ3ODUxY2IzMDRkNGQ2YWE5MGI1OTg0NzQ1ZmVjNGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldpbHNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNDY0ODkyZTNmZTI0MjE1OGVkMDExMzI1NTg0OWIwZC5zZXRDb250ZW50KGh0bWxfNDQ3ODUxY2IzMDRkNGQ2YWE5MGI1OTg0NzQ1ZmVjNGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDk5MWNlNzMwNGQyNDAxZGJkMmVjYzRmMTlhODgyNDcuYmluZFBvcHVwKHBvcHVwX2E0NjQ4OTJlM2ZlMjQyMTU4ZWQwMTEzMjU1ODQ5YjBkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlYTY5NTY3N2RjZTQ3YjY4YjIzYjkyMzgyZjYzNDRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDcxMSwtMTE4LjM0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0ZjEzMmFiNWM5NjQ1OWE4MWQ2NGU4NTc5MmNkZDVlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlOTExYTQ4ZmYyZTRiMDBiYTg5OGMxYWVjZWY2MDZiID0gJCgnPGRpdiBpZD0iaHRtbF8wZTkxMWE0OGZmMmU0YjAwYmE4OThjMWFlY2VmNjA2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsc2hpcmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0ZjEzMmFiNWM5NjQ1OWE4MWQ2NGU4NTc5MmNkZDVlLnNldENvbnRlbnQoaHRtbF8wZTkxMWE0OGZmMmU0YjAwYmE4OThjMWFlY2VmNjA2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZWE2OTU2NzdkY2U0N2I2OGIyM2I5MjM4MmY2MzQ0Yi5iaW5kUG9wdXAocG9wdXBfMDRmMTMyYWI1Yzk2NDU5YTgxZDY0ZTg1NzkyY2RkNWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjY4NmE1Y2IzMzAwNDNhZWFmY2I4Njc2MmEwNzQwMzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDc2LC0xMTguMzI0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0Zjg4YTI2ZjY5NjQ1ZGE5ZWJjZjYxMjRhMGYzYjgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE0MDZiZWNjZWZiNjQxNzBiZjhkYWZjZDFlNWU2NjllID0gJCgnPGRpdiBpZD0iaHRtbF8xNDA2YmVjY2VmYjY0MTcwYmY4ZGFmY2QxZTVlNjY5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2lsc2hpcmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0Zjg4YTI2ZjY5NjQ1ZGE5ZWJjZjYxMjRhMGYzYjgxLnNldENvbnRlbnQoaHRtbF8xNDA2YmVjY2VmYjY0MTcwYmY4ZGFmY2QxZTVlNjY5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNjg2YTVjYjMzMDA0M2FlYWZjYjg2NzYyYTA3NDAzOC5iaW5kUG9wdXAocG9wdXBfNjRmODhhMjZmNjk2NDVkYTllYmNmNjEyNGEwZjNiODEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTU0ZTc5MmViNDBmNDM3NGI3NTY5YWJkNjQ2YWM4OWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTEsLTExOC4zNTQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTBkM2NmMDQ0YjgyNGNiMGE4NDIzOTI2MDRhNWZiOTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGI3ODA1Mzg3MWNiNGY4MGJjMTNlMzlhNTljMWI5NzggPSAkKCc8ZGl2IGlkPSJodG1sXzRiNzgwNTM4NzFjYjRmODBiYzEzZTM5YTU5YzFiOTc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxzaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTBkM2NmMDQ0YjgyNGNiMGE4NDIzOTI2MDRhNWZiOTcuc2V0Q29udGVudChodG1sXzRiNzgwNTM4NzFjYjRmODBiYzEzZTM5YTU5YzFiOTc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E1NGU3OTJlYjQwZjQzNzRiNzU2OWFiZDY0NmFjODljLmJpbmRQb3B1cChwb3B1cF9lMGQzY2YwNDRiODI0Y2IwYTg0MjM5MjYwNGE1ZmI5Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NTg3NjUyNjA4OGI0NDVkYjI0OTRlMWIxM2UyOWJiZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1MTMsLTExOC4zMzk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTUyMTk5NDA1MzM3NDQwNjkwM2YwOGRjYzU2YWVjYTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjA5ODNjZTM4ODcxNDkzMmJlZGM3YmFlM2YzYTgyOWQgPSAkKCc8ZGl2IGlkPSJodG1sXzYwOTgzY2UzODg3MTQ5MzJiZWRjN2JhZTNmM2E4MjlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxzaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTUyMTk5NDA1MzM3NDQwNjkwM2YwOGRjYzU2YWVjYTQuc2V0Q29udGVudChodG1sXzYwOTgzY2UzODg3MTQ5MzJiZWRjN2JhZTNmM2E4MjlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg1ODc2NTI2MDg4YjQ0NWRiMjQ5NGUxYjEzZTI5YmJmLmJpbmRQb3B1cChwb3B1cF81NTIxOTk0MDUzMzc0NDA2OTAzZjA4ZGNjNTZhZWNhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzA2NDBmMGM5ZTc0MzMyYjk4YmZmMWVhYzY2ZDE5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA4MzYsLTExOC4zNTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FkODRhYTgxOGZkNGJmZThhODVjMWI5ZDAyMjFiNjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzc2MGY0NTkzZGU0NGY4Mjg3NmIyMzVjNjY2Y2JjYmIgPSAkKCc8ZGl2IGlkPSJodG1sX2M3NjBmNDU5M2RlNDRmODI4NzZiMjM1YzY2NmNiY2JiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XaWxzaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2FkODRhYTgxOGZkNGJmZThhODVjMWI5ZDAyMjFiNjEuc2V0Q29udGVudChodG1sX2M3NjBmNDU5M2RlNDRmODI4NzZiMjM1YzY2NmNiY2JiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE3MDY0MGYwYzllNzQzMzJiOThiZmYxZWFjNjZkMTkzLmJpbmRQb3B1cChwb3B1cF8zYWQ4NGFhODE4ZmQ0YmZlOGE4NWMxYjlkMDIyMWI2MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjczNTE3YTk4NzY0OGNmOTc1NzljMWM2YzhjZjk2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzNTQsLTExOC40NTg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTdmZTY3NzAxNGUxNDliNmJiMmFmYmNkZmU5ZmZmNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWE5MDhjZDFjMzZhNDA5ZGI1YmY2OTlkYWJlZmM5ZWEgPSAkKCc8ZGl2IGlkPSJodG1sX2VhOTA4Y2QxYzM2YTQwOWRiNWJmNjk5ZGFiZWZjOWVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IExBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lN2ZlNjc3MDE0ZTE0OWI2YmIyYWZiY2RmZTlmZmY2OS5zZXRDb250ZW50KGh0bWxfZWE5MDhjZDFjMzZhNDA5ZGI1YmY2OTlkYWJlZmM5ZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGI3MzUxN2E5ODc2NDhjZjk3NTc5YzFjNmM4Y2Y5NjcuYmluZFBvcHVwKHBvcHVwX2U3ZmU2NzcwMTRlMTQ5YjZiYjJhZmJjZGZlOWZmZjY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0NWExM2I5MWE4ZjQ5NDQ4NTI5NGJjMTY3ODhhMjhlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDcyNywtMTE4LjQzNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNTNjYWI1ZmRjYTQ0MTdjYmI4MWMyMzBjYjdhODE5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZTk2MTE3YWNiZWM0NjY5ODI0MzJlYTZhMDU4MDFiNiA9ICQoJzxkaXYgaWQ9Imh0bWxfYWU5NjExN2FjYmVjNDY2OTgyNDMyZWE2YTA1ODAxYjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1M2NhYjVmZGNhNDQxN2NiYjgxYzIzMGNiN2E4MTk3LnNldENvbnRlbnQoaHRtbF9hZTk2MTE3YWNiZWM0NjY5ODI0MzJlYTZhMDU4MDFiNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NDVhMTNiOTFhOGY0OTQ0ODUyOTRiYzE2Nzg4YTI4ZS5iaW5kUG9wdXAocG9wdXBfZTUzY2FiNWZkY2E0NDE3Y2JiODFjMjMwY2I3YTgxOTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjkwYmQ3YjIzNzljNDE1OTkxYjU2MThkNjRkMmE0MjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzU0LC0xMTguMzg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2M0Y2YxMzRmODE2NDU1M2EzMTU4ZWIyYzQzOWU4MTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjBiZDQ1MzFlOGIxNDM0OGIwNDczZWE0OGI2MzQzY2IgPSAkKCc8ZGl2IGlkPSJodG1sX2IwYmQ0NTMxZThiMTQzNDhiMDQ3M2VhNDhiNjM0M2NiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IExBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYzRjZjEzNGY4MTY0NTUzYTMxNThlYjJjNDM5ZTgxNy5zZXRDb250ZW50KGh0bWxfYjBiZDQ1MzFlOGIxNDM0OGIwNDczZWE0OGI2MzQzY2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjkwYmQ3YjIzNzljNDE1OTkxYjU2MThkNjRkMmE0MjUuYmluZFBvcHVwKHBvcHVwX2NjNGNmMTM0ZjgxNjQ1NTNhMzE1OGViMmM0MzllODE3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjMWUxMTAxNTQ3NTRiZjZiN2JhMzhlZWRlMzQxOTZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDM0LC0xMTguNDI2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwMzk5YmVjNjBmMjRhOGQ4MTMzOWFiOGVkYTg4ZmViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5NDkyNjg5ZmVkZTQ4MjZiMDQyNDQyODNlZGYzN2EyID0gJCgnPGRpdiBpZD0iaHRtbF84OTQ5MjY4OWZlZGU0ODI2YjA0MjQ0MjgzZWRmMzdhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdCBMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTAzOTliZWM2MGYyNGE4ZDgxMzM5YWI4ZWRhODhmZWIuc2V0Q29udGVudChodG1sXzg5NDkyNjg5ZmVkZTQ4MjZiMDQyNDQyODNlZGYzN2EyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNjMWUxMTAxNTQ3NTRiZjZiN2JhMzhlZWRlMzQxOTZkLmJpbmRQb3B1cChwb3B1cF9lMDM5OWJlYzYwZjI0YThkODEzMzlhYjhlZGE4OGZlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iM2QxNzZjNWY0NDQ0ZDk0OGFkMGI3MmE1MmYwZDAxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzODksLTExOC40NjEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGRmNmNmMDdhNTdiNDViOWIwNmZmNjdkYmE5YjQxYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTUxYjA0YjlhYjI0NGYzODg3MjdiMzY4N2M4NmVjMTkgPSAkKCc8ZGl2IGlkPSJodG1sXzk1MWIwNGI5YWIyNDRmMzg4NzI3YjM2ODdjODZlYzE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IExBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZGY2Y2YwN2E1N2I0NWI5YjA2ZmY2N2RiYTliNDFiYS5zZXRDb250ZW50KGh0bWxfOTUxYjA0YjlhYjI0NGYzODg3MjdiMzY4N2M4NmVjMTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjNkMTc2YzVmNDQ0NGQ5NDhhZDBiNzJhNTJmMGQwMTYuYmluZFBvcHVwKHBvcHVwXzBkZjZjZjA3YTU3YjQ1YjliMDZmZjY3ZGJhOWI0MWJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VmOWMzMzdhYmJhZDQ5ZWY5ODJlZGZiNjk4NDM1ZmVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ1OSwtMTE4LjUzOTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OWI2ZjdhY2I5NmE0M2RhYTk3NzRkODViODZkZmNjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNDRmNTUyZDQxYTE0YzU1YjdjNjEwZGNlNGMyOGQ2OSA9ICQoJzxkaXYgaWQ9Imh0bWxfMDQ0ZjU1MmQ0MWExNGM1NWI3YzYxMGRjZTRjMjhkNjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk5YjZmN2FjYjk2YTQzZGFhOTc3NGQ4NWI4NmRmY2NmLnNldENvbnRlbnQoaHRtbF8wNDRmNTUyZDQxYTE0YzU1YjdjNjEwZGNlNGMyOGQ2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZjljMzM3YWJiYWQ0OWVmOTgyZWRmYjY5ODQzNWZlZC5iaW5kUG9wdXAocG9wdXBfOTliNmY3YWNiOTZhNDNkYWE5Nzc0ZDg1Yjg2ZGZjY2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTEzNmNiNTQwNTViNDZlNGE5MDNmODAyYjcyNGQxYmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDI1LC0xMTguMzgxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZhMjJjYTQ0ODc3NDQ2YTI5ZGFkODg4MjE1OTRhNjkzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q0MmMzNTU3MGNlOTQyOWZhZWJhYmY5NTY3MzI2NjZjID0gJCgnPGRpdiBpZD0iaHRtbF9kNDJjMzU1NzBjZTk0MjlmYWViYWJmOTU2NzMyNjY2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+V2VzdCBMQTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmEyMmNhNDQ4Nzc0NDZhMjlkYWQ4ODgyMTU5NGE2OTMuc2V0Q29udGVudChodG1sX2Q0MmMzNTU3MGNlOTQyOWZhZWJhYmY5NTY3MzI2NjZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ExMzZjYjU0MDU1YjQ2ZTRhOTAzZjgwMmI3MjRkMWJlLmJpbmRQb3B1cChwb3B1cF82YTIyY2E0NDg3NzQ0NmEyOWRhZDg4ODIxNTk0YTY5Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTVhM2VlMDVkOGQ0ZTc1YjE0ZGRkNTc1MWUyOTU5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NTEsLTExOC41NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NWQyZTFjYTQ5YWU0ZGMwYWIzMmQ5MGE4YmZlMjQ0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NTA2ZjNjOTA0ZjY0MTQwOGVjMGE5MjU0NWU3NjIxMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNDUwNmYzYzkwNGY2NDE0MDhlYzBhOTI1NDVlNzYyMTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc1ZDJlMWNhNDlhZTRkYzBhYjMyZDkwYThiZmUyNDQyLnNldENvbnRlbnQoaHRtbF80NTA2ZjNjOTA0ZjY0MTQwOGVjMGE5MjU0NWU3NjIxMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MTVhM2VlMDVkOGQ0ZTc1YjE0ZGRkNTc1MWUyOTU5OC5iaW5kUG9wdXAocG9wdXBfNzVkMmUxY2E0OWFlNGRjMGFiMzJkOTBhOGJmZTI0NDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjUwNTZjM2QzMjhkNDlhM2JlOGJiMjAxMTlkNDliYWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzYyLC0xMTguMzk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg0ZTA2MWQ5OTM0NDllYjg2OTEzNDUwMTkwMTRmYWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjg3NGQyMjI3MmUyNGVmMjk0YWU5ZTY4NzNjN2IzNjAgPSAkKCc8ZGl2IGlkPSJodG1sXzI4NzRkMjIyNzJlMjRlZjI5NGFlOWU2ODczYzdiMzYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IExBPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODRlMDYxZDk5MzQ0OWViODY5MTM0NTAxOTAxNGZhYi5zZXRDb250ZW50KGh0bWxfMjg3NGQyMjI3MmUyNGVmMjk0YWU5ZTY4NzNjN2IzNjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjUwNTZjM2QzMjhkNDlhM2JlOGJiMjAxMTlkNDliYWIuYmluZFBvcHVwKHBvcHVwXzU4NGUwNjFkOTkzNDQ5ZWI4NjkxMzQ1MDE5MDE0ZmFiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1Njc2OWEyYjUzOTQ0ODdiOTNmMmYzMmFhYWM0NDIxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ5MywtMTE4LjQ2NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDNhYjg0NWNiYjQ0ZmI2OWRkYjk0NDMxZTMzMmQwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NmI1ZjlhNzVmMWM0NGU2OTgzOTc5NDZkZDBhMzQyYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjZiNWY5YTc1ZjFjNDRlNjk4Mzk3OTQ2ZGQwYTM0MmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgTEE8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkM2FiODQ1Y2JiNDRmYjY5ZGRiOTQ0MzFlMzMyZDA4LnNldENvbnRlbnQoaHRtbF82NmI1ZjlhNzVmMWM0NGU2OTgzOTc5NDZkZDBhMzQyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTY3NjlhMmI1Mzk0NDg3YjkzZjJmMzJhYWFjNDQyMS5iaW5kUG9wdXAocG9wdXBfZWQzYWI4NDVjYmI0NGZiNjlkZGI5NDQzMWUzMzJkMDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDJhMzA4YjYyMDA4NDNkNDhlMmExNDU3NDg1ZjZhMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xNTc2LC0xMTguNDMxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViMzM1ZTUwMmQ5MzRiNzViZGYzNzZmMzE0Y2Q4NWQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlhNjk0NmRlNTUxZjQwZDBiNjM4NWM3YWRkMGU2MmU0ID0gJCgnPGRpdiBpZD0iaHRtbF85YTY5NDZkZTU1MWY0MGQwYjYzODVjN2FkZDBlNjJlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViMzM1ZTUwMmQ5MzRiNzViZGYzNzZmMzE0Y2Q4NWQ0LnNldENvbnRlbnQoaHRtbF85YTY5NDZkZTU1MWY0MGQwYjYzODVjN2FkZDBlNjJlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMmEzMDhiNjIwMDg0M2Q0OGUyYTE0NTc0ODVmNmEyNS5iaW5kUG9wdXAocG9wdXBfZWIzMzVlNTAyZDkzNGI3NWJkZjM3NmYzMTRjZDg1ZDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTk5NDQ1ZWQwYWM3NDBlNTgyYjZmNTdjYmYxMTkyOGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xNjg3LC0xMTguNDEzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MzODlhN2E2Njc5MjQzNGRiMDQ5OGNhN2IxMWY0MmEzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0NTY2Mzk3NDljZjRhMTY5MDMxNDFkOGRjYzdjMWVhID0gJCgnPGRpdiBpZD0iaHRtbF80NDU2NjM5NzQ5Y2Y0YTE2OTAzMTQxZDhkY2M3YzFlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MzODlhN2E2Njc5MjQzNGRiMDQ5OGNhN2IxMWY0MmEzLnNldENvbnRlbnQoaHRtbF80NDU2NjM5NzQ5Y2Y0YTE2OTAzMTQxZDhkY2M3YzFlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOTk0NDVlZDBhYzc0MGU1ODJiNmY1N2NiZjExOTI4YS5iaW5kUG9wdXAocG9wdXBfYzM4OWE3YTY2NzkyNDM0ZGIwNDk4Y2E3YjExZjQyYTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRjNTFlN2UyNDFmNDRmZGE0YWQ2YzQ0MmJjNTQ1YmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xNjg0LC0xMTguNDU4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzN2M5MzQzMDk2ZjQ5ZDM5MGEwOGIxMGI0ZTUyODlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJkNWE1ZjIxNTdjOTRiYjE4OTgyMjA5NzIxYjcwZmIxID0gJCgnPGRpdiBpZD0iaHRtbF8yZDVhNWYyMTU3Yzk0YmIxODk4MjIwOTcyMWI3MGZiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YzN2M5MzQzMDk2ZjQ5ZDM5MGEwOGIxMGI0ZTUyODlhLnNldENvbnRlbnQoaHRtbF8yZDVhNWYyMTU3Yzk0YmIxODk4MjIwOTcyMWI3MGZiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZGM1MWU3ZTI0MWY0NGZkYTRhZDZjNDQyYmM1NDViZC5iaW5kUG9wdXAocG9wdXBfZjM3YzkzNDMwOTZmNDlkMzkwYTA4YjEwYjRlNTI4OWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmU3ZWMwY2U4MmUwNGJlMjhhYzQ2YTYwOGNhM2NkNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xODY3LC0xMTguNDQyMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmNTIwMTNhZGE1MjQxMmM5YWMxZmY5NmE5ZjhkM2VkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5YzQ0NzRlMzNiODRhMDY4NjlhZTI5NzYxMWIzZGI0ID0gJCgnPGRpdiBpZD0iaHRtbF85OWM0NDc0ZTMzYjg0YTA2ODY5YWUyOTc2MTFiM2RiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmNTIwMTNhZGE1MjQxMmM5YWMxZmY5NmE5ZjhkM2VkLnNldENvbnRlbnQoaHRtbF85OWM0NDc0ZTMzYjg0YTA2ODY5YWUyOTc2MTFiM2RiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZTdlYzBjZTgyZTA0YmUyOGFjNDZhNjA4Y2EzY2Q0Yi5iaW5kUG9wdXAocG9wdXBfMmY1MjAxM2FkYTUyNDEyYzlhYzFmZjk2YTlmOGQzZWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzVkOTM1ODI2ZGQ2NGIxYTg2YTU1NTNiMWYwNTkzNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xNTA5LC0xMTguNDQ4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliZmNkN2UzZTQ2NzQ4ZjJhOTk3OGQxY2VmYmRhMzQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmYmVjZjg3ZWUzZjQ3MTM4ZGRmMmYyOTgxYzdmY2M5ID0gJCgnPGRpdiBpZD0iaHRtbF8yZmJlY2Y4N2VlM2Y0NzEzOGRkZjJmMjk4MWM3ZmNjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzliZmNkN2UzZTQ2NzQ4ZjJhOTk3OGQxY2VmYmRhMzQ0LnNldENvbnRlbnQoaHRtbF8yZmJlY2Y4N2VlM2Y0NzEzOGRkZjJmMjk4MWM3ZmNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNWQ5MzU4MjZkZDY0YjFhODZhNTU1M2IxZjA1OTM1Yi5iaW5kUG9wdXAocG9wdXBfOWJmY2Q3ZTNlNDY3NDhmMmE5OTc4ZDFjZWZiZGEzNDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTc2MDAwMmU3ZGJmNGUyNmIzMjIzZjc5ODBmMWM1OWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xOTY3LC0xMTguNDUzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkZmU5Nzg0ZDJjYjQ1ZTc4YjZmODQ2ZjM0NDM1YWQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhYTU5NDJkY2IwOTQ0MzM4YzhiYWJiOGZhZmJlNTk1ID0gJCgnPGRpdiBpZD0iaHRtbF84YWE1OTQyZGNiMDk0NDMzOGM4YmFiYjhmYWZiZTU5NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBkZmU5Nzg0ZDJjYjQ1ZTc4YjZmODQ2ZjM0NDM1YWQ3LnNldENvbnRlbnQoaHRtbF84YWE1OTQyZGNiMDk0NDMzOGM4YmFiYjhmYWZiZTU5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNzYwMDAyZTdkYmY0ZTI2YjMyMjNmNzk4MGYxYzU5ZS5iaW5kUG9wdXAocG9wdXBfMGRmZTk3ODRkMmNiNDVlNzhiNmY4NDZmMzQ0MzVhZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjhlYzcxMzUzODhiNGYxN2EyMjYwN2U0YTUyMDJlY2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xODA5LC0xMTguNDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjZiZWI1MWNkMzE0NmViYmI4MWE0YWJiNzZhZDViMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOWYwNmMyNzNkMTI0OWVjYjgwNTUxOTgwZDgwNjQ3MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjlmMDZjMjczZDEyNDllY2I4MDU1MTk4MGQ4MDY0NzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlZhbiBOdXlzPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjZiZWI1MWNkMzE0NmViYmI4MWE0YWJiNzZhZDViMi5zZXRDb250ZW50KGh0bWxfYjlmMDZjMjczZDEyNDllY2I4MDU1MTk4MGQ4MDY0NzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjhlYzcxMzUzODhiNGYxN2EyMjYwN2U0YTUyMDJlY2QuYmluZFBvcHVwKHBvcHVwXzAyNmJlYjUxY2QzMTQ2ZWJiYjgxYTRhYmI3NmFkNWIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MxMjA4MDEzYzYwMDRkNzdhZmM0Yjc2YTQ5ZWM1ZTFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTU0NywtMTE4LjQ1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUzMTAxZmExNjYxZTRiYWZhYzQwZGMxNzdiYTYyMzgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q1Yzg4OTE3NDYwNTQ0MzZhYTdmYjUzMDgzZDRiYjNkID0gJCgnPGRpdiBpZD0iaHRtbF9kNWM4ODkxNzQ2MDU0NDM2YWE3ZmI1MzA4M2Q0YmIzZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzMTAxZmExNjYxZTRiYWZhYzQwZGMxNzdiYTYyMzgwLnNldENvbnRlbnQoaHRtbF9kNWM4ODkxNzQ2MDU0NDM2YWE3ZmI1MzA4M2Q0YmIzZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMTIwODAxM2M2MDA0ZDc3YWZjNGI3NmE0OWVjNWUxZS5iaW5kUG9wdXAocG9wdXBfNTMxMDFmYTE2NjFlNGJhZmFjNDBkYzE3N2JhNjIzODApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWVmOGM0ZDEwYzViNDRhNTk5MjhmMzQwODk1ZjJhMWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xOTAzLC0xMTguNDM3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwN2VkMzNlYzJmYTRiOWY4NGYxODk4YTAyMDE5MDQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U1NDFjNjZlN2U4OTRlNjY5MmJhYTI2YjIzZjY4MzI5ID0gJCgnPGRpdiBpZD0iaHRtbF9lNTQxYzY2ZTdlODk0ZTY2OTJiYWEyNmIyM2Y2ODMyOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwN2VkMzNlYzJmYTRiOWY4NGYxODk4YTAyMDE5MDQyLnNldENvbnRlbnQoaHRtbF9lNTQxYzY2ZTdlODk0ZTY2OTJiYWEyNmIyM2Y2ODMyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZWY4YzRkMTBjNWI0NGE1OTkyOGYzNDA4OTVmMmExZS5iaW5kUG9wdXAocG9wdXBfYjA3ZWQzM2VjMmZhNGI5Zjg0ZjE4OThhMDIwMTkwNDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQ5ZjFhMzY5NzA4NDY4OThlNTU1M2RjMDMyYzUyMTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xNTE3LC0xMTguNDY3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhNmQxYzA5Yjk4NDQxMjRiYjljYWY1OWIxZmRhNDZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFmYTYyNWZlMzY2NTQ0Y2U4NWQ4YmRkZTQ0ZjYyNjk5ID0gJCgnPGRpdiBpZD0iaHRtbF8xZmE2MjVmZTM2NjU0NGNlODVkOGJkZGU0NGY2MjY5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VmFuIE51eXM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FhNmQxYzA5Yjk4NDQxMjRiYjljYWY1OWIxZmRhNDZjLnNldENvbnRlbnQoaHRtbF8xZmE2MjVmZTM2NjU0NGNlODVkOGJkZGU0NGY2MjY5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNDlmMWEzNjk3MDg0Njg5OGU1NTUzZGMwMzJjNTIxNy5iaW5kUG9wdXAocG9wdXBfYWE2ZDFjMDliOTg0NDEyNGJiOWNhZjU5YjFmZGE0NmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNThmYzBlMjdiZmRmNDhmNTllMjRiMDA3MjJjNmFkNTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xODQ4LC0xMTguNTM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQ2YWNjOWQ1MzA0NDhlNTlmYWI3NDYwMmM0YjRlMGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQ0ZjdjMzE3NjI1NDNiMWI5NTQ3Yzk2ZDE3OGRiZjggPSAkKCc8ZGl2IGlkPSJodG1sX2JkNGY3YzMxNzYyNTQzYjFiOTU0N2M5NmQxNzhkYmY4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFZhbGxleTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzQ2YWNjOWQ1MzA0NDhlNTlmYWI3NDYwMmM0YjRlMGMuc2V0Q29udGVudChodG1sX2JkNGY3YzMxNzYyNTQzYjFiOTU0N2M5NmQxNzhkYmY4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU4ZmMwZTI3YmZkZjQ4ZjU5ZTI0YjAwNzIyYzZhZDU2LmJpbmRQb3B1cChwb3B1cF83NDZhY2M5ZDUzMDQ0OGU1OWZhYjc0NjAyYzRiNGUwYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjJkNjIyZDMxNDY0MzA3YTBkMGM4ZjdhZjc1ZjNmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIwMTIsLTExOC40NzkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTRlNmQ2MmQ5NGJhNGM0MjkwYzJkNDZiMTkzNzg1ZDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzkwYTNhOGI4ZWE0NDMzZDhkODBiYzcwODgwMDk4NDcgPSAkKCc8ZGl2IGlkPSJodG1sXzM5MGEzYThiOGVhNDQzM2Q4ZDgwYmM3MDg4MDA5ODQ3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFZhbGxleTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTRlNmQ2MmQ5NGJhNGM0MjkwYzJkNDZiMTkzNzg1ZDAuc2V0Q29udGVudChodG1sXzM5MGEzYThiOGVhNDQzM2Q4ZDgwYmM3MDg4MDA5ODQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiMmQ2MjJkMzE0NjQzMDdhMGQwYzhmN2FmNzVmM2ZmLmJpbmRQb3B1cChwb3B1cF9lNGU2ZDYyZDk0YmE0YzQyOTBjMmQ0NmIxOTM3ODVkMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWZkMmI0ZTBhMTE0NmFiOTE4MjAyZmQ0Mzg1M2QwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjE3MjIsLTExOC41MDExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc2MTJiMTExMDdhNGZkMGExYTJjYTI4OTNmZmZmZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzVlNTRmZmY4Zjg2NDc4N2E2MzU2NTRhMGMzMmY0ODYgPSAkKCc8ZGl2IGlkPSJodG1sXzM1ZTU0ZmZmOGY4NjQ3ODdhNjM1NjU0YTBjMzJmNDg2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFZhbGxleTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc2MTJiMTExMDdhNGZkMGExYTJjYTI4OTNmZmZmZDQuc2V0Q29udGVudChodG1sXzM1ZTU0ZmZmOGY4NjQ3ODdhNjM1NjU0YTBjMzJmNDg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlZmQyYjRlMGExMTQ2YWI5MTgyMDJmZDQzODUzZDAyLmJpbmRQb3B1cChwb3B1cF84NzYxMmIxMTEwN2E0ZmQwYTFhMmNhMjg5M2ZmZmZkNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YmI5ZDBjNDZiZTI0ZTU3YjQ1OGJlOTRlYTIyZmRlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIwNDgsLTExOC40ODM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTc3N2JjZDY2NTU2NGQwMTk1MTYxNjg0Yjc0MDZlZjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJjNzc2NGNkNDY1NGI4ZDg3Y2FlZjRkZTFmNTdmY2MgPSAkKCc8ZGl2IGlkPSJodG1sXzRiYzc3NjRjZDQ2NTRiOGQ4N2NhZWY0ZGUxZjU3ZmNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFZhbGxleTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTc3N2JjZDY2NTU2NGQwMTk1MTYxNjg0Yjc0MDZlZjAuc2V0Q29udGVudChodG1sXzRiYzc3NjRjZDQ2NTRiOGQ4N2NhZWY0ZGUxZjU3ZmNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZiYjlkMGM0NmJlMjRlNTdiNDU4YmU5NGVhMjJmZGU2LmJpbmRQb3B1cChwb3B1cF8xNzc3YmNkNjY1NTY0ZDAxOTUxNjE2ODRiNzQwNmVmMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84M2JiZWJlNDk2NmY0NTVlYjIxZjgwMmVmMjk4ZDc4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjE3MjMsLTExOC41MDMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjE0ZjMzN2EwMzY4NGM0ODgwM2NiOTkyNzllNDFmOTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzAyYjEzZTQ2ZTM3NDc4YzljYzEzMTlhNWJjNTZlY2EgPSAkKCc8ZGl2IGlkPSJodG1sXzcwMmIxM2U0NmUzNzQ3OGM5Y2MxMzE5YTViYzU2ZWNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFZhbGxleTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjE0ZjMzN2EwMzY4NGM0ODgwM2NiOTkyNzllNDFmOTAuc2V0Q29udGVudChodG1sXzcwMmIxM2U0NmUzNzQ3OGM5Y2MxMzE5YTViYzU2ZWNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgzYmJlYmU0OTY2ZjQ1NWViMjFmODAyZWYyOThkNzhiLmJpbmRQb3B1cChwb3B1cF9iMTRmMzM3YTAzNjg0YzQ4ODAzY2I5OTI3OWU0MWY5MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MWY1OTY1NzI2ODU0NzViYTIwNzg2N2Q3MWRkMDY3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIyMDYsLTExOC41NDQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2MyYWY4MWIxY2FhNDBlNzk0MmY4M2RlZTc4OThmNzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzk3MDJkNDZjNTc2NDVmY2JmYTY3MmI2MWMzZWEwMmYgPSAkKCc8ZGl2IGlkPSJodG1sXzM5NzAyZDQ2YzU3NjQ1ZmNiZmE2NzJiNjFjM2VhMDJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5XZXN0IFZhbGxleTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2MyYWY4MWIxY2FhNDBlNzk0MmY4M2RlZTc4OThmNzQuc2V0Q29udGVudChodG1sXzM5NzAyZDQ2YzU3NjQ1ZmNiZmE2NzJiNjFjM2VhMDJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxZjU5NjU3MjY4NTQ3NWJhMjA3ODY3ZDcxZGQwNjcyLmJpbmRQb3B1cChwb3B1cF9jYzJhZjgxYjFjYWE0MGU3OTQyZjgzZGVlNzg5OGY3NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDE5MmIxYTAzNzk0ZjBmOWYzOTY4NmRmZTdiNGQxNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjE2NiwtMTE4LjUwOTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Mzg2Y2IyYzEzYzY0NWU2YTJjMmE1OWE0Yjc5YmI1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xNTkxNmNjNmFiYWI0MDNjYmIzOTA5ZDc4OTcxMjAzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTU5MTZjYzZhYmFiNDAzY2JiMzkwOWQ3ODk3MTIwMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgVmFsbGV5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81Mzg2Y2IyYzEzYzY0NWU2YTJjMmE1OWE0Yjc5YmI1My5zZXRDb250ZW50KGh0bWxfMTU5MTZjYzZhYmFiNDAzY2JiMzkwOWQ3ODk3MTIwMzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjQxOTJiMWEwMzc5NGYwZjlmMzk2ODZkZmU3YjRkMTUuYmluZFBvcHVwKHBvcHVwXzUzODZjYjJjMTNjNjQ1ZTZhMmMyYTU5YTRiNzliYjUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4OWJmNGM1Zjk5NTRhM2RiMDY3MDIzZDA0Mjg3OTBlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTczNCwtMTE4LjU2MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83NzJiNjgzNWY2MjY0NTljYmYwNGE2YzlmNmQxN2JiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83N2Q5MWQyNThmMzI0MmIwYWEyYjNhODA4ZDMzMmQxMSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzdkOTFkMjU4ZjMyNDJiMGFhMmIzYTgwOGQzMzJkMTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPldlc3QgVmFsbGV5PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NzJiNjgzNWY2MjY0NTljYmYwNGE2YzlmNmQxN2JiZi5zZXRDb250ZW50KGh0bWxfNzdkOTFkMjU4ZjMyNDJiMGFhMmIzYTgwOGQzMzJkMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTg5YmY0YzVmOTk1NGEzZGIwNjcwMjNkMDQyODc5MGUuYmluZFBvcHVwKHBvcHVwXzc3MmI2ODM1ZjYyNjQ1OWNiZjA0YTZjOWY2ZDE3YmJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwYjMyYzljMjQ5YTRkZTM4MmM1MGI0NGI4YzRiOTZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTE4MSwtMTE4LjE4OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YzczYTc0YzgwMDE0OThmYjFlYjNiYTQ2MjAwYWU5YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTNkYjI5YWQwMTI0ZjkxOGUwYzJmNTc4ZmM2NGQzYSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTkzZGIyOWFkMDEyNGY5MThlMGMyZjU3OGZjNjRkM2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGM3M2E3NGM4MDAxNDk4ZmIxZWIzYmE0NjIwMGFlOWEuc2V0Q29udGVudChodG1sXzk5M2RiMjlhZDAxMjRmOTE4ZTBjMmY1NzhmYzY0ZDNhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwYjMyYzljMjQ5YTRkZTM4MmM1MGI0NGI4YzRiOTZmLmJpbmRQb3B1cChwb3B1cF80YzczYTc0YzgwMDE0OThmYjFlYjNiYTQ2MjAwYWU5YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTk0Nzg1MDMyOTU0NGQwYTczODZiMzM1MmRlOGIzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjEzNjYsLTExOC4yMTY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWJiMmEyNTllZDI0NGFjNzk5ZGNkMGUzYzM3YjU1N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjMzZDZkMjhkYTNkNGU2M2E1NzdkZDExYTJiZTgwYmQgPSAkKCc8ZGl2IGlkPSJodG1sX2IzM2Q2ZDI4ZGEzZDRlNjNhNTc3ZGQxMWEyYmU4MGJkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiYjJhMjU5ZWQyNDRhYzc5OWRjZDBlM2MzN2I1NTdlLnNldENvbnRlbnQoaHRtbF9iMzNkNmQyOGRhM2Q0ZTYzYTU3N2RkMTFhMmJlODBiZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YTk0Nzg1MDMyOTU0NGQwYTczODZiMzM1MmRlOGIzYi5iaW5kUG9wdXAocG9wdXBfMWJiMmEyNTllZDI0NGFjNzk5ZGNkMGUzYzM3YjU1N2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmJmMDI3ZWE0MTU5NDAzN2JkYmY3OGFjMTNkYjQ3NDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wOTc0LC0xMTguMjM2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyYjc5MTU0M2IxYjRjOTdiOWFkN2ViZGVlM2Y1ZDYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1MDI3YjRjNTBlZjRjOGRhMWYxOWI2YmUwMDYxMjlhID0gJCgnPGRpdiBpZD0iaHRtbF8yNTAyN2I0YzUwZWY0YzhkYTFmMTliNmJlMDA2MTI5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMmI3OTE1NDNiMWI0Yzk3YjlhZDdlYmRlZTNmNWQ2My5zZXRDb250ZW50KGh0bWxfMjUwMjdiNGM1MGVmNGM4ZGExZjE5YjZiZTAwNjEyOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmJmMDI3ZWE0MTU5NDAzN2JkYmY3OGFjMTNkYjQ3NDcuYmluZFBvcHVwKHBvcHVwX2YyYjc5MTU0M2IxYjRjOTdiOWFkN2ViZGVlM2Y1ZDYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgzNzQzMDJhMjUwODQ1MDhiZjg0ZDAwOGJiOTE4ZDEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDkzMiwtMTE4LjIxMTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MzExNWE5YmJmMmY0ZWQ1ODVkYjdlMDk3ZDI1MmFlMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZTcyMDJkNDdmZDk0NmY2OTc5YzdmOWQzMTExNDkyMSA9ICQoJzxkaXYgaWQ9Imh0bWxfM2U3MjAyZDQ3ZmQ5NDZmNjk3OWM3ZjlkMzExMTQ5MjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzMxMTVhOWJiZjJmNGVkNTg1ZGI3ZTA5N2QyNTJhZTIuc2V0Q29udGVudChodG1sXzNlNzIwMmQ0N2ZkOTQ2ZjY5NzljN2Y5ZDMxMTE0OTIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgzNzQzMDJhMjUwODQ1MDhiZjg0ZDAwOGJiOTE4ZDEzLmJpbmRQb3B1cChwb3B1cF83MzExNWE5YmJmMmY0ZWQ1ODVkYjdlMDk3ZDI1MmFlMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYmM2MzI4Yjc2ODE0MTRkOTBkNmZjMzU3ZTc3MTE3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjExMjUsLTExOC4yNTg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTQ5NTE4YjU2ZDcwNDgwZGI0NmE3MjMzN2FmN2NjNjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGY5ZTljY2I4MzJiNDdlNDk3ZGU2NjQ2MjYxZjU4ZjEgPSAkKCc8ZGl2IGlkPSJodG1sXzhmOWU5Y2NiODMyYjQ3ZTQ5N2RlNjY0NjI2MWY1OGYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE0OTUxOGI1NmQ3MDQ4MGRiNDZhNzIzMzdhZjdjYzY0LnNldENvbnRlbnQoaHRtbF84ZjllOWNjYjgzMmI0N2U0OTdkZTY2NDYyNjFmNThmMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYmM2MzI4Yjc2ODE0MTRkOTBkNmZjMzU3ZTc3MTE3My5iaW5kUG9wdXAocG9wdXBfMTQ5NTE4YjU2ZDcwNDgwZGI0NmE3MjMzN2FmN2NjNjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTU1MWQxMWRkNDRmNGY0OTk2MjFkZjQ1MmZkY2QwM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODA2LC0xMTguMjYxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1OThjMDQzNWM2ZDQ4NmZiZDQzOWRkYTZiODQzZDExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzYjE1NDU0MGJiYzRhMzFhODI4OWFmOGU1NGQzOGYyID0gJCgnPGRpdiBpZD0iaHRtbF9kM2IxNTQ1NDBiYmM0YTMxYTgyODlhZjhlNTRkMzhmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTk4YzA0MzVjNmQ0ODZmYmQ0MzlkZGE2Yjg0M2QxMS5zZXRDb250ZW50KGh0bWxfZDNiMTU0NTQwYmJjNGEzMWE4Mjg5YWY4ZTU0ZDM4ZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTU1MWQxMWRkNDRmNGY0OTk2MjFkZjQ1MmZkY2QwM2QuYmluZFBvcHVwKHBvcHVwXzM1OThjMDQzNWM2ZDQ4NmZiZDQzOWRkYTZiODQzZDExKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2NjA3ZjVkZjg1NjQ5M2E4Nzg2MjJiM2RmNGQzOWE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTIwMywtMTE4LjE5MDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yOGFjOWRiNDkyOTA0MmUyOWYyYTI0NmIxNDg4NjNjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYmNiYTFjNjZlMTA0MTFiYjA3ZTNkYjNmMjQ4ZTI0OCA9ICQoJzxkaXYgaWQ9Imh0bWxfMmJjYmExYzY2ZTEwNDExYmIwN2UzZGIzZjI0OGUyNDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjhhYzlkYjQ5MjkwNDJlMjlmMmEyNDZiMTQ4ODYzYzguc2V0Q29udGVudChodG1sXzJiY2JhMWM2NmUxMDQxMWJiMDdlM2RiM2YyNDhlMjQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M2NjA3ZjVkZjg1NjQ5M2E4Nzg2MjJiM2RmNGQzOWE2LmJpbmRQb3B1cChwb3B1cF8yOGFjOWRiNDkyOTA0MmUyOWYyYTI0NmIxNDg4NjNjOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MjNlYTIxZWVhMjM0ZTVhOWFkOWViM2RkNjQzNzQ1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA5OTMsLTExOC4yODM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzBkMWQ4YWExYjE4NGYyOGE3MjI3YTI0MjM1YTEyOGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzBiMjhiYzdhODQzNGY4YThiYjIzMzg2NTJiMjcxMGYgPSAkKCc8ZGl2IGlkPSJodG1sXzcwYjI4YmM3YTg0MzRmOGE4YmIyMzM4NjUyYjI3MTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwZDFkOGFhMWIxODRmMjhhNzIyN2EyNDIzNWExMjhiLnNldENvbnRlbnQoaHRtbF83MGIyOGJjN2E4NDM0ZjhhOGJiMjMzODY1MmIyNzEwZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MjNlYTIxZWVhMjM0ZTVhOWFkOWViM2RkNjQzNzQ1Ni5iaW5kUG9wdXAocG9wdXBfMzBkMWQ4YWExYjE4NGYyOGE3MjI3YTI0MjM1YTEyOGIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDEzNDNkMGQ0YmEzNGIyOWIxODhkYzQ3ZDZiZGM0N2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODc2LC0xMTguMjEyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyMGFjZmRiMzU1NjQ4MzI4OTRlNTIwNjBkOGM0Zjc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5ZDljOWQyYjY4MDRhODI4ODI2YThmYjM3MjMzZjVlID0gJCgnPGRpdiBpZD0iaHRtbF85OWQ5YzlkMmI2ODA0YTgyODgyNmE4ZmIzNzIzM2Y1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zMjBhY2ZkYjM1NTY0ODMyODk0ZTUyMDYwZDhjNGY3OC5zZXRDb250ZW50KGh0bWxfOTlkOWM5ZDJiNjgwNGE4Mjg4MjZhOGZiMzcyMzNmNWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDEzNDNkMGQ0YmEzNGIyOWIxODhkYzQ3ZDZiZGM0N2MuYmluZFBvcHVwKHBvcHVwXzMyMGFjZmRiMzU1NjQ4MzI4OTRlNTIwNjBkOGM0Zjc4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JjZTlmYTAwYWZkMTQ3ZjRiMWQ3N2IyN2E0MmYxOWI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDg4NCwtMTE4LjIyNThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNjQyNzEzMmNiMTQ0MWExOTRmNTVlZTE2MjgxZjIyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83OGIxZTc4OTQ1ZmY0YzdmOTE5Y2VkMDhjYWNjMzcyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfNzhiMWU3ODk0NWZmNGM3ZjkxOWNlZDA4Y2FjYzM3MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDY0MjcxMzJjYjE0NDFhMTk0ZjU1ZWUxNjI4MWYyMjkuc2V0Q29udGVudChodG1sXzc4YjFlNzg5NDVmZjRjN2Y5MTljZWQwOGNhY2MzNzIzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JjZTlmYTAwYWZkMTQ3ZjRiMWQ3N2IyN2E0MmYxOWI0LmJpbmRQb3B1cChwb3B1cF9kNjQyNzEzMmNiMTQ0MWExOTRmNTVlZTE2MjgxZjIyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjFjZTk3ZTI0OTc0ODk3YWU0YzVjNmE4MGE2NjQwYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA4ODIsLTExOC4yNTEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzY5NjBiYjBhYjJkNDFjMTk3OGI3MTMzODBlNzAxN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWQ1ZmYwMmZhMGJiNDAwMGExMjA0ZjNjMThmMDcwYzUgPSAkKCc8ZGl2IGlkPSJodG1sXzVkNWZmMDJmYTBiYjQwMDBhMTIwNGYzYzE4ZjA3MGM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM2OTYwYmIwYWIyZDQxYzE5NzhiNzEzMzgwZTcwMTdlLnNldENvbnRlbnQoaHRtbF81ZDVmZjAyZmEwYmI0MDAwYTEyMDRmM2MxOGYwNzBjNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZjFjZTk3ZTI0OTc0ODk3YWU0YzVjNmE4MGE2NjQwYi5iaW5kUG9wdXAocG9wdXBfMzY5NjBiYjBhYjJkNDFjMTk3OGI3MTMzODBlNzAxN2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWVlMDNkOTYyNTIzNDEwZjk2ZjVlYTBiZWQ0YzIyYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODg1LC0xMTguMjQ3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1NzYyMDZmNmI1ZDRhYjI5ZjM5MmEyZGIyMWRkOGRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ3YmE1MTIzNjlmMzQwMjQ5Y2ZkM2VjZjg2MzZjYzY2ID0gJCgnPGRpdiBpZD0iaHRtbF80N2JhNTEyMzY5ZjM0MDI0OWNmZDNlY2Y4NjM2Y2M2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NTc2MjA2ZjZiNWQ0YWIyOWYzOTJhMmRiMjFkZDhkYi5zZXRDb250ZW50KGh0bWxfNDdiYTUxMjM2OWYzNDAyNDljZmQzZWNmODYzNmNjNjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWVlMDNkOTYyNTIzNDEwZjk2ZjVlYTBiZWQ0YzIyYjcuYmluZFBvcHVwKHBvcHVwXzY1NzYyMDZmNmI1ZDRhYjI5ZjM5MmEyZGIyMWRkOGRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkN2I5YjBjMmQxNDQ2ODg5MzVjN2NkYzY1ODMyMTc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDkxNSwtMTE4LjIyODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODRhYjIzNWE4M2U0NWM1ODM0MDVkZTQ4YmM5MTVmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MDVkN2Y2NTRmMzE0NjdkYjllYTdmYTQ5Mjk5MGMwZSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDA1ZDdmNjU0ZjMxNDY3ZGI5ZWE3ZmE0OTI5OTBjMGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg0YWIyMzVhODNlNDVjNTgzNDA1ZGU0OGJjOTE1Zjkuc2V0Q29udGVudChodG1sXzQwNWQ3ZjY1NGYzMTQ2N2RiOWVhN2ZhNDkyOTkwYzBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBkN2I5YjBjMmQxNDQ2ODg5MzVjN2NkYzY1ODMyMTc3LmJpbmRQb3B1cChwb3B1cF9jODRhYjIzNWE4M2U0NWM1ODM0MDVkZTQ4YmM5MTVmOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYjQxNTEyOGYyMWI0MWE0YWE2ZmM3YTA3MmEzZWVlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3ODIsLTExOC4yNTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE4NDQ0ZGE2M2ZmNDcyNGIyZTAxYzcyZTBjYjRiOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWI5NjhjOGRlY2Q2NGVjNmFkNThkYWE2OWQ5NWQzZmYgPSAkKCc8ZGl2IGlkPSJodG1sXzFiOTY4YzhkZWNkNjRlYzZhZDU4ZGFhNjlkOTVkM2ZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExODQ0NGRhNjNmZjQ3MjRiMmUwMWM3MmUwY2I0Yjk5LnNldENvbnRlbnQoaHRtbF8xYjk2OGM4ZGVjZDY0ZWM2YWQ1OGRhYTY5ZDk1ZDNmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYjQxNTEyOGYyMWI0MWE0YWE2ZmM3YTA3MmEzZWVlYy5iaW5kUG9wdXAocG9wdXBfMTE4NDQ0ZGE2M2ZmNDcyNGIyZTAxYzcyZTBjYjRiOTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWM3YTBjZTdmMjM1NGM4MWJkZGU5MWM5ZGM4MzVhMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xMDc3LC0xMTguMjk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjkwNTgxYjY0YWVmNDNlZmE5ODMwMWRkY2Q2YzI3M2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDM3NjM4NWY2M2E3NGY3YTkwYWY2Y2NiZjRmZTg0ZTAgPSAkKCc8ZGl2IGlkPSJodG1sX2QzNzYzODVmNjNhNzRmN2E5MGFmNmNjYmY0ZmU4NGUwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI5MDU4MWI2NGFlZjQzZWZhOTgzMDFkZGNkNmMyNzNkLnNldENvbnRlbnQoaHRtbF9kMzc2Mzg1ZjYzYTc0ZjdhOTBhZjZjY2JmNGZlODRlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YzdhMGNlN2YyMzU0YzgxYmRkZTkxYzlkYzgzNWEyOC5iaW5kUG9wdXAocG9wdXBfMjkwNTgxYjY0YWVmNDNlZmE5ODMwMWRkY2Q2YzI3M2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTljYzJlZThlYjYxNGNiZThjNzhhN2Y0M2I3MTk0ZjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xMjE5LC0xMTguMjQyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkN2YwMjkyMjM4YjRjM2RhOGIzOTgzYzc1YmFjOWI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2N2IxZTMzYjQxNjQzNjc5MTJiNWJiZDk3NzRiNzQ4ID0gJCgnPGRpdiBpZD0iaHRtbF9iNjdiMWUzM2I0MTY0MzY3OTEyYjViYmQ5Nzc0Yjc0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZDdmMDI5MjIzOGI0YzNkYThiMzk4M2M3NWJhYzliNy5zZXRDb250ZW50KGh0bWxfYjY3YjFlMzNiNDE2NDM2NzkxMmI1YmJkOTc3NGI3NDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTljYzJlZThlYjYxNGNiZThjNzhhN2Y0M2I3MTk0ZjQuYmluZFBvcHVwKHBvcHVwXzFkN2YwMjkyMjM4YjRjM2RhOGIzOTgzYzc1YmFjOWI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI4Y2M1ZjBlYzdmOTRhYmFhMDMwOGJiZjliYjlmZjdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTEzOSwtMTE4LjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YzMDc1M2RkYTU1YjRjZjNiNzJmZmVmMjZlNmM2ZjY5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RmMTU3MGM4ODcyYTRlMzdhZjZkZDMyYjFiZWRmOTExID0gJCgnPGRpdiBpZD0iaHRtbF9kZjE1NzBjODg3MmE0ZTM3YWY2ZGQzMmIxYmVkZjkxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMzA3NTNkZGE1NWI0Y2YzYjcyZmZlZjI2ZTZjNmY2OS5zZXRDb250ZW50KGh0bWxfZGYxNTcwYzg4NzJhNGUzN2FmNmRkMzJiMWJlZGY5MTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjhjYzVmMGVjN2Y5NGFiYWEwMzA4YmJmOWJiOWZmN2YuYmluZFBvcHVwKHBvcHVwX2YzMDc1M2RkYTU1YjRjZjNiNzJmZmVmMjZlNmM2ZjY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlOTMxZTZkMTE4MjRkNzc5NWJkZmM3YWE1ODI3NzI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDk0NSwtMTE4LjIxMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MTVhYzI3ODIwNDk0NTFmODNkNjcxNjcyMTEwOWI3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzk0YjliZDNjMTI0NGY0OGQyY2E0NjA3YTJiNDZmMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjM5NGI5YmQzYzEyNDRmNDhkMmNhNDYwN2EyYjQ2ZjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDE1YWMyNzgyMDQ5NDUxZjgzZDY3MTY3MjExMDliNzcuc2V0Q29udGVudChodG1sXzIzOTRiOWJkM2MxMjQ0ZjQ4ZDJjYTQ2MDdhMmI0NmYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlOTMxZTZkMTE4MjRkNzc5NWJkZmM3YWE1ODI3NzI1LmJpbmRQb3B1cChwb3B1cF80MTVhYzI3ODIwNDk0NTFmODNkNjcxNjcyMTEwOWI3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NmNmOGVmZjRmYTY0ZGViYmVlMWQwOGI4ODZkNDhiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjEwMzcsLTExOC4yMDY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjhmM2FhNmFhMWFmNDNiNDg1OGJhODY0YmM1YjFhMmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTNhODU3NGFjNTM0NDljNWJlNGQ3ZTcyZDM4NGJhODQgPSAkKCc8ZGl2IGlkPSJodG1sXzEzYTg1NzRhYzUzNDQ5YzViZTRkN2U3MmQzODRiYTg0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4ZjNhYTZhYTFhZjQzYjQ4NThiYTg2NGJjNWIxYTJkLnNldENvbnRlbnQoaHRtbF8xM2E4NTc0YWM1MzQ0OWM1YmU0ZDdlNzJkMzg0YmE4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NmNmOGVmZjRmYTY0ZGViYmVlMWQwOGI4ODZkNDhiOS5iaW5kUG9wdXAocG9wdXBfYjhmM2FhNmFhMWFmNDNiNDg1OGJhODY0YmM1YjFhMmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjdhNzA3YTQyNGMxNGMyYWI0MTZkYWUxNjhiZjcwODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xMTcxLC0xMTguMjU5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjZDU2MGNmNTI2MjQyNGVhZDcyNTAwMjhlNmM2MThjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyNjliMzBmNTgxMDQ1MTQ5MzA4MDgzODEyNmY4MjdiID0gJCgnPGRpdiBpZD0iaHRtbF84MjY5YjMwZjU4MTA0NTE0OTMwODA4MzgxMjZmODI3YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Tm9ydGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zY2Q1NjBjZjUyNjI0MjRlYWQ3MjUwMDI4ZTZjNjE4Yy5zZXRDb250ZW50KGh0bWxfODI2OWIzMGY1ODEwNDUxNDkzMDgwODM4MTI2ZjgyN2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjdhNzA3YTQyNGMxNGMyYWI0MTZkYWUxNjhiZjcwODcuYmluZFBvcHVwKHBvcHVwXzNjZDU2MGNmNTI2MjQyNGVhZDcyNTAwMjhlNmM2MThjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyY2YzYTM0MjY4NDQ3YTE4YWJhMmY0ZjUwNzAyNjY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTEzMSwtMTE4LjE4OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYTdmZjQ2MTA4N2M0Mjc4ODNmN2NmNjhlNjkxYmQ2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OGRmMDczMzJiMzA0MjZmYmI0YWM2ZmU2YjUyZWM3OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNDhkZjA3MzMyYjMwNDI2ZmJiNGFjNmZlNmI1MmVjNzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5vcnRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWE3ZmY0NjEwODdjNDI3ODgzZjdjZjY4ZTY5MWJkNjcuc2V0Q29udGVudChodG1sXzQ4ZGYwNzMzMmIzMDQyNmZiYjRhYzZmZTZiNTJlYzc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAyY2YzYTM0MjY4NDQ3YTE4YWJhMmY0ZjUwNzAyNjY4LmJpbmRQb3B1cChwb3B1cF9lYTdmZjQ2MTA4N2M0Mjc4ODNmN2NmNjhlNjkxYmQ2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzdmMTg5MzM3YzE0NDcxYTc1NThmM2I5YzgzYzdiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjEwNDksLTExOC4yNTQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTM1Y2RjMDRjMmQzNDMwNWE4NTliY2FjZTA1OWUyODUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWE0Zjc0MTk0N2EwNGZkOTllNmM4MzliODVhOTBkMzQgPSAkKCc8ZGl2IGlkPSJodG1sXzVhNGY3NDE5NDdhMDRmZDk5ZTZjODM5Yjg1YTkwZDM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ob3J0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzNWNkYzA0YzJkMzQzMDVhODU5YmNhY2UwNTllMjg1LnNldENvbnRlbnQoaHRtbF81YTRmNzQxOTQ3YTA0ZmQ5OWU2YzgzOWI4NWE5MGQzNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YzdmMTg5MzM3YzE0NDcxYTc1NThmM2I5YzgzYzdiNC5iaW5kUG9wdXAocG9wdXBfOTM1Y2RjMDRjMmQzNDMwNWE4NTliY2FjZTA1OWUyODUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWUzZGM2MzVkYmQ3NDcwNGIxODM4NmUwZTU2ZGExMTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTgzLC0xMTguMjgyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNzhiOTExNzkyNTQ2ZTA4ZmRiMjc3MWE0OGZmYjYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0MDljNjQxNDVjZDQyNGFiZDUxNDViMDFiMWJiMGE5ID0gJCgnPGRpdiBpZD0iaHRtbF81NDA5YzY0MTQ1Y2Q0MjRhYmQ1MTQ1YjAxYjFiYjBhOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjNzhiOTExNzkyNTQ2ZTA4ZmRiMjc3MWE0OGZmYjYzLnNldENvbnRlbnQoaHRtbF81NDA5YzY0MTQ1Y2Q0MjRhYmQ1MTQ1YjAxYjFiYjBhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTNkYzYzNWRiZDc0NzA0YjE4Mzg2ZTBlNTZkYTExMS5iaW5kUG9wdXAocG9wdXBfZWM3OGI5MTE3OTI1NDZlMDhmZGIyNzcxYTQ4ZmZiNjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjVmNzQ2ZDE1NDM5NGU0ZThkOTNmOGQxNTczNTlhNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NzI3LC0xMTguMjgyN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxMGRlNjU0MTc4ZTQxZGI5OTJlOTRkOTJkODBjOTU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhlMTA0NGMwOWQ4YzQwNTE5ZTQ1YTMxMmRlZTgwYTFjID0gJCgnPGRpdiBpZD0iaHRtbF84ZTEwNDRjMDlkOGM0MDUxOWU0NWEzMTJkZWU4MGExYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUxMGRlNjU0MTc4ZTQxZGI5OTJlOTRkOTJkODBjOTU5LnNldENvbnRlbnQoaHRtbF84ZTEwNDRjMDlkOGM0MDUxOWU0NWEzMTJkZWU4MGExYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NWY3NDZkMTU0Mzk0ZTRlOGQ5M2Y4ZDE1NzM1OWE2Ni5iaW5kUG9wdXAocG9wdXBfNTEwZGU2NTQxNzhlNDFkYjk5MmU5NGQ5MmQ4MGM5NTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQxZDI3ZDE3YWRiNDJiNjllMzU3NWU4NDc2MjQ2YWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NzQ4LC0xMTguMjU4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiYmMyOWM2ZWUzMzQwMWVhMmVkYjljZjI1YWU0ODQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M3MGI3NmJjYTUxMDQzMDViZjhlY2Q3YmRiYzBkNjE2ID0gJCgnPGRpdiBpZD0iaHRtbF9jNzBiNzZiY2E1MTA0MzA1YmY4ZWNkN2JkYmMwZDYxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiYmMyOWM2ZWUzMzQwMWVhMmVkYjljZjI1YWU0ODQ4LnNldENvbnRlbnQoaHRtbF9jNzBiNzZiY2E1MTA0MzA1YmY4ZWNkN2JkYmMwZDYxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZDFkMjdkMTdhZGI0MmI2OWUzNTc1ZTg0NzYyNDZhYi5iaW5kUG9wdXAocG9wdXBfNGJiYzI5YzZlZTMzNDAxZWEyZWRiOWNmMjVhZTQ4NDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjI3Y2E3MTU0NDU0NDhmZjk1ZjliNmQ4MzJkZDEyYjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NzMsLTExOC4yNjczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzRmZDlhZDk0Y2FjNGFiZmIwNDRjNWI2ZDU2ODRmNWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDk0ZTI3NmQ0MTAyNGE0ZDk5MzY3NTVkOWNmZjRjZGQgPSAkKCc8ZGl2IGlkPSJodG1sXzA5NGUyNzZkNDEwMjRhNGQ5OTM2NzU1ZDljZmY0Y2RkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzRmZDlhZDk0Y2FjNGFiZmIwNDRjNWI2ZDU2ODRmNWIuc2V0Q29udGVudChodG1sXzA5NGUyNzZkNDEwMjRhNGQ5OTM2NzU1ZDljZmY0Y2RkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIyN2NhNzE1NDQ1NDQ4ZmY5NWY5YjZkODMyZGQxMmI5LmJpbmRQb3B1cChwb3B1cF83NGZkOWFkOTRjYWM0YWJmYjA0NGM1YjZkNTY4NGY1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWZlYjBiZDU5MGE0ZjE0YjI1NTUyZjJiZTkyZWViZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk5MzIsLTExOC4yODkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWEwNmEyZmIxZjk0NDgxYTlmNDdhZGM5OGJkMWJmMmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWUyZDUyMDJkYzY2NGRkYThhMzFiOTZiNjdmNDkxMjggPSAkKCc8ZGl2IGlkPSJodG1sX2FlMmQ1MjAyZGM2NjRkZGE4YTMxYjk2YjY3ZjQ5MTI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWEwNmEyZmIxZjk0NDgxYTlmNDdhZGM5OGJkMWJmMmMuc2V0Q29udGVudChodG1sX2FlMmQ1MjAyZGM2NjRkZGE4YTMxYjk2YjY3ZjQ5MTI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZhZmViMGJkNTkwYTRmMTRiMjU1NTJmMmJlOTJlZWJkLmJpbmRQb3B1cChwb3B1cF85YTA2YTJmYjFmOTQ0ODFhOWY0N2FkYzk4YmQxYmYyYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDMwNDA1YmUyYTY0ZDgwYmJkMjVhNjE3Yzk1MjA2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4OTIsLTExOC4zMDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjQ5ZTk1OGJiMmNhNGU0OWJkYTdjNmYxZTliMzQ1N2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmJiNGQyM2UwZTM2NDkzYjhhOTRjYjdhYmM4ZTUzMWQgPSAkKCc8ZGl2IGlkPSJodG1sX2JiYjRkMjNlMGUzNjQ5M2I4YTk0Y2I3YWJjOGU1MzFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjQ5ZTk1OGJiMmNhNGU0OWJkYTdjNmYxZTliMzQ1N2Yuc2V0Q29udGVudChodG1sX2JiYjRkMjNlMGUzNjQ5M2I4YTk0Y2I3YWJjOGU1MzFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0MzA0MDViZTJhNjRkODBiYmQyNWE2MTdjOTUyMDYwLmJpbmRQb3B1cChwb3B1cF8yNDllOTU4YmIyY2E0ZTQ5YmRhN2M2ZjFlOWIzNDU3Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTZiNDcxZmVlMjk0NjM2YjQwMzMwZGJhOTRjMzBiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk3MjgsLTExOC4yOTYyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZmZGFhY2VhMjdlNDNkYjliNzkyNmVmNmMwMzIwOTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjM5NmJlZGFkNjNjNDdmMjliNjRjOWRiNDEyMDhmNjcgPSAkKCc8ZGl2IGlkPSJodG1sX2IzOTZiZWRhZDYzYzQ3ZjI5YjY0YzlkYjQxMjA4ZjY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjZmZGFhY2VhMjdlNDNkYjliNzkyNmVmNmMwMzIwOTguc2V0Q29udGVudChodG1sX2IzOTZiZWRhZDYzYzQ3ZjI5YjY0YzlkYjQxMjA4ZjY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MxNmI0NzFmZWUyOTQ2MzZiNDAzMzBkYmE5NGMzMGI3LmJpbmRQb3B1cChwb3B1cF9mNmZkYWFjZWEyN2U0M2RiOWI3OTI2ZWY2YzAzMjA5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMDNkZDg4Y2I3OWI0ZDQzOTgzMTM4NTZiNThjYjg2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk2OTMsLTExOC4yODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYWM4NzcxMDJiNWI0NThjOTUyNWE2YWRiODA1OGQyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YzIxNGYyY2M1OTE0NzI4YTNhZGIwMjg0Njc2MTI3NiA9ICQoJzxkaXYgaWQ9Imh0bWxfOGMyMTRmMmNjNTkxNDcyOGEzYWRiMDI4NDY3NjEyNzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYWM4NzcxMDJiNWI0NThjOTUyNWE2YWRiODA1OGQyZS5zZXRDb250ZW50KGh0bWxfOGMyMTRmMmNjNTkxNDcyOGEzYWRiMDI4NDY3NjEyNzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzAzZGQ4OGNiNzliNGQ0Mzk4MzEzODU2YjU4Y2I4NjAuYmluZFBvcHVwKHBvcHVwX2NhYzg3NzEwMmI1YjQ1OGM5NTI1YTZhZGI4MDU4ZDJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEzZmE2Y2ZkOTAyYzQ2ZDA4MzI2NjljMDkwZWZkODM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTc0NiwtMTE4LjMwMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjNiMDY4MTgyOWY0ZTM0OTY5MTc2ODUxMTUwODFjMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Nzc0YTYyODcwMzA0MjBkYmQ3ZjFmODBkMWQ1YjBkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTc3NGE2Mjg3MDMwNDIwZGJkN2YxZjgwZDFkNWIwZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjNiMDY4MTgyOWY0ZTM0OTY5MTc2ODUxMTUwODFjMi5zZXRDb250ZW50KGh0bWxfOTc3NGE2Mjg3MDMwNDIwZGJkN2YxZjgwZDFkNWIwZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTNmYTZjZmQ5MDJjNDZkMDgzMjY2OWMwOTBlZmQ4MzQuYmluZFBvcHVwKHBvcHVwXzAyM2IwNjgxODI5ZjRlMzQ5NjkxNzY4NTExNTA4MWMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1MDQ2MTE1NmZmMzRhZWRiYTExZmY4Y2VhMDA4OTdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTg0MiwtMTE4LjI5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMWYzYWUzMDQ0OTk0OTMwOGJiNWYxYzIxN2IyNjMyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hN2Q1ZjA1OWZmYWQ0YTA5OTc1ZjJhNjc5ZGM4ZjViZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTdkNWYwNTlmZmFkNGEwOTk3NWYyYTY3OWRjOGY1YmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMWYzYWUzMDQ0OTk0OTMwOGJiNWYxYzIxN2IyNjMyNC5zZXRDb250ZW50KGh0bWxfYTdkNWYwNTlmZmFkNGEwOTk3NWYyYTY3OWRjOGY1YmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTUwNDYxMTU2ZmYzNGFlZGJhMTFmZjhjZWEwMDg5N2MuYmluZFBvcHVwKHBvcHVwXzAxZjNhZTMwNDQ5OTQ5MzA4YmI1ZjFjMjE3YjI2MzI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlNDkwYjM5MjIzMzQzZDliOTc4ODA5MDQzZjdmOGY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTg5LC0xMTguMzM1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5NDk0NmE2YThkNTQ5NDU5OGJkNDNmZWVjNDUzOWU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwOTc0Y2Q5ODVhZjQyYWViM2UwODUwMTlkMTJlY2I4ID0gJCgnPGRpdiBpZD0iaHRtbF9lMDk3NGNkOTg1YWY0MmFlYjNlMDg1MDE5ZDEyZWNiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y5NDk0NmE2YThkNTQ5NDU5OGJkNDNmZWVjNDUzOWU2LnNldENvbnRlbnQoaHRtbF9lMDk3NGNkOTg1YWY0MmFlYjNlMDg1MDE5ZDEyZWNiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZTQ5MGIzOTIyMzM0M2Q5Yjk3ODgwOTA0M2Y3ZjhmNC5iaW5kUG9wdXAocG9wdXBfZjk0OTQ2YTZhOGQ1NDk0NTk4YmQ0M2ZlZWM0NTM5ZTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzc1ZmRjNzRkOGUzNDJmYThkNTY0NjY2NGY0NWE0ZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45Njg1LC0xMTguMjU2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1YTM2MGY4YmM0ZDRhNDZiMzFkNTUxMmYzNWMzMzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU2ZTViYjBkZmZiYzQ1YjZhNjdhMmZmODdmNjQ5NzVjID0gJCgnPGRpdiBpZD0iaHRtbF81NmU1YmIwZGZmYmM0NWI2YTY3YTJmZjg3ZjY0OTc1YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1YTM2MGY4YmM0ZDRhNDZiMzFkNTUxMmYzNWMzMzQ3LnNldENvbnRlbnQoaHRtbF81NmU1YmIwZGZmYmM0NWI2YTY3YTJmZjg3ZjY0OTc1Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNzVmZGM3NGQ4ZTM0MmZhOGQ1NjQ2NjY0ZjQ1YTRkMC5iaW5kUG9wdXAocG9wdXBfZjVhMzYwZjhiYzRkNGE0NmIzMWQ1NTEyZjM1YzMzNDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmJlNTBkNzBlMTQyNGYzMTg4MTdlYTlmMDBjYTAyYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NzgyLC0xMTguMjg3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U5ODBhNGM3NDkzNjQyMmY4MTc3MDNmZTA3NDFmMDdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzMzFlYTUyMTdlYjRiOTM4M2Y2NGJhMDNiMWJjNTUyID0gJCgnPGRpdiBpZD0iaHRtbF84MzMxZWE1MjE3ZWI0YjkzODNmNjRiYTAzYjFiYzU1MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5ODBhNGM3NDkzNjQyMmY4MTc3MDNmZTA3NDFmMDdkLnNldENvbnRlbnQoaHRtbF84MzMxZWE1MjE3ZWI0YjkzODNmNjRiYTAzYjFiYzU1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYmU1MGQ3MGUxNDI0ZjMxODgxN2VhOWYwMGNhMDJjMS5iaW5kUG9wdXAocG9wdXBfZTk4MGE0Yzc0OTM2NDIyZjgxNzcwM2ZlMDc0MWYwN2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWVkOGNhZGRjNDA3NGEwYWE2YWJlNzkxZjhiNDExMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NjU2LC0xMTguMjYwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3Mjg3ZDVjYTViOTQwYmJiMDIyNjYyZjEwNDI1NzAyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VjODM2NTY1NmU2MDQ0YjJhZTlmZGI4YzBkZWFmZDY1ID0gJCgnPGRpdiBpZD0iaHRtbF9lYzgzNjU2NTZlNjA0NGIyYWU5ZmRiOGMwZGVhZmQ2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3Mjg3ZDVjYTViOTQwYmJiMDIyNjYyZjEwNDI1NzAyLnNldENvbnRlbnQoaHRtbF9lYzgzNjU2NTZlNjA0NGIyYWU5ZmRiOGMwZGVhZmQ2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZWQ4Y2FkZGM0MDc0YTBhYTZhYmU3OTFmOGI0MTExOS5iaW5kUG9wdXAocG9wdXBfYjcyODdkNWNhNWI5NDBiYmIwMjI2NjJmMTA0MjU3MDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRjZDNiYmY3MDM0NGM2OTk5YzY5N2Y2NGRkN2Q4MTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45ODkyLC0xMTguMzA2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlYjVmYTIwYzE1ZjQzOWY5MTY4MTY0ZDY3ODIyMjI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2YjE4NzA0MmE3NDQxZjM5ZTFjMjMwNWY4OGQ1MGMzID0gJCgnPGRpdiBpZD0iaHRtbF8xNmIxODcwNDJhNzQ0MWYzOWUxYzIzMDVmODhkNTBjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlYjVmYTIwYzE1ZjQzOWY5MTY4MTY0ZDY3ODIyMjI4LnNldENvbnRlbnQoaHRtbF8xNmIxODcwNDJhNzQ0MWYzOWUxYzIzMDVmODhkNTBjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZGNkM2JiZjcwMzQ0YzY5OTljNjk3ZjY0ZGQ3ZDgxMy5iaW5kUG9wdXAocG9wdXBfN2ViNWZhMjBjMTVmNDM5ZjkxNjgxNjRkNjc4MjIyMjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQ3NDZjZDA3NDc5NDcxMzk3Y2ZmNmNmODdiYzI1ZDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NiwtMTE4LjMwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0NDA1MjFkNDdjYTQ4MWE4MWZmOTJiZWEzZmEyMTM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyMjVlZjkzMTIzYjQ5OGU5Njc5OWYyOTUzMTJmNDdhID0gJCgnPGRpdiBpZD0iaHRtbF8zMjI1ZWY5MzEyM2I0OThlOTY3OTlmMjk1MzEyZjQ3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0NDA1MjFkNDdjYTQ4MWE4MWZmOTJiZWEzZmEyMTM4LnNldENvbnRlbnQoaHRtbF8zMjI1ZWY5MzEyM2I0OThlOTY3OTlmMjk1MzEyZjQ3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNDc0NmNkMDc0Nzk0NzEzOTdjZmY2Y2Y4N2JjMjVkMC5iaW5kUG9wdXAocG9wdXBfODQ0MDUyMWQ0N2NhNDgxYTgxZmY5MmJlYTNmYTIxMzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDI3MWUzY2M3ZGY2NDYwMjkzOTI3MGY2OWVkMmE4NjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTA4LC0xMTguMzM2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1NzJlMjBkZDE4MzRlN2JiMWM5YzRhNDJkNWYxNTEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0MDYxY2U5ZjcyOTQwNmRiM2EyNmIwOGM0OTY0MjY4ID0gJCgnPGRpdiBpZD0iaHRtbF8yNDA2MWNlOWY3Mjk0MDZkYjNhMjZiMDhjNDk2NDI2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1NzJlMjBkZDE4MzRlN2JiMWM5YzRhNDJkNWYxNTEwLnNldENvbnRlbnQoaHRtbF8yNDA2MWNlOWY3Mjk0MDZkYjNhMjZiMDhjNDk2NDI2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMjcxZTNjYzdkZjY0NjAyOTM5MjcwZjY5ZWQyYTg2Ni5iaW5kUG9wdXAocG9wdXBfYTU3MmUyMGRkMTgzNGU3YmIxYzljNGE0MmQ1ZjE1MTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWZmMzAxMjA1MWFlNGMwZWE2Y2ZmNDk3YTA2YTA1YWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NjkxLC0xMTguMzMwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA5MTE4MzIwMjhhMjRmYmZhNjY3ZDRhODk5MDE5ZjcxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4ZGViYzJhOWNkZDRiYzA5NTNmOTBjMDZkNzhkYTAxID0gJCgnPGRpdiBpZD0iaHRtbF85OGRlYmMyYTljZGQ0YmMwOTUzZjkwYzA2ZDc4ZGEwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA5MTE4MzIwMjhhMjRmYmZhNjY3ZDRhODk5MDE5ZjcxLnNldENvbnRlbnQoaHRtbF85OGRlYmMyYTljZGQ0YmMwOTUzZjkwYzA2ZDc4ZGEwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmYzMDEyMDUxYWU0YzBlYTZjZmY0OTdhMDZhMDVhYi5iaW5kUG9wdXAocG9wdXBfMDkxMTgzMjAyOGEyNGZiZmE2NjdkNGE4OTkwMTlmNzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTM3NjY4ZDNiNWExNGY5OTg0NTkwYmFmNTEzNDI3YjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTcsLTExOC4zMTAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmFkMjE3YjU3Nzk2NGE2MWFhZGUzZDQ5OGUyOGNlY2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZlZmM4MmVhYjhmNGRhOWJkZmIxYWZlNWQ1ZmY3ZjQgPSAkKCc8ZGl2IGlkPSJodG1sXzhmZWZjODJlYWI4ZjRkYTliZGZiMWFmZTVkNWZmN2Y0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmFkMjE3YjU3Nzk2NGE2MWFhZGUzZDQ5OGUyOGNlY2Yuc2V0Q29udGVudChodG1sXzhmZWZjODJlYWI4ZjRkYTliZGZiMWFmZTVkNWZmN2Y0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzNzY2OGQzYjVhMTRmOTk4NDU5MGJhZjUxMzQyN2I1LmJpbmRQb3B1cChwb3B1cF9iYWQyMTdiNTc3OTY0YTYxYWFkZTNkNDk4ZTI4Y2VjZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTg0YmYxYTk0NmE0MGVlOWNiOWZkNzc5MjJlOTk0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk3MjcsLTExOC4yODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNjNjN2I0OWYzYWQ0OGM0OTE0MzVkMDEwODhjYjQ2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNWRjNjkwMTNlZjg0M2EzYTg2ODRhMjI2NmRkMjdmNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMjVkYzY5MDEzZWY4NDNhM2E4Njg0YTIyNjZkZDI3ZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNjNjN2I0OWYzYWQ0OGM0OTE0MzVkMDEwODhjYjQ2Zi5zZXRDb250ZW50KGh0bWxfMjVkYzY5MDEzZWY4NDNhM2E4Njg0YTIyNjZkZDI3ZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWU4NGJmMWE5NDZhNDBlZTljYjlmZDc3OTIyZTk5NGYuYmluZFBvcHVwKHBvcHVwXzA2M2M3YjQ5ZjNhZDQ4YzQ5MTQzNWQwMTA4OGNiNDZmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2ZDVlM2VlYjA4ZTQzODU5YzQwYjUxOGZkMTg5MWFjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTc4MywtMTE4LjI4MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YmFlZWNlMTdkODU0ZjdkODNlY2MyYTc2NGY2NGU3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmI2NjA3NGQyNWI0MmE5ODBkYWQ2NjFiZmZmZDNhZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzJiNjYwNzRkMjViNDJhOTgwZGFkNjYxYmZmZmQzYWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YmFlZWNlMTdkODU0ZjdkODNlY2MyYTc2NGY2NGU3ZC5zZXRDb250ZW50KGh0bWxfYzJiNjYwNzRkMjViNDJhOTgwZGFkNjYxYmZmZmQzYWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDZkNWUzZWViMDhlNDM4NTljNDBiNTE4ZmQxODkxYWMuYmluZFBvcHVwKHBvcHVwXzRiYWVlY2UxN2Q4NTRmN2Q4M2VjYzJhNzY0ZjY0ZTdkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3NzEzZjNhMTBmYTQ1ZTk4MGZiOWJmOTFkOGQxOWE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTcyNywtMTE4LjI5ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZTg0ODRkOTgxODM0MDZiOWFlNjc5YWFkOGI5OTdlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zOTljYzE3MjU5ZTc0ODMxYTkwZGIyZGYxNDcwMzY2ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzk5Y2MxNzI1OWU3NDgzMWE5MGRiMmRmMTQ3MDM2NmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZTg0ODRkOTgxODM0MDZiOWFlNjc5YWFkOGI5OTdlNC5zZXRDb250ZW50KGh0bWxfMzk5Y2MxNzI1OWU3NDgzMWE5MGRiMmRmMTQ3MDM2NmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTc3MTNmM2ExMGZhNDVlOTgwZmI5YmY5MWQ4ZDE5YTkuYmluZFBvcHVwKHBvcHVwXzNlODQ4NGQ5ODE4MzQwNmI5YWU2NzlhYWQ4Yjk5N2U0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5MTM3MDUyNDNkZTRlNmE4M2JmYzk1NWY1MmFlZmMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTYyLC0xMTguMjYyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVkMTBiMjFjMDU4MzQzZGE5OWEyMWNiYjBmNTNhMTg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI3OGU5NmIyNWIyODRmYzZhZDZlNTgwNmJjOGVlMTM2ID0gJCgnPGRpdiBpZD0iaHRtbF8yNzhlOTZiMjViMjg0ZmM2YWQ2ZTU4MDZiYzhlZTEzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Nzd0aCBTdHJlZXQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVkMTBiMjFjMDU4MzQzZGE5OWEyMWNiYjBmNTNhMTg1LnNldENvbnRlbnQoaHRtbF8yNzhlOTZiMjViMjg0ZmM2YWQ2ZTU4MDZiYzhlZTEzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOTEzNzA1MjQzZGU0ZTZhODNiZmM5NTVmNTJhZWZjMS5iaW5kUG9wdXAocG9wdXBfNWQxMGIyMWMwNTgzNDNkYTk5YTIxY2JiMGY1M2ExODUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjUwZjNkZTcyOTM5NDg1ZGFlZmIxMzI4MTI2ZTQ0NDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTEsLTExOC4zMTkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzBhYWI3NDI1ZmFiNGM4Y2IzZTlhYmFmMTJmODhkN2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTRhYjU5MDExNjM1NDk5ZDgzNTJiNzNmNzIzZDQwOGYgPSAkKCc8ZGl2IGlkPSJodG1sXzU0YWI1OTAxMTYzNTQ5OWQ4MzUyYjczZjcyM2Q0MDhmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzBhYWI3NDI1ZmFiNGM4Y2IzZTlhYmFmMTJmODhkN2Muc2V0Q29udGVudChodG1sXzU0YWI1OTAxMTYzNTQ5OWQ4MzUyYjczZjcyM2Q0MDhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY1MGYzZGU3MjkzOTQ4NWRhZWZiMTMyODEyNmU0NDQ0LmJpbmRQb3B1cChwb3B1cF83MGFhYjc0MjVmYWI0YzhjYjNlOWFiYWYxMmY4OGQ3Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGI5YTFlYWMwMjA0ZmZkYmQ2NWEyZjdiNjI0ODFkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk5MjMsLTExOC4yODkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTc3M2RjZjJiYzg2NDIyNDkwZGM0NTM1YmY1MGE0ZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmI3YzEyMzdmMjc0NDllZjk0MzQ2MWQzMzYyZWExMjIgPSAkKCc8ZGl2IGlkPSJodG1sX2ZiN2MxMjM3ZjI3NDQ5ZWY5NDM0NjFkMzM2MmVhMTIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTc3M2RjZjJiYzg2NDIyNDkwZGM0NTM1YmY1MGE0ZDEuc2V0Q29udGVudChodG1sX2ZiN2MxMjM3ZjI3NDQ5ZWY5NDM0NjFkMzM2MmVhMTIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY4YjlhMWVhYzAyMDRmZmRiZDY1YTJmN2I2MjQ4MWRjLmJpbmRQb3B1cChwb3B1cF81NzczZGNmMmJjODY0MjI0OTBkYzQ1MzViZjUwYTRkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNGM4NTY2ZjAwM2U0YjkxYjE4OTQzMzEzYmNlNGEwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk5MzMsLTExOC4zMTM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDY3YTEzNzU2YzAyNGZjZmFlMDE0M2Y2YzJlOGI3OGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQwODcxNTFhMmI5NDUyZThiZWZiYWM2OTA1MzM0ZWUgPSAkKCc8ZGl2IGlkPSJodG1sX2E0MDg3MTUxYTJiOTQ1MmU4YmVmYmFjNjkwNTMzNGVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDY3YTEzNzU2YzAyNGZjZmFlMDE0M2Y2YzJlOGI3OGYuc2V0Q29udGVudChodG1sX2E0MDg3MTUxYTJiOTQ1MmU4YmVmYmFjNjkwNTMzNGVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0Yzg1NjZmMDAzZTRiOTFiMTg5NDMzMTNiY2U0YTA1LmJpbmRQb3B1cChwb3B1cF80NjdhMTM3NTZjMDI0ZmNmYWUwMTQzZjZjMmU4Yjc4Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMzYyNTQzMGVhZTI0YmZhYTY0M2ViNjNlMGJhNTZiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk3NTQsLTExOC4zMTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTEzZWE3YWE5MTQ5NDFkNDk2NjgzNjM1OTE4NTZlZjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmM0NDBkZjk1YTJjNGZlOWE5Zjg1NjQ1NWUyNDhmOGUgPSAkKCc8ZGl2IGlkPSJodG1sX2ZjNDQwZGY5NWEyYzRmZTlhOWY4NTY0NTVlMjQ4ZjhlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTEzZWE3YWE5MTQ5NDFkNDk2NjgzNjM1OTE4NTZlZjEuc2V0Q29udGVudChodG1sX2ZjNDQwZGY5NWEyYzRmZTlhOWY4NTY0NTVlMjQ4ZjhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IzNjI1NDMwZWFlMjRiZmFhNjQzZWI2M2UwYmE1NmIzLmJpbmRQb3B1cChwb3B1cF81MTNlYTdhYTkxNDk0MWQ0OTY2ODM2MzU5MTg1NmVmMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Y2FkN2JjMTNlY2E0ZjgzYjAyMGZkM2M2ZmU4ZGYzYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4OTIsLTExOC4zMDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDBlNTBhZTVkNDc5NDU0ZDlhMDQ1NTZhZTJhNTA5ZGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjI1NmQwYmMzZWQ1NDc3YWI5YTQ2YTViMjVlODMxNzAgPSAkKCc8ZGl2IGlkPSJodG1sXzYyNTZkMGJjM2VkNTQ3N2FiOWE0NmE1YjI1ZTgzMTcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDBlNTBhZTVkNDc5NDU0ZDlhMDQ1NTZhZTJhNTA5ZGYuc2V0Q29udGVudChodG1sXzYyNTZkMGJjM2VkNTQ3N2FiOWE0NmE1YjI1ZTgzMTcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdjYWQ3YmMxM2VjYTRmODNiMDIwZmQzYzZmZThkZjNiLmJpbmRQb3B1cChwb3B1cF8wMGU1MGFlNWQ0Nzk0NTRkOWEwNDU1NmFlMmE1MDlkZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjg2MjZlNzVjNjk0Yjc5YmI1MTFkYzNlNTcwZGE1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk3MywtMTE4LjI2NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYjZlY2I1YjFlNTc0ZWY0YjVlNTI5NDA2OTE2YzhmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NGI3YmU1YmQ2NDQ0YTk1YjMzZjNiOWJhYjEyZjkwYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNTRiN2JlNWJkNjQ0NGE5NWIzM2YzYjliYWIxMmY5MGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYjZlY2I1YjFlNTc0ZWY0YjVlNTI5NDA2OTE2YzhmYS5zZXRDb250ZW50KGh0bWxfNTRiN2JlNWJkNjQ0NGE5NWIzM2YzYjliYWIxMmY5MGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2Y4NjI2ZTc1YzY5NGI3OWJiNTExZGMzZTU3MGRhNTkuYmluZFBvcHVwKHBvcHVwX2ViNmVjYjViMWU1NzRlZjRiNWU1Mjk0MDY5MTZjOGZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdhMDY2YTdmNmNjYzQ4ZjBiNTk2ODExZTdmODM4NWVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTgyNCwtMTE4LjI4MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZTgwYmFiNTEzZmY0ZGMwOTk2NTFlYTA4YTU1ZmU4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lN2Q1ZWJiNWZiMmM0ZWRmYWY4MzMzMjhjNmRlZDk1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTdkNWViYjVmYjJjNGVkZmFmODMzMzI4YzZkZWQ5NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTgwYmFiNTEzZmY0ZGMwOTk2NTFlYTA4YTU1ZmU4ZC5zZXRDb250ZW50KGh0bWxfZTdkNWViYjVmYjJjNGVkZmFmODMzMzI4YzZkZWQ5NTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2EwNjZhN2Y2Y2NjNDhmMGI1OTY4MTFlN2Y4Mzg1ZWQuYmluZFBvcHVwKHBvcHVwXzllODBiYWI1MTNmZjRkYzA5OTY1MWVhMDhhNTVmZThkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwNWE1YTc4NTYwOTRhNjE4ZDliNzU1MjkzNzI5YmI1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTc0NywtMTE4LjI4NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGRmYjRkYTQ1YjY0NDVlYmYyZjc5YWQ5M2ZmOGEyOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMTZkMjk1OTFmNjY0Mzg4YjU1YzQ2MzQ1YzU2MjIxYSA9ICQoJzxkaXYgaWQ9Imh0bWxfZDE2ZDI5NTkxZjY2NDM4OGI1NWM0NjM0NWM1NjIyMWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjc3dGggU3RyZWV0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMGRmYjRkYTQ1YjY0NDVlYmYyZjc5YWQ5M2ZmOGEyOS5zZXRDb250ZW50KGh0bWxfZDE2ZDI5NTkxZjY2NDM4OGI1NWM0NjM0NWM1NjIyMWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDA1YTVhNzg1NjA5NGE2MThkOWI3NTUyOTM3MjliYjUuYmluZFBvcHVwKHBvcHVwX2IwZGZiNGRhNDViNjQ0NWViZjJmNzlhZDkzZmY4YTI5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5YmVmZDUwMjE5YjRiMzY5ZjNlOWMwYTNjMGYwMGRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE4MSwtMTE4LjI2MTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xODZhNzE0OWRiZmM0YjljOTFiZWQ1Mzg0YzgzOTBjOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Y2RlZWQyNzBlYmI0MWRjYmRlN2VkYjQ4ZDc1MWYyYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNWNkZWVkMjcwZWJiNDFkY2JkZTdlZGI0OGQ3NTFmMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTg2YTcxNDlkYmZjNGI5YzkxYmVkNTM4NGM4MzkwYzkuc2V0Q29udGVudChodG1sXzVjZGVlZDI3MGViYjQxZGNiZGU3ZWRiNDhkNzUxZjJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M5YmVmZDUwMjE5YjRiMzY5ZjNlOWMwYTNjMGYwMGRjLmJpbmRQb3B1cChwb3B1cF8xODZhNzE0OWRiZmM0YjljOTFiZWQ1Mzg0YzgzOTBjOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTdiYjFmN2ZlM2Q0MmJmOTNkMjU2NzVjODA5OTE3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4NjMsLTExOC4yODgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDEyYjU1ODIzODdhNDJiMDg2ZmMzNjViNWRhZjJhOGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGNkNDJmNDJhODBlNDM1YThjODVkNDU3MTViYmE3ZmYgPSAkKCc8ZGl2IGlkPSJodG1sXzhjZDQyZjQyYTgwZTQzNWE4Yzg1ZDQ1NzE1YmJhN2ZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij43N3RoIFN0cmVldDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDEyYjU1ODIzODdhNDJiMDg2ZmMzNjViNWRhZjJhOGYuc2V0Q29udGVudChodG1sXzhjZDQyZjQyYTgwZTQzNWE4Yzg1ZDQ1NzE1YmJhN2ZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJlN2JiMWY3ZmUzZDQyYmY5M2QyNTY3NWM4MDk5MTc4LmJpbmRQb3B1cChwb3B1cF8wMTJiNTU4MjM4N2E0MmIwODZmYzM2NWI1ZGFmMmE4Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjYwZTg2MDYzMTY0ZDdlOTg0MjBlOGFmMjJmZjNiZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4MjQsLTExOC4yNzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTI5ODdlYjE4MDRhNDRiYmJmOTNhYzJlMmUwNzFkN2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTc2OGRjMTJkYWMyNGVmNTkzOGZiYjFjZTdjYWIzYjcgPSAkKCc8ZGl2IGlkPSJodG1sXzk3NjhkYzEyZGFjMjRlZjU5MzhmYmIxY2U3Y2FiM2I3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyOTg3ZWIxODA0YTQ0YmJiZjkzYWMyZTJlMDcxZDdmLnNldENvbnRlbnQoaHRtbF85NzY4ZGMxMmRhYzI0ZWY1OTM4ZmJiMWNlN2NhYjNiNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMjYwZTg2MDYzMTY0ZDdlOTg0MjBlOGFmMjJmZjNiZC5iaW5kUG9wdXAocG9wdXBfOTI5ODdlYjE4MDRhNDRiYmJmOTNhYzJlMmUwNzFkN2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2E0MWM2NjVmZTQ0NDdjN2E4YTA2ODU0Yzc1ZDdhZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzQ4LC0xMTguMjM2Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNTdiZTExNDRlMjQyZTk4Y2FjMmRhMjNjMDMxOGFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiNzVmY2RkNzE2YjRiODk5ODEzNGNhNzk5ZmNlMTQ4ID0gJCgnPGRpdiBpZD0iaHRtbF80Yjc1ZmNkZDcxNmI0Yjg5OTgxMzRjYTc5OWZjZTE0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lYzU3YmUxMTQ0ZTI0MmU5OGNhYzJkYTIzYzAzMThhYS5zZXRDb250ZW50KGh0bWxfNGI3NWZjZGQ3MTZiNGI4OTk4MTM0Y2E3OTlmY2UxNDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2E0MWM2NjVmZTQ0NDdjN2E4YTA2ODU0Yzc1ZDdhZjAuYmluZFBvcHVwKHBvcHVwX2VjNTdiZTExNDRlMjQyZTk4Y2FjMmRhMjNjMDMxOGFhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBkN2E2OGEyNGQxZjRlMDk5NzA2MDgwZTUxNWQ3NzJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDAzOCwtMTE4LjI3ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDhmYjA5NjVkMDg0YmM3OGY2N2JiZTBmNjMxYjA5ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMjY0NGQ3OWNkNDA0MDExOGQ2OTY1YmVjYTU1MzQ3MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzI2NDRkNzljZDQwNDAxMThkNjk2NWJlY2E1NTM0NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQ4ZmIwOTY1ZDA4NGJjNzhmNjdiYmUwZjYzMWIwOWYuc2V0Q29udGVudChodG1sX2MyNjQ0ZDc5Y2Q0MDQwMTE4ZDY5NjViZWNhNTUzNDcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBkN2E2OGEyNGQxZjRlMDk5NzA2MDgwZTUxNWQ3NzJkLmJpbmRQb3B1cChwb3B1cF82NDhmYjA5NjVkMDg0YmM3OGY2N2JiZTBmNjMxYjA5Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzQ4ZTlhZjZlODQ0Zjc1YWNlYWZjMGMwNTcxMzAyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwNzgsLTExOC4yNjM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWQ5MmVlNzkyMTc5NDdkOGE2NmMxNjE2YmQ4ZmU5ZTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQ5YTc5YjA2MjllNDFlN2EyODllM2Q4ZDMxMDEzMWEgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0OWE3OWIwNjI5ZTQxZTdhMjg5ZTNkOGQzMTAxMzFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkOTJlZTc5MjE3OTQ3ZDhhNjZjMTYxNmJkOGZlOWUyLnNldENvbnRlbnQoaHRtbF9mNDlhNzliMDYyOWU0MWU3YTI4OWUzZDhkMzEwMTMxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNzQ4ZTlhZjZlODQ0Zjc1YWNlYWZjMGMwNTcxMzAyYy5iaW5kUG9wdXAocG9wdXBfZWQ5MmVlNzkyMTc5NDdkOGE2NmMxNjE2YmQ4ZmU5ZTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmU4ZWY3YzI3YWEzNDg0Y2E2ZWFhMjg0ZmQxY2NmMTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzg5LC0xMTguMjQ3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5NzlkZWJmOTRkZDQwZDVhZTNjYmI4OTUxZDkyNDI0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5ZmMyYzNkNDc2NzRiYWRhMWE5YmVmNGM5OGUyODBiID0gJCgnPGRpdiBpZD0iaHRtbF9mOWZjMmMzZDQ3Njc0YmFkYTFhOWJlZjRjOThlMjgwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOTc5ZGViZjk0ZGQ0MGQ1YWUzY2JiODk1MWQ5MjQyNC5zZXRDb250ZW50KGh0bWxfZjlmYzJjM2Q0NzY3NGJhZGExYTliZWY0Yzk4ZTI4MGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmU4ZWY3YzI3YWEzNDg0Y2E2ZWFhMjg0ZmQxY2NmMTkuYmluZFBvcHVwKHBvcHVwX2I5NzlkZWJmOTRkZDQwZDVhZTNjYmI4OTUxZDkyNDI0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQzMTdjZjQwZWJmNzQyOTZiOTBjNWE2NjdkNTBhYmU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDExNCwtMTE4LjI2MjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zY2IxNzJlYmUwOTc0M2MyOThlYzBhNjJiNDllMjNjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZTZhMjM4ZTNjYzE0ZjQyODQ2MjhiOGRhMzE3YzQ5YSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2U2YTIzOGUzY2MxNGY0Mjg0NjI4YjhkYTMxN2M0OWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2NiMTcyZWJlMDk3NDNjMjk4ZWMwYTYyYjQ5ZTIzYzEuc2V0Q29udGVudChodG1sXzdlNmEyMzhlM2NjMTRmNDI4NDYyOGI4ZGEzMTdjNDlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQzMTdjZjQwZWJmNzQyOTZiOTBjNWE2NjdkNTBhYmU4LmJpbmRQb3B1cChwb3B1cF8zY2IxNzJlYmUwOTc0M2MyOThlYzBhNjJiNDllMjNjMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjcyMzhjMmM3Yzk0ZWVhOWNhNjljNDllZWIwNmUzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxOTQsLTExOC4yNzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTk4ZWE4Y2U5YTAwNGIxMDlkZmZjNWMxMThiZTNhNTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjcxOGI3MWIwNDAxNDkzYzllMzBkMGNlNjMyNWI3NmYgPSAkKCc8ZGl2IGlkPSJodG1sX2Y3MThiNzFiMDQwMTQ5M2M5ZTMwZDBjZTYzMjViNzZmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U5OGVhOGNlOWEwMDRiMTA5ZGZmYzVjMTE4YmUzYTU5LnNldENvbnRlbnQoaHRtbF9mNzE4YjcxYjA0MDE0OTNjOWUzMGQwY2U2MzI1Yjc2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjcyMzhjMmM3Yzk0ZWVhOWNhNjljNDllZWIwNmUzZi5iaW5kUG9wdXAocG9wdXBfZTk4ZWE4Y2U5YTAwNGIxMDlkZmZjNWMxMThiZTNhNTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTQ4MWIxMTY4NjRlNDExNmEzYzUwOTI0ODUwOWE3MDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzgyLC0xMTguMjQzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViZGI4MzM4ODk5MDQ3MTdiN2EyNDMzNjkxMGYzODkxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyNDQzN2MzMTJiNTRhYmVhMjc3OWVkNWRiZjQyY2NmID0gJCgnPGRpdiBpZD0iaHRtbF9hMjQ0MzdjMzEyYjU0YWJlYTI3NzllZDVkYmY0MmNjZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YmRiODMzODg5OTA0NzE3YjdhMjQzMzY5MTBmMzg5MS5zZXRDb250ZW50KGh0bWxfYTI0NDM3YzMxMmI1NGFiZWEyNzc5ZWQ1ZGJmNDJjY2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQ4MWIxMTY4NjRlNDExNmEzYzUwOTI0ODUwOWE3MDAuYmluZFBvcHVwKHBvcHVwXzViZGI4MzM4ODk5MDQ3MTdiN2EyNDMzNjkxMGYzODkxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyZjgyMjQ4OGZjNDRiODE5ZjU3YTAzZjNkMWNhZDg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTkwNiwtMTE4LjI3ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYzNmMTJkZTUxMjE0ZWI3YTg2ZmQ2MjUyNmU4MTc0MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYTllMTlmYWFmNTI0N2RkYjk1MDg2OWI2MDZmZmQ0ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZGE5ZTE5ZmFhZjUyNDdkZGI5NTA4NjliNjA2ZmZkNGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWMzZjEyZGU1MTIxNGViN2E4NmZkNjI1MjZlODE3NDIuc2V0Q29udGVudChodG1sX2RhOWUxOWZhYWY1MjQ3ZGRiOTUwODY5YjYwNmZmZDRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UyZjgyMjQ4OGZjNDRiODE5ZjU3YTAzZjNkMWNhZDg0LmJpbmRQb3B1cChwb3B1cF9lYzNmMTJkZTUxMjE0ZWI3YTg2ZmQ2MjUyNmU4MTc0Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iN2YzM2I4MWVhYTE0Yzc5YjJkMGI1OGJmY2U5MGY4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxMTIsLTExOC4yNTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmE1YjM2ZWMwYWRmNDYzZGI1YTI3ZWJlNWNmMTlhYTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTQ5N2M2ODE5MzNhNDllNDhlZmIzMWFlZTUzMWQzZDIgPSAkKCc8ZGl2IGlkPSJodG1sXzE0OTdjNjgxOTMzYTQ5ZTQ4ZWZiMzFhZWU1MzFkM2QyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhNWIzNmVjMGFkZjQ2M2RiNWEyN2ViZTVjZjE5YWEyLnNldENvbnRlbnQoaHRtbF8xNDk3YzY4MTkzM2E0OWU0OGVmYjMxYWVlNTMxZDNkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iN2YzM2I4MWVhYTE0Yzc5YjJkMGI1OGJmY2U5MGY4Yi5iaW5kUG9wdXAocG9wdXBfYmE1YjM2ZWMwYWRmNDYzZGI1YTI3ZWJlNWNmMTlhYTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdiZTU5YzQ2ZTNhNDY4N2E4NDEzNDBmMzg5Mjg3YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTY1LC0xMTguMjcxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyNTZlNjgzNmFhMTQ5MzA4NTcwZTRlODJiYjdiMDMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRiZDNiZGQzMTAxZTRkNTNiYzllMGFlODVjYWE4MWM4ID0gJCgnPGRpdiBpZD0iaHRtbF80YmQzYmRkMzEwMWU0ZDUzYmM5ZTBhZTg1Y2FhODFjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMjU2ZTY4MzZhYTE0OTMwODU3MGU0ZTgyYmI3YjAzMi5zZXRDb250ZW50KGh0bWxfNGJkM2JkZDMxMDFlNGQ1M2JjOWUwYWU4NWNhYTgxYzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODdiZTU5YzQ2ZTNhNDY4N2E4NDEzNDBmMzg5Mjg3YWEuYmluZFBvcHVwKHBvcHVwX2YyNTZlNjgzNmFhMTQ5MzA4NTcwZTRlODJiYjdiMDMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwZWQ3NTk1OGQwOTQ2YzZhZmU5YjJiYWQ1NGVmOTdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDAxLC0xMTguMjc4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQxYTAyMWM5YjYzYTRmNDZiMTMxNzJlYzQzYzJlNzY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI1OTQyOWFkOTQzMjQ3ODRhMGRlYTlkMTFkZWVlMDE2ID0gJCgnPGRpdiBpZD0iaHRtbF8yNTk0MjlhZDk0MzI0Nzg0YTBkZWE5ZDExZGVlZTAxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MWEwMjFjOWI2M2E0ZjQ2YjEzMTcyZWM0M2MyZTc2OC5zZXRDb250ZW50KGh0bWxfMjU5NDI5YWQ5NDMyNDc4NGEwZGVhOWQxMWRlZWUwMTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTBlZDc1OTU4ZDA5NDZjNmFmZTliMmJhZDU0ZWY5N2QuYmluZFBvcHVwKHBvcHVwXzQxYTAyMWM5YjYzYTRmNDZiMTMxNzJlYzQzYzJlNzY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1ZWY5NTY0YjUyNjQ5OGRhYjRkN2FlODViODkxNzI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE5NywtMTE4LjIzNzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTZiZTlkYzFjNjE0NWUyOGRmYzU5Y2E4YTU0NWEzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ZTFkNGFiYzIwMGQ0NTUxOTdjZmI4N2JmNDI1OTBiYyA9ICQoJzxkaXYgaWQ9Imh0bWxfNmUxZDRhYmMyMDBkNDU1MTk3Y2ZiODdiZjQyNTkwYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWE2YmU5ZGMxYzYxNDVlMjhkZmM1OWNhOGE1NDVhM2Muc2V0Q29udGVudChodG1sXzZlMWQ0YWJjMjAwZDQ1NTE5N2NmYjg3YmY0MjU5MGJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E1ZWY5NTY0YjUyNjQ5OGRhYjRkN2FlODViODkxNzI0LmJpbmRQb3B1cChwb3B1cF9hYTZiZTlkYzFjNjE0NWUyOGRmYzU5Y2E4YTU0NWEzYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTFmYjVhNDcxMWM0ZTZjYjY5YjI3ZmU2NmQ3Y2M3MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4OTMsLTExOC4yNjUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDdiYWM3OTIxOWMwNGMzNzk3OWI2ZDBhYmYxZTBkYjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTk4MmVmOGMyOWUzNDFlOWE0YWI3YWE0NTc4MDcxNTggPSAkKCc8ZGl2IGlkPSJodG1sX2U5ODJlZjhjMjllMzQxZTlhNGFiN2FhNDU3ODA3MTU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3YmFjNzkyMTljMDRjMzc5NzliNmQwYWJmMWUwZGIxLnNldENvbnRlbnQoaHRtbF9lOTgyZWY4YzI5ZTM0MWU5YTRhYjdhYTQ1NzgwNzE1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OTFmYjVhNDcxMWM0ZTZjYjY5YjI3ZmU2NmQ3Y2M3My5iaW5kUG9wdXAocG9wdXBfZDdiYWM3OTIxOWMwNGMzNzk3OWI2ZDBhYmYxZTBkYjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjk0NWMwMjIwOWZjNDBlMGExM2VjZWY2YzMwZWQzNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTgzLC0xMTguMjc4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyYjhiYjM4NzNjMzRmMWY4ZWEzMGQ2NzYwYTZjZjQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjMTFlMmUwNTAwNjRlZjdhNzcyZWE5ZGM5ZTBlYjAyID0gJCgnPGRpdiBpZD0iaHRtbF9jYzExZTJlMDUwMDY0ZWY3YTc3MmVhOWRjOWUwZWIwMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMmI4YmIzODczYzM0ZjFmOGVhMzBkNjc2MGE2Y2Y0MC5zZXRDb250ZW50KGh0bWxfY2MxMWUyZTA1MDA2NGVmN2E3NzJlYTlkYzllMGViMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjk0NWMwMjIwOWZjNDBlMGExM2VjZWY2YzMwZWQzNjYuYmluZFBvcHVwKHBvcHVwX2MyYjhiYjM4NzNjMzRmMWY4ZWEzMGQ2NzYwYTZjZjQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RiMmI0YzBkYTQ1ZDQyMDNhYmMyNzUxY2M2NzkyMWRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI0MSwtMTE4LjI1NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDFhZWRkN2EzNzA0YTdhOWY3YjgxMjk3Y2FmYjBkNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTkzNjY4YmM0Njk0NzBlYmNjMzdlODIyMWI4Mjk0MSA9ICQoJzxkaXYgaWQ9Imh0bWxfZmE5MzY2OGJjNDY5NDcwZWJjYzM3ZTgyMjFiODI5NDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWQxYWVkZDdhMzcwNGE3YTlmN2I4MTI5N2NhZmIwZDUuc2V0Q29udGVudChodG1sX2ZhOTM2NjhiYzQ2OTQ3MGViY2MzN2U4MjIxYjgyOTQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RiMmI0YzBkYTQ1ZDQyMDNhYmMyNzUxY2M2NzkyMWRlLmJpbmRQb3B1cChwb3B1cF85ZDFhZWRkN2EzNzA0YTdhOWY3YjgxMjk3Y2FmYjBkNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzBhODBkYTMzZDc0NTQyOWY4MzE5ZTQ5OGVlNDZlZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxODEsLTExOC4yNTg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTM5MjVjMTNjZWIyNGQ1Y2JiZDliMWYwNTM2OGIwN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmFkZDA1ZTQ1ODVhNDk5MGFkOWNmOGI2YjNlZGU0YTkgPSAkKCc8ZGl2IGlkPSJodG1sXzJhZGQwNWU0NTg1YTQ5OTBhZDljZjhiNmIzZWRlNGE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzOTI1YzEzY2ViMjRkNWNiYmQ5YjFmMDUzNjhiMDdlLnNldENvbnRlbnQoaHRtbF8yYWRkMDVlNDU4NWE0OTkwYWQ5Y2Y4YjZiM2VkZTRhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YzBhODBkYTMzZDc0NTQyOWY4MzE5ZTQ5OGVlNDZlZi5iaW5kUG9wdXAocG9wdXBfOTM5MjVjMTNjZWIyNGQ1Y2JiZDliMWYwNTM2OGIwN2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWI3MjlmM2Q2Yzc1NGNjZTgyNDc4NmJlNDIyNWRhOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTgzLC0xMTguMjYwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhkNjUzMWI3Y2QwYzQ0MTFiYTY5MTNhMWVlNTY4YTM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1MTdmYTAxYjBmNjQ1ZDA4MzU0YzBmNDk2OGVlMDI4ID0gJCgnPGRpdiBpZD0iaHRtbF9hNTE3ZmEwMWIwZjY0NWQwODM1NGMwZjQ5NjhlZTAyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDY1MzFiN2NkMGM0NDExYmE2OTEzYTFlZTU2OGEzOC5zZXRDb250ZW50KGh0bWxfYTUxN2ZhMDFiMGY2NDVkMDgzNTRjMGY0OTY4ZWUwMjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWI3MjlmM2Q2Yzc1NGNjZTgyNDc4NmJlNDIyNWRhOTAuYmluZFBvcHVwKHBvcHVwXzhkNjUzMWI3Y2QwYzQ0MTFiYTY5MTNhMWVlNTY4YTM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk3YmIyZTkyMThlNDQ3ZjZhMDJiYmUzNDQ4OTE5NzE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTkwNiwtMTE4LjI3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTgxNWEyYThiNWI0YjM0YWQwMjRiZGU4Yzg5OGUxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzQwNDFkNzc0ZWY0ZmFkODA0NjlhNDY0NThiY2IyYyA9ICQoJzxkaXYgaWQ9Imh0bWxfODc0MDQxZDc3NGVmNGZhZDgwNDY5YTQ2NDU4YmNiMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGE4MTVhMmE4YjViNGIzNGFkMDI0YmRlOGM4OThlMWMuc2V0Q29udGVudChodG1sXzg3NDA0MWQ3NzRlZjRmYWQ4MDQ2OWE0NjQ1OGJjYjJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3YmIyZTkyMThlNDQ3ZjZhMDJiYmUzNDQ4OTE5NzE4LmJpbmRQb3B1cChwb3B1cF8wYTgxNWEyYThiNWI0YjM0YWQwMjRiZGU4Yzg5OGUxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOWFiODQ0YjEzODY0ZmMyOTRkMDgzYWFmNDI3ZGUyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwODYsLTExOC4yNDc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzA4YzM3MWQ1NDcxNDBkYmJjODM2NzZiMjVjMjY2OTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjllZWU0NWU4N2U1NDUxNWFiMDRhMWZhM2FkODgxZmEgPSAkKCc8ZGl2IGlkPSJodG1sXzY5ZWVlNDVlODdlNTQ1MTVhYjA0YTFmYTNhZDg4MWZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwOGMzNzFkNTQ3MTQwZGJiYzgzNjc2YjI1YzI2Njk0LnNldENvbnRlbnQoaHRtbF82OWVlZTQ1ZTg3ZTU0NTE1YWIwNGExZmEzYWQ4ODFmYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wOWFiODQ0YjEzODY0ZmMyOTRkMDgzYWFmNDI3ZGUyNC5iaW5kUG9wdXAocG9wdXBfNzA4YzM3MWQ1NDcxNDBkYmJjODM2NzZiMjVjMjY2OTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U0YmQxODE3MTNkNGFjYzgzMmU4ZjdhYTk1MmI0ZTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTQyLC0xMTguMjc4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhmNWMzZWFlN2EwNTQ0YmI4NmQ1NGNlYjNlZjNjM2NmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjYmMxNmFiNTM4YzRiZmI5MDRkZjNjOTg2ZGYxZGM1ID0gJCgnPGRpdiBpZD0iaHRtbF82Y2JjMTZhYjUzOGM0YmZiOTA0ZGYzYzk4NmRmMWRjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZjVjM2VhZTdhMDU0NGJiODZkNTRjZWIzZWYzYzNjZi5zZXRDb250ZW50KGh0bWxfNmNiYzE2YWI1MzhjNGJmYjkwNGRmM2M5ODZkZjFkYzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2U0YmQxODE3MTNkNGFjYzgzMmU4ZjdhYTk1MmI0ZTQuYmluZFBvcHVwKHBvcHVwXzhmNWMzZWFlN2EwNTQ0YmI4NmQ1NGNlYjNlZjNjM2NmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmNDFiZDcxYjJmZjQwY2ViN2I2MWIxODg2ZmJlYjcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDA2NiwtMTE4LjI2NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNWMwZTA1OGMyNjQ0MTk1YWE1MzI2YTEzYTdlMDkxZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMTdiZWRkZmJhZDM0ZWY2YmYwNDAxOGM3YTM0MjgxNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMjE3YmVkZGZiYWQzNGVmNmJmMDQwMThjN2EzNDI4MTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzVjMGUwNThjMjY0NDE5NWFhNTMyNmExM2E3ZTA5MWQuc2V0Q29udGVudChodG1sXzIxN2JlZGRmYmFkMzRlZjZiZjA0MDE4YzdhMzQyODE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmNDFiZDcxYjJmZjQwY2ViN2I2MWIxODg2ZmJlYjcxLmJpbmRQb3B1cChwb3B1cF8zNWMwZTA1OGMyNjQ0MTk1YWE1MzI2YTEzYTdlMDkxZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOGNlMTY1MjQzZmQ0Nzg2YjI2MmE4NmE0ZDA3OTZlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAyMTEsLTExOC4yMzAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzZkNzk2MzAyODVhNGYxZTljODFlNGI2OWU3ZTU1NjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTBkN2NhZDNjZDFmNDRmZDk4Nzg3NDYxZDBmY2M0MjkgPSAkKCc8ZGl2IGlkPSJodG1sXzUwZDdjYWQzY2QxZjQ0ZmQ5ODc4NzQ2MWQwZmNjNDI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2ZDc5NjMwMjg1YTRmMWU5YzgxZTRiNjllN2U1NTYyLnNldENvbnRlbnQoaHRtbF81MGQ3Y2FkM2NkMWY0NGZkOTg3ODc0NjFkMGZjYzQyOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOGNlMTY1MjQzZmQ0Nzg2YjI2MmE4NmE0ZDA3OTZlNC5iaW5kUG9wdXAocG9wdXBfYzZkNzk2MzAyODVhNGYxZTljODFlNGI2OWU3ZTU1NjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmNhZmFiYmMzYTJlNDIyNGI3ZDIxNWRiMmIzMWExYzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTg1LC0xMTguMjQ0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5ZDdmMmJmYmYxZjQxMDBiYzYyZDU3NzM0YmZmMDE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxNTU4NTY0NmYzNTQ3Y2JhZGYzYzY2Yjk3MzRhY2U1ID0gJCgnPGRpdiBpZD0iaHRtbF9mMTU1ODU2NDZmMzU0N2NiYWRmM2M2NmI5NzM0YWNlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOWQ3ZjJiZmJmMWY0MTAwYmM2MmQ1NzczNGJmZjAxNS5zZXRDb250ZW50KGh0bWxfZjE1NTg1NjQ2ZjM1NDdjYmFkZjNjNjZiOTczNGFjZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmNhZmFiYmMzYTJlNDIyNGI3ZDIxNWRiMmIzMWExYzMuYmluZFBvcHVwKHBvcHVwX2E5ZDdmMmJmYmYxZjQxMDBiYzYyZDU3NzM0YmZmMDE1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2YmMzMjNiMjMxYTQ0MTJhMzUxNjAxMzJmMWI4Y2JhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDExMiwtMTE4LjI2OTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZWJkZTZmMGY1ZmI0MWIwYWJiMTExODRkYWE2YzhmYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NjlhNWM3Njg2MDY0NWJhYmVkODkzZTY2NDJiMjVhNiA9ICQoJzxkaXYgaWQ9Imh0bWxfOTY5YTVjNzY4NjA2NDViYWJlZDg5M2U2NjQyYjI1YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGViZGU2ZjBmNWZiNDFiMGFiYjExMTg0ZGFhNmM4ZmEuc2V0Q29udGVudChodG1sXzk2OWE1Yzc2ODYwNjQ1YmFiZWQ4OTNlNjY0MmIyNWE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM2YmMzMjNiMjMxYTQ0MTJhMzUxNjAxMzJmMWI4Y2JhLmJpbmRQb3B1cChwb3B1cF8wZWJkZTZmMGY1ZmI0MWIwYWJiMTExODRkYWE2YzhmYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZWNiM2IwODkwYTU0MGQ1OTE4MDVjOGQ0ZDUyYzY0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwMzgsLTExOC4yNzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOTE4Nzk4OTRiYjg0MDQxYWVmMzg5ODhhM2ZiZGJmNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDcwYjRmNzIxMTA0NDQ4YWQzYjJiZWYzMzZlZTA2YyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTA3MGI0ZjcyMTEwNDQ0OGFkM2IyYmVmMzM2ZWUwNmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzkxODc5ODk0YmI4NDA0MWFlZjM4OTg4YTNmYmRiZjUuc2V0Q29udGVudChodG1sX2EwNzBiNGY3MjExMDQ0NDhhZDNiMmJlZjMzNmVlMDZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JlY2IzYjA4OTBhNTQwZDU5MTgwNWM4ZDRkNTJjNjQ0LmJpbmRQb3B1cChwb3B1cF9jOTE4Nzk4OTRiYjg0MDQxYWVmMzg5ODhhM2ZiZGJmNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MzFiMzMxZWQ0NDg0ZDgwYmFjZjA3MDZiODk3NmFjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzMiwtMTE4LjI0NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ODliZTI4MzVhZmQ0ZjJjOWQ1YTk3ZjZmMzA5YTEzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YzlmNzE2ZDM4ZWM0OTUyYTUyMmMyOGU1YzRkYzc4ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGM5ZjcxNmQzOGVjNDk1MmE1MjJjMjhlNWM0ZGM3OGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTg5YmUyODM1YWZkNGYyYzlkNWE5N2Y2ZjMwOWExMzcuc2V0Q29udGVudChodG1sXzRjOWY3MTZkMzhlYzQ5NTJhNTIyYzI4ZTVjNGRjNzhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzMWIzMzFlZDQ0ODRkODBiYWNmMDcwNmI4OTc2YWNkLmJpbmRQb3B1cChwb3B1cF81ODliZTI4MzVhZmQ0ZjJjOWQ1YTk3ZjZmMzA5YTEzNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Nzk3OGM1OGEyYzQ0YjJiOWUwY2IzN2JiODNiNGRjNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwMywtMTE4LjI1MjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDg4MmVkZjJkNTQ0Y2M0ODQxYjU4MjYxNTJjOWQyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYjczODFkMTk3ZDM0MTI4YmZmZDcyYTU4ZWY2MDk4YSA9ICQoJzxkaXYgaWQ9Imh0bWxfY2I3MzgxZDE5N2QzNDEyOGJmZmQ3MmE1OGVmNjA5OGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNmQ4ODJlZGYyZDU0NGNjNDg0MWI1ODI2MTUyYzlkMjAuc2V0Q29udGVudChodG1sX2NiNzM4MWQxOTdkMzQxMjhiZmZkNzJhNThlZjYwOThhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY3OTc4YzU4YTJjNDRiMmI5ZTBjYjM3YmI4M2I0ZGM1LmJpbmRQb3B1cChwb3B1cF82ZDg4MmVkZjJkNTQ0Y2M0ODQxYjU4MjYxNTJjOWQyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZTk3OTE1ZjkwNjc0Yzc4OTMyZGE4NzI3YTA3ZDU5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4OTIsLTExOC4yNzE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjIxNjQzNzA0MDIyNDRiMTlkOTdkNDA1MjUyMDZmNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzY5Y2FkNjA5OTEzNDg1ZWJjNjAzZDE4OTY5NjcyOWYgPSAkKCc8ZGl2IGlkPSJodG1sX2M2OWNhZDYwOTkxMzQ4NWViYzYwM2QxODk2OTY3MjlmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYyMTY0MzcwNDAyMjQ0YjE5ZDk3ZDQwNTI1MjA2ZjVkLnNldENvbnRlbnQoaHRtbF9jNjljYWQ2MDk5MTM0ODVlYmM2MDNkMTg5Njk2NzI5Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZTk3OTE1ZjkwNjc0Yzc4OTMyZGE4NzI3YTA3ZDU5ZS5iaW5kUG9wdXAocG9wdXBfNjIxNjQzNzA0MDIyNDRiMTlkOTdkNDA1MjUyMDZmNWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTNmNTUwYTM1M2ZjNGE4ZWI4NDc0ZDRiZDc1M2UzZjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjk0LC0xMTguMjY3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhYmI2YjM5YTc2YTQyNjk5YjM4MjQ0OGM4MWQ0NDMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmZGZjNzg1NDVlYTRhYWNiZDhjNTQ2YTIwYjJhOWRiID0gJCgnPGRpdiBpZD0iaHRtbF9jZmRmYzc4NTQ1ZWE0YWFjYmQ4YzU0NmEyMGIyYTlkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYWJiNmIzOWE3NmE0MjY5OWIzODI0NDhjODFkNDQzMy5zZXRDb250ZW50KGh0bWxfY2ZkZmM3ODU0NWVhNGFhY2JkOGM1NDZhMjBiMmE5ZGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTNmNTUwYTM1M2ZjNGE4ZWI4NDc0ZDRiZDc1M2UzZjQuYmluZFBvcHVwKHBvcHVwXzJhYmI2YjM5YTc2YTQyNjk5YjM4MjQ0OGM4MWQ0NDMzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZlNzJiOTI1ZjBkODRiYjY5MDgzNzg3YjQwNjI4MmEzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTgzMywtMTE4LjI3ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMjQ3MTA4MGY2ZWI0OTczYjI1ZmYxYmM4MGM5ZWMwNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MzUzNGE1MDBhODc0NmZiOTFiZmY0OGQ2Y2U4NWQzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjM1MzRhNTAwYTg3NDZmYjkxYmZmNDhkNmNlODVkMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk5ld3RvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjI0NzEwODBmNmViNDk3M2IyNWZmMWJjODBjOWVjMDYuc2V0Q29udGVudChodG1sXzYzNTM0YTUwMGE4NzQ2ZmI5MWJmZjQ4ZDZjZTg1ZDMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZlNzJiOTI1ZjBkODRiYjY5MDgzNzg3YjQwNjI4MmEzLmJpbmRQb3B1cChwb3B1cF9mMjQ3MTA4MGY2ZWI0OTczYjI1ZmYxYmM4MGM5ZWMwNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMmY4NzdiMmFhODA0YjViYTkwZWFmMDg5MzcxYzBjYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk5NzQsLTExOC4yNzgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODFiNTYzZjk4YTBiNDJkODkyNTYzNWE4ZDRhODRkYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2EyMTFhNGM3YTk2NDRmMDg4NzdmZmU2YmE3MzdiNWEgPSAkKCc8ZGl2IGlkPSJodG1sX2NhMjExYTRjN2E5NjQ0ZjA4ODc3ZmZlNmJhNzM3YjVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxYjU2M2Y5OGEwYjQyZDg5MjU2MzVhOGQ0YTg0ZGI4LnNldENvbnRlbnQoaHRtbF9jYTIxMWE0YzdhOTY0NGYwODg3N2ZmZTZiYTczN2I1YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMmY4NzdiMmFhODA0YjViYTkwZWFmMDg5MzcxYzBjYi5iaW5kUG9wdXAocG9wdXBfODFiNTYzZjk4YTBiNDJkODkyNTYzNWE4ZDRhODRkYjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTkwZTdiMGQzNjdjNDVmODhjODAzNDE1NDlhYjcwOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTExLC0xMTguMjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjZiN2VhNmE2YTczNDc5MjkwYzk2YzE5ZjhhOTBhZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGE0MmZmY2U5Yzc0NDBmNDk2ODAyNDFjNWY1MjQ5ZGIgPSAkKCc8ZGl2IGlkPSJodG1sXzhhNDJmZmNlOWM3NDQwZjQ5NjgwMjQxYzVmNTI0OWRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OZXd0b248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2YjdlYTZhNmE3MzQ3OTI5MGM5NmMxOWY4YTkwYWRhLnNldENvbnRlbnQoaHRtbF84YTQyZmZjZTljNzQ0MGY0OTY4MDI0MWM1ZjUyNDlkYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OTBlN2IwZDM2N2M0NWY4OGM4MDM0MTU0OWFiNzA5YS5iaW5kUG9wdXAocG9wdXBfNjZiN2VhNmE2YTczNDc5MjkwYzk2YzE5ZjhhOTBhZGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQ4M2RmNzE5Zjk1NGYwZmJkMjdlYWQ0NWZlOWIzODkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTQ2LC0xMTguMjc4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1ZDA2ZDYxZjZkMDQxYTVhYTcyZjA4ODMxMzc0ZTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBhNDE4N2Q1MmYxOTRlZWFhZDlkZDhlMjE2ODI0NDEwID0gJCgnPGRpdiBpZD0iaHRtbF8wYTQxODdkNTJmMTk0ZWVhYWQ5ZGQ4ZTIxNjgyNDQxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TmV3dG9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNWQwNmQ2MWY2ZDA0MWE1YWE3MmYwODgzMTM3NGU0MC5zZXRDb250ZW50KGh0bWxfMGE0MTg3ZDUyZjE5NGVlYWFkOWRkOGUyMTY4MjQ0MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjQ4M2RmNzE5Zjk1NGYwZmJkMjdlYWQ0NWZlOWIzODkuYmluZFBvcHVwKHBvcHVwX2M1ZDA2ZDYxZjZkMDQxYTVhYTcyZjA4ODMxMzc0ZTQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmNWQzNWIyZTE0ZjRmZmI4OGQ4ZTg1NTY3ZWU0M2Y0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTk3LC0xMTguNDc2MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I1ZTAwYzE2YjY5MDQ2ZjhhZGY4NDk1YTE0YTdkOGE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhiYWY0ZjcxMjFiZDQ2ODViNmJhYjIzNzdlZjU4OTM5ID0gJCgnPGRpdiBpZD0iaHRtbF84YmFmNGY3MTIxYmQ0Njg1YjZiYWIyMzc3ZWY1ODkzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFjaWZpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjVlMDBjMTZiNjkwNDZmOGFkZjg0OTVhMTRhN2Q4YTQuc2V0Q29udGVudChodG1sXzhiYWY0ZjcxMjFiZDQ2ODViNmJhYjIzNzdlZjU4OTM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NmNWQzNWIyZTE0ZjRmZmI4OGQ4ZTg1NTY3ZWU0M2Y0LmJpbmRQb3B1cChwb3B1cF9iNWUwMGMxNmI2OTA0NmY4YWRmODQ5NWExNGE3ZDhhNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTA3ODNlZGNiNjM0ZmNmYmVjOTc0ZmY5OWUzMzJmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk5NjUsLTExOC40NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jN2M0Y2UyZTdlZGU0NTk4YWI2MTQyODc5MDM0Yjg1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMmI1YjBjNTI1ODQ0YjViOGM3MzUzNTM3ZmJlNWVhMyA9ICQoJzxkaXYgaWQ9Imh0bWxfYTJiNWIwYzUyNTg0NGI1YjhjNzM1MzUzN2ZiZTVlYTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhY2lmaWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3YzRjZTJlN2VkZTQ1OThhYjYxNDI4NzkwMzRiODUwLnNldENvbnRlbnQoaHRtbF9hMmI1YjBjNTI1ODQ0YjViOGM3MzUzNTM3ZmJlNWVhMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZTA3ODNlZGNiNjM0ZmNmYmVjOTc0ZmY5OWUzMzJmNi5iaW5kUG9wdXAocG9wdXBfYzdjNGNlMmU3ZWRlNDU5OGFiNjE0Mjg3OTAzNGI4NTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGFiMDg1YTJhODkzNDJlZjg3N2FhM2NmNTk4OTcxOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45ODIxLC0xMTguNDY3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE0ZmE0MWNmOTA1MzQ0ZjM4NWZkMThmNWE2MmY3MThjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmYWRjNDJiNjIzNTQ1MjA4MzA5NjhkYjMyZmQyODQ5ID0gJCgnPGRpdiBpZD0iaHRtbF82ZmFkYzQyYjYyMzU0NTIwODMwOTY4ZGIzMmZkMjg0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFjaWZpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRmYTQxY2Y5MDUzNDRmMzg1ZmQxOGY1YTYyZjcxOGMuc2V0Q29udGVudChodG1sXzZmYWRjNDJiNjIzNTQ1MjA4MzA5NjhkYjMyZmQyODQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBhYjA4NWEyYTg5MzQyZWY4NzdhYTNjZjU5ODk3MTljLmJpbmRQb3B1cChwb3B1cF8xNGZhNDFjZjkwNTM0NGYzODVmZDE4ZjVhNjJmNzE4Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZWYzN2IxM2Q4YzM0MzIxYTBmYjUzMDZmYjEyYzNlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4MiwtMTE4LjQzODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNzJhYWRkZTZiMTU0MDhiOGZlNzEyYTgxZjI1ZTg5MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYzJiMmRmZDgzOTc0ZDc5YWI5OTAwNzExNmJjOWIwOCA9ICQoJzxkaXYgaWQ9Imh0bWxfM2MyYjJkZmQ4Mzk3NGQ3OWFiOTkwMDcxMTZiYzliMDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhY2lmaWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y3MmFhZGRlNmIxNTQwOGI4ZmU3MTJhODFmMjVlODkzLnNldENvbnRlbnQoaHRtbF8zYzJiMmRmZDgzOTc0ZDc5YWI5OTAwNzExNmJjOWIwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZWYzN2IxM2Q4YzM0MzIxYTBmYjUzMDZmYjEyYzNlYi5iaW5kUG9wdXAocG9wdXBfZjcyYWFkZGU2YjE1NDA4YjhmZTcxMmE4MWYyNWU4OTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjU1ZjVhZmI2ZDdkNGQ1ZTljY2JmMTZiMmEzNDA0OTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45OTU3LC0xMTguNDYwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2ZDVkYzIwN2Q5YjQ2ZDlhNDk4ZjYzZWYxMGFmN2QxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjYzU5ZDRmNTU3ZjQ0YWU4YjVkM2M5YjQzYjlmOWFkID0gJCgnPGRpdiBpZD0iaHRtbF81Y2M1OWQ0ZjU1N2Y0NGFlOGI1ZDNjOWI0M2I5ZjlhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFjaWZpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjZkNWRjMjA3ZDliNDZkOWE0OThmNjNlZjEwYWY3ZDEuc2V0Q29udGVudChodG1sXzVjYzU5ZDRmNTU3ZjQ0YWU4YjVkM2M5YjQzYjlmOWFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1NWY1YWZiNmQ3ZDRkNWU5Y2NiZjE2YjJhMzQwNDk1LmJpbmRQb3B1cChwb3B1cF8yNmQ1ZGMyMDdkOWI0NmQ5YTQ5OGY2M2VmMTBhZjdkMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzgyZTVmNTk5NmU0MTNhODQzNjUzZjU2OTQ2YjVhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk5NTQsLTExOC40NTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzJkOWEwYjllYjAwNDFiNThkYzE1NzRkOGQ4MDlhNTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGIyOWYzZTI2NmZkNDE2YmJlMTY0OTNkN2YwOWM1NmQgPSAkKCc8ZGl2IGlkPSJodG1sXzRiMjlmM2UyNjZmZDQxNmJiZTE2NDkzZDdmMDljNTZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYWNpZmljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MmQ5YTBiOWViMDA0MWI1OGRjMTU3NGQ4ZDgwOWE1My5zZXRDb250ZW50KGh0bWxfNGIyOWYzZTI2NmZkNDE2YmJlMTY0OTNkN2YwOWM1NmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzM4MmU1ZjU5OTZlNDEzYTg0MzY1M2Y1Njk0NmI1YTIuYmluZFBvcHVwKHBvcHVwXzcyZDlhMGI5ZWIwMDQxYjU4ZGMxNTc0ZDhkODA5YTUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1NjdiMzZkOGEyYjQyNTQ4ZGQ5YTQ1OTY5NDhiMDBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTgwNSwtMTE4LjQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhM2NjMzdhMDg3ZjQ5YjJiYjMzYTg3NDIwMjU3MjMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1OGRiOGMyMzkzNDQ3MGRiOWU2NTQxYzgyNjNkOTYxID0gJCgnPGRpdiBpZD0iaHRtbF84NThkYjhjMjM5MzQ0NzBkYjllNjU0MWM4MjYzZDk2MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFjaWZpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWEzY2MzN2EwODdmNDliMmJiMzNhODc0MjAyNTcyMzEuc2V0Q29udGVudChodG1sXzg1OGRiOGMyMzkzNDQ3MGRiOWU2NTQxYzgyNjNkOTYxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1NjdiMzZkOGEyYjQyNTQ4ZGQ5YTQ1OTY5NDhiMDBkLmJpbmRQb3B1cChwb3B1cF9hYTNjYzM3YTA4N2Y0OWIyYmIzM2E4NzQyMDI1NzIzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNGQ2OTY1NGRmYWY0OTdkYjYxZDZjMWM0NTg4MjUxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxNjcsLTExOC40MjAyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODAyMTUzOWIwMjJhNDk4MzgxOGE1ODQzNGY4MDFiZTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmYzYWE0MmI4OWU0NGQxZWEwMGNmZmU4NDNkN2EzYTMgPSAkKCc8ZGl2IGlkPSJodG1sXzZmM2FhNDJiODllNDRkMWVhMDBjZmZlODQzZDdhM2EzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5QYWNpZmljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MDIxNTM5YjAyMmE0OTgzODE4YTU4NDM0ZjgwMWJlNC5zZXRDb250ZW50KGh0bWxfNmYzYWE0MmI4OWU0NGQxZWEwMGNmZmU4NDNkN2EzYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjRkNjk2NTRkZmFmNDk3ZGI2MWQ2YzFjNDU4ODI1MWUuYmluZFBvcHVwKHBvcHVwXzgwMjE1MzliMDIyYTQ5ODM4MThhNTg0MzRmODAxYmU0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiNWJmZTIzMzEzMTRmYzFhNDgxZDA2ZTFiYjhjYmY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDA4MywtMTE4LjQyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM4OWIzMDc2MTg0YzQxYjFhOWNmMzZkYWQ0ZjNjMzQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcxNDI1ODk4MTJjMTQ5NWI4NDdjYzNlNWUwOTMxMWRlID0gJCgnPGRpdiBpZD0iaHRtbF83MTQyNTg5ODEyYzE0OTViODQ3Y2MzZTVlMDkzMTFkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFjaWZpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzg5YjMwNzYxODRjNDFiMWE5Y2YzNmRhZDRmM2MzNDcuc2V0Q29udGVudChodG1sXzcxNDI1ODk4MTJjMTQ5NWI4NDdjYzNlNWUwOTMxMWRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiNWJmZTIzMzEzMTRmYzFhNDgxZDA2ZTFiYjhjYmY1LmJpbmRQb3B1cChwb3B1cF8zODliMzA3NjE4NGM0MWIxYTljZjM2ZGFkNGYzYzM0Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80M2VkZTU0ZWJiYjc0YzAzODViZDJiZTBkNDlhNzYyZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk4MSwtMTE4LjQxNDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZjI3NDVkNWQ3MTM0Y2IyODJkNTY4MzlhODE2YTU3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGMwOTBjOTc4OTQ0M2ZkYTdiNDc0MDExODhiY2I4YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDBjMDkwYzk3ODk0NDNmZGE3YjQ3NDAxMTg4YmNiOGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlBhY2lmaWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdmMjc0NWQ1ZDcxMzRjYjI4MmQ1NjgzOWE4MTZhNTc5LnNldENvbnRlbnQoaHRtbF9kMGMwOTBjOTc4OTQ0M2ZkYTdiNDc0MDExODhiY2I4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80M2VkZTU0ZWJiYjc0YzAzODViZDJiZTBkNDlhNzYyZC5iaW5kUG9wdXAocG9wdXBfN2YyNzQ1ZDVkNzEzNGNiMjgyZDU2ODM5YTgxNmE1NzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmZkYzJjNDc2MDM5NDI5NDgzMjE2YzU3NDg0ZGI1MmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45ODg1LC0xMTguNDIzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EwN2EwOGJhYmFhZTQ2ZGViMGRhNzI3MGQzMGVmNTU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmNmI1YzE0ZmYzNjQ1NDJhOGNlZjY3M2Y3YjkyYzkzID0gJCgnPGRpdiBpZD0iaHRtbF8wZjZiNWMxNGZmMzY0NTQyYThjZWY2NzNmN2I5MmM5MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UGFjaWZpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTA3YTA4YmFiYWFlNDZkZWIwZGE3MjcwZDMwZWY1NTkuc2V0Q29udGVudChodG1sXzBmNmI1YzE0ZmYzNjQ1NDJhOGNlZjY3M2Y3YjkyYzkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JmZGMyYzQ3NjAzOTQyOTQ4MzIxNmM1NzQ4NGRiNTJhLmJpbmRQb3B1cChwb3B1cF9hMDdhMDhiYWJhYWU0NmRlYjBkYTcyNzBkMzBlZjU1OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZjUwNWM0NzkwZjc0OTQ4YThjMDhmODc2NmJlZGUwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIwMTIsLTExOC40MDQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzE0MDhlZWM5YTYyNGY5NWJlNzI0YWY5ODNiNTZhMDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmVlM2Q0ZjE4NzIwNGYyM2IxODcyMmQ3ZWVhNzJiNGYgPSAkKCc8ZGl2IGlkPSJodG1sX2JlZTNkNGYxODcyMDRmMjNiMTg3MjJkN2VlYTcyYjRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OIEhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE0MDhlZWM5YTYyNGY5NWJlNzI0YWY5ODNiNTZhMDkuc2V0Q29udGVudChodG1sX2JlZTNkNGYxODcyMDRmMjNiMTg3MjJkN2VlYTcyYjRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNmNTA1YzQ3OTBmNzQ5NDhhOGMwOGY4NzY2YmVkZTA2LmJpbmRQb3B1cChwb3B1cF9jMTQwOGVlYzlhNjI0Zjk1YmU3MjRhZjk4M2I1NmEwOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZDY4NDZkNzlhODg0MWVmOTJjMWM1MGVmZDY5YzZkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIwNjcsLTExOC4zODQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTgzOTBhYTc5NDc2NDc0MThkZTVkNDZhOTIyMTRmODEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmQxZmEyNDc4MGZjNGU4YmE3ZWM1ODAzMjEzZjUwNDUgPSAkKCc8ZGl2IGlkPSJodG1sXzZkMWZhMjQ3ODBmYzRlOGJhN2VjNTgwMzIxM2Y1MDQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5OIEhvbGx5d29vZDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTgzOTBhYTc5NDc2NDc0MThkZTVkNDZhOTIyMTRmODEuc2V0Q29udGVudChodG1sXzZkMWZhMjQ3ODBmYzRlOGJhN2VjNTgwMzIxM2Y1MDQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNkNjg0NmQ3OWE4ODQxZWY5MmMxYzUwZWZkNjljNmQ5LmJpbmRQb3B1cChwb3B1cF9lODM5MGFhNzk0NzY0NzQxOGRlNWQ0NmE5MjIxNGY4MSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTM0YzVmMmQwMTk0Y2Q1OThlMGMxYTk3M2QxOTA3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjE5NCwtMTE4LjQxODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZGMzODRmNThhMGU0YWIyOTNhYWI0ZWJhZThlYjQ4ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2NlNGEwNTljMmQ0MGYwOThmN2NmOGE2MGZmYjNlNyA9ICQoJzxkaXYgaWQ9Imh0bWxfYWNjZTRhMDU5YzJkNDBmMDk4ZjdjZjhhNjBmZmIzZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZGMzODRmNThhMGU0YWIyOTNhYWI0ZWJhZThlYjQ4ZC5zZXRDb250ZW50KGh0bWxfYWNjZTRhMDU5YzJkNDBmMDk4ZjdjZjhhNjBmZmIzZTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTEzNGM1ZjJkMDE5NGNkNTk4ZTBjMWE5NzNkMTkwNzUuYmluZFBvcHVwKHBvcHVwXzJkYzM4NGY1OGEwZTRhYjI5M2FhYjRlYmFlOGViNDhkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiMjA3YmZlNjIzNTQyNGJiMGU4OTc1YWRiMDk4ZTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjAxMiwtMTE4LjM4NDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZDU5ODZmNDNmYzU0MjcwYWE1ZDFhNzY3MTM2NGQ0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZWJiYzBkNjhjMzc0OTcxOTczZTc2YmZkZDUwMWE0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGViYmMwZDY4YzM3NDk3MTk3M2U3NmJmZGQ1MDFhNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZDU5ODZmNDNmYzU0MjcwYWE1ZDFhNzY3MTM2NGQ0My5zZXRDb250ZW50KGh0bWxfZGViYmMwZDY4YzM3NDk3MTk3M2U3NmJmZGQ1MDFhNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2IyMDdiZmU2MjM1NDI0YmIwZTg5NzVhZGIwOThlMzUuYmluZFBvcHVwKHBvcHVwXzFkNTk4NmY0M2ZjNTQyNzBhYTVkMWE3NjcxMzY0ZDQzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhMTVkNjU2ZDg5ZTQxMjRhZDEwN2ZkNTJkMGNlNzgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTc2MiwtMTE4LjM2MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDBiYTQyZDE1YTk0MzU3YWVjOGQ2MWJiODIxYTQ4MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNDdiNTdjNGE4ZTE0OGI0YjczMjU0YWIxYWZmZGIyMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZjQ3YjU3YzRhOGUxNDhiNGI3MzI1NGFiMWFmZmRiMjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDBiYTQyZDE1YTk0MzU3YWVjOGQ2MWJiODIxYTQ4My5zZXRDb250ZW50KGh0bWxfZjQ3YjU3YzRhOGUxNDhiNGI3MzI1NGFiMWFmZmRiMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWExNWQ2NTZkODllNDEyNGFkMTA3ZmQ1MmQwY2U3ODAuYmluZFBvcHVwKHBvcHVwX2UwMGJhNDJkMTVhOTQzNTdhZWM4ZDYxYmI4MjFhNDgzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJiNjcxZTc1NTg3NjQ3ZDBhMDEzMTczZmM3MTNlMmNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjAxMiwtMTE4LjM4NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWU4MTE2Yjk3ZDA0YTQyODdjMTQ0Nzk1YjA3ZjEzYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82N2JjZDQ5MGNiYjQ0OWY5YjUxYzk4OTE0MTIwNGM5NyA9ICQoJzxkaXYgaWQ9Imh0bWxfNjdiY2Q0OTBjYmI0NDlmOWI1MWM5ODkxNDEyMDRjOTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWU4MTE2Yjk3ZDA0YTQyODdjMTQ0Nzk1YjA3ZjEzYS5zZXRDb250ZW50KGh0bWxfNjdiY2Q0OTBjYmI0NDlmOWI1MWM5ODkxNDEyMDRjOTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmI2NzFlNzU1ODc2NDdkMGEwMTMxNzNmYzcxM2UyY2UuYmluZFBvcHVwKHBvcHVwXzVhZTgxMTZiOTdkMDRhNDI4N2MxNDQ3OTViMDdmMTNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IyNjM4ZGIzY2I0OTRjMjZiMDI1NThiNWUzYjQxN2U1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTg0OSwtMTE4LjM3NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzBiYzRmMzY4NWQ0ZTFiODFkM2FlOWJiYjEyNTI5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZGRkM2Q5YmMyZTg0OWEyOTdlMWM0OGQ4ZjU1ODRkNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWRkZDNkOWJjMmU4NDlhMjk3ZTFjNDhkOGY1NTg0ZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzBiYzRmMzY4NWQ0ZTFiODFkM2FlOWJiYjEyNTI5OC5zZXRDb250ZW50KGh0bWxfYWRkZDNkOWJjMmU4NDlhMjk3ZTFjNDhkOGY1NTg0ZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjI2MzhkYjNjYjQ5NGMyNmIwMjU1OGI1ZTNiNDE3ZTUuYmluZFBvcHVwKHBvcHVwXzFjMGJjNGYzNjg1ZDRlMWI4MWQzYWU5YmJiMTI1Mjk4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2MGY4YmEyNjk0NTQwZDJiYjM4NDIzNzA4NTVlODZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTU3NywtMTE4LjM3NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDY0Mjc0YjM2ODc0MzJiYjlmOGY5ZWIxMzk2Y2U0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZjU0NjZmZWFlNzI0MmJiYWZhZjFhMTI0YjA0ZWZjZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWY1NDY2ZmVhZTcyNDJiYmFmYWYxYTEyNGIwNGVmY2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDY0Mjc0YjM2ODc0MzJiYjlmOGY5ZWIxMzk2Y2U0My5zZXRDb250ZW50KGh0bWxfOWY1NDY2ZmVhZTcyNDJiYmFmYWYxYTEyNGIwNGVmY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDYwZjhiYTI2OTQ1NDBkMmJiMzg0MjM3MDg1NWU4NmIuYmluZFBvcHVwKHBvcHVwXzJkNjQyNzRiMzY4NzQzMmJiOWY4ZjllYjEzOTZjZTQzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRmNzQ4MGY1YWE5NTQ2NWNiYzY1MWRlMGU2ZGZmZTRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTkwMywtMTE4LjM4MzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNjFlNmY3OTQyYjI0ZWNlYjJhMDE4MDA5NTI5YWVmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MDcwMGNmMzQzZjM0MWM1OGU4NTUyNTE5ODllOWVjZSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTA3MDBjZjM0M2YzNDFjNThlODU1MjUxOTg5ZTllY2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNjFlNmY3OTQyYjI0ZWNlYjJhMDE4MDA5NTI5YWVmOS5zZXRDb250ZW50KGh0bWxfOTA3MDBjZjM0M2YzNDFjNThlODU1MjUxOTg5ZTllY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGY3NDgwZjVhYTk1NDY1Y2JjNjUxZGUwZTZkZmZlNGIuYmluZFBvcHVwKHBvcHVwX2Q2MWU2Zjc5NDJiMjRlY2ViMmEwMTgwMDk1MjlhZWY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5YzEyZDczNjgwOTQwMjliNjc1ZTA3NmMyNjI1ODQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTgyNiwtMTE4LjM5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMjBmNWQwYzM5Y2U0NmFiODI4MDAxOGVhZmFjYWQ3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMTA0ZDE4ZWJiODQ0YmM5OTdmMGVlYTI5OWY4YWMzZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjEwNGQxOGViYjg0NGJjOTk3ZjBlZWEyOTlmOGFjM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjBmNWQwYzM5Y2U0NmFiODI4MDAxOGVhZmFjYWQ3Ny5zZXRDb250ZW50KGh0bWxfYjEwNGQxOGViYjg0NGJjOTk3ZjBlZWEyOTlmOGFjM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjljMTJkNzM2ODA5NDAyOWI2NzVlMDc2YzI2MjU4NDcuYmluZFBvcHVwKHBvcHVwXzEyMGY1ZDBjMzljZTQ2YWI4MjgwMDE4ZWFmYWNhZDc3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5OGIzYWZkNDYxODRiYWE4ZTI1NjUxYTc2NzIzOWFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTgzMSwtMTE4LjM3NDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGU2ZjBlNDM0ZGQ0MzNkOGIyYzJmMTk5NjIxOTE4YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZmMxZmI4OTllZTI0NTU0OTg1NTJiNzI4MTliNTY0NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmZjMWZiODk5ZWUyNDU1NDk4NTUyYjcyODE5YjU2NDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMGU2ZjBlNDM0ZGQ0MzNkOGIyYzJmMTk5NjIxOTE4YS5zZXRDb250ZW50KGh0bWxfMmZjMWZiODk5ZWUyNDU1NDk4NTUyYjcyODE5YjU2NDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzk4YjNhZmQ0NjE4NGJhYThlMjU2NTFhNzY3MjM5YWQuYmluZFBvcHVwKHBvcHVwXzIwZTZmMGU0MzRkZDQzM2Q4YjJjMmYxOTk2MjE5MThhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlhMzRhZjMxMzhmNTRiYmI5MWI4YjRiMWY0ZmFlMDBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjAxMiwtMTE4LjQwNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDY4NTIxYjAxYTY0ZTMwOWI0MmRjNWVlNDEzZDgwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzk5MGI2MjRlMTU0MWMwOGQ2ZjhjMGUyNzhhYTFlNSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjM5OTBiNjI0ZTE1NDFjMDhkNmY4YzBlMjc4YWExZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDY4NTIxYjAxYTY0ZTMwOWI0MmRjNWVlNDEzZDgwZi5zZXRDb250ZW50KGh0bWxfMjM5OTBiNjI0ZTE1NDFjMDhkNmY4YzBlMjc4YWExZTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWEzNGFmMzEzOGY1NGJiYjkxYjhiNGIxZjRmYWUwMGYuYmluZFBvcHVwKHBvcHVwX2YwNjg1MjFiMDFhNjRlMzA5YjQyZGM1ZWU0MTNkODBmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxNjY5NWYyM2U3YTQzMmM4NDZjYTQyMjRhN2NiNjI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjAxMiwtMTE4LjQwMzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ODc2YjBiMTk2ZjU0MWYwYjhkNjE3YzhmYzU5Y2Q4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMDViZGQxM2Q2NmU0YzY1YjI4ODNkMWY5MTk1ZmY3ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTA1YmRkMTNkNjZlNGM2NWIyODgzZDFmOTE5NWZmN2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ODc2YjBiMTk2ZjU0MWYwYjhkNjE3YzhmYzU5Y2Q4NS5zZXRDb250ZW50KGh0bWxfMTA1YmRkMTNkNjZlNGM2NWIyODgzZDFmOTE5NWZmN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTE2Njk1ZjIzZTdhNDMyYzg0NmNhNDIyNGE3Y2I2MjYuYmluZFBvcHVwKHBvcHVwXzY4NzZiMGIxOTZmNTQxZjBiOGQ2MTdjOGZjNTljZDg1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNhZmU3NTY1NzhiODQzMzRhMWRiYjQyM2VkNzAxZDg3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTk2NiwtMTE4LjQwNjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODNkMDBiYWNhZWM0OGY1YTcyOWM0NWEyNjliZTcwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZDcwMDU4YjkyYmI0Mjc5ODE1NmEwNjEwNmZkYmZlMyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2Q3MDA1OGI5MmJiNDI3OTgxNTZhMDYxMDZmZGJmZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jODNkMDBiYWNhZWM0OGY1YTcyOWM0NWEyNjliZTcwNS5zZXRDb250ZW50KGh0bWxfM2Q3MDA1OGI5MmJiNDI3OTgxNTZhMDYxMDZmZGJmZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2FmZTc1NjU3OGI4NDMzNGExZGJiNDIzZWQ3MDFkODcuYmluZFBvcHVwKHBvcHVwX2M4M2QwMGJhY2FlYzQ4ZjVhNzI5YzQ1YTI2OWJlNzA1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmZjg4NDMyMzYyYTRhMDQ5MjJjNmJlNzY1MmM5MjkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMTUwNCwtMTE4LjM3NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjM4ZDI5ZDkwNzY0NWRmYTM0YzcyNTFhYzQxNmNkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTJmOTU1ZWViODk0MGZkOWZmOWZlZDMyOTg2NDU4NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmEyZjk1NWVlYjg5NDBmZDlmZjlmZWQzMjk4NjQ1ODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk4gSG9sbHl3b29kPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNjM4ZDI5ZDkwNzY0NWRmYTM0YzcyNTFhYzQxNmNkMS5zZXRDb250ZW50KGh0bWxfNmEyZjk1NWVlYjg5NDBmZDlmZjlmZWQzMjk4NjQ1ODQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGZmODg0MzIzNjJhNGEwNDkyMmM2YmU3NjUyYzkyOTIuYmluZFBvcHVwKHBvcHVwXzE2MzhkMjlkOTA3NjQ1ZGZhMzRjNzI1MWFjNDE2Y2QxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwY2U4OGQ2MDlkNzQxMjY5ODk3OWQ2NGNkYmMxOTBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjM1LC0xMTguMjkwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1YTUxZmE0MDg1NjRiZTI5NmI3OWM0NGIwOTdkMzU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0MThmMGYwNmU0OTQ2YzJiYmNkZTllYThiYzZmMDNmID0gJCgnPGRpdiBpZD0iaHRtbF9mNDE4ZjBmMDZlNDk0NmMyYmJjZGU5ZWE4YmM2ZjAzZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vdGhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk1YTUxZmE0MDg1NjRiZTI5NmI3OWM0NGIwOTdkMzU4LnNldENvbnRlbnQoaHRtbF9mNDE4ZjBmMDZlNDk0NmMyYmJjZGU5ZWE4YmM2ZjAzZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMGNlODhkNjA5ZDc0MTI2OTg5NzlkNjRjZGJjMTkwYi5iaW5kUG9wdXAocG9wdXBfOTVhNTFmYTQwODU2NGJlMjk2Yjc5YzQ0YjA5N2QzNTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjQxNWNiOGE4OTA2NDEwZTk3ZWY3ZjYzN2UzMjU5MWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNjA2LC0xMTguNDIyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlMTJhNGM1ZDNiZDRkNTE5YTY0MjVhM2FiM2I2YzdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzMGMxNDg2NGU0MjQxYzdhNmFiNGNjOTc4MDRmYTRiID0gJCgnPGRpdiBpZD0iaHRtbF8xMzBjMTQ4NjRlNDI0MWM3YTZhYjRjYzk3ODA0ZmE0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vdGhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdlMTJhNGM1ZDNiZDRkNTE5YTY0MjVhM2FiM2I2YzdjLnNldENvbnRlbnQoaHRtbF8xMzBjMTQ4NjRlNDI0MWM3YTZhYjRjYzk3ODA0ZmE0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NDE1Y2I4YTg5MDY0MTBlOTdlZjdmNjM3ZTMyNTkxYS5iaW5kUG9wdXAocG9wdXBfN2UxMmE0YzVkM2JkNGQ1MTlhNjQyNWEzYWIzYjZjN2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTFhYzUwYjYyNTgwNDc5NTkyZjg3ZjRiMTYyNmQ3MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNzMzLC0xMTguNDIwMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VjNjFkYzVhMWYyMDRkZjM5OTJjMjIwMzNiY2U4ZTA3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBkYzQ4NGVkZWRhZjQzZDY5ODU1ODU5YjAwNDY1ZDU2ID0gJCgnPGRpdiBpZD0iaHRtbF8wZGM0ODRlZGVkYWY0M2Q2OTg1NTg1OWIwMDQ2NWQ1NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vdGhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjNjFkYzVhMWYyMDRkZjM5OTJjMjIwMzNiY2U4ZTA3LnNldENvbnRlbnQoaHRtbF8wZGM0ODRlZGVkYWY0M2Q2OTg1NTg1OWIwMDQ2NWQ1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hMWFjNTBiNjI1ODA0Nzk1OTJmODdmNGIxNjI2ZDcxYi5iaW5kUG9wdXAocG9wdXBfZWM2MWRjNWExZjIwNGRmMzk5MmMyMjAzM2JjZThlMDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjhjNThhNGU2Mzc3NDRkMzlhZGVkMmZlYjdiZGJkYmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMzE2LC0xMTguMzY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjNmE2NzhkN2RhMDQ2ZGM5ODQzZTVjODg3ZGVjNTdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhZGFhOTJjOTE4MzQ1MTQ4OTgyMjM0MTg0NGNjYTA1ID0gJCgnPGRpdiBpZD0iaHRtbF81YWRhYTkyYzkxODM0NTE0ODk4MjIzNDE4NDRjY2EwNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vdGhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NjNmE2NzhkN2RhMDQ2ZGM5ODQzZTVjODg3ZGVjNTdkLnNldENvbnRlbnQoaHRtbF81YWRhYTkyYzkxODM0NTE0ODk4MjIzNDE4NDRjY2EwNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mOGM1OGE0ZTYzNzc0NGQzOWFkZWQyZmViN2JkYmRiYy5iaW5kUG9wdXAocG9wdXBfY2M2YTY3OGQ3ZGEwNDZkYzk4NDNlNWM4ODdkZWM1N2QpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWZhYjYwYzI1M2E4NDlmZmIwNmQ2NWEyZjYwZDBkYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNzk2LC0xMTguMzA0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNjNmM0MmJlYzI1MTQ0Njk5YzJhYzg2OWFiNThmMTJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwNjYzZThkN2Q1NjRkZjU4MzJlOTkyMzRhYTBhMWQ0ID0gJCgnPGRpdiBpZD0iaHRtbF85MDY2M2U4ZDdkNTY0ZGY1ODMyZTk5MjM0YWEwYTFkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vdGhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjNmM0MmJlYzI1MTQ0Njk5YzJhYzg2OWFiNThmMTJlLnNldENvbnRlbnQoaHRtbF85MDY2M2U4ZDdkNTY0ZGY1ODMyZTk5MjM0YWEwYTFkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZmFiNjBjMjUzYTg0OWZmYjA2ZDY1YTJmNjBkMGRhOS5iaW5kUG9wdXAocG9wdXBfM2M2YzQyYmVjMjUxNDQ2OTljMmFjODY5YWI1OGYxMmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzgxNjJkMTQ0MGVhNDliMmJkNDllZmIzNGYxMGIxOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMjY4LC0xMTguMzYzMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1ZjFkMmFhMThlYzQ0MzViZWYwZmU4M2MzNDdhYTFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwZThmZWNiYmRlMTQzZjQ4MzA2NWFlZGI2M2UyZmJjID0gJCgnPGRpdiBpZD0iaHRtbF9iMGU4ZmVjYmJkZTE0M2Y0ODMwNjVhZWRiNjNlMmZiYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Rm9vdGhpbGw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1ZjFkMmFhMThlYzQ0MzViZWYwZmU4M2MzNDdhYTFkLnNldENvbnRlbnQoaHRtbF9iMGU4ZmVjYmJkZTE0M2Y0ODMwNjVhZWRiNjNlMmZiYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jODE2MmQxNDQwZWE0OWIyYmQ0OWVmYjM0ZjEwYjE5MS5iaW5kUG9wdXAocG9wdXBfZTVmMWQyYWExOGVjNDQzNWJlZjBmZTgzYzM0N2FhMWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2RkZDBiNTlmMDY3NDU1Yjk0YjE3OGRjNWQwZTNlZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMzM2LC0xMTguNTgyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYxM2RiNGY4NjNjZDRjNjRiYTQ0OWM2Mjk5OGIxOTMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViZTdkZjE3YzI3NTQ5ZWI5NjE5YTcyNDU5Mzk2NWQyID0gJCgnPGRpdiBpZD0iaHRtbF81YmU3ZGYxN2MyNzU0OWViOTYxOWE3MjQ1OTM5NjVkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGV2b25zaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjEzZGI0Zjg2M2NkNGM2NGJhNDQ5YzYyOTk4YjE5MzEuc2V0Q29udGVudChodG1sXzViZTdkZjE3YzI3NTQ5ZWI5NjE5YTcyNDU5Mzk2NWQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdkZGQwYjU5ZjA2NzQ1NWI5NGIxNzhkYzVkMGUzZWUwLmJpbmRQb3B1cChwb3B1cF82MTNkYjRmODYzY2Q0YzY0YmE0NDljNjI5OThiMTkzMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Nzg1ZGVmODgxYTA0MTk0YTNjYTQ2NTU2ZTQ0NTdiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjI3LC0xMTguNTAzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVlMGFmYmJjYjVlYzRkMDQ5MGVlMmE4NzQzYmU0N2FmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxN2Q5YzczZTZiZjRkOTViMDgzN2QwZGNmN2M2NmUyID0gJCgnPGRpdiBpZD0iaHRtbF9jMTdkOWM3M2U2YmY0ZDk1YjA4MzdkMGRjZjdjNjZlMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGV2b25zaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWUwYWZiYmNiNWVjNGQwNDkwZWUyYTg3NDNiZTQ3YWYuc2V0Q29udGVudChodG1sX2MxN2Q5YzczZTZiZjRkOTViMDgzN2QwZGNmN2M2NmUyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc3ODVkZWY4ODFhMDQxOTRhM2NhNDY1NTZlNDQ1N2JhLmJpbmRQb3B1cChwb3B1cF81ZTBhZmJiY2I1ZWM0ZDA0OTBlZTJhODc0M2JlNDdhZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZTJmNzFjODc1YTg0NjI2YTcyODk2MmQwYjQ0ZTAxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjI3ODUsLTExOC41MDIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Y1NTUyZWQxZjgzNGU1NzkwNDk3MGQyNGI2OThiNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTVlZGViYWZhNzAzNDhjNTk2Y2NhM2IwNWE3NDA0NDYgPSAkKCc8ZGl2IGlkPSJodG1sXzU1ZWRlYmFmYTcwMzQ4YzU5NmNjYTNiMDVhNzQwNDQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZXZvbnNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZjU1NTJlZDFmODM0ZTU3OTA0OTcwZDI0YjY5OGI1ZS5zZXRDb250ZW50KGh0bWxfNTVlZGViYWZhNzAzNDhjNTk2Y2NhM2IwNWE3NDA0NDYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfM2UyZjcxYzg3NWE4NDYyNmE3Mjg5NjJkMGI0NGUwMTkuYmluZFBvcHVwKHBvcHVwXzNmNTU1MmVkMWY4MzRlNTc5MDQ5NzBkMjRiNjk4YjVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkYWI4ODkzNzA1ODRmOWE5ZWVkNDMwMTQ0Yzk5ZTliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjc5MywtMTE4LjUwMjFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZWEzNDcxMGY0OWY0Yzc4OTc1MTZiYjBiOGQyYjhjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ODFlOTFiY2QwY2I0YjBiYTU3MDU5MDE4YzFkNjJiZiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTgxZTkxYmNkMGNiNGIwYmE1NzA1OTAxOGMxZDYyYmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRldm9uc2hpcmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJlYTM0NzEwZjQ5ZjRjNzg5NzUxNmJiMGI4ZDJiOGNjLnNldENvbnRlbnQoaHRtbF81ODFlOTFiY2QwY2I0YjBiYTU3MDU5MDE4YzFkNjJiZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZGFiODg5MzcwNTg0ZjlhOWVlZDQzMDE0NGM5OWU5Yi5iaW5kUG9wdXAocG9wdXBfMmVhMzQ3MTBmNDlmNGM3ODk3NTE2YmIwYjhkMmI4Y2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGFiYmU1NzdmNzUyNDY0ZDg2NTFkZDgyYmVlMGY2NmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNzczLC0xMTguNDc1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyYmM0NzE0Y2EzOTQ2NWU4MGQyZjRhZGE2YTk1ZGViID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmYTZhZWUxYzBiOTRmMjJhYjk0ZDdlYTQ4MjRlNTdjID0gJCgnPGRpdiBpZD0iaHRtbF8yZmE2YWVlMWMwYjk0ZjIyYWI5NGQ3ZWE0ODI0ZTU3YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGV2b25zaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTJiYzQ3MTRjYTM5NDY1ZTgwZDJmNGFkYTZhOTVkZWIuc2V0Q29udGVudChodG1sXzJmYTZhZWUxYzBiOTRmMjJhYjk0ZDdlYTQ4MjRlNTdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhYmJlNTc3Zjc1MjQ2NGQ4NjUxZGQ4MmJlZTBmNjZjLmJpbmRQb3B1cChwb3B1cF85MmJjNDcxNGNhMzk0NjVlODBkMmY0YWRhNmE5NWRlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNzYxZWEzZTFhOTU0ZGZlYWExNWQzMThhOTUwNGNlZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjI2MSwtMTE4LjQ4NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jODM2YzEyYmUwMWQ0ZGY1YTQ5M2FjNzE3MmUyM2JhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMmZlYTY2OTQyMmI0OWMyOGZiNmVhZWZhYmNiNWViMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZTJmZWE2Njk0MjJiNDljMjhmYjZlYWVmYWJjYjVlYjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRldm9uc2hpcmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M4MzZjMTJiZTAxZDRkZjVhNDkzYWM3MTcyZTIzYmE3LnNldENvbnRlbnQoaHRtbF9lMmZlYTY2OTQyMmI0OWMyOGZiNmVhZWZhYmNiNWViMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNzYxZWEzZTFhOTU0ZGZlYWExNWQzMThhOTUwNGNlZS5iaW5kUG9wdXAocG9wdXBfYzgzNmMxMmJlMDFkNGRmNWE0OTNhYzcxNzJlMjNiYTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWM0OWRjNDQxMjhiNGEwZThjNTEwNjdhMmI2NjA1MjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNjEsLTExOC40ODQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2I0NDRmYmU1NjFjNDI0ZGEwYmUwMTlhMjcyYjY5Y2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjYyZTRmNWMyNTNkNDk0ZDkxMmNlNjljNmE3YThmZTIgPSAkKCc8ZGl2IGlkPSJodG1sX2Y2MmU0ZjVjMjUzZDQ5NGQ5MTJjZTY5YzZhN2E4ZmUyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5EZXZvbnNoaXJlPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjQ0NGZiZTU2MWM0MjRkYTBiZTAxOWEyNzJiNjljZC5zZXRDb250ZW50KGh0bWxfZjYyZTRmNWMyNTNkNDk0ZDkxMmNlNjljNmE3YThmZTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWM0OWRjNDQxMjhiNGEwZThjNTEwNjdhMmI2NjA1MjYuYmluZFBvcHVwKHBvcHVwX2NiNDQ0ZmJlNTYxYzQyNGRhMGJlMDE5YTI3MmI2OWNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmMmYxZTUwMGJlYzQwNmZhZWYzNzYyZDgwZDM0ZTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjIxMiwtMTE4LjUwMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lODE5MzQ3MGY5ZTc0ODE4YjZiNGZlMTI0MWNmNWJjYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDQ1OGQ1OTU0ZWU0ZmY1ODVkYmIxMzk2NTZmZTFlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQ0NThkNTk1NGVlNGZmNTg1ZGJiMTM5NjU2ZmUxZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkRldm9uc2hpcmU8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4MTkzNDcwZjllNzQ4MThiNmI0ZmUxMjQxY2Y1YmNjLnNldENvbnRlbnQoaHRtbF8zNDQ1OGQ1OTU0ZWU0ZmY1ODVkYmIxMzk2NTZmZTFlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZjJmMWU1MDBiZWM0MDZmYWVmMzc2MmQ4MGQzNGUxNy5iaW5kUG9wdXAocG9wdXBfZTgxOTM0NzBmOWU3NDgxOGI2YjRmZTEyNDFjZjViY2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODVlYTM1NGUwNjgwNDcyMThiODM3NjU4OGUzYzdjY2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMzU1LC0xMTguNTUzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc3NmQ5NjVkYTFlZTQ2YmQ5ZWExZGYxMjE5NjM3Yzk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0OGVmNDg0MmM4NDQ5YzE5YTc4ZGMzN2E4MTdkMWRhID0gJCgnPGRpdiBpZD0iaHRtbF9hNDhlZjQ4NDJjODQ0OWMxOWE3OGRjMzdhODE3ZDFkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+RGV2b25zaGlyZTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzc2ZDk2NWRhMWVlNDZiZDllYTFkZjEyMTk2MzdjOTguc2V0Q29udGVudChodG1sX2E0OGVmNDg0MmM4NDQ5YzE5YTc4ZGMzN2E4MTdkMWRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg1ZWEzNTRlMDY4MDQ3MjE4YjgzNzY1ODhlM2M3Y2NmLmJpbmRQb3B1cChwb3B1cF83NzZkOTY1ZGExZWU0NmJkOWVhMWRmMTIxOTYzN2M5OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWNkZDM3NDYyNGQ0ZmJmODY1ZGZhYjllOTUyMWJlNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk1NzQsLTExOC4yODI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDIwMmRmNGNlMWQ2NGE0Y2E5MWY2NmI1M2I3NTVmMWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2ZhMTlhMDU4ODgzNGM5MGFkZGU4NTgyNmI0ZDViMDMgPSAkKCc8ZGl2IGlkPSJodG1sXzNmYTE5YTA1ODg4MzRjOTBhZGRlODU4MjZiNGQ1YjAzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAyMDJkZjRjZTFkNjRhNGNhOTFmNjZiNTNiNzU1ZjFlLnNldENvbnRlbnQoaHRtbF8zZmExOWEwNTg4ODM0YzkwYWRkZTg1ODI2YjRkNWIwMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YWNkZDM3NDYyNGQ0ZmJmODY1ZGZhYjllOTUyMWJlNy5iaW5kUG9wdXAocG9wdXBfMDIwMmRmNGNlMWQ2NGE0Y2E5MWY2NmI1M2I3NTVmMWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzUwMWRlNzVjZjEzNGQyMDhjOWZlMTE2MDg2YzczMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NTAzLC0xMTguMjU2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkZWUyMDY4YWI5ZjQzMTY4MTQ0Y2NmMDliOTJhOGRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEwMDE1NmVkMTQ1MDQ1NWRhZDZjZDcxYTIxNjIxM2YwID0gJCgnPGRpdiBpZD0iaHRtbF8xMDAxNTZlZDE0NTA0NTVkYWQ2Y2Q3MWEyMTYyMTNmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZGVlMjA2OGFiOWY0MzE2ODE0NGNjZjA5YjkyYThkYi5zZXRDb250ZW50KGh0bWxfMTAwMTU2ZWQxNDUwNDU1ZGFkNmNkNzFhMjE2MjEzZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzUwMWRlNzVjZjEzNGQyMDhjOWZlMTE2MDg2YzczMTYuYmluZFBvcHVwKHBvcHVwXzJkZWUyMDY4YWI5ZjQzMTY4MTQ0Y2NmMDliOTJhOGRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxMDlhZTE0MWMzZDRmMGI4N2MyZWQ0MjE1ZTNkOTliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTU2NSwtMTE4LjI3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZWYwYWM3OGY2NmY0NWViOTdlMzcyNTYxODAzYjE1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2JiNzk0YjY3ZDQ0M2M0YmIxZWQ5OWU5NjFmMTc1NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMmNiYjc5NGI2N2Q0NDNjNGJiMWVkOTllOTYxZjE3NTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGVmMGFjNzhmNjZmNDVlYjk3ZTM3MjU2MTgwM2IxNWMuc2V0Q29udGVudChodG1sXzJjYmI3OTRiNjdkNDQzYzRiYjFlZDk5ZTk2MWYxNzU0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYxMDlhZTE0MWMzZDRmMGI4N2MyZWQ0MjE1ZTNkOTliLmJpbmRQb3B1cChwb3B1cF80ZWYwYWM3OGY2NmY0NWViOTdlMzcyNTYxODAzYjE1Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZmYzMTdiMDUyNDQ0YmQ1ODZmOWEzMTVjOTE5MzRmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk1MDEsLTExOC4yODI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODlmODAyZjhlZTIyNDdmMjhjMTQ1MjNmOGIyYmI1MTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODBkOTg4ODI3NDk1NDRiOWJjZDgxNWM0ZjdjNTRjZjYgPSAkKCc8ZGl2IGlkPSJodG1sXzgwZDk4ODgyNzQ5NTQ0YjliY2Q4MTVjNGY3YzU0Y2Y2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg5ZjgwMmY4ZWUyMjQ3ZjI4YzE0NTIzZjhiMmJiNTEyLnNldENvbnRlbnQoaHRtbF84MGQ5ODg4Mjc0OTU0NGI5YmNkODE1YzRmN2M1NGNmNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZmYzMTdiMDUyNDQ0YmQ1ODZmOWEzMTVjOTE5MzRmOS5iaW5kUG9wdXAocG9wdXBfODlmODAyZjhlZTIyNDdmMjhjMTQ1MjNmOGIyYmI1MTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWM0OTc0YmIzMTlmNGQyZDkwNWUxYmJmNmM4ZWFiZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NTI4LC0xMTguMjg5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q5YTUwZGYwOTg2MDRjNWQ5ODVlODNhNTgwMDhhNDQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3MTE3MWNkMTk1YzQzMjJhZWQ3ZDcwMjU4YTAxZGM0ID0gJCgnPGRpdiBpZD0iaHRtbF81NzExNzFjZDE5NWM0MzIyYWVkN2Q3MDI1OGEwMWRjNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOWE1MGRmMDk4NjA0YzVkOTg1ZTgzYTU4MDA4YTQ0MC5zZXRDb250ZW50KGh0bWxfNTcxMTcxY2QxOTVjNDMyMmFlZDdkNzAyNThhMDFkYzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWM0OTc0YmIzMTlmNGQyZDkwNWUxYmJmNmM4ZWFiZDcuYmluZFBvcHVwKHBvcHVwX2Q5YTUwZGYwOTg2MDRjNWQ5ODVlODNhNTgwMDhhNDQwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3Yzc2NTFlZjk5YTRmOTNiOWE0ZWU4YzdlMWEwYzI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTU4LC0xMTguMjg5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQwMTJiYTcxNTFiNTQwMmM5YTQzMzc1MzkwM2U0NTZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5NTgxMmY1NzEwMTRiN2U5NmI5MTE0MzQ4M2M3OGU5ID0gJCgnPGRpdiBpZD0iaHRtbF85OTU4MTJmNTcxMDE0YjdlOTZiOTExNDM0ODNjNzhlOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MDEyYmE3MTUxYjU0MDJjOWE0MzM3NTM5MDNlNDU2Yy5zZXRDb250ZW50KGh0bWxfOTk1ODEyZjU3MTAxNGI3ZTk2YjkxMTQzNDgzYzc4ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzdjNzY1MWVmOTlhNGY5M2I5YTRlZThjN2UxYTBjMjYuYmluZFBvcHVwKHBvcHVwXzQwMTJiYTcxNTFiNTQwMmM5YTQzMzc1MzkwM2U0NTZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdkOTA5YzhmMWFlNTQ2ODc4Mzk2OGQ3NjU3MDU0Y2NlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTU4LC0xMTguMjg5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyOWE4MzYwZjQyMTQ5MDdhZGRhZDRkOGM1OTIyMjA5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0ZTIxYzg4ZTliNDQ3MmQ4NGNiYjNmZDY2YmZhMWUxID0gJCgnPGRpdiBpZD0iaHRtbF9iNGUyMWM4OGU5YjQ0NzJkODRjYmIzZmQ2NmJmYTFlMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjlhODM2MGY0MjE0OTA3YWRkYWQ0ZDhjNTkyMjIwOS5zZXRDb250ZW50KGh0bWxfYjRlMjFjODhlOWI0NDcyZDg0Y2JiM2ZkNjZiZmExZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2Q5MDljOGYxYWU1NDY4NzgzOTY4ZDc2NTcwNTRjY2UuYmluZFBvcHVwKHBvcHVwXzUyOWE4MzYwZjQyMTQ5MDdhZGRhZDRkOGM1OTIyMjA5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I2Yjk3OGZhMmMyNzQ3ZDdiN2RkYTM1YjM1NTc2MDNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTM4NiwtMTE4LjI0MDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTc0YTFlNzdiYWQ0MWFjYWFjYzJmOTM1NjQwNGM5ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MTg3OWMyOWRiYmI0OTY5ODdhYTU1OWE4YmI5MmVkYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjE4NzljMjlkYmJiNDk2OTg3YWE1NTlhOGJiOTJlZGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGU3NGExZTc3YmFkNDFhY2FhY2MyZjkzNTY0MDRjOWQuc2V0Q29udGVudChodG1sXzYxODc5YzI5ZGJiYjQ5Njk4N2FhNTU5YThiYjkyZWRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I2Yjk3OGZhMmMyNzQ3ZDdiN2RkYTM1YjM1NTc2MDNmLmJpbmRQb3B1cChwb3B1cF80ZTc0YTFlNzdiYWQ0MWFjYWFjYzJmOTM1NjQwNGM5ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NmJlMThlY2UzZDk0MmQ2OGQ1MTFmNDk4N2ZjZDJjMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjkyMzcsLTExOC4yNzE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzI5MzM4YzhiMmYxNGJmYjhkODhmOWIyNDc3OTVhZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGYzMmQ4N2M1MjFhNGQ3MGFlYmY2YmMwYmEyYmQzNzAgPSAkKCc8ZGl2IGlkPSJodG1sX2RmMzJkODdjNTIxYTRkNzBhZWJmNmJjMGJhMmJkMzcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMyOTMzOGM4YjJmMTRiZmI4ZDg4ZjliMjQ3Nzk1YWVlLnNldENvbnRlbnQoaHRtbF9kZjMyZDg3YzUyMWE0ZDcwYWViZjZiYzBiYTJiZDM3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NmJlMThlY2UzZDk0MmQ2OGQ1MTFmNDk4N2ZjZDJjMy5iaW5kUG9wdXAocG9wdXBfMzI5MzM4YzhiMmYxNGJmYjhkODhmOWIyNDc3OTVhZWUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWYyN2Q1MjJjODFlNGI4OWJjNTQ0YzI5NzdlZjRmMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NDI5LC0xMTguMjY5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2YzBmZDU0ZWY4MjQ3ZWViZGViNjI4ZGRmYjhiNjQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVkYjczOWMzNWI3ODQ5YTVhYTk3MWQ3MjhjODlmNjgxID0gJCgnPGRpdiBpZD0iaHRtbF81ZGI3MzljMzViNzg0OWE1YWE5NzFkNzI4Yzg5ZjY4MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNmMwZmQ1NGVmODI0N2VlYmRlYjYyOGRkZmI4YjY0Mi5zZXRDb250ZW50KGh0bWxfNWRiNzM5YzM1Yjc4NDlhNWFhOTcxZDcyOGM4OWY2ODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWYyN2Q1MjJjODFlNGI4OWJjNTQ0YzI5NzdlZjRmMjUuYmluZFBvcHVwKHBvcHVwX2Y2YzBmZDU0ZWY4MjQ3ZWViZGViNjI4ZGRmYjhiNjQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5ZGQzYmUxNTE0MDQ0NTE5MTc4MjYwYjI1OTIyMDRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTMxNSwtMTE4LjIzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4ZTY0OWRmOWQ2NjQ1YTY4YjFiMTZiMzcyYThhNDQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5ODE2NjNjNDY4OTQ5Y2ZhN2U3NDRmZWRhNDI1ZTExID0gJCgnPGRpdiBpZD0iaHRtbF8yOTgxNjYzYzQ2ODk0OWNmYTdlNzQ0ZmVkYTQyNWUxMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OGU2NDlkZjlkNjY0NWE2OGIxYjE2YjM3MmE4YTQ0Mi5zZXRDb250ZW50KGh0bWxfMjk4MTY2M2M0Njg5NDljZmE3ZTc0NGZlZGE0MjVlMTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjlkZDNiZTE1MTQwNDQ1MTkxNzgyNjBiMjU5MjIwNGQuYmluZFBvcHVwKHBvcHVwXzg4ZTY0OWRmOWQ2NjQ1YTY4YjFiMTZiMzcyYThhNDQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNmNjVkNzg1ZDMyOTRhZGE4NGQ1YjQ1Y2Q5ZjE1MzM2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTU5MSwtMTE4LjI3MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YmFhZWE0ODFkM2Y0ZjgyOTg4MTk5ZTA3MjkxMGJlYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTA3ZDRiNTQxOWQ0YjczYjlmZDgwNjVmNDYzZDU3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWEwN2Q0YjU0MTlkNGI3M2I5ZmQ4MDY1ZjQ2M2Q1NzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWJhYWVhNDgxZDNmNGY4Mjk4ODE5OWUwNzI5MTBiZWIuc2V0Q29udGVudChodG1sXzFhMDdkNGI1NDE5ZDRiNzNiOWZkODA2NWY0NjNkNTc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNmNjVkNzg1ZDMyOTRhZGE4NGQ1YjQ1Y2Q5ZjE1MzM2LmJpbmRQb3B1cChwb3B1cF85YmFhZWE0ODFkM2Y0ZjgyOTg4MTk5ZTA3MjkxMGJlYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNTllZjZhZGMyYzU0ODI1YjAyMDZmY2ZhNjkyYzliOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjkzMTUsLTExOC4yMzYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzc4YjcyYTRiNzQxNDQzOTg5NjFhYWQzYzgxZDI4MjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2FlODg1MDIyNTI2NDc5YTk1ZTJhN2VkMzIzZWQ4MzkgPSAkKCc8ZGl2IGlkPSJodG1sX2NhZTg4NTAyMjUyNjQ3OWE5NWUyYTdlZDMyM2VkODM5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3OGI3MmE0Yjc0MTQ0Mzk4OTYxYWFkM2M4MWQyODI4LnNldENvbnRlbnQoaHRtbF9jYWU4ODUwMjI1MjY0NzlhOTVlMmE3ZWQzMjNlZDgzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNTllZjZhZGMyYzU0ODI1YjAyMDZmY2ZhNjkyYzliOS5iaW5kUG9wdXAocG9wdXBfYzc4YjcyYTRiNzQxNDQzOTg5NjFhYWQzYzgxZDI4MjgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGUzNGQ5NWU2ODBkNDkyYTk0Njc3OTU3MDIxNTY2MzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45MzQ4LC0xMTguMjUxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4NzZiMjQ1ZTY0ODQ1MTk5M2JmNzYyY2Q5N2I0Yzk1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlNmYzZDRmYjIyYTQwMWZiZjc4ZGM3N2VhYzAwODg5ID0gJCgnPGRpdiBpZD0iaHRtbF8wZTZmM2Q0ZmIyMmE0MDFmYmY3OGRjNzdlYWMwMDg4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODc2YjI0NWU2NDg0NTE5OTNiZjc2MmNkOTdiNGM5NS5zZXRDb250ZW50KGh0bWxfMGU2ZjNkNGZiMjJhNDAxZmJmNzhkYzc3ZWFjMDA4ODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGUzNGQ5NWU2ODBkNDkyYTk0Njc3OTU3MDIxNTY2MzAuYmluZFBvcHVwKHBvcHVwX2I4NzZiMjQ1ZTY0ODQ1MTk5M2JmNzYyY2Q5N2I0Yzk1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5ZDBiMzczODdlNDQwNTJhOGEzMDU5N2I4ZjYxOGE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTM4MywtMTE4LjI2NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNWEzOGQ0Yzc4MDA0ZDA1YThjZTE2YThmY2YzOGI4OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YzNjMjYwZjNkNGU0YjRjODYxYzhjODQxNjhjY2YyYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNWMzYzI2MGYzZDRlNGI0Yzg2MWM4Yzg0MTY4Y2NmMmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDVhMzhkNGM3ODAwNGQwNWE4Y2UxNmE4ZmNmMzhiODkuc2V0Q29udGVudChodG1sXzVjM2MyNjBmM2Q0ZTRiNGM4NjFjOGM4NDE2OGNjZjJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5ZDBiMzczODdlNDQwNTJhOGEzMDU5N2I4ZjYxOGE3LmJpbmRQb3B1cChwb3B1cF8wNWEzOGQ0Yzc4MDA0ZDA1YThjZTE2YThmY2YzOGI4OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85N2NhMGYzMmViMDM0YTVlODc0NjBkNjU4MDhkY2QyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjkzODgsLTExOC4yNTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzgzZTJlMjI0MTAwNGI2ZTg2ODJmMGQzMGY4MGZiOWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjRiZTBmZjYwM2NjNDA1NGFmOTk5MGY2NjMyNDI4MWEgPSAkKCc8ZGl2IGlkPSJodG1sXzY0YmUwZmY2MDNjYzQwNTRhZjk5OTBmNjYzMjQyODFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc4M2UyZTIyNDEwMDRiNmU4NjgyZjBkMzBmODBmYjljLnNldENvbnRlbnQoaHRtbF82NGJlMGZmNjAzY2M0MDU0YWY5OTkwZjY2MzI0MjgxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85N2NhMGYzMmViMDM0YTVlODc0NjBkNjU4MDhkY2QyMi5iaW5kUG9wdXAocG9wdXBfNzgzZTJlMjI0MTAwNGI2ZTg2ODJmMGQzMGY4MGZiOWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTAzZTVhZTE1NzE1NDA2MmExOGZhZTRhZDY2N2YzM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszMy45NDU2LC0xMTguMjc4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxMTUzNTk5OWJhNDQ1MmY4YTUxOGI0ODQwMjc4YzVjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA3NzY0MTUxMzUyYjRhZTM5YmIyNTlmYzU5ZWU5ZWZjID0gJCgnPGRpdiBpZD0iaHRtbF8wNzc2NDE1MTM1MmI0YWUzOWJiMjU5ZmM1OWVlOWVmYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGhlYXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMTE1MzU5OTliYTQ0NTJmOGE1MThiNDg0MDI3OGM1Yy5zZXRDb250ZW50KGh0bWxfMDc3NjQxNTEzNTJiNGFlMzliYjI1OWZjNTllZTllZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTAzZTVhZTE1NzE1NDA2MmExOGZhZTRhZDY2N2YzM2QuYmluZFBvcHVwKHBvcHVwXzAxMTUzNTk5OWJhNDQ1MmY4YTUxOGI0ODQwMjc4YzVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VhYmE4OTNlODhkYTRhODk5OWZlNTA3ZGZkMGFjNjUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTQ3NSwtMTE4LjI2MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MWVjYjEyZGM1ZGI0ODNjYTE5Y2VlMTM4MjM1Njc1ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yY2UxZGY2ZWNhODk0MzBjYTE1YjY0ZjZkMmY4NGE3MyA9ICQoJzxkaXYgaWQ9Imh0bWxfMmNlMWRmNmVjYTg5NDMwY2ExNWI2NGY2ZDJmODRhNzMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRoZWFzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDFlY2IxMmRjNWRiNDgzY2ExOWNlZTEzODIzNTY3NWUuc2V0Q29udGVudChodG1sXzJjZTFkZjZlY2E4OTQzMGNhMTViNjRmNmQyZjg0YTczKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VhYmE4OTNlODhkYTRhODk5OWZlNTA3ZGZkMGFjNjUwLmJpbmRQb3B1cChwb3B1cF80MWVjYjEyZGM1ZGI0ODNjYTE5Y2VlMTM4MjM1Njc1ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZTA0ZjA2NGM2NTI0ODNiYmYyZGNmNTEzYmEzMTNlOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzMzLjk1MTEsLTExOC4yNzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2E5ODk1ODIwNmRkNDhlMWEzYWEzMzFmYjVmZjc2YTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjk5YWQyM2Q5NmY3NGY1NWE4OGRmOTRlMzQ2MTBiMjMgPSAkKCc8ZGl2IGlkPSJodG1sX2I5OWFkMjNkOTZmNzRmNTVhODhkZjk0ZTM0NjEwYjIzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aGVhc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhOTg5NTgyMDZkZDQ4ZTFhM2FhMzMxZmI1ZmY3NmE0LnNldENvbnRlbnQoaHRtbF9iOTlhZDIzZDk2Zjc0ZjU1YTg4ZGY5NGUzNDYxMGIyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iZTA0ZjA2NGM2NTI0ODNiYmYyZGNmNTEzYmEzMTNlOS5iaW5kUG9wdXAocG9wdXBfY2E5ODk1ODIwNmRkNDhlMWEzYWEzMzFmYjVmZjc2YTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzJiMmU0MzIzYmZkNGJkMWE5MmNmMjgyMWMyNzQ0MmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMzE5LC0xMTguNDY3Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3NzliMGZhNDVjMzQ0ZTRhMjg1YmMwMmFiODI2NTI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q4NjhjNjcxYzg5NTQwYmVhNDVjOTY0MTY5NmUyMTYyID0gJCgnPGRpdiBpZD0iaHRtbF9kODY4YzY3MWM4OTU0MGJlYTQ1Yzk2NDE2OTZlMjE2MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjc3OWIwZmE0NWMzNDRlNGEyODViYzAyYWI4MjY1MjYuc2V0Q29udGVudChodG1sX2Q4NjhjNjcxYzg5NTQwYmVhNDVjOTY0MTY5NmUyMTYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MyYjJlNDMyM2JmZDRiZDFhOTJjZjI4MjFjMjc0NDJlLmJpbmRQb3B1cChwb3B1cF9mNzc5YjBmYTQ1YzM0NGU0YTI4NWJjMDJhYjgyNjUyNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZGRmMTM5ZDI1MGE0MGQ4YjUxYWE1MzRkYzI2ZmQ4MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIxNTcsLTExOC40MzExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTE1NDY0MDg3MzBhNGIyOWJmMGM3ZWQ4MmQ2MzBkMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzJlNmMzZGIyNWZhNGI0Njk3NmFkNmM4YWQ2YTRiMjggPSAkKCc8ZGl2IGlkPSJodG1sX2MyZTZjM2RiMjVmYTRiNDY5NzZhZDZjOGFkNmE0YjI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MTU0NjQwODczMGE0YjI5YmYwYzdlZDgyZDYzMGQzNS5zZXRDb250ZW50KGh0bWxfYzJlNmMzZGIyNWZhNGI0Njk3NmFkNmM4YWQ2YTRiMjgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmRkZjEzOWQyNTBhNDBkOGI1MWFhNTM0ZGMyNmZkODEuYmluZFBvcHVwKHBvcHVwXzkxNTQ2NDA4NzMwYTRiMjliZjBjN2VkODJkNjMwZDM1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiODMyYjY0ZDE2MjQyMGJiNjAwNzM3MjRhYzI4NDcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjI4MywtMTE4LjQ2NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mODhiMDg3NDNlYTY0MGIyYmQwNTA0NzMwNDdmZDNjNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYWQ0OTBkMDExYzE0YTFlYmUxOWFkYWM1NmFlN2U0ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfMGFkNDkwZDAxMWMxNGExZWJlMTlhZGFjNTZhZTdlNGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y4OGIwODc0M2VhNjQwYjJiZDA1MDQ3MzA0N2ZkM2M3LnNldENvbnRlbnQoaHRtbF8wYWQ0OTBkMDExYzE0YTFlYmUxOWFkYWM1NmFlN2U0ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYjgzMmI2NGQxNjI0MjBiYjYwMDczNzI0YWMyODQ3MS5iaW5kUG9wdXAocG9wdXBfZjg4YjA4NzQzZWE2NDBiMmJkMDUwNDczMDQ3ZmQzYzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDNiOTc1MGI5YzRjNDIxN2ExMDE1OGUxYTRjMmRkN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4zMDAxLC0xMTguNDYwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyN2U0NjMxYmZiMTQ0ZTZiN2JkZmJhYjc2ZDk4OTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyMTI4MmUxYjIzZTQxZmM4ZDg0MmE5NzViOTJjYmU4ID0gJCgnPGRpdiBpZD0iaHRtbF84MjEyODJlMWIyM2U0MWZjOGQ4NDJhOTc1YjkyY2JlOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjI3ZTQ2MzFiZmIxNDRlNmI3YmRmYmFiNzZkOTg5NzIuc2V0Q29udGVudChodG1sXzgyMTI4MmUxYjIzZTQxZmM4ZDg0MmE5NzViOTJjYmU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QzYjk3NTBiOWM0YzQyMTdhMTAxNThlMWE0YzJkZDdhLmJpbmRQb3B1cChwb3B1cF82MjdlNDYzMWJmYjE0NGU2YjdiZGZiYWI3NmQ5ODk3Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzhmMTA5MThkZjY0MmYyOTYzOTU3YTg0NGRmOWE0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjI2NDYsLTExOC40NjEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGQxYjRlYmFlZWMxNDA3OTk1NDdhNTMwOTUyZGRkM2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2I3ZmE4YzAzMjhlNGVhOGIzZjhkMDhmOWQyMjZiNmEgPSAkKCc8ZGl2IGlkPSJodG1sX2NiN2ZhOGMwMzI4ZTRlYThiM2Y4ZDA4ZjlkMjI2YjZhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZDFiNGViYWVlYzE0MDc5OTU0N2E1MzA5NTJkZGQzZC5zZXRDb250ZW50KGh0bWxfY2I3ZmE4YzAzMjhlNGVhOGIzZjhkMDhmOWQyMjZiNmEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODc4ZjEwOTE4ZGY2NDJmMjk2Mzk1N2E4NDRkZjlhNDAuYmluZFBvcHVwKHBvcHVwXzhkMWI0ZWJhZWVjMTQwNzk5NTQ3YTUzMDk1MmRkZDNkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1MTQ0NWRmZjc3MTRhNDNhMWFkNzMwNDE0MGU1YmYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjc0NywtMTE4LjQ2OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZGZiODI1ZjdjNTA0OGQ2YjZlMmQwZWIyNTJmZTJmMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTdiMmNlNWE3NDY0NjNjOGU1YjgyZTQ4NzE3NzBlZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOGE3YjJjZTVhNzQ2NDYzYzhlNWI4MmU0ODcxNzcwZWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RkZmI4MjVmN2M1MDQ4ZDZiNmUyZDBlYjI1MmZlMmYzLnNldENvbnRlbnQoaHRtbF84YTdiMmNlNWE3NDY0NjNjOGU1YjgyZTQ4NzE3NzBlZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNTE0NDVkZmY3NzE0YTQzYTFhZDczMDQxNDBlNWJmMy5iaW5kUG9wdXAocG9wdXBfZGRmYjgyNWY3YzUwNDhkNmI2ZTJkMGViMjUyZmUyZjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTRmNGVjZGMwNjNkNGY2YThmYzRhMWY0Y2VkMTJkMDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yOTg1LC0xMTguNDY4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY0MWQ5ZDFkY2QzMjQ0NzRhZTkxMWYxYmRhMmY4MGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiMmE0NTBjMGRlMDQ3MTdhYjdlODJkN2E2YWRlOTg0ID0gJCgnPGRpdiBpZD0iaHRtbF8xYjJhNDUwYzBkZTA0NzE3YWI3ZTgyZDdhNmFkZTk4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQxZDlkMWRjZDMyNDQ3NGFlOTExZjFiZGEyZjgwZjQuc2V0Q29udGVudChodG1sXzFiMmE0NTBjMGRlMDQ3MTdhYjdlODJkN2E2YWRlOTg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE0ZjRlY2RjMDYzZDRmNmE4ZmM0YTFmNGNlZDEyZDA3LmJpbmRQb3B1cChwb3B1cF82NDFkOWQxZGNkMzI0NDc0YWU5MTFmMWJkYTJmODBmNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzA0NDI4NTM4ODM0N2RiOTU1NDEzMDk4NDA5NGYyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjI3NzUsLTExOC40NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZWZmMWE1YTVjNjE0NmM4YTQ2MWJmOTk5MTU5NjQwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wNjlkNDNhNWJiMTU0YWRmYjA5MmU5OTM0NjZhYzI3NCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDY5ZDQzYTViYjE1NGFkZmIwOTJlOTkzNDY2YWMyNzQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhlZmYxYTVhNWM2MTQ2YzhhNDYxYmY5OTkxNTk2NDAxLnNldENvbnRlbnQoaHRtbF8wNjlkNDNhNWJiMTU0YWRmYjA5MmU5OTM0NjZhYzI3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YzA0NDI4NTM4ODM0N2RiOTU1NDEzMDk4NDA5NGYyNi5iaW5kUG9wdXAocG9wdXBfOGVmZjFhNWE1YzYxNDZjOGE0NjFiZjk5OTE1OTY0MDEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDYzN2Q4MDU4ODc3NDE0YTk0N2YzMTk2NWQzZGQ5NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4zMDkyLC0xMTguNDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg0NTdhZjZlNjg5NDVmOGE2NjQwNWFlYWIwYjM5ZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTIyY2IzYmY5YzdmNDdhY2E0M2Q1ZjNhZjE4Mjc3YTggPSAkKCc8ZGl2IGlkPSJodG1sXzUyMmNiM2JmOWM3ZjQ3YWNhNDNkNWYzYWYxODI3N2E4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODQ1N2FmNmU2ODk0NWY4YTY2NDA1YWVhYjBiMzllYy5zZXRDb250ZW50KGh0bWxfNTIyY2IzYmY5YzdmNDdhY2E0M2Q1ZjNhZjE4Mjc3YTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDYzN2Q4MDU4ODc3NDE0YTk0N2YzMTk2NWQzZGQ5NzguYmluZFBvcHVwKHBvcHVwXzg4NDU3YWY2ZTY4OTQ1ZjhhNjY0MDVhZWFiMGIzOWVjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3MTAwNTVlMDQ3YzQ5N2ZiN2U2NTk2OTMyNDg2Y2MyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjMxOSwtMTE4LjQ2NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NTAzYTUzNjczMGI0OTY3OWEwNWIxNGFjZjU2Nzg3ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDhkYjkwNTVmMWE0NDI4OTRiMzFkM2YwZjNmY2Y5ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOWQ4ZGI5MDU1ZjFhNDQyODk0YjMxZDNmMGYzZmNmOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1MDNhNTM2NzMwYjQ5Njc5YTA1YjE0YWNmNTY3ODdmLnNldENvbnRlbnQoaHRtbF85ZDhkYjkwNTVmMWE0NDI4OTRiMzFkM2YwZjNmY2Y5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNzEwMDU1ZTA0N2M0OTdmYjdlNjU5NjkzMjQ4NmNjMi5iaW5kUG9wdXAocG9wdXBfNjUwM2E1MzY3MzBiNDk2NzlhMDViMTRhY2Y1Njc4N2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTQ0ZGViZmJhMTU0NGRkYjhkZDIxYmNkYjUyYzMzNDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMTQ0LC0xMTguNDM3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk0MTAxZDAwYTliNDQyYTZhZDcyNjY5NDk4ZjJlNzNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E0ZjJhMzEwMWFjMzRiYjZhNGNlNjJhZTc5YWUyOTIwID0gJCgnPGRpdiBpZD0iaHRtbF9hNGYyYTMxMDFhYzM0YmI2YTRjZTYyYWU3OWFlMjkyMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTQxMDFkMDBhOWI0NDJhNmFkNzI2Njk0OThmMmU3M2Euc2V0Q29udGVudChodG1sX2E0ZjJhMzEwMWFjMzRiYjZhNGNlNjJhZTc5YWUyOTIwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0NGRlYmZiYTE1NDRkZGI4ZGQyMWJjZGI1MmMzMzQ3LmJpbmRQb3B1cChwb3B1cF85NDEwMWQwMGE5YjQ0MmE2YWQ3MjY2OTQ5OGYyZTczYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDdlYzBlMmIxYzQ0Njg1YTk5YzMzZWFlZjEwNGRlYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIzMTksLTExOC40NjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjllNzA2Zjc5MzkwNGIzMDljZTg0MDliY2NiODQyZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmEzODM3YmFjZjZjNDI5NThiZTM4ZmU2MjljZjgwMjIgPSAkKCc8ZGl2IGlkPSJodG1sX2JhMzgzN2JhY2Y2YzQyOTU4YmUzOGZlNjI5Y2Y4MDIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iOWU3MDZmNzkzOTA0YjMwOWNlODQwOWJjY2I4NDJlYi5zZXRDb250ZW50KGh0bWxfYmEzODM3YmFjZjZjNDI5NThiZTM4ZmU2MjljZjgwMjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGQ3ZWMwZTJiMWM0NDY4NWE5OWMzM2VhZWYxMDRkZWIuYmluZFBvcHVwKHBvcHVwX2I5ZTcwNmY3OTM5MDRiMzA5Y2U4NDA5YmNjYjg0MmViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U5MzUwZGRhOTBkYTRmZGZhNjkwM2VlNjkyMjU5NmQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjIxNSwtMTE4LjQ2MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNzJiYWIwYzlkZjY0MmFjYTJjMjZhZmVjYTc3ZGZmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MWRjMjg5OGU1ZTY0Yjk5YmMwMWFjNTFhOTM1ZjM5OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNzFkYzI4OThlNWU2NGI5OWJjMDFhYzUxYTkzNWYzOTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3MmJhYjBjOWRmNjQyYWNhMmMyNmFmZWNhNzdkZmYyLnNldENvbnRlbnQoaHRtbF83MWRjMjg5OGU1ZTY0Yjk5YmMwMWFjNTFhOTM1ZjM5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOTM1MGRkYTkwZGE0ZmRmYTY5MDNlZTY5MjI1OTZkMi5iaW5kUG9wdXAocG9wdXBfMTcyYmFiMGM5ZGY2NDJhY2EyYzI2YWZlY2E3N2RmZjIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDFjMWZkNDc2ODczNDVmMThiOTUwZjI2OTQ1ZDc4NWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMzAxLC0xMTguNDYzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4NDZhNDJhZjlkZDQxNDliNzZiZGMyMGI3Y2RkOTBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U0Yzk4YmUyZDIxNTRiMzg5MTQzYTJmNDE3MzE3MDk5ID0gJCgnPGRpdiBpZD0iaHRtbF9lNGM5OGJlMmQyMTU0YjM4OTE0M2EyZjQxNzMxNzA5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTg0NmE0MmFmOWRkNDE0OWI3NmJkYzIwYjdjZGQ5MGUuc2V0Q29udGVudChodG1sX2U0Yzk4YmUyZDIxNTRiMzg5MTQzYTJmNDE3MzE3MDk5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAxYzFmZDQ3Njg3MzQ1ZjE4Yjk1MGYyNjk0NWQ3ODVlLmJpbmRQb3B1cChwb3B1cF9lODQ2YTQyYWY5ZGQ0MTQ5Yjc2YmRjMjBiN2NkZDkwZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNzFhZTFiNzkwMjk0MDgwYjhiYTFlNmVhODAyNGI1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjI1NzMsLTExOC40Njc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDg1OTE3ZjUwOTk0NDBlNThjMjg0OTg3NDg3ZTg1NmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTY0NjVhZjlmZDdjNDViNzkyMzY2N2MzNmQ5MDNjZDkgPSAkKCc8ZGl2IGlkPSJodG1sX2E2NDY1YWY5ZmQ3YzQ1Yjc5MjM2NjdjMzZkOTAzY2Q5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODU5MTdmNTA5OTQ0MGU1OGMyODQ5ODc0ODdlODU2Zi5zZXRDb250ZW50KGh0bWxfYTY0NjVhZjlmZDdjNDViNzkyMzY2N2MzNmQ5MDNjZDkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTcxYWUxYjc5MDI5NDA4MGI4YmExZTZlYTgwMjRiNWIuYmluZFBvcHVwKHBvcHVwXzQ4NTkxN2Y1MDk5NDQwZTU4YzI4NDk4NzQ4N2U4NTZmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxOTgwN2IzMzMwZjQ2OTBhYTdiYzdjMDUxODAwYzdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjI0OSwtMTE4LjQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyNzU2YTdlNDIzYjQ2MjRhNzQ4MzY2MGFmNTY1ZTMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjYzZkN2ZjODEwNzQwMDU5YjM4YzIyYWQ1NzI1NDFhID0gJCgnPGRpdiBpZD0iaHRtbF9kY2M2ZDdmYzgxMDc0MDA1OWIzOGMyMmFkNTcyNTQxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDI3NTZhN2U0MjNiNDYyNGE3NDgzNjYwYWY1NjVlMzMuc2V0Q29udGVudChodG1sX2RjYzZkN2ZjODEwNzQwMDU5YjM4YzIyYWQ1NzI1NDFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxOTgwN2IzMzMwZjQ2OTBhYTdiYzdjMDUxODAwYzdjLmJpbmRQb3B1cChwb3B1cF9kMjc1NmE3ZTQyM2I0NjI0YTc0ODM2NjBhZjU2NWUzMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NDU4YWVjNmZjZjE0OTlkYTZmMjBlNDA3YzczOWRjNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIzMTksLTExOC40NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMmQwNjNkMDAzNjQ0YmQzYTAyY2MzOWFkNTA1MDViMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NTdiM2I2MTczYmU0ZjVjYTNmNmUwNGMxYjU5MDY0YSA9ICQoJzxkaXYgaWQ9Imh0bWxfNjU3YjNiNjE3M2JlNGY1Y2EzZjZlMDRjMWI1OTA2NGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIyZDA2M2QwMDM2NDRiZDNhMDJjYzM5YWQ1MDUwNWIwLnNldENvbnRlbnQoaHRtbF82NTdiM2I2MTczYmU0ZjVjYTNmNmUwNGMxYjU5MDY0YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NDU4YWVjNmZjZjE0OTlkYTZmMjBlNDA3YzczOWRjNy5iaW5kUG9wdXAocG9wdXBfMjJkMDYzZDAwMzY0NGJkM2EwMmNjMzlhZDUwNTA1YjApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRmMmQ1NGExNjkxNDUwM2I2MjY3NmVkNDNjY2UwNzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNjEsLTExOC40Njk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzU4NDI0MjA1MzEzNDNmMmEzY2JlZDU2ZTA2NGU0MDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjhlYzE5YjFjMmJkNDI0OTgxYTgyNjgzNGZhMjZkNTggPSAkKCc8ZGl2IGlkPSJodG1sX2Y4ZWMxOWIxYzJiZDQyNDk4MWE4MjY4MzRmYTI2ZDU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTg0MjQyMDUzMTM0M2YyYTNjYmVkNTZlMDY0ZTQwNC5zZXRDb250ZW50KGh0bWxfZjhlYzE5YjFjMmJkNDI0OTgxYTgyNjgzNGZhMjZkNTgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODRmMmQ1NGExNjkxNDUwM2I2MjY3NmVkNDNjY2UwNzEuYmluZFBvcHVwKHBvcHVwXzM1ODQyNDIwNTMxMzQzZjJhM2NiZWQ1NmUwNjRlNDA0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2OGQ2ZjU5MTM5MjRlMzM4MGZmYWEwNTk2M2M5OTg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjIyOSwtMTE4LjQxOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNGVlYmYzMjczZWQ0ZjEwOWE4NzlhZmZlM2NlZTAxMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84N2FhYjAxNDJjY2I0YmJkOWVhZTRjN2ZkYzBmZThmZCA9ICQoJzxkaXYgaWQ9Imh0bWxfODdhYWIwMTQyY2NiNGJiZDllYWU0YzdmZGMwZmU4ZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0ZWViZjMyNzNlZDRmMTA5YTg3OWFmZmUzY2VlMDEzLnNldENvbnRlbnQoaHRtbF84N2FhYjAxNDJjY2I0YmJkOWVhZTRjN2ZkYzBmZThmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NjhkNmY1OTEzOTI0ZTMzODBmZmFhMDU5NjNjOTk4NS5iaW5kUG9wdXAocG9wdXBfMzRlZWJmMzI3M2VkNGYxMDlhODc5YWZmZTNjZWUwMTMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTRmMTE1Mzk2YzM3NDMxZGJmZWQzYWExZWUxZDA1NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNTM3LC0xMTguNDM1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JkMDlmYmE1MzJhZTQ4ZDFiYzlmMzcwYWMwZWZlYTY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5OTMyYTdmNTE0NjRhZTJhMDkwMGE4MDdjOGUzNjRhID0gJCgnPGRpdiBpZD0iaHRtbF9mOTkzMmE3ZjUxNDY0YWUyYTA5MDBhODA3YzhlMzY0YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQwOWZiYTUzMmFlNDhkMWJjOWYzNzBhYzBlZmVhNjcuc2V0Q29udGVudChodG1sX2Y5OTMyYTdmNTE0NjRhZTJhMDkwMGE4MDdjOGUzNjRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0ZjExNTM5NmMzNzQzMWRiZmVkM2FhMWVlMWQwNTcyLmJpbmRQb3B1cChwb3B1cF9iZDA5ZmJhNTMyYWU0OGQxYmM5ZjM3MGFjMGVmZWE2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MGQyNzUyNDUwNjM0NTI0YTJhMTk0MjgwNjEyY2IxNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjI2ODgsLTExOC40NTU5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTRkM2FlMTJjYWY0NDBkMGJlOGUxNjEwM2E1ZjRmM2MgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzRmMDBlMTI0Y2ZkNGUwYmFiNWU4ODk2MGFkYjVjZTQgPSAkKCc8ZGl2IGlkPSJodG1sXzc0ZjAwZTEyNGNmZDRlMGJhYjVlODg5NjBhZGI1Y2U0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xNGQzYWUxMmNhZjQ0MGQwYmU4ZTE2MTAzYTVmNGYzYy5zZXRDb250ZW50KGh0bWxfNzRmMDBlMTI0Y2ZkNGUwYmFiNWU4ODk2MGFkYjVjZTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTBkMjc1MjQ1MDYzNDUyNGEyYTE5NDI4MDYxMmNiMTcuYmluZFBvcHVwKHBvcHVwXzE0ZDNhZTEyY2FmNDQwZDBiZThlMTYxMDNhNWY0ZjNjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1Yzg1OTVlZTY0YzQwM2I4YTEwNWFkNDU2ZDg4YjUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjY4OCwtMTE4LjQ1NTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZjUwYmRlMDg2Y2Y0ZDI5YjE2ODZlNDVmMjkyNzljOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82ODBmYTgzZDI1ODI0MTJhOGNiMDY1ZWVlNzRkZjM4NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNjgwZmE4M2QyNTgyNDEyYThjYjA2NWVlZTc0ZGYzODQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlmNTBiZGUwODZjZjRkMjliMTY4NmU0NWYyOTI3OWM4LnNldENvbnRlbnQoaHRtbF82ODBmYTgzZDI1ODI0MTJhOGNiMDY1ZWVlNzRkZjM4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNWM4NTk1ZWU2NGM0MDNiOGExMDVhZDQ1NmQ4OGI1My5iaW5kUG9wdXAocG9wdXBfOWY1MGJkZTA4NmNmNGQyOWIxNjg2ZTQ1ZjI5Mjc5YzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWIyODRhMjVmYTE4NDJkMjhiNTM1ZTY0NzA5MTcwYTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yNjg4LC0xMTguNDU1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2OTgxMDJmNzgzNDQwOTM4MDI4NDYzOGIxZTMwMmM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE3ZTE4MzVkNDg5OTQ5ZGFiNzZkYjM5YmNmMzNiZjZhID0gJCgnPGRpdiBpZD0iaHRtbF8xN2UxODM1ZDQ4OTk0OWRhYjc2ZGIzOWJjZjMzYmY2YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDY5ODEwMmY3ODM0NDA5MzgwMjg0NjM4YjFlMzAyYzYuc2V0Q29udGVudChodG1sXzE3ZTE4MzVkNDg5OTQ5ZGFiNzZkYjM5YmNmMzNiZjZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzliMjg0YTI1ZmExODQyZDI4YjUzNWU2NDcwOTE3MGEyLmJpbmRQb3B1cChwb3B1cF80Njk4MTAyZjc4MzQ0MDkzODAyODQ2MzhiMWUzMDJjNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lODg5NWRlMzM4ZGQ0MjhlOTFhNzhiOTFmYTIyMDJjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIyODgsLTExOC40NjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzNlMzI3YzZiZTQzNDI1NmE3YTRmNGUzMmY3NTViNzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjkwYWQ0OWY5ZWFhNDI5Y2FjMDJhMGRkYjVkMjQyZmMgPSAkKCc8ZGl2IGlkPSJodG1sX2I5MGFkNDlmOWVhYTQyOWNhYzAyYTBkZGI1ZDI0MmZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83M2UzMjdjNmJlNDM0MjU2YTdhNGY0ZTMyZjc1NWI3NS5zZXRDb250ZW50KGh0bWxfYjkwYWQ0OWY5ZWFhNDI5Y2FjMDJhMGRkYjVkMjQyZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTg4OTVkZTMzOGRkNDI4ZTkxYTc4YjkxZmEyMjAyY2UuYmluZFBvcHVwKHBvcHVwXzczZTMyN2M2YmU0MzQyNTZhN2E0ZjRlMzJmNzU1Yjc1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IxYTk0MTZiOWU5MTRiMDI5YmY5ZTI5ZGVkNzJhZmI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMzA3NywtMTE4LjQ2MjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDkyOWM5ZGZiNmU0YWUyYjdiMWY1YTFkODdkYWY3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNTc3Nzg1MTk3Njg0NjZkYmRiNmQ0MjQ2NDJhNTFlYyA9ICQoJzxkaXYgaWQ9Imh0bWxfZDU3Nzc4NTE5NzY4NDY2ZGJkYjZkNDI0NjQyYTUxZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk1pc3Npb248L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRkOTI5YzlkZmI2ZTRhZTJiN2IxZjVhMWQ4N2RhZjczLnNldENvbnRlbnQoaHRtbF9kNTc3Nzg1MTk3Njg0NjZkYmRiNmQ0MjQ2NDJhNTFlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMWE5NDE2YjllOTE0YjAyOWJmOWUyOWRlZDcyYWZiOS5iaW5kUG9wdXAocG9wdXBfNGQ5MjljOWRmYjZlNGFlMmI3YjFmNWExZDg3ZGFmNzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA3MjQzZGEyYzc4NDMzYTkxMGMwNzZlOWRmZWRlNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMzUzLC0xMTguNDQxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyOTQ3NmJhNTkxNjQ4NDg4NDg1MGEwNThmMGQxNDE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2NzVmMTU5YmNlNzQ3YjVhMDQ2NjVhOTQ1ODFkNzE0ID0gJCgnPGRpdiBpZD0iaHRtbF9kNjc1ZjE1OWJjZTc0N2I1YTA0NjY1YTk0NTgxZDcxNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+TWlzc2lvbjwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDI5NDc2YmE1OTE2NDg0ODg0ODUwYTA1OGYwZDE0MTQuc2V0Q29udGVudChodG1sX2Q2NzVmMTU5YmNlNzQ3YjVhMDQ2NjVhOTQ1ODFkNzE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMwNzI0M2RhMmM3ODQzM2E5MTBjMDc2ZTlkZmVkZTRjLmJpbmRQb3B1cChwb3B1cF80Mjk0NzZiYTU5MTY0ODQ4ODQ4NTBhMDU4ZjBkMTQxNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDIxNGY0MGJlNzI0Njk2OGViZTJjZGE5YTYzNTVhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIzNTYsLTExOC40Njk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTUxMTFmZjk4Y2IwNDAyN2I1NWIyY2YyYjJlNGFlNTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmY4Yjg0MzAyOGExNGQwYjlhMmU0ZTFiYzdmNDhlYTkgPSAkKCc8ZGl2IGlkPSJodG1sX2ZmOGI4NDMwMjhhMTRkMGI5YTJlNGUxYmM3ZjQ4ZWE5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5NaXNzaW9uPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNTExMWZmOThjYjA0MDI3YjU1YjJjZjJiMmU0YWU1My5zZXRDb250ZW50KGh0bWxfZmY4Yjg0MzAyOGExNGQwYjlhMmU0ZTFiYzdmNDhlYTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQyMTRmNDBiZTcyNDY5NjhlYmUyY2RhOWE2MzU1YTIuYmluZFBvcHVwKHBvcHVwX2U1MTExZmY5OGNiMDQwMjdiNTViMmNmMmIyZTRhZTUzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhiZTlmYTcwOTE2ZDRhNWI5OTRlZGFmZjc0NDAzMTMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDc2MywtMTE4LjMwMTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNGUzYzdiZDNlNTg0MTliOGRjNDIwMWEzMjQ5YzI2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jM2RhMzNkNzJlOWU0NzM4YjAzMDdhZWY2MGEwNzdlZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzNkYTMzZDcyZTllNDczOGIwMzA3YWVmNjBhMDc3ZWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI0ZTNjN2JkM2U1ODQxOWI4ZGM0MjAxYTMyNDljMjZmLnNldENvbnRlbnQoaHRtbF9jM2RhMzNkNzJlOWU0NzM4YjAzMDdhZWY2MGEwNzdlZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84YmU5ZmE3MDkxNmQ0YTViOTk0ZWRhZmY3NDQwMzEzMi5iaW5kUG9wdXAocG9wdXBfMjRlM2M3YmQzZTU4NDE5YjhkYzQyMDFhMzI0OWMyNmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGNlMzgyNjFmYjJiNGQyZjk3NTIxYzU5NGIxZWUyZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNzEyLC0xMTguMzA1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlYWExMGM0NzBkOTQ1OGM5MDg2YjlhZGFlNzkyZTQwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEzMzdlNDQyNjFmZTRjZDdhODg1OTEyNTIzNjRkZjY1ID0gJCgnPGRpdiBpZD0iaHRtbF8xMzM3ZTQ0MjYxZmU0Y2Q3YTg4NTkxMjUyMzY0ZGY2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2x5bXBpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2VhYTEwYzQ3MGQ5NDU4YzkwODZiOWFkYWU3OTJlNDAuc2V0Q29udGVudChodG1sXzEzMzdlNDQyNjFmZTRjZDdhODg1OTEyNTIzNjRkZjY1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjZTM4MjYxZmIyYjRkMmY5NzUyMWM1OTRiMWVlMmQ2LmJpbmRQb3B1cChwb3B1cF8zZWFhMTBjNDcwZDk0NThjOTA4NmI5YWRhZTc5MmU0MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMGU1N2FlNGEyMTE0ZTZhYmRiZWZhMDMwZjIyZGU1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3MDksLTExOC4yOTQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg2Y2ExZTg1NjM1NDU4YzllNGE2YjcyYmM3OTE4OTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDY1NWQ3NmExMWIxNDUwMGEwNzU0OWU1NTIxZmU2MjUgPSAkKCc8ZGl2IGlkPSJodG1sX2Q2NTVkNzZhMTFiMTQ1MDBhMDc1NDllNTUyMWZlNjI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbHltcGljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ODZjYTFlODU2MzU0NThjOWU0YTZiNzJiYzc5MTg5OS5zZXRDb250ZW50KGh0bWxfZDY1NWQ3NmExMWIxNDUwMGEwNzU0OWU1NTIxZmU2MjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjBlNTdhZTRhMjExNGU2YWJkYmVmYTAzMGYyMmRlNTguYmluZFBvcHVwKHBvcHVwXzg4NmNhMWU4NTYzNTQ1OGM5ZTRhNmI3MmJjNzkxODk5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhNjFjNmZkMmVmMzQ0NTU5ZTVjZTAwZTA3MGEwMTg3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQsLTExOC4zMDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZWZhZGI0YzJkY2I0ZmFiYjQ3ZGZlNTYxMmM3YzdkNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YTMxOWQ4MTNkZGY0MTVjOTBiNjI0MDExYWRiOWI2NCA9ICQoJzxkaXYgaWQ9Imh0bWxfNmEzMTlkODEzZGRmNDE1YzkwYjYyNDAxMWFkYjliNjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNlZmFkYjRjMmRjYjRmYWJiNDdkZmU1NjEyYzdjN2Q0LnNldENvbnRlbnQoaHRtbF82YTMxOWQ4MTNkZGY0MTVjOTBiNjI0MDExYWRiOWI2NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYTYxYzZmZDJlZjM0NDU1OWU1Y2UwMGUwNzBhMDE4Ny5iaW5kUG9wdXAocG9wdXBfM2VmYWRiNGMyZGNiNGZhYmI0N2RmZTU2MTJjN2M3ZDQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWRlZDI1MmM1NzgxNGQ2YzhjMDQzODg4Nzg1Nzk3YTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNzYzLC0xMTguMzAzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MxNDliZWM1MDA1NTQ2Zjk5ZDFkMTExNmVkYjgyNjU0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NlZDUzYmJjMjY3MTQ1MTJhMGRlYzUwYTk3Y2IxZDZjID0gJCgnPGRpdiBpZD0iaHRtbF9jZWQ1M2JiYzI2NzE0NTEyYTBkZWM1MGE5N2NiMWQ2YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2x5bXBpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzE0OWJlYzUwMDU1NDZmOTlkMWQxMTE2ZWRiODI2NTQuc2V0Q29udGVudChodG1sX2NlZDUzYmJjMjY3MTQ1MTJhMGRlYzUwYTk3Y2IxZDZjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVkZWQyNTJjNTc4MTRkNmM4YzA0Mzg4ODc4NTc5N2ExLmJpbmRQb3B1cChwb3B1cF9jMTQ5YmVjNTAwNTU0NmY5OWQxZDExMTZlZGI4MjY1NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZDVhODk2YWI2MDI0ZmFjYmE4NjUxZThlNDFmNjVlNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2MzYsLTExOC4yOTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjI0NDYxZWUwNTY4NGJkZDkyNjRlNTU0ODM4MzY2ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDQ5NmI2Nzc1OGJhNGFiYTg5NTcwOWFlMDE2M2M4ZjAgPSAkKCc8ZGl2IGlkPSJodG1sXzQ0OTZiNjc3NThiYTRhYmE4OTU3MDlhZTAxNjNjOGYwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbHltcGljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMjQ0NjFlZTA1Njg0YmRkOTI2NGU1NTQ4MzgzNjZkNy5zZXRDb250ZW50KGh0bWxfNDQ5NmI2Nzc1OGJhNGFiYTg5NTcwOWFlMDE2M2M4ZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWQ1YTg5NmFiNjAyNGZhY2JhODY1MWU4ZTQxZjY1ZTYuYmluZFBvcHVwKHBvcHVwX2YyNDQ2MWVlMDU2ODRiZGQ5MjY0ZTU1NDgzODM2NmQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4YjBlMDUwZGMzMjQyMDRhNmQwMmMzNDE2NDNkZGY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYxNywtMTE4LjMwNTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZGJiYTc3YTYxNjE0YjRiOGNmN2Q4ODE1MGExMjE2YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85M2MxYTg5NGZiNWI0YTRlYjExNDY3OTZkMTAxY2Q2NyA9ICQoJzxkaXYgaWQ9Imh0bWxfOTNjMWE4OTRmYjViNGE0ZWIxMTQ2Nzk2ZDEwMWNkNjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZkYmJhNzdhNjE2MTRiNGI4Y2Y3ZDg4MTUwYTEyMTZiLnNldENvbnRlbnQoaHRtbF85M2MxYTg5NGZiNWI0YTRlYjExNDY3OTZkMTAxY2Q2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOGIwZTA1MGRjMzI0MjA0YTZkMDJjMzQxNjQzZGRmNS5iaW5kUG9wdXAocG9wdXBfNmRiYmE3N2E2MTYxNGI0YjhjZjdkODgxNTBhMTIxNmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDVmYTI0Y2E5NmQxNDAwY2E4MDNjMWRhNzVkODA3ZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTc3LC0xMTguMjk3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0MDI0NTBiYjE2YTQyMTg4ZmE3OWJhYjdiZDgzOWI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlMDE1NzY1ZDc2NjRkMTViMTA1MjczZjFkZDM4ZjM3ID0gJCgnPGRpdiBpZD0iaHRtbF9hZTAxNTc2NWQ3NjY0ZDE1YjEwNTI3M2YxZGQzOGYzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2x5bXBpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQwMjQ1MGJiMTZhNDIxODhmYTc5YmFiN2JkODM5Yjkuc2V0Q29udGVudChodG1sX2FlMDE1NzY1ZDc2NjRkMTViMTA1MjczZjFkZDM4ZjM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q1ZmEyNGNhOTZkMTQwMGNhODAzYzFkYTc1ZDgwN2Q1LmJpbmRQb3B1cChwb3B1cF9lNDAyNDUwYmIxNmE0MjE4OGZhNzliYWI3YmQ4MzliOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTRiMjc1MmIwOTM0MWQwOWNjNDZkN2I3ODNlZWJkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0OTEsLTExOC4zMDQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzhkNDljMzQyYjYzNDk4M2E1ZWUwNWQ0MGQ1NzUwNDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWM3YTcxY2E2MTYyNDNiZmFkY2FmOWVjMTk5NjNlODkgPSAkKCc8ZGl2IGlkPSJodG1sXzljN2E3MWNhNjE2MjQzYmZhZGNhZjllYzE5OTYzZTg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbHltcGljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOGQ0OWMzNDJiNjM0OTgzYTVlZTA1ZDQwZDU3NTA0Ny5zZXRDb250ZW50KGh0bWxfOWM3YTcxY2E2MTYyNDNiZmFkY2FmOWVjMTk5NjNlODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGE0YjI3NTJiMDkzNDFkMDljYzQ2ZDdiNzgzZWViZGQuYmluZFBvcHVwKHBvcHVwXzM4ZDQ5YzM0MmI2MzQ5ODNhNWVlMDVkNDBkNTc1MDQ3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2ZjU2Yjg0ZTMyYzQzODM4NDZkMDJhZTk1NWU4OWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYzNiwtMTE4LjI5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUxOWZiM2RjODBjNDQxNDlhM2RhMTZiNDkyOWViMGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVlZWQxNjZlODA4ZjQ2ZjlhZTM4YzJhN2QxMmQ5OWM4ID0gJCgnPGRpdiBpZD0iaHRtbF81ZWVkMTY2ZTgwOGY0NmY5YWUzOGMyYTdkMTJkOTljOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2x5bXBpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE5ZmIzZGM4MGM0NDE0OWEzZGExNmI0OTI5ZWIwYWQuc2V0Q29udGVudChodG1sXzVlZWQxNjZlODA4ZjQ2ZjlhZTM4YzJhN2QxMmQ5OWM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk2ZjU2Yjg0ZTMyYzQzODM4NDZkMDJhZTk1NWU4OWRiLmJpbmRQb3B1cChwb3B1cF81MTlmYjNkYzgwYzQ0MTQ5YTNkYTE2YjQ5MjllYjBhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMmEwZTczOGFiZjI0OTEwOGU5MWU5ZjQ4MDZhMDhmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3NDUsLTExOC4yOTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzcyMzNhZmUwZjliNGI0YzljODEzZmJhYTBhZDQ2MTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmY4M2I4ODEyYjAyNDc5NWE3YmY3YzA2YjU2OTMzM2EgPSAkKCc8ZGl2IGlkPSJodG1sXzJmODNiODgxMmIwMjQ3OTVhN2JmN2MwNmI1NjkzMzNhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbHltcGljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NzIzM2FmZTBmOWI0YjRjOWM4MTNmYmFhMGFkNDYxOS5zZXRDb250ZW50KGh0bWxfMmY4M2I4ODEyYjAyNDc5NWE3YmY3YzA2YjU2OTMzM2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTJhMGU3MzhhYmYyNDkxMDhlOTFlOWY0ODA2YTA4ZjYuYmluZFBvcHVwKHBvcHVwXzc3MjMzYWZlMGY5YjRiNGM5YzgxM2ZiYWEwYWQ0NjE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmNTU4ZTUwZjNjOTQyN2RhZDljZDQxM2JjOWEzNDM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDc5OSwtMTE4LjMwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODA4OGYyNmJmYjU0YjQ4YjAxYTBkMDM1YmQ4ZTIzYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wOWNlYmE4YzljYzk0NTZlODc1M2MxZDY3NWNiYTQ1MiA9ICQoJzxkaXYgaWQ9Imh0bWxfMDljZWJhOGM5Y2M5NDU2ZTg3NTNjMWQ2NzVjYmE0NTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI4MDg4ZjI2YmZiNTRiNDhiMDFhMGQwMzViZDhlMjNjLnNldENvbnRlbnQoaHRtbF8wOWNlYmE4YzljYzk0NTZlODc1M2MxZDY3NWNiYTQ1Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZjU1OGU1MGYzYzk0MjdkYWQ5Y2Q0MTNiYzlhMzQzNC5iaW5kUG9wdXAocG9wdXBfMjgwODhmMjZiZmI1NGI0OGIwMWEwZDAzNWJkOGUyM2MpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGY5NGMwYWY0MWVlNDlkZjgzYzNjNjI3MzQ3NTg0NTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDM2LC0xMTguMzE0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwMzFkODhmYjFlOTRhOTRhNGY5YzQ2MDdiN2RlMWQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlNzQ4Zjc4MjVjZjRhZWY5MDkyODgwYjVlOTllZjA3ID0gJCgnPGRpdiBpZD0iaHRtbF83ZTc0OGY3ODI1Y2Y0YWVmOTA5Mjg4MGI1ZTk5ZWYwNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2x5bXBpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTAzMWQ4OGZiMWU5NGE5NGE0ZjljNDYwN2I3ZGUxZDIuc2V0Q29udGVudChodG1sXzdlNzQ4Zjc4MjVjZjRhZWY5MDkyODgwYjVlOTllZjA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRmOTRjMGFmNDFlZTQ5ZGY4M2MzYzYyNzM0NzU4NDU5LmJpbmRQb3B1cChwb3B1cF81MDMxZDg4ZmIxZTk0YTk0YTRmOWM0NjA3YjdkZTFkMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNGQ3YWNlMzZmYzI0YjVhODBjMzE2Mjk1NDdmYTgwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2NTIsLTExOC4yODc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGEyYTA4YTM1YWZhNDRlMWEwY2U0MDFkYWZiYzQ5NTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTlkZDdmNmY1MWQzNDE0YWIzYWI2MzY5NTkwODYxYTIgPSAkKCc8ZGl2IGlkPSJodG1sXzk5ZGQ3ZjZmNTFkMzQxNGFiM2FiNjM2OTU5MDg2MWEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbHltcGljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYTJhMDhhMzVhZmE0NGUxYTBjZTQwMWRhZmJjNDk1OS5zZXRDb250ZW50KGh0bWxfOTlkZDdmNmY1MWQzNDE0YWIzYWI2MzY5NTkwODYxYTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDRkN2FjZTM2ZmMyNGI1YTgwYzMxNjI5NTQ3ZmE4MGQuYmluZFBvcHVwKHBvcHVwX2RhMmEwOGEzNWFmYTQ0ZTFhMGNlNDAxZGFmYmM0OTU5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyYTA5YmFiYWI0MDQ5MThhY2ZmYTg3MWJhNzYwN2NkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU4NywtMTE4LjI4NjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80N2Y3MWE5YTNmYzc0YmI3Yjc0ZjAyODlmMzkyOWFkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZDhiMGQ0MDZjMWE0MDA0ODQ1MGY3Yzk3MDFiYmY3NSA9ICQoJzxkaXYgaWQ9Imh0bWxfMmQ4YjBkNDA2YzFhNDAwNDg0NTBmN2M5NzAxYmJmNzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3ZjcxYTlhM2ZjNzRiYjdiNzRmMDI4OWYzOTI5YWRmLnNldENvbnRlbnQoaHRtbF8yZDhiMGQ0MDZjMWE0MDA0ODQ1MGY3Yzk3MDFiYmY3NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMmEwOWJhYmFiNDA0OTE4YWNmZmE4NzFiYTc2MDdjZC5iaW5kUG9wdXAocG9wdXBfNDdmNzFhOWEzZmM3NGJiN2I3NGYwMjg5ZjM5MjlhZGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQwMDkyNWVhYWM1NDAzMDk3ODkyMzRmNjBkNGZiODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjU0LC0xMTguMzA3OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExMWY4ZjhkOGNjZDRmNTI4NjBkZDdkMDdmNzlmNGFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzOGIyMmUxMTc3YTQzMWY4ODIzMDRkMTBlNjE2NzcyID0gJCgnPGRpdiBpZD0iaHRtbF9mMzhiMjJlMTE3N2E0MzFmODgyMzA0ZDEwZTYxNjc3MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2x5bXBpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTExZjhmOGQ4Y2NkNGY1Mjg2MGRkN2QwN2Y3OWY0YWQuc2V0Q29udGVudChodG1sX2YzOGIyMmUxMTc3YTQzMWY4ODIzMDRkMTBlNjE2NzcyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhkMDA5MjVlYWFjNTQwMzA5Nzg5MjM0ZjYwZDRmYjgxLmJpbmRQb3B1cChwb3B1cF9hMTFmOGY4ZDhjY2Q0ZjUyODYwZGQ3ZDA3Zjc5ZjRhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNWMwNDg0YTlhNmM0MTMzOTc5YWQwMThkNWZhNjVjNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3MzgsLTExOC4zMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDU1M2E0OTkxOGZlNDExYzhkZTE2MTQ5ZGY0NWMxYmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWNkODMyYjM0YTliNGU4MmI0M2M3MmJkYTkwNmRlNWEgPSAkKCc8ZGl2IGlkPSJodG1sX2FjZDgzMmIzNGE5YjRlODJiNDNjNzJiZGE5MDZkZTVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbHltcGljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTUzYTQ5OTE4ZmU0MTFjOGRlMTYxNDlkZjQ1YzFiYS5zZXRDb250ZW50KGh0bWxfYWNkODMyYjM0YTliNGU4MmI0M2M3MmJkYTkwNmRlNWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTVjMDQ4NGE5YTZjNDEzMzk3OWFkMDE4ZDVmYTY1YzQuYmluZFBvcHVwKHBvcHVwXzA1NTNhNDk5MThmZTQxMWM4ZGUxNjE0OWRmNDVjMWJhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwY2FkY2FlNzQ2NDQ0NzRiYjQ0YjIzYmY5NThiNzZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU1OSwtMTE4LjI5NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYjM0OWMyMDRjZTE0MjQ3YTRiMTA1ZDY2ODVlMmM3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTUyOTVkZTkyNzg0MzIwYWEzMzIyNTE5MWJhM2IzYiA9ICQoJzxkaXYgaWQ9Imh0bWxfY2E1Mjk1ZGU5Mjc4NDMyMGFhMzMyMjUxOTFiYTNiM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2FiMzQ5YzIwNGNlMTQyNDdhNGIxMDVkNjY4NWUyYzc3LnNldENvbnRlbnQoaHRtbF9jYTUyOTVkZTkyNzg0MzIwYWEzMzIyNTE5MWJhM2IzYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MGNhZGNhZTc0NjQ0NDc0YmI0NGIyM2JmOTU4Yjc2YS5iaW5kUG9wdXAocG9wdXBfYWIzNDljMjA0Y2UxNDI0N2E0YjEwNWQ2Njg1ZTJjNzcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjljYjgzNDQyZDk3NDlmOTg5N2Q3NTA0MDA1MGNkNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDYzLC0xMTguMzE0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJkYzdiZGViZDg1ODQ3N2FhYzJmYmYyNDhjZTc2ZjFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkZjJjOTRiN2M3YTQ5OGQ5ZmFiYTg5OTI3Mjk1MzQyID0gJCgnPGRpdiBpZD0iaHRtbF9jZGYyYzk0YjdjN2E0OThkOWZhYmE4OTkyNzI5NTM0MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+T2x5bXBpYzwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmRjN2JkZWJkODU4NDc3YWFjMmZiZjI0OGNlNzZmMWMuc2V0Q29udGVudChodG1sX2NkZjJjOTRiN2M3YTQ5OGQ5ZmFiYTg5OTI3Mjk1MzQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y5Y2I4MzQ0MmQ5NzQ5Zjk4OTdkNzUwNDAwNTBjZDRjLmJpbmRQb3B1cChwb3B1cF8yZGM3YmRlYmQ4NTg0NzdhYWMyZmJmMjQ4Y2U3NmYxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NDdjZjI4MzU1OGE0MmQ4YmM1NWNkYjM0YjNlZjVlYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzODIsLTExOC4yODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMmMzMTZlZDQ3OGU0YzM2YjY5MTM0Yzc3NzM2ZmYwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MGQzY2Y1NDdiNjE0MGY2OTBhYTI4YjM5ZDA5OTA5ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfOTBkM2NmNTQ3YjYxNDBmNjkwYWEyOGIzOWQwOTkwOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyYzMxNmVkNDc4ZTRjMzZiNjkxMzRjNzc3MzZmZjBlLnNldENvbnRlbnQoaHRtbF85MGQzY2Y1NDdiNjE0MGY2OTBhYTI4YjM5ZDA5OTA5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NDdjZjI4MzU1OGE0MmQ4YmM1NWNkYjM0YjNlZjVlYy5iaW5kUG9wdXAocG9wdXBfYzJjMzE2ZWQ0NzhlNGMzNmI2OTEzNGM3NzczNmZmMGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjA2NzdjMDdlMDIzNDRlZDhiMTMxZGM4NzNiYzEwNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xODM3LC0xMTguNTg0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyZTU2NGUwNjgzMTRmZjJiYjNlYzljMTg2MjY2ODI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU4M2ViNjYxMzZmNDQ2MmQ4ZGRjZTJhNWIzNTZhZjQ5ID0gJCgnPGRpdiBpZD0iaHRtbF81ODNlYjY2MTM2ZjQ0NjJkOGRkY2UyYTViMzU2YWY0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG9wYW5nYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTJlNTY0ZTA2ODMxNGZmMmJiM2VjOWMxODYyNjY4Mjkuc2V0Q29udGVudChodG1sXzU4M2ViNjYxMzZmNDQ2MmQ4ZGRjZTJhNWIzNTZhZjQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYwNjc3YzA3ZTAyMzQ0ZWQ4YjEzMWRjODczYmMxMDRmLmJpbmRQb3B1cChwb3B1cF85MmU1NjRlMDY4MzE0ZmYyYmIzZWM5YzE4NjI2NjgyOSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjNlNDI4MDZjYjc0MWM3YTRhNmIwNWExYzY3Y2I0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2MzYsLTExOC4yOTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzU0ZWQxZDI0MDQ4NGRjNWI3YjI3ZWFhZWE5OWY4NjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzkzYzdjN2ZiZDVjNDE2YmEzNGQ2MGRjNGQ4OWFjMjUgPSAkKCc8ZGl2IGlkPSJodG1sX2M5M2M3YzdmYmQ1YzQxNmJhMzRkNjBkYzRkODlhYzI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5PbHltcGljPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTRlZDFkMjQwNDg0ZGM1YjdiMjdlYWFlYTk5Zjg2MC5zZXRDb250ZW50KGh0bWxfYzkzYzdjN2ZiZDVjNDE2YmEzNGQ2MGRjNGQ4OWFjMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTYzZTQyODA2Y2I3NDFjN2E0YTZiMDVhMWM2N2NiNGMuYmluZFBvcHVwKHBvcHVwXzM1NGVkMWQyNDA0ODRkYzViN2IyN2VhYWVhOTlmODYwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmMTBlNTllNWJjZjQ4ODE4OTBmNmE0OGM5OGFiOTRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU0NSwtMTE4LjI5MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zY2Y4MjUyOGRmZjk0NmM4Yjk4MWU0MzQzZWZlNWQ1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTI0MjEwYmI1MTI0YjExYWFiNDFlYWI1NTM2NDBmNyA9ICQoJzxkaXYgaWQ9Imh0bWxfODUyNDIxMGJiNTEyNGIxMWFhYjQxZWFiNTUzNjQwZjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPk9seW1waWM8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNjZjgyNTI4ZGZmOTQ2YzhiOTgxZTQzNDNlZmU1ZDUwLnNldENvbnRlbnQoaHRtbF84NTI0MjEwYmI1MTI0YjExYWFiNDFlYWI1NTM2NDBmNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZjEwZTU5ZTViY2Y0ODgxODkwZjZhNDhjOThhYjk0YS5iaW5kUG9wdXAocG9wdXBfM2NmODI1MjhkZmY5NDZjOGI5ODFlNDM0M2VmZTVkNTApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2E2YmQ2MDg1MTNhNDk0Y2JkYzc2MWZhYmVlNGYwNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4xNjgzLC0xMTguNjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5YTE0NWY4YzU4NzRjZDA4NjA1NjA1NzYxMTcyNmJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmNGM5ODNhYzcxMDQ4ODViNWU1OGQxMjhkMjI4MTJjID0gJCgnPGRpdiBpZD0iaHRtbF9mZjRjOTgzYWM3MTA0ODg1YjVlNThkMTI4ZDIyODEyYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG9wYW5nYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzlhMTQ1ZjhjNTg3NGNkMDg2MDU2MDU3NjExNzI2YmQuc2V0Q29udGVudChodG1sX2ZmNGM5ODNhYzcxMDQ4ODViNWU1OGQxMjhkMjI4MTJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NhNmJkNjA4NTEzYTQ5NGNiZGM3NjFmYWJlZTRmMDRlLmJpbmRQb3B1cChwb3B1cF83OWExNDVmOGM1ODc0Y2QwODYwNTYwNTc2MTE3MjZiZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NTcxNGIwZTIxMDc0Yzk3OWQ2OTIwNjgyOGRhZmQxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIwODQsLTExOC41NzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YmZhMGZiNmExN2Y0OTU5YjU3Y2Q4YzQxMDI4OGUzZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWE3ZDk0OGZjNzc0MDgwOTE4NmFhOWQ2MDM4MmY1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWFhN2Q5NDhmYzc3NDA4MDkxODZhYTlkNjAzODJmNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRvcGFuZ2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzViZmEwZmI2YTE3ZjQ5NTliNTdjZDhjNDEwMjg4ZTNmLnNldENvbnRlbnQoaHRtbF85YWE3ZDk0OGZjNzc0MDgwOTE4NmFhOWQ2MDM4MmY1YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NTcxNGIwZTIxMDc0Yzk3OWQ2OTIwNjgyOGRhZmQxMi5iaW5kUG9wdXAocG9wdXBfNWJmYTBmYjZhMTdmNDk1OWI1N2NkOGM0MTAyODhlM2YpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM2ZGU5ZjcwOWU4NGFjMmFiOWM0NTAxZGU1MDE5YWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMTE5LC0xMTguNjAxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkYzcxYzdhZTg1MTQyNjA5Mjg3N2IyZjY1ZmVhOTk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4NWI5MWFkNzY4OTQ1Nzc4Njc1OWZkMzAzYzMxYmFjID0gJCgnPGRpdiBpZD0iaHRtbF8zODViOTFhZDc2ODk0NTc3ODY3NTlmZDMwM2MzMWJhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG9wYW5nYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWRjNzFjN2FlODUxNDI2MDkyODc3YjJmNjVmZWE5OTkuc2V0Q29udGVudChodG1sXzM4NWI5MWFkNzY4OTQ1Nzc4Njc1OWZkMzAzYzMxYmFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEzNmRlOWY3MDllODRhYzJhYjljNDUwMWRlNTAxOWFiLmJpbmRQb3B1cChwb3B1cF8xZGM3MWM3YWU4NTE0MjYwOTI4NzdiMmY2NWZlYTk5OSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMjllMWU0ZGM2OTg0ZWNmYTg0OTQzZTkzM2Y2ZmEzZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIwMjksLTExOC41ODg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzQzZjMxZWFmZjMxNDg3ZWJhNGFmZjQ1MDNiYTY3YzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmJiZWNhOWFmZDAyNGRmMWIxODNlNGIxZWY3MmM3ZDIgPSAkKCc8ZGl2IGlkPSJodG1sXzZiYmVjYTlhZmQwMjRkZjFiMTgzZTRiMWVmNzJjN2QyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub3BhbmdhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NDNmMzFlYWZmMzE0ODdlYmE0YWZmNDUwM2JhNjdjNC5zZXRDb250ZW50KGh0bWxfNmJiZWNhOWFmZDAyNGRmMWIxODNlNGIxZWY3MmM3ZDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjI5ZTFlNGRjNjk4NGVjZmE4NDk0M2U5MzNmNmZhM2QuYmluZFBvcHVwKHBvcHVwXzc0M2YzMWVhZmYzMTQ4N2ViYTRhZmY0NTAzYmE2N2M0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlZTMzOTQ1MjIwODQ1YjFiZjAzZDYxZDdkY2Y1M2Y5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjEwMywtMTE4LjYwMTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMGI2N2UyNTM3ZTU0M2MyOTRmMmY3ODE2OWVlMTdmYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kODZkZjgwZDQ0NzU0ZWFkOWVmYjk3YTg1Y2U1Y2E4OCA9ICQoJzxkaXYgaWQ9Imh0bWxfZDg2ZGY4MGQ0NDc1NGVhZDllZmI5N2E4NWNlNWNhODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRvcGFuZ2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIwYjY3ZTI1MzdlNTQzYzI5NGYyZjc4MTY5ZWUxN2ZiLnNldENvbnRlbnQoaHRtbF9kODZkZjgwZDQ0NzU0ZWFkOWVmYjk3YTg1Y2U1Y2E4OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZWUzMzk0NTIyMDg0NWIxYmYwM2Q2MWQ3ZGNmNTNmOS5iaW5kUG9wdXAocG9wdXBfMjBiNjdlMjUzN2U1NDNjMjk0ZjJmNzgxNjllZTE3ZmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2M0NWQ4ZWYxZjM1NDQ2N2FhNWYyOGJiMDA2M2M0MjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMDQ3LC0xMTguNTY4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4ZjNkMjQ0ZGM4YzRkMGI5ODk2ZGIzMDE1MDgwNDY2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgxODcxNTAyODAyZDRjMWE4OWZkNmQ2NGZmYzg3YTU4ID0gJCgnPGRpdiBpZD0iaHRtbF84MTg3MTUwMjgwMmQ0YzFhODlmZDZkNjRmZmM4N2E1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG9wYW5nYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzhmM2QyNDRkYzhjNGQwYjk4OTZkYjMwMTUwODA0NjYuc2V0Q29udGVudChodG1sXzgxODcxNTAyODAyZDRjMWE4OWZkNmQ2NGZmYzg3YTU4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNjNDVkOGVmMWYzNTQ0NjdhYTVmMjhiYjAwNjNjNDI2LmJpbmRQb3B1cChwb3B1cF9jOGYzZDI0NGRjOGM0ZDBiOTg5NmRiMzAxNTA4MDQ2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iM2RiOWRhNTcyYjg0ZjAyOGM1NTAxZjZmM2E1Y2Y0OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjE5OTIsLTExOC41ODczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZmNmZkMDgyODMxNDBjZjk2ZTQxYjgxMWExNWQwZTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTZmMjgxYzAzMDE2NDQ3OGExMjQ3OWNjYTAyODUzN2YgPSAkKCc8ZGl2IGlkPSJodG1sXzk2ZjI4MWMwMzAxNjQ0NzhhMTI0NzljY2EwMjg1MzdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub3BhbmdhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmY2ZmQwODI4MzE0MGNmOTZlNDFiODExYTE1ZDBlMS5zZXRDb250ZW50KGh0bWxfOTZmMjgxYzAzMDE2NDQ3OGExMjQ3OWNjYTAyODUzN2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjNkYjlkYTU3MmI4NGYwMjhjNTUwMWY2ZjNhNWNmNDguYmluZFBvcHVwKHBvcHVwXzJmZjZmZDA4MjgzMTQwY2Y5NmU0MWI4MTFhMTVkMGUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5ZGQ1ZDBlNGIzMjQzZmY5ZmNlMWFlMmM3ZDY0ODRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMjEwNCwtMTE4LjYzNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MDM0MDc5MWMwYzI0M2U0ODNkN2Y2MDUyNGJhZTVjMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTRjY2Y3NGQyNmI0YjFhYWVkNGYxODhjMWJiMjM3OCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjU0Y2NmNzRkMjZiNGIxYWFlZDRmMTg4YzFiYjIzNzgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlRvcGFuZ2E8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcwMzQwNzkxYzBjMjQzZTQ4M2Q3ZjYwNTI0YmFlNWMxLnNldENvbnRlbnQoaHRtbF9iNTRjY2Y3NGQyNmI0YjFhYWVkNGYxODhjMWJiMjM3OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OWRkNWQwZTRiMzI0M2ZmOWZjZTFhZTJjN2Q2NDg0Zi5iaW5kUG9wdXAocG9wdXBfNzAzNDA3OTFjMGMyNDNlNDgzZDdmNjA1MjRiYWU1YzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWNlNzQxZjFlMDhlNDBiZmFhMGY3Y2IzMWYwYmVjYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4yMTI5LC0xMTguNjA4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzZGJkZTAwNGEyZjQzNjhiOTY1NzcwNDBmZGViYWM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FkY2ViNDA0NWYyODRlNWJiOTYzODgxMmEwZTdhOWM1ID0gJCgnPGRpdiBpZD0iaHRtbF9hZGNlYjQwNDVmMjg0ZTViYjk2Mzg4MTJhMGU3YTljNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+VG9wYW5nYTwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNkYmRlMDA0YTJmNDM2OGI5NjU3NzA0MGZkZWJhYzQuc2V0Q29udGVudChodG1sX2FkY2ViNDA0NWYyODRlNWJiOTYzODgxMmEwZTdhOWM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzljZTc0MWYxZTA4ZTQwYmZhYTBmN2NiMzFmMGJlY2M4LmJpbmRQb3B1cChwb3B1cF9lM2RiZGUwMDRhMmY0MzY4Yjk2NTc3MDQwZmRlYmFjNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYjIxODM2NjFjMjc0ZWViOTBjYjlkYzc4ODNjMjQzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjIxMzYsLTExOC41OTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGI3MDUzYWVjOTlkNDkyMDhiOTNkNGQzZjdmZjc4MGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWJmODc0ZjFmZTJjNDk0NmIyNDA3ZWFjOGU3NWUxNmQgPSAkKCc8ZGl2IGlkPSJodG1sXzFiZjg3NGYxZmUyYzQ5NDZiMjQwN2VhYzhlNzVlMTZkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Ub3BhbmdhPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYjcwNTNhZWM5OWQ0OTIwOGI5M2Q0ZDNmN2ZmNzgwYy5zZXRDb250ZW50KGh0bWxfMWJmODc0ZjFmZTJjNDk0NmIyNDA3ZWFjOGU3NWUxNmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmIyMTgzNjYxYzI3NGVlYjkwY2I5ZGM3ODgzYzI0MzIuYmluZFBvcHVwKHBvcHVwX2RiNzA1M2FlYzk5ZDQ5MjA4YjkzZDRkM2Y3ZmY3ODBjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc1YWZiMjA0MjgyMjQ5ZDdhNDIyYzc3NzlhYjZjNDI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQyOCwtMTE4LjI1MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNmE5OTE5YTQxZDg0YzAwODdlODY5YjlmYmQ5NTg5MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjVkZmE3ZTMxOWQ0MDllOGU2NWVhMTI0N2FlYTNiNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZTY1ZGZhN2UzMTlkNDA5ZThlNjVlYTEyNDdhZWEzYjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2YTk5MTlhNDFkODRjMDA4N2U4NjliOWZiZDk1ODkyLnNldENvbnRlbnQoaHRtbF9lNjVkZmE3ZTMxOWQ0MDllOGU2NWVhMTI0N2FlYTNiNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NWFmYjIwNDI4MjI0OWQ3YTQyMmM3Nzc5YWI2YzQyOS5iaW5kUG9wdXAocG9wdXBfYzZhOTkxOWE0MWQ4NGMwMDg3ZTg2OWI5ZmJkOTU4OTIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ5ZjljMWVhMzY0NDA4OTgzZTgxMDY2ODZmZjhiOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDU0LC0xMTguMjQyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzViZTFjYTg1Zjk5ZDRkNGFhYTk5ZGRlMjk5OTUyMTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E4MGM4NWNmYjQwYzQxYjhiODUyYjJjOTExNmVhNmRiID0gJCgnPGRpdiBpZD0iaHRtbF9hODBjODVjZmI0MGM0MWI4Yjg1MmIyYzkxMTZlYTZkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWJlMWNhODVmOTlkNGQ0YWFhOTlkZGUyOTk5NTIxOTQuc2V0Q29udGVudChodG1sX2E4MGM4NWNmYjQwYzQxYjhiODUyYjJjOTExNmVhNmRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ0OWY5YzFlYTM2NDQwODk4M2U4MTA2Njg2ZmY4YjllLmJpbmRQb3B1cChwb3B1cF81YmUxY2E4NWY5OWQ0ZDRhYWE5OWRkZTI5OTk1MjE5NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OWViNzkxMTc5Nzc0YThhYTdiZTQwMzkxN2EzNmViYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NDksLTExOC4yNDU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmZmYWQ2ZWNhYjJmNGQzZDkxYWQyZWI3OTFhNWJiZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTVjMTc1MDZmZDBkNGE3ZGFlYjMzZDAyNTc1MTJmZWQgPSAkKCc8ZGl2IGlkPSJodG1sXzE1YzE3NTA2ZmQwZDRhN2RhZWIzM2QwMjU3NTEyZmVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZmZhZDZlY2FiMmY0ZDNkOTFhZDJlYjc5MWE1YmJmNC5zZXRDb250ZW50KGh0bWxfMTVjMTc1MDZmZDBkNGE3ZGFlYjMzZDAyNTc1MTJmZWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTllYjc5MTE3OTc3NGE4YWE3YmU0MDM5MTdhMzZlYmEuYmluZFBvcHVwKHBvcHVwXzJmZmFkNmVjYWIyZjRkM2Q5MWFkMmViNzkxYTViYmY0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlZDViNWUyYWQ5ZDQyZjdiZTNjZjg1ZWU2OTBiMDFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ3MywtMTE4LjI1NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDIyNWY4MTM4Y2M0YmQzOTVlNjdjNTIxMmM2ZWQwYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjVmZmQ3M2QzYTg0N2U3OWE3YmFjZjkxYTI3MzA2MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzY1ZmZkNzNkM2E4NDdlNzlhN2JhY2Y5MWEyNzMwNjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwMjI1ZjgxMzhjYzRiZDM5NWU2N2M1MjEyYzZlZDBjLnNldENvbnRlbnQoaHRtbF9jNjVmZmQ3M2QzYTg0N2U3OWE3YmFjZjkxYTI3MzA2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZWQ1YjVlMmFkOWQ0MmY3YmUzY2Y4NWVlNjkwYjAxZS5iaW5kUG9wdXAocG9wdXBfYTAyMjVmODEzOGNjNGJkMzk1ZTY3YzUyMTJjNmVkMGMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDRlMTFkNjczMzZjNGU5MGE0ZGY3NDI0N2MxZTBlZDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzE3LC0xMTguMjYyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M4NjM2YTliMGIzMDQ3YjQ4ZTNlMDEwN2NjMTliZjQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmODI4YTZkNjYyNDQ4YWY5YjkwNmZlNmMyN2VlYmZhID0gJCgnPGRpdiBpZD0iaHRtbF9mZjgyOGE2ZDY2MjQ0OGFmOWI5MDZmZTZjMjdlZWJmYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzg2MzZhOWIwYjMwNDdiNDhlM2UwMTA3Y2MxOWJmNDMuc2V0Q29udGVudChodG1sX2ZmODI4YTZkNjYyNDQ4YWY5YjkwNmZlNmMyN2VlYmZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA0ZTExZDY3MzM2YzRlOTBhNGRmNzQyNDdjMWUwZWQ0LmJpbmRQb3B1cChwb3B1cF9jODYzNmE5YjBiMzA0N2I0OGUzZTAxMDdjYzE5YmY0Myk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZTY4NjU4YTllN2E0ODJiYTA0MzcxZWJkZjU3YmM5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NjYsLTExOC4yNTMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTA1ODY2ZDU2ZjYwNDViOGE2NTdiN2EzMzFlOGM0N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjI4NjQxYTYxMzg0NDY0M2JhNzg4NzAzZTkxNmQ1OGYgPSAkKCc8ZGl2IGlkPSJodG1sXzIyODY0MWE2MTM4NDQ2NDNiYTc4ODcwM2U5MTZkNThmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMDU4NjZkNTZmNjA0NWI4YTY1N2I3YTMzMWU4YzQ3ZS5zZXRDb250ZW50KGh0bWxfMjI4NjQxYTYxMzg0NDY0M2JhNzg4NzAzZTkxNmQ1OGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWU2ODY1OGE5ZTdhNDgyYmEwNDM3MWViZGY1N2JjOTkuYmluZFBvcHVwKHBvcHVwX2UwNTg2NmQ1NmY2MDQ1YjhhNjU3YjdhMzMxZThjNDdlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdjOGU0MjFmNTBlMjQ3M2Y4MjFlYmIwNjBiMTY0MjdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQxNywtMTE4LjI0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZmIzNGVlNmU2Mzk0NzVhYWM2Y2M5MmIzZDZjNzYyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MDIyYmQxODY4ZjQ0NTMyYWE4ZThmMzY2YzgwZDU0NiA9ICQoJzxkaXYgaWQ9Imh0bWxfNzAyMmJkMTg2OGY0NDUzMmFhOGU4ZjM2NmM4MGQ1NDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRmYjM0ZWU2ZTYzOTQ3NWFhYzZjYzkyYjNkNmM3NjIxLnNldENvbnRlbnQoaHRtbF83MDIyYmQxODY4ZjQ0NTMyYWE4ZThmMzY2YzgwZDU0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YzhlNDIxZjUwZTI0NzNmODIxZWJiMDYwYjE2NDI3Yi5iaW5kUG9wdXAocG9wdXBfNGZiMzRlZTZlNjM5NDc1YWFjNmNjOTJiM2Q2Yzc2MjEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTAwMWEwODNmMDM1NGU4ZDk2ZmUxZDhlZDgyMDYzZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDE1LC0xMTguMjY1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmZDE1ZDJjZDk0YTQwMDI5YjQ0MWZmYTI2Y2FlNTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU3ZWZlMzQzOWRmYjRjMGJhNDllZDg5ZGNkNzVlYWU1ID0gJCgnPGRpdiBpZD0iaHRtbF81N2VmZTM0MzlkZmI0YzBiYTQ5ZWQ4OWRjZDc1ZWFlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZkMTVkMmNkOTRhNDAwMjliNDQxZmZhMjZjYWU1OTQuc2V0Q29udGVudChodG1sXzU3ZWZlMzQzOWRmYjRjMGJhNDllZDg5ZGNkNzVlYWU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwMDFhMDgzZjAzNTRlOGQ5NmZlMWQ4ZWQ4MjA2M2Q4LmJpbmRQb3B1cChwb3B1cF8wZmQxNWQyY2Q5NGE0MDAyOWI0NDFmZmEyNmNhZTU5NCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ODUxNWU5NzE3NzM0NmQ0YWNmZTM3NzFlNjE4Y2M0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0ODcsLTExOC4yNTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWRjMTQ3MDJkNGZkNGUxZmJiNmJlNzZlMTE3NDQ3M2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZjZmMxZTQ1YzA2NDg2MTgwYWI4ZWZlNGRlYWMzMGIgPSAkKCc8ZGl2IGlkPSJodG1sXzhmY2ZjMWU0NWMwNjQ4NjE4MGFiOGVmZTRkZWFjMzBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZGMxNDcwMmQ0ZmQ0ZTFmYmI2YmU3NmUxMTc0NDczZS5zZXRDb250ZW50KGh0bWxfOGZjZmMxZTQ1YzA2NDg2MTgwYWI4ZWZlNGRlYWMzMGIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDg1MTVlOTcxNzczNDZkNGFjZmUzNzcxZTYxOGNjNDkuYmluZFBvcHVwKHBvcHVwX2FkYzE0NzAyZDRmZDRlMWZiYjZiZTc2ZTExNzQ0NzNlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiZDk1ZTI5OGRkZjQ0YTBhNTM5N2M5MzIwNzJiZWM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDcxMywtMTE4LjIyOTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YmJlMTkyN2UxN2I0NWUxOTBjMDkxNWE0YTk2YjYxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZmZmOGFlZDNjNzE0ZDFlOThkOTExN2QwOGUwMTAwOCA9ICQoJzxkaXYgaWQ9Imh0bWxfZWZmZjhhZWQzYzcxNGQxZTk4ZDkxMTdkMDhlMDEwMDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiYmUxOTI3ZTE3YjQ1ZTE5MGMwOTE1YTRhOTZiNjE2LnNldENvbnRlbnQoaHRtbF9lZmZmOGFlZDNjNzE0ZDFlOThkOTExN2QwOGUwMTAwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYmQ5NWUyOThkZGY0NGEwYTUzOTdjOTMyMDcyYmVjNS5iaW5kUG9wdXAocG9wdXBfOGJiZTE5MjdlMTdiNDVlMTkwYzA5MTVhNGE5NmI2MTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzA3NGU0MjI5MWJkNDgzZWI0ZTRlNzRkNTE0YzZkN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzc0LC0xMTguMjQwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0OGY3ODAyM2ZjYjRhMTM5MzYzZDJlMWE5Mzc2MGUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4OGU1NWEyMzg3ZDQ5ZTM4MTExZTczMWVhYmQ1N2NiID0gJCgnPGRpdiBpZD0iaHRtbF8xODhlNTVhMjM4N2Q0OWUzODExMWU3MzFlYWJkNTdjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODQ4Zjc4MDIzZmNiNGExMzkzNjNkMmUxYTkzNzYwZTAuc2V0Q29udGVudChodG1sXzE4OGU1NWEyMzg3ZDQ5ZTM4MTExZTczMWVhYmQ1N2NiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwNzRlNDIyOTFiZDQ4M2ViNGU0ZTc0ZDUxNGM2ZDdhLmJpbmRQb3B1cChwb3B1cF84NDhmNzgwMjNmY2I0YTEzOTM2M2QyZTFhOTM3NjBlMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MzI2YTQ3NmZmYjk0OTNhOGM2ODgwOWYzMGJiYTUzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NjEsLTExOC4yNDYxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmJlYjRiOGYyNmU0NDQwNjgxOGJhZjI4NWI4MDU4ZmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTYyMzY4MDNjYTQ0NDdiNDkzY2MxN2YxOTAxNDQzNTcgPSAkKCc8ZGl2IGlkPSJodG1sXzU2MjM2ODAzY2E0NDQ3YjQ5M2NjMTdmMTkwMTQ0MzU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYmViNGI4ZjI2ZTQ0NDA2ODE4YmFmMjg1YjgwNThmYy5zZXRDb250ZW50KGh0bWxfNTYyMzY4MDNjYTQ0NDdiNDkzY2MxN2YxOTAxNDQzNTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTMyNmE0NzZmZmI5NDkzYThjNjg4MDlmMzBiYmE1MzQuYmluZFBvcHVwKHBvcHVwXzJiZWI0YjhmMjZlNDQ0MDY4MThiYWYyODViODA1OGZjKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjZTc2MmI0N2NjNjRhZDRiOGQzMGUzOWUxNzZmZTZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQzNywtMTE4LjI0NTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zM2RiZjZmNWMzNmY0NmVlOWVjZjk5MTU0OWQzNzc1NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMzA0Y2Y4NzY1Y2Q0YWNjOTk4ZmViZTMzOWQzMmYzMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMjMwNGNmODc2NWNkNGFjYzk5OGZlYmUzMzlkMzJmMzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMzZGJmNmY1YzM2ZjQ2ZWU5ZWNmOTkxNTQ5ZDM3NzU2LnNldENvbnRlbnQoaHRtbF8yMzA0Y2Y4NzY1Y2Q0YWNjOTk4ZmViZTMzOWQzMmYzMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Y2U3NjJiNDdjYzY0YWQ0YjhkMzBlMzllMTc2ZmU2Zi5iaW5kUG9wdXAocG9wdXBfMzNkYmY2ZjVjMzZmNDZlZTllY2Y5OTE1NDlkMzc3NTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2YxNWYwNTBhZTllNGNlMWI3NTgwNWVhYjFmZmZkZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDQ5LC0xMTguMjQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI4MTRmODY2ZDExZTQ5Y2M5M2QwNmRlMmRjMzU4NzU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2NTNlMjIzY2JjYzRjMWY4MDY3ZGQ5NzBiMmQ3ODk0ID0gJCgnPGRpdiBpZD0iaHRtbF9iNjUzZTIyM2NiY2M0YzFmODA2N2RkOTcwYjJkNzg5NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjgxNGY4NjZkMTFlNDljYzkzZDA2ZGUyZGMzNTg3NTUuc2V0Q29udGVudChodG1sX2I2NTNlMjIzY2JjYzRjMWY4MDY3ZGQ5NzBiMmQ3ODk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdmMTVmMDUwYWU5ZTRjZTFiNzU4MDVlYWIxZmZmZGZlLmJpbmRQb3B1cChwb3B1cF8yODE0Zjg2NmQxMWU0OWNjOTNkMDZkZTJkYzM1ODc1NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNGQ5ZmQ4OGU4NmU0MjE1ODExYmY5ZTEwZWFhMTJmZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NzgsLTExOC4yNDg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjQxM2ZmNjUxNjlkNGMwMDk4MjgxMzRhZWNhMGQwNDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWJlNjQ4YTRkOTEwNGQxNmIzMTBjMjFlMTJjZjNiYzEgPSAkKCc8ZGl2IGlkPSJodG1sX2ViZTY0OGE0ZDkxMDRkMTZiMzEwYzIxZTEyY2YzYmMxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNDEzZmY2NTE2OWQ0YzAwOTgyODEzNGFlY2EwZDA0Mi5zZXRDb250ZW50KGh0bWxfZWJlNjQ4YTRkOTEwNGQxNmIzMTBjMjFlMTJjZjNiYzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTRkOWZkODhlODZlNDIxNTgxMWJmOWUxMGVhYTEyZmUuYmluZFBvcHVwKHBvcHVwXzI0MTNmZjY1MTY5ZDRjMDA5ODI4MTM0YWVjYTBkMDQyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzZWJjMjk1ZjMyMzQxNGI4ZDQ1NGE5OTMzMTQzNWIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQwOSwtMTE4LjI2MDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjE5YTQ1MmFiMDU0YmM4YWQ3YWFkMmJjMzMzMmY2NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOGE3ZDg1YWY2ZjI0NDViYmVlODUxMmYzZTY1YzA5NSA9ICQoJzxkaXYgaWQ9Imh0bWxfYThhN2Q4NWFmNmYyNDQ1YmJlZTg1MTJmM2U2NWMwOTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RiMTlhNDUyYWIwNTRiYzhhZDdhYWQyYmMzMzMyZjY0LnNldENvbnRlbnQoaHRtbF9hOGE3ZDg1YWY2ZjI0NDViYmVlODUxMmYzZTY1YzA5NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82M2ViYzI5NWYzMjM0MTRiOGQ0NTRhOTkzMzE0MzViMy5iaW5kUG9wdXAocG9wdXBfZGIxOWE0NTJhYjA1NGJjOGFkN2FhZDJiYzMzMzJmNjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTdhM2Q5MWVkNDI1NDQ2MzgzZjViOGZkY2Q5MTg0MzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjMxLC0xMTguMjQyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkZjFiYjZlYWZkYTQ3Y2Y5YTRiNjI0ODE1M2RiOTUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkNDJjNzNjMjk4NjQ0ZGZhZjI1ZGY5NDQ1Y2Y3YzYzID0gJCgnPGRpdiBpZD0iaHRtbF9kZDQyYzczYzI5ODY0NGRmYWYyNWRmOTQ0NWNmN2M2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWRmMWJiNmVhZmRhNDdjZjlhNGI2MjQ4MTUzZGI5NTIuc2V0Q29udGVudChodG1sX2RkNDJjNzNjMjk4NjQ0ZGZhZjI1ZGY5NDQ1Y2Y3YzYzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk3YTNkOTFlZDQyNTQ0NjM4M2Y1YjhmZGNkOTE4NDMwLmJpbmRQb3B1cChwb3B1cF9lZGYxYmI2ZWFmZGE0N2NmOWE0YjYyNDgxNTNkYjk1Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NDExYzY3MzQ3ZjM0MDRkYjk2NTNkNWJmODcyZTUzYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0OCwtMTE4LjI1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81OGMxMmMwZmQ5ZDI0NDc3YjRhNjRkZTc5M2UxNTM5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kOWM2MzJkMzdkZDg0ZGQxYjUyN2YxZmQxZDg5NDdmZiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDljNjMyZDM3ZGQ4NGRkMWI1MjdmMWZkMWQ4OTQ3ZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4YzEyYzBmZDlkMjQ0NzdiNGE2NGRlNzkzZTE1Mzk4LnNldENvbnRlbnQoaHRtbF9kOWM2MzJkMzdkZDg0ZGQxYjUyN2YxZmQxZDg5NDdmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NDExYzY3MzQ3ZjM0MDRkYjk2NTNkNWJmODcyZTUzYS5iaW5kUG9wdXAocG9wdXBfNThjMTJjMGZkOWQyNDQ3N2I0YTY0ZGU3OTNlMTUzOTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmMzN2VkYzExMmYxNDFiMDkwMGUxOGQ4MDM5MTNhYjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTE1LC0xMTguMjQyNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxYTQ5ZGQ4MGVhZDQ5Mzg5NTU2YmE2ODE2NDFhZDU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiMmVjZDQzMmU1NDRmMmM5ODgyOTA1NTIxN2ZkODc4ID0gJCgnPGRpdiBpZD0iaHRtbF8wYjJlY2Q0MzJlNTQ0ZjJjOTg4MjkwNTUyMTdmZDg3OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjFhNDlkZDgwZWFkNDkzODk1NTZiYTY4MTY0MWFkNTguc2V0Q29udGVudChodG1sXzBiMmVjZDQzMmU1NDRmMmM5ODgyOTA1NTIxN2ZkODc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZjMzdlZGMxMTJmMTQxYjA5MDBlMThkODAzOTEzYWIxLmJpbmRQb3B1cChwb3B1cF9mMWE0OWRkODBlYWQ0OTM4OTU1NmJhNjgxNjQxYWQ1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MThhMzgxZTAwODU0NmYxYmZiMjZjY2VlZjZiMjQ0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MDIsLTExOC4yNjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODkwYmJiYzMzMTEwNDgxY2JlNmFkNzZkNTI5YmM4YjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWZiYTExMWEyM2VkNDFkZjg5ZWYzY2U4MmFjYWFiYTMgPSAkKCc8ZGl2IGlkPSJodG1sX2FmYmExMTFhMjNlZDQxZGY4OWVmM2NlODJhY2FhYmEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84OTBiYmJjMzMxMTA0ODFjYmU2YWQ3NmQ1MjliYzhiMC5zZXRDb250ZW50KGh0bWxfYWZiYTExMWEyM2VkNDFkZjg5ZWYzY2U4MmFjYWFiYTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDE4YTM4MWUwMDg1NDZmMWJmYjI2Y2NlZWY2YjI0NGUuYmluZFBvcHVwKHBvcHVwXzg5MGJiYmMzMzExMDQ4MWNiZTZhZDc2ZDUyOWJjOGIwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmNGI1YWZlOGY4MzQwMTFhNjY1OTA0NGU1MmIxNzg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQyMywtMTE4LjI0NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzI3MjNiZGM3YmQ0YTIzYmFmODI5ZjYyYjNiM2JlOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWFjNjg3MWIyMmM0M2QzOTkxYzNjM2M0NDU2ZGQwYiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjVhYzY4NzFiMjJjNDNkMzk5MWMzYzNjNDQ1NmRkMGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3MjcyM2JkYzdiZDRhMjNiYWY4MjlmNjJiM2IzYmU4LnNldENvbnRlbnQoaHRtbF9iNWFjNjg3MWIyMmM0M2QzOTkxYzNjM2M0NDU2ZGQwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZjRiNWFmZThmODM0MDExYTY2NTkwNDRlNTJiMTc4NC5iaW5kUG9wdXAocG9wdXBfODcyNzIzYmRjN2JkNGEyM2JhZjgyOWY2MmIzYjNiZTgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDc5OWQzOTZlOWZhNGZjM2ExNTYwMzIzNzFmYjZhYTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDA3LC0xMTguMjQ2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcyYzczNmQwN2VlOTQ0YTU4ZWNhNzk3NzYyM2ZmMmZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5OTZhZTVhMGZiYjQ2NTBhYWEzZGYxM2M3ZDFkODAxID0gJCgnPGRpdiBpZD0iaHRtbF8zOTk2YWU1YTBmYmI0NjUwYWFhM2RmMTNjN2QxZDgwMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzJjNzM2ZDA3ZWU5NDRhNThlY2E3OTc3NjIzZmYyZmIuc2V0Q29udGVudChodG1sXzM5OTZhZTVhMGZiYjQ2NTBhYWEzZGYxM2M3ZDFkODAxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ3OTlkMzk2ZTlmYTRmYzNhMTU2MDMyMzcxZmI2YWExLmJpbmRQb3B1cChwb3B1cF83MmM3MzZkMDdlZTk0NGE1OGVjYTc5Nzc2MjNmZjJmYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZGYxZGFkYWI4NDc0ZWZmYmRkMTk0Yjg3MDcwMDVlZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzOTYsLTExOC4yNTU4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTBmMjc5NDdmZjZkNDQ1NTg0ZDQ1NGQwN2ViMDhiNDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDEyZDRmMzA4MjA3NDgzN2FiMzk4Y2U1NjdkMTQzODEgPSAkKCc8ZGl2IGlkPSJodG1sXzQxMmQ0ZjMwODIwNzQ4MzdhYjM5OGNlNTY3ZDE0MzgxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMGYyNzk0N2ZmNmQ0NDU1ODRkNDU0ZDA3ZWIwOGI0MS5zZXRDb250ZW50KGh0bWxfNDEyZDRmMzA4MjA3NDgzN2FiMzk4Y2U1NjdkMTQzODEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2RmMWRhZGFiODQ3NGVmZmJkZDE5NGI4NzA3MDA1ZWQuYmluZFBvcHVwKHBvcHVwXzEwZjI3OTQ3ZmY2ZDQ0NTU4NGQ0NTRkMDdlYjA4YjQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjZjBmZTc4M2JiMjQ4ZWJiNDk3MTU3M2MxMDZkNDQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ2LC0xMTguMjUwOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1NDM1YjM3NzM1MDQ3MjQ4NzczZjg3ODQ0MjJmMmFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlNDNiNjZiNzZjYTRhMWNiM2Y0MmQzNWY3Yjc2M2FiID0gJCgnPGRpdiBpZD0iaHRtbF80ZTQzYjY2Yjc2Y2E0YTFjYjNmNDJkMzVmN2I3NjNhYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjU0MzViMzc3MzUwNDcyNDg3NzNmODc4NDQyMmYyYWQuc2V0Q29udGVudChodG1sXzRlNDNiNjZiNzZjYTRhMWNiM2Y0MmQzNWY3Yjc2M2FiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FjZjBmZTc4M2JiMjQ4ZWJiNDk3MTU3M2MxMDZkNDQyLmJpbmRQb3B1cChwb3B1cF9mNTQzNWIzNzczNTA0NzI0ODc3M2Y4Nzg0NDIyZjJhZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWI1YzY4YzNmN2M0MzdlYTkzZjA1Yjc4ODA1ZWI5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2MDQsLTExOC4yMzkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjdjYjYyZTQ1MDNkNDVmMmI0NjY2ZWNmN2IyNzc0YTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDNjMGViNTVjZDM1NDEwOGJlZjE3NjA5NzZlOTc4MjIgPSAkKCc8ZGl2IGlkPSJodG1sXzAzYzBlYjU1Y2QzNTQxMDhiZWYxNzYwOTc2ZTk3ODIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mN2NiNjJlNDUwM2Q0NWYyYjQ2NjZlY2Y3YjI3NzRhNi5zZXRDb250ZW50KGh0bWxfMDNjMGViNTVjZDM1NDEwOGJlZjE3NjA5NzZlOTc4MjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDliNWM2OGMzZjdjNDM3ZWE5M2YwNWI3ODgwNWViOTIuYmluZFBvcHVwKHBvcHVwX2Y3Y2I2MmU0NTAzZDQ1ZjJiNDY2NmVjZjdiMjc3NGE2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjOTJmMzA4ZDRlNTRjNWRiMDUyYjlkYzlhN2IzMGFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQzLC0xMTguMjYwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I4N2RlNzYyOTYxNDQ5MjA5ZDc1ZmEzNjYxZTgxMDNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhhNGVmNDFlYWI3MDQyY2ZiNDE2MTdhYzlmNjYzNWM4ID0gJCgnPGRpdiBpZD0iaHRtbF84YTRlZjQxZWFiNzA0MmNmYjQxNjE3YWM5ZjY2MzVjOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjg3ZGU3NjI5NjE0NDkyMDlkNzVmYTM2NjFlODEwM2Euc2V0Q29udGVudChodG1sXzhhNGVmNDFlYWI3MDQyY2ZiNDE2MTdhYzlmNjYzNWM4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjOTJmMzA4ZDRlNTRjNWRiMDUyYjlkYzlhN2IzMGFmLmJpbmRQb3B1cChwb3B1cF9iODdkZTc2Mjk2MTQ0OTIwOWQ3NWZhMzY2MWU4MTAzYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGIzYWJlNDE0ZGI0YjgyYWU4ZjEzMjIxYWYwNGNkOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MDcsLTExOC4yNDY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDNkNzRiMTU0YTJiNGJlNmJmMGRkNmVhZTE3YWI3ZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjk1OTkwZmRlYWE3NGE2ZmE4ODZjZWRkOGJiMzY0ZmUgPSAkKCc8ZGl2IGlkPSJodG1sXzY5NTk5MGZkZWFhNzRhNmZhODg2Y2VkZDhiYjM2NGZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80M2Q3NGIxNTRhMmI0YmU2YmYwZGQ2ZWFlMTdhYjdmZC5zZXRDb250ZW50KGh0bWxfNjk1OTkwZmRlYWE3NGE2ZmE4ODZjZWRkOGJiMzY0ZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhiM2FiZTQxNGRiNGI4MmFlOGYxMzIyMWFmMDRjZDkuYmluZFBvcHVwKHBvcHVwXzQzZDc0YjE1NGEyYjRiZTZiZjBkZDZlYWUxN2FiN2ZkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljNTcyMmUyNTVjOTQ2MTZiMmRlNDczZjVhZjA1ODA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ1NSwtMTE4LjIzNzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNjAzZjg4MmFhMDY0YmYxYWJmZmJmZjFlN2IxYzI0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNTcyMmIxYjhkNjY0ZDBlODI5ZTdmNmI1YzlkNTEzMiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjU3MjJiMWI4ZDY2NGQwZTgyOWU3ZjZiNWM5ZDUxMzIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2MDNmODgyYWEwNjRiZjFhYmZmYmZmMWU3YjFjMjRhLnNldENvbnRlbnQoaHRtbF9iNTcyMmIxYjhkNjY0ZDBlODI5ZTdmNmI1YzlkNTEzMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YzU3MjJlMjU1Yzk0NjE2YjJkZTQ3M2Y1YWYwNTgwNi5iaW5kUG9wdXAocG9wdXBfYTYwM2Y4ODJhYTA2NGJmMWFiZmZiZmYxZTdiMWMyNGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjY4Yjg1NDcyNThjNGJmM2IyMmYzZmFmZmU4N2NhZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDU0LC0xMTguMjMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1ZTE5NzIyMWM5YTRiZDQ5NTBkZGY0NzI1MmNjNTc3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZkNGY5MmEwZGExMTRlZGJhYjU1ODg1OTc5N2ZiZWMyID0gJCgnPGRpdiBpZD0iaHRtbF82ZDRmOTJhMGRhMTE0ZWRiYWI1NTg4NTk3OTdmYmVjMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjVlMTk3MjIxYzlhNGJkNDk1MGRkZjQ3MjUyY2M1Nzcuc2V0Q29udGVudChodG1sXzZkNGY5MmEwZGExMTRlZGJhYjU1ODg1OTc5N2ZiZWMyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI2OGI4NTQ3MjU4YzRiZjNiMjJmM2ZhZmZlODdjYWRmLmJpbmRQb3B1cChwb3B1cF82NWUxOTcyMjFjOWE0YmQ0OTUwZGRmNDcyNTJjYzU3Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZTJkZTkxN2Q4YjA0ZGI4OThiZjg1ZmYxY2U5YzJjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MzcsLTExOC4yNDU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTVhZTEyOTFmYjVkNDEwZDhmMDUxN2YxY2U4MTFlNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDc1NGRhNjk4MGQzNDc2MjgxMWMxMTc1YTg4YjRmNzEgPSAkKCc8ZGl2IGlkPSJodG1sXzA3NTRkYTY5ODBkMzQ3NjI4MTFjMTE3NWE4OGI0ZjcxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NWFlMTI5MWZiNWQ0MTBkOGYwNTE3ZjFjZTgxMWU1Ni5zZXRDb250ZW50KGh0bWxfMDc1NGRhNjk4MGQzNDc2MjgxMWMxMTc1YTg4YjRmNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWUyZGU5MTdkOGIwNGRiODk4YmY4NWZmMWNlOWMyY2QuYmluZFBvcHVwKHBvcHVwXzk1YWUxMjkxZmI1ZDQxMGQ4ZjA1MTdmMWNlODExZTU2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhkNzliYTJmM2FkZTRlNDE5ODhmOGYyOTAyNDlmYTY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQwMSwtMTE4LjI2NjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWJiNzNjNDIyMTg0MGU2YTMyYTY1MmNlMzRmOTkxYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzBhNzJhODJhNjA0MWU3YmY0MDdiMjVjYzExNjBkNiA9ICQoJzxkaXYgaWQ9Imh0bWxfNjcwYTcyYTgyYTYwNDFlN2JmNDA3YjI1Y2MxMTYwZDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhYmI3M2M0MjIxODQwZTZhMzJhNjUyY2UzNGY5OTFhLnNldENvbnRlbnQoaHRtbF82NzBhNzJhODJhNjA0MWU3YmY0MDdiMjVjYzExNjBkNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZDc5YmEyZjNhZGU0ZTQxOTg4ZjhmMjkwMjQ5ZmE2OC5iaW5kUG9wdXAocG9wdXBfZmFiYjczYzQyMjE4NDBlNmEzMmE2NTJjZTM0Zjk5MWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWI2OWY1ZjY2MWI4NGYzN2I4MzQ5M2MyYTA1ZjAwZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTIsLTExOC4yMzMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTExYzY1MzY3NWQzNGY2NzkxZTYzNTEwNjMxMjUyZDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWQyNWEyMTY5ZjJiNDliZWFiMmM1M2M3MDBjMDYxYTAgPSAkKCc8ZGl2IGlkPSJodG1sX2VkMjVhMjE2OWYyYjQ5YmVhYjJjNTNjNzAwYzA2MWEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MTFjNjUzNjc1ZDM0ZjY3OTFlNjM1MTA2MzEyNTJkMS5zZXRDb250ZW50KGh0bWxfZWQyNWEyMTY5ZjJiNDliZWFiMmM1M2M3MDBjMDYxYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWI2OWY1ZjY2MWI4NGYzN2I4MzQ5M2MyYTA1ZjAwZTIuYmluZFBvcHVwKHBvcHVwXzkxMWM2NTM2NzVkMzRmNjc5MWU2MzUxMDYzMTI1MmQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ODZjYTdmOWU5ZjQ2NDFhZTcwMWY3NmI3ZmIyOWRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU2NiwtMTE4LjI1MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNmE1OGJhYjg0YmU0ZThjYTc4MzlmMTI1YmIxYTcyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NDg5MWE0MmMzODQ0YmY3YjU3YTM5OWIxN2NiZmFjYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNTQ4OTFhNDJjMzg0NGJmN2I1N2EzOTliMTdjYmZhY2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2YTU4YmFiODRiZTRlOGNhNzgzOWYxMjViYjFhNzI1LnNldENvbnRlbnQoaHRtbF81NDg5MWE0MmMzODQ0YmY3YjU3YTM5OWIxN2NiZmFjYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNDg2Y2E3ZjllOWY0NjQxYWU3MDFmNzZiN2ZiMjlkYy5iaW5kUG9wdXAocG9wdXBfZjZhNThiYWI4NGJlNGU4Y2E3ODM5ZjEyNWJiMWE3MjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGRkNWQ0MDcyMTkyNDUwYjkxMjg5ZmVlZDE1NGI2N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzczLC0xMTguMjUwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBiZjY0OTFmODRmNDQxYmM5YzhmNjMzNjc0N2Y3NzExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I4NmY2NTE5MDk4ZjQ1YTc5NmU4Nzg3MzA4NjU0Zjk3ID0gJCgnPGRpdiBpZD0iaHRtbF9iODZmNjUxOTA5OGY0NWE3OTZlODc4NzMwODY1NGY5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGJmNjQ5MWY4NGY0NDFiYzljOGY2MzM2NzQ3Zjc3MTEuc2V0Q29udGVudChodG1sX2I4NmY2NTE5MDk4ZjQ1YTc5NmU4Nzg3MzA4NjU0Zjk3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkZDVkNDA3MjE5MjQ1MGI5MTI4OWZlZWQxNTRiNjdhLmJpbmRQb3B1cChwb3B1cF8wYmY2NDkxZjg0ZjQ0MWJjOWM4ZjYzMzY3NDdmNzcxMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYzk1ODI3Zjg0OTA0Y2U3YmIyYjZiYTAwNWM1ZTQyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MDEsLTExOC4yNjY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmNkY2EzMTFhY2MyNDg3ODg4MWMyODc4YzAwNDVmMjYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDAzOWI1ZWZiYTZmNDNlOWE1Y2U3YzgwZDk1MTEyMjQgPSAkKCc8ZGl2IGlkPSJodG1sXzAwMzliNWVmYmE2ZjQzZTlhNWNlN2M4MGQ5NTExMjI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82Y2RjYTMxMWFjYzI0ODc4ODgxYzI4NzhjMDA0NWYyNi5zZXRDb250ZW50KGh0bWxfMDAzOWI1ZWZiYTZmNDNlOWE1Y2U3YzgwZDk1MTEyMjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmM5NTgyN2Y4NDkwNGNlN2JiMmI2YmEwMDVjNWU0MmMuYmluZFBvcHVwKHBvcHVwXzZjZGNhMzExYWNjMjQ4Nzg4ODFjMjg3OGMwMDQ1ZjI2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3OWIxMTBiNTVlZTRlMWRiZWJjNmFiZDFlMThkOGM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ4NSwtMTE4LjI0NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xOWNmNzUwZmExMzY0ODEyODRhYmVjYmYxYTFiMDc5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzU2NmViMjQyMjA0ZjM5YmE2ODkxZGFkYTBiYzA4YSA9ICQoJzxkaXYgaWQ9Imh0bWxfZmM1NjZlYjI0MjIwNGYzOWJhNjg5MWRhZGEwYmMwOGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5Y2Y3NTBmYTEzNjQ4MTI4NGFiZWNiZjFhMWIwNzliLnNldENvbnRlbnQoaHRtbF9mYzU2NmViMjQyMjA0ZjM5YmE2ODkxZGFkYTBiYzA4YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNzliMTEwYjU1ZWU0ZTFkYmViYzZhYmQxZTE4ZDhjNC5iaW5kUG9wdXAocG9wdXBfMTljZjc1MGZhMTM2NDgxMjg0YWJlY2JmMWExYjA3OWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzkzYzMxMjBjNzljNGI5NTg3MzJiNWRmYWNhYzYyOGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDc0LC0xMTguMjQ5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1Y2M3OGUzZGZlNzQwYWU4YTUzNTQyNjAzYjdhZGM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkODc4OTdhOTdmNzRmZTA4YWUzMTUyMTdkOWM5ODZmID0gJCgnPGRpdiBpZD0iaHRtbF80ZDg3ODk3YTk3Zjc0ZmUwOGFlMzE1MjE3ZDljOTg2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzVjYzc4ZTNkZmU3NDBhZThhNTM1NDI2MDNiN2FkYzUuc2V0Q29udGVudChodG1sXzRkODc4OTdhOTdmNzRmZTA4YWUzMTUyMTdkOWM5ODZmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M5M2MzMTIwYzc5YzRiOTU4NzMyYjVkZmFjYWM2MjhjLmJpbmRQb3B1cChwb3B1cF9jNWNjNzhlM2RmZTc0MGFlOGE1MzU0MjYwM2I3YWRjNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYjk4NjgxZDY4MTA0M2E0YWMwNzlhYjQwNjFlNTdhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzOTUsLTExOC4yNDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWIwZjQ3ZjRmOGI0NDM2OTk1YTg2M2YxZDNkYWJiNTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYWU0MTA2YzFmOGI4NGM3ZWEzOWM5ZThiMWE0MzM4ZjEgPSAkKCc8ZGl2IGlkPSJodG1sX2FlNDEwNmMxZjhiODRjN2VhMzljOWU4YjFhNDMzOGYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYjBmNDdmNGY4YjQ0MzY5OTVhODYzZjFkM2RhYmI1MS5zZXRDb250ZW50KGh0bWxfYWU0MTA2YzFmOGI4NGM3ZWEzOWM5ZThiMWE0MzM4ZjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmI5ODY4MWQ2ODEwNDNhNGFjMDc5YWI0MDYxZTU3YWEuYmluZFBvcHVwKHBvcHVwX2FiMGY0N2Y0ZjhiNDQzNjk5NWE4NjNmMWQzZGFiYjUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1NGY5N2RhN2ZiYTQwMDE4MzM5NDA0ZmUxZDU5ZWU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQwOCwtMTE4LjI2NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85N2YxNzE3ODhkZjQ0ZmY3YjQ3MTgwOTQ0YWU4ZjY1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMDBjZWE1NWZhNDk0MjE4ODZiYTg0NmZhNmQzNjYyMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMDAwY2VhNTVmYTQ5NDIxODg2YmE4NDZmYTZkMzY2MjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzk3ZjE3MTc4OGRmNDRmZjdiNDcxODA5NDRhZThmNjU1LnNldENvbnRlbnQoaHRtbF8wMDBjZWE1NWZhNDk0MjE4ODZiYTg0NmZhNmQzNjYyMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iNTRmOTdkYTdmYmE0MDAxODMzOTQwNGZlMWQ1OWVlOS5iaW5kUG9wdXAocG9wdXBfOTdmMTcxNzg4ZGY0NGZmN2I0NzE4MDk0NGFlOGY2NTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjc5YWE3NGZkNWEzNDgwMTg3MmI5MjFmNzhiZDY0ZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDk1LC0xMTguMjQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5YjAzZDQ1OGE1NzQzZDNhMjZjZGQwYWQ0MDliZTdkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VmNjIyMGFkODJkNjQxNDk5ODBmY2Y0OTEwZWQ2ZDEzID0gJCgnPGRpdiBpZD0iaHRtbF9lZjYyMjBhZDgyZDY0MTQ5OTgwZmNmNDkxMGVkNmQxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzliMDNkNDU4YTU3NDNkM2EyNmNkZDBhZDQwOWJlN2Quc2V0Q29udGVudChodG1sX2VmNjIyMGFkODJkNjQxNDk5ODBmY2Y0OTEwZWQ2ZDEzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3OWFhNzRmZDVhMzQ4MDE4NzJiOTIxZjc4YmQ2NGRlLmJpbmRQb3B1cChwb3B1cF8zOWIwM2Q0NThhNTc0M2QzYTI2Y2RkMGFkNDA5YmU3ZCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZGViYWNlYzFkZjI0ZTEyODk2NWE1NWY1Y2U4Njg0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0ODcsLTExOC4yNTg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjE3YTlmNTU4OWQ5NDdkMDhiMDQ3MmVkMTk0MTgxNWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGU1YTc3NDQ5ZDU1NDhmZGE1MGMwNWI3NjUzNTM3NjcgPSAkKCc8ZGl2IGlkPSJodG1sX2RlNWE3NzQ0OWQ1NTQ4ZmRhNTBjMDViNzY1MzUzNzY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTdhOWY1NTg5ZDk0N2QwOGIwNDcyZWQxOTQxODE1ZS5zZXRDb250ZW50KGh0bWxfZGU1YTc3NDQ5ZDU1NDhmZGE1MGMwNWI3NjUzNTM3NjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZGRlYmFjZWMxZGYyNGUxMjg5NjVhNTVmNWNlODY4NDkuYmluZFBvcHVwKHBvcHVwX2IxN2E5ZjU1ODlkOTQ3ZDA4YjA0NzJlZDE5NDE4MTVlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE0N2QxYjY3MDViYTRhNGE4ODcyMzIzMTFjMDMzYjg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDUwMywtMTE4LjI0MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYTFmN2EwMWM1Mjc0OGI0YjAzZmFlODExOWZiMGFkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81M2U5MTU0MGJlZGQ0Y2ExODczNTRlMmRlOGQzMzcwMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTNlOTE1NDBiZWRkNGNhMTg3MzU0ZTJkZThkMzM3MDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJhMWY3YTAxYzUyNzQ4YjRiMDNmYWU4MTE5ZmIwYWRmLnNldENvbnRlbnQoaHRtbF81M2U5MTU0MGJlZGQ0Y2ExODczNTRlMmRlOGQzMzcwMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNDdkMWI2NzA1YmE0YTRhODg3MjMyMzExYzAzM2I4Ni5iaW5kUG9wdXAocG9wdXBfMmExZjdhMDFjNTI3NDhiNGIwM2ZhZTgxMTlmYjBhZGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2M4YTViZjBlMTNmNDEzMWJiZGFlZTk3N2EwOGU1NDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDA4LC0xMTguMjY0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBkYmIyNGQ4YWRmNDQ3NDg5YzY3MjdmZTY5MjNlNDM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUxYTEyMWE3OTgzYjQ4YTNhMDBjZmY1NjU3YmFkMmM5ID0gJCgnPGRpdiBpZD0iaHRtbF81MWExMjFhNzk4M2I0OGEzYTAwY2ZmNTY1N2JhZDJjOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGRiYjI0ZDhhZGY0NDc0ODljNjcyN2ZlNjkyM2U0MzQuc2V0Q29udGVudChodG1sXzUxYTEyMWE3OTgzYjQ4YTNhMDBjZmY1NjU3YmFkMmM5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNjOGE1YmYwZTEzZjQxMzFiYmRhZWU5NzdhMDhlNTQxLmJpbmRQb3B1cChwb3B1cF8wZGJiMjRkOGFkZjQ0NzQ4OWM2NzI3ZmU2OTIzZTQzNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NzM4M2JkNmE1ZGQ0Y2FjYTNjYzc3MzNmZjVhNTIxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MjMsLTExOC4yNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTkzNWY0NzU0ZGRjNGY2YmFlOTgwMjZiOTYzNzIwZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTk2ODg2MzRkMjNhNDI5Zjg1ZjQzMjgxMmI4MzhkZmUgPSAkKCc8ZGl2IGlkPSJodG1sXzE5Njg4NjM0ZDIzYTQyOWY4NWY0MzI4MTJiODM4ZGZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85OTM1ZjQ3NTRkZGM0ZjZiYWU5ODAyNmI5NjM3MjBmOC5zZXRDb250ZW50KGh0bWxfMTk2ODg2MzRkMjNhNDI5Zjg1ZjQzMjgxMmI4MzhkZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzczODNiZDZhNWRkNGNhY2EzY2M3NzMzZmY1YTUyMWQuYmluZFBvcHVwKHBvcHVwXzk5MzVmNDc1NGRkYzRmNmJhZTk4MDI2Yjk2MzcyMGY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExMzliNTQ3YWQ1ZTRkOTk5MDc3YThmYTQyOGY3MGU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQxNywtMTE4LjI0NDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDUwOGE4YjRkY2I0M2UwYWNlZDAyNjkwZmZiMDI5NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2FhNzVmMzgzZDc0MjQ1OGYyNzBlNzBmYWQyM2E0MiA9ICQoJzxkaXYgaWQ9Imh0bWxfMTNhYTc1ZjM4M2Q3NDI0NThmMjcwZTcwZmFkMjNhNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwNTA4YThiNGRjYjQzZTBhY2VkMDI2OTBmZmIwMjk3LnNldENvbnRlbnQoaHRtbF8xM2FhNzVmMzgzZDc0MjQ1OGYyNzBlNzBmYWQyM2E0Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMTM5YjU0N2FkNWU0ZDk5OTA3N2E4ZmE0MjhmNzBlOS5iaW5kUG9wdXAocG9wdXBfYTA1MDhhOGI0ZGNiNDNlMGFjZWQwMjY5MGZmYjAyOTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDI4ZGZjOTZkMTVkNDczNzgxMTc3YjNkNTBiNzNmMGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTk5LC0xMTguMjQyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyOTNiYTE0NWI0ZjRjOWNiOWUxY2QxNjQyNDVkMWM1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdlMjQzZWUxOTFmMzQ5NjdiNTYyZjg2MGI2ZTE0NDUwID0gJCgnPGRpdiBpZD0iaHRtbF83ZTI0M2VlMTkxZjM0OTY3YjU2MmY4NjBiNmUxNDQ1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDI5M2JhMTQ1YjRmNGM5Y2I5ZTFjZDE2NDI0NWQxYzUuc2V0Q29udGVudChodG1sXzdlMjQzZWUxOTFmMzQ5NjdiNTYyZjg2MGI2ZTE0NDUwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QyOGRmYzk2ZDE1ZDQ3Mzc4MTE3N2IzZDUwYjczZjBlLmJpbmRQb3B1cChwb3B1cF8wMjkzYmExNDViNGY0YzljYjllMWNkMTY0MjQ1ZDFjNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMTViMDc5MDVjOGE0NTE1YTBiMmIzZmE5NjE0YjBhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NjMsLTExOC4yNjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTlmZWM5NmYyYjA3NDQxODg3MWFkY2YzZGQ2MzRmYjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjI0MTYzMmY4ZDVhNDNjNWE2NzVjYzRhYTY0MGVjOGEgPSAkKCc8ZGl2IGlkPSJodG1sXzIyNDE2MzJmOGQ1YTQzYzVhNjc1Y2M0YWE2NDBlYzhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lOWZlYzk2ZjJiMDc0NDE4ODcxYWRjZjNkZDYzNGZiOC5zZXRDb250ZW50KGh0bWxfMjI0MTYzMmY4ZDVhNDNjNWE2NzVjYzRhYTY0MGVjOGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDE1YjA3OTA1YzhhNDUxNWEwYjJiM2ZhOTYxNGIwYTguYmluZFBvcHVwKHBvcHVwX2U5ZmVjOTZmMmIwNzQ0MTg4NzFhZGNmM2RkNjM0ZmI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNjMWNmZThhNzY2ZDQ1Mzg5NWJlMmZmNzgwZjJhMTk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDM4MiwtMTE4LjI0MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWI1YWMwODVjN2M0NTA4OTg5YjAwMDNjZTM0MDEzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZmIwZDdmZGNjZmQ0OTVhOWYxMWE5N2NlZGQwNTk2MSA9ICQoJzxkaXYgaWQ9Imh0bWxfYWZiMGQ3ZmRjY2ZkNDk1YTlmMTFhOTdjZWRkMDU5NjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhYjVhYzA4NWM3YzQ1MDg5ODliMDAwM2NlMzQwMTMxLnNldENvbnRlbnQoaHRtbF9hZmIwZDdmZGNjZmQ0OTVhOWYxMWE5N2NlZGQwNTk2MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zYzFjZmU4YTc2NmQ0NTM4OTViZTJmZjc4MGYyYTE5NS5iaW5kUG9wdXAocG9wdXBfNWFiNWFjMDg1YzdjNDUwODk4OWIwMDAzY2UzNDAxMzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzM3NzNkYzA4NjY2NGNiNzlhM2RhMmVhYTk1NDRmMTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDQyLC0xMTguMjQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJjMzhhMjYxOTUyNzQ2YWFiOWYzZWQ0YzM0YWQzYTJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UwMDI2YjE3ODg0YTQ4MzA4YWZhZDU3ZDI0NGVlYjdhID0gJCgnPGRpdiBpZD0iaHRtbF9lMDAyNmIxNzg4NGE0ODMwOGFmYWQ1N2QyNDRlZWI3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmMzOGEyNjE5NTI3NDZhYWI5ZjNlZDRjMzRhZDNhMmIuc2V0Q29udGVudChodG1sX2UwMDI2YjE3ODg0YTQ4MzA4YWZhZDU3ZDI0NGVlYjdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MzNzczZGMwODY2NjRjYjc5YTNkYTJlYWE5NTQ0ZjEzLmJpbmRQb3B1cChwb3B1cF8yYzM4YTI2MTk1Mjc0NmFhYjlmM2VkNGMzNGFkM2EyYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MDM3MDRkZmQ1Njg0NzQxYjM1ZWJkYjUzZWRhNjQ2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1OTEsLTExOC4yNDEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWE4MjJmZjA2Nzc1NDU3NThiMDc3NDcyN2I3MDM2YmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWRmZTc5NjFjYWNmNDNiMjhlZTgwZWNiN2E2NDE3YzUgPSAkKCc8ZGl2IGlkPSJodG1sXzVkZmU3OTYxY2FjZjQzYjI4ZWU4MGVjYjdhNjQxN2M1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYTgyMmZmMDY3NzU0NTc1OGIwNzc0NzI3YjcwMzZiZi5zZXRDb250ZW50KGh0bWxfNWRmZTc5NjFjYWNmNDNiMjhlZTgwZWNiN2E2NDE3YzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTAzNzA0ZGZkNTY4NDc0MWIzNWViZGI1M2VkYTY0NjIuYmluZFBvcHVwKHBvcHVwX2FhODIyZmYwNjc3NTQ1NzU4YjA3NzQ3MjdiNzAzNmJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM1YTRlMWQ1ZDdmNjQ0MDU5YzdmNmI3OGQyOTQ5YmZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQxMywtMTE4LjI1MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84Zjc1OGU2MjIzODQ0NzkyOWU4ODhkMTVlODIxOWU1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZWJjYmJlZTJkZDE0Njg3OWQ3ZmI2NjcwMjdmMmE1YSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWViY2JiZWUyZGQxNDY4NzlkN2ZiNjY3MDI3ZjJhNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmNzU4ZTYyMjM4NDQ3OTI5ZTg4OGQxNWU4MjE5ZTU5LnNldENvbnRlbnQoaHRtbF85ZWJjYmJlZTJkZDE0Njg3OWQ3ZmI2NjcwMjdmMmE1YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNWE0ZTFkNWQ3ZjY0NDA1OWM3ZjZiNzhkMjk0OWJmYS5iaW5kUG9wdXAocG9wdXBfOGY3NThlNjIyMzg0NDc5MjllODg4ZDE1ZTgyMTllNTkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQxNTI3MjQ1YTJhNDkyYmIwODU3ZjdlNmU0N2FmMDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDQ5LC0xMTguMjQ1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzYWIyMGUwYTcxZTQ0MzZiNGJmMTNjYTQ4OGJmMjA1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlZTBiYTYwY2MzMDRlODQ4NDQ4MTI0MTRjODllNjM2ID0gJCgnPGRpdiBpZD0iaHRtbF80ZWUwYmE2MGNjMzA0ZTg0ODQ0ODEyNDE0Yzg5ZTYzNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDNhYjIwZTBhNzFlNDQzNmI0YmYxM2NhNDg4YmYyMDUuc2V0Q29udGVudChodG1sXzRlZTBiYTYwY2MzMDRlODQ4NDQ4MTI0MTRjODllNjM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0MTUyNzI0NWEyYTQ5MmJiMDg1N2Y3ZTZlNDdhZjA3LmJpbmRQb3B1cChwb3B1cF8wM2FiMjBlMGE3MWU0NDM2YjRiZjEzY2E0ODhiZjIwNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTE3Yzk4YWM5MGY0NDgzYTJlMWU5YTNjZTIyNzUyYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0ODEsLTExOC4yNTA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDBhMTI1ODViMjBiNDI4MGEyOWQzNDI4YmRmMjA5ZWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTM5MGFlZjU3ZDI5NDM1M2I1ODkxYTUwM2NkNmZmODMgPSAkKCc8ZGl2IGlkPSJodG1sXzUzOTBhZWY1N2QyOTQzNTNiNTg5MWE1MDNjZDZmZjgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMGExMjU4NWIyMGI0MjgwYTI5ZDM0MjhiZGYyMDllYS5zZXRDb250ZW50KGh0bWxfNTM5MGFlZjU3ZDI5NDM1M2I1ODkxYTUwM2NkNmZmODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDExN2M5OGFjOTBmNDQ4M2EyZTFlOWEzY2UyMjc1MmMuYmluZFBvcHVwKHBvcHVwXzAwYTEyNTg1YjIwYjQyODBhMjlkMzQyOGJkZjIwOWVhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExNzQ0NDgyOWQxMDRhYTFiYjZmOTA2MjczNjMxYTY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDM5NiwtMTE4LjI1OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y2YmE4NGZiZTE0NDRlMjA5ZmVmNjY3ZGE4NTcxM2IyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYzMGM4OGI4NmY3ZTRiMDI5MDkxMDI5NzkzNjA2Y2M2ID0gJCgnPGRpdiBpZD0iaHRtbF82MzBjODhiODZmN2U0YjAyOTA5MTAyOTc5MzYwNmNjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjZiYTg0ZmJlMTQ0NGUyMDlmZWY2NjdkYTg1NzEzYjIuc2V0Q29udGVudChodG1sXzYzMGM4OGI4NmY3ZTRiMDI5MDkxMDI5NzkzNjA2Y2M2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExNzQ0NDgyOWQxMDRhYTFiYjZmOTA2MjczNjMxYTY0LmJpbmRQb3B1cChwb3B1cF9mNmJhODRmYmUxNDQ0ZTIwOWZlZjY2N2RhODU3MTNiMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYWQyNzlkMDk5ZDM0YjYzOGY0NDQ4ZjUxZjUxOWQyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NjcsLTExOC4yNTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTE5NThkNzI2ZjE0NDA4YWExOGQzYTRlZDI3ZTBjOWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTkyYjZiM2M4YTFlNGZkNjg4NzFiNTdiMmViMDc4Y2IgPSAkKCc8ZGl2IGlkPSJodG1sXzk5MmI2YjNjOGExZTRmZDY4ODcxYjU3YjJlYjA3OGNiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MTk1OGQ3MjZmMTQ0MDhhYTE4ZDNhNGVkMjdlMGM5ZC5zZXRDb250ZW50KGh0bWxfOTkyYjZiM2M4YTFlNGZkNjg4NzFiNTdiMmViMDc4Y2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWFkMjc5ZDA5OWQzNGI2MzhmNDQ0OGY1MWY1MTlkMmIuYmluZFBvcHVwKHBvcHVwXzUxOTU4ZDcyNmYxNDQwOGFhMThkM2E0ZWQyN2UwYzlkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4MDRlMGIzY2NhZDRmYzdhZjVlMzU0NzExY2UzYWVkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQxOSwtMTE4LjI1MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zZjc4YTI0MmNhZjk0YjQxYjkyMWFhNjRmOWZhNTU5YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80YWViOTM4ZmJlNjc0YjlkYjM0YzBjNmU4NDA2YzI4MSA9ICQoJzxkaXYgaWQ9Imh0bWxfNGFlYjkzOGZiZTY3NGI5ZGIzNGMwYzZlODQwNmMyODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNmNzhhMjQyY2FmOTRiNDFiOTIxYWE2NGY5ZmE1NTliLnNldENvbnRlbnQoaHRtbF80YWViOTM4ZmJlNjc0YjlkYjM0YzBjNmU4NDA2YzI4MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ODA0ZTBiM2NjYWQ0ZmM3YWY1ZTM1NDcxMWNlM2FlZC5iaW5kUG9wdXAocG9wdXBfM2Y3OGEyNDJjYWY5NGI0MWI5MjFhYTY0ZjlmYTU1OWIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg0N2I2ZGJhODMyNDBmZmIwMGFmZjY1ODFiNDA1MTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDQ1LC0xMTguMjU1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkYWYzZjlkMTE1NjRjNWU4ZjJmNTJjZTE1Y2E5YWRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc5OWU3M2VhMzk4MDQzZmNhNDhmNGFmYzk3MjUwNDQ0ID0gJCgnPGRpdiBpZD0iaHRtbF83OTllNzNlYTM5ODA0M2ZjYTQ4ZjRhZmM5NzI1MDQ0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q2VudHJhbDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGRhZjNmOWQxMTU2NGM1ZThmMmY1MmNlMTVjYTlhZGEuc2V0Q29udGVudChodG1sXzc5OWU3M2VhMzk4MDQzZmNhNDhmNGFmYzk3MjUwNDQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I4NDdiNmRiYTgzMjQwZmZiMDBhZmY2NTgxYjQwNTEyLmJpbmRQb3B1cChwb3B1cF9kZGFmM2Y5ZDExNTY0YzVlOGYyZjUyY2UxNWNhOWFkYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGQ2YmQ4MDMyOGE0YmIzOGFmNzNlMDc3MDJlNTlmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3MzYsLTExOC4yMzEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjJlMDA2NGZhNDRkNDliMTg5M2EzMzNiZTgyYjZmMjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTkzNjUyNjg5NDRjNGM2Yzk0ZTc3OTQwYjVkOGVjYWQgPSAkKCc8ZGl2IGlkPSJodG1sXzU5MzY1MjY4OTQ0YzRjNmM5NGU3Nzk0MGI1ZDhlY2FkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5DZW50cmFsPC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMmUwMDY0ZmE0NGQ0OWIxODkzYTMzM2JlODJiNmYyMy5zZXRDb250ZW50KGh0bWxfNTkzNjUyNjg5NDRjNGM2Yzk0ZTc3OTQwYjVkOGVjYWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzRkNmJkODAzMjhhNGJiMzhhZjczZTA3NzAyZTU5ZjQuYmluZFBvcHVwKHBvcHVwXzIyZTAwNjRmYTQ0ZDQ5YjE4OTNhMzMzYmU4MmI2ZjIzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M0ZWJmNDQwZDljNjQwMzk4Yzc4MDc2NDZlOTE4YTFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYwMywtMTE4LjI0MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kOGY1NDZkODhjMGQ0YzM3OTBkOTlmYTBiOGRlYzY3YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZTVjZDBkYzRkYzM0ZDE2OTNlNzY2OTU0YmVkMDYyMCA9ICQoJzxkaXYgaWQ9Imh0bWxfZGU1Y2QwZGM0ZGMzNGQxNjkzZTc2Njk1NGJlZDA2MjAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNlbnRyYWw8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q4ZjU0NmQ4OGMwZDRjMzc5MGQ5OWZhMGI4ZGVjNjdhLnNldENvbnRlbnQoaHRtbF9kZTVjZDBkYzRkYzM0ZDE2OTNlNzY2OTU0YmVkMDYyMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNGViZjQ0MGQ5YzY0MDM5OGM3ODA3NjQ2ZTkxOGExZi5iaW5kUG9wdXAocG9wdXBfZDhmNTQ2ZDg4YzBkNGMzNzkwZDk5ZmEwYjhkZWM2N2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2YzYTdhZjNiMWI1NDI4ZmIxMDNlZTU1OTUxYmY4NzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODg2LC0xMTguMzAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzNDhmZWJiODhhMDQ5OGU5ZWZmNWQ4MGE1OTQ4NjlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M4OWI3MmYxNGY4YzQ0OTM4ODdiYzBkMjYyMmZhNDE2ID0gJCgnPGRpdiBpZD0iaHRtbF9jODliNzJmMTRmOGM0NDkzODg3YmMwZDI2MjJmYTQxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTM0OGZlYmI4OGEwNDk4ZTllZmY1ZDgwYTU5NDg2OWYuc2V0Q29udGVudChodG1sX2M4OWI3MmYxNGY4YzQ0OTM4ODdiYzBkMjYyMmZhNDE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdmM2E3YWYzYjFiNTQyOGZiMTAzZWU1NTk1MWJmODc5LmJpbmRQb3B1cChwb3B1cF85MzQ4ZmViYjg4YTA0OThlOWVmZjVkODBhNTk0ODY5Zik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGEwMzE4ZTEwYmE0NjhkYjFhZTFjYzZjMGM2ZjU5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2ODIsLTExOC4yNjA5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmRjZGY0MGNkZGQzNGExNWI0M2Q0NzBmODE5NWVmZGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTk4MzZjMGYwNzBhNGRiNGI2ZmU1NGY3NjhmNzIyZDQgPSAkKCc8ZGl2IGlkPSJodG1sXzU5ODM2YzBmMDcwYTRkYjRiNmZlNTRmNzY4ZjcyMmQ0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZGNkZjQwY2RkZDM0YTE1YjQzZDQ3MGY4MTk1ZWZkZC5zZXRDb250ZW50KGh0bWxfNTk4MzZjMGYwNzBhNGRiNGI2ZmU1NGY3NjhmNzIyZDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGRhMDMxOGUxMGJhNDY4ZGIxYWUxY2M2YzBjNmY1OTkuYmluZFBvcHVwKHBvcHVwX2ZkY2RmNDBjZGRkMzRhMTViNDNkNDcwZjgxOTVlZmRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiYzhjZDIxNzdmYTRjOTJiZjg3YzA5MGI0ZjRkOTcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU1NCwtMTE4LjI3ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWY5M2UwYmVjMGY0ZmQ2YTg4ZTlkYWQzNTA1NTU2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzZmYmZmNGZiODg0OWM5YTY1N2JlZmM4ZWNjZDIyNiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDM2ZmJmZjRmYjg4NDljOWE2NTdiZWZjOGVjY2QyMjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhZjkzZTBiZWMwZjRmZDZhODhlOWRhZDM1MDU1NTYzLnNldENvbnRlbnQoaHRtbF9kMzZmYmZmNGZiODg0OWM5YTY1N2JlZmM4ZWNjZDIyNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83YmM4Y2QyMTc3ZmE0YzkyYmY4N2MwOTBiNGY0ZDk3MS5iaW5kUG9wdXAocG9wdXBfZmFmOTNlMGJlYzBmNGZkNmE4OGU5ZGFkMzUwNTU1NjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTNjMTdhNWI2YWVlNDY0N2E0OGUwMjE5NDg2ZmIzNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjIsLTExOC4yODA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTc1ZmFkMGY1ZWM4NDMwMjlkMTM0NjE5YWM0YmI3MjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODVhMzk5MzZhMDIzNGRlNTgyMmQ5MjFmZDg3ZGRlODkgPSAkKCc8ZGl2IGlkPSJodG1sXzg1YTM5OTM2YTAyMzRkZTU4MjJkOTIxZmQ4N2RkZTg5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NzVmYWQwZjVlYzg0MzAyOWQxMzQ2MTlhYzRiYjcyNS5zZXRDb250ZW50KGh0bWxfODVhMzk5MzZhMDIzNGRlNTgyMmQ5MjFmZDg3ZGRlODkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTNjMTdhNWI2YWVlNDY0N2E0OGUwMjE5NDg2ZmIzNDIuYmluZFBvcHVwKHBvcHVwXzk3NWZhZDBmNWVjODQzMDI5ZDEzNDYxOWFjNGJiNzI1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y4Mzg5ODAyMzU2ODQ1NjM4ZjA3NzUyOTE4ZGQxYTY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDg1NCwtMTE4LjI4MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTcxNzAwMWQ5ZjY0NTA4YmVkYmNjMzA0YjdmMmNiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYzkwMDhkYmJhZTM0NjBmYmIzYjIxZGI1OGQ0YjViNyA9ICQoJzxkaXYgaWQ9Imh0bWxfMGM5MDA4ZGJiYWUzNDYwZmJiM2IyMWRiNThkNGI1YjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExNzE3MDAxZDlmNjQ1MDhiZWRiY2MzMDRiN2YyY2JlLnNldENvbnRlbnQoaHRtbF8wYzkwMDhkYmJhZTM0NjBmYmIzYjIxZGI1OGQ0YjViNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mODM4OTgwMjM1Njg0NTYzOGYwNzc1MjkxOGRkMWE2NS5iaW5kUG9wdXAocG9wdXBfMTE3MTcwMDFkOWY2NDUwOGJlZGJjYzMwNGI3ZjJjYmUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTEyY2RiNjAxZGJiNDdiM2FjNGVmNzMyYjk5OWJiZWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzg4LC0xMTguMjc4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjZjhmZjY0MDYzYTRkZjJiOGYwMzdlNzY4NzNjZjYyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY5YWQ2NTg3YmVkZDRiNWI5MDRiMGNlODI1ZjViOTk2ID0gJCgnPGRpdiBpZD0iaHRtbF82OWFkNjU4N2JlZGQ0YjViOTA0YjBjZTgyNWY1Yjk5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNmOGZmNjQwNjNhNGRmMmI4ZjAzN2U3Njg3M2NmNjIuc2V0Q29udGVudChodG1sXzY5YWQ2NTg3YmVkZDRiNWI5MDRiMGNlODI1ZjViOTk2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzExMmNkYjYwMWRiYjQ3YjNhYzRlZjczMmI5OTliYmVjLmJpbmRQb3B1cChwb3B1cF9kY2Y4ZmY2NDA2M2E0ZGYyYjhmMDM3ZTc2ODczY2Y2Mik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MDhlYmY5ZjVhYzU0MmU0OWE4ZGNlNjRmMzc3NjQ2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NjcsLTExOC4yODE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzUzYmE2NmMzNDMzNGFiODhmYTM2NmViYTIyYjMyYzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWM4NTk3YTMzMGNlNDhlYzkwOTEzMWM5YTQwM2Q1NTQgPSAkKCc8ZGl2IGlkPSJodG1sXzFjODU5N2EzMzBjZTQ4ZWM5MDkxMzFjOWE0MDNkNTU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNTNiYTY2YzM0MzM0YWI4OGZhMzY2ZWJhMjJiMzJjOC5zZXRDb250ZW50KGh0bWxfMWM4NTk3YTMzMGNlNDhlYzkwOTEzMWM5YTQwM2Q1NTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTA4ZWJmOWY1YWM1NDJlNDlhOGRjZTY0ZjM3NzY0NmYuYmluZFBvcHVwKHBvcHVwXzM1M2JhNjZjMzQzMzRhYjg4ZmEzNjZlYmEyMmIzMmM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI4OTgwNGI5YjY1YjQ1NjU4M2FlZWM3NTliNzY1M2NmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDY3OSwtMTE4LjI3NjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZmM3ZWM0YTcyY2M0YWFkYmNlZjkzMGVhNTEwZjQwNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYmRjMjYwNmYzZmU0MjExODkwYzkyNTBlNzBjMDFjNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMmJkYzI2MDZmM2ZlNDIxMTg5MGM5MjUwZTcwYzAxYzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhmYzdlYzRhNzJjYzRhYWRiY2VmOTMwZWE1MTBmNDA1LnNldENvbnRlbnQoaHRtbF8yYmRjMjYwNmYzZmU0MjExODkwYzkyNTBlNzBjMDFjNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yODk4MDRiOWI2NWI0NTY1ODNhZWVjNzU5Yjc2NTNjZi5iaW5kUG9wdXAocG9wdXBfOGZjN2VjNGE3MmNjNGFhZGJjZWY5MzBlYTUxMGY0MDUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjhlNTg5MWUxOWQwNDJlYzkzNGExYmM3ZGVjMmM0ODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTE5LC0xMTguMjc1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FhY2FiMmM0NmYyZjQwMzZhYTMzOWU2ZTI5YzA2N2RmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlNGI3NjFiMTY2MzRiODFiNjA2NTRmNDk3ZDBjMDFkID0gJCgnPGRpdiBpZD0iaHRtbF8xZTRiNzYxYjE2NjM0YjgxYjYwNjU0ZjQ5N2QwYzAxZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWFjYWIyYzQ2ZjJmNDAzNmFhMzM5ZTZlMjljMDY3ZGYuc2V0Q29udGVudChodG1sXzFlNGI3NjFiMTY2MzRiODFiNjA2NTRmNDk3ZDBjMDFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4ZTU4OTFlMTlkMDQyZWM5MzRhMWJjN2RlYzJjNDg1LmJpbmRQb3B1cChwb3B1cF9hYWNhYjJjNDZmMmY0MDM2YWEzMzllNmUyOWMwNjdkZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NmE4N2MxNzhmYjk0OGFlODUyMjY3ZTFiYzMzZDNhZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1OTgsLTExOC4yNzMxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2RlMzE3OWI0YTMwNDE5MWJjYTA4Njk4MTRmZWY0MGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGM4YmMyNTgzZjFjNDg0OGI4NDY0NDc1YWFiODY5MmMgPSAkKCc8ZGl2IGlkPSJodG1sX2RjOGJjMjU4M2YxYzQ4NDhiODQ2NDQ3NWFhYjg2OTJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZGUzMTc5YjRhMzA0MTkxYmNhMDg2OTgxNGZlZjQwYi5zZXRDb250ZW50KGh0bWxfZGM4YmMyNTgzZjFjNDg0OGI4NDY0NDc1YWFiODY5MmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzZhODdjMTc4ZmI5NDhhZTg1MjI2N2UxYmMzM2QzYWYuYmluZFBvcHVwKHBvcHVwXzNkZTMxNzliNGEzMDQxOTFiY2EwODY5ODE0ZmVmNDBiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4YWY5MDQxMTRhZTRjYTRiZDRhMjQ0MTdiMDljMGIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDY3MSwtMTE4LjI3MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNmFkYmYwMTgzN2E0YjAyODcxMDIxNDBjZTA2N2Q1YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYzAwN2U4N2YyZjA0NGE3ODQ2MmRkZWY4OTc1NmZiMyA9ICQoJzxkaXYgaWQ9Imh0bWxfMGMwMDdlODdmMmYwNDRhNzg0NjJkZGVmODk3NTZmYjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2YWRiZjAxODM3YTRiMDI4NzEwMjE0MGNlMDY3ZDVhLnNldENvbnRlbnQoaHRtbF8wYzAwN2U4N2YyZjA0NGE3ODQ2MmRkZWY4OTc1NmZiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOGFmOTA0MTE0YWU0Y2E0YmQ0YTI0NDE3YjA5YzBiMi5iaW5kUG9wdXAocG9wdXBfMjZhZGJmMDE4MzdhNGIwMjg3MTAyMTQwY2UwNjdkNWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGUxODczNDJhYmNkNDFlMWI1MjIwYTVlMzZkMjQxZWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTUyLC0xMTguMjY3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg2MmY1NWY2MzJhMTQ3MTViMzJiNjQ3YzJjMzljMTMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RlMWViNjMxNDgxMjQ4MTg4ZTBkNTc4NzM5MmM0NjdhID0gJCgnPGRpdiBpZD0iaHRtbF9kZTFlYjYzMTQ4MTI0ODE4OGUwZDU3ODczOTJjNDY3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODYyZjU1ZjYzMmExNDcxNWIzMmI2NDdjMmMzOWMxMzAuc2V0Q29udGVudChodG1sX2RlMWViNjMxNDgxMjQ4MTg4ZTBkNTc4NzM5MmM0NjdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RlMTg3MzQyYWJjZDQxZTFiNTIyMGE1ZTM2ZDI0MWVhLmJpbmRQb3B1cChwb3B1cF84NjJmNTVmNjMyYTE0NzE1YjMyYjY0N2MyYzM5YzEzMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNGU1ZmNkOWNjZGI0MTc5YTU5YThjYjk0M2M3MjAwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3MjcsLTExOC4yNjM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTMwMWI1YmZjODg4NGY4NmFhNmVjY2IwNGY3OTA5NDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjhiMTUwMjdhMTU0NDVmZjk3MDdhNGFlNjk3MDU1YWQgPSAkKCc8ZGl2IGlkPSJodG1sX2Y4YjE1MDI3YTE1NDQ1ZmY5NzA3YTRhZTY5NzA1NWFkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85MzAxYjViZmM4ODg0Zjg2YWE2ZWNjYjA0Zjc5MDk0MS5zZXRDb250ZW50KGh0bWxfZjhiMTUwMjdhMTU0NDVmZjk3MDdhNGFlNjk3MDU1YWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzRlNWZjZDljY2RiNDE3OWE1OWE4Y2I5NDNjNzIwMDcuYmluZFBvcHVwKHBvcHVwXzkzMDFiNWJmYzg4ODRmODZhYTZlY2NiMDRmNzkwOTQxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxMjk5MTM5ZTQyMTQ1MjJiZDRlZjA0ODU0NzI3OTgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDg4NiwtMTE4LjMwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNjNiYWE2MDMyY2M0NTQ3YTViMTk5MTU2YWE1OTZhNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NWZhNGI4OGRkMTc0ODVkYWRhMGU1NGU2YzRjMTYxYyA9ICQoJzxkaXYgaWQ9Imh0bWxfODVmYTRiODhkZDE3NDg1ZGFkYTBlNTRlNmM0YzE2MWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI2M2JhYTYwMzJjYzQ1NDdhNWIxOTkxNTZhYTU5NmE2LnNldENvbnRlbnQoaHRtbF84NWZhNGI4OGRkMTc0ODVkYWRhMGU1NGU2YzRjMTYxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMTI5OTEzOWU0MjE0NTIyYmQ0ZWYwNDg1NDcyNzk4MC5iaW5kUG9wdXAocG9wdXBfMjYzYmFhNjAzMmNjNDU0N2E1YjE5OTE1NmFhNTk2YTYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDA2NGZlMmY4ZWQyNDY4ZTgxYzI5MWJhOTY3MzllYjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjUxLC0xMTguMjc2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk1MzllN2ZiN2RkNjQ0YjRhMWQ2NWEyYzM2ZGMzYzU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliYWMxNTRjMzcxNzRjZDY4ODRlYTNlYzMzYmJjZTc3ID0gJCgnPGRpdiBpZD0iaHRtbF85YmFjMTU0YzM3MTc0Y2Q2ODg0ZWEzZWMzM2JiY2U3NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTUzOWU3ZmI3ZGQ2NDRiNGExZDY1YTJjMzZkYzNjNTguc2V0Q29udGVudChodG1sXzliYWMxNTRjMzcxNzRjZDY4ODRlYTNlYzMzYmJjZTc3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAwNjRmZTJmOGVkMjQ2OGU4MWMyOTFiYTk2NzM5ZWIyLmJpbmRQb3B1cChwb3B1cF85NTM5ZTdmYjdkZDY0NGI0YTFkNjVhMmMzNmRjM2M1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNGMwMDYyNjNlNTY0NWFhYTk4ZWFmNzk0ZDRiMGE4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NjMsLTExOC4yNzIxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODQyODI3ZmZmZjgxNGJmMDlhYzY3Zjc5NTQxNzFmZjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTViOWU5MGY5MjAyNDczNmJhMDg2ZWExMzA5ZmI1MTEgPSAkKCc8ZGl2IGlkPSJodG1sXzE1YjllOTBmOTIwMjQ3MzZiYTA4NmVhMTMwOWZiNTExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NDI4MjdmZmZmODE0YmYwOWFjNjdmNzk1NDE3MWZmOS5zZXRDb250ZW50KGh0bWxfMTViOWU5MGY5MjAyNDczNmJhMDg2ZWExMzA5ZmI1MTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTRjMDA2MjYzZTU2NDVhYWE5OGVhZjc5NGQ0YjBhOGEuYmluZFBvcHVwKHBvcHVwXzg0MjgyN2ZmZmY4MTRiZjA5YWM2N2Y3OTU0MTcxZmY5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZjNmYxYjRhNWI1MDQ4YjE5OTI3YzFhMTNlYmFlNGZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDgwNSwtMTE4LjI3MDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMGRlODBlMjBkMmE0YzhkODNhNWRiZGE5NzI4ZmM3MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTBjNTRhOTQ2YjE0ZjQ4OWUwM2MxM2FkNTZmYWUxZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZTkwYzU0YTk0NmIxNGY0ODllMDNjMTNhZDU2ZmFlMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwZGU4MGUyMGQyYTRjOGQ4M2E1ZGJkYTk3MjhmYzcxLnNldENvbnRlbnQoaHRtbF9lOTBjNTRhOTQ2YjE0ZjQ4OWUwM2MxM2FkNTZmYWUxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mYzZmMWI0YTViNTA0OGIxOTkyN2MxYTEzZWJhZTRmZi5iaW5kUG9wdXAocG9wdXBfMzBkZTgwZTIwZDJhNGM4ZDgzYTVkYmRhOTcyOGZjNzEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWU3OTQ0Mjc5MGJjNDBhMjljZDhhNDA4NWQxYzFkYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjcxLC0xMTguMjcxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg5MGYxODgzZjI0NDRkMThhNzdlZDc5M2FmYTJjNDM0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRmNTQ3Yjc4YjRjMjRlM2Y5M2IyMTE3YzkxZGUzMzQ0ID0gJCgnPGRpdiBpZD0iaHRtbF80ZjU0N2I3OGI0YzI0ZTNmOTNiMjExN2M5MWRlMzM0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODkwZjE4ODNmMjQ0NGQxOGE3N2VkNzkzYWZhMmM0MzQuc2V0Q29udGVudChodG1sXzRmNTQ3Yjc4YjRjMjRlM2Y5M2IyMTE3YzkxZGUzMzQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlNzk0NDI3OTBiYzQwYTI5Y2Q4YTQwODVkMWMxZGJkLmJpbmRQb3B1cChwb3B1cF84OTBmMTg4M2YyNDQ0ZDE4YTc3ZWQ3OTNhZmEyYzQzNCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMThhNzlkMWEyNWY0YWZhOGM5YjhmZDY0MDJjOGZkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3MDMsLTExOC4yNjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYmRhNTQyYTkyMTU0ODA1ODhkODFiOGNmMTk1MjAxNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83YjFmODE4ZDMxNzQ0MGNjODAyMDRhNjQ1NWY0NzBlNyA9ICQoJzxkaXYgaWQ9Imh0bWxfN2IxZjgxOGQzMTc0NDBjYzgwMjA0YTY0NTVmNDcwZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiZGE1NDJhOTIxNTQ4MDU4OGQ4MWI4Y2YxOTUyMDE1LnNldENvbnRlbnQoaHRtbF83YjFmODE4ZDMxNzQ0MGNjODAyMDRhNjQ1NWY0NzBlNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMThhNzlkMWEyNWY0YWZhOGM5YjhmZDY0MDJjOGZkMC5iaW5kUG9wdXAocG9wdXBfY2JkYTU0MmE5MjE1NDgwNTg4ZDgxYjhjZjE5NTIwMTUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTNiNmQyN2Q4YzlhNGUyMTgzZjg3YzYzOTgxZWViNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDkxLC0xMTguMjgyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EwYjNjMTA3YmU4ZDRlZjVhZjg2ZDM0NjI0YmIyNjU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg2NWYxMmM1ZjM4ZDQyYTk5MTNlZTY2ZmQ5ODdiYTJiID0gJCgnPGRpdiBpZD0iaHRtbF84NjVmMTJjNWYzOGQ0MmE5OTEzZWU2NmZkOTg3YmEyYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTBiM2MxMDdiZThkNGVmNWFmODZkMzQ2MjRiYjI2NTguc2V0Q29udGVudChodG1sXzg2NWYxMmM1ZjM4ZDQyYTk5MTNlZTY2ZmQ5ODdiYTJiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2EzYjZkMjdkOGM5YTRlMjE4M2Y4N2M2Mzk4MWVlYjU3LmJpbmRQb3B1cChwb3B1cF9hMGIzYzEwN2JlOGQ0ZWY1YWY4NmQzNDYyNGJiMjY1OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MzRhMTNiOWE1NmM0NDQwYmE0YmE4OGFmMWUwYTg3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NjksLTExOC4yNzM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWVhMjAwMjJlNDEwNDFlZTk2ZGZlMTBmMTc0OTYwYjcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGFlZjM1NGZjZDE3NDc2YmI3YzdhZjBmYTFkMzUzZDUgPSAkKCc8ZGl2IGlkPSJodG1sXzhhZWYzNTRmY2QxNzQ3NmJiN2M3YWYwZmExZDM1M2Q1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ZWEyMDAyMmU0MTA0MWVlOTZkZmUxMGYxNzQ5NjBiNy5zZXRDb250ZW50KGh0bWxfOGFlZjM1NGZjZDE3NDc2YmI3YzdhZjBmYTFkMzUzZDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzM0YTEzYjlhNTZjNDQ0MGJhNGJhODhhZjFlMGE4NzguYmluZFBvcHVwKHBvcHVwXzVlYTIwMDIyZTQxMDQxZWU5NmRmZTEwZjE3NDk2MGI3KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FjMjc0YzkyM2Q3MDRhMjY5ZDlkMDM5MzQ1ZjFlZjMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDUwMywtMTE4LjI4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTc3OTA1NWNjMWU0ZDg2ODM0NDFiOTliODJmMDM5YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYmViYjJjYmU0YWU0ODQ3Yjk3ZTNkZWEzNDlmODMwZSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGJlYmIyY2JlNGFlNDg0N2I5N2UzZGVhMzQ5ZjgzMGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhNzc5MDU1Y2MxZTRkODY4MzQ0MWI5OWI4MmYwMzljLnNldENvbnRlbnQoaHRtbF9kYmViYjJjYmU0YWU0ODQ3Yjk3ZTNkZWEzNDlmODMwZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hYzI3NGM5MjNkNzA0YTI2OWQ5ZDAzOTM0NWYxZWYzMi5iaW5kUG9wdXAocG9wdXBfNWE3NzkwNTVjYzFlNGQ4NjgzNDQxYjk5YjgyZjAzOWMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NmMzhmMzNkY2E2NDhmZWEwNzU4NTM1ZWY1M2I5MWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNzM3LC0xMTguMjU3MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmZTc4OTk2OTEwZDRkNDM5YWE3MzIzOTE5MjI5NGZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwY2JlMjgxYWRhNjRkYTU5ZGVkOTU0YzVhYmM5MGVhID0gJCgnPGRpdiBpZD0iaHRtbF9jMGNiZTI4MWFkYTY0ZGE1OWRlZDk1NGM1YWJjOTBlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmZlNzg5OTY5MTBkNGQ0MzlhYTczMjM5MTkyMjk0ZmIuc2V0Q29udGVudChodG1sX2MwY2JlMjgxYWRhNjRkYTU5ZGVkOTU0YzVhYmM5MGVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjZjM4ZjMzZGNhNjQ4ZmVhMDc1ODUzNWVmNTNiOTFlLmJpbmRQb3B1cChwb3B1cF8yZmU3ODk5NjkxMGQ0ZDQzOWFhNzMyMzkxOTIyOTRmYik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iN2Q0OGQ0NDA1NWE0MTQ4YmQ0YmM1M2MwZjc3MWY4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3NjksLTExOC4yODI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDRlZGViZTAxMDlkNDdjNTg3OTQ1NGYyYWU1MTU3ZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2U4YmEwODM5OTRlNGNiODllZDBjOWU1Mjk4ODA4YTQgPSAkKCc8ZGl2IGlkPSJodG1sX2NlOGJhMDgzOTk0ZTRjYjg5ZWQwYzllNTI5ODgwOGE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NGVkZWJlMDEwOWQ0N2M1ODc5NDU0ZjJhZTUxNTdkOC5zZXRDb250ZW50KGh0bWxfY2U4YmEwODM5OTRlNGNiODllZDBjOWU1Mjk4ODA4YTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjdkNDhkNDQwNTVhNDE0OGJkNGJjNTNjMGY3NzFmOGEuYmluZFBvcHVwKHBvcHVwXzQ0ZWRlYmUwMTA5ZDQ3YzU4Nzk0NTRmMmFlNTE1N2Q4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0ZTIyZjAzMzQzZjQwY2I5NzI1YzMwNDc4MzVmYzFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYwOSwtMTE4LjI1ODZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iN2U5ZjEzNzc5OTc0YTY3YTdiMjhjYTM0MWNmYjFiYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTFlOTk4M2Y2YmM0NTBjOGM5OGU2NmVjZjNkMzNjOSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTkxZTk5ODNmNmJjNDUwYzhjOThlNjZlY2YzZDMzYzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3ZTlmMTM3Nzk5NzRhNjdhN2IyOGNhMzQxY2ZiMWJjLnNldENvbnRlbnQoaHRtbF85OTFlOTk4M2Y2YmM0NTBjOGM5OGU2NmVjZjNkMzNjOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNGUyMmYwMzM0M2Y0MGNiOTcyNWMzMDQ3ODM1ZmMxZS5iaW5kUG9wdXAocG9wdXBfYjdlOWYxMzc3OTk3NGE2N2E3YjI4Y2EzNDFjZmIxYmMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTM3ZTAxOTZlODM3NGMxNGI5N2UxZmFhZDBmYTNhOTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTczLC0xMTguMjY5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU3MzM3ZWVhY2JiNDQxOWFhZWU0NmRjZjhiN2QzYzAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0MjRlZjI0Y2U2MjQ3NTg5NTcwODZhNTlhMTk5NWQyID0gJCgnPGRpdiBpZD0iaHRtbF84NDI0ZWYyNGNlNjI0NzU4OTU3MDg2YTU5YTE5OTVkMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTczMzdlZWFjYmI0NDE5YWFlZTQ2ZGNmOGI3ZDNjMDEuc2V0Q29udGVudChodG1sXzg0MjRlZjI0Y2U2MjQ3NTg5NTcwODZhNTlhMTk5NWQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzN2UwMTk2ZTgzNzRjMTRiOTdlMWZhYWQwZmEzYTk1LmJpbmRQb3B1cChwb3B1cF81NzMzN2VlYWNiYjQ0MTlhYWVlNDZkY2Y4YjdkM2MwMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDI1ZDc1M2IyMzk0YmFkOGY0OGYyODNiOGIwM2NiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2OTEsLTExOC4yNjQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODM4OTU1MjgxYWYzNDZiY2IwNmU0NTY1ODdlOWI4YWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDlhYmYwMTZlMTZjNGZhOWIwNTMwNmExNmQ3MmI4M2QgPSAkKCc8ZGl2IGlkPSJodG1sXzA5YWJmMDE2ZTE2YzRmYTliMDUzMDZhMTZkNzJiODNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84Mzg5NTUyODFhZjM0NmJjYjA2ZTQ1NjU4N2U5YjhhZS5zZXRDb250ZW50KGh0bWxfMDlhYmYwMTZlMTZjNGZhOWIwNTMwNmExNmQ3MmI4M2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODAyNWQ3NTNiMjM5NGJhZDhmNDhmMjgzYjhiMDNjYjAuYmluZFBvcHVwKHBvcHVwXzgzODk1NTI4MWFmMzQ2YmNiMDZlNDU2NTg3ZTliOGFlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyOGIxZTE5YmVhNTQ3NmFhZjI5NzZiYjI3NDI1NmE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU5LC0xMTguMjczNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjYzMzNjQ3ZTkwYzRiZmU5ODIzYjFiN2Y4Nzc2MzE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkMmNkNmJiYTFkYzQzOWU5NzU1ZDY2ZjM4YzIyMmQ3ID0gJCgnPGRpdiBpZD0iaHRtbF85ZDJjZDZiYmExZGM0MzllOTc1NWQ2NmYzOGMyMjJkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGNjMzM2NDdlOTBjNGJmZTk4MjNiMWI3Zjg3NzYzMTcuc2V0Q29udGVudChodG1sXzlkMmNkNmJiYTFkYzQzOWU5NzU1ZDY2ZjM4YzIyMmQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIyOGIxZTE5YmVhNTQ3NmFhZjI5NzZiYjI3NDI1NmE5LmJpbmRQb3B1cChwb3B1cF80Y2MzMzY0N2U5MGM0YmZlOTgyM2IxYjdmODc3NjMxNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYWVmMDMyZDE4NGU0MTlmOGUzMjRlODA0ZWFkNWU1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1MzksLTExOC4yNzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDhiZTk3YzU0MzFlNDI1ZWE1NTk2OTQ3NDQ5NjUxZWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDAxZDg5YTFhYzUzNDM2NWFhYTNkZGY2NDc3NDY3NTcgPSAkKCc8ZGl2IGlkPSJodG1sXzAwMWQ4OWExYWM1MzQzNjVhYWEzZGRmNjQ3NzQ2NzU3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kOGJlOTdjNTQzMWU0MjVlYTU1OTY5NDc0NDk2NTFlYi5zZXRDb250ZW50KGh0bWxfMDAxZDg5YTFhYzUzNDM2NWFhYTNkZGY2NDc3NDY3NTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmFlZjAzMmQxODRlNDE5ZjhlMzI0ZTgwNGVhZDVlNWEuYmluZFBvcHVwKHBvcHVwX2Q4YmU5N2M1NDMxZTQyNWVhNTU5Njk0NzQ0OTY1MWViKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3ZjRjYjI2OTY4NzRjNzhhMTBlZGQwNzAxYjY4YTE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYwNSwtMTE4LjI4MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMWYzZGE1MzJkNmQ0MDQ1YjFmNDYxOWEwMWZkOTQwOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMGM5ZDYzZjI4YTk0YmNjODI4ZmU4ZjBhOWY0MGQyMiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDBjOWQ2M2YyOGE5NGJjYzgyOGZlOGYwYTlmNDBkMjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMxZjNkYTUzMmQ2ZDQwNDViMWY0NjE5YTAxZmQ5NDA5LnNldENvbnRlbnQoaHRtbF9kMGM5ZDYzZjI4YTk0YmNjODI4ZmU4ZjBhOWY0MGQyMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80N2Y0Y2IyNjk2ODc0Yzc4YTEwZWRkMDcwMWI2OGExNC5iaW5kUG9wdXAocG9wdXBfMzFmM2RhNTMyZDZkNDA0NWIxZjQ2MTlhMDFmZDk0MDkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDlkODVhNDBlNWI3NGJiYTljMDg2MzRiMjM4MWJhYjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjk5LC0xMTguMjc3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3ZTYzZWJiM2JiNjQ0MDViOTI5OTYyM2JkNWMxZTY3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIzMWMyNjE1MjYwNDQ1Zjk5OWE4NjllOTFmYzU0ODJkID0gJCgnPGRpdiBpZD0iaHRtbF8yMzFjMjYxNTI2MDQ0NWY5OTlhODY5ZTkxZmM1NDgyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDdlNjNlYmIzYmI2NDQwNWI5Mjk5NjIzYmQ1YzFlNjcuc2V0Q29udGVudChodG1sXzIzMWMyNjE1MjYwNDQ1Zjk5OWE4NjllOTFmYzU0ODJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5ZDg1YTQwZTViNzRiYmE5YzA4NjM0YjIzODFiYWI1LmJpbmRQb3B1cChwb3B1cF80N2U2M2ViYjNiYjY0NDA1YjkyOTk2MjNiZDVjMWU2Nyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOWRiNjRmODk4MTc0MzZmOGVmYjk3YmZhMjc1MjI0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NjIsLTExOC4yNzE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjc0NWMxMjk3MDJlNGRkZmI5MTI5NWJmMWU3OWE2YTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmE0OWFhZmVmNWMyNDg5NmFiODZmMTFmOTQ3MmQwMTYgPSAkKCc8ZGl2IGlkPSJodG1sXzZhNDlhYWZlZjVjMjQ4OTZhYjg2ZjExZjk0NzJkMDE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNzQ1YzEyOTcwMmU0ZGRmYjkxMjk1YmYxZTc5YTZhOC5zZXRDb250ZW50KGh0bWxfNmE0OWFhZmVmNWMyNDg5NmFiODZmMTFmOTQ3MmQwMTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjlkYjY0Zjg5ODE3NDM2ZjhlZmI5N2JmYTI3NTIyNDkuYmluZFBvcHVwKHBvcHVwXzI3NDVjMTI5NzAyZTRkZGZiOTEyOTViZjFlNzlhNmE4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkZGRiZThiY2MxMTRhMTE5NTlkZGRiOGRiMjgyNDNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYxLC0xMTguMjYxNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzNTk1OTRiYzE1MDQ1ZTY4ZGM5MzcwN2Q5YmZhZTI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhZDEyZDk5NmY4YjRlMjM5NDMyMGEyNjMzZjZlMjFmID0gJCgnPGRpdiBpZD0iaHRtbF9jYWQxMmQ5OTZmOGI0ZTIzOTQzMjBhMjYzM2Y2ZTIxZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDM1OTU5NGJjMTUwNDVlNjhkYzkzNzA3ZDliZmFlMjcuc2V0Q29udGVudChodG1sX2NhZDEyZDk5NmY4YjRlMjM5NDMyMGEyNjMzZjZlMjFmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFkZGRiZThiY2MxMTRhMTE5NTlkZGRiOGRiMjgyNDNlLmJpbmRQb3B1cChwb3B1cF9kMzU5NTk0YmMxNTA0NWU2OGRjOTM3MDdkOWJmYWUyNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDI3YzU3YzQyZDY0MzA2OGVkNzk1MTgwYmI2ZGFiMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1MjQsLTExOC4yODQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjZjODAwMzY3NjQwNDc1MjlmZjFiYjYxZDc4NDU0NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmFhZmI2M2U1ZDIzNGFhMzkwYmIzYjQwZmIzOTBjZjkgPSAkKCc8ZGl2IGlkPSJodG1sX2JhYWZiNjNlNWQyMzRhYTM5MGJiM2I0MGZiMzkwY2Y5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NmM4MDAzNjc2NDA0NzUyOWZmMWJiNjFkNzg0NTQ3OC5zZXRDb250ZW50KGh0bWxfYmFhZmI2M2U1ZDIzNGFhMzkwYmIzYjQwZmIzOTBjZjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDAyN2M1N2M0MmQ2NDMwNjhlZDc5NTE4MGJiNmRhYjAuYmluZFBvcHVwKHBvcHVwXzY2YzgwMDM2NzY0MDQ3NTI5ZmYxYmI2MWQ3ODQ1NDc4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzNzUwN2ZkYzJmZTRlOGI4OGI3NmYzNDM1MTIyMjk0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU3NCwtMTE4LjI3NDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNTBlODBlMjM3Y2U0MzU3YTQ4YjU5NWRkMTllY2IwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NzVjMWFlNzRhZjE0YjljOGIzMTdiODlmN2E3N2VlMCA9ICQoJzxkaXYgaWQ9Imh0bWxfNTc1YzFhZTc0YWYxNGI5YzhiMzE3Yjg5ZjdhNzdlZTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I1MGU4MGUyMzdjZTQzNTdhNDhiNTk1ZGQxOWVjYjAyLnNldENvbnRlbnQoaHRtbF81NzVjMWFlNzRhZjE0YjljOGIzMTdiODlmN2E3N2VlMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iMzc1MDdmZGMyZmU0ZThiODhiNzZmMzQzNTEyMjI5NC5iaW5kUG9wdXAocG9wdXBfYjUwZTgwZTIzN2NlNDM1N2E0OGI1OTVkZDE5ZWNiMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzVlYTc5OTQxMjUwNDQxYzlkMTVkY2EyYjgxYmRlYTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTM0LC0xMTguMjc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRiY2M3YzE3MTRlOTQxYjRhY2VkYWVlNzMyNDc1YmM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzMmFmYjY1M2ZhMTRhMTVhODY1OWZlZmZiMWYzNDBmID0gJCgnPGRpdiBpZD0iaHRtbF9mMzJhZmI2NTNmYTE0YTE1YTg2NTlmZWZmYjFmMzQwZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGJjYzdjMTcxNGU5NDFiNGFjZWRhZWU3MzI0NzViYzcuc2V0Q29udGVudChodG1sX2YzMmFmYjY1M2ZhMTRhMTVhODY1OWZlZmZiMWYzNDBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc1ZWE3OTk0MTI1MDQ0MWM5ZDE1ZGNhMmI4MWJkZWE2LmJpbmRQb3B1cChwb3B1cF80YmNjN2MxNzE0ZTk0MWI0YWNlZGFlZTczMjQ3NWJjNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjg3Y2UxMDQxMDU0Mjk4OWEwYzhiMjI1YjA2NzJmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1NjIsLTExOC4yNjk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVjOGNhYTM4YzYzNDcxOGI1ZTk4ZjJkZGI2ZDM1ZTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjQzODEyZmI0ZDI1NDFmYjgyOGU3ODI2YTY4ZmMwNjkgPSAkKCc8ZGl2IGlkPSJodG1sX2Y0MzgxMmZiNGQyNTQxZmI4MjhlNzgyNmE2OGZjMDY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mNWM4Y2FhMzhjNjM0NzE4YjVlOThmMmRkYjZkMzVlNS5zZXRDb250ZW50KGh0bWxfZjQzODEyZmI0ZDI1NDFmYjgyOGU3ODI2YTY4ZmMwNjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjY4N2NlMTA0MTA1NDI5ODlhMGM4YjIyNWIwNjcyZjEuYmluZFBvcHVwKHBvcHVwX2Y1YzhjYWEzOGM2MzQ3MThiNWU5OGYyZGRiNmQzNWU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3YzY5YWU2ZjFlNzQxNTY4ZGQwMmViNjY2NTQ2ZmZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDUyMywtMTE4LjI3MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YjE5ZDUzZjY0NzQ0YmRjYmI5ODU3OWQwM2MxOTQ4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iN2Y2ZDZhNDNiMjg0YjEyOTg3ZDc4N2U4M2VmMTI5ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYjdmNmQ2YTQzYjI4NGIxMjk4N2Q3ODdlODNlZjEyOWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiMTlkNTNmNjQ3NDRiZGNiYjk4NTc5ZDAzYzE5NDgwLnNldENvbnRlbnQoaHRtbF9iN2Y2ZDZhNDNiMjg0YjEyOTg3ZDc4N2U4M2VmMTI5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yN2M2OWFlNmYxZTc0MTU2OGRkMDJlYjY2NjU0NmZmYS5iaW5kUG9wdXAocG9wdXBfNmIxOWQ1M2Y2NDc0NGJkY2JiOTg1NzlkMDNjMTk0ODApOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ViYWVlNjFlMzJkNDIzZDgwY2YwNjUyNzVkYWQ4NjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNzIyLC0xMTguMjczOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1OTc2NDE2N2M1NTRkMzU4YTFjNGU5ZGZlYmIwZWI1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmYzQzMGRkN2FjMDRhMmE5YjY3NTI5OGQ1ZTNjZGMwID0gJCgnPGRpdiBpZD0iaHRtbF9mZmM0MzBkZDdhYzA0YTJhOWI2NzUyOThkNWUzY2RjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjU5NzY0MTY3YzU1NGQzNThhMWM0ZTlkZmViYjBlYjUuc2V0Q29udGVudChodG1sX2ZmYzQzMGRkN2FjMDRhMmE5YjY3NTI5OGQ1ZTNjZGMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNlYmFlZTYxZTMyZDQyM2Q4MGNmMDY1Mjc1ZGFkODY2LmJpbmRQb3B1cChwb3B1cF8yNTk3NjQxNjdjNTU0ZDM1OGExYzRlOWRmZWJiMGViNSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZWRhNzhmNGVhYzM0YjE2YjQ2NTU3ZTk4MWQxMjQwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NTYsLTExOC4yNzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjgzMzFjMzQ0ZWI0NGM4OWI2NGVmYTVmZGQ3OThjNTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmJkZjg5OTQ1MjQ4NGM1ZTgyMTQ5YWNmOWQxODBiZmIgPSAkKCc8ZGl2IGlkPSJodG1sX2JiZGY4OTk0NTI0ODRjNWU4MjE0OWFjZjlkMTgwYmZiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iODMzMWMzNDRlYjQ0Yzg5YjY0ZWZhNWZkZDc5OGM1OC5zZXRDb250ZW50KGh0bWxfYmJkZjg5OTQ1MjQ4NGM1ZTgyMTQ5YWNmOWQxODBiZmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2VkYTc4ZjRlYWMzNGIxNmI0NjU1N2U5ODFkMTI0MDguYmluZFBvcHVwKHBvcHVwX2I4MzMxYzM0NGViNDRjODliNjRlZmE1ZmRkNzk4YzU4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFjYjkwNGYyMjdjOTQ3MGI4ZjFjODE0OGQ2NmMxMTAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDcsLTExOC4yNjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDI0NTRjY2MzZGIyNGFkMmJiMGRjZThjNTkxNzZiMjIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGQyZmI0YWNkYzJkNGM3ZDkxNDkzMjAxYzMyNjdkODMgPSAkKCc8ZGl2IGlkPSJodG1sX2RkMmZiNGFjZGMyZDRjN2Q5MTQ5MzIwMWMzMjY3ZDgzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjQ1NGNjYzNkYjI0YWQyYmIwZGNlOGM1OTE3NmIyMi5zZXRDb250ZW50KGh0bWxfZGQyZmI0YWNkYzJkNGM3ZDkxNDkzMjAxYzMyNjdkODMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWNiOTA0ZjIyN2M5NDcwYjhmMWM4MTQ4ZDY2YzExMDIuYmluZFBvcHVwKHBvcHVwXzAyNDU0Y2NjM2RiMjRhZDJiYjBkY2U4YzU5MTc2YjIyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxYjljMWQyOGRjYjRjNWFiZGMxZjFlOWViMWZhMTQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU5NiwtMTE4LjI3NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NWFlMzM5Mjg3NzI0MjZmOTQ3YTY5MDllOGNhZDg4NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83MzE0ZGZmZGU0ZDg0MmZmYmJlM2Y4NWY1YzQ4YzNhNCA9ICQoJzxkaXYgaWQ9Imh0bWxfNzMxNGRmZmRlNGQ4NDJmZmJiZTNmODVmNWM0OGMzYTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ1YWUzMzkyODc3MjQyNmY5NDdhNjkwOWU4Y2FkODg2LnNldENvbnRlbnQoaHRtbF83MzE0ZGZmZGU0ZDg0MmZmYmJlM2Y4NWY1YzQ4YzNhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMWI5YzFkMjhkY2I0YzVhYmRjMWYxZTllYjFmYTE0NS5iaW5kUG9wdXAocG9wdXBfNDVhZTMzOTI4NzcyNDI2Zjk0N2E2OTA5ZThjYWQ4ODYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWY4ZGE2OTFiNmM5NDdkNzk0MjE4MGYzMjk4NWIyMGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjM0LC0xMTguMjYzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTI3ODhhNmEyYjJlNGIxNjliM2EwYTM4YTIxZTA3NTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTEzNWI2MmE4Zjg0NDA0MWIyODQwOTI5ZDcwOWE0NDIgPSAkKCc8ZGl2IGlkPSJodG1sX2ExMzViNjJhOGY4NDQwNDFiMjg0MDkyOWQ3MDlhNDQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMjc4OGE2YTJiMmU0YjE2OWIzYTBhMzhhMjFlMDc1NS5zZXRDb250ZW50KGh0bWxfYTEzNWI2MmE4Zjg0NDA0MWIyODQwOTI5ZDcwOWE0NDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMWY4ZGE2OTFiNmM5NDdkNzk0MjE4MGYzMjk4NWIyMGMuYmluZFBvcHVwKHBvcHVwXzEyNzg4YTZhMmIyZTRiMTY5YjNhMGEzOGEyMWUwNzU1KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyMDI2ZTUxMzllZDQ4Zjc5OGRmZmRhMTYzZDYwZmRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQ4MSwtMTE4LjI3NzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YTAyMGNlYTYwMmE0YzVkOTU3NWI1M2ZmMTczYzIwZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNDdkOTJhYmIwYTQ0ZDc4OGEwNTY4YWM2ZDNjNTI0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzQ3ZDkyYWJiMGE0NGQ3ODhhMDU2OGFjNmQzYzUyNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhMDIwY2VhNjAyYTRjNWQ5NTc1YjUzZmYxNzNjMjBlLnNldENvbnRlbnQoaHRtbF9jNDdkOTJhYmIwYTQ0ZDc4OGEwNTY4YWM2ZDNjNTI0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMjAyNmU1MTM5ZWQ0OGY3OThkZmZkYTE2M2Q2MGZkYy5iaW5kUG9wdXAocG9wdXBfNWEwMjBjZWE2MDJhNGM1ZDk1NzViNTNmZjE3M2MyMGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY1OTQ2MzkyMDgwNGRjYTg0NzM3ZjRmYjFjYTkxNzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNDcsLTExOC4yNzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFiNWE4YjE1ZmUxNDlhYzg2NjQ3MTNjMDAxMTY0ODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDI2MjNiZjFkYTIzNDYzM2E2NTI2Y2I5N2M0MDc0NWQgPSAkKCc8ZGl2IGlkPSJodG1sXzQyNjIzYmYxZGEyMzQ2MzNhNjUyNmNiOTdjNDA3NDVkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWI1YThiMTVmZTE0OWFjODY2NDcxM2MwMDExNjQ4Mi5zZXRDb250ZW50KGh0bWxfNDI2MjNiZjFkYTIzNDYzM2E2NTI2Y2I5N2M0MDc0NWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzY1OTQ2MzkyMDgwNGRjYTg0NzM3ZjRmYjFjYTkxNzguYmluZFBvcHVwKHBvcHVwX2ZhYjVhOGIxNWZlMTQ5YWM4NjY0NzEzYzAwMTE2NDgyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgzNTA4ZjkxZTE3NjRkNmZhZGZlNzAyMGM0Yzk5Y2YwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDY1NiwtMTE4LjI2NTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZDU0MTFmNTJkMTE0YzY4OGQxYjc1ODFiZmQ1N2M0YSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kNDRlZTMzZTZkNTE0MjFjYTI4NTM5MjJjZmJiYmM2NiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDQ0ZWUzM2U2ZDUxNDIxY2EyODUzOTIyY2ZiYmJjNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhkNTQxMWY1MmQxMTRjNjg4ZDFiNzU4MWJmZDU3YzRhLnNldENvbnRlbnQoaHRtbF9kNDRlZTMzZTZkNTE0MjFjYTI4NTM5MjJjZmJiYmM2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MzUwOGY5MWUxNzY0ZDZmYWRmZTcwMjBjNGM5OWNmMC5iaW5kUG9wdXAocG9wdXBfOGQ1NDExZjUyZDExNGM2ODhkMWI3NTgxYmZkNTdjNGEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjg2NGZmOTM0NzRkNDc1OTljODVlMTNhNTE3ZmYxZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjMsLTExOC4yNTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWZjN2Q5YTI1Zjc0NDg4NmFhYWViMGJjZDk0MWZiZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGFmMzI0NTM0ODY2NDA0YmE2MDk5NTA5ZDhjNTE3NGUgPSAkKCc8ZGl2IGlkPSJodG1sXzhhZjMyNDUzNDg2NjQwNGJhNjA5OTUwOWQ4YzUxNzRlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZmM3ZDlhMjVmNzQ0ODg2YWFhZWIwYmNkOTQxZmJmMy5zZXRDb250ZW50KGh0bWxfOGFmMzI0NTM0ODY2NDA0YmE2MDk5NTA5ZDhjNTE3NGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjg2NGZmOTM0NzRkNDc1OTljODVlMTNhNTE3ZmYxZTMuYmluZFBvcHVwKHBvcHVwXzlmYzdkOWEyNWY3NDQ4ODZhYWFlYjBiY2Q5NDFmYmYzKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAzOTk2NzgxMWE5YjQ3ZDZiNDlmM2VhZTJiYzFlMjg1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDYzNiwtMTE4LjI4MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzkyMWEwZTNmYmM0NjAyYjhjMjVjOTQ0Y2E3ZmM0ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZGYxYzA4OTU2ZTU0ZTNlOWJhOGQzZmE1NTEzOTVkMSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2RmMWMwODk1NmU1NGUzZTliYThkM2ZhNTUxMzk1ZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjOTIxYTBlM2ZiYzQ2MDJiOGMyNWM5NDRjYTdmYzRlLnNldENvbnRlbnQoaHRtbF83ZGYxYzA4OTU2ZTU0ZTNlOWJhOGQzZmE1NTEzOTVkMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMzk5Njc4MTFhOWI0N2Q2YjQ5ZjNlYWUyYmMxZTI4NS5iaW5kUG9wdXAocG9wdXBfN2M5MjFhMGUzZmJjNDYwMmI4YzI1Yzk0NGNhN2ZjNGUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2ZiYzA2YjIyN2M0NDM0NTgwNjkwOTAxZjc4OTAyNzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjIyLC0xMTguMjYwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc5YzVhYWVhNGI0MTQ5NmRhODMzMGQ0YWY3OWQ2MTYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M5N2VjYmY0Y2U1YjQ2NWRiZjE3ZTA0ZDk2ZmMxZDAzID0gJCgnPGRpdiBpZD0iaHRtbF9jOTdlY2JmNGNlNWI0NjVkYmYxN2UwNGQ5NmZjMWQwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzljNWFhZWE0YjQxNDk2ZGE4MzMwZDRhZjc5ZDYxNjAuc2V0Q29udGVudChodG1sX2M5N2VjYmY0Y2U1YjQ2NWRiZjE3ZTA0ZDk2ZmMxZDAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNmYmMwNmIyMjdjNDQzNDU4MDY5MDkwMWY3ODkwMjcxLmJpbmRQb3B1cChwb3B1cF83OWM1YWFlYTRiNDE0OTZkYTgzMzBkNGFmNzlkNjE2MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZjNhNWZhOWQ2ZmU0YTZhOTZjNzRjOTQ4NjJmYWI5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0MTgsLTExOC4yODQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzhhOTQ0YzcyMmVhNDBjMGIzZmM1ZWNhZGI3MWMzNGQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2Q1YjRjMjBiMGVmNGQ5NDhmMjE3MzdmMDhmNzQ2M2QgPSAkKCc8ZGl2IGlkPSJodG1sXzdkNWI0YzIwYjBlZjRkOTQ4ZjIxNzM3ZjA4Zjc0NjNkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOGE5NDRjNzIyZWE0MGMwYjNmYzVlY2FkYjcxYzM0ZC5zZXRDb250ZW50KGh0bWxfN2Q1YjRjMjBiMGVmNGQ5NDhmMjE3MzdmMDhmNzQ2M2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGYzYTVmYTlkNmZlNGE2YTk2Yzc0Yzk0ODYyZmFiOTYuYmluZFBvcHVwKHBvcHVwXzM4YTk0NGM3MjJlYTQwYzBiM2ZjNWVjYWRiNzFjMzRkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc4YzliMDhhZDQ5ODQ0YjBhZWVlZDlmOGJiYTIyOWE0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDQxOCwtMTE4LjI4NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81N2EzNGJjMDQ3MDg0ZWZhYTk0YjJjZjM2NGI5ODAyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzllMmM0MDc2NTQ0NzBlODQ2OWRkNzcwOWIxNWZjMSA9ICQoJzxkaXYgaWQ9Imh0bWxfMTM5ZTJjNDA3NjU0NDcwZTg0NjlkZDc3MDliMTVmYzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU3YTM0YmMwNDcwODRlZmFhOTRiMmNmMzY0Yjk4MDI0LnNldENvbnRlbnQoaHRtbF8xMzllMmM0MDc2NTQ0NzBlODQ2OWRkNzcwOWIxNWZjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OGM5YjA4YWQ0OTg0NGIwYWVlZWQ5ZjhiYmEyMjlhNC5iaW5kUG9wdXAocG9wdXBfNTdhMzRiYzA0NzA4NGVmYWE5NGIyY2YzNjRiOTgwMjQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDc4YjliNDhhZTJmNDU4ZWJlYzU2YzI1NTEwY2EwYTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNzg4LC0xMTguMjY4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIzZmIxNWQ5ODNkNDQ5ZmQ5NjQ1MjgzZGIzOTRkNzgwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JiOTU4OGY5MmM0NjQzY2RhMjNjNzdmMWI1OTU4MDI1ID0gJCgnPGRpdiBpZD0iaHRtbF9iYjk1ODhmOTJjNDY0M2NkYTIzYzc3ZjFiNTk1ODAyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjNmYjE1ZDk4M2Q0NDlmZDk2NDUyODNkYjM5NGQ3ODAuc2V0Q29udGVudChodG1sX2JiOTU4OGY5MmM0NjQzY2RhMjNjNzdmMWI1OTU4MDI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q3OGI5YjQ4YWUyZjQ1OGViZWM1NmMyNTUxMGNhMGEzLmJpbmRQb3B1cChwb3B1cF8yM2ZiMTVkOTgzZDQ0OWZkOTY0NTI4M2RiMzk0ZDc4MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWRiOTEzMWFmYmI0OGJhYjJjYmZkYjM1NjExNGQ1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3NjIsLTExOC4yNjEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDNjOGFhODlmZGZlNDc5YzlkMDRlYmRhNDg2OTVjNzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjJiMjgyNTBiZGY1NGMzNGI0Y2JmMWFkMDUyMWY5OGYgPSAkKCc8ZGl2IGlkPSJodG1sXzIyYjI4MjUwYmRmNTRjMzRiNGNiZjFhZDA1MjFmOThmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kM2M4YWE4OWZkZmU0NzljOWQwNGViZGE0ODY5NWM3NC5zZXRDb250ZW50KGh0bWxfMjJiMjgyNTBiZGY1NGMzNGI0Y2JmMWFkMDUyMWY5OGYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDlkYjkxMzFhZmJiNDhiYWIyY2JmZGIzNTYxMTRkNTAuYmluZFBvcHVwKHBvcHVwX2QzYzhhYTg5ZmRmZTQ3OWM5ZDA0ZWJkYTQ4Njk1Yzc0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NkMDQ0ZmZkYWVhYjQ5ODBiNjU3MDg4YTY4NTJhMTBiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU5NCwtMTE4LjI4MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNWY3OTkzMTBkMTI0Y2E2YTE2MTQ2ZjVlODFlZTkxNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDIxNDBmMTZmOTA0Mjg0YWQ5ODJiYWViZTA0ODE0YyA9ICQoJzxkaXYgaWQ9Imh0bWxfZGQyMTQwZjE2ZjkwNDI4NGFkOTgyYmFlYmUwNDgxNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U1Zjc5OTMxMGQxMjRjYTZhMTYxNDZmNWU4MWVlOTE3LnNldENvbnRlbnQoaHRtbF9kZDIxNDBmMTZmOTA0Mjg0YWQ5ODJiYWViZTA0ODE0Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZDA0NGZmZGFlYWI0OTgwYjY1NzA4OGE2ODUyYTEwYi5iaW5kUG9wdXAocG9wdXBfZTVmNzk5MzEwZDEyNGNhNmExNjE0NmY1ZTgxZWU5MTcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjZjNzQxMWZmYjgyNDY4Mjk2YTAwYjVhMDM3ZjczNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjA3LC0xMTguMjcyNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NjNWMyNjU3N2U4MTRhMGE5YTM3YjljMTE5MWYwYjVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzU0OTBjNDIyODNlMDRjMDY4YzVjMjhmNTI2M2RmMzg1ID0gJCgnPGRpdiBpZD0iaHRtbF81NDkwYzQyMjgzZTA0YzA2OGM1YzI4ZjUyNjNkZjM4NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2M1YzI2NTc3ZTgxNGEwYTlhMzdiOWMxMTkxZjBiNWEuc2V0Q29udGVudChodG1sXzU0OTBjNDIyODNlMDRjMDY4YzVjMjhmNTI2M2RmMzg1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2Yzc0MTFmZmI4MjQ2ODI5NmEwMGI1YTAzN2Y3MzZiLmJpbmRQb3B1cChwb3B1cF9jYzVjMjY1NzdlODE0YTBhOWEzN2I5YzExOTFmMGI1YSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xM2NjMjcyOGM3ZDE0MmI1YWJjNTZjM2M2YTQ1YmQ4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3MDMsLTExOC4yNzg2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODIzMjY5ZDM4YjYyNGU0NDgzYjFiNDY3NTlmOThiNzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmYzMWNiMWViMjQ1NDJlMmFhYjEwOTc2YTdiYjZiNjIgPSAkKCc8ZGl2IGlkPSJodG1sX2ZmMzFjYjFlYjI0NTQyZTJhYWIxMDk3NmE3YmI2YjYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjMyNjlkMzhiNjI0ZTQ0ODNiMWI0Njc1OWY5OGI3MC5zZXRDb250ZW50KGh0bWxfZmYzMWNiMWViMjQ1NDJlMmFhYjEwOTc2YTdiYjZiNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTNjYzI3MjhjN2QxNDJiNWFiYzU2YzNjNmE0NWJkODcuYmluZFBvcHVwKHBvcHVwXzgyMzI2OWQzOGI2MjRlNDQ4M2IxYjQ2NzU5Zjk4YjcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4OGM1YTU5MmMwNzRmYTJiYzU3MzNjMjcwZDliNWZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDY5OCwtMTE4LjI1MjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzk5YWU5ZGU1MTM0MzA0ODZiYmJhOGVkYTdlN2NjZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NTM3NmUyMTFiMjA0NjFiOWIxY2E3OGEyODNiMzk1OCA9ICQoJzxkaXYgaWQ9Imh0bWxfODUzNzZlMjExYjIwNDYxYjliMWNhNzhhMjgzYjM5NTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzOTlhZTlkZTUxMzQzMDQ4NmJiYmE4ZWRhN2U3Y2NlLnNldENvbnRlbnQoaHRtbF84NTM3NmUyMTFiMjA0NjFiOWIxY2E3OGEyODNiMzk1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ODhjNWE1OTJjMDc0ZmEyYmM1NzMzYzI3MGQ5YjVmZi5iaW5kUG9wdXAocG9wdXBfZTM5OWFlOWRlNTEzNDMwNDg2YmJiYThlZGE3ZTdjY2UpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzJjZDAxNzkyZTljNGJhNGE0MGI4MDE5YmM5N2IwODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjEzLC0xMTguMjczOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U0NzE2YTYxNTU5ZDQxYTc5YTQ4NjFhZWI5Y2RmNTQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I2OTEwYWZlMWZlMDQ0ODdiY2QwNTI2NWIwNTNlYmZkID0gJCgnPGRpdiBpZD0iaHRtbF9iNjkxMGFmZTFmZTA0NDg3YmNkMDUyNjViMDUzZWJmZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQ3MTZhNjE1NTlkNDFhNzlhNDg2MWFlYjljZGY1NDguc2V0Q29udGVudChodG1sX2I2OTEwYWZlMWZlMDQ0ODdiY2QwNTI2NWIwNTNlYmZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MyY2QwMTc5MmU5YzRiYTRhNDBiODAxOWJjOTdiMDg3LmJpbmRQb3B1cChwb3B1cF9lNDcxNmE2MTU1OWQ0MWE3OWE0ODYxYWViOWNkZjU0OCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMGVjOWM3OTc0MzI0MWJmYTJkYjkyOWJhZjI0YTYyZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzOTYsLTExOC4yODA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTIwMTVjYzNiZmVlNGI3N2I1NjA0MmFiOWRlNTQ2NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGJjM2VlMWU1MzczNGMwNDk1NGY1ODE5ZGExMTc0MDAgPSAkKCc8ZGl2IGlkPSJodG1sXzBiYzNlZTFlNTM3MzRjMDQ5NTRmNTgxOWRhMTE3NDAwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81MjAxNWNjM2JmZWU0Yjc3YjU2MDQyYWI5ZGU1NDY3MC5zZXRDb250ZW50KGh0bWxfMGJjM2VlMWU1MzczNGMwNDk1NGY1ODE5ZGExMTc0MDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjBlYzljNzk3NDMyNDFiZmEyZGI5MjliYWYyNGE2MmYuYmluZFBvcHVwKHBvcHVwXzUyMDE1Y2MzYmZlZTRiNzdiNTYwNDJhYjlkZTU0NjcwKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QxYTExYTc3Njg0YTQwN2U5YjYzMjMyOTk2M2VkYjBmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDM5NiwtMTE4LjI4MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMWY3ODA3OWY1Mzc0NDNkOGZiYWNkY2U2YmQxMmRlZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDRhMmI0NjEyOTQ0OGIwODU4Y2UwYjQ4YTJiMmE4OSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2Q0YTJiNDYxMjk0NDhiMDg1OGNlMGI0OGEyYjJhODkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MxZjc4MDc5ZjUzNzQ0M2Q4ZmJhY2RjZTZiZDEyZGVkLnNldENvbnRlbnQoaHRtbF83ZDRhMmI0NjEyOTQ0OGIwODU4Y2UwYjQ4YTJiMmE4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMWExMWE3NzY4NGE0MDdlOWI2MzIzMjk5NjNlZGIwZi5iaW5kUG9wdXAocG9wdXBfYzFmNzgwNzlmNTM3NDQzZDhmYmFjZGNlNmJkMTJkZWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTg4NGQ1OWE4NzdlNGI0OTlmNTY5ZWFkZGU3NWQzN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wODAyLC0xMTguMjgzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RkOTA1N2RlNTY1ZTQyOTRiMTUzYmUyNzNiOGI1OGIyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IyYmY4ODAyYjJiMTQ3YTBhYzYyNDc4OWMyMjE0NmRiID0gJCgnPGRpdiBpZD0iaHRtbF9iMmJmODgwMmIyYjE0N2EwYWM2MjQ3ODljMjIxNDZkYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ5MDU3ZGU1NjVlNDI5NGIxNTNiZTI3M2I4YjU4YjIuc2V0Q29udGVudChodG1sX2IyYmY4ODAyYjJiMTQ3YTBhYzYyNDc4OWMyMjE0NmRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE4ODRkNTlhODc3ZTRiNDk5ZjU2OWVhZGRlNzVkMzdlLmJpbmRQb3B1cChwb3B1cF9kZDkwNTdkZTU2NWU0Mjk0YjE1M2JlMjczYjhiNThiMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjA1OWYwZWVkMzI0YmE4ODlmOTkyMTgzMzg2ZDJlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA0NSwtMTE4LjI4MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MTgwYzc2MWM1MTE0MTcwYjg1OWJiNzc0ZmJmNmMxNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZTlhYTYyZDNkZTI0YTgyYmQ0MDFlMjEzOTY4NmE5OCA9ICQoJzxkaXYgaWQ9Imh0bWxfNWU5YWE2MmQzZGUyNGE4MmJkNDAxZTIxMzk2ODZhOTgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYxODBjNzYxYzUxMTQxNzBiODU5YmI3NzRmYmY2YzE0LnNldENvbnRlbnQoaHRtbF81ZTlhYTYyZDNkZTI0YTgyYmQ0MDFlMjEzOTY4NmE5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNjA1OWYwZWVkMzI0YmE4ODlmOTkyMTgzMzg2ZDJlMi5iaW5kUG9wdXAocG9wdXBfNjE4MGM3NjFjNTExNDE3MGI4NTliYjc3NGZiZjZjMTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTc4Njk0NmIxMGU4NGU1M2IxMDA1ZTNmMTNkZjkwNDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjczLC0xMTguMjYwN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzNzE0ZTBiOGRiNTRhYWY4NDJiMjExZTc4MmU4MTkwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzMGRhMTViZTQ2YTQ1NTk4OTNmN2VhMGYzNTJiODk4ID0gJCgnPGRpdiBpZD0iaHRtbF9iMzBkYTE1YmU0NmE0NTU5ODkzZjdlYTBmMzUyYjg5OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTM3MTRlMGI4ZGI1NGFhZjg0MmIyMTFlNzgyZTgxOTAuc2V0Q29udGVudChodG1sX2IzMGRhMTViZTQ2YTQ1NTk4OTNmN2VhMGYzNTJiODk4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3ODY5NDZiMTBlODRlNTNiMTAwNWUzZjEzZGY5MDQwLmJpbmRQb3B1cChwb3B1cF9lMzcxNGUwYjhkYjU0YWFmODQyYjIxMWU3ODJlODE5MCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wY2Y5YzViNTBjZDY0M2Y3OTQ3YmEzYTM2NWUzMGU1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2NjcsLTExOC4yNzAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjI4MWE0ZTQ3YTI0NDJiYmFmOGY4ZmEwYjZmMmNmNmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGMzMDI5Zjk3ZmFmNDg3ZjhiZjVlNDU4M2M2ODcyNzggPSAkKCc8ZGl2IGlkPSJodG1sX2RjMzAyOWY5N2ZhZjQ4N2Y4YmY1ZTQ1ODNjNjg3Mjc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMjgxYTRlNDdhMjQ0MmJiYWY4ZjhmYTBiNmYyY2Y2YS5zZXRDb250ZW50KGh0bWxfZGMzMDI5Zjk3ZmFmNDg3ZjhiZjVlNDU4M2M2ODcyNzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGNmOWM1YjUwY2Q2NDNmNzk0N2JhM2EzNjVlMzBlNWIuYmluZFBvcHVwKHBvcHVwX2IyODFhNGU0N2EyNDQyYmJhZjhmOGZhMGI2ZjJjZjZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVlNGE0MjVhMDhkNDQzMWQ4Mjg3MWRjOWNlZjI2NWM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU0NCwtMTE4LjI3NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDE1MWYwOTgwODQ0MWIzOTYzZWIwMTYzMmJlZDJkZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTk0OTMwYzAyZWU0NGM5YWEyMWY0OWNmMzU4MGM1ZSA9ICQoJzxkaXYgaWQ9Imh0bWxfYzk5NDkzMGMwMmVlNDRjOWFhMjFmNDljZjM1ODBjNWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwMTUxZjA5ODA4NDQxYjM5NjNlYjAxNjMyYmVkMmRmLnNldENvbnRlbnQoaHRtbF9jOTk0OTMwYzAyZWU0NGM5YWEyMWY0OWNmMzU4MGM1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ZTRhNDI1YTA4ZDQ0MzFkODI4NzFkYzljZWYyNjVjNS5iaW5kUG9wdXAocG9wdXBfMDAxNTFmMDk4MDg0NDFiMzk2M2ViMDE2MzJiZWQyZGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRlYmRkMzJkMmQyNGI5OTlhM2NlM2Q4ZmFlODg0OTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNTU0LC0xMTguMjc0NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2NmVlZDkwNzhlZDQxODhiZDUxOTkwMWRlMGZkOWI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJmMGE3NmExOWY5OTQ2ZWJiZDBkYzA4ODljZjg2MDg0ID0gJCgnPGRpdiBpZD0iaHRtbF8yZjBhNzZhMTlmOTk0NmViYmQwZGMwODg5Y2Y4NjA4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjY2ZWVkOTA3OGVkNDE4OGJkNTE5OTAxZGUwZmQ5YjYuc2V0Q29udGVudChodG1sXzJmMGE3NmExOWY5OTQ2ZWJiZDBkYzA4ODljZjg2MDg0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0ZWJkZDMyZDJkMjRiOTk5YTNjZTNkOGZhZTg4NDk0LmJpbmRQb3B1cChwb3B1cF9iNjZlZWQ5MDc4ZWQ0MTg4YmQ1MTk5MDFkZTBmZDliNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NzVlOThiOTRmNWU0MjZhYjUwZDA1MWFjNzZkY2NiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA2NzcsLTExOC4yNjI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmMyOTVjMmNjODQxNDI5NWJkOWFmMTE2NjQ0NjNlZGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmMzZGU4YjI2NDVlNDMyZThjMDE4OGVkMzllM2FhMTUgPSAkKCc8ZGl2IGlkPSJodG1sXzZjM2RlOGIyNjQ1ZTQzMmU4YzAxODhlZDM5ZTNhYTE1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYzI5NWMyY2M4NDE0Mjk1YmQ5YWYxMTY2NDQ2M2VkYi5zZXRDb250ZW50KGh0bWxfNmMzZGU4YjI2NDVlNDMyZThjMDE4OGVkMzllM2FhMTUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTc1ZTk4Yjk0ZjVlNDI2YWI1MGQwNTFhYzc2ZGNjYjQuYmluZFBvcHVwKHBvcHVwX2ZjMjk1YzJjYzg0MTQyOTViZDlhZjExNjY0NDYzZWRiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3ZjVlYWI0Yzc5OTQxZmQ5NWMxZjkyYTA5OGU5MTYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU2MiwtMTE4LjI3MTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMThmMmJiYTZkNGQ0NDRmYWQyOGViMGYyYzI5MjE4ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzZmOWFjMjc3YzQ0MTU3YjFlNDM2NjJiY2VlMTEwYyA9ICQoJzxkaXYgaWQ9Imh0bWxfYzc2ZjlhYzI3N2M0NDE1N2IxZTQzNjYyYmNlZTExMGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzExOGYyYmJhNmQ0ZDQ0NGZhZDI4ZWIwZjJjMjkyMThmLnNldENvbnRlbnQoaHRtbF9jNzZmOWFjMjc3YzQ0MTU3YjFlNDM2NjJiY2VlMTEwYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jN2Y1ZWFiNGM3OTk0MWZkOTVjMWY5MmEwOThlOTE2MS5iaW5kUG9wdXAocG9wdXBfMTE4ZjJiYmE2ZDRkNDQ0ZmFkMjhlYjBmMmMyOTIxOGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODA4NzdmY2JkZTBkNDMyMWI0ZTdhYTQ5ZGRjZjVkMDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wNjkxLC0xMTguMjc0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFkYTQ0MGZhYzlkNDQxNDE5NWU5ZTcwZWUyODE1YzU2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxMjdkZDVlODE1MjQyYjRiYjBmZWZlOTAzMGNlNjE4ID0gJCgnPGRpdiBpZD0iaHRtbF8yMTI3ZGQ1ZTgxNTI0MmI0YmIwZmVmZTkwMzBjZTYxOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+UmFtcGFydDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWRhNDQwZmFjOWQ0NDE0MTk1ZTllNzBlZTI4MTVjNTYuc2V0Q29udGVudChodG1sXzIxMjdkZDVlODE1MjQyYjRiYjBmZWZlOTAzMGNlNjE4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzgwODc3ZmNiZGUwZDQzMjFiNGU3YWE0OWRkY2Y1ZDA4LmJpbmRQb3B1cChwb3B1cF8xZGE0NDBmYWM5ZDQ0MTQxOTVlOWU3MGVlMjgxNWM1Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOTFmMzdiYzVmY2Y0YjIwODM1NGJiZGJhNWRjMDFmZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA3NjgsLTExOC4yODY4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjMzMDVmYTdhZDBiNGNkYzhkZGUzNGU1ZWVhYjM0MmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWY1MWRhZTVmOWYyNDQyNGE4NTQ5ZDdmZDNhZmZiYTAgPSAkKCc8ZGl2IGlkPSJodG1sXzVmNTFkYWU1ZjlmMjQ0MjRhODU0OWQ3ZmQzYWZmYmEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMzMwNWZhN2FkMGI0Y2RjOGRkZTM0ZTVlZWFiMzQyZC5zZXRDb250ZW50KGh0bWxfNWY1MWRhZTVmOWYyNDQyNGE4NTQ5ZDdmZDNhZmZiYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDkxZjM3YmM1ZmNmNGIyMDgzNTRiYmRiYTVkYzAxZmYuYmluZFBvcHVwKHBvcHVwX2IzMzA1ZmE3YWQwYjRjZGM4ZGRlMzRlNWVlYWIzNDJkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyNjZjZjE1MTdmYzQwYzk5MjkyYzgxYzAxNDM3MTMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDU3OSwtMTE4LjI1NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTgwZjJkMjJjNmY0NDcxODE2Zjc1MjhiODZkYjY3OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNTk4NDg4ZGM4Y2Y0NDZiOWRmZjljNjNkMjQ3YmMwNCA9ICQoJzxkaXYgaWQ9Imh0bWxfZjU5ODQ4OGRjOGNmNDQ2YjlkZmY5YzYzZDI0N2JjMDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlJhbXBhcnQ8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVlODBmMmQyMmM2ZjQ0NzE4MTZmNzUyOGI4NmRiNjc5LnNldENvbnRlbnQoaHRtbF9mNTk4NDg4ZGM4Y2Y0NDZiOWRmZjljNjNkMjQ3YmMwNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MjY2Y2YxNTE3ZmM0MGM5OTI5MmM4MWMwMTQzNzEzMS5iaW5kUG9wdXAocG9wdXBfNWU4MGYyZDIyYzZmNDQ3MTgxNmY3NTI4Yjg2ZGI2NzkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmZmZmQ4ODdiYWM1NGI4Njk1OGJjZWEzYzI2ZmYwMzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjc4LC0xMTguMzM3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwZjBhNjVkNmNiYTRkYmZhN2I3ZjhjYTcxMzMyNWM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc0ZDI2NmUyNjgyMTQ4NDU4ZDA1MDY0MzU3Yjk1MGY3ID0gJCgnPGRpdiBpZD0iaHRtbF83NGQyNjZlMjY4MjE0ODQ1OGQwNTA2NDM1N2I5NTBmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMGYwYTY1ZDZjYmE0ZGJmYTdiN2Y4Y2E3MTMzMjVjOC5zZXRDb250ZW50KGh0bWxfNzRkMjY2ZTI2ODIxNDg0NThkMDUwNjQzNTdiOTUwZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmZmZmQ4ODdiYWM1NGI4Njk1OGJjZWEzYzI2ZmYwMzkuYmluZFBvcHVwKHBvcHVwX2QwZjBhNjVkNmNiYTRkYmZhN2I3ZjhjYTcxMzMyNWM4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NjY2Q3OTI0YmJjNzRlYTFiN2VjOTNjN2MyYzJkYWQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE3MywtMTE4LjM1MzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZjg1NzI5MWZjOWM0ODEwODZmMjFiNTA1ZTg3NDc0NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNGI5MTliYWZmNzU0YzYyOTljNDNkMjE4ZDBlOThlOSA9ICQoJzxkaXYgaWQ9Imh0bWxfMzRiOTE5YmFmZjc1NGM2Mjk5YzQzZDIxOGQwZTk4ZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmY4NTcyOTFmYzljNDgxMDg2ZjIxYjUwNWU4NzQ3NDUuc2V0Q29udGVudChodG1sXzM0YjkxOWJhZmY3NTRjNjI5OWM0M2QyMThkMGU5OGU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NjY2Q3OTI0YmJjNzRlYTFiN2VjOTNjN2MyYzJkYWQ4LmJpbmRQb3B1cChwb3B1cF9iZjg1NzI5MWZjOWM0ODEwODZmMjFiNTA1ZTg3NDc0NSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzFjZTNmZTMwN2M0YzczOTU5MWRjZDAyM2MyNTEyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzMDUsLTExOC4zNjE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2IxYWVmNGJlM2MzNDg1NDkyZmU5NjkxYzQ2Yjg1NGYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTM4MzRkM2IzYjhmNDRiNTgwYzkzNjhlNDRlMTFlYmEgPSAkKCc8ZGl2IGlkPSJodG1sXzEzODM0ZDNiM2I4ZjQ0YjU4MGM5MzY4ZTQ0ZTExZWJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NiMWFlZjRiZTNjMzQ4NTQ5MmZlOTY5MWM0NmI4NTRmLnNldENvbnRlbnQoaHRtbF8xMzgzNGQzYjNiOGY0NGI1ODBjOTM2OGU0NGUxMWViYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NzFjZTNmZTMwN2M0YzczOTU5MWRjZDAyM2MyNTEyYS5iaW5kUG9wdXAocG9wdXBfY2IxYWVmNGJlM2MzNDg1NDkyZmU5NjkxYzQ2Yjg1NGYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWU2ZTk3MGE3NTE1NDE5M2I3ZTQ3OTc3N2FhYzZlOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTgyLC0xMTguMzM0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzliZjZhYzU5MTBlYTRlMTRhYmUzNzk3MTAxMTlmYjRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNhNDg4ZTU4NGVlZjRkZmFiZDk5NDIwNzBhY2EwMGRkID0gJCgnPGRpdiBpZD0iaHRtbF8zYTQ4OGU1ODRlZWY0ZGZhYmQ5OTQyMDcwYWNhMDBkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YmY2YWM1OTEwZWE0ZTE0YWJlMzc5NzEwMTE5ZmI0Zi5zZXRDb250ZW50KGh0bWxfM2E0ODhlNTg0ZWVmNGRmYWJkOTk0MjA3MGFjYTAwZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWU2ZTk3MGE3NTE1NDE5M2I3ZTQ3OTc3N2FhYzZlOWUuYmluZFBvcHVwKHBvcHVwXzliZjZhYzU5MTBlYTRlMTRhYmUzNzk3MTAxMTlmYjRmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ3YjI4YWVmZDcyNTRlMGZiM2U4ZjBmMzNiMmMyNTNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDMyMiwtMTE4LjMwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjAyNmVkZGI2MTU0MWNmOTc5MWJjZGZhMWE2YjVkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zODA5OGVkYWY1NTU0YWI3OTIzNTdmMDAxMWU1YjhkYyA9ICQoJzxkaXYgaWQ9Imh0bWxfMzgwOThlZGFmNTU1NGFiNzkyMzU3ZjAwMTFlNWI4ZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTYwMjZlZGRiNjE1NDFjZjk3OTFiY2RmYTFhNmI1ZDcuc2V0Q29udGVudChodG1sXzM4MDk4ZWRhZjU1NTRhYjc5MjM1N2YwMDExZTViOGRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ3YjI4YWVmZDcyNTRlMGZiM2U4ZjBmMzNiMmMyNTNmLmJpbmRQb3B1cChwb3B1cF8xNjAyNmVkZGI2MTU0MWNmOTc5MWJjZGZhMWE2YjVkNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDQwZGI2NjExYTE0NTE4YjZkOWRmOGI1ODY5OTM0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjA1MjQsLTExOC4yNjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTNkZDBkNzJmMDIxNDIxZTgxOTM4ZTRkZTkwZGRlNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjQwZjEzZTEzMTc0NGI2M2E4MTJkYTdlYWFlOTVmZGQgPSAkKCc8ZGl2IGlkPSJodG1sXzY0MGYxM2UxMzE3NDRiNjNhODEyZGE3ZWFhZTk1ZmRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5SYW1wYXJ0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xM2RkMGQ3MmYwMjE0MjFlODE5MzhlNGRlOTBkZGU0YS5zZXRDb250ZW50KGh0bWxfNjQwZjEzZTEzMTc0NGI2M2E4MTJkYTdlYWFlOTVmZGQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTA0MGRiNjYxMWExNDUxOGI2ZDlkZjhiNTg2OTkzNDYuYmluZFBvcHVwKHBvcHVwXzEzZGQwZDcyZjAyMTQyMWU4MTkzOGU0ZGU5MGRkZTRhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkMjcxNGE4MjE5MjQwNjVhN2NjNmZlNDgzN2I0ZGRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDIyMiwtMTE4LjMyMjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYjQ5NjQ4OTVmOWM0YTQ4YTNhZWFjYzYwNTk3OThmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZDM3NGUxNmZlMzI0YTYxODljYTljYWVkNGUyOTZkNSA9ICQoJzxkaXYgaWQ9Imh0bWxfN2QzNzRlMTZmZTMyNGE2MTg5Y2E5Y2FlZDRlMjk2ZDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGI0OTY0ODk1ZjljNGE0OGEzYWVhY2M2MDU5Nzk4ZjEuc2V0Q29udGVudChodG1sXzdkMzc0ZTE2ZmUzMjRhNjE4OWNhOWNhZWQ0ZTI5NmQ1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkMjcxNGE4MjE5MjQwNjVhN2NjNmZlNDgzN2I0ZGRmLmJpbmRQb3B1cChwb3B1cF9kYjQ5NjQ4OTVmOWM0YTQ4YTNhZWFjYzYwNTk3OThmMSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzg3ZjFhM2RmODY0ODM1OWZiZmE2NzMxNjgzMjM1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAyNzksLTExOC4zNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kY2MyN2RiNjA3ZWE0MzdkYTRmYTNiNmViMDc4ODc3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNDk5ZmFlZWZlOWU0MTU1OTM2NTNjMTI5YjcyMGY3ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMjQ5OWZhZWVmZTllNDE1NTkzNjUzYzEyOWI3MjBmN2QiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNjMjdkYjYwN2VhNDM3ZGE0ZmEzYjZlYjA3ODg3N2Uuc2V0Q29udGVudChodG1sXzI0OTlmYWVlZmU5ZTQxNTU5MzY1M2MxMjliNzIwZjdkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA3ODdmMWEzZGY4NjQ4MzU5ZmJmYTY3MzE2ODMyMzU4LmJpbmRQb3B1cChwb3B1cF9kY2MyN2RiNjA3ZWE0MzdkYTRmYTNiNmViMDc4ODc3ZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OWFlNTUyYWM1M2Q0N2JmODIxNDA2MjQ2NWI4YzQyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxNDUsLTExOC4zMDQ1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjU3OGI1NTc4NmI0NDk5MzhmYmU4YzZlNDlkMzhmZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODIxMjAwMTIwMjBlNDkzMGI1N2RiZmJmYjE5M2Q1MGIgPSAkKCc8ZGl2IGlkPSJodG1sXzgyMTIwMDEyMDIwZTQ5MzBiNTdkYmZiZmIxOTNkNTBiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzI1NzhiNTU3ODZiNDQ5OTM4ZmJlOGM2ZTQ5ZDM4ZmZhLnNldENvbnRlbnQoaHRtbF84MjEyMDAxMjAyMGU0OTMwYjU3ZGJmYmZiMTkzZDUwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OWFlNTUyYWM1M2Q0N2JmODIxNDA2MjQ2NWI4YzQyMC5iaW5kUG9wdXAocG9wdXBfMjU3OGI1NTc4NmI0NDk5MzhmYmU4YzZlNDlkMzhmZmEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmE2NzEyNDc0NTU3NGNkNThlYWE4NjljODFmYmUwODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjE0LC0xMTguMzQ4Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhMGFiMzY3OWU0YjQ3YzI5MTIyNGY0Yzg1ZTU1OTMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2I0YThiNTE2MzVkNzRmZTc4OTI3ZThiY2UzMjA3ZDBhID0gJCgnPGRpdiBpZD0iaHRtbF9iNGE4YjUxNjM1ZDc0ZmU3ODkyN2U4YmNlMzIwN2QwYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTBhYjM2NzllNGI0N2MyOTEyMjRmNGM4NWU1NTkzMi5zZXRDb250ZW50KGh0bWxfYjRhOGI1MTYzNWQ3NGZlNzg5MjdlOGJjZTMyMDdkMGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmE2NzEyNDc0NTU3NGNkNThlYWE4NjljODFmYmUwODguYmluZFBvcHVwKHBvcHVwXzRhMGFiMzY3OWU0YjQ3YzI5MTIyNGY0Yzg1ZTU1OTMyKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY1OWJkM2ZlNjA1MzRmZDM5MWFlMjQ4YTE0NTcwZjliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMCwtMTE4LjMyNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNzc1NjQwYjNmNzc0YTFjYmJhZTI1OTU5NmJmNDdiNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hODAzNzJmM2VmMTM0ZmRhODFhMjg0YTEyOWI5OTk3ZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYTgwMzcyZjNlZjEzNGZkYTgxYTI4NGExMjliOTk5N2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzc3NTY0MGIzZjc3NGExY2JiYWUyNTk1OTZiZjQ3Yjcuc2V0Q29udGVudChodG1sX2E4MDM3MmYzZWYxMzRmZGE4MWEyODRhMTI5Yjk5OTdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY1OWJkM2ZlNjA1MzRmZDM5MWFlMjQ4YTE0NTcwZjliLmJpbmRQb3B1cChwb3B1cF8zNzc1NjQwYjNmNzc0YTFjYmJhZTI1OTU5NmJmNDdiNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWRhNjZiODkxOTE0NmVkODM2ZmU5MDAyZGNhNzU3YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzMTcsLTExOC4yNzY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFjNDE1MWE2ZTA3NDYxMTk3ZTQ1ZWExYTQxMTAyYzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNThmYWM3YjA3MjYzNDM0YmJkOTNkMzJkMTQ3ODZmNDUgPSAkKCc8ZGl2IGlkPSJodG1sXzU4ZmFjN2IwNzI2MzQzNGJiZDkzZDMyZDE0Nzg2ZjQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhYzQxNTFhNmUwNzQ2MTE5N2U0NWVhMWE0MTEwMmM2LnNldENvbnRlbnQoaHRtbF81OGZhYzdiMDcyNjM0MzRiYmQ5M2QzMmQxNDc4NmY0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OWRhNjZiODkxOTE0NmVkODM2ZmU5MDAyZGNhNzU3Yi5iaW5kUG9wdXAocG9wdXBfZmFjNDE1MWE2ZTA3NDYxMTk3ZTQ1ZWExYTQxMTAyYzYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjk1NmJmNWVhNDkwNGZlNmE5ODM3MTQ5OGFiOTU2MGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjM3LC0xMTguMzExOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBjMWRiYWI4YmY3ODRhZGFiYzI5OTgwNzg4N2VmNjc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNjNDAxZDVhNTdmMTRlMWJiNDlmMGY4ODI0MzJjZTg2ID0gJCgnPGRpdiBpZD0iaHRtbF8zYzQwMWQ1YTU3ZjE0ZTFiYjQ5ZjBmODgyNDMyY2U4NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYzFkYmFiOGJmNzg0YWRhYmMyOTk4MDc4ODdlZjY3OS5zZXRDb250ZW50KGh0bWxfM2M0MDFkNWE1N2YxNGUxYmI0OWYwZjg4MjQzMmNlODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjk1NmJmNWVhNDkwNGZlNmE5ODM3MTQ5OGFiOTU2MGQuYmluZFBvcHVwKHBvcHVwXzBjMWRiYWI4YmY3ODRhZGFiYzI5OTgwNzg4N2VmNjc5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MzM2JjNjI0OTg1MjRiOTlhM2Y2N2U3ODU2YTNjZDUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDMyNSwtMTE4LjM2MDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODJiY2E0ZDdjYzk0ZTlhOGU3YmQ1OGE0ODA2NmYyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYzkwMWRjODM5MDA0MmZjODc5MzgxYzQ1ZGJmZDJkMCA9ICQoJzxkaXYgaWQ9Imh0bWxfMWM5MDFkYzgzOTAwNDJmYzg3OTM4MWM0NWRiZmQyZDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjgyYmNhNGQ3Y2M5NGU5YThlN2JkNThhNDgwNjZmMmUuc2V0Q29udGVudChodG1sXzFjOTAxZGM4MzkwMDQyZmM4NzkzODFjNDVkYmZkMmQwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MzM2JjNjI0OTg1MjRiOTlhM2Y2N2U3ODU2YTNjZDUwLmJpbmRQb3B1cChwb3B1cF8yODJiY2E0ZDdjYzk0ZTlhOGU3YmQ1OGE0ODA2NmYyZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84N2JjYWIyNjljYzA0OTk1OWYzMDViZDczZWNlN2M0OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAyNzIsLTExOC4zNTM3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzI5ZDJlMTkxNDllNGFhNmFiOTIxY2YxM2I5NGU4MTQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWM2YTljY2Q5MWRmNDljNzg3ZDZhOWU0Y2UzNzlmOWQgPSAkKCc8ZGl2IGlkPSJodG1sX2VjNmE5Y2NkOTFkZjQ5Yzc4N2Q2YTllNGNlMzc5ZjlkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcyOWQyZTE5MTQ5ZTRhYTZhYjkyMWNmMTNiOTRlODE0LnNldENvbnRlbnQoaHRtbF9lYzZhOWNjZDkxZGY0OWM3ODdkNmE5ZTRjZTM3OWY5ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84N2JjYWIyNjljYzA0OTk1OWYzMDViZDczZWNlN2M0OS5iaW5kUG9wdXAocG9wdXBfNzI5ZDJlMTkxNDllNGFhNmFiOTIxY2YxM2I5NGU4MTQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODFkZjAzOWJjMTA2NGY2ZGI1MjdlY2YwNmEyYTk5YWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTI2LC0xMTguMzQwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U4ODdmODNlNDljYjRjNTc5NmI4MThiMDBmMDViOWJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhYjQxZGY3MGM2NDRjNzRiYjVkMmE1OGEyNzRhNjliID0gJCgnPGRpdiBpZD0iaHRtbF9jYWI0MWRmNzBjNjQ0Yzc0YmI1ZDJhNThhMjc0YTY5YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lODg3ZjgzZTQ5Y2I0YzU3OTZiODE4YjAwZjA1YjliZS5zZXRDb250ZW50KGh0bWxfY2FiNDFkZjcwYzY0NGM3NGJiNWQyYTU4YTI3NGE2OWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODFkZjAzOWJjMTA2NGY2ZGI1MjdlY2YwNmEyYTk5YWMuYmluZFBvcHVwKHBvcHVwX2U4ODdmODNlNDljYjRjNTc5NmI4MThiMDBmMDViOWJlKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg3OGZjOTJiYmNiNTRmN2Y4MTMyYzVhNDk1ZmFkMDc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDExOSwtMTE4LjMxNTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOWZhZmE3ZmJhNTg0ODI1OTI5NzdmOTUxNzZlYWY0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wN2E1YzUwMzIwNTE0MTQ3YWI0MzEzMWMzYTM0OGI5ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfMDdhNWM1MDMyMDUxNDE0N2FiNDMxMzFjM2EzNDhiOWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzlmYWZhN2ZiYTU4NDgyNTkyOTc3Zjk1MTc2ZWFmNGMuc2V0Q29udGVudChodG1sXzA3YTVjNTAzMjA1MTQxNDdhYjQzMTMxYzNhMzQ4YjlkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg3OGZjOTJiYmNiNTRmN2Y4MTMyYzVhNDk1ZmFkMDc4LmJpbmRQb3B1cChwb3B1cF9jOWZhZmE3ZmJhNTg0ODI1OTI5NzdmOTUxNzZlYWY0Yyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzcyMzdhMmZiZmM0NWY2OWQ4MzFlOTI5NDZhOGY0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxMSwtMTE4LjMzNTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jZDFmZTg4NTdiM2E0YTE3ODdkMDRiZWVkOTY4ZmMxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NjNhN2EyNDk4N2E0MjkyYjBlZGJlNjcyYTM2MzI5MSA9ICQoJzxkaXYgaWQ9Imh0bWxfODYzYTdhMjQ5ODdhNDI5MmIwZWRiZTY3MmEzNjMyOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2QxZmU4ODU3YjNhNGExNzg3ZDA0YmVlZDk2OGZjMWMuc2V0Q29udGVudChodG1sXzg2M2E3YTI0OTg3YTQyOTJiMGVkYmU2NzJhMzYzMjkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZjNzIzN2EyZmJmYzQ1ZjY5ZDgzMWU5Mjk0NmE4ZjRhLmJpbmRQb3B1cChwb3B1cF9jZDFmZTg4NTdiM2E0YTE3ODdkMDRiZWVkOTY4ZmMxYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODFiOWZjNzExODE0N2Y3OWVhODAxNWNiNDczYzIwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzMzcsLTExOC4zMDAzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2Q2NDliNTc2NmM3NDJlMWI2ZDM2Y2U2ZGNhYWM4YmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQ1MTk3MWI1OWZiNDg1N2I5NjdiMjkxN2ZhNDA5OTEgPSAkKCc8ZGl2IGlkPSJodG1sXzU0NTE5NzFiNTlmYjQ4NTdiOTY3YjI5MTdmYTQwOTkxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNkNjQ5YjU3NjZjNzQyZTFiNmQzNmNlNmRjYWFjOGJmLnNldENvbnRlbnQoaHRtbF81NDUxOTcxYjU5ZmI0ODU3Yjk2N2IyOTE3ZmE0MDk5MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ODFiOWZjNzExODE0N2Y3OWVhODAxNWNiNDczYzIwZi5iaW5kUG9wdXAocG9wdXBfM2Q2NDliNTc2NmM3NDJlMWI2ZDM2Y2U2ZGNhYWM4YmYpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzBkNjBmMTcxNmIxNDgwNmFmZDVlOTUyMzI3YTlmMDAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTgzLC0xMTguMzU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc2N2UxZWY3ZjkyZDQyZGY4ZDkxN2RmYTRlNzYzZTY4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMmUxNWIzODdkOTQ0MjI4MzM5ZTlmNmFiZTc4OGEyID0gJCgnPGRpdiBpZD0iaHRtbF9mZjJlMTViMzg3ZDk0NDIyODMzOWU5ZjZhYmU3ODhhMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NjdlMWVmN2Y5MmQ0MmRmOGQ5MTdkZmE0ZTc2M2U2OC5zZXRDb250ZW50KGh0bWxfZmYyZTE1YjM4N2Q5NDQyMjgzMzllOWY2YWJlNzg4YTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzBkNjBmMTcxNmIxNDgwNmFmZDVlOTUyMzI3YTlmMDAuYmluZFBvcHVwKHBvcHVwXzc2N2UxZWY3ZjkyZDQyZGY4ZDkxN2RmYTRlNzYzZTY4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I1ODA4OGNmNzc3YTRhMzliY2U3OGEzNGNjZjgyYzE1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI3MywtMTE4LjM2MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NGY4YjA0N2Q5NmE0ZTNkOWU1ZDY5MTg3YzFiN2VjZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZGFlNzE5NTI2NmI0ZmY0ODZhYTk4OGU1YTYxN2EwNiA9ICQoJzxkaXYgaWQ9Imh0bWxfMGRhZTcxOTUyNjZiNGZmNDg2YWE5ODhlNWE2MTdhMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjRmOGIwNDdkOTZhNGUzZDllNWQ2OTE4N2MxYjdlY2Uuc2V0Q29udGVudChodG1sXzBkYWU3MTk1MjY2YjRmZjQ4NmFhOTg4ZTVhNjE3YTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I1ODA4OGNmNzc3YTRhMzliY2U3OGEzNGNjZjgyYzE1LmJpbmRQb3B1cChwb3B1cF82NGY4YjA0N2Q5NmE0ZTNkOWU1ZDY5MTg3YzFiN2VjZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yODE1YzdiZDc5Yzg0MzgxYTMwMWUzMmE1OTcyOWI2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxMSwtMTE4LjMzNTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84ZjIxMDkzMGRjOTI0YjA5YWQ2OGY2ZDc4YzgzNDJkNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTRlOGU3OTg3NTc0MjRjOTY3NDg0ZGZlZjJmY2U1OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWE0ZThlNzk4NzU3NDI0Yzk2NzQ4NGRmZWYyZmNlNTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGYyMTA5MzBkYzkyNGIwOWFkNjhmNmQ3OGM4MzQyZDcuc2V0Q29udGVudChodG1sXzVhNGU4ZTc5ODc1NzQyNGM5Njc0ODRkZmVmMmZjZTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4MTVjN2JkNzljODQzODFhMzAxZTMyYTU5NzI5YjY3LmJpbmRQb3B1cChwb3B1cF84ZjIxMDkzMGRjOTI0YjA5YWQ2OGY2ZDc4YzgzNDJkNyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZWZkNzk0NWY3YTU0NDMzYmFjN2I4ODEwNDJkZjgyZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAyNDIsLTExOC4zNzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjFjMDliNDFiNjY3NGZhZWJjZjk1MGEwMDBlYzk1NWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDhhMGQ3YTQyNDIyNDg0ODkwOTUzMWU3MGM4ZjI4NzQgPSAkKCc8ZGl2IGlkPSJodG1sXzA4YTBkN2E0MjQyMjQ4NDg5MDk1MzFlNzBjOGYyODc0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YxYzA5YjQxYjY2NzRmYWViY2Y5NTBhMDAwZWM5NTVkLnNldENvbnRlbnQoaHRtbF8wOGEwZDdhNDI0MjI0ODQ4OTA5NTMxZTcwYzhmMjg3NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82ZWZkNzk0NWY3YTU0NDMzYmFjN2I4ODEwNDJkZjgyZS5iaW5kUG9wdXAocG9wdXBfZjFjMDliNDFiNjY3NGZhZWJjZjk1MGEwMDBlYzk1NWQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGY5YjJhNGIyZGIyNDRiMGI1MDNjN2RlZjE2MDMyOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTY0LC0xMTguMzMxMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlMmUyYTM1YzUwNjQxZGQ5ZGEwNmI5YzIxNTdiNjQ5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkMjNkNWRiMTU1OTQwYWNiNzY2M2E5MzdmMjU1MDc3ID0gJCgnPGRpdiBpZD0iaHRtbF9jZDIzZDVkYjE1NTk0MGFjYjc2NjNhOTM3ZjI1NTA3NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZTJlMmEzNWM1MDY0MWRkOWRhMDZiOWMyMTU3YjY0OS5zZXRDb250ZW50KGh0bWxfY2QyM2Q1ZGIxNTU5NDBhY2I3NjYzYTkzN2YyNTUwNzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGY5YjJhNGIyZGIyNDRiMGI1MDNjN2RlZjE2MDMyOTcuYmluZFBvcHVwKHBvcHVwXzhlMmUyYTM1YzUwNjQxZGQ5ZGEwNmI5YzIxNTdiNjQ5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViOTRjZWM5MzllOTQzMjliOGQxZDg0ZTI1ZDgwYmY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDA4MywtMTE4LjM1MzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzRjYjg3OGQwY2U0MjhjOTIxMmIzYzg5Zjk1YzMwZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTBkYWZlZDdlODQ0ZTQ3ODdkMTdiMDZkNTk1NTRkYSA9ICQoJzxkaXYgaWQ9Imh0bWxfMWEwZGFmZWQ3ZTg0NGU0Nzg3ZDE3YjA2ZDU5NTU0ZGEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDc0Y2I4NzhkMGNlNDI4YzkyMTJiM2M4OWY5NWMzMGYuc2V0Q29udGVudChodG1sXzFhMGRhZmVkN2U4NDRlNDc4N2QxN2IwNmQ1OTU1NGRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViOTRjZWM5MzllOTQzMjliOGQxZDg0ZTI1ZDgwYmY5LmJpbmRQb3B1cChwb3B1cF9kNzRjYjg3OGQwY2U0MjhjOTIxMmIzYzg5Zjk1YzMwZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjM0NTU4NzQ4NTg0MWNlODE2MDc4NGIxMzYzODFlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxODMsLTExOC4zMTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGI1MTA3MDZjNTQ5NDdlNmJkMDQwZDBiMTY3MDMwOTEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMWNiMzMzZTY4NTc0NDRhN2E3MGFkZWEzMWZjNDEwYjUgPSAkKCc8ZGl2IGlkPSJodG1sXzFjYjMzM2U2ODU3NDQ0YTdhNzBhZGVhMzFmYzQxMGI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRiNTEwNzA2YzU0OTQ3ZTZiZDA0MGQwYjE2NzAzMDkxLnNldENvbnRlbnQoaHRtbF8xY2IzMzNlNjg1NzQ0NGE3YTcwYWRlYTMxZmM0MTBiNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjM0NTU4NzQ4NTg0MWNlODE2MDc4NGIxMzYzODFlMi5iaW5kUG9wdXAocG9wdXBfNGI1MTA3MDZjNTQ5NDdlNmJkMDQwZDBiMTY3MDMwOTEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjA1ODVmMTU5NmJhNDYyYWJkNzQyZTBmMTc5MzA3NzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjU2LC0xMTguMzI3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI2OTAyZmI2NmU0OTQ1OGY4Y2VhNDNiNTZhNGM2NGE0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyMDk3MjBiYWM5MjQ3MDhiNDVlMjFmMmVkNjU2MjllID0gJCgnPGRpdiBpZD0iaHRtbF9hMjA5NzIwYmFjOTI0NzA4YjQ1ZTIxZjJlZDY1NjI5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNjkwMmZiNjZlNDk0NThmOGNlYTQzYjU2YTRjNjRhNC5zZXRDb250ZW50KGh0bWxfYTIwOTcyMGJhYzkyNDcwOGI0NWUyMWYyZWQ2NTYyOWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjA1ODVmMTU5NmJhNDYyYWJkNzQyZTBmMTc5MzA3NzIuYmluZFBvcHVwKHBvcHVwXzI2OTAyZmI2NmU0OTQ1OGY4Y2VhNDNiNTZhNGM2NGE0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ0MzJhMDE2MTQ1YzRkYzBhNjk2MDgxZDM5Nzk2MGE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDM1OSwtMTE4LjI3NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hYTRkNWQ4MzY0ZmE0NjgxOGIxYzQzOWQ1YzRjNzkzZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZGIyNTdkMTJlZjg0MmZjYmRhYTM4Y2NjYTBlYzk2ZCA9ICQoJzxkaXYgaWQ9Imh0bWxfYWRiMjU3ZDEyZWY4NDJmY2JkYWEzOGNjY2EwZWM5NmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWE0ZDVkODM2NGZhNDY4MThiMWM0MzlkNWM0Yzc5M2Uuc2V0Q29udGVudChodG1sX2FkYjI1N2QxMmVmODQyZmNiZGFhMzhjY2NhMGVjOTZkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ0MzJhMDE2MTQ1YzRkYzBhNjk2MDgxZDM5Nzk2MGE4LmJpbmRQb3B1cChwb3B1cF9hYTRkNWQ4MzY0ZmE0NjgxOGIxYzQzOWQ1YzRjNzkzZSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOWU3MjQwYWQwY2M0YjU2OGRhMTU3ZTE2OWUwMzgxNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxMjQsLTExOC4zMzUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTRjYzhlYmIwZmIyNGY1ZWFmZGI4NmRjNTQ0YTNiZDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjZjMTY3MDYxZmExNDg2Y2E1OTlkYzc3ZTk2Nzg2MzMgPSAkKCc8ZGl2IGlkPSJodG1sX2Y2YzE2NzA2MWZhMTQ4NmNhNTk5ZGM3N2U5Njc4NjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E0Y2M4ZWJiMGZiMjRmNWVhZmRiODZkYzU0NGEzYmQzLnNldENvbnRlbnQoaHRtbF9mNmMxNjcwNjFmYTE0ODZjYTU5OWRjNzdlOTY3ODYzMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iOWU3MjQwYWQwY2M0YjU2OGRhMTU3ZTE2OWUwMzgxNC5iaW5kUG9wdXAocG9wdXBfYTRjYzhlYmIwZmIyNGY1ZWFmZGI4NmRjNTQ0YTNiZDMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODFjNDE3MjYyMDQ0NGRjZmE2ZjRkYWEzZjRhODdhYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMDg3LC0xMTguMjg1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzcwYTliYjBiYTBmMjQ3ZWU5ZDUxMjRjZDY2ZTkyMDZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyYWZmOWJkMzkwOTRmOWZiN2VlMzc0ZDQxNTQ3NTZkID0gJCgnPGRpdiBpZD0iaHRtbF9hMmFmZjliZDM5MDk0ZjlmYjdlZTM3NGQ0MTU0NzU2ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MGE5YmIwYmEwZjI0N2VlOWQ1MTI0Y2Q2NmU5MjA2YS5zZXRDb250ZW50KGh0bWxfYTJhZmY5YmQzOTA5NGY5ZmI3ZWUzNzRkNDE1NDc1NmQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODFjNDE3MjYyMDQ0NGRjZmE2ZjRkYWEzZjRhODdhYzYuYmluZFBvcHVwKHBvcHVwXzcwYTliYjBiYTBmMjQ3ZWU5ZDUxMjRjZDY2ZTkyMDZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkyZWIzZTE1NWUxODQ4ZmJhNjRmOTEzMjA3N2NmYmUyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE2MywtMTE4LjM1MDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDdkNGVjZTNkODk0NjQ5OTQzZjI4MWFlZjFkYmViMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iMjAyOTlmZjBhZmI0YWY3YTA3YWFhZWMxZGZlZWEyZiA9ICQoJzxkaXYgaWQ9Imh0bWxfYjIwMjk5ZmYwYWZiNGFmN2EwN2FhYWVjMWRmZWVhMmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDQ3ZDRlY2UzZDg5NDY0OTk0M2YyODFhZWYxZGJlYjMuc2V0Q29udGVudChodG1sX2IyMDI5OWZmMGFmYjRhZjdhMDdhYWFlYzFkZmVlYTJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkyZWIzZTE1NWUxODQ4ZmJhNjRmOTEzMjA3N2NmYmUyLmJpbmRQb3B1cChwb3B1cF80NDdkNGVjZTNkODk0NjQ5OTQzZjI4MWFlZjFkYmViMyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjUxN2FlY2YzOTI0YjUwYjcwYjBhMDE0YTY2YWE2MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwOTEsLTExOC4yOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMTE4MjEzZWQ4YmQ0NTdjOWNhZTYwMmY5NmM1MzFmMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YTg0YzVjMDZkNjI0NWVkYTZhYzQxYmJjMzU1ODU0OSA9ICQoJzxkaXYgaWQ9Imh0bWxfNWE4NGM1YzA2ZDYyNDVlZGE2YWM0MWJiYzM1NTg1NDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTExODIxM2VkOGJkNDU3YzljYWU2MDJmOTZjNTMxZjAuc2V0Q29udGVudChodG1sXzVhODRjNWMwNmQ2MjQ1ZWRhNmFjNDFiYmMzNTU4NTQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhiNTE3YWVjZjM5MjRiNTBiNzBiMGEwMTRhNjZhYTYwLmJpbmRQb3B1cChwb3B1cF8xMTE4MjEzZWQ4YmQ0NTdjOWNhZTYwMmY5NmM1MzFmMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDhiZTU2ZjEyMzk0ZTA4YjE0ZDYxOGNlNWQ4MjFkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAyMDksLTExOC4zNDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTNmYzkyYTNlNDUyNGQ3ODg3ZjRkNTQzOTcxZGE1NjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTEzZDVmNDdmZjJjNGQxYjk0ZGJlYjdkZTdhZWVkYzggPSAkKCc8ZGl2IGlkPSJodG1sXzkxM2Q1ZjQ3ZmYyYzRkMWI5NGRiZWI3ZGU3YWVlZGM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUzZmM5MmEzZTQ1MjRkNzg4N2Y0ZDU0Mzk3MWRhNTY5LnNldENvbnRlbnQoaHRtbF85MTNkNWY0N2ZmMmM0ZDFiOTRkYmViN2RlN2FlZWRjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MDhiZTU2ZjEyMzk0ZTA4YjE0ZDYxOGNlNWQ4MjFkYy5iaW5kUG9wdXAocG9wdXBfNTNmYzkyYTNlNDUyNGQ3ODg3ZjRkNTQzOTcxZGE1NjkpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTBhMGEzNDRhZTNjNDNjZmI5NGMzYTE1YTJiZDYxZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjM1LC0xMTguMjg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ExZjJkYzNhMzU2MzQ4OWY4OWExMGU4ODU5NzFjZTZhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EzMGZlNzdlYjI5ZTQ5YWViNGNjZmRiZTU3NmJhNmIxID0gJCgnPGRpdiBpZD0iaHRtbF9hMzBmZTc3ZWIyOWU0OWFlYjRjY2ZkYmU1NzZiYTZiMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMWYyZGMzYTM1NjM0ODlmODlhMTBlODg1OTcxY2U2YS5zZXRDb250ZW50KGh0bWxfYTMwZmU3N2ViMjllNDlhZWI0Y2NmZGJlNTc2YmE2YjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTBhMGEzNDRhZTNjNDNjZmI5NGMzYTE1YTJiZDYxZDYuYmluZFBvcHVwKHBvcHVwX2ExZjJkYzNhMzU2MzQ4OWY4OWExMGU4ODU5NzFjZTZhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyY2RkZmQyZDExMDRkMzBiNTI0MGRkNDMxMTZlOTkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDIzNSwtMTE4LjI4NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTNlNmNmODQ5OTk0YTAxYjcxNTQ5ZWFjMTljYzI0NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2Y4YTBlNjQ0ZTU0ODAxYmM0OTgzNmQ4NjFmNTMzMSA9ICQoJzxkaXYgaWQ9Imh0bWxfOWNmOGEwZTY0NGU1NDgwMWJjNDk4MzZkODYxZjUzMzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTkzZTZjZjg0OTk5NGEwMWI3MTU0OWVhYzE5Y2MyNDYuc2V0Q29udGVudChodG1sXzljZjhhMGU2NDRlNTQ4MDFiYzQ5ODM2ZDg2MWY1MzMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YyY2RkZmQyZDExMDRkMzBiNTI0MGRkNDMxMTZlOTkyLmJpbmRQb3B1cChwb3B1cF85OTNlNmNmODQ5OTk0YTAxYjcxNTQ5ZWFjMTljYzI0Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTc3N2U0YThkZTE0MzBhOTg4NWVlZmVkZWVjZDI5NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxNDEsLTExOC4yOTc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmJmYWM5YzRlNmQyNDZhNThjMTA3NWU2ZjVlMDNjODIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQxNjU2MWRhYzg4NGQxMzhjYjJlYTViZTI3YTUwNTggPSAkKCc8ZGl2IGlkPSJodG1sXzU0MTY1NjFkYWM4ODRkMTM4Y2IyZWE1YmUyN2E1MDU4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiZmFjOWM0ZTZkMjQ2YTU4YzEwNzVlNmY1ZTAzYzgyLnNldENvbnRlbnQoaHRtbF81NDE2NTYxZGFjODg0ZDEzOGNiMmVhNWJlMjdhNTA1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9iOTc3N2U0YThkZTE0MzBhOTg4NWVlZmVkZWVjZDI5NC5iaW5kUG9wdXAocG9wdXBfNmJmYWM5YzRlNmQyNDZhNThjMTA3NWU2ZjVlMDNjODIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGY1Y2FlYmUxNzZlNDg2Yjg3ZTc3N2I5ZDgyNmEzNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjY4LC0xMTguMjg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEwODgxOTQxODFkODRhZTdiNGE1YmM5N2U3ZDFjNGE5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UyM2NiMTcxMTIzMzRlYjhiZWRjYWVhYTM1YmM5OTMwID0gJCgnPGRpdiBpZD0iaHRtbF9lMjNjYjE3MTEyMzM0ZWI4YmVkY2FlYWEzNWJjOTkzMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMDg4MTk0MTgxZDg0YWU3YjRhNWJjOTdlN2QxYzRhOS5zZXRDb250ZW50KGh0bWxfZTIzY2IxNzExMjMzNGViOGJlZGNhZWFhMzViYzk5MzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGY1Y2FlYmUxNzZlNDg2Yjg3ZTc3N2I5ZDgyNmEzNGUuYmluZFBvcHVwKHBvcHVwXzEwODgxOTQxODFkODRhZTdiNGE1YmM5N2U3ZDFjNGE5KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBmMTRhY2NjMWViODQ2M2JiNTAyNTIyNmQ1YTIxYTNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDIxNywtMTE4LjM3MjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NDg4ZWQ2ZTAzZmQ0M2JmOGQxZGRlNTQ5NDQ1YzFhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNDk2NWI3MDhlYTI0OTllOTYwZWYzMjc2NDQzZjAxYiA9ICQoJzxkaXYgaWQ9Imh0bWxfMzQ5NjViNzA4ZWEyNDk5ZTk2MGVmMzI3NjQ0M2YwMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQ4OGVkNmUwM2ZkNDNiZjhkMWRkZTU0OTQ0NWMxYWMuc2V0Q29udGVudChodG1sXzM0OTY1YjcwOGVhMjQ5OWU5NjBlZjMyNzY0NDNmMDFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBmMTRhY2NjMWViODQ2M2JiNTAyNTIyNmQ1YTIxYTNhLmJpbmRQb3B1cChwb3B1cF82NDg4ZWQ2ZTAzZmQ0M2JmOGQxZGRlNTQ5NDQ1YzFhYyk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMDAzYTczYzhjNWI0ZmQwYWRkN2Y5ZjBhOTUxODViOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxOTksLTExOC4zNTU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDMzNWZjNTMwNTVmNDcyZmFjM2NmOWMxNDE2M2VkZDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQxY2VhMzkyNTBhNGFjNGJjMmRlN2VmNzlhMDJlNDYgPSAkKCc8ZGl2IGlkPSJodG1sX2Q0MWNlYTM5MjUwYTRhYzRiYzJkZTdlZjc5YTAyZTQ2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQzMzVmYzUzMDU1ZjQ3MmZhYzNjZjljMTQxNjNlZGQ4LnNldENvbnRlbnQoaHRtbF9kNDFjZWEzOTI1MGE0YWM0YmMyZGU3ZWY3OWEwMmU0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMDAzYTczYzhjNWI0ZmQwYWRkN2Y5ZjBhOTUxODViOS5iaW5kUG9wdXAocG9wdXBfNDMzNWZjNTMwNTVmNDcyZmFjM2NmOWMxNDE2M2VkZDgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTUyYzQ2ODdmMmRiNDM3ZWE4YTRmMGNjNWQwMWY3MDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMDczLC0xMTguMjk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGM4MjZhNDE1MWRkNDJjYzhmOGY5ZjViMmJjODljNzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGVhYjczZGE2YzhhNGNjMjllNzAzY2RlNGI2NGQwZjQgPSAkKCc8ZGl2IGlkPSJodG1sXzRlYWI3M2RhNmM4YTRjYzI5ZTcwM2NkZTRiNjRkMGY0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRjODI2YTQxNTFkZDQyY2M4ZjhmOWY1YjJiYzg5YzczLnNldENvbnRlbnQoaHRtbF80ZWFiNzNkYTZjOGE0Y2MyOWU3MDNjZGU0YjY0ZDBmNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hNTJjNDY4N2YyZGI0MzdlYThhNGYwY2M1ZDAxZjcwNS5iaW5kUG9wdXAocG9wdXBfNGM4MjZhNDE1MWRkNDJjYzhmOGY5ZjViMmJjODljNzMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjE0OWVlOTY2OGY1NDY3OWE2NGVhZDRhNjQyYjljOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTEsLTExOC4zMzUxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmY2MGZiYzlhYmJhNDhmYmJhOWQ3Y2MzMTMxNDBkM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQ5OTgwN2M1YzU5NDU5ZmFiOTQ4MGNmMzQ3Yzk0NjIgPSAkKCc8ZGl2IGlkPSJodG1sX2JkOTk4MDdjNWM1OTQ1OWZhYjk0ODBjZjM0N2M5NDYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZmNjBmYmM5YWJiYTQ4ZmJiYTlkN2NjMzEzMTQwZDNhLnNldENvbnRlbnQoaHRtbF9iZDk5ODA3YzVjNTk0NTlmYWI5NDgwY2YzNDdjOTQ2Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMTQ5ZWU5NjY4ZjU0Njc5YTY0ZWFkNGE2NDJiOWM5ZC5iaW5kUG9wdXAocG9wdXBfNmY2MGZiYzlhYmJhNDhmYmJhOWQ3Y2MzMTMxNDBkM2EpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTk3ZTRhZTQ1NjJjNGJmZmJhOWE2MWE3NTBjNGI5ZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjU2LC0xMTguMzE3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M5NWQ4ODZjZmE2NjRkZjY5OWQ2ZGQxOWNiODhiMmUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkYTE4NThmYzYxMjQ0YmVhOWQ0ODk5ZTE3MjRhODZmID0gJCgnPGRpdiBpZD0iaHRtbF8zZGExODU4ZmM2MTI0NGJlYTlkNDg5OWUxNzI0YTg2ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOTVkODg2Y2ZhNjY0ZGY2OTlkNmRkMTljYjg4YjJlMS5zZXRDb250ZW50KGh0bWxfM2RhMTg1OGZjNjEyNDRiZWE5ZDQ4OTllMTcyNGE4NmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTk3ZTRhZTQ1NjJjNGJmZmJhOWE2MWE3NTBjNGI5ZDguYmluZFBvcHVwKHBvcHVwX2M5NWQ4ODZjZmE2NjRkZjY5OWQ2ZGQxOWNiODhiMmUxKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1NWU5Y2UyZTE5OTRkNGM5YTJkYjlhY2E4OTM4OTkxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDMyNSwtMTE4LjM1ODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYmUwNTIyOWJkNDk0MjZiOTFlNTdmZmQ1NjAxZDk1YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80ZjQ2NGU0ZDVhYzI0YzdiYWZmYTU3OThkYzllNDBhYiA9ICQoJzxkaXYgaWQ9Imh0bWxfNGY0NjRlNGQ1YWMyNGM3YmFmZmE1Nzk4ZGM5ZTQwYWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmJlMDUyMjliZDQ5NDI2YjkxZTU3ZmZkNTYwMWQ5NWIuc2V0Q29udGVudChodG1sXzRmNDY0ZTRkNWFjMjRjN2JhZmZhNTc5OGRjOWU0MGFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA1NWU5Y2UyZTE5OTRkNGM5YTJkYjlhY2E4OTM4OTkxLmJpbmRQb3B1cChwb3B1cF8yYmUwNTIyOWJkNDk0MjZiOTFlNTdmZmQ1NjAxZDk1Yik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMWExYWMwZTgyMjU0MDUzYmQ0MjlmYzQyMDM1NzAzMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAyMDMsLTExOC4zNDUyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjA5ZjExNjM4NTNlNGEyN2FhMDhiMzY1OGUxNjZmNzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDZjYmU4ZGQ5YWY2NDAyY2FhNTQ3MWRmZjUwNTAyYjUgPSAkKCc8ZGl2IGlkPSJodG1sX2Q2Y2JlOGRkOWFmNjQwMmNhYTU0NzFkZmY1MDUwMmI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwOWYxMTYzODUzZTRhMjdhYTA4YjM2NThlMTY2Zjc4LnNldENvbnRlbnQoaHRtbF9kNmNiZThkZDlhZjY0MDJjYWE1NDcxZGZmNTA1MDJiNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMWExYWMwZTgyMjU0MDUzYmQ0MjlmYzQyMDM1NzAzMC5iaW5kUG9wdXAocG9wdXBfZjA5ZjExNjM4NTNlNGEyN2FhMDhiMzY1OGUxNjZmNzgpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDc5MTMxYmZmMWM0NDMwY2FjOTdjYTc1ZTA2N2RkNWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjE1LC0xMTguMzQ1Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0MDIzOWM1NzczMDQ3ODFiN2UwNDRlNjdmMmIyZmM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczNTI1NGM0M2NlZDQzYWY4MmJlMTk5YTU0YzkxZGQ3ID0gJCgnPGRpdiBpZD0iaHRtbF83MzUyNTRjNDNjZWQ0M2FmODJiZTE5OWE1NGM5MWRkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNDAyMzljNTc3MzA0NzgxYjdlMDQ0ZTY3ZjJiMmZjNi5zZXRDb250ZW50KGh0bWxfNzM1MjU0YzQzY2VkNDNhZjgyYmUxOTlhNTRjOTFkZDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDc5MTMxYmZmMWM0NDMwY2FjOTdjYTc1ZTA2N2RkNWQuYmluZFBvcHVwKHBvcHVwXzA0MDIzOWM1NzczMDQ3ODFiN2UwNDRlNjdmMmIyZmM2KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YxODU0ZmE4Y2M3ZTQ0MjI5YzJjZjgyOWQzNTBhNGU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI2OCwtMTE4LjMzMThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjcyYTJiYTA5ZDU0NmJjOWFjMDNmNmQzNGRjYWFiOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZDhhODZkZTc3YzY0MGYxODUwNDZjZWVjZmY2ZTViOSA9ICQoJzxkaXYgaWQ9Imh0bWxfYmQ4YTg2ZGU3N2M2NDBmMTg1MDQ2Y2VlY2ZmNmU1YjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI3MmEyYmEwOWQ1NDZiYzlhYzAzZjZkMzRkY2FhYjguc2V0Q29udGVudChodG1sX2JkOGE4NmRlNzdjNjQwZjE4NTA0NmNlZWNmZjZlNWI5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YxODU0ZmE4Y2M3ZTQ0MjI5YzJjZjgyOWQzNTBhNGU4LmJpbmRQb3B1cChwb3B1cF8xYjcyYTJiYTA5ZDU0NmJjOWFjMDNmNmQzNGRjYWFiOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNTgwNmQ5MjM3NWM0MGQ1ODNlMTI4NmIwMzFjMTE3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxMDksLTExOC4yOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lNzU1OTRjYTllMmM0OTg5YWU3NzE5NDI4NjE4MDBiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYmEwOTgwMjlhNGU0M2E4ODljYjk3MzlhNWQ0ZDJiMSA9ICQoJzxkaXYgaWQ9Imh0bWxfZGJhMDk4MDI5YTRlNDNhODg5Y2I5NzM5YTVkNGQyYjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTc1NTk0Y2E5ZTJjNDk4OWFlNzcxOTQyODYxODAwYmEuc2V0Q29udGVudChodG1sX2RiYTA5ODAyOWE0ZTQzYTg4OWNiOTczOWE1ZDRkMmIxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E1ODA2ZDkyMzc1YzQwZDU4M2UxMjg2YjAzMWMxMTdhLmJpbmRQb3B1cChwb3B1cF9lNzU1OTRjYTllMmM0OTg5YWU3NzE5NDI4NjE4MDBiYSk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTgyMTYwYjViZDE0NGU1OTlkZDhiYWU2ZjYyZjkxMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwNjQsLTExOC4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0ZjQwODBlM2ZkOTQ3ZWQ4NTdhYjExNTJiODFjYjdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5YmRhM2RhY2M5YzQzMTU5MGU1YTlkYTNkNDZhZWQwID0gJCgnPGRpdiBpZD0iaHRtbF9mOWJkYTNkYWNjOWM0MzE1OTBlNWE5ZGEzZDQ2YWVkMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NGY0MDgwZTNmZDk0N2VkODU3YWIxMTUyYjgxY2I3Yi5zZXRDb250ZW50KGh0bWxfZjliZGEzZGFjYzljNDMxNTkwZTVhOWRhM2Q0NmFlZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzk4MjE2MGI1YmQxNDRlNTk5ZGQ4YmFlNmY2MmY5MTIuYmluZFBvcHVwKHBvcHVwXzU0ZjQwODBlM2ZkOTQ3ZWQ4NTdhYjExNTJiODFjYjdiKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjZGU4YjVmZWFjNjRlNjM5N2RjMzAyMTIxMmY3OWJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE4OSwtMTE4LjMxNzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzg3OTY5NDJlYzQ0YjU3OTdhZjg2N2EzMzU2NjI2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZDM0OTVjNmU4MGY0Mjg1OTQ3ODE2ZjQxMTZjOTEwNiA9ICQoJzxkaXYgaWQ9Imh0bWxfM2QzNDk1YzZlODBmNDI4NTk0NzgxNmY0MTE2YzkxMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjc4Nzk2OTQyZWM0NGI1Nzk3YWY4NjdhMzM1NjYyNjYuc2V0Q29udGVudChodG1sXzNkMzQ5NWM2ZTgwZjQyODU5NDc4MTZmNDExNmM5MTA2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RjZGU4YjVmZWFjNjRlNjM5N2RjMzAyMTIxMmY3OWJjLmJpbmRQb3B1cChwb3B1cF8yNzg3OTY5NDJlYzQ0YjU3OTdhZjg2N2EzMzU2NjI2Nik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZDhmMTVhYWIzMTM0ZTMzYmU0NGU4NjFiYWE0MDEzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwMzgsLTExOC4yODI3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzMyMjA0YTg2YjEwNGQ1OWFkYTc1YWYyY2RhNzA3YjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmQxNGVhOTNhNmFjNDFlMmFjYWQyYjZjMjlmNDQxMGQgPSAkKCc8ZGl2IGlkPSJodG1sX2JkMTRlYTkzYTZhYzQxZTJhY2FkMmI2YzI5ZjQ0MTBkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzczMjIwNGE4NmIxMDRkNTlhZGE3NWFmMmNkYTcwN2IzLnNldENvbnRlbnQoaHRtbF9iZDE0ZWE5M2E2YWM0MWUyYWNhZDJiNmMyOWY0NDEwZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZDhmMTVhYWIzMTM0ZTMzYmU0NGU4NjFiYWE0MDEzZi5iaW5kUG9wdXAocG9wdXBfNzMyMjA0YTg2YjEwNGQ1OWFkYTc1YWYyY2RhNzA3YjMpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzMyOWU5MWU4N2FjNDk1MGJiMDcxNjg1YTI3MDI0MTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjU2LC0xMTguMzMwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5Yzk4YzA5Y2M4ZjQyNjNiYWVjOWFjMzFmMTIzZWJmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NmMzhjNGQxMGQwYTRhMGU4ZWI5YmU4Mzg4Y2U0ZTM3ID0gJCgnPGRpdiBpZD0iaHRtbF9jZjM4YzRkMTBkMGE0YTBlOGViOWJlODM4OGNlNGUzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OWM5OGMwOWNjOGY0MjYzYmFlYzlhYzMxZjEyM2ViZi5zZXRDb250ZW50KGh0bWxfY2YzOGM0ZDEwZDBhNGEwZThlYjliZTgzODhjZTRlMzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzMyOWU5MWU4N2FjNDk1MGJiMDcxNjg1YTI3MDI0MTIuYmluZFBvcHVwKHBvcHVwXzQ5Yzk4YzA5Y2M4ZjQyNjNiYWVjOWFjMzFmMTIzZWJmKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI0ZDcwMzk1NmU4MzQ1NTc4YTE0NTFkNTIxMDVjNmNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDA5OSwtMTE4LjMwMDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yYzdiMDMzZTg1NjU0OGRiOWRjYTM3ZWJkYWMxNGEyMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYjY2ZTc1MGQzZWE0ZjAwYWM3MmVlY2EyZTQyNDkzYyA9ICQoJzxkaXYgaWQ9Imh0bWxfM2I2NmU3NTBkM2VhNGYwMGFjNzJlZWNhMmU0MjQ5M2MiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmM3YjAzM2U4NTY1NDhkYjlkY2EzN2ViZGFjMTRhMjAuc2V0Q29udGVudChodG1sXzNiNjZlNzUwZDNlYTRmMDBhYzcyZWVjYTJlNDI0OTNjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI0ZDcwMzk1NmU4MzQ1NTc4YTE0NTFkNTIxMDVjNmNhLmJpbmRQb3B1cChwb3B1cF8yYzdiMDMzZTg1NjU0OGRiOWRjYTM3ZWJkYWMxNGEyMCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDMxNjJkMzI3Njk0MzJhYmFlZjA1M2VkMDAyMDgzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAwNTQsLTExOC4yODcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmMwYzUxMzMyMTM2NDA3ODg0YWEwMzUxNzViNTg5YmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGU4ZDY3YTQwNGVkNDU0YWE2Y2FiMzJhNmM4NWFkNGIgPSAkKCc8ZGl2IGlkPSJodG1sXzBlOGQ2N2E0MDRlZDQ1NGFhNmNhYjMyYTZjODVhZDRiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjMGM1MTMzMjEzNjQwNzg4NGFhMDM1MTc1YjU4OWJiLnNldENvbnRlbnQoaHRtbF8wZThkNjdhNDA0ZWQ0NTRhYTZjYWIzMmE2Yzg1YWQ0Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80MDMxNjJkMzI3Njk0MzJhYmFlZjA1M2VkMDAyMDgzYy5iaW5kUG9wdXAocG9wdXBfNmMwYzUxMzMyMTM2NDA3ODg0YWEwMzUxNzViNTg5YmIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzhmNGUxMjM4Y2YxNGFlYmI3ZTc3YTg5YjA4YmE4NWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMzQzLC0xMTguMzMxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzlhOGZkZjc0YTM4MjQ2NzQ4MTJlYWFmYTFjOTg1YzI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRkNGM3YWRjNTJhMjRjZDZiZWI5YzI2YjY3MDgzMzY1ID0gJCgnPGRpdiBpZD0iaHRtbF80ZDRjN2FkYzUyYTI0Y2Q2YmViOWMyNmI2NzA4MzM2NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YThmZGY3NGEzODI0Njc0ODEyZWFhZmExYzk4NWMyOC5zZXRDb250ZW50KGh0bWxfNGQ0YzdhZGM1MmEyNGNkNmJlYjljMjZiNjcwODMzNjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzhmNGUxMjM4Y2YxNGFlYmI3ZTc3YTg5YjA4YmE4NWYuYmluZFBvcHVwKHBvcHVwXzlhOGZkZjc0YTM4MjQ2NzQ4MTJlYWFmYTFjOTg1YzI4KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYyYWJlMDdkY2YwOTRmYWM4YjVlMGY1ZjU5ZmQzZjhlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI3OCwtMTE4LjMzNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDIxMzQwNGIzYjg0ZTdiYTY3YzAxMzYxYjE3ZWRmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMmU2MWZiMjQyZTk0ZTIzOTg1MzRiYjdhNjFiMzg1NiA9ICQoJzxkaXYgaWQ9Imh0bWxfZDJlNjFmYjI0MmU5NGUyMzk4NTM0YmI3YTYxYjM4NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjQyMTM0MDRiM2I4NGU3YmE2N2MwMTM2MWIxN2VkZjguc2V0Q29udGVudChodG1sX2QyZTYxZmIyNDJlOTRlMjM5ODUzNGJiN2E2MWIzODU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyYWJlMDdkY2YwOTRmYWM4YjVlMGY1ZjU5ZmQzZjhlLmJpbmRQb3B1cChwb3B1cF9mNDIxMzQwNGIzYjg0ZTdiYTY3YzAxMzYxYjE3ZWRmOCk7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjgxZDY4ZjNjNDM0MDNiYTBiMDE2NDhmNDE2NTQxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzMDksLTExOC4zMTc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODg4ZjQ5OTEyNjhlNDMwNDkyNzM0ODgxOTMxZTBhMDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWIzYjI2Y2Y4NWVlNGM4N2FmZmNkYjA0YTE3NDAyYzMgPSAkKCc8ZGl2IGlkPSJodG1sXzliM2IyNmNmODVlZTRjODdhZmZjZGIwNGExNzQwMmMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4OGY0OTkxMjY4ZTQzMDQ5MjczNDg4MTkzMWUwYTAyLnNldENvbnRlbnQoaHRtbF85YjNiMjZjZjg1ZWU0Yzg3YWZmY2RiMDRhMTc0MDJjMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yZjgxZDY4ZjNjNDM0MDNiYTBiMDE2NDhmNDE2NTQxYS5iaW5kUG9wdXAocG9wdXBfODg4ZjQ5OTEyNjhlNDMwNDkyNzM0ODgxOTMxZTBhMDIpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDUwZjQ5MTQzMzkzNDdkYzhlM2ZlMGU4ODFmNWQ2MDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMTUsLTExOC4zNDE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjZiNDZjNmFlNmYyNDgxMDljNzg5Y2NmYjZkY2E1OWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzU3YzExYWIzZmJhNDJiNWFmNGJjMmYxNmFiOGU0YTEgPSAkKCc8ZGl2IGlkPSJodG1sXzc1N2MxMWFiM2ZiYTQyYjVhZjRiYzJmMTZhYjhlNGExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y2YjQ2YzZhZTZmMjQ4MTA5Yzc4OWNjZmI2ZGNhNTlhLnNldENvbnRlbnQoaHRtbF83NTdjMTFhYjNmYmE0MmI1YWY0YmMyZjE2YWI4ZTRhMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNTBmNDkxNDMzOTM0N2RjOGUzZmUwZTg4MWY1ZDYwMi5iaW5kUG9wdXAocG9wdXBfZjZiNDZjNmFlNmYyNDgxMDljNzg5Y2NmYjZkY2E1OWEpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODczZTM2N2VmMDdmNGMzZWFiODUxMzhhNzk0ZGI2MjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMDM3LC0xMTguMzIwM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwNDZkOGI0OTYyZDQ5OGZiOWU5Y2I0YjgwNjE4Nzg0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlM2I2ZjAxMWI4ZDRhN2M5MTljOWEyOWUxYzE2M2Y2ID0gJCgnPGRpdiBpZD0iaHRtbF80ZTNiNmYwMTFiOGQ0YTdjOTE5YzlhMjllMWMxNjNmNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDQ2ZDhiNDk2MmQ0OThmYjllOWNiNGI4MDYxODc4NC5zZXRDb250ZW50KGh0bWxfNGUzYjZmMDExYjhkNGE3YzkxOWM5YTI5ZTFjMTYzZjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODczZTM2N2VmMDdmNGMzZWFiODUxMzhhNzk0ZGI2MjEuYmluZFBvcHVwKHBvcHVwXzYwNDZkOGI0OTYyZDQ5OGZiOWU5Y2I0YjgwNjE4Nzg0KTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2NmM2ZTM4ODY2OTRlY2ZiOWE5NzUyZWI4Mzk4NzQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDI0OCwtMTE4LjMzNTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YTljNWI4NjJmY2Y0ZDMxOGRmMWU4OTMzZTZkZDhiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNWEzYjJhMThjODE0NDE3YWQ2NTI5OTcxZjhlYjBhNCA9ICQoJzxkaXYgaWQ9Imh0bWxfYjVhM2IyYTE4YzgxNDQxN2FkNjUyOTk3MWY4ZWIwYTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGE5YzViODYyZmNmNGQzMThkZjFlODkzM2U2ZGQ4YjIuc2V0Q29udGVudChodG1sX2I1YTNiMmExOGM4MTQ0MTdhZDY1Mjk5NzFmOGViMGE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM2NmM2ZTM4ODY2OTRlY2ZiOWE5NzUyZWI4Mzk4NzQwLmJpbmRQb3B1cChwb3B1cF80YTljNWI4NjJmY2Y0ZDMxOGRmMWU4OTMzZTZkZDhiMik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NTZjMWUzYWI3ODE0YmFkYTMxMjY0NjMyZTNkNTJmYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxMzgsLTExOC4zNDY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmM3ZTFhNWM3M2NiNDdhMGI5ZjExZjk3NzhlNjU1YmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTc0ZWFlNTcxZWU5NDBjZmI5YmJmNmFlZDNhMmFiYTYgPSAkKCc8ZGl2IGlkPSJodG1sX2U3NGVhZTU3MWVlOTQwY2ZiOWJiZjZhZWQzYTJhYmE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZjN2UxYTVjNzNjYjQ3YTBiOWYxMWY5Nzc4ZTY1NWJkLnNldENvbnRlbnQoaHRtbF9lNzRlYWU1NzFlZTk0MGNmYjliYmY2YWVkM2EyYWJhNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83NTZjMWUzYWI3ODE0YmFkYTMxMjY0NjMyZTNkNTJmYy5iaW5kUG9wdXAocG9wdXBfNmM3ZTFhNWM3M2NiNDdhMGI5ZjExZjk3NzhlNjU1YmQpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDZkYmYzNDc5ZGY3NDMzNDk3ZWQ4ZDM1OWJhNjVhNjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjEyLC0xMTguMzc4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc1MDk5MzMyZGZkNTQ0NjNhOTg0ZWU4NDIwY2MyZDBhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MxMDAwNDQ3MjBiNTQ4NDZiODk3YjVhMGQyOTgyZGZmID0gJCgnPGRpdiBpZD0iaHRtbF9jMTAwMDQ0NzIwYjU0ODQ2Yjg5N2I1YTBkMjk4MmRmZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NTA5OTMzMmRmZDU0NDYzYTk4NGVlODQyMGNjMmQwYS5zZXRDb250ZW50KGh0bWxfYzEwMDA0NDcyMGI1NDg0NmI4OTdiNWEwZDI5ODJkZmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDZkYmYzNDc5ZGY3NDMzNDk3ZWQ4ZDM1OWJhNjVhNjIuYmluZFBvcHVwKHBvcHVwXzc1MDk5MzMyZGZkNTQ0NjNhOTg0ZWU4NDIwY2MyZDBhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0MjlhMGFjNjhkOTQ4ZDJiZGNmYWRmMTY3OWE2NWM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzMuOTk2MywtMTE4LjMyMDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMmY1M2NiM2RhMDM0ZTk4OTNhODNmNmJhMzJkZDJiZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOWRlZDUxOTFkY2Q0MTE4ODVmMTQ0Yzg4MWJjNmU2MiA9ICQoJzxkaXYgaWQ9Imh0bWxfYzlkZWQ1MTkxZGNkNDExODg1ZjE0NGM4ODFiYzZlNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTJmNTNjYjNkYTAzNGU5ODkzYTgzZjZiYTMyZGQyYmYuc2V0Q29udGVudChodG1sX2M5ZGVkNTE5MWRjZDQxMTg4NWYxNDRjODgxYmM2ZTYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I0MjlhMGFjNjhkOTQ4ZDJiZGNmYWRmMTY3OWE2NWM1LmJpbmRQb3B1cChwb3B1cF9lMmY1M2NiM2RhMDM0ZTk4OTNhODNmNmJhMzJkZDJiZik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZDFhYjY5MGI3YzE0ODU4YjM3ODhiNDYyYTM2YWQ3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAxMzIsLTExOC4yOTczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FiOTc2NmIyODE2NDg5MDlhYTMyYWQ0ZjZlYWY5ZDcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGZhZTMyYzAwMTY0NGIwN2FmYTg0OWZiZDEyZTg2MTIgPSAkKCc8ZGl2IGlkPSJodG1sXzhmYWUzMmMwMDE2NDRiMDdhZmE4NDlmYmQxMmU4NjEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhYjk3NjZiMjgxNjQ4OTA5YWEzMmFkNGY2ZWFmOWQ3LnNldENvbnRlbnQoaHRtbF84ZmFlMzJjMDAxNjQ0YjA3YWZhODQ5ZmJkMTJlODYxMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84ZDFhYjY5MGI3YzE0ODU4YjM3ODhiNDYyYTM2YWQ3Yy5iaW5kUG9wdXAocG9wdXBfM2FiOTc2NmIyODE2NDg5MDlhYTMyYWQ0ZjZlYWY5ZDcpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGNkMjI3ZDk5ZTk3NDZiZWJlODMxYTE5Njg1ZTkyMjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjEyLC0xMTguMzc4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAyNjEyZTViMzFjZTQ1OTY4NzJjYTNhN2RjMzk1ODNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1MTU2ODQ1YjI2MTQxNTA5NmE2NzRkMmJjYjA1YTQ3ID0gJCgnPGRpdiBpZD0iaHRtbF9jNTE1Njg0NWIyNjE0MTUwOTZhNjc0ZDJiY2IwNWE0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjYxMmU1YjMxY2U0NTk2ODcyY2EzYTdkYzM5NTgzYS5zZXRDb250ZW50KGh0bWxfYzUxNTY4NDViMjYxNDE1MDk2YTY3NGQyYmNiMDVhNDcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGNkMjI3ZDk5ZTk3NDZiZWJlODMxYTE5Njg1ZTkyMjIuYmluZFBvcHVwKHBvcHVwXzAyNjEyZTViMzFjZTQ1OTY4NzJjYTNhN2RjMzk1ODNhKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5ZDg0NjM1YTE3MzRmOWQ5Y2NlOTljNDdmNDM3NzdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDE0NiwtMTE4LjMwNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9yIjogInJlZCIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80MzdhODA2OWI2ZTM0MWQyOTZlMzA1YTBjOThjM2FkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNThiMjA2ZjNiZDc0ZjZlYjhmYjI5NTU0MmVkZDIyNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMzAwJ30pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTU3OWEzZjU0MmI0ZmVhYjUwMjQ0YTYyNDNkMzBkOSA9ICQoJzxkaXYgaWQ9Imh0bWxfOTk1NzlhM2Y1NDJiNGZlYWI1MDI0NGE2MjQzZDMwZDkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPlNvdXRod2VzdDwvZGl2PicpWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDU4YjIwNmYzYmQ3NGY2ZWI4ZmIyOTU1NDJlZGQyMjYuc2V0Q29udGVudChodG1sXzk5NTc5YTNmNTQyYjRmZWFiNTAyNDRhNjI0M2QzMGQ5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5ZDg0NjM1YTE3MzRmOWQ5Y2NlOTljNDdmNDM3NzdiLmJpbmRQb3B1cChwb3B1cF8wNThiMjA2ZjNiZDc0ZjZlYjhmYjI5NTU0MmVkZDIyNik7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDY4NDc4ZTRhYzY0OTMxYmM1YTY5Njk1MjI5ZjY1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0LjAzMjcsLTExOC4zMTEzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogInJlZCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJyZWQiLAogICJmaWxsT3BhY2l0eSI6IDAuMiwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDMKfQogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNDM3YTgwNjliNmUzNDFkMjk2ZTMwNWEwYzk4YzNhZGEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMWE3OWQ1NmExZjQ5NDc5MDg4NTdmMWZmOTkwMzBiZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzMwMCd9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGJmOTEyNDMwNzM5NDVhY2JhYjUyNWMyODE3ZmY4ODcgPSAkKCc8ZGl2IGlkPSJodG1sXzRiZjkxMjQzMDczOTQ1YWNiYWI1MjVjMjgxN2ZmODg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Tb3V0aHdlc3Q8L2Rpdj4nKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFhNzlkNTZhMWY0OTQ3OTA4ODU3ZjFmZjk5MDMwYmY1LnNldENvbnRlbnQoaHRtbF80YmY5MTI0MzA3Mzk0NWFjYmFiNTI1YzI4MTdmZjg4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wZDY4NDc4ZTRhYzY0OTMxYmM1YTY5Njk1MjI5ZjY1NS5iaW5kUG9wdXAocG9wdXBfMWE3OWQ1NmExZjQ5NDc5MDg4NTdmMWZmOTkwMzBiZjUpOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDBkYmQzNzdjZDhkNDA3NjhkYjgwNjExYzQ5ZWZhYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC4wMjQ3LC0xMTguMzY2OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJyZWQiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IGZhbHNlLAogICJmaWxsQ29sb3IiOiAicmVkIiwKICAiZmlsbE9wYWNpdHkiOiAwLjIsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAzCn0KICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzQzN2E4MDY5YjZlMzQxZDI5NmUzMDVhMGM5OGMzYWRhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM2YzdiZDI5NDFiNTQ0ZWI5YmNiYjM2OWYwMTU0M2FkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICczMDAnfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhZWM1ZmZmMTBiMzRmZDc5ODliN2U4ZDU4MDk3NjczID0gJCgnPGRpdiBpZD0iaHRtbF83YWVjNWZmZjEwYjM0ZmQ3OTg5YjdlOGQ1ODA5NzY3MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+U291dGh3ZXN0PC9kaXY+JylbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNmM3YmQyOTQxYjU0NGViOWJjYmIzNjlmMDE1NDNhZC5zZXRDb250ZW50KGh0bWxfN2FlYzVmZmYxMGIzNGZkNzk4OWI3ZThkNTgwOTc2NzMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDBkYmQzNzdjZDhkNDA3NjhkYjgwNjExYzQ5ZWZhYzEuYmluZFBvcHVwKHBvcHVwXzM2YzdiZDI5NDFiNTQ0ZWI5YmNiYjM2OWYwMTU0M2FkKTsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5ZGY3MDEyODc0NzQwNTFiOWFjZTQ0NGZjMWRhZDNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuMDEzMiwtMTE4LjI5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAicmVkIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiBmYWxzZSwKICAiZmlsbENvbG9y
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment