{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linguistic Interactive maps <a name=\"up\"></a>\n",
    "\n",
    "It is possible to draw interactive linguistic maps using `lingtypology`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import lingtypology"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Maps <a name=\"maps\"></a>\n",
    "\n",
    "### 1.1. Simplest example <a name=\"simplest_example\"></a>\n",
    "\n",
    "The simplest script that draws a map with Romanian and Ukrainian languages will be:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzg1ZGEwMGM0MDExMDRlZjM5NGMyODViYjUwNTJhZGYzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF84NWRhMDBjNDAxMTA0ZWYzOTRjMjg1YmI1MDUyYWRmMyIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfODVkYTAwYzQwMTEwNGVmMzk0YzI4NWJiNTA1MmFkZjMgPSBMLm1hcCgKICAgICAgICAnbWFwXzg1ZGEwMGM0MDExMDRlZjM5NGMyODViYjUwNTJhZGYzJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfODVkYTAwYzQwMTEwNGVmMzk0YzI4NWJiNTA1MmFkZjMpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfMDllYjY2ZDk1ZDJlNGRjZmE2YWZhNDA5ZDZkZTc5NWMgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwXzg1ZGEwMGM0MDExMDRlZjM5NGMyODViYjUwNTJhZGYzKTsKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF83N2U3NGUwMWZiMjg0MjE3OGE1MzkxYmVhMjRkYTIxOCA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfODVkYTAwYzQwMTEwNGVmMzk0YzI4NWJiNTA1MmFkZjMpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExNWExYjU5YjkxMTQ0YjFhYWU3YTE2ZjRkYWIyNWE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzc3ZTc0ZTAxZmIyODQyMTc4YTUzOTFiZWEyNGRhMjE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2MzNzlhZmQwNTU1NGQzYWFjN2Y0NWMzNWI2MDE5ZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuMCwgMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzc3ZTc0ZTAxZmIyODQyMTc4YTUzOTFiZWEyNGRhMjE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg3MGVmOWQxYmRmNGRiOGI0ZGNkYmIzMjc4MTBiMGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS40NDQ3LCAtMTM1LjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzdlNzRlMDFmYjI4NDIxNzhhNTM5MWJlYTI0ZGEyMTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDgxMjZjZDYwZGQ0MzYyYWI3NGNlNGYzN2JjYjlmNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzdlNzRlMDFmYjI4NDIxNzhhNTM5MWJlYTI0ZGEyMTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNzg2MjAxZGViYmU0MThkOWNlMGQ3MmNjMWI4ZjRiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM5MTMsIDI0LjIyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF83N2U3NGUwMWZiMjg0MjE3OGE1MzkxYmVhMjRkYTIxOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWVhYWY0YmIxZTU0MjZlOTM4ZDUyYTQ5ZWUzNmM1NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMmZmODEzNjc5YmQ0ODJhYjg5NzlkZDM3NmE2ZDc3NSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzJmZjgxMzY3OWJkNDgyYWI4OTc5ZGQzNzZhNmQ3NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yb21hMTMyNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Sb21hbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81YWVhYWY0YmIxZTU0MjZlOTM4ZDUyYTQ5ZWUzNmM1NS5zZXRDb250ZW50KGh0bWxfYzJmZjgxMzY3OWJkNDgyYWI4OTc5ZGQzNzZhNmQ3NzUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTc4NjIwMWRlYmJlNDE4ZDljZTBkNzJjYzFiOGY0YjIuYmluZFBvcHVwKHBvcHVwXzVhZWFhZjRiYjFlNTQyNmU5MzhkNTJhNDllZTM2YzU1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZjg0ZmZlYWYyMjM0MTRmYmM4MzU5ZjBjZTIzZDJmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMi4wLCAzMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNzdlNzRlMDFmYjI4NDIxNzhhNTM5MWJlYTI0ZGEyMTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTkzZGE4ZTc2NWI1NDkzNDk4MzcwZjlkNzU0M2EyMTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjFmNTc3ZWE3OTg3NDQ1ZTk2NzI3NjcxNjNjYjU4MzYgPSAkKGA8ZGl2IGlkPSJodG1sX2IxZjU3N2VhNzk4NzQ0NWU5NjcyNzY3MTYzY2I1ODM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWZyaTEyNzQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWZyaWthYW5zPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE5M2RhOGU3NjViNTQ5MzQ5ODM3MGY5ZDc1NDNhMjE3LnNldENvbnRlbnQoaHRtbF9iMWY1NzdlYTc5ODc0NDVlOTY3Mjc2NzE2M2NiNTgzNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZjg0ZmZlYWYyMjM0MTRmYmM4MzU5ZjBjZTIzZDJmNS5iaW5kUG9wdXAocG9wdXBfMTkzZGE4ZTc2NWI1NDkzNDk4MzcwZjlkNzU0M2EyMTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjYjY0NjkwYmRkOTRjZjA5NjM2OGVmMzY4ODA4OTQyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzc3ZTc0ZTAxZmIyODQyMTc4YTUzOTFiZWEyNGRhMjE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FlZmZiYThlYWI2ZTQ5NzJhYzgzZTU3YzZhODdlNDJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyMGY0YTkyZDE1MDQ4NGQ4NzExYTgxOGI1ODIxZDJkID0gJChgPGRpdiBpZD0iaHRtbF82MjBmNGE5MmQxNTA0ODRkODcxMWE4MThiNTgyMWQyZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWVmZmJhOGVhYjZlNDk3MmFjODNlNTdjNmE4N2U0MmQuc2V0Q29udGVudChodG1sXzYyMGY0YTkyZDE1MDQ4NGQ4NzExYTgxOGI1ODIxZDJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhjYjY0NjkwYmRkOTRjZjA5NjM2OGVmMzY4ODA4OTQyLmJpbmRQb3B1cChwb3B1cF9hZWZmYmE4ZWFiNmU0OTcyYWM4M2U1N2M2YTg3ZTQyZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDQ3YjFlOWM5MGY5NDdiMTgxZmNmMjBlNGNlYjdkNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wLCAxMzUuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzc3ZTc0ZTAxZmIyODQyMTc4YTUzOTFiZWEyNGRhMjE4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNhOGUwYjM0YmRiYjQwYzFhMzRmY2U0ZGE2MjE0MzU3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxMzYzNzM4OGFhZTRhOGE4NmYxMDQ2ZDllNzY5ZjQ2ID0gJChgPGRpdiBpZD0iaHRtbF9lMTM2MzczODhhYWU0YThhODZmMTA0NmQ5ZTc2OWY0NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphcGFuZXNlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzNhOGUwYjM0YmRiYjQwYzFhMzRmY2U0ZGE2MjE0MzU3LnNldENvbnRlbnQoaHRtbF9lMTM2MzczODhhYWU0YThhODZmMTA0NmQ5ZTc2OWY0Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNDdiMWU5YzkwZjk0N2IxODFmY2YyMGU0Y2ViN2Q2Ni5iaW5kUG9wdXAocG9wdXBfM2E4ZTBiMzRiZGJiNDBjMWEzNGZjZTRkYTYyMTQzNTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75178b240>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(('Romanian', 'Afrikaans', 'Tlingit', 'Japanese'))\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If you have Glottocodes rather then language names, you can pass them as well (you need to set `glottocode` to `True`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzcwMTg4NjE3ZGY4YzQ2MzFiY2JlMGNiNjY0MGUxOTUyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF83MDE4ODYxN2RmOGM0NjMxYmNiZTBjYjY2NDBlMTk1MiIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfNzAxODg2MTdkZjhjNDYzMWJjYmUwY2I2NjQwZTE5NTIgPSBMLm1hcCgKICAgICAgICAnbWFwXzcwMTg4NjE3ZGY4YzQ2MzFiY2JlMGNiNjY0MGUxOTUyJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfNzAxODg2MTdkZjhjNDYzMWJjYmUwY2I2NjQwZTE5NTIpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfNmZkYmJlYjVhMzEwNGZiYmE5OTM1NDUwMzVlMTIyZmIgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwXzcwMTg4NjE3ZGY4YzQ2MzFiY2JlMGNiNjY0MGUxOTUyKTsKICAgIAogICAgICAgICAgICB2YXIgZmVhdHVyZV9ncm91cF8yZDdiOGRmOTA5NzY0YmEyYWViOGRkODU4ZDUyMWFhYyA9IEwuZmVhdHVyZUdyb3VwKAogICAgICAgICAgICAgICAgKS5hZGRUbyhtYXBfNzAxODg2MTdkZjhjNDYzMWJjYmUwY2I2NjQwZTE5NTIpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdjMTlkYjVlZTQ2YjQ3MzM5YzUzMjIxNjIxY2M2YTlkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzJkN2I4ZGY5MDk3NjRiYTJhZWI4ZGQ4NThkNTIxYWFjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmJiZWIwOWJhYjlhNGEwZmE5YmY4MmIxZDhmMTFhMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMjIuMCwgMzAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzJkN2I4ZGY5MDk3NjRiYTJhZWI4ZGQ4NThkNTIxYWFjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2M3NTg1MjVhMGMyNDUzMjgxOGUxNjc1NjI3OWFjNDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS40NDQ3LCAtMTM1LjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMmQ3YjhkZjkwOTc2NGJhMmFlYjhkZDg1OGQ1MjFhYWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZWZjYWRiNTFiN2U0ZDdhOTlmMjgyYThkYzVjNjM4YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMmQ3YjhkZjkwOTc2NGJhMmFlYjhkZDg1OGQ1MjFhYWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZmE1M2M5MThkZjI0Yjc4ODhhNTQ0NjBhNWI3ODYxMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8yZDdiOGRmOTA5NzY0YmEyYWViOGRkODU4ZDUyMWFhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDk5Nzg2NThhYTc0YjZkOTMwM2U3OWJjOTE3N2IxNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYTljM2I0N2U2MjA0YzFhODgwODk0NTE2OTg4ZmUwNiA9ICQoYDxkaXYgaWQ9Imh0bWxfY2E5YzNiNDdlNjIwNGMxYTg4MDg5NDUxNjk4OGZlMDYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0OTk3ODY1OGFhNzRiNmQ5MzAzZTc5YmM5MTc3YjE2LnNldENvbnRlbnQoaHRtbF9jYTljM2I0N2U2MjA0YzFhODgwODk0NTE2OTg4ZmUwNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mZmE1M2M5MThkZjI0Yjc4ODhhNTQ0NjBhNWI3ODYxMy5iaW5kUG9wdXAocG9wdXBfZjQ5OTc4NjU4YWE3NGI2ZDkzMDNlNzliYzkxNzdiMTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiYzg3NzM4ZGY4ZDQxYjhiMGZmM2YxYmNhMTA4YzkyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIyLjAsIDMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8yZDdiOGRmOTA5NzY0YmEyYWViOGRkODU4ZDUyMWFhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYjM5Mzk3OGI5OWI0ZjNlOTQ1ZTRiMzU1ZGI1YTU0ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xMzNmMjEwNzg3NDM0NTBmYWI4Y2E3Y2Y0MzIyM2Q2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMTMzZjIxMDc4NzQzNDUwZmFiOGNhN2NmNDMyMjNkNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZnJpMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZnJpa2FhbnM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGIzOTM5NzhiOTliNGYzZTk0NWU0YjM1NWRiNWE1NGQuc2V0Q29udGVudChodG1sXzEzM2YyMTA3ODc0MzQ1MGZhYjhjYTdjZjQzMjIzZDZiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiYzg3NzM4ZGY4ZDQxYjhiMGZmM2YxYmNhMTA4YzkyLmJpbmRQb3B1cChwb3B1cF8wYjM5Mzk3OGI5OWI0ZjNlOTQ1ZTRiMzU1ZGI1YTU0ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjEzZGI4NmM4MjFiNDNkYmE2NjZiNzY2NTVmMmZmYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS40NDQ3LCAtMTM1LjI5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMmQ3YjhkZjkwOTc2NGJhMmFlYjhkZDg1OGQ1MjFhYWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZmFiN2QxMGYwNWYyNDQ0ODk3MDBlMGE2NTViNzBjMzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWExOWQ4OTc2YjAzNDg0OGFhMGU0OGUwMWU2NjZlZDMgPSAkKGA8ZGl2IGlkPSJodG1sXzVhMTlkODk3NmIwMzQ4NDhhYTBlNDhlMDFlNjY2ZWQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWI3ZDEwZjA1ZjI0NDQ4OTcwMGUwYTY1NWI3MGMzMS5zZXRDb250ZW50KGh0bWxfNWExOWQ4OTc2YjAzNDg0OGFhMGU0OGUwMWU2NjZlZDMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjEzZGI4NmM4MjFiNDNkYmE2NjZiNzY2NTVmMmZmYzUuYmluZFBvcHVwKHBvcHVwX2ZhYjdkMTBmMDVmMjQ0NDg5NzAwZTBhNjU1YjcwYzMxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNzg4MmQzY2E5ZmM0ODA5YmE1MTAyOTIzNzhmZGYyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMmQ3YjhkZjkwOTc2NGJhMmFlYjhkZDg1OGQ1MjFhYWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzYxYTVhMmZkYjA1NDM5YWE5ZjQxNTM2NWNkYjgzMWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWM1NzEwMTI5ZGMxNDZhODg4ZDg3M2NkMGVmYmU5YWIgPSAkKGA8ZGl2IGlkPSJodG1sX2VjNTcxMDEyOWRjMTQ2YTg4OGQ4NzNjZDBlZmJlOWFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNzYxYTVhMmZkYjA1NDM5YWE5ZjQxNTM2NWNkYjgzMWMuc2V0Q29udGVudChodG1sX2VjNTcxMDEyOWRjMTQ2YTg4OGQ4NzNjZDBlZmJlOWFiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2I3ODgyZDNjYTlmYzQ4MDliYTUxMDI5MjM3OGZkZjI2LmJpbmRQb3B1cChwb3B1cF83NjFhNWEyZmRiMDU0MzlhYTlmNDE1MzY1Y2RiODMxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7515094a8>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(('russ1263', 'afri1274', 'tlin1245', 'nucl1643'), glottocode=True)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2. Save, Render or Save as Image <a name=\"save\"></a>\n",
    "Be advised that `create_map()` returns a `Folium` map. In this notebook it is used because the map may\n",
    "be displayed this way.\n",
    "\n",
    "To save your map as html run: `m.save('map.html')`\n",
    "\n",
    "To get html as `str` run: `m.render()`  \n",
    "\n",
    "To get a `png` image run `m.save_static(fname=fname)` (if no arguments are given it will be returned as `bytes`).  \n",
    "`geckodriver` should be installed.  \n",
    "**Note:** `save_static` is an experimental method."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`m.save_static()`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=https://raw.githubusercontent.com/OneAdder/lingtypology/master/data_processing/map.png></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3. Features <a name=\"features\"></a>\n",
    "Simply drawing languages on a map is not very interesting. Let's say that we want to mark some morphological features as different colors."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2RhNTJkMGRmMzAwNDQyZGM4ZDcxOTIzZWVkYzQwNzhhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kYTUyZDBkZjMwMDQ0MmRjOGQ3MTkyM2VlZGM0MDc4YSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9kYTUyZDBkZjMwMDQ0MmRjOGQ3MTkyM2VlZGM0MDc4YSA9IEwubWFwKAogICAgICAgICdtYXBfZGE1MmQwZGYzMDA0NDJkYzhkNzE5MjNlZWRjNDA3OGEnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9kYTUyZDBkZjMwMDQ0MmRjOGQ3MTkyM2VlZGM0MDc4YSk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9lY2E3MzZlY2EyNDI0YjU1YTZiMTFhNjdhYzY0NjFkZiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfZGE1MmQwZGYzMDA0NDJkYzhkNzE5MjNlZWRjNDA3OGEpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2Q4ZWIzNGU3YTdkZjQ4YjViZjJiYTRiN2UyY2I3ZDczID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kYTUyZDBkZjMwMDQ0MmRjOGQ3MTkyM2VlZGM0MDc4YSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDBlYWUxOTZhZjg1NDIyY2JmMTU5NDExNzA0NGY4MzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4ZWIzNGU3YTdkZjQ4YjViZjJiYTRiN2UyY2I3ZDczKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGZhMGZkY2FlYzcwNGIxYWI4MTI5YmRjZDY2OTYzOTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDhlYjM0ZTdhN2RmNDhiNWJmMmJhNGI3ZTJjYjdkNzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ODkwNjk0ZTJkMGU0NzliYWM0OGZlMGVjY2U0YjRlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4ZWIzNGU3YTdkZjQ4YjViZjJiYTRiN2UyY2I3ZDczKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGRiMjJkMDk3NDM1NDZkMTkzNTYwNDI0MWFmODkzODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDhlYjM0ZTdhN2RmNDhiNWJmMmJhNGI3ZTJjYjdkNzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjhhZTAyYTNjNTg0MTg5OWUwMGJiOWYzNTZlOTQ0MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kOGViMzRlN2E3ZGY0OGI1YmYyYmE0YjdlMmNiN2Q3Myk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3ODhlNTI4MjQzNzQ0YzRiNjVlYzkyNGEwOGM2MGJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kOGViMzRlN2E3ZGY0OGI1YmYyYmE0YjdlMmNiN2Q3Myk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xNjU3NmM5YjRkZTM0ZTY5OTM4NTE1ZDZlMDY5ZGNhOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZjIyNGFmMjQ2ODI0NWIwOWI1OTE0NDk2NWRhNjRlNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmYyMjRhZjI0NjgyNDViMDliNTkxNDQ5NjVkYTY0ZTUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTY1NzZjOWI0ZGUzNGU2OTkzODUxNWQ2ZTA2OWRjYTkuc2V0Q29udGVudChodG1sX2ZmMjI0YWYyNDY4MjQ1YjA5YjU5MTQ0OTY1ZGE2NGU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E3ODhlNTI4MjQzNzQ0YzRiNjVlYzkyNGEwOGM2MGJmLmJpbmRQb3B1cChwb3B1cF8xNjU3NmM5YjRkZTM0ZTY5OTM4NTE1ZDZlMDY5ZGNhOSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTk3NmMxNTdhYTZlNGU0NGE5ODkwMmNhMzU4OGM3NGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDhlYjM0ZTdhN2RmNDhiNWJmMmJhNGI3ZTJjYjdkNzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDZlZGQ1NmMxZTViNDE2ZWFkMjkzM2MwODNkNjc2OGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOTk5YjJmNWQ0YWI0NDMyZDk5MTgyZDQ1MmNiZWM3MDEgPSAkKGA8ZGl2IGlkPSJodG1sXzk5OWIyZjVkNGFiNDQzMmQ5OTE4MmQ0NTJjYmVjNzAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q2ZWRkNTZjMWU1YjQxNmVhZDI5MzNjMDgzZDY3NjhhLnNldENvbnRlbnQoaHRtbF85OTliMmY1ZDRhYjQ0MzJkOTkxODJkNDUyY2JlYzcwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OTc2YzE1N2FhNmU0ZTQ0YTk4OTAyY2EzNTg4Yzc0Yi5iaW5kUG9wdXAocG9wdXBfZDZlZGQ1NmMxZTViNDE2ZWFkMjkzM2MwODNkNjc2OGEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhMDg0YmFjZTY5MjRjODQ4NDljYjRhMTEzZDAxNGFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDhlYjM0ZTdhN2RmNDhiNWJmMmJhNGI3ZTJjYjdkNzMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWFkYjUxMjViNWJmNDFkNGFlMDdmNTdhYWE0ZTk3NzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2YxYzY1ZTMwZTJmNGU1YTgxYzYxOTliNzZiNDFlMTEgPSAkKGA8ZGl2IGlkPSJodG1sXzdmMWM2NWUzMGUyZjRlNWE4MWM2MTk5Yjc2YjQxZTExIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVsZzEyNjIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVsZ2FyaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzlhZGI1MTI1YjViZjQxZDRhZTA3ZjU3YWFhNGU5NzcwLnNldENvbnRlbnQoaHRtbF83ZjFjNjVlMzBlMmY0ZTVhODFjNjE5OWI3NmI0MWUxMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81YTA4NGJhY2U2OTI0Yzg0ODQ5Y2I0YTExM2QwMTRhZi5iaW5kUG9wdXAocG9wdXBfOWFkYjUxMjViNWJmNDFkNGFlMDdmNTdhYWE0ZTk3NzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q1Zjg1ODg0ZGE0MDQ0Nzk4ODYwNjYyZmQ2YzU2ZTM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZTExOSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4ZWIzNGU3YTdkZjQ4YjViZjJiYTRiN2UyY2I3ZDczKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QwNThhODgxMDJiZjQ2MDg4NzUzYjg0ZjhkNTFhOTdhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ5N2FhZTdmMGRiMTQyNjU4NTRlOTM3ZTU0NDZlYmNhID0gJChgPGRpdiBpZD0iaHRtbF80OTdhYWU3ZjBkYjE0MjY1ODU0ZTkzN2U1NDQ2ZWJjYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kMDU4YTg4MTAyYmY0NjA4ODc1M2I4NGY4ZDUxYTk3YS5zZXRDb250ZW50KGh0bWxfNDk3YWFlN2YwZGIxNDI2NTg1NGU5MzdlNTQ0NmViY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDVmODU4ODRkYTQwNDQ3OTg4NjA2NjJmZDZjNTZlMzQuYmluZFBvcHVwKHBvcHVwX2QwNThhODgxMDJiZjQ2MDg4NzUzYjg0ZjhkNTFhOTdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjA2NTk3NGZjMmQ0OGU3Yjk0NTdjMTI0ZmU0YzdhOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kOGViMzRlN2E3ZGY0OGI1YmYyYmE0YjdlMmNiN2Q3Myk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mNDllNTZkNWEyMjI0YWZiOWU0YTQxOWJkOWNiMjExNiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hY2I0OWUyMmIwNmY0MGYzOGMwYmY1N2YzYzJiYzM3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWNiNDllMjJiMDZmNDBmMzhjMGJmNTdmM2MyYmMzNzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y0OWU1NmQ1YTIyMjRhZmI5ZTRhNDE5YmQ5Y2IyMTE2LnNldENvbnRlbnQoaHRtbF9hY2I0OWUyMmIwNmY0MGYzOGMwYmY1N2YzYzJiYzM3OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jNjA2NTk3NGZjMmQ0OGU3Yjk0NTdjMTI0ZmU0YzdhOC5iaW5kUG9wdXAocG9wdXBfZjQ5ZTU2ZDVhMjIyNGFmYjllNGE0MTliZDljYjIxMTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe751509438>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "languages = [\"Adyghe\", \"Kabardian\", \"Polish\", \"Russian\", \"Bulgarian\"]\n",
    "features = [\"Agglutinative\", \"Agglutinative\", \"Inflected\", \"Inflected\", \"Analytic\"]\n",
    "m = lingtypology.LingMap(languages)\n",
    "m.add_features(features)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4. Customizing the map <a name=\"map_cust\"></a>\n",
    "As you can see, the map is not centered properly. It can be fixed with passing coordinates to the `start_location` attribute. You can change start zoom as well `start_zoom`.\n",
    "Also, you can change colors using the `colors` parameter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2Q0NDYzZDcwYTZkYTQyMTE4YzUxY2Y0NDQ1ODhkYjI2IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kNDQ2M2Q3MGE2ZGE0MjExOGM1MWNmNDQ0NTg4ZGIyNiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDEiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMScgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMEZGRkY7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGMDBGRjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGRkYwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9kNDQ2M2Q3MGE2ZGE0MjExOGM1MWNmNDQ0NTg4ZGIyNiA9IEwubWFwKAogICAgICAgICdtYXBfZDQ0NjNkNzBhNmRhNDIxMThjNTFjZjQ0NDU4OGRiMjYnLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2Q0NDYzZDcwYTZkYTQyMTE4YzUxY2Y0NDQ1ODhkYjI2KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzQxNjQ1MGE1OTIyYzRhZWFhYWZkYTZhNzQ5ZmY5MjYwID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9kNDQ2M2Q3MGE2ZGE0MjExOGM1MWNmNDQ0NTg4ZGIyNik7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNDdmMDU1YzQ4YTkzNDk4N2JiZTU4NGJkNTgzMDdlNzEgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2Q0NDYzZDcwYTZkYTQyMTE4YzUxY2Y0NDQ1ODhkYjI2KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZGMzZjI4YTVjZDA0MjE4YmU5ZGM0ZTg3YTRjNDM3NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDdmMDU1YzQ4YTkzNDk4N2JiZTU4NGJkNTgzMDdlNzEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDY5MDA0MjQxYTA0N2ViYjc5NmQ3ZmRiNTM3MjM4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80N2YwNTVjNDhhOTM0OTg3YmJlNTg0YmQ1ODMwN2U3MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyYmI3ZTQ4NzA2NTRhYTFiZDdmMmIxMWE5YjU3ZjY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQ3ZjA1NWM0OGE5MzQ5ODdiYmU1ODRiZDU4MzA3ZTcxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmQ1MzI1OTI5OWI2NDkzMjhmODMwZDFmMjNiYTFhNTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80N2YwNTVjNDhhOTM0OTg3YmJlNTg0YmQ1ODMwN2U3MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkYzBkMWNkODdiNzQxOGI5NmI1YzJmMWFmMjRmOGQ3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQ3ZjA1NWM0OGE5MzQ5ODdiYmU1ODRiZDU4MzA3ZTcxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWI0ZWE1OTZkMTAzNDEzZTkyNWJmMWU2ZGIwNGQ5NDQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwRkZGRiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQ3ZjA1NWM0OGE5MzQ5ODdiYmU1ODRiZDU4MzA3ZTcxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1MTQ3NDkyZmY2MTQxZDg5Yzg4NDVkYzljODhkOTYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYwYzk2ZjNlNTRiZjQ2Zjc4NjkxMjkyODg4ZjU5YTUwID0gJChgPGRpdiBpZD0iaHRtbF82MGM5NmYzZTU0YmY0NmY3ODY5MTI5Mjg4OGY1OWE1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wNTE0NzQ5MmZmNjE0MWQ4OWM4ODQ1ZGM5Yzg4ZDk2My5zZXRDb250ZW50KGh0bWxfNjBjOTZmM2U1NGJmNDZmNzg2OTEyOTI4ODhmNTlhNTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWI0ZWE1OTZkMTAzNDEzZTkyNWJmMWU2ZGIwNGQ5NDQuYmluZFBvcHVwKHBvcHVwXzA1MTQ3NDkyZmY2MTQxZDg5Yzg4NDVkYzljODhkOTYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmQ2OWRiYjMzNWU0NDcxOWUyNzEwN2U3ZGJhMzg2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMEZGRkYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80N2YwNTVjNDhhOTM0OTg3YmJlNTg0YmQ1ODMwN2U3MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYWIwMThkM2RlNTE0N2ZmYmM0YTExMGMwM2I3OWYzMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZWE5ZTY5ZTY4YTc0MzhmYjM3MTRkYmE5YjM4Y2Q3YiA9ICQoYDxkaXYgaWQ9Imh0bWxfMGVhOWU2OWU2OGE3NDM4ZmIzNzE0ZGJhOWIzOGNkN2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFiMDE4ZDNkZTUxNDdmZmJjNGExMTBjMDNiNzlmMzAuc2V0Q29udGVudChodG1sXzBlYTllNjllNjhhNzQzOGZiMzcxNGRiYTliMzhjZDdiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmZDY5ZGJiMzM1ZTQ0NzE5ZTI3MTA3ZTdkYmEzODZlLmJpbmRQb3B1cChwb3B1cF9mYWIwMThkM2RlNTE0N2ZmYmM0YTExMGMwM2I3OWYzMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjU5OWMwYzQ4YzAyNGU4ZWIzMzQwOGY2ZTc2MTYzYzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRkYwMEZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDdmMDU1YzQ4YTkzNDk4N2JiZTU4NGJkNTgzMDdlNzEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjU0ZWUyYmI2ODVmNDg3ZWIzZmZiMGNhNjRhNDJmOWIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGY0OWI2OTczNGMyNDhkN2I0OWE4M2Q3MjRmMGUyM2MgPSAkKGA8ZGl2IGlkPSJodG1sXzBmNDliNjk3MzRjMjQ4ZDdiNDlhODNkNzI0ZjBlMjNjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcnVzczEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UnVzc2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTRlZTJiYjY4NWY0ODdlYjNmZmIwY2E2NGE0MmY5Yi5zZXRDb250ZW50KGh0bWxfMGY0OWI2OTczNGMyNDhkN2I0OWE4M2Q3MjRmMGUyM2MpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjU5OWMwYzQ4YzAyNGU4ZWIzMzQwOGY2ZTc2MTYzYzYuYmluZFBvcHVwKHBvcHVwX2I1NGVlMmJiNjg1ZjQ4N2ViM2ZmYjBjYTY0YTQyZjliKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMzczYmQ5MWExZmE0ZTEzOTRjYTM1MTI3ODk5ODVjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI0ZGRkYwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQ3ZjA1NWM0OGE5MzQ5ODdiYmU1ODRiZDU4MzA3ZTcxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM0ZmM4MTM4Yzk4ZTRlOWRhODY1Y2ZiZjhiZjg3NGMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg5OGNiNTI0OTE0NDQxNWZhMGFkMTIyODg4YTc4M2NlID0gJChgPGRpdiBpZD0iaHRtbF84OThjYjUyNDkxNDQ0MTVmYTBhZDEyMjg4OGE3ODNjZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zNGZjODEzOGM5OGU0ZTlkYTg2NWNmYmY4YmY4NzRjMC5zZXRDb250ZW50KGh0bWxfODk4Y2I1MjQ5MTQ0NDE1ZmEwYWQxMjI4ODhhNzgzY2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzM3M2JkOTFhMWZhNGUxMzk0Y2EzNTEyNzg5OTg1Y2YuYmluZFBvcHVwKHBvcHVwXzM0ZmM4MTM4Yzk4ZTRlOWRhODY1Y2ZiZjhiZjg3NGMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNmExNGIxYTVlMDU0NjZlYjFiMjRlMTE5MzdjMGRiMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRkZGMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80N2YwNTVjNDhhOTM0OTg3YmJlNTg0YmQ1ODMwN2U3MSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMmJkNDgwM2JhMmE0MTc2YTJlMjdhMDY5ZGM5ZThhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYTNkYzJkM2M3NzU0NGNjYWNjZTQyNGMxM2MxYmU5MSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2EzZGMyZDNjNzc1NDRjY2FjY2U0MjRjMTNjMWJlOTEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDJiZDQ4MDNiYTJhNDE3NmEyZTI3YTA2OWRjOWU4YTcuc2V0Q29udGVudChodG1sXzNhM2RjMmQzYzc3NTQ0Y2NhY2NlNDI0YzEzYzFiZTkxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2YTE0YjFhNWUwNTQ2NmViMWIyNGUxMTkzN2MwZGIyLmJpbmRQb3B1cChwb3B1cF8wMmJkNDgwM2JhMmE0MTc2YTJlMjdhMDY5ZGM5ZThhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7514a77b8>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.start_location = (40, 40)\n",
    "m.start_zoom = 3\n",
    "m.add_features(features, colors=(\"#00FFFF\", \"#FF00FF\", \"#FFFF00\"))\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.5. Popups <a name=\"popups\"></a>\n",
    "You can add popups using `add_popups` method.\n",
    "You can disable links to Glottolog by setting `glottolog_links` parameter to `False`.  \n",
    "Basically, you can set any html-code in the popups."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzAwMTYyODBhZjVkZDRiZDg5YmI4OTg3MWU0NWUzNmUzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8wMDE2MjgwYWY1ZGQ0YmQ4OWJiODk4NzFlNDVlMzZlMyIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDIiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMicgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMEZGRkY7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGMDBGRjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGRkYwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8wMDE2MjgwYWY1ZGQ0YmQ4OWJiODk4NzFlNDVlMzZlMyA9IEwubWFwKAogICAgICAgICdtYXBfMDAxNjI4MGFmNWRkNGJkODliYjg5ODcxZTQ1ZTM2ZTMnLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzAwMTYyODBhZjVkZDRiZDg5YmI4OTg3MWU0NWUzNmUzKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzYxYWVkY2Y0ZGZlMjQwM2VhZDc1OWM2MDU2YjBkYjhjID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF8wMDE2MjgwYWY1ZGQ0YmQ4OWJiODk4NzFlNDVlMzZlMyk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfOGJkN2ExOWI2YzRjNGJjMDhiMzBlYzJhODJmYmEzYWMgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzAwMTYyODBhZjVkZDRiZDg5YmI4OTg3MWU0NWUzNmUzKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOWI2NTkxYzZlYmU0OWZhYTYwNWEwYTBmYmY3MDZlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOGJkN2ExOWI2YzRjNGJjMDhiMzBlYzJhODJmYmEzYWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNTA0NzI2OThiZTk0MzI5OTE1NzFhYTRjZTE3MjdkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84YmQ3YTE5YjZjNGM0YmMwOGIzMGVjMmE4MmZiYTNhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE1ZTcwOWYzNmYxMDQ0NmQ5NzBhMTliZGJiMjQ1MjE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzhiZDdhMTliNmM0YzRiYzA4YjMwZWMyYTgyZmJhM2FjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTVhYzMwOTc1ZjRiNDAzZmIxNTlhZjJjZjVjNmRkMmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84YmQ3YTE5YjZjNGM0YmMwOGIzMGVjMmE4MmZiYTNhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5ODdiYjM5NWM1NDQ0MWJiZjhjZWE3NDBiNzdiZDZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzhiZDdhMTliNmM0YzRiYzA4YjMwZWMyYTgyZmJhM2FjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmMyOGIyYjUwZGU2NDM0ZWE2ZTZlZTVjNTIxZmMwMmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwRkZGRiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzhiZDdhMTliNmM0YzRiYzA4YjMwZWMyYTgyZmJhM2FjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc4MDQ4MWNjZWRkNTQwNmQ4ZDA0NzFhMTU3NDQyMzQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IwNGNlZmNkYWE1ZTQ2MGFiMTk4N2JkYzc1YmQ1OWQ4ID0gJChgPGRpdiBpZD0iaHRtbF9iMDRjZWZjZGFhNWU0NjBhYjE5ODdiZGM3NWJkNTlkOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+IDxhIGhyZWY9Imh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NhdWNhc3VzIiB0YXJnZXQ9Il9ibGFuayI+IENhdWNhc3VzIDwvYT4gPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ODA0ODFjY2VkZDU0MDZkOGQwNDcxYTE1NzQ0MjM0Ni5zZXRDb250ZW50KGh0bWxfYjA0Y2VmY2RhYTVlNDYwYWIxOTg3YmRjNzViZDU5ZDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmMyOGIyYjUwZGU2NDM0ZWE2ZTZlZTVjNTIxZmMwMmYuYmluZFBvcHVwKHBvcHVwXzc4MDQ4MWNjZWRkNTQwNmQ4ZDA0NzFhMTU3NDQyMzQ2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZmM5N2Q4MGE0YzI0NmVlYWM1YWZjNDdiY2Y3YTlhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMEZGRkYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84YmQ3YTE5YjZjNGM0YmMwOGIzMGVjMmE4MmZiYTNhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzBlN2Y0NWRlODU0ZDdmYmU2MmRhOGYxZGQ1Yjk1MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NTRhMjJhZmQ2YmQ0ODA2YjRhMGRiYTA5OTE5ZDJkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNjU0YTIyYWZkNmJkNDgwNmI0YTBkYmEwOTkxOWQyZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiA8YSBocmVmPSJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXVjYXN1cyIgdGFyZ2V0PSJfYmxhbmsiPiBDYXVjYXN1cyA8L2E+IDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjcwZTdmNDVkZTg1NGQ3ZmJlNjJkYThmMWRkNWI5NTMuc2V0Q29udGVudChodG1sXzY1NGEyMmFmZDZiZDQ4MDZiNGEwZGJhMDk5MTlkMmRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FmYzk3ZDgwYTRjMjQ2ZWVhYzVhZmM0N2JjZjdhOWEyLmJpbmRQb3B1cChwb3B1cF8yNzBlN2Y0NWRlODU0ZDdmYmU2MmRhOGYxZGQ1Yjk1MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWI5MTgwYjllOWQyNDQ4MmFkNzYyM2QxN2QyZjM2MTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRkYwMEZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfOGJkN2ExOWI2YzRjNGJjMDhiMzBlYzJhODJmYmEzYWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTQ1MzRmYmRlYTNhNDVlYjhmNTFlNzQ5MWZjMWMzMmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmI2ZmZiNjk3N2NiNDlkYThjMWZmOTk4ZjIxNmJlZGEgPSAkKGA8ZGl2IGlkPSJodG1sXzJiNmZmYjY5NzdjYjQ5ZGE4YzFmZjk5OGYyMTZiZWRhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij4gPGEgaHJlZj0iaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVyb3BlIiB0YXJnZXQ9Il9ibGFuayI+IEV1cm9wZSA8L2E+IDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTQ1MzRmYmRlYTNhNDVlYjhmNTFlNzQ5MWZjMWMzMmEuc2V0Q29udGVudChodG1sXzJiNmZmYjY5NzdjYjQ5ZGE4YzFmZjk5OGYyMTZiZWRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViOTE4MGI5ZTlkMjQ0ODJhZDc2MjNkMTdkMmYzNjE3LmJpbmRQb3B1cChwb3B1cF9lNDUzNGZiZGVhM2E0NWViOGY1MWU3NDkxZmMxYzMyYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTIyNjM1OTc5MzEzNGZlMmI4NjZlZTcwYjE4MGU3ZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRkZGMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84YmQ3YTE5YjZjNGM0YmMwOGIzMGVjMmE4MmZiYTNhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NzFkNzlhZjFlMWE0NjI2ODgzMGYyYmRjOGNmOGZkYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMjA2NzU3MzEzNzg0ZWQyOWIxNjQyNDI1MzM3ZGEwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTIwNjc1NzMxMzc4NGVkMjliMTY0MjQyNTMzN2RhMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiA8YSBocmVmPSJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdXJvcGUiIHRhcmdldD0iX2JsYW5rIj4gRXVyb3BlIDwvYT4gPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzFkNzlhZjFlMWE0NjI2ODgzMGYyYmRjOGNmOGZkYS5zZXRDb250ZW50KGh0bWxfZTIwNjc1NzMxMzc4NGVkMjliMTY0MjQyNTMzN2RhMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTIyNjM1OTc5MzEzNGZlMmI4NjZlZTcwYjE4MGU3ZTEuYmluZFBvcHVwKHBvcHVwXzQ3MWQ3OWFmMWUxYTQ2MjY4ODMwZjJiZGM4Y2Y4ZmRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYTNkMjNjNmQ2NTg0MzEwYWE3ODQ5YmQ1YTY1NTZmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRkZGMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84YmQ3YTE5YjZjNGM0YmMwOGIzMGVjMmE4MmZiYTNhYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80YWQyZDQzZDAwMjU0MTk4YTEyZjFmYjM5NzhlODJlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjY1MGVjNGZmNzM0NDk4YjgwOTliNGY2N2U1Mjg3YiA9ICQoYDxkaXYgaWQ9Imh0bWxfZDI2NTBlYzRmZjczNDQ5OGI4MDk5YjRmNjdlNTI4N2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPiA8YSBocmVmPSJodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdXJvcGUiIHRhcmdldD0iX2JsYW5rIj4gRXVyb3BlIDwvYT4gPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YWQyZDQzZDAwMjU0MTk4YTEyZjFmYjM5NzhlODJlMy5zZXRDb250ZW50KGh0bWxfZDI2NTBlYzRmZjczNDQ5OGI4MDk5YjRmNjdlNTI4N2IpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmEzZDIzYzZkNjU4NDMxMGFhNzg0OWJkNWE2NTU2ZjUuYmluZFBvcHVwKHBvcHVwXzRhZDJkNDNkMDAyNTQxOThhMTJmMWZiMzk3OGU4MmUzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7514661d0>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "contents = ('Caucasus', 'Caucasus', 'Europe', 'Europe', 'Europe')\n",
    "html = '''\n",
    "<a href=\"https://en.wikipedia.org/wiki/{data}\" target=\"_blank\">\n",
    "{data}\n",
    "</a>\n",
    "'''\n",
    "m.add_popups([html.format(data=popup) for popup in contents], glottolog_links=False)\n",
    "m.languages_in_popups = False\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.6. Accessing Glottolog <a name=\"access_glot\"></a>\n",
    "\n",
    "You can also use `lingtypology.glottolog` to get some data from it. For example, I want to add language affiliations to popups.  \n",
    "See more details [here](https://oneadder.github.io/lingtypology/glottolog)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzgxMTI5NDlmOTZjMDQ2ZWY4NDhmMGQ3NWUzZDljNTg4IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF84MTEyOTQ5Zjk2YzA0NmVmODQ4ZjBkNzVlM2Q5YzU4OCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDMiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMycgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMEZGRkY7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGMDBGRjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGRkYwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF84MTEyOTQ5Zjk2YzA0NmVmODQ4ZjBkNzVlM2Q5YzU4OCA9IEwubWFwKAogICAgICAgICdtYXBfODExMjk0OWY5NmMwNDZlZjg0OGYwZDc1ZTNkOWM1ODgnLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzgxMTI5NDlmOTZjMDQ2ZWY4NDhmMGQ3NWUzZDljNTg4KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzFhYzI4YzRiNWYzNjQ5MDM5ZDhmMzQ2Y2FjNTU2MzE4ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF84MTEyOTQ5Zjk2YzA0NmVmODQ4ZjBkNzVlM2Q5YzU4OCk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfODBkYzY2MDlmZGQzNDZiNTg0NmU4ZmY4MDY0MjdlNjggPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzgxMTI5NDlmOTZjMDQ2ZWY4NDhmMGQ3NWUzZDljNTg4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzAxMmViOTlmN2I0NTBkYjQ2MTY4NDA0NjhkODgwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODBkYzY2MDlmZGQzNDZiNTg0NmU4ZmY4MDY0MjdlNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MGJhZjM3ZWFjNmQ0ZWVhYjYzYmI2OWUyZjIwZTQxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84MGRjNjYwOWZkZDM0NmI1ODQ2ZThmZjgwNjQyN2U2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmODJkNjRkNDYyNzQxYjZiZGIwN2MxMGI2MGJhYzY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzgwZGM2NjA5ZmRkMzQ2YjU4NDZlOGZmODA2NDI3ZTY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODg5Yjk3YTgxZGYwNDdiYTkyMWJmYTA2MmQ1Y2ZkMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84MGRjNjYwOWZkZDM0NmI1ODQ2ZThmZjgwNjQyN2U2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5N2UxY2IxMzk1ZDRlZWY5NzNmMDQ3YTU0YjY5MTc2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzgwZGM2NjA5ZmRkMzQ2YjU4NDZlOGZmODA2NDI3ZTY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzUwMWM2Zjk4ZGI2NDFkNDliYjJjY2M2MzRjMGNjMWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwRkZGRiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzgwZGM2NjA5ZmRkMzQ2YjU4NDZlOGZmODA2NDI3ZTY4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IxNjI0MTY5MzRmZTQ0MjJiN2VkOWNlZWFlODAzOWI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjYTQxNzY1NjY1MjQ2NTY5MzY3MWNhYmFiOWFhOTZiID0gJChgPGRpdiBpZD0iaHRtbF9jY2E0MTc2NTY2NTI0NjU2OTM2NzFjYWJhYjlhYTk2YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+QWJraGF6LUFkeWdlLCBDaXJjYXNzaWFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMTYyNDE2OTM0ZmU0NDIyYjdlZDljZWVhZTgwMzliOC5zZXRDb250ZW50KGh0bWxfY2NhNDE3NjU2NjUyNDY1NjkzNjcxY2FiYWI5YWE5NmIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzUwMWM2Zjk4ZGI2NDFkNDliYjJjY2M2MzRjMGNjMWIuYmluZFBvcHVwKHBvcHVwX2IxNjI0MTY5MzRmZTQ0MjJiN2VkOWNlZWFlODAzOWI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MDVlYmVhMTA4NTQ0MTQ2OTQ3ZWRkMjRhN2Q5ZjYyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMEZGRkYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84MGRjNjYwOWZkZDM0NmI1ODQ2ZThmZjgwNjQyN2U2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81MTk5NDMzOWYyNWU0NzYzODUyZTRlYWI1MTQwNjZlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Y2RkMTE0NzkyZjA0YTZiOWQyMmNlZDc5YjY4ZTdkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfN2NkZDExNDc5MmYwNGE2YjlkMjJjZWQ3OWI2OGU3ZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkFia2hhei1BZHlnZSwgQ2lyY2Fzc2lhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTE5OTQzMzlmMjVlNDc2Mzg1MmU0ZWFiNTE0MDY2ZTMuc2V0Q29udGVudChodG1sXzdjZGQxMTQ3OTJmMDRhNmI5ZDIyY2VkNzliNjhlN2Q0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcwNWViZWExMDg1NDQxNDY5NDdlZGQyNGE3ZDlmNjIyLmJpbmRQb3B1cChwb3B1cF81MTk5NDMzOWYyNWU0NzYzODUyZTRlYWI1MTQwNjZlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWRiMGRkMjFiMzA1NDAwMWIzNTQ4ZTZlZDhlYzdlODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRkYwMEZGIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODBkYzY2MDlmZGQzNDZiNTg0NmU4ZmY4MDY0MjdlNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTRhNTAzYjQ4Njc3NDdmMzk3MGQ1YzUyY2ZhZGZhNTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjkwNDdmMzQyOWVlNDFjNzhlMzk4MjA4NjJjOWI2YzQgPSAkKGA8ZGl2IGlkPSJodG1sX2I5MDQ3ZjM0MjllZTQxYzc4ZTM5ODIwODYyYzliNmM0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcnVzczEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UnVzc2lhbjwvYT48YnI+SW5kby1FdXJvcGVhbiwgQmFsdG8tU2xhdmljLCBTbGF2aWMsIFdlc3QgU2xhdmljLCBMZWNoaXRpYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTRhNTAzYjQ4Njc3NDdmMzk3MGQ1YzUyY2ZhZGZhNTYuc2V0Q29udGVudChodG1sX2I5MDQ3ZjM0MjllZTQxYzc4ZTM5ODIwODYyYzliNmM0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkYjBkZDIxYjMwNTQwMDFiMzU0OGU2ZWQ4ZWM3ZTgzLmJpbmRQb3B1cChwb3B1cF8xNGE1MDNiNDg2Nzc0N2YzOTcwZDVjNTJjZmFkZmE1NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjA5OTY5Y2RiMDI4NDI1MmExYjRjMzUwOGUxN2Y2ZTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNGRkZGMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF84MGRjNjYwOWZkZDM0NmI1ODQ2ZThmZjgwNjQyN2U2OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MDgyMjc2NjA3ZmE0ZTE0YjA2YWQ3ZWJlY2U2ODAxYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMWY0NjE2YzA5MWM0YzM0OTJhOGIwZTc2MGQxN2Q5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTFmNDYxNmMwOTFjNGMzNDkyYThiMGU3NjBkMTdkOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idWxnMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdWxnYXJpYW48L2E+PGJyPkluZG8tRXVyb3BlYW4sIEJhbHRvLVNsYXZpYywgU2xhdmljLCBFYXN0IFNsYXZpYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDA4MjI3NjYwN2ZhNGUxNGIwNmFkN2ViZWNlNjgwMWEuc2V0Q29udGVudChodG1sX2UxZjQ2MTZjMDkxYzRjMzQ5MmE4YjBlNzYwZDE3ZDlmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwOTk2OWNkYjAyODQyNTJhMWI0YzM1MDhlMTdmNmUyLmJpbmRQb3B1cChwb3B1cF80MDgyMjc2NjA3ZmE0ZTE0YjA2YWQ3ZWJlY2U2ODAxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODdkYWYyNmVmZGE5NDVmMDljYzUwZjZjMjBhNjBmNmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjRkZGRjAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfODBkYzY2MDlmZGQzNDZiNTg0NmU4ZmY4MDY0MjdlNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTkzZTJiZTBhYjhhNDI4Y2JmZDc4NDYzYWE2YjZkYjAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmQ2NzdlYTliMGQwNDJjNzhmMDBkN2I4Y2RjNjc1ODAgPSAkKGA8ZGl2IGlkPSJodG1sXzZkNjc3ZWE5YjBkMDQyYzc4ZjAwZDdiOGNkYzY3NTgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcG9saTEyNjAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UG9saXNoPC9hPjxicj5JbmRvLUV1cm9wZWFuLCBCYWx0by1TbGF2aWMsIFNsYXZpYywgU291dGggU2xhdmljLCBFYXN0ZXJuIFNvdXRoIFNsYXZpYywgTWFjZWRvLUJ1bGdhcmlhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTkzZTJiZTBhYjhhNDI4Y2JmZDc4NDYzYWE2YjZkYjAuc2V0Q29udGVudChodG1sXzZkNjc3ZWE5YjBkMDQyYzc4ZjAwZDdiOGNkYzY3NTgwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg3ZGFmMjZlZmRhOTQ1ZjA5Y2M1MGY2YzIwYTYwZjZkLmJpbmRQb3B1cChwb3B1cF9hOTNlMmJlMGFiOGE0MjhjYmZkNzg0NjNhYTZiNmRiMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7514a72b0>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "affs = lingtypology.glottolog.get_affiliations(languages)\n",
    "m.add_popups(affs)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.7. Customizing features and controls <a name=\"feat_cont\"></a>\n",
    "\n",
    "You can pass additional parameters to the `add_features` method.  \n",
    "If for some reason you do not wish to use colors, you could use shapes.  \n",
    "If you want to add controls, you can do it as well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzRjMTAxMDY0YmYxOTQ5ZmU4ZGU3OTY3ZDMzOTJkMjA5IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF80YzEwMTA2NGJmMTk0OWZlOGRlNzk2N2QzMzkyZDIwOSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDQiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kNCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IG9wYWNpdHk6MC43OyAiPgrirKQKPC9zcGFuPkFnZ2x1dGluYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImNvbG9yOiAjMDAwMDAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IG9wYWNpdHk6MC43OyAiPgril7wKPC9zcGFuPkFuYWx5dGljPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsgdGV4dC1hbGlnbjogY2VudGVyOyBvcGFjaXR5OjAuNzsgIj4K4payCjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF80YzEwMTA2NGJmMTk0OWZlOGRlNzk2N2QzMzkyZDIwOSA9IEwubWFwKAogICAgICAgICdtYXBfNGMxMDEwNjRiZjE5NDlmZThkZTc5NjdkMzM5MmQyMDknLCB7CiAgICAgICAgY2VudGVyOiBbNDAsIDQwXSwKICAgICAgICB6b29tOiAzLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzRjMTAxMDY0YmYxOTQ5ZmU4ZGU3OTY3ZDMzOTJkMjA5KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2Q3ZTY2NjczOTVhNTQ0N2NiNWU1ZWZhOGY4YThjMTEzID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF80YzEwMTA2NGJmMTk0OWZlOGRlNzk2N2QzMzkyZDIwOSk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNDlkMWE5MjFhNDA1NDBiYThjMjNiYmY0ZDBlM2Q3ZGIgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzRjMTAxMDY0YmYxOTQ5ZmU4ZGU3OTY3ZDMzOTJkMjA5KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYzY2YmUyOWMzMDFjNGY3Y2IzODY5NzU0MmE2OWI2NjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF80OWQxYTkyMWE0MDU0MGJhOGMyM2JiZjRkMGUzZDdkYik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYmU0ZWRmNzdlMjc0NDBkMGIzYjU1MDgwYmE2NmUxMGQgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxNzAlIj7irKQ8L2Rpdj5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2M2NmJlMjljMzAxYzRmN2NiMzg2OTc1NDJhNjliNjY2LnNldEljb24oZGl2X2ljb25fYmU0ZWRmNzdlMjc0NDBkMGIzYjU1MDgwYmE2NmUxMGQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTAxNGY4YzdiZjA5NGRjZjg5OGRjODdiMzA5MGQ3MjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDUwYWZlMjdkYTgxNDliOTkzOTU1MjlkNTYwOGQ1OWMgPSAkKGA8ZGl2IGlkPSJodG1sXzA1MGFmZTI3ZGE4MTQ5Yjk5Mzk1NTI5ZDU2MDhkNTljIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5BYmtoYXotQWR5Z2UsIENpcmNhc3NpYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwMTRmOGM3YmYwOTRkY2Y4OThkYzg3YjMwOTBkNzIzLnNldENvbnRlbnQoaHRtbF8wNTBhZmUyN2RhODE0OWI5OTM5NTUyOWQ1NjA4ZDU5Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M2NmJlMjljMzAxYzRmN2NiMzg2OTc1NDJhNjliNjY2LmJpbmRQb3B1cChwb3B1cF8xMDE0ZjhjN2JmMDk0ZGNmODk4ZGM4N2IzMDkwZDcyMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzkxYTY0YTIzMjBjMTQ5MTU4M2VjODBjYmYyMzQ5MDYxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF80OWQxYTkyMWE0MDU0MGJhOGMyM2JiZjRkMGUzZDdkYik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fODI3MGVjNzZiZDUwNDkyZjlmYzBkZDk0ZDFjYTY4MjkgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxNzAlIj7irKQ8L2Rpdj5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzkxYTY0YTIzMjBjMTQ5MTU4M2VjODBjYmYyMzQ5MDYxLnNldEljb24oZGl2X2ljb25fODI3MGVjNzZiZDUwNDkyZjlmYzBkZDk0ZDFjYTY4MjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmFjNzg1N2YwY2RlNDQzNTkzOGUzMjMxNjcwZTI4Y2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzBlYmViZWU4ZDdjNGQ2ODkwYjRhNzcyNzcwMTU0ZGMgPSAkKGA8ZGl2IGlkPSJodG1sXzMwZWJlYmVlOGQ3YzRkNjg5MGI0YTc3Mjc3MDE1NGRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BYmtoYXotQWR5Z2UsIENpcmNhc3NpYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhYzc4NTdmMGNkZTQ0MzU5MzhlMzIzMTY3MGUyOGNhLnNldENvbnRlbnQoaHRtbF8zMGViZWJlZThkN2M0ZDY4OTBiNGE3NzI3NzAxNTRkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkxYTY0YTIzMjBjMTQ5MTU4M2VjODBjYmYyMzQ5MDYxLmJpbmRQb3B1cChwb3B1cF82YWM3ODU3ZjBjZGU0NDM1OTM4ZTMyMzE2NzBlMjhjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMjZkNmVlZWVmOTJlNGE1M2I4YWI3ZmJmMmUzMDg1NzcgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzRjMTAxMDY0YmYxOTQ5ZmU4ZGU3OTY3ZDMzOTJkMjA5KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfY2I4NmUyNjI4NTFjNDAwMDgyM2ZjMDNlNjVhNTY4NmEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhmZWF0dXJlX2dyb3VwXzI2ZDZlZWVlZjkyZTRhNTNiOGFiN2ZiZjJlMzA4NTc3KTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl83ZTZjMjU2MWFhYmU0Yzg3OWIzMDk2ZGM1ZThkMDJjYiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDE3MCUiPuKXvDwvZGl2PmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfY2I4NmUyNjI4NTFjNDAwMDgyM2ZjMDNlNjVhNTY4NmEuc2V0SWNvbihkaXZfaWNvbl83ZTZjMjU2MWFhYmU0Yzg3OWIzMDk2ZGM1ZThkMDJjYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZDc2MDBlNTYwOTE0YjQxYTU1NmE2OTI5NDEwODVhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYWY2NjYzZmU4NjY0MzRhOWMyMjE0Mzk1MTQyODljYSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWFmNjY2M2ZlODY2NDM0YTljMjIxNDM5NTE0Mjg5Y2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPkluZG8tRXVyb3BlYW4sIEJhbHRvLVNsYXZpYywgU2xhdmljLCBTb3V0aCBTbGF2aWMsIEVhc3Rlcm4gU291dGggU2xhdmljLCBNYWNlZG8tQnVsZ2FyaWFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDc2MDBlNTYwOTE0YjQxYTU1NmE2OTI5NDEwODVhMi5zZXRDb250ZW50KGh0bWxfYWFmNjY2M2ZlODY2NDM0YTljMjIxNDM5NTE0Mjg5Y2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jYjg2ZTI2Mjg1MWM0MDAwODIzZmMwM2U2NWE1Njg2YS5iaW5kUG9wdXAocG9wdXBfNGQ3NjAwZTU2MDkxNGI0MWE1NTZhNjkyOTQxMDg1YTIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzE0ZWFmNmU2ZjYyYzQ0ZDZiODQyMTliYzg3NGFmZjVmID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF80YzEwMTA2NGJmMTk0OWZlOGRlNzk2N2QzMzkyZDIwOSk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk3MGYzY2NiNmQ3NzQ1NDJiNDdiMGZmNGYxMDNjOTg4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8oZmVhdHVyZV9ncm91cF8xNGVhZjZlNmY2MmM0NGQ2Yjg0MjE5YmM4NzRhZmY1Zik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNWQ5YjljZDY4NjQ3NDQwZDlkOWYzNjhjOTQ1MjVjZDYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxNzAlIj7ilrI8L2Rpdj5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzk3MGYzY2NiNmQ3NzQ1NDJiNDdiMGZmNGYxMDNjOTg4LnNldEljb24oZGl2X2ljb25fNWQ5YjljZDY4NjQ3NDQwZDlkOWYzNjhjOTQ1MjVjZDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQ0YzEzNjNkNTFjNDJjMDk1ZGIzMjYwZGJjNTU5NmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDI4M2M5MzY0MTgxNDVhNGEzMDUxZGFhMmVhMjdhNWEgPSAkKGA8ZGl2IGlkPSJodG1sXzAyODNjOTM2NDE4MTQ1YTRhMzA1MWRhYTJlYTI3YTVhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcnVzczEyNjMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+UnVzc2lhbjwvYT48YnI+SW5kby1FdXJvcGVhbiwgQmFsdG8tU2xhdmljLCBTbGF2aWMsIFdlc3QgU2xhdmljLCBMZWNoaXRpYzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjQ0YzEzNjNkNTFjNDJjMDk1ZGIzMjYwZGJjNTU5NmMuc2V0Q29udGVudChodG1sXzAyODNjOTM2NDE4MTQ1YTRhMzA1MWRhYTJlYTI3YTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfOTcwZjNjY2I2ZDc3NDU0MmI0N2IwZmY0ZjEwM2M5ODguYmluZFBvcHVwKHBvcHVwXzY0NGMxMzYzZDUxYzQyYzA5NWRiMzI2MGRiYzU1OTZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZWQ4ZmQ0ZjFkYTM1NGMzZGJkY2MzOTZjMTMyZmNiMDAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTRlYWY2ZTZmNjJjNDRkNmI4NDIxOWJjODc0YWZmNWYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2MxYzcxZTJlNmYyYTQ3ZjliZDBmNzhlMWY1YmNhODMxID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTcwJSI+4payPC9kaXY+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lZDhmZDRmMWRhMzU0YzNkYmRjYzM5NmMxMzJmY2IwMC5zZXRJY29uKGRpdl9pY29uX2MxYzcxZTJlNmYyYTQ3ZjliZDBmNzhlMWY1YmNhODMxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlZDkwY2YwMDY1ODQwMWFhZjEyMzkwNmE3YjY3NjRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NjMjQ1MWE2ZjI1MTRlYmJhNDJmNjA0NDM5Y2RiZGY3ID0gJChgPGRpdiBpZD0iaHRtbF9jYzI0NTFhNmYyNTE0ZWJiYTQyZjYwNDQzOWNkYmRmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+SW5kby1FdXJvcGVhbiwgQmFsdG8tU2xhdmljLCBTbGF2aWMsIEVhc3QgU2xhdmljPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZWQ5MGNmMDA2NTg0MDFhYWYxMjM5MDZhN2I2NzY0Yi5zZXRDb250ZW50KGh0bWxfY2MyNDUxYTZmMjUxNGViYmE0MmY2MDQ0MzljZGJkZjcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lZDhmZDRmMWRhMzU0YzNkYmRjYzM5NmMxMzJmY2IwMC5iaW5kUG9wdXAocG9wdXBfZGVkOTBjZjAwNjU4NDAxYWFmMTIzOTA2YTdiNjc2NGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBsYXllcl9jb250cm9sX2RjNmEyYjdlZDdjYjRlNzI4ZGViOGJlNDExM2QxMGZmID0gewogICAgICAgICAgICAgICAgYmFzZV9sYXllcnMgOiB7ICJvcGVuc3RyZWV0bWFwIiA6IHRpbGVfbGF5ZXJfZDdlNjY2NzM5NWE1NDQ3Y2I1ZTVlZmE4ZjhhOGMxMTMsIH0sCiAgICAgICAgICAgICAgICBvdmVybGF5cyA6IHsgIkFnZ2x1dGluYXRpdmUiIDogZmVhdHVyZV9ncm91cF80OWQxYTkyMWE0MDU0MGJhOGMyM2JiZjRkMGUzZDdkYiwiQW5hbHl0aWMiIDogZmVhdHVyZV9ncm91cF8yNmQ2ZWVlZWY5MmU0YTUzYjhhYjdmYmYyZTMwODU3NywiSW5mbGVjdGVkIiA6IGZlYXR1cmVfZ3JvdXBfMTRlYWY2ZTZmNjJjNDRkNmI4NDIxOWJjODc0YWZmNWYsIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIEwuY29udHJvbC5sYXllcnMoCiAgICAgICAgICAgICAgICBsYXllcl9jb250cm9sX2RjNmEyYjdlZDdjYjRlNzI4ZGViOGJlNDExM2QxMGZmLmJhc2VfbGF5ZXJzLAogICAgICAgICAgICAgICAgbGF5ZXJfY29udHJvbF9kYzZhMmI3ZWQ3Y2I0ZTcyOGRlYjhiZTQxMTNkMTBmZi5vdmVybGF5cywKICAgICAgICAgICAgICAgIHtwb3NpdGlvbjogJ3RvcHJpZ2h0JywKICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgIGF1dG9aSW5kZXg6IHRydWUKICAgICAgICAgICAgICAgIH0pLmFkZFRvKG1hcF80YzEwMTA2NGJmMTk0OWZlOGRlNzk2N2QzMzkyZDIwOSk7CiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75148dc88>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.add_features(features, use_shapes=True, control=True)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.8. Stroke features <a name=\"s_features\"></a>\n",
    "\n",
    "It is possible to add another set of features to strokes of markers using `add_stroke_features` method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzZjMjM4MmUxZDNlNjRmYTlhNDUyZjFmMmVhYmQ2ZWIyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF82YzIzODJlMWQzZTY0ZmE5YTQ1MmYxZjJlYWJkNmViMiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CiAgICAKPCEtLSBCYXNlZCBvbiB0aGUgdGVtcGxhdGUgZnJvbSBoZXJlOiBodHRwczovL25idmlld2VyLmp1cHl0ZXIub3JnL2dpc3QvdGFsYmVydGMtdXNncy8xOGY4OTAxZmM5OGYxMDlmMmI3MTE1NmNmM2FjODFjZCAtLT4KPCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvdGhlbWVzL2Jhc2UvanF1ZXJ5LXVpLmNzcyI+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40LmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+CiAgCiAgPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICAkKCIjbWFwbGVnZW5kMSIpLmRyYWdnYWJsZSh7CiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICB0b3A6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKCjxkaXYgaWQ9J21hcGxlZ2VuZDEnIGNsYXNzPSdtYXBsZWdlbmQnIAogICAgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDo5OTk5OyBib3JkZXI6MnB4IHNvbGlkIGdyZXk7IGJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgIGJvcmRlci1yYWRpdXM6NnB4OyBwYWRkaW5nOiAxMHB4OyBmb250LXNpemU6MTRweDsgcmlnaHQ6IDIwcHg7IHRvcDogMjBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGVnZW5kPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmO29wYWNpdHk6MC43OyI+PC9zcGFuPkFjY3VzYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMDAwMDA7b3BhY2l0eTowLjc7Ij48L3NwYW4+RXJnYXRpdmU8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF82YzIzODJlMWQzZTY0ZmE5YTQ1MmYxZjJlYWJkNmViMiA9IEwubWFwKAogICAgICAgICdtYXBfNmMyMzgyZTFkM2U2NGZhOWE0NTJmMWYyZWFiZDZlYjInLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF82YzIzODJlMWQzZTY0ZmE5YTQ1MmYxZjJlYWJkNmViMik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl85YTlmM2ZiMzQ4OTc0N2M1OWIzNzcyZDgxODFhNTU4YiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfNmMyMzgyZTFkM2U2NGZhOWE0NTJmMWYyZWFiZDZlYjIpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzFkZTQ4MzhiYzllZTQ2NDQ5NTI2OWNiZGRhMWU3ZTBjID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF82YzIzODJlMWQzZTY0ZmE5YTQ1MmYxZjJlYWJkNmViMik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzdiNmNjNDU2Y2M4NGFlOTk0OGI4ODAzMGI0Mzg0ZTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YmFkOTliNmFmMzY0MTZhYTRmYjVkYzgwYTM5MWM2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzc5YWU4Y2VkM2I0M2Q5YjMwNjAxNDFkMjVmMDM0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMzNhZDY0YzVmYjc0ZGZiODk5NGFjZWFiNTQ5NTQ5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzFkZTQ4MzhiYzllZTQ2NDQ5NTI2OWNiZGRhMWU3ZTBjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODAwZTM2ZDVlNGU1NDMwYmFiMDhjODVkN2YzNDA2OTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzFkZTQ4MzhiYzllZTQ2NDQ5NTI2OWNiZGRhMWU3ZTBjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGVhOWE0ZjdhODU0NDljMjgwYjQzZGIyZDJkNDU1ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hY2M5OTc1ZGQyYmE0NzdmYjE3NGY5ZGFkNzY5ZWNjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ODQ3NzZmZWE5MzU0N2JkYTYxNTllN2UwZDIxZWM1YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZDg3ZTg2YjIyMjc0YmUzYWI5ZDE4NDQ2ODQzMmMxYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzFkZTQ4MzhiYzllZTQ2NDQ5NTI2OWNiZGRhMWU3ZTBjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmMwYmQ3MmExYWJiNDZhZmJiMDMxMzhhOGRmMjVmYTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzFkZTQ4MzhiYzllZTQ2NDQ5NTI2OWNiZGRhMWU3ZTBjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzY2ZDRjOGNjODIwNGNhNmJjMzljOGE4YTM3NTQxOTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xZGU0ODM4YmM5ZWU0NjQ0OTUyNjljYmRkYTFlN2UwYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1MGNmZTVhZGMzMzRmNGQ4YTk0NTY3MTkxYWY3MDAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzFkZTQ4MzhiYzllZTQ2NDQ5NTI2OWNiZGRhMWU3ZTBjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTljOGQ3Yzc2ZDU0NGFlYmFiYjZmMzI5NGY0OGIwZTUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OTZmYjBiZDhhZGE0MWQ4OGU3YTZlMjE0MjUwZjE1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMGExMDk2ODRiZWI0YjE4ODVkODExOTYyYTRhYTQ3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xZGU0ODM4YmM5ZWU0NjQ0OTUyNjljYmRkYTFlN2UwYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFhODkwZGNkNmEzODQ0Y2M5OGIwMzdiZDRkYzI1ZDU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjllMjM2ZmJmMDEzNGQ4ODhmYjUzZGRjZjM5YTFjZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGJkMzg3ZWQ0YjY5NDU0MzhiODI3ZjI2Zjg5MjY0NGQgPSAkKGA8ZGl2IGlkPSJodG1sX2RiZDM4N2VkNGI2OTQ1NDM4YjgyN2YyNmY4OTI2NDRkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYnVsZzEyNjIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QnVsZ2FyaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5ZTIzNmZiZjAxMzRkODg4ZmI1M2RkY2YzOWExY2ZmLnNldENvbnRlbnQoaHRtbF9kYmQzODdlZDRiNjk0NTQzOGI4MjdmMjZmODkyNjQ0ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xYTg5MGRjZDZhMzg0NGNjOThiMDM3YmQ0ZGMyNWQ1OC5iaW5kUG9wdXAocG9wdXBfYjllMjM2ZmJmMDEzNGQ4ODhmYjUzZGRjZjM5YTFjZmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdjNDRkYTdjNjUyNTRjYTg4MDhiMjcwNjg1NDEzNjViID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzFkZTQ4MzhiYzllZTQ2NDQ5NTI2OWNiZGRhMWU3ZTBjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk4NGU5MjNmMWIwNjRlYzc4NTE4MmM4N2EyNTFiYjNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyMWVjYzVhNjBhMzRjZDdiODIzNjNkODQ3OWI5NDUwID0gJChgPGRpdiBpZD0iaHRtbF9hMjFlY2M1YTYwYTM0Y2Q3YjgyMzYzZDg0NzliOTQ1MCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ODRlOTIzZjFiMDY0ZWM3ODUxODJjODdhMjUxYmIzZS5zZXRDb250ZW50KGh0bWxfYTIxZWNjNWE2MGEzNGNkN2I4MjM2M2Q4NDc5Yjk0NTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2M0NGRhN2M2NTI1NGNhODgwOGIyNzA2ODU0MTM2NWIuYmluZFBvcHVwKHBvcHVwXzk4NGU5MjNmMWIwNjRlYzc4NTE4MmM4N2EyNTFiYjNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZjFlYzI3NDU1MGU0YWMwODU2MzNhMWEyZWYwYzkyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xZGU0ODM4YmM5ZWU0NjQ0OTUyNjljYmRkYTFlN2UwYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMjhiOWFiNzI5MjM0MDdhYThlNGRkNGUzOWU0ZDVmMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yOTE0ZjZhNjllMDE0OTMzYTZiMGRmMTkzZTc3NTk4NSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjkxNGY2YTY5ZTAxNDkzM2E2YjBkZjE5M2U3NzU5ODUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MyOGI5YWI3MjkyMzQwN2FhOGU0ZGQ0ZTM5ZTRkNWYyLnNldENvbnRlbnQoaHRtbF8yOTE0ZjZhNjllMDE0OTMzYTZiMGRmMTkzZTc3NTk4NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jZjFlYzI3NDU1MGU0YWMwODU2MzNhMWEyZWYwYzkyNi5iaW5kUG9wdXAocG9wdXBfYzI4YjlhYjcyOTIzNDA3YWE4ZTRkZDRlMzllNGQ1ZjIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmNWRmNDk0MTJmNDQ3NTc4NzhmODFjMzg2NmJjMWU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xZGU0ODM4YmM5ZWU0NjQ0OTUyNjljYmRkYTFlN2UwYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZDgwYWY5NThjODk0ZmU4YmVjNDZmMmJjYjMxNDJkMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2NiOWU5NDQ5YzI0NzE3OTQ5ZTA4ZjFiMDQ5MjA2YSA9ICQoYDxkaXYgaWQ9Imh0bWxfMTNjYjllOTQ0OWMyNDcxNzk0OWUwOGYxYjA0OTIwNmEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGQ4MGFmOTU4Yzg5NGZlOGJlYzQ2ZjJiY2IzMTQyZDEuc2V0Q29udGVudChodG1sXzEzY2I5ZTk0NDljMjQ3MTc5NDllMDhmMWIwNDkyMDZhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmNWRmNDk0MTJmNDQ3NTc4NzhmODFjMzg2NmJjMWU2LmJpbmRQb3B1cChwb3B1cF8wZDgwYWY5NThjODk0ZmU4YmVjNDZmMmJjYjMxNDJkMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWZiZmU1MzQ3ZDVmNDZhYThhNDBjNTI3YjRiM2YyMTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMWRlNDgzOGJjOWVlNDY0NDk1MjY5Y2JkZGExZTdlMGMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzQxYWM0Y2M2NGQ3NGI4YmJjM2ZjOGRlYzAxZjE5MDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODBhZjkxODY5MGMyNDA0N2I3MGZlNGRmZjdhOTczM2YgPSAkKGA8ZGl2IGlkPSJodG1sXzgwYWY5MTg2OTBjMjQwNDdiNzBmZTRkZmY3YTk3MzNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0MWFjNGNjNjRkNzRiOGJiYzNmYzhkZWMwMWYxOTAwLnNldENvbnRlbnQoaHRtbF84MGFmOTE4NjkwYzI0MDQ3YjcwZmU0ZGZmN2E5NzMzZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85ZmJmZTUzNDdkNWY0NmFhOGE0MGM1MjdiNGIzZjIxNi5iaW5kUG9wdXAocG9wdXBfYzQxYWM0Y2M2NGQ3NGI4YmJjM2ZjOGRlYzAxZjE5MDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75151de80>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stroke_features = ['Ergative', 'Ergative', 'Accusative', 'Accusative', 'Accusative']\n",
    "m = lingtypology.LingMap(languages)\n",
    "m.add_features(features)\n",
    "m.add_stroke_features(stroke_features)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.9. Heatmaps <a name=\"heatmaps\"></a>\n",
    "It would seem unfair if we could only draw circles.  \n",
    "Let's draw a heatmap (the more density, the more languages with Large consonant inventory) using `add_heatmap` method.  \n",
    "It is from Wals. For more information consult [this](https://oneadder.github.io/lingtypology/db_apis)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Citation for feature 1A:\n",
      "Ian Maddieson. 2013. Consonant Inventories.\n",
      "In: Dryer, Matthew S. & Haspelmath, Martin (eds.)\n",
      "The World Atlas of Language Structures Online.\n",
      "Leipzig: Max Planck Institute for Evolutionary Anthropology.\n",
      "(Available online at http://wals.info/chapter/1, Accessed on 2019-06-13.)\n",
      "\n"
     ]
    },
    {
     "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2FkN2M5YWZmNjJkMDQwMWRhMWI0NmZjYzM2YmE4YjdjIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vbGVhZmxldC5naXRodWIuaW8vTGVhZmxldC5oZWF0L2Rpc3QvbGVhZmxldC1oZWF0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4gICAgCiAgICAKICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfYWQ3YzlhZmY2MmQwNDAxZGExYjQ2ZmNjMzZiYThiN2MiID48L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwX2FkN2M5YWZmNjJkMDQwMWRhMWI0NmZjYzM2YmE4YjdjID0gTC5tYXAoCiAgICAgICAgJ21hcF9hZDdjOWFmZjYyZDA0MDFkYTFiNDZmY2MzNmJhOGI3YycsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2FkN2M5YWZmNjJkMDQwMWRhMWI0NmZjYzM2YmE4YjdjKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2RkZGIwMjIzMTI4NTQ0ZDA4M2RiMzkzZWZlNzAyNjkwID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9hZDdjOWFmZjYyZDA0MDFkYTFiNDZmY2MzNmJhOGI3Yyk7CiAgICAKICAgICAgICAgICAgdmFyIGhlYXRfbWFwXzUyYTFiMzRjZTJlMDQxMDRhOGE2NGNiYTBlODJjOWNlID0gTC5oZWF0TGF5ZXIoCiAgICAgICAgICAgICAgICBbWy0yNC4wLCAyMS41XSwgWy0xOC45MTY2NjY2NjY3LCAyMS45MTY2NjY2NjY3XSwgWzQzLjA4MzMzMzMzMzMsIDQxLjBdLCBbMzQuOTE2NjY2NjY2NywgLTEwNy41ODMzMzMzMzNdLCBbNDIuMCwgNDYuODMzMzMzMzMzM10sIFstMjQuMCwgMTM2LjBdLCBbNDIuNSwgNDYuNV0sIFszNi41LCA3NC41XSwgWzU5LjAsIC0xMDYuMF0sIFs0My41LCAtMTI0LjE2NjY2NjY2N10sIFstMi4zMzMzMzMzMzMzMywgNDAuNV0sIFstMjAuNSwgMjQuNV0sIFs5LjU4MzMzMzMzMzMzMDAwMSwgOS4zMzMzMzMzMzMzMzAwMDFdLCBbLTMuNzUsIDM1LjE2NjY2NjY2NjddLCBbNTMuMCwgLTEzMi4wXSwgWzI1LjAsIDc3LjBdLCBbMjguMCwgMTA1LjBdLCBbNDIuMTY2NjY2NjY2NywgNDYuMjVdLCBbLTIwLjQxNjY2NjY2NjcsIDE2Ni41ODMzMzMzMzI5OTk5OF0sIFs0My4xNjY2NjY2NjY3LCA0NS4wODMzMzMzMzMzXSwgWzU1LjAsIC04LjBdLCBbLTEzLjAsIC03Ni4wXSwgWzE1LjE2NjY2NjY2NjcwMDAwMSwgMTA3LjgzMzMzMzMzM10sIFstMTkuMCwgMjEuMF0sIFs0My41LCA0My41XSwgWzM1LjUsIDcyLjVdLCBbMTIuNSwgLTEzLjI1XSwgWzUxLjAsIC0xMjcuMF0sIFs0Mi4xNjY2NjY2NjY3LCA0Ny4xNjY2NjY2NjY3XSwgWzQxLjY2NjY2NjY2NjcsIDQ3LjgzMzMzMzMzMzNdLCBbNTUuMCwgMjQuMF0sIFs0OC4wLCAtMTIyLjBdLCBbMTkuNDE2NjY2NjY2NywgLTk5LjkxNjY2NjY2NjddLCBbMjcuNSwgMTAwLjBdLCBbMS4zMzMzMzMzMzMzMywgMzAuMjVdLCBbMTIuMDgzMzMzMzMzMjk5OTk5LCAxMC45MTY2NjY2NjY3MDAwMDFdLCBbNDkuNjY2NjY2NjY2NywgLTEyNi42NjY2NjY2NjddLCBbMjMuMjUsIDk5LjVdLCBbNTIuMCwgMjAuMF0sIFsyLjY2NjY2NjY2NjY3LCAtNzYuMF0sIFs0MS41LCA0Ny40MTY2NjY2NjY3XSwgWzY0LjY2NjY2NjY2NjcsIDE2Ljc1XSwgWy01LjAsIDM1LjBdLCBbMTQuODMzMzMzMzMzMjk5OTk5LCAxMDguMF0sIFs1Mi4wLCAtMTIwLjBdLCBbMjYuMCwgNjkuMF0sIFs0OS42NjY2NjY2NjY3LCAtMTIzLjE2NjY2NjY2N10sIFsyNi4wLCAxMDcuNV0sIFsxMS4wLCAxMS44MzMzMzMzMzMyOTk5OTldLCBbMzAuMCwgOTEuMF0sIFs1OS4wLCAtMTM1LjBdLCBbNTIuNSwgLTEyOS4wXSwgWzQyLjUsIDQ1LjVdLCBbLTExLjM2NjY2NjY2NjcsIDE1NC4xNjY2NjY2NjcwMDAwMl0sIFstMjAuMCwgMjMuNV0sIFszNS43NSwgLTg2Ljc1XSwgWzguNSwgMjUuMjVdXSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBtaW5PcGFjaXR5OiAwLjUsCiAgICAgICAgICAgICAgICAgICAgbWF4Wm9vbTogMTgsCiAgICAgICAgICAgICAgICAgICAgbWF4OiAxLjAsCiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiAyNSwKICAgICAgICAgICAgICAgICAgICBibHVyOiAxNSwKICAgICAgICAgICAgICAgICAgICBncmFkaWVudDogbnVsbAogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwX2FkN2M5YWZmNjJkMDQwMWRhMWI0NmZjYzM2YmE4YjdjKTsKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75144c5f8>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from lingtypology.datasets import Wals\n",
    "wals_page = Wals('1a').get_df()\n",
    "\n",
    "#First initialize LingMap without languages\n",
    "m = lingtypology.LingMap()\n",
    "#Add heatmap from  the Wals data\n",
    "m.add_heatmap(wals_page[wals_page._1A_desc == 'Large'].coordinates)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.10. Title <a name=\"title_\"></a>\n",
    "To add title, use `title` attribute."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzdkZDZmMGZlMGRlMTQ0NDU4N2MwZDk1NDk1MjIyZjZmIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vbGVhZmxldC5naXRodWIuaW8vTGVhZmxldC5oZWF0L2Rpc3QvbGVhZmxldC1oZWF0LmpzIj48L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4gICAgCiAgICAKICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfN2RkNmYwZmUwZGUxNDQ0NTg3YzBkOTU0OTUyMjJmNmYiID48L2Rpdj4KICAgIAo8IS0tIEJhc2VkIG9uIHRoZSB0ZW1wbGF0ZSBmcm9tIGhlcmU6IGh0dHBzOi8vbmJ2aWV3ZXIuanVweXRlci5vcmcvZ2lzdC90YWxiZXJ0Yy11c2dzLzE4Zjg5MDFmYzk4ZjEwOWYyYjcxMTU2Y2YzYWM4MWNkIC0tPgo8IWRvY3R5cGUgaHRtbD4KPGh0bWwgbGFuZz0iZW4iPgo8aGVhZD4KICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS90aGVtZXMvYmFzZS9qcXVlcnktdWkuY3NzIj4KCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQuanMiPjwvc2NyaXB0PgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD4KICAKICA8c2NyaXB0PgogICAgJChmdW5jdGlvbigpewogICAgICAgICQoIiNtYXBsZWdlbmQwIikuZHJhZ2dhYmxlKHsKICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIChldmVudCwgdWkpIHsKICAgICAgICAgICAgICAgICQodGhpcykuY3NzKHsKICAgICAgICAgICAgICAgICAgICByaWdodDogImF1dG8iLAogICAgICAgICAgICAgICAgICAgIHRvcDogImF1dG8iLAogICAgICAgICAgICAgICAgICAgIGJvdHRvbTogImF1dG8iCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSk7CiAgPC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+CgoKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyB0b3A6IDIwcHg7IGxlZnQ6IDQwJTsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGFyZ2UgQ29uc29uYW50IEludmVudG9yaWVzPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF83ZGQ2ZjBmZTBkZTE0NDQ1ODdjMGQ5NTQ5NTIyMmY2ZiA9IEwubWFwKAogICAgICAgICdtYXBfN2RkNmYwZmUwZGUxNDQ0NTg3YzBkOTU0OTUyMjJmNmYnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF83ZGQ2ZjBmZTBkZTE0NDQ1ODdjMGQ5NTQ5NTIyMmY2Zik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9hNGY0ZGEzZDhiMjU0YmMzOTQzYTY4NzhlYTE1MmMyNyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfN2RkNmYwZmUwZGUxNDQ0NTg3YzBkOTU0OTUyMjJmNmYpOwogICAgCiAgICAgICAgICAgIHZhciBoZWF0X21hcF9mZjBmNzM0OTI3YTk0ZDFkOTNjYjgyNzllMDA0MWQzYyA9IEwuaGVhdExheWVyKAogICAgICAgICAgICAgICAgW1stMjQuMCwgMjEuNV0sIFstMTguOTE2NjY2NjY2NywgMjEuOTE2NjY2NjY2N10sIFs0My4wODMzMzMzMzMzLCA0MS4wXSwgWzM0LjkxNjY2NjY2NjcsIC0xMDcuNTgzMzMzMzMzXSwgWzQyLjAsIDQ2LjgzMzMzMzMzMzNdLCBbLTI0LjAsIDEzNi4wXSwgWzQyLjUsIDQ2LjVdLCBbMzYuNSwgNzQuNV0sIFs1OS4wLCAtMTA2LjBdLCBbNDMuNSwgLTEyNC4xNjY2NjY2NjddLCBbLTIuMzMzMzMzMzMzMzMsIDQwLjVdLCBbLTIwLjUsIDI0LjVdLCBbOS41ODMzMzMzMzMzMzAwMDEsIDkuMzMzMzMzMzMzMzMwMDAxXSwgWy0zLjc1LCAzNS4xNjY2NjY2NjY3XSwgWzUzLjAsIC0xMzIuMF0sIFsyNS4wLCA3Ny4wXSwgWzI4LjAsIDEwNS4wXSwgWzQyLjE2NjY2NjY2NjcsIDQ2LjI1XSwgWy0yMC40MTY2NjY2NjY3LCAxNjYuNTgzMzMzMzMyOTk5OThdLCBbNDMuMTY2NjY2NjY2NywgNDUuMDgzMzMzMzMzM10sIFs1NS4wLCAtOC4wXSwgWy0xMy4wLCAtNzYuMF0sIFsxNS4xNjY2NjY2NjY3MDAwMDEsIDEwNy44MzMzMzMzMzNdLCBbLTE5LjAsIDIxLjBdLCBbNDMuNSwgNDMuNV0sIFszNS41LCA3Mi41XSwgWzEyLjUsIC0xMy4yNV0sIFs1MS4wLCAtMTI3LjBdLCBbNDIuMTY2NjY2NjY2NywgNDcuMTY2NjY2NjY2N10sIFs0MS42NjY2NjY2NjY3LCA0Ny44MzMzMzMzMzMzXSwgWzU1LjAsIDI0LjBdLCBbNDguMCwgLTEyMi4wXSwgWzE5LjQxNjY2NjY2NjcsIC05OS45MTY2NjY2NjY3XSwgWzI3LjUsIDEwMC4wXSwgWzEuMzMzMzMzMzMzMzMsIDMwLjI1XSwgWzEyLjA4MzMzMzMzMzI5OTk5OSwgMTAuOTE2NjY2NjY2NzAwMDAxXSwgWzQ5LjY2NjY2NjY2NjcsIC0xMjYuNjY2NjY2NjY3XSwgWzIzLjI1LCA5OS41XSwgWzUyLjAsIDIwLjBdLCBbMi42NjY2NjY2NjY2NywgLTc2LjBdLCBbNDEuNSwgNDcuNDE2NjY2NjY2N10sIFs2NC42NjY2NjY2NjY3LCAxNi43NV0sIFstNS4wLCAzNS4wXSwgWzE0LjgzMzMzMzMzMzI5OTk5OSwgMTA4LjBdLCBbNTIuMCwgLTEyMC4wXSwgWzI2LjAsIDY5LjBdLCBbNDkuNjY2NjY2NjY2NywgLTEyMy4xNjY2NjY2NjddLCBbMjYuMCwgMTA3LjVdLCBbMTEuMCwgMTEuODMzMzMzMzMzMjk5OTk5XSwgWzMwLjAsIDkxLjBdLCBbNTkuMCwgLTEzNS4wXSwgWzUyLjUsIC0xMjkuMF0sIFs0Mi41LCA0NS41XSwgWy0xMS4zNjY2NjY2NjY3LCAxNTQuMTY2NjY2NjY3MDAwMDJdLCBbLTIwLjAsIDIzLjVdLCBbMzUuNzUsIC04Ni43NV0sIFs4LjUsIDI1LjI1XV0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbWluT3BhY2l0eTogMC41LAogICAgICAgICAgICAgICAgICAgIG1heFpvb206IDE4LAogICAgICAgICAgICAgICAgICAgIG1heDogMS4wLAogICAgICAgICAgICAgICAgICAgIHJhZGl1czogMjUsCiAgICAgICAgICAgICAgICAgICAgYmx1cjogMTUsCiAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnQ6IG51bGwKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF83ZGQ2ZjBmZTBkZTE0NDQ1ODdjMGQ5NTQ5NTIyMmY2Zik7CiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7513f8160>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.title = 'Large Consonant Inventories'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.11. Lines <a name=\"lines\"></a>\n",
    "\n",
    "Let's say we have this list of languages:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "balkan = ['Modern Greek', 'Romanian', 'Bulgarian', 'Macedonian', 'Gheg Albanian']\n",
    "other = ['Ukrainian', 'Turkish', 'Italian']\n",
    "languages_all = balkan + other"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We want the ones from Balkan sprachbund connected with lines with a popup that says 'Balkan'. It is possible using `add_line` method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzRmOGE1N2Q0ODQ4ZDQ0NjE5MzlmOTBmYWY2MDMwMjc4IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF80ZjhhNTdkNDg0OGQ0NDYxOTM5ZjkwZmFmNjAzMDI3OCIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfNGY4YTU3ZDQ4NDhkNDQ2MTkzOWY5MGZhZjYwMzAyNzggPSBMLm1hcCgKICAgICAgICAnbWFwXzRmOGE1N2Q0ODQ4ZDQ0NjE5MzlmOTBmYWY2MDMwMjc4JywgewogICAgICAgIGNlbnRlcjogWzQzLCAyN10sCiAgICAgICAgem9vbTogNSwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF80ZjhhNTdkNDg0OGQ0NDYxOTM5ZjkwZmFmNjAzMDI3OCk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl8xMTA2YmU2YWJmOWM0MWYwOTAzZWQ5ZWJlZGU1Yzc3ZCA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfNGY4YTU3ZDQ4NDhkNDQ2MTkzOWY5MGZhZjYwMzAyNzgpOwogICAgCiAgICAgICAgICAgICAgICB2YXIgcG9seV9saW5lX2MzMTE0Nzg4ODA3NzQxYWY4YjI0M2ZiYjQ5ZDQ5MzVjID0gTC5wb2x5bGluZSgKICAgICAgICAgICAgICAgICAgICBbWzQyLjMyMjQsIDI0Ljg2OTldLCBbNDYuMzkxMywgMjQuMjI1Nl0sIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLCBbNDEuNTk1NywgMjEuNzkzMl0sIFs0Mi4zMTcsIDIxLjM4MzddXSwKICAgICAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICJibGFjayIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogZmFsc2UsCiAgImZpbGxDb2xvciI6ICJibGFjayIsCiAgImZpbGxPcGFjaXR5IjogMC4yLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAibm9DbGlwIjogZmFsc2UsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInNtb290aEZhY3RvciI6IDEuMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMwp9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNGY4YTU3ZDQ4NDhkNDQ2MTkzOWY5MGZhZjYwMzAyNzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjcyMDNlZTdjNmRhNDM4ZTljNGQxNGZhZWFiZDQ2NTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmVkMzJjMmY4YjFkNDEyNjhkNzFmN2QwYjAzZTFlYWYgPSAkKGA8ZGl2IGlkPSJodG1sX2JlZDMyYzJmOGIxZDQxMjY4ZDcxZjdkMGIwM2UxZWFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5CYWxrYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I3MjAzZWU3YzZkYTQzOGU5YzRkMTRmYWVhYmQ0NjUyLnNldENvbnRlbnQoaHRtbF9iZWQzMmMyZjhiMWQ0MTI2OGQ3MWY3ZDBiMDNlMWVhZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgcG9seV9saW5lX2MzMTE0Nzg4ODA3NzQxYWY4YjI0M2ZiYjQ5ZDQ5MzVjLmJpbmRQb3B1cChwb3B1cF9iNzIwM2VlN2M2ZGE0MzhlOWM0ZDE0ZmFlYWJkNDY1MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNDI5MjRlYmQ4ZmQ1NGQ0ODg3ODEyNGNhYjU1NDYyYzggPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzRmOGE1N2Q0ODQ4ZDQ0NjE5MzlmOTBmYWY2MDMwMjc4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzRjZjdiZWJhYWM0NGM4YTI5OTQ4ZTUzYmNlMTRlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMjQsIDI0Ljg2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MjkyNGViZDhmZDU0ZDQ4ODc4MTI0Y2FiNTU0NjJjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjZjMwYzNlMGFhYTQyYjU4ZWFlMmM1NmJhODllMTEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyOTI0ZWJkOGZkNTRkNDg4NzgxMjRjYWI1NTQ2MmM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjVkMTM0M2Q2OTM2NDgzOGFmY2MwODJkNjhmMTgwNDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MjkyNGViZDhmZDU0ZDQ4ODc4MTI0Y2FiNTU0NjJjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZjNTdhODA1NDc5ZjRmZGZhY2U1NDczZWE1NmI1ZjNiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTk1NywgMjEuNzkzMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyOTI0ZWJkOGZkNTRkNDg4NzgxMjRjYWI1NTQ2MmM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDc4ZDExNWNkZDdmNDhiNWE2MzNhZWI4YTFiMjE2ZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Mi4zMTcsIDIxLjM4MzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MjkyNGViZDhmZDU0ZDQ4ODc4MTI0Y2FiNTU0NjJjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5ZjVkNmViNmJhYzQ5Yzg5Yjk5N2ZhY2RlNmE2ODZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMTc1ODQxOTk5OTk5OTk2LCAyNC4zOTU3ODU5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MjkyNGViZDhmZDU0ZDQ4ODc4MTI0Y2FiNTU0NjJjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3YWM2MDQyZTU3ODQ1YTQ4NzRiODc5OGFiOWRiZGNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyOTI0ZWJkOGZkNTRkNDg4NzgxMjRjYWI1NTQ2MmM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjI5N2I5M2U3YzIyNGU4MWIzNGRmZWViNmI5OThlNGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wNDY0LCAxMi42NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDI5MjRlYmQ4ZmQ1NGQ0ODg3ODEyNGNhYjU1NDYyYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMThiNzViOTBmY2Q0ODkyYWU3ZjFhNmI1MTQyZWZhMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMyMjQsIDI0Ljg2OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MjkyNGViZDhmZDU0ZDQ4ODc4MTI0Y2FiNTU0NjJjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wNWRkNWY1MzcxY2E0YmQ5ODRkNzNlNzIxNWVkMmYxZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOWVlMzE1Y2FmMzI0M2RkODE5ODdiY2FiZGQ5ZTc3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTllZTMxNWNhZjMyNDNkZDgxOTg3YmNhYmRkOWU3NzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tb2RlMTI0OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Nb2Rlcm4gR3JlZWs8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDVkZDVmNTM3MWNhNGJkOTg0ZDczZTcyMTVlZDJmMWUuc2V0Q29udGVudChodG1sX2E5ZWUzMTVjYWYzMjQzZGQ4MTk4N2JjYWJkZDllNzcxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxOGI3NWI5MGZjZDQ4OTJhZTdmMWE2YjUxNDJlZmExLmJpbmRQb3B1cChwb3B1cF8wNWRkNWY1MzcxY2E0YmQ5ODRkNzNlNzIxNWVkMmYxZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2MwMGE2ZDI2OTg4NGZiMjhhOThiM2JhYTM0NjYwY2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDI5MjRlYmQ4ZmQ1NGQ0ODg3ODEyNGNhYjU1NDYyYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWNjZjYwNjY3NTU0NGQxNzgwY2U2Nzc1NGJhOWU1NjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWMyM2ZiODhkYzZiNGFjNWJkMmQ0ODRmYzQyZjI2ODggPSAkKGA8ZGl2IGlkPSJodG1sX2VjMjNmYjg4ZGM2YjRhYzViZDJkNDg0ZmM0MmYyNjg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvcm9tYTEzMjciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Um9tYW5pYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOWNjZjYwNjY3NTU0NGQxNzgwY2U2Nzc1NGJhOWU1NjQuc2V0Q29udGVudChodG1sX2VjMjNmYjg4ZGM2YjRhYzViZDJkNDg0ZmM0MmYyNjg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdjMDBhNmQyNjk4ODRmYjI4YTk4YjNiYWEzNDY2MGNiLmJpbmRQb3B1cChwb3B1cF85Y2NmNjA2Njc1NTQ0ZDE3ODBjZTY3NzU0YmE5ZTU2NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTM2MTM1MDE3ZmRjNGQxMjliODYzNDc3MjBhYzc1OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MjkyNGViZDhmZDU0ZDQ4ODc4MTI0Y2FiNTU0NjJjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYzgyNDY0MzhjZDI0YmJmODBiNmVmYjNlZTI5Zjg1ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85MzdmN2MwMWJhNTA0YjUxODZiODdiNjNmNTA4YzgwNyA9ICQoYDxkaXYgaWQ9Imh0bWxfOTM3ZjdjMDFiYTUwNGI1MTg2Yjg3YjYzZjUwOGM4MDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idWxnMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdWxnYXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmM4MjQ2NDM4Y2QyNGJiZjgwYjZlZmIzZWUyOWY4NWQuc2V0Q29udGVudChodG1sXzkzN2Y3YzAxYmE1MDRiNTE4NmI4N2I2M2Y1MDhjODA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzNjEzNTAxN2ZkYzRkMTI5Yjg2MzQ3NzIwYWM3NThiLmJpbmRQb3B1cChwb3B1cF9mYzgyNDY0MzhjZDI0YmJmODBiNmVmYjNlZTI5Zjg1ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGEwYjJmZjEwMzBjNDYyNjg3ZGYyMjY2NjllYTQyODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MS41OTU3LCAyMS43OTMyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNDI5MjRlYmQ4ZmQ1NGQ0ODg3ODEyNGNhYjU1NDYyYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzIxOGUyNDk0YWZiNDUzZjg0MmQ0ZWZiYTRmZjA5Y2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjc1ZGIwZDA0Mjk3NGVjM2JkMmEzMmNkZDEyYmY5MzYgPSAkKGA8ZGl2IGlkPSJodG1sX2I3NWRiMGQwNDI5NzRlYzNiZDJhMzJjZGQxMmJmOTM2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbWFjZTEyNTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TWFjZWRvbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MjE4ZTI0OTRhZmI0NTNmODQyZDRlZmJhNGZmMDljZS5zZXRDb250ZW50KGh0bWxfYjc1ZGIwZDA0Mjk3NGVjM2JkMmEzMmNkZDEyYmY5MzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGEwYjJmZjEwMzBjNDYyNjg3ZGYyMjY2NjllYTQyODguYmluZFBvcHVwKHBvcHVwXzcyMThlMjQ5NGFmYjQ1M2Y4NDJkNGVmYmE0ZmYwOWNlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNjVmZGFjYTgzYzM0ZTc2YTgzNDlkODI3Njc0YjFmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQyLjMxNywgMjEuMzgzN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyOTI0ZWJkOGZkNTRkNDg4NzgxMjRjYWI1NTQ2MmM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1MTFjYTA1NDRhMTQ1Y2Y4MTQ0NjY5Mzk1MTMxMGRlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg4MmYyOTA3ZmU4ZjQ4ZDRhZDkxZDA3ODFhMTBkMjlhID0gJChgPGRpdiBpZD0iaHRtbF84ODJmMjkwN2ZlOGY0OGQ0YWQ5MWQwNzgxYTEwZDI5YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2doZWcxMjM4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdoZWcgQWxiYW5pYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTUxMWNhMDU0NGExNDVjZjgxNDQ2NjkzOTUxMzEwZGUuc2V0Q29udGVudChodG1sXzg4MmYyOTA3ZmU4ZjQ4ZDRhZDkxZDA3ODFhMTBkMjlhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y2NWZkYWNhODNjMzRlNzZhODM0OWQ4Mjc2NzRiMWYxLmJpbmRQb3B1cChwb3B1cF9lNTExY2EwNTQ0YTE0NWNmODE0NDY2OTM5NTEzMTBkZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI3MGQxYTc2MjdlNGRhOTlhZWMxYmY0YmM5MDQ5NjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4xNzU4NDE5OTk5OTk5OTYsIDI0LjM5NTc4NTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyOTI0ZWJkOGZkNTRkNDg4NzgxMjRjYWI1NTQ2MmM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E3ODIyM2Y3NmQ0NTQ0Y2JhYWZiNjU5YjFiMjY3MWJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhMWU0ZWNhMTVlZTQ4MDdhNTgyYmFjZjk5YmIyMzg4ID0gJChgPGRpdiBpZD0iaHRtbF9jYTFlNGVjYTE1ZWU0ODA3YTU4MmJhY2Y5OWJiMjM4OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3VrcmExMjUzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlVrcmFpbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hNzgyMjNmNzZkNDU0NGNiYWFmYjY1OWIxYjI2NzFiZS5zZXRDb250ZW50KGh0bWxfY2ExZTRlY2ExNWVlNDgwN2E1ODJiYWNmOTliYjIzODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTI3MGQxYTc2MjdlNGRhOTlhZWMxYmY0YmM5MDQ5NjIuYmluZFBvcHVwKHBvcHVwX2E3ODIyM2Y3NmQ0NTQ0Y2JhYWZiNjU5YjFiMjY3MWJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMjFkMjU3MThiYzk0ZTAwYmE1NTRkN2Y3ZTg5NzhiNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF80MjkyNGViZDhmZDU0ZDQ4ODc4MTI0Y2FiNTU0NjJjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNTJmYzM4OTVlN2U0ODU4ODk5MGZmYTcwOTM1NDBkYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xM2U2MTllZjI2OGE0ZjUwODhlOTI2Njk0MjY2YmRmZCA9ICQoYDxkaXYgaWQ9Imh0bWxfMTNlNjE5ZWYyNjhhNGY1MDg4ZTkyNjY5NDI2NmJkZmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1MmZjMzg5NWU3ZTQ4NTg4OTkwZmZhNzA5MzU0MGRjLnNldENvbnRlbnQoaHRtbF8xM2U2MTllZjI2OGE0ZjUwODhlOTI2Njk0MjY2YmRmZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMjFkMjU3MThiYzk0ZTAwYmE1NTRkN2Y3ZTg5NzhiNC5iaW5kUG9wdXAocG9wdXBfYzUyZmMzODk1ZTdlNDg1ODg5OTBmZmE3MDkzNTQwZGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkzMzcwYzQxMmNkYjQ1YjNhMDYzMWViNmY0YzljMjE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDQ2NCwgMTIuNjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzQyOTI0ZWJkOGZkNTRkNDg4NzgxMjRjYWI1NTQ2MmM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiMjFiOGI0MGZjODQ4ZjhiYzdjN2EyMmU3NWE4NzI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwYWZkMWNjZGM0MTQ5MDdiOGJkZTM1NTgyZjY3OGFjID0gJChgPGRpdiBpZD0iaHRtbF8yMGFmZDFjY2RjNDE0OTA3YjhiZGUzNTU4MmY2NzhhYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2l0YWwxMjgyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkl0YWxpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmIyMWI4YjQwZmM4NDhmOGJjN2M3YTIyZTc1YTg3MjYuc2V0Q29udGVudChodG1sXzIwYWZkMWNjZGM0MTQ5MDdiOGJkZTM1NTgyZjY3OGFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkzMzcwYzQxMmNkYjQ1YjNhMDYzMWViNmY0YzljMjE5LmJpbmRQb3B1cChwb3B1cF8yYjIxYjhiNDBmYzg0OGY4YmM3YzdhMjJlNzVhODcyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7513f8390>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Let's get the coordinates that we need to draw a line\n",
    "coordinates = map(lingtypology.glottolog.get_coordinates, balkan)\n",
    "m = lingtypology.LingMap(languages_all)\n",
    "m.add_line(coordinates, popup='Balkan')\n",
    "m.start_location = (43, 27)\n",
    "m.start_zoom = 5\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.12. Customizing markers <a name=\"markers\"></a>\n",
    "It is possible to set opacity and width of markers."
   ]
  },
  {
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2UzMDUyOTBjOWY2MzQ3ZmE4OWZiOTEzYjUzNTE3OWJiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9lMzA1MjkwYzlmNjM0N2ZhODlmYjkxM2I1MzUxNzliYiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+QWdnbHV0aW5hdGl2ZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BbmFseXRpYzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5JbmZsZWN0ZWQ8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CiAgICAKPCEtLSBCYXNlZCBvbiB0aGUgdGVtcGxhdGUgZnJvbSBoZXJlOiBodHRwczovL25idmlld2VyLmp1cHl0ZXIub3JnL2dpc3QvdGFsYmVydGMtdXNncy8xOGY4OTAxZmM5OGYxMDlmMmI3MTE1NmNmM2FjODFjZCAtLT4KPCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvdGhlbWVzL2Jhc2UvanF1ZXJ5LXVpLmNzcyI+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40LmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+CiAgCiAgPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICAkKCIjbWFwbGVnZW5kMSIpLmRyYWdnYWJsZSh7CiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICB0b3A6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKCjxkaXYgaWQ9J21hcGxlZ2VuZDEnIGNsYXNzPSdtYXBsZWdlbmQnIAogICAgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDo5OTk5OyBib3JkZXI6MnB4IHNvbGlkIGdyZXk7IGJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgIGJvcmRlci1yYWRpdXM6NnB4OyBwYWRkaW5nOiAxMHB4OyBmb250LXNpemU6MTRweDsgcmlnaHQ6IDIwcHg7IHRvcDogMjBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGVnZW5kPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmO29wYWNpdHk6MC43OyI+PC9zcGFuPkFjY3VzYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMDAwMDA7b3BhY2l0eTowLjc7Ij48L3NwYW4+RXJnYXRpdmU8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9lMzA1MjkwYzlmNjM0N2ZhODlmYjkxM2I1MzUxNzliYiA9IEwubWFwKAogICAgICAgICdtYXBfZTMwNTI5MGM5ZjYzNDdmYTg5ZmI5MTNiNTM1MTc5YmInLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9lMzA1MjkwYzlmNjM0N2ZhODlmYjkxM2I1MzUxNzliYik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl83M2Y2OWFhYTUxYzY0ZDBlYjgxMjExNzY0ZjY3MDYwMCA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfZTMwNTI5MGM5ZjYzNDdmYTg5ZmI5MTNiNTM1MTc5YmIpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9lMzA1MjkwYzlmNjM0N2ZhODlmYjkxM2I1MzUxNzliYik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjNjZmY4MzViN2MwNGNlZmEwY2NmZTJkZWEyZmYyNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwY2IxOTNhZTJmOTQzYjdiOTc2NjI1NGZjOGYwOTBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjE3YjRiNTJhMmJmNGU5ZDgzNjZlOTdmNjQxNjExNTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmU0MjRiMWNjM2MxNGEwMzhjNjc4YTMxNWNlMzYwMTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82ZDBjZmQ2NzNmMDI0OGVmYTZiOGMzMTQ1YjliYjI1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAsIDM5LjMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmU0MjRiMWNjM2MxNGEwMzhjNjc4YTMxNWNlMzYwMTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMGQzNDNjNDE2MTU0MzNhOTU2NzJhM2VkN2Q5NzU5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyODlmNzU4NDlkMTRlZTZhNTAyYzY2Njg5YjNmNmQzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmU0MjRiMWNjM2MxNGEwMzhjNjc4YTMxNWNlMzYwMTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMzBhODcwYmFkNWE0MTIzOTE1ZWE1ZGQ0MDAzMzE0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE0ZmJhYTU5ZWFhODRmNGI5NjIzYjQ4MGExMzIwNjA5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGJhNTUwNWNjNTE4NDEyM2IwODRhZWNiZTc3MmY2OWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wLCAzOS4zM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWZjNTA2MmM3MThlNDE1Mzg0YjRmMDE5NjA3ZjllNmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmU0MjRiMWNjM2MxNGEwMzhjNjc4YTMxNWNlMzYwMTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81Njk0MzY4ZmRjN2U0Mzc0YTc2Zjk5ZjVmZGMxZWIwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM2NDYsIDI1LjA0Njk5OTk5OTk5OTk5N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC45LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNmU0MjRiMWNjM2MxNGEwMzhjNjc4YTMxNWNlMzYwMTQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MTE5MjNkMTY0NWY0OTFiYTdiMDg2OWI0MmQwOGU0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTI5MTgyYTJhYWQ2NGMyMTllM2U4YmUwNjRkYTUwMzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA3ZDc4ZjNmMzczZDQ4YjBiNjQyOWY4NGY4ODVmYzIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDczMWU1MzQ3MzM4NDZiYmJhOGQ5MTY5ODA3OWM3NTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDgyLCA0My4zOTE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3ZWM1OTBiZjg4ZjRhZjliYTA4MmFlOGI0MzUwOWRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80Nzc1YjQyNmZiNGQ0YjU2ODhhYWQ0ZGQ2MGViN2I1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iM2U1NDU4N2FiNTg0NjhmODBhZjliNGI0ZWM0MTY3NSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjNlNTQ1ODdhYjU4NDY4ZjgwYWY5YjRiNGVjNDE2NzUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9idWxnMTI2MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5CdWxnYXJpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDc3NWI0MjZmYjRkNGI1Njg4YWFkNGRkNjBlYjdiNWMuc2V0Q29udGVudChodG1sX2IzZTU0NTg3YWI1ODQ2OGY4MGFmOWI0YjRlYzQxNjc1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E3ZWM1OTBiZjg4ZjRhZjliYTA4MmFlOGI0MzUwOWRkLmJpbmRQb3B1cChwb3B1cF80Nzc1YjQyNmZiNGQ0YjU2ODhhYWQ0ZGQ2MGViN2I1YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmY4NWM1MmEwZTg1NDJmNmE3NjBhMWRlZTM2NWZhYjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zM2UyOGU2OGNkMDA0OWRjYjhkZGMzZTY3MmJiY2EzYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iZmE0MzM0OTBlOGQ0MTRiOTdkMWE5MTM2ZDZjYzAzYiA9ICQoYDxkaXYgaWQ9Imh0bWxfYmZhNDMzNDkwZThkNDE0Yjk3ZDFhOTEzNmQ2Y2MwM2IiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzNlMjhlNjhjZDAwNDlkY2I4ZGRjM2U2NzJiYmNhM2Iuc2V0Q29udGVudChodG1sX2JmYTQzMzQ5MGU4ZDQxNGI5N2QxYTkxMzZkNmNjMDNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzZmODVjNTJhMGU4NTQyZjZhNzYwYTFkZWUzNjVmYWIwLmJpbmRQb3B1cChwb3B1cF8zM2UyOGU2OGNkMDA0OWRjYjhkZGMzZTY3MmJiY2EzYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzM2OTdjNzBiZjcwNGIwYmI1YWQxNzFmZTY0MWM2M2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjksCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82ZTQyNGIxY2MzYzE0YTAzOGM2NzhhMzE1Y2UzNjAxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZDFkMThhZDYwNDQ0OTQ2OTBhMTczMGY3OGFkMzRjZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84YTIyMWRlMGU5OWI0YjNmOWJlNzNiYzE0ZWQ2NzJkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfOGEyMjFkZTBlOTliNGIzZjliZTczYmMxNGVkNjcyZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VkMWQxOGFkNjA0NDQ5NDY5MGExNzMwZjc4YWQzNGNkLnNldENvbnRlbnQoaHRtbF84YTIyMWRlMGU5OWI0YjNmOWJlNzNiYzE0ZWQ2NzJkYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMzY5N2M3MGJmNzA0YjBiYjVhZDE3MWZlNjQxYzYzYi5iaW5kUG9wdXAocG9wdXBfZWQxZDE4YWQ2MDQ0NDk0NjkwYTE3MzBmNzhhZDM0Y2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5ZTNhZWYxYjI1MTRjNjRhMTk2M2QxMDhkNTBkNThhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMCwgMzkuMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE5NTE5NjIyZDgzYzQ5MDA5MGMzNDI0NmY1ODBhMDAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViMDExZGY0YTUyMTQyN2U5ODdkODM5OGI5MDk5ZWE3ID0gJChgPGRpdiBpZD0iaHRtbF81YjAxMWRmNGE1MjE0MjdlOTg3ZDgzOThiOTA5OWVhNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xOTUxOTYyMmQ4M2M0OTAwOTBjMzQyNDZmNTgwYTAwMy5zZXRDb250ZW50KGh0bWxfNWIwMTFkZjRhNTIxNDI3ZTk4N2Q4Mzk4YjkwOTllYTcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODllM2FlZjFiMjUxNGM2NGExOTYzZDEwOGQ1MGQ1OGEuYmluZFBvcHVwKHBvcHVwXzE5NTE5NjIyZDgzYzQ5MDA5MGMzNDI0NmY1ODBhMDAzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84N2Q2NWY1MjI4ODM0MzFlYTY0OThkMmEyMGY3ODI0NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwODIsIDQzLjM5MThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuOSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzZlNDI0YjFjYzNjMTRhMDM4YzY3OGEzMTVjZTM2MDE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2YmY3NmY4ODJmNjRlMWU5NGY2Y2MwM2JhZjJlOWUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q2MzJiMzhkOTYyZjQ1MTA5NTAwNTI2ZjcyZjRhMDdlID0gJChgPGRpdiBpZD0iaHRtbF9kNjMyYjM4ZDk2MmY0NTEwOTUwMDUyNmY3MmY0YTA3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NmJmNzZmODgyZjY0ZTFlOTRmNmNjMDNiYWYyZTllMi5zZXRDb250ZW50KGh0bWxfZDYzMmIzOGQ5NjJmNDUxMDk1MDA1MjZmNzJmNGEwN2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODdkNjVmNTIyODgzNDMxZWE2NDk4ZDJhMjBmNzgyNDYuYmluZFBvcHVwKHBvcHVwXzQ2YmY3NmY4ODJmNjRlMWU5NGY2Y2MwM2JhZjJlOWUyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75110c2b0>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(languages)\n",
    "m.add_features(features, radius=7, opacity=0.9)\n",
    "m.add_stroke_features(stroke_features, opacity=0.7)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.13. Start Location/Zoom shortcuts <a name=\"shortcuts\"></a>\n",
    "There are some shortcuts that can allow not to choose `start_location` and `start_zoom` manually."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2QzM2Q2ZGQ2ZDViMTRlNGM5YjJmYTlhNmUwNzQwNDBmIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kMzNkNmRkNmQ1YjE0ZTRjOWIyZmE5YTZlMDc0MDQwZiIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfZDMzZDZkZDZkNWIxNGU0YzliMmZhOWE2ZTA3NDA0MGYgPSBMLm1hcCgKICAgICAgICAnbWFwX2QzM2Q2ZGQ2ZDViMTRlNGM5YjJmYTlhNmUwNzQwNDBmJywgewogICAgICAgIGNlbnRlcjogWzUwLCAwXSwKICAgICAgICB6b29tOiA0LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2QzM2Q2ZGQ2ZDViMTRlNGM5YjJmYTlhNmUwNzQwNDBmKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzk2MzA2ZTc3ZmVkYTQ2NTY5NzdlYmI1NjZiYzIwNzdjID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9kMzNkNmRkNmQ1YjE0ZTRjOWIyZmE5YTZlMDc0MDQwZik7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwX2QzM2Q2ZGQ2ZDViMTRlNGM5YjJmYTlhNmUwNzQwNDBmKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MDUyM2FkNWE0ZTM0MmFjYTAwNWExNWYwNDZlZDY2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zODgyNmY0N2YyOTE0MDc5ODY5OWRkMjBhNjk3NTJiNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyNzU4YmRmOGUxNzRkYWE4Yjc5ZDc1MDY2YThlNjY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTguNTUsIDI1LjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zZmQyMmRmNjYxY2M0ODBmYWNkNWEyNjkzZmEwMmQ1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzM4ODI2ZjQ3ZjI5MTQwNzk4Njk5ZGQyMGE2OTc1MmI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWM1MDFjYjc3MGI3NGE3ZjhmYTg4MDQ1OWJhNWZlN2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDNhNTJiMzcxN2Q0YTg0YWNmNGQ2OTcyODAzNWJlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zODgyNmY0N2YyOTE0MDc5ODY5OWRkMjBhNjk3NTJiNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyOGU1Yjc2YTgwYTQ5YjlhMWZlOTc2OTZhYzZjY2MyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDQ2NCwgMTIuNjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzM4ODI2ZjQ3ZjI5MTQwNzk4Njk5ZGQyMGE2OTc1MmI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGQ4ZjczODNiMGI2NDc3M2JmMTA2NzE5MmMyM2U5NzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNDFmNjQ3MTAzYzU0MWJmYTkwYzM5ZTlhNWQzNTk0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzM4ODI2ZjQ3ZjI5MTQwNzk4Njk5ZGQyMGE2OTc1MmI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWIyZGM1NTk2OGMxNGVmMWFkYzNkMTY3OTc0N2QzMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZTZiMzY3ZTVjOTg0MmFjOGJiMWU0ODRhMDY2NzEzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZTQ3ZjllZTkzOGY0ZDhlOGMxYzljZjZkNTcxNmY4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zODgyNmY0N2YyOTE0MDc5ODY5OWRkMjBhNjk3NTJiNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NmRmYTE3NDM3NTU0MGRhODU3NjM3OWM4MjdiMjg5MSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjJjNzFmYWZkM2Q0YmMxOWJiYWIzNWFlMzk3NTVmMiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjIyYzcxZmFmZDNkNGJjMTliYmFiMzVhZTM5NzU1ZjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pcmlzMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JcmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NmRmYTE3NDM3NTU0MGRhODU3NjM3OWM4MjdiMjg5MS5zZXRDb250ZW50KGh0bWxfNjIyYzcxZmFmZDNkNGJjMTliYmFiMzVhZTM5NzU1ZjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWU0N2Y5ZWU5MzhmNGQ4ZThjMWM5Y2Y2ZDU3MTZmOGYuYmluZFBvcHVwKHBvcHVwXzU2ZGZhMTc0Mzc1NTQwZGE4NTc2Mzc5YzgyN2IyODkxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYTRkZTE5MzcxMjE0NTYwOWQyMmU4NWU5MjdmOTExNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzM4ODI2ZjQ3ZjI5MTQwNzk4Njk5ZGQyMGE2OTc1MmI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhOTE1ZDBjYjE1ZjRjNDlhNzk4Njg4NmQ5Njc0ODdjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFlZjAyMDMzMjA1NDRjNDI5NDIzZGNkZGQ0N2JkY2QzID0gJChgPGRpdiBpZD0iaHRtbF8xZWYwMjAzMzIwNTQ0YzQyOTQyM2RjZGRkNDdiZGNkMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2VzdG8xMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVzdG9uaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhOTE1ZDBjYjE1ZjRjNDlhNzk4Njg4NmQ5Njc0ODdjLnNldENvbnRlbnQoaHRtbF8xZWYwMjAzMzIwNTQ0YzQyOTQyM2RjZGRkNDdiZGNkMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYTRkZTE5MzcxMjE0NTYwOWQyMmU4NWU5MjdmOTExNy5iaW5kUG9wdXAocG9wdXBfYmE5MTVkMGNiMTVmNGM0OWE3OTg2ODg2ZDk2NzQ4N2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ0YmY1NjJmMTM4ODRmMGRhMjNmNzQ1MzVlMDEyNDg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuOTIsIDEwLjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTVmYTA5ZjdiMDNhNGYyZGFiZDBkZTA2ZGEzMGVhZTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDcxNzIzZjAzN2Y2NDgzN2FhNWJlYmVlMGYxZDg0YWIgPSAkKGA8ZGl2IGlkPSJodG1sX2Q3MTcyM2YwMzdmNjQ4MzdhYTViZWJlZTBmMWQ4NGFiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydzEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9yd2VnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1ZmEwOWY3YjAzYTRmMmRhYmQwZGUwNmRhMzBlYWU3LnNldENvbnRlbnQoaHRtbF9kNzE3MjNmMDM3ZjY0ODM3YWE1YmViZWUwZjFkODRhYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80NGJmNTYyZjEzODg0ZjBkYTIzZjc0NTM1ZTAxMjQ4NC5iaW5kUG9wdXAocG9wdXBfYTVmYTA5ZjdiMDNhNGYyZGFiZDBkZTA2ZGEzMGVhZTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5YTRhZjQ5ZTIxZTQ4MGM5ZDYwOTVjYzc2NzhmY2ZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzM4ODI2ZjQ3ZjI5MTQwNzk4Njk5ZGQyMGE2OTc1MmI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzFiYmJkYTQyMzFiMDQwZWE5NGVmMjVlNzM0NjYwNTVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RkOWJjMDNmMGI5NjQ1ODY5N2NmNDUxNTRkOTE0MzY4ID0gJChgPGRpdiBpZD0iaHRtbF9kZDliYzAzZjBiOTY0NTg2OTdjZjQ1MTU0ZDkxNDM2OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3JvbWExMzI3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJvbWFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFiYmJkYTQyMzFiMDQwZWE5NGVmMjVlNzM0NjYwNTVhLnNldENvbnRlbnQoaHRtbF9kZDliYzAzZjBiOTY0NTg2OTdjZjQ1MTU0ZDkxNDM2OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80OWE0YWY0OWUyMWU0ODBjOWQ2MDk1Y2M3Njc4ZmNmYi5iaW5kUG9wdXAocG9wdXBfMWJiYmRhNDIzMWIwNDBlYTk0ZWYyNWU3MzQ2NjA1NWEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJmMWY4MmY1YWQwZDQ0MDdiNGJkN2Q1ZTAyNjhhZmY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzM4ODI2ZjQ3ZjI5MTQwNzk4Njk5ZGQyMGE2OTc1MmI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzMmJkMGI1ZjdiYTQ4OWVhN2Q1MmYwMDUzZTA0NzM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M1ODU0NjVlY2RhZTQ4OTJhMDhmMTAzNjFlZTg2Yjk5ID0gJChgPGRpdiBpZD0iaHRtbF9jNTg1NDY1ZWNkYWU0ODkyYTA4ZjEwMzYxZWU4NmI5OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzJiZDBiNWY3YmE0ODllYTdkNTJmMDA1M2UwNDczOC5zZXRDb250ZW50KGh0bWxfYzU4NTQ2NWVjZGFlNDg5MmEwOGYxMDM2MWVlODZiOTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmYxZjgyZjVhZDBkNDQwN2I0YmQ3ZDVlMDI2OGFmZjUuYmluZFBvcHVwKHBvcHVwXzAzMmJkMGI1ZjdiYTQ4OWVhN2Q1MmYwMDUzZTA0NzM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYjNiMTYxN2Q4NDg0YWE1OTgxYWJlYjYwMzRmNzY2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zODgyNmY0N2YyOTE0MDc5ODY5OWRkMjBhNjk3NTJiNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNzYyZDI5YzY5OTI0NTg4OTUxMTZiOTQ5MWI1NjM5OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lOTg1YjJiZWUyODY0YTA3OGM1MjMwMmRjNDBhYTA4ZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTk4NWIyYmVlMjg2NGEwNzhjNTIzMDJkYzQwYWEwOGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pdGFsMTI4MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JdGFsaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q3NjJkMjljNjk5MjQ1ODg5NTExNmI5NDkxYjU2Mzk4LnNldENvbnRlbnQoaHRtbF9lOTg1YjJiZWUyODY0YTA3OGM1MjMwMmRjNDBhYTA4ZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jYjNiMTYxN2Q4NDg0YWE1OTgxYWJlYjYwMzRmNzY2Zi5iaW5kUG9wdXAocG9wdXBfZDc2MmQyOWM2OTkyNDU4ODk1MTE2Yjk0OTFiNTYzOTgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5NzhkMTI4MDhiMTQ0M2FiZGQxYjhiN2Y4ZmQwNzlhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzM4ODI2ZjQ3ZjI5MTQwNzk4Njk5ZGQyMGE2OTc1MmI2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2U1M2NmNTUwNGM2NjRjZjY5ZTU4ZTc0NDAwMDhiNjA0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdjNGExMjdmNzAzMjRjMjZiOWQyZmMxNWU1YmE4YWVkID0gJChgPGRpdiBpZD0iaHRtbF83YzRhMTI3ZjcwMzI0YzI2YjlkMmZjMTVlNWJhOGFlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTUzY2Y1NTA0YzY2NGNmNjllNThlNzQ0MDAwOGI2MDQuc2V0Q29udGVudChodG1sXzdjNGExMjdmNzAzMjRjMjZiOWQyZmMxNWU1YmE4YWVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M5NzhkMTI4MDhiMTQ0M2FiZGQxYjhiN2Y4ZmQwNzlhLmJpbmRQb3B1cChwb3B1cF9lNTNjZjU1MDRjNjY0Y2Y2OWU1OGU3NDQwMDA4YjYwNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjI3Y2M0ZGM2YjdjNDE0Y2JkZjcwMDYyYTI3ZmU1ZGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8zODgyNmY0N2YyOTE0MDc5ODY5OWRkMjBhNjk3NTJiNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YzMyZTlmZjRmMGQ0NjgwOGJkZGQyNjlkY2NhYWQyNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZTJhYjJjOTNhZDg0ZTk0YmEyYjZkOTIxNTM3NGUxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZWUyYWIyYzkzYWQ4NGU5NGJhMmI2ZDkyMTUzNzRlMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTI5MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GcmVuY2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2MzMmU5ZmY0ZjBkNDY4MDhiZGRkMjY5ZGNjYWFkMjQuc2V0Q29udGVudChodG1sX2VlMmFiMmM5M2FkODRlOTRiYTJiNmQ5MjE1Mzc0ZTE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYyN2NjNGRjNmI3YzQxNGNiZGY3MDA2MmEyN2ZlNWRmLmJpbmRQb3B1cChwb3B1cF83YzMyZTlmZjRmMGQ0NjgwOGJkZGQyNjlkY2NhYWQyNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDliNDU1ZjE1MjUyNDUyMzk5NmVhNjgyOWUzNjdmNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTE2ODJlM2ZjMDRkNDY4OGI1MjUwOTg0MzRjZTkzYWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGE0ODRhZjA5OTljNGU2NGE3MmUwYmViNDlmMzFkYjkgPSAkKGA8ZGl2IGlkPSJodG1sXzRhNDg0YWYwOTk5YzRlNjRhNzJlMGJlYjQ5ZjMxZGI5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RW5nbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMTY4MmUzZmMwNGQ0Njg4YjUyNTA5ODQzNGNlOTNhZS5zZXRDb250ZW50KGh0bWxfNGE0ODRhZjA5OTljNGU2NGE3MmUwYmViNDlmMzFkYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMDliNDU1ZjE1MjUyNDUyMzk5NmVhNjgyOWUzNjdmNTcuYmluZFBvcHVwKHBvcHVwXzExNjgyZTNmYzA0ZDQ2ODhiNTI1MDk4NDM0Y2U5M2FlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGM4NjY2MGMzZmQ0MjgwYmQxMmI0Y2U3ZWRkNDUwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTYxOTRiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMzg4MjZmNDdmMjkxNDA3OTg2OTlkZDIwYTY5NzUyYjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWQyNzRkNDQyMDcxNDhhNDlmYjlhYzdhZDI2ZTQ4ZjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODZlZjI2ODRlYzViNGRhMDkwZTRkMTRiNjI4MzEzNzggPSAkKGA8ZGl2IGlkPSJodG1sXzg2ZWYyNjg0ZWM1YjRkYTA5MGU0ZDE0YjYyODMxMzc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyODgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3BhbmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hZDI3NGQ0NDIwNzE0OGE0OWZiOWFjN2FkMjZlNDhmOC5zZXRDb250ZW50KGh0bWxfODZlZjI2ODRlYzViNGRhMDkwZTRkMTRiNjI4MzEzNzgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhjODY2NjBjM2ZkNDI4MGJkMTJiNGNlN2VkZDQ1MDkuYmluZFBvcHVwKHBvcHVwX2FkMjc0ZDQ0MjA3MTQ4YTQ5ZmI5YWM3YWQyNmU0OGY4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75110c240>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap([\n",
    "    'Irish', 'Estonian', 'Norwegian', 'Romanian', 'Polish',\n",
    "    'Italian', 'Turkish', 'French', 'English', 'Spanish'\n",
    "])\n",
    "m.start_location = 'Central Europe'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Full list of shortcuts:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Central Europe': {'start_location': (50, 0), 'start_zoom': 4},\n",
       " 'Caucasus': {'start_location': (43, 42), 'start_zoom': 6},\n",
       " 'Australia & Oceania': {'start_location': (-16, 159), 'start_zoom': 3},\n",
       " 'Papua New Guinea': {'start_location': (-5, 141), 'start_zoom': 6},\n",
       " 'Africa': {'start_location': (3, 22), 'start_zoom': 3},\n",
       " 'Asia': {'start_location': (36, 100), 'start_zoom': 3},\n",
       " 'North America': {'start_location': (51, -102), 'start_zoom': 3},\n",
       " 'Central America': {'start_location': (19, -81), 'start_zoom': 4},\n",
       " 'South America': {'start_location': (-27, -49), 'start_zoom': 3}}"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.start_location_mapping"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.14. Color gradients <a name=\"gradients\"></a>\n",
    "There are two ways to use color gradients.\n",
    "Let's say we have features called \"Millions of native speakers\"."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "native_speakers = [0, 1, 5, 24, 44, 62, 78, 78, 378, 442]\n",
    "m.legend_title = 'Native speakers (mln)'\n",
    "m.legend_position = 'topright'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The first way is simply pass the features as `numeric`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2EwN2JiNDY1ODUxODRkNWZhNWMyMmM5NjFmZmVkZjZjIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9hMDdiYjQ2NTg1MTg0ZDVmYTVjMjJjOTYxZmZlZGY2YyIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IHJpZ2h0OiAyMHB4OyB0b3A6IDIwcHg7Jz4KCgo8ZGl2IGNsYXNzPSdsZWdlbmQtdGl0bGUnPk5hdGl2ZSBzcGVha2VycyAobWxuKTwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSIyMCI+PGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMjAiIHkyPSIwInN0eWxlPSJzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyIiB4Mj0iMjAiIHkyPSIyInN0eWxlPSJzdHJva2U6I2ZmZmVmZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMjAiIHkyPSIzInN0eWxlPSJzdHJva2U6I2ZmZmRmZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0IiB4Mj0iMjAiIHkyPSI0InN0eWxlPSJzdHJva2U6I2ZmZmNmYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1IiB4Mj0iMjAiIHkyPSI1InN0eWxlPSJzdHJva2U6I2ZmZmFmYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2IiB4Mj0iMjAiIHkyPSI2InN0eWxlPSJzdHJva2U6I2ZmZjlmOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3IiB4Mj0iMjAiIHkyPSI3InN0eWxlPSJzdHJva2U6I2ZmZjhmODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4IiB4Mj0iMjAiIHkyPSI4InN0eWxlPSJzdHJva2U6I2ZmZjdmNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5IiB4Mj0iMjAiIHkyPSI5InN0eWxlPSJzdHJva2U6I2ZmZjVmNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMCIgeDI9IjIwIiB5Mj0iMTAic3R5bGU9InN0cm9rZTojZmZmNGY0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExIiB4Mj0iMjAiIHkyPSIxMSJzdHlsZT0ic3Ryb2tlOiNmZmYzZjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIiIHgyPSIyMCIgeTI9IjEyInN0eWxlPSJzdHJva2U6I2ZmZjFmMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMyIgeDI9IjIwIiB5Mj0iMTMic3R5bGU9InN0cm9rZTojZmZmMGYwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0IiB4Mj0iMjAiIHkyPSIxNCJzdHlsZT0ic3Ryb2tlOiNmZmVmZWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUiIHgyPSIyMCIgeTI9IjE1InN0eWxlPSJzdHJva2U6I2ZmZWVlZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNiIgeDI9IjIwIiB5Mj0iMTYic3R5bGU9InN0cm9rZTojZmZlY2VjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE3IiB4Mj0iMjAiIHkyPSIxNyJzdHlsZT0ic3Ryb2tlOiNmZmViZWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTgiIHgyPSIyMCIgeTI9IjE4InN0eWxlPSJzdHJva2U6I2ZmZWFlYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZmZlNmU2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIwIiB4Mj0iMjAiIHkyPSIyMCJzdHlsZT0ic3Ryb2tlOiNmZmU1ZTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjEiIHgyPSIyMCIgeTI9IjIxInN0eWxlPSJzdHJva2U6I2ZmZTNlMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMiIgeDI9IjIwIiB5Mj0iMjIic3R5bGU9InN0cm9rZTojZmZlMmUyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIzIiB4Mj0iMjAiIHkyPSIyMyJzdHlsZT0ic3Ryb2tlOiNmZmUxZTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjQiIHgyPSIyMCIgeTI9IjI0InN0eWxlPSJzdHJva2U6I2ZmZGZkZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUic3R5bGU9InN0cm9rZTojZmZkZWRlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI2IiB4Mj0iMjAiIHkyPSIyNiJzdHlsZT0ic3Ryb2tlOiNmZmRkZGQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjciIHgyPSIyMCIgeTI9IjI3InN0eWxlPSJzdHJva2U6I2ZmZGNkYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyOCIgeDI9IjIwIiB5Mj0iMjgic3R5bGU9InN0cm9rZTojZmZkYWRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI5IiB4Mj0iMjAiIHkyPSIyOSJzdHlsZT0ic3Ryb2tlOiNmZmQ5ZDk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzAiIHgyPSIyMCIgeTI9IjMwInN0eWxlPSJzdHJva2U6I2ZmZDhkODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMSIgeDI9IjIwIiB5Mj0iMzEic3R5bGU9InN0cm9rZTojZmZkN2Q3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMyIiB4Mj0iMjAiIHkyPSIzMiJzdHlsZT0ic3Ryb2tlOiNmZmQ1ZDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzMiIHgyPSIyMCIgeTI9IjMzInN0eWxlPSJzdHJva2U6I2ZmZDRkNDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNCIgeDI9IjIwIiB5Mj0iMzQic3R5bGU9InN0cm9rZTojZmZkM2QzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM1IiB4Mj0iMjAiIHkyPSIzNSJzdHlsZT0ic3Ryb2tlOiNmZmQxZDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzYiIHgyPSIyMCIgeTI9IjM2InN0eWxlPSJzdHJva2U6I2ZmZDBkMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojZmZjY2NjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM4IiB4Mj0iMjAiIHkyPSIzOCJzdHlsZT0ic3Ryb2tlOiNmZmNiY2I7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzkiIHgyPSIyMCIgeTI9IjM5InN0eWxlPSJzdHJva2U6I2ZmY2FjYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MCIgeDI9IjIwIiB5Mj0iNDAic3R5bGU9InN0cm9rZTojZmZjOGM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQxIiB4Mj0iMjAiIHkyPSI0MSJzdHlsZT0ic3Ryb2tlOiNmZmM3Yzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDIiIHgyPSIyMCIgeTI9IjQyInN0eWxlPSJzdHJva2U6I2ZmYzZjNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MyIgeDI9IjIwIiB5Mj0iNDMic3R5bGU9InN0cm9rZTojZmZjNWM1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ0IiB4Mj0iMjAiIHkyPSI0NCJzdHlsZT0ic3Ryb2tlOiNmZmMzYzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDUiIHgyPSIyMCIgeTI9IjQ1InN0eWxlPSJzdHJva2U6I2ZmYzJjMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NiIgeDI9IjIwIiB5Mj0iNDYic3R5bGU9InN0cm9rZTojZmZjMWMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ3IiB4Mj0iMjAiIHkyPSI0NyJzdHlsZT0ic3Ryb2tlOiNmZmJmYmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDgiIHgyPSIyMCIgeTI9IjQ4InN0eWxlPSJzdHJva2U6I2ZmYmViZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OSIgeDI9IjIwIiB5Mj0iNDkic3R5bGU9InN0cm9rZTojZmZiZGJkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUwIiB4Mj0iMjAiIHkyPSI1MCJzdHlsZT0ic3Ryb2tlOiNmZmJjYmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTEiIHgyPSIyMCIgeTI9IjUxInN0eWxlPSJzdHJva2U6I2ZmYmFiYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MiIgeDI9IjIwIiB5Mj0iNTIic3R5bGU9InN0cm9rZTojZmZiOWI5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUzIiB4Mj0iMjAiIHkyPSI1MyJzdHlsZT0ic3Ryb2tlOiNmZmI4Yjg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTQiIHgyPSIyMCIgeTI9IjU0InN0eWxlPSJzdHJva2U6I2ZmYjdiNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojZmZiM2IzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU2IiB4Mj0iMjAiIHkyPSI1NiJzdHlsZT0ic3Ryb2tlOiNmZmIxYjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTciIHgyPSIyMCIgeTI9IjU3InN0eWxlPSJzdHJva2U6I2ZmYjBiMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1OCIgeDI9IjIwIiB5Mj0iNTgic3R5bGU9InN0cm9rZTojZmZhZmFmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU5IiB4Mj0iMjAiIHkyPSI1OSJzdHlsZT0ic3Ryb2tlOiNmZmFlYWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjAiIHgyPSIyMCIgeTI9IjYwInN0eWxlPSJzdHJva2U6I2ZmYWNhYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MSIgeDI9IjIwIiB5Mj0iNjEic3R5bGU9InN0cm9rZTojZmZhYmFiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYyIiB4Mj0iMjAiIHkyPSI2MiJzdHlsZT0ic3Ryb2tlOiNmZmFhYWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjMiIHgyPSIyMCIgeTI9IjYzInN0eWxlPSJzdHJva2U6I2ZmYThhODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NCIgeDI9IjIwIiB5Mj0iNjQic3R5bGU9InN0cm9rZTojZmZhN2E3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY1IiB4Mj0iMjAiIHkyPSI2NSJzdHlsZT0ic3Ryb2tlOiNmZmE2YTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjYiIHgyPSIyMCIgeTI9IjY2InN0eWxlPSJzdHJva2U6I2ZmYTVhNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NyIgeDI9IjIwIiB5Mj0iNjcic3R5bGU9InN0cm9rZTojZmZhM2EzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY4IiB4Mj0iMjAiIHkyPSI2OCJzdHlsZT0ic3Ryb2tlOiNmZmEyYTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjkiIHgyPSIyMCIgeTI9IjY5InN0eWxlPSJzdHJva2U6I2ZmYTFhMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MCIgeDI9IjIwIiB5Mj0iNzAic3R5bGU9InN0cm9rZTojZmY5ZjlmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcxIiB4Mj0iMjAiIHkyPSI3MSJzdHlsZT0ic3Ryb2tlOiNmZjllOWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzIiIHgyPSIyMCIgeTI9IjcyInN0eWxlPSJzdHJva2U6I2ZmOWQ5ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojZmY5OTk5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc0IiB4Mj0iMjAiIHkyPSI3NCJzdHlsZT0ic3Ryb2tlOiNmZjk4OTg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzUiIHgyPSIyMCIgeTI9Ijc1InN0eWxlPSJzdHJva2U6I2ZmOTc5NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NiIgeDI9IjIwIiB5Mj0iNzYic3R5bGU9InN0cm9rZTojZmY5NTk1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc3IiB4Mj0iMjAiIHkyPSI3NyJzdHlsZT0ic3Ryb2tlOiNmZjk0OTQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzgiIHgyPSIyMCIgeTI9Ijc4InN0eWxlPSJzdHJva2U6I2ZmOTM5MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OSIgeDI9IjIwIiB5Mj0iNzkic3R5bGU9InN0cm9rZTojZmY5MTkxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgwIiB4Mj0iMjAiIHkyPSI4MCJzdHlsZT0ic3Ryb2tlOiNmZjkwOTA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODEiIHgyPSIyMCIgeTI9IjgxInN0eWxlPSJzdHJva2U6I2ZmOGY4ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MiIgeDI9IjIwIiB5Mj0iODIic3R5bGU9InN0cm9rZTojZmY4ZThlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgzIiB4Mj0iMjAiIHkyPSI4MyJzdHlsZT0ic3Ryb2tlOiNmZjhjOGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODQiIHgyPSIyMCIgeTI9Ijg0InN0eWxlPSJzdHJva2U6I2ZmOGI4YjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NSIgeDI9IjIwIiB5Mj0iODUic3R5bGU9InN0cm9rZTojZmY4YThhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg2IiB4Mj0iMjAiIHkyPSI4NiJzdHlsZT0ic3Ryb2tlOiNmZjg4ODg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODciIHgyPSIyMCIgeTI9Ijg3InN0eWxlPSJzdHJva2U6I2ZmODc4NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4OCIgeDI9IjIwIiB5Mj0iODgic3R5bGU9InN0cm9rZTojZmY4Njg2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg5IiB4Mj0iMjAiIHkyPSI4OSJzdHlsZT0ic3Ryb2tlOiNmZjg1ODU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTAiIHgyPSIyMCIgeTI9IjkwInN0eWxlPSJzdHJva2U6I2ZmODM4MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojZmY3ZjdmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iMjAiIHkyPSI5MiJzdHlsZT0ic3Ryb2tlOiNmZjdlN2U7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTMiIHgyPSIyMCIgeTI9IjkzInN0eWxlPSJzdHJva2U6I2ZmN2Q3ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NCIgeDI9IjIwIiB5Mj0iOTQic3R5bGU9InN0cm9rZTojZmY3YzdjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk1IiB4Mj0iMjAiIHkyPSI5NSJzdHlsZT0ic3Ryb2tlOiNmZjdhN2E7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTYiIHgyPSIyMCIgeTI9Ijk2InN0eWxlPSJzdHJva2U6I2ZmNzk3OTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NyIgeDI9IjIwIiB5Mj0iOTcic3R5bGU9InN0cm9rZTojZmY3ODc4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk4IiB4Mj0iMjAiIHkyPSI5OCJzdHlsZT0ic3Ryb2tlOiNmZjc3Nzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTkiIHgyPSIyMCIgeTI9Ijk5InN0eWxlPSJzdHJva2U6I2ZmNzU3NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDAiIHgyPSIyMCIgeTI9IjEwMCJzdHlsZT0ic3Ryb2tlOiNmZjc0NzQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAxIiB4Mj0iMjAiIHkyPSIxMDEic3R5bGU9InN0cm9rZTojZmY3MzczO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMiIgeDI9IjIwIiB5Mj0iMTAyInN0eWxlPSJzdHJva2U6I2ZmNzE3MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDMiIHgyPSIyMCIgeTI9IjEwMyJzdHlsZT0ic3Ryb2tlOiNmZjcwNzA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA0IiB4Mj0iMjAiIHkyPSIxMDQic3R5bGU9InN0cm9rZTojZmY2ZjZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNSIgeDI9IjIwIiB5Mj0iMTA1InN0eWxlPSJzdHJva2U6I2ZmNmU2ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDYiIHgyPSIyMCIgeTI9IjEwNiJzdHlsZT0ic3Ryb2tlOiNmZjZjNmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA3IiB4Mj0iMjAiIHkyPSIxMDcic3R5bGU9InN0cm9rZTojZmY2YjZiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6I2ZmNmE2YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDgiIHgyPSIyMCIgeTI9IjEwOCJzdHlsZT0ic3Ryb2tlOiNmZjY2NjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEwIiB4Mj0iMjAiIHkyPSIxMTAic3R5bGU9InN0cm9rZTojZmY2NTY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMSIgeDI9IjIwIiB5Mj0iMTExInN0eWxlPSJzdHJva2U6I2ZmNjM2MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTIiIHgyPSIyMCIgeTI9IjExMiJzdHlsZT0ic3Ryb2tlOiNmZjYyNjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEzIiB4Mj0iMjAiIHkyPSIxMTMic3R5bGU9InN0cm9rZTojZmY2MTYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNCIgeDI9IjIwIiB5Mj0iMTE0InN0eWxlPSJzdHJva2U6I2ZmNWY1ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTUiIHgyPSIyMCIgeTI9IjExNSJzdHlsZT0ic3Ryb2tlOiNmZjVlNWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE2IiB4Mj0iMjAiIHkyPSIxMTYic3R5bGU9InN0cm9rZTojZmY1ZDVkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNyIgeDI9IjIwIiB5Mj0iMTE3InN0eWxlPSJzdHJva2U6I2ZmNWM1YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTgiIHgyPSIyMCIgeTI9IjExOCJzdHlsZT0ic3Ryb2tlOiNmZjVhNWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE5IiB4Mj0iMjAiIHkyPSIxMTkic3R5bGU9InN0cm9rZTojZmY1OTU5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMCIgeDI9IjIwIiB5Mj0iMTIwInN0eWxlPSJzdHJva2U6I2ZmNTg1ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjEiIHgyPSIyMCIgeTI9IjEyMSJzdHlsZT0ic3Ryb2tlOiNmZjU3NTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIyIiB4Mj0iMjAiIHkyPSIxMjIic3R5bGU9InN0cm9rZTojZmY1NTU1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMyIgeDI9IjIwIiB5Mj0iMTIzInN0eWxlPSJzdHJva2U6I2ZmNTQ1NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjQiIHgyPSIyMCIgeTI9IjEyNCJzdHlsZT0ic3Ryb2tlOiNmZjUzNTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI1IiB4Mj0iMjAiIHkyPSIxMjUic3R5bGU9InN0cm9rZTojZmY1MTUxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6I2ZmNTA1MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjYiIHgyPSIyMCIgeTI9IjEyNiJzdHlsZT0ic3Ryb2tlOiNmZjRjNGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI4IiB4Mj0iMjAiIHkyPSIxMjgic3R5bGU9InN0cm9rZTojZmY0YjRiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyOSIgeDI9IjIwIiB5Mj0iMTI5InN0eWxlPSJzdHJva2U6I2ZmNGE0YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzAiIHgyPSIyMCIgeTI9IjEzMCJzdHlsZT0ic3Ryb2tlOiNmZjQ4NDg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMxIiB4Mj0iMjAiIHkyPSIxMzEic3R5bGU9InN0cm9rZTojZmY0NzQ3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMiIgeDI9IjIwIiB5Mj0iMTMyInN0eWxlPSJzdHJva2U6I2ZmNDY0NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzMiIHgyPSIyMCIgeTI9IjEzMyJzdHlsZT0ic3Ryb2tlOiNmZjQ1NDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM0IiB4Mj0iMjAiIHkyPSIxMzQic3R5bGU9InN0cm9rZTojZmY0MzQzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNSIgeDI9IjIwIiB5Mj0iMTM1InN0eWxlPSJzdHJva2U6I2ZmNDI0MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzYiIHgyPSIyMCIgeTI9IjEzNiJzdHlsZT0ic3Ryb2tlOiNmZjQxNDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM3IiB4Mj0iMjAiIHkyPSIxMzcic3R5bGU9InN0cm9rZTojZmYzZjNmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOCIgeDI9IjIwIiB5Mj0iMTM4InN0eWxlPSJzdHJva2U6I2ZmM2UzZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzkiIHgyPSIyMCIgeTI9IjEzOSJzdHlsZT0ic3Ryb2tlOiNmZjNkM2Q7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQwIiB4Mj0iMjAiIHkyPSIxNDAic3R5bGU9InN0cm9rZTojZmYzYzNjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MSIgeDI9IjIwIiB5Mj0iMTQxInN0eWxlPSJzdHJva2U6I2ZmM2EzYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDIiIHgyPSIyMCIgeTI9IjE0MiJzdHlsZT0ic3Ryb2tlOiNmZjM5Mzk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQzIiB4Mj0iMjAiIHkyPSIxNDMic3R5bGU9InN0cm9rZTojZmYzODM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6I2ZmMzczNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDQiIHgyPSIyMCIgeTI9IjE0NCJzdHlsZT0ic3Ryb2tlOiNmZjMzMzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ2IiB4Mj0iMjAiIHkyPSIxNDYic3R5bGU9InN0cm9rZTojZmYzMTMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NyIgeDI9IjIwIiB5Mj0iMTQ3InN0eWxlPSJzdHJva2U6I2ZmMzAzMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDgiIHgyPSIyMCIgeTI9IjE0OCJzdHlsZT0ic3Ryb2tlOiNmZjJmMmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ5IiB4Mj0iMjAiIHkyPSIxNDkic3R5bGU9InN0cm9rZTojZmYyZTJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MCIgeDI9IjIwIiB5Mj0iMTUwInN0eWxlPSJzdHJva2U6I2ZmMmMyYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTEiIHgyPSIyMCIgeTI9IjE1MSJzdHlsZT0ic3Ryb2tlOiNmZjJiMmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUyIiB4Mj0iMjAiIHkyPSIxNTIic3R5bGU9InN0cm9rZTojZmYyYTJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MyIgeDI9IjIwIiB5Mj0iMTUzInN0eWxlPSJzdHJva2U6I2ZmMjgyODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTQiIHgyPSIyMCIgeTI9IjE1NCJzdHlsZT0ic3Ryb2tlOiNmZjI3Mjc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU1IiB4Mj0iMjAiIHkyPSIxNTUic3R5bGU9InN0cm9rZTojZmYyNjI2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NiIgeDI9IjIwIiB5Mj0iMTU2InN0eWxlPSJzdHJva2U6I2ZmMjUyNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTciIHgyPSIyMCIgeTI9IjE1NyJzdHlsZT0ic3Ryb2tlOiNmZjIzMjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU4IiB4Mj0iMjAiIHkyPSIxNTgic3R5bGU9InN0cm9rZTojZmYyMjIyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1OSIgeDI9IjIwIiB5Mj0iMTU5InN0eWxlPSJzdHJva2U6I2ZmMjEyMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjAiIHgyPSIyMCIgeTI9IjE2MCJzdHlsZT0ic3Ryb2tlOiNmZjFmMWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYxIiB4Mj0iMjAiIHkyPSIxNjEic3R5bGU9InN0cm9rZTojZmYxZTFlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6I2ZmMWQxZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjIiIHgyPSIyMCIgeTI9IjE2MiJzdHlsZT0ic3Ryb2tlOiNmZjE5MTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjwvc3ZnPjxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSI1MCI+PHRleHQgeD0iNSIgeT0iMTkiIGR4PSIwIiBkeT0iMGV4Ij4tIDUwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjM3IiBkeD0iMCIgZHk9IjBleCI+LSAxMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iNTUiIGR4PSIwIiBkeT0iMGV4Ij4tIDE1MDwvdGV4dD48dGV4dCB4PSI1IiB5PSI3MyIgZHg9IjAiIGR5PSIwZXgiPi0gMjAwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjkxIiBkeD0iMCIgZHk9IjBleCI+LSAyNTA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTA5IiBkeD0iMCIgZHk9IjBleCI+LSAzMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTI3IiBkeD0iMCIgZHk9IjBleCI+LSAzNTA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTQ1IiBkeD0iMCIgZHk9IjBleCI+LSA0MDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTYzIiBkeD0iMCIgZHk9IjBleCI+LSA0NTA8L3RleHQ+PC9zdmc+CgogIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwX2EwN2JiNDY1ODUxODRkNWZhNWMyMmM5NjFmZmVkZjZjID0gTC5tYXAoCiAgICAgICAgJ21hcF9hMDdiYjQ2NTg1MTg0ZDVmYTVjMjJjOTYxZmZlZGY2YycsIHsKICAgICAgICBjZW50ZXI6IFs1MCwgMF0sCiAgICAgICAgem9vbTogNCwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9hMDdiYjQ2NTg1MTg0ZDVmYTVjMjJjOTYxZmZlZGY2Yyk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl84OWZlYmQ3MzE0ZDI0YWUwYjNlYzYwMTcyZTc3ZTlkZiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfYTA3YmI0NjU4NTE4NGQ1ZmE1YzIyYzk2MWZmZWRmNmMpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hMDdiYjQ2NTg1MTg0ZDVmYTVjMjJjOTYxZmZlZGY2Yyk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjVhOGQ3NGMzMDk2NDM4Yjk1NjFkMjRhNzYxODJjZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMDk2ZTZlZTdlNDc3NGQ2MzliYzEyODY1YTFmZWVlYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNzJhMGVjMWVhZTU0ZWM2YjFlNTAwMjQ5MTQ3MTk2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDdiZjg2ZDdkMTA3NGVhZWFlMjM5NWY2YWRmOWM1MmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS45MiwgMTAuNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8wOTZlNmVlN2U0Nzc0ZDYzOWJjMTI4NjVhMWZlZWVjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4ZTY1YWRlNjk5NDQyMzBhNDcyNTZiNTQ5NjlkZWZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWM3Njk2YWNjYzBiNDY4MWE3YmE4OWNlNWZiOTJlM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMDk2ZTZlZTdlNDc3NGQ2MzliYzEyODY1YTFmZWVlYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOTMxZWY5OTc1YWI0ZGUxOTA2NjgwNzlhMTRhNDc1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8wOTZlNmVlN2U0Nzc0ZDYzOWJjMTI4NjVhMWZlZWVjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3NmZkOWY5YmNjMjQ1NzBhYWVmYWIyYzFmYzk5MTBjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzhhNDc5MTIxYTI2NDI4YmIxM2M5YzEzMTJkMGUwN2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8wOTZlNmVlN2U0Nzc0ZDYzOWJjMTI4NjVhMWZlZWVjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyYjFmYTgzN2UwYjRlYWZiMzY1NTI4ZGM3M2ZlMzcwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWE1ZmZmNjA2MzNiNDUxYjg1MGFmNTI3MTlhMDZlODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzkxMWViZTZkYjk2NGM3YWFiZDY2OTUzMzJhMWI3MzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMDk2ZTZlZTdlNDc3NGQ2MzliYzEyODY1YTFmZWVlYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDFlZGM3YzQ0YzUwNGIwODkzYzc1ZWQ0MGM0MjdmZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODhhNmUxOWFhZTJhNGJlNWI2ZTEzM2MzNTc1ZDZhYjUgPSAkKGA8ZGl2IGlkPSJodG1sXzg4YTZlMTlhYWUyYTRiZTViNmUxMzNjMzU3NWQ2YWI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXJpczEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXJpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDFlZGM3YzQ0YzUwNGIwODkzYzc1ZWQ0MGM0MjdmZGEuc2V0Q29udGVudChodG1sXzg4YTZlMTlhYWUyYTRiZTViNmUxMzNjMzU3NWQ2YWI1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzM5MTFlYmU2ZGI5NjRjN2FhYmQ2Njk1MzMyYTFiNzM0LmJpbmRQb3B1cChwb3B1cF80MWVkYzdjNDRjNTA0YjA4OTNjNzVlZDQwYzQyN2ZkYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQ5ZjIxNmI0NGI0NDU0ZTlmYWFmZjNkN2I2NzA1MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OC41NSwgMjUuODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8wOTZlNmVlN2U0Nzc0ZDYzOWJjMTI4NjVhMWZlZWVjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNmI2ZGMzMDc5NGY0ZTdmYWJhZTk4MWE5ZjJmOTdhMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hOWEyOWY2MWRlYTA0MTA4YjBhMWQxM2JhNjk5Yzc4ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTlhMjlmNjFkZWEwNDEwOGIwYTFkMTNiYTY5OWM3OGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9lc3RvMTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Fc3RvbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNmI2ZGMzMDc5NGY0ZTdmYWJhZTk4MWE5ZjJmOTdhMC5zZXRDb250ZW50KGh0bWxfYTlhMjlmNjFkZWEwNDEwOGIwYTFkMTNiYTY5OWM3OGUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzQ5ZjIxNmI0NGI0NDU0ZTlmYWFmZjNkN2I2NzA1MWIuYmluZFBvcHVwKHBvcHVwX2I2YjZkYzMwNzk0ZjRlN2ZhYmFlOTgxYTlmMmY5N2EwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMzRjOTcwOWYxYTE0MjUwYTdlZjE4NTk0NmE3YmM4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmRmZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJhNWZkMTczZDYxMzRhMjlhMjk5Y2RlNGM3NDg4ZWUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxY2U5ZDAzZmM5MDQ5ODQ5YjExOTg0MjJmNjdjMDhjID0gJChgPGRpdiBpZD0iaHRtbF80MWNlOWQwM2ZjOTA0OTg0OWIxMTk4NDIyZjY3YzA4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25vcncxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcndlZ2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYTVmZDE3M2Q2MTM0YTI5YTI5OWNkZTRjNzQ4OGVlMi5zZXRDb250ZW50KGh0bWxfNDFjZTlkMDNmYzkwNDk4NDliMTE5ODQyMmY2N2MwOGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzM0Yzk3MDlmMWExNDI1MGE3ZWYxODU5NDZhN2JjODAuYmluZFBvcHVwKHBvcHVwXzJhNWZkMTczZDYxMzRhMjlhMjk5Y2RlNGM3NDg4ZWUyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mOTMwNDlkNmZjZTQ0MjE5ODlhYzRkNWE2Y2JiNjc0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM5MTMsIDI0LjIyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmYzZjMiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8wOTZlNmVlN2U0Nzc0ZDYzOWJjMTI4NjVhMWZlZWVjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zOTcwZmJmYmFkZTM0Y2YwYWJhYTZkZTVlZGE2YmQ4MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lZTk3NDAwOWE1MmU0OGVjYjVlZjY4M2I5MjJiNDQyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfZWU5NzQwMDlhNTJlNDhlY2I1ZWY2ODNiOTIyYjQ0MmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yb21hMTMyNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Sb21hbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zOTcwZmJmYmFkZTM0Y2YwYWJhYTZkZTVlZGE2YmQ4MC5zZXRDb250ZW50KGh0bWxfZWU5NzQwMDlhNTJlNDhlY2I1ZWY2ODNiOTIyYjQ0MmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjkzMDQ5ZDZmY2U0NDIxOTg5YWM0ZDVhNmNiYjY3NGYuYmluZFBvcHVwKHBvcHVwXzM5NzBmYmZiYWRlMzRjZjBhYmFhNmRlNWVkYTZiZDgwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MjFlM2EyM2Y0ZDM0ZDI2YTJlMWMzYTQ4ZDg0MzQyZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmU5ZTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8wOTZlNmVlN2U0Nzc0ZDYzOWJjMTI4NjVhMWZlZWVjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNzQ1ZDA2N2Y4MTA0NDZlYTY1NzZmYWI1MGY3YTFiMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmU1NDI5M2E4YjA0ZjdiYmI2Yzk1ZTdjZDRmOTY4ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2ZlNTQyOTNhOGIwNGY3YmJiNmM5NWU3Y2Q0Zjk2OGUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTc0NWQwNjdmODEwNDQ2ZWE2NTc2ZmFiNTBmN2ExYjIuc2V0Q29udGVudChodG1sXzNmZTU0MjkzYThiMDRmN2JiYjZjOTVlN2NkNGY5NjhlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzcyMWUzYTIzZjRkMzRkMjZhMmUxYzNhNDhkODQzNDJkLmJpbmRQb3B1cChwb3B1cF9hNzQ1ZDA2N2Y4MTA0NDZlYTY1NzZmYWI1MGY3YTFiMikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTFkY2IwMDU2Y2U1NDc0ZmFkY2M0MTk3NDc4ZDFhNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wNDY0LCAxMi42NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMGUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMDk2ZTZlZTdlNDc3NGQ2MzliYzEyODY1YTFmZWVlYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGQ0OGMzNDRmYjUwNDRlYWIzOTk2Mzc3OWFiOWJjOWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjkwZjk4MmIxNjUzNDk2ZDlmNTQ3ZjMzZTNjNjg2MGEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y5MGY5ODJiMTY1MzQ5NmQ5ZjU0N2YzM2UzYzY4NjBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXRhbDEyODIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXRhbGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ZDQ4YzM0NGZiNTA0NGVhYjM5OTYzNzc5YWI5YmM5Zi5zZXRDb250ZW50KGh0bWxfZjkwZjk4MmIxNjUzNDk2ZDlmNTQ3ZjMzZTNjNjg2MGEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTFkY2IwMDU2Y2U1NDc0ZmFkY2M0MTk3NDc4ZDFhNDIuYmluZFBvcHVwKHBvcHVwXzRkNDhjMzQ0ZmI1MDQ0ZWFiMzk5NjM3NzlhYjliYzlmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNTE3MzkyM2FjNGI0NDI4YjNiZDY3NzMxOWE5NTI2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmQ4ZDgiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8wOTZlNmVlN2U0Nzc0ZDYzOWJjMTI4NjVhMWZlZWVjOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kNGM2NGRiMTRkZWM0ZThlYTgwMGZkOWMzNTQ1YTU1OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMTk2NzA5YWNiM2U0MDk4YTViMDdkMTc0NTQ1ZmY3MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzE5NjcwOWFjYjNlNDA5OGE1YjA3ZDE3NDU0NWZmNzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0YzY0ZGIxNGRlYzRlOGVhODAwZmQ5YzM1NDVhNTU5LnNldENvbnRlbnQoaHRtbF9jMTk2NzA5YWNiM2U0MDk4YTViMDdkMTc0NTQ1ZmY3MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNTE3MzkyM2FjNGI0NDI4YjNiZDY3NzMxOWE5NTI2Ni5iaW5kUG9wdXAocG9wdXBfZDRjNjRkYjE0ZGVjNGU4ZWE4MDBmZDljMzU0NWE1NTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4ZDE1OTg2ZDg3NDRjMzU4Zjk5ODVmZjE3YTFjMDA1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZkOGQ4IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMDk2ZTZlZTdlNDc3NGQ2MzliYzEyODY1YTFmZWVlYzgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTA2MTQzYzQ2NDgzNGNkY2I4YWU0YjMxZjQxODJlMGIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmQzNjM5MThlMDFjNGE2ZjhhMDFjNDgwYWE4NjQ4ZDIgPSAkKGA8ZGl2IGlkPSJodG1sXzJkMzYzOTE4ZTAxYzRhNmY4YTAxYzQ4MGFhODY0OGQyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RnJlbmNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwNjE0M2M0NjQ4MzRjZGNiOGFlNGIzMWY0MTgyZTBiLnNldENvbnRlbnQoaHRtbF8yZDM2MzkxOGUwMWM0YTZmOGEwMWM0ODBhYTg2NDhkMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zOGQxNTk4NmQ4NzQ0YzM1OGY5OTg1ZmYxN2ExYzAwNS5iaW5kUG9wdXAocG9wdXBfNTA2MTQzYzQ2NDgzNGNkY2I4YWU0YjMxZjQxODJlMGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IyZDZhMDkwNjhiNDRmODZhYTNlZTI0MTIwMDZiMjg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmM2UzZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzOGU3ZDFjMjcwNjQwYzg5ZDZjMjNjZDU5ZDRkZjExID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczNmRmZWFmNzRiYzQ3MjM5YTlhYmVjYjBhODNiYjVlID0gJChgPGRpdiBpZD0iaHRtbF83MzZkZmVhZjc0YmM0NzIzOWE5YWJlY2IwYTgzYmI1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjkzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVuZ2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDM4ZTdkMWMyNzA2NDBjODlkNmMyM2NkNTlkNGRmMTEuc2V0Q29udGVudChodG1sXzczNmRmZWFmNzRiYzQ3MjM5YTlhYmVjYjBhODNiYjVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2IyZDZhMDkwNjhiNDRmODZhYTNlZTI0MTIwMDZiMjg2LmJpbmRQb3B1cChwb3B1cF9kMzhlN2QxYzI3MDY0MGM4OWQ2YzIzY2Q1OWQ0ZGYxMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzFkZTE0ZjQwZDA2NGUzZTkxZWMwZDYxNGU1MzFiNGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMWQxZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzA5NmU2ZWU3ZTQ3NzRkNjM5YmMxMjg2NWExZmVlZWM4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QyMWVkYWQzNjVkYzRlOTI5YzQ1NTdkMWJhNjc0MjgxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2E1NWE3ZjE4ZjE4MDQ0MzNhYWNjYzU3YjcwN2E2MmVlID0gJChgPGRpdiBpZD0iaHRtbF9hNTVhN2YxOGYxODA0NDMzYWFjY2M1N2I3MDdhNjJlZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjg4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNwYW5pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDIxZWRhZDM2NWRjNGU5MjljNDU1N2QxYmE2NzQyODEuc2V0Q29udGVudChodG1sX2E1NWE3ZjE4ZjE4MDQ0MzNhYWNjYzU3YjcwN2E2MmVlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzMxZGUxNGY0MGQwNjRlM2U5MWVjMGQ2MTRlNTMxYjRmLmJpbmRQb3B1cChwb3B1cF9kMjFlZGFkMzY1ZGM0ZTkyOWM0NTU3ZDFiYTY3NDI4MSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75151dfd0>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.add_features(native_speakers, numeric=True)\n",
    "m.colormap_colors = ('white', 'red')\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Or you can simply set attribute `color` to a gradient using `gradient` function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzY2Y2QzODhjMDI2ZTRjNzNhZDMyMmZlODQ5YjEyZmYxIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF82NmNkMzg4YzAyNmU0YzczYWQzMjJmZTg0OWIxMmZmMSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDEiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQxJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IHJpZ2h0OiAyMHB4OyB0b3A6IDIwcHg7Jz4KCgo8ZGl2IGNsYXNzPSdsZWdlbmQtdGl0bGUnPk5hdGl2ZSBzcGVha2VycyAobWxuKTwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj4wPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZjJlZmVmO29wYWNpdHk6MC43OyI+PC9zcGFuPjE8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlOWRjZGM7b3BhY2l0eTowLjc7Ij48L3NwYW4+NTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UzYzZjNjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj4yNDwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UwYWRhZDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj40NDwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UwOTE5MTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj42MjwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2UzNzE3MTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj43ODwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2U5NGY0ZjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj4zNzg8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNmMjI5Mjk7b3BhY2l0eTowLjc7Ij48L3NwYW4+NDQyPC9saT4KCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfNjZjZDM4OGMwMjZlNGM3M2FkMzIyZmU4NDliMTJmZjEgPSBMLm1hcCgKICAgICAgICAnbWFwXzY2Y2QzODhjMDI2ZTRjNzNhZDMyMmZlODQ5YjEyZmYxJywgewogICAgICAgIGNlbnRlcjogWzUwLCAwXSwKICAgICAgICB6b29tOiA0LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzY2Y2QzODhjMDI2ZTRjNzNhZDMyMmZlODQ5YjEyZmYxKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2I2NjkzMDFmYmFkZjQ2NWU5YjVjYTE1Mjg4NzE4M2MyID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF82NmNkMzg4YzAyNmU0YzczYWQzMjJmZTg0OWIxMmZmMSk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzY2Y2QzODhjMDI2ZTRjNzNhZDMyMmZlODQ5YjEyZmYxKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMGYzY2U1YjRmZjQ0ODM1OWI2YjBmNmY4MzZiODhiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xMmM2MzBhOTk3MjQ0OWNkOGM4ZjYxMDc4MzA4OTk3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzljMDhlNDI3MmMwMTQ0OTNhZmI1YjdkMjZlMjhiNDNmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTguNTUsIDI1LjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ODNkOTJkNDcyNDc0OTQ4Yjc1NDAwMjFiOWQxZTRlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzEyYzYzMGE5OTcyNDQ5Y2Q4YzhmNjEwNzgzMDg5OTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM5ODNkNGQ5ZmVhNDNiNmI1NWFjNzdkYTVlZDNhOWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zOTEzLCAyNC4yMjU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTJkZDY2NzkxMTk0OTA0ODUzZDc1YzkxY2RmNGJhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xMmM2MzBhOTk3MjQ0OWNkOGM4ZjYxMDc4MzA4OTk3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VmYzkyYzRlMDk5MDQ3MzdhNGYwNDExY2UyYWI5NjQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDQ2NCwgMTIuNjQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzEyYzYzMGE5OTcyNDQ5Y2Q4YzhmNjEwNzgzMDg5OTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTc0OTdhY2RiZDYxNGFmMmE2OGJlNTNiMGI2MzJkMTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDA1ZWZlOWVhNzU0OTk5ODJiYzU0MjA0NTkyOWFmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ4LjAsIDIuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzEyYzYzMGE5OTcyNDQ5Y2Q4YzhmNjEwNzgzMDg5OTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGQ0MWRmMDk4M2I4NDQ5ZDk1NzdiYTZiMTg3NWIzZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZTBhZDI1YTUwNTg0MDNiYWNhMzQwMjA2NzIwNzhkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMDM4NDg3NmNkZGU0Y2Q4YjhiZDU4NDZjNGQ4NzAwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUzLjIxODYsIC03LjYxNTA4OTk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xMmM2MzBhOTk3MjQ0OWNkOGM4ZjYxMDc4MzA4OTk3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83ZmZiMjI1MTcxNzY0YjVhOGVmOWExODQ1M2E0NGQwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjAzNDI4ZjgwOTQ0NjVmOTlhZDQ2MWZjNzRiODEyYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzYwMzQyOGY4MDk0NDY1Zjk5YWQ0NjFmYzc0YjgxMmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pcmlzMTI1MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JcmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83ZmZiMjI1MTcxNzY0YjVhOGVmOWExODQ1M2E0NGQwMi5zZXRDb250ZW50KGh0bWxfMzYwMzQyOGY4MDk0NDY1Zjk5YWQ0NjFmYzc0YjgxMmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDAzODQ4NzZjZGRlNGNkOGI4YmQ1ODQ2YzRkODcwMDcuYmluZFBvcHVwKHBvcHVwXzdmZmIyMjUxNzE3NjRiNWE4ZWY5YTE4NDUzYTQ0ZDAyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMjhiZTU1OTdhYmM0ZWNhODEwYTIzYWMwMDliNGM3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YyZWZlZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzEyYzYzMGE5OTcyNDQ5Y2Q4YzhmNjEwNzgzMDg5OTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg0NzJlOTM5NDEyYjRmMjE4YmYzMjU5M2Y1MjBmNTk3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE2NThkY2YyNmI2NTRiZTE4YzYwMzk0NGY4NGRhOTdlID0gJChgPGRpdiBpZD0iaHRtbF8xNjU4ZGNmMjZiNjU0YmUxOGM2MDM5NDRmODRkYTk3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2VzdG8xMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVzdG9uaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg0NzJlOTM5NDEyYjRmMjE4YmYzMjU5M2Y1MjBmNTk3LnNldENvbnRlbnQoaHRtbF8xNjU4ZGNmMjZiNjU0YmUxOGM2MDM5NDRmODRkYTk3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMjhiZTU1OTdhYmM0ZWNhODEwYTIzYWMwMDliNGM3Yy5iaW5kUG9wdXAocG9wdXBfODQ3MmU5Mzk0MTJiNGYyMThiZjMyNTkzZjUyMGY1OTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwZDlmOWM2ZWRkNTQ4ZjhiNjIxYjA0MGNkMGIxMzI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuOTIsIDEwLjcxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTlkY2RjIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg4ZDc5NjJjY2ZmNDY0ZWEyM2Y1YjMyMTZlOTY0MTcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzNkMjhmMzQxY2QxNDM5OGEwMGM1ZDc3NWNhZjM3NjcgPSAkKGA8ZGl2IGlkPSJodG1sXzczZDI4ZjM0MWNkMTQzOThhMDBjNWQ3NzVjYWYzNzY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbm9ydzEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+Tm9yd2VnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU4OGQ3OTYyY2NmZjQ2NGVhMjNmNWIzMjE2ZTk2NDE3LnNldENvbnRlbnQoaHRtbF83M2QyOGYzNDFjZDE0Mzk4YTAwYzVkNzc1Y2FmMzc2Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MGQ5ZjljNmVkZDU0OGY4YjYyMWIwNDBjZDBiMTMyNC5iaW5kUG9wdXAocG9wdXBfNTg4ZDc5NjJjY2ZmNDY0ZWEyM2Y1YjMyMTZlOTY0MTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2NDkwNjdkNzM4NjRmZGZhMWM4OGIwMzJhM2ZmMGVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UzYzZjNiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzEyYzYzMGE5OTcyNDQ5Y2Q4YzhmNjEwNzgzMDg5OTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlNWExMTk2MDMyMTRjNDI4NGE3NmQxOTYzYzE4YmU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBjMThiM2ZlODdhYzRlYzZiOTFkYTM5MWU3Y2U4MjFhID0gJChgPGRpdiBpZD0iaHRtbF8wYzE4YjNmZTg3YWM0ZWM2YjkxZGEzOTFlN2NlODIxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3JvbWExMzI3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJvbWFuaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZlNWExMTk2MDMyMTRjNDI4NGE3NmQxOTYzYzE4YmU1LnNldENvbnRlbnQoaHRtbF8wYzE4YjNmZTg3YWM0ZWM2YjkxZGEzOTFlN2NlODIxYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjQ5MDY3ZDczODY0ZmRmYTFjODhiMDMyYTNmZjBlZi5iaW5kUG9wdXAocG9wdXBfNmU1YTExOTYwMzIxNGM0Mjg0YTc2ZDE5NjNjMThiZTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmYzUwYjE5NTZiYTQ5OTRhODRiYzE2Nzc0NGQ4ZjE5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTEuODQzOSwgMTguNjI1NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UwYWRhZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzEyYzYzMGE5OTcyNDQ5Y2Q4YzhmNjEwNzgzMDg5OTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YxNDg1MzFjMzAwNTQxNzk4ZjBiNWYwZjU0YzI4ZjM3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMzZDFiNWE2NTIyZjRhMGVhMjY5ZDAwMmZjMDkyMTcyID0gJChgPGRpdiBpZD0iaHRtbF8zM2QxYjVhNjUyMmY0YTBlYTI2OWQwMDJmYzA5MjE3MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3BvbGkxMjYwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlBvbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMTQ4NTMxYzMwMDU0MTc5OGYwYjVmMGY1NGMyOGYzNy5zZXRDb250ZW50KGh0bWxfMzNkMWI1YTY1MjJmNGEwZWEyNjlkMDAyZmMwOTIxNzIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYmZjNTBiMTk1NmJhNDk5NGE4NGJjMTY3NzQ0ZDhmMTkuYmluZFBvcHVwKHBvcHVwX2YxNDg1MzFjMzAwNTQxNzk4ZjBiNWYwZjU0YzI4ZjM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTcxOGIxNDU2ZTM0ZWQ1YTFlYzQ0NWZlNzc4YTgwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlMDkxOTEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xMmM2MzBhOTk3MjQ0OWNkOGM4ZjYxMDc4MzA4OTk3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NzJhNTQ3NDkyZjg0OGY1YjFiMWRkNjc0OTQxNGIzMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZmY5YjViMzU2NjY0NzQ3OThkYWE5NTY1OTk3Yzg5YSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGZmOWI1YjM1NjY2NDc0Nzk4ZGFhOTU2NTk5N2M4OWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9pdGFsMTI4MiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5JdGFsaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg3MmE1NDc0OTJmODQ4ZjViMWIxZGQ2NzQ5NDE0YjMxLnNldENvbnRlbnQoaHRtbF9kZmY5YjViMzU2NjY0NzQ3OThkYWE5NTY1OTk3Yzg5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85OTcxOGIxNDU2ZTM0ZWQ1YTFlYzQ0NWZlNzc4YTgwMS5iaW5kUG9wdXAocG9wdXBfODcyYTU0NzQ5MmY4NDhmNWIxYjFkZDY3NDk0MTRiMzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q5MTdkOWM4NTliMTQ2NjdhZjA0ZjI4Zjk3M2Y1MTIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UzNzE3MSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzEyYzYzMGE5OTcyNDQ5Y2Q4YzhmNjEwNzgzMDg5OTc1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmOWI0ZjAyYTNlZjQzZDQ4ZDc3MzQyZmNiMDlmMTY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzJjOTYyNDFlM2VhMTRiZjFhMjEwMDJjYWE4MGI4MWRkID0gJChgPGRpdiBpZD0iaHRtbF8yYzk2MjQxZTNlYTE0YmYxYTIxMDAyY2FhODBiODFkZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGY5YjRmMDJhM2VmNDNkNDhkNzczNDJmY2IwOWYxNjQuc2V0Q29udGVudChodG1sXzJjOTYyNDFlM2VhMTRiZjFhMjEwMDJjYWE4MGI4MWRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q5MTdkOWM4NTliMTQ2NjdhZjA0ZjI4Zjk3M2Y1MTIyLmJpbmRQb3B1cChwb3B1cF8wZjliNGYwMmEzZWY0M2Q0OGQ3NzM0MmZjYjA5ZjE2NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTc3Y2I4MGRjOTgyNGVlOGE3OThiNDI2NDVkMjc3ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlMzcxNzEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF8xMmM2MzBhOTk3MjQ0OWNkOGM4ZjYxMDc4MzA4OTk3NSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85OTg0ZWJiZGE0YjI0NTQ0OTNhODRjZjU4ZTJmNWJiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMjQ2ZDczNDVlMDc0ODQwYWZiZjRlYzFlNjYzNWE1YSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTI0NmQ3MzQ1ZTA3NDg0MGFmYmY0ZWMxZTY2MzVhNWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zdGFuMTI5MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GcmVuY2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTk4NGViYmRhNGIyNDU0NDkzYTg0Y2Y1OGUyZjViYmIuc2V0Q29udGVudChodG1sX2EyNDZkNzM0NWUwNzQ4NDBhZmJmNGVjMWU2NjM1YTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U3N2NiODBkYzk4MjRlZThhNzk4YjQyNjQ1ZDI3N2U4LmJpbmRQb3B1cChwb3B1cF85OTg0ZWJiZGE0YjI0NTQ0OTNhODRjZjU4ZTJmNWJiYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWVlOGRjZGM2ZTZlNGI5YmJhYjRhNTEyNDU0NDg4MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4wLCAtMS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZTk0ZjRmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjdjZGZkN2FhYjZiNGI2Y2IxMjc1NWQzYjJhZjk3N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmE2YjJkNGNmMmQ2NGE5MmJmMmQ2MjkxNTJhNDQ3ZTEgPSAkKGA8ZGl2IGlkPSJodG1sXzJhNmIyZDRjZjJkNjRhOTJiZjJkNjI5MTUyYTQ0N2UxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RW5nbGlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82N2NkZmQ3YWFiNmI0YjZjYjEyNzU1ZDNiMmFmOTc3ZS5zZXRDb250ZW50KGh0bWxfMmE2YjJkNGNmMmQ2NGE5MmJmMmQ2MjkxNTJhNDQ3ZTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWVlOGRjZGM2ZTZlNGI5YmJhYjRhNTEyNDU0NDg4MDEuYmluZFBvcHVwKHBvcHVwXzY3Y2RmZDdhYWI2YjRiNmNiMTI3NTVkM2IyYWY5NzdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MTg3MTg4ODkyODA0NWI1ODQwZGRhNzNlMDU5MTZiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQwLjQ0MTQsIC0xLjExNzg4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjIyOTI5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfMTJjNjMwYTk5NzI0NDljZDhjOGY2MTA3ODMwODk5NzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzNjNTdmODI2NTU2NDkzNGE4MTBmYmU5OWI5OTczMTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDFiNGI5NzFiMGE5NDhjZDg0Yjg1YmU5YWYzZGVmYTQgPSAkKGA8ZGl2IGlkPSJodG1sXzQxYjRiOTcxYjBhOTQ4Y2Q4NGI4NWJlOWFmM2RlZmE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyODgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U3BhbmlzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jM2M1N2Y4MjY1NTY0OTM0YTgxMGZiZTk5Yjk5NzMxNi5zZXRDb250ZW50KGh0bWxfNDFiNGI5NzFiMGE5NDhjZDg0Yjg1YmU5YWYzZGVmYTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODE4NzE4ODg5MjgwNDViNTg0MGRkYTczZTA1OTE2YjEuYmluZFBvcHVwKHBvcHVwX2MzYzU3ZjgyNjU1NjQ5MzRhODEwZmJlOTliOTk3MzE2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe751085e48>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.add_features(native_speakers, colors=lingtypology.gradient(10, 'white', 'red'))\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.15. Minicharts <a name=\"minicharts\"></a>\n",
    "You can add minicharts to the map using `add_minicharts` method. Just pass all the data.\n",
    "\n",
    "Note, that if you are passing data as anything except for `pandas.Series` you should specify `names`\n",
    "parameter (e.g. `names=('consonants', 'vowels')`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas\n",
    "data = pandas.read_csv(\n",
    "    'https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/ejective_and_n_consonants.csv',\n",
    "    delimiter=',',\n",
    "    header=0,\n",
    ")\n",
    "data = data[data.language != 'Paraguayan Guarani']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzE5ZTZiNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj52b3dlbHM8L2xpPgoKCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUgPSBMLm1hcCgKICAgICAgICAnbWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfMWNjNDJiNzc2ODY3NGQ0YWI1ODk2MGVmZWUxYTZlZjQgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlKTsKICAgIAogICAgICAgIHZhciBtYXJrZXJfOTFhMzI2ZWJiNWE5NGYyZmFlZmU5NmQxYjdjMmIxMTUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzM2ZTA4NjVhNzBmODRhZTFhOGQ2ZmQwYTUxNGVmNGQ4ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjg0Mzg1NCA4LjQ0NTYgMTkuNTU0OTE1IDguNjM4NzU2IDE4LjMxNTcwNSA5LjAxODY5NiBDIDE3LjA3NjQ5NiA5LjM5ODYzNSAxNS45MDA3OTYgOS45NjExMzQgMTQuODI3Mzk0IDEwLjY4NzYzMyBDIDEzLjc1Mzk5MSAxMS40MTQxMzMgMTIuNzk0ODIyIDEyLjI5NjU1NSAxMS45ODE1MzEgMTMuMzA1Nzg4IEMgMTEuMTY4MjQgMTQuMzE1MDIxIDEwLjUwOTg2OSAxNS40Mzk4NDMgMTAuMDI4MTQxIDE2LjY0MzE0MyBDIDkuNTQ2NDEyIDE3Ljg0NjQ0MyA5LjI0NjY4MSAxOS4xMTQ4NDIgOS4xMzg4MzcgMjAuNDA2NDk0IEMgOS4wMzA5OTQgMjEuNjk4MTQ1IDkuMTE2MjM1IDIyLjk5ODY4NyA5LjM5MTc1MSAyNC4yNjUyMTIgQyA5LjY2NzI2NyAyNS41MzE3MzYgMTAuMTI5OTkyIDI2Ljc1MDE2MSAxMC43NjQ2NjIgMjcuODgwMjg5IEMgMTEuMzk5MzMyIDI5LjAxMDQxNyAxMi4xOTg4ODggMzAuMDM5NjggMTMuMTM2OTUzIDMwLjkzNDEyNCBDIDE0LjA3NTAxOCAzMS44Mjg1NjcgMTUuMTQxMTYgMzIuNTc4MjQzIDE2LjMwMDIwNyAzMy4xNTg0MiBDIDE3LjQ1OTI1MyAzMy43Mzg1OTggMTguNjk4MzE1IDM0LjE0MjgyNCAxOS45NzY1MTUgMzQuMzU3NzY0IEMgMjEuMjU0NzE1IDM0LjU3MjcwNCAyMi41NTc4MzkgMzQuNTk1OTY3IDIzLjg0Mjg5NyAzNC40MjY3ODYgQyAyNS4xMjc5NTQgMzQuMjU3NjA1IDI2LjM4MDY1NCAzMy44OTc4NjEgMjcuNTU5NjcgMzMuMzU5NDIzIEMgMjguNzM4Njg2IDMyLjgyMDk4NSAyOS44MzA5MDcgMzIuMTA5ODM5IDMwLjgwMDI5OSAzMS4yNDk0NDggQyAzMS43Njk2OSAzMC4zODkwNTYgMzIuNjA1NDc0IDI5LjM4ODk4NiAzMy4yODAwNzcgMjguMjgyMjMyIEMgMzMuOTU0Njc5IDI3LjE3NTQ3NyAzNC40NjA1OTggMjUuOTc0MzQ0IDM0Ljc4MTE0MyAyNC43MTg0NiBDIDM1LjEwMTY4OSAyMy40NjI1NzYgMzUuMjMzMjk2IDIyLjE2NTkwNiAzNS4xNzE2MjMgMjAuODcxMjI4IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4xNzE2MjMgMjAuODcxMjI4IEMgMzUuMDEyMTUyIDE3LjUyMzUwOSAzMy41Njg2NTMgMTQuMzYyNjg3IDMxLjE0MzA0NyAxMi4wNDk4NzYgQyAyOC43MTc0NDEgOS43MzcwNjYgMjUuNDkxNTE1IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4xNzE2MjMgMjAuODcxMjI4IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85MWEzMjZlYmI1YTk0ZjJmYWVmZTk2ZDFiN2MyYjExNS5zZXRJY29uKGRpdl9pY29uXzM2ZTA4NjVhNzBmODRhZTFhOGQ2ZmQwYTUxNGVmNGQ4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MwZTIwMDBjOGRmYjQ0NmE5MDVlMmUzNWYzN2IxZmQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZhZDk1NWEwY2IwMzQ4NTc5YTMxNzA1OTIzZGY5YzdlID0gJChgPGRpdiBpZD0iaHRtbF9mYWQ5NTVhMGNiMDM0ODU3OWEzMTcwNTkyM2RmOWM3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPmNvbnNvbmFudHM6IDI1PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwZTIwMDBjOGRmYjQ0NmE5MDVlMmUzNWYzN2IxZmQ2LnNldENvbnRlbnQoaHRtbF9mYWQ5NTVhMGNiMDM0ODU3OWEzMTcwNTkyM2RmOWM3ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzkxYTMyNmViYjVhOTRmMmZhZWZlOTZkMWI3YzJiMTE1LmJpbmRQb3B1cChwb3B1cF9jMGUyMDAwYzhkZmI0NDZhOTA1ZTJlMzVmMzdiMWZkNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2IzYWFkMWQ3YThjYjQ0YWFhYzU1ZmFmYzEwNzM2NWVlID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNDZkM2FhODkxYjgxNGQyZjljZWYwOTkxMjFkZmU2NTYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODg2MjIxIDguNDQ1NiAxNy42NzA0MzYgOS4wMjk2MTQgMTUuNzA5NDUzIDEwLjE0MDQ5NyBDIDEzLjc0ODQ3IDExLjI1MTM4IDEyLjEwODQwMyAxMi44NTE2OCAxMC45NDk3MjkgMTQuNzg0ODEgQyA5Ljc5MTA1NiAxNi43MTc5NCA5LjE1Mjg0IDE4LjkxODcyNiA5LjA5NzUyOSAyMS4xNzE4MjUgQyA5LjA0MjIxOSAyMy40MjQ5MjUgOS41NzE2NzkgMjUuNjU0Mzc1IDEwLjYzNDEwMiAyNy42NDIwMyBDIDExLjY5NjUyNiAyOS42Mjk2ODYgMTMuMjU2MDk0IDMxLjMwODUzMSAxNS4xNjAyMDcgMzIuNTE0Mjk4IEMgMTcuMDY0MzIgMzMuNzIwMDY0IDE5LjI0ODc4IDM0LjQxMjA5NyAyMS40OTk4NDMgMzQuNTIyNjg1IEMgMjMuNzUwOTA3IDM0LjYzMzI3MyAyNS45OTI2NzkgMzQuMTU4Njg2IDI4LjAwNTgwOSAzMy4xNDUzNjIgQyAzMC4wMTg5MzkgMzIuMTMyMDM3IDMxLjczNTU1MyAzMC42MTQxNCAzMi45ODc2ODUgMjguNzQwMTkxIEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi45ODc2ODUgMjguNzQwMTkxIEMgMzQuMzAwMTM4IDI2Ljc3NTk2NyAzNS4wNTQ3NyAyNC40OTE2NjMgMzUuMTcwNjg1IDIyLjEzMjE1NyBDIDM1LjI4NjYgMTkuNzcyNjUgMzQuNzU5NTAzIDE3LjQyNTM3OCAzMy42NDU4OTggMTUuMzQxOTcgQyAzMi41MzIyOTIgMTMuMjU4NTYxIDMwLjg3MzQ0NyAxMS41MTYyMjEgMjguODQ3MTkgMTAuMzAxNzI5IEMgMjYuODIwOTMzIDkuMDg3MjM4IDI0LjUwMjM1MiA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuOTg3Njg1IDI4Ljc0MDE5MSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjNhYWQxZDdhOGNiNDRhYWFjNTVmYWZjMTA3MzY1ZWUuc2V0SWNvbihkaXZfaWNvbl80NmQzYWE4OTFiODE0ZDJmOWNlZjA5OTEyMWRmZTY1Nik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZDMyY2ZiMGU5MmQ0YzZhOGJhNmI1YjZkYTIzMmRjOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTNjZTY4MmQ4ZGI0MTg0YTFmYjRlMjM5NTIzMWM1MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWEzY2U2ODJkOGRiNDE4NGExZmI0ZTIzOTUyMzFjNTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3JlMTI4MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3JlYW48L2E+PGJyPmNvbnNvbmFudHM6IDIxPGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZDMyY2ZiMGU5MmQ0YzZhOGJhNmI1YjZkYTIzMmRjOC5zZXRDb250ZW50KGh0bWxfMWEzY2U2ODJkOGRiNDE4NGExZmI0ZTIzOTUyMzFjNTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iM2FhZDFkN2E4Y2I0NGFhYWM1NWZhZmMxMDczNjVlZS5iaW5kUG9wdXAocG9wdXBfMmQzMmNmYjBlOTJkNGM2YThiYTZiNWI2ZGEyMzJkYzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8wOWY3ODk1MTRiOGM0ZTk4ODY3MzUwMjVlNDBiM2M0YiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTExLjYzMDgsIDEzMC45NDg5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYTk0YjY2YjQ3Nzg2NGM1NWFhMzk3MTk5YmM4ZDViYWYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNjkxNjQ4IDguNDQ1NiAxOS4yNTMzNTUgOC42ODY3ODQgMTcuODg0MjI4IDkuMTU5MjQxIEMgMTYuNTE1MTAxIDkuNjMxNjk3IDE1LjIzNDE1NyAxMC4zMjg4NjQgMTQuMDk0MDM5IDExLjIyMjA4OSBDIDEyLjk1MzkyIDEyLjExNTMxNSAxMS45NzA0NjIgMTMuMTkyMTk0IDExLjE4NDA4MSAxNC40MDg0NzEgQyAxMC4zOTc3IDE1LjYyNDc0NyA5LjgxOTMxOCAxNi45NjM1MjcgOS40NzI3MDUgMTguMzY5NzkyIEMgOS4xMjYwOTEgMTkuNzc2MDU4IDkuMDE2MDYxIDIxLjIzMDI3NiA5LjE0NzEzNSAyMi42NzI2ODUgQyA5LjI3ODIwOSAyNC4xMTUwOTMgOS42NDg1NjggMjUuNTI1NjU4IDEwLjI0Mjk5IDI2Ljg0NjQxIEMgMTAuODM3NDEyIDI4LjE2NzE2MiAxMS42NDc2NDIgMjkuMzc5NzU2IDEyLjY0MDM4MiAzMC40MzQzNjEgQyAxMy42MzMxMjIgMzEuNDg4OTY1IDE0Ljc5NDU4NCAzMi4zNzA5MzEgMTYuMDc3MDM2IDMzLjA0NDAxNCBDIDE3LjM1OTQ4OCAzMy43MTcwOTYgMTguNzQ1MTE3IDM0LjE3MTk0NyAyMC4xNzY5OCAzNC4zODk4NzIgQyAyMS42MDg4NDMgMzQuNjA3Nzk4IDIzLjA2NzA1MiAzNC41ODU3NzEgMjQuNDkxNjggMzQuMzI0Njk5IEMgMjUuOTE2MzA3IDM0LjA2MzYyNiAyNy4yODc1NjcgMzMuNTY3MTMzIDI4LjU0OTEwNSAzMi44NTU2MjMgQyAyOS44MTA2NDIgMzIuMTQ0MTE0IDMwLjk0NDkzNiAzMS4yMjc0NyAzMS45MDUzNzEgMzAuMTQzMzYzIEMgMzIuODY1ODA2IDI5LjA1OTI1NiAzMy42MzkwNDIgMjcuODIyNzQzIDM0LjE5MzMwMiAyNi40ODQ2NDEgQyAzNC43NDc1NjIgMjUuMTQ2NTM4IDM1LjA3NTE0OCAyMy43MjU0MzEgMzUuMTYyNTk4IDIyLjI3OTcyMSBDIDM1LjI1MDA0NyAyMC44MzQwMTIgMzUuMDk2MTQ1IDE5LjM4Mzc4IDM0LjcwNzIxNiAxNy45ODg2MjUgQyAzNC4zMTgyODcgMTYuNTkzNDcgMzMuNjk5NzM0IDE1LjI3Mjc3IDMyLjg3Njk3NiAxNC4wODA3OTkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjg3Njk3NiAxNC4wODA3OTkgQyAzMS42NzcxOTcgMTIuMzQyNjIgMzAuMDczMDg3IDEwLjkyMTUwMyAyOC4yMDI5NjQgOS45Mzk5ODYgQyAyNi4zMzI4NCA4Ljk1ODQ3IDI0LjI1MjA0NSA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMyLjg3Njk3NiAxNC4wODA3OTkgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzA5Zjc4OTUxNGI4YzRlOTg4NjczNTAyNWU0MGIzYzRiLnNldEljb24oZGl2X2ljb25fYTk0YjY2YjQ3Nzg2NGM1NWFhMzk3MTk5YmM4ZDViYWYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzQ4N2RhYjZiOTg5NGFlNDkxMmJkYTBhODU4NWZmNzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDIxNGU5NWJkZTRiNGViZDg0ZTgyM2U2NjQyZmNkYmMgPSAkKGA8ZGl2IGlkPSJodG1sX2QyMTRlOTViZGU0YjRlYmQ4NGU4MjNlNjY0MmZjZGJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGl3aTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGl3aTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiA0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzQ4N2RhYjZiOTg5NGFlNDkxMmJkYTBhODU4NWZmNzcuc2V0Q29udGVudChodG1sX2QyMTRlOTViZGU0YjRlYmQ4NGU4MjNlNjY0MmZjZGJjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMDlmNzg5NTE0YjhjNGU5ODg2NzM1MDI1ZTQwYjNjNGIuYmluZFBvcHVwKHBvcHVwXzM0ODdkYWI2Yjk4OTRhZTQ5MTJiZGEwYTg1ODVmZjc3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfM2ZlYWQ2MDg5MWQ5NDM4Njk4ZTQ2OTdlYTZkNjk5MmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl85MDY4NTg1MTViNTI0ZDc3OTZlNDY0Y2E1NmFiZTNhYiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS45MTgxMjMgOC40NDU2IDE3LjczMjY0NSA5LjAxMzE5OCAxNS43OTE1NjMgMTAuMDk0MzczIEMgMTMuODUwNDgyIDExLjE3NTU0OCAxMi4yMTczOTQgMTIuNzM0ODc4IDExLjA0NzcyNyAxNC42MjM5NTYgQyA5Ljg3ODA2IDE2LjUxMzAzNCA5LjIxMDEzNSAxOC42Njk5NjcgOS4xMDc1MjEgMjAuODg5NDczIEMgOS4wMDQ5MDcgMjMuMTA4OTc5IDkuNDcwOTY2IDI1LjMxODMzOSAxMC40NjEzNDIgMjcuMzA3MjgyIEMgMTEuNDUxNzE4IDI5LjI5NjIyNCAxMi45MzM5NjIgMzAuOTk5NTg0IDE0Ljc2NzAwNSAzMi4yNTUyNDggQyAxNi42MDAwNDggMzMuNTEwOTExIDE4LjcyMzgzMyAzNC4yNzc3MzggMjAuOTM2MjMxIDM0LjQ4Mjc0NiBDIDIzLjE0ODYzIDM0LjY4Nzc1NSAyNS4zNzcxNTcgMzQuMzI0MjI5IDI3LjQwOTcxNiAzMy40MjY3NjYgQyAyOS40NDIyNzYgMzIuNTI5MzAzIDMxLjIxMjI3MyAzMS4xMjczMDcgMzIuNTUxMjUzIDI5LjM1NDIxMSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuNTUxMjUzIDI5LjM1NDIxMSBDIDM0LjAxMzQyNSAyNy40MTc5ODIgMzQuOTA2ODc2IDI1LjExMTcxNyAzNS4xMzA3NDcgMjIuNjk1NzY4IEMgMzUuMzU0NjE3IDIwLjI3OTgxOSAzNC45MDAxNTIgMTcuODQ4NjUxIDMzLjgxODY1NyAxNS42NzY3MTcgQyAzMi43MzcxNjIgMTMuNTA0NzgzIDMxLjA3MDkyNCAxMS42NzcwMDggMjkuMDA4MDQzIDEwLjM5OTcyNiBDIDI2Ljk0NTE2MSA5LjEyMjQ0NCAyNC41NjYyOTcgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi41NTEyNTMgMjkuMzU0MjExIHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8zZmVhZDYwODkxZDk0Mzg2OThlNDY5N2VhNmQ2OTkyZi5zZXRJY29uKGRpdl9pY29uXzkwNjg1ODUxNWI1MjRkNzc5NmU0NjRjYTU2YWJlM2FiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhY2Y2MWUzYTU1ZTRjZjdiYzRhMWVhYWE0OGVhYmIxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QyOTRlMTBiM2I1ODQ1YzZhMTRkNDNmN2UwNWVhNmYwID0gJChgPGRpdiBpZD0iaHRtbF9kMjk0ZTEwYjNiNTg0NWM2YTE0ZDQzZjdlMDVlYTZmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xpYmUxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxpYmVyaWEgS3BlbGxlPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDEyPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2FjZjYxZTNhNTVlNGNmN2JjNGExZWFhYTQ4ZWFiYjEuc2V0Q29udGVudChodG1sX2QyOTRlMTBiM2I1ODQ1YzZhMTRkNDNmN2UwNWVhNmYwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2ZlYWQ2MDg5MWQ5NDM4Njk4ZTQ2OTdlYTZkNjk5MmYuYmluZFBvcHVwKHBvcHVwX2NhY2Y2MWUzYTU1ZTRjZjdiYzRhMWVhYWE0OGVhYmIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNzU4ZTBkMjU4OTYyNGVjYWFjY2Q4MDg2ZWQxMjliMDEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzEwYmJhY2I3ZTRjODRkZWU5ZWFmNzFlZjQ3Yjk0MWFlID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjkxMjYwNiA4LjQ0NTYgMTcuNzIxODgzIDkuMDE2MDIgMTUuNzc3MzM3IDEwLjEwMjMwOSBDIDEzLjgzMjc5MSAxMS4xODg1OTcgMTIuMTk4NDQ5IDEyLjc1NDk4NiAxMS4wMzA2MTEgMTQuNjUxNjc3IEMgOS44NjI3NzIgMTYuNTQ4MzY4IDkuMTk5ODg5IDE4LjcxMjkwNyA5LjEwNTM1NSAyMC45MzgyOTQgQyA5LjAxMDgyMiAyMy4xNjM2ODEgOS40ODc3NTEgMjUuMzc2NjM5IDEwLjQ5MDUzMiAyNy4zNjU1MzcgQyAxMS40OTMzMTIgMjkuMzU0NDM1IDEyLjk4ODkyNyAzMS4wNTM3ODMgMTQuODM0MzQ0IDMyLjMwMTA2NyBDIDE2LjY3OTc2MSAzMy41NDgzNTIgMTguODE0MjE3IDM0LjMwMjUwNCAyMS4wMzM1ODYgMzQuNDkxNCBDIDIzLjI1Mjk1NiAzNC42ODAyOTcgMjUuNDg0MTYyIDM0LjI5NzcxOCAyNy41MTM4MjcgMzMuMzgwMjUyIEMgMjkuNTQzNDkxIDMyLjQ2Mjc4NiAzMS4zMDQ3ODQgMzEuMDQwNjQyIDMyLjYyOTI2NyAyOS4yNDk4MjQgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjYyOTI2NyAyOS4yNDk4MjQgQyAzNC4wNjU0NDUgMjcuMzA3OTgzIDM0LjkzNDU3MyAyNS4wMDQ5NDcgMzUuMTM5NCAyMi41OTg0MTQgQyAzNS4zNDQyMjcgMjAuMTkxODgxIDM0Ljg3NjgxNiAxNy43NzUwODkgMzMuNzg5NDY5IDE1LjYxODQ2NCBDIDMyLjcwMjEyMiAxMy40NjE4MzkgMzEuMDM2OTY2IDExLjY0ODkzNyAyOC45ODAzMjUgMTAuMzgyNjEyIEMgMjYuOTIzNjgzIDkuMTE2Mjg2IDI0LjU1NTIzNiA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMyLjYyOTI2NyAyOS4yNDk4MjQgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzc1OGUwZDI1ODk2MjRlY2FhY2NkODA4NmVkMTI5YjAxLnNldEljb24oZGl2X2ljb25fMTBiYmFjYjdlNGM4NGRlZTllYWY3MWVmNDdiOTQxYWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjkxYzAwNTI1YzIzNDQwN2ExNTEyYjdlZjc3MDkwYjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmI1N2E0YjQ3NzYzNDdjMGE5MDYxYWZiY2ZjYjJhYWEgPSAkKGA8ZGl2IGlkPSJodG1sXzJiNTdhNGI0Nzc2MzQ3YzBhOTA2MWFmYmNmY2IyYWFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHVsdTEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVsdTwvYT48YnI+Y29uc29uYW50czogMjQ8YnI+dm93ZWxzOiAxMzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5MWMwMDUyNWMyMzQ0MDdhMTUxMmI3ZWY3NzA5MGIzLnNldENvbnRlbnQoaHRtbF8yYjU3YTRiNDc3NjM0N2MwYTkwNjFhZmJjZmNiMmFhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzc1OGUwZDI1ODk2MjRlY2FhY2NkODA4NmVkMTI5YjAxLmJpbmRQb3B1cChwb3B1cF82OTFjMDA1MjVjMjM0NDA3YTE1MTJiN2VmNzcwOTBiMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2EzNDNkZDMwYzYwZTQ2YjY5MmM3Y2IyZDE2NjkxNWQ0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMDgxM2QzYWQ1YWI0NDEzZTkxMWYxMWYxM2EzZmZjNmIgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuODIzODM5IDguNDQ1NiAxOS41MTUyMjMgOC42NDQ3NjggMTguMjU4NjU2IDkuMDM2MzMgQyAxNy4wMDIwODkgOS40Mjc4OTIgMTUuODExOTggMTAuMDA3MzU4IDE0LjcyODggMTAuNzU1MDIzIEMgMTMuNjQ1NjIgMTEuNTAyNjg4IDEyLjY4MTc5MSAxMi40MDk5NzkgMTEuODcwMDg5IDEzLjQ0NjAzOSBDIDExLjA1ODM4OCAxNC40ODIxIDEwLjQwODEyMSAxNS42MzUwNTEgOS45NDE0MDQgMTYuODY1NjgzIEMgOS40NzQ2ODcgMTguMDk2MzE1IDkuMTk2ODcgMTkuMzkwNTE4IDkuMTE3NDAyIDIwLjcwNDI3OCBDIDkuMDM3OTM1IDIyLjAxODAzOCA5LjE1NzcyNyAyMy4zMzYyOTIgOS40NzI3MDUgMjQuNjE0MjA4IEMgOS43ODc2ODMgMjUuODkyMTI0IDEwLjI5NDIzNSAyNy4xMTUwNSAxMC45NzUxMzUgMjguMjQxMzk2IEMgMTEuNjU2MDM2IDI5LjM2Nzc0MyAxMi41MDM0NzYgMzAuMzg0NTk1IDEzLjQ4ODYzNyAzMS4yNTczNzEgQyAxNC40NzM3OTggMzIuMTMwMTQ3IDE1LjU4NTM4NCAzMi44NDg4NDEgMTYuNzg1NTkxIDMzLjM4OTAxIEMgMTcuOTg1Nzk4IDMzLjkyOTE4IDE5LjI2MDg2NiAzNC4yODQ2MzEgMjAuNTY3NDMxIDM0LjQ0MzI3NyBDIDIxLjg3Mzk5NiAzNC42MDE5MjMgMjMuMTk3MDc4IDM0LjU2MTk0MyAyNC40OTE2OCAzNC4zMjQ2OTkgQyAyNS43ODYyODMgMzQuMDg3NDU0IDI3LjAzNzU2MiAzMy42NTU2NjQgMjguMjAyOTY1IDMzLjA0NDAxMyBDIDI5LjM2ODM2OCAzMi40MzIzNjIgMzAuNDM0NTMyIDMxLjY0Nzg2NCAzMS4zNjUxOTkgMzAuNzE3MTk3IEMgMzIuMjk1ODY1IDI5Ljc4NjUzMSAzMy4wODAzNjMgMjguNzIwMzY3IDMzLjY5MjAxNCAyNy41NTQ5NjQgQyAzNC4zMDM2NjUgMjYuMzg5NTYgMzQuNzM1NDU0IDI1LjEzODI4MSAzNC45NzI2OTkgMjMuODQzNjc4IEMgMzUuMjA5OTQ0IDIyLjU0OTA3NiAzNS4yNDk5MjMgMjEuMjI1OTk0IDM1LjA5MTI3NyAxOS45MTk0MjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM1LjA5MTI3NyAxOS45MTk0MjkgQyAzNC43MDcxMzggMTYuNzU1NzYgMzMuMTc2Nzk2IDEzLjgzOTkzNyAzMC43OTEzNjMgMTEuNzI2NjI5IEMgMjguNDA1OTMgOS42MTMzMiAyNS4zMjY5MDQgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4wOTEyNzcgMTkuOTE5NDI5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMzQzZGQzMGM2MGU0NmI2OTJjN2NiMmQxNjY5MTVkNC5zZXRJY29uKGRpdl9pY29uXzA4MTNkM2FkNWFiNDQxM2U5MTFmMTFmMTNhM2ZmYzZiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhiYzAyYjdkYzI1MDQwNjliNzQwNWQ4NWU0OWY3NGM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY1NThmNDM1NmE4OTQyZDk5Njc5MmZkNDEzNDU3MzI4ID0gJChgPGRpdiBpZD0iaHRtbF82NTU4ZjQzNTZhODk0MmQ5OTY3OTJmZDQxMzQ1NzMyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPmNvbnNvbmFudHM6IDIwPGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiYzAyYjdkYzI1MDQwNjliNzQwNWQ4NWU0OWY3NGM2LnNldENvbnRlbnQoaHRtbF82NTU4ZjQzNTZhODk0MmQ5OTY3OTJmZDQxMzQ1NzMyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2EzNDNkZDMwYzYwZTQ2YjY5MmM3Y2IyZDE2NjkxNWQ0LmJpbmRQb3B1cChwb3B1cF84YmMwMmI3ZGMyNTA0MDY5Yjc0MDVkODVlNDlmNzRjNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzRiNGFhMTE3ZTdiMTRmNzRiMzc1OTU4MmRiNDY4NTMwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNC45NDAzLCAtOTguOTA0Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMWQ0ZmEzMjUzNmU2NDQzNzkzZjJkNWUwZTE2OWViNGEgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuMzQ0NjIzIDguNDQ1NiAxOC41Njg0MjMgOC44MTYyMDUgMTYuOTIyODQ4IDkuNTM0MTYyIEMgMTUuMjc3Mjc0IDEwLjI1MjExOSAxMy43OTc0NzggMTEuMzAyMDkgMTIuNTc2MzEyIDEyLjYxODE5NSBDIDExLjM1NTE0NSAxMy45MzQyOTkgMTAuNDE4Njk1IDE1LjQ4ODQyMiA5LjgyNTcyIDE3LjE4MzA0OCBDIDkuMjMyNzQ1IDE4Ljg3NzY3NCA4Ljk5NTkxMiAyMC42NzY2MDMgOS4xMzAwOCAyMi40NjY5NiBDIDkuMjY0MjQ5IDI0LjI1NzMxNiA5Ljc2NjU1NCAyNi4wMDA4NTUgMTAuNjA1NDc4IDI3LjU4ODE3NSBDIDExLjQ0NDQwMSAyOS4xNzU0OTUgMTIuNjAyMDIyIDMwLjU3MjY4OCAxNC4wMDU3MDQgMzEuNjkyMDg3IEMgMTUuNDA5Mzg2IDMyLjgxMTQ4NiAxNy4wMjkxNDQgMzMuNjI5MTc4IDE4Ljc2MzM0NSAzNC4wOTM4NTUgQyAyMC40OTc1NDYgMzQuNTU4NTMzIDIyLjMwOTE0MyAzNC42NjAyNjkgMjQuMDg0NDY3IDM0LjM5MjY4MiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMjQuMDg0NDY3IDM0LjM5MjY4MiBDIDI3LjMzODAzMSAzMy45MDIyODYgMzAuMjg4NjExIDMyLjE5ODc2NyAzMi4zNDAwODggMjkuNjI2Mjk2IEMgMzQuMzkxNTY0IDI3LjA1MzgyNCAzNS4zOTU4MDYgMjMuNzk4MTUyIDM1LjE0OTkxOSAyMC41MTcwMzkgQyAzNC45MDQwMzMgMTcuMjM1OTI1IDMzLjQyNTc3NSAxNC4xNjYyOTIgMzEuMDEzODA0IDExLjkyODMxIEMgMjguNjAxODMzIDkuNjkwMzI5IDI1LjQzMDMxMSA4LjQ0NTU5OSAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMjQuMDg0NDY3IDM0LjM5MjY4MiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNGI0YWExMTdlN2IxNGY3NGIzNzU5NTgyZGI0Njg1MzAuc2V0SWNvbihkaXZfaWNvbl8xZDRmYTMyNTM2ZTY0NDM3OTNmMmQ1ZTBlMTY5ZWI0YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YzY1YjNiZDcxNDI0YmY3YWQ4MzgxMTE5MzJhZDY2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzRmMmE3YjVjYWQ0OGQ5YmFmYzBhZWQxYmIzY2FmZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDc0ZjJhN2I1Y2FkNDhkOWJhZmMwYWVkMWJiM2NhZmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raW93MTI2NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaW93YTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAyMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzljNjViM2JkNzE0MjRiZjdhZDgzODExMTkzMmFkNjYwLnNldENvbnRlbnQoaHRtbF80NzRmMmE3YjVjYWQ0OGQ5YmFmYzBhZWQxYmIzY2FmZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRiNGFhMTE3ZTdiMTRmNzRiMzc1OTU4MmRiNDY4NTMwLmJpbmRQb3B1cChwb3B1cF85YzY1YjNiZDcxNDI0YmY3YWQ4MzgxMTE5MzJhZDY2MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzdkMzYyODgzMzU1NTQxOTk5YTFjYzIzNDIzMzU4M2YxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNS4wLCAxMzUuMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYjMzY2RiNmM0OGUzNDI4YWE4M2Y3NDIxODg2N2M0MmIgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuNTU5OTc1IDguNDQ1NiAxNy4wMzcwMjEgOS4yMTA5MyAxNC44OTE4MDkgMTAuNjQ0MzE1IEMgMTIuNzQ2NTk2IDEyLjA3NzcgMTEuMDc0MDMxIDE0LjExNTcyNiAxMC4wODY2OTggMTYuNDk5MzU5IEMgOS4wOTkzNjUgMTguODgyOTkxIDguODQwOTQ1IDIxLjUwNjc3NiA5LjM0NDI4MyAyNC4wMzcyMjYgQyA5Ljg0NzYyMSAyNi41Njc2NzcgMTEuMDkwNDQ5IDI4Ljg5Mjg0NSAxMi45MTQ4MDIgMzAuNzE3MTk4IEMgMTQuNzM5MTU1IDMyLjU0MTU1MSAxNy4wNjQzMjMgMzMuNzg0Mzc5IDE5LjU5NDc3NCAzNC4yODc3MTcgQyAyMi4xMjUyMjQgMzQuNzkxMDU1IDI0Ljc0OTAwOSAzNC41MzI2MzUgMjcuMTMyNjQxIDMzLjU0NTMwMiBDIDI5LjUxNjI3NCAzMi41NTc5NjkgMzEuNTU0MyAzMC44ODU0MDQgMzIuOTg3Njg1IDI4Ljc0MDE5MSBDIDM0LjQyMTA3IDI2LjU5NDk3OSAzNS4xODY0IDI0LjA3MjAyNSAzNS4xODY0IDIxLjQ5MiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzUuMTg2NCAyMS40OTIgQyAzNS4xODY0IDE4LjAzMzIwNyAzMy44MTA5MzQgMTQuNzEyNTM4IDMxLjM2NTE5OCAxMi4yNjY4MDIgQyAyOC45MTk0NjIgOS44MjEwNjYgMjUuNTk4NzkzIDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4xODY0IDIxLjQ5MiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2QzNjI4ODMzNTU1NDE5OTlhMWNjMjM0MjMzNTgzZjEuc2V0SWNvbihkaXZfaWNvbl9iMzNjZGI2YzQ4ZTM0MjhhYTgzZjc0MjE4ODY3YzQyYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82OWE4YmFjZTUxNjM0Y2ExODE4OGUyYTgwMjllZWY2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zN2Y4MDZiYTkyNmQ0NjVhODk5ZmM1OTExNTA1NjkxNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzdmODA2YmE5MjZkNDY1YTg5OWZjNTkxMTUwNTY5MTQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTY0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXBhbmVzZTwvYT48YnI+Y29uc29uYW50czogMTU8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjlhOGJhY2U1MTYzNGNhMTgxODhlMmE4MDI5ZWVmNjAuc2V0Q29udGVudChodG1sXzM3ZjgwNmJhOTI2ZDQ2NWE4OTlmYzU5MTE1MDU2OTE0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2QzNjI4ODMzNTU1NDE5OTlhMWNjMjM0MjMzNTgzZjEuYmluZFBvcHVwKHBvcHVwXzY5YThiYWNlNTE2MzRjYTE4MTg4ZTJhODAyOWVlZjYwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjg2YWNiZGUxNDJhNGEzMGJjZTAwZmNmZTFjYTViNWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzcuMTUzNDUsIDMuNjcyMjVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2ZiYjBlZGZkZDk0NDRkMjZhY2FhMWNhNGZlNmNhMmI1ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjAwOTU3IDguNDQ1NiAxNy45MTEyMTcgOC45Njc0MzcgMTYuMDI4OTU2IDkuOTY1MzQ4IEMgMTQuMTQ2Njk2IDEwLjk2MzI2IDEyLjUzNzIwOCAxMi40MDcxOTUgMTEuMzQxNjM5IDE0LjE3MDUyOSBDIDEwLjE0NjA2OSAxNS45MzM4NjIgOS40MDA0MTkgMTcuOTYzNDk0IDkuMTcwMDc5IDIwLjA4MTQzNSBDIDguOTM5NzM5IDIyLjE5OTM3NiA5LjIzMTY0NSAyNC4zNDE4NSAxMC4wMjAxOTggMjYuMzIwOTY5IEMgMTAuODA4NzUxIDI4LjMwMDA4OSAxMi4wNzAyMDYgMzAuMDU2MjU5IDEzLjY5MzkzOSAzMS40MzU0NyBDIDE1LjMxNzY3MSAzMi44MTQ2ODEgMTcuMjU0Nzg3IDMzLjc3NTQwMiAxOS4zMzU0MDggMzQuMjMzMzgyIEMgMjEuNDE2MDMgMzQuNjkxMzYyIDIzLjU3NzUwNCAzNC42MzI4MDkgMjUuNjMwMjggMzQuMDYyODU5IEMgMjcuNjgzMDU2IDMzLjQ5MjkwOSAyOS41NjUzMTggMzIuNDI4NzI0IDMxLjExMjAwMSAzMC45NjM2MjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjExMjAwMSAzMC45NjM2MjkgQyAzMy4wMDY5MjcgMjkuMTY4NjYgMzQuMzIwMjg2IDI2Ljg0NTY3NiAzNC44ODEzODIgMjQuMjk2NTkyIEMgMzUuNDQyNDc4IDIxLjc0NzUwOSAzNS4yMjU5MDIgMTkuMDg3NzYgMzQuMjU5ODAzIDE2LjY2MzAzMiBDIDMzLjI5MzcwMyAxNC4yMzgzMDMgMzEuNjIxODI5IDEyLjE1ODM5OCAyOS40NjE0NzMgMTAuNjkzNjQgQyAyNy4zMDExMTcgOS4yMjg4ODEgMjQuNzUwMTA5IDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzEuMTEyMDAxIDMwLjk2MzYyOSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNjg2YWNiZGUxNDJhNGEzMGJjZTAwZmNmZTFjYTViNWMuc2V0SWNvbihkaXZfaWNvbl9mYmIwZWRmZGQ5NDQ0ZDI2YWNhYTFjYTRmZTZjYTJiNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NWM0ZmIzODcxMjM0Y2ZkYWVmMDllYmY5ZDIzY2FlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iOTc5YTZmM2M3MDc0ZTg3OGEyNTQwYzAxMWRhZDBiOSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjk3OWE2ZjNjNzA3NGU4NzhhMjU0MGMwMTFkYWQwYjkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95b3J1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Zb3J1YmE8L2E+PGJyPmNvbnNvbmFudHM6IDE4PGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NWM0ZmIzODcxMjM0Y2ZkYWVmMDllYmY5ZDIzY2FlNC5zZXRDb250ZW50KGh0bWxfYjk3OWE2ZjNjNzA3NGU4NzhhMjU0MGMwMTFkYWQwYjkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82ODZhY2JkZTE0MmE0YTMwYmNlMDBmY2ZlMWNhNWI1Yy5iaW5kUG9wdXAocG9wdXBfNTVjNGZiMzg3MTIzNGNmZGFlZjA5ZWJmOWQyM2NhZTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jOTc4YzM4YjE4ZmI0MDhkYjhmYzU5NmQyOTk2NmI4YiA9IEwubWFya2VyKAogICAgICAgICAgICBbNjQuNzYyOCwgMjUuNTU3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNjkyZjQwZjZjZTc5NDM1NDhiYWJhZGNlYjY0OTQ3MDcgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODAzNzIxIDguNDQ1NiAxNy41MDk3NzYgOS4wNzMxNTIgMTUuNDk4ODQyIDEwLjI2MjQxNSBDIDEzLjQ4NzkwOCAxMS40NTE2NzggMTEuODMyODYzIDEzLjE1OTU1MiAxMC43MDczNTIgMTUuMjA2ODQ5IEMgOS41ODE4NDEgMTcuMjU0MTQ2IDkuMDI2NjUzIDE5LjU2NjY3MSA5LjEwMDAzOCAyMS45MDE3OTggQyA5LjE3MzQyMiAyNC4yMzY5MjQgOS44NzI3MTkgMjYuNTEwMDI1IDExLjEyNDU2IDI4LjQ4MjYxMSBDIDEyLjM3NjQwMSAzMC40NTUxOTcgMTQuMTM1NDE5IDMyLjA1NTc3OSAxNi4yMTcwNTkgMzMuMTE2NDI4IEMgMTguMjk4Njk5IDM0LjE3NzA3NiAyMC42Mjc1MjIgMzQuNjU5MzUyIDIyLjk1OTE5MSAzNC41MTI2NTYgQyAyNS4yOTA4NiAzNC4zNjU5NiAyNy41NDA4NzQgMzMuNTk1NjA3IDI5LjQ3MzE2NSAzMi4yODI0MjQgQyAzMS40MDU0NTYgMzAuOTY5MjQgMzIuOTQ5OTk3IDI5LjE2MDgxNSAzMy45NDQ3MzYgMjcuMDQ2ODg2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy45NDQ3MzYgMjcuMDQ2ODg2IEMgMzQuODgwMzM3IDI1LjA1ODYzMiAzNS4yOTg2MzEgMjIuODY1ODU5IDM1LjE2MDY1NiAyMC42NzI4MDkgQyAzNS4wMjI2ODEgMTguNDc5NzU5IDM0LjMzMjg1OCAxNi4zNTY3MDMgMzMuMTU1NDQgMTQuNTAxMzg5IEMgMzEuOTc4MDIxIDEyLjY0NjA3NSAzMC4zNTA3MzUgMTEuMTE3OTUxIDI4LjQyNTE1MSAxMC4wNTkzNTIgQyAyNi40OTk1NjcgOS4wMDA3NTQgMjQuMzM3Mzg2IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy45NDQ3MzYgMjcuMDQ2ODg2IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jOTc4YzM4YjE4ZmI0MDhkYjhmYzU5NmQyOTk2NmI4Yi5zZXRJY29uKGRpdl9pY29uXzY5MmY0MGY2Y2U3OTQzNTQ4YmFiYWRjZWI2NDk0NzA3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwMzMzYjFiNWZkMDRiZGZhNzMzYTUzOWYyNjA2YjQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwNTNhNjk4ODkxYzQ4MWY5MDYzYTQ5MWIzZmI1OTFjID0gJChgPGRpdiBpZD0iaHRtbF9jMDUzYTY5ODg5MWM0ODFmOTA2M2E0OTFiM2ZiNTkxYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPmNvbnNvbmFudHM6IDE3PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwMzMzYjFiNWZkMDRiZGZhNzMzYTUzOWYyNjA2YjQ4LnNldENvbnRlbnQoaHRtbF9jMDUzYTY5ODg5MWM0ODFmOTA2M2E0OTFiM2ZiNTkxYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M5NzhjMzhiMThmYjQwOGRiOGZjNTk2ZDI5OTY2YjhiLmJpbmRQb3B1cChwb3B1cF81MDMzM2IxYjVmZDA0YmRmYTczM2E1MzlmMjYwNmI0OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzA5OGEzODViNjk1ODQ3MWJhMjE0M2MyMDY5MzlhYjJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9mYWZiM2UwMTViODY0NWU1OGY3NzBjZWRlYWYxNjI2YSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC4wMjc5NTQgOC40NDU2IDE3Ljk0NzE1OSA4Ljk1ODQ3IDE2LjA3NzAzNSA5LjkzOTk4NyBDIDE0LjIwNjkxMiAxMC45MjE1MDMgMTIuNjAyODAyIDEyLjM0MjYyMSAxMS40MDMwMjMgMTQuMDgwOCBDIDEwLjIwMzI0NCAxNS44MTg5OCA5LjQ0MzMwMiAxNy44MjI3ODQgOS4xODg3MjMgMTkuOTE5NDMxIEMgOC45MzQxNDQgMjIuMDE2MDc4IDkuMTkyNDYzIDI0LjE0MzUyMSA5Ljk0MTQwNCAyNi4xMTgzMTggQyAxMC42OTAzNDYgMjguMDkzMTE1IDExLjkwNzc0OCAyOS44NTY4MjYgMTMuNDg4NjM3IDMxLjI1NzM3MSBDIDE1LjA2OTUyNyAzMi42NTc5MTcgMTYuOTY3MTIgMzMuNjUzODUgMTkuMDE3NzkzIDM0LjE1OTI5NiBDIDIxLjA2ODQ2NyAzNC42NjQ3NDEgMjMuMjExNTM2IDM0LjY2NDc0MSAyNS4yNjIyMDkgMzQuMTU5Mjk1IEMgMjcuMzEyODgzIDMzLjY1Mzg0OSAyOS4yMTA0NzYgMzIuNjU3OTE1IDMwLjc5MTM2NSAzMS4yNTczNjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMwLjc5MTM2NSAzMS4yNTczNjkgQyAzMi43NzI3ODUgMjkuNTAxOTg0IDM0LjE3Mzc5MiAyNy4xODQ0MzUgMzQuODA3Mjk2IDI0LjYxNDIwNiBDIDM1LjQ0MDggMjIuMDQzOTc3IDM1LjI3NzI4OCAxOS4zNDA4MDkgMzQuMzM4NTk1IDE2Ljg2NTY4MSBDIDMzLjM5OTkwMiAxNC4zOTA1NTMgMzEuNzI5NzYgMTIuMjU4Nzc0IDI5LjU1MTE5OCAxMC43NTUwMjIgQyAyNy4zNzI2MzYgOS4yNTEyNyAyNC43ODcxNDcgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMC43OTEzNjUgMzEuMjU3MzY5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wOThhMzg1YjY5NTg0NzFiYTIxNDNjMjA2OTM5YWIyZi5zZXRJY29uKGRpdl9pY29uX2ZhZmIzZTAxNWI4NjQ1ZTU4Zjc3MGNlZGVhZjE2MjZhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I5ODMyMmQ3MTk0NDQ2MzI4OGIwMTEwOWVmNzIxYTk5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzA0YWYzMGFhMzViYjRjZWFhZWFkNDM4MGNjNjEzOTJmID0gJChgPGRpdiBpZD0iaHRtbF8wNGFmMzBhYTM1YmI0Y2VhYWVhZDQzODBjYzYxMzkyZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhd2FpaWFuPC9hPjxicj5jb25zb25hbnRzOiA4PGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5ODMyMmQ3MTk0NDQ2MzI4OGIwMTEwOWVmNzIxYTk5LnNldENvbnRlbnQoaHRtbF8wNGFmMzBhYTM1YmI0Y2VhYWVhZDQzODBjYzYxMzkyZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzA5OGEzODViNjk1ODQ3MWJhMjE0M2MyMDY5MzlhYjJmLmJpbmRQb3B1cChwb3B1cF9iOTgzMjJkNzE5NDQ0NjMyODhiMDExMDllZjcyMWE5OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2IyNzQzOTA3YTAyOTRmNzdhY2E3ZDk1YjlkMDJhY2FhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0Ni45MDY4NTg1NzE0LCAxOS42NTU1MjcxNDI5XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl83YmNiZjQxYWVlNzE0OTc4OTIzZDViOWFlMDEwMzUyYSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS45MDc5MTYgOC40NDU2IDE3LjcxMjczNiA5LjAxODQyNCAxNS43NjUyNTIgMTAuMTA5MDY4IEMgMTMuODE3NzY4IDExLjE5OTcxMSAxMi4xODIzNzYgMTIuNzcyMTEgMTEuMDE2MTE2IDE0LjY3NTI3NCBDIDkuODQ5ODU1IDE2LjU3ODQzOSA5LjE5MTI5IDE4Ljc0OTQzNyA5LjEwMzY1OCAyMC45Nzk4IEMgOS4wMTYwMjcgMjMuMjEwMTYzIDkuNTAyMjI3IDI1LjQyNjEzOSAxMC41MTU1NzIgMjcuNDE0OTQxIEMgMTEuNTI4OTE3IDI5LjQwMzc0MiAxMy4wMzU4OTggMzEuMDk5NjA1IDE0Ljg5MTgwNyAzMi4zMzk2ODQgQyAxNi43NDc3MTcgMzMuNTc5NzY0IDE4Ljg5MTE4NyAzNC4zMjMwNTUgMjEuMTE2MzkgMzQuNDk4MTgyIEMgMjMuMzQxNTkzIDM0LjY3MzMxIDI1LjU3NDk0OSAzNC4yNzQ0ODMgMjcuNjAyMDAxIDMzLjM0IEMgMjkuNjI5MDUzIDMyLjQwNTUxNiAzMS4zODI3NzIgMzAuOTY2Mjc3IDMyLjY5NDc1OCAyOS4xNjA0ODMgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjY5NDc1OCAyOS4xNjA0ODMgQyAzNC4xMDg4NyAyNy4yMTQxMjYgMzQuOTU3NDIzIDI0LjkxNDAyNCAzNS4xNDYxODIgMjIuNTE1NjExIEMgMzUuMzM0OTQyIDIwLjExNzE5OCAzNC44NTY2NTIgMTcuNzEyNjcgMzMuNzY0NDI5IDE1LjU2OTA2IEMgMzIuNjcyMjA1IDEzLjQyNTQ1IDMxLjAwODAzNCAxMS42MjUxNTkgMjguOTU2NzI3IDEwLjM2ODExNyBDIDI2LjkwNTQyMSA5LjExMTA3NCAyNC41NDU4MzIgOC40NDU2IDIyLjE0MDAwMiA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi42OTQ3NTggMjkuMTYwNDgzIHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iMjc0MzkwN2EwMjk0Zjc3YWNhN2Q5NWI5ZDAyYWNhYS5zZXRJY29uKGRpdl9pY29uXzdiY2JmNDFhZWU3MTQ5Nzg5MjNkNWI5YWUwMTAzNTJhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ2YjUyNDBjZjRmMzQ2ZWZiMTdkOWJiYTU1NzAyMzE1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzViNDZhMGJiYTgzMTQxNDU4ZjQ2ZWJlMGU3Mzk2ODcxID0gJChgPGRpdiBpZD0iaHRtbF81YjQ2YTBiYmE4MzE0MTQ1OGY0NmViZTBlNzM5Njg3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bmcxMjc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bmdhcmlhbjwvYT48YnI+Y29uc29uYW50czogMjY8YnI+dm93ZWxzOiAxNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ2YjUyNDBjZjRmMzQ2ZWZiMTdkOWJiYTU1NzAyMzE1LnNldENvbnRlbnQoaHRtbF81YjQ2YTBiYmE4MzE0MTQ1OGY0NmViZTBlNzM5Njg3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2IyNzQzOTA3YTAyOTRmNzdhY2E3ZDk1YjlkMDJhY2FhLmJpbmRQb3B1cChwb3B1cF80NmI1MjQwY2Y0ZjM0NmVmYjE3ZDliYmE1NTcwMjMxNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzY2ZWU2OTc5NDBjMjQzYzY5NDhjM2I3NTIzYWQ1MDFiID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0MS44NTAzOTY5OTk5OTk5OTQsIDQzLjc4NjEzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9iNjc1OTdkNTliZjY0YzQ5YWFiZjk1ODZiNzdjMDA5NSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC43MzA1NDQgOC40NDU2IDE5LjMzMDM1NyA4LjY3NDAwNCAxNy45OTM5NjYgOS4xMjE5MTcgQyAxNi42NTc1NzUgOS41Njk4MyAxNS40MDI1NTggMTAuMjMxMzYxIDE0LjI3Nzc4NyAxMS4wODA3NDggQyAxMy4xNTMwMTcgMTEuOTMwMTM1IDEyLjE3MzI4OCAxMi45NTYyMDcgMTEuMzc2NzUzIDE0LjExOTAwNCBDIDEwLjU4MDIxOCAxNS4yODE4MDIgOS45NzczNTQgMTYuNTY2MDMyIDkuNTkxNjM4IDE3LjkyMTY4MyBDIDkuMjA1OTIyIDE5LjI3NzMzNCA5LjA0MjQyNyAyMC42ODY1NzYgOS4xMDc1MjEgMjIuMDk0NTI4IEMgOS4xNzI2MTQgMjMuNTAyNDggOS40NjU0NCAyNC44OTA2MjUgOS45NzQ1OTQgMjYuMjA0OTA0IEMgMTAuNDgzNzQ5IDI3LjUxOTE4MiAxMS4yMDI1MzUgMjguNzQyMzA5IDEyLjEwMjk2MiAyOS44MjY2NTEgQyAxMy4wMDMzODggMzAuOTEwOTk0IDE0LjA3MzYxMiAzMS44NDIyOSAxNS4yNzE5NTYgMzIuNTg0MjczIEMgMTYuNDcwMjk5IDMzLjMyNjI1NiAxNy43ODEwMDIgMzMuODY5MTY3IDE5LjE1MzAyIDM0LjE5MTg2MiBDIDIwLjUyNTAzOCAzNC41MTQ1NTggMjEuOTQwMzI3IDM0LjYxMjc5NSAyMy4zNDM3NyAzNC40ODI3NDYgQyAyNC43NDcyMTQgMzQuMzUyNjk4IDI2LjEyMDM1NCAzMy45OTYwNzUgMjcuNDA5NzE2IDMzLjQyNjc2NiBDIDI4LjY5OTA3NyAzMi44NTc0NTggMjkuODg3NzAzIDMyLjA4Mjk1IDMwLjkyOTMwMyAzMS4xMzM0MDYgQyAzMS45NzA5MDQgMzAuMTgzODYxIDMyLjg1MTc4IDI5LjA3MTc2OCAzMy41Mzc2MjcgMjcuODQwNDM2IEMgMzQuMjIzNDc1IDI2LjYwOTEwNCAzNC43MDUyNzQgMjUuMjc0NzI2IDM0Ljk2NDI2IDIzLjg4OTI2OSBDIDM1LjIyMzI0NyAyMi41MDM4MTIgMzUuMjU2MDE2IDIxLjA4NTQ5NiAzNS4wNjEyOTEgMTkuNjg5NTU2IEMgMzQuODY2NTY1IDE4LjI5MzYxNiAzNC40NDY5MDcgMTYuOTM4NDEyIDMzLjgxODY1OCAxNS42NzY3MTggTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMzLjgxODY1OCAxNS42NzY3MTggQyAzMi43MzcxNjMgMTMuNTA0Nzg0IDMxLjA3MDkyNSAxMS42NzcwMDggMjkuMDA4MDQ0IDEwLjM5OTcyNyBDIDI2Ljk0NTE2MiA5LjEyMjQ0NSAyNC41NjYyOTggOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy44MTg2NTggMTUuNjc2NzE4IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NmVlNjk3OTQwYzI0M2M2OTQ4YzNiNzUyM2FkNTAxYi5zZXRJY29uKGRpdl9pY29uX2I2NzU5N2Q1OWJmNjRjNDlhYWJmOTU4NmI3N2MwMDk1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNlNTg0MTliOWY5NTQ0MGJiMmM1NjI1MDZiNTY5NjU1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxNWIwYTAxZDQzNjRhNDQ4M2ZkYjIzMmEyODlmZGZjID0gJChgPGRpdiBpZD0iaHRtbF82MTViMGEwMWQ0MzY0YTQ0ODNmZGIyMzJhMjg5ZmRmYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlb3JnaWFuPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zZTU4NDE5YjlmOTU0NDBiYjJjNTYyNTA2YjU2OTY1NS5zZXRDb250ZW50KGh0bWxfNjE1YjBhMDFkNDM2NGE0NDgzZmRiMjMyYTI4OWZkZmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl82NmVlNjk3OTQwYzI0M2M2OTQ4YzNiNzUyM2FkNTAxYi5iaW5kUG9wdXAocG9wdXBfM2U1ODQxOWI5Zjk1NDQwYmIyYzU2MjUwNmI1Njk2NTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zZjU3NWUxMGVlNWY0MDUyYmNmNGUwMTY5OTMyN2VmMiA9IEwubWFya2VyKAogICAgICAgICAgICBbMTEuNzA4MTgyLCAzOS41NDM0NTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2I4YjAxMmQ2MGY4MTQ1YWRiNWNmOTcwMWI4Y2JhNDE1ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjc1MjQwNCA4LjQ0NTYgMTkuMzczNjUxIDguNjY2OTc0IDE4LjA1NTgwMSA5LjEwMTM2NCBDIDE2LjczNzk1MSA5LjUzNTc1MyAxNS40OTc4MDEgMTAuMTc3NjIxIDE0LjM4MjE3OCAxMS4wMDI3MzIgQyAxMy4yNjY1NTQgMTEuODI3ODQzIDEyLjI4OTY3OCAxMi44MjU2NzkgMTEuNDg4NDMyIDEzLjk1ODU2NCBDIDEwLjY4NzE4NyAxNS4wOTE0NDkgMTAuMDcxNzg2IDE2LjM0NDk0NCA5LjY2NTQ2NiAxNy42NzE3MTcgQyA5LjI1OTE0NyAxOC45OTg0OSA5LjA2NzA4NyAyMC4zODE2MzEgOS4wOTY1MzkgMjEuNzY4OTE1IEMgOS4xMjU5OTEgMjMuMTU2MTk4IDkuMzc2NTggMjQuNTI5OTQyIDkuODM4ODQ0IDI1LjgzODI3NSBDIDEwLjMwMTEwNyAyNy4xNDY2MDggMTAuOTY5MTUzIDI4LjM3Mjg1NCAxMS44MTc3NTggMjkuNDcwNzEzIEMgMTIuNjY2MzYyIDMwLjU2ODU3MiAxMy42ODQ3MDggMzEuNTI0MDQ5IDE0LjgzNDM0NSAzMi4zMDEwNjggQyAxNS45ODM5ODIgMzMuMDc4MDg3IDE3LjI1MDI1NSAzMy42NjY3NDMgMTguNTg1MzU0IDM0LjA0NDgxIEMgMTkuOTIwNDUzIDM0LjQyMjg3NyAyMS4zMDczNTkgMzQuNTg1NTM2IDIyLjY5MzcwNSAzNC41MjY2NDUgQyAyNC4wODAwNTEgMzQuNDY3NzU0IDI1LjQ0ODE2NiAzNC4xODgwNjMgMjYuNzQ2MzkyIDMzLjY5ODEzNCBDIDI4LjA0NDYxOSAzMy4yMDgyMDUgMjkuMjU2NDEgMzIuNTE0MjgyIDMwLjMzNjAwOSAzMS42NDI1NjYgQyAzMS40MTU2MDkgMzAuNzcwODUgMzIuMzQ5MjU2IDI5LjczMjQ1MyAzMy4xMDE2OTggMjguNTY2NTgzIEMgMzMuODU0MTQxIDI3LjQwMDcxMyAzNC40MTU3ODcgMjYuMTIyMjMgMzQuNzY1NDMxIDI0Ljc3OTQwNyBDIDM1LjExNTA3NSAyMy40MzY1ODQgMzUuMjQ4MjU5IDIyLjA0NjUzOSAzNS4xNTk5NTYgMjAuNjYxNzU1IEMgMzUuMDcxNjUyIDE5LjI3Njk3MSAzNC43NjI5ODYgMTcuOTE1MTAxIDM0LjI0NTYxMiAxNi42Mjc1NjYgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM0LjI0NTYxMiAxNi42Mjc1NjYgQyAzMy4yNzQ4NDIgMTQuMjExNzEyIDMxLjYwMjc2NCAxMi4xNDA4ODMgMjkuNDQ1NjU1IDEwLjY4MjkzMiBDIDI3LjI4ODU0NiA5LjIyNDk4MSAyNC43NDM2MDIgOC40NDU2IDIyLjE0IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDM0LjI0NTYxMiAxNi42Mjc1NjYgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNmNTc1ZTEwZWU1ZjQwNTJiY2Y0ZTAxNjk5MzI3ZWYyLnNldEljb24oZGl2X2ljb25fYjhiMDEyZDYwZjgxNDVhZGI1Y2Y5NzAxYjhjYmE0MTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjZkNTVjYjNjNWRhNDIxY2JkMDU4OTk2ZjU3Y2NhYTIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzA4ZTkyODEwZGE1NDUzMGIwNTVkODE0MDg3Mzc3MDcgPSAkKGA8ZGl2IGlkPSJodG1sX2MwOGU5MjgxMGRhNTQ1MzBiMDU1ZDgxNDA4NzM3NzA3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW1oYTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW1oYXJpYzwvYT48YnI+Y29uc29uYW50czogMzA8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjZkNTVjYjNjNWRhNDIxY2JkMDU4OTk2ZjU3Y2NhYTIuc2V0Q29udGVudChodG1sX2MwOGU5MjgxMGRhNTQ1MzBiMDU1ZDgxNDA4NzM3NzA3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfM2Y1NzVlMTBlZTVmNDA1MmJjZjRlMDE2OTkzMjdlZjIuYmluZFBvcHVwKHBvcHVwX2I2ZDU1Y2IzYzVkYTQyMWNiZDA1ODk5NmY1N2NjYWEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZmI2OTM1NTA3MjJiNGRkZmI0YzdlNGQ1ZGIzNmJhMjggPSBMLm1hcmtlcigKICAgICAgICAgICAgWy01LjI2OTE4LCAzNS40ODA4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzRhNThiZjRjODkwODRjYzk5ZDUyMmJhNTM4YmViYTVlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl81MzQ0YWMzZTYzNGI0ZmVkODY4YWY5OGFhZjVlNjBiNyA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC42NSA4LjQ0NTYgMTkuMTcwOTUxIDguNzAwODU0IDE3Ljc2NzE0IDkuMjAwMjY5IEMgMTYuMzYzMzI5IDkuNjk5Njg0IDE1LjA1NTM5MSAxMC40MzU5MTcgMTMuOTAwMTc2IDExLjM3Njk2OSBDIDEyLjc0NDk2MSAxMi4zMTgwMjEgMTEuNzU5NDUgMTMuNDUwMDU4IDEwLjk4NjQ3OCAxNC43MjM4NzcgQyAxMC4yMTM1MDUgMTUuOTk3Njk2IDkuNjY0NDM1IDE3LjM5NDU3MSA5LjM2MzEzIDE4Ljg1Mzc4OSBDIDkuMDYxODI2IDIwLjMxMzAwNyA5LjAxMjcxOCAyMS44MTMxMTYgOS4yMTc5NCAyMy4yODg5MTYgQyA5LjQyMzE2MSAyNC43NjQ3MTYgOS44Nzk2OTYgMjYuMTk0NTExIDEwLjU2NzcwMiAyNy41MTYxNTggQyAxMS4yNTU3MDggMjguODM3ODA0IDEyLjE2NTA3IDMwLjAzMTg3MyAxMy4yNTYyNjQgMzEuMDQ2NDY0IEMgMTQuMzQ3NDU4IDMyLjA2MTA1NiAxNS42MDQ0NDMgMzIuODgxMjU2IDE2Ljk3MjU4NiAzMy40NzE0MTUgQyAxOC4zNDA3MjggMzQuMDYxNTc0IDE5Ljc5OTkxNSAzNC40MTMwMTYgMjEuMjg2NzI1IDM0LjUxMDQ2NyBDIDIyLjc3MzUzNiAzNC42MDc5MTcgMjQuMjY2MTEyIDM0LjQ0OTk0NCAyNS42OTk1ODEgMzQuMDQzNDEyIEMgMjcuMTMzMDUgMzMuNjM2ODggMjguNDg2MzM4IDMyLjk4Nzc2NiAyOS43MDA2MjggMzIuMTI0Mjg0IEMgMzAuOTE0OTE3IDMxLjI2MDgwMSAzMS45NzIzNTcgMzAuMTk1NjQ0IDMyLjgyNjk4NiAyOC45NzUxMDcgQyAzMy42ODE2MTUgMjcuNzU0NTcgMzQuMzIwODcgMjYuMzk2NTk2IDM0LjcxNjk2NiAyNC45NjAyMDkgQyAzNS4xMTMwNjMgMjMuNTIzODIxIDM1LjI2MDE3OCAyMi4wMzAxMzYgMzUuMTUxOTE3IDIwLjU0NDA3NCBDIDM1LjA0MzY1NyAxOS4wNTgwMTIgMzQuNjgxNjEyIDE3LjYwMTQxOSAzNC4wODE1MTkgMTYuMjM3NjA0IEMgMzMuNDgxNDI2IDE0Ljg3Mzc5IDMyLjY1MjEwNyAxMy42MjI4MDMgMzEuNjI5NjA2IDEyLjUzOTAxNiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzEuNjI5NjA2IDEyLjUzOTAxNiBDIDMwLjQxMDA3NSAxMS4yNDYzODggMjguOTM5MTkxIDEwLjIxNjQ2NSAyNy4zMDc0MTQgOS41MTI1ODUgQyAyNS42NzU2MzYgOC44MDg3MDUgMjMuOTE3MTE2IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzEuNjI5NjA2IDEyLjUzOTAxNiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZmI2OTM1NTA3MjJiNGRkZmI0YzdlNGQ1ZGIzNmJhMjguc2V0SWNvbihkaXZfaWNvbl81MzQ0YWMzZTYzNGI0ZmVkODY4YWY5OGFhZjVlNjBiNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMDQyMTA5MmMzYjM0Y2RkYTU4Y2M4ODdjNzQwZmU3MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lYzY4MzNlMzM3YTY0OGM0YTA2N2ZkNzQyMjNiOTdhZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZWM2ODMzZTMzN2E2NDhjNGEwNjdmZDc0MjIzYjk3YWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYW5kMTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYW5kYXdlPC9hPjxicj5jb25zb25hbnRzOiA0Nzxicj52b3dlbHM6IDc8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDQyMTA5MmMzYjM0Y2RkYTU4Y2M4ODdjNzQwZmU3My5zZXRDb250ZW50KGh0bWxfZWM2ODMzZTMzN2E2NDhjNGEwNjdmZDc0MjIzYjk3YWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9mYjY5MzU1MDcyMmI0ZGRmYjRjN2U0ZDVkYjM2YmEyOC5iaW5kUG9wdXAocG9wdXBfZjA0MjEwOTJjM2IzNGNkZGE1OGNjODg3Yzc0MGZlNzMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8xNTI5ODM0YThkMzk0MzY4YTBkN2ZmMzI5MTFjMDc0MyA9IEwubWFya2VyKAogICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF80YTU4YmY0Yzg5MDg0Y2M5OWQ1MjJiYTUzOGJlYmE1ZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOGUxNjA0OTdhZDY1NDk5ZTllYzhkNzVjYzhkNjg1OGYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNjA2MTg5IDguNDQ1NiAxOS4wODQzMjcgOC43MTYwODYgMTcuNjQ0NDUyIDkuMjQ0NjA4IEMgMTYuMjA0NTc4IDkuNzczMTMxIDE0Ljg2OTEyNCAxMC41NTE0NTcgMTMuNjk5NTUxIDExLjU0Mzc2NSBDIDEyLjUyOTk3OSAxMi41MzYwNzMgMTEuNTQ0NTEgMTMuNzI2OTA0IDEwLjc4ODQ5NyAxNS4wNjE0NTMgQyAxMC4wMzI0ODUgMTYuMzk2MDAxIDkuNTE3NzA3IDE3Ljg1MzQ3NiA5LjI2Nzg1NiAxOS4zNjY4IEMgOS4wMTgwMDYgMjAuODgwMTI0IDkuMDM2OTc0IDIyLjQyNTcyIDkuMzIzODg4IDIzLjkzMjQ1NyBDIDkuNjEwODAzIDI1LjQzOTE5NCAxMC4xNjExOTMgMjYuODgzNTk2IDEwLjk0OTcyOSAyOC4xOTkxOSBDIDExLjczODI2NSAyOS41MTQ3ODMgMTIuNzUyNjYyIDMwLjY4MTA3MSAxMy45NDYyMzUgMzEuNjQ0Mzc3IEMgMTUuMTM5ODA3IDMyLjYwNzY4NCAxNi40OTM5NiAzMy4zNTMwMDIgMTcuOTQ2MzcxIDMzLjg0NjAyOSBDIDE5LjM5ODc4MyAzNC4zMzkwNTYgMjAuOTI2ODI1IDM0LjU3MjExMiAyMi40NjAxNzQgMzQuNTM0NDcxIEMgMjMuOTkzNTIyIDM0LjQ5NjgyOSAyNS41MDgyODkgMzQuMTg5MDc3IDI2LjkzNDc1OSAzMy42MjUzNzcgQyAyOC4zNjEyMjkgMzMuMDYxNjc3IDI5LjY3NzE4IDMyLjI1MDgxMiAzMC44MjIwNDggMzEuMjMwMSBDIDMxLjk2NjkxNSAzMC4yMDkzODggMzIuOTIyODY0IDI4Ljk5NDczMiAzMy42NDU4OTcgMjcuNjQyMDMxIEMgMzQuMzY4OTMgMjYuMjg5MzMxIDM0Ljg0Nzc4NSAyNC44MTk2NjIgMzUuMDYwNDIyIDIzLjMwMDY2MyBDIDM1LjI3MzA1OCAyMS43ODE2NjMgMzUuMjE2MTY1IDIwLjIzNjk5NyAzNC44OTIzNiAxOC43Mzc3NTYgQyAzNC41Njg1NTUgMTcuMjM4NTE0IDMzLjk4Mjg4MyAxNS44MDgwNTQgMzMuMTYyMjk4IDE0LjUxMjIwOCBDIDMyLjM0MTcxMyAxMy4yMTYzNjMgMzEuMjk5IDEyLjA3NTMyMSAzMC4wODIxNDYgMTEuMTQxNTk2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMC4wODIxNDYgMTEuMTQxNTk2IEMgMjguOTUwNTc5IDEwLjI3MzMxNCAyNy42ODQyNDQgOS41OTY0NDQgMjYuMzMzNjI5IDkuMTM3OTcxIEMgMjQuOTgzMDE1IDguNjc5NDk5IDIzLjU2NjMxMSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMwLjA4MjE0NiAxMS4xNDE1OTYgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE1Mjk4MzRhOGQzOTQzNjhhMGQ3ZmYzMjkxMWMwNzQzLnNldEljb24oZGl2X2ljb25fOGUxNjA0OTdhZDY1NDk5ZTllYzhkNzVjYzhkNjg1OGYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzMyNDEwODIzMTUwNGQ3NWJhZmI1MTI2NDEzZDYwNjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjYxNzViMGUzM2Q5NGNhZGJmM2UzMGZhMGU0YTRiMGEgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2MTc1YjBlMzNkOTRjYWRiZjNlMzBmYTBlNGE0YjBhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+Y29uc29uYW50czogNDM8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzMyNDEwODIzMTUwNGQ3NWJhZmI1MTI2NDEzZDYwNjkuc2V0Q29udGVudChodG1sX2Y2MTc1YjBlMzNkOTRjYWRiZjNlMzBmYTBlNGE0YjBhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMTUyOTgzNGE4ZDM5NDM2OGEwZDdmZjMyOTExYzA3NDMuYmluZFBvcHVwKHBvcHVwX2MzMjQxMDgyMzE1MDRkNzViYWZiNTEyNjQxM2Q2MDY5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTkwNTdlMmNkN2QyNDNiZDhiMzdjZWFjMGE1ZmFiOGEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzI0M2FmMjUxNTExMzQyNDJiNmRlYmVkYjkwZGY0ZDI5ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjgwOTE1OCA4LjQ0NTYgMTkuNDg2MTE4IDguNjQ5MjM1IDE4LjIxNjg3MiA5LjA0OTQyNyBDIDE2Ljk0NzYyNiA5LjQ0OTYxOSAxNS43NDcwNTQgMTAuMDQxNjc1IDE0LjY1Njg5MiAxMC44MDUwMTUgQyAxMy41NjY3MzEgMTEuNTY4MzU0IDEyLjU5OTc2IDEyLjQ5NDAyNyAxMS43ODk1OTUgMTMuNTQ5ODU1IEMgMTAuOTc5NDMgMTQuNjA1NjgzIDEwLjMzNTU2OSAxNS43NzkyODcgOS44ODAzOTQgMTcuMDI5ODY5IEMgOS40MjUyMTkgMTguMjgwNDUxIDkuMTY0MDY4IDE5LjU5MzM0OSA5LjEwNjAxNyAyMC45MjI5MjQgQyA5LjA0Nzk2NyAyMi4yNTI0OTkgOS4xOTM2OTggMjMuNTgzMTYzIDkuNTM4MTQ1IDI0Ljg2ODY1NyBDIDkuODgyNTkzIDI2LjE1NDE1MSAxMC40MjE3MTcgMjcuMzc5NDA2IDExLjEzNjc3OCAyOC41MDE4MjYgQyAxMS44NTE4MzkgMjkuNjI0MjQ2IDEyLjczNDQ1MiAzMC42MzA2NzQgMTMuNzUzOTM2IDMxLjQ4NjEyMyBDIDE0Ljc3MzQyIDMyLjM0MTU3MSAxNS45MTc4MjIgMzMuMDM2MDExIDE3LjE0NzM1OSAzMy41NDUzMDIgQyAxOC4zNzY4OTcgMzQuMDU0NTkzIDE5LjY3NzE1NSAzNC4zNzI3NjQgMjEuMDAyOTMyIDM0LjQ4ODc1NSBDIDIyLjMyODcwOSAzNC42MDQ3NDUgMjMuNjY0NDYzIDM0LjUxNzE5NSAyNC45NjM3NTkgMzQuMjI5MTQ4IEMgMjYuMjYzMDU0IDMzLjk0MTEwMSAyNy41MTA2NTggMzMuNDU1OTM0IDI4LjY2MzIwMSAzMi43OTA1MTMgQyAyOS44MTU3NDMgMzIuMTI1MDkzIDMwLjg1OTcxMiAzMS4yODcyMTkgMzEuNzU4ODE2IDMwLjMwNjAxOSBDIDMyLjY1NzkxOSAyOS4zMjQ4MiAzMy40MDE2MTYgMjguMjExNzk4IDMzLjk2NDA1NCAyNy4wMDU2NDYgQyAzNC41MjY0OTIgMjUuNzk5NDk0IDM0LjkwMTA3NyAyNC41MTQzNTIgMzUuMDc0Nzg2IDIzLjE5NDg5NiBDIDM1LjI0ODQ5NiAyMS44NzU0NCAzNS4yMTkyOTQgMjAuNTM3MTM4IDM0Ljk4ODE5NiAxOS4yMjY1MTUgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM0Ljk4ODE5NiAxOS4yMjY1MTUgQyAzNC40NTU3MDEgMTYuMjA2NTg5IDMyLjg3NTE0OSAxMy40Njg5OTQgMzAuNTI2MDYzIDExLjQ5Nzg3NyBDIDI4LjE3Njk3OCA5LjUyNjc2IDI1LjIwNjUxMiA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDM0Ljk4ODE5NiAxOS4yMjY1MTUgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2E5MDU3ZTJjZDdkMjQzYmQ4YjM3Y2VhYzBhNWZhYjhhLnNldEljb24oZGl2X2ljb25fMjQzYWYyNTE1MTEzNDI0MmI2ZGViZWRiOTBkZjRkMjkpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjE2YTk3N2VhZTYxNGFjMGE4YWNlNzQ5YWY1YWVkZDkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGYxYjUyYzUxYjZhNDY3ZjgyNDQxOWJhMDU2ZjJhYmYgPSAkKGA8ZGl2IGlkPSJodG1sX2RmMWI1MmM1MWI2YTQ2N2Y4MjQ0MTliYTA1NmYyYWJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTZhOTc3ZWFlNjE0YWMwYThhY2U3NDlhZjVhZWRkOS5zZXRDb250ZW50KGh0bWxfZGYxYjUyYzUxYjZhNDY3ZjgyNDQxOWJhMDU2ZjJhYmYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hOTA1N2UyY2Q3ZDI0M2JkOGIzN2NlYWMwYTVmYWI4YS5iaW5kUG9wdXAocG9wdXBfNjE2YTk3N2VhZTYxNGFjMGE4YWNlNzQ5YWY1YWVkZDkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iMjAzNjk4ZDRiY2I0OTNhYThkZjc2YzkwOTVkMTQ1OCA9IEwubWFya2VyKAogICAgICAgICAgICBbMTguNzc1NywgLTg4Ljk1NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfNGE1OGJmNGM4OTA4NGNjOTlkNTIyYmE1MzhiZWJhNWUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzUxNjViNmZjYzI4NjRhYTFhMTgyNzUzZTNmMGEyMzE1ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5Ljg1MDA0OSA4LjQ0NTYgMTcuNTk5OTU2IDkuMDQ4NTExIDE1LjYxNjggMTAuMTkzNDg2IEMgMTMuNjMzNjQ0IDExLjMzODQ2MiAxMS45ODY0NjEgMTIuOTg1NjQ0IDEwLjg0MTQ4NiAxNC45Njg4IEMgOS42OTY1MSAxNi45NTE5NTYgOS4wOTM2IDE5LjIwMjA1IDkuMDkzNiAyMS40OTIwMDEgQyA5LjA5MzYgMjMuNzgxOTUyIDkuNjk2NTExIDI2LjAzMjA0NSAxMC44NDE0ODcgMjguMDE1MjAxIEMgMTEuOTg2NDYyIDI5Ljk5ODM1NiAxMy42MzM2NDUgMzEuNjQ1NTM5IDE1LjYxNjgwMSAzMi43OTA1MTQgQyAxNy41OTk5NTcgMzMuOTM1NDkgMTkuODUwMDUgMzQuNTM4NCAyMi4xNDAwMDEgMzQuNTM4NCBDIDI0LjQyOTk1MiAzNC41Mzg0IDI2LjY4MDA0NiAzMy45MzU0ODkgMjguNjYzMjAxIDMyLjc5MDUxMyBDIDMwLjY0NjM1NyAzMS42NDU1MzcgMzIuMjkzNTM5IDI5Ljk5ODM1NSAzMy40Mzg1MTUgMjguMDE1MTk5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy40Mzg1MTUgMjguMDE1MTk5IEMgMzQuNTgzNDkgMjYuMDMyMDQzIDM1LjE4NjQgMjMuNzgxOTQ5IDM1LjE4NjQgMjEuNDkxOTk4IEMgMzUuMTg2NCAxOS4yMDIwNDcgMzQuNTgzNDg5IDE2Ljk1MTk1NCAzMy40Mzg1MTMgMTQuOTY4Nzk4IEMgMzIuMjkzNTM3IDEyLjk4NTY0MyAzMC42NDYzNTQgMTEuMzM4NDYgMjguNjYzMTk4IDEwLjE5MzQ4NSBDIDI2LjY4MDA0MiA5LjA0ODUxIDI0LjQyOTk0OSA4LjQ0NTYgMjIuMTM5OTk4IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMzLjQzODUxNSAyOC4wMTUxOTkgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2IyMDM2OThkNGJjYjQ5M2FhOGRmNzZjOTA5NWQxNDU4LnNldEljb24oZGl2X2ljb25fNTE2NWI2ZmNjMjg2NGFhMWExODI3NTNlM2YwYTIzMTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzE3ZWNlYTc5NDY0NGQyZWJjZTI0NzNhMDcwYmJjZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZiMjg0OTNmYjEwNGQ0M2JkZjg2YjJhZDU3NTBmZjcgPSAkKGA8ZGl2IGlkPSJodG1sX2I2YjI4NDkzZmIxMDRkNDNiZGY4NmIyYWQ1NzUwZmY3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDEwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzE3ZWNlYTc5NDY0NGQyZWJjZTI0NzNhMDcwYmJjZGUuc2V0Q29udGVudChodG1sX2I2YjI4NDkzZmIxMDRkNDNiZGY4NmIyYWQ1NzUwZmY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjIwMzY5OGQ0YmNiNDkzYWE4ZGY3NmM5MDk1ZDE0NTguYmluZFBvcHVwKHBvcHVwXzMxN2VjZWE3OTQ2NDRkMmViY2UyNDczYTA3MGJiY2RlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe75111db70>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(data.language)\n",
    "m.add_minicharts(data.consonants, data.vowels)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is possible to customize them using these parameters:\n",
    "1. `colors`  \n",
    "    Colors for your features. If not given, default colors (`LingMap().colors`) will be used.  \n",
    "    \n",
    "2. `size`  \n",
    "    Size of the chart. Please, bear in mind that they should be small. Default: `0.6`.\n",
    "3. `startangle`  \n",
    "    Start angle. Default `90`. Pie-chart only.\n",
    "4. `labels`  \n",
    "    Show values inside the chart. Pie-chart only.\n",
    "5. `textprops`  \n",
    "    Set text properties (`matplotlib` format). Default: `None`. E.g.: `textprops={'color': 'red'}`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9jYzgzMjNkYzU2NGY0ZmJhYmRmMjA4NzE4Yjg4NTg3MyIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMwMDIwYzI7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2MyMjAwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj52b3dlbHM8L2xpPgoKCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMgPSBMLm1hcCgKICAgICAgICAnbWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwpMLmNvbnRyb2wuc2NhbGUoKS5hZGRUbyhtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMpOwoKICAgIAogICAgdmFyIHRpbGVfbGF5ZXJfOWYxNjg4Yzg3ZTcwNGFkZGI5M2VkYzkyMzBkMDNiZjYgPSBMLnRpbGVMYXllcigKICAgICAgICAnaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLAogICAgICAgIHsKICAgICAgICAiYXR0cmlidXRpb24iOiBudWxsLAogICAgICAgICJkZXRlY3RSZXRpbmEiOiBmYWxzZSwKICAgICAgICAibWF4TmF0aXZlWm9vbSI6IDE4LAogICAgICAgICJtYXhab29tIjogMTgsCiAgICAgICAgIm1pblpvb20iOiAwLAogICAgICAgICJub1dyYXAiOiBmYWxzZSwKICAgICAgICAib3BhY2l0eSI6IDEsCiAgICAgICAgInN1YmRvbWFpbnMiOiAiYWJjIiwKICAgICAgICAidG1zIjogZmFsc2UKfSkuYWRkVG8obWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczKTsKICAgIAogICAgICAgIHZhciBtYXJrZXJfYTI2MmM5MzhmOTc5NGRkMjkyZjM1YmI5M2Q1OGJlYmIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2I1Nzk3NjRjOTNiZDQxYjFiNTUyYjBjY2U5MTcyYzdmID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC41OTgyNDYgMTUuMTMzNzE4IDM5LjIwMDkxMyAxNC4xMDA2MDMgMzcuNjc0MzY0IDEzLjI5MDQ3NiBDIDM2LjE0NzgxNiAxMi40ODAzNDkgMzQuNTA5MDI3IDExLjkwMjIxNyAzMi44MTIwNjMgMTEuNTc1MTU0IEMgMzEuMTE1MSAxMS4yNDgwOTEgMjkuMzc4ODMxIDExLjE3NTczNCAyNy42NjA1MzggMTEuMzYwNDY5IEMgMjUuOTQyMjQ2IDExLjU0NTIwNSAyNC4yNjEwMzYgMTEuOTg0OTc5IDIyLjY3MjM3NiAxMi42NjUyODMgQyAyMS4wODM3MTUgMTMuMzQ1NTg3IDE5LjYwNTI2OSAxNC4yNTg4NTcgMTguMjg1ODEyIDE1LjM3NDk2MSBDIDE2Ljk2NjM1NSAxNi40OTEwNjYgMTUuODIwNTU5IDE3Ljc5NzU5NSAxNC44ODYyMjcgMTkuMjUxNDQ1IEMgMTMuOTUxODk0IDIwLjcwNTI5NCAxMy4yMzk0MTQgMjIuMjkwMjk4IDEyLjc3MjI5MiAyMy45NTQxNjUgQyAxMi4zMDUxNjkgMjUuNjE4MDMyIDEyLjA4ODU5OSAyNy4zNDIyNiAxMi4xMjk3MjYgMjkuMDY5OTY1IEMgMTIuMTcwODUzIDMwLjc5NzY3IDEyLjQ2OTIyIDMyLjUwOTY0MSAxMy4wMTQ5ODMgMzQuMTQ5Mzk3IEMgMTMuNTYwNzQ2IDM1Ljc4OTE1MiAxNC4zNDc4MzcgMzcuMzM4NDYgMTUuMzUwMjg4IDM4Ljc0NjIwNiBDIDE2LjM1MjczOSA0MC4xNTM5NTEgMTcuNTU5NDA0IDQxLjQwNDQ4MiAxOC45MzA0NzMgNDIuNDU2NTQgQyAyMC4zMDE1NDIgNDMuNTA4NTk4IDIxLjgyMTc2OSA0NC4zNTA0ODYgMjMuNDQxIDQ0Ljk1NDQyOCBDIDI1LjA2MDIzMSA0NS41NTgzNyAyNi43NjA0NjIgNDUuOTE3NjUxIDI4LjQ4NTU5OCA0Ni4wMjA0MTggQyAzMC4yMTA3MzQgNDYuMTIzMTg0IDMxLjk0MTU5NCA0NS45NjgyOTQgMzMuNjIxMDczIDQ1LjU2MDg1NyBDIDM1LjMwMDU1MyA0NS4xNTM0MiAzNi45MDk5NzcgNDQuNDk3OTY2IDM4LjM5NjI0OSA0My42MTYxMiBDIDM5Ljg4MjUyMSA0Mi43MzQyNzQgNDEuMjI5MTEzIDQxLjYzNTg0MiA0Mi4zOTE2MDEgNDAuMzU3MDYyIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gNDIuMzkxNjAxIDQwLjM1NzA2MiBDIDQ1LjM5NzUxIDM3LjA1MDQ1MSA0Ny4wMTY2MTggMzIuNzA5NDU2IDQ2LjkxMDI3NCAyOC4yNDIwMzUgQyA0Ni44MDM5MjkgMjMuNzc0NjEzIDQ0Ljk4MDEwMyAxOS41MTU1NzUgNDEuODIwMjY0IDE2LjM1NTczNiBMIDI5LjUyIDI4LjY1NiBMIDQyLjM5MTYwMSA0MC4zNTcwNjIgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMjUgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxOS4xODc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDAgTCA3LjMyODEyNSAwIEwgNy4zMjgxMjUgOC4yOTY4NzUgUSAxMi45Mzc1IDE0LjEwOTM3NSAyMi42MjUgMjMuODkwNjI1IFEgMzIuMzI4MTI1IDMzLjY4NzUgMzQuODEyNSAzNi41MzEyNSBRIDM5LjU0Njg3NSA0MS44NDM3NSA0MS40MjE4NzUgNDUuNTMxMjUgUSA0My4zMTI1IDQ5LjIxODc1IDQzLjMxMjUgNTIuNzgxMjUgUSA0My4zMTI1IDU4LjU5Mzc1IDM5LjIzNDM3NSA2Mi4yNSBRIDM1LjE1NjI1IDY1LjkyMTg3NSAyOC42MDkzNzUgNjUuOTIxODc1IFEgMjMuOTY4NzUgNjUuOTIxODc1IDE4LjgxMjUgNjQuMzEyNSBRIDEzLjY3MTg3NSA2Mi43MDMxMjUgNy44MTI1IDU5LjQyMTg3NSBMIDcuODEyNSA2OS4zOTA2MjUgUSAxMy43NjU2MjUgNzEuNzgxMjUgMTguOTM3NSA3MyBRIDI0LjEyNSA3NC4yMTg3NSAyOC40MjE4NzUgNzQuMjE4NzUgUSAzOS43NSA3NC4yMTg3NSA0Ni40ODQzNzUgNjguNTQ2ODc1IFEgNTMuMjE4NzUgNjIuODkwNjI1IDUzLjIxODc1IDUzLjQyMTg3NSBRIDUzLjIxODc1IDQ4LjkyMTg3NSA1MS41MzEyNSA0NC44OTA2MjUgUSA0OS44NTkzNzUgNDAuODc1IDQ1LjQwNjI1IDM1LjQwNjI1IFEgNDQuMTg3NSAzMy45ODQzNzUgMzcuNjQwNjI1IDI3LjIxODc1IFEgMzEuMTA5Mzc1IDIwLjQ1MzEyNSAxOS4xODc1IDguMjk2ODc1IHoiIGlkPSJEZWphVnVTYW5zLTUwIi8+ICAgICA8cGF0aCBkPSJNIDEwLjc5Njg3NSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA0Ni43MzQzNzUgUSAyMS45Njg3NSA0Ny40Njg3NSAyNC4xMDkzNzUgNDcuODI4MTI1IFEgMjYuMjY1NjI1IDQ4LjE4NzUgMjguNDIxODc1IDQ4LjE4NzUgUSA0MC42MjUgNDguMTg3NSA0Ny43NSA0MS41IFEgNTQuODkwNjI1IDM0LjgxMjUgNTQuODkwNjI1IDIzLjM5MDYyNSBRIDU0Ljg5MDYyNSAxMS42MjUgNDcuNTYyNSA1LjA5Mzc1IFEgNDAuMjM0Mzc1IC0xLjQyMTg3NSAyNi45MDYyNSAtMS40MjE4NzUgUSAyMi4zMTI1IC0xLjQyMTg3NSAxNy41NDY4NzUgLTAuNjQwNjI1IFEgMTIuNzk2ODc1IDAuMTQwNjI1IDcuNzE4NzUgMS43MDMxMjUgTCA3LjcxODc1IDExLjYyNSBRIDEyLjEwOTM3NSA5LjIzNDM3NSAxNi43OTY4NzUgOC4wNjI1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjcwMzEyNSA2Ljg5MDYyNSBRIDM1LjE1NjI1IDYuODkwNjI1IDQwLjA3ODEyNSAxMS4zMjgxMjUgUSA0NS4wMTU2MjUgMTUuNzY1NjI1IDQ1LjAxNTYyNSAyMy4zOTA2MjUgUSA0NS4wMTU2MjUgMzEgNDAuMDc4MTI1IDM1LjQzNzUgUSAzNS4xNTYyNSAzOS44OTA2MjUgMjYuNzAzMTI1IDM5Ljg5MDYyNSBRIDIyLjc1IDM5Ljg5MDYyNSAxOC44MTI1IDM5LjAxNTYyNSBRIDE0Ljg5MDYyNSAzOC4xNDA2MjUgMTAuNzk2ODc1IDM2LjI4MTI1IHoiIGlkPSJEZWphVnVTYW5zLTUzIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjMxNjk0NSAzMS40OTgxNjgpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MyIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDggLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAzMS43ODEyNSAzNC42MjUgUSAyNC43NSAzNC42MjUgMjAuNzE4NzUgMzAuODU5Mzc1IFEgMTYuNzAzMTI1IDI3LjA5Mzc1IDE2LjcwMzEyNSAyMC41MTU2MjUgUSAxNi43MDMxMjUgMTMuOTIxODc1IDIwLjcxODc1IDEwLjE1NjI1IFEgMjQuNzUgNi4zOTA2MjUgMzEuNzgxMjUgNi4zOTA2MjUgUSAzOC44MTI1IDYuMzkwNjI1IDQyLjg1OTM3NSAxMC4xNzE4NzUgUSA0Ni45MjE4NzUgMTMuOTY4NzUgNDYuOTIxODc1IDIwLjUxNTYyNSBRIDQ2LjkyMTg3NSAyNy4wOTM3NSA0Mi44OTA2MjUgMzAuODU5Mzc1IFEgMzguODc1IDM0LjYyNSAzMS43ODEyNSAzNC42MjUgek0gMjEuOTIxODc1IDM4LjgxMjUgUSAxNS41NzgxMjUgNDAuMzc1IDEyLjAzMTI1IDQ0LjcxODc1IFEgOC41IDQ5LjA3ODEyNSA4LjUgNTUuMzI4MTI1IFEgOC41IDY0LjA2MjUgMTQuNzE4NzUgNjkuMTQwNjI1IFEgMjAuOTUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IFEgNDIuNjcxODc1IDc0LjIxODc1IDQ4Ljg3NSA2OS4xNDA2MjUgUSA1NS4wNzgxMjUgNjQuMDYyNSA1NS4wNzgxMjUgNTUuMzI4MTI1IFEgNTUuMDc4MTI1IDQ5LjA3ODEyNSA1MS41MzEyNSA0NC43MTg3NSBRIDQ4IDQwLjM3NSA0MS43MDMxMjUgMzguODEyNSBRIDQ4LjgyODEyNSAzNy4xNTYyNSA1Mi43OTY4NzUgMzIuMzEyNSBRIDU2Ljc4MTI1IDI3LjQ4NDM3NSA1Ni43ODEyNSAyMC41MTU2MjUgUSA1Ni43ODEyNSA5LjkwNjI1IDUwLjMxMjUgNC4yMzQzNzUgUSA0My44NDM3NSAtMS40MjE4NzUgMzEuNzgxMjUgLTEuNDIxODc1IFEgMTkuNzM0Mzc1IC0xLjQyMTg3NSAxMy4yNSA0LjIzNDM3NSBRIDYuNzgxMjUgOS45MDYyNSA2Ljc4MTI1IDIwLjUxNTYyNSBRIDYuNzgxMjUgMjcuNDg0Mzc1IDEwLjc4MTI1IDMyLjMxMjUgUSAxNC43OTY4NzUgMzcuMTU2MjUgMjEuOTIxODc1IDM4LjgxMjUgek0gMTguMzEyNSA1NC4zOTA2MjUgUSAxOC4zMTI1IDQ4LjczNDM3NSAyMS44NDM3NSA0NS41NjI1IFEgMjUuMzkwNjI1IDQyLjM5MDYyNSAzMS43ODEyNSA0Mi4zOTA2MjUgUSAzOC4xNDA2MjUgNDIuMzkwNjI1IDQxLjcxODc1IDQ1LjU2MjUgUSA0NS4zMTI1IDQ4LjczNDM3NSA0NS4zMTI1IDU0LjM5MDYyNSBRIDQ1LjMxMjUgNjAuMDYyNSA0MS43MTg3NSA2My4yMzQzNzUgUSAzOC4xNDA2MjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgUSAyNS4zOTA2MjUgNjYuNDA2MjUgMjEuODQzNzUgNjMuMjM0Mzc1IFEgMTguMzEyNSA2MC4wNjI1IDE4LjMxMjUgNTQuMzkwNjI1IHoiIGlkPSJEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjk5ODA1NSAzMS4zMzI1ODIpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTYiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTI2MmM5MzhmOTc5NGRkMjkyZjM1YmI5M2Q1OGJlYmIuc2V0SWNvbihkaXZfaWNvbl9iNTc5NzY0YzkzYmQ0MWIxYjU1MmIwY2NlOTE3MmM3Zik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85NGQxZDMxYThhZWQ0MmI5OGUyNWQxOGMzYzk4YjQwNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yZTg3YjRlNGU2YWY0M2JkYjI5ODg2YWQxZDcyZTA2MiA9ICQoYDxkaXYgaWQ9Imh0bWxfMmU4N2I0ZTRlNmFmNDNiZGIyOTg4NmFkMWQ3MmUwNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj5jb25zb25hbnRzOiAyNTxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85NGQxZDMxYThhZWQ0MmI5OGUyNWQxOGMzYzk4YjQwNC5zZXRDb250ZW50KGh0bWxfMmU4N2I0ZTRlNmFmNDNiZGIyOTg4NmFkMWQ3MmUwNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hMjYyYzkzOGY5Nzk0ZGQyOTJmMzViYjkzZDU4YmViYi5iaW5kUG9wdXAocG9wdXBfOTRkMWQzMWE4YWVkNDJiOThlMjVkMThjM2M5OGI0MDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9iMTJhZjYyNjUyOTE0NGRhOTZlNDI1M2NjMGVlNTEyMyA9IEwubWFya2VyKAogICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2FhZGNhOWE2MGQ5NzRkNTI4MTYxYmQ3MzVjY2EyNzBhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyAzOS42OTUzODEgMTQuMjMwODUzIDM3LjA1NTcwNiAxMi42OTI0MDUgMzQuMTU5NTIyIDExLjg5MDkyMyBDIDMxLjI2MzMzOCAxMS4wODk0NDEgMjguMjA4MjkyIDExLjA1MTk0OCAyNS4yOTMzMTEgMTEuNzgyMTEyIEMgMjIuMzc4MzMgMTIuNTEyMjc3IDE5LjcwMTY5NCAxMy45ODU0ODIgMTcuNTI1MzA0IDE2LjA1NzU3NyBDIDE1LjM0ODkxNCAxOC4xMjk2NzMgMTMuNzQ2MTQ4IDIwLjczMDc5OCAxMi44NzM4MzEgMjMuNjA2NDQgQyAxMi4wMDE1MTUgMjYuNDgyMDgyIDExLjg4OTA1OSAyOS41MzUyODggMTIuNTQ3NDY2IDMyLjQ2NzMxIEMgMTMuMjA1ODc0IDM1LjM5OTMzMiAxNC42MTI5NDcgMzguMTExMzE2IDE2LjYzMTAwNyA0MC4zMzc5MDIgQyAxOC42NDkwNjcgNDIuNTY0NDg5IDIxLjIxMDA3NSA0NC4yMzA2MDcgMjQuMDYzNDQzIDQ1LjE3MzIzMyBDIDI2LjkxNjgxMiA0Ni4xMTU4NTggMjkuOTY2MzM4IDQ2LjMwMzIxIDMyLjkxMzYzNSA0NS43MTY5NTYgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi45MTM2MzUgNDUuNzE2OTU2IEMgMzYuMDAyOTE2IDQ1LjEwMjQ2IDM4Ljg2ODA1MiA0My42NjAyNzEgNDEuMjAxOTAyIDQxLjU0NDk5MyBDIDQzLjUzNTc1MiAzOS40Mjk3MTUgNDUuMjUxODI5IDM2LjcxOTczNCA0Ni4xNjYxNjkgMzMuNzA1NTYgQyA0Ny4wODA1MDggMzAuNjkxMzg3IDQ3LjE1OTIyNyAyNy40ODQ3MTggNDYuMzkzODg4IDI0LjQyOTMxMSBDIDQ1LjYyODU0OCAyMS4zNzM5MDQgNDQuMDQ3NTExIDE4LjU4Mjk4MyA0MS44MjAyNjQgMTYuMzU1NzM2IEwgMjkuNTIgMjguNjU2IEwgMzIuOTEzNjM1IDQ1LjcxNjk1NiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMSAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMTIuNDA2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgNjMuOTIxODc1IEwgMTAuOTg0Mzc1IDYwLjQwNjI1IEwgMTAuOTg0Mzc1IDY5LjM5MDYyNSBMIDI4LjQyMTg3NSA3Mi45MDYyNSBMIDM4LjI4MTI1IDcyLjkwNjI1IEwgMzguMjgxMjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgMCBMIDEyLjQwNjI1IDAgeiIgaWQ9IkRlamFWdVNhbnMtNDkiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDY1NzY2IDMwLjQwNTQ2MylzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTEgLS0+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44NDkyMzQgMzIuNDI1Mjg3KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYjEyYWY2MjY1MjkxNDRkYTk2ZTQyNTNjYzBlZTUxMjMuc2V0SWNvbihkaXZfaWNvbl9hYWRjYTlhNjBkOTc0ZDUyODE2MWJkNzM1Y2NhMjcwYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yODMxM2VhZjE5MmI0ZTliYTE2NzQ5MDI2ZDliZGY5NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMWY5NDRiNmM3OTc0M2E4ODkzZWMzZjRiYmZkNjE0YyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzFmOTQ0YjZjNzk3NDNhODg5M2VjM2Y0YmJmZDYxNGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rb3JlMTI4MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Lb3JlYW48L2E+PGJyPmNvbnNvbmFudHM6IDIxPGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yODMxM2VhZjE5MmI0ZTliYTE2NzQ5MDI2ZDliZGY5Ni5zZXRDb250ZW50KGh0bWxfMzFmOTQ0YjZjNzk3NDNhODg5M2VjM2Y0YmJmZDYxNGMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9iMTJhZjYyNjUyOTE0NGRhOTZlNDI1M2NjMGVlNTEyMy5iaW5kUG9wdXAocG9wdXBfMjgzMTNlYWYxOTJiNGU5YmExNjc0OTAyNmQ5YmRmOTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mZmM2MDA5NmNjMzU0YmYwYjdjYTU4ODFhZDI2NTE0MiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTExLjYzMDgsIDEzMC45NDg5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYzgzMjNkYzU2NGY0ZmJhYmRmMjA4NzE4Yjg4NTg3Myk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMzIzMjBmY2JhNWJkNDkzYWI0YTViMDNmNTI3MmJlNzIgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjQ1NDc0NSAxNC45OTAyMTcgMzguODcxMzE4IDEzLjg2MTU3MSAzNy4xMzUwNTcgMTMuMDE2MTgyIEMgMzUuMzk4Nzk2IDEyLjE3MDc5NCAzMy41MzM4MTUgMTEuNjIwNDAzIDMxLjYxNjc2IDExLjM4NzYzMSBDIDI5LjY5OTcwNCAxMS4xNTQ4NTggMjcuNzU3MTk5IDExLjI0MjkzNiAyNS44NjkwNzYgMTEuNjQ4MjQ1IEMgMjMuOTgwOTUzIDEyLjA1MzU1NCAyMi4xNzM0MzUgMTIuNzcwNDY0IDIwLjUyMDgwNSAxMy43Njk1MTQgQyAxOC44NjgxNzUgMTQuNzY4NTYzIDE3LjM5MzM4NyAxNi4wMzU4NzYgMTYuMTU3MDQ5IDE3LjUxOTM3IEMgMTQuOTIwNzExIDE5LjAwMjg2NCAxMy45Mzk5OTUgMjAuNjgxOTM0IDEzLjI1NTIwNSAyMi40ODc1NzcgQyAxMi41NzA0MTUgMjQuMjkzMjIxIDEyLjE5MTA2MiAyNi4yMDAzNTggMTIuMTMyNzM2IDI4LjEzMDYxMyBDIDEyLjA3NDQxIDMwLjA2MDg2NyAxMi4zMzc5MjEgMzEuOTg3NDMgMTIuOTEyNDQgMzMuODMxMTI2IEMgMTMuNDg2OTU5IDM1LjY3NDgyMSAxNC4zNjQ1MDYgMzcuNDEwMDQyIDE1LjUwOTAxNyAzOC45NjU0NzggQyAxNi42NTM1MjggNDAuNTIwOTEzIDE4LjA0OTEwNyA0MS44NzQ5NTkgMTkuNjM4NDAxIDQyLjk3MTk2OSBDIDIxLjIyNzY5NCA0NC4wNjg5NzkgMjIuOTg4NjI4IDQ0Ljg5MzcxNyAyNC44NDg4MzUgNDUuNDEyMjg4IEMgMjYuNzA5MDQyIDQ1LjkzMDg2IDI4LjY0MjY4NCA0Ni4xMzYwNjMgMzAuNTcwMjk3IDQ2LjAxOTQ2MyBDIDMyLjQ5NzkwOSA0NS45MDI4NjQgMzQuMzkyNzE5IDQ1LjQ2NjA4MyAzNi4xNzY4NTYgNDQuNzI3MDY5IEMgMzcuOTYwOTkyIDQzLjk4ODA1NSAzOS42MDk2NzYgNDIuOTU3MDc0IDQxLjA1NTE1MiA0MS42NzY0OTQgQyA0Mi41MDA2MjggNDAuMzk1OTE0IDQzLjcyMjgxOSAzOC44ODM1MjIgNDQuNjcxNDk4IDM3LjIwMTQ3MSBDIDQ1LjYyMDE3OCAzNS41MTk0MjEgNDYuMjgyMTY4IDMzLjY5MTA3NSA0Ni42MzAyNjUgMzEuNzkxNTcxIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gNDYuNjMwMjY1IDMxLjc5MTU3MSBDIDQ3LjEzNzg3NCAyOS4wMjE2MzggNDYuOTY1MzQ3IDI2LjE2OTQyNiA0Ni4xMjc1NiAyMy40ODA4NzQgQyA0NS4yODk3NzMgMjAuNzkyMzIxIDQzLjgxMTUxOSAxOC4zNDY5OTEgNDEuODIwMjYzIDE2LjM1NTczNSBMIDI5LjUyIDI4LjY1NiBMIDQ2LjYzMDI2NSAzMS43OTE1NzEgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMjIgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxOS4xODc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDAgTCA3LjMyODEyNSAwIEwgNy4zMjgxMjUgOC4yOTY4NzUgUSAxMi45Mzc1IDE0LjEwOTM3NSAyMi42MjUgMjMuODkwNjI1IFEgMzIuMzI4MTI1IDMzLjY4NzUgMzQuODEyNSAzNi41MzEyNSBRIDM5LjU0Njg3NSA0MS44NDM3NSA0MS40MjE4NzUgNDUuNTMxMjUgUSA0My4zMTI1IDQ5LjIxODc1IDQzLjMxMjUgNTIuNzgxMjUgUSA0My4zMTI1IDU4LjU5Mzc1IDM5LjIzNDM3NSA2Mi4yNSBRIDM1LjE1NjI1IDY1LjkyMTg3NSAyOC42MDkzNzUgNjUuOTIxODc1IFEgMjMuOTY4NzUgNjUuOTIxODc1IDE4LjgxMjUgNjQuMzEyNSBRIDEzLjY3MTg3NSA2Mi43MDMxMjUgNy44MTI1IDU5LjQyMTg3NSBMIDcuODEyNSA2OS4zOTA2MjUgUSAxMy43NjU2MjUgNzEuNzgxMjUgMTguOTM3NSA3MyBRIDI0LjEyNSA3NC4yMTg3NSAyOC40MjE4NzUgNzQuMjE4NzUgUSAzOS43NSA3NC4yMTg3NSA0Ni40ODQzNzUgNjguNTQ2ODc1IFEgNTMuMjE4NzUgNjIuODkwNjI1IDUzLjIxODc1IDUzLjQyMTg3NSBRIDUzLjIxODc1IDQ4LjkyMTg3NSA1MS41MzEyNSA0NC44OTA2MjUgUSA0OS44NTkzNzUgNDAuODc1IDQ1LjQwNjI1IDM1LjQwNjI1IFEgNDQuMTg3NSAzMy45ODQzNzUgMzcuNjQwNjI1IDI3LjIxODc1IFEgMzEuMTA5Mzc1IDIwLjQ1MzEyNSAxOS4xODc1IDguMjk2ODc1IHoiIGlkPSJEZWphVnVTYW5zLTUwIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjQ3MzQ4OCAzMi40NTA0KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSA0IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMzcuNzk2ODc1IDY0LjMxMjUgTCAxMi44OTA2MjUgMjUuMzkwNjI1IEwgMzcuNzk2ODc1IDI1LjM5MDYyNSB6TSAzNS4yMDMxMjUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDI1LjM5MDYyNSBMIDU4LjAxNTYyNSAxNy4xODc1IEwgNDcuNjA5Mzc1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMCBMIDM3Ljc5Njg3NSAwIEwgMzcuNzk2ODc1IDE3LjE4NzUgTCA0Ljg5MDYyNSAxNy4xODc1IEwgNC44OTA2MjUgMjYuNzAzMTI1IHoiIGlkPSJEZWphVnVTYW5zLTUyIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjg0MTUxMiAzMC4zODAzNSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MiIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mZmM2MDA5NmNjMzU0YmYwYjdjYTU4ODFhZDI2NTE0Mi5zZXRJY29uKGRpdl9pY29uXzMyMzIwZmNiYTViZDQ5M2FiNGE1YjAzZjUyNzJiZTcyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JhNGEzNmNmMWI5ZTQ1MjY4YjRkNzQ1YTE5YTc4MThkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdhZTVlZGM0NTRmOTRjYzZhNGY5MzUzMWUxYWZkYjM5ID0gJChgPGRpdiBpZD0iaHRtbF83YWU1ZWRjNDU0Zjk0Y2M2YTRmOTM1MzFlMWFmZGIzOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JhNGEzNmNmMWI5ZTQ1MjY4YjRkNzQ1YTE5YTc4MThkLnNldENvbnRlbnQoaHRtbF83YWU1ZWRjNDU0Zjk0Y2M2YTRmOTM1MzFlMWFmZGIzOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZmYzYwMDk2Y2MzNTRiZjBiN2NhNTg4MWFkMjY1MTQyLmJpbmRQb3B1cChwb3B1cF9iYTRhMzZjZjFiOWU0NTI2OGI0ZDc0NWExOWE3ODE4ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2FlNGIwZmM4NjA5YjQ0NjNiMTNhMjFlZTE0YjdkNWFhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2LjkyMDQ4LCAtOS45NjEyOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYzgzMjNkYzU2NGY0ZmJhYmRmMjA4NzE4Yjg4NTg3Myk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYmQ2MTQ5MmQwM2FlNDcxNDhmNmU1YzNiZmE1NWFiZDUgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDM5LjcyNTQ1OCAxNC4yNjA5MyAzNy4xMjk4MzMgMTIuNzM1NTc4IDM0LjI4MDQyMiAxMS45MjQ4NSBDIDMxLjQzMTAxMSAxMS4xMTQxMjMgMjguNDIxMTcyIDExLjA0NDU4NCAyNS41MzczNTkgMTEuNzIyODUgQyAyMi42NTM1NDYgMTIuNDAxMTE3IDE5Ljk5MDI0NSAxMy44MDQ5NjcgMTcuODAwOTI5IDE1LjgwMDc5MyBDIDE1LjYxMTYxMyAxNy43OTY2MTggMTMuOTY4MDEzIDIwLjMxOTAyNyAxMy4wMjY1NTYgMjMuMTI3OTU2IEMgMTIuMDg1MDk4IDI1LjkzNjg4NCAxMS44NzY2MjggMjguOTQwMzAxIDEyLjQyMDk4NyAzMS44NTIzNjEgQyAxMi45NjUzNDUgMzQuNzY0NDIxIDE0LjI0NDY5NyAzNy40ODk3MTYgMTYuMTM3MjgzIDM5Ljc2ODg2OSBDIDE4LjAyOTg2OCA0Mi4wNDgwMjMgMjAuNDczNjc5IDQzLjgwNjM2MyAyMy4yMzYxMzEgNDQuODc2NTQyIEMgMjUuOTk4NTgyIDQ1Ljk0NjcyMSAyOC45ODkxNjYgNDYuMjkzNjc2IDMxLjkyMzI2IDQ1Ljg4NDM4NyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjkyMzI2IDQ1Ljg4NDM4NyBDIDM1LjEyNzMwMyA0NS40Mzc0NDIgMzguMTQ0MDI0IDQ0LjEwNTQyOSA0MC42MzI4NyA0Mi4wMzg3MTcgQyA0My4xMjE3MTYgMzkuOTcyMDA1IDQ0Ljk4NTM2OSAzNy4yNTE0MDUgNDYuMDEzNDQ1IDM0LjE4NDA0MyBDIDQ3LjA0MTUyMSAzMS4xMTY2OCA0Ny4xOTM4MiAyNy44MjI0OTMgNDYuNDUzMTQ5IDI0LjY3MzM1NiBDIDQ1LjcxMjQ3OCAyMS41MjQyMiA0NC4xMDc3OTkgMTguNjQzMjcgNDEuODIwMjYyIDE2LjM1NTczNCBMIDI5LjUyIDI4LjY1NiBMIDMxLjkyMzI2IDQ1Ljg4NDM4NyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMiAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDk2MzExIDMwLjMwOTc2NilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTIgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44MTg2ODkgMzIuNTIwOTg0KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYWU0YjBmYzg2MDliNDQ2M2IxM2EyMWVlMTRiN2Q1YWEuc2V0SWNvbihkaXZfaWNvbl9iZDYxNDkyZDAzYWU0NzE0OGY2ZTVjM2JmYTU1YWJkNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGM5NzExZGRmMGE0MjJlOGM0MDg0MDlmNTA3ZjVmOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MTc1ODM1NDBjOGE0NDFjYjBhZTU3MmUxNjNiNGU4MiA9ICQoYDxkaXYgaWQ9Imh0bWxfNTE3NTgzNTQwYzhhNDQxY2IwYWU1NzJlMTYzYjRlODIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9saWJlMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MaWJlcmlhIEtwZWxsZTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAxMjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2YwYzk3MTFkZGYwYTQyMmU4YzQwODQwOWY1MDdmNWY4LnNldENvbnRlbnQoaHRtbF81MTc1ODM1NDBjOGE0NDFjYjBhZTU3MmUxNjNiNGU4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FlNGIwZmM4NjA5YjQ0NjNiMTNhMjFlZTE0YjdkNWFhLmJpbmRQb3B1cChwb3B1cF9mMGM5NzExZGRmMGE0MjJlOGM0MDg0MDlmNTA3ZjVmOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzU5ZGZiYjgyYzg4ZTQyODBhZjAwZGMzZjdlYzk4OWJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMi44MTE0LCA3NS4yNjUxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9iMjJlMGY4ZDIzZDQ0OTMwYjdiNTNhMjQyNjUwMjQxMiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuNzIwMjU3IDE0LjI1NTcyOSAzNy4xMTcwMjcgMTIuNzI4MDkzIDM0LjI1OTUyOCAxMS45MTg5MiBDIDMxLjQwMjAyOSAxMS4xMDk3NDcgMjguMzg0MzUyIDExLjA0NTY4MSAyNS40OTUwODYgMTEuNzMyODQ5IEMgMjIuNjA1ODE5IDEyLjQyMDAxNyAxOS45NDAxIDEzLjgzNTc5MiAxNy43NTI4NTggMTUuODQ0NzggQyAxNS41NjU2MTYgMTcuODUzNzY4IDEzLjkyODg3MiAyMC4zODk4MTggMTIuOTk5MTUyIDIzLjIxMDQgQyAxMi4wNjk0MzIgMjYuMDMwOTgxIDExLjg3NzM1IDI5LjA0MzIyIDEyLjQ0MTI3NSAzMS45NTkwNDggQyAxMy4wMDUxOTkgMzQuODc0ODc1IDE0LjMwNjU2MyAzNy41OTgyOCAxNi4yMjA5MTEgMzkuODY4ODE1IEMgMTguMTM1MjYgNDIuMTM5MzUgMjAuNTk5NTU5IDQzLjg4MjI1MyAyMy4zNzgxNDEgNDQuOTMwODQ0IEMgMjYuMTU2NzIyIDQ1Ljk3OTQzNSAyOS4xNTgwOTUgNDYuMjk5MTg4IDMyLjA5NTIyOSA0NS44NTk1MjIgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi4wOTUyMjkgNDUuODU5NTIyIEMgMzUuMjgwMDU2IDQ1LjM4Mjc3OSAzOC4yNzA4MDEgNDQuMDMwODc4IDQwLjczMjgxNCA0MS45NTUwODkgQyA0My4xOTQ4MjggMzkuODc5MzAxIDQ1LjAzMjcyMyAzNy4xNjAwNDggNDYuMDQwODQ4IDM0LjEwMTYwMiBDIDQ3LjA0ODk3MyAzMS4wNDMxNTYgNDcuMTg4MjcgMjcuNzY0MDExIDQ2LjQ0MzE1MiAyNC42MzEwODggQyA0NS42OTgwMzQgMjEuNDk4MTY1IDQ0LjA5NzM3IDE4LjYzMjg0MyA0MS44MjAyNjYgMTYuMzU1NzM4IEwgMjkuNTIgMjguNjU2IEwgMzIuMDk1MjI5IDQ1Ljg1OTUyMiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyNCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzcuNzk2ODc1IDY0LjMxMjUgTCAxMi44OTA2MjUgMjUuMzkwNjI1IEwgMzcuNzk2ODc1IDI1LjM5MDYyNSB6TSAzNS4yMDMxMjUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgNzIuOTA2MjUgTCA0Ny42MDkzNzUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDI1LjM5MDYyNSBMIDU4LjAxNTYyNSAxNy4xODc1IEwgNDcuNjA5Mzc1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMCBMIDM3Ljc5Njg3NSAwIEwgMzcuNzk2ODc1IDE3LjE4NzUgTCA0Ljg5MDYyNSAxNy4xODc1IEwgNC44OTA2MjUgMjYuNzAzMTI1IHoiIGlkPSJEZWphVnVTYW5zLTUyIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjQ5MDgzIDMwLjMyNjI1NSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUyIi8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTMgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSA0MC41NzgxMjUgMzkuMzEyNSBRIDQ3LjY1NjI1IDM3Ljc5Njg3NSA1MS42MjUgMzMgUSA1NS42MDkzNzUgMjguMjE4NzUgNTUuNjA5Mzc1IDIxLjE4NzUgUSA1NS42MDkzNzUgMTAuNDA2MjUgNDguMTg3NSA0LjQ4NDM3NSBRIDQwLjc2NTYyNSAtMS40MjE4NzUgMjcuMDkzNzUgLTEuNDIxODc1IFEgMjIuNTE1NjI1IC0xLjQyMTg3NSAxNy42NTYyNSAtMC41MTU2MjUgUSAxMi43OTY4NzUgMC4zOTA2MjUgNy42MjUgMi4yMDMxMjUgTCA3LjYyNSAxMS43MTg3NSBRIDExLjcxODc1IDkuMzI4MTI1IDE2LjU5Mzc1IDguMTA5Mzc1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjgxMjUgNi44OTA2MjUgUSAzNi4wNzgxMjUgNi44OTA2MjUgNDAuOTM3NSAxMC41NDY4NzUgUSA0NS43OTY4NzUgMTQuMjAzMTI1IDQ1Ljc5Njg3NSAyMS4xODc1IFEgNDUuNzk2ODc1IDI3LjY0MDYyNSA0MS4yODEyNSAzMS4yNjU2MjUgUSAzNi43NjU2MjUgMzQuOTA2MjUgMjguNzE4NzUgMzQuOTA2MjUgTCAyMC4yMTg3NSAzNC45MDYyNSBMIDIwLjIxODc1IDQzLjAxNTYyNSBMIDI5LjEwOTM3NSA0My4wMTU2MjUgUSAzNi4zNzUgNDMuMDE1NjI1IDQwLjIzNDM3NSA0NS45MjE4NzUgUSA0NC4wOTM3NSA0OC44MjgxMjUgNDQuMDkzNzUgNTQuMjk2ODc1IFEgNDQuMDkzNzUgNTkuOTA2MjUgNDAuMTA5Mzc1IDYyLjkwNjI1IFEgMzYuMTQwNjI1IDY1LjkyMTg3NSAyOC43MTg3NSA2NS45MjE4NzUgUSAyNC42NTYyNSA2NS45MjE4NzUgMjAuMDE1NjI1IDY1LjAzMTI1IFEgMTUuMzc1IDY0LjE1NjI1IDkuODEyNSA2Mi4zMTI1IEwgOS44MTI1IDcxLjA5Mzc1IFEgMTUuNDM3NSA3Mi42NTYyNSAyMC4zNDM3NSA3My40Mzc1IFEgMjUuMjUgNzQuMjE4NzUgMjkuNTkzNzUgNzQuMjE4NzUgUSA0MC44MjgxMjUgNzQuMjE4NzUgNDcuMzU5Mzc1IDY5LjEwOTM3NSBRIDUzLjkwNjI1IDY0LjAxNTYyNSA1My45MDYyNSA1NS4zMjgxMjUgUSA1My45MDYyNSA0OS4yNjU2MjUgNTAuNDM3NSA0NS4wOTM3NSBRIDQ2Ljk2ODc1IDQwLjkyMTg3NSA0MC41NzgxMjUgMzkuMzEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44MjQxNyAzMi41MDQ0OTUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MSIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81OWRmYmI4MmM4OGU0MjgwYWYwMGRjM2Y3ZWM5ODliZi5zZXRJY29uKGRpdl9pY29uX2IyMmUwZjhkMjNkNDQ5MzBiN2I1M2EyNDI2NTAyNDEyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3N2U0NzIxNzMwMzRlMWI4MjU4ZDAwNTY3NzkzNTg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZhNDMyZmY2MTE5YjRjZjU5Mzc3Y2M4Yjc1ZjMyY2Y1ID0gJChgPGRpdiBpZD0iaHRtbF82YTQzMmZmNjExOWI0Y2Y1OTM3N2NjOGI3NWYzMmNmNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R1bHUxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bHU8L2E+PGJyPmNvbnNvbmFudHM6IDI0PGJyPnZvd2VsczogMTM8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80NzdlNDcyMTczMDM0ZTFiODI1OGQwMDU2Nzc5MzU4OS5zZXRDb250ZW50KGh0bWxfNmE0MzJmZjYxMTliNGNmNTkzNzdjYzhiNzVmMzJjZjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl81OWRmYmI4MmM4OGU0MjgwYWYwMGRjM2Y3ZWM5ODliZi5iaW5kUG9wdXAocG9wdXBfNDc3ZTQ3MjE3MzAzNGUxYjgyNThkMDA1Njc3OTM1ODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82MmE2MWJkNGUzNTQ0Y2RmYjg3ZDg3ODI3OWY4YzA2ZiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTM4LjczOTIsIC03MS4yNzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2E3NzBmODFmNDQ2MjRkNjE4ZGM3NTczODg2ZDhhYTY2ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC41NzkzNzUgMTUuMTE0ODQ3IDM5LjE1NzgyMyAxNC4wNjg4NSAzNy42MDM5NTIgMTMuMjUzMzE1IEMgMzYuMDUwMDgyIDEyLjQzNzc4MSAzNC4zODE3MDkgMTEuODYyMDYxIDMyLjY1NTU3MiAxMS41NDU3MzUgQyAzMC45Mjk0MzYgMTEuMjI5NDA5IDI5LjE2NTMyNyAxMS4xNzYxMDMgMjcuNDIzMjQgMTEuMzg3NjMxIEMgMjUuNjgxMTUzIDExLjU5OTE1OCAyMy45ODEwNjMgMTIuMDczMDk0IDIyLjM4MDc4NyAxMi43OTMzMiBDIDIwLjc4MDUxIDEzLjUxMzU0NiAxOS4yOTgzOTYgMTQuNDcxODA0IDE3Ljk4NDg0OCAxNS42MzU1MDYgQyAxNi42NzEzMDEgMTYuNzk5MjA4IDE1LjU0MTM4IDE4LjE1NTAxMSAxNC42MzM1MTMgMTkuNjU2ODA2IEMgMTMuNzI1NjQ3IDIxLjE1ODYwMSAxMy4wNTAyNDMgMjIuNzg5MTY5IDEyLjYzMDI3MyAyNC40OTMwNTcgQyAxMi4yMTAzMDIgMjYuMTk2OTQ1IDEyLjA1MDU3OSAyNy45NTQ2MTcgMTIuMTU2NTM3IDI5LjcwNjI5NyBDIDEyLjI2MjQ5NCAzMS40NTc5NzcgMTIuNjMyOTE2IDMzLjE4MzU4MSAxMy4yNTUyMDYgMzQuODI0NDI0IEMgMTMuODc3NDk2IDM2LjQ2NTI2NyAxNC43NDQ1MTggMzguMDAyNTM1IDE1LjgyNjc4NiAzOS4zODM5NDkgQyAxNi45MDkwNTUgNDAuNzY1MzYzIDE4LjE5NDE2MSA0MS45NzUwODMgMTkuNjM4NDAxIDQyLjk3MTk3IEMgMjEuMDgyNjQgNDMuOTY4ODU2IDIyLjY2OTQ1NCA0NC43NDE0NzggMjQuMzQ0ODc2IDQ1LjI2MzU2MSBDIDI2LjAyMDI5OCA0NS43ODU2NDMgMjcuNzY1MTE5IDQ2LjA1MTIgMjkuNTIwMDAxIDQ2LjA1MTIgQyAzMS4yNzQ4ODMgNDYuMDUxMiAzMy4wMTk3MDQgNDUuNzg1NjQzIDM0LjY5NTEyNiA0NS4yNjM1NiBDIDM2LjM3MDU0OSA0NC43NDE0NzcgMzcuOTU3MzYyIDQzLjk2ODg1NSAzOS40MDE2MDEgNDIuOTcxOTY4IEMgNDAuODQ1ODQgNDEuOTc1MDgyIDQyLjEzMDk0NiA0MC43NjUzNjEgNDMuMjEzMjE1IDM5LjM4Mzk0NyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQzLjIxMzIxNSAzOS4zODM5NDcgQyA0NS44MzM3ODEgMzYuMDM5MDQxIDQ3LjE0MDAyNCAzMS44NDcxNTcgNDYuODgzNDYzIDI3LjYwNTcwMiBDIDQ2LjYyNjkwMiAyMy4zNjQyNDggNDQuODI0OTA2IDE5LjM2MDM3OCA0MS44MjAyNjMgMTYuMzU1NzM1IEwgMjkuNTIgMjguNjU2IEwgNDMuMjEzMjE1IDM5LjM4Mzk0NyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgNjYuNDA2MjUgUSAyNC4xNzE4NzUgNjYuNDA2MjUgMjAuMzI4MTI1IDU4LjkwNjI1IFEgMTYuNSA1MS40MjE4NzUgMTYuNSAzNi4zNzUgUSAxNi41IDIxLjM5MDYyNSAyMC4zMjgxMjUgMTMuODkwNjI1IFEgMjQuMTcxODc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzkuNDUzMTI1IDYuMzkwNjI1IDQzLjI4MTI1IDEzLjg5MDYyNSBRIDQ3LjEyNSAyMS4zOTA2MjUgNDcuMTI1IDM2LjM3NSBRIDQ3LjEyNSA1MS40MjE4NzUgNDMuMjgxMjUgNTguOTA2MjUgUSAzOS40NTMxMjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgek0gMzEuNzgxMjUgNzQuMjE4NzUgUSA0NC4wNDY4NzUgNzQuMjE4NzUgNTAuNTE1NjI1IDY0LjUxNTYyNSBRIDU2Ljk4NDM3NSA1NC44MjgxMjUgNTYuOTg0Mzc1IDM2LjM3NSBRIDU2Ljk4NDM3NSAxNy45Njg3NSA1MC41MTU2MjUgOC4yNjU2MjUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjUzMTI1IC0xLjQyMTg3NSAxMy4wNjI1IDguMjY1NjI1IFEgNi41OTM3NSAxNy45Njg3NSA2LjU5Mzc1IDM2LjM3NSBRIDYuNTkzNzUgNTQuODI4MTI1IDEzLjA2MjUgNjQuNTE1NjI1IFEgMTkuNTMxMjUgNzQuMjE4NzUgMzEuNzgxMjUgNzQuMjE4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNDgiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuMzIyMzA3IDMxLjYyNTQzNClzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gNiAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMzLjAxNTYyNSA0MC4zNzUgUSAyNi4zNzUgNDAuMzc1IDIyLjQ4NDM3NSAzNS44MjgxMjUgUSAxOC42MDkzNzUgMzEuMjk2ODc1IDE4LjYwOTM3NSAyMy4zOTA2MjUgUSAxOC42MDkzNzUgMTUuNTMxMjUgMjIuNDg0Mzc1IDEwLjk1MzEyNSBRIDI2LjM3NSA2LjM5MDYyNSAzMy4wMTU2MjUgNi4zOTA2MjUgUSAzOS42NTYyNSA2LjM5MDYyNSA0My41MzEyNSAxMC45NTMxMjUgUSA0Ny40MDYyNSAxNS41MzEyNSA0Ny40MDYyNSAyMy4zOTA2MjUgUSA0Ny40MDYyNSAzMS4yOTY4NzUgNDMuNTMxMjUgMzUuODI4MTI1IFEgMzkuNjU2MjUgNDAuMzc1IDMzLjAxNTYyNSA0MC4zNzUgek0gNTIuNTkzNzUgNzEuMjk2ODc1IEwgNTIuNTkzNzUgNjIuMzEyNSBRIDQ4Ljg3NSA2NC4wNjI1IDQ1LjA5Mzc1IDY0Ljk4NDM3NSBRIDQxLjMxMjUgNjUuOTIxODc1IDM3LjU5Mzc1IDY1LjkyMTg3NSBRIDI3LjgyODEyNSA2NS45MjE4NzUgMjIuNjcxODc1IDU5LjMyODEyNSBRIDE3LjUzMTI1IDUyLjczNDM3NSAxNi43OTY4NzUgMzkuNDA2MjUgUSAxOS42NzE4NzUgNDMuNjU2MjUgMjQuMDE1NjI1IDQ1LjkyMTg3NSBRIDI4LjM3NSA0OC4xODc1IDMzLjU5Mzc1IDQ4LjE4NzUgUSA0NC41NzgxMjUgNDguMTg3NSA1MC45NTMxMjUgNDEuNTE1NjI1IFEgNTcuMzI4MTI1IDM0Ljg1OTM3NSA1Ny4zMjgxMjUgMjMuMzkwNjI1IFEgNTcuMzI4MTI1IDEyLjE1NjI1IDUwLjY4NzUgNS4zNTkzNzUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMzLjAxNTYyNSAtMS40MjE4NzUgUSAyMC4zNTkzNzUgLTEuNDIxODc1IDEzLjY3MTg3NSA4LjI2NTYyNSBRIDYuOTg0Mzc1IDE3Ljk2ODc1IDYuOTg0Mzc1IDM2LjM3NSBRIDYuOTg0Mzc1IDUzLjY1NjI1IDE1LjE4NzUgNjMuOTM3NSBRIDIzLjM5MDYyNSA3NC4yMTg3NSAzNy4yMDMxMjUgNzQuMjE4NzUgUSA0MC45MjE4NzUgNzQuMjE4NzUgNDQuNzAzMTI1IDczLjQ4NDM3NSBRIDQ4LjQ4NDM3NSA3Mi43NSA1Mi41OTM3NSA3MS4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTQiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTkyNjkzIDMxLjIwNTMxNSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NCIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82MmE2MWJkNGUzNTQ0Y2RmYjg3ZDg3ODI3OWY4YzA2Zi5zZXRJY29uKGRpdl9pY29uX2E3NzBmODFmNDQ2MjRkNjE4ZGM3NTczODg2ZDhhYTY2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y1MTk3NjE5YjI3YjQ5YjJiNDcxODQyYzkwMjgyMWYwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5MWNjZThkZWI0NjQ0OWM5YTJkZjNkOGI1NjIwYjllID0gJChgPGRpdiBpZD0iaHRtbF9kOTFjY2U4ZGViNDY0NDljOWEyZGYzZDhiNTYyMGI5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPmNvbnNvbmFudHM6IDIwPGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Y1MTk3NjE5YjI3YjQ5YjJiNDcxODQyYzkwMjgyMWYwLnNldENvbnRlbnQoaHRtbF9kOTFjY2U4ZGViNDY0NDljOWEyZGYzZDhiNTYyMGI5ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYyYTYxYmQ0ZTM1NDRjZGZiODdkODc4Mjc5ZjhjMDZmLmJpbmRQb3B1cChwb3B1cF9mNTE5NzYxOWIyN2I0OWIyYjQ3MTg0MmM5MDI4MjFmMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzBmNzgxYzdkZDRjMjRlN2U5NzRlN2Y3MjM0ZTQ0MDQyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNC45NDAzLCAtOTguOTA0Ml0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYzgzMjNkYzU2NGY0ZmJhYmRmMjA4NzE4Yjg4NTg3Myk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fOTNlN2UxZDNlZjM1NGQ2Mjk3MDVmOWI2ODQzZTQyYzEgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjEyNzU2NiAxNC42NjMwMzkgMzguMTAzNTM5IDEzLjMzNzgzMSAzNS44NzUxOCAxMi40NjMyNjUgQyAzMy42NDY4MjEgMTEuNTg4Njk4IDMxLjI2MTczNCAxMS4xODM0NTYgMjguODY5NTcyIDExLjI3Mjk2NCBDIDI2LjQ3NzQxIDExLjM2MjQ3MyAyNC4xMjkyNzYgMTEuOTQ0ODIgMjEuOTcyNTA1IDEyLjk4MzQ2NyBDIDE5LjgxNTczMyAxNC4wMjIxMTMgMTcuODk2Mzk4IDE1LjQ5NDg3MSAxNi4zMzQ5MjkgMTcuMzA5MzMxIEMgMTQuNzczNDYxIDE5LjEyMzc5MSAxMy42MDMyMTUgMjEuMjQxMTkyIDEyLjg5NzYxOSAyMy41Mjg2NzcgQyAxMi4xOTIwMjQgMjUuODE2MTYxIDExLjk2NjE1MyAyOC4yMjQ4NjMgMTIuMjM0MTc4IDMwLjYwMzY0NyBDIDEyLjUwMjIwMyAzMi45ODI0MyAxMy4yNTgzOTggMzUuMjgwNDggMTQuNDU1MzE2IDM3LjM1MzYwMiBDIDE1LjY1MjIzNCAzOS40MjY3MjUgMTcuMjY0MzA2IDQxLjIzMDYzNCAxOS4xOTAzODIgNDIuNjUyMTQxIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMTkuMTkwMzgyIDQyLjY1MjE0MSBDIDIyLjcyMDIyMSA0NS4yNTcyOCAyNy4xMDgxNDcgNDYuNDMzMDIxIDMxLjQ2NzY0OCA0NS45NDE4MjIgQyAzNS44MjcxNDggNDUuNDUwNjI0IDM5Ljg0MzQzMiA0My4zMjc5NTUgNDIuNzA1MDcyIDQwLjAwMjY2OCBDIDQ1LjU2NjcxMiAzNi42NzczOCA0Ny4wNjcwNzUgMzIuMzg5NTg3IDQ2LjkwMzAzNSAyOC4wMDU1NjkgQyA0Ni43Mzg5OTYgMjMuNjIxNTUyIDQ0LjkyMjQgMTkuNDU3ODcxIDQxLjgyMDI2MiAxNi4zNTU3MzQgTCAyOS41MiAyOC42NTYgTCAxOS4xOTAzODIgNDIuNjUyMTQxIHoiIHN0eWxlPSJmaWxsOiNjMjIwMDA7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgIDxnIGlkPSJ0ZXh0XzEiPiAgICA8IS0tIDIyIC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTkuMTg3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSAwIEwgNy4zMjgxMjUgMCBMIDcuMzI4MTI1IDguMjk2ODc1IFEgMTIuOTM3NSAxNC4xMDkzNzUgMjIuNjI1IDIzLjg5MDYyNSBRIDMyLjMyODEyNSAzMy42ODc1IDM0LjgxMjUgMzYuNTMxMjUgUSAzOS41NDY4NzUgNDEuODQzNzUgNDEuNDIxODc1IDQ1LjUzMTI1IFEgNDMuMzEyNSA0OS4yMTg3NSA0My4zMTI1IDUyLjc4MTI1IFEgNDMuMzEyNSA1OC41OTM3NSAzOS4yMzQzNzUgNjIuMjUgUSAzNS4xNTYyNSA2NS45MjE4NzUgMjguNjA5Mzc1IDY1LjkyMTg3NSBRIDIzLjk2ODc1IDY1LjkyMTg3NSAxOC44MTI1IDY0LjMxMjUgUSAxMy42NzE4NzUgNjIuNzAzMTI1IDcuODEyNSA1OS40MjE4NzUgTCA3LjgxMjUgNjkuMzkwNjI1IFEgMTMuNzY1NjI1IDcxLjc4MTI1IDE4LjkzNzUgNzMgUSAyNC4xMjUgNzQuMjE4NzUgMjguNDIxODc1IDc0LjIxODc1IFEgMzkuNzUgNzQuMjE4NzUgNDYuNDg0Mzc1IDY4LjU0Njg3NSBRIDUzLjIxODc1IDYyLjg5MDYyNSA1My4yMTg3NSA1My40MjE4NzUgUSA1My4yMTg3NSA0OC45MjE4NzUgNTEuNTMxMjUgNDQuODkwNjI1IFEgNDkuODU5Mzc1IDQwLjg3NSA0NS40MDYyNSAzNS40MDYyNSBRIDQ0LjE4NzUgMzMuOTg0Mzc1IDM3LjY0MDYyNSAyNy4yMTg3NSBRIDMxLjEwOTM3NSAyMC40NTMxMjUgMTkuMTg3NSA4LjI5Njg3NSB6IiBpZD0iRGVqYVZ1U2Fucy01MCIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNC4xNTc5ODYgMjkuMTQ2MDQxKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSAyMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMxLjc4MTI1IDY2LjQwNjI1IFEgMjQuMTcxODc1IDY2LjQwNjI1IDIwLjMyODEyNSA1OC45MDYyNSBRIDE2LjUgNTEuNDIxODc1IDE2LjUgMzYuMzc1IFEgMTYuNSAyMS4zOTA2MjUgMjAuMzI4MTI1IDEzLjg5MDYyNSBRIDI0LjE3MTg3NSA2LjM5MDYyNSAzMS43ODEyNSA2LjM5MDYyNSBRIDM5LjQ1MzEyNSA2LjM5MDYyNSA0My4yODEyNSAxMy44OTA2MjUgUSA0Ny4xMjUgMjEuMzkwNjI1IDQ3LjEyNSAzNi4zNzUgUSA0Ny4xMjUgNTEuNDIxODc1IDQzLjI4MTI1IDU4LjkwNjI1IFEgMzkuNDUzMTI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IHpNIDMxLjc4MTI1IDc0LjIxODc1IFEgNDQuMDQ2ODc1IDc0LjIxODc1IDUwLjUxNTYyNSA2NC41MTU2MjUgUSA1Ni45ODQzNzUgNTQuODI4MTI1IDU2Ljk4NDM3NSAzNi4zNzUgUSA1Ni45ODQzNzUgMTcuOTY4NzUgNTAuNTE1NjI1IDguMjY1NjI1IFEgNDQuMDQ2ODc1IC0xLjQyMTg3NSAzMS43ODEyNSAtMS40MjE4NzUgUSAxOS41MzEyNSAtMS40MjE4NzUgMTMuMDYyNSA4LjI2NTYyNSBRIDYuNTkzNzUgMTcuOTY4NzUgNi41OTM3NSAzNi4zNzUgUSA2LjU5Mzc1IDU0LjgyODEyNSAxMy4wNjI1IDY0LjUxNTYyNSBRIDE5LjUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IHoiIGlkPSJEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjE1NzAxNCAzMy42ODQ3MDkpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTAiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OCIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wZjc4MWM3ZGQ0YzI0ZTdlOTc0ZTdmNzIzNGU0NDA0Mi5zZXRJY29uKGRpdl9pY29uXzkzZTdlMWQzZWYzNTRkNjI5NzA1ZjliNjg0M2U0MmMxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMzZTc5MTFiM2U3NzQ5YTU4N2Q4ZjczMGRmMmU3NTJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk0NmU4ZTRmNmY3MzQ3OTA5ZDQwM2Y5MTY2MTQ4ODRkID0gJChgPGRpdiBpZD0iaHRtbF85NDZlOGU0ZjZmNzM0NzkwOWQ0MDNmOTE2NjE0ODg0ZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tpb3cxMjY2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktpb3dhPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDIwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzNlNzkxMWIzZTc3NDlhNTg3ZDhmNzMwZGYyZTc1MmEuc2V0Q29udGVudChodG1sXzk0NmU4ZTRmNmY3MzQ3OTA5ZDQwM2Y5MTY2MTQ4ODRkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGY3ODFjN2RkNGMyNGU3ZTk3NGU3ZjcyMzRlNDQwNDIuYmluZFBvcHVwKHBvcHVwXzMzZTc5MTFiM2U3NzQ5YTU4N2Q4ZjczMGRmMmU3NTJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMGY0NmNhNzY1MDAwNDFhOGJhZjU4NDYzMzM4ODk4N2UgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl82ZGEzYTNkNzMyZWI0MWRhYjQ5MzE5ZjhjNzVmYWIyOCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuMzg3NzkzIDEzLjkyMzI2NSAzNi4yODc1NyAxMi4yNjYxNjEgMzIuOTEzNjM1IDExLjU5NTA0NCBDIDI5LjUzOTcwMSAxMC45MjM5MjcgMjYuMDQxMzIyIDExLjI2ODQ4NyAyMi44NjMxNDUgMTIuNTg0OTMxIEMgMTkuNjg0OTY4IDEzLjkwMTM3NSAxNi45Njc2IDE2LjEzMTQ2MSAxNS4wNTY0MiAxOC45OTE3NDUgQyAxMy4xNDUyMzkgMjEuODUyMDI4IDEyLjEyNDggMjUuMjE1OTY2IDEyLjEyNDggMjguNjU2IEMgMTIuMTI0OCAzMi4wOTYwMzQgMTMuMTQ1MjM5IDM1LjQ1OTk3MiAxNS4wNTY0MiAzOC4zMjAyNTUgQyAxNi45Njc2IDQxLjE4MDUzOSAxOS42ODQ5NjggNDMuNDEwNjI1IDIyLjg2MzE0NSA0NC43MjcwNjkgQyAyNi4wNDEzMjIgNDYuMDQzNTEzIDI5LjUzOTcwMSA0Ni4zODgwNzMgMzIuOTEzNjM1IDQ1LjcxNjk1NiBDIDM2LjI4NzU3IDQ1LjA0NTgzOSAzOS4zODc3OTMgNDMuMzg4NzM1IDQxLjgyMDI2NCA0MC45NTYyNjQgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgNDAuOTU2MjY0IEMgNDUuMDgxMjQ2IDM3LjY5NTI4MiA0Ni45MTUyIDMzLjI2NzcyNSA0Ni45MTUyIDI4LjY1NiBDIDQ2LjkxNTIgMjQuMDQ0Mjc1IDQ1LjA4MTI0NiAxOS42MTY3MTggNDEuODIwMjY0IDE2LjM1NTczNiBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCA0MC45NTYyNjQgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMTUgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSAxMC43OTY4NzUgNzIuOTA2MjUgTCA0OS41MTU2MjUgNzIuOTA2MjUgTCA0OS41MTU2MjUgNjQuNTkzNzUgTCAxOS44MjgxMjUgNjQuNTkzNzUgTCAxOS44MjgxMjUgNDYuNzM0Mzc1IFEgMjEuOTY4NzUgNDcuNDY4NzUgMjQuMTA5Mzc1IDQ3LjgyODEyNSBRIDI2LjI2NTYyNSA0OC4xODc1IDI4LjQyMTg3NSA0OC4xODc1IFEgNDAuNjI1IDQ4LjE4NzUgNDcuNzUgNDEuNSBRIDU0Ljg5MDYyNSAzNC44MTI1IDU0Ljg5MDYyNSAyMy4zOTA2MjUgUSA1NC44OTA2MjUgMTEuNjI1IDQ3LjU2MjUgNS4wOTM3NSBRIDQwLjIzNDM3NSAtMS40MjE4NzUgMjYuOTA2MjUgLTEuNDIxODc1IFEgMjIuMzEyNSAtMS40MjE4NzUgMTcuNTQ2ODc1IC0wLjY0MDYyNSBRIDEyLjc5Njg3NSAwLjE0MDYyNSA3LjcxODc1IDEuNzAzMTI1IEwgNy43MTg3NSAxMS42MjUgUSAxMi4xMDkzNzUgOS4yMzQzNzUgMTYuNzk2ODc1IDguMDYyNSBRIDIxLjQ4NDM3NSA2Ljg5MDYyNSAyNi43MDMxMjUgNi44OTA2MjUgUSAzNS4xNTYyNSA2Ljg5MDYyNSA0MC4wNzgxMjUgMTEuMzI4MTI1IFEgNDUuMDE1NjI1IDE1Ljc2NTYyNSA0NS4wMTU2MjUgMjMuMzkwNjI1IFEgNDUuMDE1NjI1IDMxIDQwLjA3ODEyNSAzNS40Mzc1IFEgMzUuMTU2MjUgMzkuODkwNjI1IDI2LjcwMzEyNSAzOS44OTA2MjUgUSAyMi43NSAzOS44OTA2MjUgMTguODEyNSAzOS4wMTU2MjUgUSAxNC44OTA2MjUgMzguMTQwNjI1IDEwLjc5Njg3NSAzNi4yODEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MyIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy4zMTU5NiAzMS40MTUzNzUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MyIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDUgLS0+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi45OTkwNCAzMS40MTUzNzUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTMiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMGY0NmNhNzY1MDAwNDFhOGJhZjU4NDYzMzM4ODk4N2Uuc2V0SWNvbihkaXZfaWNvbl82ZGEzYTNkNzMyZWI0MWRhYjQ5MzE5ZjhjNzVmYWIyOCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81ZTc1ZjhkZjc5MDI0NTVjOTI3Mzg3MDE0ZGEyZjQ5NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zYjNiMDZlYTc5YzM0NTUzYjc5YWJjNjgwMTRhMzFkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfM2IzYjA2ZWE3OWMzNDU1M2I3OWFiYzY4MDE0YTMxZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTY0MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5KYXBhbmVzZTwvYT48YnI+Y29uc29uYW50czogMTU8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWU3NWY4ZGY3OTAyNDU1YzkyNzM4NzAxNGRhMmY0OTUuc2V0Q29udGVudChodG1sXzNiM2IwNmVhNzljMzQ1NTNiNzlhYmM2ODAxNGEzMWQ4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMGY0NmNhNzY1MDAwNDFhOGJhZjU4NDYzMzM4ODk4N2UuYmluZFBvcHVwKHBvcHVwXzVlNzVmOGRmNzkwMjQ1NWM5MjczODcwMTRkYTJmNDk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfY2YwMDk5NGUyNTFkNDI3YjgxZjZmNGJhMjI0MzAyYjggPSBMLm1hcmtlcigKICAgICAgICAgICAgWzcuMTUzNDUsIDMuNjcyMjVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2U3MTM3NGRjMjEwOTRiNTI4MGJjODQyYWE4YjJjOWRjID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyAzOS44MTE2NzYgMTQuMzQ3MTQ4IDM3LjM0MTMzNiAxMi44NjA3OTQgMzQuNjI1ODg0IDEyLjAyNzAyMSBDIDMxLjkxMDQzMiAxMS4xOTMyNDkgMjkuMDMxNjM3IDExLjAzNzE2NSAyNi4yNDE5NTcgMTEuNTcyNDU4IEMgMjMuNDUyMjc2IDEyLjEwNzc1IDIwLjgzNTcxNSAxMy4zMTgzIDE4LjYyMTczNCAxNS4wOTc5NDggQyAxNi40MDc3NTMgMTYuODc3NTk1IDE0LjY2MzAyMiAxOS4xNzI3NSAxMy41NDA1NDUgMjEuNzgyMTM3IEMgMTIuNDE4MDY4IDI0LjM5MTUyNCAxMS45NTE2NDYgMjcuMjM2NTY4IDEyLjE4MjE4MyAzMC4wNjc3NzEgQyAxMi40MTI3MiAzMi44OTg5NzMgMTMuMzMzMjc0IDM1LjYzMTA4IDE0Ljg2MzExNSAzOC4wMjQ0OTYgQyAxNi4zOTI5NTcgNDAuNDE3OTEyIDE4LjQ4NjAxOSA0Mi40MDA1NjYgMjAuOTU4NzQ4IDQzLjc5ODU4NyBDIDIzLjQzMTQ3NyA0NS4xOTY2MDkgMjYuMjA5NDE1IDQ1Ljk2Nzg5OSAyOS4wNDg5NDYgNDYuMDQ0ODIxIEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMjkuMDQ4OTQ2IDQ2LjA0NDgyMSBDIDMyLjUyNzgxMiA0Ni4xMzkwNjIgMzUuOTU2MTg5IDQ1LjE4NzE3OCAzOC44ODg0OTUgNDMuMzEyODg1IEMgNDEuODIwODAxIDQxLjQzODU5MyA0NC4xMjQyNDYgMzguNzI2NzY4IDQ1LjQ5OTQ1NSAzNS41Mjk4NjUgQyA0Ni44NzQ2NjMgMzIuMzMyOTYxIDQ3LjI1OTM1OSAyOC43OTU3NSA0Ni42MDM1NDMgMjUuMzc3OTU5IEMgNDUuOTQ3NzI3IDIxLjk2MDE2OCA0NC4yODEwOTggMTguODE2NTcxIDQxLjgyMDI2NiAxNi4zNTU3MzggTCAyOS41MiAyOC42NTYgTCAyOS4wNDg5NDYgNDYuMDQ0ODIxIHoiIHN0eWxlPSJmaWxsOiNjMjIwMDA7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgIDxnIGlkPSJ0ZXh0XzEiPiAgICA8IS0tIDE4IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTIuNDA2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgOC4yOTY4NzUgTCAyOC41MTU2MjUgNjMuOTIxODc1IEwgMTAuOTg0Mzc1IDYwLjQwNjI1IEwgMTAuOTg0Mzc1IDY5LjM5MDYyNSBMIDI4LjQyMTg3NSA3Mi45MDYyNSBMIDM4LjI4MTI1IDcyLjkwNjI1IEwgMzguMjgxMjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgOC4yOTY4NzUgTCA1NC4zOTA2MjUgMCBMIDEyLjQwNjI1IDAgeiIgaWQ9IkRlamFWdVNhbnMtNDkiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgMzQuNjI1IFEgMjQuNzUgMzQuNjI1IDIwLjcxODc1IDMwLjg1OTM3NSBRIDE2LjcwMzEyNSAyNy4wOTM3NSAxNi43MDMxMjUgMjAuNTE1NjI1IFEgMTYuNzAzMTI1IDEzLjkyMTg3NSAyMC43MTg3NSAxMC4xNTYyNSBRIDI0Ljc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzguODEyNSA2LjM5MDYyNSA0Mi44NTkzNzUgMTAuMTcxODc1IFEgNDYuOTIxODc1IDEzLjk2ODc1IDQ2LjkyMTg3NSAyMC41MTU2MjUgUSA0Ni45MjE4NzUgMjcuMDkzNzUgNDIuODkwNjI1IDMwLjg1OTM3NSBRIDM4Ljg3NSAzNC42MjUgMzEuNzgxMjUgMzQuNjI1IHpNIDIxLjkyMTg3NSAzOC44MTI1IFEgMTUuNTc4MTI1IDQwLjM3NSAxMi4wMzEyNSA0NC43MTg3NSBRIDguNSA0OS4wNzgxMjUgOC41IDU1LjMyODEyNSBRIDguNSA2NC4wNjI1IDE0LjcxODc1IDY5LjE0MDYyNSBRIDIwLjk1MzEyNSA3NC4yMTg3NSAzMS43ODEyNSA3NC4yMTg3NSBRIDQyLjY3MTg3NSA3NC4yMTg3NSA0OC44NzUgNjkuMTQwNjI1IFEgNTUuMDc4MTI1IDY0LjA2MjUgNTUuMDc4MTI1IDU1LjMyODEyNSBRIDU1LjA3ODEyNSA0OS4wNzgxMjUgNTEuNTMxMjUgNDQuNzE4NzUgUSA0OCA0MC4zNzUgNDEuNzAzMTI1IDM4LjgxMjUgUSA0OC44MjgxMjUgMzcuMTU2MjUgNTIuNzk2ODc1IDMyLjMxMjUgUSA1Ni43ODEyNSAyNy40ODQzNzUgNTYuNzgxMjUgMjAuNTE1NjI1IFEgNTYuNzgxMjUgOS45MDYyNSA1MC4zMTI1IDQuMjM0Mzc1IFEgNDMuODQzNzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjczNDM3NSAtMS40MjE4NzUgMTMuMjUgNC4yMzQzNzUgUSA2Ljc4MTI1IDkuOTA2MjUgNi43ODEyNSAyMC41MTU2MjUgUSA2Ljc4MTI1IDI3LjQ4NDM3NSAxMC43ODEyNSAzMi4zMTI1IFEgMTQuNzk2ODc1IDM3LjE1NjI1IDIxLjkyMTg3NSAzOC44MTI1IHpNIDE4LjMxMjUgNTQuMzkwNjI1IFEgMTguMzEyNSA0OC43MzQzNzUgMjEuODQzNzUgNDUuNTYyNSBRIDI1LjM5MDYyNSA0Mi4zOTA2MjUgMzEuNzgxMjUgNDIuMzkwNjI1IFEgMzguMTQwNjI1IDQyLjM5MDYyNSA0MS43MTg3NSA0NS41NjI1IFEgNDUuMzEyNSA0OC43MzQzNzUgNDUuMzEyNSA1NC4zOTA2MjUgUSA0NS4zMTI1IDYwLjA2MjUgNDEuNzE4NzUgNjMuMjM0Mzc1IFEgMzguMTQwNjI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IFEgMjUuMzkwNjI1IDY2LjQwNjI1IDIxLjg0Mzc1IDYzLjIzNDM3NSBRIDE4LjMxMjUgNjAuMDYyNSAxOC4zMTI1IDU0LjM5MDYyNSB6IiBpZD0iRGVqYVZ1U2Fucy01NiIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy41OTkxMDkgMzAuMDQwNjAyKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTYiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSAxMSAtLT4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjcxNTg5MSAzMi43OTAxNDgpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDkiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OSIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9jZjAwOTk0ZTI1MWQ0MjdiODFmNmY0YmEyMjQzMDJiOC5zZXRJY29uKGRpdl9pY29uX2U3MTM3NGRjMjEwOTRiNTI4MGJjODQyYWE4YjJjOWRjKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkxZDRjNDZiOWFhZjQwMjRhYjQ0MDNiNGViOWY1NjcwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliNWRlYjBmMDRkNTQxNmZiMjM2MTllNGQwZDBkMDU4ID0gJChgPGRpdiBpZD0iaHRtbF85YjVkZWIwZjA0ZDU0MTZmYjIzNjE5ZTRkMGQwZDA1OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3lvcnUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPllvcnViYTwvYT48YnI+Y29uc29uYW50czogMTg8YnI+dm93ZWxzOiAxMTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkxZDRjNDZiOWFhZjQwMjRhYjQ0MDNiNGViOWY1NjcwLnNldENvbnRlbnQoaHRtbF85YjVkZWIwZjA0ZDU0MTZmYjIzNjE5ZTRkMGQwZDA1OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2NmMDA5OTRlMjUxZDQyN2I4MWY2ZjRiYTIyNDMwMmI4LmJpbmRQb3B1cChwb3B1cF85MWQ0YzQ2YjlhYWY0MDI0YWI0NDAzYjRlYjlmNTY3MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk0Mjg1YzNiY2M5MTRmZjQ5MDk1YTc1NzI2ZWRjNDBhID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2NC43NjI4LCAyNS41NTc3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9mMDAzMzY5NDU5ZTY0NTFlYjJkYmFjM2Y5NmQxMTI0NyA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuNjE3NTk5IDE0LjE1MzA3MSAzNi44NjMxODQgMTIuNTgxOTgxIDMzLjg0NjAxIDExLjgwNzMwMiBDIDMwLjgyODgzNiAxMS4wMzI2MjQgMjcuNjU4MjQ2IDExLjA4MjQzMSAyNC42NjY4OTQgMTEuOTUxNDk5IEMgMjEuNjc1NTQyIDEyLjgyMDU2NyAxOC45NzE4MzUgMTQuNDc3NDAxIDE2LjgzOTQ0NSAxNi43NDgxNjYgQyAxNC43MDcwNTQgMTkuMDE4OTMyIDEzLjIyMzI1NyAyMS44MjEzMzYgMTIuNTQzNzMzIDI0Ljg2MTM1NSBDIDExLjg2NDIwOCAyNy45MDEzNzQgMTIuMDEzNTgyIDMxLjA2ODgzNSAxMi45NzYxODIgMzQuMDMxNDEzIEMgMTMuOTM4NzgyIDM2Ljk5Mzk5MSAxNS42Nzk3MjMgMzkuNjQ0MzIgMTguMDE2MzQ4IDQxLjcwNDMzMiBDIDIwLjM1Mjk3MyA0My43NjQzNDUgMjMuMjAwNjAyIDQ1LjE1OTM4MyAyNi4yNjA0NjUgNDUuNzQzMDgzIEMgMjkuMzIwMzI4IDQ2LjMyNjc4MyAzMi40ODE1MzUgNDYuMDc3OTkxIDM1LjQxMjQxNSA0NS4wMjI4MDkgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS40MTI0MTUgNDUuMDIyODA5IEMgMzguMTY5MDUyIDQ0LjAzMDM1OCA0MC42MzA3ODkgNDIuMzU3MzYzIDQyLjU2ODMzMiA0MC4xNTk2NTIgQyA0NC41MDU4NzYgMzcuOTYxOTQgNDUuODU3MTQxIDM1LjMwOTkzMyA0Ni40OTYyNjcgMzIuNDUwNjQ1IEMgNDcuMTM1Mzk0IDI5LjU5MTM1NyA0Ny4wNDE5MDIgMjYuNjE2NDA4IDQ2LjIyNDUwMSAyMy44MDI4OTQgQyA0NS40MDcwOTkgMjAuOTg5Mzc5IDQzLjg5MTk3OSAxOC40Mjc0NTEgNDEuODIwMjY0IDE2LjM1NTczNiBMIDI5LjUyIDI4LjY1NiBMIDM1LjQxMjQxNSA0NS4wMjI4MDkgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMTcgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSA4LjIwMzEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA2OC43MDMxMjUgTCAyOC42MDkzNzUgMCBMIDE4LjMxMjUgMCBMIDQzLjIxODc1IDY0LjU5Mzc1IEwgOC4yMDMxMjUgNjQuNTkzNzUgeiIgaWQ9IkRlamFWdVNhbnMtNTUiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuMzk5NzQ3IDMwLjY1NjQ0NilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OSIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU1Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gOCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMxLjc4MTI1IDM0LjYyNSBRIDI0Ljc1IDM0LjYyNSAyMC43MTg3NSAzMC44NTkzNzUgUSAxNi43MDMxMjUgMjcuMDkzNzUgMTYuNzAzMTI1IDIwLjUxNTYyNSBRIDE2LjcwMzEyNSAxMy45MjE4NzUgMjAuNzE4NzUgMTAuMTU2MjUgUSAyNC43NSA2LjM5MDYyNSAzMS43ODEyNSA2LjM5MDYyNSBRIDM4LjgxMjUgNi4zOTA2MjUgNDIuODU5Mzc1IDEwLjE3MTg3NSBRIDQ2LjkyMTg3NSAxMy45Njg3NSA0Ni45MjE4NzUgMjAuNTE1NjI1IFEgNDYuOTIxODc1IDI3LjA5Mzc1IDQyLjg5MDYyNSAzMC44NTkzNzUgUSAzOC44NzUgMzQuNjI1IDMxLjc4MTI1IDM0LjYyNSB6TSAyMS45MjE4NzUgMzguODEyNSBRIDE1LjU3ODEyNSA0MC4zNzUgMTIuMDMxMjUgNDQuNzE4NzUgUSA4LjUgNDkuMDc4MTI1IDguNSA1NS4zMjgxMjUgUSA4LjUgNjQuMDYyNSAxNC43MTg3NSA2OS4xNDA2MjUgUSAyMC45NTMxMjUgNzQuMjE4NzUgMzEuNzgxMjUgNzQuMjE4NzUgUSA0Mi42NzE4NzUgNzQuMjE4NzUgNDguODc1IDY5LjE0MDYyNSBRIDU1LjA3ODEyNSA2NC4wNjI1IDU1LjA3ODEyNSA1NS4zMjgxMjUgUSA1NS4wNzgxMjUgNDkuMDc4MTI1IDUxLjUzMTI1IDQ0LjcxODc1IFEgNDggNDAuMzc1IDQxLjcwMzEyNSAzOC44MTI1IFEgNDguODI4MTI1IDM3LjE1NjI1IDUyLjc5Njg3NSAzMi4zMTI1IFEgNTYuNzgxMjUgMjcuNDg0Mzc1IDU2Ljc4MTI1IDIwLjUxNTYyNSBRIDU2Ljc4MTI1IDkuOTA2MjUgNTAuMzEyNSA0LjIzNDM3NSBRIDQzLjg0Mzc1IC0xLjQyMTg3NSAzMS43ODEyNSAtMS40MjE4NzUgUSAxOS43MzQzNzUgLTEuNDIxODc1IDEzLjI1IDQuMjM0Mzc1IFEgNi43ODEyNSA5LjkwNjI1IDYuNzgxMjUgMjAuNTE1NjI1IFEgNi43ODEyNSAyNy40ODQzNzUgMTAuNzgxMjUgMzIuMzEyNSBRIDE0Ljc5Njg3NSAzNy4xNTYyNSAyMS45MjE4NzUgMzguODEyNSB6TSAxOC4zMTI1IDU0LjM5MDYyNSBRIDE4LjMxMjUgNDguNzM0Mzc1IDIxLjg0Mzc1IDQ1LjU2MjUgUSAyNS4zOTA2MjUgNDIuMzkwNjI1IDMxLjc4MTI1IDQyLjM5MDYyNSBRIDM4LjE0MDYyNSA0Mi4zOTA2MjUgNDEuNzE4NzUgNDUuNTYyNSBRIDQ1LjMxMjUgNDguNzM0Mzc1IDQ1LjMxMjUgNTQuMzkwNjI1IFEgNDUuMzEyNSA2MC4wNjI1IDQxLjcxODc1IDYzLjIzNDM3NSBRIDM4LjE0MDYyNSA2Ni40MDYyNSAzMS43ODEyNSA2Ni40MDYyNSBRIDI1LjM5MDYyNSA2Ni40MDYyNSAyMS44NDM3NSA2My4yMzQzNzUgUSAxOC4zMTI1IDYwLjA2MjUgMTguMzEyNSA1NC4zOTA2MjUgeiIgaWQ9IkRlamFWdVNhbnMtNTYiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTE1MjUzIDMyLjE3NDMwNClzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NiIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl85NDI4NWMzYmNjOTE0ZmY0OTA5NWE3NTcyNmVkYzQwYS5zZXRJY29uKGRpdl9pY29uX2YwMDMzNjk0NTllNjQ1MWViMmRiYWMzZjk2ZDExMjQ3KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UzZDM0MmU5YTJlZDQ1Mjg5NGMwNzkxYzM3OTg2ZTAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3MjdiYjJiYzAxNDQyMmQ4NjM5OWRjNDg2NDkwOTQxID0gJChgPGRpdiBpZD0iaHRtbF9mNzI3YmIyYmMwMTQ0MjJkODYzOTlkYzQ4NjQ5MDk0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPmNvbnNvbmFudHM6IDE3PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UzZDM0MmU5YTJlZDQ1Mjg5NGMwNzkxYzM3OTg2ZTAzLnNldENvbnRlbnQoaHRtbF9mNzI3YmIyYmMwMTQ0MjJkODYzOTlkYzQ4NjQ5MDk0MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk0Mjg1YzNiY2M5MTRmZjQ5MDk1YTc1NzI2ZWRjNDBhLmJpbmRQb3B1cChwb3B1cF9lM2QzNDJlOWEyZWQ0NTI4OTRjMDc5MWMzNzk4NmUwMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzhkMmFjMTUyZThlYjQ5NWJhY2IwMTk2ZDU3Y2IwMzA1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8zMTYwNmU2ZjNkM2E0NjU3YmZmMzNkMmM4ZjRjMDE1YiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuODI5MDA4IDE0LjM2NDQ4IDM3LjM4MzY3NyAxMi44ODYyMjYgMzQuNjk1MTI1IDEyLjA0ODQzOSBDIDMyLjAwNjU3MyAxMS4yMTA2NTMgMjkuMTU0MzYxIDExLjAzODEyNiAyNi4zODQ0MjcgMTEuNTQ1NzM1IEMgMjMuNjE0NDkzIDEyLjA1MzM0NCAyMS4wMDg4MDggMTMuMjI2MDY4IDE4Ljc5MjA1MSAxNC45NjI3ODYgQyAxNi41NzUyOTQgMTYuNjk5NTA1IDE0LjgxMzA2NyAxOC45NDg4MjMgMTMuNjU3MzE5IDIxLjUxNjc4OCBDIDEyLjUwMTU3MiAyNC4wODQ3NTQgMTEuOTg2NTA3IDI2Ljg5NTM3NCAxMi4xNTY1MzcgMjkuNzA2Mjk4IEMgMTIuMzI2NTY2IDMyLjUxNzIyMSAxMy4xNzY2NTkgMzUuMjQ1MjY0IDE0LjYzMzUxNSAzNy42NTUxOTYgQyAxNi4wOTAzNyA0MC4wNjUxMjkgMTguMTEwODc1IDQyLjA4NTYzMyAyMC41MjA4MDcgNDMuNTQyNDg4IEMgMjIuOTMwNzQgNDQuOTk5MzQyIDI1LjY1ODc4MyA0NS44NDk0MzQgMjguNDY5NzA2IDQ2LjAxOTQ2NCBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDI4LjQ2OTcwNiA0Ni4wMTk0NjQgQyAzMS45OTI4IDQ2LjIzMjU3MSAzNS40OTg2ODkgNDUuMzY4NDQ2IDM4LjUxOTE5NyA0My41NDI0ODUgQyA0MS41Mzk3MDUgNDEuNzE2NTI0IDQzLjkzNDExNiAzOS4wMTM3OTEgNDUuMzgyNjgxIDM1Ljc5NTIxIEMgNDYuODMxMjQ2IDMyLjU3NjYyOSA0Ny4yNjY0ODEgMjguOTkyMTQ0IDQ2LjYzMDI2NCAyNS41MjA0MjUgQyA0NS45OTQwNDggMjIuMDQ4NzA2IDQ0LjMxNjAxOSAxOC44NTE0OSA0MS44MjAyNjIgMTYuMzU1NzM0IEwgMjkuNTIgMjguNjU2IEwgMjguNDY5NzA2IDQ2LjAxOTQ2NCB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSA4IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgMzQuNjI1IFEgMjQuNzUgMzQuNjI1IDIwLjcxODc1IDMwLjg1OTM3NSBRIDE2LjcwMzEyNSAyNy4wOTM3NSAxNi43MDMxMjUgMjAuNTE1NjI1IFEgMTYuNzAzMTI1IDEzLjkyMTg3NSAyMC43MTg3NSAxMC4xNTYyNSBRIDI0Ljc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzguODEyNSA2LjM5MDYyNSA0Mi44NTkzNzUgMTAuMTcxODc1IFEgNDYuOTIxODc1IDEzLjk2ODc1IDQ2LjkyMTg3NSAyMC41MTU2MjUgUSA0Ni45MjE4NzUgMjcuMDkzNzUgNDIuODkwNjI1IDMwLjg1OTM3NSBRIDM4Ljg3NSAzNC42MjUgMzEuNzgxMjUgMzQuNjI1IHpNIDIxLjkyMTg3NSAzOC44MTI1IFEgMTUuNTc4MTI1IDQwLjM3NSAxMi4wMzEyNSA0NC43MTg3NSBRIDguNSA0OS4wNzgxMjUgOC41IDU1LjMyODEyNSBRIDguNSA2NC4wNjI1IDE0LjcxODc1IDY5LjE0MDYyNSBRIDIwLjk1MzEyNSA3NC4yMTg3NSAzMS43ODEyNSA3NC4yMTg3NSBRIDQyLjY3MTg3NSA3NC4yMTg3NSA0OC44NzUgNjkuMTQwNjI1IFEgNTUuMDc4MTI1IDY0LjA2MjUgNTUuMDc4MTI1IDU1LjMyODEyNSBRIDU1LjA3ODEyNSA0OS4wNzgxMjUgNTEuNTMxMjUgNDQuNzE4NzUgUSA0OCA0MC4zNzUgNDEuNzAzMTI1IDM4LjgxMjUgUSA0OC44MjgxMjUgMzcuMTU2MjUgNTIuNzk2ODc1IDMyLjMxMjUgUSA1Ni43ODEyNSAyNy40ODQzNzUgNTYuNzgxMjUgMjAuNTE1NjI1IFEgNTYuNzgxMjUgOS45MDYyNSA1MC4zMTI1IDQuMjM0Mzc1IFEgNDMuODQzNzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjczNDM3NSAtMS40MjE4NzUgMTMuMjUgNC4yMzQzNzUgUSA2Ljc4MTI1IDkuOTA2MjUgNi43ODEyNSAyMC41MTU2MjUgUSA2Ljc4MTI1IDI3LjQ4NDM3NSAxMC43ODEyNSAzMi4zMTI1IFEgMTQuNzk2ODc1IDM3LjE1NjI1IDIxLjkyMTg3NSAzOC44MTI1IHpNIDE4LjMxMjUgNTQuMzkwNjI1IFEgMTguMzEyNSA0OC43MzQzNzUgMjEuODQzNzUgNDUuNTYyNSBRIDI1LjM5MDYyNSA0Mi4zOTA2MjUgMzEuNzgxMjUgNDIuMzkwNjI1IFEgMzguMTQwNjI1IDQyLjM5MDYyNSA0MS43MTg3NSA0NS41NjI1IFEgNDUuMzEyNSA0OC43MzQzNzUgNDUuMzEyNSA1NC4zOTA2MjUgUSA0NS4zMTI1IDYwLjA2MjUgNDEuNzE4NzUgNjMuMjM0Mzc1IFEgMzguMTQwNjI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IFEgMjUuMzkwNjI1IDY2LjQwNjI1IDIxLjg0Mzc1IDYzLjIzNDM3NSBRIDE4LjMxMjUgNjAuMDYyNSAxOC4zMTI1IDU0LjM5MDYyNSB6IiBpZD0iRGVqYVZ1U2Fucy01NiIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOS45ODQ5NjQgMjkuOTg3NTMzKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gNSAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDEwLjc5Njg3NSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA3Mi45MDYyNSBMIDQ5LjUxNTYyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA2NC41OTM3NSBMIDE5LjgyODEyNSA0Ni43MzQzNzUgUSAyMS45Njg3NSA0Ny40Njg3NSAyNC4xMDkzNzUgNDcuODI4MTI1IFEgMjYuMjY1NjI1IDQ4LjE4NzUgMjguNDIxODc1IDQ4LjE4NzUgUSA0MC42MjUgNDguMTg3NSA0Ny43NSA0MS41IFEgNTQuODkwNjI1IDM0LjgxMjUgNTQuODkwNjI1IDIzLjM5MDYyNSBRIDU0Ljg5MDYyNSAxMS42MjUgNDcuNTYyNSA1LjA5Mzc1IFEgNDAuMjM0Mzc1IC0xLjQyMTg3NSAyNi45MDYyNSAtMS40MjE4NzUgUSAyMi4zMTI1IC0xLjQyMTg3NSAxNy41NDY4NzUgLTAuNjQwNjI1IFEgMTIuNzk2ODc1IDAuMTQwNjI1IDcuNzE4NzUgMS43MDMxMjUgTCA3LjcxODc1IDExLjYyNSBRIDEyLjEwOTM3NSA5LjIzNDM3NSAxNi43OTY4NzUgOC4wNjI1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjcwMzEyNSA2Ljg5MDYyNSBRIDM1LjE1NjI1IDYuODkwNjI1IDQwLjA3ODEyNSAxMS4zMjgxMjUgUSA0NS4wMTU2MjUgMTUuNzY1NjI1IDQ1LjAxNTYyNSAyMy4zOTA2MjUgUSA0NS4wMTU2MjUgMzEgNDAuMDc4MTI1IDM1LjQzNzUgUSAzNS4xNTYyNSAzOS44OTA2MjUgMjYuNzAzMTI1IDM5Ljg5MDYyNSBRIDIyLjc1IDM5Ljg5MDYyNSAxOC44MTI1IDM5LjAxNTYyNSBRIDE0Ljg5MDYyNSAzOC4xNDA2MjUgMTAuNzk2ODc1IDM2LjI4MTI1IHoiIGlkPSJEZWphVnVTYW5zLTUzIi8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyLjY5MjUzNiAzMi44NDMyMTcpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTMiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGQyYWMxNTJlOGViNDk1YmFjYjAxOTZkNTdjYjAzMDUuc2V0SWNvbihkaXZfaWNvbl8zMTYwNmU2ZjNkM2E0NjU3YmZmMzNkMmM4ZjRjMDE1Yik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmIxYjE0M2Y0NWI0YjdlOWVjNjhlZDMwMWUwODcyYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZGE2YzliOTI2NjE0MGQyYjViMzdlZWIxMzk3ZDhhNiA9ICQoYDxkaXYgaWQ9Imh0bWxfM2RhNmM5YjkyNjYxNDBkMmI1YjM3ZWViMTM5N2Q4YTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYXdhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYXdhaWlhbjwvYT48YnI+Y29uc29uYW50czogODxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmIxYjE0M2Y0NWI0YjdlOWVjNjhlZDMwMWUwODcyYy5zZXRDb250ZW50KGh0bWxfM2RhNmM5YjkyNjYxNDBkMmI1YjM3ZWViMTM5N2Q4YTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl84ZDJhYzE1MmU4ZWI0OTViYWNiMDE5NmQ1N2NiMDMwNS5iaW5kUG9wdXAocG9wdXBfNDJiMWIxNDNmNDViNGI3ZTllYzY4ZWQzMDFlMDg3MmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80ZTYwM2IzMzBkYjA0N2YxODZkMzkxZjVlNmVjNjVlYyA9IEwubWFya2VyKAogICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYzgzMjNkYzU2NGY0ZmJhYmRmMjA4NzE4Yjg4NTg3Myk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYjgzOWIxODNjYjcxNDNjYWE1YTAzMTQ3NTU2ZWU3MjQgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDM5LjcxNTgzNSAxNC4yNTEzMDcgMzcuMTA2MTM2IDEyLjcyMTczNiAzNC4yNDE3NjEgMTEuOTEzODk5IEMgMzEuMzc3Mzg3IDExLjEwNjA2MiAyOC4zNTMwNTMgMTEuMDQ2NjcxIDI1LjQ1OTE3MiAxMS43NDE0MzEgQyAyMi41NjUyOSAxMi40MzYxOSAxOS44OTc1NTIgMTMuODYyMTI2IDE3LjcxMjEyNiAxNS44ODIzMTIgQyAxNS41MjY3IDE3LjkwMjQ5OSAxMy44OTU4NTEgMjAuNDUwMTM2IDEyLjk3NjE4MiAyMy4yODA1ODYgQyAxMi4wNTY1MTMgMjYuMTExMDM3IDExLjg3ODQzMyAyOS4xMzA3MDcgMTIuNDU5MDQ0IDMyLjA0OTYzNCBDIDEzLjAzOTY1NCAzNC45Njg1NiAxNC4zNTk3NTUgMzcuNjkwMjI0IDE2LjI5MjU4NSAzOS45NTMyNzcgQyAxOC4yMjU0MTUgNDIuMjE2MzMxIDIwLjcwNzA2IDQzLjk0NTk0MiAyMy40OTkyMjIgNDQuOTc2MDI1IEMgMjYuMjkxMzg1IDQ2LjAwNjEwOSAyOS4zMDE3MzUgNDYuMzAyNjAzIDMyLjI0MTIwNiA0NS44MzcwMzcgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi4yNDEyMDYgNDUuODM3MDM3IEMgMzUuNDA5NDg2IDQ1LjMzNTIzMSAzOC4zNzgwNjcgNDMuOTY2Njk3IDQwLjgxNzI3NyA0MS44ODM0MTYgQyA0My4yNTY0ODcgMzkuODAwMTM0IDQ1LjA3MjU2MSAzNy4wODIxODggNDYuMDYzODE3IDM0LjAzMTQxNSBDIDQ3LjA1NTA3NCAzMC45ODA2NDIgNDcuMTgzNDA5IDI3LjcxNDMxNiA0Ni40MzQ1NyAyNC41OTUxNzQgQyA0NS42ODU3MzEgMjEuNDc2MDMyIDQ0LjA4ODUwNCAxOC42MjM5NzcgNDEuODIwMjY2IDE2LjM1NTczOCBMIDI5LjUyIDI4LjY1NiBMIDMyLjI0MTIwNiA0NS44MzcwMzcgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gMjYgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxOS4xODc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDguMjk2ODc1IEwgNTMuNjA5Mzc1IDAgTCA3LjMyODEyNSAwIEwgNy4zMjgxMjUgOC4yOTY4NzUgUSAxMi45Mzc1IDE0LjEwOTM3NSAyMi42MjUgMjMuODkwNjI1IFEgMzIuMzI4MTI1IDMzLjY4NzUgMzQuODEyNSAzNi41MzEyNSBRIDM5LjU0Njg3NSA0MS44NDM3NSA0MS40MjE4NzUgNDUuNTMxMjUgUSA0My4zMTI1IDQ5LjIxODc1IDQzLjMxMjUgNTIuNzgxMjUgUSA0My4zMTI1IDU4LjU5Mzc1IDM5LjIzNDM3NSA2Mi4yNSBRIDM1LjE1NjI1IDY1LjkyMTg3NSAyOC42MDkzNzUgNjUuOTIxODc1IFEgMjMuOTY4NzUgNjUuOTIxODc1IDE4LjgxMjUgNjQuMzEyNSBRIDEzLjY3MTg3NSA2Mi43MDMxMjUgNy44MTI1IDU5LjQyMTg3NSBMIDcuODEyNSA2OS4zOTA2MjUgUSAxMy43NjU2MjUgNzEuNzgxMjUgMTguOTM3NSA3MyBRIDI0LjEyNSA3NC4yMTg3NSAyOC40MjE4NzUgNzQuMjE4NzUgUSAzOS43NSA3NC4yMTg3NSA0Ni40ODQzNzUgNjguNTQ2ODc1IFEgNTMuMjE4NzUgNjIuODkwNjI1IDUzLjIxODc1IDUzLjQyMTg3NSBRIDUzLjIxODc1IDQ4LjkyMTg3NSA1MS41MzEyNSA0NC44OTA2MjUgUSA0OS44NTkzNzUgNDAuODc1IDQ1LjQwNjI1IDM1LjQwNjI1IFEgNDQuMTg3NSAzMy45ODQzNzUgMzcuNjQwNjI1IDI3LjIxODc1IFEgMzEuMTA5Mzc1IDIwLjQ1MzEyNSAxOS4xODc1IDguMjk2ODc1IHoiIGlkPSJEZWphVnVTYW5zLTUwIi8+ICAgICA8cGF0aCBkPSJNIDMzLjAxNTYyNSA0MC4zNzUgUSAyNi4zNzUgNDAuMzc1IDIyLjQ4NDM3NSAzNS44MjgxMjUgUSAxOC42MDkzNzUgMzEuMjk2ODc1IDE4LjYwOTM3NSAyMy4zOTA2MjUgUSAxOC42MDkzNzUgMTUuNTMxMjUgMjIuNDg0Mzc1IDEwLjk1MzEyNSBRIDI2LjM3NSA2LjM5MDYyNSAzMy4wMTU2MjUgNi4zOTA2MjUgUSAzOS42NTYyNSA2LjM5MDYyNSA0My41MzEyNSAxMC45NTMxMjUgUSA0Ny40MDYyNSAxNS41MzEyNSA0Ny40MDYyNSAyMy4zOTA2MjUgUSA0Ny40MDYyNSAzMS4yOTY4NzUgNDMuNTMxMjUgMzUuODI4MTI1IFEgMzkuNjU2MjUgNDAuMzc1IDMzLjAxNTYyNSA0MC4zNzUgek0gNTIuNTkzNzUgNzEuMjk2ODc1IEwgNTIuNTkzNzUgNjIuMzEyNSBRIDQ4Ljg3NSA2NC4wNjI1IDQ1LjA5Mzc1IDY0Ljk4NDM3NSBRIDQxLjMxMjUgNjUuOTIxODc1IDM3LjU5Mzc1IDY1LjkyMTg3NSBRIDI3LjgyODEyNSA2NS45MjE4NzUgMjIuNjcxODc1IDU5LjMyODEyNSBRIDE3LjUzMTI1IDUyLjczNDM3NSAxNi43OTY4NzUgMzkuNDA2MjUgUSAxOS42NzE4NzUgNDMuNjU2MjUgMjQuMDE1NjI1IDQ1LjkyMTg3NSBRIDI4LjM3NSA0OC4xODc1IDMzLjU5Mzc1IDQ4LjE4NzUgUSA0NC41NzgxMjUgNDguMTg3NSA1MC45NTMxMjUgNDEuNTE1NjI1IFEgNTcuMzI4MTI1IDM0Ljg1OTM3NSA1Ny4zMjgxMjUgMjMuMzkwNjI1IFEgNTcuMzI4MTI1IDEyLjE1NjI1IDUwLjY4NzUgNS4zNTkzNzUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMzLjAxNTYyNSAtMS40MjE4NzUgUSAyMC4zNTkzNzUgLTEuNDIxODc1IDEzLjY3MTg3NSA4LjI2NTYyNSBRIDYuOTg0Mzc1IDE3Ljk2ODc1IDYuOTg0Mzc1IDM2LjM3NSBRIDYuOTg0Mzc1IDUzLjY1NjI1IDE1LjE4NzUgNjMuOTM3NSBRIDIzLjM5MDYyNSA3NC4yMTg3NSAzNy4yMDMxMjUgNzQuMjE4NzUgUSA0MC45MjE4NzUgNzQuMjE4NzUgNDQuNzAzMTI1IDczLjQ4NDM3NSBRIDQ4LjQ4NDM3NSA3Mi43NSA1Mi41OTM3NSA3MS4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTQiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDg2MjM2IDMwLjM0MDI5MilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU0Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTQgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICAgPHBhdGggZD0iTSAzNy43OTY4NzUgNjQuMzEyNSBMIDEyLjg5MDYyNSAyNS4zOTA2MjUgTCAzNy43OTY4NzUgMjUuMzkwNjI1IHpNIDM1LjIwMzEyNSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSAyNS4zOTA2MjUgTCA1OC4wMTU2MjUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMTcuMTg3NSBMIDQ3LjYwOTM3NSAwIEwgMzcuNzk2ODc1IDAgTCAzNy43OTY4NzUgMTcuMTg3NSBMIDQuODkwNjI1IDE3LjE4NzUgTCA0Ljg5MDYyNSAyNi43MDMxMjUgeiIgaWQ9IkRlamFWdVNhbnMtNTIiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuODI4NzYzIDMyLjQ5MDQ1OClzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OSIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUyIi8+ICAgIDwvZz4gICA8L2c+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRlNjAzYjMzMGRiMDQ3ZjE4NmQzOTFmNWU2ZWM2NWVjLnNldEljb24oZGl2X2ljb25fYjgzOWIxODNjYjcxNDNjYWE1YTAzMTQ3NTU2ZWU3MjQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWYzY2M5NjU3Y2RiNGNiOGE2ZjhkY2MxNTEwNTViNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmY0MGI1MTk2MzZiNDM3MjllOTBlNjU4MWUyNzRmZjIgPSAkKGA8ZGl2IGlkPSJodG1sXzZmNDBiNTE5NjM2YjQzNzI5ZTkwZTY1ODFlMjc0ZmYyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaHVuZzEyNzQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SHVuZ2FyaWFuPC9hPjxicj5jb25zb25hbnRzOiAyNjxicj52b3dlbHM6IDE0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWYzY2M5NjU3Y2RiNGNiOGE2ZjhkY2MxNTEwNTViNDMuc2V0Q29udGVudChodG1sXzZmNDBiNTE5NjM2YjQzNzI5ZTkwZTY1ODFlMjc0ZmYyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNGU2MDNiMzMwZGIwNDdmMTg2ZDM5MWY1ZTZlYzY1ZWMuYmluZFBvcHVwKHBvcHVwX2FmM2NjOTY1N2NkYjRjYjhhNmY4ZGNjMTUxMDU1YjQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMWY4MzcwMmMyNDVkNGE0Njk3M2IwM2FmZmNlNjg3ZjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQxLjg1MDM5Njk5OTk5OTk5NCwgNDMuNzg2MTNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2FhMDdjZTAzODYxZjQ1MGY5OTBiZTdlYzM2NmQ0MGE4ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC40OTE0MTYgMTUuMDI2ODg4IDM4Ljk1NTk2NSAxMy45MjIxMiAzNy4yNzM3MDggMTMuMDg0NDU1IEMgMzUuNTkxNDUgMTIuMjQ2NzkxIDMzLjc4NDUxIDExLjY4NzI0NiAzMS45MjMyNTcgMTEuNDI3NjEyIEMgMzAuMDYyMDA0IDExLjE2Nzk3OSAyOC4xNzA5MTcgMTEuMjExNjcxIDI2LjMyMzY0IDExLjU1Njk4NiBDIDI0LjQ3NjM2NCAxMS45MDIzMDIgMjIuNjk3MTk0IDEyLjU0NDcgMjEuMDU1NDE4IDEzLjQ1OTE2NCBDIDE5LjQxMzY0MSAxNC4zNzM2MjcgMTcuOTMwODUxIDE1LjU0ODEyOSAxNi42NjQ3OTIgMTYuOTM2OTMgQyAxNS4zOTg3MzMgMTguMzI1NzMxIDE0LjM2NjA1NiAxOS45MTA1NjUgMTMuNjA2OTc4IDIxLjYyOTcxNCBDIDEyLjg0Nzg5OSAyMy4zNDg4NjMgMTIuMzcyNDAyIDI1LjE3OTcxNiAxMi4xOTkwMDUgMjcuMDUwOTc0IEMgMTIuMDI1NjA3IDI4LjkyMjIzMiAxMi4xNTY1ODkgMzAuODA5Mjg0IDEyLjU4Njg1IDMyLjYzODY0MSBDIDEzLjAxNzExMSAzNC40Njc5OTkgMTMuNzQwOTkzIDM2LjIxNTYwMiAxNC43MzAzMDMgMzcuODEzMzkzIEMgMTUuNzE5NjE0IDM5LjQxMTE4NSAxNi45NjEzNDMgNDAuODM4MTUgMTguNDA3MTMzIDQyLjAzODcxOSBDIDE5Ljg1MjkyMiA0My4yMzkyODcgMjEuNDgzNzU4IDQ0LjE5NzY2OSAyMy4yMzYxMyA0NC44NzY1NDEgQyAyNC45ODg1MDEgNDUuNTU1NDEzIDI2LjgzOTM2MSA0NS45NDU4NDggMjguNzE2NjMgNDYuMDMyNjM5IEMgMzAuNTkzOSA0Ni4xMTk0MyAzMi40NzI4ODkgNDUuOTAxNDM3IDM0LjI4MDQyMyA0NS4zODcxNDkgQyAzNi4wODc5NTggNDQuODcyODYxIDM3LjgwMDI2NSA0NC4wNjkwNDIgMzkuMzUwNjYyIDQzLjAwNjk5NiBDIDQwLjkwMTA1OSA0MS45NDQ5NDkgNDIuMjY5MTU0IDQwLjYzODY0MyA0My40MDE2NyAzOS4xMzg5NDkgQyA0NC41MzQxODYgMzcuNjM5MjU2IDQ1LjQxNjIyNyAzNS45NjU4OTggNDYuMDEzNDQ0IDM0LjE4NDA0NCBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQ2LjAxMzQ0NCAzNC4xODQwNDQgQyA0Ny4wNDE1MiAzMS4xMTY2ODIgNDcuMTkzODIgMjcuODIyNDk0IDQ2LjQ1MzE0OSAyNC42NzMzNTggQyA0NS43MTI0NzkgMjEuNTI0MjIyIDQ0LjEwNzggMTguNjQzMjcyIDQxLjgyMDI2MyAxNi4zNTU3MzUgTCAyOS41MiAyOC42NTYgTCA0Ni4wMTM0NDQgMzQuMTg0MDQ0IHoiIHN0eWxlPSJmaWxsOiNjMjIwMDA7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgIDxnIGlkPSJ0ZXh0XzEiPiAgICA8IS0tIDI4IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTkuMTg3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSA4LjI5Njg3NSBMIDUzLjYwOTM3NSAwIEwgNy4zMjgxMjUgMCBMIDcuMzI4MTI1IDguMjk2ODc1IFEgMTIuOTM3NSAxNC4xMDkzNzUgMjIuNjI1IDIzLjg5MDYyNSBRIDMyLjMyODEyNSAzMy42ODc1IDM0LjgxMjUgMzYuNTMxMjUgUSAzOS41NDY4NzUgNDEuODQzNzUgNDEuNDIxODc1IDQ1LjUzMTI1IFEgNDMuMzEyNSA0OS4yMTg3NSA0My4zMTI1IDUyLjc4MTI1IFEgNDMuMzEyNSA1OC41OTM3NSAzOS4yMzQzNzUgNjIuMjUgUSAzNS4xNTYyNSA2NS45MjE4NzUgMjguNjA5Mzc1IDY1LjkyMTg3NSBRIDIzLjk2ODc1IDY1LjkyMTg3NSAxOC44MTI1IDY0LjMxMjUgUSAxMy42NzE4NzUgNjIuNzAzMTI1IDcuODEyNSA1OS40MjE4NzUgTCA3LjgxMjUgNjkuMzkwNjI1IFEgMTMuNzY1NjI1IDcxLjc4MTI1IDE4LjkzNzUgNzMgUSAyNC4xMjUgNzQuMjE4NzUgMjguNDIxODc1IDc0LjIxODc1IFEgMzkuNzUgNzQuMjE4NzUgNDYuNDg0Mzc1IDY4LjU0Njg3NSBRIDUzLjIxODc1IDYyLjg5MDYyNSA1My4yMTg3NSA1My40MjE4NzUgUSA1My4yMTg3NSA0OC45MjE4NzUgNTEuNTMxMjUgNDQuODkwNjI1IFEgNDkuODU5Mzc1IDQwLjg3NSA0NS40MDYyNSAzNS40MDYyNSBRIDQ0LjE4NzUgMzMuOTg0Mzc1IDM3LjY0MDYyNSAyNy4yMTg3NSBRIDMxLjEwOTM3NSAyMC40NTMxMjUgMTkuMTg3NSA4LjI5Njg3NSB6IiBpZD0iRGVqYVZ1U2Fucy01MCIvPiAgICAgPHBhdGggZD0iTSAzMS43ODEyNSAzNC42MjUgUSAyNC43NSAzNC42MjUgMjAuNzE4NzUgMzAuODU5Mzc1IFEgMTYuNzAzMTI1IDI3LjA5Mzc1IDE2LjcwMzEyNSAyMC41MTU2MjUgUSAxNi43MDMxMjUgMTMuOTIxODc1IDIwLjcxODc1IDEwLjE1NjI1IFEgMjQuNzUgNi4zOTA2MjUgMzEuNzgxMjUgNi4zOTA2MjUgUSAzOC44MTI1IDYuMzkwNjI1IDQyLjg1OTM3NSAxMC4xNzE4NzUgUSA0Ni45MjE4NzUgMTMuOTY4NzUgNDYuOTIxODc1IDIwLjUxNTYyNSBRIDQ2LjkyMTg3NSAyNy4wOTM3NSA0Mi44OTA2MjUgMzAuODU5Mzc1IFEgMzguODc1IDM0LjYyNSAzMS43ODEyNSAzNC42MjUgek0gMjEuOTIxODc1IDM4LjgxMjUgUSAxNS41NzgxMjUgNDAuMzc1IDEyLjAzMTI1IDQ0LjcxODc1IFEgOC41IDQ5LjA3ODEyNSA4LjUgNTUuMzI4MTI1IFEgOC41IDY0LjA2MjUgMTQuNzE4NzUgNjkuMTQwNjI1IFEgMjAuOTUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IFEgNDIuNjcxODc1IDc0LjIxODc1IDQ4Ljg3NSA2OS4xNDA2MjUgUSA1NS4wNzgxMjUgNjQuMDYyNSA1NS4wNzgxMjUgNTUuMzI4MTI1IFEgNTUuMDc4MTI1IDQ5LjA3ODEyNSA1MS41MzEyNSA0NC43MTg3NSBRIDQ4IDQwLjM3NSA0MS43MDMxMjUgMzguODEyNSBRIDQ4LjgyODEyNSAzNy4xNTYyNSA1Mi43OTY4NzUgMzIuMzEyNSBRIDU2Ljc4MTI1IDI3LjQ4NDM3NSA1Ni43ODEyNSAyMC41MTU2MjUgUSA1Ni43ODEyNSA5LjkwNjI1IDUwLjMxMjUgNC4yMzQzNzUgUSA0My44NDM3NSAtMS40MjE4NzUgMzEuNzgxMjUgLTEuNDIxODc1IFEgMTkuNzM0Mzc1IC0xLjQyMTg3NSAxMy4yNSA0LjIzNDM3NSBRIDYuNzgxMjUgOS45MDYyNSA2Ljc4MTI1IDIwLjUxNTYyNSBRIDYuNzgxMjUgMjcuNDg0Mzc1IDEwLjc4MTI1IDMyLjMxMjUgUSAxNC43OTY4NzUgMzcuMTU2MjUgMjEuOTIxODc1IDM4LjgxMjUgek0gMTguMzEyNSA1NC4zOTA2MjUgUSAxOC4zMTI1IDQ4LjczNDM3NSAyMS44NDM3NSA0NS41NjI1IFEgMjUuMzkwNjI1IDQyLjM5MDYyNSAzMS43ODEyNSA0Mi4zOTA2MjUgUSAzOC4xNDA2MjUgNDIuMzkwNjI1IDQxLjcxODc1IDQ1LjU2MjUgUSA0NS4zMTI1IDQ4LjczNDM3NSA0NS4zMTI1IDU0LjM5MDYyNSBRIDQ1LjMxMjUgNjAuMDYyNSA0MS43MTg3NSA2My4yMzQzNzUgUSAzOC4xNDA2MjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgUSAyNS4zOTA2MjUgNjYuNDA2MjUgMjEuODQzNzUgNjMuMjM0Mzc1IFEgMTguMzEyNSA2MC4wNjI1IDE4LjMxMjUgNTQuMzkwNjI1IHoiIGlkPSJEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjQwODM3IDMyLjIxMTkwMylzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU2Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gNiAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDMzLjAxNTYyNSA0MC4zNzUgUSAyNi4zNzUgNDAuMzc1IDIyLjQ4NDM3NSAzNS44MjgxMjUgUSAxOC42MDkzNzUgMzEuMjk2ODc1IDE4LjYwOTM3NSAyMy4zOTA2MjUgUSAxOC42MDkzNzUgMTUuNTMxMjUgMjIuNDg0Mzc1IDEwLjk1MzEyNSBRIDI2LjM3NSA2LjM5MDYyNSAzMy4wMTU2MjUgNi4zOTA2MjUgUSAzOS42NTYyNSA2LjM5MDYyNSA0My41MzEyNSAxMC45NTMxMjUgUSA0Ny40MDYyNSAxNS41MzEyNSA0Ny40MDYyNSAyMy4zOTA2MjUgUSA0Ny40MDYyNSAzMS4yOTY4NzUgNDMuNTMxMjUgMzUuODI4MTI1IFEgMzkuNjU2MjUgNDAuMzc1IDMzLjAxNTYyNSA0MC4zNzUgek0gNTIuNTkzNzUgNzEuMjk2ODc1IEwgNTIuNTkzNzUgNjIuMzEyNSBRIDQ4Ljg3NSA2NC4wNjI1IDQ1LjA5Mzc1IDY0Ljk4NDM3NSBRIDQxLjMxMjUgNjUuOTIxODc1IDM3LjU5Mzc1IDY1LjkyMTg3NSBRIDI3LjgyODEyNSA2NS45MjE4NzUgMjIuNjcxODc1IDU5LjMyODEyNSBRIDE3LjUzMTI1IDUyLjczNDM3NSAxNi43OTY4NzUgMzkuNDA2MjUgUSAxOS42NzE4NzUgNDMuNjU2MjUgMjQuMDE1NjI1IDQ1LjkyMTg3NSBRIDI4LjM3NSA0OC4xODc1IDMzLjU5Mzc1IDQ4LjE4NzUgUSA0NC41NzgxMjUgNDguMTg3NSA1MC45NTMxMjUgNDEuNTE1NjI1IFEgNTcuMzI4MTI1IDM0Ljg1OTM3NSA1Ny4zMjgxMjUgMjMuMzkwNjI1IFEgNTcuMzI4MTI1IDEyLjE1NjI1IDUwLjY4NzUgNS4zNTkzNzUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMzLjAxNTYyNSAtMS40MjE4NzUgUSAyMC4zNTkzNzUgLTEuNDIxODc1IDEzLjY3MTg3NSA4LjI2NTYyNSBRIDYuOTg0Mzc1IDE3Ljk2ODc1IDYuOTg0Mzc1IDM2LjM3NSBRIDYuOTg0Mzc1IDUzLjY1NjI1IDE1LjE4NzUgNjMuOTM3NSBRIDIzLjM5MDYyNSA3NC4yMTg3NSAzNy4yMDMxMjUgNzQuMjE4NzUgUSA0MC45MjE4NzUgNzQuMjE4NzUgNDQuNzAzMTI1IDczLjQ4NDM3NSBRIDQ4LjQ4NDM3NSA3Mi43NSA1Mi41OTM3NSA3MS4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTQiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTA2NjMgMzAuNjE4ODQ3KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU0Ii8+ICAgIDwvZz4gICA8L2c+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzFmODM3MDJjMjQ1ZDRhNDY5NzNiMDNhZmZjZTY4N2Y1LnNldEljb24oZGl2X2ljb25fYWEwN2NlMDM4NjFmNDUwZjk5MGJlN2VjMzY2ZDQwYTgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNGVkNWVmMGQ0NjVjNGViMDg1ZmQxZDgzMTQ1NmQwOTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGM0YWU5ZmQ4MjFkNDk0OThkMzg5ZWY2M2UxNjQzZWMgPSAkKGA8ZGl2IGlkPSJodG1sXzhjNGFlOWZkODIxZDQ5NDk4ZDM4OWVmNjNlMTY0M2VjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VvcmdpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI4PGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlZDVlZjBkNDY1YzRlYjA4NWZkMWQ4MzE0NTZkMDk5LnNldENvbnRlbnQoaHRtbF84YzRhZTlmZDgyMWQ0OTQ5OGQzODllZjYzZTE2NDNlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzFmODM3MDJjMjQ1ZDRhNDY5NzNiMDNhZmZjZTY4N2Y1LmJpbmRQb3B1cChwb3B1cF80ZWQ1ZWYwZDQ2NWM0ZWIwODVmZDFkODMxNDU2ZDA5OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzYzY2NiODI0Zjc0OTQ4OTY4YjJkZWY1ZWYzZTZlYmMyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYzgzMjNkYzU2NGY0ZmJhYmRmMjA4NzE4Yjg4NTg3Myk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fODRhOTYyNzFiMzI1NDU0YmI4YzA2Zjk2MWNjNWY0NmQgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjUxMjAyNiAxNS4wNDc0OTggMzkuMDAzNDEyIDEzLjk1NjMxMSAzNy4zNTEzODQgMTMuMTIzMzc2IEMgMzUuNjk5MzU3IDEyLjI5MDQ0MSAzMy45MjQ5NzQgMTEuNzI2Mzc2IDMyLjA5NTIzMiAxMS40NTI0NzggQyAzMC4yNjU0OSAxMS4xNzg1OCAyOC40MDM3MTMgMTEuMTk4MzQxIDI2LjU4MDE5NyAxMS41MTEwMTQgQyAyNC43NTY2ODEgMTEuODIzNjg3IDIyLjk5NDY3IDEyLjQyNTI4NyAyMS4zNjA2OTQgMTMuMjkzMDk5IEMgMTkuNzI2NzE5IDE0LjE2MDkxMSAxOC4yNDE2MDUgMTUuMjgzODczIDE2Ljk2MTQzIDE2LjYxOTU4NSBDIDE1LjY4MTI1NCAxNy45NTUyOTYgMTQuNjIyMzMzIDE5LjQ4NjczMSAxMy44MjQ2NTEgMjEuMTU2MDY2IEMgMTMuMDI2OTY5IDIyLjgyNTQgMTIuNTAwNjkzIDI0LjYxMTM1NiAxMi4yNjU2OTQgMjYuNDQ2NDk5IEMgMTIuMDMwNjk0IDI4LjI4MTY0MiAxMi4wODk5NjcgMzAuMTQyNTgxIDEyLjQ0MTI3NSAzMS45NTkwNDkgQyAxMi43OTI1ODMgMzMuNzc1NTE4IDEzLjQzMTQ0NyAzNS41MjQzNjMgMTQuMzMzNzQ1IDM3LjEzOTU1MSBDIDE1LjIzNjA0MyAzOC43NTQ3MzkgMTYuMzkwMjc0IDQwLjIxNTY4MiAxNy43NTI4NTcgNDEuNDY3MjE5IEMgMTkuMTE1NDM5IDQyLjcxODc1NSAyMC42NjkwMDUgNDMuNzQ0OTMxIDIyLjM1NDg5NSA0NC41MDcwMDIgQyAyNC4wNDA3ODUgNDUuMjY5MDcyIDI1LjgzNzUwOSA0NS43NTczMjIgMjcuNjc3MjI2IDQ1Ljk1MzMxNyBDIDI5LjUxNjk0NCA0Ni4xNDkzMTIgMzEuMzc2MjA1IDQ2LjA1MDU1MyAzMy4xODQ4MDcgNDUuNjYwNzY5IEMgMzQuOTkzNDEgNDUuMjcwOTg1IDM2LjcyODMwMSA0NC41OTUxNDUgMzguMzIzOTczIDQzLjY1ODc2OCBDIDM5LjkxOTY0NiA0Mi43MjIzOSA0MS4zNTU3NjEgNDEuNTM3NDA5IDQyLjU3ODA5NCA0MC4xNDg1NjkgQyA0My44MDA0MjcgMzguNzU5NzI5IDQ0Ljc5MzM5OCAzNy4xODQ3MzIgNDUuNTE5NTEzIDM1LjQ4MzA0NyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQ1LjUxOTUxMyAzNS40ODMwNDcgQyA0Ni44ODE5NTEgMzIuMjkwMTA5IDQ3LjI1Nzg5NyAyOC43NjEyNjIgNDYuNTk4NzI1IDI1LjM1Mjk1MSBDIDQ1LjkzOTU1MyAyMS45NDQ2MzkgNDQuMjc0OTYzIDE4LjgxMDQzNSA0MS44MjAyNjQgMTYuMzU1NzM2IEwgMjkuNTIgMjguNjU2IEwgNDUuNTE5NTEzIDM1LjQ4MzA0NyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAzMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDQwLjU3ODEyNSAzOS4zMTI1IFEgNDcuNjU2MjUgMzcuNzk2ODc1IDUxLjYyNSAzMyBRIDU1LjYwOTM3NSAyOC4yMTg3NSA1NS42MDkzNzUgMjEuMTg3NSBRIDU1LjYwOTM3NSAxMC40MDYyNSA0OC4xODc1IDQuNDg0Mzc1IFEgNDAuNzY1NjI1IC0xLjQyMTg3NSAyNy4wOTM3NSAtMS40MjE4NzUgUSAyMi41MTU2MjUgLTEuNDIxODc1IDE3LjY1NjI1IC0wLjUxNTYyNSBRIDEyLjc5Njg3NSAwLjM5MDYyNSA3LjYyNSAyLjIwMzEyNSBMIDcuNjI1IDExLjcxODc1IFEgMTEuNzE4NzUgOS4zMjgxMjUgMTYuNTkzNzUgOC4xMDkzNzUgUSAyMS40ODQzNzUgNi44OTA2MjUgMjYuODEyNSA2Ljg5MDYyNSBRIDM2LjA3ODEyNSA2Ljg5MDYyNSA0MC45Mzc1IDEwLjU0Njg3NSBRIDQ1Ljc5Njg3NSAxNC4yMDMxMjUgNDUuNzk2ODc1IDIxLjE4NzUgUSA0NS43OTY4NzUgMjcuNjQwNjI1IDQxLjI4MTI1IDMxLjI2NTYyNSBRIDM2Ljc2NTYyNSAzNC45MDYyNSAyOC43MTg3NSAzNC45MDYyNSBMIDIwLjIxODc1IDM0LjkwNjI1IEwgMjAuMjE4NzUgNDMuMDE1NjI1IEwgMjkuMTA5Mzc1IDQzLjAxNTYyNSBRIDM2LjM3NSA0My4wMTU2MjUgNDAuMjM0Mzc1IDQ1LjkyMTg3NSBRIDQ0LjA5Mzc1IDQ4LjgyODEyNSA0NC4wOTM3NSA1NC4yOTY4NzUgUSA0NC4wOTM3NSA1OS45MDYyNSA0MC4xMDkzNzUgNjIuOTA2MjUgUSAzNi4xNDA2MjUgNjUuOTIxODc1IDI4LjcxODc1IDY1LjkyMTg3NSBRIDI0LjY1NjI1IDY1LjkyMTg3NSAyMC4wMTU2MjUgNjUuMDMxMjUgUSAxNS4zNzUgNjQuMTU2MjUgOS44MTI1IDYyLjMxMjUgTCA5LjgxMjUgNzEuMDkzNzUgUSAxNS40Mzc1IDcyLjY1NjI1IDIwLjM0Mzc1IDczLjQzNzUgUSAyNS4yNSA3NC4yMTg3NSAyOS41OTM3NSA3NC4yMTg3NSBRIDQwLjgyODEyNSA3NC4yMTg3NSA0Ny4zNTkzNzUgNjkuMTA5Mzc1IFEgNTMuOTA2MjUgNjQuMDE1NjI1IDUzLjkwNjI1IDU1LjMyODEyNSBRIDUzLjkwNjI1IDQ5LjI2NTYyNSA1MC40Mzc1IDQ1LjA5Mzc1IFEgNDYuOTY4NzUgNDAuOTIxODc1IDQwLjU3ODEyNSAzOS4zMTI1IHoiIGlkPSJEZWphVnVTYW5zLTUxIi8+ICAgICA8cGF0aCBkPSJNIDMxLjc4MTI1IDY2LjQwNjI1IFEgMjQuMTcxODc1IDY2LjQwNjI1IDIwLjMyODEyNSA1OC45MDYyNSBRIDE2LjUgNTEuNDIxODc1IDE2LjUgMzYuMzc1IFEgMTYuNSAyMS4zOTA2MjUgMjAuMzI4MTI1IDEzLjg5MDYyNSBRIDI0LjE3MTg3NSA2LjM5MDYyNSAzMS43ODEyNSA2LjM5MDYyNSBRIDM5LjQ1MzEyNSA2LjM5MDYyNSA0My4yODEyNSAxMy44OTA2MjUgUSA0Ny4xMjUgMjEuMzkwNjI1IDQ3LjEyNSAzNi4zNzUgUSA0Ny4xMjUgNTEuNDIxODc1IDQzLjI4MTI1IDU4LjkwNjI1IFEgMzkuNDUzMTI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IHpNIDMxLjc4MTI1IDc0LjIxODc1IFEgNDQuMDQ2ODc1IDc0LjIxODc1IDUwLjUxNTYyNSA2NC41MTU2MjUgUSA1Ni45ODQzNzUgNTQuODI4MTI1IDU2Ljk4NDM3NSAzNi4zNzUgUSA1Ni45ODQzNzUgMTcuOTY4NzUgNTAuNTE1NjI1IDguMjY1NjI1IFEgNDQuMDQ2ODc1IC0xLjQyMTg3NSAzMS43ODEyNSAtMS40MjE4NzUgUSAxOS41MzEyNSAtMS40MjE4NzUgMTMuMDYyNSA4LjI2NTYyNSBRIDYuNTkzNzUgMTcuOTY4NzUgNi41OTM3NSAzNi4zNzUgUSA2LjU5Mzc1IDU0LjgyODEyNSAxMy4wNjI1IDY0LjUxNTYyNSBRIDE5LjUzMTI1IDc0LjIxODc1IDMxLjc4MTI1IDc0LjIxODc1IHoiIGlkPSJEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjM3OTI1NSAzMi4wNzU5ODUpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTEiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy00OCIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDcgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSA4LjIwMzEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA3Mi45MDYyNSBMIDU1LjA3ODEyNSA2OC43MDMxMjUgTCAyOC42MDkzNzUgMCBMIDE4LjMxMjUgMCBMIDQzLjIxODc1IDY0LjU5Mzc1IEwgOC4yMDMxMjUgNjQuNTkzNzUgeiIgaWQ9IkRlamFWdVNhbnMtNTUiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTM1NzQ1IDMwLjc1NDc2NSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NSIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82M2NjYjgyNGY3NDk0ODk2OGIyZGVmNWVmM2U2ZWJjMi5zZXRJY29uKGRpdl9pY29uXzg0YTk2MjcxYjMyNTQ1NGJiOGMwNmY5NjFjYzVmNDZkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA1ZmVlYmQ5ZTFhYzRjYzZiNTU5YjRlYjI4MjA2NzQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzcwYmUwYjUzYjExYjQ0OTU5YjNhYjU0YzBhMTE0NjQ3ID0gJChgPGRpdiBpZD0iaHRtbF83MGJlMGI1M2IxMWI0NDk1OWIzYWI1NGMwYTExNDY0NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPmNvbnNvbmFudHM6IDMwPGJyPnZvd2VsczogNzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA1ZmVlYmQ5ZTFhYzRjYzZiNTU5YjRlYjI4MjA2NzQ0LnNldENvbnRlbnQoaHRtbF83MGJlMGI1M2IxMWI0NDk1OWIzYWI1NGMwYTExNDY0Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzYzY2NiODI0Zjc0OTQ4OTY4YjJkZWY1ZWYzZTZlYmMyLmJpbmRQb3B1cChwb3B1cF8wNWZlZWJkOWUxYWM0Y2M2YjU1OWI0ZWIyODIwNjc0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Q1N2M0MjM5Nzg4NDQwOGQ4YzY2YjBhZjY3OTZjMGRkID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstNS4yNjkxOCwgMzUuNDgwOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9jYzgzMjNkYzU2NGY0ZmJhYmRmMjA4NzE4Yjg4NTg3Myk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fN2I4ZmRmYjYwNTdlNDhkNzhiMGE0OWEwMzRhNjgzYTUgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFszNy43MjgsMzcuNzI4XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNTcuNnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1Ny42IDU3LjYiIHdpZHRoPSI1Ny42cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDU3LjYgTCA1Ny42IDU3LjYgTCA1Ny42IDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gNDEuODIwMjY0IDE2LjM1NTczNiBDIDQwLjQxNTQ3OCAxNC45NTA5NSAzOC43ODAzNjIgMTMuNzk3MTQ2IDM2Ljk4NTk4MyAxMi45NDQ0NzMgQyAzNS4xOTE2MDQgMTIuMDkxOCAzMy4yNjQzNDIgMTEuNTUyNzkyIDMxLjI4Nzk2MiAxMS4zNTA4NzcgQyAyOS4zMTE1ODIgMTEuMTQ4OTYyIDI3LjMxNTEzOSAxMS4yODcxMDggMjUuMzg1NDA2IDExLjc1OTMxMSBDIDIzLjQ1NTY3MyAxMi4yMzE1MTMgMjEuNjIxMDE3IDEzLjAzMDgzMSAxOS45NjExODEgMTQuMTIyNTIzIEMgMTguMzAxMzQ1IDE1LjIxNDIxNCAxNi44NDA3MjkgMTYuNTgyMjMxIDE1LjY0MjgxNiAxOC4xNjcxMTMgQyAxNC40NDQ5MDMgMTkuNzUxOTk2IDEzLjUyNzMwNSAyMS41MzA0NDUgMTIuOTI5OTAzIDIzLjQyNTE2MyBDIDEyLjMzMjUgMjUuMzE5ODgxIDEyLjA2NDA3NyAyNy4zMDMwMTUgMTIuMTM2Mjk4IDI5LjI4ODM2OSBDIDEyLjIwODUyIDMxLjI3MzcyMyAxMi42MjAzMjQgMzMuMjMyMTExIDEzLjM1MzgxNCAzNS4wNzg0MTYgQyAxNC4wODczMDQgMzYuOTI0NzIgMTUuMTMxNjk2IDM4LjYzMTc5OCAxNi40NDE1OTcgNDAuMTI1NDUzIEMgMTcuNzUxNDk4IDQxLjYxOTEwOSAxOS4zMDc2NTEgNDIuODc3Mzg0IDIxLjA0MjQyIDQzLjg0NTU4OSBDIDIyLjc3NzE5IDQ0LjgxMzc5NSAyNC42NjUwNzMgNDUuNDc3Njk4IDI2LjYyNDAxNSA0NS44MDg0NDIgQyAyOC41ODI5NTcgNDYuMTM5MTg2IDMwLjU4NDE2MSA0Ni4xMzE5MDkgMzIuNTQwNjQ2IDQ1Ljc4NjkyOCBDIDM0LjQ5NzEzMiA0NS40NDE5NDYgMzYuMzgwMTM2IDQ0Ljc2NDMzMiAzOC4xMDc4MTkgNDMuNzgzNTM2IEMgMzkuODM1NTAxIDQyLjgwMjc0IDQxLjM4MjQ2MyA0MS41MzMxODIgNDIuNjgxNDY3IDQwLjAzMDA0IEMgNDMuOTgwNDcgMzguNTI2ODk4IDQ1LjAxMjQyIDM2LjgxMjI3IDQ1LjczMjQ2NCAzNC45NjA2OCBDIDQ2LjQ1MjUwOCAzMy4xMDkwOTEgNDYuODUwMDYgMzEuMTQ3NzU5IDQ2LjkwNzg0MSAyOS4xNjE5MzMgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSA0Ni45MDc4NDEgMjkuMTYxOTMzIEMgNDYuOTc2NzU3IDI2Ljc5MzQ0NiA0Ni41NjEwMTYgMjQuNDM1NjYyIDQ1LjY4NjE4NSAyMi4yMzM1ODQgQyA0NC44MTEzNTUgMjAuMDMxNTA1IDQzLjQ5NTc0NSAxOC4wMzEyMTcgNDEuODIwMjYzIDE2LjM1NTczNSBMIDI5LjUyIDI4LjY1NiBMIDQ2LjkwNzg0MSAyOS4xNjE5MzMgeiIgc3R5bGU9ImZpbGw6I2MyMjAwMDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICAgPGcgaWQ9InRleHRfMSI+ICAgIDwhLS0gNDcgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAzNy43OTY4NzUgNjQuMzEyNSBMIDEyLjg5MDYyNSAyNS4zOTA2MjUgTCAzNy43OTY4NzUgMjUuMzkwNjI1IHpNIDM1LjIwMzEyNSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSA3Mi45MDYyNSBMIDQ3LjYwOTM3NSAyNS4zOTA2MjUgTCA1OC4wMTU2MjUgMjUuMzkwNjI1IEwgNTguMDE1NjI1IDE3LjE4NzUgTCA0Ny42MDkzNzUgMTcuMTg3NSBMIDQ3LjYwOTM3NSAwIEwgMzcuNzk2ODc1IDAgTCAzNy43OTY4NzUgMTcuMTg3NSBMIDQuODkwNjI1IDE3LjE4NzUgTCA0Ljg5MDYyNSAyNi43MDMxMjUgeiIgaWQ9IkRlamFWdVNhbnMtNTIiLz4gICAgIDxwYXRoIGQ9Ik0gOC4yMDMxMjUgNzIuOTA2MjUgTCA1NS4wNzgxMjUgNzIuOTA2MjUgTCA1NS4wNzgxMjUgNjguNzAzMTI1IEwgMjguNjA5Mzc1IDAgTCAxOC4zMTI1IDAgTCA0My4yMTg3NSA2NC41OTM3NSBMIDguMjAzMTI1IDY0LjU5Mzc1IHoiIGlkPSJEZWphVnVTYW5zLTU1Ii8+ICAgIDwvZGVmcz4gICAgPGcgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzLjU2MTc2MyAzMi42OTk4NTgpc2NhbGUoMC4xIC0wLjEpIj4gICAgIDx1c2UgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTIiLz4gICAgIDx1c2UgeD0iNjMuNjIzMDQ3IiB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NSIvPiAgICA8L2c+ICAgPC9nPiAgIDxnIGlkPSJ0ZXh0XzIiPiAgICA8IS0tIDcgLS0+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi43NTMyMzcgMzAuMTMwODkyKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTU1Ii8+ICAgIDwvZz4gICA8L2c+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Q1N2M0MjM5Nzg4NDQwOGQ4YzY2YjBhZjY3OTZjMGRkLnNldEljb24oZGl2X2ljb25fN2I4ZmRmYjYwNTdlNDhkNzhiMGE0OWEwMzRhNjgzYTUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGRjYzE5OGYxZTg1NGEyMWE2YTJkMmQ3ZDc4MzI0ZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWU1NzA1MDE0NDk2NDc3NDllZjIzNjFhNWRkNjlhY2UgPSAkKGA8ZGl2IGlkPSJodG1sXzVlNTcwNTAxNDQ5NjQ3NzQ5ZWYyMzYxYTVkZDY5YWNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGRjYzE5OGYxZTg1NGEyMWE2YTJkMmQ3ZDc4MzI0ZjMuc2V0Q29udGVudChodG1sXzVlNTcwNTAxNDQ5NjQ3NzQ5ZWYyMzYxYTVkZDY5YWNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDU3YzQyMzk3ODg0NDA4ZDhjNjZiMGFmNjc5NmMwZGQuYmluZFBvcHVwKHBvcHVwXzhkY2MxOThmMWU4NTRhMjFhNmEyZDJkN2Q3ODMyNGYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMTdkYTA3NzUyZjYxNDJmMmFjMWFhMGNhZGVlYzY4OTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfY2M4MzIzZGM1NjRmNGZiYWJkZjIwODcxOGI4ODU4NzMpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzRlNDlmNWZlOTZkZTQ1MWM4Yjk4N2Y2ODBiYmQ3NzcwID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMzcuNzI4LDM3LjcyOF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjU3LjZwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNTcuNiA1Ny42IiB3aWR0aD0iNTcuNnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA1Ny42IEwgNTcuNiA1Ny42IEwgNTcuNiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDQxLjgyMDI2NCAxNi4zNTU3MzYgQyA0MC4zNzQxNzMgMTQuOTA5NjQ2IDM4LjY4NDMzMSAxMy43Mjk4MzYgMzYuODI4NTA5IDEyLjg3MDYwNSBDIDM0Ljk3MjY4NiAxMi4wMTEzNzUgMzIuOTc5Nzk1IDExLjQ4NjEwOSAzMC45NDE1NTUgMTEuMzE4OTgzIEMgMjguOTAzMzE0IDExLjE1MTg1NyAyNi44NTE0NzkgMTEuMzQ1NDczIDI0Ljg4MDQ3OSAxMS44OTA5MjIgQyAyMi45MDk0NzkgMTIuNDM2MzcyIDIxLjA1MDAyMiAxMy4zMjUxNTUgMTkuMzg3Njg0IDE0LjUxNjM2OSBDIDE3LjcyNTM0NyAxNS43MDc1ODMgMTYuMjg2MDI4IDE3LjE4MjY2OSAxNS4xMzU5NjkgMTguODczNzM5IEMgMTMuOTg1OTA5IDIwLjU2NDgwOSAxMy4xNDMwMjcgMjIuNDQ1NTE4IDEyLjY0NjExMyAyNC40MjkzMSBDIDEyLjE0OTE5OCAyNi40MTMxMDMgMTIuMDA1OTk0IDI4LjQ2OTA3MiAxMi4yMjMwOTEgMzAuNTAyNTk3IEMgMTIuNDQwMTg4IDMyLjUzNjEyMiAxMy4wMTQyMDMgMzQuNTE1NTIyIDEzLjkxODcxOSAzNi4zNDk2OTkgQyAxNC44MjMyMzUgMzguMTgzODc3IDE2LjA0NDE2IDM5Ljg0NDI1NiAxNy41MjUzMDMgNDEuMjU0NDIyIEMgMTkuMDA2NDQ3IDQyLjY2NDU4OCAyMC43MjQ3MzQgNDMuODAyNTcyIDIyLjYwMTA4NCA0NC42MTYgQyAyNC40Nzc0MzUgNDUuNDI5NDI4IDI2LjQ4MjYxNiA0NS45MDU2MjcgMjguNTI0MzQ0IDQ2LjAyMjY4MiBDIDMwLjU2NjA3MiA0Ni4xMzk3MzcgMzIuNjEyNTM4IDQ1Ljg5NTgyNCAzNC41Njk1NTggNDUuMzAyMTY5IEMgMzYuNTI2NTc5IDQ0LjcwODUxNCAzOC4zNjM2NjQgNDMuNzc0MzY1IDM5Ljk5NjI2NyA0Mi41NDI3MTQgQyA0MS42Mjg4NyA0MS4zMTEwNjMgNDMuMDMxNTU1IDM5LjgwMTA5OSA0NC4xMzk3NjcgMzguMDgyMzE0IEMgNDUuMjQ3OTc5IDM2LjM2MzUyOSA0Ni4wNDQ0NTMgMzQuNDYyNzAyIDQ2LjQ5MjUzMyAzMi40NjczMTIgQyA0Ni45NDA2MTMgMzAuNDcxOTIyIDQ3LjAzMzMxOCAyOC40MTMwNTggNDYuNzY2MzgyIDI2LjM4NTQ3MyBMIDI5LjUyIDI4LjY1NiBMIDQxLjgyMDI2NCAxNi4zNTU3MzYgeiIgc3R5bGU9ImZpbGw6IzAwMjBjMjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDQ2Ljc2NjM4MiAyNi4zODU0NzMgQyA0Ni41MTgxNTUgMjQuNDk5OTk3IDQ1Ljk2MjQwMiAyMi42Njc5MjYgNDUuMTIxMjgyIDIwLjk2MjMwMiBDIDQ0LjI4MDE2MSAxOS4yNTY2NzggNDMuMTY1MDAyIDE3LjcwMDQ3NSA0MS44MjAyNjYgMTYuMzU1NzM4IEwgMjkuNTIgMjguNjU2IEwgNDYuNzY2MzgyIDI2LjM4NTQ3MyB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSA0MyAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDM3Ljc5Njg3NSA2NC4zMTI1IEwgMTIuODkwNjI1IDI1LjM5MDYyNSBMIDM3Ljc5Njg3NSAyNS4zOTA2MjUgek0gMzUuMjAzMTI1IDcyLjkwNjI1IEwgNDcuNjA5Mzc1IDcyLjkwNjI1IEwgNDcuNjA5Mzc1IDI1LjM5MDYyNSBMIDU4LjAxNTYyNSAyNS4zOTA2MjUgTCA1OC4wMTU2MjUgMTcuMTg3NSBMIDQ3LjYwOTM3NSAxNy4xODc1IEwgNDcuNjA5Mzc1IDAgTCAzNy43OTY4NzUgMCBMIDM3Ljc5Njg3NSAxNy4xODc1IEwgNC44OTA2MjUgMTcuMTg3NSBMIDQuODkwNjI1IDI2LjcwMzEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MiIvPiAgICAgPHBhdGggZD0iTSA0MC41NzgxMjUgMzkuMzEyNSBRIDQ3LjY1NjI1IDM3Ljc5Njg3NSA1MS42MjUgMzMgUSA1NS42MDkzNzUgMjguMjE4NzUgNTUuNjA5Mzc1IDIxLjE4NzUgUSA1NS42MDkzNzUgMTAuNDA2MjUgNDguMTg3NSA0LjQ4NDM3NSBRIDQwLjc2NTYyNSAtMS40MjE4NzUgMjcuMDkzNzUgLTEuNDIxODc1IFEgMjIuNTE1NjI1IC0xLjQyMTg3NSAxNy42NTYyNSAtMC41MTU2MjUgUSAxMi43OTY4NzUgMC4zOTA2MjUgNy42MjUgMi4yMDMxMjUgTCA3LjYyNSAxMS43MTg3NSBRIDExLjcxODc1IDkuMzI4MTI1IDE2LjU5Mzc1IDguMTA5Mzc1IFEgMjEuNDg0Mzc1IDYuODkwNjI1IDI2LjgxMjUgNi44OTA2MjUgUSAzNi4wNzgxMjUgNi44OTA2MjUgNDAuOTM3NSAxMC41NDY4NzUgUSA0NS43OTY4NzUgMTQuMjAzMTI1IDQ1Ljc5Njg3NSAyMS4xODc1IFEgNDUuNzk2ODc1IDI3LjY0MDYyNSA0MS4yODEyNSAzMS4yNjU2MjUgUSAzNi43NjU2MjUgMzQuOTA2MjUgMjguNzE4NzUgMzQuOTA2MjUgTCAyMC4yMTg3NSAzNC45MDYyNSBMIDIwLjIxODc1IDQzLjAxNTYyNSBMIDI5LjEwOTM3NSA0My4wMTU2MjUgUSAzNi4zNzUgNDMuMDE1NjI1IDQwLjIzNDM3NSA0NS45MjE4NzUgUSA0NC4wOTM3NSA0OC44MjgxMjUgNDQuMDkzNzUgNTQuMjk2ODc1IFEgNDQuMDkzNzUgNTkuOTA2MjUgNDAuMTA5Mzc1IDYyLjkwNjI1IFEgMzYuMTQwNjI1IDY1LjkyMTg3NSAyOC43MTg3NSA2NS45MjE4NzUgUSAyNC42NTYyNSA2NS45MjE4NzUgMjAuMDE1NjI1IDY1LjAzMTI1IFEgMTUuMzc1IDY0LjE1NjI1IDkuODEyNSA2Mi4zMTI1IEwgOS44MTI1IDcxLjA5Mzc1IFEgMTUuNDM3NSA3Mi42NTYyNSAyMC4zNDM3NSA3My40Mzc1IFEgMjUuMjUgNzQuMjE4NzUgMjkuNTkzNzUgNzQuMjE4NzUgUSA0MC44MjgxMjUgNzQuMjE4NzUgNDcuMzU5Mzc1IDY5LjEwOTM3NSBRIDUzLjkwNjI1IDY0LjAxNTYyNSA1My45MDYyNSA1NS4zMjgxMjUgUSA1My45MDYyNSA0OS4yNjU2MjUgNTAuNDM3NSA0NS4wOTM3NSBRIDQ2Ljk2ODc1IDQwLjkyMTg3NSA0MC41NzgxMjUgMzkuMzEyNSB6IiBpZD0iRGVqYVZ1U2Fucy01MSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy42NzQ3NDQgMzIuOTU0MTE1KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUyIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTEiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSA1IC0tPiAgICA8ZGVmcz4gICAgIDxwYXRoIGQ9Ik0gMTAuNzk2ODc1IDcyLjkwNjI1IEwgNDkuNTE1NjI1IDcyLjkwNjI1IEwgNDkuNTE1NjI1IDY0LjU5Mzc1IEwgMTkuODI4MTI1IDY0LjU5Mzc1IEwgMTkuODI4MTI1IDQ2LjczNDM3NSBRIDIxLjk2ODc1IDQ3LjQ2ODc1IDI0LjEwOTM3NSA0Ny44MjgxMjUgUSAyNi4yNjU2MjUgNDguMTg3NSAyOC40MjE4NzUgNDguMTg3NSBRIDQwLjYyNSA0OC4xODc1IDQ3Ljc1IDQxLjUgUSA1NC44OTA2MjUgMzQuODEyNSA1NC44OTA2MjUgMjMuMzkwNjI1IFEgNTQuODkwNjI1IDExLjYyNSA0Ny41NjI1IDUuMDkzNzUgUSA0MC4yMzQzNzUgLTEuNDIxODc1IDI2LjkwNjI1IC0xLjQyMTg3NSBRIDIyLjMxMjUgLTEuNDIxODc1IDE3LjU0Njg3NSAtMC42NDA2MjUgUSAxMi43OTY4NzUgMC4xNDA2MjUgNy43MTg3NSAxLjcwMzEyNSBMIDcuNzE4NzUgMTEuNjI1IFEgMTIuMTA5Mzc1IDkuMjM0Mzc1IDE2Ljc5Njg3NSA4LjA2MjUgUSAyMS40ODQzNzUgNi44OTA2MjUgMjYuNzAzMTI1IDYuODkwNjI1IFEgMzUuMTU2MjUgNi44OTA2MjUgNDAuMDc4MTI1IDExLjMyODEyNSBRIDQ1LjAxNTYyNSAxNS43NjU2MjUgNDUuMDE1NjI1IDIzLjM5MDYyNSBRIDQ1LjAxNTYyNSAzMSA0MC4wNzgxMjUgMzUuNDM3NSBRIDM1LjE1NjI1IDM5Ljg5MDYyNSAyNi43MDMxMjUgMzkuODkwNjI1IFEgMjIuNzUgMzkuODkwNjI1IDE4LjgxMjUgMzkuMDE1NjI1IFEgMTQuODkwNjI1IDM4LjE0MDYyNSAxMC43OTY4NzUgMzYuMjgxMjUgeiIgaWQ9IkRlamFWdVNhbnMtNTMiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuNjQwMjU2IDI5Ljg3NjYzNSlzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MyIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8xN2RhMDc3NTJmNjE0MmYyYWMxYWEwY2FkZWVjNjg5MC5zZXRJY29uKGRpdl9pY29uXzRlNDlmNWZlOTZkZTQ1MWM4Yjk4N2Y2ODBiYmQ3NzcwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJmMjE3ODFiYTYzZTRjZWM4MTNjZjU1ZTU0OGIyZjJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlZWE1ZDY4YzBmYjQ0MTc5MzBmYWUxZTc3ZDczZWVhID0gJChgPGRpdiBpZD0iaHRtbF8wZWVhNWQ2OGMwZmI0NDE3OTMwZmFlMWU3N2Q3M2VlYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPmNvbnNvbmFudHM6IDQzPGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJmMjE3ODFiYTYzZTRjZWM4MTNjZjU1ZTU0OGIyZjJhLnNldENvbnRlbnQoaHRtbF8wZWVhNWQ2OGMwZmI0NDE3OTMwZmFlMWU3N2Q3M2VlYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE3ZGEwNzc1MmY2MTQyZjJhYzFhYTBjYWRlZWM2ODkwLmJpbmRQb3B1cChwb3B1cF8yZjIxNzgxYmE2M2U0Y2VjODEzY2Y1NWU1NDhiMmYyYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2EwYWUyMTAzMTc4MTQ0MWZiOGU2MmMzZTU0NjlhNmM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9iMjljMzk3M2FlNmU0NjA3YTBhOTg5ODgzYTM1MDEzZCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgNDAuNTY1NTM0IDE1LjEwMTAwNyAzOS4xMjYxNzEgMTQuMDQ1NjIxIDM3LjU1MjIwOSAxMy4yMjYyNjkgQyAzNS45NzgyNDggMTIuNDA2OTE3IDM0LjI4ODE0MiAxMS44MzMyMDMgMzIuNTQwNjQ1IDExLjUyNTA3MiBDIDMwLjc5MzE0NyAxMS4yMTY5NDEgMjkuMDA4NzQ1IDExLjE3ODAwNSAyNy4yNDk0NzEgMTEuNDA5NjE4IEMgMjUuNDkwMTk2IDExLjY0MTIzMSAyMy43NzY2NzMgMTIuMTQwNjc4IDIyLjE2ODQ3IDEyLjg5MDU5NSBDIDIwLjU2MDI2OCAxMy42NDA1MTIgMTkuMDc2MjM5IDE0LjYzMjEwOSAxNy43Njc5NzMgMTUuODMwOTE0IEMgMTYuNDU5NzA3IDE3LjAyOTcxOCAxNS4zNDI1NDIgMTguNDIxNjc3IDE0LjQ1NTMxNSAxOS45NTg0IEMgMTMuNTY4MDg3IDIxLjQ5NTEyNCAxMi45MjExOTggMjMuMTU4NTk2IDEyLjUzNzEzNiAyNC44OTA5OSBDIDEyLjE1MzA3MyAyNi42MjMzODQgMTIuMDM2MzQgMjguNDA0Mzg5IDEyLjE5MDk5NCAzMC4xNzIwOTIgQyAxMi4zNDU2NDggMzEuOTM5Nzk1IDEyLjc2OTg3NiAzMy42NzM0NzMgMTMuNDQ4OTMxIDM1LjMxMjg1NiBDIDE0LjEyNzk4NiAzNi45NTIyMzkgMTUuMDUzOTA2IDM4LjQ3ODEwOCAxNi4xOTQ1MDQgMzkuODM3NDIgQyAxNy4zMzUxMDIgNDEuMTk2NzMxIDE4LjY3NzAwNiA0Mi4zNzM1NDkgMjAuMTczNTY3IDQzLjMyNjk2MyBDIDIxLjY3MDEyNyA0NC4yODAzNzggMjMuMzAzOCA0NC45OTkyMSAyNS4wMTc3OTIgNDUuNDU4NDczIEMgMjYuNzMxNzg0IDQ1LjkxNzczNiAyOC41MDYwMDMgNDYuMTEyMDQ0IDMwLjI3ODc2OSA0Ni4wMzQ2NDQgQyAzMi4wNTE1MzYgNDUuOTU3MjQzIDMzLjgwMjA2NyA0NS42MDkwNCAzNS40Njk1MSA0NS4wMDIxNDEgQyAzNy4xMzY5NTMgNDQuMzk1MjQxIDM4LjcwMTc1OCA0My41MzY3NTkgNDAuMTA5NTI4IDQyLjQ1NjUzOSBDIDQxLjUxNzI5OCA0MS4zNzYzMTkgNDIuNzUxNTI5IDQwLjA4NzAyNSA0My43NjkzMTQgMzguNjMzNDc2IEwgMjkuNTIgMjguNjU2IEwgNDEuODIwMjY0IDE2LjM1NTczNiB6IiBzdHlsZT0iZmlsbDojMDAyMGMyOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gNDMuNzY5MzE0IDM4LjYzMzQ3NiBDIDQ2LjExNDQ4NyAzNS4yODQyMjEgNDcuMjA1MzU5IDMxLjIxMzAzMyA0Ni44NDkwMDYgMjcuMTM5OTA3IEMgNDYuNDkyNjUzIDIzLjA2Njc4MSA0NC43MTE0IDE5LjI0Njg3MSA0MS44MjAyNjMgMTYuMzU1NzM1IEwgMjkuNTIgMjguNjU2IEwgNDMuNzY5MzE0IDM4LjYzMzQ3NiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyOCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgMzQuNjI1IFEgMjQuNzUgMzQuNjI1IDIwLjcxODc1IDMwLjg1OTM3NSBRIDE2LjcwMzEyNSAyNy4wOTM3NSAxNi43MDMxMjUgMjAuNTE1NjI1IFEgMTYuNzAzMTI1IDEzLjkyMTg3NSAyMC43MTg3NSAxMC4xNTYyNSBRIDI0Ljc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzguODEyNSA2LjM5MDYyNSA0Mi44NTkzNzUgMTAuMTcxODc1IFEgNDYuOTIxODc1IDEzLjk2ODc1IDQ2LjkyMTg3NSAyMC41MTU2MjUgUSA0Ni45MjE4NzUgMjcuMDkzNzUgNDIuODkwNjI1IDMwLjg1OTM3NSBRIDM4Ljg3NSAzNC42MjUgMzEuNzgxMjUgMzQuNjI1IHpNIDIxLjkyMTg3NSAzOC44MTI1IFEgMTUuNTc4MTI1IDQwLjM3NSAxMi4wMzEyNSA0NC43MTg3NSBRIDguNSA0OS4wNzgxMjUgOC41IDU1LjMyODEyNSBRIDguNSA2NC4wNjI1IDE0LjcxODc1IDY5LjE0MDYyNSBRIDIwLjk1MzEyNSA3NC4yMTg3NSAzMS43ODEyNSA3NC4yMTg3NSBRIDQyLjY3MTg3NSA3NC4yMTg3NSA0OC44NzUgNjkuMTQwNjI1IFEgNTUuMDc4MTI1IDY0LjA2MjUgNTUuMDc4MTI1IDU1LjMyODEyNSBRIDU1LjA3ODEyNSA0OS4wNzgxMjUgNTEuNTMxMjUgNDQuNzE4NzUgUSA0OCA0MC4zNzUgNDEuNzAzMTI1IDM4LjgxMjUgUSA0OC44MjgxMjUgMzcuMTU2MjUgNTIuNzk2ODc1IDMyLjMxMjUgUSA1Ni43ODEyNSAyNy40ODQzNzUgNTYuNzgxMjUgMjAuNTE1NjI1IFEgNTYuNzgxMjUgOS45MDYyNSA1MC4zMTI1IDQuMjM0Mzc1IFEgNDMuODQzNzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjczNDM3NSAtMS40MjE4NzUgMTMuMjUgNC4yMzQzNzUgUSA2Ljc4MTI1IDkuOTA2MjUgNi43ODEyNSAyMC41MTU2MjUgUSA2Ljc4MTI1IDI3LjQ4NDM3NSAxMC43ODEyNSAzMi4zMTI1IFEgMTQuNzk2ODc1IDM3LjE1NjI1IDIxLjkyMTg3NSAzOC44MTI1IHpNIDE4LjMxMjUgNTQuMzkwNjI1IFEgMTguMzEyNSA0OC43MzQzNzUgMjEuODQzNzUgNDUuNTYyNSBRIDI1LjM5MDYyNSA0Mi4zOTA2MjUgMzEuNzgxMjUgNDIuMzkwNjI1IFEgMzguMTQwNjI1IDQyLjM5MDYyNSA0MS43MTg3NSA0NS41NjI1IFEgNDUuMzEyNSA0OC43MzQzNzUgNDUuMzEyNSA1NC4zOTA2MjUgUSA0NS4zMTI1IDYwLjA2MjUgNDEuNzE4NzUgNjMuMjM0Mzc1IFEgMzguMTQwNjI1IDY2LjQwNjI1IDMxLjc4MTI1IDY2LjQwNjI1IFEgMjUuMzkwNjI1IDY2LjQwNjI1IDIxLjg0Mzc1IDYzLjIzNDM3NSBRIDE4LjMxMjUgNjAuMDYyNSAxOC4zMTI1IDU0LjM5MDYyNSB6IiBpZD0iRGVqYVZ1U2Fucy01NiIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMy4zMjkxOTkgMzEuNzE4NTkzKXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTUwIi8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNTYiLz4gICAgPC9nPiAgIDwvZz4gICA8ZyBpZD0idGV4dF8yIj4gICAgPCEtLSA4IC0tPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuOTg1ODAxIDMxLjExMjE1NilzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01NiIvPiAgICA8L2c+ICAgPC9nPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hMGFlMjEwMzE3ODE0NDFmYjhlNjJjM2U1NDY5YTZjNy5zZXRJY29uKGRpdl9pY29uX2IyOWMzOTczYWU2ZTQ2MDdhMGE5ODk4ODNhMzUwMTNkKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2ZDgzOTdlNjQyYjRlZTE5MmRhMjg3MzhhMjAzMDZjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkzNzE3M2RmMmMzZjQzYjdhOWY5YWQ1YzE3MDA4OGY3ID0gJChgPGRpdiBpZD0iaHRtbF85MzcxNzNkZjJjM2Y0M2I3YTlmOWFkNWMxNzAwODhmNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xha28xMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxha290YTwvYT48YnI+Y29uc29uYW50czogMjg8YnI+dm93ZWxzOiA4PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTZkODM5N2U2NDJiNGVlMTkyZGEyODczOGEyMDMwNmMuc2V0Q29udGVudChodG1sXzkzNzE3M2RmMmMzZjQzYjdhOWY5YWQ1YzE3MDA4OGY3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTBhZTIxMDMxNzgxNDQxZmI4ZTYyYzNlNTQ2OWE2YzcuYmluZFBvcHVwKHBvcHVwXzU2ZDgzOTdlNjQyYjRlZTE5MmRhMjg3MzhhMjAzMDZjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMGQxOWYzMzk2OGViNGE4N2E2ZjllMTFhYmQ4MjE1ZTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2NjODMyM2RjNTY0ZjRmYmFiZGYyMDg3MThiODg1ODczKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9jNzJjOTU0MzQxMDY0MzM5OGZjMTA1N2U4ZTk3NmM2NCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzM3LjcyOCwzNy43MjhdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI1Ny42cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDU3LjYgNTcuNiIgd2lkdGg9IjU3LjZwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNTcuNiBMIDU3LjYgNTcuNiBMIDU3LjYgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSA0MS44MjAyNjQgMTYuMzU1NzM2IEMgMzkuNjYxMjc3IDE0LjE5Njc1IDM2Ljk3MTQzOSAxMi42NDM3NzEgMzQuMDIyMjA5IDExLjg1MzUyNyBDIDMxLjA3Mjk3OCAxMS4wNjMyODMgMjcuOTY3MDIxIDExLjA2MzI4MyAyNS4wMTc3OSAxMS44NTM1MjcgQyAyMi4wNjg1NiAxMi42NDM3NzEgMTkuMzc4NzIyIDE0LjE5Njc1IDE3LjIxOTczNiAxNi4zNTU3MzcgQyAxNS4wNjA3NDkgMTguNTE0NzIzIDEzLjUwNzc3MSAyMS4yMDQ1NjEgMTIuNzE3NTI3IDI0LjE1Mzc5MiBDIDExLjkyNzI4MyAyNy4xMDMwMjMgMTEuOTI3MjgzIDMwLjIwODk4IDEyLjcxNzUyNyAzMy4xNTgyMSBDIDEzLjUwNzc3MiAzNi4xMDc0NDEgMTUuMDYwNzUgMzguNzk3Mjc5IDE3LjIxOTczNyA0MC45NTYyNjUgQyAxOS4zNzg3MjQgNDMuMTE1MjUxIDIyLjA2ODU2MiA0NC42NjgyMyAyNS4wMTc3OTMgNDUuNDU4NDczIEMgMjcuOTY3MDIzIDQ2LjI0ODcxNyAzMS4wNzI5ODEgNDYuMjQ4NzE3IDM0LjAyMjIxMSA0NS40NTg0NzIgTCAyOS41MiAyOC42NTYgTCA0MS44MjAyNjQgMTYuMzU1NzM2IHoiIHN0eWxlPSJmaWxsOiMwMDIwYzI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNC4wMjIyMTEgNDUuNDU4NDcyIEMgMzYuOTcxNDQyIDQ0LjY2ODIyOCAzOS42NjEyNzkgNDMuMTE1MjQ5IDQxLjgyMDI2NiA0MC45NTYyNjIgQyA0My45NzkyNTIgMzguNzk3Mjc1IDQ1LjUzMjIzIDM2LjEwNzQzNyA0Ni4zMjI0NzQgMzMuMTU4MjA2IEMgNDcuMTEyNzE3IDMwLjIwODk3NiA0Ny4xMTI3MTcgMjcuMTAzMDE4IDQ2LjMyMjQ3MiAyNC4xNTM3ODggQyA0NS41MzIyMjggMjEuMjA0NTU4IDQzLjk3OTI0OSAxOC41MTQ3MiA0MS44MjAyNjIgMTYuMzU1NzM0IEwgMjkuNTIgMjguNjU2IEwgMzQuMDIyMjExIDQ1LjQ1ODQ3MiB6IiBzdHlsZT0iZmlsbDojYzIyMDAwOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gICA8ZyBpZD0idGV4dF8xIj4gICAgPCEtLSAyMCAtLT4gICAgPGRlZnM+ICAgICA8cGF0aCBkPSJNIDE5LjE4NzUgOC4yOTY4NzUgTCA1My42MDkzNzUgOC4yOTY4NzUgTCA1My42MDkzNzUgMCBMIDcuMzI4MTI1IDAgTCA3LjMyODEyNSA4LjI5Njg3NSBRIDEyLjkzNzUgMTQuMTA5Mzc1IDIyLjYyNSAyMy44OTA2MjUgUSAzMi4zMjgxMjUgMzMuNjg3NSAzNC44MTI1IDM2LjUzMTI1IFEgMzkuNTQ2ODc1IDQxLjg0Mzc1IDQxLjQyMTg3NSA0NS41MzEyNSBRIDQzLjMxMjUgNDkuMjE4NzUgNDMuMzEyNSA1Mi43ODEyNSBRIDQzLjMxMjUgNTguNTkzNzUgMzkuMjM0Mzc1IDYyLjI1IFEgMzUuMTU2MjUgNjUuOTIxODc1IDI4LjYwOTM3NSA2NS45MjE4NzUgUSAyMy45Njg3NSA2NS45MjE4NzUgMTguODEyNSA2NC4zMTI1IFEgMTMuNjcxODc1IDYyLjcwMzEyNSA3LjgxMjUgNTkuNDIxODc1IEwgNy44MTI1IDY5LjM5MDYyNSBRIDEzLjc2NTYyNSA3MS43ODEyNSAxOC45Mzc1IDczIFEgMjQuMTI1IDc0LjIxODc1IDI4LjQyMTg3NSA3NC4yMTg3NSBRIDM5Ljc1IDc0LjIxODc1IDQ2LjQ4NDM3NSA2OC41NDY4NzUgUSA1My4yMTg3NSA2Mi44OTA2MjUgNTMuMjE4NzUgNTMuNDIxODc1IFEgNTMuMjE4NzUgNDguOTIxODc1IDUxLjUzMTI1IDQ0Ljg5MDYyNSBRIDQ5Ljg1OTM3NSA0MC44NzUgNDUuNDA2MjUgMzUuNDA2MjUgUSA0NC4xODc1IDMzLjk4NDM3NSAzNy42NDA2MjUgMjcuMjE4NzUgUSAzMS4xMDkzNzUgMjAuNDUzMTI1IDE5LjE4NzUgOC4yOTY4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNTAiLz4gICAgIDxwYXRoIGQ9Ik0gMzEuNzgxMjUgNjYuNDA2MjUgUSAyNC4xNzE4NzUgNjYuNDA2MjUgMjAuMzI4MTI1IDU4LjkwNjI1IFEgMTYuNSA1MS40MjE4NzUgMTYuNSAzNi4zNzUgUSAxNi41IDIxLjM5MDYyNSAyMC4zMjgxMjUgMTMuODkwNjI1IFEgMjQuMTcxODc1IDYuMzkwNjI1IDMxLjc4MTI1IDYuMzkwNjI1IFEgMzkuNDUzMTI1IDYuMzkwNjI1IDQzLjI4MTI1IDEzLjg5MDYyNSBRIDQ3LjEyNSAyMS4zOTA2MjUgNDcuMTI1IDM2LjM3NSBRIDQ3LjEyNSA1MS40MjE4NzUgNDMuMjgxMjUgNTguOTA2MjUgUSAzOS40NTMxMjUgNjYuNDA2MjUgMzEuNzgxMjUgNjYuNDA2MjUgek0gMzEuNzgxMjUgNzQuMjE4NzUgUSA0NC4wNDY4NzUgNzQuMjE4NzUgNTAuNTE1NjI1IDY0LjUxNTYyNSBRIDU2Ljk4NDM3NSA1NC44MjgxMjUgNTYuOTg0Mzc1IDM2LjM3NSBRIDU2Ljk4NDM3NSAxNy45Njg3NSA1MC41MTU2MjUgOC4yNjU2MjUgUSA0NC4wNDY4NzUgLTEuNDIxODc1IDMxLjc4MTI1IC0xLjQyMTg3NSBRIDE5LjUzMTI1IC0xLjQyMTg3NSAxMy4wNjI1IDguMjY1NjI1IFEgNi41OTM3NSAxNy45Njg3NSA2LjU5Mzc1IDM2LjM3NSBRIDYuNTkzNzUgNTQuODI4MTI1IDEzLjA2MjUgNjQuNTE1NjI1IFEgMTkuNTMxMjUgNzQuMjE4NzUgMzEuNzgxMjUgNzQuMjE4NzUgeiIgaWQ9IkRlamFWdVNhbnMtNDgiLz4gICAgPC9kZWZzPiAgICA8ZyBzdHlsZT0iZmlsbDojZmZmZmZmOyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMuNDM0NTA1IDMwLjUxNDkzMylzY2FsZSgwLjEgLTAuMSkiPiAgICAgPHVzZSB4bGluazpocmVmPSIjRGVqYVZ1U2Fucy01MCIvPiAgICAgPHVzZSB4PSI2My42MjMwNDciIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ4Ii8+ICAgIDwvZz4gICA8L2c+ICAgPGcgaWQ9InRleHRfMiI+ICAgIDwhLS0gMTAgLS0+ICAgIDxkZWZzPiAgICAgPHBhdGggZD0iTSAxMi40MDYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA4LjI5Njg3NSBMIDI4LjUxNTYyNSA2My45MjE4NzUgTCAxMC45ODQzNzUgNjAuNDA2MjUgTCAxMC45ODQzNzUgNjkuMzkwNjI1IEwgMjguNDIxODc1IDcyLjkwNjI1IEwgMzguMjgxMjUgNzIuOTA2MjUgTCAzOC4yODEyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSA4LjI5Njg3NSBMIDU0LjM5MDYyNSAwIEwgMTIuNDA2MjUgMCB6IiBpZD0iRGVqYVZ1U2Fucy00OSIvPiAgICA8L2RlZnM+ICAgIDxnIHN0eWxlPSJmaWxsOiNmZmZmZmY7IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMi44ODA0OTUgMzIuMzE1ODE2KXNjYWxlKDAuMSAtMC4xKSI+ICAgICA8dXNlIHhsaW5rOmhyZWY9IiNEZWphVnVTYW5zLTQ5Ii8+ICAgICA8dXNlIHg9IjYzLjYyMzA0NyIgeGxpbms6aHJlZj0iI0RlamFWdVNhbnMtNDgiLz4gICAgPC9nPiAgIDwvZz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMGQxOWYzMzk2OGViNGE4N2E2ZjllMTFhYmQ4MjE1ZTAuc2V0SWNvbihkaXZfaWNvbl9jNzJjOTU0MzQxMDY0MzM5OGZjMTA1N2U4ZTk3NmM2NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hMDBkMTUxZDhjZTE0YTRlODRhNmM4NmNkYWJkYWYyNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83Njk4YzQxZWM0MjI0ZDRjYmU0MmJmNTNlZWRhMzliYyA9ICQoYDxkaXYgaWQ9Imh0bWxfNzY5OGM0MWVjNDIyNGQ0Y2JlNDJiZjUzZWVkYTM5YmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95dWNhMTI1NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5ZdWNhdGVjIE1heWE8L2E+PGJyPmNvbnNvbmFudHM6IDIwPGJyPnZvd2VsczogMTA8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMDBkMTUxZDhjZTE0YTRlODRhNmM4NmNkYWJkYWYyNS5zZXRDb250ZW50KGh0bWxfNzY5OGM0MWVjNDIyNGQ0Y2JlNDJiZjUzZWVkYTM5YmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZDE5ZjMzOTY4ZWI0YTg3YTZmOWUxMWFiZDgyMTVlMC5iaW5kUG9wdXAocG9wdXBfYTAwZDE1MWQ4Y2UxNGE0ZTg0YTZjODZjZGFiZGFmMjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAo8L3NjcmlwdD4=\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe750643710>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(data.language)\n",
    "m.add_minicharts(\n",
    "    data.consonants, data.vowels,\n",
    "    colors = ('#0020c2', '#c22000'),\n",
    "    size = 0.8,\n",
    "    startangle = 45,\n",
    "    labels = True,\n",
    "    textprops = {'color': 'white'}\n",
    ")\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can also use **bar** charts."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzEzYjcyOTczYzljNzQ3OGY5NjYyZjA4OGIyYzBiODc2IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3NiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6IGJsdWU7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogcmVkO29wYWNpdHk6MC43OyI+PC9zcGFuPnZvd2VsczwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3NiA9IEwubWFwKAogICAgICAgICdtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3Nik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl9kN2IwZjk4ZWY4MjA0YTY0YjQzZDY5YjUyMGRmODNmZCA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zYzkwMWE3YWY0OGY0MjBkOTdlODM5MTFhYmUyNDM0ZiA9IEwubWFya2VyKAogICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3Nik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMWJkZDRhNjI5ZmVmNDkxYTk5NTg0MDljZWMwNjUzMWUgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNGNhZjNkODA4ZCkiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3A0Y2FmM2Q4MDhkKSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTguNTczMjU3IEwgMTQuNzYgMTguNTczMjU3IHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwNGNhZjNkODA4ZCI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2M5MDFhN2FmNDhmNDIwZDk3ZTgzOTExYWJlMjQzNGYuc2V0SWNvbihkaXZfaWNvbl8xYmRkNGE2MjlmZWY0OTFhOTk1ODQwOWNlYzA2NTMxZSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yZThlNDRlZDU2MGE0YjU0ODU3YWNhOTY2MDAzZDQwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mNjU3NjJlYmUxMjU0MmVmODlmZGZlNzI2MGJjNTdlNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjY1NzYyZWJlMTI1NDJlZjg5ZmRmZTcyNjBiYzU3ZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj5jb25zb25hbnRzOiAyNTxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZThlNDRlZDU2MGE0YjU0ODU3YWNhOTY2MDAzZDQwMy5zZXRDb250ZW50KGh0bWxfZjY1NzYyZWJlMTI1NDJlZjg5ZmRmZTcyNjBiYzU3ZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYzkwMWE3YWY0OGY0MjBkOTdlODM5MTFhYmUyNDM0Zi5iaW5kUG9wdXAocG9wdXBfMmU4ZTQ0ZWQ1NjBhNGI1NDg1N2FjYTk2NjAwM2Q0MDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lOTJjZjFkMjE4NTA0MGVmYmJiMWRiOWViZjMxYjAzNCA9IEwubWFya2VyKAogICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzQ4MDBlNzNhNzc3YzQyYjRhOGM2OTA0ZmY1OTlmNjc2ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDNhNDU2MWRhYmUpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwM2E0NTYxZGFiZSkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE0LjM1MjY1MyBMIDE0Ljc2IDE0LjM1MjY1MyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDNhNDU2MWRhYmUiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2U5MmNmMWQyMTg1MDQwZWZiYmIxZGI5ZWJmMzFiMDM0LnNldEljb24oZGl2X2ljb25fNDgwMGU3M2E3NzdjNDJiNGE4YzY5MDRmZjU5OWY2NzYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfN2UxOTdkZTU4MTY2NDVlMmJmZGVjMWNhZWM0MDY4OTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOGIyNzZjNGQ4YzI0NGUwM2IxZDMwMjY4ZWMyNDJjNTYgPSAkKGA8ZGl2IGlkPSJodG1sXzhiMjc2YzRkOGMyNDRlMDNiMWQzMDI2OGVjMjQyYzU2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva29yZTEyODAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S29yZWFuPC9hPjxicj5jb25zb25hbnRzOiAyMTxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2UxOTdkZTU4MTY2NDVlMmJmZGVjMWNhZWM0MDY4OTguc2V0Q29udGVudChodG1sXzhiMjc2YzRkOGMyNDRlMDNiMWQzMDI2OGVjMjQyYzU2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTkyY2YxZDIxODUwNDBlZmJiYjFkYjllYmYzMWIwMzQuYmluZFBvcHVwKHBvcHVwXzdlMTk3ZGU1ODE2NjQ1ZTJiZmRlYzFjYWVjNDA2ODk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZjhhNjVlNzdjZjk4NGVkN2FiMjZlYTUwOWFjY2RkMWIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2EyZjYyNTY1ZmRmNjRmZDA5ZDEzMmE1ZDY1ODczOTQxID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDFiMzBlZmQxOTkpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwMWIzMGVmZDE5OSkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIxLjQzNDgwNSBMIDE0Ljc2IDIxLjQzNDgwNSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDFiMzBlZmQxOTkiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2Y4YTY1ZTc3Y2Y5ODRlZDdhYjI2ZWE1MDlhY2NkZDFiLnNldEljb24oZGl2X2ljb25fYTJmNjI1NjVmZGY2NGZkMDlkMTMyYTVkNjU4NzM5NDEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWU1ZTUwNDlmMzgxNGE2NWFkZmE3N2NjOThhZTk0MDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjliYzY2ZWNhNDgyNDg1OThmYjFlYjdmNTVmZDJmNzkgPSAkKGA8ZGl2IGlkPSJodG1sX2Y5YmM2NmVjYTQ4MjQ4NTk4ZmIxZWI3ZjU1ZmQyZjc5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGl3aTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGl3aTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiA0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWU1ZTUwNDlmMzgxNGE2NWFkZmE3N2NjOThhZTk0MDMuc2V0Q29udGVudChodG1sX2Y5YmM2NmVjYTQ4MjQ4NTk4ZmIxZWI3ZjU1ZmQyZjc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjhhNjVlNzdjZjk4NGVkN2FiMjZlYTUwOWFjY2RkMWIuYmluZFBvcHVwKHBvcHVwX2FlNWU1MDQ5ZjM4MTRhNjVhZGZhNzdjYzk4YWU5NDAzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYjM1MzZiOTZlODFhNGU4N2FhNTBjYzk4MjY0MWM4YmYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzEzYjcyOTczYzljNzQ3OGY5NjYyZjA4OGIyYzBiODc2KTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl80MmZmYTViNzE2YjI0ZTcxYTYxNWQwZDFhNTU5YmYxOSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzE4Ljg2NCwxOC44NjRdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSIyOC44cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDI4LjggMjguOCIgd2lkdGg9IjI4LjhwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8xIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3A4ZWJhODczMmViKSIgZD0iTSA0LjYxNDU0NSAyNS4yIEwgMTQuNzYgMjUuMiBMIDE0Ljc2IDQuNDkxNDI5IEwgNC42MTQ1NDUgNC40OTE0MjkgeiIgc3R5bGU9ImZpbGw6IzAwMDBmZjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDhlYmE4NzMyZWIpIiBkPSJNIDE0Ljc2IDI1LjIgTCAyNC45MDU0NTUgMjUuMiBMIDI0LjkwNTQ1NSAxMy45MDQ0MTYgTCAxNC43NiAxMy45MDQ0MTYgeiIgc3R5bGU9ImZpbGw6I2ZmMDAwMDsiLz4gICA8L2c+ICA8L2c+IDwvZz4gPGRlZnM+ICA8Y2xpcFBhdGggaWQ9InA4ZWJhODczMmViIj4gICA8cmVjdCBoZWlnaHQ9IjIxLjc0NCIgd2lkdGg9IjIyLjMyIiB4PSIzLjYiIHk9IjMuNDU2Ii8+ICA8L2NsaXBQYXRoPiA8L2RlZnM+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9iMzUzNmI5NmU4MWE0ZTg3YWE1MGNjOTgyNjQxYzhiZi5zZXRJY29uKGRpdl9pY29uXzQyZmZhNWI3MTZiMjRlNzFhNjE1ZDBkMWE1NTliZjE5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRjYTI1YzUyNzk3YzQ4MTg4MThkN2Y3ZDhmMTBjZmI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkYzJjOTU0MmM2ZjRmOTNiMWI1ODg0MTQ1MjBkN2IwID0gJChgPGRpdiBpZD0iaHRtbF8zZGMyYzk1NDJjNmY0ZjkzYjFiNTg4NDE0NTIwZDdiMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xpYmUxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxpYmVyaWEgS3BlbGxlPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDEyPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGNhMjVjNTI3OTdjNDgxODgxOGQ3ZjdkOGYxMGNmYjcuc2V0Q29udGVudChodG1sXzNkYzJjOTU0MmM2ZjRmOTNiMWI1ODg0MTQ1MjBkN2IwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYjM1MzZiOTZlODFhNGU4N2FhNTBjYzk4MjY0MWM4YmYuYmluZFBvcHVwKHBvcHVwXzRjYTI1YzUyNzk3YzQ4MTg4MThkN2Y3ZDhmMTBjZmI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZTliNTVjZjYxOTUzNGY5MTk0NDk2NzAzYThiNjZjZDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzc4M2U4N2E5NjNmNjQ4MjhhYjJiMDNkNTQyNmM3MGQ1ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGRkMjQ1ZDA4YTQpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwZGQyNDVkMDhhNCkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDEzLjk4Mjg1NyBMIDE0Ljc2IDEzLjk4Mjg1NyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icGRkMjQ1ZDA4YTQiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2U5YjU1Y2Y2MTk1MzRmOTE5NDQ5NjcwM2E4YjY2Y2Q2LnNldEljb24oZGl2X2ljb25fNzgzZTg3YTk2M2Y2NDgyOGFiMmIwM2Q1NDI2YzcwZDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjRkNDZkNTY2YzUyNDM1OGFjZTMyYjI1ODA5YWYzZWMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzIyZDliNDRlZmNhNGIwNTk0MzRlYTczNzE0OTkwNjkgPSAkKGA8ZGl2IGlkPSJodG1sXzcyMmQ5YjQ0ZWZjYTRiMDU5NDM0ZWE3MzcxNDk5MDY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHVsdTEyNTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVsdTwvYT48YnI+Y29uc29uYW50czogMjQ8YnI+dm93ZWxzOiAxMzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY0ZDQ2ZDU2NmM1MjQzNThhY2UzMmIyNTgwOWFmM2VjLnNldENvbnRlbnQoaHRtbF83MjJkOWI0NGVmY2E0YjA1OTQzNGVhNzM3MTQ5OTA2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2U5YjU1Y2Y2MTk1MzRmOTE5NDQ5NjcwM2E4YjY2Y2Q2LmJpbmRQb3B1cChwb3B1cF82NGQ0NmQ1NjZjNTI0MzU4YWNlMzJiMjU4MDlhZjNlYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzNiM2MzYzJmZWI2YjRhYzZhNjQwOTc4NDljZTg4Yzc5ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3Nik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fZWE0MWQzN2JhMTFiNDQ5Nzg0YWJmZjNmYTAxMDBmZmMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwMmRmNzBmZDlhNykiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3AyZGY3MGZkOWE3KSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTguOTg3NDI5IEwgMTQuNzYgMTguOTg3NDI5IHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwMmRmNzBmZDlhNyI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfM2IzYzNjMmZlYjZiNGFjNmE2NDA5Nzg0OWNlODhjNzkuc2V0SWNvbihkaXZfaWNvbl9lYTQxZDM3YmExMWI0NDk3ODRhYmZmM2ZhMDEwMGZmYyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZDE1YjRiNGVlN2M0ZmZhODc5NWYxZGE2YWE0ZTk0YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85NDE0MzdhNGFhM2U0MGUxOGMwNjMxOTJhMjc0NjJiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfOTQxNDM3YTRhYTNlNDBlMThjMDYzMTkyYTI3NDYyYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXB1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXB1ZHVuZ3VuPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZDE1YjRiNGVlN2M0ZmZhODc5NWYxZGE2YWE0ZTk0Yi5zZXRDb250ZW50KGh0bWxfOTQxNDM3YTRhYTNlNDBlMThjMDYzMTkyYTI3NDYyYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zYjNjM2MyZmViNmI0YWM2YTY0MDk3ODQ5Y2U4OGM3OS5iaW5kUG9wdXAocG9wdXBfMWQxNWI0YjRlZTdjNGZmYTg3OTVmMWRhNmFhNGU5NGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl82Y2Y0MDVmNGQ3Y2M0ZDRjOTc1ZjEwOTJlMGVkNmI0YSA9IEwubWFya2VyKAogICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzk1ZjYxOWYyMGZmNTQzOTY5MzlmNDI2YmVmYjk0ZjRlID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGFlNjQwMjY1ZGMpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwYWU2NDAyNjVkYykiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDYuMzc0MDI2IEwgMTQuNzYgNi4zNzQwMjYgeiIgc3R5bGU9ImZpbGw6I2ZmMDAwMDsiLz4gICA8L2c+ICA8L2c+IDwvZz4gPGRlZnM+ICA8Y2xpcFBhdGggaWQ9InBhZTY0MDI2NWRjIj4gICA8cmVjdCBoZWlnaHQ9IjIxLjc0NCIgd2lkdGg9IjIyLjMyIiB4PSIzLjYiIHk9IjMuNDU2Ii8+ICA8L2NsaXBQYXRoPiA8L2RlZnM+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82Y2Y0MDVmNGQ3Y2M0ZDRjOTc1ZjEwOTJlMGVkNmI0YS5zZXRJY29uKGRpdl9pY29uXzk1ZjYxOWYyMGZmNTQzOTY5MzlmNDI2YmVmYjk0ZjRlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMyODg2NTE1ZmJiYzRkMWU4NmU5MDE3MTM4M2Y4NTlmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1NjY4YjU4NDg3NjRjYjBhNGVhZjM1Y2U1MTllYWRhID0gJChgPGRpdiBpZD0iaHRtbF8zNTY2OGI1ODQ4NzY0Y2IwYTRlYWYzNWNlNTE5ZWFkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tpb3cxMjY2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktpb3dhPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDIwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzI4ODY1MTVmYmJjNGQxZTg2ZTkwMTcxMzgzZjg1OWYuc2V0Q29udGVudChodG1sXzM1NjY4YjU4NDg3NjRjYjBhNGVhZjM1Y2U1MTllYWRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNmNmNDA1ZjRkN2NjNGQ0Yzk3NWYxMDkyZTBlZDZiNGEuYmluZFBvcHVwKHBvcHVwXzMyODg2NTE1ZmJiYzRkMWU4NmU5MDE3MTM4M2Y4NTlmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNGU0MmY4MTU4MzAyNGZkNzlhZDU2NDgxZDg4ODQwMDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzEzYjcyOTczYzljNzQ3OGY5NjYyZjA4OGIyYzBiODc2KTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9iMTFmM2ViM2VkMTI0MjIyOGNkY2YzZGYxNDllMmNjZSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzE4Ljg2NCwxOC44NjRdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSIyOC44cHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDI4LjggMjguOCIgd2lkdGg9IjI4LjhwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8xIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3A5NjU1ZjkyMmNhKSIgZD0iTSA0LjYxNDU0NSAyNS4yIEwgMTQuNzYgMjUuMiBMIDE0Ljc2IDQuNDkxNDI5IEwgNC42MTQ1NDUgNC40OTE0MjkgeiIgc3R5bGU9ImZpbGw6IzAwMDBmZjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDk2NTVmOTIyY2EpIiBkPSJNIDE0Ljc2IDI1LjIgTCAyNC45MDU0NTUgMjUuMiBMIDI0LjkwNTQ1NSAxOC4yOTcxNDMgTCAxNC43NiAxOC4yOTcxNDMgeiIgc3R5bGU9ImZpbGw6I2ZmMDAwMDsiLz4gICA8L2c+ICA8L2c+IDwvZz4gPGRlZnM+ICA8Y2xpcFBhdGggaWQ9InA5NjU1ZjkyMmNhIj4gICA8cmVjdCBoZWlnaHQ9IjIxLjc0NCIgd2lkdGg9IjIyLjMyIiB4PSIzLjYiIHk9IjMuNDU2Ii8+ICA8L2NsaXBQYXRoPiA8L2RlZnM+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80ZTQyZjgxNTgzMDI0ZmQ3OWFkNTY0ODFkODg4NDAwNy5zZXRJY29uKGRpdl9pY29uX2IxMWYzZWIzZWQxMjQyMjI4Y2RjZjNkZjE0OWUyY2NlKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyOTk0YzQ2NmJjYTQxODc5NDRmYzZlMTQ5YWI5N2E1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0MzIyYzExMzhhZDRhNmFhY2EyNDM4Y2Y1NmQ2NWY0ID0gJChgPGRpdiBpZD0iaHRtbF8yNDMyMmMxMTM4YWQ0YTZhYWNhMjQzOGNmNTZkNjVmNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphcGFuZXNlPC9hPjxicj5jb25zb25hbnRzOiAxNTxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hMjk5NGM0NjZiY2E0MTg3OTQ0ZmM2ZTE0OWFiOTdhNS5zZXRDb250ZW50KGh0bWxfMjQzMjJjMTEzOGFkNGE2YWFjYTI0MzhjZjU2ZDY1ZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZTQyZjgxNTgzMDI0ZmQ3OWFkNTY0ODFkODg4NDAwNy5iaW5kUG9wdXAocG9wdXBfYTI5OTRjNDY2YmNhNDE4Nzk0NGZjNmUxNDlhYjk3YTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hNTIzOTA4ZGVhOWY0NWJhYjJkYjY3MDEwMTU4Zjg3MSA9IEwubWFya2VyKAogICAgICAgICAgICBbNy4xNTM0NSwgMy42NzIyNV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3Nik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNjlmMjk0YjUyODRkNDgyY2I2ZWFkZjMxYjk0ZGQwYTUgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNTNjM2UzOWI4OCkiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3A1M2MzZTM5Yjg4KSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTIuNTQ0NzYyIEwgMTQuNzYgMTIuNTQ0NzYyIHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwNTNjM2UzOWI4OCI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTUyMzkwOGRlYTlmNDViYWIyZGI2NzAxMDE1OGY4NzEuc2V0SWNvbihkaXZfaWNvbl82OWYyOTRiNTI4NGQ0ODJjYjZlYWRmMzFiOTRkZDBhNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMzY0ZjBkNTE3YTQ0NjljYWU2YTk1MTMzZDFhYTk2MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZGQxMTJjZmYwODI0ODE4YjQwOTllNDkyMmYyNDNiYyA9ICQoYDxkaXYgaWQ9Imh0bWxfM2RkMTEyY2ZmMDgyNDgxOGI0MDk5ZTQ5MjJmMjQzYmMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC95b3J1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Zb3J1YmE8L2E+PGJyPmNvbnNvbmFudHM6IDE4PGJyPnZvd2VsczogMTE8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMzY0ZjBkNTE3YTQ0NjljYWU2YTk1MTMzZDFhYTk2My5zZXRDb250ZW50KGh0bWxfM2RkMTEyY2ZmMDgyNDgxOGI0MDk5ZTQ5MjJmMjQzYmMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNTIzOTA4ZGVhOWY0NWJhYjJkYjY3MDEwMTU4Zjg3MS5iaW5kUG9wdXAocG9wdXBfZTM2NGYwZDUxN2E0NDY5Y2FlNmE5NTEzM2QxYWE5NjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lMzcxNDY1MTdkZmQ0MzdiYWM3YmY4N2Y0MDI4OGE2MCA9IEwubWFya2VyKAogICAgICAgICAgICBbNjQuNzYyOCwgMjUuNTU3N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3Nik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNGZkYThmZDE2OWI1NDExMjkyYzZiYjgzODZmNjNkNjggPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwYjAyMjNhYWFjNikiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3BiMDIyM2FhYWM2KSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMTUuNDU0NzkgTCAxNC43NiAxNS40NTQ3OSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icGIwMjIzYWFhYzYiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2UzNzE0NjUxN2RmZDQzN2JhYzdiZjg3ZjQwMjg4YTYwLnNldEljb24oZGl2X2ljb25fNGZkYThmZDE2OWI1NDExMjkyYzZiYjgzODZmNjNkNjgpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjMxZDk5ZGU5MmMyNGZhYWE5ZmQzZTM3YTE3ODM3ZDIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjY2YWVhMDc0ZmQ3NDk5MTk1NjEwN2JkODJjYWNlYTYgPSAkKGA8ZGl2IGlkPSJodG1sXzI2NmFlYTA3NGZkNzQ5OTE5NTYxMDdiZDgyY2FjZWE2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvZmlubjEzMTgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RmlubmlzaDwvYT48YnI+Y29uc29uYW50czogMTc8YnI+dm93ZWxzOiA4PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjMxZDk5ZGU5MmMyNGZhYWE5ZmQzZTM3YTE3ODM3ZDIuc2V0Q29udGVudChodG1sXzI2NmFlYTA3NGZkNzQ5OTE5NTYxMDdiZDgyY2FjZWE2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTM3MTQ2NTE3ZGZkNDM3YmFjN2JmODdmNDAyODhhNjAuYmluZFBvcHVwKHBvcHVwX2IzMWQ5OWRlOTJjMjRmYWFhOWZkM2UzN2ExNzgzN2QyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNDI0NDBhZjNjOGM3NDIyZjhhOTE2ZTJjNzBiNzVkNTYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzE5LjYyOTcsIC0xNTUuNDNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzllNDNlMWU1ODdlZjRiMzU4MjE3OGQ5MjI3Mjg0MmY2ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDMyNWY3ZjI2MGUpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwMzI1ZjdmMjYwZSkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDEyLjI1NzE0MyBMIDE0Ljc2IDEyLjI1NzE0MyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDMyNWY3ZjI2MGUiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzQyNDQwYWYzYzhjNzQyMmY4YTkxNmUyYzcwYjc1ZDU2LnNldEljb24oZGl2X2ljb25fOWU0M2UxZTU4N2VmNGIzNTgyMTc4ZDkyMjcyODQyZjYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjVlNjdjY2JkMzMzNGIxYzljYjRkN2I3ZGZkNTE1ZmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDk5MjVmYTQ5ZWU2NGY0YzhiNjM0MDZlODRjMDkzOTQgPSAkKGA8ZGl2IGlkPSJodG1sXzQ5OTI1ZmE0OWVlNjRmNGM4YjYzNDA2ZTg0YzA5Mzk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGF3YTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGF3YWlpYW48L2E+PGJyPmNvbnNvbmFudHM6IDg8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjVlNjdjY2JkMzMzNGIxYzljYjRkN2I3ZGZkNTE1ZmQuc2V0Q29udGVudChodG1sXzQ5OTI1ZmE0OWVlNjRmNGM4YjYzNDA2ZTg0YzA5Mzk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNDI0NDBhZjNjOGM3NDIyZjhhOTE2ZTJjNzBiNzVkNTYuYmluZFBvcHVwKHBvcHVwX2Y1ZTY3Y2NiZDMzMzRiMWM5Y2I0ZDdiN2RmZDUxNWZkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMjc2OGM1MGY3Mjg1NDhkMTg0MGVkMjhiYTBhMTQ5ZjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2FmOWYzNWY2ZGMwZTRiMDM5ZTM0NTcwMGZkMTE4YzFhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDQ0NDJmZGY1NDEpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNDQ0MmZkZjU0MSkiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE0LjA0OTIzMSBMIDE0Ljc2IDE0LjA0OTIzMSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDQ0NDJmZGY1NDEiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzI3NjhjNTBmNzI4NTQ4ZDE4NDBlZDI4YmEwYTE0OWY2LnNldEljb24oZGl2X2ljb25fYWY5ZjM1ZjZkYzBlNGIwMzllMzQ1NzAwZmQxMThjMWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODU3NGMyYmU0MWJjNGE5MjkxODNlNjk2ODQyZmRlOTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmRjZGNkMDBkYmU5NDg4NjkyNGE2YTNkMDZlZTI5MTAgPSAkKGA8ZGl2IGlkPSJodG1sXzJkY2RjZDAwZGJlOTQ4ODY5MjRhNmEzZDA2ZWUyOTEwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaHVuZzEyNzQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SHVuZ2FyaWFuPC9hPjxicj5jb25zb25hbnRzOiAyNjxicj52b3dlbHM6IDE0PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODU3NGMyYmU0MWJjNGE5MjkxODNlNjk2ODQyZmRlOTYuc2V0Q29udGVudChodG1sXzJkY2RjZDAwZGJlOTQ4ODY5MjRhNmEzZDA2ZWUyOTEwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjc2OGM1MGY3Mjg1NDhkMTg0MGVkMjhiYTBhMTQ5ZjYuYmluZFBvcHVwKHBvcHVwXzg1NzRjMmJlNDFiYzRhOTI5MTgzZTY5Njg0MmZkZTk2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfMTQ0ZDA2ZTA4ZDI3NGFkNjgyMzBkNWMxZTcxODU1NTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQxLjg1MDM5Njk5OTk5OTk5NCwgNDMuNzg2MTNdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2IxOWY1M2Q0ZmQzYTQ5Njc5NDE0NTJkYThkMzM4NzFjID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGI0OTAzYjYwMWIpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwYjQ5MDNiNjAxYikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIwLjc2MjQ0OSBMIDE0Ljc2IDIwLjc2MjQ0OSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icGI0OTAzYjYwMWIiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzE0NGQwNmUwOGQyNzRhZDY4MjMwZDVjMWU3MTg1NTUzLnNldEljb24oZGl2X2ljb25fYjE5ZjUzZDRmZDNhNDk2Nzk0MTQ1MmRhOGQzMzg3MWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzdmOTczOWVhMTZhNDA1Nzg4OTg3YjIyMDhiMjNhMDAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmE2NjBlZmMzOWYwNDY0MGFlODFjOGJhMDQ1ZjhiYWEgPSAkKGA8ZGl2IGlkPSJodG1sXzZhNjYwZWZjMzlmMDQ2NDBhZTgxYzhiYTA0NWY4YmFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+R2VvcmdpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI4PGJyPnZvd2VsczogNjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM3Zjk3MzllYTE2YTQwNTc4ODk4N2IyMjA4YjIzYTAwLnNldENvbnRlbnQoaHRtbF82YTY2MGVmYzM5ZjA0NjQwYWU4MWM4YmEwNDVmOGJhYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzE0NGQwNmUwOGQyNzRhZDY4MjMwZDVjMWU3MTg1NTUzLmJpbmRQb3B1cChwb3B1cF8zN2Y5NzM5ZWExNmE0MDU3ODg5ODdiMjIwOGIyM2EwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzlhNWE3MTNmYmYxNzRhZDFhYzQ3MDQyNzI3MmZkYWJmID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF8xM2I3Mjk3M2M5Yzc0NzhmOTY2MmYwODhiMmMwYjg3Nik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYjkyMmM3Y2ViODc3NDFiODgxNGEwODAwMjViYzk0ZGEgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsxOC44NjQsMTguODY0XSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iMjguOHB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAyOC44IDI4LjgiIHdpZHRoPSIyOC44cHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMSI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwYzdkOTFhNzA3NCkiIGQ9Ik0gNC42MTQ1NDUgMjUuMiBMIDE0Ljc2IDI1LjIgTCAxNC43NiA0LjQ5MTQyOSBMIDQuNjE0NTQ1IDQuNDkxNDI5IHoiIHN0eWxlPSJmaWxsOiMwMDAwZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggY2xpcC1wYXRoPSJ1cmwoI3BjN2Q5MWE3MDc0KSIgZD0iTSAxNC43NiAyNS4yIEwgMjQuOTA1NDU1IDI1LjIgTCAyNC45MDU0NTUgMjAuMzY4IEwgMTQuNzYgMjAuMzY4IHoiIHN0eWxlPSJmaWxsOiNmZjAwMDA7Ii8+ICAgPC9nPiAgPC9nPiA8L2c+IDxkZWZzPiAgPGNsaXBQYXRoIGlkPSJwYzdkOTFhNzA3NCI+ICAgPHJlY3QgaGVpZ2h0PSIyMS43NDQiIHdpZHRoPSIyMi4zMiIgeD0iMy42IiB5PSIzLjQ1NiIvPiAgPC9jbGlwUGF0aD4gPC9kZWZzPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOWE1YTcxM2ZiZjE3NGFkMWFjNDcwNDI3MjcyZmRhYmYuc2V0SWNvbihkaXZfaWNvbl9iOTIyYzdjZWI4Nzc0MWI4ODE0YTA4MDAyNWJjOTRkYSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZjRlOGQ3MDA2ODM0MTBhODI4YTgyZGE5NDI4NTkwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMzg0NTdiY2M5YjU0MmE4OWVhNzQ4NDJhZTNhZDc5YyA9ICQoYDxkaXYgaWQ9Imh0bWxfZDM4NDU3YmNjOWI1NDJhODllYTc0ODQyYWUzYWQ3OWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hbWhhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BbWhhcmljPC9hPjxicj5jb25zb25hbnRzOiAzMDxicj52b3dlbHM6IDc8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZjRlOGQ3MDA2ODM0MTBhODI4YTgyZGE5NDI4NTkwZC5zZXRDb250ZW50KGh0bWxfZDM4NDU3YmNjOWI1NDJhODllYTc0ODQyYWUzYWQ3OWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85YTVhNzEzZmJmMTc0YWQxYWM0NzA0MjcyNzJmZGFiZi5iaW5kUG9wdXAocG9wdXBfNmY0ZThkNzAwNjgzNDEwYTgyOGE4MmRhOTQyODU5MGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9kM2Q1NzdmZjcyZWI0NmZiOTVhZWFjYzY4YTUzOGI1ZiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2ZmMGYyOGVmMDc2YTQxNzI5NTUyOWE5YWI2YWYxOTA3ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDc0NTc1N2Y4NDIpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNzQ1NzU3Zjg0MikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIyLjExNTc0NSBMIDE0Ljc2IDIyLjExNTc0NSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDc0NTc1N2Y4NDIiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2QzZDU3N2ZmNzJlYjQ2ZmI5NWFlYWNjNjhhNTM4YjVmLnNldEljb24oZGl2X2ljb25fZmYwZjI4ZWYwNzZhNDE3Mjk1NTI5YTlhYjZhZjE5MDcpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjk0ZTEwOTI5YjY3NDNiYmFiYjI4MmVkY2FhNDQzYzQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGMyYzkxZjFkY2FiNGQ0YWJlOGNjNjVjODE0Mjg2MjIgPSAkKGA8ZGl2IGlkPSJodG1sXzBjMmM5MWYxZGNhYjRkNGFiZThjYzY1YzgxNDI4NjIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjk0ZTEwOTI5YjY3NDNiYmFiYjI4MmVkY2FhNDQzYzQuc2V0Q29udGVudChodG1sXzBjMmM5MWYxZGNhYjRkNGFiZThjYzY1YzgxNDI4NjIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZDNkNTc3ZmY3MmViNDZmYjk1YWVhY2M2OGE1MzhiNWYuYmluZFBvcHVwKHBvcHVwXzI5NGUxMDkyOWI2NzQzYmJhYmIyODJlZGNhYTQ0M2M0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfODljMTg5NDNhZTY5NGI3YTk4MDA3YTBlNjA0OGFmZTIgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzg4N2ZkYmEyNDVkZTQ3MTY4MTk0OGIyYTJkNThmZDEwID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDQ4YjU3NTQwY2YpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNDhiNTc1NDBjZikiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDIyLjc5MjAyNyBMIDE0Ljc2IDIyLjc5MjAyNyB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDQ4YjU3NTQwY2YiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzg5YzE4OTQzYWU2OTRiN2E5ODAwN2EwZTYwNDhhZmUyLnNldEljb24oZGl2X2ljb25fODg3ZmRiYTI0NWRlNDcxNjgxOTQ4YjJhMmQ1OGZkMTApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjUzNDAyNDE4Zjk4NDAyYzljZDBiYzIwODRjZDlmN2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTExZDAyY2JjNDgxNGVlNjg4NTgyYzMyMDVjYTk5MGYgPSAkKGA8ZGl2IGlkPSJodG1sXzExMWQwMmNiYzQ4MTRlZTY4ODU4MmMzMjA1Y2E5OTBmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+Y29uc29uYW50czogNDM8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjUzNDAyNDE4Zjk4NDAyYzljZDBiYzIwODRjZDlmN2Uuc2V0Q29udGVudChodG1sXzExMWQwMmNiYzQ4MTRlZTY4ODU4MmMzMjA1Y2E5OTBmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfODljMTg5NDNhZTY5NGI3YTk4MDA3YTBlNjA0OGFmZTIuYmluZFBvcHVwKHBvcHVwXzI1MzQwMjQxOGY5ODQwMmM5Y2QwYmMyMDg0Y2Q5ZjdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNGQ2NjI5ZGI3MTE2NDljMmExZjk2ZjJkMmFjYTM4NjUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzE5NzA4YjNiZWUwZTQyYjI4ZjE4MTE4MWMxN2ViMGFhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcDY3ZDhiZTgzNzcpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwNjdkOGJlODM3NykiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE5LjI4MzI2NSBMIDE0Ljc2IDE5LjI4MzI2NSB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icDY3ZDhiZTgzNzciPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzRkNjYyOWRiNzExNjQ5YzJhMWY5NmYyZDJhY2EzODY1LnNldEljb24oZGl2X2ljb25fMTk3MDhiM2JlZTBlNDJiMjhmMTgxMTgxYzE3ZWIwYWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDg2N2JkZjYyNmMyNDUyNGEzNWUwOGE4YjUxOTBlZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjk5OWE4MmE3MWQ2NDhkODg2NWZkMjJjMTcxNDU4ZDAgPSAkKGA8ZGl2IGlkPSJodG1sX2Y5OTlhODJhNzFkNjQ4ZDg4NjVmZDIyYzE3MTQ1OGQwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wODY3YmRmNjI2YzI0NTI0YTM1ZTA4YThiNTE5MGVmMy5zZXRDb250ZW50KGh0bWxfZjk5OWE4MmE3MWQ2NDhkODg2NWZkMjJjMTcxNDU4ZDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80ZDY2MjlkYjcxMTY0OWMyYTFmOTZmMmQyYWNhMzg2NS5iaW5kUG9wdXAocG9wdXBfMDg2N2JkZjYyNmMyNDUyNGEzNWUwOGE4YjUxOTBlZjMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yMDE2N2FhNzFiZTY0MzhlOGEwOWU1Mzk2ZTFhODliOSA9IEwubWFya2VyKAogICAgICAgICAgICBbMTguNzc1NywgLTg4Ljk1NjddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMTNiNzI5NzNjOWM3NDc4Zjk2NjJmMDg4YjJjMGI4NzYpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzVmZmY1ZGUwZDY4NjQxNjM4NDhhNjdiYTNkOWViNWIxID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMTguODY0LDE4Ljg2NF0sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjI4LjhwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMjguOCAyOC44IiB3aWR0aD0iMjguOHB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzEiPiAgICA8cGF0aCBjbGlwLXBhdGg9InVybCgjcGY0ZjRhNDcxMDMpIiBkPSJNIDQuNjE0NTQ1IDI1LjIgTCAxNC43NiAyNS4yIEwgMTQuNzYgNC40OTE0MjkgTCA0LjYxNDU0NSA0LjQ5MTQyOSB6IiBzdHlsZT0iZmlsbDojMDAwMGZmOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGNsaXAtcGF0aD0idXJsKCNwZjRmNGE0NzEwMykiIGQ9Ik0gMTQuNzYgMjUuMiBMIDI0LjkwNTQ1NSAyNS4yIEwgMjQuOTA1NDU1IDE0Ljg0NTcxNCBMIDE0Ljc2IDE0Ljg0NTcxNCB6IiBzdHlsZT0iZmlsbDojZmYwMDAwOyIvPiAgIDwvZz4gIDwvZz4gPC9nPiA8ZGVmcz4gIDxjbGlwUGF0aCBpZD0icGY0ZjRhNDcxMDMiPiAgIDxyZWN0IGhlaWdodD0iMjEuNzQ0IiB3aWR0aD0iMjIuMzIiIHg9IjMuNiIgeT0iMy40NTYiLz4gIDwvY2xpcFBhdGg+IDwvZGVmcz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzIwMTY3YWE3MWJlNjQzOGU4YTA5ZTUzOTZlMWE4OWI5LnNldEljb24oZGl2X2ljb25fNWZmZjVkZTBkNjg2NDE2Mzg0OGE2N2JhM2Q5ZWI1YjEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTZiOTcxOTljZjNkNDY2ODljNTllZjFjNDAzOTNiN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWYzNzVhM2ZlYTYzNDQxMGFiZDI3OTA4OTBlYmFkOGQgPSAkKGA8ZGl2IGlkPSJodG1sX2VmMzc1YTNmZWE2MzQ0MTBhYmQyNzkwODkwZWJhZDhkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDEwPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTZiOTcxOTljZjNkNDY2ODljNTllZjFjNDAzOTNiN2Euc2V0Q29udGVudChodG1sX2VmMzc1YTNmZWE2MzQ0MTBhYmQyNzkwODkwZWJhZDhkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjAxNjdhYTcxYmU2NDM4ZThhMDllNTM5NmUxYTg5YjkuYmluZFBvcHVwKHBvcHVwX2U2Yjk3MTk5Y2YzZDQ2Njg5YzU5ZWYxYzQwMzkzYjdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7505e8828>"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(data.language)\n",
    "m.add_minicharts(\n",
    "    data.consonants, data.vowels,\n",
    "    typ = 'bar',\n",
    "    colors = ('blue', 'red'),\n",
    "    size = 0.4\n",
    ")\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.16. Overlapping Features <a name=\"overlapping\"></a>\n",
    "Let's say we want to see info about whether language:\n",
    "1. is ergative;\n",
    "2. has cases;\n",
    "3. is slavic.\n",
    "\n",
    "It is possible with `add_overlapping_features` method. It allows to draw several markers of different radius and color for each given language."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzNlZmQ0OTYyYzJiNzQxNDg5ZDQ3YmZhMzY3ZTQ0NjE0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF8zZWZkNDk2MmMyYjc0MTQ4OWQ0N2JmYTM2N2U0NDYxNCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+ZXJnYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICMxOWU2YjQ7b3BhY2l0eTowLjc7Ij48L3NwYW4+aGFzIGNhc2VzPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZlMTE5O29wYWNpdHk6MC43OyI+PC9zcGFuPnNsYXZpYzwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF8zZWZkNDk2MmMyYjc0MTQ4OWQ0N2JmYTM2N2U0NDYxNCA9IEwubWFwKAogICAgICAgICdtYXBfM2VmZDQ5NjJjMmI3NDE0ODlkNDdiZmEzNjdlNDQ2MTQnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF8zZWZkNDk2MmMyYjc0MTQ4OWQ0N2JmYTM2N2U0NDYxNCk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl8zMzI2NDk5NzNhMDM0Yjk2OTY1MjA0NjkzZWNlYjg0MiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfM2VmZDQ5NjJjMmI3NDE0ODlkNDdiZmEzNjdlNDQ2MTQpOwogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4MDkzYTIzZTBmNDRhNTNiNDdhYWE4ODc2ZmMzNThkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTkxNiwgNDYuODg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8zZWZkNDk2MmMyYjc0MTQ4OWQ0N2JmYTM2N2U0NDYxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MjJkYWExNGZhNWI0OTVmOTcyOTZmM2NjZDEyYmI5ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9iNmYyNjUyYjFhZTY0MTc1OTVjYTdkNTFjNTRkZGNiMSA9ICQoYDxkaXYgaWQ9Imh0bWxfYjZmMjY1MmIxYWU2NDE3NTk1Y2E3ZDUxYzU0ZGRjYjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90c2FrMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Uc2FraHVyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzcyMmRhYTE0ZmE1YjQ5NWY5NzI5NmYzY2NkMTJiYjllLnNldENvbnRlbnQoaHRtbF9iNmYyNjUyYjFhZTY0MTc1OTVjYTdkNTFjNTRkZGNiMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hODA5M2EyM2UwZjQ0YTUzYjQ3YWFhODg3NmZjMzU4ZC5iaW5kUG9wdXAocG9wdXBfNzIyZGFhMTRmYTViNDk1Zjk3Mjk2ZjNjY2QxMmJiOWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkNzU5ZjdkODg0NDQyMTJhNDMzNmE5ZjEyNjgxODg0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTkxNiwgNDYuODg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8zZWZkNDk2MmMyYjc0MTQ4OWQ0N2JmYTM2N2U0NDYxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMDE3ODI1YzVjYjg0ZTE5OTJkODUwYjk4MmQ5MDBjZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82N2E0MTA4NjMwOWU0YWZlYjBjMTg4MjFlNWI1ODc5OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNjdhNDEwODYzMDllNGFmZWIwYzE4ODIxZTViNTg3OTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90c2FrMTI0OSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Uc2FraHVyPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwMTc4MjVjNWNiODRlMTk5MmQ4NTBiOTgyZDkwMGNmLnNldENvbnRlbnQoaHRtbF82N2E0MTA4NjMwOWU0YWZlYjBjMTg4MjFlNWI1ODc5OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zZDc1OWY3ZDg4NDQ0MjEyYTQzMzZhOWYxMjY4MTg4NC5iaW5kUG9wdXAocG9wdXBfYjAxNzgyNWM1Y2I4NGUxOTkyZDg1MGI5ODJkOTAwY2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg1YmFjNjdmOWI0MTQ1YjY5YWUyYmIyMmQ1NDVjOGI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDgsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8zZWZkNDk2MmMyYjc0MTQ4OWQ0N2JmYTM2N2U0NDYxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85MjY1YmQyZDgwYzQ0MDVhODJlMGZkM2FkZjkzZTViOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lM2Q1OWM3NjA3MmM0ZjlhOWUxYTNjZDk2NTMwZDliZiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTNkNTljNzYwNzJjNGY5YTllMWEzY2Q5NjUzMGQ5YmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyNjViZDJkODBjNDQwNWE4MmUwZmQzYWRmOTNlNWI5LnNldENvbnRlbnQoaHRtbF9lM2Q1OWM3NjA3MmM0ZjlhOWUxYTNjZDk2NTMwZDliZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NWJhYzY3ZjliNDE0NWI2OWFlMmJiMjJkNTQ1YzhiNy5iaW5kUG9wdXAocG9wdXBfOTI2NWJkMmQ4MGM0NDA1YTgyZTBmZDNhZGY5M2U1YjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcwYmRmOTVmZjM3MTQ2M2I4N2I1NWY5NjFhOWMwNzI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuMCwgNTAuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZTExOSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDQsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKG1hcF8zZWZkNDk2MmMyYjc0MTQ4OWQ0N2JmYTM2N2U0NDYxNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMDczZWNiMTAxYzc0MjY0Yjc4ZjM3NzBjNTQ2MTg2ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MjZiYTUzMzMwNWE0YTg0OWIzZTk3NDYzMWIyZDA4YiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDI2YmE1MzMzMDVhNGE4NDliM2U5NzQ2MzFiMmQwOGIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAwNzNlY2IxMDFjNzQyNjRiNzhmMzc3MGM1NDYxODZkLnNldENvbnRlbnQoaHRtbF80MjZiYTUzMzMwNWE0YTg0OWIzZTk3NDYzMWIyZDA4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MGJkZjk1ZmYzNzE0NjNiODdiNTVmOTYxYTljMDcyNy5iaW5kUG9wdXAocG9wdXBfMDA3M2VjYjEwMWM3NDI2NGI3OGYzNzcwYzU0NjE4NmQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVkYzg5NTJmZjA3MDRhNzM4OWEyM2U1MmVhOWI0YzAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzY0NiwgMjUuMDQ2OTk5OTk5OTk5OTk3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzNlZmQ0OTYyYzJiNzQxNDg5ZDQ3YmZhMzY3ZTQ0NjE0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYwMWU2OGVmMzZiMTRmNDU4MmY4ZWNkYzY1MTcwZDdlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IzNWI1ZWFkNDMwMDRmNTlhZTRhZGFlN2ZiZGQ1MjEzID0gJChgPGRpdiBpZD0iaHRtbF9iMzViNWVhZDQzMDA0ZjU5YWU0YWRhZTdmYmRkNTIxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MDFlNjhlZjM2YjE0ZjQ1ODJmOGVjZGM2NTE3MGQ3ZS5zZXRDb250ZW50KGh0bWxfYjM1YjVlYWQ0MzAwNGY1OWFlNGFkYWU3ZmJkZDUyMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWRjODk1MmZmMDcwNGE3Mzg5YTIzZTUyZWE5YjRjMDMuYmluZFBvcHVwKHBvcHVwXzYwMWU2OGVmMzZiMTRmNDU4MmY4ZWNkYzY1MTcwZDdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe750ed70b8>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "languages = ('Tsakhur', 'Russian', 'Bulgarian')\n",
    "m = lingtypology.LingMap(languages)\n",
    "m.add_overlapping_features([\n",
    "    ['ergative', 'has cases'],\n",
    "    ['has cases', 'slavic'],\n",
    "    ['slavic']\n",
    "])\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can use these parameters:\n",
    "1. `radius`\n",
    "    Default radius. Default: 7.\n",
    "2. `radius_increment`\n",
    "    Radius increment. By how much the size of the marker increases with each additional feature. Default: 4.\n",
    "3. `mapping`\n",
    "    If you want to use custom colors, use this parameter. If it is not given, the default color will be used."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzc0YmJlZGVmNzM5YjRkYjhiNDY0M2Q1MDJkOTQ0YzlhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF83NGJiZWRlZjczOWI0ZGI4YjQ2NDNkNTAyZDk0NGM5YSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDEiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMScgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5MZWdlbmQ8L2Rpdj4KCjxkaXYgY2xhc3M9J2xlZ2VuZC1zY2FsZSc+CiAgPHVsIGNsYXNzPSdsZWdlbmQtbGFiZWxzJz4KCiAgICA8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNlNjE5NGI7b3BhY2l0eTowLjc7Ij48L3NwYW4+ZXJnYXRpdmU8L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICM0YmU2MTk7b3BhY2l0eTowLjc7Ij48L3NwYW4+aGFzIGNhc2VzPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTk0YmU2O29wYWNpdHk6MC43OyI+PC9zcGFuPnNsYXZpYzwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF83NGJiZWRlZjczOWI0ZGI4YjQ2NDNkNTAyZDk0NGM5YSA9IEwubWFwKAogICAgICAgICdtYXBfNzRiYmVkZWY3MzliNGRiOGI0NjQzZDUwMmQ5NDRjOWEnLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF83NGJiZWRlZjczOWI0ZGI4YjQ2NDNkNTAyZDk0NGM5YSk7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl80ZWRhNzIxNjM2NWE0Y2RkYmUwMWZlNGVkOTc0ZTMzMyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfNzRiYmVkZWY3MzliNGRiOGI0NjQzZDUwMmQ5NDRjOWEpOwogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UwMGQ4YmJiZmU0MjQ1YzZhODk1NDBjNzljNzQxN2Q3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuNTkxNiwgNDYuODg1OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2U2MTk0YiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEwLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNzRiYmVkZWY3MzliNGRiOGI0NjQzZDUwMmQ5NDRjOWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDE5OTRjZDk4NDg5NGI4ZmFmOGZiNzAwMjdhN2MyNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmVkOTJhZWQyYjBkNDA3ZTk3OTk3YzIwMmEzZWYzNmUgPSAkKGA8ZGl2IGlkPSJodG1sX2ZlZDkyYWVkMmIwZDQwN2U5Nzk5N2MyMDJhM2VmMzZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHNhazEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHNha2h1cjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MTk5NGNkOTg0ODk0YjhmYWY4ZmI3MDAyN2E3YzI0My5zZXRDb250ZW50KGh0bWxfZmVkOTJhZWQyYjBkNDA3ZTk3OTk3YzIwMmEzZWYzNmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTAwZDhiYmJmZTQyNDVjNmE4OTU0MGM3OWM3NDE3ZDcuYmluZFBvcHVwKHBvcHVwXzQxOTk0Y2Q5ODQ4OTRiOGZhZjhmYjcwMDI3YTdjMjQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDU0NmQyNzYzNTU0YThkOGQzOWE3ODAxN2NhY2E2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjU5MTYsIDQ2Ljg4NThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0YmU2MTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA1LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhtYXBfNzRiYmVkZWY3MzliNGRiOGI0NjQzZDUwMmQ5NDRjOWEpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTY2Y2ZmZmVjYTQxNDJkOGFhN2UxMzkxYzMwYTdlMjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZhOTMxM2EyOTRmNGM4ZDkxNTg1ZWNmZTQ3YjRmMmUgPSAkKGA8ZGl2IGlkPSJodG1sX2M2YTkzMTNhMjk0ZjRjOGQ5MTU4NWVjZmU0N2I0ZjJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdHNhazEyNDkiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHNha2h1cjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lNjZjZmZmZWNhNDE0MmQ4YWE3ZTEzOTFjMzBhN2UyOS5zZXRDb250ZW50KGh0bWxfYzZhOTMxM2EyOTRmNGM4ZDkxNTg1ZWNmZTQ3YjRmMmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTA1NDZkMjc2MzU1NGE4ZDhkMzlhNzgwMTdjYWNhNmYuYmluZFBvcHVwKHBvcHVwX2U2NmNmZmZlY2E0MTQyZDhhYTdlMTM5MWMzMGE3ZTI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZjQ0NmYwYzY3ODc0YjgyOWUzNWMwOWEyYTBjZmYwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0YmU2MTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzc0YmJlZGVmNzM5YjRkYjhiNDY0M2Q1MDJkOTQ0YzlhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhYmFjOTYzZmM5ODQzNzM5ZDQwMjZmNjU0YTRhMmFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzZjM1MTc4Njc0NDQwMjJiOTAzODM3NWU5MzQ2MWU3ID0gJChgPGRpdiBpZD0iaHRtbF80M2YzNTE3ODY3NDQ0MDIyYjkwMzgzNzVlOTM0NjFlNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3J1c3MxMjYzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJ1c3NpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmFiYWM5NjNmYzk4NDM3MzlkNDAyNmY2NTRhNGEyYWIuc2V0Q29udGVudChodG1sXzQzZjM1MTc4Njc0NDQwMjJiOTAzODM3NWU5MzQ2MWU3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJmNDQ2ZjBjNjc4NzRiODI5ZTM1YzA5YTJhMGNmZjA2LmJpbmRQb3B1cChwb3B1cF9mYWJhYzk2M2ZjOTg0MzczOWQ0MDI2ZjY1NGE0YTJhYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWUzNmYzYjBlMzIxNDlhMGFiMzU0NDAwZWZjNDk2NTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTk0YmU2IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzc0YmJlZGVmNzM5YjRkYjhiNDY0M2Q1MDJkOTQ0YzlhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY2OTA2MTE3MzY4YTQ4NzJhZjAyZmEzYzA3NGE3YjMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjN2IyYzYxMjQ4MjQ4ZjBiZTljNDA2YjkwODlhZGU1ID0gJChgPGRpdiBpZD0iaHRtbF9kYzdiMmM2MTI0ODI0OGYwYmU5YzQwNmI5MDg5YWRlNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3J1c3MxMjYzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlJ1c3NpYW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjY5MDYxMTczNjhhNDg3MmFmMDJmYTNjMDc0YTdiMzMuc2V0Q29udGVudChodG1sX2RjN2IyYzYxMjQ4MjQ4ZjBiZTljNDA2YjkwODlhZGU1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVlMzZmM2IwZTMyMTQ5YTBhYjM1NDQwMGVmYzQ5NjUyLmJpbmRQb3B1cChwb3B1cF82NjkwNjExNzM2OGE0ODcyYWYwMmZhM2MwNzRhN2IzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQ3MDU4MDVkNGQ2NDRlMDhlNDMwMDE1Y2NhMjZmNWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNjQ2LCAyNS4wNDY5OTk5OTk5OTk5OTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOTRiZTYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMCwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8obWFwXzc0YmJlZGVmNzM5YjRkYjhiNDY0M2Q1MDJkOTQ0YzlhKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYzMzliYjk5MGM2ODQ4Y2ZiZjllY2VmNTE5OGNjYzg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQyOGViZmQ1OTliMzRhMmY4MDRiMjBkN2ZiYjExYzQ0ID0gJChgPGRpdiBpZD0iaHRtbF80MjhlYmZkNTk5YjM0YTJmODA0YjIwZDdmYmIxMWM0NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2J1bGcxMjYyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkJ1bGdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MzM5YmI5OTBjNjg0OGNmYmY5ZWNlZjUxOThjY2M4Ny5zZXRDb250ZW50KGh0bWxfNDI4ZWJmZDU5OWIzNGEyZjgwNGIyMGQ3ZmJiMTFjNDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDQ3MDU4MDVkNGQ2NDRlMDhlNDMwMDE1Y2NhMjZmNWQuYmluZFBvcHVwKHBvcHVwXzYzMzliYjk5MGM2ODQ4Y2ZiZjllY2VmNTE5OGNjYzg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe750638c50>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.add_overlapping_features(\n",
    "    [\n",
    "        ['ergative', 'has cases'],\n",
    "        ['has cases', 'slavic'],\n",
    "        ['slavic']\n",
    "    ],\n",
    "    radius = 10,\n",
    "    radius_increment = 5,\n",
    "    mapping = {\n",
    "        'ergative': '#e6194b',\n",
    "        'has cases': '#4be619',\n",
    "        'slavic': '#194be6'\n",
    "    }\n",
    ")\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.17. Using Existing Folium Map <a name=\"folium\"></a>\n",
    "If you already have a `folium.Map` that you want to edit using `lingtypology`, you can pass it as `base_map` attribute."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2FkNjZiMDVkMjkwYTQ5NmI4OWExYTc5MjM2NzdlMTNkIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9hZDY2YjA1ZDI5MGE0OTZiODlhMWE3OTIzNjc3ZTEzZCIgPjwvZGl2Pgo8L2JvZHk+CjxzY3JpcHQ+ICAgIAogICAgCiAgICAKICAgICAgICB2YXIgYm91bmRzID0gbnVsbDsKICAgIAoKICAgIHZhciBtYXBfYWQ2NmIwNWQyOTBhNDk2Yjg5YTFhNzkyMzY3N2UxM2QgPSBMLm1hcCgKICAgICAgICAnbWFwX2FkNjZiMDVkMjkwYTQ5NmI4OWExYTc5MjM2NzdlMTNkJywgewogICAgICAgIGNlbnRlcjogWzAsIDBdLAogICAgICAgIHpvb206IDIsCiAgICAgICAgbWF4Qm91bmRzOiBib3VuZHMsCiAgICAgICAgbGF5ZXJzOiBbXSwKICAgICAgICB3b3JsZENvcHlKdW1wOiBmYWxzZSwKICAgICAgICBjcnM6IEwuQ1JTLkVQU0czODU3LAogICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgIH0pOwoKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzg0ZGQzMTQ4MWUxYjRhY2Q4ZGViMmNlYTU4MzY2ZjI5ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9hZDY2YjA1ZDI5MGE0OTZiODlhMWE3OTIzNjc3ZTEzZCk7CiAgICAKICAgICAgICB2YXIgbWFya2VyX2UxOTFlZGI1NTA0YjRiNzdiYTZkZjcyNjIyYjRmYTNlID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFswLCAwXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2FkNjZiMDVkMjkwYTQ5NmI4OWExYTc5MjM2NzdlMTNkKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8yYzg2ODVmZTg4OTM0OWJlOWM3OGU3NWYzZjBjNDEyNiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL09uZUFkZGVyL2xpbmd0eXBvbG9neS9tYXN0ZXIvZGF0YV9wcm9jZXNzaW5nL3dhaWZ1NjA2MC5qcGciPjwvaW1nPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZTE5MWVkYjU1MDRiNGI3N2JhNmRmNzI2MjJiNGZhM2Uuc2V0SWNvbihkaXZfaWNvbl8yYzg2ODVmZTg4OTM0OWJlOWM3OGU3NWYzZjBjNDEyNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2VlYzQ3MjhhMTdlZDQ1NWQ5N2U4NWI4ZDdjYzdhYTVkID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9hZDY2YjA1ZDI5MGE0OTZiODlhMWE3OTIzNjc3ZTEzZCk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjE3MmY2ZTkxODVmNGM1MDkwODFlZGEwZjZhMWM1Y2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS4wLCA1MC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZWVjNDcyOGExN2VkNDU1ZDk3ZTg1YjhkN2NjN2FhNWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZmU0MGNhOGM0MjY0NTA2YjM4ZDIxNDE3NTEzOGVkMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0yMi4wLCAzMC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZWVjNDcyOGExN2VkNDU1ZDk3ZTg1YjhkN2NjN2FhNWQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Yzg0NGIyMzgxMTk0NTdmYjhjZGRlNTg0YTMxZTU0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjAsIDUwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lZWM0NzI4YTE3ZWQ0NTVkOTdlODViOGQ3Y2M3YWE1ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NTIzNDFkMGI4ZDA0NWEwYmNjMjU5ZTA4YWNiZjIwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jMzUzYTYzMGJkZDk0MDg4YWVjN2QwYjQ2ODA2ZTU2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzM1M2E2MzBiZGQ5NDA4OGFlYzdkMGI0NjgwNmU1NmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9ydXNzMTI2MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5SdXNzaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1MjM0MWQwYjhkMDQ1YTBiY2MyNTllMDhhY2JmMjAyLnNldENvbnRlbnQoaHRtbF9jMzUzYTYzMGJkZDk0MDg4YWVjN2QwYjQ2ODA2ZTU2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Yzg0NGIyMzgxMTk0NTdmYjhjZGRlNTg0YTMxZTU0MC5iaW5kUG9wdXAocG9wdXBfNTUyMzQxZDBiOGQwNDVhMGJjYzI1OWUwOGFjYmYyMDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVjZGExNzY3M2EyYTQxY2ZiNDU3NDBkZTZhNTZiZWMxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTIyLjAsIDMwLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9lZWM0NzI4YTE3ZWQ0NTVkOTdlODViOGQ3Y2M3YWE1ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81Y2U2ODUwMjQ5ZGU0ZjkyODc3NDY3YjA4MmZhM2Q3ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hMDM0NWE3MDhlZTA0YTQyOWZjOTI5MmM0ZTE2MmM2ZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYTAzNDVhNzA4ZWUwNGE0MjlmYzkyOTJjNGUxNjJjNmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZnJpMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZnJpa2FhbnM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNlNjg1MDI0OWRlNGY5Mjg3NzQ2N2IwODJmYTNkN2Uuc2V0Q29udGVudChodG1sX2EwMzQ1YTcwOGVlMDRhNDI5ZmM5MjkyYzRlMTYyYzZlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzVjZGExNzY3M2EyYTQxY2ZiNDU3NDBkZTZhNTZiZWMxLmJpbmRQb3B1cChwb3B1cF81Y2U2ODUwMjQ5ZGU0ZjkyODc3NDY3YjA4MmZhM2Q3ZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe750ff0908>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import folium\n",
    "folium_map = folium.Map((0, 0), zoom_start=2)\n",
    "marker = folium.Marker((0, 0))\n",
    "icon = folium.DivIcon(\n",
    "    html='<img src=\"https://raw.githubusercontent.com/OneAdder' + \\\n",
    "    '/lingtypology/master/data_processing/waifu6060.jpg\"></img>'\n",
    ")\n",
    "marker.add_child(icon)\n",
    "folium_map.add_child(marker)\n",
    "\n",
    "m = lingtypology.LingMap(('Russian', 'Afrikaans'))\n",
    "m.base_map = folium_map\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.18. Merging Maps <a name=\"merge\"></a>\n",
    "You can also draw two `lingtypology` maps the way it is described in [1.16](#folium). However, it is not recommended and may cause glitches.\n",
    "\n",
    "You can use `lingtypology.merge`. Let's merge examples from [1.12](#gradients) and [1.13](#minicharts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2JmNzUzYTc3M2I0MDQ4YjRhNDYwMTJmN2U1NmFhODZiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2YiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TmF0aXZlIFNwZWFrZXJzPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjIwIj48bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIyMCIgeTI9IjAic3R5bGU9InN0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIiIHgyPSIyMCIgeTI9IjIic3R5bGU9InN0cm9rZTojZmZmZWZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIyMCIgeTI9IjMic3R5bGU9InN0cm9rZTojZmZmZGZkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQiIHgyPSIyMCIgeTI9IjQic3R5bGU9InN0cm9rZTojZmZmY2ZjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUiIHgyPSIyMCIgeTI9IjUic3R5bGU9InN0cm9rZTojZmZmYWZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYiIHgyPSIyMCIgeTI9IjYic3R5bGU9InN0cm9rZTojZmZmOWY5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjciIHgyPSIyMCIgeTI9Ijcic3R5bGU9InN0cm9rZTojZmZmOGY4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgiIHgyPSIyMCIgeTI9Ijgic3R5bGU9InN0cm9rZTojZmZmN2Y3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkiIHgyPSIyMCIgeTI9Ijkic3R5bGU9InN0cm9rZTojZmZmNWY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwIiB4Mj0iMjAiIHkyPSIxMCJzdHlsZT0ic3Ryb2tlOiNmZmY0ZjQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEiIHgyPSIyMCIgeTI9IjExInN0eWxlPSJzdHJva2U6I2ZmZjNmMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMiIgeDI9IjIwIiB5Mj0iMTIic3R5bGU9InN0cm9rZTojZmZmMWYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzIiB4Mj0iMjAiIHkyPSIxMyJzdHlsZT0ic3Ryb2tlOiNmZmYwZjA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQiIHgyPSIyMCIgeTI9IjE0InN0eWxlPSJzdHJva2U6I2ZmZWZlZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNSIgeDI9IjIwIiB5Mj0iMTUic3R5bGU9InN0cm9rZTojZmZlZWVlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2IiB4Mj0iMjAiIHkyPSIxNiJzdHlsZT0ic3Ryb2tlOiNmZmVjZWM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTciIHgyPSIyMCIgeTI9IjE3InN0eWxlPSJzdHJva2U6I2ZmZWJlYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZmZlYWVhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE4IiB4Mj0iMjAiIHkyPSIxOCJzdHlsZT0ic3Ryb2tlOiNmZmU2ZTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjAiIHgyPSIyMCIgeTI9IjIwInN0eWxlPSJzdHJva2U6I2ZmZTVlNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMSIgeDI9IjIwIiB5Mj0iMjEic3R5bGU9InN0cm9rZTojZmZlM2UzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIyIiB4Mj0iMjAiIHkyPSIyMiJzdHlsZT0ic3Ryb2tlOiNmZmUyZTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjMiIHgyPSIyMCIgeTI9IjIzInN0eWxlPSJzdHJva2U6I2ZmZTFlMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNCIgeDI9IjIwIiB5Mj0iMjQic3R5bGU9InN0cm9rZTojZmZkZmRmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI1IiB4Mj0iMjAiIHkyPSIyNSJzdHlsZT0ic3Ryb2tlOiNmZmRlZGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjYiIHgyPSIyMCIgeTI9IjI2InN0eWxlPSJzdHJva2U6I2ZmZGRkZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNyIgeDI9IjIwIiB5Mj0iMjcic3R5bGU9InN0cm9rZTojZmZkY2RjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI4IiB4Mj0iMjAiIHkyPSIyOCJzdHlsZT0ic3Ryb2tlOiNmZmRhZGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjkiIHgyPSIyMCIgeTI9IjI5InN0eWxlPSJzdHJva2U6I2ZmZDlkOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMCIgeDI9IjIwIiB5Mj0iMzAic3R5bGU9InN0cm9rZTojZmZkOGQ4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMxIiB4Mj0iMjAiIHkyPSIzMSJzdHlsZT0ic3Ryb2tlOiNmZmQ3ZDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzIiIHgyPSIyMCIgeTI9IjMyInN0eWxlPSJzdHJva2U6I2ZmZDVkNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMyIgeDI9IjIwIiB5Mj0iMzMic3R5bGU9InN0cm9rZTojZmZkNGQ0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM0IiB4Mj0iMjAiIHkyPSIzNCJzdHlsZT0ic3Ryb2tlOiNmZmQzZDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzUiIHgyPSIyMCIgeTI9IjM1InN0eWxlPSJzdHJva2U6I2ZmZDFkMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojZmZkMGQwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM2IiB4Mj0iMjAiIHkyPSIzNiJzdHlsZT0ic3Ryb2tlOiNmZmNjY2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzgiIHgyPSIyMCIgeTI9IjM4InN0eWxlPSJzdHJva2U6I2ZmY2JjYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzOSIgeDI9IjIwIiB5Mj0iMzkic3R5bGU9InN0cm9rZTojZmZjYWNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQwIiB4Mj0iMjAiIHkyPSI0MCJzdHlsZT0ic3Ryb2tlOiNmZmM4Yzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDEiIHgyPSIyMCIgeTI9IjQxInN0eWxlPSJzdHJva2U6I2ZmYzdjNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MiIgeDI9IjIwIiB5Mj0iNDIic3R5bGU9InN0cm9rZTojZmZjNmM2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQzIiB4Mj0iMjAiIHkyPSI0MyJzdHlsZT0ic3Ryb2tlOiNmZmM1YzU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDQiIHgyPSIyMCIgeTI9IjQ0InN0eWxlPSJzdHJva2U6I2ZmYzNjMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NSIgeDI9IjIwIiB5Mj0iNDUic3R5bGU9InN0cm9rZTojZmZjMmMyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ2IiB4Mj0iMjAiIHkyPSI0NiJzdHlsZT0ic3Ryb2tlOiNmZmMxYzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDciIHgyPSIyMCIgeTI9IjQ3InN0eWxlPSJzdHJva2U6I2ZmYmZiZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OCIgeDI9IjIwIiB5Mj0iNDgic3R5bGU9InN0cm9rZTojZmZiZWJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ5IiB4Mj0iMjAiIHkyPSI0OSJzdHlsZT0ic3Ryb2tlOiNmZmJkYmQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTAiIHgyPSIyMCIgeTI9IjUwInN0eWxlPSJzdHJva2U6I2ZmYmNiYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MSIgeDI9IjIwIiB5Mj0iNTEic3R5bGU9InN0cm9rZTojZmZiYWJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUyIiB4Mj0iMjAiIHkyPSI1MiJzdHlsZT0ic3Ryb2tlOiNmZmI5Yjk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTMiIHgyPSIyMCIgeTI9IjUzInN0eWxlPSJzdHJva2U6I2ZmYjhiODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojZmZiN2I3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU0IiB4Mj0iMjAiIHkyPSI1NCJzdHlsZT0ic3Ryb2tlOiNmZmIzYjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTYiIHgyPSIyMCIgeTI9IjU2InN0eWxlPSJzdHJva2U6I2ZmYjFiMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NyIgeDI9IjIwIiB5Mj0iNTcic3R5bGU9InN0cm9rZTojZmZiMGIwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU4IiB4Mj0iMjAiIHkyPSI1OCJzdHlsZT0ic3Ryb2tlOiNmZmFmYWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTkiIHgyPSIyMCIgeTI9IjU5InN0eWxlPSJzdHJva2U6I2ZmYWVhZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MCIgeDI9IjIwIiB5Mj0iNjAic3R5bGU9InN0cm9rZTojZmZhY2FjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYxIiB4Mj0iMjAiIHkyPSI2MSJzdHlsZT0ic3Ryb2tlOiNmZmFiYWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjIiIHgyPSIyMCIgeTI9IjYyInN0eWxlPSJzdHJva2U6I2ZmYWFhYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MyIgeDI9IjIwIiB5Mj0iNjMic3R5bGU9InN0cm9rZTojZmZhOGE4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY0IiB4Mj0iMjAiIHkyPSI2NCJzdHlsZT0ic3Ryb2tlOiNmZmE3YTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjUiIHgyPSIyMCIgeTI9IjY1InN0eWxlPSJzdHJva2U6I2ZmYTZhNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NiIgeDI9IjIwIiB5Mj0iNjYic3R5bGU9InN0cm9rZTojZmZhNWE1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY3IiB4Mj0iMjAiIHkyPSI2NyJzdHlsZT0ic3Ryb2tlOiNmZmEzYTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjgiIHgyPSIyMCIgeTI9IjY4InN0eWxlPSJzdHJva2U6I2ZmYTJhMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2OSIgeDI9IjIwIiB5Mj0iNjkic3R5bGU9InN0cm9rZTojZmZhMWExO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcwIiB4Mj0iMjAiIHkyPSI3MCJzdHlsZT0ic3Ryb2tlOiNmZjlmOWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzEiIHgyPSIyMCIgeTI9IjcxInN0eWxlPSJzdHJva2U6I2ZmOWU5ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojZmY5ZDlkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcyIiB4Mj0iMjAiIHkyPSI3MiJzdHlsZT0ic3Ryb2tlOiNmZjk5OTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzQiIHgyPSIyMCIgeTI9Ijc0InN0eWxlPSJzdHJva2U6I2ZmOTg5ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NSIgeDI9IjIwIiB5Mj0iNzUic3R5bGU9InN0cm9rZTojZmY5Nzk3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc2IiB4Mj0iMjAiIHkyPSI3NiJzdHlsZT0ic3Ryb2tlOiNmZjk1OTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzciIHgyPSIyMCIgeTI9Ijc3InN0eWxlPSJzdHJva2U6I2ZmOTQ5NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OCIgeDI9IjIwIiB5Mj0iNzgic3R5bGU9InN0cm9rZTojZmY5MzkzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc5IiB4Mj0iMjAiIHkyPSI3OSJzdHlsZT0ic3Ryb2tlOiNmZjkxOTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODAiIHgyPSIyMCIgeTI9IjgwInN0eWxlPSJzdHJva2U6I2ZmOTA5MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MSIgeDI9IjIwIiB5Mj0iODEic3R5bGU9InN0cm9rZTojZmY4ZjhmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgyIiB4Mj0iMjAiIHkyPSI4MiJzdHlsZT0ic3Ryb2tlOiNmZjhlOGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODMiIHgyPSIyMCIgeTI9IjgzInN0eWxlPSJzdHJva2U6I2ZmOGM4YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NCIgeDI9IjIwIiB5Mj0iODQic3R5bGU9InN0cm9rZTojZmY4YjhiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg1IiB4Mj0iMjAiIHkyPSI4NSJzdHlsZT0ic3Ryb2tlOiNmZjhhOGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODYiIHgyPSIyMCIgeTI9Ijg2InN0eWxlPSJzdHJva2U6I2ZmODg4ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NyIgeDI9IjIwIiB5Mj0iODcic3R5bGU9InN0cm9rZTojZmY4Nzg3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg4IiB4Mj0iMjAiIHkyPSI4OCJzdHlsZT0ic3Ryb2tlOiNmZjg2ODY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODkiIHgyPSIyMCIgeTI9Ijg5InN0eWxlPSJzdHJva2U6I2ZmODU4NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojZmY4MzgzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkwIiB4Mj0iMjAiIHkyPSI5MCJzdHlsZT0ic3Ryb2tlOiNmZjdmN2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTIiIHgyPSIyMCIgeTI9IjkyInN0eWxlPSJzdHJva2U6I2ZmN2U3ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MyIgeDI9IjIwIiB5Mj0iOTMic3R5bGU9InN0cm9rZTojZmY3ZDdkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk0IiB4Mj0iMjAiIHkyPSI5NCJzdHlsZT0ic3Ryb2tlOiNmZjdjN2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTUiIHgyPSIyMCIgeTI9Ijk1InN0eWxlPSJzdHJva2U6I2ZmN2E3YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NiIgeDI9IjIwIiB5Mj0iOTYic3R5bGU9InN0cm9rZTojZmY3OTc5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk3IiB4Mj0iMjAiIHkyPSI5NyJzdHlsZT0ic3Ryb2tlOiNmZjc4Nzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTgiIHgyPSIyMCIgeTI9Ijk4InN0eWxlPSJzdHJva2U6I2ZmNzc3NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5OSIgeDI9IjIwIiB5Mj0iOTkic3R5bGU9InN0cm9rZTojZmY3NTc1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMCIgeDI9IjIwIiB5Mj0iMTAwInN0eWxlPSJzdHJva2U6I2ZmNzQ3NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDEiIHgyPSIyMCIgeTI9IjEwMSJzdHlsZT0ic3Ryb2tlOiNmZjczNzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAyIiB4Mj0iMjAiIHkyPSIxMDIic3R5bGU9InN0cm9rZTojZmY3MTcxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMyIgeDI9IjIwIiB5Mj0iMTAzInN0eWxlPSJzdHJva2U6I2ZmNzA3MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDQiIHgyPSIyMCIgeTI9IjEwNCJzdHlsZT0ic3Ryb2tlOiNmZjZmNmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA1IiB4Mj0iMjAiIHkyPSIxMDUic3R5bGU9InN0cm9rZTojZmY2ZTZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNiIgeDI9IjIwIiB5Mj0iMTA2InN0eWxlPSJzdHJva2U6I2ZmNmM2YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDciIHgyPSIyMCIgeTI9IjEwNyJzdHlsZT0ic3Ryb2tlOiNmZjZiNmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA4IiB4Mj0iMjAiIHkyPSIxMDgic3R5bGU9InN0cm9rZTojZmY2YTZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6I2ZmNjY2NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTAiIHgyPSIyMCIgeTI9IjExMCJzdHlsZT0ic3Ryb2tlOiNmZjY1NjU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTExIiB4Mj0iMjAiIHkyPSIxMTEic3R5bGU9InN0cm9rZTojZmY2MzYzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMiIgeDI9IjIwIiB5Mj0iMTEyInN0eWxlPSJzdHJva2U6I2ZmNjI2MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTMiIHgyPSIyMCIgeTI9IjExMyJzdHlsZT0ic3Ryb2tlOiNmZjYxNjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE0IiB4Mj0iMjAiIHkyPSIxMTQic3R5bGU9InN0cm9rZTojZmY1ZjVmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNSIgeDI9IjIwIiB5Mj0iMTE1InN0eWxlPSJzdHJva2U6I2ZmNWU1ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTYiIHgyPSIyMCIgeTI9IjExNiJzdHlsZT0ic3Ryb2tlOiNmZjVkNWQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE3IiB4Mj0iMjAiIHkyPSIxMTcic3R5bGU9InN0cm9rZTojZmY1YzVjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExOCIgeDI9IjIwIiB5Mj0iMTE4InN0eWxlPSJzdHJva2U6I2ZmNWE1YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTkiIHgyPSIyMCIgeTI9IjExOSJzdHlsZT0ic3Ryb2tlOiNmZjU5NTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIwIiB4Mj0iMjAiIHkyPSIxMjAic3R5bGU9InN0cm9rZTojZmY1ODU4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMSIgeDI9IjIwIiB5Mj0iMTIxInN0eWxlPSJzdHJva2U6I2ZmNTc1NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjIiIHgyPSIyMCIgeTI9IjEyMiJzdHlsZT0ic3Ryb2tlOiNmZjU1NTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIzIiB4Mj0iMjAiIHkyPSIxMjMic3R5bGU9InN0cm9rZTojZmY1NDU0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNCIgeDI9IjIwIiB5Mj0iMTI0InN0eWxlPSJzdHJva2U6I2ZmNTM1MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjUiIHgyPSIyMCIgeTI9IjEyNSJzdHlsZT0ic3Ryb2tlOiNmZjUxNTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI2IiB4Mj0iMjAiIHkyPSIxMjYic3R5bGU9InN0cm9rZTojZmY1MDUwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6I2ZmNGM0YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjgiIHgyPSIyMCIgeTI9IjEyOCJzdHlsZT0ic3Ryb2tlOiNmZjRiNGI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI5IiB4Mj0iMjAiIHkyPSIxMjkic3R5bGU9InN0cm9rZTojZmY0YTRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMCIgeDI9IjIwIiB5Mj0iMTMwInN0eWxlPSJzdHJva2U6I2ZmNDg0ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzEiIHgyPSIyMCIgeTI9IjEzMSJzdHlsZT0ic3Ryb2tlOiNmZjQ3NDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMyIiB4Mj0iMjAiIHkyPSIxMzIic3R5bGU9InN0cm9rZTojZmY0NjQ2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMyIgeDI9IjIwIiB5Mj0iMTMzInN0eWxlPSJzdHJva2U6I2ZmNDU0NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzQiIHgyPSIyMCIgeTI9IjEzNCJzdHlsZT0ic3Ryb2tlOiNmZjQzNDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM1IiB4Mj0iMjAiIHkyPSIxMzUic3R5bGU9InN0cm9rZTojZmY0MjQyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNiIgeDI9IjIwIiB5Mj0iMTM2InN0eWxlPSJzdHJva2U6I2ZmNDE0MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzciIHgyPSIyMCIgeTI9IjEzNyJzdHlsZT0ic3Ryb2tlOiNmZjNmM2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM4IiB4Mj0iMjAiIHkyPSIxMzgic3R5bGU9InN0cm9rZTojZmYzZTNlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOSIgeDI9IjIwIiB5Mj0iMTM5InN0eWxlPSJzdHJva2U6I2ZmM2QzZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDAiIHgyPSIyMCIgeTI9IjE0MCJzdHlsZT0ic3Ryb2tlOiNmZjNjM2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQxIiB4Mj0iMjAiIHkyPSIxNDEic3R5bGU9InN0cm9rZTojZmYzYTNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MiIgeDI9IjIwIiB5Mj0iMTQyInN0eWxlPSJzdHJva2U6I2ZmMzkzOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDMiIHgyPSIyMCIgeTI9IjE0MyJzdHlsZT0ic3Ryb2tlOiNmZjM4Mzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ0IiB4Mj0iMjAiIHkyPSIxNDQic3R5bGU9InN0cm9rZTojZmYzNzM3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6I2ZmMzMzMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDYiIHgyPSIyMCIgeTI9IjE0NiJzdHlsZT0ic3Ryb2tlOiNmZjMxMzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ3IiB4Mj0iMjAiIHkyPSIxNDcic3R5bGU9InN0cm9rZTojZmYzMDMwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0OCIgeDI9IjIwIiB5Mj0iMTQ4InN0eWxlPSJzdHJva2U6I2ZmMmYyZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDkiIHgyPSIyMCIgeTI9IjE0OSJzdHlsZT0ic3Ryb2tlOiNmZjJlMmU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUwIiB4Mj0iMjAiIHkyPSIxNTAic3R5bGU9InN0cm9rZTojZmYyYzJjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MSIgeDI9IjIwIiB5Mj0iMTUxInN0eWxlPSJzdHJva2U6I2ZmMmIyYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTIiIHgyPSIyMCIgeTI9IjE1MiJzdHlsZT0ic3Ryb2tlOiNmZjJhMmE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUzIiB4Mj0iMjAiIHkyPSIxNTMic3R5bGU9InN0cm9rZTojZmYyODI4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NCIgeDI9IjIwIiB5Mj0iMTU0InN0eWxlPSJzdHJva2U6I2ZmMjcyNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTUiIHgyPSIyMCIgeTI9IjE1NSJzdHlsZT0ic3Ryb2tlOiNmZjI2MjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU2IiB4Mj0iMjAiIHkyPSIxNTYic3R5bGU9InN0cm9rZTojZmYyNTI1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NyIgeDI9IjIwIiB5Mj0iMTU3InN0eWxlPSJzdHJva2U6I2ZmMjMyMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTgiIHgyPSIyMCIgeTI9IjE1OCJzdHlsZT0ic3Ryb2tlOiNmZjIyMjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU5IiB4Mj0iMjAiIHkyPSIxNTkic3R5bGU9InN0cm9rZTojZmYyMTIxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MCIgeDI9IjIwIiB5Mj0iMTYwInN0eWxlPSJzdHJva2U6I2ZmMWYxZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjEiIHgyPSIyMCIgeTI9IjE2MSJzdHlsZT0ic3Ryb2tlOiNmZjFlMWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYyIiB4Mj0iMjAiIHkyPSIxNjIic3R5bGU9InN0cm9rZTojZmYxZDFkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6I2ZmMTkxOTtzdHJva2Utd2lkdGg6MzsiIC8+PC9zdmc+PHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjUwIj48dGV4dCB4PSI1IiB5PSIxOSIgZHg9IjAiIGR5PSIwZXgiPi0gNTA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMzciIGR4PSIwIiBkeT0iMGV4Ij4tIDEwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSI1NSIgZHg9IjAiIGR5PSIwZXgiPi0gMTUwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjczIiBkeD0iMCIgZHk9IjBleCI+LSAyMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iOTEiIGR4PSIwIiBkeT0iMGV4Ij4tIDI1MDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxMDkiIGR4PSIwIiBkeT0iMGV4Ij4tIDMwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxMjciIGR4PSIwIiBkeT0iMGV4Ij4tIDM1MDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNDUiIGR4PSIwIiBkeT0iMGV4Ij4tIDQwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNjMiIGR4PSIwIiBkeT0iMGV4Ij4tIDQ1MDwvdGV4dD48L3N2Zz4KCiAgPC91bD4KPC9kaXY+CjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cgo8c3R5bGUgdHlwZT0ndGV4dC9jc3MnPgogIC5tYXBsZWdlbmQgLmxlZ2VuZC10aXRsZSB7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LXNpemU6IDkwJTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgewogICAgbWFyZ2luOiAwOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgcGFkZGluZzogMDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc2NhbGUgdWwgbGkgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBsaW5lLWhlaWdodDogMThweDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIH0KICAubWFwbGVnZW5kIHVsLmxlZ2VuZC1sYWJlbHMgbGkgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZsb2F0OiBsZWZ0OwogICAgaGVpZ2h0OiAxNnB4OwogICAgd2lkdGg6IDMwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgCiAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgCiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNvdXJjZSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGNvbG9yOiAjNzc3OwogICAgY2xlYXI6IGJvdGg7CiAgICB9CiAgLm1hcGxlZ2VuZCBhIHsKICAgIGNvbG9yOiAjNzc3OwogICAgfQo8L3N0eWxlPgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5Db25zb25hbnRzL1Zvd2VsczwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2U2MTk0YjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5jb25zb25hbnRzPC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTllNmI0O29wYWNpdHk6MC43OyI+PC9zcGFuPnZvd2VsczwvbGk+CgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2YiA9IEwubWFwKAogICAgICAgICdtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmInLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2Yik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl83ZjIzZTI5OTQyNjU0NGQ4OGYyMDNmMzcyN2YzNTA1YyA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2Yik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTRiYmYyMjRhZjVjNGUwOWIyMmI3YjNmNzc3NDlmNWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjZiMWNjN2VmOGU0NGE5YmI3NTcxZDUxMmI1ZWU4ZDIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYTJjMjRkMWE0Yzk0MjgyODk1NjFjYzI3Y2UxZjAyYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU4LjU1LCAyNS44Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTdlYTczYmE2ZTA2NDJkMjk4NDQ0ZjI4ZDkzYWI2MGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OS45MiwgMTAuNzFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NmIxY2M3ZWY4ZTQ0YTliYjc1NzFkNTEyYjVlZThkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjYzM3YmY1NmQzNDRkNDY5ZGU5NzA0NzhjOTRhNDg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzkxMywgMjQuMjI1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2FkYTY4MWRhYTM5NDUyYTg0NGI2YzgzOTYyZWQ2ZGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1MS44NDM5LCAxOC42MjU1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjZiMWNjN2VmOGU0NGE5YmI3NTcxZDUxMmI1ZWU4ZDIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNWUxZTU3MGYwYTE0ZGFlOGI4MGFjNGUyNDdkNGMwMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjA0NjQsIDEyLjY0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NmIxY2M3ZWY4ZTQ0YTliYjc1NzFkNTEyYjVlZThkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxZGE0ZDg4OWRlMTRhNTE5ZGQ3YjE5MzJiMzI0YzM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGU2NTRlZGRjZjVmNDc5Njg5YzRhZjU2MjA2MDBmODYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0OC4wLCAyLjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NmIxY2M3ZWY4ZTQ0YTliYjc1NzFkNTEyYjVlZThkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M3MmQyMGExYmIzNTQ2YzZhNWM3MzQyOWRmMzAwYjRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWVkZjk0YmU1M2IyNDEzZGIzZTMyYjYyN2JkOTNjZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWNjMDQ4YTQ2ODc4NDk4YmE1ZWYwMjY0ZDUwZjIyNDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1My4yMTg2LCAtNy42MTUwODk5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjZiMWNjN2VmOGU0NGE5YmI3NTcxZDUxMmI1ZWU4ZDIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2E1MTMxZmY1NWVkNDE3MTlmM2ZlMWRiNTQ2NDRmZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2JmZGJiZmVhNzViNDA2Njk1MTFmMjcxOTgwYzU1YWEgPSAkKGA8ZGl2IGlkPSJodG1sXzNiZmRiYmZlYTc1YjQwNjY5NTExZjI3MTk4MGM1NWFhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXJpczEyNTMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXJpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfY2E1MTMxZmY1NWVkNDE3MTlmM2ZlMWRiNTQ2NDRmZWYuc2V0Q29udGVudChodG1sXzNiZmRiYmZlYTc1YjQwNjY5NTExZjI3MTk4MGM1NWFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VjYzA0OGE0Njg3ODQ5OGJhNWVmMDI2NGQ1MGYyMjQ5LmJpbmRQb3B1cChwb3B1cF9jYTUxMzFmZjU1ZWQ0MTcxOWYzZmUxZGI1NDY0NGZlZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmI1M2U2NzMyZmIzNDgzODk3YzRiODU2MTFkYmU1MjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs1OC41NSwgMjUuODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NmIxY2M3ZWY4ZTQ0YTliYjc1NzFkNTEyYjVlZThkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84YTU3ZTM3YzYwYjg0MGRmYTY5NjNlY2NjZTVmYmExNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jOTFjM2E2NjVmYmU0ODQ3OTVmYzBiMzE1ZGNjOTk0MCA9ICQoYDxkaXYgaWQ9Imh0bWxfYzkxYzNhNjY1ZmJlNDg0Nzk1ZmMwYjMxNWRjYzk5NDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9lc3RvMTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Fc3RvbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84YTU3ZTM3YzYwYjg0MGRmYTY5NjNlY2NjZTVmYmExNy5zZXRDb250ZW50KGh0bWxfYzkxYzNhNjY1ZmJlNDg0Nzk1ZmMwYjMxNWRjYzk5NDApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmI1M2U2NzMyZmIzNDgzODk3YzRiODU2MTFkYmU1MjIuYmluZFBvcHVwKHBvcHVwXzhhNTdlMzdjNjBiODQwZGZhNjk2M2VjY2NlNWZiYTE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYWJkYjdjOTQ2YjA0NzFkYTM0MjY4YjcyNWIwNTAwOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjkyLCAxMC43MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmRmZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2MyMDA1MDM5MzYzYTQ2YzQ4MDY3NmZiOGYwZjBiODJiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZmMGQ0NGI2NmY0ZDRlOWI4MjVjMzNiNjViNzQ4ZTI1ID0gJChgPGRpdiBpZD0iaHRtbF9mZjBkNDRiNjZmNGQ0ZTliODI1YzMzYjY1Yjc0OGUyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL25vcncxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk5vcndlZ2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMjAwNTAzOTM2M2E0NmM0ODA2NzZmYjhmMGYwYjgyYi5zZXRDb250ZW50KGh0bWxfZmYwZDQ0YjY2ZjRkNGU5YjgyNWMzM2I2NWI3NDhlMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWFiZGI3Yzk0NmIwNDcxZGEzNDI2OGI3MjViMDUwMDkuYmluZFBvcHVwKHBvcHVwX2MyMDA1MDM5MzYzYTQ2YzQ4MDY3NmZiOGYwZjBiODJiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZDViMjhiOWI4MTA0YWJjOGVkMWQ3NDg2NjA1ZDJkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjM5MTMsIDI0LjIyNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmYzZjMiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NmIxY2M3ZWY4ZTQ0YTliYjc1NzFkNTEyYjVlZThkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kYWM5MjkzNDBiZTI0ZWU4YjJmM2MyZWRjNWYzYmMwZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wZmY3ZGRiMDljNDc0NGM5OWRlMTFkOTE2ZmVmNzA2MSA9ICQoYDxkaXYgaWQ9Imh0bWxfMGZmN2RkYjA5YzQ3NDRjOTlkZTExZDkxNmZlZjcwNjEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9yb21hMTMyNyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Sb21hbmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYWM5MjkzNDBiZTI0ZWU4YjJmM2MyZWRjNWYzYmMwZC5zZXRDb250ZW50KGh0bWxfMGZmN2RkYjA5YzQ3NDRjOTlkZTExZDkxNmZlZjcwNjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWQ1YjI4YjliODEwNGFiYzhlZDFkNzQ4NjYwNWQyZDguYmluZFBvcHVwKHBvcHVwX2RhYzkyOTM0MGJlMjRlZThiMmYzYzJlZGM1ZjNiYzBkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzcwYzVhODcyMTE0MDA1ODM0YWFjMjU4ZTMwMDYyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzUxLjg0MzksIDE4LjYyNTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmU5ZTkiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NmIxY2M3ZWY4ZTQ0YTliYjc1NzFkNTEyYjVlZThkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjY4MzVjNmYzODQ0ZGVkYjAzMDRmOTY2OGJiNTA0OSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wMjZkYzJjNjg0M2U0MzMyYjk0YWFmYjBmZDlkNGIzNiA9ICQoYDxkaXYgaWQ9Imh0bWxfMDI2ZGMyYzY4NDNlNDMzMmI5NGFhZmIwZmQ5ZDRiMzYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9wb2xpMTI2MCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5Qb2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDI2ODM1YzZmMzg0NGRlZGIwMzA0Zjk2NjhiYjUwNDkuc2V0Q29udGVudChodG1sXzAyNmRjMmM2ODQzZTQzMzJiOTRhYWZiMGZkOWQ0YjM2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhjNzBjNWE4NzIxMTQwMDU4MzRhYWMyNThlMzAwNjIwLmJpbmRQb3B1cChwb3B1cF8wMjY4MzVjNmYzODQ0ZGVkYjAzMDRmOTY2OGJiNTA0OSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTExZDFkMGY1ODkzNDc4Y2FkNThiMGExMTAxNzI1MTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wNDY0LCAxMi42NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMGUwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjZiMWNjN2VmOGU0NGE5YmI3NTcxZDUxMmI1ZWU4ZDIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg1OWZkN2U4OWY4NDBhYzgxNDUyMDY2NDlhOTQwZjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWMwMGNlNDE3OGM0NDc3Njk5MDBiMzZhM2UxNzBmMTMgPSAkKGA8ZGl2IGlkPSJodG1sX2VjMDBjZTQxNzhjNDQ3NzY5OTAwYjM2YTNlMTcwZjEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaXRhbDEyODIiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SXRhbGlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81ODU5ZmQ3ZTg5Zjg0MGFjODE0NTIwNjY0OWE5NDBmNC5zZXRDb250ZW50KGh0bWxfZWMwMGNlNDE3OGM0NDc3Njk5MDBiMzZhM2UxNzBmMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTExZDFkMGY1ODkzNDc4Y2FkNThiMGExMTAxNzI1MTMuYmluZFBvcHVwKHBvcHVwXzU4NTlmZDdlODlmODQwYWM4MTQ1MjA2NjQ5YTk0MGY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NmUyMTY2MmI1MTE0OTY4YjliODdmMzdiNWFhNzJiZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmQ4ZDgiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF82NmIxY2M3ZWY4ZTQ0YTliYjc1NzFkNTEyYjVlZThkMik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81NWUyMmFhYzNhODg0Y2NkODI1MzJmYjhiZDZhZTBhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYmM2YjlmYzk5OWM0ZDlhODRhNGU2YmNkN2JlY2Q2NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWJjNmI5ZmM5OTljNGQ5YTg0YTRlNmJjZDdiZWNkNjYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU1ZTIyYWFjM2E4ODRjY2Q4MjUzMmZiOGJkNmFlMGEzLnNldENvbnRlbnQoaHRtbF9hYmM2YjlmYzk5OWM0ZDlhODRhNGU2YmNkN2JlY2Q2Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82NmUyMTY2MmI1MTE0OTY4YjliODdmMzdiNWFhNzJiZS5iaW5kUG9wdXAocG9wdXBfNTVlMjJhYWMzYTg4NGNjZDgyNTMyZmI4YmQ2YWUwYTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlNWU4NjhlYzVhZTRlMjI5MjgzODk4MWQ5OTFmZWQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMCwgMi4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZkOGQ4IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNjZiMWNjN2VmOGU0NGE5YmI3NTcxZDUxMmI1ZWU4ZDIpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmEyYjVhMTRkODgyNGU4Njg1NjU1MzQ2Y2I2ZDAwYzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTQzOGZmNTQ1MzNmNDc3ZGE4NmI2ZWY1ZjA0ZGE3OGMgPSAkKGA8ZGl2IGlkPSJodG1sX2E0MzhmZjU0NTMzZjQ3N2RhODZiNmVmNWYwNGRhNzhjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc3RhbjEyOTAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+RnJlbmNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZhMmI1YTE0ZDg4MjRlODY4NTY1NTM0NmNiNmQwMGM1LnNldENvbnRlbnQoaHRtbF9hNDM4ZmY1NDUzM2Y0NzdkYTg2YjZlZjVmMDRkYTc4Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hZTVlODY4ZWM1YWU0ZTIyOTI4Mzg5ODFkOTkxZmVkMC5iaW5kUG9wdXAocG9wdXBfNmEyYjVhMTRkODgyNGU4Njg1NjU1MzQ2Y2I2ZDAwYzUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU3ZDdjZTU3MjNjNzQ4OWE4ZDAzM2E0NjUxZTUxM2Q2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTMuMCwgLTEuMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmM2UzZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5ZWEzZWVjZmUwYTRmZmQ5MDBiY2RmZGQ5ZjllYjk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzE4NmY4MDJjYzc1NTQ4MmQ4YzYxMWM3Yzk2MzY5NGY5ID0gJChgPGRpdiBpZD0iaHRtbF8xODZmODAyY2M3NTU0ODJkOGM2MTFjN2M5NjM2OTRmOSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjkzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkVuZ2xpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTllYTNlZWNmZTBhNGZmZDkwMGJjZGZkZDlmOWViOTQuc2V0Q29udGVudChodG1sXzE4NmY4MDJjYzc1NTQ4MmQ4YzYxMWM3Yzk2MzY5NGY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU3ZDdjZTU3MjNjNzQ4OWE4ZDAzM2E0NjUxZTUxM2Q2LmJpbmRQb3B1cChwb3B1cF81OWVhM2VlY2ZlMGE0ZmZkOTAwYmNkZmRkOWY5ZWI5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGZhNWUxM2RiNTc5NDFhZWEyZTAzYzc5MTBmMWViNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0MC40NDE0LCAtMS4xMTc4OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmMWQxZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzY2YjFjYzdlZjhlNDRhOWJiNzU3MWQ1MTJiNWVlOGQyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyYjA3MmU5ZjA2YTRmMTdiZTM1ZjY3YTBkOWM0MGRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI2NWJiYTc3OTI4ODQ0NThiMmY2MjA4YThhNTgwYWFhID0gJChgPGRpdiBpZD0iaHRtbF8yNjViYmE3NzkyODg0NDU4YjJmNjIwOGE4YTU4MGFhYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3N0YW4xMjg4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNwYW5pc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTJiMDcyZTlmMDZhNGYxN2JlMzVmNjdhMGQ5YzQwZGMuc2V0Q29udGVudChodG1sXzI2NWJiYTc3OTI4ODQ0NThiMmY2MjA4YThhNTgwYWFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RmYTVlMTNkYjU3OTQxYWVhMmUwM2M3OTEwZjFlYjc2LmJpbmRQb3B1cChwb3B1cF9hMmIwNzJlOWYwNmE0ZjE3YmUzNWY2N2EwZDljNDBkYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzk2ZTU2MTJmZjhhMzQzOWFhYmUwNzUyZWFjOWUyZjM1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmNzUzYTc3M2I0MDQ4YjRhNDYwMTJmN2U1NmFhODZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8xMTZlZWFmNDM3Mjc0YTM4ODQ5ZjNjN2E3ZjRmNzA4MiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44NDM4NTQgOC40NDU2IDE5LjU1NDkxNSA4LjYzODc1NiAxOC4zMTU3MDUgOS4wMTg2OTYgQyAxNy4wNzY0OTYgOS4zOTg2MzUgMTUuOTAwNzk2IDkuOTYxMTM0IDE0LjgyNzM5NCAxMC42ODc2MzMgQyAxMy43NTM5OTEgMTEuNDE0MTMzIDEyLjc5NDgyMiAxMi4yOTY1NTUgMTEuOTgxNTMxIDEzLjMwNTc4OCBDIDExLjE2ODI0IDE0LjMxNTAyMSAxMC41MDk4NjkgMTUuNDM5ODQzIDEwLjAyODE0MSAxNi42NDMxNDMgQyA5LjU0NjQxMiAxNy44NDY0NDMgOS4yNDY2ODEgMTkuMTE0ODQyIDkuMTM4ODM3IDIwLjQwNjQ5NCBDIDkuMDMwOTk0IDIxLjY5ODE0NSA5LjExNjIzNSAyMi45OTg2ODcgOS4zOTE3NTEgMjQuMjY1MjEyIEMgOS42NjcyNjcgMjUuNTMxNzM2IDEwLjEyOTk5MiAyNi43NTAxNjEgMTAuNzY0NjYyIDI3Ljg4MDI4OSBDIDExLjM5OTMzMiAyOS4wMTA0MTcgMTIuMTk4ODg4IDMwLjAzOTY4IDEzLjEzNjk1MyAzMC45MzQxMjQgQyAxNC4wNzUwMTggMzEuODI4NTY3IDE1LjE0MTE2IDMyLjU3ODI0MyAxNi4zMDAyMDcgMzMuMTU4NDIgQyAxNy40NTkyNTMgMzMuNzM4NTk4IDE4LjY5ODMxNSAzNC4xNDI4MjQgMTkuOTc2NTE1IDM0LjM1Nzc2NCBDIDIxLjI1NDcxNSAzNC41NzI3MDQgMjIuNTU3ODM5IDM0LjU5NTk2NyAyMy44NDI4OTcgMzQuNDI2Nzg2IEMgMjUuMTI3OTU0IDM0LjI1NzYwNSAyNi4zODA2NTQgMzMuODk3ODYxIDI3LjU1OTY3IDMzLjM1OTQyMyBDIDI4LjczODY4NiAzMi44MjA5ODUgMjkuODMwOTA3IDMyLjEwOTgzOSAzMC44MDAyOTkgMzEuMjQ5NDQ4IEMgMzEuNzY5NjkgMzAuMzg5MDU2IDMyLjYwNTQ3NCAyOS4zODg5ODYgMzMuMjgwMDc3IDI4LjI4MjIzMiBDIDMzLjk1NDY3OSAyNy4xNzU0NzcgMzQuNDYwNTk4IDI1Ljk3NDM0NCAzNC43ODExNDMgMjQuNzE4NDYgQyAzNS4xMDE2ODkgMjMuNDYyNTc2IDM1LjIzMzI5NiAyMi4xNjU5MDYgMzUuMTcxNjIzIDIwLjg3MTIyOCBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzUuMTcxNjIzIDIwLjg3MTIyOCBDIDM1LjAxMjE1MiAxNy41MjM1MDkgMzMuNTY4NjUzIDE0LjM2MjY4NyAzMS4xNDMwNDcgMTIuMDQ5ODc2IEMgMjguNzE3NDQxIDkuNzM3MDY2IDI1LjQ5MTUxNSA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMTcxNjIzIDIwLjg3MTIyOCB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTZlNTYxMmZmOGEzNDM5YWFiZTA3NTJlYWM5ZTJmMzUuc2V0SWNvbihkaXZfaWNvbl8xMTZlZWFmNDM3Mjc0YTM4ODQ5ZjNjN2E3ZjRmNzA4Mik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMTM5MTQ0OWMwZjc0N2YyYTI2OTEzNTIyMzFiMDE5NCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNWYzNGJlMmZiMjE0YWUwYWM0MzdiYmQwZWMxNDhkOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZTVmMzRiZTJmYjIxNGFlMGFjNDM3YmJkMGVjMTQ4ZDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdXJraXNoPC9hPjxicj5jb25zb25hbnRzOiAyNTxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMTM5MTQ0OWMwZjc0N2YyYTI2OTEzNTIyMzFiMDE5NC5zZXRDb250ZW50KGh0bWxfZTVmMzRiZTJmYjIxNGFlMGFjNDM3YmJkMGVjMTQ4ZDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85NmU1NjEyZmY4YTM0MzlhYWJlMDc1MmVhYzllMmYzNS5iaW5kUG9wdXAocG9wdXBfZTEzOTE0NDljMGY3NDdmMmEyNjkxMzUyMjMxYjAxOTQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mMmNjY2FhNjkzYjY0NWExOTYzYzYzOTA3YjRkZmFjYyA9IEwubWFya2VyKAogICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzlhNmFmZmRmNmFmODQ2MjM4ZWNiYTVjZWMyMzkzMjNhID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5Ljg4NjIyMSA4LjQ0NTYgMTcuNjcwNDM2IDkuMDI5NjE0IDE1LjcwOTQ1MyAxMC4xNDA0OTcgQyAxMy43NDg0NyAxMS4yNTEzOCAxMi4xMDg0MDMgMTIuODUxNjggMTAuOTQ5NzI5IDE0Ljc4NDgxIEMgOS43OTEwNTYgMTYuNzE3OTQgOS4xNTI4NCAxOC45MTg3MjYgOS4wOTc1MjkgMjEuMTcxODI1IEMgOS4wNDIyMTkgMjMuNDI0OTI1IDkuNTcxNjc5IDI1LjY1NDM3NSAxMC42MzQxMDIgMjcuNjQyMDMgQyAxMS42OTY1MjYgMjkuNjI5Njg2IDEzLjI1NjA5NCAzMS4zMDg1MzEgMTUuMTYwMjA3IDMyLjUxNDI5OCBDIDE3LjA2NDMyIDMzLjcyMDA2NCAxOS4yNDg3OCAzNC40MTIwOTcgMjEuNDk5ODQzIDM0LjUyMjY4NSBDIDIzLjc1MDkwNyAzNC42MzMyNzMgMjUuOTkyNjc5IDM0LjE1ODY4NiAyOC4wMDU4MDkgMzMuMTQ1MzYyIEMgMzAuMDE4OTM5IDMyLjEzMjAzNyAzMS43MzU1NTMgMzAuNjE0MTQgMzIuOTg3Njg1IDI4Ljc0MDE5MSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuOTg3Njg1IDI4Ljc0MDE5MSBDIDM0LjMwMDEzOCAyNi43NzU5NjcgMzUuMDU0NzcgMjQuNDkxNjYzIDM1LjE3MDY4NSAyMi4xMzIxNTcgQyAzNS4yODY2IDE5Ljc3MjY1IDM0Ljc1OTUwMyAxNy40MjUzNzggMzMuNjQ1ODk4IDE1LjM0MTk3IEMgMzIuNTMyMjkyIDEzLjI1ODU2MSAzMC44NzM0NDcgMTEuNTE2MjIxIDI4Ljg0NzE5IDEwLjMwMTcyOSBDIDI2LjgyMDkzMyA5LjA4NzIzOCAyNC41MDIzNTIgOC40NDU2IDIyLjE0IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMyLjk4NzY4NSAyOC43NDAxOTEgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2YyY2NjYWE2OTNiNjQ1YTE5NjNjNjM5MDdiNGRmYWNjLnNldEljb24oZGl2X2ljb25fOWE2YWZmZGY2YWY4NDYyMzhlY2JhNWNlYzIzOTMyM2EpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGY3N2RkNTkyZTQwNGM2OGE0MTIxMTRhMjE4YjI2ZWUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTlhZGZkNWQ1OGI0NDFlMmI4NDQ1NDc5YWUxYjBiY2YgPSAkKGA8ZGl2IGlkPSJodG1sXzU5YWRmZDVkNThiNDQxZTJiODQ0NTQ3OWFlMWIwYmNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva29yZTEyODAiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S29yZWFuPC9hPjxicj5jb25zb25hbnRzOiAyMTxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGY3N2RkNTkyZTQwNGM2OGE0MTIxMTRhMjE4YjI2ZWUuc2V0Q29udGVudChodG1sXzU5YWRmZDVkNThiNDQxZTJiODQ0NTQ3OWFlMWIwYmNmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjJjY2NhYTY5M2I2NDVhMTk2M2M2MzkwN2I0ZGZhY2MuYmluZFBvcHVwKHBvcHVwXzBmNzdkZDU5MmU0MDRjNjhhNDEyMTE0YTIxOGIyNmVlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNWVmZTZlMmM4NzEyNDA3MmJkNjI5MGQyOTIzNTlkNTAgPSBMLm1hcmtlcigKICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzM3YTFlMDU4NDBkYzRhZWZhMWU5ZTQ3MTM2ZjdkNDQ5ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjY5MTY0OCA4LjQ0NTYgMTkuMjUzMzU1IDguNjg2Nzg0IDE3Ljg4NDIyOCA5LjE1OTI0MSBDIDE2LjUxNTEwMSA5LjYzMTY5NyAxNS4yMzQxNTcgMTAuMzI4ODY0IDE0LjA5NDAzOSAxMS4yMjIwODkgQyAxMi45NTM5MiAxMi4xMTUzMTUgMTEuOTcwNDYyIDEzLjE5MjE5NCAxMS4xODQwODEgMTQuNDA4NDcxIEMgMTAuMzk3NyAxNS42MjQ3NDcgOS44MTkzMTggMTYuOTYzNTI3IDkuNDcyNzA1IDE4LjM2OTc5MiBDIDkuMTI2MDkxIDE5Ljc3NjA1OCA5LjAxNjA2MSAyMS4yMzAyNzYgOS4xNDcxMzUgMjIuNjcyNjg1IEMgOS4yNzgyMDkgMjQuMTE1MDkzIDkuNjQ4NTY4IDI1LjUyNTY1OCAxMC4yNDI5OSAyNi44NDY0MSBDIDEwLjgzNzQxMiAyOC4xNjcxNjIgMTEuNjQ3NjQyIDI5LjM3OTc1NiAxMi42NDAzODIgMzAuNDM0MzYxIEMgMTMuNjMzMTIyIDMxLjQ4ODk2NSAxNC43OTQ1ODQgMzIuMzcwOTMxIDE2LjA3NzAzNiAzMy4wNDQwMTQgQyAxNy4zNTk0ODggMzMuNzE3MDk2IDE4Ljc0NTExNyAzNC4xNzE5NDcgMjAuMTc2OTggMzQuMzg5ODcyIEMgMjEuNjA4ODQzIDM0LjYwNzc5OCAyMy4wNjcwNTIgMzQuNTg1NzcxIDI0LjQ5MTY4IDM0LjMyNDY5OSBDIDI1LjkxNjMwNyAzNC4wNjM2MjYgMjcuMjg3NTY3IDMzLjU2NzEzMyAyOC41NDkxMDUgMzIuODU1NjIzIEMgMjkuODEwNjQyIDMyLjE0NDExNCAzMC45NDQ5MzYgMzEuMjI3NDcgMzEuOTA1MzcxIDMwLjE0MzM2MyBDIDMyLjg2NTgwNiAyOS4wNTkyNTYgMzMuNjM5MDQyIDI3LjgyMjc0MyAzNC4xOTMzMDIgMjYuNDg0NjQxIEMgMzQuNzQ3NTYyIDI1LjE0NjUzOCAzNS4wNzUxNDggMjMuNzI1NDMxIDM1LjE2MjU5OCAyMi4yNzk3MjEgQyAzNS4yNTAwNDcgMjAuODM0MDEyIDM1LjA5NjE0NSAxOS4zODM3OCAzNC43MDcyMTYgMTcuOTg4NjI1IEMgMzQuMzE4Mjg3IDE2LjU5MzQ3IDMzLjY5OTczNCAxNS4yNzI3NyAzMi44NzY5NzYgMTQuMDgwNzk5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi44NzY5NzYgMTQuMDgwNzk5IEMgMzEuNjc3MTk3IDEyLjM0MjYyIDMwLjA3MzA4NyAxMC45MjE1MDMgMjguMjAyOTY0IDkuOTM5OTg2IEMgMjYuMzMyODQgOC45NTg0NyAyNC4yNTIwNDUgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi44NzY5NzYgMTQuMDgwNzk5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81ZWZlNmUyYzg3MTI0MDcyYmQ2MjkwZDI5MjM1OWQ1MC5zZXRJY29uKGRpdl9pY29uXzM3YTFlMDU4NDBkYzRhZWZhMWU5ZTQ3MTM2ZjdkNDQ5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I2MjE5NDgwMmQ2MjQ3ZjNiNTVjODYzYmJjNDJkNjM4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y1YWIyOTMzOTIyNjQ1ODNiZjAwNWZhYTkwMmViYTQ4ID0gJChgPGRpdiBpZD0iaHRtbF9mNWFiMjkzMzkyMjY0NTgzYmYwMDVmYWE5MDJlYmE0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I2MjE5NDgwMmQ2MjQ3ZjNiNTVjODYzYmJjNDJkNjM4LnNldENvbnRlbnQoaHRtbF9mNWFiMjkzMzkyMjY0NTgzYmYwMDVmYWE5MDJlYmE0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzVlZmU2ZTJjODcxMjQwNzJiZDYyOTBkMjkyMzU5ZDUwLmJpbmRQb3B1cChwb3B1cF9iNjIxOTQ4MDJkNjI0N2YzYjU1Yzg2M2JiYzQyZDYzOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2M3NzcwYmJlMTc1ZTRiMGNiMWIzNTYzOTYyZGQwYTM3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2LjkyMDQ4LCAtOS45NjEyOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNTEwZTVkYjU5NGY3NGM5ZmFlYWM3YTU4MTdkMDVlYTMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuOTE4MTIzIDguNDQ1NiAxNy43MzI2NDUgOS4wMTMxOTggMTUuNzkxNTYzIDEwLjA5NDM3MyBDIDEzLjg1MDQ4MiAxMS4xNzU1NDggMTIuMjE3Mzk0IDEyLjczNDg3OCAxMS4wNDc3MjcgMTQuNjIzOTU2IEMgOS44NzgwNiAxNi41MTMwMzQgOS4yMTAxMzUgMTguNjY5OTY3IDkuMTA3NTIxIDIwLjg4OTQ3MyBDIDkuMDA0OTA3IDIzLjEwODk3OSA5LjQ3MDk2NiAyNS4zMTgzMzkgMTAuNDYxMzQyIDI3LjMwNzI4MiBDIDExLjQ1MTcxOCAyOS4yOTYyMjQgMTIuOTMzOTYyIDMwLjk5OTU4NCAxNC43NjcwMDUgMzIuMjU1MjQ4IEMgMTYuNjAwMDQ4IDMzLjUxMDkxMSAxOC43MjM4MzMgMzQuMjc3NzM4IDIwLjkzNjIzMSAzNC40ODI3NDYgQyAyMy4xNDg2MyAzNC42ODc3NTUgMjUuMzc3MTU3IDM0LjMyNDIyOSAyNy40MDk3MTYgMzMuNDI2NzY2IEMgMjkuNDQyMjc2IDMyLjUyOTMwMyAzMS4yMTIyNzMgMzEuMTI3MzA3IDMyLjU1MTI1MyAyOS4zNTQyMTEgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjU1MTI1MyAyOS4zNTQyMTEgQyAzNC4wMTM0MjUgMjcuNDE3OTgyIDM0LjkwNjg3NiAyNS4xMTE3MTcgMzUuMTMwNzQ3IDIyLjY5NTc2OCBDIDM1LjM1NDYxNyAyMC4yNzk4MTkgMzQuOTAwMTUyIDE3Ljg0ODY1MSAzMy44MTg2NTcgMTUuNjc2NzE3IEMgMzIuNzM3MTYyIDEzLjUwNDc4MyAzMS4wNzA5MjQgMTEuNjc3MDA4IDI5LjAwODA0MyAxMC4zOTk3MjYgQyAyNi45NDUxNjEgOS4xMjI0NDQgMjQuNTY2Mjk3IDguNDQ1NiAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNTUxMjUzIDI5LjM1NDIxMSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzc3NzBiYmUxNzVlNGIwY2IxYjM1NjM5NjJkZDBhMzcuc2V0SWNvbihkaXZfaWNvbl81MTBlNWRiNTk0Zjc0YzlmYWVhYzdhNTgxN2QwNWVhMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jMDJjY2I5Y2FjYzE0ZmZlODc1MTIwNjlhODYwNGQ0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYmMwZmY5ZDIwMDU0MzM1OGUzZGMxMjk4NTk3YWQ1ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMGJjMGZmOWQyMDA1NDMzNThlM2RjMTI5ODU5N2FkNWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9saWJlMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MaWJlcmlhIEtwZWxsZTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAxMjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2MwMmNjYjljYWNjMTRmZmU4NzUxMjA2OWE4NjA0ZDRjLnNldENvbnRlbnQoaHRtbF8wYmMwZmY5ZDIwMDU0MzM1OGUzZGMxMjk4NTk3YWQ1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2M3NzcwYmJlMTc1ZTRiMGNiMWIzNTYzOTYyZGQwYTM3LmJpbmRQb3B1cChwb3B1cF9jMDJjY2I5Y2FjYzE0ZmZlODc1MTIwNjlhODYwNGQ0YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzBkMDQ1OTAzNWIzOTQzMmNhZWIxZTFiNDE1MGVkYmQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxMi44MTE0LCA3NS4yNjUxXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmNzUzYTc3M2I0MDQ4YjRhNDYwMTJmN2U1NmFhODZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl80MTRhZmQ4YmFiN2E0YTQ2YjFkMGZkZjllZTQ0ZTEwNCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS45MTI2MDYgOC40NDU2IDE3LjcyMTg4MyA5LjAxNjAyIDE1Ljc3NzMzNyAxMC4xMDIzMDkgQyAxMy44MzI3OTEgMTEuMTg4NTk3IDEyLjE5ODQ0OSAxMi43NTQ5ODYgMTEuMDMwNjExIDE0LjY1MTY3NyBDIDkuODYyNzcyIDE2LjU0ODM2OCA5LjE5OTg4OSAxOC43MTI5MDcgOS4xMDUzNTUgMjAuOTM4Mjk0IEMgOS4wMTA4MjIgMjMuMTYzNjgxIDkuNDg3NzUxIDI1LjM3NjYzOSAxMC40OTA1MzIgMjcuMzY1NTM3IEMgMTEuNDkzMzEyIDI5LjM1NDQzNSAxMi45ODg5MjcgMzEuMDUzNzgzIDE0LjgzNDM0NCAzMi4zMDEwNjcgQyAxNi42Nzk3NjEgMzMuNTQ4MzUyIDE4LjgxNDIxNyAzNC4zMDI1MDQgMjEuMDMzNTg2IDM0LjQ5MTQgQyAyMy4yNTI5NTYgMzQuNjgwMjk3IDI1LjQ4NDE2MiAzNC4yOTc3MTggMjcuNTEzODI3IDMzLjM4MDI1MiBDIDI5LjU0MzQ5MSAzMi40NjI3ODYgMzEuMzA0Nzg0IDMxLjA0MDY0MiAzMi42MjkyNjcgMjkuMjQ5ODI0IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi42MjkyNjcgMjkuMjQ5ODI0IEMgMzQuMDY1NDQ1IDI3LjMwNzk4MyAzNC45MzQ1NzMgMjUuMDA0OTQ3IDM1LjEzOTQgMjIuNTk4NDE0IEMgMzUuMzQ0MjI3IDIwLjE5MTg4MSAzNC44NzY4MTYgMTcuNzc1MDg5IDMzLjc4OTQ2OSAxNS42MTg0NjQgQyAzMi43MDIxMjIgMTMuNDYxODM5IDMxLjAzNjk2NiAxMS42NDg5MzcgMjguOTgwMzI1IDEwLjM4MjYxMiBDIDI2LjkyMzY4MyA5LjExNjI4NiAyNC41NTUyMzYgOC40NDU2IDIyLjE0MDAwMiA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi42MjkyNjcgMjkuMjQ5ODI0IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl8wZDA0NTkwMzViMzk0MzJjYWViMWUxYjQxNTBlZGJkNS5zZXRJY29uKGRpdl9pY29uXzQxNGFmZDhiYWI3YTRhNDZiMWQwZmRmOWVlNDRlMTA0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZhYjZiZTI3MjE3MTRiMzg4NjQwYzkxNmUzYWE4YzRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwMWFiYjg3MGZlMDQ0Mjk5ZDI2ODgzZmZmNTE0OTc5ID0gJChgPGRpdiBpZD0iaHRtbF84MDFhYmI4NzBmZTA0NDI5OWQyNjg4M2ZmZjUxNDk3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R1bHUxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bHU8L2E+PGJyPmNvbnNvbmFudHM6IDI0PGJyPnZvd2VsczogMTM8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mYWI2YmUyNzIxNzE0YjM4ODY0MGM5MTZlM2FhOGM0Zi5zZXRDb250ZW50KGh0bWxfODAxYWJiODcwZmUwNDQyOTlkMjY4ODNmZmY1MTQ5NzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8wZDA0NTkwMzViMzk0MzJjYWViMWUxYjQxNTBlZGJkNS5iaW5kUG9wdXAocG9wdXBfZmFiNmJlMjcyMTcxNGIzODg2NDBjOTE2ZTNhYThjNGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9hNjdiOGM4MWM4ZWM0NjBhYWJmMGE1ZmU0NjliZTI0MiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTM4LjczOTIsIC03MS4yNzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzFlZTA2NWJkNTgzYjQ4NzNhNThhNGU3NGE0YzY5NWQwID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjgyMzgzOSA4LjQ0NTYgMTkuNTE1MjIzIDguNjQ0NzY4IDE4LjI1ODY1NiA5LjAzNjMzIEMgMTcuMDAyMDg5IDkuNDI3ODkyIDE1LjgxMTk4IDEwLjAwNzM1OCAxNC43Mjg4IDEwLjc1NTAyMyBDIDEzLjY0NTYyIDExLjUwMjY4OCAxMi42ODE3OTEgMTIuNDA5OTc5IDExLjg3MDA4OSAxMy40NDYwMzkgQyAxMS4wNTgzODggMTQuNDgyMSAxMC40MDgxMjEgMTUuNjM1MDUxIDkuOTQxNDA0IDE2Ljg2NTY4MyBDIDkuNDc0Njg3IDE4LjA5NjMxNSA5LjE5Njg3IDE5LjM5MDUxOCA5LjExNzQwMiAyMC43MDQyNzggQyA5LjAzNzkzNSAyMi4wMTgwMzggOS4xNTc3MjcgMjMuMzM2MjkyIDkuNDcyNzA1IDI0LjYxNDIwOCBDIDkuNzg3NjgzIDI1Ljg5MjEyNCAxMC4yOTQyMzUgMjcuMTE1MDUgMTAuOTc1MTM1IDI4LjI0MTM5NiBDIDExLjY1NjAzNiAyOS4zNjc3NDMgMTIuNTAzNDc2IDMwLjM4NDU5NSAxMy40ODg2MzcgMzEuMjU3MzcxIEMgMTQuNDczNzk4IDMyLjEzMDE0NyAxNS41ODUzODQgMzIuODQ4ODQxIDE2Ljc4NTU5MSAzMy4zODkwMSBDIDE3Ljk4NTc5OCAzMy45MjkxOCAxOS4yNjA4NjYgMzQuMjg0NjMxIDIwLjU2NzQzMSAzNC40NDMyNzcgQyAyMS44NzM5OTYgMzQuNjAxOTIzIDIzLjE5NzA3OCAzNC41NjE5NDMgMjQuNDkxNjggMzQuMzI0Njk5IEMgMjUuNzg2MjgzIDM0LjA4NzQ1NCAyNy4wMzc1NjIgMzMuNjU1NjY0IDI4LjIwMjk2NSAzMy4wNDQwMTMgQyAyOS4zNjgzNjggMzIuNDMyMzYyIDMwLjQzNDUzMiAzMS42NDc4NjQgMzEuMzY1MTk5IDMwLjcxNzE5NyBDIDMyLjI5NTg2NSAyOS43ODY1MzEgMzMuMDgwMzYzIDI4LjcyMDM2NyAzMy42OTIwMTQgMjcuNTU0OTY0IEMgMzQuMzAzNjY1IDI2LjM4OTU2IDM0LjczNTQ1NCAyNS4xMzgyODEgMzQuOTcyNjk5IDIzLjg0MzY3OCBDIDM1LjIwOTk0NCAyMi41NDkwNzYgMzUuMjQ5OTIzIDIxLjIyNTk5NCAzNS4wOTEyNzcgMTkuOTE5NDI5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4wOTEyNzcgMTkuOTE5NDI5IEMgMzQuNzA3MTM4IDE2Ljc1NTc2IDMzLjE3Njc5NiAxMy44Mzk5MzcgMzAuNzkxMzYzIDExLjcyNjYyOSBDIDI4LjQwNTkzIDkuNjEzMzIgMjUuMzI2OTA0IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMDkxMjc3IDE5LjkxOTQyOSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYTY3YjhjODFjOGVjNDYwYWFiZjBhNWZlNDY5YmUyNDIuc2V0SWNvbihkaXZfaWNvbl8xZWUwNjViZDU4M2I0ODczYTU4YTRlNzRhNGM2OTVkMCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jYjZiYmE1ZTJkMDU0MTE4YjdmZTgyOTQyNzM2MzY0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNjFkN2M4Njg4NTE0OGFiYTBhNWYyZGZhNThiNGQ5YSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTYxZDdjODY4ODUxNDhhYmEwYTVmMmRmYTU4YjRkOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXB1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXB1ZHVuZ3VuPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYjZiYmE1ZTJkMDU0MTE4YjdmZTgyOTQyNzM2MzY0OC5zZXRDb250ZW50KGh0bWxfZTYxZDdjODY4ODUxNDhhYmEwYTVmMmRmYTU4YjRkOWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9hNjdiOGM4MWM4ZWM0NjBhYWJmMGE1ZmU0NjliZTI0Mi5iaW5kUG9wdXAocG9wdXBfY2I2YmJhNWUyZDA1NDExOGI3ZmU4Mjk0MjczNjM2NDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8zZThiMzcwZTEyMmM0MzgyYmExOGE4YzEzNDVjYTE1MyA9IEwubWFya2VyKAogICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2EwNjA2NDdlMjk3MjQzNjJhNDMwY2ZkYTcyN2ZkMWIzID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjM0NDYyMyA4LjQ0NTYgMTguNTY4NDIzIDguODE2MjA1IDE2LjkyMjg0OCA5LjUzNDE2MiBDIDE1LjI3NzI3NCAxMC4yNTIxMTkgMTMuNzk3NDc4IDExLjMwMjA5IDEyLjU3NjMxMiAxMi42MTgxOTUgQyAxMS4zNTUxNDUgMTMuOTM0Mjk5IDEwLjQxODY5NSAxNS40ODg0MjIgOS44MjU3MiAxNy4xODMwNDggQyA5LjIzMjc0NSAxOC44Nzc2NzQgOC45OTU5MTIgMjAuNjc2NjAzIDkuMTMwMDggMjIuNDY2OTYgQyA5LjI2NDI0OSAyNC4yNTczMTYgOS43NjY1NTQgMjYuMDAwODU1IDEwLjYwNTQ3OCAyNy41ODgxNzUgQyAxMS40NDQ0MDEgMjkuMTc1NDk1IDEyLjYwMjAyMiAzMC41NzI2ODggMTQuMDA1NzA0IDMxLjY5MjA4NyBDIDE1LjQwOTM4NiAzMi44MTE0ODYgMTcuMDI5MTQ0IDMzLjYyOTE3OCAxOC43NjMzNDUgMzQuMDkzODU1IEMgMjAuNDk3NTQ2IDM0LjU1ODUzMyAyMi4zMDkxNDMgMzQuNjYwMjY5IDI0LjA4NDQ2NyAzNC4zOTI2ODIgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDI0LjA4NDQ2NyAzNC4zOTI2ODIgQyAyNy4zMzgwMzEgMzMuOTAyMjg2IDMwLjI4ODYxMSAzMi4xOTg3NjcgMzIuMzQwMDg4IDI5LjYyNjI5NiBDIDM0LjM5MTU2NCAyNy4wNTM4MjQgMzUuMzk1ODA2IDIzLjc5ODE1MiAzNS4xNDk5MTkgMjAuNTE3MDM5IEMgMzQuOTA0MDMzIDE3LjIzNTkyNSAzMy40MjU3NzUgMTQuMTY2MjkyIDMxLjAxMzgwNCAxMS45MjgzMSBDIDI4LjYwMTgzMyA5LjY5MDMyOSAyNS40MzAzMTEgOC40NDU1OTkgMjIuMTM5OTk4IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDI0LjA4NDQ2NyAzNC4zOTI2ODIgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzNlOGIzNzBlMTIyYzQzODJiYTE4YThjMTM0NWNhMTUzLnNldEljb24oZGl2X2ljb25fYTA2MDY0N2UyOTcyNDM2MmE0MzBjZmRhNzI3ZmQxYjMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmVjYmIyNTZhOWQxNGYwZWIwNGExMTdlZWRiMjU1ZmYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZWYxZDkzMzZlY2JjNDA4NDg1YTZkOGUzZTBiN2UxZTkgPSAkKGA8ZGl2IGlkPSJodG1sX2VmMWQ5MzM2ZWNiYzQwODQ4NWE2ZDhlM2UwYjdlMWU5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2lvdzEyNjYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2lvd2E8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogMjA8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yZWNiYjI1NmE5ZDE0ZjBlYjA0YTExN2VlZGIyNTVmZi5zZXRDb250ZW50KGh0bWxfZWYxZDkzMzZlY2JjNDA4NDg1YTZkOGUzZTBiN2UxZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8zZThiMzcwZTEyMmM0MzgyYmExOGE4YzEzNDVjYTE1My5iaW5kUG9wdXAocG9wdXBfMmVjYmIyNTZhOWQxNGYwZWIwNGExMTdlZWRiMjU1ZmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9mZGM5ZjEzMTNkMDY0YjFjOGFjZTUwYWYwZTVmZDFhZSA9IEwubWFya2VyKAogICAgICAgICAgICBbMzUuMCwgMTM1LjBdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzMwYTc0ZDIyNDJlZTQ4OWM5NTAxZjA1M2Y3Y2Y5NmM1ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjU1OTk3NSA4LjQ0NTYgMTcuMDM3MDIxIDkuMjEwOTMgMTQuODkxODA5IDEwLjY0NDMxNSBDIDEyLjc0NjU5NiAxMi4wNzc3IDExLjA3NDAzMSAxNC4xMTU3MjYgMTAuMDg2Njk4IDE2LjQ5OTM1OSBDIDkuMDk5MzY1IDE4Ljg4Mjk5MSA4Ljg0MDk0NSAyMS41MDY3NzYgOS4zNDQyODMgMjQuMDM3MjI2IEMgOS44NDc2MjEgMjYuNTY3Njc3IDExLjA5MDQ0OSAyOC44OTI4NDUgMTIuOTE0ODAyIDMwLjcxNzE5OCBDIDE0LjczOTE1NSAzMi41NDE1NTEgMTcuMDY0MzIzIDMzLjc4NDM3OSAxOS41OTQ3NzQgMzQuMjg3NzE3IEMgMjIuMTI1MjI0IDM0Ljc5MTA1NSAyNC43NDkwMDkgMzQuNTMyNjM1IDI3LjEzMjY0MSAzMy41NDUzMDIgQyAyOS41MTYyNzQgMzIuNTU3OTY5IDMxLjU1NDMgMzAuODg1NDA0IDMyLjk4NzY4NSAyOC43NDAxOTEgQyAzNC40MjEwNyAyNi41OTQ5NzkgMzUuMTg2NCAyNC4wNzIwMjUgMzUuMTg2NCAyMS40OTIgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDM1LjE4NjQgMjEuNDkyIEMgMzUuMTg2NCAxOC4wMzMyMDcgMzMuODEwOTM0IDE0LjcxMjUzOCAzMS4zNjUxOTggMTIuMjY2ODAyIEMgMjguOTE5NDYyIDkuODIxMDY2IDI1LjU5ODc5MyA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMTg2NCAyMS40OTIgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2ZkYzlmMTMxM2QwNjRiMWM4YWNlNTBhZjBlNWZkMWFlLnNldEljb24oZGl2X2ljb25fMzBhNzRkMjI0MmVlNDg5Yzk1MDFmMDUzZjdjZjk2YzUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOTAzMzE4NDViY2I5NGFiMzhhOGRmNmI4ZjQzYzY0NGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmMwYzMyNDQ1MDkxNDJiNmJjZmZlYjYyN2ExYWU2OTggPSAkKGA8ZGl2IGlkPSJodG1sX2ZjMGMzMjQ0NTA5MTQyYjZiY2ZmZWI2MjdhMWFlNjk4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPmNvbnNvbmFudHM6IDE1PGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwMzMxODQ1YmNiOTRhYjM4YThkZjZiOGY0M2M2NDRhLnNldENvbnRlbnQoaHRtbF9mYzBjMzI0NDUwOTE0MmI2YmNmZmViNjI3YTFhZTY5OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2ZkYzlmMTMxM2QwNjRiMWM4YWNlNTBhZjBlNWZkMWFlLmJpbmRQb3B1cChwb3B1cF85MDMzMTg0NWJjYjk0YWIzOGE4ZGY2YjhmNDNjNjQ0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2EwZTg0NzhjNTc3MTQ0YWY4YThkNGM2MTk3NGI5ZDIwID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmNzUzYTc3M2I0MDQ4YjRhNDYwMTJmN2U1NmFhODZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl81YWRhYTYzZDhmN2Y0OTQxOWE4ZDNlZmQ3MjQ5ZDAwNSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC4wMDk1NyA4LjQ0NTYgMTcuOTExMjE3IDguOTY3NDM3IDE2LjAyODk1NiA5Ljk2NTM0OCBDIDE0LjE0NjY5NiAxMC45NjMyNiAxMi41MzcyMDggMTIuNDA3MTk1IDExLjM0MTYzOSAxNC4xNzA1MjkgQyAxMC4xNDYwNjkgMTUuOTMzODYyIDkuNDAwNDE5IDE3Ljk2MzQ5NCA5LjE3MDA3OSAyMC4wODE0MzUgQyA4LjkzOTczOSAyMi4xOTkzNzYgOS4yMzE2NDUgMjQuMzQxODUgMTAuMDIwMTk4IDI2LjMyMDk2OSBDIDEwLjgwODc1MSAyOC4zMDAwODkgMTIuMDcwMjA2IDMwLjA1NjI1OSAxMy42OTM5MzkgMzEuNDM1NDcgQyAxNS4zMTc2NzEgMzIuODE0NjgxIDE3LjI1NDc4NyAzMy43NzU0MDIgMTkuMzM1NDA4IDM0LjIzMzM4MiBDIDIxLjQxNjAzIDM0LjY5MTM2MiAyMy41Nzc1MDQgMzQuNjMyODA5IDI1LjYzMDI4IDM0LjA2Mjg1OSBDIDI3LjY4MzA1NiAzMy40OTI5MDkgMjkuNTY1MzE4IDMyLjQyODcyNCAzMS4xMTIwMDEgMzAuOTYzNjI5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMS4xMTIwMDEgMzAuOTYzNjI5IEMgMzMuMDA2OTI3IDI5LjE2ODY2IDM0LjMyMDI4NiAyNi44NDU2NzYgMzQuODgxMzgyIDI0LjI5NjU5MiBDIDM1LjQ0MjQ3OCAyMS43NDc1MDkgMzUuMjI1OTAyIDE5LjA4Nzc2IDM0LjI1OTgwMyAxNi42NjMwMzIgQyAzMy4yOTM3MDMgMTQuMjM4MzAzIDMxLjYyMTgyOSAxMi4xNTgzOTggMjkuNDYxNDczIDEwLjY5MzY0IEMgMjcuMzAxMTE3IDkuMjI4ODgxIDI0Ljc1MDEwOSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjExMjAwMSAzMC45NjM2MjkgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2EwZTg0NzhjNTc3MTQ0YWY4YThkNGM2MTk3NGI5ZDIwLnNldEljb24oZGl2X2ljb25fNWFkYWE2M2Q4ZjdmNDk0MTlhOGQzZWZkNzI0OWQwMDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjVkMDZlZmU3NWFkNDZmZDhmZmJhYzZjMTcwZDI5MGMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjZiYjk0MWVlNTdmNGQ4MGIyYWUwODgxYTNjN2I5NzcgPSAkKGA8ZGl2IGlkPSJodG1sX2I2YmI5NDFlZTU3ZjRkODBiMmFlMDg4MWEzYzdiOTc3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj5jb25zb25hbnRzOiAxODxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjVkMDZlZmU3NWFkNDZmZDhmZmJhYzZjMTcwZDI5MGMuc2V0Q29udGVudChodG1sX2I2YmI5NDFlZTU3ZjRkODBiMmFlMDg4MWEzYzdiOTc3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfYTBlODQ3OGM1NzcxNDRhZjhhOGQ0YzYxOTc0YjlkMjAuYmluZFBvcHVwKHBvcHVwXzY1ZDA2ZWZlNzVhZDQ2ZmQ4ZmZiYWM2YzE3MGQyOTBjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfN2UzNDI5MTczNjM0NDA5NThhNmZjZDEwMmRmMTQ5NjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzc1YmIzNjU4NTE1OTQ2MDFiMTU2YmQyMzUyZDkxNjA5ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjgwMzcyMSA4LjQ0NTYgMTcuNTA5Nzc2IDkuMDczMTUyIDE1LjQ5ODg0MiAxMC4yNjI0MTUgQyAxMy40ODc5MDggMTEuNDUxNjc4IDExLjgzMjg2MyAxMy4xNTk1NTIgMTAuNzA3MzUyIDE1LjIwNjg0OSBDIDkuNTgxODQxIDE3LjI1NDE0NiA5LjAyNjY1MyAxOS41NjY2NzEgOS4xMDAwMzggMjEuOTAxNzk4IEMgOS4xNzM0MjIgMjQuMjM2OTI0IDkuODcyNzE5IDI2LjUxMDAyNSAxMS4xMjQ1NiAyOC40ODI2MTEgQyAxMi4zNzY0MDEgMzAuNDU1MTk3IDE0LjEzNTQxOSAzMi4wNTU3NzkgMTYuMjE3MDU5IDMzLjExNjQyOCBDIDE4LjI5ODY5OSAzNC4xNzcwNzYgMjAuNjI3NTIyIDM0LjY1OTM1MiAyMi45NTkxOTEgMzQuNTEyNjU2IEMgMjUuMjkwODYgMzQuMzY1OTYgMjcuNTQwODc0IDMzLjU5NTYwNyAyOS40NzMxNjUgMzIuMjgyNDI0IEMgMzEuNDA1NDU2IDMwLjk2OTI0IDMyLjk0OTk5NyAyOS4xNjA4MTUgMzMuOTQ0NzM2IDI3LjA0Njg4NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzMuOTQ0NzM2IDI3LjA0Njg4NiBDIDM0Ljg4MDMzNyAyNS4wNTg2MzIgMzUuMjk4NjMxIDIyLjg2NTg1OSAzNS4xNjA2NTYgMjAuNjcyODA5IEMgMzUuMDIyNjgxIDE4LjQ3OTc1OSAzNC4zMzI4NTggMTYuMzU2NzAzIDMzLjE1NTQ0IDE0LjUwMTM4OSBDIDMxLjk3ODAyMSAxMi42NDYwNzUgMzAuMzUwNzM1IDExLjExNzk1MSAyOC40MjUxNTEgMTAuMDU5MzUyIEMgMjYuNDk5NTY3IDkuMDAwNzU0IDI0LjMzNzM4NiA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzMuOTQ0NzM2IDI3LjA0Njg4NiB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfN2UzNDI5MTczNjM0NDA5NThhNmZjZDEwMmRmMTQ5Njcuc2V0SWNvbihkaXZfaWNvbl83NWJiMzY1ODUxNTk0NjAxYjE1NmJkMjM1MmQ5MTYwOSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xZTRhM2ZiMGZlYmI0MWJiOGNkNmU0MmI2MDNmMmQ0MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYzVlMGQzNmE0MTk0ZTRjODFlMGVkNTZlMzI0MmRmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmM1ZTBkMzZhNDE5NGU0YzgxZTBlZDU2ZTMyNDJkZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9maW5uMTMxOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GaW5uaXNoPC9hPjxicj5jb25zb25hbnRzOiAxNzxicj52b3dlbHM6IDg8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xZTRhM2ZiMGZlYmI0MWJiOGNkNmU0MmI2MDNmMmQ0MC5zZXRDb250ZW50KGh0bWxfZmM1ZTBkMzZhNDE5NGU0YzgxZTBlZDU2ZTMyNDJkZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl83ZTM0MjkxNzM2MzQ0MDk1OGE2ZmNkMTAyZGYxNDk2Ny5iaW5kUG9wdXAocG9wdXBfMWU0YTNmYjBmZWJiNDFiYjhjZDZlNDJiNjAzZjJkNDApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl80Y2JlYzcyODQwNDE0MmM4OWM4MThlM2U3NTIwZmMxZiA9IEwubWFya2VyKAogICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fNTcyNmIxYzhjOGI5NDM4Y2JiYzk5NTE4NmE3MWM0OWEgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuMDI3OTU0IDguNDQ1NiAxNy45NDcxNTkgOC45NTg0NyAxNi4wNzcwMzUgOS45Mzk5ODcgQyAxNC4yMDY5MTIgMTAuOTIxNTAzIDEyLjYwMjgwMiAxMi4zNDI2MjEgMTEuNDAzMDIzIDE0LjA4MDggQyAxMC4yMDMyNDQgMTUuODE4OTggOS40NDMzMDIgMTcuODIyNzg0IDkuMTg4NzIzIDE5LjkxOTQzMSBDIDguOTM0MTQ0IDIyLjAxNjA3OCA5LjE5MjQ2MyAyNC4xNDM1MjEgOS45NDE0MDQgMjYuMTE4MzE4IEMgMTAuNjkwMzQ2IDI4LjA5MzExNSAxMS45MDc3NDggMjkuODU2ODI2IDEzLjQ4ODYzNyAzMS4yNTczNzEgQyAxNS4wNjk1MjcgMzIuNjU3OTE3IDE2Ljk2NzEyIDMzLjY1Mzg1IDE5LjAxNzc5MyAzNC4xNTkyOTYgQyAyMS4wNjg0NjcgMzQuNjY0NzQxIDIzLjIxMTUzNiAzNC42NjQ3NDEgMjUuMjYyMjA5IDM0LjE1OTI5NSBDIDI3LjMxMjg4MyAzMy42NTM4NDkgMjkuMjEwNDc2IDMyLjY1NzkxNSAzMC43OTEzNjUgMzEuMjU3MzY5IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMC43OTEzNjUgMzEuMjU3MzY5IEMgMzIuNzcyNzg1IDI5LjUwMTk4NCAzNC4xNzM3OTIgMjcuMTg0NDM1IDM0LjgwNzI5NiAyNC42MTQyMDYgQyAzNS40NDA4IDIyLjA0Mzk3NyAzNS4yNzcyODggMTkuMzQwODA5IDM0LjMzODU5NSAxNi44NjU2ODEgQyAzMy4zOTk5MDIgMTQuMzkwNTUzIDMxLjcyOTc2IDEyLjI1ODc3NCAyOS41NTExOTggMTAuNzU1MDIyIEMgMjcuMzcyNjM2IDkuMjUxMjcgMjQuNzg3MTQ3IDguNDQ1NiAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzAuNzkxMzY1IDMxLjI1NzM2OSB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNGNiZWM3Mjg0MDQxNDJjODljODE4ZTNlNzUyMGZjMWYuc2V0SWNvbihkaXZfaWNvbl81NzI2YjFjOGM4Yjk0MzhjYmJjOTk1MTg2YTcxYzQ5YSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84NjQ1MTBiNjlkZmU0N2I3YjNkZTE3OWYwZjQ4OTI0YiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMGQ1Njk2YmZhMGM0MDhiYmQzMTY0NzBkMjA4NTdlNiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTBkNTY5NmJmYTBjNDA4YmJkMzE2NDcwZDIwODU3ZTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9oYXdhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IYXdhaWlhbjwvYT48YnI+Y29uc29uYW50czogODxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84NjQ1MTBiNjlkZmU0N2I3YjNkZTE3OWYwZjQ4OTI0Yi5zZXRDb250ZW50KGh0bWxfZTBkNTY5NmJmYTBjNDA4YmJkMzE2NDcwZDIwODU3ZTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl80Y2JlYzcyODQwNDE0MmM4OWM4MThlM2U3NTIwZmMxZi5iaW5kUG9wdXAocG9wdXBfODY0NTEwYjY5ZGZlNDdiN2IzZGUxNzlmMGY0ODkyNGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yNDA0ZTVlMjY0ZGI0ZTk3OWFhNTRmY2Q3OTY1NThhOSA9IEwubWFya2VyKAogICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fODQ1NWRiYzZjZDgzNGE4ZGJkODcxYzhmZThkOGQxZDQgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuOTA3OTE2IDguNDQ1NiAxNy43MTI3MzYgOS4wMTg0MjQgMTUuNzY1MjUyIDEwLjEwOTA2OCBDIDEzLjgxNzc2OCAxMS4xOTk3MTEgMTIuMTgyMzc2IDEyLjc3MjExIDExLjAxNjExNiAxNC42NzUyNzQgQyA5Ljg0OTg1NSAxNi41Nzg0MzkgOS4xOTEyOSAxOC43NDk0MzcgOS4xMDM2NTggMjAuOTc5OCBDIDkuMDE2MDI3IDIzLjIxMDE2MyA5LjUwMjIyNyAyNS40MjYxMzkgMTAuNTE1NTcyIDI3LjQxNDk0MSBDIDExLjUyODkxNyAyOS40MDM3NDIgMTMuMDM1ODk4IDMxLjA5OTYwNSAxNC44OTE4MDcgMzIuMzM5Njg0IEMgMTYuNzQ3NzE3IDMzLjU3OTc2NCAxOC44OTExODcgMzQuMzIzMDU1IDIxLjExNjM5IDM0LjQ5ODE4MiBDIDIzLjM0MTU5MyAzNC42NzMzMSAyNS41NzQ5NDkgMzQuMjc0NDgzIDI3LjYwMjAwMSAzMy4zNCBDIDI5LjYyOTA1MyAzMi40MDU1MTYgMzEuMzgyNzcyIDMwLjk2NjI3NyAzMi42OTQ3NTggMjkuMTYwNDgzIEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi42OTQ3NTggMjkuMTYwNDgzIEMgMzQuMTA4ODcgMjcuMjE0MTI2IDM0Ljk1NzQyMyAyNC45MTQwMjQgMzUuMTQ2MTgyIDIyLjUxNTYxMSBDIDM1LjMzNDk0MiAyMC4xMTcxOTggMzQuODU2NjUyIDE3LjcxMjY3IDMzLjc2NDQyOSAxNS41NjkwNiBDIDMyLjY3MjIwNSAxMy40MjU0NSAzMS4wMDgwMzQgMTEuNjI1MTU5IDI4Ljk1NjcyNyAxMC4zNjgxMTcgQyAyNi45MDU0MjEgOS4xMTEwNzQgMjQuNTQ1ODMyIDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNjk0NzU4IDI5LjE2MDQ4MyB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjQwNGU1ZTI2NGRiNGU5NzlhYTU0ZmNkNzk2NTU4YTkuc2V0SWNvbihkaXZfaWNvbl84NDU1ZGJjNmNkODM0YThkYmQ4NzFjOGZlOGQ4ZDFkNCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82YmJjZmY0NWQyYjU0NzhkYTc5MDJmYTM0YzQ1ZTc2ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjI5OTFhYTZjOWQ0OTk1YTU5OWJlNzE3YjUyMmRlZSA9ICQoYDxkaXYgaWQ9Imh0bWxfYzYyOTkxYWE2YzlkNDk5NWE1OTliZTcxN2I1MjJkZWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odW5nMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdW5nYXJpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI2PGJyPnZvd2VsczogMTQ8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82YmJjZmY0NWQyYjU0NzhkYTc5MDJmYTM0YzQ1ZTc2Zi5zZXRDb250ZW50KGh0bWxfYzYyOTkxYWE2YzlkNDk5NWE1OTliZTcxN2I1MjJkZWUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl8yNDA0ZTVlMjY0ZGI0ZTk3OWFhNTRmY2Q3OTY1NThhOS5iaW5kUG9wdXAocG9wdXBfNmJiY2ZmNDVkMmI1NDc4ZGE3OTAyZmEzNGM0NWU3NmYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl8yMmU3YmJmMzZmNDg0YmE1YTZkMDBkZTZlMzA4ZmRiMiA9IEwubWFya2VyKAogICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fN2MwMWFiNjk1NzY0NDRkNjk3ZDA5NjA3MzYxMDIzMzMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNzMwNTQ0IDguNDQ1NiAxOS4zMzAzNTcgOC42NzQwMDQgMTcuOTkzOTY2IDkuMTIxOTE3IEMgMTYuNjU3NTc1IDkuNTY5ODMgMTUuNDAyNTU4IDEwLjIzMTM2MSAxNC4yNzc3ODcgMTEuMDgwNzQ4IEMgMTMuMTUzMDE3IDExLjkzMDEzNSAxMi4xNzMyODggMTIuOTU2MjA3IDExLjM3Njc1MyAxNC4xMTkwMDQgQyAxMC41ODAyMTggMTUuMjgxODAyIDkuOTc3MzU0IDE2LjU2NjAzMiA5LjU5MTYzOCAxNy45MjE2ODMgQyA5LjIwNTkyMiAxOS4yNzczMzQgOS4wNDI0MjcgMjAuNjg2NTc2IDkuMTA3NTIxIDIyLjA5NDUyOCBDIDkuMTcyNjE0IDIzLjUwMjQ4IDkuNDY1NDQgMjQuODkwNjI1IDkuOTc0NTk0IDI2LjIwNDkwNCBDIDEwLjQ4Mzc0OSAyNy41MTkxODIgMTEuMjAyNTM1IDI4Ljc0MjMwOSAxMi4xMDI5NjIgMjkuODI2NjUxIEMgMTMuMDAzMzg4IDMwLjkxMDk5NCAxNC4wNzM2MTIgMzEuODQyMjkgMTUuMjcxOTU2IDMyLjU4NDI3MyBDIDE2LjQ3MDI5OSAzMy4zMjYyNTYgMTcuNzgxMDAyIDMzLjg2OTE2NyAxOS4xNTMwMiAzNC4xOTE4NjIgQyAyMC41MjUwMzggMzQuNTE0NTU4IDIxLjk0MDMyNyAzNC42MTI3OTUgMjMuMzQzNzcgMzQuNDgyNzQ2IEMgMjQuNzQ3MjE0IDM0LjM1MjY5OCAyNi4xMjAzNTQgMzMuOTk2MDc1IDI3LjQwOTcxNiAzMy40MjY3NjYgQyAyOC42OTkwNzcgMzIuODU3NDU4IDI5Ljg4NzcwMyAzMi4wODI5NSAzMC45MjkzMDMgMzEuMTMzNDA2IEMgMzEuOTcwOTA0IDMwLjE4Mzg2MSAzMi44NTE3OCAyOS4wNzE3NjggMzMuNTM3NjI3IDI3Ljg0MDQzNiBDIDM0LjIyMzQ3NSAyNi42MDkxMDQgMzQuNzA1Mjc0IDI1LjI3NDcyNiAzNC45NjQyNiAyMy44ODkyNjkgQyAzNS4yMjMyNDcgMjIuNTAzODEyIDM1LjI1NjAxNiAyMS4wODU0OTYgMzUuMDYxMjkxIDE5LjY4OTU1NiBDIDM0Ljg2NjU2NSAxOC4yOTM2MTYgMzQuNDQ2OTA3IDE2LjkzODQxMiAzMy44MTg2NTggMTUuNjc2NzE4IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy44MTg2NTggMTUuNjc2NzE4IEMgMzIuNzM3MTYzIDEzLjUwNDc4NCAzMS4wNzA5MjUgMTEuNjc3MDA4IDI5LjAwODA0NCAxMC4zOTk3MjcgQyAyNi45NDUxNjIgOS4xMjI0NDUgMjQuNTY2Mjk4IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzMuODE4NjU4IDE1LjY3NjcxOCB6IiBzdHlsZT0iZmlsbDojMTllNmI0OyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfMjJlN2JiZjM2ZjQ4NGJhNWE2ZDAwZGU2ZTMwOGZkYjIuc2V0SWNvbihkaXZfaWNvbl83YzAxYWI2OTU3NjQ0NGQ2OTdkMDk2MDczNjEwMjMzMyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kN2EzMmE0NDJhMDQ0YTM1YTQ3M2I3ZmJmM2FjNGIwNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zM2E1NTlkM2IwZDI0Mjk5Yjc2ZWJlMTk4ZWMzM2I4NiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzNhNTU5ZDNiMGQyNDI5OWI3NmViZTE5OGVjMzNiODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HZW9yZ2lhbjwvYT48YnI+Y29uc29uYW50czogMjg8YnI+dm93ZWxzOiA2PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDdhMzJhNDQyYTA0NGEzNWE0NzNiN2ZiZjNhYzRiMDcuc2V0Q29udGVudChodG1sXzMzYTU1OWQzYjBkMjQyOTliNzZlYmUxOThlYzMzYjg2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMjJlN2JiZjM2ZjQ4NGJhNWE2ZDAwZGU2ZTMwOGZkYjIuYmluZFBvcHVwKHBvcHVwX2Q3YTMyYTQ0MmEwNDRhMzVhNDczYjdmYmYzYWM0YjA3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYWYxNjU3NjYyZWE5NGU2MGEzNzdkNTM3ZTQzY2JmMWQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmNzUzYTc3M2I0MDQ4YjRhNDYwMTJmN2U1NmFhODZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl80ZGU3NzAzN2I2Mzc0ZTcyYjg2NzAzMTdkN2U3NmZiYiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC43NTI0MDQgOC40NDU2IDE5LjM3MzY1MSA4LjY2Njk3NCAxOC4wNTU4MDEgOS4xMDEzNjQgQyAxNi43Mzc5NTEgOS41MzU3NTMgMTUuNDk3ODAxIDEwLjE3NzYyMSAxNC4zODIxNzggMTEuMDAyNzMyIEMgMTMuMjY2NTU0IDExLjgyNzg0MyAxMi4yODk2NzggMTIuODI1Njc5IDExLjQ4ODQzMiAxMy45NTg1NjQgQyAxMC42ODcxODcgMTUuMDkxNDQ5IDEwLjA3MTc4NiAxNi4zNDQ5NDQgOS42NjU0NjYgMTcuNjcxNzE3IEMgOS4yNTkxNDcgMTguOTk4NDkgOS4wNjcwODcgMjAuMzgxNjMxIDkuMDk2NTM5IDIxLjc2ODkxNSBDIDkuMTI1OTkxIDIzLjE1NjE5OCA5LjM3NjU4IDI0LjUyOTk0MiA5LjgzODg0NCAyNS44MzgyNzUgQyAxMC4zMDExMDcgMjcuMTQ2NjA4IDEwLjk2OTE1MyAyOC4zNzI4NTQgMTEuODE3NzU4IDI5LjQ3MDcxMyBDIDEyLjY2NjM2MiAzMC41Njg1NzIgMTMuNjg0NzA4IDMxLjUyNDA0OSAxNC44MzQzNDUgMzIuMzAxMDY4IEMgMTUuOTgzOTgyIDMzLjA3ODA4NyAxNy4yNTAyNTUgMzMuNjY2NzQzIDE4LjU4NTM1NCAzNC4wNDQ4MSBDIDE5LjkyMDQ1MyAzNC40MjI4NzcgMjEuMzA3MzU5IDM0LjU4NTUzNiAyMi42OTM3MDUgMzQuNTI2NjQ1IEMgMjQuMDgwMDUxIDM0LjQ2Nzc1NCAyNS40NDgxNjYgMzQuMTg4MDYzIDI2Ljc0NjM5MiAzMy42OTgxMzQgQyAyOC4wNDQ2MTkgMzMuMjA4MjA1IDI5LjI1NjQxIDMyLjUxNDI4MiAzMC4zMzYwMDkgMzEuNjQyNTY2IEMgMzEuNDE1NjA5IDMwLjc3MDg1IDMyLjM0OTI1NiAyOS43MzI0NTMgMzMuMTAxNjk4IDI4LjU2NjU4MyBDIDMzLjg1NDE0MSAyNy40MDA3MTMgMzQuNDE1Nzg3IDI2LjEyMjIzIDM0Ljc2NTQzMSAyNC43Nzk0MDcgQyAzNS4xMTUwNzUgMjMuNDM2NTg0IDM1LjI0ODI1OSAyMi4wNDY1MzkgMzUuMTU5OTU2IDIwLjY2MTc1NSBDIDM1LjA3MTY1MiAxOS4yNzY5NzEgMzQuNzYyOTg2IDE3LjkxNTEwMSAzNC4yNDU2MTIgMTYuNjI3NTY2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNC4yNDU2MTIgMTYuNjI3NTY2IEMgMzMuMjc0ODQyIDE0LjIxMTcxMiAzMS42MDI3NjQgMTIuMTQwODgzIDI5LjQ0NTY1NSAxMC42ODI5MzIgQyAyNy4yODg1NDYgOS4yMjQ5ODEgMjQuNzQzNjAyIDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNC4yNDU2MTIgMTYuNjI3NTY2IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hZjE2NTc2NjJlYTk0ZTYwYTM3N2Q1MzdlNDNjYmYxZC5zZXRJY29uKGRpdl9pY29uXzRkZTc3MDM3YjYzNzRlNzJiODY3MDMxN2Q3ZTc2ZmJiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyODIxNzVmNjc0MTQzNTJhZWM4M2U2NzMyMjQ2NjRhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y0MWU3NTA3MWFhZjQ5MThhNTQxNTFjNTllZTUyYjQ5ID0gJChgPGRpdiBpZD0iaHRtbF9mNDFlNzUwNzFhYWY0OTE4YTU0MTUxYzU5ZWU1MmI0OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPmNvbnNvbmFudHM6IDMwPGJyPnZvd2VsczogNzxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyODIxNzVmNjc0MTQzNTJhZWM4M2U2NzMyMjQ2NjRhLnNldENvbnRlbnQoaHRtbF9mNDFlNzUwNzFhYWY0OTE4YTU0MTUxYzU5ZWU1MmI0OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FmMTY1NzY2MmVhOTRlNjBhMzc3ZDUzN2U0M2NiZjFkLmJpbmRQb3B1cChwb3B1cF84MjgyMTc1ZjY3NDE0MzUyYWVjODNlNjczMjI0NjY0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzFlMmQ0MDFlMzM2YTQ4NTg4MzE2MTI1MzdkMmY3NWQ4ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstNS4yNjkxOCwgMzUuNDgwOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjc1M2E3NzNiNDA0OGI0YTQ2MDEyZjdlNTZhYTg2Yik7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fYTQ1MzQ1NjViMjc4NDA1NGE5NGMwMTljOTI3NjNiNWUgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNjUgOC40NDU2IDE5LjE3MDk1MSA4LjcwMDg1NCAxNy43NjcxNCA5LjIwMDI2OSBDIDE2LjM2MzMyOSA5LjY5OTY4NCAxNS4wNTUzOTEgMTAuNDM1OTE3IDEzLjkwMDE3NiAxMS4zNzY5NjkgQyAxMi43NDQ5NjEgMTIuMzE4MDIxIDExLjc1OTQ1IDEzLjQ1MDA1OCAxMC45ODY0NzggMTQuNzIzODc3IEMgMTAuMjEzNTA1IDE1Ljk5NzY5NiA5LjY2NDQzNSAxNy4zOTQ1NzEgOS4zNjMxMyAxOC44NTM3ODkgQyA5LjA2MTgyNiAyMC4zMTMwMDcgOS4wMTI3MTggMjEuODEzMTE2IDkuMjE3OTQgMjMuMjg4OTE2IEMgOS40MjMxNjEgMjQuNzY0NzE2IDkuODc5Njk2IDI2LjE5NDUxMSAxMC41Njc3MDIgMjcuNTE2MTU4IEMgMTEuMjU1NzA4IDI4LjgzNzgwNCAxMi4xNjUwNyAzMC4wMzE4NzMgMTMuMjU2MjY0IDMxLjA0NjQ2NCBDIDE0LjM0NzQ1OCAzMi4wNjEwNTYgMTUuNjA0NDQzIDMyLjg4MTI1NiAxNi45NzI1ODYgMzMuNDcxNDE1IEMgMTguMzQwNzI4IDM0LjA2MTU3NCAxOS43OTk5MTUgMzQuNDEzMDE2IDIxLjI4NjcyNSAzNC41MTA0NjcgQyAyMi43NzM1MzYgMzQuNjA3OTE3IDI0LjI2NjExMiAzNC40NDk5NDQgMjUuNjk5NTgxIDM0LjA0MzQxMiBDIDI3LjEzMzA1IDMzLjYzNjg4IDI4LjQ4NjMzOCAzMi45ODc3NjYgMjkuNzAwNjI4IDMyLjEyNDI4NCBDIDMwLjkxNDkxNyAzMS4yNjA4MDEgMzEuOTcyMzU3IDMwLjE5NTY0NCAzMi44MjY5ODYgMjguOTc1MTA3IEMgMzMuNjgxNjE1IDI3Ljc1NDU3IDM0LjMyMDg3IDI2LjM5NjU5NiAzNC43MTY5NjYgMjQuOTYwMjA5IEMgMzUuMTEzMDYzIDIzLjUyMzgyMSAzNS4yNjAxNzggMjIuMDMwMTM2IDM1LjE1MTkxNyAyMC41NDQwNzQgQyAzNS4wNDM2NTcgMTkuMDU4MDEyIDM0LjY4MTYxMiAxNy42MDE0MTkgMzQuMDgxNTE5IDE2LjIzNzYwNCBDIDMzLjQ4MTQyNiAxNC44NzM3OSAzMi42NTIxMDcgMTMuNjIyODAzIDMxLjYyOTYwNiAxMi41MzkwMTYgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIgc3R5bGU9ImZpbGw6I2U2MTk0YjsiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjYyOTYwNiAxMi41MzkwMTYgQyAzMC40MTAwNzUgMTEuMjQ2Mzg4IDI4LjkzOTE5MSAxMC4yMTY0NjUgMjcuMzA3NDE0IDkuNTEyNTg1IEMgMjUuNjc1NjM2IDguODA4NzA1IDIzLjkxNzExNiA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjYyOTYwNiAxMi41MzkwMTYgeiIgc3R5bGU9ImZpbGw6IzE5ZTZiNDsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzFlMmQ0MDFlMzM2YTQ4NTg4MzE2MTI1MzdkMmY3NWQ4LnNldEljb24oZGl2X2ljb25fYTQ1MzQ1NjViMjc4NDA1NGE5NGMwMTljOTI3NjNiNWUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMzlhNzEyMjBiM2YzNDg4MzkzZjRkOWY1M2QzOTRkMjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2I0YzMzYTUzODg5NDE4YTk5NWMxODkzM2I1ODNhNDMgPSAkKGA8ZGl2IGlkPSJodG1sXzdiNGMzM2E1Mzg4OTQxOGE5OTVjMTg5MzNiNTgzYTQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzlhNzEyMjBiM2YzNDg4MzkzZjRkOWY1M2QzOTRkMjguc2V0Q29udGVudChodG1sXzdiNGMzM2E1Mzg4OTQxOGE5OTVjMTg5MzNiNTgzYTQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfMWUyZDQwMWUzMzZhNDg1ODgzMTYxMjUzN2QyZjc1ZDguYmluZFBvcHVwKHBvcHVwXzM5YTcxMjIwYjNmMzQ4ODM5M2Y0ZDlmNTNkMzk0ZDI4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTc3NGMyZDUzNGYwNDc5ZjkzNTI1MzlkNmRjOGFmNDcgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3NTNhNzczYjQwNDhiNGE0NjAxMmY3ZTU2YWE4NmIpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2M0ZTBhYzAyMjUyODQ5ODdhNDgzYzNiZmU0MjBmYjhmID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjYwNjE4OSA4LjQ0NTYgMTkuMDg0MzI3IDguNzE2MDg2IDE3LjY0NDQ1MiA5LjI0NDYwOCBDIDE2LjIwNDU3OCA5Ljc3MzEzMSAxNC44NjkxMjQgMTAuNTUxNDU3IDEzLjY5OTU1MSAxMS41NDM3NjUgQyAxMi41Mjk5NzkgMTIuNTM2MDczIDExLjU0NDUxIDEzLjcyNjkwNCAxMC43ODg0OTcgMTUuMDYxNDUzIEMgMTAuMDMyNDg1IDE2LjM5NjAwMSA5LjUxNzcwNyAxNy44NTM0NzYgOS4yNjc4NTYgMTkuMzY2OCBDIDkuMDE4MDA2IDIwLjg4MDEyNCA5LjAzNjk3NCAyMi40MjU3MiA5LjMyMzg4OCAyMy45MzI0NTcgQyA5LjYxMDgwMyAyNS40MzkxOTQgMTAuMTYxMTkzIDI2Ljg4MzU5NiAxMC45NDk3MjkgMjguMTk5MTkgQyAxMS43MzgyNjUgMjkuNTE0NzgzIDEyLjc1MjY2MiAzMC42ODEwNzEgMTMuOTQ2MjM1IDMxLjY0NDM3NyBDIDE1LjEzOTgwNyAzMi42MDc2ODQgMTYuNDkzOTYgMzMuMzUzMDAyIDE3Ljk0NjM3MSAzMy44NDYwMjkgQyAxOS4zOTg3ODMgMzQuMzM5MDU2IDIwLjkyNjgyNSAzNC41NzIxMTIgMjIuNDYwMTc0IDM0LjUzNDQ3MSBDIDIzLjk5MzUyMiAzNC40OTY4MjkgMjUuNTA4Mjg5IDM0LjE4OTA3NyAyNi45MzQ3NTkgMzMuNjI1Mzc3IEMgMjguMzYxMjI5IDMzLjA2MTY3NyAyOS42NzcxOCAzMi4yNTA4MTIgMzAuODIyMDQ4IDMxLjIzMDEgQyAzMS45NjY5MTUgMzAuMjA5Mzg4IDMyLjkyMjg2NCAyOC45OTQ3MzIgMzMuNjQ1ODk3IDI3LjY0MjAzMSBDIDM0LjM2ODkzIDI2LjI4OTMzMSAzNC44NDc3ODUgMjQuODE5NjYyIDM1LjA2MDQyMiAyMy4zMDA2NjMgQyAzNS4yNzMwNTggMjEuNzgxNjYzIDM1LjIxNjE2NSAyMC4yMzY5OTcgMzQuODkyMzYgMTguNzM3NzU2IEMgMzQuNTY4NTU1IDE3LjIzODUxNCAzMy45ODI4ODMgMTUuODA4MDU0IDMzLjE2MjI5OCAxNC41MTIyMDggQyAzMi4zNDE3MTMgMTMuMjE2MzYzIDMxLjI5OSAxMi4wNzUzMjEgMzAuMDgyMTQ2IDExLjE0MTU5NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzAuMDgyMTQ2IDExLjE0MTU5NiBDIDI4Ljk1MDU3OSAxMC4yNzMzMTQgMjcuNjg0MjQ0IDkuNTk2NDQ0IDI2LjMzMzYyOSA5LjEzNzk3MSBDIDI0Ljk4MzAxNSA4LjY3OTQ5OSAyMy41NjYzMTEgOC40NDU2IDIyLjE0MDAwMiA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMC4wODIxNDYgMTEuMTQxNTk2IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl81Nzc0YzJkNTM0ZjA0NzlmOTM1MjUzOWQ2ZGM4YWY0Ny5zZXRJY29uKGRpdl9pY29uX2M0ZTBhYzAyMjUyODQ5ODdhNDgzYzNiZmU0MjBmYjhmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA3NDIxZTljMjg3OTQxNjBhODM1NjMyZjhlZDU5MjNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NkZWU4ZGVjYzVhMTRlYzU4NTcyY2Y3NjZkMTM1NTEzID0gJChgPGRpdiBpZD0iaHRtbF9jZGVlOGRlY2M1YTE0ZWM1ODU3MmNmNzY2ZDEzNTUxMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPmNvbnNvbmFudHM6IDQzPGJyPnZvd2VsczogNTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA3NDIxZTljMjg3OTQxNjBhODM1NjMyZjhlZDU5MjNkLnNldENvbnRlbnQoaHRtbF9jZGVlOGRlY2M1YTE0ZWM1ODU3MmNmNzY2ZDEzNTUxMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzU3NzRjMmQ1MzRmMDQ3OWY5MzUyNTM5ZDZkYzhhZjQ3LmJpbmRQb3B1cChwb3B1cF8wNzQyMWU5YzI4Nzk0MTYwYTgzNTYzMmY4ZWQ1OTIzZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2VjOTMxMjFiYjU1OTRiZTJhNzc1ZDI4NjA1NWRjOWQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmNzUzYTc3M2I0MDQ4YjRhNDYwMTJmN2U1NmFhODZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl84MGU0MjgxMzE1YzY0YWI5YjFjZmM1MTYxNGVkMzg1MSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44MDkxNTggOC40NDU2IDE5LjQ4NjExOCA4LjY0OTIzNSAxOC4yMTY4NzIgOS4wNDk0MjcgQyAxNi45NDc2MjYgOS40NDk2MTkgMTUuNzQ3MDU0IDEwLjA0MTY3NSAxNC42NTY4OTIgMTAuODA1MDE1IEMgMTMuNTY2NzMxIDExLjU2ODM1NCAxMi41OTk3NiAxMi40OTQwMjcgMTEuNzg5NTk1IDEzLjU0OTg1NSBDIDEwLjk3OTQzIDE0LjYwNTY4MyAxMC4zMzU1NjkgMTUuNzc5Mjg3IDkuODgwMzk0IDE3LjAyOTg2OSBDIDkuNDI1MjE5IDE4LjI4MDQ1MSA5LjE2NDA2OCAxOS41OTMzNDkgOS4xMDYwMTcgMjAuOTIyOTI0IEMgOS4wNDc5NjcgMjIuMjUyNDk5IDkuMTkzNjk4IDIzLjU4MzE2MyA5LjUzODE0NSAyNC44Njg2NTcgQyA5Ljg4MjU5MyAyNi4xNTQxNTEgMTAuNDIxNzE3IDI3LjM3OTQwNiAxMS4xMzY3NzggMjguNTAxODI2IEMgMTEuODUxODM5IDI5LjYyNDI0NiAxMi43MzQ0NTIgMzAuNjMwNjc0IDEzLjc1MzkzNiAzMS40ODYxMjMgQyAxNC43NzM0MiAzMi4zNDE1NzEgMTUuOTE3ODIyIDMzLjAzNjAxMSAxNy4xNDczNTkgMzMuNTQ1MzAyIEMgMTguMzc2ODk3IDM0LjA1NDU5MyAxOS42NzcxNTUgMzQuMzcyNzY0IDIxLjAwMjkzMiAzNC40ODg3NTUgQyAyMi4zMjg3MDkgMzQuNjA0NzQ1IDIzLjY2NDQ2MyAzNC41MTcxOTUgMjQuOTYzNzU5IDM0LjIyOTE0OCBDIDI2LjI2MzA1NCAzMy45NDExMDEgMjcuNTEwNjU4IDMzLjQ1NTkzNCAyOC42NjMyMDEgMzIuNzkwNTEzIEMgMjkuODE1NzQzIDMyLjEyNTA5MyAzMC44NTk3MTIgMzEuMjg3MjE5IDMxLjc1ODgxNiAzMC4zMDYwMTkgQyAzMi42NTc5MTkgMjkuMzI0ODIgMzMuNDAxNjE2IDI4LjIxMTc5OCAzMy45NjQwNTQgMjcuMDA1NjQ2IEMgMzQuNTI2NDkyIDI1Ljc5OTQ5NCAzNC45MDEwNzcgMjQuNTE0MzUyIDM1LjA3NDc4NiAyMy4xOTQ4OTYgQyAzNS4yNDg0OTYgMjEuODc1NDQgMzUuMjE5Mjk0IDIwLjUzNzEzOCAzNC45ODgxOTYgMTkuMjI2NTE1IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiIHN0eWxlPSJmaWxsOiNlNjE5NGI7Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNC45ODgxOTYgMTkuMjI2NTE1IEMgMzQuNDU1NzAxIDE2LjIwNjU4OSAzMi44NzUxNDkgMTMuNDY4OTk0IDMwLjUyNjA2MyAxMS40OTc4NzcgQyAyOC4xNzY5NzggOS41MjY3NiAyNS4yMDY1MTIgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNC45ODgxOTYgMTkuMjI2NTE1IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lYzkzMTIxYmI1NTk0YmUyYTc3NWQyODYwNTVkYzlkNS5zZXRJY29uKGRpdl9pY29uXzgwZTQyODEzMTVjNjRhYjliMWNmYzUxNjE0ZWQzODUxKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdiYmUyYTc3ODVjNzRiNzY5MjFlY2E2OTI3ZjlhMWQ1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk5MzQ1MTcyMTI0ZTQ0Yzc4MWY1MzNiNzBkYmRlNzFhID0gJChgPGRpdiBpZD0iaHRtbF85OTM0NTE3MjEyNGU0NGM3ODFmNTMzYjcwZGJkZTcxYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xha28xMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxha290YTwvYT48YnI+Y29uc29uYW50czogMjg8YnI+dm93ZWxzOiA4PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2JiZTJhNzc4NWM3NGI3NjkyMWVjYTY5MjdmOWExZDUuc2V0Q29udGVudChodG1sXzk5MzQ1MTcyMTI0ZTQ0Yzc4MWY1MzNiNzBkYmRlNzFhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWM5MzEyMWJiNTU5NGJlMmE3NzVkMjg2MDU1ZGM5ZDUuYmluZFBvcHVwKHBvcHVwXzdiYmUyYTc3ODVjNzRiNzY5MjFlY2E2OTI3ZjlhMWQ1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfYWUwZGVlY2YzY2Y4NDRiNTlhMDAwMWY0N2Y1NjkzMmUgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmNzUzYTc3M2I0MDQ4YjRhNDYwMTJmN2U1NmFhODZiKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8wNDUxZTc0MWMyYjQ0ZjFjYTc1ODVlNDZmZjYwMTY1ZiA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAxOS44NTAwNDkgOC40NDU2IDE3LjU5OTk1NiA5LjA0ODUxMSAxNS42MTY4IDEwLjE5MzQ4NiBDIDEzLjYzMzY0NCAxMS4zMzg0NjIgMTEuOTg2NDYxIDEyLjk4NTY0NCAxMC44NDE0ODYgMTQuOTY4OCBDIDkuNjk2NTEgMTYuOTUxOTU2IDkuMDkzNiAxOS4yMDIwNSA5LjA5MzYgMjEuNDkyMDAxIEMgOS4wOTM2IDIzLjc4MTk1MiA5LjY5NjUxMSAyNi4wMzIwNDUgMTAuODQxNDg3IDI4LjAxNTIwMSBDIDExLjk4NjQ2MiAyOS45OTgzNTYgMTMuNjMzNjQ1IDMxLjY0NTUzOSAxNS42MTY4MDEgMzIuNzkwNTE0IEMgMTcuNTk5OTU3IDMzLjkzNTQ5IDE5Ljg1MDA1IDM0LjUzODQgMjIuMTQwMDAxIDM0LjUzODQgQyAyNC40Mjk5NTIgMzQuNTM4NCAyNi42ODAwNDYgMzMuOTM1NDg5IDI4LjY2MzIwMSAzMi43OTA1MTMgQyAzMC42NDYzNTcgMzEuNjQ1NTM3IDMyLjI5MzUzOSAyOS45OTgzNTUgMzMuNDM4NTE1IDI4LjAxNTE5OSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6IiBzdHlsZT0iZmlsbDojZTYxOTRiOyIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzMuNDM4NTE1IDI4LjAxNTE5OSBDIDM0LjU4MzQ5IDI2LjAzMjA0MyAzNS4xODY0IDIzLjc4MTk0OSAzNS4xODY0IDIxLjQ5MTk5OCBDIDM1LjE4NjQgMTkuMjAyMDQ3IDM0LjU4MzQ4OSAxNi45NTE5NTQgMzMuNDM4NTEzIDE0Ljk2ODc5OCBDIDMyLjI5MzUzNyAxMi45ODU2NDMgMzAuNjQ2MzU0IDExLjMzODQ2IDI4LjY2MzE5OCAxMC4xOTM0ODUgQyAyNi42ODAwNDIgOS4wNDg1MSAyNC40Mjk5NDkgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy40Mzg1MTUgMjguMDE1MTk5IHoiIHN0eWxlPSJmaWxsOiMxOWU2YjQ7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9hZTBkZWVjZjNjZjg0NGI1OWEwMDAxZjQ3ZjU2OTMyZS5zZXRJY29uKGRpdl9pY29uXzA0NTFlNzQxYzJiNDRmMWNhNzU4NWU0NmZmNjAxNjVmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EwMDE2YzM1ZjYxZDQ0ZmZhOGMyMTY5NzFmY2VlM2IzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FkMzY5OTlmYTUxZDRjYmViMDMzZDYzNTNmMDE5NGIzID0gJChgPGRpdiBpZD0iaHRtbF9hZDM2OTk5ZmE1MWQ0Y2JlYjAzM2Q2MzUzZjAxOTRiMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3l1Y2ExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPll1Y2F0ZWMgTWF5YTwvYT48YnI+Y29uc29uYW50czogMjA8YnI+dm93ZWxzOiAxMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwMDE2YzM1ZjYxZDQ0ZmZhOGMyMTY5NzFmY2VlM2IzLnNldENvbnRlbnQoaHRtbF9hZDM2OTk5ZmE1MWQ0Y2JlYjAzM2Q2MzUzZjAxOTRiMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2FlMGRlZWNmM2NmODQ0YjU5YTAwMDFmNDdmNTY5MzJlLmJpbmRQb3B1cChwb3B1cF9hMDAxNmMzNWY2MWQ0NGZmYThjMjE2OTcxZmNlZTNiMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe7505924a8>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m1 = lingtypology.LingMap([\n",
    "    'Irish', 'Estonian', 'Norwegian', 'Romanian', 'Polish',\n",
    "    'Italian', 'Turkish', 'French', 'English', 'Spanish'\n",
    "])\n",
    "m1.add_features(native_speakers, numeric=True)\n",
    "m1.colormap_colors = ('white', 'red')\n",
    "m1.legend_title = 'Native Speakers'\n",
    "m1.legend_position = 'bottomleft'\n",
    "\n",
    "m2 = lingtypology.LingMap(data.language)\n",
    "m2.legend_title = 'Consonants/Vowels'\n",
    "m2.add_minicharts(data.consonants, data.vowels)\n",
    "\n",
    "m = lingtypology.merge(m1, m2)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.19. Using Different Tiles <a name=\"tiles\"></a>\n",
    "You can change tiles using `tiles` attribute. Let's use `Stamen Terrain`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2JmN2NiYjU5ZDhiYzRlYmI4OTdlMWQ1NDFhYzBjN2RlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5Db25zb25hbnRzL1Zvd2VsczwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogYmxhY2s7b3BhY2l0eTowLjc7Ij48L3NwYW4+Y29uc29uYW50czwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogd2hpdGU7b3BhY2l0eTowLjc7Ij48L3NwYW4+dm93ZWxzPC9saT4KCgogIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwX2JmN2NiYjU5ZDhiYzRlYmI4OTdlMWQ1NDFhYzBjN2RlID0gTC5tYXAoCiAgICAgICAgJ21hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZScsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwX2JmN2NiYjU5ZDhiYzRlYmI4OTdlMWQ1NDFhYzBjN2RlKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2RjM2Y3ZjcwZDNjYzRkMmRiN2ZkNjQwMzQwODU2MGMwID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8vc3RhbWVuLXRpbGVzLXtzfS5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0uanBnJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSk7CiAgICAKICAgICAgICB2YXIgbWFya2VyX2Q5ZmJjMGU5NjBmODRkODFhMzk2MTMyNzJjN2E2NzE0ID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmN2NiYjU5ZDhiYzRlYmI4OTdlMWQ1NDFhYzBjN2RlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl80NGE3Mzc1ZThhZTY0YmQ0OTU1NDA2MGYxNzAxOWVjNSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44NDM4NTQgOC40NDU2IDE5LjU1NDkxNSA4LjYzODc1NiAxOC4zMTU3MDUgOS4wMTg2OTYgQyAxNy4wNzY0OTYgOS4zOTg2MzUgMTUuOTAwNzk2IDkuOTYxMTM0IDE0LjgyNzM5NCAxMC42ODc2MzMgQyAxMy43NTM5OTEgMTEuNDE0MTMzIDEyLjc5NDgyMiAxMi4yOTY1NTUgMTEuOTgxNTMxIDEzLjMwNTc4OCBDIDExLjE2ODI0IDE0LjMxNTAyMSAxMC41MDk4NjkgMTUuNDM5ODQzIDEwLjAyODE0MSAxNi42NDMxNDMgQyA5LjU0NjQxMiAxNy44NDY0NDMgOS4yNDY2ODEgMTkuMTE0ODQyIDkuMTM4ODM3IDIwLjQwNjQ5NCBDIDkuMDMwOTk0IDIxLjY5ODE0NSA5LjExNjIzNSAyMi45OTg2ODcgOS4zOTE3NTEgMjQuMjY1MjEyIEMgOS42NjcyNjcgMjUuNTMxNzM2IDEwLjEyOTk5MiAyNi43NTAxNjEgMTAuNzY0NjYyIDI3Ljg4MDI4OSBDIDExLjM5OTMzMiAyOS4wMTA0MTcgMTIuMTk4ODg4IDMwLjAzOTY4IDEzLjEzNjk1MyAzMC45MzQxMjQgQyAxNC4wNzUwMTggMzEuODI4NTY3IDE1LjE0MTE2IDMyLjU3ODI0MyAxNi4zMDAyMDcgMzMuMTU4NDIgQyAxNy40NTkyNTMgMzMuNzM4NTk4IDE4LjY5ODMxNSAzNC4xNDI4MjQgMTkuOTc2NTE1IDM0LjM1Nzc2NCBDIDIxLjI1NDcxNSAzNC41NzI3MDQgMjIuNTU3ODM5IDM0LjU5NTk2NyAyMy44NDI4OTcgMzQuNDI2Nzg2IEMgMjUuMTI3OTU0IDM0LjI1NzYwNSAyNi4zODA2NTQgMzMuODk3ODYxIDI3LjU1OTY3IDMzLjM1OTQyMyBDIDI4LjczODY4NiAzMi44MjA5ODUgMjkuODMwOTA3IDMyLjEwOTgzOSAzMC44MDAyOTkgMzEuMjQ5NDQ4IEMgMzEuNzY5NjkgMzAuMzg5MDU2IDMyLjYwNTQ3NCAyOS4zODg5ODYgMzMuMjgwMDc3IDI4LjI4MjIzMiBDIDMzLjk1NDY3OSAyNy4xNzU0NzcgMzQuNDYwNTk4IDI1Ljk3NDM0NCAzNC43ODExNDMgMjQuNzE4NDYgQyAzNS4xMDE2ODkgMjMuNDYyNTc2IDM1LjIzMzI5NiAyMi4xNjU5MDYgMzUuMTcxNjIzIDIwLjg3MTIyOCBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4xNzE2MjMgMjAuODcxMjI4IEMgMzUuMDEyMTUyIDE3LjUyMzUwOSAzMy41Njg2NTMgMTQuMzYyNjg3IDMxLjE0MzA0NyAxMi4wNDk4NzYgQyAyOC43MTc0NDEgOS43MzcwNjYgMjUuNDkxNTE1IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzNS4xNzE2MjMgMjAuODcxMjI4IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kOWZiYzBlOTYwZjg0ZDgxYTM5NjEzMjcyYzdhNjcxNC5zZXRJY29uKGRpdl9pY29uXzQ0YTczNzVlOGFlNjRiZDQ5NTU0MDYwZjE3MDE5ZWM1KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EyMDMwYTE3ZDY4ZDRhMzlhN2M4MTgxODU0YTQyZDMzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk3M2NjMGE3Yjk5OTQ3MTE4YjhlZWViMmNmNDJiYWU0ID0gJChgPGRpdiBpZD0iaHRtbF85NzNjYzBhN2I5OTk0NzExOGI4ZWVlYjJjZjQyYmFlNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPmNvbnNvbmFudHM6IDI1PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EyMDMwYTE3ZDY4ZDRhMzlhN2M4MTgxODU0YTQyZDMzLnNldENvbnRlbnQoaHRtbF85NzNjYzBhN2I5OTk0NzExOGI4ZWVlYjJjZjQyYmFlNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Q5ZmJjMGU5NjBmODRkODFhMzk2MTMyNzJjN2E2NzE0LmJpbmRQb3B1cChwb3B1cF9hMjAzMGExN2Q2OGQ0YTM5YTdjODE4MTg1NGE0MmQzMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzQ4ZmIwOGExODllMTRjYzdiZjBlN2QxZTgwYTI1ZjkxID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fODg5ZTQ0MTJlODk1NDU0ZWJiN2ZkNWRmM2M1Nzc1NmYgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODg2MjIxIDguNDQ1NiAxNy42NzA0MzYgOS4wMjk2MTQgMTUuNzA5NDUzIDEwLjE0MDQ5NyBDIDEzLjc0ODQ3IDExLjI1MTM4IDEyLjEwODQwMyAxMi44NTE2OCAxMC45NDk3MjkgMTQuNzg0ODEgQyA5Ljc5MTA1NiAxNi43MTc5NCA5LjE1Mjg0IDE4LjkxODcyNiA5LjA5NzUyOSAyMS4xNzE4MjUgQyA5LjA0MjIxOSAyMy40MjQ5MjUgOS41NzE2NzkgMjUuNjU0Mzc1IDEwLjYzNDEwMiAyNy42NDIwMyBDIDExLjY5NjUyNiAyOS42Mjk2ODYgMTMuMjU2MDk0IDMxLjMwODUzMSAxNS4xNjAyMDcgMzIuNTE0Mjk4IEMgMTcuMDY0MzIgMzMuNzIwMDY0IDE5LjI0ODc4IDM0LjQxMjA5NyAyMS40OTk4NDMgMzQuNTIyNjg1IEMgMjMuNzUwOTA3IDM0LjYzMzI3MyAyNS45OTI2NzkgMzQuMTU4Njg2IDI4LjAwNTgwOSAzMy4xNDUzNjIgQyAzMC4wMTg5MzkgMzIuMTMyMDM3IDMxLjczNTU1MyAzMC42MTQxNCAzMi45ODc2ODUgMjguNzQwMTkxIEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMyLjk4NzY4NSAyOC43NDAxOTEgQyAzNC4zMDAxMzggMjYuNzc1OTY3IDM1LjA1NDc3IDI0LjQ5MTY2MyAzNS4xNzA2ODUgMjIuMTMyMTU3IEMgMzUuMjg2NiAxOS43NzI2NSAzNC43NTk1MDMgMTcuNDI1Mzc4IDMzLjY0NTg5OCAxNS4zNDE5NyBDIDMyLjUzMjI5MiAxMy4yNTg1NjEgMzAuODczNDQ3IDExLjUxNjIyMSAyOC44NDcxOSAxMC4zMDE3MjkgQyAyNi44MjA5MzMgOS4wODcyMzggMjQuNTAyMzUyIDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi45ODc2ODUgMjguNzQwMTkxIHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80OGZiMDhhMTg5ZTE0Y2M3YmYwZTdkMWU4MGEyNWY5MS5zZXRJY29uKGRpdl9pY29uXzg4OWU0NDEyZTg5NTQ1NGViYjdmZDVkZjNjNTc3NTZmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5YWUxMmQ5MjdhNTQ4MWI4NjEwYTFhMzdiMDdlZjI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzdkMGQ5ZDgxZWRjYTQwNmY5MmM0Y2Q4YWNmZmZhNTg0ID0gJChgPGRpdiBpZD0iaHRtbF83ZDBkOWQ4MWVkY2E0MDZmOTJjNGNkOGFjZmZmYTU4NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvcmUxMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvcmVhbjwvYT48YnI+Y29uc29uYW50czogMjE8YnI+dm93ZWxzOiAxMTxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5YWUxMmQ5MjdhNTQ4MWI4NjEwYTFhMzdiMDdlZjI3LnNldENvbnRlbnQoaHRtbF83ZDBkOWQ4MWVkY2E0MDZmOTJjNGNkOGFjZmZmYTU4NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzQ4ZmIwOGExODllMTRjYzdiZjBlN2QxZTgwYTI1ZjkxLmJpbmRQb3B1cChwb3B1cF8zOWFlMTJkOTI3YTU0ODFiODYxMGExYTM3YjA3ZWYyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzRmYTdhMWI0NzY3NTQ0MmZhYmJhNGY4MmY4MWEwMmYyID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFstMTEuNjMwOCwgMTMwLjk0ODk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmN2NiYjU5ZDhiYzRlYmI4OTdlMWQ1NDFhYzBjN2RlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl81YWI2NmMzMzdkYzc0MWY1YTAwZGViMTg2MmM4MjM5OSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC42OTE2NDggOC40NDU2IDE5LjI1MzM1NSA4LjY4Njc4NCAxNy44ODQyMjggOS4xNTkyNDEgQyAxNi41MTUxMDEgOS42MzE2OTcgMTUuMjM0MTU3IDEwLjMyODg2NCAxNC4wOTQwMzkgMTEuMjIyMDg5IEMgMTIuOTUzOTIgMTIuMTE1MzE1IDExLjk3MDQ2MiAxMy4xOTIxOTQgMTEuMTg0MDgxIDE0LjQwODQ3MSBDIDEwLjM5NzcgMTUuNjI0NzQ3IDkuODE5MzE4IDE2Ljk2MzUyNyA5LjQ3MjcwNSAxOC4zNjk3OTIgQyA5LjEyNjA5MSAxOS43NzYwNTggOS4wMTYwNjEgMjEuMjMwMjc2IDkuMTQ3MTM1IDIyLjY3MjY4NSBDIDkuMjc4MjA5IDI0LjExNTA5MyA5LjY0ODU2OCAyNS41MjU2NTggMTAuMjQyOTkgMjYuODQ2NDEgQyAxMC44Mzc0MTIgMjguMTY3MTYyIDExLjY0NzY0MiAyOS4zNzk3NTYgMTIuNjQwMzgyIDMwLjQzNDM2MSBDIDEzLjYzMzEyMiAzMS40ODg5NjUgMTQuNzk0NTg0IDMyLjM3MDkzMSAxNi4wNzcwMzYgMzMuMDQ0MDE0IEMgMTcuMzU5NDg4IDMzLjcxNzA5NiAxOC43NDUxMTcgMzQuMTcxOTQ3IDIwLjE3Njk4IDM0LjM4OTg3MiBDIDIxLjYwODg0MyAzNC42MDc3OTggMjMuMDY3MDUyIDM0LjU4NTc3MSAyNC40OTE2OCAzNC4zMjQ2OTkgQyAyNS45MTYzMDcgMzQuMDYzNjI2IDI3LjI4NzU2NyAzMy41NjcxMzMgMjguNTQ5MTA1IDMyLjg1NTYyMyBDIDI5LjgxMDY0MiAzMi4xNDQxMTQgMzAuOTQ0OTM2IDMxLjIyNzQ3IDMxLjkwNTM3MSAzMC4xNDMzNjMgQyAzMi44NjU4MDYgMjkuMDU5MjU2IDMzLjYzOTA0MiAyNy44MjI3NDMgMzQuMTkzMzAyIDI2LjQ4NDY0MSBDIDM0Ljc0NzU2MiAyNS4xNDY1MzggMzUuMDc1MTQ4IDIzLjcyNTQzMSAzNS4xNjI1OTggMjIuMjc5NzIxIEMgMzUuMjUwMDQ3IDIwLjgzNDAxMiAzNS4wOTYxNDUgMTkuMzgzNzggMzQuNzA3MjE2IDE3Ljk4ODYyNSBDIDM0LjMxODI4NyAxNi41OTM0NyAzMy42OTk3MzQgMTUuMjcyNzcgMzIuODc2OTc2IDE0LjA4MDc5OSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi44NzY5NzYgMTQuMDgwNzk5IEMgMzEuNjc3MTk3IDEyLjM0MjYyIDMwLjA3MzA4NyAxMC45MjE1MDMgMjguMjAyOTY0IDkuOTM5OTg2IEMgMjYuMzMyODQgOC45NTg0NyAyNC4yNTIwNDUgOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi44NzY5NzYgMTQuMDgwNzk5IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl80ZmE3YTFiNDc2NzU0NDJmYWJiYTRmODJmODFhMDJmMi5zZXRJY29uKGRpdl9pY29uXzVhYjY2YzMzN2RjNzQxZjVhMDBkZWIxODYyYzgyMzk5KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY5OTc1OGNlNGJlZjQ0N2M5MDFkMTM5YWExY2M5MGFjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzYWEwZDgxNDM2ZjQxOWQ5ZDkzMGU2NTc1OWQ2MzA4ID0gJChgPGRpdiBpZD0iaHRtbF9mM2FhMGQ4MTQzNmY0MTlkOWQ5MzBlNjU3NTlkNjMwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPmNvbnNvbmFudHM6IDIyPGJyPnZvd2VsczogNDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY5OTc1OGNlNGJlZjQ0N2M5MDFkMTM5YWExY2M5MGFjLnNldENvbnRlbnQoaHRtbF9mM2FhMGQ4MTQzNmY0MTlkOWQ5MzBlNjU3NTlkNjMwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzRmYTdhMWI0NzY3NTQ0MmZhYmJhNGY4MmY4MWEwMmYyLmJpbmRQb3B1cChwb3B1cF82OTk3NThjZTRiZWY0NDdjOTAxZDEzOWFhMWNjOTBhYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2VmMGYyODRkNzkyNjRhNjVhMDdjMDM2YjdhZmJmMThlID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFs2LjkyMDQ4LCAtOS45NjEyOF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fY2I5NjE5ZmM3ZjlhNGM3Mjg1OWVjZWQ1ZDJhZTk0ZDAgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuOTE4MTIzIDguNDQ1NiAxNy43MzI2NDUgOS4wMTMxOTggMTUuNzkxNTYzIDEwLjA5NDM3MyBDIDEzLjg1MDQ4MiAxMS4xNzU1NDggMTIuMjE3Mzk0IDEyLjczNDg3OCAxMS4wNDc3MjcgMTQuNjIzOTU2IEMgOS44NzgwNiAxNi41MTMwMzQgOS4yMTAxMzUgMTguNjY5OTY3IDkuMTA3NTIxIDIwLjg4OTQ3MyBDIDkuMDA0OTA3IDIzLjEwODk3OSA5LjQ3MDk2NiAyNS4zMTgzMzkgMTAuNDYxMzQyIDI3LjMwNzI4MiBDIDExLjQ1MTcxOCAyOS4yOTYyMjQgMTIuOTMzOTYyIDMwLjk5OTU4NCAxNC43NjcwMDUgMzIuMjU1MjQ4IEMgMTYuNjAwMDQ4IDMzLjUxMDkxMSAxOC43MjM4MzMgMzQuMjc3NzM4IDIwLjkzNjIzMSAzNC40ODI3NDYgQyAyMy4xNDg2MyAzNC42ODc3NTUgMjUuMzc3MTU3IDM0LjMyNDIyOSAyNy40MDk3MTYgMzMuNDI2NzY2IEMgMjkuNDQyMjc2IDMyLjUyOTMwMyAzMS4yMTIyNzMgMzEuMTI3MzA3IDMyLjU1MTI1MyAyOS4zNTQyMTEgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuNTUxMjUzIDI5LjM1NDIxMSBDIDM0LjAxMzQyNSAyNy40MTc5ODIgMzQuOTA2ODc2IDI1LjExMTcxNyAzNS4xMzA3NDcgMjIuNjk1NzY4IEMgMzUuMzU0NjE3IDIwLjI3OTgxOSAzNC45MDAxNTIgMTcuODQ4NjUxIDMzLjgxODY1NyAxNS42NzY3MTcgQyAzMi43MzcxNjIgMTMuNTA0NzgzIDMxLjA3MDkyNCAxMS42NzcwMDggMjkuMDA4MDQzIDEwLjM5OTcyNiBDIDI2Ljk0NTE2MSA5LjEyMjQ0NCAyNC41NjYyOTcgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMi41NTEyNTMgMjkuMzU0MjExIHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lZjBmMjg0ZDc5MjY0YTY1YTA3YzAzNmI3YWZiZjE4ZS5zZXRJY29uKGRpdl9pY29uX2NiOTYxOWZjN2Y5YTRjNzI4NTllY2VkNWQyYWU5NGQwKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I3MzdhODA1MGNhMzQ0N2FiNzdiNDdmZjUxNjY4OWU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQzOTkwMjE4ZDJiOTQ5NDZiNDU2MWQ3ZDdkNTkwNGVjID0gJChgPGRpdiBpZD0iaHRtbF80Mzk5MDIxOGQyYjk0OTQ2YjQ1NjFkN2Q3ZDU5MDRlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2xpYmUxMjQ3IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkxpYmVyaWEgS3BlbGxlPC9hPjxicj5jb25zb25hbnRzOiAyMjxicj52b3dlbHM6IDEyPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjczN2E4MDUwY2EzNDQ3YWI3N2I0N2ZmNTE2Njg5ZTguc2V0Q29udGVudChodG1sXzQzOTkwMjE4ZDJiOTQ5NDZiNDU2MWQ3ZDdkNTkwNGVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZWYwZjI4NGQ3OTI2NGE2NWEwN2MwMzZiN2FmYmYxOGUuYmluZFBvcHVwKHBvcHVwX2I3MzdhODA1MGNhMzQ0N2FiNzdiNDdmZjUxNjY4OWU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNTc2MTUwNjliOTJkNGFiZmE5MzE5ZWVlNmIxY2RhODMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzc2OTFmYjdjZjRkNjQ2OTI4ZmE5ZmRjOWFhOGVmMTE1ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjkxMjYwNiA4LjQ0NTYgMTcuNzIxODgzIDkuMDE2MDIgMTUuNzc3MzM3IDEwLjEwMjMwOSBDIDEzLjgzMjc5MSAxMS4xODg1OTcgMTIuMTk4NDQ5IDEyLjc1NDk4NiAxMS4wMzA2MTEgMTQuNjUxNjc3IEMgOS44NjI3NzIgMTYuNTQ4MzY4IDkuMTk5ODg5IDE4LjcxMjkwNyA5LjEwNTM1NSAyMC45MzgyOTQgQyA5LjAxMDgyMiAyMy4xNjM2ODEgOS40ODc3NTEgMjUuMzc2NjM5IDEwLjQ5MDUzMiAyNy4zNjU1MzcgQyAxMS40OTMzMTIgMjkuMzU0NDM1IDEyLjk4ODkyNyAzMS4wNTM3ODMgMTQuODM0MzQ0IDMyLjMwMTA2NyBDIDE2LjY3OTc2MSAzMy41NDgzNTIgMTguODE0MjE3IDM0LjMwMjUwNCAyMS4wMzM1ODYgMzQuNDkxNCBDIDIzLjI1Mjk1NiAzNC42ODAyOTcgMjUuNDg0MTYyIDM0LjI5NzcxOCAyNy41MTM4MjcgMzMuMzgwMjUyIEMgMjkuNTQzNDkxIDMyLjQ2Mjc4NiAzMS4zMDQ3ODQgMzEuMDQwNjQyIDMyLjYyOTI2NyAyOS4yNDk4MjQgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzIuNjI5MjY3IDI5LjI0OTgyNCBDIDM0LjA2NTQ0NSAyNy4zMDc5ODMgMzQuOTM0NTczIDI1LjAwNDk0NyAzNS4xMzk0IDIyLjU5ODQxNCBDIDM1LjM0NDIyNyAyMC4xOTE4ODEgMzQuODc2ODE2IDE3Ljc3NTA4OSAzMy43ODk0NjkgMTUuNjE4NDY0IEMgMzIuNzAyMTIyIDEzLjQ2MTgzOSAzMS4wMzY5NjYgMTEuNjQ4OTM3IDI4Ljk4MDMyNSAxMC4zODI2MTIgQyAyNi45MjM2ODMgOS4xMTYyODYgMjQuNTU1MjM2IDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNjI5MjY3IDI5LjI0OTgyNCB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfNTc2MTUwNjliOTJkNGFiZmE5MzE5ZWVlNmIxY2RhODMuc2V0SWNvbihkaXZfaWNvbl83NjkxZmI3Y2Y0ZDY0NjkyOGZhOWZkYzlhYThlZjExNSk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xY2E5YWRhOGZhYjA0NDI2ODI0NjdiNmE1NWQ3Y2VkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MGVkMmVlZmZjNzQ0ZjQyOTQwMWY1Nzc0MTNhZGU3MCA9ICQoYDxkaXYgaWQ9Imh0bWxfNjBlZDJlZWZmYzc0NGY0Mjk0MDFmNTc3NDEzYWRlNzAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90dWx1MTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdWx1PC9hPjxicj5jb25zb25hbnRzOiAyNDxicj52b3dlbHM6IDEzPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWNhOWFkYThmYWIwNDQyNjgyNDY3YjZhNTVkN2NlZGIuc2V0Q29udGVudChodG1sXzYwZWQyZWVmZmM3NDRmNDI5NDAxZjU3NzQxM2FkZTcwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNTc2MTUwNjliOTJkNGFiZmE5MzE5ZWVlNmIxY2RhODMuYmluZFBvcHVwKHBvcHVwXzFjYTlhZGE4ZmFiMDQ0MjY4MjQ2N2I2YTU1ZDdjZWRiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfOTIyZWFjNGNhOTQwNDhlNzhhYmM2NDRiZGI1ZWEyYTEgPSBMLm1hcmtlcigKICAgICAgICAgICAgWy0zOC43MzkyLCAtNzEuMjc3XSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmN2NiYjU5ZDhiYzRlYmI4OTdlMWQ1NDFhYzBjN2RlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl9jYTgyMGQ5NWRjM2U0Y2Q1YmRjNTZjNDkwMDRhN2M4ZCA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC44MjM4MzkgOC40NDU2IDE5LjUxNTIyMyA4LjY0NDc2OCAxOC4yNTg2NTYgOS4wMzYzMyBDIDE3LjAwMjA4OSA5LjQyNzg5MiAxNS44MTE5OCAxMC4wMDczNTggMTQuNzI4OCAxMC43NTUwMjMgQyAxMy42NDU2MiAxMS41MDI2ODggMTIuNjgxNzkxIDEyLjQwOTk3OSAxMS44NzAwODkgMTMuNDQ2MDM5IEMgMTEuMDU4Mzg4IDE0LjQ4MjEgMTAuNDA4MTIxIDE1LjYzNTA1MSA5Ljk0MTQwNCAxNi44NjU2ODMgQyA5LjQ3NDY4NyAxOC4wOTYzMTUgOS4xOTY4NyAxOS4zOTA1MTggOS4xMTc0MDIgMjAuNzA0Mjc4IEMgOS4wMzc5MzUgMjIuMDE4MDM4IDkuMTU3NzI3IDIzLjMzNjI5MiA5LjQ3MjcwNSAyNC42MTQyMDggQyA5Ljc4NzY4MyAyNS44OTIxMjQgMTAuMjk0MjM1IDI3LjExNTA1IDEwLjk3NTEzNSAyOC4yNDEzOTYgQyAxMS42NTYwMzYgMjkuMzY3NzQzIDEyLjUwMzQ3NiAzMC4zODQ1OTUgMTMuNDg4NjM3IDMxLjI1NzM3MSBDIDE0LjQ3Mzc5OCAzMi4xMzAxNDcgMTUuNTg1Mzg0IDMyLjg0ODg0MSAxNi43ODU1OTEgMzMuMzg5MDEgQyAxNy45ODU3OTggMzMuOTI5MTggMTkuMjYwODY2IDM0LjI4NDYzMSAyMC41Njc0MzEgMzQuNDQzMjc3IEMgMjEuODczOTk2IDM0LjYwMTkyMyAyMy4xOTcwNzggMzQuNTYxOTQzIDI0LjQ5MTY4IDM0LjMyNDY5OSBDIDI1Ljc4NjI4MyAzNC4wODc0NTQgMjcuMDM3NTYyIDMzLjY1NTY2NCAyOC4yMDI5NjUgMzMuMDQ0MDEzIEMgMjkuMzY4MzY4IDMyLjQzMjM2MiAzMC40MzQ1MzIgMzEuNjQ3ODY0IDMxLjM2NTE5OSAzMC43MTcxOTcgQyAzMi4yOTU4NjUgMjkuNzg2NTMxIDMzLjA4MDM2MyAyOC43MjAzNjcgMzMuNjkyMDE0IDI3LjU1NDk2NCBDIDM0LjMwMzY2NSAyNi4zODk1NiAzNC43MzU0NTQgMjUuMTM4MjgxIDM0Ljk3MjY5OSAyMy44NDM2NzggQyAzNS4yMDk5NDQgMjIuNTQ5MDc2IDM1LjI0OTkyMyAyMS4yMjU5OTQgMzUuMDkxMjc3IDE5LjkxOTQyOSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4wOTEyNzcgMTkuOTE5NDI5IEMgMzQuNzA3MTM4IDE2Ljc1NTc2IDMzLjE3Njc5NiAxMy44Mzk5MzcgMzAuNzkxMzYzIDExLjcyNjYyOSBDIDI4LjQwNTkzIDkuNjEzMzIgMjUuMzI2OTA0IDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzUuMDkxMjc3IDE5LjkxOTQyOSB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOTIyZWFjNGNhOTQwNDhlNzhhYmM2NDRiZGI1ZWEyYTEuc2V0SWNvbihkaXZfaWNvbl9jYTgyMGQ5NWRjM2U0Y2Q1YmRjNTZjNDkwMDRhN2M4ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82ZDFlM2NjMjY0YzU0YmVmOWM5ZDY5MTk5ZDM5NjViYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81ZmUzM2Y2YmRiODQ0YmU4OWUwM2RiZWI2OWRjZWUzZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNWZlMzNmNmJkYjg0NGJlODllMDNkYmViNjlkY2VlM2YiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9tYXB1MTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5NYXB1ZHVuZ3VuPC9hPjxicj5jb25zb25hbnRzOiAyMDxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZDFlM2NjMjY0YzU0YmVmOWM5ZDY5MTk5ZDM5NjViYi5zZXRDb250ZW50KGh0bWxfNWZlMzNmNmJkYjg0NGJlODllMDNkYmViNjlkY2VlM2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl85MjJlYWM0Y2E5NDA0OGU3OGFiYzY0NGJkYjVlYTJhMS5iaW5kUG9wdXAocG9wdXBfNmQxZTNjYzI2NGM1NGJlZjljOWQ2OTE5OWQzOTY1YmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl84YWU5MGNlYzUxMDk0YzE0ODY2YTU0MjAxYmMzNWRiZCA9IEwubWFya2VyKAogICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzk1OTA2MzZlZTdjYzQ4NGQ4NTcwN2I5MGM5NzMxOTg4ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjM0NDYyMyA4LjQ0NTYgMTguNTY4NDIzIDguODE2MjA1IDE2LjkyMjg0OCA5LjUzNDE2MiBDIDE1LjI3NzI3NCAxMC4yNTIxMTkgMTMuNzk3NDc4IDExLjMwMjA5IDEyLjU3NjMxMiAxMi42MTgxOTUgQyAxMS4zNTUxNDUgMTMuOTM0Mjk5IDEwLjQxODY5NSAxNS40ODg0MjIgOS44MjU3MiAxNy4xODMwNDggQyA5LjIzMjc0NSAxOC44Nzc2NzQgOC45OTU5MTIgMjAuNjc2NjAzIDkuMTMwMDggMjIuNDY2OTYgQyA5LjI2NDI0OSAyNC4yNTczMTYgOS43NjY1NTQgMjYuMDAwODU1IDEwLjYwNTQ3OCAyNy41ODgxNzUgQyAxMS40NDQ0MDEgMjkuMTc1NDk1IDEyLjYwMjAyMiAzMC41NzI2ODggMTQuMDA1NzA0IDMxLjY5MjA4NyBDIDE1LjQwOTM4NiAzMi44MTE0ODYgMTcuMDI5MTQ0IDMzLjYyOTE3OCAxOC43NjMzNDUgMzQuMDkzODU1IEMgMjAuNDk3NTQ2IDM0LjU1ODUzMyAyMi4zMDkxNDMgMzQuNjYwMjY5IDI0LjA4NDQ2NyAzNC4zOTI2ODIgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMjQuMDg0NDY3IDM0LjM5MjY4MiBDIDI3LjMzODAzMSAzMy45MDIyODYgMzAuMjg4NjExIDMyLjE5ODc2NyAzMi4zNDAwODggMjkuNjI2Mjk2IEMgMzQuMzkxNTY0IDI3LjA1MzgyNCAzNS4zOTU4MDYgMjMuNzk4MTUyIDM1LjE0OTkxOSAyMC41MTcwMzkgQyAzNC45MDQwMzMgMTcuMjM1OTI1IDMzLjQyNTc3NSAxNC4xNjYyOTIgMzEuMDEzODA0IDExLjkyODMxIEMgMjguNjAxODMzIDkuNjkwMzI5IDI1LjQzMDMxMSA4LjQ0NTU5OSAyMi4xMzk5OTggOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMjQuMDg0NDY3IDM0LjM5MjY4MiB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOGFlOTBjZWM1MTA5NGMxNDg2NmE1NDIwMWJjMzVkYmQuc2V0SWNvbihkaXZfaWNvbl85NTkwNjM2ZWU3Y2M0ODRkODU3MDdiOTBjOTczMTk4OCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMzdlNzY0YmUxMDA0YjgyOGU0OTYxOGY3NTEyYTM1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8wYzFkYmFkOGVhMGM0ZjAzYjk1MThhZjlkMTgyZDg5NyA9ICQoYDxkaXYgaWQ9Imh0bWxfMGMxZGJhZDhlYTBjNGYwM2I5NTE4YWY5ZDE4MmQ4OTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9raW93MTI2NiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LaW93YTwvYT48YnI+Y29uc29uYW50czogMjI8YnI+dm93ZWxzOiAyMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IzN2U3NjRiZTEwMDRiODI4ZTQ5NjE4Zjc1MTJhMzUwLnNldENvbnRlbnQoaHRtbF8wYzFkYmFkOGVhMGM0ZjAzYjk1MThhZjlkMTgyZDg5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzhhZTkwY2VjNTEwOTRjMTQ4NjZhNTQyMDFiYzM1ZGJkLmJpbmRQb3B1cChwb3B1cF9iMzdlNzY0YmUxMDA0YjgyOGU0OTYxOGY3NTEyYTM1MCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2QwOGI5MWY4YTVhMzRjM2RhZDRiNzhiYjllMDExNjliID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFszNS4wLCAxMzUuMF0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMTZlNzcyODI4NGIxNDM3N2FmMzhmNjQ0M2IzZDkwOGIgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuNTU5OTc1IDguNDQ1NiAxNy4wMzcwMjEgOS4yMTA5MyAxNC44OTE4MDkgMTAuNjQ0MzE1IEMgMTIuNzQ2NTk2IDEyLjA3NzcgMTEuMDc0MDMxIDE0LjExNTcyNiAxMC4wODY2OTggMTYuNDk5MzU5IEMgOS4wOTkzNjUgMTguODgyOTkxIDguODQwOTQ1IDIxLjUwNjc3NiA5LjM0NDI4MyAyNC4wMzcyMjYgQyA5Ljg0NzYyMSAyNi41Njc2NzcgMTEuMDkwNDQ5IDI4Ljg5Mjg0NSAxMi45MTQ4MDIgMzAuNzE3MTk4IEMgMTQuNzM5MTU1IDMyLjU0MTU1MSAxNy4wNjQzMjMgMzMuNzg0Mzc5IDE5LjU5NDc3NCAzNC4yODc3MTcgQyAyMi4xMjUyMjQgMzQuNzkxMDU1IDI0Ljc0OTAwOSAzNC41MzI2MzUgMjcuMTMyNjQxIDMzLjU0NTMwMiBDIDI5LjUxNjI3NCAzMi41NTc5NjkgMzEuNTU0MyAzMC44ODU0MDQgMzIuOTg3Njg1IDI4Ljc0MDE5MSBDIDM0LjQyMTA3IDI2LjU5NDk3OSAzNS4xODY0IDI0LjA3MjAyNSAzNS4xODY0IDIxLjQ5MiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzNS4xODY0IDIxLjQ5MiBDIDM1LjE4NjQgMTguMDMzMjA3IDMzLjgxMDkzNCAxNC43MTI1MzggMzEuMzY1MTk4IDEyLjI2NjgwMiBDIDI4LjkxOTQ2MiA5LjgyMTA2NiAyNS41OTg3OTMgOC40NDU2IDIyLjE0IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDM1LjE4NjQgMjEuNDkyIHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9kMDhiOTFmOGE1YTM0YzNkYWQ0Yjc4YmI5ZTAxMTY5Yi5zZXRJY29uKGRpdl9pY29uXzE2ZTc3MjgyODRiMTQzNzdhZjM4ZjY0NDNiM2Q5MDhiKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2VkZjExZGFhZDZjMTQ4OGM4YjhkN2ViNTBiMDE2ZTRiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYxNTNhMGI1YzBmNjRlYTM5ZDYwNTNlYWFhM2YwOGM2ID0gJChgPGRpdiBpZD0iaHRtbF82MTUzYTBiNWMwZjY0ZWEzOWQ2MDUzZWFhYTNmMDhjNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxNjQzIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkphcGFuZXNlPC9hPjxicj5jb25zb25hbnRzOiAxNTxicj52b3dlbHM6IDU8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lZGYxMWRhYWQ2YzE0ODhjOGI4ZDdlYjUwYjAxNmU0Yi5zZXRDb250ZW50KGh0bWxfNjE1M2EwYjVjMGY2NGVhMzlkNjA1M2VhYWEzZjA4YzYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kMDhiOTFmOGE1YTM0YzNkYWQ0Yjc4YmI5ZTAxMTY5Yi5iaW5kUG9wdXAocG9wdXBfZWRmMTFkYWFkNmMxNDg4YzhiOGQ3ZWI1MGIwMTZlNGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl83MjViMjRjYzQ1ODI0MzI0OTYwYTBhYjdjMjQ0ZWM5MiA9IEwubWFya2VyKAogICAgICAgICAgICBbNy4xNTM0NSwgMy42NzIyNV0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fZDM2MDExY2JmMDViNDMwMmJmYjYxZjYwNGVkM2RiNjAgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuMDA5NTcgOC40NDU2IDE3LjkxMTIxNyA4Ljk2NzQzNyAxNi4wMjg5NTYgOS45NjUzNDggQyAxNC4xNDY2OTYgMTAuOTYzMjYgMTIuNTM3MjA4IDEyLjQwNzE5NSAxMS4zNDE2MzkgMTQuMTcwNTI5IEMgMTAuMTQ2MDY5IDE1LjkzMzg2MiA5LjQwMDQxOSAxNy45NjM0OTQgOS4xNzAwNzkgMjAuMDgxNDM1IEMgOC45Mzk3MzkgMjIuMTk5Mzc2IDkuMjMxNjQ1IDI0LjM0MTg1IDEwLjAyMDE5OCAyNi4zMjA5NjkgQyAxMC44MDg3NTEgMjguMzAwMDg5IDEyLjA3MDIwNiAzMC4wNTYyNTkgMTMuNjkzOTM5IDMxLjQzNTQ3IEMgMTUuMzE3NjcxIDMyLjgxNDY4MSAxNy4yNTQ3ODcgMzMuNzc1NDAyIDE5LjMzNTQwOCAzNC4yMzMzODIgQyAyMS40MTYwMyAzNC42OTEzNjIgMjMuNTc3NTA0IDM0LjYzMjgwOSAyNS42MzAyOCAzNC4wNjI4NTkgQyAyNy42ODMwNTYgMzMuNDkyOTA5IDI5LjU2NTMxOCAzMi40Mjg3MjQgMzEuMTEyMDAxIDMwLjk2MzYyOSBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMS4xMTIwMDEgMzAuOTYzNjI5IEMgMzMuMDA2OTI3IDI5LjE2ODY2IDM0LjMyMDI4NiAyNi44NDU2NzYgMzQuODgxMzgyIDI0LjI5NjU5MiBDIDM1LjQ0MjQ3OCAyMS43NDc1MDkgMzUuMjI1OTAyIDE5LjA4Nzc2IDM0LjI1OTgwMyAxNi42NjMwMzIgQyAzMy4yOTM3MDMgMTQuMjM4MzAzIDMxLjYyMTgyOSAxMi4xNTgzOTggMjkuNDYxNDczIDEwLjY5MzY0IEMgMjcuMzAxMTE3IDkuMjI4ODgxIDI0Ljc1MDEwOSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjExMjAwMSAzMC45NjM2MjkgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzcyNWIyNGNjNDU4MjQzMjQ5NjBhMGFiN2MyNDRlYzkyLnNldEljb24oZGl2X2ljb25fZDM2MDExY2JmMDViNDMwMmJmYjYxZjYwNGVkM2RiNjApOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZDVjYWVlOWM0ZGZmNDQ5N2I2OWM0MTM2OTg5ZjJmYTAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2ZmZjM5MGY4YzFmNGNhNjliNzU2OTA1ZWVlMDcxOTQgPSAkKGA8ZGl2IGlkPSJodG1sX2NmZmYzOTBmOGMxZjRjYTY5Yjc1NjkwNWVlZTA3MTk0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj5jb25zb25hbnRzOiAxODxicj52b3dlbHM6IDExPGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDVjYWVlOWM0ZGZmNDQ5N2I2OWM0MTM2OTg5ZjJmYTAuc2V0Q29udGVudChodG1sX2NmZmYzOTBmOGMxZjRjYTY5Yjc1NjkwNWVlZTA3MTk0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfNzI1YjI0Y2M0NTgyNDMyNDk2MGEwYWI3YzI0NGVjOTIuYmluZFBvcHVwKHBvcHVwX2Q1Y2FlZTljNGRmZjQ0OTdiNjljNDEzNjk4OWYyZmEwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfNjZlY2Y3OTljNmMzNGY5NGEyMjQ5MDA1Mjk0MWI5NGYgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzVjNGZjN2E5NWQyMjRkMmZhYjAwZDAyMmQ2NjY2M2IyID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjgwMzcyMSA4LjQ0NTYgMTcuNTA5Nzc2IDkuMDczMTUyIDE1LjQ5ODg0MiAxMC4yNjI0MTUgQyAxMy40ODc5MDggMTEuNDUxNjc4IDExLjgzMjg2MyAxMy4xNTk1NTIgMTAuNzA3MzUyIDE1LjIwNjg0OSBDIDkuNTgxODQxIDE3LjI1NDE0NiA5LjAyNjY1MyAxOS41NjY2NzEgOS4xMDAwMzggMjEuOTAxNzk4IEMgOS4xNzM0MjIgMjQuMjM2OTI0IDkuODcyNzE5IDI2LjUxMDAyNSAxMS4xMjQ1NiAyOC40ODI2MTEgQyAxMi4zNzY0MDEgMzAuNDU1MTk3IDE0LjEzNTQxOSAzMi4wNTU3NzkgMTYuMjE3MDU5IDMzLjExNjQyOCBDIDE4LjI5ODY5OSAzNC4xNzcwNzYgMjAuNjI3NTIyIDM0LjY1OTM1MiAyMi45NTkxOTEgMzQuNTEyNjU2IEMgMjUuMjkwODYgMzQuMzY1OTYgMjcuNTQwODc0IDMzLjU5NTYwNyAyOS40NzMxNjUgMzIuMjgyNDI0IEMgMzEuNDA1NDU2IDMwLjk2OTI0IDMyLjk0OTk5NyAyOS4xNjA4MTUgMzMuOTQ0NzM2IDI3LjA0Njg4NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMy45NDQ3MzYgMjcuMDQ2ODg2IEMgMzQuODgwMzM3IDI1LjA1ODYzMiAzNS4yOTg2MzEgMjIuODY1ODU5IDM1LjE2MDY1NiAyMC42NzI4MDkgQyAzNS4wMjI2ODEgMTguNDc5NzU5IDM0LjMzMjg1OCAxNi4zNTY3MDMgMzMuMTU1NDQgMTQuNTAxMzg5IEMgMzEuOTc4MDIxIDEyLjY0NjA3NSAzMC4zNTA3MzUgMTEuMTE3OTUxIDI4LjQyNTE1MSAxMC4wNTkzNTIgQyAyNi40OTk1NjcgOS4wMDA3NTQgMjQuMzM3Mzg2IDguNDQ1NiAyMi4xNCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy45NDQ3MzYgMjcuMDQ2ODg2IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl82NmVjZjc5OWM2YzM0Zjk0YTIyNDkwMDUyOTQxYjk0Zi5zZXRJY29uKGRpdl9pY29uXzVjNGZjN2E5NWQyMjRkMmZhYjAwZDAyMmQ2NjY2M2IyKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyNTdlODFiYzZmYjQzZmE5YzFlZGIxZDU5YjRiNWJhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRjNmExYjFjZDMwMDQyMzZhNmRmNWQ3NGExOTI1NWNjID0gJChgPGRpdiBpZD0iaHRtbF80YzZhMWIxY2QzMDA0MjM2YTZkZjVkNzRhMTkyNTVjYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2Zpbm4xMzE4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkZpbm5pc2g8L2E+PGJyPmNvbnNvbmFudHM6IDE3PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyNTdlODFiYzZmYjQzZmE5YzFlZGIxZDU5YjRiNWJhLnNldENvbnRlbnQoaHRtbF80YzZhMWIxY2QzMDA0MjM2YTZkZjVkNzRhMTkyNTVjYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzY2ZWNmNzk5YzZjMzRmOTRhMjI0OTAwNTI5NDFiOTRmLmJpbmRQb3B1cChwb3B1cF9iMjU3ZTgxYmM2ZmI0M2ZhOWMxZWRiMWQ1OWI0YjViYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyXzdiZGI0M2M5NzAxYTQ1ODVhZDQxNmRiMWZkMDA5YjczID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWNvbjogbmV3IEwuSWNvbi5EZWZhdWx0KCksCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2JmN2NiYjU5ZDhiYzRlYmI4OTdlMWQ1NDFhYzBjN2RlKTsKICAgICAgICAKICAgIAoKICAgICAgICAgICAgICAgIHZhciBkaXZfaWNvbl8yZmE4ZDhmOGYyOGM0NmVhYWNiZDBlNGU1MGFiYTA0NSA9IEwuZGl2SWNvbih7CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgaWNvbkFuY2hvcjogWzI4LjI5NjAwMDAwMDAwMDAwMywyOC4yOTYwMDAwMDAwMDAwMDNdLAogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2VtcHR5JywKICAgICAgICAgICAgICAgICAgICBodG1sOiBgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PCEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tPjxzdmcgaGVpZ2h0PSI0My4ycHQiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzLjIgNDMuMiIgd2lkdGg9IjQzLjJwdCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+IDxkZWZzPiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4qe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30gIDwvc3R5bGU+IDwvZGVmcz4gPGcgaWQ9ImZpZ3VyZV8xIj4gIDxnIGlkPSJwYXRjaF8xIj4gICA8cGF0aCBkPSJNIDAgNDMuMiBMIDQzLjIgNDMuMiBMIDQzLjIgMCBMIDAgMCB6IiBzdHlsZT0iZmlsbDpub25lO29wYWNpdHk6MDsiLz4gIDwvZz4gIDxnIGlkPSJheGVzXzEiPiAgIDxnIGlkPSJwYXRjaF8yIj4gICAgPHBhdGggZD0iTSAyMi4xNCA4LjQ0NTYgQyAyMC4wMjc5NTQgOC40NDU2IDE3Ljk0NzE1OSA4Ljk1ODQ3IDE2LjA3NzAzNSA5LjkzOTk4NyBDIDE0LjIwNjkxMiAxMC45MjE1MDMgMTIuNjAyODAyIDEyLjM0MjYyMSAxMS40MDMwMjMgMTQuMDgwOCBDIDEwLjIwMzI0NCAxNS44MTg5OCA5LjQ0MzMwMiAxNy44MjI3ODQgOS4xODg3MjMgMTkuOTE5NDMxIEMgOC45MzQxNDQgMjIuMDE2MDc4IDkuMTkyNDYzIDI0LjE0MzUyMSA5Ljk0MTQwNCAyNi4xMTgzMTggQyAxMC42OTAzNDYgMjguMDkzMTE1IDExLjkwNzc0OCAyOS44NTY4MjYgMTMuNDg4NjM3IDMxLjI1NzM3MSBDIDE1LjA2OTUyNyAzMi42NTc5MTcgMTYuOTY3MTIgMzMuNjUzODUgMTkuMDE3NzkzIDM0LjE1OTI5NiBDIDIxLjA2ODQ2NyAzNC42NjQ3NDEgMjMuMjExNTM2IDM0LjY2NDc0MSAyNS4yNjIyMDkgMzQuMTU5Mjk1IEMgMjcuMzEyODgzIDMzLjY1Mzg0OSAyOS4yMTA0NzYgMzIuNjU3OTE1IDMwLjc5MTM2NSAzMS4yNTczNjkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzAuNzkxMzY1IDMxLjI1NzM2OSBDIDMyLjc3Mjc4NSAyOS41MDE5ODQgMzQuMTczNzkyIDI3LjE4NDQzNSAzNC44MDcyOTYgMjQuNjE0MjA2IEMgMzUuNDQwOCAyMi4wNDM5NzcgMzUuMjc3Mjg4IDE5LjM0MDgwOSAzNC4zMzg1OTUgMTYuODY1NjgxIEMgMzMuMzk5OTAyIDE0LjM5MDU1MyAzMS43Mjk3NiAxMi4yNTg3NzQgMjkuNTUxMTk4IDEwLjc1NTAyMiBDIDI3LjM3MjYzNiA5LjI1MTI3IDI0Ljc4NzE0NyA4LjQ0NTYgMjIuMTM5OTk4IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMwLjc5MTM2NSAzMS4yNTczNjkgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyXzdiZGI0M2M5NzAxYTQ1ODVhZDQxNmRiMWZkMDA5YjczLnNldEljb24oZGl2X2ljb25fMmZhOGQ4ZjhmMjhjNDZlYWFjYmQwZTRlNTBhYmEwNDUpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTg3YmZhZDBmOGZjNGFhMjgxNGMwZTlkOTNkZmU4YzcgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMTI3ZjA1NTc2ZWNhNDU1ZTkyOGU4YzYzNmI2MjA2NjYgPSAkKGA8ZGl2IGlkPSJodG1sXzEyN2YwNTU3NmVjYTQ1NWU5MjhlOGM2MzZiNjIwNjY2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvaGF3YTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SGF3YWlpYW48L2E+PGJyPmNvbnNvbmFudHM6IDg8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTg3YmZhZDBmOGZjNGFhMjgxNGMwZTlkOTNkZmU4Yzcuc2V0Q29udGVudChodG1sXzEyN2YwNTU3NmVjYTQ1NWU5MjhlOGM2MzZiNjIwNjY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfN2JkYjQzYzk3MDFhNDU4NWFkNDE2ZGIxZmQwMDliNzMuYmluZFBvcHVwKHBvcHVwXzU4N2JmYWQwZjhmYzRhYTI4MTRjMGU5ZDkzZGZlOGM3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZGU2NDc4ZTMxMTlhNDI5NDhjNzFhMzgwOTFmMzM3MmQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2U1OWFkN2RjMWNkMTQ4YTNiYWVmN2Y2ZmY1Y2M4NjJiID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDE5LjkwNzkxNiA4LjQ0NTYgMTcuNzEyNzM2IDkuMDE4NDI0IDE1Ljc2NTI1MiAxMC4xMDkwNjggQyAxMy44MTc3NjggMTEuMTk5NzExIDEyLjE4MjM3NiAxMi43NzIxMSAxMS4wMTYxMTYgMTQuNjc1Mjc0IEMgOS44NDk4NTUgMTYuNTc4NDM5IDkuMTkxMjkgMTguNzQ5NDM3IDkuMTAzNjU4IDIwLjk3OTggQyA5LjAxNjAyNyAyMy4yMTAxNjMgOS41MDIyMjcgMjUuNDI2MTM5IDEwLjUxNTU3MiAyNy40MTQ5NDEgQyAxMS41Mjg5MTcgMjkuNDAzNzQyIDEzLjAzNTg5OCAzMS4wOTk2MDUgMTQuODkxODA3IDMyLjMzOTY4NCBDIDE2Ljc0NzcxNyAzMy41Nzk3NjQgMTguODkxMTg3IDM0LjMyMzA1NSAyMS4xMTYzOSAzNC40OTgxODIgQyAyMy4zNDE1OTMgMzQuNjczMzEgMjUuNTc0OTQ5IDM0LjI3NDQ4MyAyNy42MDIwMDEgMzMuMzQgQyAyOS42MjkwNTMgMzIuNDA1NTE2IDMxLjM4Mjc3MiAzMC45NjYyNzcgMzIuNjk0NzU4IDI5LjE2MDQ4MyBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMi42OTQ3NTggMjkuMTYwNDgzIEMgMzQuMTA4ODcgMjcuMjE0MTI2IDM0Ljk1NzQyMyAyNC45MTQwMjQgMzUuMTQ2MTgyIDIyLjUxNTYxMSBDIDM1LjMzNDk0MiAyMC4xMTcxOTggMzQuODU2NjUyIDE3LjcxMjY3IDMzLjc2NDQyOSAxNS41NjkwNiBDIDMyLjY3MjIwNSAxMy40MjU0NSAzMS4wMDgwMzQgMTEuNjI1MTU5IDI4Ljk1NjcyNyAxMC4zNjgxMTcgQyAyNi45MDU0MjEgOS4xMTEwNzQgMjQuNTQ1ODMyIDguNDQ1NiAyMi4xNDAwMDIgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzIuNjk0NzU4IDI5LjE2MDQ4MyB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfZGU2NDc4ZTMxMTlhNDI5NDhjNzFhMzgwOTFmMzM3MmQuc2V0SWNvbihkaXZfaWNvbl9lNTlhZDdkYzFjZDE0OGEzYmFlZjdmNmZmNWNjODYyYik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzQyMzNjMmZhOGE0ZThiOTAzN2FiZGYyNGE1OWVjNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MGQ4OGE3OGY4NDE0YzA4YmY4OTFmNjIyODI4MWE2MiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjBkODhhNzhmODQxNGMwOGJmODkxZjYyMjgyODFhNjIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9odW5nMTI3NCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5IdW5nYXJpYW48L2E+PGJyPmNvbnNvbmFudHM6IDI2PGJyPnZvd2VsczogMTQ8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xYzQyMzNjMmZhOGE0ZThiOTAzN2FiZGYyNGE1OWVjNC5zZXRDb250ZW50KGh0bWxfNjBkODhhNzhmODQxNGMwOGJmODkxZjYyMjgyODFhNjIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9kZTY0NzhlMzExOWE0Mjk0OGM3MWEzODA5MWYzMzcyZC5iaW5kUG9wdXAocG9wdXBfMWM0MjMzYzJmYThhNGU4YjkwMzdhYmRmMjRhNTllYzQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lM2VhOTQ5M2YwMTc0ZmFhOGRjM2MwNDhjNDA2MzAyNCA9IEwubWFya2VyKAogICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fMDkxZWZhN2RmMDA2NDhhZmI3MjE0OTkwZWU3ZmIyNTggPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMjAuNzMwNTQ0IDguNDQ1NiAxOS4zMzAzNTcgOC42NzQwMDQgMTcuOTkzOTY2IDkuMTIxOTE3IEMgMTYuNjU3NTc1IDkuNTY5ODMgMTUuNDAyNTU4IDEwLjIzMTM2MSAxNC4yNzc3ODcgMTEuMDgwNzQ4IEMgMTMuMTUzMDE3IDExLjkzMDEzNSAxMi4xNzMyODggMTIuOTU2MjA3IDExLjM3Njc1MyAxNC4xMTkwMDQgQyAxMC41ODAyMTggMTUuMjgxODAyIDkuOTc3MzU0IDE2LjU2NjAzMiA5LjU5MTYzOCAxNy45MjE2ODMgQyA5LjIwNTkyMiAxOS4yNzczMzQgOS4wNDI0MjcgMjAuNjg2NTc2IDkuMTA3NTIxIDIyLjA5NDUyOCBDIDkuMTcyNjE0IDIzLjUwMjQ4IDkuNDY1NDQgMjQuODkwNjI1IDkuOTc0NTk0IDI2LjIwNDkwNCBDIDEwLjQ4Mzc0OSAyNy41MTkxODIgMTEuMjAyNTM1IDI4Ljc0MjMwOSAxMi4xMDI5NjIgMjkuODI2NjUxIEMgMTMuMDAzMzg4IDMwLjkxMDk5NCAxNC4wNzM2MTIgMzEuODQyMjkgMTUuMjcxOTU2IDMyLjU4NDI3MyBDIDE2LjQ3MDI5OSAzMy4zMjYyNTYgMTcuNzgxMDAyIDMzLjg2OTE2NyAxOS4xNTMwMiAzNC4xOTE4NjIgQyAyMC41MjUwMzggMzQuNTE0NTU4IDIxLjk0MDMyNyAzNC42MTI3OTUgMjMuMzQzNzcgMzQuNDgyNzQ2IEMgMjQuNzQ3MjE0IDM0LjM1MjY5OCAyNi4xMjAzNTQgMzMuOTk2MDc1IDI3LjQwOTcxNiAzMy40MjY3NjYgQyAyOC42OTkwNzcgMzIuODU3NDU4IDI5Ljg4NzcwMyAzMi4wODI5NSAzMC45MjkzMDMgMzEuMTMzNDA2IEMgMzEuOTcwOTA0IDMwLjE4Mzg2MSAzMi44NTE3OCAyOS4wNzE3NjggMzMuNTM3NjI3IDI3Ljg0MDQzNiBDIDM0LjIyMzQ3NSAyNi42MDkxMDQgMzQuNzA1Mjc0IDI1LjI3NDcyNiAzNC45NjQyNiAyMy44ODkyNjkgQyAzNS4yMjMyNDcgMjIuNTAzODEyIDM1LjI1NjAxNiAyMS4wODU0OTYgMzUuMDYxMjkxIDE5LjY4OTU1NiBDIDM0Ljg2NjU2NSAxOC4yOTM2MTYgMzQuNDQ2OTA3IDE2LjkzODQxMiAzMy44MTg2NTggMTUuNjc2NzE4IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMzLjgxODY1OCAxNS42NzY3MTggQyAzMi43MzcxNjMgMTMuNTA0Nzg0IDMxLjA3MDkyNSAxMS42NzcwMDggMjkuMDA4MDQ0IDEwLjM5OTcyNyBDIDI2Ljk0NTE2MiA5LjEyMjQ0NSAyNC41NjYyOTggOC40NDU2IDIyLjEzOTk5OSA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy44MTg2NTggMTUuNjc2NzE4IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9lM2VhOTQ5M2YwMTc0ZmFhOGRjM2MwNDhjNDA2MzAyNC5zZXRJY29uKGRpdl9pY29uXzA5MWVmYTdkZjAwNjQ4YWZiNzIxNDk5MGVlN2ZiMjU4KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5OTQyMjk1OGIxZjQwZjBhZTM5Mzk1Y2Y3YTYzYWU5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1NjA4MWQ0NzczYTRjYWY5Y2FjMTRiNDNhOWQ0ZmMwID0gJChgPGRpdiBpZD0iaHRtbF8zNTYwODFkNDc3M2E0Y2FmOWNhYzE0YjQzYTlkNGZjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlb3JnaWFuPC9hPjxicj5jb25zb25hbnRzOiAyODxicj52b3dlbHM6IDY8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hOTk0MjI5NThiMWY0MGYwYWUzOTM5NWNmN2E2M2FlOS5zZXRDb250ZW50KGh0bWxfMzU2MDgxZDQ3NzNhNGNhZjljYWMxNGI0M2E5ZDRmYzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9lM2VhOTQ5M2YwMTc0ZmFhOGRjM2MwNDhjNDA2MzAyNC5iaW5kUG9wdXAocG9wdXBfYTk5NDIyOTU4YjFmNDBmMGFlMzkzOTVjZjdhNjNhZTkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9jMzY3NmUyNzkwNTY0MzBlOWFkYzM3MjE4MjBmMDI1ZSA9IEwubWFya2VyKAogICAgICAgICAgICBbMTEuNzA4MTgyLCAzOS41NDM0NTZdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzFmZTFiYTYxY2M1MDQ1MTFiOGNhOTVhZDNjZWU2MTRkID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjc1MjQwNCA4LjQ0NTYgMTkuMzczNjUxIDguNjY2OTc0IDE4LjA1NTgwMSA5LjEwMTM2NCBDIDE2LjczNzk1MSA5LjUzNTc1MyAxNS40OTc4MDEgMTAuMTc3NjIxIDE0LjM4MjE3OCAxMS4wMDI3MzIgQyAxMy4yNjY1NTQgMTEuODI3ODQzIDEyLjI4OTY3OCAxMi44MjU2NzkgMTEuNDg4NDMyIDEzLjk1ODU2NCBDIDEwLjY4NzE4NyAxNS4wOTE0NDkgMTAuMDcxNzg2IDE2LjM0NDk0NCA5LjY2NTQ2NiAxNy42NzE3MTcgQyA5LjI1OTE0NyAxOC45OTg0OSA5LjA2NzA4NyAyMC4zODE2MzEgOS4wOTY1MzkgMjEuNzY4OTE1IEMgOS4xMjU5OTEgMjMuMTU2MTk4IDkuMzc2NTggMjQuNTI5OTQyIDkuODM4ODQ0IDI1LjgzODI3NSBDIDEwLjMwMTEwNyAyNy4xNDY2MDggMTAuOTY5MTUzIDI4LjM3Mjg1NCAxMS44MTc3NTggMjkuNDcwNzEzIEMgMTIuNjY2MzYyIDMwLjU2ODU3MiAxMy42ODQ3MDggMzEuNTI0MDQ5IDE0LjgzNDM0NSAzMi4zMDEwNjggQyAxNS45ODM5ODIgMzMuMDc4MDg3IDE3LjI1MDI1NSAzMy42NjY3NDMgMTguNTg1MzU0IDM0LjA0NDgxIEMgMTkuOTIwNDUzIDM0LjQyMjg3NyAyMS4zMDczNTkgMzQuNTg1NTM2IDIyLjY5MzcwNSAzNC41MjY2NDUgQyAyNC4wODAwNTEgMzQuNDY3NzU0IDI1LjQ0ODE2NiAzNC4xODgwNjMgMjYuNzQ2MzkyIDMzLjY5ODEzNCBDIDI4LjA0NDYxOSAzMy4yMDgyMDUgMjkuMjU2NDEgMzIuNTE0MjgyIDMwLjMzNjAwOSAzMS42NDI1NjYgQyAzMS40MTU2MDkgMzAuNzcwODUgMzIuMzQ5MjU2IDI5LjczMjQ1MyAzMy4xMDE2OTggMjguNTY2NTgzIEMgMzMuODU0MTQxIDI3LjQwMDcxMyAzNC40MTU3ODcgMjYuMTIyMjMgMzQuNzY1NDMxIDI0Ljc3OTQwNyBDIDM1LjExNTA3NSAyMy40MzY1ODQgMzUuMjQ4MjU5IDIyLjA0NjUzOSAzNS4xNTk5NTYgMjAuNjYxNzU1IEMgMzUuMDcxNjUyIDE5LjI3Njk3MSAzNC43NjI5ODYgMTcuOTE1MTAxIDM0LjI0NTYxMiAxNi42Mjc1NjYgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzQuMjQ1NjEyIDE2LjYyNzU2NiBDIDMzLjI3NDg0MiAxNC4yMTE3MTIgMzEuNjAyNzY0IDEyLjE0MDg4MyAyOS40NDU2NTUgMTAuNjgyOTMyIEMgMjcuMjg4NTQ2IDkuMjI0OTgxIDI0Ljc0MzYwMiA4LjQ0NTYgMjIuMTQgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzQuMjQ1NjEyIDE2LjYyNzU2NiB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfYzM2NzZlMjc5MDU2NDMwZTlhZGMzNzIxODIwZjAyNWUuc2V0SWNvbihkaXZfaWNvbl8xZmUxYmE2MWNjNTA0NTExYjhjYTk1YWQzY2VlNjE0ZCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMjVlYmEwYTlkOGY0ODViYWU5ZTQ2MWRjNDU5OTM3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NzdlZTA1YjAzNTc0MTRjODczM2IwZTUwZTMzMGI3OSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDc3ZWUwNWIwMzU3NDE0Yzg3MzNiMGU1MGUzMzBiNzkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hbWhhMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BbWhhcmljPC9hPjxicj5jb25zb25hbnRzOiAzMDxicj52b3dlbHM6IDc8YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMjVlYmEwYTlkOGY0ODViYWU5ZTQ2MWRjNDU5OTM3ZC5zZXRDb250ZW50KGh0bWxfNDc3ZWUwNWIwMzU3NDE0Yzg3MzNiMGU1MGUzMzBiNzkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIG1hcmtlcl9jMzY3NmUyNzkwNTY0MzBlOWFkYzM3MjE4MjBmMDI1ZS5iaW5kUG9wdXAocG9wdXBfMjI1ZWJhMGE5ZDhmNDg1YmFlOWU0NjFkYzQ1OTkzN2QpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgdmFyIG1hcmtlcl9lNjcxY2E2MjVkMmM0MGYyOWI1MGYyMmM5MjgzYTE2YiA9IEwubWFya2VyKAogICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uX2RjNWU2OGQzNWNjZDQzYjM5OGQzMjY1N2I2YTFiZWE2ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjY1IDguNDQ1NiAxOS4xNzA5NTEgOC43MDA4NTQgMTcuNzY3MTQgOS4yMDAyNjkgQyAxNi4zNjMzMjkgOS42OTk2ODQgMTUuMDU1MzkxIDEwLjQzNTkxNyAxMy45MDAxNzYgMTEuMzc2OTY5IEMgMTIuNzQ0OTYxIDEyLjMxODAyMSAxMS43NTk0NSAxMy40NTAwNTggMTAuOTg2NDc4IDE0LjcyMzg3NyBDIDEwLjIxMzUwNSAxNS45OTc2OTYgOS42NjQ0MzUgMTcuMzk0NTcxIDkuMzYzMTMgMTguODUzNzg5IEMgOS4wNjE4MjYgMjAuMzEzMDA3IDkuMDEyNzE4IDIxLjgxMzExNiA5LjIxNzk0IDIzLjI4ODkxNiBDIDkuNDIzMTYxIDI0Ljc2NDcxNiA5Ljg3OTY5NiAyNi4xOTQ1MTEgMTAuNTY3NzAyIDI3LjUxNjE1OCBDIDExLjI1NTcwOCAyOC44Mzc4MDQgMTIuMTY1MDcgMzAuMDMxODczIDEzLjI1NjI2NCAzMS4wNDY0NjQgQyAxNC4zNDc0NTggMzIuMDYxMDU2IDE1LjYwNDQ0MyAzMi44ODEyNTYgMTYuOTcyNTg2IDMzLjQ3MTQxNSBDIDE4LjM0MDcyOCAzNC4wNjE1NzQgMTkuNzk5OTE1IDM0LjQxMzAxNiAyMS4yODY3MjUgMzQuNTEwNDY3IEMgMjIuNzczNTM2IDM0LjYwNzkxNyAyNC4yNjYxMTIgMzQuNDQ5OTQ0IDI1LjY5OTU4MSAzNC4wNDM0MTIgQyAyNy4xMzMwNSAzMy42MzY4OCAyOC40ODYzMzggMzIuOTg3NzY2IDI5LjcwMDYyOCAzMi4xMjQyODQgQyAzMC45MTQ5MTcgMzEuMjYwODAxIDMxLjk3MjM1NyAzMC4xOTU2NDQgMzIuODI2OTg2IDI4Ljk3NTEwNyBDIDMzLjY4MTYxNSAyNy43NTQ1NyAzNC4zMjA4NyAyNi4zOTY1OTYgMzQuNzE2OTY2IDI0Ljk2MDIwOSBDIDM1LjExMzA2MyAyMy41MjM4MjEgMzUuMjYwMTc4IDIyLjAzMDEzNiAzNS4xNTE5MTcgMjAuNTQ0MDc0IEMgMzUuMDQzNjU3IDE5LjA1ODAxMiAzNC42ODE2MTIgMTcuNjAxNDE5IDM0LjA4MTUxOSAxNi4yMzc2MDQgQyAzMy40ODE0MjYgMTQuODczNzkgMzIuNjUyMTA3IDEzLjYyMjgwMyAzMS42Mjk2MDYgMTIuNTM5MDE2IEwgMjIuMTQgMjEuNDkyIEwgMjIuMTQgOC40NDU2IHoiLz4gICA8L2c+ICAgPGcgaWQ9InBhdGNoXzMiPiAgICA8cGF0aCBkPSJNIDMxLjYyOTYwNiAxMi41MzkwMTYgQyAzMC40MTAwNzUgMTEuMjQ2Mzg4IDI4LjkzOTE5MSAxMC4yMTY0NjUgMjcuMzA3NDE0IDkuNTEyNTg1IEMgMjUuNjc1NjM2IDguODA4NzA1IDIzLjkxNzExNiA4LjQ0NTYgMjIuMTM5OTk5IDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMxLjYyOTYwNiAxMi41MzkwMTYgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2U2NzFjYTYyNWQyYzQwZjI5YjUwZjIyYzkyODNhMTZiLnNldEljb24oZGl2X2ljb25fZGM1ZTY4ZDM1Y2NkNDNiMzk4ZDMyNjU3YjZhMWJlYTYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjMxMGJkOTA3M2ZjNGVhZWI4NWZmYTZhNDNkN2M4N2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGM5Y2U5ODQ0MGM5NDQyZmFjYjJkYzc3ZTY3YzM2MzMgPSAkKGA8ZGl2IGlkPSJodG1sXzRjOWNlOTg0NDBjOTQ0MmZhY2IyZGM3N2U2N2MzNjMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvc2FuZDEyNzMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+U2FuZGF3ZTwvYT48YnI+Y29uc29uYW50czogNDc8YnI+dm93ZWxzOiA3PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjMxMGJkOTA3M2ZjNGVhZWI4NWZmYTZhNDNkN2M4N2Euc2V0Q29udGVudChodG1sXzRjOWNlOTg0NDBjOTQ0MmZhY2IyZGM3N2U2N2MzNjMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZTY3MWNhNjI1ZDJjNDBmMjliNTBmMjJjOTI4M2ExNmIuYmluZFBvcHVwKHBvcHVwXzIzMTBiZDkwNzNmYzRlYWViODVmZmE2YTQzZDdjODdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfZjM1NGE3N2VlMjZiNDYyY2IxMTgxZjE2OTUzMmE3MGMgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzE4ZWFhNTMyMjA2MzQ3NjI5MTg5Nzg0ZGU5ZmVlNjljID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjYwNjE4OSA4LjQ0NTYgMTkuMDg0MzI3IDguNzE2MDg2IDE3LjY0NDQ1MiA5LjI0NDYwOCBDIDE2LjIwNDU3OCA5Ljc3MzEzMSAxNC44NjkxMjQgMTAuNTUxNDU3IDEzLjY5OTU1MSAxMS41NDM3NjUgQyAxMi41Mjk5NzkgMTIuNTM2MDczIDExLjU0NDUxIDEzLjcyNjkwNCAxMC43ODg0OTcgMTUuMDYxNDUzIEMgMTAuMDMyNDg1IDE2LjM5NjAwMSA5LjUxNzcwNyAxNy44NTM0NzYgOS4yNjc4NTYgMTkuMzY2OCBDIDkuMDE4MDA2IDIwLjg4MDEyNCA5LjAzNjk3NCAyMi40MjU3MiA5LjMyMzg4OCAyMy45MzI0NTcgQyA5LjYxMDgwMyAyNS40MzkxOTQgMTAuMTYxMTkzIDI2Ljg4MzU5NiAxMC45NDk3MjkgMjguMTk5MTkgQyAxMS43MzgyNjUgMjkuNTE0NzgzIDEyLjc1MjY2MiAzMC42ODEwNzEgMTMuOTQ2MjM1IDMxLjY0NDM3NyBDIDE1LjEzOTgwNyAzMi42MDc2ODQgMTYuNDkzOTYgMzMuMzUzMDAyIDE3Ljk0NjM3MSAzMy44NDYwMjkgQyAxOS4zOTg3ODMgMzQuMzM5MDU2IDIwLjkyNjgyNSAzNC41NzIxMTIgMjIuNDYwMTc0IDM0LjUzNDQ3MSBDIDIzLjk5MzUyMiAzNC40OTY4MjkgMjUuNTA4Mjg5IDM0LjE4OTA3NyAyNi45MzQ3NTkgMzMuNjI1Mzc3IEMgMjguMzYxMjI5IDMzLjA2MTY3NyAyOS42NzcxOCAzMi4yNTA4MTIgMzAuODIyMDQ4IDMxLjIzMDEgQyAzMS45NjY5MTUgMzAuMjA5Mzg4IDMyLjkyMjg2NCAyOC45OTQ3MzIgMzMuNjQ1ODk3IDI3LjY0MjAzMSBDIDM0LjM2ODkzIDI2LjI4OTMzMSAzNC44NDc3ODUgMjQuODE5NjYyIDM1LjA2MDQyMiAyMy4zMDA2NjMgQyAzNS4yNzMwNTggMjEuNzgxNjYzIDM1LjIxNjE2NSAyMC4yMzY5OTcgMzQuODkyMzYgMTguNzM3NzU2IEMgMzQuNTY4NTU1IDE3LjIzODUxNCAzMy45ODI4ODMgMTUuODA4MDU0IDMzLjE2MjI5OCAxNC41MTIyMDggQyAzMi4zNDE3MTMgMTMuMjE2MzYzIDMxLjI5OSAxMi4wNzUzMjEgMzAuMDgyMTQ2IDExLjE0MTU5NiBMIDIyLjE0IDIxLjQ5MiBMIDIyLjE0IDguNDQ1NiB6Ii8+ICAgPC9nPiAgIDxnIGlkPSJwYXRjaF8zIj4gICAgPHBhdGggZD0iTSAzMC4wODIxNDYgMTEuMTQxNTk2IEMgMjguOTUwNTc5IDEwLjI3MzMxNCAyNy42ODQyNDQgOS41OTY0NDQgMjYuMzMzNjI5IDkuMTM3OTcxIEMgMjQuOTgzMDE1IDguNjc5NDk5IDIzLjU2NjMxMSA4LjQ0NTYgMjIuMTQwMDAyIDguNDQ1NiBMIDIyLjE0IDIxLjQ5MiBMIDMwLjA4MjE0NiAxMS4xNDE1OTYgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjsiLz4gICA8L2c+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18xIi8+ICAgPGcgaWQ9Im1hdHBsb3RsaWIuYXhpc18yIi8+ICA8L2c+IDwvZz48L3N2Zz5gLAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgbWFya2VyX2YzNTRhNzdlZTI2YjQ2MmNiMTE4MWYxNjk1MzJhNzBjLnNldEljb24oZGl2X2ljb25fMThlYWE1MzIyMDYzNDc2MjkxODk3ODRkZTlmZWU2OWMpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTM2OTQ2YzFhOTM3NDgwZjhhNTdlMWM0NTc5MjcxOTUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmExYmIyZTcyZWFhNGFhYzgxMzQzOGFlMjdmNGE4MjQgPSAkKGA8ZGl2IGlkPSJodG1sX2ZhMWJiMmU3MmVhYTRhYWM4MTM0MzhhZTI3ZjRhODI0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGxpbjEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGxpbmdpdDwvYT48YnI+Y29uc29uYW50czogNDM8YnI+dm93ZWxzOiA1PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTM2OTQ2YzFhOTM3NDgwZjhhNTdlMWM0NTc5MjcxOTUuc2V0Q29udGVudChodG1sX2ZhMWJiMmU3MmVhYTRhYWM4MTM0MzhhZTI3ZjRhODI0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBtYXJrZXJfZjM1NGE3N2VlMjZiNDYyY2IxMTgxZjE2OTUzMmE3MGMuYmluZFBvcHVwKHBvcHVwXzEzNjk0NmMxYTkzNzQ4MGY4YTU3ZTFjNDU3OTI3MTk1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIHZhciBtYXJrZXJfOThkNzE3NWUwMGY1NGI4MDk3NDMwYzYyYjE0NDUxYzQgPSBMLm1hcmtlcigKICAgICAgICAgICAgWzQ2LjM2OTksIC0xMDMuOTVdLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpY29uOiBuZXcgTC5JY29uLkRlZmF1bHQoKSwKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKS5hZGRUbyhtYXBfYmY3Y2JiNTlkOGJjNGViYjg5N2UxZDU0MWFjMGM3ZGUpOwogICAgICAgIAogICAgCgogICAgICAgICAgICAgICAgdmFyIGRpdl9pY29uXzJhMjM3OTQ2OWQ2NzQwNDI4OTQ2ZjNmNWYxYzI3MmY3ID0gTC5kaXZJY29uKHsKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpY29uQW5jaG9yOiBbMjguMjk2MDAwMDAwMDAwMDAzLDI4LjI5NjAwMDAwMDAwMDAwM10sCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnZW1wdHknLAogICAgICAgICAgICAgICAgICAgIGh0bWw6IGA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCIgc3RhbmRhbG9uZT0ibm8iPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48IS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS0+PHN2ZyBoZWlnaHQ9IjQzLjJwdCIgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgNDMuMiA0My4yIiB3aWR0aD0iNDMuMnB0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4gPGRlZnM+ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPip7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fSAgPC9zdHlsZT4gPC9kZWZzPiA8ZyBpZD0iZmlndXJlXzEiPiAgPGcgaWQ9InBhdGNoXzEiPiAgIDxwYXRoIGQ9Ik0gMCA0My4yIEwgNDMuMiA0My4yIEwgNDMuMiAwIEwgMCAwIHoiIHN0eWxlPSJmaWxsOm5vbmU7b3BhY2l0eTowOyIvPiAgPC9nPiAgPGcgaWQ9ImF4ZXNfMSI+ICAgPGcgaWQ9InBhdGNoXzIiPiAgICA8cGF0aCBkPSJNIDIyLjE0IDguNDQ1NiBDIDIwLjgwOTE1OCA4LjQ0NTYgMTkuNDg2MTE4IDguNjQ5MjM1IDE4LjIxNjg3MiA5LjA0OTQyNyBDIDE2Ljk0NzYyNiA5LjQ0OTYxOSAxNS43NDcwNTQgMTAuMDQxNjc1IDE0LjY1Njg5MiAxMC44MDUwMTUgQyAxMy41NjY3MzEgMTEuNTY4MzU0IDEyLjU5OTc2IDEyLjQ5NDAyNyAxMS43ODk1OTUgMTMuNTQ5ODU1IEMgMTAuOTc5NDMgMTQuNjA1NjgzIDEwLjMzNTU2OSAxNS43NzkyODcgOS44ODAzOTQgMTcuMDI5ODY5IEMgOS40MjUyMTkgMTguMjgwNDUxIDkuMTY0MDY4IDE5LjU5MzM0OSA5LjEwNjAxNyAyMC45MjI5MjQgQyA5LjA0Nzk2NyAyMi4yNTI0OTkgOS4xOTM2OTggMjMuNTgzMTYzIDkuNTM4MTQ1IDI0Ljg2ODY1NyBDIDkuODgyNTkzIDI2LjE1NDE1MSAxMC40MjE3MTcgMjcuMzc5NDA2IDExLjEzNjc3OCAyOC41MDE4MjYgQyAxMS44NTE4MzkgMjkuNjI0MjQ2IDEyLjczNDQ1MiAzMC42MzA2NzQgMTMuNzUzOTM2IDMxLjQ4NjEyMyBDIDE0Ljc3MzQyIDMyLjM0MTU3MSAxNS45MTc4MjIgMzMuMDM2MDExIDE3LjE0NzM1OSAzMy41NDUzMDIgQyAxOC4zNzY4OTcgMzQuMDU0NTkzIDE5LjY3NzE1NSAzNC4zNzI3NjQgMjEuMDAyOTMyIDM0LjQ4ODc1NSBDIDIyLjMyODcwOSAzNC42MDQ3NDUgMjMuNjY0NDYzIDM0LjUxNzE5NSAyNC45NjM3NTkgMzQuMjI5MTQ4IEMgMjYuMjYzMDU0IDMzLjk0MTEwMSAyNy41MTA2NTggMzMuNDU1OTM0IDI4LjY2MzIwMSAzMi43OTA1MTMgQyAyOS44MTU3NDMgMzIuMTI1MDkzIDMwLjg1OTcxMiAzMS4yODcyMTkgMzEuNzU4ODE2IDMwLjMwNjAxOSBDIDMyLjY1NzkxOSAyOS4zMjQ4MiAzMy40MDE2MTYgMjguMjExNzk4IDMzLjk2NDA1NCAyNy4wMDU2NDYgQyAzNC41MjY0OTIgMjUuNzk5NDk0IDM0LjkwMTA3NyAyNC41MTQzNTIgMzUuMDc0Nzg2IDIzLjE5NDg5NiBDIDM1LjI0ODQ5NiAyMS44NzU0NCAzNS4yMTkyOTQgMjAuNTM3MTM4IDM0Ljk4ODE5NiAxOS4yMjY1MTUgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzQuOTg4MTk2IDE5LjIyNjUxNSBDIDM0LjQ1NTcwMSAxNi4yMDY1ODkgMzIuODc1MTQ5IDEzLjQ2ODk5NCAzMC41MjYwNjMgMTEuNDk3ODc3IEMgMjguMTc2OTc4IDkuNTI2NzYgMjUuMjA2NTEyIDguNDQ1NiAyMi4xMzk5OTkgOC40NDU2IEwgMjIuMTQgMjEuNDkyIEwgMzQuOTg4MTk2IDE5LjIyNjUxNSB6IiBzdHlsZT0iZmlsbDojZmZmZmZmOyIvPiAgIDwvZz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzEiLz4gICA8ZyBpZD0ibWF0cGxvdGxpYi5heGlzXzIiLz4gIDwvZz4gPC9nPjwvc3ZnPmAsCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBtYXJrZXJfOThkNzE3NWUwMGY1NGI4MDk3NDMwYzYyYjE0NDUxYzQuc2V0SWNvbihkaXZfaWNvbl8yYTIzNzk0NjlkNjc0MDQyODk0NmYzZjVmMWMyNzJmNyk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYzRhNDAxNmYyZDU0YWQ4YWE5ZDgwNjRiNzY4MjQzOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81NDI0MDMzZjQ1OTU0YzgwYWNlYmY4YWFkOTdhMjIxZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNTQyNDAzM2Y0NTk1NGM4MGFjZWJmOGFhZDk3YTIyMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9sYWtvMTI0NyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5MYWtvdGE8L2E+PGJyPmNvbnNvbmFudHM6IDI4PGJyPnZvd2VsczogODxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzFjNGE0MDE2ZjJkNTRhZDhhYTlkODA2NGI3NjgyNDM4LnNldENvbnRlbnQoaHRtbF81NDI0MDMzZjQ1OTU0YzgwYWNlYmY4YWFkOTdhMjIxZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyXzk4ZDcxNzVlMDBmNTRiODA5NzQzMGM2MmIxNDQ1MWM0LmJpbmRQb3B1cChwb3B1cF8xYzRhNDAxNmYyZDU0YWQ4YWE5ZDgwNjRiNzY4MjQzOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICB2YXIgbWFya2VyX2Y0NjAwY2FiZmU3ZjQ4YmM4NDZmODgzOWE3MzUxN2NiID0gTC5tYXJrZXIoCiAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGljb246IG5ldyBMLkljb24uRGVmYXVsdCgpLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApLmFkZFRvKG1hcF9iZjdjYmI1OWQ4YmM0ZWJiODk3ZTFkNTQxYWMwYzdkZSk7CiAgICAgICAgCiAgICAKCiAgICAgICAgICAgICAgICB2YXIgZGl2X2ljb25fY2RmNzgxYzAwN2Q0NGJlY2JlZjEwMGM4MTdmNzVjNzMgPSBMLmRpdkljb24oewogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGljb25BbmNob3I6IFsyOC4yOTYwMDAwMDAwMDAwMDMsMjguMjk2MDAwMDAwMDAwMDAzXSwKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdlbXB0eScsCiAgICAgICAgICAgICAgICAgICAgaHRtbDogYDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04IiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjwhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLT48c3ZnIGhlaWdodD0iNDMuMnB0IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0My4yIDQzLjIiIHdpZHRoPSI0My4ycHQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPiA8ZGVmcz4gIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+KntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9ICA8L3N0eWxlPiA8L2RlZnM+IDxnIGlkPSJmaWd1cmVfMSI+ICA8ZyBpZD0icGF0Y2hfMSI+ICAgPHBhdGggZD0iTSAwIDQzLjIgTCA0My4yIDQzLjIgTCA0My4yIDAgTCAwIDAgeiIgc3R5bGU9ImZpbGw6bm9uZTtvcGFjaXR5OjA7Ii8+ICA8L2c+ICA8ZyBpZD0iYXhlc18xIj4gICA8ZyBpZD0icGF0Y2hfMiI+ICAgIDxwYXRoIGQ9Ik0gMjIuMTQgOC40NDU2IEMgMTkuODUwMDQ5IDguNDQ1NiAxNy41OTk5NTYgOS4wNDg1MTEgMTUuNjE2OCAxMC4xOTM0ODYgQyAxMy42MzM2NDQgMTEuMzM4NDYyIDExLjk4NjQ2MSAxMi45ODU2NDQgMTAuODQxNDg2IDE0Ljk2ODggQyA5LjY5NjUxIDE2Ljk1MTk1NiA5LjA5MzYgMTkuMjAyMDUgOS4wOTM2IDIxLjQ5MjAwMSBDIDkuMDkzNiAyMy43ODE5NTIgOS42OTY1MTEgMjYuMDMyMDQ1IDEwLjg0MTQ4NyAyOC4wMTUyMDEgQyAxMS45ODY0NjIgMjkuOTk4MzU2IDEzLjYzMzY0NSAzMS42NDU1MzkgMTUuNjE2ODAxIDMyLjc5MDUxNCBDIDE3LjU5OTk1NyAzMy45MzU0OSAxOS44NTAwNSAzNC41Mzg0IDIyLjE0MDAwMSAzNC41Mzg0IEMgMjQuNDI5OTUyIDM0LjUzODQgMjYuNjgwMDQ2IDMzLjkzNTQ4OSAyOC42NjMyMDEgMzIuNzkwNTEzIEMgMzAuNjQ2MzU3IDMxLjY0NTUzNyAzMi4yOTM1MzkgMjkuOTk4MzU1IDMzLjQzODUxNSAyOC4wMTUxOTkgTCAyMi4xNCAyMS40OTIgTCAyMi4xNCA4LjQ0NTYgeiIvPiAgIDwvZz4gICA8ZyBpZD0icGF0Y2hfMyI+ICAgIDxwYXRoIGQ9Ik0gMzMuNDM4NTE1IDI4LjAxNTE5OSBDIDM0LjU4MzQ5IDI2LjAzMjA0MyAzNS4xODY0IDIzLjc4MTk0OSAzNS4xODY0IDIxLjQ5MTk5OCBDIDM1LjE4NjQgMTkuMjAyMDQ3IDM0LjU4MzQ4OSAxNi45NTE5NTQgMzMuNDM4NTEzIDE0Ljk2ODc5OCBDIDMyLjI5MzUzNyAxMi45ODU2NDMgMzAuNjQ2MzU0IDExLjMzODQ2IDI4LjY2MzE5OCAxMC4xOTM0ODUgQyAyNi42ODAwNDIgOS4wNDg1MSAyNC40Mjk5NDkgOC40NDU2IDIyLjEzOTk5OCA4LjQ0NTYgTCAyMi4xNCAyMS40OTIgTCAzMy40Mzg1MTUgMjguMDE1MTk5IHoiIHN0eWxlPSJmaWxsOiNmZmZmZmY7Ii8+ICAgPC9nPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMSIvPiAgIDxnIGlkPSJtYXRwbG90bGliLmF4aXNfMiIvPiAgPC9nPiA8L2c+PC9zdmc+YCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIG1hcmtlcl9mNDYwMGNhYmZlN2Y0OGJjODQ2Zjg4MzlhNzM1MTdjYi5zZXRJY29uKGRpdl9pY29uX2NkZjc4MWMwMDdkNDRiZWNiZWYxMDBjODE3Zjc1YzczKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg1OTIyM2M2OGE0NTRkMDZiMWQ2NWI4Y2Q3OGMzN2Q1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwYzIxNGU2MzMxZjQyMTZhNzI1YWYwZTc1YjgyNTg3ID0gJChgPGRpdiBpZD0iaHRtbF81MGMyMTRlNjMzMWY0MjE2YTcyNWFmMGU3NWI4MjU4NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3l1Y2ExMjU0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPll1Y2F0ZWMgTWF5YTwvYT48YnI+Y29uc29uYW50czogMjA8YnI+dm93ZWxzOiAxMDxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg1OTIyM2M2OGE0NTRkMDZiMWQ2NWI4Y2Q3OGMzN2Q1LnNldENvbnRlbnQoaHRtbF81MGMyMTRlNjMzMWY0MjE2YTcyNWFmMGU3NWI4MjU4Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgbWFya2VyX2Y0NjAwY2FiZmU3ZjQ4YmM4NDZmODgzOWE3MzUxN2NiLmJpbmRQb3B1cChwb3B1cF84NTkyMjNjNjhhNDU0ZDA2YjFkNjViOGNkNzhjMzdkNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe750518470>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m2 = lingtypology.LingMap(data.language)\n",
    "m2.tiles = 'Stamen Terrain'\n",
    "m2.legend_title = 'Consonants/Vowels'\n",
    "m2.add_minicharts(data.consonants, data.vowels, colors=('black', 'white'))\n",
    "m2.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.20. Using Elevation Data <a name=\"elevation\"></a>\n",
    "`lingtypology` package contains data on elevation (raw data taken from [here](http://srtm.csi.cgiar.org/)) for each language from Glottolog.  \n",
    "You can get elevation for any language using `lingtypology.get_elevations` function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwX2RlMjQxNDk3ZTZjNTRiYTI5MWRlYzBlZThmNmM2NDFiIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF9kZTI0MTQ5N2U2YzU0YmEyOTFkZWMwZWU4ZjZjNjQxYiIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGVnZW5kPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjIwIj48bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIyMCIgeTI9IjAic3R5bGU9InN0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIiIHgyPSIyMCIgeTI9IjIic3R5bGU9InN0cm9rZTojZmVmZmZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMiIHgyPSIyMCIgeTI9IjMic3R5bGU9InN0cm9rZTojZmRmZWZkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQiIHgyPSIyMCIgeTI9IjQic3R5bGU9InN0cm9rZTojZmNmZWZjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUiIHgyPSIyMCIgeTI9IjUic3R5bGU9InN0cm9rZTojZmFmZGZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYiIHgyPSIyMCIgeTI9IjYic3R5bGU9InN0cm9rZTojZjlmY2Y5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjciIHgyPSIyMCIgeTI9Ijcic3R5bGU9InN0cm9rZTojZjhmY2Y4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgiIHgyPSIyMCIgeTI9Ijgic3R5bGU9InN0cm9rZTojZjdmYmY3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkiIHgyPSIyMCIgeTI9Ijkic3R5bGU9InN0cm9rZTojZjVmYWY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwIiB4Mj0iMjAiIHkyPSIxMCJzdHlsZT0ic3Ryb2tlOiNmNGZhZjQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEiIHgyPSIyMCIgeTI9IjExInN0eWxlPSJzdHJva2U6I2YzZjlmMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMiIgeDI9IjIwIiB5Mj0iMTIic3R5bGU9InN0cm9rZTojZjFmOGYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzIiB4Mj0iMjAiIHkyPSIxMyJzdHlsZT0ic3Ryb2tlOiNmMGY4ZjA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQiIHgyPSIyMCIgeTI9IjE0InN0eWxlPSJzdHJva2U6I2VmZjdlZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNSIgeDI9IjIwIiB5Mj0iMTUic3R5bGU9InN0cm9rZTojZWVmN2VlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2IiB4Mj0iMjAiIHkyPSIxNiJzdHlsZT0ic3Ryb2tlOiNlY2Y2ZWM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTciIHgyPSIyMCIgeTI9IjE3InN0eWxlPSJzdHJva2U6I2ViZjVlYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZWFmNWVhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE4IiB4Mj0iMjAiIHkyPSIxOCJzdHlsZT0ic3Ryb2tlOiNlNmYzZTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjAiIHgyPSIyMCIgeTI9IjIwInN0eWxlPSJzdHJva2U6I2U1ZjJlNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMSIgeDI9IjIwIiB5Mj0iMjEic3R5bGU9InN0cm9rZTojZTNmMWUzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIyIiB4Mj0iMjAiIHkyPSIyMiJzdHlsZT0ic3Ryb2tlOiNlMmYxZTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjMiIHgyPSIyMCIgeTI9IjIzInN0eWxlPSJzdHJva2U6I2UxZjBlMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNCIgeDI9IjIwIiB5Mj0iMjQic3R5bGU9InN0cm9rZTojZGZmMGRmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI1IiB4Mj0iMjAiIHkyPSIyNSJzdHlsZT0ic3Ryb2tlOiNkZWVmZGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjYiIHgyPSIyMCIgeTI9IjI2InN0eWxlPSJzdHJva2U6I2RkZWVkZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNyIgeDI9IjIwIiB5Mj0iMjcic3R5bGU9InN0cm9rZTojZGNlZWRjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI4IiB4Mj0iMjAiIHkyPSIyOCJzdHlsZT0ic3Ryb2tlOiNkYWVkZGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjkiIHgyPSIyMCIgeTI9IjI5InN0eWxlPSJzdHJva2U6I2Q5ZWNkOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMCIgeDI9IjIwIiB5Mj0iMzAic3R5bGU9InN0cm9rZTojZDhlY2Q4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMxIiB4Mj0iMjAiIHkyPSIzMSJzdHlsZT0ic3Ryb2tlOiNkN2ViZDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzIiIHgyPSIyMCIgeTI9IjMyInN0eWxlPSJzdHJva2U6I2Q1ZWFkNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMyIgeDI9IjIwIiB5Mj0iMzMic3R5bGU9InN0cm9rZTojZDRlYWQ0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM0IiB4Mj0iMjAiIHkyPSIzNCJzdHlsZT0ic3Ryb2tlOiNkM2U5ZDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzUiIHgyPSIyMCIgeTI9IjM1InN0eWxlPSJzdHJva2U6I2QxZTlkMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojZDBlOGQwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM2IiB4Mj0iMjAiIHkyPSIzNiJzdHlsZT0ic3Ryb2tlOiNjY2U2Y2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzgiIHgyPSIyMCIgeTI9IjM4InN0eWxlPSJzdHJva2U6I2NiZTVjYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzOSIgeDI9IjIwIiB5Mj0iMzkic3R5bGU9InN0cm9rZTojY2FlNWNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQwIiB4Mj0iMjAiIHkyPSI0MCJzdHlsZT0ic3Ryb2tlOiNjOGU0Yzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDEiIHgyPSIyMCIgeTI9IjQxInN0eWxlPSJzdHJva2U6I2M3ZTNjNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MiIgeDI9IjIwIiB5Mj0iNDIic3R5bGU9InN0cm9rZTojYzZlM2M2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQzIiB4Mj0iMjAiIHkyPSI0MyJzdHlsZT0ic3Ryb2tlOiNjNWUyYzU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDQiIHgyPSIyMCIgeTI9IjQ0InN0eWxlPSJzdHJva2U6I2MzZTJjMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NSIgeDI9IjIwIiB5Mj0iNDUic3R5bGU9InN0cm9rZTojYzJlMWMyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ2IiB4Mj0iMjAiIHkyPSI0NiJzdHlsZT0ic3Ryb2tlOiNjMWUwYzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDciIHgyPSIyMCIgeTI9IjQ3InN0eWxlPSJzdHJva2U6I2JmZTBiZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OCIgeDI9IjIwIiB5Mj0iNDgic3R5bGU9InN0cm9rZTojYmVkZmJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ5IiB4Mj0iMjAiIHkyPSI0OSJzdHlsZT0ic3Ryb2tlOiNiZGRlYmQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTAiIHgyPSIyMCIgeTI9IjUwInN0eWxlPSJzdHJva2U6I2JjZGViYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MSIgeDI9IjIwIiB5Mj0iNTEic3R5bGU9InN0cm9rZTojYmFkZGJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUyIiB4Mj0iMjAiIHkyPSI1MiJzdHlsZT0ic3Ryb2tlOiNiOWRjYjk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTMiIHgyPSIyMCIgeTI9IjUzInN0eWxlPSJzdHJva2U6I2I4ZGNiODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojYjdkYmI3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU0IiB4Mj0iMjAiIHkyPSI1NCJzdHlsZT0ic3Ryb2tlOiNiM2Q5YjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTYiIHgyPSIyMCIgeTI9IjU2InN0eWxlPSJzdHJva2U6I2IxZDliMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NyIgeDI9IjIwIiB5Mj0iNTcic3R5bGU9InN0cm9rZTojYjBkOGIwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU4IiB4Mj0iMjAiIHkyPSI1OCJzdHlsZT0ic3Ryb2tlOiNhZmQ3YWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTkiIHgyPSIyMCIgeTI9IjU5InN0eWxlPSJzdHJva2U6I2FlZDdhZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MCIgeDI9IjIwIiB5Mj0iNjAic3R5bGU9InN0cm9rZTojYWNkNmFjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYxIiB4Mj0iMjAiIHkyPSI2MSJzdHlsZT0ic3Ryb2tlOiNhYmQ1YWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjIiIHgyPSIyMCIgeTI9IjYyInN0eWxlPSJzdHJva2U6I2FhZDVhYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MyIgeDI9IjIwIiB5Mj0iNjMic3R5bGU9InN0cm9rZTojYThkNGE4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY0IiB4Mj0iMjAiIHkyPSI2NCJzdHlsZT0ic3Ryb2tlOiNhN2Q0YTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjUiIHgyPSIyMCIgeTI9IjY1InN0eWxlPSJzdHJva2U6I2E2ZDNhNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NiIgeDI9IjIwIiB5Mj0iNjYic3R5bGU9InN0cm9rZTojYTVkMmE1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY3IiB4Mj0iMjAiIHkyPSI2NyJzdHlsZT0ic3Ryb2tlOiNhM2QyYTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjgiIHgyPSIyMCIgeTI9IjY4InN0eWxlPSJzdHJva2U6I2EyZDFhMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2OSIgeDI9IjIwIiB5Mj0iNjkic3R5bGU9InN0cm9rZTojYTFkMGExO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcwIiB4Mj0iMjAiIHkyPSI3MCJzdHlsZT0ic3Ryb2tlOiM5ZmQwOWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzEiIHgyPSIyMCIgeTI9IjcxInN0eWxlPSJzdHJva2U6IzllY2Y5ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojOWRjZTlkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcyIiB4Mj0iMjAiIHkyPSI3MiJzdHlsZT0ic3Ryb2tlOiM5OWNkOTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzQiIHgyPSIyMCIgeTI9Ijc0InN0eWxlPSJzdHJva2U6Izk4Y2M5ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NSIgeDI9IjIwIiB5Mj0iNzUic3R5bGU9InN0cm9rZTojOTdjYjk3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc2IiB4Mj0iMjAiIHkyPSI3NiJzdHlsZT0ic3Ryb2tlOiM5NWNiOTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzciIHgyPSIyMCIgeTI9Ijc3InN0eWxlPSJzdHJva2U6Izk0Y2E5NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OCIgeDI9IjIwIiB5Mj0iNzgic3R5bGU9InN0cm9rZTojOTNjOTkzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc5IiB4Mj0iMjAiIHkyPSI3OSJzdHlsZT0ic3Ryb2tlOiM5MWM5OTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODAiIHgyPSIyMCIgeTI9IjgwInN0eWxlPSJzdHJva2U6IzkwYzg5MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MSIgeDI9IjIwIiB5Mj0iODEic3R5bGU9InN0cm9rZTojOGZjNzhmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgyIiB4Mj0iMjAiIHkyPSI4MiJzdHlsZT0ic3Ryb2tlOiM4ZWM3OGU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODMiIHgyPSIyMCIgeTI9IjgzInN0eWxlPSJzdHJva2U6IzhjYzY4YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NCIgeDI9IjIwIiB5Mj0iODQic3R5bGU9InN0cm9rZTojOGJjNThiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg1IiB4Mj0iMjAiIHkyPSI4NSJzdHlsZT0ic3Ryb2tlOiM4YWM1OGE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODYiIHgyPSIyMCIgeTI9Ijg2InN0eWxlPSJzdHJva2U6Izg4YzQ4ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NyIgeDI9IjIwIiB5Mj0iODcic3R5bGU9InN0cm9rZTojODdjNDg3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg4IiB4Mj0iMjAiIHkyPSI4OCJzdHlsZT0ic3Ryb2tlOiM4NmMzODY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODkiIHgyPSIyMCIgeTI9Ijg5InN0eWxlPSJzdHJva2U6Izg1YzI4NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojODNjMjgzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkwIiB4Mj0iMjAiIHkyPSI5MCJzdHlsZT0ic3Ryb2tlOiM3ZmMwN2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTIiIHgyPSIyMCIgeTI9IjkyInN0eWxlPSJzdHJva2U6IzdlYmY3ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MyIgeDI9IjIwIiB5Mj0iOTMic3R5bGU9InN0cm9rZTojN2RiZTdkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk0IiB4Mj0iMjAiIHkyPSI5NCJzdHlsZT0ic3Ryb2tlOiM3Y2JlN2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTUiIHgyPSIyMCIgeTI9Ijk1InN0eWxlPSJzdHJva2U6IzdhYmQ3YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NiIgeDI9IjIwIiB5Mj0iOTYic3R5bGU9InN0cm9rZTojNzliZDc5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk3IiB4Mj0iMjAiIHkyPSI5NyJzdHlsZT0ic3Ryb2tlOiM3OGJjNzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTgiIHgyPSIyMCIgeTI9Ijk4InN0eWxlPSJzdHJva2U6Izc3YmI3NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5OSIgeDI9IjIwIiB5Mj0iOTkic3R5bGU9InN0cm9rZTojNzViYjc1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMCIgeDI9IjIwIiB5Mj0iMTAwInN0eWxlPSJzdHJva2U6Izc0YmE3NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDEiIHgyPSIyMCIgeTI9IjEwMSJzdHlsZT0ic3Ryb2tlOiM3M2I5NzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAyIiB4Mj0iMjAiIHkyPSIxMDIic3R5bGU9InN0cm9rZTojNzFiOTcxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMyIgeDI9IjIwIiB5Mj0iMTAzInN0eWxlPSJzdHJva2U6IzcwYjg3MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDQiIHgyPSIyMCIgeTI9IjEwNCJzdHlsZT0ic3Ryb2tlOiM2ZmI3NmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA1IiB4Mj0iMjAiIHkyPSIxMDUic3R5bGU9InN0cm9rZTojNmViNzZlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNiIgeDI9IjIwIiB5Mj0iMTA2InN0eWxlPSJzdHJva2U6IzZjYjY2YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDciIHgyPSIyMCIgeTI9IjEwNyJzdHlsZT0ic3Ryb2tlOiM2YmI2NmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA4IiB4Mj0iMjAiIHkyPSIxMDgic3R5bGU9InN0cm9rZTojNmFiNTZhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6IzY2YjM2NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTAiIHgyPSIyMCIgeTI9IjExMCJzdHlsZT0ic3Ryb2tlOiM2NWIyNjU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTExIiB4Mj0iMjAiIHkyPSIxMTEic3R5bGU9InN0cm9rZTojNjNiMjYzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMiIgeDI9IjIwIiB5Mj0iMTEyInN0eWxlPSJzdHJva2U6IzYyYjE2MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTMiIHgyPSIyMCIgeTI9IjExMyJzdHlsZT0ic3Ryb2tlOiM2MWIwNjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE0IiB4Mj0iMjAiIHkyPSIxMTQic3R5bGU9InN0cm9rZTojNWZiMDVmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNSIgeDI9IjIwIiB5Mj0iMTE1InN0eWxlPSJzdHJva2U6IzVlYWY1ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTYiIHgyPSIyMCIgeTI9IjExNiJzdHlsZT0ic3Ryb2tlOiM1ZGFmNWQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE3IiB4Mj0iMjAiIHkyPSIxMTcic3R5bGU9InN0cm9rZTojNWNhZTVjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExOCIgeDI9IjIwIiB5Mj0iMTE4InN0eWxlPSJzdHJva2U6IzVhYWQ1YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTkiIHgyPSIyMCIgeTI9IjExOSJzdHlsZT0ic3Ryb2tlOiM1OWFkNTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIwIiB4Mj0iMjAiIHkyPSIxMjAic3R5bGU9InN0cm9rZTojNThhYzU4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMSIgeDI9IjIwIiB5Mj0iMTIxInN0eWxlPSJzdHJva2U6IzU3YWI1NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjIiIHgyPSIyMCIgeTI9IjEyMiJzdHlsZT0ic3Ryb2tlOiM1NWFiNTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIzIiB4Mj0iMjAiIHkyPSIxMjMic3R5bGU9InN0cm9rZTojNTRhYTU0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNCIgeDI9IjIwIiB5Mj0iMTI0InN0eWxlPSJzdHJva2U6IzUzYTk1MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjUiIHgyPSIyMCIgeTI9IjEyNSJzdHlsZT0ic3Ryb2tlOiM1MWE5NTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI2IiB4Mj0iMjAiIHkyPSIxMjYic3R5bGU9InN0cm9rZTojNTBhODUwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6IzRjYTY0YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjgiIHgyPSIyMCIgeTI9IjEyOCJzdHlsZT0ic3Ryb2tlOiM0YmE2NGI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI5IiB4Mj0iMjAiIHkyPSIxMjkic3R5bGU9InN0cm9rZTojNGFhNTRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMCIgeDI9IjIwIiB5Mj0iMTMwInN0eWxlPSJzdHJva2U6IzQ4YTQ0ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzEiIHgyPSIyMCIgeTI9IjEzMSJzdHlsZT0ic3Ryb2tlOiM0N2E0NDc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMyIiB4Mj0iMjAiIHkyPSIxMzIic3R5bGU9InN0cm9rZTojNDZhMzQ2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMyIgeDI9IjIwIiB5Mj0iMTMzInN0eWxlPSJzdHJva2U6IzQ1YTI0NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzQiIHgyPSIyMCIgeTI9IjEzNCJzdHlsZT0ic3Ryb2tlOiM0M2EyNDM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM1IiB4Mj0iMjAiIHkyPSIxMzUic3R5bGU9InN0cm9rZTojNDJhMTQyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNiIgeDI9IjIwIiB5Mj0iMTM2InN0eWxlPSJzdHJva2U6IzQxYTE0MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzciIHgyPSIyMCIgeTI9IjEzNyJzdHlsZT0ic3Ryb2tlOiMzZmEwM2Y7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM4IiB4Mj0iMjAiIHkyPSIxMzgic3R5bGU9InN0cm9rZTojM2U5ZjNlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOSIgeDI9IjIwIiB5Mj0iMTM5InN0eWxlPSJzdHJva2U6IzNkOWYzZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDAiIHgyPSIyMCIgeTI9IjE0MCJzdHlsZT0ic3Ryb2tlOiMzYzllM2M7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQxIiB4Mj0iMjAiIHkyPSIxNDEic3R5bGU9InN0cm9rZTojM2E5ZDNhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MiIgeDI9IjIwIiB5Mj0iMTQyInN0eWxlPSJzdHJva2U6IzM5OWQzOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDMiIHgyPSIyMCIgeTI9IjE0MyJzdHlsZT0ic3Ryb2tlOiMzODljMzg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ0IiB4Mj0iMjAiIHkyPSIxNDQic3R5bGU9InN0cm9rZTojMzc5YjM3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6IzMzOWEzMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDYiIHgyPSIyMCIgeTI9IjE0NiJzdHlsZT0ic3Ryb2tlOiMzMTk5MzE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ3IiB4Mj0iMjAiIHkyPSIxNDcic3R5bGU9InN0cm9rZTojMzA5ODMwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0OCIgeDI9IjIwIiB5Mj0iMTQ4InN0eWxlPSJzdHJva2U6IzJmOTgyZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDkiIHgyPSIyMCIgeTI9IjE0OSJzdHlsZT0ic3Ryb2tlOiMyZTk3MmU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUwIiB4Mj0iMjAiIHkyPSIxNTAic3R5bGU9InN0cm9rZTojMmM5NjJjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MSIgeDI9IjIwIiB5Mj0iMTUxInN0eWxlPSJzdHJva2U6IzJiOTYyYjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTIiIHgyPSIyMCIgeTI9IjE1MiJzdHlsZT0ic3Ryb2tlOiMyYTk1MmE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUzIiB4Mj0iMjAiIHkyPSIxNTMic3R5bGU9InN0cm9rZTojMjg5NDI4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NCIgeDI9IjIwIiB5Mj0iMTU0InN0eWxlPSJzdHJva2U6IzI3OTQyNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTUiIHgyPSIyMCIgeTI9IjE1NSJzdHlsZT0ic3Ryb2tlOiMyNjkzMjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU2IiB4Mj0iMjAiIHkyPSIxNTYic3R5bGU9InN0cm9rZTojMjU5MjI1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NyIgeDI9IjIwIiB5Mj0iMTU3InN0eWxlPSJzdHJva2U6IzIzOTIyMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTgiIHgyPSIyMCIgeTI9IjE1OCJzdHlsZT0ic3Ryb2tlOiMyMjkxMjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU5IiB4Mj0iMjAiIHkyPSIxNTkic3R5bGU9InN0cm9rZTojMjE5MTIxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MCIgeDI9IjIwIiB5Mj0iMTYwInN0eWxlPSJzdHJva2U6IzFmOTAxZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjEiIHgyPSIyMCIgeTI9IjE2MSJzdHlsZT0ic3Ryb2tlOiMxZThmMWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYyIiB4Mj0iMjAiIHkyPSIxNjIic3R5bGU9InN0cm9rZTojMWQ4ZjFkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6IzE5OGQxOTtzdHJva2Utd2lkdGg6MzsiIC8+PC9zdmc+PHN2ZyBoZWlnaHQ9IjE2MyIgd2lkdGg9IjUwIj48dGV4dCB4PSI1IiB5PSIxOSIgZHg9IjAiIGR5PSIwZXgiPi0gNDAwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjM3IiBkeD0iMCIgZHk9IjBleCI+LSA4MDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iNTUiIGR4PSIwIiBkeT0iMGV4Ij4tIDEyMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iNzMiIGR4PSIwIiBkeT0iMGV4Ij4tIDE2MDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iOTEiIGR4PSIwIiBkeT0iMGV4Ij4tIDIwMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTA5IiBkeD0iMCIgZHk9IjBleCI+LSAyNDAwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjEyNyIgZHg9IjAiIGR5PSIwZXgiPi0gMjgwMDwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNDUiIGR4PSIwIiBkeT0iMGV4Ij4tIDMyMDA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTYzIiBkeD0iMCIgZHk9IjBleCI+LSAzNjAwPC90ZXh0Pjwvc3ZnPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF9kZTI0MTQ5N2U2YzU0YmEyOTFkZWMwZWU4ZjZjNjQxYiA9IEwubWFwKAogICAgICAgICdtYXBfZGUyNDE0OTdlNmM1NGJhMjkxZGVjMGVlOGY2YzY0MWInLCB7CiAgICAgICAgY2VudGVyOiBbMCwgMF0sCiAgICAgICAgem9vbTogMiwKICAgICAgICBtYXhCb3VuZHM6IGJvdW5kcywKICAgICAgICBsYXllcnM6IFtdLAogICAgICAgIHdvcmxkQ29weUp1bXA6IGZhbHNlLAogICAgICAgIGNyczogTC5DUlMuRVBTRzM4NTcsCiAgICAgICAgem9vbUNvbnRyb2w6IHRydWUsCiAgICAgICAgfSk7CkwuY29udHJvbC5zY2FsZSgpLmFkZFRvKG1hcF9kZTI0MTQ5N2U2YzU0YmEyOTFkZWMwZWU4ZjZjNjQxYik7CgogICAgCiAgICB2YXIgdGlsZV9sYXllcl8wYjM1Mzc3MTI4YzU0Y2JhOTM5ODUwMDE3MTFlMzI1YiA9IEwudGlsZUxheWVyKAogICAgICAgICdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZycsCiAgICAgICAgewogICAgICAgICJhdHRyaWJ1dGlvbiI6IG51bGwsCiAgICAgICAgImRldGVjdFJldGluYSI6IGZhbHNlLAogICAgICAgICJtYXhOYXRpdmVab29tIjogMTgsCiAgICAgICAgIm1heFpvb20iOiAxOCwKICAgICAgICAibWluWm9vbSI6IDAsCiAgICAgICAgIm5vV3JhcCI6IGZhbHNlLAogICAgICAgICJvcGFjaXR5IjogMSwKICAgICAgICAic3ViZG9tYWlucyI6ICJhYmMiLAogICAgICAgICJ0bXMiOiBmYWxzZQp9KS5hZGRUbyhtYXBfZGUyNDE0OTdlNmM1NGJhMjkxZGVjMGVlOGY2YzY0MWIpOwogICAgCiAgICAgICAgICAgIHZhciBmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2ID0gTC5mZWF0dXJlR3JvdXAoCiAgICAgICAgICAgICAgICApLmFkZFRvKG1hcF9kZTI0MTQ5N2U2YzU0YmEyOTFkZWMwZWU4ZjZjNjQxYik7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjU5YzJjZTdmODkxNGRiODk5OWU3MzI1NDEzNzNjOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs2NC43NjI4LCAyNS41NTc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNzU5NDE4NWU5YmM0ZDIzYjFkMTBmNDIzZDI0MmZlYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YzZjcyMTU0NWNjNDQ0ZmU5MjdiYzRjMzMwY2YyM2FjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuODExNCwgNzUuMjY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTFiOGM0ZDI0ZDg4NDEwZmE0MzcwYzE5YzMwNTNkOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTgwZWZlYWNlNWEzNDQxNGI4YzM4MzdjYWY5MmMwZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYjU0YjI5NmRlYTk0ZGU3OTJkNDBmZjliZDFlNWIxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdiMWU0ZmIzMWE4MjQ4ODViNDg1YzAxYTcwMjQ3MjdjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMCwgMTM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwYmFhZDgxZTA1NTRkODY4ODg5ZWQ4OGZhNTUwMjNjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzcuNSwgMTI4LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwNTM3NWQ5MDk1NzQyOTJhYjZkOGJlZWE4MmYxZjhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45MjA0OCwgLTkuOTYxMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExMjNjMmE4ZDg4MzRkZDliNDA3M2VhZGJjYjM5NzUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkOGE2YWQ0Njk5MzRmM2M5YWViNDYxNTdjMTFkYmJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTQ4OTQyYTQyYzdlNGVmZjhiMjBhNmZiYzFhMWM2MmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNzczYWI3ZjdjNWQ0OTBjOTcyZGQxZjdkMmNiNzk4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM5Ljg2NjcsIDMyLjg2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMyMmMxYzUxMGUzMzRkNjhhYmNkMzczNTgzNjZjMmE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlMTA3Mzk1YjA2YjRlNDRhNDBhODJmYjBkMTQ3YjRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWEyNmI5MjhlNThhNDQ1M2IyMTIwZDdmZmJmNmRkMmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjJkZGQ0MjM0YTA2NDg1NTk2ZGExMjg1ZDY2MDg3ZjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxOS42Mjk3LCAtMTU1LjQzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTgwYWMwNjcxYmU0MDE4YjFjNDQ3NGZhNTRiOWM0YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Njg3ZmRlODkyZTc0NTE3OTdiMmMwZWNjYjhiYWYyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYmZkZmIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MjRhMTg2MTk2ZTE0NzRjYjU1ODc3NGE3ZGUwOGFmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mOWU3MWI2MGQ0MWE0ZjBlOTA5MzcxMzY1MTZjYzJkNCA9ICQoYDxkaXYgaWQ9Imh0bWxfZjllNzFiNjBkNDFhNGYwZTkwOTM3MTM2NTE2Y2MyZDQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9maW5uMTMxOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GaW5uaXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQyNGExODYxOTZlMTQ3NGNiNTU4Nzc0YTdkZTA4YWY0LnNldENvbnRlbnQoaHRtbF9mOWU3MWI2MGQ0MWE0ZjBlOTA5MzcxMzY1MTZjYzJkNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84Njg3ZmRlODkyZTc0NTE3OTdiMmMwZWNjYjhiYWYyNS5iaW5kUG9wdXAocG9wdXBfNDI0YTE4NjE5NmUxNDc0Y2I1NTg3NzRhN2RlMDhhZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84Njg3ZmRlODkyZTc0NTE3OTdiMmMwZWNjYjhiYWYyNS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA2NmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzAzNDIxMzMzZjQ2NDEwZmI3ZmRkYWJlNTc0NWIwNzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuNjMwOCwgMTMwLjk0ODk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmJmZGZiIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjQ1ZTIwODk4MDg5NDZjNmIzNGU2NmVmMDdmZWMzNjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODk0MmM2ZjYwMWFhNDU1YTkwNzgyY2EwNmJhM2MwNjEgPSAkKGA8ZGl2IGlkPSJodG1sXzg5NDJjNmY2MDFhYTQ1NWE5MDc4MmNhMDZiYTNjMDYxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvdGl3aTEyNDQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VGl3aTwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82NDVlMjA4OTgwODk0NmM2YjM0ZTY2ZWYwN2ZlYzM2NC5zZXRDb250ZW50KGh0bWxfODk0MmM2ZjYwMWFhNDU1YTkwNzgyY2EwNmJhM2MwNjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzAzNDIxMzMzZjQ2NDEwZmI3ZmRkYWJlNTc0NWIwNzUuYmluZFBvcHVwKHBvcHVwXzY0NWUyMDg5ODA4OTQ2YzZiMzRlNjZlZjA3ZmVjMzY0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYzAzNDIxMzMzZjQ2NDEwZmI3ZmRkYWJlNTc0NWIwNzUuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgNzRgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBhNGMzMDBmYThkZDQ5ODVhY2M2ODQ4YjU4NmFjYWVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuODExNCwgNzUuMjY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhZmRmYSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIyMDE0YTRmYTExODQ1YmU4NWU1YTg3ZTVlYWNkOGQ4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JmMTY0ODY5MzkzOTRjNWJhZGMyMjZhNzE4NzI1ZWQ0ID0gJChgPGRpdiBpZD0iaHRtbF9iZjE2NDg2OTM5Mzk0YzViYWRjMjI2YTcxODcyNWVkNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3R1bHUxMjU4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1bHU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjIwMTRhNGZhMTE4NDViZTg1ZTVhODdlNWVhY2Q4ZDguc2V0Q29udGVudChodG1sX2JmMTY0ODY5MzkzOTRjNWJhZGMyMjZhNzE4NzI1ZWQ0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBhNGMzMDBmYThkZDQ5ODVhY2M2ODQ4YjU4NmFjYWVmLmJpbmRQb3B1cChwb3B1cF8yMjAxNGE0ZmExMTg0NWJlODVlNWE4N2U1ZWFjZDhkOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzBhNGMzMDBmYThkZDQ5ODVhY2M2ODQ4YjU4NmFjYWVmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDg2YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MjQ0YzQ0N2QyZTc0M2Q2YjMwYzBmNTE4ODk3ZTM1ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmFmZGZhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGJlMTkwZDc5NzFlNGU0NmEyN2NjZmRiMTFkY2IzMzAgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDU1NGY2MTBmZmIxNDE1M2JlY2FmMDU4ZTA1MjhmNmMgPSAkKGA8ZGl2IGlkPSJodG1sX2Q1NTRmNjEwZmZiMTQxNTNiZWNhZjA1OGUwNTI4ZjZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhiZTE5MGQ3OTcxZTRlNDZhMjdjY2ZkYjExZGNiMzMwLnNldENvbnRlbnQoaHRtbF9kNTU0ZjYxMGZmYjE0MTUzYmVjYWYwNThlMDUyOGY2Yyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83MjQ0YzQ0N2QyZTc0M2Q2YjMwYzBmNTE4ODk3ZTM1ZS5iaW5kUG9wdXAocG9wdXBfOGJlMTkwZDc5NzFlNGU0NmEyN2NjZmRiMTFkY2IzMzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl83MjQ0YzQ0N2QyZTc0M2Q2YjMwYzBmNTE4ODk3ZTM1ZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA4NmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzFhOGZjNDQxZDFkNDA1ODlkNmZlNjk3MWUwYThkYTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjlmY2Y5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTRiMGY1ZjhkNzg0NDFkYmEwNTg3OGVlYmEwNTNjZGUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGY2ZjQzZGNkNjY5NDQwNzhlMDViMzYxNjY1ZDA1YzggPSAkKGA8ZGl2IGlkPSJodG1sX2RmNmY0M2RjZDY2OTQ0MDc4ZTA1YjM2MTY2NWQwNWM4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzU0YjBmNWY4ZDc4NDQxZGJhMDU4NzhlZWJhMDUzY2RlLnNldENvbnRlbnQoaHRtbF9kZjZmNDNkY2Q2Njk0NDA3OGUwNWIzNjE2NjVkMDVjOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMWE4ZmM0NDFkMWQ0MDU4OWQ2ZmU2OTcxZTBhOGRhOC5iaW5kUG9wdXAocG9wdXBfNTRiMGY1ZjhkNzg0NDFkYmEwNTg3OGVlYmEwNTNjZGUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8zMWE4ZmM0NDFkMWQ0MDU4OWQ2ZmU2OTcxZTBhOGRhOC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxMDVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2YyYmMyYmRkMjc0NDQ4N2FiZjgzNzQyZmM5ODE1YmZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y4ZmNmOCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2FiZTgzYzZlMTEwMTRlNWU5Mzk1MGNkMTE3NDlkOTI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxYTgwNjE2ZmNkZTRlZmNhMTI5MjY5YmM0MWJiNTY2ID0gJChgPGRpdiBpZD0iaHRtbF9lMWE4MDYxNmZjZGU0ZWZjYTEyOTI2OWJjNDFiYjU2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bmcxMjc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bmdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hYmU4M2M2ZTExMDE0ZTVlOTM5NTBjZDExNzQ5ZDkyNy5zZXRDb250ZW50KGh0bWxfZTFhODA2MTZmY2RlNGVmY2ExMjkyNjliYzQxYmI1NjYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjJiYzJiZGQyNzQ0NDg3YWJmODM3NDJmYzk4MTViZmQuYmluZFBvcHVwKHBvcHVwX2FiZTgzYzZlMTEwMTRlNWU5Mzk1MGNkMTE3NDlkOTI3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZjJiYzJiZGQyNzQ0NDg3YWJmODM3NDJmYzk4MTViZmQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMTEwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMGE0NzBjMjg0MWM0NWI5OTIwZTIyNGZkYmJmMWMyOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjdmYmY3IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FlMTExNGNkOTE0NGU1ZmI3MTQyNGQ1ZDA0Yzg0NWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYmJiMjgxM2Q5YTAwNGVkNGE2Yjg1NTYxMjVmZThmZGYgPSAkKGA8ZGl2IGlkPSJodG1sX2JiYjI4MTNkOWEwMDRlZDRhNmI4NTU2MTI1ZmU4ZmRmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2FlMTExNGNkOTE0NGU1ZmI3MTQyNGQ1ZDA0Yzg0NWYuc2V0Q29udGVudChodG1sX2JiYjI4MTNkOWEwMDRlZDRhNmI4NTU2MTI1ZmU4ZmRmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwYTQ3MGMyODQxYzQ1Yjk5MjBlMjI0ZmRiYmYxYzI4LmJpbmRQb3B1cChwb3B1cF8zYWUxMTE0Y2Q5MTQ0ZTVmYjcxNDI0ZDVkMDRjODQ1ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2QwYTQ3MGMyODQxYzQ1Yjk5MjBlMjI0ZmRiYmYxYzI4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDEyN2AgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWY5NzZjYmM3NDFiNDQyYTg1NmRjNTY5ODEwNTgyZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y2ZmJmNiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQyYjRkMDEzM2QzMDQ4NThiZTUyNzQzNTFjZDIzNTMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ1ZWMxNTQ5MzA1YjQwY2NiNGIxZTlhOWM2ZDU4MTUzID0gJChgPGRpdiBpZD0iaHRtbF80NWVjMTU0OTMwNWI0MGNjYjRiMWU5YTljNmQ1ODE1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvcmUxMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvcmVhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MmI0ZDAxMzNkMzA0ODU4YmU1Mjc0MzUxY2QyMzUzMC5zZXRDb250ZW50KGh0bWxfNDVlYzE1NDkzMDViNDBjY2I0YjFlOWE5YzZkNTgxNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWY5NzZjYmM3NDFiNDQyYTg1NmRjNTY5ODEwNTgyZWQuYmluZFBvcHVwKHBvcHVwXzQyYjRkMDEzM2QzMDQ4NThiZTUyNzQzNTFjZDIzNTMwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYWY5NzZjYmM3NDFiNDQyYTg1NmRjNTY5ODEwNTgyZWQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMTU0YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTAxZmI0M2I5MzA0NWRmOTc0ODAxMDI2YzEyODg3OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZWRmNmVkIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmU1Nzc4OGFjODk0NGU3YjgzNWJhNjgyNWVkMGFkM2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDVjYTI4ZWU1M2U0NGMyZTk0MzAxYTIyZDdmMzNkYzMgPSAkKGA8ZGl2IGlkPSJodG1sXzQ1Y2EyOGVlNTNlNDRjMmU5NDMwMWEyMmQ3ZjMzZGMzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGliZTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGliZXJpYSBLcGVsbGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmU1Nzc4OGFjODk0NGU3YjgzNWJhNjgyNWVkMGFkM2Quc2V0Q29udGVudChodG1sXzQ1Y2EyOGVlNTNlNDRjMmU5NDMwMWEyMmQ3ZjMzZGMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MxMDFmYjQzYjkzMDQ1ZGY5NzQ4MDEwMjZjMTI4ODc4LmJpbmRQb3B1cChwb3B1cF8yZTU3Nzg4YWM4OTQ0ZTdiODM1YmE2ODI1ZWQwYWQzZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2MxMDFmYjQzYjkzMDQ1ZGY5NzQ4MDEwMjZjMTI4ODc4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDI4NWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzVmNjhkNTM0MDU5NDA3M2I5M2ZhMTBjNDEzNjQ5N2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNC45NDAzLCAtOTguOTA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2UzZjFlMyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M1MjliNDQ3ZGM5NjRkOWY4NmFlMDFiYzZjNmNhNTg5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg0YmY0MDU0ZWNkOTRjOGU5MjBlMmUwNjA0YzgyZGVjID0gJChgPGRpdiBpZD0iaHRtbF84NGJmNDA1NGVjZDk0YzhlOTIwZTJlMDYwNGM4MmRlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tpb3cxMjY2IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktpb3dhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M1MjliNDQ3ZGM5NjRkOWY4NmFlMDFiYzZjNmNhNTg5LnNldENvbnRlbnQoaHRtbF84NGJmNDA1NGVjZDk0YzhlOTIwZTJlMDYwNGM4MmRlYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zNWY2OGQ1MzQwNTk0MDczYjkzZmExMGM0MTM2NDk3ZC5iaW5kUG9wdXAocG9wdXBfYzUyOWI0NDdkYzk2NGQ5Zjg2YWUwMWJjNmM2Y2E1ODkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8zNWY2OGQ1MzQwNTk0MDczYjkzZmExMGM0MTM2NDk3ZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA0NTBgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3NWIxZjc1OThlZTQ3ODdiNTc2YzdmMzczOTJjNjZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q2ZWJkNiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RlZTYzNDNmOTg5MjQyMDE5MjcyMGVjOTAwNjk4NTQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM4MGQ0MjhjNmIwODQxYTBhNjQxN2U5YTQwOWQyYzc5ID0gJChgPGRpdiBpZD0iaHRtbF8zODBkNDI4YzZiMDg0MWEwYTY0MTdlOWE0MDlkMmM3OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3RsaW4xMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRsaW5naXQ8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGVlNjM0M2Y5ODkyNDIwMTkyNzIwZWM5MDA2OTg1NDQuc2V0Q29udGVudChodG1sXzM4MGQ0MjhjNmIwODQxYTBhNjQxN2U5YTQwOWQyYzc5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI3NWIxZjc1OThlZTQ3ODdiNTc2YzdmMzczOTJjNjZlLmJpbmRQb3B1cChwb3B1cF9kZWU2MzQzZjk4OTI0MjAxOTI3MjBlYzkwMDY5ODU0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzI3NWIxZjc1OThlZTQ3ODdiNTc2YzdmMzczOTJjNjZlLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDY1NmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE5ZGRlNjk2YjI4NDA1Mzg3MDlkOGNkMmU5NTA4NGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjY2FlNWNhIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjNlYjg2NTYwY2Q0NDI1Yzk3M2U2Y2Q0MTFmOWNkZDQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjFiYjc5NDQ2NDdlNDI1MWJkZjZhNTc1ZDA2MGY3ZmMgPSAkKGA8ZGl2IGlkPSJodG1sX2IxYmI3OTQ0NjQ3ZTQyNTFiZGY2YTU3NWQwNjBmN2ZjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIzZWI4NjU2MGNkNDQyNWM5NzNlNmNkNDExZjljZGQ0LnNldENvbnRlbnQoaHRtbF9iMWJiNzk0NDY0N2U0MjUxYmRmNmE1NzVkMDYwZjdmYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMTlkZGU2OTZiMjg0MDUzODcwOWQ4Y2QyZTk1MDg0YS5iaW5kUG9wdXAocG9wdXBfMjNlYjg2NTYwY2Q0NDI1Yzk3M2U2Y2Q0MTFmOWNkZDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wMTlkZGU2OTZiMjg0MDUzODcwOWQ4Y2QyZTk1MDg0YS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA4MzRgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5OWNmNzEyMzNkZDQ3NzJhNmUzOTJkYTE3YjFlMGQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2I3ZGJiNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzMDMwN2ExZGU5NzQ0NzlhMjJkYWYxMGY2YWNkYTAxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgzY2RjNzM4NzgzNDRmZWM5MGRiYzgyMDQ0N2MxMzc0ID0gJChgPGRpdiBpZD0iaHRtbF84M2NkYzczODc4MzQ0ZmVjOTBkYmM4MjA0NDdjMTM3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlR1cmtpc2g8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTMwMzA3YTFkZTk3NDQ3OWEyMmRhZjEwZjZhY2RhMDEuc2V0Q29udGVudChodG1sXzgzY2RjNzM4NzgzNDRmZWM5MGRiYzgyMDQ0N2MxMzc0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY5OWNmNzEyMzNkZDQ3NzJhNmUzOTJkYTE3YjFlMGQ4LmJpbmRQb3B1cChwb3B1cF85MzAzMDdhMWRlOTc0NDc5YTIyZGFmMTBmNmFjZGEwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzY5OWNmNzEyMzNkZDQ3NzJhNmUzOTJkYTE3YjFlMGQ4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDExMzhgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmOWY2NTgwNjkzZjRjYTQ5YjBjYTJhMWRmMTI3NmMwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiMmQ5YjIiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82Yjg1M2FkNjczY2M0NWY1YTVjYTA3ZDdmZThhNWI0YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yODY0OTdlZGIwMWQ0YTdiOWUzZjZmMWE5MTY1N2ZiZSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjg2NDk3ZWRiMDFkNGE3YjllM2Y2ZjFhOTE2NTdmYmUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9zYW5kMTI3MyIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5TYW5kYXdlPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzZiODUzYWQ2NzNjYzQ1ZjVhNWNhMDdkN2ZlOGE1YjRjLnNldENvbnRlbnQoaHRtbF8yODY0OTdlZGIwMWQ0YTdiOWUzZjZmMWE5MTY1N2ZiZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZjlmNjU4MDY5M2Y0Y2E0OWIwY2EyYTFkZjEyNzZjMC5iaW5kUG9wdXAocG9wdXBfNmI4NTNhZDY3M2NjNDVmNWE1Y2EwN2Q3ZmU4YTViNGMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kZjlmNjU4MDY5M2Y0Y2E0OWIwY2EyYTFkZjEyNzZjMC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxMjA4YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NDg0NWVlYTg4NTc0YmVkOTE1OWYxOTI4OTI5ZmNmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQxLjg1MDM5Njk5OTk5OTk5NCwgNDMuNzg2MTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhYWQ1YWEiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9mN2ZiZDY1MDdmZTY0Y2QxYjQ4YzMwZjc1ODM1ODkwNik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jOGY0ZmVmY2I0NTM0OWFjYWE3OTEzMmIyZWUwZTg0ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yNzhkMGU1ZjkyMjY0OTI1OTUwNjdjYzM0OGJhYjhiNCA9ICQoYDxkaXYgaWQ9Imh0bWxfMjc4ZDBlNWY5MjI2NDkyNTk1MDY3Y2MzNDhiYWI4YjQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9udWNsMTMwMiIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5HZW9yZ2lhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jOGY0ZmVmY2I0NTM0OWFjYWE3OTEzMmIyZWUwZTg0Zi5zZXRDb250ZW50KGh0bWxfMjc4ZDBlNWY5MjI2NDkyNTk1MDY3Y2MzNDhiYWI4YjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjQ4NDVlZWE4ODU3NGJlZDkxNTlmMTkyODkyOWZjZjIuYmluZFBvcHVwKHBvcHVwX2M4ZjRmZWZjYjQ1MzQ5YWNhYTc5MTMyYjJlZTBlODRmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNjQ4NDVlZWE4ODU3NGJlZDkxNTlmMTkyODkyOWZjZjIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMTMzOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQwMTU4ZjhkZWQ5NGJlNjgxMjEyMWI1MWJiY2M0OWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzlkY2U5ZCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzBmZGZkZWRhOWY2NTRmMTdiNGVhNGNlOGZiZWJjZjQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgwNTE4MTQ3ZDBkZjQ0MGI5NjMyZGFlMWNjNGU1ZmRhID0gJChgPGRpdiBpZD0iaHRtbF84MDUxODE0N2QwZGY0NDBiOTYzMmRhZTFjYzRlNWZkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMGZkZmRlZGE5ZjY1NGYxN2I0ZWE0Y2U4ZmJlYmNmNDYuc2V0Q29udGVudChodG1sXzgwNTE4MTQ3ZDBkZjQ0MGI5NjMyZGFlMWNjNGU1ZmRhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzlkMDE1OGY4ZGVkOTRiZTY4MTIxMjFiNTFiYmNjNDlhLmJpbmRQb3B1cChwb3B1cF8wZmRmZGVkYTlmNjU0ZjE3YjRlYTRjZThmYmViY2Y0NikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzlkMDE1OGY4ZGVkOTRiZTY4MTIxMjFiNTFiYmNjNDlhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDE1MzhgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5M2JmMjMxMzEwMzQzN2Q4YzE5MGM3ZmUwNzEwNzVjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzdlYmY3ZSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Y3ZmJkNjUwN2ZlNjRjZDFiNDhjMzBmNzU4MzU4OTA2KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM5ZmFlY2NkZTE4MTRmZTZiNjNjM2M3ZThjODJiYjQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBlM2E5NjdiYmI2YTQzM2M4YjQzNmI2YTAxOTVjYTVmID0gJChgPGRpdiBpZD0iaHRtbF8wZTNhOTY3YmJiNmE0MzNjOGI0MzZiNmEwMTk1Y2E1ZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhd2FpaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM5ZmFlY2NkZTE4MTRmZTZiNjNjM2M3ZThjODJiYjQ0LnNldENvbnRlbnQoaHRtbF8wZTNhOTY3YmJiNmE0MzNjOGI0MzZiNmEwMTk1Y2E1Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83OTNiZjIzMTMxMDM0MzdkOGMxOTBjN2ZlMDcxMDc1Yy5iaW5kUG9wdXAocG9wdXBfMzlmYWVjY2RlMTgxNGZlNmI2M2MzYzdlOGM4MmJiNDQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl83OTNiZjIzMTMxMDM0MzdkOGMxOTBjN2ZlMDcxMDc1Yy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyMDIwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTNlNzFhYjBmYzI0OTc0OWNjNGUwYjBlNGM0MjMxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMjM5MjIzIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZjdmYmQ2NTA3ZmU2NGNkMWI0OGMzMGY3NTgzNTg5MDYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGU4NTYwNmE2YmVjNDVlZWE0MGJlYTdiMTVhZDE4ZmEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmE3Y2ExNTAyZmI1NDFmZmFmNDdjYzY3ZjRjOTkzYTAgPSAkKGA8ZGl2IGlkPSJodG1sX2ZhN2NhMTUwMmZiNTQxZmZhZjQ3Y2M2N2Y0Yzk5M2EwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYW1oYTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QW1oYXJpYzwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kZTg1NjA2YTZiZWM0NWVlYTQwYmVhN2IxNWFkMThmYS5zZXRDb250ZW50KGh0bWxfZmE3Y2ExNTAyZmI1NDFmZmFmNDdjYzY3ZjRjOTkzYTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTkzZTcxYWIwZmMyNDk3NDljYzRlMGIwZTRjNDIzMWQuYmluZFBvcHVwKHBvcHVwX2RlODU2MDZhNmJlYzQ1ZWVhNDBiZWE3YjE1YWQxOGZhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOTkzZTcxYWIwZmMyNDk3NDljYzRlMGIwZTRjNDIzMWQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMzQ0MGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCjwvc2NyaXB0Pg==\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe750f7c240>"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(data.language)\n",
    "data['elevation'] = lingtypology.get_elevations(data.language)\n",
    "m.add_features(data.elevation, numeric=True)\n",
    "m.add_tooltips(data.elevation)\n",
    "m.legend_position = 'bottomleft'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Some real examples <a name=\"real_examples\"></a>\n",
    "\n",
    "### 2.1. Circassian Example <a name=\"example1\"></a>\n",
    "Let's draw a map based on data from [this](https://github.com/ropensci/lingtypology/blob/master/database_creation/circassian.csv) CSV.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>latitude</th>\n",
       "      <th>longitude</th>\n",
       "      <th>village</th>\n",
       "      <th>district</th>\n",
       "      <th>dialect</th>\n",
       "      <th>language</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>45.183330</td>\n",
       "      <td>39.666670</td>\n",
       "      <td>Khatukay</td>\n",
       "      <td>ra</td>\n",
       "      <td>Temirgoy</td>\n",
       "      <td>Adyghe</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>43.092518</td>\n",
       "      <td>43.522085</td>\n",
       "      <td>Psygansu</td>\n",
       "      <td>kbr</td>\n",
       "      <td>Baksan</td>\n",
       "      <td>Kabardian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>43.217748</td>\n",
       "      <td>43.738020</td>\n",
       "      <td>Verkhny Lesken</td>\n",
       "      <td>kbr</td>\n",
       "      <td>Baksan</td>\n",
       "      <td>Kabardian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>43.260246</td>\n",
       "      <td>43.653788</td>\n",
       "      <td>Zhemtala</td>\n",
       "      <td>kbr</td>\n",
       "      <td>Baksan</td>\n",
       "      <td>Kabardian</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>43.317842</td>\n",
       "      <td>43.876519</td>\n",
       "      <td>Erokko</td>\n",
       "      <td>kbr</td>\n",
       "      <td>Baksan</td>\n",
       "      <td>Kabardian</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    latitude  longitude         village district   dialect   language\n",
       "0  45.183330  39.666670        Khatukay       ra  Temirgoy     Adyghe\n",
       "1  43.092518  43.522085        Psygansu      kbr    Baksan  Kabardian\n",
       "2  43.217748  43.738020  Verkhny Lesken      kbr    Baksan  Kabardian\n",
       "3  43.260246  43.653788        Zhemtala      kbr    Baksan  Kabardian\n",
       "4  43.317842  43.876519          Erokko      kbr    Baksan  Kabardian"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "circassian = pandas.read_csv(\n",
    "    'https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/circassian.csv',\n",
    "    delimiter=',',\n",
    "    header=0,\n",
    ")\n",
    "circassian.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "coordinates = zip(list(circassian.latitude), list(circassian.longitude))\n",
    "dialects = circassian.dialect\n",
    "languages = circassian.language\n",
    "popups = circassian.village"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzUzMDBkM2Q1OTZiYTRjZTliNTQ4MzM5YzEwZDdhMWYzIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF81MzAwZDNkNTk2YmE0Y2U5YjU0ODMzOWMxMGQ3YTFmMyIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCiAKPGRpdiBpZD0nbWFwbGVnZW5kMCcgY2xhc3M9J21hcGxlZ2VuZCcgCiAgICBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4Ojk5OTk7IGJvcmRlcjoycHggc29saWQgZ3JleTsgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCk7CiAgICAgYm9yZGVyLXJhZGl1czo2cHg7IHBhZGRpbmc6IDEwcHg7IGZvbnQtc2l6ZToxNHB4OyByaWdodDogMjBweDsgYm90dG9tOiAyMHB4Oyc+CgoKPGRpdiBjbGFzcz0nbGVnZW5kLXRpdGxlJz5EaWFsZWN0czwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2U2MTk0YjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5BYmFkemV4PC9saT4KPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjMTllNmI0O29wYWNpdHk6MC43OyI+PC9zcGFuPkJha3NhbjwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZTExOTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5CZXNsZW5leTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzQzNjNkODtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5CemhlZHVraDwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2Y1ODIzMTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5LdWJhbjwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzkxMWViNDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5NYWxraW48L2xpPgo8bGk+PHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICM0NmYwZjA7b3BhY2l0eTowLjc7Ij48L3NwYW4+U2hhcHN1ZzwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2YwMzJlNjtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5UZW1pcmdveTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2JjZjYwYztvcGFjaXR5OjAuNzsiPjwvc3Bhbj5UZXJlazwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI2ZhYmViZTtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5YYWt1Y2g8L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CiAgICAKPCEtLSBCYXNlZCBvbiB0aGUgdGVtcGxhdGUgZnJvbSBoZXJlOiBodHRwczovL25idmlld2VyLmp1cHl0ZXIub3JnL2dpc3QvdGFsYmVydGMtdXNncy8xOGY4OTAxZmM5OGYxMDlmMmI3MTE1NmNmM2FjODFjZCAtLT4KPCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvL2NvZGUuanF1ZXJ5LmNvbS91aS8xLjEyLjEvdGhlbWVzL2Jhc2UvanF1ZXJ5LXVpLmNzcyI+CgogIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40LmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+CiAgCiAgPHNjcmlwdD4KICAgICQoZnVuY3Rpb24oKXsKICAgICAgICAkKCIjbWFwbGVnZW5kMSIpLmRyYWdnYWJsZSh7CiAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcyh7CiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICB0b3A6ICJhdXRvIiwKICAgICAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwogIDwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5PgoKCjxkaXYgaWQ9J21hcGxlZ2VuZDEnIGNsYXNzPSdtYXBsZWdlbmQnIAogICAgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDo5OTk5OyBib3JkZXI6MnB4IHNvbGlkIGdyZXk7IGJhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgIGJvcmRlci1yYWRpdXM6NnB4OyBwYWRkaW5nOiAxMHB4OyBmb250LXNpemU6MTRweDsgcmlnaHQ6IDIwcHg7IHRvcDogMjBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+TGFuZ3VhZ2VzPC9kaXY+Cgo8ZGl2IGNsYXNzPSdsZWdlbmQtc2NhbGUnPgogIDx1bCBjbGFzcz0nbGVnZW5kLWxhYmVscyc+CgogICAgPGxpPjxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmZmZmO29wYWNpdHk6MC43OyI+PC9zcGFuPkFkeWdoZTwvbGk+CjxsaT48c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogIzAwMDAwMDtvcGFjaXR5OjAuNzsiPjwvc3Bhbj5LYWJhcmRpYW48L2xpPgoKICA8L3VsPgo8L2Rpdj4KPC9kaXY+Cgo8L2JvZHk+CjwvaHRtbD4KCjxzdHlsZSB0eXBlPSd0ZXh0L2Nzcyc+CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXRpdGxlIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGZvbnQtc2l6ZTogOTAlOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCB7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBwYWRkaW5nOiAwOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zY2FsZSB1bCBsaSB7CiAgICBmb250LXNpemU6IDgwJTsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgfQogIC5tYXBsZWdlbmQgdWwubGVnZW5kLWxhYmVscyBsaSBzcGFuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMzBweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAKICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CiAgICAKICAgIH0KICAubWFwbGVnZW5kIC5sZWdlbmQtc291cmNlIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgY29sb3I6ICM3Nzc7CiAgICBjbGVhcjogYm90aDsKICAgIH0KICAubWFwbGVnZW5kIGEgewogICAgY29sb3I6ICM3Nzc7CiAgICB9Cjwvc3R5bGU+CjwvYm9keT4KPHNjcmlwdD4gICAgCiAgICAKICAgIAogICAgICAgIHZhciBib3VuZHMgPSBudWxsOwogICAgCgogICAgdmFyIG1hcF81MzAwZDNkNTk2YmE0Y2U5YjU0ODMzOWMxMGQ3YTFmMyA9IEwubWFwKAogICAgICAgICdtYXBfNTMwMGQzZDU5NmJhNGNlOWI1NDgzMzljMTBkN2ExZjMnLCB7CiAgICAgICAgY2VudGVyOiBbNDQuMjEsIDQyLjMyXSwKICAgICAgICB6b29tOiA3LAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzUzMDBkM2Q1OTZiYTRjZTliNTQ4MzM5YzEwZDdhMWYzKTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyX2Y1MDU1YzQ3OGQzZjRhYzFhNWMzMTVkMjRhMWVlMTg2ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF81MzAwZDNkNTk2YmE0Y2U5YjU0ODMzOWMxMGQ3YTFmMyk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzUzMDBkM2Q1OTZiYTRjZTliNTQ4MzM5YzEwZDdhMWYzKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMmJmMjUwMTIzZmQ0Y2M2ODM0YTUwMGY3YTA5ZjBmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAyLCA0MC4yM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2YzNTdkZTM5ZjY1NDQzOThmMjE1ZmM2OWJkNTg4N2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNTQxNjcsIDM5Ljk0NjM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdiZWVkMGZhMjc2NDJiYWJiZWU5ODZmMTQ5ZGI0YjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC42NDQ3MjE5OTk5OTk5OTQsIDQwLjIyNTgzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2Q5ZWU0YjdhYjA5NGFmOGFhNjJkNGVlMmE1ZGQwYmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MDI1LCAzOS4xNzQ3MjE5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhY2JiY2U5ZTdkMzQ2ZjFiNDE1NThjMzkyMjJlNzg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTA1LCAzOS4yNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmYWIzM2JjMzk1MjQ4ZDY4ZTI5Nzk3YmM3YjAyZjc4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTE1NDIxLCAzOS4zOTAyMjk5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M2MjUzNTk0MTg2NjQ2ZDA4MWE5OTU1MzZlNTIwZTUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTIxMTEwOTk5OTk5OTk2LCAzOC45OTI3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxZDIwMmVhNzdlYjQ1MGZiNDZhNDU2NWYyYTZmNWYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTI2MTExLCAzOS41NjY5NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5ODY3ZWEwYWRmZDQ0ZjdiYTU4NWU4OTgyNTM2MzE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQxNjY2OTk5OTk5OTk1LCAzOS4zNjk0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3NThhM2MwMWNiZTRmNTY5NzY5YjJhMWYxMzdlN2FmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTUwODMzLCAzOS4xMTQ0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiYjY2ZjA2NWZiNTRjMjY4MDg2YjE4YzMzNjIwMDhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODYzMDU2LCA0MS45MTM0NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2YTAzYTRmNmM0YjQ4YTJiZDI5M2VhYjNjZmU3N2ZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjA2NjIxOTk5OTk5OTk2LCA0MS44Nzc2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWI3Y2M1ZTU5MzA5NDkwN2IzNjYwMWVhZDNiZGFlZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yMjE1NTgsIDQxLjg5OTQ1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQ0MjJkODU0YzlmNDUyZDhlNzU3MzkyMmMzZWIyNGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMzExMTEsIDQxLjkzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjAwMjdkNGFlOWZlNGEwY2EzMGQ3YWQwMzAwM2IzNDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zNTA3NzYsIDQxLjgwMTMzNDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzYwMDkyNzc3NGIyNGNmYzhkMTA0MWZkYWRjOWY3NDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC40MzEyOTMsIDQxLjc2MzA5Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2VmYjM5ZWNhOWM2NGQ5NDkxZDYyMWVjNzdlODVmMmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MjE2NjcsIDQwLjUwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjc4YjE3YWFmNjYxNDhiODgxYzY4NmU3OGQ4ZGI3M2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45LCA0MC40ODMwMDAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzNkOWE2NzY3YWJjZTQwNWZhOGNjZmM1ZGM1NGYyZGEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzk5OTQ5Nzk5OTk5OTksIDQzLjMyNzYxODddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JiMTVlMWU2MTQ0MTRkMzc5OTU2MjU3NjIwZTViNDA5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODUxMjI5Mjk5OTk5OTksIDQzLjIyOTIwMTIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTY4ODczZDVjODc3NGM0NWEwZTRkNTAxZmJiOGU4MzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NDY4OTQ1LCA0My4xNzIxMjIyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFlN2M2NTcwNmMzYTRlYTlhYWE1ZmJlMTg2NWIxZWY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTY4MjE2OTk5OTk5OTk2LCAzOS40NDcxMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY2OWVlMzE2NDAzZjRiODViM2ExNmFmNjdmZjY2YzY4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTg0NzIyLCAzOS4wN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjBjNGZiMTZlY2Y3NDc4MmIyMTkzMzU0ODE0YjE5YTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yODM2MDk5OTk5OTk5OTYsIDM4Ljk1MzYxOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGE3OWIzZDE3MzAxNGY5Yzg0OTdmYTBiZDM0YTQ4ZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45ODczNTEwMDAwMDAwMDQsIDM4LjcxNTQ4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzE0YzVlOGQxMTQzNGU4OTk5NjUwZTZlNzFiMzE4NzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTkxNjcsIDM4Ljc4MTk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjY1MjYzOWVlNGJlNDM2YWEzYjJkYTliNTdkMDM2YTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNDUyNzgsIDM4Ljc1NjExMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGViOTM1NWMyODY0NDY3NDgyNGJkMWNlN2VhYWViZmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNTExMTEsIDM4LjcwNjM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGFjNWQ2OGNmMjMxNGQyNWFjNzRhNmVkYWZmOGFlOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4xODMzMywgMzkuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRhOGY4ODViY2ZiNzRhODBhZjVlMjY3N2YwNDQyMjVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDc1ODMzLCAzOS4zNDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTU2MTBjODBhMGM0MDMyYmIwMzFmOGVhYmI1ZDg5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjExNjM4OSwgMzkuMzAxNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNmIxNmQ2MTA3NDI0MGJmYWVlZDM1ZmZkNmUyOTI4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgNDEuMzgzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU0MGE1ZDYxZTA3MTQyMTY5MDkyMjc5YjE2MDA0OWM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTU0NzQ3LCA0MC4zMTc2ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRiZDhmMDc5ZjdiODQ2MjI4NWI2YTkyYWE2ZmUwN2E1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTkzMzMzLCA0MC4zMTEzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwYjM0NjZkNWRkNTRiZDJhMDZhNDYyZWMyMGYxMGI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTk3NSwgNDAuMzkyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMGY0ZTE0OGY2NmE0NjJlODU0OTMxZjNjMDEwMGIwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAxMTM4OSwgNDAuMjE3MjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZGVlMGFiZGY5NzU0MDgwOWFlMWRmMDQ2YTQ3MzIwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA0NjExMDk5OTk5OTk5NiwgNDAuMTgzMDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODMwNWM0Y2M2OGY0OWU4YTg4YjFhZGE2MGUwNzViNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA2ODg4OSwgMzkuNDk3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTUwODg0ZDQwNDM5NDMwNzljY2ZkNTVkMGRiMDVlZTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNzIyMjIsIDQwLjE4ODYxMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODZjNDk0YmM1YmE5NGIxNTgzNjEzMmJhYTY5OGZmNmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wODM4ODksIDM5Ljg2MTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWNjOTgxYjhkNTJlNDNkNjk0ODY5M2MyNTZmMzA3ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wOTIyMjIsIDQwLjExMDI3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzE3ZWFjMjVjODE1NDNkZWE1NmYxOTdiMDFiOTE4MjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA3MzIzLCA0NC4xOTA4OTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xN2E5YjhhYmZiMDg0OWZkYWFlMjI1YTI2NWJhMWUyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ2NzczNDgsIDQ0LjM3MzAyMTIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2Q4ZWNhMGI3NzNiNGNlYTk2NWU1MWY1MjJmODE1YWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzQ2OCwgNDQuMjQyMzI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjIzZWQzYTdkN2IwNDgwZWI3NzI3YjA3ZTcyNjBkMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40OTkxMDk4LCA0NC4xNTEyOTQ3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2EwZWE2MDk2NDBhYzQ2N2Y5NDg3MDUzMjM4M2NiNDI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTI1NDAxNywgNDQuMjA5Mjk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MWI5NjA4ZmJjYzA0Y2ZiODg0OTRiMDEzMWQ4ZmQxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MzQ4ODgsIDQ0LjQxMzc1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1ZTU3YTlmMjczZDQwNmY5ZWZkMGI1OWVkNWFlYjcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTcwMTE0Mzk5OTk5OTk0LCA0NC4xNDAzNDgxMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlNDg3ZjVkYjE3ODRmN2M4YWNlMDAzOWMxOGZmNDZiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcxMDc2MSwgNDQuMzc0MDU5MTAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODJkNmIzZGNiMTY0NDY2ODgzYjAwZTRkMGU0ZmYxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3Mjc3OTUsIDQ0LjI5NzM2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUwMzg1MGMxNTdhYjQzNmI4OTRkMWM1ZDQ3ZTg5OThlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODIyNzg2LCAzOS41MDA5ODFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBjOTZkMDQwN2JmODRlZjk4MGVjMjhkN2ZhYmE1NmQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODMzOTE3LCAzOS41MDgwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlMDljNTEyMTgyMTQ0ZThhMzY2OTNiZTgzNzE1ZmEwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5Mzg5LCAzOS4zNTY2MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwNGU0MTkxZDYxNTQ2NjZiNWZhYjFkODM1NjM0OGI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5Mzk3LCAzOS4zMzUzMjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5YmQ2MDBjODg3NTQyYWJiZWU3ZGM0MjY3ZTdiYzZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5NDA5OTk5OTk5OTk1LCAzOS4zNjIzMjAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JkOTRlNWZmZGUyMjQyNGZhODU4MmMzZTUzNTI4NjFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDkyNTE4NCwgNDMuNTIyMDg1MTAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xY2I3ZWJiYTYwM2U0ZjI2YjNiY2VhMDIzNGQzZThkYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjIxNzc0ODQsIDQzLjczODAyMDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0MmUxOThhMTk0ZDRiNjM4Nzk2Y2NiNTdlY2JhMzdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjYwMjQ1ODk5OTk5OTk0LCA0My42NTM3ODgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMWVjOWUxZDM2ZTc0ZmM3OWM1MjM4ZjMxMzU5Y2UxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMxNzg0MTUsIDQzLjg3NjUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTE1MGI1ZmY2NTk5NGU1MzljMDlmOTc0NDVmZWY2MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zMzM4OTAwMDAwMDAwMDQsIDQzLjgxNzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDFmNTM1ZGI2NzU0MDc0OTUxODE3MjcxYzU3MjMwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM0MjMxNTgsIDQzLjkxMjczOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4MDdiM2VlYzQ2OTQ5Njc4OWQ3NDQyNjc4ZWFlMzBhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQzNDM5Mzk5OTk5OTk0LCA0NC4wMjU1MjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDYyZTU4ZGU0ODc0MmFlYTgzM2Q5N2IzMjlhMWM1MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM0ODA4MzksIDQzLjcyNzk4Nzg5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzhiMmM0MjdmN2UwNGNjZGJiYTI2YWUxOTNkNzg0ODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNTA2NTg3MDAwMDAwMDQsIDQzLjkxMDM0Mjc5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTE3ODE5ZjJjNmQzNGIxMWI1Nzc1NjFjMzY3M2Y0NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA0NzgwMDAwMDAwMDQsIDQyLjkwNzQ4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2NDc5NDc4NjJlNjQ0ODU5MTU3Y2M5YmU4MGRmZDU5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzkzMzU1Mjk5OTk5OTk2LCA0My43NDIyNzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZWE3ZmQzMzM4YTE0YjkwODk4ODM3NTAxYjYzNjc1NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQxMTgxNDQsIDQzLjkwNDUxMDIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWYxYWM4YmEzMTBiNDZhZTgyNTA0YjBjNjhhMmU2NGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NTM1NjA2LCA0NC4yMTE5NzczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDczNDg5ZGMxMTQ0MTMwOGIzMzVlODY1YWQ2MWE0YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ2NjI4MzM5OTk5OTk5NSwgNDMuODM2NjkzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2MyYTg1MGJhODFkNDlkZTk0OWE1ODEzODJiNGUyYzEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40Nzc4MTExMDAwMDAwMDQsIDQ0LjEyMzg4M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjE4MmMyMDQ2ZjE4NDU3MWJmY2RhYzFmMjg2MGZjZDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzgxMTgxLCA0My43NjA2NDc2MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VlMjQxOWYxZTQ3YjRiZjM4NjBiNDgyY2E2Y2Y0ODcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDg1NTc1OCwgNDQuMzYzNjU1N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDY2ZmUyYzc3NTg0NDIzNmJjYWY5Yzk1YjQ0ZDAxMDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDM5OTU2LCA0My43MTg1NTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lM2U0Yjg4MzU3MTU0ZDU1YTYzMmZmMmI0Mzk3MTJkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwNTkxOTM5OTk5OTk5NiwgNDQuMjE0NDgyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTVkMzY5YWEwMzQzNDQ0ZGFiMDE3NDRmOWU1MGFjOWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjQ0NDAwMDAwMDAwMDYsIDQzLjkzMTk0MDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWU0NzJiMTRhZDU0NGVjNjhkNzM3MzU3NWVkODg5MjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjY1Njc3LCA0My42MDI3MDQ2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80N2RiZmI1MTAxODM0NjU0OGViMDk1MWZjNGRlNjZmMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUzODU5NzcwMDAwMDAwNCwgNDMuOTMxNzQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGE0YTRmZTg3MmNhNGJiMTgzOGZlYTNjOGFjMjcxZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NDA1ODg3MDAwMDAwMSwgNDMuODk0MzIxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmQ2Yzg4OGQzMmEwNDUxNWJhMGQ5Y2E5NGI0M2Y4YjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTI4MTc0OTk5OTk5OTYsIDQzLjc5NzQ2Mjg5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjljN2M5OWFiMDE0OTU0ODI2ZDc2YzU4NTNkMGFjYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NDE3LCA0NC4wOTk3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTFhNzI5MWVjOWI5NGYyOTllMDU4MWQ1ZTU4OTI5YTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTczNjc1LCA0My4xOTQ5NzMxMDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI3ZDc3ZjhhMWFhZDRmOTU5MWFjN2Y5NzljNDA5NWRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTU3NzAzOSwgNDMuNDM3MTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xY2YxOTkwNGRlZDg0MDU5OTQyNjMxZTQ5NzMxM2VkMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU2MTI2OTUsIDQzLjYwNDI2NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJhMmRkYWVlMTA3MTRlZTdiNjY5ZjQ0NzM4MzAyNjJhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTY2NTU1NCwgNDMuODg0MTc4OTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYWM5NTI3NDExMWM0N2YzYWJlMDFkMjQzNjVjYzYwNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU2Nzg5NjgsIDQzLjg0MTU4MTcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjM4ZWIxYmE4YWZkNDBkNTgxMGU0N2UyMzhhMzJkMWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzgwNzM4LCA0My43NTg5MTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYWRiYTg5Yjc0MDY0ZjUzYTYyODI5YTMyODIyY2NhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwMzMyMzgsIDQzLjk5NDgwNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxMWFlYmMwOTRiMTQ0NjZiYWQ1M2FjNTQxZWM2N2QzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjA1NTI3NywgNDMuNjEwNjI2MjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjEwNjA0OWE0MGY0ZWU4OGNkYjNkMmFhNzI3ODY3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNjk0LCA0My44MzQxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWU2Y2EwN2ZiMTBiNGE3OGJjZDU1ZjZjMDU4MmIzNWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTAxOTcyLCA0My4zNDY5OTE2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YjU3OTViMmQwOTk0NWUyOTdjNjQ0YTM1OTJmNjg2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNDc5NjIwMDAwMDAxLCA0NC4zNTE1NDAxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjliYzViMDQyYWE0OGUxODU2OTMyNzJlYjNhOGY1YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNTc1NDYsIDQ0LjA5MjY1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5NTRjNzU1ZDZjNTQ5ZDY4OTAwMWMzMWI4ZWZjNjI3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjE5NzU1NzAwMDAwMDA2LCA0NC4xMzA1Mjg3OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTNiNjJiOGYyY2YyNDk0YWFjNDEyMzNjYzBhMjZiNDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42Mjk1OTc0OTk5OTk5OTYsIDQ0LjE0MzY5Nzc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMTE3MWZkMGIzNjc0NDg4OThkODQ4ZDQxOWY2YzZhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzMTk0LCA0NC4yNjkxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2UzNDY0NjQ5NWI5NDJiODgwOWQzZGVmYmJmNWVmMGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MzcyMiwgNDQuMTI0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FkMmI1YTk0OTEzZDQyNGQ4YjM1NjgxOWEzZTYzYzhhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjQ2NDU5NSwgNDMuNDAzMDgzOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDIyMTM5OTdlNzc5NGI4MTg2YmUyN2NiY2ViMmRlNWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDg5ODQ3LCA0My42Mzg0ODE3OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwNjI3NTllN2VjMjQyYjliMDk3NzVlN2ZkNmI3YWYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjQ5MTY3LCA0NC4xNTU1NTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4ZWM0ZDAwZWFjNDQ4YjY5ZTA5NTMxNjAxZDg5Yjc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjYxMjUzNCwgNDMuNDIwMzM5ODk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kMmE5YWYyYzJhMGE0MDAyOWEwZWY5NDhkNjJmNDQzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY2NTU5MjIsIDQ0LjAyNTIyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDM4MTQ5MzRmZDdjNDY5MDljZDVlOWRkZjI3MGU2NmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NzA4Njc3OTk5OTk5OTYsIDQzLjQ5ODI2NzRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzExYWQ0NTVjOWVkMzRmZWFiN2Q3OGRhNzhkZTBlNTY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjc0MTIwOSwgNDMuNTE3ODczOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWQ0Yzk1OGFkNzFlNDliNjg3ZDNlNjdiODEzMWQxNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42ODUyOCwgNDMuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAxZGMzYTViODRlYTQ5MmZhZTk3MTA4YjU2NDBmZWFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjkzNzU3NzAwMDAwMDA2LCA0My4yNzY3NDc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNjRlZTczZTBjNzU0YWFlYmEyYmI3NGY2N2VhZjM5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY5NzkwNDEsIDQ0LjIxMzMwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwMmE3YWYzZDFiZjRkMzhiNWY2ZjE2MGU1MWY3MTc3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzIyNTk2OSwgNDMuODg1MDA5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ3MzgyOTBlZmQwNGM3NWFiNWYxZDBhZGM2YWM0NWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MjI5MzEsIDQzLjUyMTY0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZmZDk4NjlkNmQyYTQ1NzRiNTRhMzQ5ZGE3MjQ1ZTM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzM0MTQ4OSwgNDMuMDM3MDI4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTBhODJkY2RlZjU0NDVkNmJjNjY3MDVlMmRkNzU5OWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDAzMjU4OTk5OTk5OTUsIDQzLjE5MzI2NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5MGExNjQyNzY2NDRmNzM5MThhMGFhNzkwYzQ4ODE4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzQ0MTU0NiwgNDMuMzUxMDExMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjRjMDNiY2VjMDNjNGNlMzliNWRkZjBmYzBkOGNhNWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NTc0NzAzOTk5OTk5OTUsIDQzLjcxNTY4OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QxNzkwNDBjMjM1YzQ3ZDVhMmFkZGM1ODlhYjY0NDJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc2ODQ2MSwgNDMuMjYwMDE0ODk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81OWI0MTQyMWFlNWY0NjlmYWIxODQ0MDE0Y2EyOTA4OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc3NzM4NTUsIDQzLjQ0NDI0ODVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2ZmFmZmI2NmNkMjQwMTI5NGMxODZiMTBhMGVkMjYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzk4NzExNDk5OTk5OTk2LCA0My42MzkzNzU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTM4NmU0NzU0ZDc0YjUxODVmODY0ZjExM2RiYjQ4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMjIyNTc5OTk5OTk5NSwgNDMuMTQ2MDU2MDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MTE5MTBhMjVmZTQ0MjY5ODRkYWU2YmRjOGZmODk3ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMzQ0NTYsIDQzLjc3MDYxNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1NjcxZDFkMjkxNDRhNTk5MDdkZDA0ZjFmN2NmMWJkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODIyOTM3NCwgNDMuMTExNDM0OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NmZTBmNzkyZmEzNDQ1NTk2OGFjMjhlY2I3Y2IyZDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzU2MzEsIDQzLjE1MzExNjQ5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRlMzczZWYwNTU3NDc2MmFjMTM2NTA4MWU1MWM0NmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzY2NDYxLCA0My42MDc5MTg3MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E0MGYwNGFhNmI4NTQzYjdhYWQ2NTZlZDExOGVjZDAzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODQxNjEyNSwgNDMuMjA2Mzk0MjAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84Yzc2ZDA5YWNlZWE0NDQyODY3N2I3MTIzY2Y2NDE5MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg2MDI4NDcsIDQzLjI1MTQwNDc5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWEyODE5YTM2ZTY1NGZmZmE2OWQ2NmJjMDRmMGViYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44Nzg4MzQ5LCA0My4xMDc0ODE4OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYxMDc1NjQ2ZmVkZDRlNzQ5ZDA0ZDk3OWUxNzZhZDVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjQ2MTExLCA0MS43NDEzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JjY2JmMDU3OTg0ZDQ5NTI5NzRjNWU3YTVkOGNjY2QyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMzAwNzc3MDAwMDAwMDA0LCA0MS43NDI2OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3NWI5MmU3MjVlZTRiYjJiMDMzNDg1MjJmOTc2NzIzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM5MTY2OTk5OTk5OTk2LCA0MS40ODYxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NiNTQ1YmQ3ZTcxZjQzYjFiYmEyM2ZkNzQ5MTYzZjU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODYxNTIsIDQxLjMzNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGQ0ZDJkZTdhZTg3NGYwMGE1YzUxNGQ2MGQ0NTBjM2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC42MzExMzIsIDQwLjA3MjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWVjZWYyYmJhMGIyNDQyNjhjNmJiYjU0MTdiNmQ3MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MzUsIDM5LjIwODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjBlYTMyNzQxN2Q0NGMxN2FmNTgzM2E5MTdmYTVlNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NDUsIDM5LjQ2Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzVmMWMzYWMzMzkzNDNjZjllYjhlZmVlYzMzZjZmZWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjY2NjcsIDM5LjI4MzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmM2MWU4MWMxMDhmNGUwN2JiMjAwMGRmZGQ2NGFkYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NzM5MDk5OTk5OTk5OTUsIDM5LjE1MzU1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTAxMTZiYTc5ODYyNDk4MmE2NTEyMDc2MmJhMGE0M2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NzQ3MjIsIDM5LjQ1Nzc3ODAwMDAwMDAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWY0MjIwYWYxNGM3NGZhZWI3NGM3ZTkzODk4NTdhNWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODMwNTU5OTk5OTk5OTYsIDM5LjM4MzA1NTk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDIwMTIxY2E2OWJlNDI4YzgyODFlYmM0MmQ0NzU2NmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODM5NDIsIDM5LjA2NjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzc4NDU0YzZhNWE5NGE4NmI4MDc2ZTU0Y2EyZWYxYzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODc3NzgwMDAwMDAwMDQsIDM5LjI2NjExMDk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjIyODUwY2E5MjljNGE4N2E4Yzc0MWUwMzFiNWU5YzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44OTI1MjcsIDM5LjIzMzY4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTMuNDQwMDAwMDAwMDAwMDAxLAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTY4ZmE1NDE1NzU4NDk0YjgxYzEyNTY3N2I3MjUxMGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MDUsIDM5LjQxNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5MGI4NGM3ZThkNTRlNjQ5N2UyOTk5ZDgzMmRkYzRlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTIyNSwgMzkuMzgyNzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZTQ0OTJmYTdjMTA0YWU4OWI0MzQ0OTlhNmYzMDU3YyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkzMzg4OSwgMzguODM2OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDQxMDc1YTM4NGM0NGUwOGI1NzMyYjAwNWYwNGNiMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk0NjM4OSwgMzkuNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2YmI5NGYzMjhiYzRmNzM5MmY4NjRjNzQxYzkyMTIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTY1LCAzOS4zNjc3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZkYmIwZjIyOTdkODQ3MTNiMzExY2I2ZDQ1YjM0MDFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTgzMDU2LCAzOS40NzYxMTA5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QzODY1MDJiYTZkOTQ0ZWFhN2ExZjEyYTViMmRkMTEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTk0NDQ0LCAzOS4wMDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYTEwMWY5OGJhZWM0NzhmOTFkNDE5MmEzMDg3Nzc4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAyMzk3MiwgMzguOTM2OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iOWE5MDFlMWU5MDg0MGRkYWM3NDc5M2Q0ZGVhYmU0YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAzNDE2NywgMzguODk0NzIxOTk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZWQ1MTY3ZGQxMDE0ZjY5YTk0NmJjZmU5Y2Y5NGMxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA2NTU1NiwgNDAuMTc0MTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OGFkOGNhYWQ3ZDI0YTZlYjNmNmRmYzY3OWQ2ZjczMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk1OTM0ODk5OTk5OTk5NiwgNDEuNzQzODQ2OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYjdmZGE5YTI3MjQ0ZDU1YmY1MzI2ZTk4YjY4OTBkMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk4ODMzMzAwMDAwMDAwNCwgNDEuNzM4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YzJhMDJiMmZiNzg0ODM5OGJkNzgxNzVlZDBiMzhhMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjA0MjM2NTk5OTk5OTk5NCwgNDEuNzY0MDk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMjA0YWQ1YmU2OWM0YTlhOTgxNTFiYmFhOTlmZmMyMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjExNTI3OCwgNDEuODI4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNjQ3NDNlOWRlNzI0N2U0YTQ3YTQ5YTA3MmM4MjMyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjEzOTk1MSwgNDEuODUzODc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NjNkZjZkZTA5Y2M0MjY1YjNjMzQyMDZhNjJhYzI5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjE5ODQyMzc5OTk5OTk5LCA0MS42OTk5NjQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMTNiYzBiYWIxNzE0YjgyODgzZDA0NmJhMzM5YzQ5YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI1MzI3MTk5OTk5OTk5NiwgNDEuOTAwMDQ3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OGQ4YjZiMTk3Mjg0N2EyOGNmMzExMjIwMjU5ZjUxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQwMDgzMywgNDEuOTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZmViODg5N2Q4NGI0ZGE4YmVlZWFmYjRkNzRkZTRlOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjUxOTcyMTk5OTk5OTk5NCwgNDAuNzEwMjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWM2OTc1YTQ2OTg0Y2U1ODM5ZGI2ODI5YWQ0NTk0NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2NSwgMzguOTg4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMy40NDAwMDAwMDAwMDAwMDEsCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMjc0ZTRlMDMzZGI0ODg0YmFmMTcxZjEyN2MwNTE5MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIxMjUsIDQzLjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEzLjQ0MDAwMDAwMDAwMDAwMSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzMmZiNDM4YjBmYzQ2NWRhMGFhM2NjNGEwZWEzM2IwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDIsIDQwLjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83OWFmODZiYTkxYzQ0MGVjOGViMTRhYmVmMzQ1NWIwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA1NDE2NywgMzkuOTQ2Mzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDVmM2UxYThlZWY0YmQzOTRjNzk3MTE4NGMyYjhjZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjY0NDcyMTk5OTk5OTk5NCwgNDAuMjI1ODMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zOWRjZDE3ZTJjNzE0MjcxOGU5OWMzNDhmZTU1ZTBiYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwMjUsIDM5LjE3NDcyMTk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjY3MDk5OGU1OGViNGFkM2JiYzBkNTQxMjVmMjU5N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MDUsIDM5LjI3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRjZTU3MTE4MjNlNDVhMDhkZTczNWQ1YmY0MTc2ODAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MTU0MjEsIDM5LjM5MDIyOTk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGJlMzI4ZjI3OWE3NDY2NGE1NWVmOTU4OGFhODBhNTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjExMTA5OTk5OTk5OTYsIDM4Ljk5Mjc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmExNGU3OTgyZjA4NGYyMDg1YTkyNjQ1ZjQ3ZDkxOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjYxMTEsIDM5LjU2Njk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWY2NzgzZGZjNWIxNDU3Mzk0ZjZkNzQyODliYTExMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NDE2NjY5OTk5OTk5OTUsIDM5LjM2OTQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmE5YTZhNDYzMzZlNGM1NWJiYzAxMzJjYWJjNWViNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTA4MzMsIDM5LjExNDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY4MjAzZTc4NDQ2NGI1YWEwZGJjMzM4NmEyNTNmN2UgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NjMwNTYsIDQxLjkxMzQ3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYxNzlhZDNmOTEyNDE5OGI2Nzk4NTJlYThiZDFiNzIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yMDY2MjE5OTk5OTk5OTYsIDQxLjg3NzY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZWNjZGY3NGFiNjQ0NmI3YjRkYTFmNGI2MGQ5ODNmYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIyMTU1OCwgNDEuODk5NDUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NDAyNjNjMjIyNWU0Nzg0OWQ3YmZiYjRmYzk5ZmI2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjMzMTExMSwgNDEuOTM0NzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDRkYWE0YWJmMGE0MjBiYWY3MTk4YzA4ZTIxZjg0MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjM1MDc3NiwgNDEuODAxMzM0MDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYTc5NDAxNjYxMzE0MTM1YmUyNzU4YjY3ZWY2ZWNhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQzMTI5MywgNDEuNzYzMDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMWZlNDc3OTIyZmI0YjdlYWFlZDJlYTIxYjcyMTk4MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgyMTY2NywgNDAuNTAxNjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YWRlZDhiYWUzNzc0YmY4OTUzODRhMjRkODZlZGE1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjksIDQwLjQ4MzAwMDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGVkZGZkMzZhYTgxNGQwOTkwYjVhMWIzMzYyNjYzMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTk5NDk3OTk5OTk5OSwgNDMuMzI3NjE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODc3ZTJkNjk0ZGIwNGYwNGE5YjAwYWZjYTk2YmY3ZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NTEyMjkyOTk5OTk5OSwgNDMuMjI5MjAxMjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjlhNjgyOWNmYmE0MTdmOTljMGI2ODY2NWZjMDQ3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk0Njg5NDUsIDQzLjE3MjEyMjIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODZlMzA4MjVjZmYwNDEwYTk2NDk1MzRjNGVhZjM1MmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NjgyMTY5OTk5OTk5OTYsIDM5LjQ0NzEzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTUwOWNhZDhjZDI3NDc0YWI1MTJmZWFiYTgzMzRjYzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xODQ3MjIsIDM5LjA3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iNTQ4MjY2NWM2Yjc0ZGMyOGVkNDVmMDJiNzUzZDFlNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI4MzYwOTk5OTk5OTk5NiwgMzguOTUzNjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTU5MDg0NDRjYTg0YTVkOTQ3ZTA5ZDczNTI3N2NjZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk4NzM1MTAwMDAwMDAwNCwgMzguNzE1NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZWM3YjM5ZGMzMTg0MGIzYThmZGU3ZTdjZGM2MThiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5OTE2NywgMzguNzgxOTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iODdlZGFjZTYwOWU0MzZhODdkZWM2ZGJhYzg0N2I1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA0NTI3OCwgMzguNzU2MTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85OTVlNGMzN2M3NTg0NjJjYjljZjNkN2U3Y2U1MWU4NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA1MTExMSwgMzguNzA2Mzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZmExMzJmNmNhMzU0ZjJmYjk5OGI4MzJkZGI2NTJhMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjE4MzMzLCAzOS42NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2UyMzA5OTA2NDdkNDVjZWJmNmI0MGFmZDM5YzU3YTYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wNzU4MzMsIDM5LjM0MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2OTc5YzE3ODg4NjRmYThiNWUwYmU5Yzg0M2JkNzIyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTE2Mzg5LCAzOS4zMDE2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVmNDIyNDM0ZDFkNjQ1ODNhMGUzM2JkZDFjMWUyOTFkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM1LCA0MS4zODM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWMyYTU0NmQ0ZmM1NDZmN2FjZjRkMDAxNTZhYjJjYTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTQ3NDcsIDQwLjMxNzY4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmRiNmMxZmJkMDdmNDY5ZTgxZGZlMjM1OWNkM2NmYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTMzMzMsIDQwLjMxMTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWU2MjlkYTI5NTBlNGFjMjhlZmU4NTk5OGRhMjgzMmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTc1LCA0MC4zOTIyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE4ZjlkZTY4N2Y4NjQ1NThiNzljYmNjYTgyZmJiZGVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDExMzg5LCA0MC4yMTcyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY4NmUyZDkwYWU1YTQyMmRhZWZiY2NiMmNiYzdiZTYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDQ2MTEwOTk5OTk5OTk2LCA0MC4xODMwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA0ZGQ4OGY0MjQ0YjQ0MTc4MWExYjlhNzVlNjkzN2ExID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY4ODg5LCAzOS40OTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYTQ1YTNiOGU0Mjk0ZmU4OTg5Y2RlODllMmMyZWExYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA3MjIyMiwgNDAuMTg4NjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTU0ZGFlZjNlZTQ0MmRhOTQ4MTQxMmI2NmNlM2JmNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA4Mzg4OSwgMzkuODYxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MTE5MzBjNjM2NDY0YWRhYmJmMDhjZDllNzVjNWRjZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA5MjIyMiwgNDAuMTEwMjc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMTBkYTcwYjcwMzM0OGIyYTNiZDg1YzBlMWY4ZTEyOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM4MDczMjMsIDQ0LjE5MDg5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VmMWRmMGQwZTVkZDRlZDNiNjkxODQ2ZDdjYzZiOTJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY3NzM0OCwgNDQuMzczMDIxMjAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOWIxMDA3NGRmNDE0N2U0YTE4YzEyZWU2NmY4ZjA3NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ3NDY4LCA0NC4yNDIzMjk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZmZmZmIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYmU3ZjhlOGFiN2E0MDYxOTRkODMxZWQxMWZiYTM0ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ5OTEwOTgsIDQ0LjE1MTI5NDc5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzU5YThkMWQ5ZDFkNGUyZWFkY2Y2OTk4YzdhMWU3NTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjU0MDE3LCA0NC4yMDkyOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2MjRkZTRhYzcwNjQ0NGE5MzNlNTE4ZGQxMDgwOWY2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTQzNDg4OCwgNDQuNDEzNzU3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWEyNWQxNTJjMzExNDhmYjhjNDY1ODhiODAxZjYyYTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzAxMTQzOTk5OTk5OTQsIDQ0LjE0MDM0ODEwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYThlODY2NDYyMDljNGNiM2EyY2FkZjI0MWU4Y2NiMDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NzEwNzYxLCA0NC4zNzQwNTkxMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmZmZmYiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RmOGYwYjkwMWEwYjRmYTQ4ZmJiODBmMDhjMWVkNjNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcyNzc5NSwgNDQuMjk3MzYxNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTUwZDk1NmQzNjFiNDI1OWIyOWNkMmI1YmVmZjc1YzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI3ODYsIDM5LjUwMDk4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWZjZWZmNTVhOGE1NGNjZTk3YTQ4NjZkYzBkYzU1MWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzM5MTcsIDM5LjUwODA2OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjUyMzFiOTE2ODMyNDMyZmI0OTgxMDA5NWQ0ZDU5MDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzODksIDM5LjM1NjYzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjBmMzZkMTgzZDliNDk4ODhhODUyYWUwZWZiOWM3N2IgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzOTcsIDM5LjMzNTMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjJjYjUxYzNhYTM2NGI3NTkzYzk2NTQwZGNmOGZjMjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDk0MDk5OTk5OTk5OTUsIDM5LjM2MjMyMDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZmZmZmZiIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGNkMzg2MjA4NzRkNDMwMGEzOTE1ODdhNDNjYWY3ZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wOTI1MTg0LCA0My41MjIwODUxMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI5ZjZiZjRkMmIwMzQ0YzU5ZTYyNGQyYjI1YmI3NTU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjE3NzQ4NCwgNDMuNzM4MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWU3N2VlOWRkNWY3NDBmMDg1MGI5ZTVhMWUxZjA3MWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4yNjAyNDU4OTk5OTk5OTQsIDQzLjY1Mzc4ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZkYzgyMDRmNDM4YTQxMDZiNDIxYzc2YzkyY2NiMzRkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzE3ODQxNSwgNDMuODc2NTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82MGFlM2Y2YjYzZjk0NjNlOTEwOTFlZDkyNjc3ZmU2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMzMzg5MDAwMDAwMDAwNCwgNDMuODE3MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I3M2IxOGMzNDNjZjRkY2Q4YjEzYTVjNTdiYmQ4MzJiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQyMzE1OCwgNDMuOTEyNzM5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzcyMDMwOTZjZDczNDM4OGI1ZGI4YTU3ZjhlZTIzYmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDM0MzkzOTk5OTk5OTQsIDQ0LjAyNTUyMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhlOWQ2MzcxZjJlMDQ3YzJiMDJjNzE1ZTJkNTJmZGE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQ4MDgzOSwgNDMuNzI3OTg3ODk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MWI1MGE5MWE2ODU0NmQ2OGQ3MDdkOGNiM2I4NWMyNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM1MDY1ODcwMDAwMDAwNCwgNDMuOTEwMzQyNzk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZjgxZDlmMTM1MjA0ZmViYTBmZmY2MGQ5YmE4ODI5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM4MDQ3ODAwMDAwMDAwNCwgNDIuOTA3NDg0OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDA3YmE5NzQ1ZmY3NDk2NWI2YWE4YjNkMGQwYjg0NmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zOTMzNTUyOTk5OTk5OTYsIDQzLjc0MjI3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2MWI0OWJjYzQ2NDRjYTdiNzM0ZDlhZjQ0ZjVhYjQwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDExODE0NCwgNDMuOTA0NTEwMjAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZmIwZWE1YzRjMDM0OGIyOGIyNTRmZTMzOWQzMGUyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ1MzU2MDYsIDQ0LjIxMTk3NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RjMWFjZDYyYjQ0MzQyZTM5NzhkMDEzOWNjMTk3NGU3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY2MjgzMzk5OTk5OTk1LCA0My44MzY2OTM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZmJkZmFlMDJiMWQ0ZWRjOWFiZjQyZWQwODU5MjMxZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ3NzgxMTEwMDAwMDAwNCwgNDQuMTIzODgzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YTMxOWUyMDI3MGE0MjFhOGE2N2ZmYzhjMzViNjNmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ3ODExODEsIDQzLjc2MDY0NzYwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTVkYTFlM2VjNjRmNGEwZDk5ZGJjYjU2ZGJlZmY2OWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40ODU1NzU4LCA0NC4zNjM2NTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZTM4NmZjNTlhYjc0MDJlOThkMDdiZWYwZjY4YmUzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwMzk5NTYsIDQzLjcxODU1NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I5MmYyYTNkNTljNzQ0N2FiY2JkNjBmNDk5YmQ5YjI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTA1OTE5Mzk5OTk5OTk2LCA0NC4yMTQ0ODI2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYjUzZWRlOGMxOTA0NjIzOTZlZTNjMThlOWU4ZWViNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNDQ0MDAwMDAwMDAwNiwgNDMuOTMxOTQwMDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZDY5ZTA3MTJjZGY0MDMyYTVkMjY0NWU4ZGVlMmYwNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNjU2NzcsIDQzLjYwMjcwNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2VkNmQ1Mzc0OGU2YjQ2OWNhYTdmOGIzMGI1YzFhOTliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTM4NTk3NzAwMDAwMDA0LCA0My45MzE3NDM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMDIxMTIyZWQ3MWE0MTVhYjQxYWFiMTk4Y2E5MjJhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MDU4ODcwMDAwMDAxLCA0My44OTQzMjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZjY3MzJjZjc0ODQ0NDk0YmY2YzhkNzc5NDRlMWI1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1MjgxNzQ5OTk5OTk5NiwgNDMuNzk3NDYyODk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhmMzMyOWIwZGMwZjQ0YzI5YTQxYzI2M2IyZDNiNDY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTU0MTcsIDQ0LjA5OTcyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZGQxOGIxZmIwMTM0ZDQ4OTIxYjc3ZWE5ZGIwMGFhYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NzM2NzUsIDQzLjE5NDk3MzEwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmRkOWE0ZGVmZDBkNGUwZDg2MzJkMDUxNzYzZjJjZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTc3MDM5LCA0My40MzcxODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExYjNkYzQ1Y2Q4MTRlNjg4ZjYzMGViMjY0ODQ0YzhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTYxMjY5NSwgNDMuNjA0MjY0MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTdlMmMzNGY4ZjlhNGQ1NGE4YzNkODNjZjhmMmIwMjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjY1NTU0LCA0My44ODQxNzg5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5OTIxNWVlNTMxZjQwOTdhZDUyM2EzY2Q1Nzg0ZTQ0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTY3ODk2OCwgNDMuODQxNTgxNzAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjBiY2RhZWYxZjA0MTg3ODkyMDJlZDkwZWFiNjUxOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU3ODA3MzgsIDQzLjc1ODkxNjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M4MGZkNDZiMDAwYjQyMTc4ZjY0N2Q3ZDBjNGRmZGY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjAzMzIzOCwgNDMuOTk0ODA2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjI1NmY0Y2M5MzYxNDJkN2JhZjBiNDRlYTgyM2NmNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MDU1Mjc3LCA0My42MTA2MjYyMDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZmY2NjZWZiMzRjYTQxMTZiMmZkMDYyODAyNTlkZTA0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjA2OTQsIDQzLjgzNDE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZWY1YmFhYmYxNzM0ZTgxYTE1NjJjYTZhNWI4NTQ5NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxMDE5NzIsIDQzLjM0Njk5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2ZDY3MGUyMWFhNjQzNjhhZWQ2NzRkMDY1ZWM1Y2Y2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjE0Nzk2MjAwMDAwMDEsIDQ0LjM1MTU0MDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RlYzdjMDc1MDgzYzRjY2Q4NzliMTU5MWQ0OGZmNDliID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjE1NzU0NiwgNDQuMDkyNjU1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDY5YjI0Y2M4Zjc3NGVjOGFjM2Q1YWFhNmI5N2QxN2MgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTk3NTU3MDAwMDAwMDYsIDQ0LjEzMDUyODc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZWI0YzAwZDdkYTM0ZDJlODhkNDE4YzlmM2Q2YjBmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYyOTU5NzQ5OTk5OTk5NiwgNDQuMTQzNjk3Nzk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk5MDg2NjBkZTdlNDRlMWM5YmZhNThjMWQyYmM3NjQ5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjMxOTQsIDQ0LjI2OTE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTcyODZiYWIzODU0OTM1YmE1MzZiYzIxZWFlMTRiMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzNzIyLCA0NC4xMjQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODFmNWE0Y2Q2OWU1NDUwZjg2MTQ1NWY3NzUyNDE5ZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDY0NTk1LCA0My40MDMwODM4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZWJiZTJhNTM2YTM0NmRjODM5OGZmOTk4MDJiMDBmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY0ODk4NDcsIDQzLjYzODQ4MTc5OTk5OTk5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGMyNGU2YmQ2NTEyNGFlYWIyNzg4ODAwMzdlY2QwODcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDkxNjcsIDQ0LjE1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQ2N2Y5MzJiZDNmNGU0ZWE1ODg1NDM4ZmJiZjk4MzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NjEyNTM0LCA0My40MjAzMzk4OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk4NDdlY2I4OTRlZjQxZmY4NWE3MDkwNzY3YWU5NTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjY1NTkyMiwgNDQuMDI1MjIzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Njc1NzU3OGYwMjE0ZDA3ODUyODZiMTVkMTIyYWU3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3MDg2Nzc5OTk5OTk5NiwgNDMuNDk4MjY3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmZiOWQzZmVjZmQyNGNlM2FhYmU2YzI0NGQ2YWRmZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NzQxMjA5LCA0My41MTc4NzM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYzQzZWM3YTdmYzk0MDEyOGI3OWU1MjY4NjU0MGZkOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY4NTI4LCA0My42NjY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjFkNWIxNGM2MjU4NDNhNDhjMDczOWIxNDQ5N2FkMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTM3NTc3MDAwMDAwMDYsIDQzLjI3Njc0NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3Nzc0YzBmMjM5MzRlMjhhYzkxYThlMTU3Nzg2Y2U0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjk3OTA0MSwgNDQuMjEzMzA0Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjQyZGM1Y2MwOGMyNDMwY2FlNzI0MzYxNjJkYzAwOTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MjI1OTY5LCA0My44ODUwMDk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81YTM2YzQxZTJkMjU0MTY5YmVkNGQ2MGFlMjYwYzY2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjcyMjkzMSwgNDMuNTIxNjQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2RiMDE4NDIwNWNiNGIzMjg1ZmI1Y2U4ODI1MTVkNmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MzQxNDg5LCA0My4wMzcwMjg0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81MTExYjQ2YzRmZTY0MmZhOTQ2ZDg5MjQ0NGUyNmY5OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc0MDMyNTg5OTk5OTk5NSwgNDMuMTkzMjY3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGFiNTgxMmQyOTYyNDk0NTkyMWZlMDlkMTNlNzM2ZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDQxNTQ2LCA0My4zNTEwMTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZWY0ZDA4ZjBhMGI0N2E5YTdhZjhkNGUxOWQwNzliOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc1NzQ3MDM5OTk5OTk5NSwgNDMuNzE1Njg5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjViYWM0YjhmMjQzNGEyOWIzNjA4NjJlNmE0ZTIxZjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NzY4NDYxLCA0My4yNjAwMTQ4OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAwYjM3MTRmYzI4YjQ3MzNhYmMzMDViMDgwZTBiZDZmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc3Mzg1NSwgNDMuNDQ0MjQ4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzFhNjdhYzVkMmM1NGU5NDkzMzJiNWM0MjRiODYwYmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTg3MTE0OTk5OTk5OTYsIDQzLjYzOTM3NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ0N2NlNjEwMzYyODRhY2RhYzcxOTY2NDgyZTEyM2UzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAyMjI1Nzk5OTk5OTk1LCA0My4xNDYwNTYwOTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MDNjYmI2NDRhYTQyMjNhZGVjMDIwMjJiYmRmOTVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAzNDQ1NiwgNDMuNzcwNjE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU5MDExNzNkZjllNDE4MThhOTFkZjc1ZDBhZTk4NTkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI5Mzc0LCA0My4xMTE0MzQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jYzMxMzZlOTJiMDA0ZTAzYWYxMThlNGI5NGJmNjFkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNTYzMSwgNDMuMTUzMTE2NDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hOTc3ZjMwMGUyMmM0MmE0OTVlMzEyYjcwZDA1MTBlNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNjY0NjEsIDQzLjYwNzkxODcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWVhNGM0ZTUyNWRjNDZjMzg2Y2ViYTA5NDZmZjI1ZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NDE2MTI1LCA0My4yMDYzOTQyMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhjODRhYWFhNmIyMDQxNGI4YzBjMzJlMWI0MGNiNTdkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODYwMjg0NywgNDMuMjUxNDA0Nzk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YzhmZWYwY2Q3ZTU0YjhhOGU1YjJiOWU2MTczNjQ4NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg3ODgzNDksIDQzLjEwNzQ4MTg5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM1MGM5OTIwYTczNDVjOTk5ZGI1M2E1NWQ5MmM2ZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yNDYxMTEsIDQxLjc0MTM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjIwMTVlZTM0MDFlNDBmZGFiMTM0M2M0NThhMDljZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMDA3NzcwMDAwMDAwMDQsIDQxLjc0MjY5M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAzMDdhMDAxN2U4NDdhNmIxNWE0YzNiNDRmNzBhMjUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MzkxNjY5OTk5OTk5OTYsIDQxLjQ4NjExMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU4NWU3NTNiYjYxNDA5NWEyNDQyYzJiMjRiOTg5MDIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjE1MiwgNDEuMzM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OTFlNTJhMWMwYmE0NTcyYWJjNWFlZmJhNGJjODY2NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjYzMTEzMiwgNDAuMDcyNjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMGU5MWE0MWFkMmI0M2I1YTc5YjJmYzY1OTkzZjdjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgMzkuMjA4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MmYxNDNiNjI2N2M0NjRjOTNjMThlMDhiZDU1ZWVmNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg0NSwgMzkuNDY3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZGQwM2FjZmRiYmM0ODk4YmQ0YzYxYzk5MWVhMGNmNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2NjY2NywgMzkuMjgzMzMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wOGU5MjI4YmZkMDU0MTY1YjQ4MmI1YzExNDYxMmM1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg3MzkwOTk5OTk5OTk5NSwgMzkuMTUzNTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zNzUzZjNlOWZlODU0MTFmOTFlMWRmNjBkMGJhY2I4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg3NDcyMiwgMzkuNDU3Nzc4MDAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMTBkNzczMmJkZjE0OTdiOGRlYTc3NDU4YTFhMTAzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4MzA1NTk5OTk5OTk5NiwgMzkuMzgzMDU1OTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MTU3YjEyN2ZmYzM0MTVhYjM0NTdmODJkNDJjMzc3YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4Mzk0MiwgMzkuMDY2NjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xYWZiY2Q4ZjRmMWI0ZGZkOTkzN2ViMGI1ZWM4MmIxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4Nzc3ODAwMDAwMDAwNCwgMzkuMjY2MTEwOTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZDYxMzdmZTBiYzA0ODFkOTRiMWExYjIxOTYzOWE1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg5MjUyNywgMzkuMjMzNjg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjgsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiAxMiwKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDNiNGRiYTIzOWQ0ZmFjYWI0M2QwMzJmMTJjZTAxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuNDE3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTc0NjI5MzYxNWU4NDNjZDk1OTdlOGU5OGM2YTExZGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjI1LCAzOS4zODI3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M1YWYzZWY1MmZkZjQxMmRiN2VhYzgwMjgxMTY5NDZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTMzODg5LCAzOC44MzY5NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0ODdlODE1NDA1ZTQyYTA5ZDBkNTNmMzI2MzNmODY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQ2Mzg5LCAzOS40MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGVjMmU3NTE0NjJhNDJjYzhmYTg5ZDkyZDAwMzk2OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NjUsIDM5LjM2Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDY1OTI2ZmIyZjYyNDczYmI5MmM1NGM4OTIzYWFmZTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45ODMwNTYsIDM5LjQ3NjExMDk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2U4OGQzMzM5YjIwNGFjMjg3NjcwNTExZmEzMmM3YTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTQ0NDQsIDM5LjAwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxZWE5NDNiOWJhNDRhZjk4MGJjYzFkYWE1MzkyNTYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDIzOTcyLCAzOC45MzY5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y5MDQwMWY1YTMyMDQ1OTE4MGU4NDA1YWFhMTQxY2I0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDM0MTY3LCAzOC44OTQ3MjE5OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JmZTVhM2M5YjgwNTRiNzFhYTgyNDZiZjNmOWFkNjRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY1NTU2LCA0MC4xNzQxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM2NmE4MzBjNTkyMTQ0NzBiYmRjOWFmMmVkNzlkYWRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTU5MzQ4OTk5OTk5OTk2LCA0MS43NDM4NDY5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4NDY1MTU2OWQwOTQyM2ZhYzA1ZDAxNjhhODU1OTg3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTg4MzMzMDAwMDAwMDA0LCA0MS43Mzg4ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg2ZWI5MDI0NjgzYTQ3NTlhYzRkZGZkZTBjYTEyYmU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDQyMzY1OTk5OTk5OTk0LCA0MS43NjQwOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzlmZDgwZWJmMDAxNjRhZmFiY2NhMmMyNjQ4NGQ3NmFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTE1Mjc4LCA0MS44MjgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JjMzUzMmEzYjIyMzQ1MTc4NjE2Y2VlMmM1YWE3N2JkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTM5OTUxLCA0MS44NTM4NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFiNzc0YmJjNDc4ZDQzN2Q5YjU2NzhiMTQwM2RhMDdmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTk4NDIzNzk5OTk5OTksIDQxLjY5OTk2NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ4NjMwY2Y3NzJjMjQzMGI5MTU2ZmY3NzhmZDk0NTUwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjUzMjcxOTk5OTk5OTk2LCA0MS45MDAwNDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2ZmNmOWZiZmQ4MzQ4OTJiN2EzNjkxMmZlOGEwYWEyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNDAwODMzLCA0MS45MzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxNzhkOTcxNmExZDQ1ZDc5MmIzMWZlNjdhYzc1NzVmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNTE5NzIxOTk5OTk5OTk0LCA0MC43MTAyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U2MWRlNWEwMzRlZTQ1Y2VhNjVkYzQxZDYyNzA0MGE2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODY1LCAzOC45ODgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuOCwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDEyLAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3NWM4NGQ2ZjhjYzQ1YTk5Nzg1YWE3M2U1OTlhZTcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjEyNSwgNDMuN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC44LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogMTIsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYmYwMjJjNTkxMTUyNGIxYjgxZDkwZDk5ZTg3MDEwY2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wMiwgNDAuMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmExYTE2NmQ4ZTg0NGM2NmI5OTc0NTQ4MDFkYThiNzQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNTQxNjcsIDM5Ljk0NjM4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTkzMzNlM2Y2NzU0NTdiYTA1ZjY0YmZjZTEyZWVjMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjY0NDcyMTk5OTk5OTk5NCwgNDAuMjI1ODMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2JlMGQwY2M1OGJjMTRmN2RhYTcwMzg3NDQyNDZmNmNkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTAyNSwgMzkuMTc0NzIxOTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5YmI2MjZhYzZmMzQ5NjI5M2MzZjcxZTEwNjIwOWUzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTA1LCAzOS4yNzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDUxMjYzZTQ2Nzc5NGNlY2FlNTczYzE2OTRmNGM1NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MTU0MjEsIDM5LjM5MDIyOTk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85YjBlMGJiZjIzNGE0MDFkYjA3NGQxNDg1MmY3YzgyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyMTExMDk5OTk5OTk5NiwgMzguOTkyNzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ZmQ4OGQyZTg4NTQyN2RhNmMwMzM4NTEzZTIyODRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTI2MTExLCAzOS41NjY5NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQ5Yjc1OWQ2NDcwNDZlMTkyNjk3ODg3NmQ1M2E2NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NDE2NjY5OTk5OTk5OTUsIDM5LjM2OTQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NGUyYjgyMGM3MDM0YzZkODVlYzE1NjE5NDI0ZGMzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk1MDgzMywgMzkuMTE0NDQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUxZDU5OTM1MWFlODRhZmJiYWZiYzMyNTY0YzVhNjFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODYzMDU2LCA0MS45MTM0NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTJjNGYyODdjOTQyNGZlNmEyZjg4YjA4Mzc0YzkwYTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yMDY2MjE5OTk5OTk5OTYsIDQxLjg3NzY0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3OWU2MWNlNWMzMTRiMzQ4OTUxZmQyOTBhNmMzMzA0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjIxNTU4LCA0MS44OTk0NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDYzMzMzMDcxZjUxNDM5ODgzNDJmZDU5NTVjZDgxMDkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMzExMTEsIDQxLjkzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNzBmMjUyNGRhOTI0MzlmYTVmMTU0NmY2MGMyZjIxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjM1MDc3NiwgNDEuODAxMzM0MDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ExNWNhMWJiYzk1MTRiOTE5MjI1ZmY0NWQyMDdlYzMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNDMxMjkzLCA0MS43NjMwOTJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNWMzNDgzMTcxNWU3NDU3ZTgxNmNhYzA4Njg4ZWNmODggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MjE2NjcsIDQwLjUwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NjhhMzk0YmY4ODk0N2E4OWNkZjdjM2JlZTI0Mjk0ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjksIDQwLjQ4MzAwMDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OWY5ZDg0NWUwN2M0ZDc2YjA3NDk4ZDMxY2ZkZWQ2ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc5OTk0OTc5OTk5OTk5LCA0My4zMjc2MTg3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I4MjRmZjFiZjJlMDRjMTliM2FkYzZhNDc3NDk3ZWMzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODUxMjI5Mjk5OTk5OTksIDQzLjIyOTIwMTIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MDU1YTNiZGNkN2Q0MGM5YmY0MWVhNzFmYWZlZGQwYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk0Njg5NDUsIDQzLjE3MjEyMjIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NjM2OGY5YzY3YTY0YWQ2YTlmODM2YWI3MjlhMDgyNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk2ODIxNjk5OTk5OTk5NiwgMzkuNDQ3MTMzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5OGE4MmE5M2UwZjRmYjRhMTE2NWQyM2Q4MGM0ZThlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTg0NzIyLCAzOS4wN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YTAwMWEzY2YwYjc0ZmI5ODRkNjhiYmViMmZlZGI4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI4MzYwOTk5OTk5OTk5NiwgMzguOTUzNjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ2YmE4NDYwMWNhZTQ5Njk5YWViYWZjOGM0ZDg2NjlmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTg3MzUxMDAwMDAwMDA0LCAzOC43MTU0ODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTJmMGMwNDAzYWE5NGQ5ZjhlODVmOWY1MGJjOGYyMjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTkxNjcsIDM4Ljc4MTk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YTRhYzYyOGQ2OGQ0MGJhYmM5MjNmYTQ0MjhkYWMyMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA0NTI3OCwgMzguNzU2MTExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdlMGYyYjE4OGQ0YjQ4MTM4NzM3MzM0NGUyZDkzYzk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDUxMTExLCAzOC43MDYzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDhmOTgxOWEwYWVjNDE1MDk1NDY2OWQ1YTczZWU5ZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4xODMzMywgMzkuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjczNmI4NzI3NDE3NDM4NmIxYjAwYWRiN2IyNjQ1NjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wNzU4MzMsIDM5LjM0MjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDAyYTczOWNmMDRkNDc0MDhhZWM5ZDcwOTcxYTUzOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTYzODksIDM5LjMwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMWU5ODAwMDkyNzk0YjlmYmFkZDk4YjY1Mzc2YTkxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgNDEuMzgzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzQ3YmQwNjU0MjgwNGE0Njk5NWUxZDlkZjJkZWYyNjQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTQ3NDcsIDQwLjMxNzY4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kOTYzOWM5NTZhZDQ0ZjE5OWU4OGQ3NDkzY2VjODYxYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5MzMzMywgNDAuMzExMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UyM2UwZWIzODYwOTQzZDBhZmFlZjE0ZjY4NjA2ZDM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTk3NSwgNDAuMzkyMjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3MmYyYTk5OGE5ZDRjMDFiNjgxZmQ1MGI2M2M3NmUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDExMzg5LCA0MC4yMTcyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzI1NjEyOTJlMzAzNDkxNGI1MjBiOGE1NzQ1NzQ4NjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNDYxMTA5OTk5OTk5OTYsIDQwLjE4MzA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTE5NDY4YTQzYzE0MWI3YTEyY2NhNmFmYTc4OTAwNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA2ODg4OSwgMzkuNDk3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYWQwMzhjNzZlZjc0ZDU4OTRmMjMyNmYzZjhjNzQwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA3MjIyMiwgNDAuMTg4NjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ViY2FmY2Y5YzhiMjRjZTI5OWRmMmJhODUzMzk4YTU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDgzODg5LCAzOS44NjEzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk3ODhkMWFkOGZjNDg1NmE5OTE5YjcwYzJhMGIyMTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wOTIyMjIsIDQwLjExMDI3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iMjI5YzU4YTAxNDg0YWZmYjY5NDdlYzMwNjM1NDhkZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM4MDczMjMsIDQ0LjE5MDg5MTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2EzYjM0ZGFmMjhjNDU0YmE0ZjdmNGNiMjNkNjA1NmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40Njc3MzQ4LCA0NC4zNzMwMjEyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzk0M2ZlZjIyMzM2NDA4YjkwN2FlMWNiNzE1NGI4MGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzQ2OCwgNDQuMjQyMzI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNjdmZTFjMjUyM2I0MTc0OGIxNGQ0M2MxNjdhMjgwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ5OTEwOTgsIDQ0LjE1MTI5NDc5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZThmZWQ2NjZkMzA0MGU4YWUzNzY0N2JhYWJmMDM1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNTQwMTcsIDQ0LjIwOTI5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OGRlYWUxMzhkMmY0ZGYzYTUzMTZiMzhjNzhhOWZlMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MzQ4ODgsIDQ0LjQxMzc1NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDEzNmZjMzNiMjJlNDg0YjlmNDUxNmJjZjY5NzhjMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzAxMTQzOTk5OTk5OTQsIDQ0LjE0MDM0ODEwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mNTFhN2UyZTU4YjE0ZDg5OGIzYjFiNDgxMGQ2YTAzMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3MTA3NjEsIDQ0LjM3NDA1OTEwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80YWY0Mzg1NTI0YWI0OTc3OWNhM2ViZmRlMzEyMTE1ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3Mjc3OTUsIDQ0LjI5NzM2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjg2MWFiYTljMGFiNGZjMTk0MGM5YTVlM2YzYTRhODEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI3ODYsIDM5LjUwMDk4MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82Y2Y3NWJiMGNiYzk0YjQ3YTkxMzk5NWE4Yzk5YWQzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzMzkxNywgMzkuNTA4MDY5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MzY2E1Yjg5N2Y0YzQxOWY4ZjJhMzM3MjMyYTM5MDRhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5Mzg5LCAzOS4zNTY2MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTk5MjcxMzMzMmJkNGJjZDk2MGE5ZTVlMTMwMmRhNGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzOTcsIDM5LjMzNTMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83MmUxY2I5YTZiZGM0YTczODAzNDFhNDQ4ZjYyYmY3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAwOTQwOTk5OTk5OTk5NSwgMzkuMzYyMzIwMDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc5MjgyNWE3MjBjNDQ4OWFhYTkzNjVkNGMxM2Q3ZWIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMDkyNTE4NCwgNDMuNTIyMDg1MTAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlYTVkZmEzOGEyYTQ4OWU5MWVmYWYxNjU2OTMzNDFlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjE3NzQ4NCwgNDMuNzM4MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNTYzYzZmNGU5Y2M0NGYxOWE0ODYyNWMwZmYzMDk0NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjI2MDI0NTg5OTk5OTk5NCwgNDMuNjUzNzg4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTFiNDg5NTg2ODg0OTNkOGQ3ODgyY2UyNjFmNGEwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMxNzg0MTUsIDQzLjg3NjUxOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NmNhNTI2ZTlhOGI0ODc2YjU4MTBhNzRjZmViYTViZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjMzMzg5MDAwMDAwMDAwNCwgNDMuODE3MjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWQ0OGNkYTQwOWIwNDNkMThhNGIxOGE2NGQ1YzQ5MjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDIzMTU4LCA0My45MTI3Mzk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFkYTU5YzgxNGVmNTRhMjY5MTE5ZDk3NjI5YzY4ODYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQzNDM5Mzk5OTk5OTk0LCA0NC4wMjU1MjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzMxMDY0NWYyYjY1ZjQ2Mzk4NjUxY2U5NjE2MmNlNmFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzQ4MDgzOSwgNDMuNzI3OTg3ODk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzVhOTNhNmEyYjA1MjRhM2Y4NGQxYzFkNmY2MzFkYTMyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzUwNjU4NzAwMDAwMDA0LCA0My45MTAzNDI3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2RjZmRiYWNkOWU3NGU0ZWIzMzAwZmM3NWI5YjdjYTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA0NzgwMDAwMDAwMDQsIDQyLjkwNzQ4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDc4Yzc5ZmNmN2Q1NDcxYmExZmZkZjZkMTYzM2QzZjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zOTMzNTUyOTk5OTk5OTYsIDQzLjc0MjI3OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDIyYmViZjNkNmQ3NDcwMzhjZTE1YWI3MTc4MzI4ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40MTE4MTQ0LCA0My45MDQ1MTAyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmM4OTJhMDQ5YmZlNDJkOGJmY2ZhY2JiZjMwOTlkZmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NTM1NjA2LCA0NC4yMTE5NzczXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzdmMDEyOTMxNGViNjRhMDNhZWQzNDEwMTg5ZGYzNDI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY2MjgzMzk5OTk5OTk1LCA0My44MzY2OTM2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkwMTY4YjFmMjk2NjRjMWNiZjdlMDYyODI4MTg0NGRmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDc3ODExMTAwMDAwMDA0LCA0NC4xMjM4ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2U1ODNjZjc3OGY1NDJkN2FiYTJjZGIyNmY2MjI1ZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzgxMTgxLCA0My43NjA2NDc2MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTc0ZDJkZmJlOWFiNDg2YmE1NzhhODU1ZjZjNWRmYjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40ODU1NzU4LCA0NC4zNjM2NTU3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q2Y2I1MDZkNjUyNzRjYmQ5MTFhYzcxM2RhNTc4ODQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTAzOTk1NiwgNDMuNzE4NTU1M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMWQyNGRhNDk1N2Q0YTEyOWUwMTcxMThlOTVkNDMxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUwNTkxOTM5OTk5OTk5NiwgNDQuMjE0NDgyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTIzOGM2MDA0YmU0YjcyYjBjYTBiNjgyYmZjZDE1NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNDQ0MDAwMDAwMDAwNiwgNDMuOTMxOTQwMDAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3MzUxMDAzMjM3MTRmMDA4NDY0MzMyNjc0MmIyZTVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTI2NTY3NywgNDMuNjAyNzA0Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83NjAxZTg5YWRhMDY0MWQ1ODg0YTU0NjI0ZTUxNmM1MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUzODU5NzcwMDAwMDAwNCwgNDMuOTMxNzQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMjFiNTg1Y2E4NzM0Y2ExOGZiMjVmMzFlY2Y4NTBmOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MDU4ODcwMDAwMDAxLCA0My44OTQzMjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzliOGI0ZTJlNzVkMDQ5NDM4MzY2ZGU5NDE4MjliMzU2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTUyODE3NDk5OTk5OTk2LCA0My43OTc0NjI4OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMDE5NzIwYzI1OTM0Njg3YjY3M2UwMjA3MjFjNDA4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NDE3LCA0NC4wOTk3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NzkwOGJmMGE0YjM0ZjBjYmQ1YjBiYjZhODFlMmQ2NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NzM2NzUsIDQzLjE5NDk3MzEwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzIzY2I4OTA3NjU0YmQ0YTE5NDI4MjJlZmU4ZGMxMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU1NzcwMzksIDQzLjQzNzE4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84MzU2NTZiMDYzOGU0ODMzYWY5ODdmZjEyZmIxNzY5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU2MTI2OTUsIDQzLjYwNDI2NDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzI4MjFkODM1OWRiNGI5MmEzNzRiNzQ5MjEzZTU4ZGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjY1NTU0LCA0My44ODQxNzg5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzQzYzQxOGUxZmQ4NDg2ZjgxZTcwOTg5ZmU0ZGMxOWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41Njc4OTY4LCA0My44NDE1ODE3MDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDBjMDdiMGE1YzYwNGNlM2I5OGM1ZmFlNDI5YmE1N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NzgwNzM4LCA0My43NTg5MTY1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NmMDY3ZmZmMWQyODRkODNhNzYxNDBmOWI3OTM4ZWI2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjAzMzIzOCwgNDMuOTk0ODA2NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNmZhOWM4OTUzNzE0YmJhODJiZGJhMjdmMTM0NzIwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNTUyNzcsIDQzLjYxMDYyNjIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMWRmOWIzY2VmYzE0NzBmYTU0ZDVlMmI3NjFlNmM5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNjk0LCA0My44MzQxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMWY4OTM5OGRkZGU0OTBiODI3NmZjNzM1MTllZTgyNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxMDE5NzIsIDQzLjM0Njk5MTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2JhZGZjNjg2MmE3NDBhM2EwYjE0MWY3YmIyNjEyZWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTQ3OTYyMDAwMDAwMSwgNDQuMzUxNTQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNjY1ZjMyNTgyNDY0NjE5YTJkZWZkN2VhMTQ3MjhmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNTc1NDYsIDQ0LjA5MjY1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmY2MGNhN2EwOTIzNDI1ZWIyNzI3YWFjY2E5OWE3ZmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTk3NTU3MDAwMDAwMDYsIDQ0LjEzMDUyODc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU2NWUzMDc3YTZiYzQ3ZGNhYWU3NTJhNDhkMDIyOTg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjI5NTk3NDk5OTk5OTk2LCA0NC4xNDM2OTc3OTk5OTk5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zN2UxNjYzYTgxMjI0M2MyOTQxYjliNjBkZDYyMzUxMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzMTk0LCA0NC4yNjkxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NGM2OGU1NmFiZjI0MTQ5OTg2MjE0YzI2MWUxNzdhMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYzNzIyLCA0NC4xMjQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYjhkNzBhZmMwN2Y0YTg4YmUwZmEwZWFkNTUxNTMwOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY0NjQ1OTUsIDQzLjQwMzA4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOGIwNmRhZTEyNTk3NDIyNGI2ODNmN2Y5MjE1ZWMyNGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDg5ODQ3LCA0My42Mzg0ODE3OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWMyM2U3N2JlM2NlNDMyZmE2OTQ1NjE1MGIyOGJhZDEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDkxNjcsIDQ0LjE1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTdjMjZiZmNlZmU0MDMzYmVhYzMzZjc4YjUyZGYwNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY2MTI1MzQsIDQzLjQyMDMzOTg5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNDNmZWRlNjcyODQ0MmMwOGZiYTU5Y2Y0MTFlZTQ5OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY2NTU5MjIsIDQ0LjAyNTIyM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NjFjM2IyMTIwNmU0ZmNmODI5MDZlMjhlM2UxOGFhMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3MDg2Nzc5OTk5OTk5NiwgNDMuNDk4MjY3NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NTBmY2YyMTFiZjU0Yzk3YmRlZDJhYWI3NGI5NmI3ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3NDEyMDksIDQzLjUxNzg3MzldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQ5YjJkNzIxZDU5NGZmNjlmYzQwZDA5N2VkY2ExZmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42ODUyOCwgNDMuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMDE1OWI2OGFiMmEzNGFiNWJlM2M2YjM4MDNhODA0NzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTM3NTc3MDAwMDAwMDYsIDQzLjI3Njc0NzZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjBmOWIxNzIyMmQwNDg4OTk5YzkxOGVlY2ZiOWY5NjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTc5MDQxLCA0NC4yMTMzMDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2I0Nzg4MzYwNmJjNDRlYTFiZWQyYjNhZjFjZjM5YTA2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzIyNTk2OSwgNDMuODg1MDA5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yZmIzODkzZjY3MDA0ZWMwOGM0YTcyM2M1YjY5Y2MwZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjcyMjkzMSwgNDMuNTIxNjQ5OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84ZWZlMmNlOWE0MTA0NGViYmYxYWRiZWNiZTBjOTkxZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjczNDE0ODksIDQzLjAzNzAyODRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTE2ZmM5ZGZkMDM1NGE3ODljMGQ4Mzc3MmVkN2M0YjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDAzMjU4OTk5OTk5OTUsIDQzLjE5MzI2NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDQwN2ZhZDIxMWMxNDM5YjkyYjAwNmZmMWE1OWY3NmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDQxNTQ2LCA0My4zNTEwMTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E4MzIzMjhkYmQ1YjQ1ZDJiMDI0YzczM2JmNWY3NDZkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzU3NDcwMzk5OTk5OTk1LCA0My43MTU2ODk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg4ZWZlMTYwZTc0MDQ4ZDM4ZjViY2Q3NWNmNGY5MGRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc2ODQ2MSwgNDMuMjYwMDE0ODk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzZTQ1MWZlYTc1NTQ1NmI5ZDE3ZDU5ZDRhZDE2Njk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzc3Mzg1NSwgNDMuNDQ0MjQ4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82NTI5ZDllOTkwNDI0MWJkYTBhOGJlMTc0MWNmZjIzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjc5ODcxMTQ5OTk5OTk5NiwgNDMuNjM5Mzc1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ODg1MDUyMWJiYzE0MTMyYjc1YjFmOTE2ZDVkZThiOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMjIyNTc5OTk5OTk5NSwgNDMuMTQ2MDU2MDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2ZhZjMzN2NhZTZkNjQ2M2I4YWU1ZjkxYjA5YzM3YTRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAzNDQ1NiwgNDMuNzcwNjE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMTk5MWNkMjhjYzg0MGRjODhhYTA3YTExOGM1ODM5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgyMjkzNzQsIDQzLjExMTQzNDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDg2ZGRhYzYxODQzNDkzMDk2ZGE0NmMwMDhmNzZlODUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MzU2MzEsIDQzLjE1MzExNjQ5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kYTU1N2MwYjQ2YzM0MzA3YTE5ZjJjNjQ0NTlmOGQ3ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNjY0NjEsIDQzLjYwNzkxODcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80OGJiYTVmYmI2ZTc0N2JlYTIxNWFiYzI3NzdmMGJhOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg0MTYxMjUsIDQzLjIwNjM5NDIwMDAwMDAwNV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MjFjMjFjNmExMGM0ZGFmOTNiZGYwNzFjMzExMWI2ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg2MDI4NDcsIDQzLjI1MTQwNDc5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yM2YzNWFlZDEyZWY0NmQ5OWNkN2U2MzU4YzhjODg1OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg3ODgzNDksIDQzLjEwNzQ4MTg5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80NTg2MDYzOGE3Nzg0NTVkYjcxOTBmYTE4MTIxMDg3OSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI0NjExMSwgNDEuNzQxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzE3MjUyNmZhYjMxYzRjMjQ5NmQzN2YwNTY1NzcxNDAyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMzAwNzc3MDAwMDAwMDA0LCA0MS43NDI2OTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2MxM2E4MmFmZWRjNGIwNTlhMThiNDUwNmNlNmJmNmUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44MzkxNjY5OTk5OTk5OTYsIDQxLjQ4NjExMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mZjUwYzNlM2EzNTk0NDI0YjZmM2IyMDQ3NTM0Mjg1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2MTUyLCA0MS4zMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTVkOGE4Y2Y1MGE4NDU4ZmJmZTYwYzAzMGVmZmEzY2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC42MzExMzIsIDQwLjA3MjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wNzlhNjM2NzA1ZjY0MzFmYWQ5NzNjZWIwMTZkYWRhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgMzkuMjA4MDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZlMjcxMzY5OTRhNzQyYTViOGJjNDA4ZDA2N2Q1YjY5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODQ1LCAzOS40Njc3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNzZhZDBiNGQxNjk0NGZkMGJjOTc5OWVkNGIzYmU5ODMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjY2NjcsIDM5LjI4MzMzM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hMzAyNmU3MTY2YTY0YjE4YWIzZGE3M2UyODI3YzJkNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg3MzkwOTk5OTk5OTk5NSwgMzkuMTUzNTU0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1YmI4MTAwMjVjOTQ5OTZiZTc5ZWVhMDZlMmU0OTFiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODc0NzIyLCAzOS40NTc3NzgwMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjZmOGQ4YTA2YThkNGE3NTg1NWRjYTMzZjEwNGI4ZjIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODMwNTU5OTk5OTk5OTYsIDM5LjM4MzA1NTk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zMTlhNDZhNzZiNWY0YjUzYjQ4ZWM5MDk1ZDg0ZDhlMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg4Mzk0MiwgMzkuMDY2NjgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1YTA4NDQwNjEzMzRmMGRhYmQ1NTM4NGU3ZGE2MzM0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODg3Nzc4MDAwMDAwMDA0LCAzOS4yNjYxMTA5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2U5OTVjMDhjZDQ4NGY1MThjNjZhMjJjYjE1MGI2NTQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44OTI1MjcsIDM5LjIzMzY4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YmE3MTJhOGY2NTQ0NmYyYmEwMDM0Y2QyNjUyMDA0MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuNDE3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNjMwNTY3ZmU2MDI0MmE5OWM3N2JhNWU1YWUzZmEyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyMjUsIDM5LjM4Mjc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NDc0YzEwMzVhOTg0Y2FhOTEzYjRjYjU1NGExMjMxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkzMzg4OSwgMzguODM2OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4ODNiZTcyMjUyZTQwZWNiZTY5NzY5OGQ2NTkxY2FmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQ2Mzg5LCAzOS40MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjlhMWUwMzAyYTg0ZjVlODYwNzRlYmZmMjMyODA4MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk2NSwgMzkuMzY3Nzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY3MzFmYTllODJlMjRjMmRiMjFlMWMzMjFlMjNlZDhhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTgzMDU2LCAzOS40NzYxMTA5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmE3M2JiMTFkOWEzNGJlZGE3ZTI2NGJiZWZmMjZjZGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTQ0NDQsIDM5LjAwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDljYTBmMWViNzBmNGY0NmE0OTQyNThlZjZlZjFjMDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wMjM5NzIsIDM4LjkzNjk5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYmJhODk3OWY3Y2E0ZTQ0YjNlYzVlNGI3MGM3ZDMwMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAzNDE2NywgMzguODk0NzIxOTk5OTk5OTk0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q3Nzg5NDMyZjYyMDRiNTFhNTg3OTI2MzlkNTVlNmUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY1NTU2LCA0MC4xNzQxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfM2I4ZWUzYmJmNDg1NDUwYTllM2ExNDAxMDRlZDViNGEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NTkzNDg5OTk5OTk5OTYsIDQxLjc0Mzg0Njk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84OWZkOTM1N2YzMWQ0ZmU3OTk5YjVkMDM3N2U5Y2JmZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjk4ODMzMzAwMDAwMDAwNCwgNDEuNzM4ODg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ5ODljZTRkYjdkNTQ3NzE5YTk0ZjQ1YjA5Y2NlMmQ2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDQyMzY1OTk5OTk5OTk0LCA0MS43NjQwOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQxNTRlYjA2Mjg1NDhkNTlmMGIwMDc3YmIwMzczYmEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTUyNzgsIDQxLjgyODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNWY3ZmIyZTFkYTE0N2I4OTUxODQzYTJjY2Q4MGUzNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjEzOTk1MSwgNDEuODUzODc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgwMTRkNTRhYmZkYTQ4OTU5OTgzMTEyNDUxYTM5ODc1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTk4NDIzNzk5OTk5OTksIDQxLjY5OTk2NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMGEzMWQxMDZkMmNlNDVkOTg1M2I4MDA0ZWUxNzhmM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yNTMyNzE5OTk5OTk5OTYsIDQxLjkwMDA0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lOTFjOWVmNTE4NWM0ZDA2YjQwNzgyOTFiYTU0MDNmOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQwMDgzMywgNDEuOTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2IzM2RjZTY2N2VjZTQ3NTE5YTcyOWM4NGZhYTRlZDM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNTE5NzIxOTk5OTk5OTk0LCA0MC43MTAyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWI2ZDk5ZTU2OWJmNDQwOTk4YTIwZjczMzVmNzUyNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NjUsIDM4Ljk4ODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZDFhZTYyNDVmOGI0NGUyOTcyZjIyYTExNzdhYzY3MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIxMjUsIDQzLjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTVkZGZiNjY2ODU2NGMyM2E2YjVmMmU2ZDdkOWM2ZWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wMiwgNDAuMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNlNjE5NGIiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IyYjA1M2RlMzcyMzRkYjI5ZDVlMjliYWQ1YTQ4MmEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQxOTAxMjk2YzM4ZDQyNDQ5Mzc1MmViNjllNDIxZjEwID0gJChgPGRpdiBpZD0iaHRtbF80MTkwMTI5NmMzOGQ0MjQ0OTM3NTJlYjY5ZTQyMWYxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2hha3VyaW5va2hhYmw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyYjA1M2RlMzcyMzRkYjI5ZDVlMjliYWQ1YTQ4MmEwLnNldENvbnRlbnQoaHRtbF80MTkwMTI5NmMzOGQ0MjQ0OTM3NTJlYjY5ZTQyMWYxMCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNWRkZmI2NjY4NTY0YzIzYTZiNWYyZTZkN2Q5YzZlZC5iaW5kUG9wdXAocG9wdXBfYjJiMDUzZGUzNzIzNGRiMjlkNWUyOWJhZDVhNDgyYTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lNWRkZmI2NjY4NTY0YzIzYTZiNWYyZTZkN2Q5YzZlZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU1Y2M3ZWZmZDA4YzRmYjU5YWMxNWMwMDk1YWNjN2E4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDU0MTY3LCAzOS45NDYzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2NhNjBmOWMxZTU3NTQ2NmE4NjVhMDc3YzI5NTkxODFkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YzYzQ5YmYyN2NmOTRkMjE5ZTVhZGRjOGY4Mzg1NDgyID0gJChgPGRpdiBpZD0iaHRtbF9mM2M0OWJmMjdjZjk0ZDIxOWU1YWRkYzhmODM4NTQ4MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VWx5YXA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2NhNjBmOWMxZTU3NTQ2NmE4NjVhMDc3YzI5NTkxODFkLnNldENvbnRlbnQoaHRtbF9mM2M0OWJmMjdjZjk0ZDIxOWU1YWRkYzhmODM4NTQ4Mik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NWNjN2VmZmQwOGM0ZmI1OWFjMTVjMDA5NWFjYzdhOC5iaW5kUG9wdXAocG9wdXBfY2E2MGY5YzFlNTc1NDY2YTg2NWEwNzdjMjk1OTE4MWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81NWNjN2VmZmQwOGM0ZmI1OWFjMTVjMDA5NWFjYzdhOC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M5ZjllYzZiZWRmZDQyZWM5YzZjZWUzNjllZWY2NWY3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNjQ0NzIxOTk5OTk5OTk0LCA0MC4yMjU4MzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzY1NWQwODEzOTg4MTQyMTJiOTRiYzJiOWFlZDYxNjNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM3YzVhZTZiYTE3MTQzZTA4Mjc3M2IwZmMzMWMwZTBiID0gJChgPGRpdiBpZD0iaHRtbF8zN2M1YWU2YmExNzE0M2UwODI3NzNiMGZjMzFjMGUwYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+T2t0eWFicnNraXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY1NWQwODEzOTg4MTQyMTJiOTRiYzJiOWFlZDYxNjNmLnNldENvbnRlbnQoaHRtbF8zN2M1YWU2YmExNzE0M2UwODI3NzNiMGZjMzFjMGUwYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jOWY5ZWM2YmVkZmQ0MmVjOWM2Y2VlMzY5ZWVmNjVmNy5iaW5kUG9wdXAocG9wdXBfNjU1ZDA4MTM5ODgxNDIxMmI5NGJjMmI5YWVkNjE2M2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jOWY5ZWM2YmVkZmQ0MmVjOWM2Y2VlMzY5ZWVmNjVmNy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk2YjQ3MmVjOTMyZjRiOTJiZTYxY2MyZmQ1NDE5YTY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTAyNSwgMzkuMTc0NzIxOTk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YWNhYTU3ZjU5MTU0NWI5ODE5MzgyZjM5NzkzZWJiYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81Zjc3MGYxY2JjOTY0YTgyOGJiMDRmNmEzZmNhNmY5ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNWY3NzBmMWNiYzk2NGE4MjhiYjA0ZjZhM2ZjYTZmOWYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkthemF6b3ZvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83YWNhYTU3ZjU5MTU0NWI5ODE5MzgyZjM5NzkzZWJiYS5zZXRDb250ZW50KGh0bWxfNWY3NzBmMWNiYzk2NGE4MjhiYjA0ZjZhM2ZjYTZmOWYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTZiNDcyZWM5MzJmNGI5MmJlNjFjYzJmZDU0MTlhNjUuYmluZFBvcHVwKHBvcHVwXzdhY2FhNTdmNTkxNTQ1Yjk4MTkzODJmMzk3OTNlYmJhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOTZiNDcyZWM5MzJmNGI5MmJlNjFjYzJmZDU0MTlhNjUuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83N2FhMjUxNjM5NzU0NTU1YWU2MzdmNjdkODc4YTA4YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuMjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wZjYwMTIzN2U5Yzk0MTI2ODFmYzU3MzYwYzEwZDdiYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zODM3NzdmOGQ2ZDA0NTAyOGQ3MDdiNWM1Mjk2ZGJlYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMzgzNzc3ZjhkNmQwNDUwMjhkNzA3YjVjNTI5NmRiZWMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPk5vdm92b2NoZXBzaGl5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wZjYwMTIzN2U5Yzk0MTI2ODFmYzU3MzYwYzEwZDdiYi5zZXRDb250ZW50KGh0bWxfMzgzNzc3ZjhkNmQwNDUwMjhkNzA3YjVjNTI5NmRiZWMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzdhYTI1MTYzOTc1NDU1NWFlNjM3ZjY3ZDg3OGEwOGIuYmluZFBvcHVwKHBvcHVwXzBmNjAxMjM3ZTljOTQxMjY4MWZjNTczNjBjMTBkN2JiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNzdhYTI1MTYzOTc1NDU1NWFlNjM3ZjY3ZDg3OGEwOGIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjU1ZmExNThmYjE0MDUwOTI0ZDRlNmJjZmYxNGRkYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkxNTQyMSwgMzkuMzkwMjI5OTk5OTk5OTk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjczYzdmMTdiZWU0NzY0OTI0MzM4MWEwODUyYTc4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85OTM1NWY4ZDAwMjc0NTYwOTEyYzkxYTU4NDI2NTZlOSA9ICQoYDxkaXYgaWQ9Imh0bWxfOTkzNTVmOGQwMDI3NDU2MDkxMmM5MWE1ODQyNjU2ZTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPktvbG9zPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mZjczYzdmMTdiZWU0NzY0OTI0MzM4MWEwODUyYTc4Ny5zZXRDb250ZW50KGh0bWxfOTkzNTVmOGQwMDI3NDU2MDkxMmM5MWE1ODQyNjU2ZTkpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2I1NWZhMTU4ZmIxNDA1MDkyNGQ0ZTZiY2ZmMTRkZGEuYmluZFBvcHVwKHBvcHVwX2ZmNzNjN2YxN2JlZTQ3NjQ5MjQzMzgxYTA4NTJhNzg3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfN2I1NWZhMTU4ZmIxNDA1MDkyNGQ0ZTZiY2ZmMTRkZGEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNTZlOWJmMjljMWU0MzNiYWFjYWEzZTFmOGFkNmUxYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyMTExMDk5OTk5OTk5NiwgMzguOTkyNzc4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ODcxMGVkODA4MzU0ZmUyYmM3NmQwZmU5MWIyZGUwMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zZmRiOWNkNWZmMGI0ZDUwOGU1YmZlNzcyNDNiNmUzMSA9ICQoYDxkaXYgaWQ9Imh0bWxfM2ZkYjljZDVmZjBiNGQ1MDhlNWJmZTc3MjQzYjZlMzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPlRha2h0YW11a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80ODcxMGVkODA4MzU0ZmUyYmM3NmQwZmU5MWIyZGUwMS5zZXRDb250ZW50KGh0bWxfM2ZkYjljZDVmZjBiNGQ1MDhlNWJmZTc3MjQzYjZlMzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTU2ZTliZjI5YzFlNDMzYmFhY2FhM2UxZjhhZDZlMWEuYmluZFBvcHVwKHBvcHVwXzQ4NzEwZWQ4MDgzNTRmZTJiYzc2ZDBmZTkxYjJkZTAxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTU2ZTliZjI5YzFlNDMzYmFhY2FhM2UxZjhhZDZlMWEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kNGUzODE1NDQwYTU0OTliODUyNDU3OGY0Y2RkNjI1NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkyNjExMSwgMzkuNTY2OTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wYTRlN2U4YTIxMTg0NzBmOWVhN2I4ZWNhMWE0MzExNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZDU1OWZiMjIzZDg0YzZkYjNhMzQ3YzcxMzMwYjU2NSA9ICQoYDxkaXYgaWQ9Imh0bWxfZmQ1NTlmYjIyM2Q4NGM2ZGIzYTM0N2M3MTMzMGI1NjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkdhYnVrYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzBhNGU3ZThhMjExODQ3MGY5ZWE3YjhlY2ExYTQzMTE1LnNldENvbnRlbnQoaHRtbF9mZDU1OWZiMjIzZDg0YzZkYjNhMzQ3YzcxMzMwYjU2NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kNGUzODE1NDQwYTU0OTliODUyNDU3OGY0Y2RkNjI1NS5iaW5kUG9wdXAocG9wdXBfMGE0ZTdlOGEyMTE4NDcwZjllYTdiOGVjYTFhNDMxMTUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kNGUzODE1NDQwYTU0OTliODUyNDU3OGY0Y2RkNjI1NS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzAyNWZjMWQyMTdkZTQ5OThhY2RlN2FhZjgwYmM0OWM4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTQxNjY2OTk5OTk5OTk1LCAzOS4zNjk0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5M2U2YTc3MWY1ZDQ5MTdiY2QxM2UyYzU0NjJhMmI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JjODVlODUzY2JmYTQ5YjhiNjQ2MTg3ZmQyM2Y4ZDg4ID0gJChgPGRpdiBpZD0iaHRtbF9iYzg1ZTg1M2NiZmE0OWI4YjY0NjE4N2ZkMjNmOGQ4OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNoaWt1eWtoYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTkzZTZhNzcxZjVkNDkxN2JjZDEzZTJjNTQ2MmEyYjYuc2V0Q29udGVudChodG1sX2JjODVlODUzY2JmYTQ5YjhiNjQ2MTg3ZmQyM2Y4ZDg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzAyNWZjMWQyMTdkZTQ5OThhY2RlN2FhZjgwYmM0OWM4LmJpbmRQb3B1cChwb3B1cF81OTNlNmE3NzFmNWQ0OTE3YmNkMTNlMmM1NDYyYTJiNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzAyNWZjMWQyMTdkZTQ5OThhY2RlN2FhZjgwYmM0OWM4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTVhYmI4Y2Q3MjVkNDE1ZGI5NGU1OTRiMzhmOTg0NTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTA4MzMsIDM5LjExNDQ0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYWVhZWMwODU3ZjY5NDg3Zjg4ZGY1ZWRlOTUyMmE5MDEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMjNhODU1ZTUxZDk3NDM1Zjg5NjVhYzA3NDYyN2YzMzUgPSAkKGA8ZGl2IGlkPSJodG1sXzIzYTg1NWU1MWQ5NzQzNWY4OTY1YWMwNzQ2MjdmMzM1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5UdWd1cmdveTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYWVhZWMwODU3ZjY5NDg3Zjg4ZGY1ZWRlOTUyMmE5MDEuc2V0Q29udGVudChodG1sXzIzYTg1NWU1MWQ5NzQzNWY4OTY1YWMwNzQ2MjdmMzM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U1YWJiOGNkNzI1ZDQxNWRiOTRlNTk0YjM4Zjk4NDUzLmJpbmRQb3B1cChwb3B1cF9hZWFlYzA4NTdmNjk0ODdmODhkZjVlZGU5NTIyYTkwMSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2U1YWJiOGNkNzI1ZDQxNWRiOTRlNTk0YjM4Zjk4NDUzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDdkMGUwYTllZWJkNGNjYzliMTkwNmRmYjA1MTEyYjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NjMwNTYsIDQxLjkxMzQ3Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjU4MDRkNjRhZGE0NGU4ODk5NDhiZDA1MjE4NWEwMzUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODhkNTZiNDc1NDcwNDU2MmFmNDYyNmY5N2M5Y2Y1ZmUgPSAkKGA8ZGl2IGlkPSJodG1sXzg4ZDU2YjQ3NTQ3MDQ1NjJhZjQ2MjZmOTdjOWNmNWZlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LaHVtYXJhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNTgwNGQ2NGFkYTQ0ZTg4OTk0OGJkMDUyMTg1YTAzNS5zZXRDb250ZW50KGh0bWxfODhkNTZiNDc1NDcwNDU2MmFmNDYyNmY5N2M5Y2Y1ZmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDdkMGUwYTllZWJkNGNjYzliMTkwNmRmYjA1MTEyYjcuYmluZFBvcHVwKHBvcHVwX2I1ODA0ZDY0YWRhNDRlODg5OTQ4YmQwNTIxODVhMDM1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZDdkMGUwYTllZWJkNGNjYzliMTkwNmRmYjA1MTEyYjcuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xNWQ4Mjc4MGQzMGQ0Y2ViYTg0OGJmZmZiZmNkY2EzZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjIwNjYyMTk5OTk5OTk5NiwgNDEuODc3NjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UwMzU1ZjM4YTgzZDRjMjRhZmU3NjJkNjE0MGQ2YzVkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMyOTAyMWFjOGViZjRjZTc5YTMyNzNhOWZjNDcwYjU0ID0gJChgPGRpdiBpZD0iaHRtbF8zMjkwMjFhYzhlYmY0Y2U3OWEzMjczYTlmYzQ3MGI1NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHNhdWNoeWUtRGFraGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UwMzU1ZjM4YTgzZDRjMjRhZmU3NjJkNjE0MGQ2YzVkLnNldENvbnRlbnQoaHRtbF8zMjkwMjFhYzhlYmY0Y2U3OWEzMjczYTlmYzQ3MGI1NCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xNWQ4Mjc4MGQzMGQ0Y2ViYTg0OGJmZmZiZmNkY2EzZS5iaW5kUG9wdXAocG9wdXBfZTAzNTVmMzhhODNkNGMyNGFmZTc2MmQ2MTQwZDZjNWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xNWQ4Mjc4MGQzMGQ0Y2ViYTg0OGJmZmZiZmNkY2EzZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQwZTVlMTNlNzk2ZDRiODM5ODJlNTU4YTg1YzUwYjQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjIxNTU4LCA0MS44OTk0NTNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzk5MjhiNTQwOGQwZjRlOGU4YjczZTQ5MWRhY2VlYTcyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2JlZDE0YjIzODUwZTQ4MGRhOTcyZDI5YTYyMTNmNTU5ID0gJChgPGRpdiBpZD0iaHRtbF9iZWQxNGIyMzg1MGU0ODBkYTk3MmQyOWE2MjEzZjU1OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Tm92b2todW1hcmluc2tpeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOTkyOGI1NDA4ZDBmNGU4ZThiNzNlNDkxZGFjZWVhNzIuc2V0Q29udGVudChodG1sX2JlZDE0YjIzODUwZTQ4MGRhOTcyZDI5YTYyMTNmNTU5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwZTVlMTNlNzk2ZDRiODM5ODJlNTU4YTg1YzUwYjQ4LmJpbmRQb3B1cChwb3B1cF85OTI4YjU0MDhkMGY0ZThlOGI3M2U0OTFkYWNlZWE3MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQwZTVlMTNlNzk2ZDRiODM5ODJlNTU4YTg1YzUwYjQ4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTZkMzdhMzlkNzY0NDg5Njg4NTUwY2IyYjQxOGY2NDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zMzExMTEsIDQxLjkzNDcyMl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzc5MDQ3NTQyYjUwNDNlMTkyZGVhODBmZjM0NjgwNGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfOWJjODE1MzBiMDdiNGQyZWFhZmY1ZmVlNTMwNTc2NGMgPSAkKGA8ZGl2IGlkPSJodG1sXzliYzgxNTMwYjA3YjRkMmVhYWZmNWZlZTUzMDU3NjRjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BZHlnZS1LaGFibDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzc5MDQ3NTQyYjUwNDNlMTkyZGVhODBmZjM0NjgwNGEuc2V0Q29udGVudChodG1sXzliYzgxNTMwYjA3YjRkMmVhYWZmNWZlZTUzMDU3NjRjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U2ZDM3YTM5ZDc2NDQ4OTY4ODU1MGNiMmI0MThmNjQ3LmJpbmRQb3B1cChwb3B1cF9jNzkwNDc1NDJiNTA0M2UxOTJkZWE4MGZmMzQ2ODA0YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2U2ZDM3YTM5ZDc2NDQ4OTY4ODU1MGNiMmI0MThmNjQ3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfY2NlNTdjODdjYTI2NDY5Y2E5YWM3NzQyMjQzMmUxOWEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4zNTA3NzYsIDQxLjgwMTMzNDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2NlNjQ3YzljMjIyNGQ5Yzg1ZjRkOWM5OWMxODhmZGEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjNjMTBjN2NmNzEyNDkxNzg5NWQ0MjQzMjBkYjVjY2QgPSAkKGA8ZGl2IGlkPSJodG1sX2YzYzEwYzdjZjcxMjQ5MTc4OTVkNDI0MzIwZGI1Y2NkIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5CYXJhbGtpPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jY2U2NDdjOWMyMjI0ZDljODVmNGQ5Yzk5YzE4OGZkYS5zZXRDb250ZW50KGh0bWxfZjNjMTBjN2NmNzEyNDkxNzg5NWQ0MjQzMjBkYjVjY2QpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfY2NlNTdjODdjYTI2NDY5Y2E5YWM3NzQyMjQzMmUxOWEuYmluZFBvcHVwKHBvcHVwX2NjZTY0N2M5YzIyMjRkOWM4NWY0ZDljOTljMTg4ZmRhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfY2NlNTdjODdjYTI2NDY5Y2E5YWM3NzQyMjQzMmUxOWEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZjc0ZTU1NzBjMzQ0NmM2OTI3YzRkMTFjNjM3N2Y0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQzMTI5MywgNDEuNzYzMDkyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNmI3ZTNmMTZkZGY0YmQ3YjI2MzI2OWEwYzMwZDA0MyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85YWJmODYzOTg2MmY0YWQ5YmZmNjI3ZmNiYmIyODkxNiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWFiZjg2Mzk4NjJmNGFkOWJmZjYyN2ZjYmJiMjg5MTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkVyc2Frb248L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E2YjdlM2YxNmRkZjRiZDdiMjYzMjY5YTBjMzBkMDQzLnNldENvbnRlbnQoaHRtbF85YWJmODYzOTg2MmY0YWQ5YmZmNjI3ZmNiYmIyODkxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lZjc0ZTU1NzBjMzQ0NmM2OTI3YzRkMTFjNjM3N2Y0NC5iaW5kUG9wdXAocG9wdXBfYTZiN2UzZjE2ZGRmNGJkN2IyNjMyNjlhMGMzMGQwNDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lZjc0ZTU1NzBjMzQ0NmM2OTI3YzRkMTFjNjM3N2Y0NC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4Y2RmMzZjZmQwYjQ3NGRiMDRkYzQzNzM3ZGNmZTNhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODIxNjY3LCA0MC41MDE2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4YTc3ZTc4ZGI1ZDQwZDRhZWI1OTQ3OWFmYjJjMjUyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5MzQ4NzVkMjBhNjQxYmQ4ZTU3NTAyOWMxNzNlNzUxID0gJChgPGRpdiBpZD0iaHRtbF8zOTM0ODc1ZDIwYTY0MWJkOGU1NzUwMjljMTczZTc1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QmxlY2hlcHNpbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODhhNzdlNzhkYjVkNDBkNGFlYjU5NDc5YWZiMmMyNTIuc2V0Q29udGVudChodG1sXzM5MzQ4NzVkMjBhNjQxYmQ4ZTU3NTAyOWMxNzNlNzUxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4Y2RmMzZjZmQwYjQ3NGRiMDRkYzQzNzM3ZGNmZTNhLmJpbmRQb3B1cChwb3B1cF84OGE3N2U3OGRiNWQ0MGQ0YWViNTk0NzlhZmIyYzI1MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2U4Y2RmMzZjZmQwYjQ3NGRiMDRkYzQzNzM3ZGNmZTNhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWMxODc5ODllMzBjNGZkYzgxNGRkNWE1OWZlZWE1YzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45LCA0MC40ODMwMDAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU0OGYwY2ViZWMzMDRkYTRhNjllYmRiNjM2NGQ3ZWYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1M2I3N2ViNTE0NzQ2Zjk4NzUwMGZmNTU3ODVjOGVkID0gJChgPGRpdiBpZD0iaHRtbF84NTNiNzdlYjUxNDc0NmY5ODc1MDBmZjU1Nzg1YzhlZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S29zaGVraGFibDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTQ4ZjBjZWJlYzMwNGRhNGE2OWViZGI2MzY0ZDdlZjMuc2V0Q29udGVudChodG1sXzg1M2I3N2ViNTE0NzQ2Zjk4NzUwMGZmNTU3ODVjOGVkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzljMTg3OTg5ZTMwYzRmZGM4MTRkZDVhNTlmZWVhNWM4LmJpbmRQb3B1cChwb3B1cF81NDhmMGNlYmVjMzA0ZGE0YTY5ZWJkYjYzNjRkN2VmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzljMTg3OTg5ZTMwYzRmZGM4MTRkZDVhNTlmZWVhNWM4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRhZDdmYWY1MDIyNDQzOGIwOGFlODJkZTVlZjZlMzMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTk5NDk3OTk5OTk5OSwgNDMuMzI3NjE4N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmRhOTk3NjNiMWI4NGU3NTgxMzRmNzk0NTRmNzRhY2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTA3MzM2MmNhNzU5NGYwYjljY2Q2MTcwOTZjOWRjNzggPSAkKGA8ZGl2IGlkPSJodG1sXzUwNzMzNjJjYTc1OTRmMGI5Y2NkNjE3MDk2YzlkYzc4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5NYWxrYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmRhOTk3NjNiMWI4NGU3NTgxMzRmNzk0NTRmNzRhY2Yuc2V0Q29udGVudChodG1sXzUwNzMzNjJjYTc1OTRmMGI5Y2NkNjE3MDk2YzlkYzc4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY0YWQ3ZmFmNTAyMjQ0MzhiMDhhZTgyZGU1ZWY2ZTMzLmJpbmRQb3B1cChwb3B1cF9iZGE5OTc2M2IxYjg0ZTc1ODEzNGY3OTQ1NGY3NGFjZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzY0YWQ3ZmFmNTAyMjQ0MzhiMDhhZTgyZGU1ZWY2ZTMzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWYxZmEzMDE2YjE2NDI0MjhmOTQyYTg3YjRiNzkyZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44NTEyMjkyOTk5OTk5OSwgNDMuMjI5MjAxMjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kM2VlMGFiNzI3YTE0NGJjYTI2OWY1OWI2M2FjY2IzNSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYTBjYTQ3Njk3M2E0ZDU4ODQ3YTE3NzQyOWMyMWE4OCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmEwY2E0NzY5NzNhNGQ1ODg0N2ExNzc0MjljMjFhODgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkJhdGVraDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDNlZTBhYjcyN2ExNDRiY2EyNjlmNTliNjNhY2NiMzUuc2V0Q29udGVudChodG1sX2ZhMGNhNDc2OTczYTRkNTg4NDdhMTc3NDI5YzIxYTg4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzFmMWZhMzAxNmIxNjQyNDI4Zjk0MmE4N2I0Yjc5MmZkLmJpbmRQb3B1cChwb3B1cF9kM2VlMGFiNzI3YTE0NGJjYTI2OWY1OWI2M2FjY2IzNSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzFmMWZhMzAxNmIxNjQyNDI4Zjk0MmE4N2I0Yjc5MmZkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWQyN2QyMzQzYzc4NGRkYmEzNjBmNTZjZjEyMjRhZmQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NDY4OTQ1LCA0My4xNzIxMjIyMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IwMjBmZGRlZjIzZTQwYmFhMDdjNDRlMWU3YmM5NzAzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzFiMmZhZmNlYTJkZDQ0OTNhNDI0Njk3MDMwNzFkYTY5ID0gJChgPGRpdiBpZD0iaHRtbF8xYjJmYWZjZWEyZGQ0NDkzYTQyNDY5NzAzMDcxZGE2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+RXRva288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IwMjBmZGRlZjIzZTQwYmFhMDdjNDRlMWU3YmM5NzAzLnNldENvbnRlbnQoaHRtbF8xYjJmYWZjZWEyZGQ0NDkzYTQyNDY5NzAzMDcxZGE2OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZDI3ZDIzNDNjNzg0ZGRiYTM2MGY1NmNmMTIyNGFmZC5iaW5kUG9wdXAocG9wdXBfYjAyMGZkZGVmMjNlNDBiYWEwN2M0NGUxZTdiYzk3MDMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xZDI3ZDIzNDNjNzg0ZGRiYTM2MGY1NmNmMTIyNGFmZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzUyY2Y1YzM5Mzk3MjQ0NTE5YTdiZWM3ZjAzMTAxZmM5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuOTY4MjE2OTk5OTk5OTk2LCAzOS40NDcxMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzOThlN2M2YjI5NzQ2YTBhZGNhZDU2NzE1ZjNiNDg1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZjMDA3ODJiNDdkZTQ0NTFiYmNjNDkxN2MyNGI1M2E2ID0gJChgPGRpdiBpZD0iaHRtbF82YzAwNzgyYjQ3ZGU0NDUxYmJjYzQ5MTdjMjRiNTNhNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+VGtoYWdhcHNoPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzk4ZTdjNmIyOTc0NmEwYWRjYWQ1NjcxNWYzYjQ4NS5zZXRDb250ZW50KGh0bWxfNmMwMDc4MmI0N2RlNDQ1MWJiY2M0OTE3YzI0YjUzYTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTJjZjVjMzkzOTcyNDQ1MTlhN2JlYzdmMDMxMDFmYzkuYmluZFBvcHVwKHBvcHVwXzAzOThlN2M2YjI5NzQ2YTBhZGNhZDU2NzE1ZjNiNDg1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNTJjZjVjMzkzOTcyNDQ1MTlhN2JlYzdmMDMxMDFmYzkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80ZTQ3NjQyNmM2NmU0NjFiOWIwNmU0NDM1MTYyZDU5ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjE4NDcyMiwgMzkuMDddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YwMzBkMTU1ZWFlNDQ0YTFiZmFkZjZlOWE0ZjgxMWFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM1ZmYxZjgyYWIyMDQ3OTQ5OWNjZWU4NDc3NGU0Yzk2ID0gJChgPGRpdiBpZD0iaHRtbF8zNWZmMWY4MmFiMjA0Nzk0OTljY2VlODQ3NzRlNGM5NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+QWd1eS1TaGFwc3VnPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMDMwZDE1NWVhZTQ0NGExYmZhZGY2ZTlhNGY4MTFhZi5zZXRDb250ZW50KGh0bWxfMzVmZjFmODJhYjIwNDc5NDk5Y2NlZTg0Nzc0ZTRjOTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNGU0NzY0MjZjNjZlNDYxYjliMDZlNDQzNTE2MmQ1OWUuYmluZFBvcHVwKHBvcHVwX2YwMzBkMTU1ZWFlNDQ0YTFiZmFkZjZlOWE0ZjgxMWFmKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNGU0NzY0MjZjNjZlNDYxYjliMDZlNDQzNTE2MmQ1OWUuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jMTdhZTZhNWIwNzY0ODYzYjdmMmZlMWJkYmY3ZjM4ZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI4MzYwOTk5OTk5OTk5NiwgMzguOTUzNjE4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iMGYyMTg1NmE5YWE0YjE4YWUwOTIwYjNjNTA2NmUwMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNTMwOGYzZGI0ZjI0NzZhYThhYjVlMzBjZDRkYmE0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZTUzMDhmM2RiNGYyNDc2YWE4YWI1ZTMwY2Q0ZGJhNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPlBzZWJlPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iMGYyMTg1NmE5YWE0YjE4YWUwOTIwYjNjNTA2NmUwMC5zZXRDb250ZW50KGh0bWxfZTUzMDhmM2RiNGYyNDc2YWE4YWI1ZTMwY2Q0ZGJhNDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzE3YWU2YTViMDc2NDg2M2I3ZjJmZTFiZGJmN2YzOGYuYmluZFBvcHVwKHBvcHVwX2IwZjIxODU2YTlhYTRiMThhZTA5MjBiM2M1MDY2ZTAwKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYzE3YWU2YTViMDc2NDg2M2I3ZjJmZTFiZGJmN2YzOGYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YjhiZWI0MzcwMTY0NmQ3YmEwOGQ1NzNjM2U2MjljOSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk4NzM1MTAwMDAwMDAwNCwgMzguNzE1NDg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mMGFmNDg5YWRmMjA0ODRiODRhY2NlOTVlZGYyZjk2MiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZWU1MmU2ZGQxNWQ0OTM4ODNiZTA0OTYwYTM4ZDY5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfOWVlNTJlNmRkMTVkNDkzODgzYmUwNDk2MGEzOGQ2OTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPlBhbmFraGVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMGFmNDg5YWRmMjA0ODRiODRhY2NlOTVlZGYyZjk2Mi5zZXRDb250ZW50KGh0bWxfOWVlNTJlNmRkMTVkNDkzODgzYmUwNDk2MGEzOGQ2OTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGI4YmViNDM3MDE2NDZkN2JhMDhkNTczYzNlNjI5YzkuYmluZFBvcHVwKHBvcHVwX2YwYWY0ODlhZGYyMDQ4NGI4NGFjY2U5NWVkZjJmOTYyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOGI4YmViNDM3MDE2NDZkN2JhMDhkNTczYzNlNjI5YzkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84NzI2MDU5NmRkNzY0MzUxOGNhMWEyMjg0MmZhNDM2NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5OTE2NywgMzguNzgxOTQ0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zNGMxMmM3NzhkZWE0NjQxYWQ5Y2U2OGRmYTVkNGNmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yYTVlYzFhNGE1MmI0MjhmOWQ2YmE5MDZiODE5NTJmNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMmE1ZWMxYTRhNTJiNDI4ZjlkNmJhOTA2YjgxOTUyZjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkFmaXBzaXA8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM0YzEyYzc3OGRlYTQ2NDFhZDljZTY4ZGZhNWQ0Y2YxLnNldENvbnRlbnQoaHRtbF8yYTVlYzFhNGE1MmI0MjhmOWQ2YmE5MDZiODE5NTJmNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84NzI2MDU5NmRkNzY0MzUxOGNhMWEyMjg0MmZhNDM2NC5iaW5kUG9wdXAocG9wdXBfMzRjMTJjNzc4ZGVhNDY0MWFkOWNlNjhkZmE1ZDRjZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84NzI2MDU5NmRkNzY0MzUxOGNhMWEyMjg0MmZhNDM2NC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQyOTQ3NzczZGYyNTRkNWNiMmVjNmI0OGJkMjc5YzY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDQ1Mjc4LCAzOC43NTYxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUwMGYzNGI1Yjk2MTQ1Zjg4MGViMTk4ZWMzOTBiNzllID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MzYmU0NWQ1MmMyNDRkNTA4ZGFkOWMxY2RhNGI3OTI1ID0gJChgPGRpdiBpZD0iaHRtbF9jM2JlNDVkNTJjMjQ0ZDUwOGRhZDljMWNkYTRiNzkyNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2hhc2h0dWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwMGYzNGI1Yjk2MTQ1Zjg4MGViMTk4ZWMzOTBiNzllLnNldENvbnRlbnQoaHRtbF9jM2JlNDVkNTJjMjQ0ZDUwOGRhZDljMWNkYTRiNzkyNSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80Mjk0Nzc3M2RmMjU0ZDVjYjJlYzZiNDhiZDI3OWM2NC5iaW5kUG9wdXAocG9wdXBfNTAwZjM0YjViOTYxNDVmODgwZWIxOThlYzM5MGI3OWUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80Mjk0Nzc3M2RmMjU0ZDVjYjJlYzZiNDhiZDI3OWM2NC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRlNTZlNTYyZmUyMjQ3ODBiYmRiOTUzZWQxMmMwZmI0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDUxMTExLCAzOC43MDYzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E5N2ZhZTg3M2FhMjQ3MDE5NDcwNjQwMGQ4YzUzYTQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y3YzVmMDM4NGYzZTQ2NDdiNDMxMTMzODNhYTZkMzY5ID0gJChgPGRpdiBpZD0iaHRtbF9mN2M1ZjAzODRmM2U0NjQ3YjQzMTEzMzgzYWE2ZDM2OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNleXR1azwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTk3ZmFlODczYWEyNDcwMTk0NzA2NDAwZDhjNTNhNDQuc2V0Q29udGVudChodG1sX2Y3YzVmMDM4NGYzZTQ2NDdiNDMxMTMzODNhYTZkMzY5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRlNTZlNTYyZmUyMjQ3ODBiYmRiOTUzZWQxMmMwZmI0LmJpbmRQb3B1cChwb3B1cF9hOTdmYWU4NzNhYTI0NzAxOTQ3MDY0MDBkOGM1M2E0NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzRlNTZlNTYyZmUyMjQ3ODBiYmRiOTUzZWQxMmMwZmI0LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjY2Yjk2NGEzM2FkNGFlM2IwYTAwM2Q3YTBmYTdkYWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4xODMzMywgMzkuNjY2NjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE3MWYyOTJlM2Q5YTQxYWY4NDRjYWYyMGMwMmVjZTUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0NmQ4N2VhY2QyMzQ4MTFhOGY3Yzk1ZDBjYTAyOTg5ID0gJChgPGRpdiBpZD0iaHRtbF8yNDZkODdlYWNkMjM0ODExYThmN2M5NWQwY2EwMjk4OSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2hhdHVrYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE3MWYyOTJlM2Q5YTQxYWY4NDRjYWYyMGMwMmVjZTUzLnNldENvbnRlbnQoaHRtbF8yNDZkODdlYWNkMjM0ODExYThmN2M5NWQwY2EwMjk4OSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNjZiOTY0YTMzYWQ0YWUzYjBhMDAzZDdhMGZhN2RhZS5iaW5kUG9wdXAocG9wdXBfMTcxZjI5MmUzZDlhNDFhZjg0NGNhZjIwYzAyZWNlNTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yNjZiOTY0YTMzYWQ0YWUzYjBhMDAzZDdhMGZhN2RhZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc0YzM5MzZmMDA1ODQzY2RiZDNmNjllNjdmZmMwZjY0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDc1ODMzLCAzOS4zNDI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNzAzMDAwNzBkYWM0OWQ0YTA2NzIwMWQ3OTQwZTRjZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81YzNjYmUwMjU3NWE0YzFjYTYzZWFhMzRjMmI1NjkwNSA9ICQoYDxkaXYgaWQ9Imh0bWxfNWMzY2JlMDI1NzVhNGMxY2E2M2VhYTM0YzJiNTY5MDUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkJvbHNob3llIFBzZXVzaGtobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjcwMzAwMDcwZGFjNDlkNGEwNjcyMDFkNzk0MGU0Y2Uuc2V0Q29udGVudChodG1sXzVjM2NiZTAyNTc1YTRjMWNhNjNlYWEzNGMyYjU2OTA1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzc0YzM5MzZmMDA1ODQzY2RiZDNmNjllNjdmZmMwZjY0LmJpbmRQb3B1cChwb3B1cF8yNzAzMDAwNzBkYWM0OWQ0YTA2NzIwMWQ3OTQwZTRjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzc0YzM5MzZmMDA1ODQzY2RiZDNmNjllNjdmZmMwZjY0LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNmU0NjQ2MDVlMzI5NDhiNmIyMzI1M2Y4OTQ1ZjZlOGMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTYzODksIDM5LjMwMTY2N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfM2FmOTQ0NzIyZmNkNDg2NThiYmQ0ZWVhMmU4ZGNhOWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTFjZTE0ODZjMGYzNDE2ODliMmQ2YjUzYjhlMTFlMmUgPSAkKGA8ZGl2IGlkPSJodG1sX2UxY2UxNDg2YzBmMzQxNjg5YjJkNmI1M2I4ZTExZTJlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5NYWxveWUgUHNldXNoa2hvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYWY5NDQ3MjJmY2Q0ODY1OGJiZDRlZWEyZThkY2E5YS5zZXRDb250ZW50KGh0bWxfZTFjZTE0ODZjMGYzNDE2ODliMmQ2YjUzYjhlMTFlMmUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmU0NjQ2MDVlMzI5NDhiNmIyMzI1M2Y4OTQ1ZjZlOGMuYmluZFBvcHVwKHBvcHVwXzNhZjk0NDcyMmZjZDQ4NjU4YmJkNGVlYTJlOGRjYTlhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNmU0NjQ2MDVlMzI5NDhiNmIyMzI1M2Y4OTQ1ZjZlOGMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YjY2NDI3OWU1MGI0NjFjODBkNTgyOTYyOWNlODEyMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjgzNSwgNDEuMzgzODldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzUyZjdmY2U3NWRjODQ3M2I4Mzk1MWIxNWU0N2Q4ODhmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIxM2UxZDAzNzBkNDRiMzU5M2ExYTk0MWRlZTY1NGQ3ID0gJChgPGRpdiBpZD0iaHRtbF8yMTNlMWQwMzcwZDQ0YjM1OTNhMWE5NDFkZWU2NTRkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+VXNwZW5za295ZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTJmN2ZjZTc1ZGM4NDczYjgzOTUxYjE1ZTQ3ZDg4OGYuc2V0Q29udGVudChodG1sXzIxM2UxZDAzNzBkNDRiMzU5M2ExYTk0MWRlZTY1NGQ3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdiNjY0Mjc5ZTUwYjQ2MWM4MGQ1ODI5NjI5Y2U4MTIzLmJpbmRQb3B1cChwb3B1cF81MmY3ZmNlNzVkYzg0NzNiODM5NTFiMTVlNDdkODg4ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzdiNjY0Mjc5ZTUwYjQ2MWM4MGQ1ODI5NjI5Y2U4MTIzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjk4MDlhMjM1NjljNGYyMjlmMDg2N2E2ZDA0ZTgyNDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45NTQ3NDcsIDQwLjMxNzY4NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMmFiZjU1NDM2MzhmNDZiN2IyMTY4ZTNkMGQ0MTViMjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjU1MzQxYTMxMmQ5NGI2Yjk1Mzk3N2RlNzFjNTJmNTQgPSAkKGA8ZGl2IGlkPSJodG1sXzY1NTM0MWEzMTJkOTRiNmI5NTM5NzdkZTcxYzUyZjU0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5LaGFjaGVteml5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yYWJmNTU0MzYzOGY0NmI3YjIxNjhlM2QwZDQxNWIyOS5zZXRDb250ZW50KGh0bWxfNjU1MzQxYTMxMmQ5NGI2Yjk1Mzk3N2RlNzFjNTJmNTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjk4MDlhMjM1NjljNGYyMjlmMDg2N2E2ZDA0ZTgyNDYuYmluZFBvcHVwKHBvcHVwXzJhYmY1NTQzNjM4ZjQ2YjdiMjE2OGUzZDBkNDE1YjI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNjk4MDlhMjM1NjljNGYyMjlmMDg2N2E2ZDA0ZTgyNDYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83YWIxMmEwOGJjNDk0ODlmOGQ4MjgzNjllNmI3MWM2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk5MzMzMywgNDAuMzExMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMzllYzgxYzI2YTM0YmZkYTE3YTJmYWQyNmVlNzc3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80MTBmZThkZjgzZTg0ZDEzYTgwNGI3ZjFmY2JkNTIwZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNDEwZmU4ZGY4M2U4NGQxM2E4MDRiN2YxZmNiZDUyMGQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkR6aGVyb2theTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDM5ZWM4MWMyNmEzNGJmZGExN2EyZmFkMjZlZTc3N2Quc2V0Q29udGVudChodG1sXzQxMGZlOGRmODNlODRkMTNhODA0YjdmMWZjYmQ1MjBkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzdhYjEyYTA4YmM0OTQ4OWY4ZDgyODM2OWU2YjcxYzYyLmJpbmRQb3B1cChwb3B1cF8wMzllYzgxYzI2YTM0YmZkYTE3YTJmYWQyNmVlNzc3ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzdhYjEyYTA4YmM0OTQ4OWY4ZDgyODM2OWU2YjcxYzYyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTI3OTRiNTZiYWI0NGJlOTg5MmNlMjE3NmQ0YmQwYmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTc1LCA0MC4zOTIyMjJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzIzNmExYTQzZjA3OTRkYmU5YTFkNzM0NjNlN2EzNDNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBiMTRlNjk2MmEyMjQyNGRiYTMxYTZjYzI3ODY3OTEwID0gJChgPGRpdiBpZD0iaHRtbF8wYjE0ZTY5NjJhMjI0MjRkYmEzMWE2Y2MyNzg2NzkxMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+RWdlcnVraGF5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yMzZhMWE0M2YwNzk0ZGJlOWExZDczNDYzZTdhMzQzZC5zZXRDb250ZW50KGh0bWxfMGIxNGU2OTYyYTIyNDI0ZGJhMzFhNmNjMjc4Njc5MTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTI3OTRiNTZiYWI0NGJlOTg5MmNlMjE3NmQ0YmQwYmIuYmluZFBvcHVwKHBvcHVwXzIzNmExYTQzZjA3OTRkYmU5YTFkNzM0NjNlN2EzNDNkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOTI3OTRiNTZiYWI0NGJlOTg5MmNlMjE3NmQ0YmQwYmIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZWM3MTlmYWE0OWQ0OWEzYmU2ZDBhZjQxMTg2MzY1MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjAxMTM4OSwgNDAuMjE3MjIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yY2NkZDM5MmRiMWM0OWU2YjMwYzAxNzlkZTI2NjY2NiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZGFlZDJjYTRiZTU0NDFiOTM4MTFlNTI0NmIyNGExZSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2RhZWQyY2E0YmU1NDQxYjkzODExZTUyNDZiMjRhMWUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPk1hbWtoZWc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzJjY2RkMzkyZGIxYzQ5ZTZiMzBjMDE3OWRlMjY2NjY2LnNldENvbnRlbnQoaHRtbF83ZGFlZDJjYTRiZTU0NDFiOTM4MTFlNTI0NmIyNGExZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZWM3MTlmYWE0OWQ0OWEzYmU2ZDBhZjQxMTg2MzY1MS5iaW5kUG9wdXAocG9wdXBfMmNjZGQzOTJkYjFjNDllNmIzMGMwMTc5ZGUyNjY2NjYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kZWM3MTlmYWE0OWQ0OWEzYmU2ZDBhZjQxMTg2MzY1MS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzEwY2MzZWMyYzg3MTQ2MzdhNmYzYjIwMGJlMWU0MzYwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDQ2MTEwOTk5OTk5OTk2LCA0MC4xODMwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRlYzY4ZTJjNDY0NjRhZjE4MGZmM2FmZjc3NDYxNjkyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwODhlOWE3MzA1OTQxMmRiMDhmYjA5ODVhNzVhNGI2ID0gJChgPGRpdiBpZD0iaHRtbF8yMDg4ZTlhNzMwNTk0MTJkYjA4ZmIwOTg1YTc1YTRiNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S2FiZWtoYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGVjNjhlMmM0NjQ2NGFmMTgwZmYzYWZmNzc0NjE2OTIuc2V0Q29udGVudChodG1sXzIwODhlOWE3MzA1OTQxMmRiMDhmYjA5ODVhNzVhNGI2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwY2MzZWMyYzg3MTQ2MzdhNmYzYjIwMGJlMWU0MzYwLmJpbmRQb3B1cChwb3B1cF80ZWM2OGUyYzQ2NDY0YWYxODBmZjNhZmY3NzQ2MTY5MikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzEwY2MzZWMyYzg3MTQ2MzdhNmYzYjIwMGJlMWU0MzYwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTg1YTQ1YmJiOGU2NGU1YjkxMTgxZmY2MDVjZjE1MWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NS4wNjg4ODksIDM5LjQ5NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRhODc4MjRhZTk5MzRmNzBhODhkNWFjODE1NDQ1MDc4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlmYTE0NDI5MDI4YzQ5YjlhMGYzMDU3YWU3YmMxMGYwID0gJChgPGRpdiBpZD0iaHRtbF85ZmExNDQyOTAyOGM0OWI5YTBmMzA1N2FlN2JjMTBmMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+QWRhbWl5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80YTg3ODI0YWU5OTM0ZjcwYTg4ZDVhYzgxNTQ0NTA3OC5zZXRDb250ZW50KGh0bWxfOWZhMTQ0MjkwMjhjNDliOWEwZjMwNTdhZTdiYzEwZjApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNTg1YTQ1YmJiOGU2NGU1YjkxMTgxZmY2MDVjZjE1MWMuYmluZFBvcHVwKHBvcHVwXzRhODc4MjRhZTk5MzRmNzBhODhkNWFjODE1NDQ1MDc4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNTg1YTQ1YmJiOGU2NGU1YjkxMTgxZmY2MDVjZjE1MWMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYThlZTk3YTg1YmQ0Y2MxYmE3M2JjNmY2YTAzMTZmMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA3MjIyMiwgNDAuMTg4NjExXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xMGU1MzgyYzE0NTg0NTBmYjU4OTYyNTc5ZjM0YTIyZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81MGNjZDVhODY4Zjg0ZjViYjczNjcyNDhkNzg1M2RlMyA9ICQoYDxkaXYgaWQ9Imh0bWxfNTBjY2Q1YTg2OGY4NGY1YmI3MzY3MjQ4ZDc4NTNkZTMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPktoYXRhemh1a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8xMGU1MzgyYzE0NTg0NTBmYjU4OTYyNTc5ZjM0YTIyZS5zZXRDb250ZW50KGh0bWxfNTBjY2Q1YTg2OGY4NGY1YmI3MzY3MjQ4ZDc4NTNkZTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmE4ZWU5N2E4NWJkNGNjMWJhNzNiYzZmNmEwMzE2ZjIuYmluZFBvcHVwKHBvcHVwXzEwZTUzODJjMTQ1ODQ1MGZiNTg5NjI1NzlmMzRhMjJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMmE4ZWU5N2E4NWJkNGNjMWJhNzNiYzZmNmEwMzE2ZjIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NjA1M2UwYmMxYjY0NDMxYWYzOTcyNDc2ODMxNWFkYiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ1LjA4Mzg4OSwgMzkuODYxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zMDRhMzkzYThjMGU0MzBmYTVmOTE0NDhkMDIzNGMzNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMTYyN2Y2OTE1Njk0YjEzYjgyN2JlNDU3MzVjYmExNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZTE2MjdmNjkxNTY5NGIxM2I4MjdiZTQ1NzM1Y2JhMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkR6aGFtYmljaGk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzMwNGEzOTNhOGMwZTQzMGZhNWY5MTQ0OGQwMjM0YzM3LnNldENvbnRlbnQoaHRtbF9lMTYyN2Y2OTE1Njk0YjEzYjgyN2JlNDU3MzVjYmExNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81NjA1M2UwYmMxYjY0NDMxYWYzOTcyNDc2ODMxNWFkYi5iaW5kUG9wdXAocG9wdXBfMzA0YTM5M2E4YzBlNDMwZmE1ZjkxNDQ4ZDAyMzRjMzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81NjA1M2UwYmMxYjY0NDMxYWYzOTcyNDc2ODMxNWFkYi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA1OTUxNGJlYjhjYjRmMDI4MTA5ZTc5Zjg5YjhmMmI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDkyMjIyLCA0MC4xMTAyNzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2QzNDVhOTQ0M2YwNjQ0MDNhZTVhN2I0NTVhMDFjMGNiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmOWRiNDliMDI3YTQ5NmU5MmZmZDhhZWE4NjA5NjBlID0gJChgPGRpdiBpZD0iaHRtbF8zZjlkYjQ5YjAyN2E0OTZlOTJmZmQ4YWVhODYwOTYwZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNoaXpvdjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZDM0NWE5NDQzZjA2NDQwM2FlNWE3YjQ1NWEwMWMwY2Iuc2V0Q29udGVudChodG1sXzNmOWRiNDliMDI3YTQ5NmU5MmZmZDhhZWE4NjA5NjBlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA1OTUxNGJlYjhjYjRmMDI4MTA5ZTc5Zjg5YjhmMmI5LmJpbmRQb3B1cChwb3B1cF9kMzQ1YTk0NDNmMDY0NDAzYWU1YTdiNDU1YTAxYzBjYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzA1OTUxNGJlYjhjYjRmMDI4MTA5ZTc5Zjg5YjhmMmI5LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGY5MjA5NzQyYjEyNGQyN2JjOTZmNTlhZmI5NmY5OTIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA3MzIzLCA0NC4xOTA4OTE1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82NjBhMDZjYTJlYzY0OGFlYWZjM2RmZTg2YjRlODdiZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF83ZjA3ZWE0MWU3YjI0NDA3YmNjOTFjYjA1ZmIxMDZjMSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2YwN2VhNDFlN2IyNDQwN2JjYzkxY2IwNWZiMTA2YzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlBsYW5vdnNrb2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzY2MGEwNmNhMmVjNjQ4YWVhZmMzZGZlODZiNGU4N2JlLnNldENvbnRlbnQoaHRtbF83ZjA3ZWE0MWU3YjI0NDA3YmNjOTFjYjA1ZmIxMDZjMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80ZjkyMDk3NDJiMTI0ZDI3YmM5NmY1OWFmYjk2Zjk5Mi5iaW5kUG9wdXAocG9wdXBfNjYwYTA2Y2EyZWM2NDhhZWFmYzNkZmU4NmI0ZTg3YmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80ZjkyMDk3NDJiMTI0ZDI3YmM5NmY1OWFmYjk2Zjk5Mi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2NzA3YWE3MzNjZTQ1Y2NiMTMwOTQ3ZWY3NGI0MzhkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDY3NzM0OCwgNDQuMzczMDIxMjAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lM2U3Y2U0ZWFiMGE0MzAyODlmMWVmMTFiNTkwMWVlMCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hNGIzMjJmNDQ2MjE0MjY0YjFjZDE2OWE0MTMyYzgyNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYTRiMzIyZjQ0NjIxNDI2NGIxY2QxNjlhNDEzMmM4MjciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlZlcmtobnkgS3VycDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZTNlN2NlNGVhYjBhNDMwMjg5ZjFlZjExYjU5MDFlZTAuc2V0Q29udGVudChodG1sX2E0YjMyMmY0NDYyMTQyNjRiMWNkMTY5YTQxMzJjODI3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA2NzA3YWE3MzNjZTQ1Y2NiMTMwOTQ3ZWY3NGI0MzhkLmJpbmRQb3B1cChwb3B1cF9lM2U3Y2U0ZWFiMGE0MzAyODlmMWVmMTFiNTkwMWVlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzA2NzA3YWE3MzNjZTQ1Y2NiMTMwOTQ3ZWY3NGI0MzhkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTI3ZmIwMDFhMTdlNGRjZTk0ZjE4YjczNzU2OTcxMWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40NzQ2OCwgNDQuMjQyMzI5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMDVlMjgxZmI4ZjdhNDhmNzlkM2QzZmJiYjViZmUxOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTkzOTA2YzI1MmExNDBkNWI0NzM0M2I1YzE2NDhjZGIgPSAkKGA8ZGl2IGlkPSJodG1sX2U5MzkwNmMyNTJhMTQwZDViNDczNDNiNWMxNjQ4Y2RiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5WZXJraG55IEFrYmFzaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDVlMjgxZmI4ZjdhNDhmNzlkM2QzZmJiYjViZmUxOTMuc2V0Q29udGVudChodG1sX2U5MzkwNmMyNTJhMTQwZDViNDczNDNiNWMxNjQ4Y2RiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UyN2ZiMDAxYTE3ZTRkY2U5NGYxOGI3Mzc1Njk3MTFmLmJpbmRQb3B1cChwb3B1cF8wNWUyODFmYjhmN2E0OGY3OWQzZDNmYmJiNWJmZTE5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2UyN2ZiMDAxYTE3ZTRkY2U5NGYxOGI3Mzc1Njk3MTFmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjMwNWZkNTMwNGZjNDg0ZWJlNzI5MGRiNTJmNzc2MGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My40OTkxMDk4LCA0NC4xNTEyOTQ3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhjNjA0MTEzZTAxMDQzYzRhZWIxZTgwMjE0OGQzYmQ0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2IxMTY1MjMxMGE0YTRhOTRiYTcyNTg3NTQyMThlOTMxID0gJChgPGRpdiBpZD0iaHRtbF9iMTE2NTIzMTBhNGE0YTk0YmE3MjU4NzU0MjE4ZTkzMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+RGV5c2tvZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGM2MDQxMTNlMDEwNDNjNGFlYjFlODAyMTQ4ZDNiZDQuc2V0Q29udGVudChodG1sX2IxMTY1MjMxMGE0YTRhOTRiYTcyNTg3NTQyMThlOTMxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzYzMDVmZDUzMDRmYzQ4NGViZTcyOTBkYjUyZjc3NjBmLmJpbmRQb3B1cChwb3B1cF84YzYwNDExM2UwMTA0M2M0YWViMWU4MDIxNDhkM2JkNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzYzMDVmZDUzMDRmYzQ4NGViZTcyOTBkYjUyZjc3NjBmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTQxMGY0MGVkZjFkNGU2ZDkzYjIzODkwOGMxNTMzMmMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjU0MDE3LCA0NC4yMDkyOThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzJiZDJiYzFlODVmMTRlY2Y5YzNlNzcxMWNlMDJjNzI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RhMGQ1Njg5YTg4YTRmMGQ5MGEyMmRlNDdiMzkyYzVhID0gJChgPGRpdiBpZD0iaHRtbF9kYTBkNTY4OWE4OGE0ZjBkOTBhMjJkZTQ3YjM5MmM1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Tml6aG55IEFrYmFzaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMmJkMmJjMWU4NWYxNGVjZjljM2U3NzExY2UwMmM3Mjguc2V0Q29udGVudChodG1sX2RhMGQ1Njg5YTg4YTRmMGQ5MGEyMmRlNDdiMzkyYzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E0MTBmNDBlZGYxZDRlNmQ5M2IyMzg5MDhjMTUzMzJjLmJpbmRQb3B1cChwb3B1cF8yYmQyYmMxZTg1ZjE0ZWNmOWMzZTc3MTFjZTAyYzcyOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2E0MTBmNDBlZGYxZDRlNmQ5M2IyMzg5MDhjMTUzMzJjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjRmNDI0NzJhN2I0NDVkZDlmNDRkN2IwNzcyYjU5ZjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NDM0ODg4LCA0NC40MTM3NTc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85ZDRhMzAyZWZiNDk0OTc0YTYxMmVhYTc2MTQ3YzlhNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85ZDljMDIwNmJjZGU0ZDAxODlmODY5MTNiMGY2ZDNmMyA9ICQoYDxkaXYgaWQ9Imh0bWxfOWQ5YzAyMDZiY2RlNGQwMTg5Zjg2OTEzYjBmNmQzZjMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk5pemhueSBLdXJwPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZDRhMzAyZWZiNDk0OTc0YTYxMmVhYTc2MTQ3YzlhNC5zZXRDb250ZW50KGh0bWxfOWQ5YzAyMDZiY2RlNGQwMTg5Zjg2OTEzYjBmNmQzZjMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjRmNDI0NzJhN2I0NDVkZDlmNDRkN2IwNzcyYjU5ZjMuYmluZFBvcHVwKHBvcHVwXzlkNGEzMDJlZmI0OTQ5NzRhNjEyZWFhNzYxNDdjOWE0KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNjRmNDI0NzJhN2I0NDVkZDlmNDRkN2IwNzcyYjU5ZjMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wMzViYzAzZjQ0MDk0MGY3OTg3MWE2MmRjZmE4NjMyYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU3MDExNDM5OTk5OTk5NCwgNDQuMTQwMzQ4MTAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMWZmNmE1MzM5ZmQ0Yjk5OWVjNDY3NGQzYWE2NGY4NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82NzhkNzY4YzJlZjU0MDEwYTY3YmYxNzk5ZTBjZDk1NiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjc4ZDc2OGMyZWY1NDAxMGE2N2JmMTc5OWUwY2Q5NTYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkFyaWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzIxZmY2YTUzMzlmZDRiOTk5ZWM0Njc0ZDNhYTY0Zjg3LnNldENvbnRlbnQoaHRtbF82NzhkNzY4YzJlZjU0MDEwYTY3YmYxNzk5ZTBjZDk1Nik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wMzViYzAzZjQ0MDk0MGY3OTg3MWE2MmRjZmE4NjMyYS5iaW5kUG9wdXAocG9wdXBfMjFmZjZhNTMzOWZkNGI5OTllYzQ2NzRkM2FhNjRmODcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wMzViYzAzZjQ0MDk0MGY3OTg3MWE2MmRjZmE4NjMyYS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzYzZWQyYTA2YTVkMDRiZmQ5MjA5NGEyMzgxOGNhNTcyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcxMDc2MSwgNDQuMzc0MDU5MTAwMDAwMDA0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yNjUzMDY0MTVmZTU0NWFhOWJkZTIzYTBmNTI1Njg1YyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84MzBmMjZmZDg3YTY0YjgyYjE0YTkzZmE2OGMzZmYxYiA9ICQoYDxkaXYgaWQ9Imh0bWxfODMwZjI2ZmQ4N2E2NGI4MmIxNGE5M2ZhNjhjM2ZmMWIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPktoYW1pZGllPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNjUzMDY0MTVmZTU0NWFhOWJkZTIzYTBmNTI1Njg1Yy5zZXRDb250ZW50KGh0bWxfODMwZjI2ZmQ4N2E2NGI4MmIxNGE5M2ZhNjhjM2ZmMWIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjNlZDJhMDZhNWQwNGJmZDkyMDk0YTIzODE4Y2E1NzIuYmluZFBvcHVwKHBvcHVwXzI2NTMwNjQxNWZlNTQ1YWE5YmRlMjNhMGY1MjU2ODVjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNjNlZDJhMDZhNWQwNGJmZDkyMDk0YTIzODE4Y2E1NzIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMWJlNzA5NTZmZGU0Y2RlODU3ZjBjNzg2MDY5MzNmYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY3Mjc3OTUsIDQ0LjI5NzM2MTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzODU4NjJiYTYzNDQ2ZTZhOTkwYWU5OWM4MjI3Mjk4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2NhMjk0N2VhZTdiYTRkNzRhYzgzMjE5OGRhZjg5YzA1ID0gJChgPGRpdiBpZD0iaHRtbF9jYTI5NDdlYWU3YmE0ZDc0YWM4MzIxOThkYWY4OWMwNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VGVyZWtza29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMzg1ODYyYmE2MzQ0NmU2YTk5MGFlOTljODIyNzI5OC5zZXRDb250ZW50KGh0bWxfY2EyOTQ3ZWFlN2JhNGQ3NGFjODMyMTk4ZGFmODljMDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMTFiZTcwOTU2ZmRlNGNkZTg1N2YwYzc4NjA2OTMzZmEuYmluZFBvcHVwKHBvcHVwXzAzODU4NjJiYTYzNDQ2ZTZhOTkwYWU5OWM4MjI3Mjk4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMTFiZTcwOTU2ZmRlNGNkZTg1N2YwYzc4NjA2OTMzZmEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yMjI5MjZjM2ZlZmE0MjYyOWVlNWFlZGRiN2EwNzE3NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgyMjc4NiwgMzkuNTAwOTgxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NDcwNmFhYmVlNWI0YTQ3OGEyNGQ0NzA2ZjQ5NDM3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zN2I3MjM3OGRiOGY0ZDgxOGY1NTFhY2U1YmU2ODQ5MCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzdiNzIzNzhkYjhmNGQ4MThmNTUxYWNlNWJlNjg0OTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPk1hbHl5IEtpY2htYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ0NzA2YWFiZWU1YjRhNDc4YTI0ZDQ3MDZmNDk0Mzc3LnNldENvbnRlbnQoaHRtbF8zN2I3MjM3OGRiOGY0ZDgxOGY1NTFhY2U1YmU2ODQ5MCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMjI5MjZjM2ZlZmE0MjYyOWVlNWFlZGRiN2EwNzE3NS5iaW5kUG9wdXAocG9wdXBfNDQ3MDZhYWJlZTViNGE0NzhhMjRkNDcwNmY0OTQzNzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yMjI5MjZjM2ZlZmE0MjYyOWVlNWFlZGRiN2EwNzE3NS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzZhNjQ3NDYxMmVjNTQzMjQ5OTVmNTJhZmFhNzEwNjJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODMzOTE3LCAzOS41MDgwNjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ5NTY2Mjg1YjVlYzQ3MmNiMGY1NGI5Y2NkYTYwMmE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI5YzMzYzY4NGVmYzQwODViYzZlNTUwOTRjY2NjNTIxID0gJChgPGRpdiBpZD0iaHRtbF8yOWMzM2M2ODRlZmM0MDg1YmM2ZTU1MDk0Y2NjYzUyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+Qm9sc2hveSBLaWNobWF5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80OTU2NjI4NWI1ZWM0NzJjYjBmNTRiOWNjZGE2MDJhNy5zZXRDb250ZW50KGh0bWxfMjljMzNjNjg0ZWZjNDA4NWJjNmU1NTA5NGNjY2M1MjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNmE2NDc0NjEyZWM1NDMyNDk5NWY1MmFmYWE3MTA2MmMuYmluZFBvcHVwKHBvcHVwXzQ5NTY2Mjg1YjVlYzQ3MmNiMGY1NGI5Y2NkYTYwMmE3KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNmE2NDc0NjEyZWM1NDMyNDk5NWY1MmFmYWE3MTA2MmMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZTY2YzhjNWJkZGM0MzY3OWU3YWUwYjJkYTFiMDM5MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjAwOTM4OSwgMzkuMzU2NjM5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjQ4NTA3Mjc4Y2I0ZWU5YTI4ZTgwOTk1MjQ4Njc2NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8xYTNmNjA0NDMyMDQ0YzVkODEwMmQwYTE3M2NlYjMwMCA9ICQoYDxkaXYgaWQ9Imh0bWxfMWEzZjYwNDQzMjA0NGM1ZDgxMDJkMGExNzNjZWIzMDAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkthbGV6aDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDI0ODUwNzI3OGNiNGVlOWEyOGU4MDk5NTI0ODY3Njcuc2V0Q29udGVudChodG1sXzFhM2Y2MDQ0MzIwNDRjNWQ4MTAyZDBhMTczY2ViMzAwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2VlNjZjOGM1YmRkYzQzNjc5ZTdhZTBiMmRhMWIwMzkxLmJpbmRQb3B1cChwb3B1cF8wMjQ4NTA3Mjc4Y2I0ZWU5YTI4ZTgwOTk1MjQ4Njc2NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2VlNjZjOGM1YmRkYzQzNjc5ZTdhZTBiMmRhMWIwMzkxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzMxOTFlMTAyOTg3NGEzYWFmNmVjOWFkOWU3NDUxMzcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4wMDkzOTcsIDM5LjMzNTMyNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzk4NmJmZDkwMDhlNDgxMGI4YTU5YjgyYWM3MDI4OTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJkY2FjNzZiMjRjNGY1OGE0MGI5YjM5ZDM5ZTQ5M2YgPSAkKGA8ZGl2IGlkPSJodG1sXzMyZGNhYzc2YjI0YzRmNThhNDBiOWIzOWQzOWU0OTNmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5LaGFkemhpa288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc5ODZiZmQ5MDA4ZTQ4MTBiOGE1OWI4MmFjNzAyODkzLnNldENvbnRlbnQoaHRtbF8zMmRjYWM3NmIyNGM0ZjU4YTQwYjliMzlkMzllNDkzZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMzE5MWUxMDI5ODc0YTNhYWY2ZWM5YWQ5ZTc0NTEzNy5iaW5kUG9wdXAocG9wdXBfNzk4NmJmZDkwMDhlNDgxMGI4YTU5YjgyYWM3MDI4OTMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8zMzE5MWUxMDI5ODc0YTNhYWY2ZWM5YWQ5ZTc0NTEzNy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E3NWRhOTM5NDY3MDQ0MTg5YmEwNWYwMjhlY2JlZDcxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMDA5NDA5OTk5OTk5OTk1LCAzOS4zNjIzMjAwMDAwMDAwMDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzYyZjlmN2EzYjkxYTQ3NTg5ZTU1Nzg5OTYxZGMzYmNlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2YTJjNjVmMDdlMzRkYjY4ZDVhYjliMThhNDc0MDdhID0gJChgPGRpdiBpZD0iaHRtbF83NmEyYzY1ZjA3ZTM0ZGI2OGQ1YWI5YjE4YTQ3NDA3YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+THlnb3RraDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNjJmOWY3YTNiOTFhNDc1ODllNTU3ODk5NjFkYzNiY2Uuc2V0Q29udGVudChodG1sXzc2YTJjNjVmMDdlMzRkYjY4ZDVhYjliMThhNDc0MDdhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E3NWRhOTM5NDY3MDQ0MTg5YmEwNWYwMjhlY2JlZDcxLmJpbmRQb3B1cChwb3B1cF82MmY5ZjdhM2I5MWE0NzU4OWU1NTc4OTk2MWRjM2JjZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2E3NWRhOTM5NDY3MDQ0MTg5YmEwNWYwMjhlY2JlZDcxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDIzOTIyZTQyOWZkNDBiOGI2MzFiNDdkNGFjZDg1OGUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4wOTI1MTg0LCA0My41MjIwODUxMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzc3M2ZmMTQ1ODcwODQ4NWJhNDJjMjg2Zjg0NmNjMWRkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2QzYWNkMGMwNThjMzRkMDdiMzM1NjM3MTZlNjBlNmFlID0gJChgPGRpdiBpZD0iaHRtbF9kM2FjZDBjMDU4YzM0ZDA3YjMzNTYzNzE2ZTYwZTZhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5Z2Fuc3U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzc3M2ZmMTQ1ODcwODQ4NWJhNDJjMjg2Zjg0NmNjMWRkLnNldENvbnRlbnQoaHRtbF9kM2FjZDBjMDU4YzM0ZDA3YjMzNTYzNzE2ZTYwZTZhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kMjM5MjJlNDI5ZmQ0MGI4YjYzMWI0N2Q0YWNkODU4ZS5iaW5kUG9wdXAocG9wdXBfNzczZmYxNDU4NzA4NDg1YmE0MmMyODZmODQ2Y2MxZGQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kMjM5MjJlNDI5ZmQ0MGI4YjYzMWI0N2Q0YWNkODU4ZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q4OWFmYzJmNzdkMzQ2YTJiZmUwYjZkN2M2MjE2NDg2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMjE3NzQ4NCwgNDMuNzM4MDIwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYmQ5ZDA0ZDU4MzY2NGY5MWI2NGQ0MWUyYjY3ZThkMDggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzcyYWQ1NWQzNzdkNGY2ZmE3MWFjYTI4NWVlYTFmN2YgPSAkKGA8ZGl2IGlkPSJodG1sX2M3MmFkNTVkMzc3ZDRmNmZhNzFhY2EyODVlZWExZjdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5WZXJraG55IExlc2tlbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYmQ5ZDA0ZDU4MzY2NGY5MWI2NGQ0MWUyYjY3ZThkMDguc2V0Q29udGVudChodG1sX2M3MmFkNTVkMzc3ZDRmNmZhNzFhY2EyODVlZWExZjdmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Q4OWFmYzJmNzdkMzQ2YTJiZmUwYjZkN2M2MjE2NDg2LmJpbmRQb3B1cChwb3B1cF9iZDlkMDRkNTgzNjY0ZjkxYjY0ZDQxZTJiNjdlOGQwOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2Q4OWFmYzJmNzdkMzQ2YTJiZmUwYjZkN2M2MjE2NDg2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTljYjRjNWUzNmFkNDNhNzhiZWI1N2Y2YThlYTMzYzUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4yNjAyNDU4OTk5OTk5OTQsIDQzLjY1Mzc4ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAxZTQwMGExMjk2NzRhZTFhZWYxNGMzYjdiODQ0MTQ3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U2ZTM3OWZiMjI4OTQwYTBhYjg5NjAyYjg5YjkxYjU1ID0gJChgPGRpdiBpZD0iaHRtbF9lNmUzNzlmYjIyODk0MGEwYWI4OTYwMmI4OWI5MWI1NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+WmhlbXRhbGE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAxZTQwMGExMjk2NzRhZTFhZWYxNGMzYjdiODQ0MTQ3LnNldENvbnRlbnQoaHRtbF9lNmUzNzlmYjIyODk0MGEwYWI4OTYwMmI4OWI5MWI1NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OWNiNGM1ZTM2YWQ0M2E3OGJlYjU3ZjZhOGVhMzNjNS5iaW5kUG9wdXAocG9wdXBfMDFlNDAwYTEyOTY3NGFlMWFlZjE0YzNiN2I4NDQxNDcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81OWNiNGM1ZTM2YWQ0M2E3OGJlYjU3ZjZhOGVhMzNjNS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzQ1NjY3OWQwYmY0ZTRlMjc4ZTE4MGNiODkwM2YwOTBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzE3ODQxNSwgNDMuODc2NTE5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mOWFlZWM4NTdiOTc0MTZiYTNmYTk2NmNiMjU5OTY5ZiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMjJhZmFmZmIzNmM0ZTI5OTU3MDVjMWM2NjFjY2QyOCA9ICQoYDxkaXYgaWQ9Imh0bWxfMzIyYWZhZmZiMzZjNGUyOTk1NzA1YzFjNjYxY2NkMjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkVyb2trbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjlhZWVjODU3Yjk3NDE2YmEzZmE5NjZjYjI1OTk2OWYuc2V0Q29udGVudChodG1sXzMyMmFmYWZmYjM2YzRlMjk5NTcwNWMxYzY2MWNjZDI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQ1NjY3OWQwYmY0ZTRlMjc4ZTE4MGNiODkwM2YwOTBkLmJpbmRQb3B1cChwb3B1cF9mOWFlZWM4NTdiOTc0MTZiYTNmYTk2NmNiMjU5OTY5ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQ1NjY3OWQwYmY0ZTRlMjc4ZTE4MGNiODkwM2YwOTBkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjJlMDRhZDk1OTI4NGYzM2I2NGYzZGE4MDI0MTM0NzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zMzM4OTAwMDAwMDAwMDQsIDQzLjgxNzIyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iNjE5ZDcwMWIyZWM0ZjI3OTAyN2ZkNTQ2N2U2NDVhMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80NGJhMGRiMTdlZDY0MTQ3OWY3ODU5MzY3MWMxNmYzZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNDRiYTBkYjE3ZWQ2NDE0NzlmNzg1OTM2NzFjMTZmM2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlByb2dyZXNzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iNjE5ZDcwMWIyZWM0ZjI3OTAyN2ZkNTQ2N2U2NDVhMy5zZXRDb250ZW50KGh0bWxfNDRiYTBkYjE3ZWQ2NDE0NzlmNzg1OTM2NzFjMTZmM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjJlMDRhZDk1OTI4NGYzM2I2NGYzZGE4MDI0MTM0NzkuYmluZFBvcHVwKHBvcHVwX2I2MTlkNzAxYjJlYzRmMjc5MDI3ZmQ1NDY3ZTY0NWEzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNjJlMDRhZDk1OTI4NGYzM2I2NGYzZGE4MDI0MTM0NzkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yOGE0MGZlYTE2MGM0MWZhODgwZWFlNjgzM2M5ZWM2ZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjM0MjMxNTgsIDQzLjkxMjczOTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzVjYjI2ZGQ1MGRhYzQwODY5NzZlMzEyOWU2MDAxZjdmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2RjNzM3MzNkMDhkNzRhMTY4M2M1MWE0OTkxNzBhNGM1ID0gJChgPGRpdiBpZD0iaHRtbF9kYzczNzMzZDA4ZDc0YTE2ODNjNTFhNDk5MTcwYTRjNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QW56b3JleTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWNiMjZkZDUwZGFjNDA4Njk3NmUzMTI5ZTYwMDFmN2Yuc2V0Q29udGVudChodG1sX2RjNzM3MzNkMDhkNzRhMTY4M2M1MWE0OTkxNzBhNGM1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4YTQwZmVhMTYwYzQxZmE4ODBlYWU2ODMzYzllYzZkLmJpbmRQb3B1cChwb3B1cF81Y2IyNmRkNTBkYWM0MDg2OTc2ZTMxMjllNjAwMWY3ZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzI4YTQwZmVhMTYwYzQxZmE4ODBlYWU2ODMzYzllYzZkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODRkYjhjODhhMWM4NDQ0OGJkYWI3OGU1MTllNmQ1ZTggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDM0MzkzOTk5OTk5OTQsIDQ0LjAyNTUyMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1ZGViMWU5MjY5OTQxNjJhYWUyOGIzYmQ3Mjk5NTNkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzllNGMyYzFiNDI1ZjQ1YjRiN2UwMTc4ZWM0MDJmZTljID0gJChgPGRpdiBpZD0iaHRtbF85ZTRjMmMxYjQyNWY0NWI0YjdlMDE3OGVjNDAyZmU5YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S2hhdHVleTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTVkZWIxZTkyNjk5NDE2MmFhZTI4YjNiZDcyOTk1M2Quc2V0Q29udGVudChodG1sXzllNGMyYzFiNDI1ZjQ1YjRiN2UwMTc4ZWM0MDJmZTljKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzg0ZGI4Yzg4YTFjODQ0NDhiZGFiNzhlNTE5ZTZkNWU4LmJpbmRQb3B1cChwb3B1cF81NWRlYjFlOTI2OTk0MTYyYWFlMjhiM2JkNzI5OTUzZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzg0ZGI4Yzg4YTFjODQ0NDhiZGFiNzhlNTE5ZTZkNWU4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMWY2ZjE0YmI0N2U3NDc0ZTgxMWM1Zjc3MWZiN2ZlMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zNDgwODM5LCA0My43Mjc5ODc4OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzQ3ZjE4OTU0NGJmZTQ5MmM5NDI4NzNhZTY1ODZhNzg2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2YTBjZmNjZGZjMzQ4M2E5NGUxZjVkNzI4OWUzMmI4ID0gJChgPGRpdiBpZD0iaHRtbF83NmEwY2ZjY2RmYzM0ODNhOTRlMWY1ZDcyODllMzJiOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+WmFyYWdpemg8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzQ3ZjE4OTU0NGJmZTQ5MmM5NDI4NzNhZTY1ODZhNzg2LnNldENvbnRlbnQoaHRtbF83NmEwY2ZjY2RmYzM0ODNhOTRlMWY1ZDcyODllMzJiOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZjZmMTRiYjQ3ZTc0NzRlODExYzVmNzcxZmI3ZmUyMC5iaW5kUG9wdXAocG9wdXBfNDdmMTg5NTQ0YmZlNDkyYzk0Mjg3M2FlNjU4NmE3ODYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xZjZmMTRiYjQ3ZTc0NzRlODExYzVmNzcxZmI3ZmUyMC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2QwMzYzZDMwMDA2MzQ0MzFiNjRjMzMxMDdiZDE5YTRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzUwNjU4NzAwMDAwMDA0LCA0My45MTAzNDI3OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2I0ZmVlYWU1YWUyOTQxNDY4N2QwMTRhZWVkZjNjNmUzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Q5NTFlY2VmOTViMjQ3NTI4ZGEwYTJjMTA0Zjk5NzY2ID0gJChgPGRpdiBpZD0iaHRtbF9kOTUxZWNlZjk1YjI0NzUyOGRhMGEyYzEwNGY5OTc2NiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VnRvcm95IExlc2tlbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjRmZWVhZTVhZTI5NDE0Njg3ZDAxNGFlZWRmM2M2ZTMuc2V0Q29udGVudChodG1sX2Q5NTFlY2VmOTViMjQ3NTI4ZGEwYTJjMTA0Zjk5NzY2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2QwMzYzZDMwMDA2MzQ0MzFiNjRjMzMxMDdiZDE5YTRjLmJpbmRQb3B1cChwb3B1cF9iNGZlZWFlNWFlMjk0MTQ2ODdkMDE0YWVlZGYzYzZlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2QwMzYzZDMwMDA2MzQ0MzFiNjRjMzMxMDdiZDE5YTRjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTM5NTRkNjUyMGQxNGRjODg3NTIzOWJhOWY2OTNiMWYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My4zODA0NzgwMDAwMDAwMDQsIDQyLjkwNzQ4NDldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2UxZTA4YjA0NmVlMDRlNzZhNjUwYjhhZTk4MDdiZWRmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY3NWNmMDllYTUyYjRjYjhiNmE0OGZmMmQ3YzQ2ODVlID0gJChgPGRpdiBpZD0iaHRtbF82NzVjZjA5ZWE1MmI0Y2I4YjZhNDhmZjJkN2M0Njg1ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Zy4gVHlybnlhdXo8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UxZTA4YjA0NmVlMDRlNzZhNjUwYjhhZTk4MDdiZWRmLnNldENvbnRlbnQoaHRtbF82NzVjZjA5ZWE1MmI0Y2I4YjZhNDhmZjJkN2M0Njg1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xMzk1NGQ2NTIwZDE0ZGM4ODc1MjM5YmE5ZjY5M2IxZi5iaW5kUG9wdXAocG9wdXBfZTFlMDhiMDQ2ZWUwNGU3NmE2NTBiOGFlOTgwN2JlZGYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xMzk1NGQ2NTIwZDE0ZGM4ODc1MjM5YmE5ZjY5M2IxZi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk0MzBlMTkxNTEyNzQ4YzE5NjA3NDYzOTMwYThlN2M2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuMzkzMzU1Mjk5OTk5OTk2LCA0My43NDIyNzk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMTllNmI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF82MjU5OTIzM2FkMWU0NDZjOWJkODZjNGI1ZTlmMTQ2ZSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF81OWI3NzBlNzZkNDg0YmVmYjBhZTMxYTRlYmY5MGQxZCA9ICQoYDxkaXYgaWQ9Imh0bWxfNTliNzcwZTc2ZDQ4NGJlZmIwYWUzMWE0ZWJmOTBkMWQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkF1c2hpZ2VyPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MjU5OTIzM2FkMWU0NDZjOWJkODZjNGI1ZTlmMTQ2ZS5zZXRDb250ZW50KGh0bWxfNTliNzcwZTc2ZDQ4NGJlZmIwYWUzMWE0ZWJmOTBkMWQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTQzMGUxOTE1MTI3NDhjMTk2MDc0NjM5MzBhOGU3YzYuYmluZFBvcHVwKHBvcHVwXzYyNTk5MjMzYWQxZTQ0NmM5YmQ4NmM0YjVlOWYxNDZlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOTQzMGUxOTE1MTI3NDhjMTk2MDc0NjM5MzBhOGU3YzYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMGI2MTFkMjMyNmQ0NWVhODQ4NGMxOTUxMGU3MDMzZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQxMTgxNDQsIDQzLjkwNDUxMDIwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzA4N2IwODk0ZmRmNGRkMTgzMDY3NTMyNjY4NDgxN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzExZjVhYTQxYjFmNDNkMzg1Y2FkMzFmNjFkYTViOTYgPSAkKGA8ZGl2IGlkPSJodG1sXzMxMWY1YWE0MWIxZjQzZDM4NWNhZDMxZjYxZGE1Yjk2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Bcmd1ZGFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jMDg3YjA4OTRmZGY0ZGQxODMwNjc1MzI2Njg0ODE3ZC5zZXRDb250ZW50KGh0bWxfMzExZjVhYTQxYjFmNDNkMzg1Y2FkMzFmNjFkYTViOTYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTBiNjExZDIzMjZkNDVlYTg0ODRjMTk1MTBlNzAzM2YuYmluZFBvcHVwKHBvcHVwX2MwODdiMDg5NGZkZjRkZDE4MzA2NzUzMjY2ODQ4MTdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTBiNjExZDIzMjZkNDVlYTg0ODRjMTk1MTBlNzAzM2YuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hNmI3ZWQzYjU2NWY0MGFmYjdmNzBmNGFkNmQ4ZjVhYSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ1MzU2MDYsIDQ0LjIxMTk3NzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMxOWU2YjQiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2YyOGYzMmNiOGE4NjRhYzhiMmEwNzAxODVmYmE0MTNhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzMxZmE2YmQ3NzRjOTQ5MjZiZjBjODBmY2NkNzA4MjUzID0gJChgPGRpdiBpZD0iaHRtbF8zMWZhNmJkNzc0Yzk0OTI2YmYwYzgwZmNjZDcwODI1MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QmVsb2dsaW5za29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9mMjhmMzJjYjhhODY0YWM4YjJhMDcwMTg1ZmJhNDEzYS5zZXRDb250ZW50KGh0bWxfMzFmYTZiZDc3NGM5NDkyNmJmMGM4MGZjY2Q3MDgyNTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTZiN2VkM2I1NjVmNDBhZmI3ZjcwZjRhZDZkOGY1YWEuYmluZFBvcHVwKHBvcHVwX2YyOGYzMmNiOGE4NjRhYzhiMmEwNzAxODVmYmE0MTNhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYTZiN2VkM2I1NjVmNDBhZmI3ZjcwZjRhZDZkOGY1YWEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wYzljZWVhNDE0ZGU0ZjM0YTFiNmE1YTc0YmFiNjcyOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ2NjI4MzM5OTk5OTk5NSwgNDMuODM2NjkzNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzE5ZTZiNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjEzNjMwZDgwYThiNGE4N2E5OWY1ZWI2MGI2OGIwZWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzUyMWZlZTM3ZjIwNGU1MTliNGRkMDc3MGRkOGFjMWYgPSAkKGA8ZGl2IGlkPSJodG1sX2M1MjFmZWUzN2YyMDRlNTE5YjRkZDA3NzBkZDhhYzFmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5TdGFyeSBDaGVyZWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzYxMzYzMGQ4MGE4YjRhODdhOTlmNWViNjBiNjhiMGVkLnNldENvbnRlbnQoaHRtbF9jNTIxZmVlMzdmMjA0ZTUxOWI0ZGQwNzcwZGQ4YWMxZik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wYzljZWVhNDE0ZGU0ZjM0YTFiNmE1YTc0YmFiNjcyOC5iaW5kUG9wdXAocG9wdXBfNjEzNjMwZDgwYThiNGE4N2E5OWY1ZWI2MGI2OGIwZWQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wYzljZWVhNDE0ZGU0ZjM0YTFiNmE1YTc0YmFiNjcyOC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2UxNTRmY2UxZGQ4MzQyYzQ5ZWVhMTMyNjFlZWY2YWNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDc3ODExMTAwMDAwMDA0LCA0NC4xMjM4ODNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzM1ZTk0Zjc4Y2U0YzQ5YmY5ZmJjYjBjM2EwYTUwNmMxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzQ0YzFlNzgwMGNlNTQyMDE4ZTJkMzZmMDE4ZDlkNWE0ID0gJChgPGRpdiBpZD0iaHRtbF80NGMxZTc4MDBjZTU0MjAxOGUyZDM2ZjAxOGQ5ZDVhNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SW50ZXJuYXRzaW9uYWxub2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM1ZTk0Zjc4Y2U0YzQ5YmY5ZmJjYjBjM2EwYTUwNmMxLnNldENvbnRlbnQoaHRtbF80NGMxZTc4MDBjZTU0MjAxOGUyZDM2ZjAxOGQ5ZDVhNCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lMTU0ZmNlMWRkODM0MmM0OWVlYTEzMjYxZWVmNmFjZS5iaW5kUG9wdXAocG9wdXBfMzVlOTRmNzhjZTRjNDliZjlmYmNiMGMzYTBhNTA2YzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lMTU0ZmNlMWRkODM0MmM0OWVlYTEzMjYxZWVmNmFjZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Q0ZmMxNmUyMTQzZDRkYjU5OGFiMTljZDU2NzM2MzhmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNDc4MTE4MSwgNDMuNzYwNjQ3NjAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8wMjYwMGNjODg0ZGI0NTJmYmJkNWYxZWEwMGEzMmYwOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzcwOTgzOGRiNjQ0MmU3OWE1MmRiZGYyMjZiYTUxMiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWM3MDk4MzhkYjY0NDJlNzlhNTJkYmRmMjI2YmE1MTIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlVydmFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wMjYwMGNjODg0ZGI0NTJmYmJkNWYxZWEwMGEzMmYwOC5zZXRDb250ZW50KGh0bWxfYWM3MDk4MzhkYjY0NDJlNzlhNTJkYmRmMjI2YmE1MTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZDRmYzE2ZTIxNDNkNGRiNTk4YWIxOWNkNTY3MzYzOGYuYmluZFBvcHVwKHBvcHVwXzAyNjAwY2M4ODRkYjQ1MmZiYmQ1ZjFlYTAwYTMyZjA4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZDRmYzE2ZTIxNDNkNGRiNTk4YWIxOWNkNTY3MzYzOGYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85NGEzMWIyMmNhZGY0NzgxOWYyNGEzYjJiNWZmOWJjYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjQ4NTU3NTgsIDQ0LjM2MzY1NTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlYTRjYWVkM2VjMjQxNmI5NTQyMzkzZDY3YzMwZTVhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzg1MDg3YWU4Mjg0YzRmNGFhMGZjZWFiNWU2YTE2NDhjID0gJChgPGRpdiBpZD0iaHRtbF84NTA4N2FlODI4NGM0ZjRhYTBmY2VhYjVlNmExNjQ4YyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SW5hcmtveTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGVhNGNhZWQzZWMyNDE2Yjk1NDIzOTNkNjdjMzBlNWEuc2V0Q29udGVudChodG1sXzg1MDg3YWU4Mjg0YzRmNGFhMGZjZWFiNWU2YTE2NDhjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk0YTMxYjIyY2FkZjQ3ODE5ZjI0YTNiMmI1ZmY5YmNjLmJpbmRQb3B1cChwb3B1cF84ZWE0Y2FlZDNlYzI0MTZiOTU0MjM5M2Q2N2MzMGU1YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzk0YTMxYjIyY2FkZjQ3ODE5ZjI0YTNiMmI1ZmY5YmNjLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTU1NGU2MjkyZmUwNDg0OWJhNDdlZmY5NmVhNGE0MWUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDM5OTU2LCA0My43MTg1NTUzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmZlMTE5IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jNzAwYTc4ZTJjYjA0ODc1YjVkMjcwY2ZmOGU2YmJjYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kMjFkY2RmYjllY2I0M2IyYjI0OGI4ZTczNTRiZDY4MSA9ICQoYDxkaXYgaWQ9Imh0bWxfZDIxZGNkZmI5ZWNiNDNiMmIyNDhiOGU3MzU0YmQ2ODEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk5hcnRhbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYzcwMGE3OGUyY2IwNDg3NWI1ZDI3MGNmZjhlNmJiY2Euc2V0Q29udGVudChodG1sX2QyMWRjZGZiOWVjYjQzYjJiMjQ4YjhlNzM1NGJkNjgxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzk1NTRlNjI5MmZlMDQ4NDliYTQ3ZWZmOTZlYTRhNDFlLmJpbmRQb3B1cChwb3B1cF9jNzAwYTc4ZTJjYjA0ODc1YjVkMjcwY2ZmOGU2YmJjYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzk1NTRlNjI5MmZlMDQ4NDliYTQ3ZWZmOTZlYTRhNDFlLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjMwNDAxZjU4NTQ3NGNjZDllYjNkYjIwMGQ1YTJlM2QgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MDU5MTkzOTk5OTk5OTYsIDQ0LjIxNDQ4MjZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmZmUxMTkiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlZTkzNTgyMDdiNzRiYTNiYjAzNWIwOTE3MzI4ZTk0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzM5ZjVjNTdlOTZiMzRkZTZiYzU1ODMxNThlMjQ4N2I0ID0gJChgPGRpdiBpZD0iaHRtbF8zOWY1YzU3ZTk2YjM0ZGU2YmM1NTgzMTU4ZTI0ODdiNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+VGFtYm92c2tvZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfOGVlOTM1ODIwN2I3NGJhM2JiMDM1YjA5MTczMjhlOTQuc2V0Q29udGVudChodG1sXzM5ZjVjNTdlOTZiMzRkZTZiYzU1ODMxNThlMjQ4N2I0KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2YzMDQwMWY1ODU0NzRjY2Q5ZWIzZGIyMDBkNWEyZTNkLmJpbmRQb3B1cChwb3B1cF84ZWU5MzU4MjA3Yjc0YmEzYmIwMzViMDkxNzMyOGU5NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2YzMDQwMWY1ODU0NzRjY2Q5ZWIzZGIyMDBkNWEyZTNkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmM5NGI3MTNhOGY5NDQwY2ExYjIzMGM0MDYwMjBlZjEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41MjQ0NDAwMDAwMDAwMDYsIDQzLjkzMTk0MDAwMDAwMDAwNF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfY2JlMDk0NDZmOWFkNDcxY2FiZTE3YTA3MmI0ZmNlNDMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzVlNjY5NjYzN2EyNDA4NjgyZmQwZTZmOTMzYTViOTIgPSAkKGA8ZGl2IGlkPSJodG1sXzc1ZTY2OTY2MzdhMjQwODY4MmZkMGU2ZjkzM2E1YjkyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5OaXpobnkgQ2hlcmVrPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jYmUwOTQ0NmY5YWQ0NzFjYWJlMTdhMDcyYjRmY2U0My5zZXRDb250ZW50KGh0bWxfNzVlNjY5NjYzN2EyNDA4NjgyZmQwZTZmOTMzYTViOTIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZmM5NGI3MTNhOGY5NDQwY2ExYjIzMGM0MDYwMjBlZjEuYmluZFBvcHVwKHBvcHVwX2NiZTA5NDQ2ZjlhZDQ3MWNhYmUxN2EwNzJiNGZjZTQzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZmM5NGI3MTNhOGY5NDQwY2ExYjIzMGM0MDYwMjBlZjEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lMDliMjBhZDUyOWQ0MjQ5OGZkNTQwZWNhMTZiMTI5MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUyNjU2NzcsIDQzLjYwMjcwNDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU1OTczZTkyOTI5YjRmN2I4YjM4MDA5OTU1ZjlkMGRjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczYmQ3MTNmYzhhZTRhNjhhNmU0YjJiNjA5MDllZTc0ID0gJChgPGRpdiBpZD0iaHRtbF83M2JkNzEzZmM4YWU0YTY4YTZlNGIyYjYwOTA5ZWU3NCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+U2hhbHVzaGthPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81NTk3M2U5MjkyOWI0ZjdiOGIzODAwOTk1NWY5ZDBkYy5zZXRDb250ZW50KGh0bWxfNzNiZDcxM2ZjOGFlNGE2OGE2ZTRiMmI2MDkwOWVlNzQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTA5YjIwYWQ1MjlkNDI0OThmZDU0MGVjYTE2YjEyOTAuYmluZFBvcHVwKHBvcHVwXzU1OTczZTkyOTI5YjRmN2I4YjM4MDA5OTU1ZjlkMGRjKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTA5YjIwYWQ1MjlkNDI0OThmZDU0MGVjYTE2YjEyOTAuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hYjY3Y2Y0ZjBmODM0YTIyYThkNzA1NzU1NzYxZWY2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjUzODU5NzcwMDAwMDAwNCwgNDMuOTMxNzQzOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmU5OGYzY2JiMDc5NDRhNThmZDUxMDhhZWE5NDNlZjMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNDM1MGMwM2UxMDhmNDliZmJlMjE5ODcwZTUyMTMxODAgPSAkKGA8ZGl2IGlkPSJodG1sXzQzNTBjMDNlMTA4ZjQ5YmZiZTIxOTg3MGU1MjEzMTgwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Qc3luYWJvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTk4ZjNjYmIwNzk0NGE1OGZkNTEwOGFlYTk0M2VmMy5zZXRDb250ZW50KGh0bWxfNDM1MGMwM2UxMDhmNDliZmJlMjE5ODcwZTUyMTMxODApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYWI2N2NmNGYwZjgzNGEyMmE4ZDcwNTc1NTc2MWVmNjEuYmluZFBvcHVwKHBvcHVwXzZlOThmM2NiYjA3OTQ0YTU4ZmQ1MTA4YWVhOTQzZWYzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYWI2N2NmNGYwZjgzNGEyMmE4ZDcwNTc1NTc2MWVmNjEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jZjQ3NTAzZmZmYjU0NDg0OTYwMzAxYjZiYWE0Mjg2YiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjU0MDU4ODcwMDAwMDAxLCA0My44OTQzMjE3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTQ5ZjgxZDg5NWY0YzIwOWNiY2ZkNzE4NmE1ZTIwMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNjA0YjhmMTM1OTY0NTU3YmFiZGI2Mjg2OGIyODRhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfMzYwNGI4ZjEzNTk2NDU1N2JhYmRiNjI4NjhiMjg0YTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPktha2h1bjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGU0OWY4MWQ4OTVmNGMyMDljYmNmZDcxODZhNWUyMDMuc2V0Q29udGVudChodG1sXzM2MDRiOGYxMzU5NjQ1NTdiYWJkYjYyODY4YjI4NGE5KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NmNDc1MDNmZmZiNTQ0ODQ5NjAzMDFiNmJhYTQyODZiLmJpbmRQb3B1cChwb3B1cF80ZTQ5ZjgxZDg5NWY0YzIwOWNiY2ZkNzE4NmE1ZTIwMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2NmNDc1MDNmZmZiNTQ0ODQ5NjAzMDFiNmJhYTQyODZiLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYWYwNjQ1MjkyY2RmNDNkZjliNjZkNmE2NDYzM2Q0OTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTI4MTc0OTk5OTk5OTYsIDQzLjc5NzQ2Mjg5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8yMWI0MDBlMjBiYmY0OTYyYjMzZWQxMWE0OTljMmJlYSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lNmVjYmY4M2VhMWE0ZmM1YmM0YmE2NWY0YWNiNmNjMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTZlY2JmODNlYTFhNGZjNWJjNGJhNjVmNGFjYjZjYzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlNoaXRraGFsYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjFiNDAwZTIwYmJmNDk2MmIzM2VkMTFhNDk5YzJiZWEuc2V0Q29udGVudChodG1sX2U2ZWNiZjgzZWExYTRmYzViYzRiYTY1ZjRhY2I2Y2MxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FmMDY0NTI5MmNkZjQzZGY5YjY2ZDZhNjQ2MzNkNDkzLmJpbmRQb3B1cChwb3B1cF8yMWI0MDBlMjBiYmY0OTYyYjMzZWQxMWE0OTljMmJlYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2FmMDY0NTI5MmNkZjQzZGY5YjY2ZDZhNjQ2MzNkNDkzLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmIxZGYyODVlOTM5NGQ1NjlmNjdhODMwNTdhN2E0MmYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTQxNywgNDQuMDk5NzJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0NzlhYWI5NzNkNDRkZmZiMTYwOGZkMjIxYTA1MjI2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVjZTFmZDg3NjBhMzQ5MDBhODdlODU1YTMzZTFlMmRlID0gJChgPGRpdiBpZD0iaHRtbF81Y2UxZmQ4NzYwYTM0OTAwYTg3ZTg1NWEzM2UxZTJkZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5bmFzaGtobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDQ3OWFhYjk3M2Q0NGRmZmIxNjA4ZmQyMjFhMDUyMjYuc2V0Q29udGVudChodG1sXzVjZTFmZDg3NjBhMzQ5MDBhODdlODU1YTMzZTFlMmRlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJiMWRmMjg1ZTkzOTRkNTY5ZjY3YTgzMDU3YTdhNDJmLmJpbmRQb3B1cChwb3B1cF8wNDc5YWFiOTczZDQ0ZGZmYjE2MDhmZDIyMWEwNTIyNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzJiMWRmMjg1ZTkzOTRkNTY5ZjY3YTgzMDU3YTdhNDJmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjkzODQ5MDA2NzZiNDQ4NDhkNjJiYjRlMjY2Y2IyOGYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NTczNjc1LCA0My4xOTQ5NzMxMDAwMDAwMDZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4NjI5YzBmNGJlZTQ3YmNhMmJkMTVkOTAwYjdlZGQ2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzBmOGUyMzE3OGI5ZDRjZDliMWM3NjQwNjE1NTRhOWMzID0gJChgPGRpdiBpZD0iaHRtbF8wZjhlMjMxNzhiOWQ0Y2Q5YjFjNzY0MDYxNTU0YTljMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Wmhhbmtob3Rla288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzg4NjI5YzBmNGJlZTQ3YmNhMmJkMTVkOTAwYjdlZGQ2LnNldENvbnRlbnQoaHRtbF8wZjhlMjMxNzhiOWQ0Y2Q5YjFjNzY0MDYxNTU0YTljMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82OTM4NDkwMDY3NmI0NDg0OGQ2MmJiNGUyNjZjYjI4Zi5iaW5kUG9wdXAocG9wdXBfODg2MjljMGY0YmVlNDdiY2EyYmQxNWQ5MDBiN2VkZDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82OTM4NDkwMDY3NmI0NDg0OGQ2MmJiNGUyNjZjYjI4Zi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2FlMmEwNjEwNzYwYTQ2Y2ZiYTZjZTUxOTJlNGY3ODYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTU3NzAzOSwgNDMuNDM3MTgyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTc1NjE4ZjliYjI0MWUzYjJmMzQ1MGQyNGMyMjVlNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZjkyYTQ2NTk1ZjU0NjA2OGFmNGU2YTZhMTVlOTlkMSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGY5MmE0NjU5NWY1NDYwNjhhZjRlNmE2YTE1ZTk5ZDEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkxlY2hpbmtheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmE3NTYxOGY5YmIyNDFlM2IyZjM0NTBkMjRjMjI1ZTQuc2V0Q29udGVudChodG1sX2RmOTJhNDY1OTVmNTQ2MDY4YWY0ZTZhNmExNWU5OWQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2FlMmEwNjEwNzYwYTQ2Y2ZiYTZjZTUxOTJlNGY3ODYyLmJpbmRQb3B1cChwb3B1cF9mYTc1NjE4ZjliYjI0MWUzYjJmMzQ1MGQyNGMyMjVlNCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2FlMmEwNjEwNzYwYTQ2Y2ZiYTZjZTUxOTJlNGY3ODYyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjg1ZTBlZDQ3NzVjNGYzMzk2ODdhZGU4MzBiZTA4OGQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjEyNjk1LCA0My42MDQyNjQxXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80NjBlZTk0YjM4YWM0MzNmOTBmMjlmZDBmYmU4ODRhOCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82YWNjODkyOWU0YTU0ZmJjYjFhZjUyZjc2Y2RhZDczZSA9ICQoYDxkaXYgaWQ9Imh0bWxfNmFjYzg5MjllNGE1NGZiY2IxYWY1MmY3NmNkYWQ3M2UiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPmcuIENoZWdlbTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDYwZWU5NGIzOGFjNDMzZjkwZjI5ZmQwZmJlODg0YTguc2V0Q29udGVudChodG1sXzZhY2M4OTI5ZTRhNTRmYmNiMWFmNTJmNzZjZGFkNzNlKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI4NWUwZWQ0Nzc1YzRmMzM5Njg3YWRlODMwYmUwODhkLmJpbmRQb3B1cChwb3B1cF80NjBlZTk0YjM4YWM0MzNmOTBmMjlmZDBmYmU4ODRhOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzI4NWUwZWQ0Nzc1YzRmMzM5Njg3YWRlODMwYmUwODhkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWIzYjljNjMwYmQyNDM1N2JjOGQ2MzRlNDQ3NjQ1ODIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My41NjY1NTU0LCA0My44ODQxNzg5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzAzNDJkZmQ1YTQ1ZjQwMGFhMzkzYTQ0Nzc4Mjg5MmQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzZmMDU4ODEyZDI1YjQ1OWI5ZjUwMGUyODI0MGJhMTQ4ID0gJChgPGRpdiBpZD0iaHRtbF82ZjA1ODgxMmQyNWI0NTliOWY1MDBlMjgyNDBiYTE0OCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+Zy4gTmFydGthbGE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzAzNDJkZmQ1YTQ1ZjQwMGFhMzkzYTQ0Nzc4Mjg5MmQyLnNldENvbnRlbnQoaHRtbF82ZjA1ODgxMmQyNWI0NTliOWY1MDBlMjgyNDBiYTE0OCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YjNiOWM2MzBiZDI0MzU3YmM4ZDYzNGU0NDc2NDU4Mi5iaW5kUG9wdXAocG9wdXBfMDM0MmRmZDVhNDVmNDAwYWEzOTNhNDQ3NzgyODkyZDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85YjNiOWM2MzBiZDI0MzU3YmM4ZDYzNGU0NDc2NDU4Mi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzRjNzI2YzQxZDhjNDRhZTU5Y2UzNWNkMGE0MDBmMGZlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTY3ODk2OCwgNDMuODQxNTgxNzAwMDAwMDA2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lMDQ5ZjZjZjZmNzc0MjAzOTAxOTliMmRhN2E0MjNhYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzNiODBhYjE4OGQ0YTZmYmNiNTFhNmY2OTQxMzQ3YSA9ICQoYDxkaXYgaWQ9Imh0bWxfYWMzYjgwYWIxODhkNGE2ZmJjYjUxYTZmNjk0MTM0N2EiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk1vcnpva2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2UwNDlmNmNmNmY3NzQyMDM5MDE5OWIyZGE3YTQyM2FjLnNldENvbnRlbnQoaHRtbF9hYzNiODBhYjE4OGQ0YTZmYmNiNTFhNmY2OTQxMzQ3YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl80YzcyNmM0MWQ4YzQ0YWU1OWNlMzVjZDBhNDAwZjBmZS5iaW5kUG9wdXAocG9wdXBfZTA0OWY2Y2Y2Zjc3NDIwMzkwMTk5YjJkYTdhNDIzYWMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl80YzcyNmM0MWQ4YzQ0YWU1OWNlMzVjZDBhNDAwZjBmZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2M1OWRiODI0MjhhYjQxMzQ5NTk5Mzg5MTk1NmY0NGU4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNTc4MDczOCwgNDMuNzU4OTE2NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNmRhOTMzYjRkMmE5NDI3YmEyYzk4YzRjNzViZmRiN2QgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfY2MzY2VhYTc0YmZjNDg3NmI1NjIxN2M3ZWU3NGIwODggPSAkKGA8ZGl2IGlkPSJodG1sX2NjM2NlYWE3NGJmYzQ4NzZiNTYyMTdjN2VlNzRiMDg4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5HZXJtZW5jaGlrPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZGE5MzNiNGQyYTk0MjdiYTJjOThjNGM3NWJmZGI3ZC5zZXRDb250ZW50KGh0bWxfY2MzY2VhYTc0YmZjNDg3NmI1NjIxN2M3ZWU3NGIwODgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzU5ZGI4MjQyOGFiNDEzNDk1OTkzODkxOTU2ZjQ0ZTguYmluZFBvcHVwKHBvcHVwXzZkYTkzM2I0ZDJhOTQyN2JhMmM5OGM0Yzc1YmZkYjdkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYzU5ZGI4MjQyOGFiNDEzNDk1OTkzODkxOTU2ZjQ0ZTguYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl84YzQwNmI3NWFhNzA0ZjNlYjg2ZDBjNDAwZWI3NjYwMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwMzMyMzgsIDQzLjk5NDgwNjRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU5M2I2NTI1YTZmOTQ2OGVhMDE5Y2FhMjExMmZjNWM2ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2U4YzIxMTExOWU0YjQ2YzY5ZGZlMjliYjVmYmViOWVhID0gJChgPGRpdiBpZD0iaHRtbF9lOGMyMTExMTllNGI0NmM2OWRmZTI5YmI1ZmJlYjllYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5a29kPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF81OTNiNjUyNWE2Zjk0NjhlYTAxOWNhYTIxMTJmYzVjNi5zZXRDb250ZW50KGh0bWxfZThjMjExMTE5ZTRiNDZjNjlkZmUyOWJiNWZiZWI5ZWEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOGM0MDZiNzVhYTcwNGYzZWI4NmQwYzQwMGViNzY2MDMuYmluZFBvcHVwKHBvcHVwXzU5M2I2NTI1YTZmOTQ2OGVhMDE5Y2FhMjExMmZjNWM2KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOGM0MDZiNzVhYTcwNGYzZWI4NmQwYzQwMGViNzY2MDMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81ZDdiOTBlYjMyODY0MWRiOTJlZDU2ZGFiMDc5ODIxOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNTUyNzcsIDQzLjYxMDYyNjIwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNjEyMzc5MmE5OTExNDQxMmJmMzkxYTM4Nzc2MzQ0MzMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNzgyNWJmY2FlOTFjNDk2ZDg3NDZlZTM2M2NjODNjYzcgPSAkKGA8ZGl2IGlkPSJodG1sXzc4MjViZmNhZTkxYzQ5NmQ4NzQ2ZWUzNjNjYzgzY2M3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5DaGVnZW0gVnRvcm95PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82MTIzNzkyYTk5MTE0NDEyYmYzOTFhMzg3NzYzNDQzMy5zZXRDb250ZW50KGh0bWxfNzgyNWJmY2FlOTFjNDk2ZDg3NDZlZTM2M2NjODNjYzcpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNWQ3YjkwZWIzMjg2NDFkYjkyZWQ1NmRhYjA3OTgyMTguYmluZFBvcHVwKHBvcHVwXzYxMjM3OTJhOTkxMTQ0MTJiZjM5MWEzODc3NjM0NDMzKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNWQ3YjkwZWIzMjg2NDFkYjkyZWQ1NmRhYjA3OTgyMTguYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lNDU3YzQ5ZjRlYTM0ZjJlOWY3ZjAwOWE5MDA4MDlhZCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYwNjk0LCA0My44MzQxN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTBkMjM5MWRjOTg3NGI1MWIwYTViNzQzYmZiNDg4ZWYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGI2OTY1OTI0ZTU3NDAwNDkwNWRjNDU4MTUwZDg4YmIgPSAkKGA8ZGl2IGlkPSJodG1sX2RiNjk2NTkyNGU1NzQwMDQ5MDVkYzQ1ODE1MGQ4OGJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5DaGVybmF5YSBSZWNoa2E8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2EwZDIzOTFkYzk4NzRiNTFiMGE1Yjc0M2JmYjQ4OGVmLnNldENvbnRlbnQoaHRtbF9kYjY5NjU5MjRlNTc0MDA0OTA1ZGM0NTgxNTBkODhiYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNDU3YzQ5ZjRlYTM0ZjJlOWY3ZjAwOWE5MDA4MDlhZC5iaW5kUG9wdXAocG9wdXBfYTBkMjM5MWRjOTg3NGI1MWIwYTViNzQzYmZiNDg4ZWYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lNDU3YzQ5ZjRlYTM0ZjJlOWY3ZjAwOWE5MDA4MDlhZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhOTZjODU2NmUzZjRmMGE5ZDE3YzE4OTc5Y2UxN2FkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjEwMTk3MiwgNDMuMzQ2OTkxNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODY1N2YxYzdlNzI4NGVhNzlkM2E1NTczZGVkZWExMmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJjNjU3MmRlNWQ4NGQ2ZmE3NjFkNDMyODQ5YzU2YWMgPSAkKGA8ZGl2IGlkPSJodG1sXzMyYzY1NzJkZTVkODRkNmZhNzYxZDQzMjg0OWM1NmFjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5aYXl1a292bzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODY1N2YxYzdlNzI4NGVhNzlkM2E1NTczZGVkZWExMmIuc2V0Q29udGVudChodG1sXzMyYzY1NzJkZTVkODRkNmZhNzYxZDQzMjg0OWM1NmFjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2RhOTZjODU2NmUzZjRmMGE5ZDE3YzE4OTc5Y2UxN2FkLmJpbmRQb3B1cChwb3B1cF84NjU3ZjFjN2U3Mjg0ZWE3OWQzYTU1NzNkZWRlYTEyYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2RhOTZjODU2NmUzZjRmMGE5ZDE3YzE4OTc5Y2UxN2FkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzAzMTc3NDQyNGQ3NDczODkzODBjZDA1MGEwOGJjMTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTQ3OTYyMDAwMDAwMSwgNDQuMzUxNTQwMV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGJhNTUzM2Q3YTczNDU1ODlmZmNmOGQwZDJkOWQ2NTggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfM2M5OWQ0NmNkZWI2NDYyOWEyZjg4ODE0Njg0OGJhMTMgPSAkKGA8ZGl2IGlkPSJodG1sXzNjOTlkNDZjZGViNjQ2MjlhMmY4ODgxNDY4NDhiYTEzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Ob3ZvLUtoYW1pZGllPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kYmE1NTMzZDdhNzM0NTU4OWZmY2Y4ZDBkMmQ5ZDY1OC5zZXRDb250ZW50KGh0bWxfM2M5OWQ0NmNkZWI2NDYyOWEyZjg4ODE0Njg0OGJhMTMpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYzAzMTc3NDQyNGQ3NDczODkzODBjZDA1MGEwOGJjMTAuYmluZFBvcHVwKHBvcHVwX2RiYTU1MzNkN2E3MzQ1NTg5ZmZjZjhkMGQyZDlkNjU4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYzAzMTc3NDQyNGQ3NDczODkzODBjZDA1MGEwOGJjMTAuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl80MDAzNjMyNDk5YTE0OTNhYjJmMDg3YTU3NzE4MzE0NCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYxNTc1NDYsIDQ0LjA5MjY1NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI1YjhlOTcyYjM2NjRmMWNiMDEyNjliZDQ4MGY0ZWQzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRhNTMwNDkyMjFmNDQ2MjA4YWI0NzllODRhOTA2YTE1ID0gJChgPGRpdiBpZD0iaHRtbF80YTUzMDQ5MjIxZjQ0NjIwOGFiNDc5ZTg0YTkwNmExNSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+RHpodWxhdDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjViOGU5NzJiMzY2NGYxY2IwMTI2OWJkNDgwZjRlZDMuc2V0Q29udGVudChodG1sXzRhNTMwNDkyMjFmNDQ2MjA4YWI0NzllODRhOTA2YTE1KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzQwMDM2MzI0OTlhMTQ5M2FiMmYwODdhNTc3MTgzMTQ0LmJpbmRQb3B1cChwb3B1cF8yNWI4ZTk3MmIzNjY0ZjFjYjAxMjY5YmQ0ODBmNGVkMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzQwMDM2MzI0OTlhMTQ5M2FiMmYwODdhNTc3MTgzMTQ0LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOTRjNTA0Yjc3MGE0NGRlYjg2MDRjYzYxYmFhNWM2N2EgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MTk3NTU3MDAwMDAwMDYsIDQ0LjEzMDUyODc5OTk5OTk5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zYTY0MjUyMDllNzY0Y2E3YjdiMDc2MjhjODM1ZGExYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jYzc5NWZmYWExNmI0ZmUwYTI0Mzk3MDVmOWFhZjAxMCA9ICQoYDxkaXYgaWQ9Imh0bWxfY2M3OTVmZmFhMTZiNGZlMGEyNDM5NzA1ZjlhYWYwMTAiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkt1eWFuPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8zYTY0MjUyMDllNzY0Y2E3YjdiMDc2MjhjODM1ZGExYi5zZXRDb250ZW50KGh0bWxfY2M3OTVmZmFhMTZiNGZlMGEyNDM5NzA1ZjlhYWYwMTApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOTRjNTA0Yjc3MGE0NGRlYjg2MDRjYzYxYmFhNWM2N2EuYmluZFBvcHVwKHBvcHVwXzNhNjQyNTIwOWU3NjRjYTdiN2IwNzYyOGM4MzVkYTFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOTRjNTA0Yjc3MGE0NGRlYjg2MDRjYzYxYmFhNWM2N2EuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jN2YzODE5ZTllYjU0MTE5YTEyNjAzNDUxNGEzMDc2MiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjYyOTU5NzQ5OTk5OTk5NiwgNDQuMTQzNjk3Nzk5OTk5OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzg4Yjk0MzBiYmUzZDRmNTM4YTVmN2FmZDdmMmMxZjU4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FjYTY0YmE3OWY5MjQ2Mzk5ZTMwOWM5YjU5MTlkNTIyID0gJChgPGRpdiBpZD0iaHRtbF9hY2E2NGJhNzlmOTI0NjM5OWUzMDljOWI1OTE5ZDUyMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+T3B5dG5vZTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODhiOTQzMGJiZTNkNGY1MzhhNWY3YWZkN2YyYzFmNTguc2V0Q29udGVudChodG1sX2FjYTY0YmE3OWY5MjQ2Mzk5ZTMwOWM5YjU5MTlkNTIyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M3ZjM4MTllOWViNTQxMTlhMTI2MDM0NTE0YTMwNzYyLmJpbmRQb3B1cChwb3B1cF84OGI5NDMwYmJlM2Q0ZjUzOGE1ZjdhZmQ3ZjJjMWY1OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M3ZjM4MTllOWViNTQxMTlhMTI2MDM0NTE0YTMwNzYyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzkyZGEzY2EzYTkzNDNjY2JiY2NhYjk5NmEwZGRmNjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MzE5NCwgNDQuMjY5MTddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5MTZlNzA2MjMxNDQxOTY4NDZlYjI3MTVmYTZlYWYzID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzAyNzY5ZmQyMzUyZDRkM2ZiYzQ3MmEyMzY3NGY2ZGVjID0gJChgPGRpdiBpZD0iaHRtbF8wMjc2OWZkMjM1MmQ0ZDNmYmM0NzJhMjM2NzRmNmRlYyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+TWFseSBUZXJlazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjkxNmU3MDYyMzE0NDE5Njg0NmViMjcxNWZhNmVhZjMuc2V0Q29udGVudChodG1sXzAyNzY5ZmQyMzUyZDRkM2ZiYzQ3MmEyMzY3NGY2ZGVjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M5MmRhM2NhM2E5MzQzY2NiYmNjYWI5OTZhMGRkZjY5LmJpbmRQb3B1cChwb3B1cF9mOTE2ZTcwNjIzMTQ0MTk2ODQ2ZWIyNzE1ZmE2ZWFmMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M5MmRhM2NhM2E5MzQzY2NiYmNjYWI5OTZhMGRkZjY5LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTUzN2M2YzlkZDgwNGM0NTg1YmEyNTUyZjUwOGJlMmIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42MzcyMiwgNDQuMTI0NDRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2EzYTgxMWVmNTAyOTRjM2I4ODU0MzhiYjNlZDFjNjFlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzEyOTdkN2QwZDA1ZjRiMTc4ZGMwZGI0YzkxY2ViM2NhID0gJChgPGRpdiBpZD0iaHRtbF8xMjk3ZDdkMGQwNWY0YjE3OGRjMGRiNGM5MWNlYjNjYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S3Jhc25vYXJtZXlza29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9hM2E4MTFlZjUwMjk0YzNiODg1NDM4YmIzZWQxYzYxZS5zZXRDb250ZW50KGh0bWxfMTI5N2Q3ZDBkMDVmNGIxNzhkYzBkYjRjOTFjZWIzY2EpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZTUzN2M2YzlkZDgwNGM0NTg1YmEyNTUyZjUwOGJlMmIuYmluZFBvcHVwKHBvcHVwX2EzYTgxMWVmNTAyOTRjM2I4ODU0MzhiYjNlZDFjNjFlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZTUzN2M2YzlkZDgwNGM0NTg1YmEyNTUyZjUwOGJlMmIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iYjk1OTc3MTBmNjg0MWM2OTNmMGQzYjJlYWRkNTNhZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjY0NjQ1OTUsIDQzLjQwMzA4MzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlYzRlOWQ3NTNiMjRmY2RhNDM1ZDBkMGM5OGJlMWUwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzhmY2U0Mzg4ZWI1YjRhMzZhZGI2MTQ5MDk3MjEyMGNiID0gJChgPGRpdiBpZD0iaHRtbF84ZmNlNDM4OGViNWI0YTM2YWRiNjE0OTA5NzIxMjBjYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+QXRhemh1a2lubzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2VjNGU5ZDc1M2IyNGZjZGE0MzVkMGQwYzk4YmUxZTAuc2V0Q29udGVudChodG1sXzhmY2U0Mzg4ZWI1YjRhMzZhZGI2MTQ5MDk3MjEyMGNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JiOTU5NzcxMGY2ODQxYzY5M2YwZDNiMmVhZGQ1M2FlLmJpbmRQb3B1cChwb3B1cF83ZWM0ZTlkNzUzYjI0ZmNkYTQzNWQwZDBjOThiZTFlMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2JiOTU5NzcxMGY2ODQxYzY5M2YwZDNiMmVhZGQ1M2FlLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjdlOTA4MmQ2MDJmNDNiNDhlYmM2YTc1ZTgzZGRjZjcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDg5ODQ3LCA0My42Mzg0ODE3OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzMwMWIxZWRjZjcyMDQyMjY4NDJhMmQwNWIxMjRmNjlhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ViNDA5NWE3OGUzZTQ2MmM4ZTg2ZDhjZGUzYTliOWFkID0gJChgPGRpdiBpZD0iaHRtbF9lYjQwOTVhNzhlM2U0NjJjOGU4NmQ4Y2RlM2E5YjlhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S2lzaHBlazwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMzAxYjFlZGNmNzIwNDIyNjg0MmEyZDA1YjEyNGY2OWEuc2V0Q29udGVudChodG1sX2ViNDA5NWE3OGUzZTQ2MmM4ZTg2ZDhjZGUzYTliOWFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3ZTkwODJkNjAyZjQzYjQ4ZWJjNmE3NWU4M2RkY2Y3LmJpbmRQb3B1cChwb3B1cF8zMDFiMWVkY2Y3MjA0MjI2ODQyYTJkMDViMTI0ZjY5YSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2Y3ZTkwODJkNjAyZjQzYjQ4ZWJjNmE3NWU4M2RkY2Y3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNGQyYjhhNDQ5MjQzNDk3ZmJiY2VlMzg1ZGJkZmQxOTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NDkxNjcsIDQ0LjE1NTU1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQzNjNkOCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTdiMjIzODU5MDc0NDYwZTgzZWJmNDcwMGI3ZDZjOTMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMzJkZWIxYWM3MDViNDc5NzhjMWUyYjQzNTA4OWIxOTMgPSAkKGA8ZGl2IGlkPSJodG1sXzMyZGViMWFjNzA1YjQ3OTc4YzFlMmI0MzUwODliMTkzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5TaGlrdWxleTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTdiMjIzODU5MDc0NDYwZTgzZWJmNDcwMGI3ZDZjOTMuc2V0Q29udGVudChodG1sXzMyZGViMWFjNzA1YjQ3OTc4YzFlMmI0MzUwODliMTkzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzRkMmI4YTQ0OTI0MzQ5N2ZiYmNlZTM4NWRiZGZkMTkxLmJpbmRQb3B1cChwb3B1cF9hN2IyMjM4NTkwNzQ0NjBlODNlYmY0NzAwYjdkNmM5MykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzRkMmI4YTQ0OTI0MzQ5N2ZiYmNlZTM4NWRiZGZkMTkxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjc4ZjE3YzgzYzg3NGE0YmFiYjg4Y2YzZjY5YzA3MzAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NjEyNTM0LCA0My40MjAzMzk4OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzI3ZmU0ZWU3Y2Y5NzRjMTY5ZmIwNWQwOGMyYjZiMmE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzI0NDc0NDAwOGNkMTQyODViOGNhMDE4ZjBiZWJkZWMzID0gJChgPGRpdiBpZD0iaHRtbF8yNDQ3NDQwMDhjZDE0Mjg1YjhjYTAxOGYwYmViZGVjMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SXNsYW1leTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMjdmZTRlZTdjZjk3NGMxNjlmYjA1ZDA4YzJiNmIyYTcuc2V0Q29udGVudChodG1sXzI0NDc0NDAwOGNkMTQyODViOGNhMDE4ZjBiZWJkZWMzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2Y3OGYxN2M4M2M4NzRhNGJhYmI4OGNmM2Y2OWMwNzMwLmJpbmRQb3B1cChwb3B1cF8yN2ZlNGVlN2NmOTc0YzE2OWZiMDVkMDhjMmI2YjJhNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2Y3OGYxN2M4M2M4NzRhNGJhYmI4OGNmM2Y2OWMwNzMwLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA3MTkwOWU3M2NkNGFjNWI0NGRkZWQxNzliZDQ4OGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42NjU1OTIyLCA0NC4wMjUyMjNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0MzYzZDgiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q0YzAxOGQ2YTk3ZjRkOTQ5ODFjMzZjZDllZjFlNjZlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzlkODllOTBiODQwYTQ2OTZiYzRhNDg1NDNjZjUzMDE2ID0gJChgPGRpdiBpZD0iaHRtbF85ZDg5ZTkwYjg0MGE0Njk2YmM0YTQ4NTQzY2Y1MzAxNiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+T2t0eWFicnNrb2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2Q0YzAxOGQ2YTk3ZjRkOTQ5ODFjMzZjZDllZjFlNjZlLnNldENvbnRlbnQoaHRtbF85ZDg5ZTkwYjg0MGE0Njk2YmM0YTQ4NTQzY2Y1MzAxNik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zMDcxOTA5ZTczY2Q0YWM1YjQ0ZGRlZDE3OWJkNDg4Yi5iaW5kUG9wdXAocG9wdXBfZDRjMDE4ZDZhOTdmNGQ5NDk4MWMzNmNkOWVmMWU2NmUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8zMDcxOTA5ZTczY2Q0YWM1YjQ0ZGRlZDE3OWJkNDg4Yi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U5NzdlNjdjM2FiNDRkNjg4OTNiZjdmMjkzM2MwMzZhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjcwODY3Nzk5OTk5OTk2LCA0My40OTgyNjc0XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDM2M2Q4IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9kZWY2ZGMxY2VlZDI0YzQ3OGI1YmM2OTA1ZTdiYjg0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF80OTU2ZGI2NjA5ZjE0MzJlYmJjZmYwNTRjZWVhNTA4ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfNDk1NmRiNjYwOWYxNDMyZWJiY2ZmMDU0Y2VlYTUwOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkR5Z3VseWJnZXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RlZjZkYzFjZWVkMjRjNDc4YjViYzY5MDVlN2JiODQ4LnNldENvbnRlbnQoaHRtbF80OTU2ZGI2NjA5ZjE0MzJlYmJjZmYwNTRjZWVhNTA4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lOTc3ZTY3YzNhYjQ0ZDY4ODkzYmY3ZjI5MzNjMDM2YS5iaW5kUG9wdXAocG9wdXBfZGVmNmRjMWNlZWQyNGM0NzhiNWJjNjkwNWU3YmI4NDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lOTc3ZTY3YzNhYjQ0ZDY4ODkzYmY3ZjI5MzNjMDM2YS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1NWIwNjliNDAxYTQwNDg4NzZmNjFmYTdmNThjNzM1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjc0MTIwOSwgNDMuNTE3ODczOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjFiOTc1ZTNmZGVjNDYxNGE3N2M0NzNiODllYTMwYTYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2EzNzA5MWQwYWE4NGYxNzllZjUwZDRlNmI2OTBmMmIgPSAkKGA8ZGl2IGlkPSJodG1sXzdhMzcwOTFkMGFhODRmMTc5ZWY1MGQ0ZTZiNjkwZjJiIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5nLiBCYWtzYW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IxYjk3NWUzZmRlYzQ2MTRhNzdjNDczYjg5ZWEzMGE2LnNldENvbnRlbnQoaHRtbF83YTM3MDkxZDBhYTg0ZjE3OWVmNTBkNGU2YjY5MGYyYik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85NTViMDY5YjQwMWE0MDQ4ODc2ZjYxZmE3ZjU4YzczNS5iaW5kUG9wdXAocG9wdXBfYjFiOTc1ZTNmZGVjNDYxNGE3N2M0NzNiODllYTMwYTYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85NTViMDY5YjQwMWE0MDQ4ODc2ZjYxZmE3ZjU4YzczNS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E5OTBiMzQ0ZTFlNDQyMjA5OGUyMzYyMjg5YmFiNzgwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjg1MjgsIDQzLjY2NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9iZGFjZTJkZWJiZmU0ODAyODZjNTc3NGQxZjlkODZmOSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84NzYzNmEzMDUwOWQ0MzBiODFkYTk4NjYzZTI3ZmI3MSA9ICQoYDxkaXYgaWQ9Imh0bWxfODc2MzZhMzA1MDlkNDMwYjgxZGE5ODY2M2UyN2ZiNzEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkJha3NhbmVub2s8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2JkYWNlMmRlYmJmZTQ4MDI4NmM1Nzc0ZDFmOWQ4NmY5LnNldENvbnRlbnQoaHRtbF84NzYzNmEzMDUwOWQ0MzBiODFkYTk4NjYzZTI3ZmI3MSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9hOTkwYjM0NGUxZTQ0MjIwOThlMjM2MjI4OWJhYjc4MC5iaW5kUG9wdXAocG9wdXBfYmRhY2UyZGViYmZlNDgwMjg2YzU3NzRkMWY5ZDg2ZjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9hOTkwYjM0NGUxZTQ0MjIwOThlMjM2MjI4OWJhYjc4MC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0ZmE1YTMyZTQ4YTRjMmJiODU3ZmYxZjUxNTg5YmYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNjkzNzU3NzAwMDAwMDA2LCA0My4yNzY3NDc2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80MmI4MGRhNTdhZTA0OTgxODI1MmJhMjRmOTZhNDkxYyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kYzI3NGY5MTM4MzY0NmVhOTYxODJmMzNiY2E5NWQyZCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGMyNzRmOTEzODM2NDZlYTk2MTgyZjMzYmNhOTVkMmQiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlZlcmtobml5IEt1cmt1emhpbjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDJiODBkYTU3YWUwNDk4MTgyNTJiYTI0Zjk2YTQ5MWMuc2V0Q29udGVudChodG1sX2RjMjc0ZjkxMzgzNjQ2ZWE5NjE4MmYzM2JjYTk1ZDJkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U0ZmE1YTMyZTQ4YTRjMmJiODU3ZmYxZjUxNTg5YmYxLmJpbmRQb3B1cChwb3B1cF80MmI4MGRhNTdhZTA0OTgxODI1MmJhMjRmOTZhNDkxYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2U0ZmE1YTMyZTQ4YTRjMmJiODU3ZmYxZjUxNTg5YmYxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTgzYTMwNzZiOWI3NGMyN2I2NjgyMmQ5ZTliNzk5MWMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My42OTc5MDQxLCA0NC4yMTMzMDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YWIxMDk4ZDYwMzQ0YzliYTY3MjdlMzA3YjMyNTdmNCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kZDEyYzgxZDg2NWE0NDhlYjAwYjQyMDNlNDNkYWRhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfZGQxMmM4MWQ4NjVhNDQ4ZWIwMGI0MjAzZTQzZGFkYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlVyb3poYXlub2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdhYjEwOThkNjAzNDRjOWJhNjcyN2UzMDdiMzI1N2Y0LnNldENvbnRlbnQoaHRtbF9kZDEyYzgxZDg2NWE0NDhlYjAwYjQyMDNlNDNkYWRhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81ODNhMzA3NmI5Yjc0YzI3YjY2ODIyZDllOWI3OTkxYy5iaW5kUG9wdXAocG9wdXBfN2FiMTA5OGQ2MDM0NGM5YmE2NzI3ZTMwN2IzMjU3ZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81ODNhMzA3NmI5Yjc0YzI3YjY2ODIyZDllOWI3OTkxYy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E1MGIzZTQyMDNlYTRiNDhhZDE5YTNhZTk0YTAzNjBkID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzIyNTk2OSwgNDMuODg1MDA5NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfODc3MmI4NzZkZGM5NDg2OThlZmE1MGEwZjcyZmFjNWQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMGVhZGYyY2ExMzBiNDg0NWExZDBhODlhYzk4NDYzMmYgPSAkKGA8ZGl2IGlkPSJodG1sXzBlYWRmMmNhMTMwYjQ4NDVhMWQwYTg5YWM5ODQ2MzJmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BbHR1ZDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfODc3MmI4NzZkZGM5NDg2OThlZmE1MGEwZjcyZmFjNWQuc2V0Q29udGVudChodG1sXzBlYWRmMmNhMTMwYjQ4NDVhMWQwYTg5YWM5ODQ2MzJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E1MGIzZTQyMDNlYTRiNDhhZDE5YTNhZTk0YTAzNjBkLmJpbmRQb3B1cChwb3B1cF84NzcyYjg3NmRkYzk0ODY5OGVmYTUwYTBmNzJmYWM1ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2E1MGIzZTQyMDNlYTRiNDhhZDE5YTNhZTk0YTAzNjBkLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjc0Y2U3YjBmNjMxNGQxYjk4OWE0N2ZhZmNjYjBmNWQgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43MjI5MzEsIDQzLjUyMTY0OTldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0YjhiYzc5NjIyODRiYTRhNzhjMzU1MTI2OWY2OGY0ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VkMGYwMDg5Zjc5MDRjZWFhZDE0ZWIwYTQ3YjRjNDI4ID0gJChgPGRpdiBpZD0iaHRtbF9lZDBmMDA4OWY3OTA0Y2VhYWQxNGViMGE0N2I0YzQyOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+UHN5Y2hva2g8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M0YjhiYzc5NjIyODRiYTRhNzhjMzU1MTI2OWY2OGY0LnNldENvbnRlbnQoaHRtbF9lZDBmMDA4OWY3OTA0Y2VhYWQxNGViMGE0N2I0YzQyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNzRjZTdiMGY2MzE0ZDFiOTg5YTQ3ZmFmY2NiMGY1ZC5iaW5kUG9wdXAocG9wdXBfYzRiOGJjNzk2MjI4NGJhNGE3OGMzNTUxMjY5ZjY4ZjQpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yNzRjZTdiMGY2MzE0ZDFiOTg5YTQ3ZmFmY2NiMGY1ZC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzU5ZTNiYjA5NGU4MTRmYmRhOWNkZmQ2MzcyNDcyYTI5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzM0MTQ4OSwgNDMuMDM3MDI4NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjllMjljN2RlOTdkNGM4YjliODMwMmYzOTk5NDM1ZmIgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjY4NWU1OTY2Y2RmNDcyYWFiMTQwZjA0NmQzYTdmZjkgPSAkKGA8ZGl2IGlkPSJodG1sX2Y2ODVlNTk2NmNkZjQ3MmFhYjE0MGYwNDZkM2E3ZmY5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LYW1lbm5vbW9zdHNrb2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I5ZTI5YzdkZTk3ZDRjOGI5YjgzMDJmMzk5OTQzNWZiLnNldENvbnRlbnQoaHRtbF9mNjg1ZTU5NjZjZGY0NzJhYWIxNDBmMDQ2ZDNhN2ZmOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl81OWUzYmIwOTRlODE0ZmJkYTljZGZkNjM3MjQ3MmEyOS5iaW5kUG9wdXAocG9wdXBfYjllMjljN2RlOTdkNGM4YjliODMwMmYzOTk5NDM1ZmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl81OWUzYmIwOTRlODE0ZmJkYTljZGZkNjM3MjQ3MmEyOS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2E2NDFjOTk1YWQ3YzQ3ODY5NDdkNThiN2E3ZTY4NjYxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzQwMzI1ODk5OTk5OTk1LCA0My4xOTMyNjc1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mZjliMDU5ZmNkM2U0YTJkYTM0MzU0NjI0YWM2YzZkYiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mMGU4YzI2NWIxOTA0ZWNjYjNlYWM5MjE3Y2ZlYmEzNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZjBlOGMyNjViMTkwNGVjY2IzZWFjOTIxN2NmZWJhMzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlNhcm1ha292bzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmY5YjA1OWZjZDNlNGEyZGEzNDM1NDYyNGFjNmM2ZGIuc2V0Q29udGVudChodG1sX2YwZThjMjY1YjE5MDRlY2NiM2VhYzkyMTdjZmViYTM3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E2NDFjOTk1YWQ3YzQ3ODY5NDdkNThiN2E3ZTY4NjYxLmJpbmRQb3B1cChwb3B1cF9mZjliMDU5ZmNkM2U0YTJkYTM0MzU0NjI0YWM2YzZkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2E2NDFjOTk1YWQ3YzQ3ODY5NDdkNThiN2E3ZTY4NjYxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfOWM5MjE1NmU4YzMyNDEzMWJjYjE3YmNmY2E0MzVkOGIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NDQxNTQ2LCA0My4zNTEwMTEyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF80ZTQ0MGNmY2FmZTQ0OTliYTY3ZjY5ODlmZTkwNGY2MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mYjg2MTEwNWZlYmI0YjE2OGY1NTBjNGQ0OThhYWMwOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZmI4NjExMDVmZWJiNGIxNjhmNTUwYzRkNDk4YWFjMDgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk5pemhueSBLdXJrdXpoaW48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzRlNDQwY2ZjYWZlNDQ5OWJhNjdmNjk4OWZlOTA0ZjYwLnNldENvbnRlbnQoaHRtbF9mYjg2MTEwNWZlYmI0YjE2OGY1NTBjNGQ0OThhYWMwOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85YzkyMTU2ZThjMzI0MTMxYmNiMTdiY2ZjYTQzNWQ4Yi5iaW5kUG9wdXAocG9wdXBfNGU0NDBjZmNhZmU0NDk5YmE2N2Y2OTg5ZmU5MDRmNjApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85YzkyMTU2ZThjMzI0MTMxYmNiMTdiY2ZjYTQzNWQ4Yi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwODQzZWVmODg0ZDRmYzBiOWY5MzhmNDZmZWEyMzg4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuNzU3NDcwMzk5OTk5OTk1LCA0My43MTU2ODk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8xYjRkNjA0NDJhMzU0MTA5YTdjZDExNmJhOTUxOTJlMyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9mZDcwODQ5MjQxMTc0ZDE1YWE4YTJhNWMzMThlN2UxNyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmQ3MDg0OTI0MTE3NGQxNWFhOGEyYTVjMzE4ZTdlMTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlBzeW5zaG9rbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMWI0ZDYwNDQyYTM1NDEwOWE3Y2QxMTZiYTk1MTkyZTMuc2V0Q29udGVudChodG1sX2ZkNzA4NDkyNDExNzRkMTVhYThhMmE1YzMxOGU3ZTE3KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2MwODQzZWVmODg0ZDRmYzBiOWY5MzhmNDZmZWEyMzg4LmJpbmRQb3B1cChwb3B1cF8xYjRkNjA0NDJhMzU0MTA5YTdjZDExNmJhOTUxOTJlMykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2MwODQzZWVmODg0ZDRmYzBiOWY5MzhmNDZmZWEyMzg4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjU5YTZhYTM1ZGQ4NDU0N2FhZTM2ZTI5ZTg2NTljNDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NzY4NDYxLCA0My4yNjAwMTQ4OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzRkYmFlYzU2ZTAzODRmM2ZiMjg1ZjhjZTNkMDhiNzI3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNiOWYwYmU4OGNiODRiMTViMGZhOTIxYmIxYjAwODgyID0gJChgPGRpdiBpZD0iaHRtbF8zYjlmMGJlODhjYjg0YjE1YjBmYTkyMWJiMWIwMDg4MiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S2FtbHl1a292bzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNGRiYWVjNTZlMDM4NGYzZmIyODVmOGNlM2QwOGI3Mjcuc2V0Q29udGVudChodG1sXzNiOWYwYmU4OGNiODRiMTViMGZhOTIxYmIxYjAwODgyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI1OWE2YWEzNWRkODQ1NDdhYWUzNmUyOWU4NjU5YzQ4LmJpbmRQb3B1cChwb3B1cF80ZGJhZWM1NmUwMzg0ZjNmYjI4NWY4Y2UzZDA4YjcyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzI1OWE2YWEzNWRkODQ1NDdhYWUzNmUyOWU4NjU5YzQ4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk2OTY1MzlhOTdiNGNhZGJlNTVhZWI2MWE0NTcxMTEgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43NzczODU1LCA0My40NDQyNDg1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9hNDIzN2U2NWQwZDE0YTIxYWExYmYzZjNjZTIwMWI3ZCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9kY2U2NmRmN2JhMjY0NTk2ODNhZjg4ZWMxZDJhMTZiOCA9ICQoYDxkaXYgaWQ9Imh0bWxfZGNlNjZkZjdiYTI2NDU5NjgzYWY4OGVjMWQyYTE2YjgiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkt1YmEtVGFiYTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTQyMzdlNjVkMGQxNGEyMWFhMWJmM2YzY2UyMDFiN2Quc2V0Q29udGVudChodG1sX2RjZTY2ZGY3YmEyNjQ1OTY4M2FmODhlYzFkMmExNmI4KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2E5Njk2NTM5YTk3YjRjYWRiZTU1YWViNjFhNDU3MTExLmJpbmRQb3B1cChwb3B1cF9hNDIzN2U2NWQwZDE0YTIxYWExYmYzZjNjZTIwMWI3ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2E5Njk2NTM5YTk3YjRjYWRiZTU1YWViNjFhNDU3MTExLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZWUwYTFmOWFmNTY3NGFhY2JhYjUzN2I0MzVmMzQwYTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My43OTg3MTE0OTk5OTk5OTYsIDQzLjYzOTM3NTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Q1NGQzOWZiY2VmOTQ4MjM4NjAzMzE5NmJmNzcyMTJkID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzc2NzU0MzY0MjYxZTQwOTg4OTI2M2ZjN2U1MGZhZjA0ID0gJChgPGRpdiBpZD0iaHRtbF83Njc1NDM2NDI2MWU0MDk4ODkyNjNmYzdlNTBmYWYwNCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S3JlbWVuY2h1Zy1Lb25zdGFudGlub3Zza29lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9kNTRkMzlmYmNlZjk0ODIzODYwMzMxOTZiZjc3MjEyZC5zZXRDb250ZW50KGh0bWxfNzY3NTQzNjQyNjFlNDA5ODg5MjYzZmM3ZTUwZmFmMDQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZWUwYTFmOWFmNTY3NGFhY2JhYjUzN2I0MzVmMzQwYTcuYmluZFBvcHVwKHBvcHVwX2Q1NGQzOWZiY2VmOTQ4MjM4NjAzMzE5NmJmNzcyMTJkKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZWUwYTFmOWFmNTY3NGFhY2JhYjUzN2I0MzVmMzQwYTcuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xZmM5M2Y4OGMwNTI0MmZhOTUwZTRmNGViMzA1YmYwMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgwMjIyNTc5OTk5OTk5NSwgNDMuMTQ2MDU2MDk5OTk5OTk2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF81YWZiMzBkZjkzZDc0MDM1OWFjODU2NjE5ODlkMzI0OCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9lMzQ5ZGQ5ODA0ZDA0NjZiYjVkZGU2NjRkMTE2MTM5YSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTM0OWRkOTgwNGQwNDY2YmI1ZGRlNjY0ZDExNjEzOWEiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlNvdmtob3pub2U8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzVhZmIzMGRmOTNkNzQwMzU5YWM4NTY2MTk4OWQzMjQ4LnNldENvbnRlbnQoaHRtbF9lMzQ5ZGQ5ODA0ZDA0NjZiYjVkZGU2NjRkMTE2MTM5YSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZmM5M2Y4OGMwNTI0MmZhOTUwZTRmNGViMzA1YmYwMS5iaW5kUG9wdXAocG9wdXBfNWFmYjMwZGY5M2Q3NDAzNTlhYzg1NjYxOTg5ZDMyNDgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xZmM5M2Y4OGMwNTI0MmZhOTUwZTRmNGViMzA1YmYwMS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzkxNzYyNDNlYTEyMDRlYmFiMjUwMGRkODEwZDVlZDJmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODAzNDQ1NiwgNDMuNzcwNjE0M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Y1ODIzMSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNWYzODY2MDNhY2Y2NDhmN2IyMTg4NGM1ZDUxMzE1NjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYjczYTIyZWU3MWE0NGIxNGFkZTEzOWMxMWZlYjBmN2MgPSAkKGA8ZGl2IGlkPSJodG1sX2I3M2EyMmVlNzFhNDRiMTRhZGUxMzljMTFmZWIwZjdjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LYXJhZ2FjaDwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNWYzODY2MDNhY2Y2NDhmN2IyMTg4NGM1ZDUxMzE1Njguc2V0Q29udGVudChodG1sX2I3M2EyMmVlNzFhNDRiMTRhZGUxMzljMTFmZWIwZjdjKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzkxNzYyNDNlYTEyMDRlYmFiMjUwMGRkODEwZDVlZDJmLmJpbmRQb3B1cChwb3B1cF81ZjM4NjYwM2FjZjY0OGY3YjIxODg0YzVkNTEzMTU2OCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzkxNzYyNDNlYTEyMDRlYmFiMjUwMGRkODEwZDVlZDJmLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfODBhODNkYWEwZWVlNDgzNjliY2VhYzI4ZTE1MTY3NDMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My44MjI5Mzc0LCA0My4xMTE0MzQ4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjU4MjMxIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF84MjIzM2EyZjRiZTE0YTJhYWRlMzAwZjU1NDIyYWE3NyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNzk4ZjVhZjMyMDU0MTgxYjVmMTI3YjA1YTA3YjM2YiA9ICQoYDxkaXYgaWQ9Imh0bWxfYzc5OGY1YWYzMjA1NDE4MWI1ZjEyN2IwNWEwN2IzNmIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkR6aGVuYWw8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgyMjMzYTJmNGJlMTRhMmFhZGUzMDBmNTU0MjJhYTc3LnNldENvbnRlbnQoaHRtbF9jNzk4ZjVhZjMyMDU0MTgxYjVmMTI3YjA1YTA3YjM2Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl84MGE4M2RhYTBlZWU0ODM2OWJjZWFjMjhlMTUxNjc0My5iaW5kUG9wdXAocG9wdXBfODIyMzNhMmY0YmUxNGEyYWFkZTMwMGY1NTQyMmFhNzcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl84MGE4M2RhYTBlZWU0ODM2OWJjZWFjMjhlMTUxNjc0My5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzJjZWQ2MTIyNzNjNzQyYTU5ZDAyNzE1M2Q5NmY4NGM3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODM1NjMxLCA0My4xNTMxMTY0OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmNTgyMzEiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzZlNzY5YjVmYzVjNDRmNDBiYjQ5NTE3NGMyNDY2YzJlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0YTgyNjdmOWFhZjQwM2Y4OGUyNzI3ZGQzMDU5MDA4ID0gJChgPGRpdiBpZD0iaHRtbF9jNGE4MjY3ZjlhYWY0MDNmODhlMjcyN2RkMzA1OTAwOCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+WmFsdWtvZGVzPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF82ZTc2OWI1ZmM1YzQ0ZjQwYmI0OTUxNzRjMjQ2NmMyZS5zZXRDb250ZW50KGh0bWxfYzRhODI2N2Y5YWFmNDAzZjg4ZTI3MjdkZDMwNTkwMDgpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMmNlZDYxMjI3M2M3NDJhNTlkMDI3MTUzZDk2Zjg0YzcuYmluZFBvcHVwKHBvcHVwXzZlNzY5YjVmYzVjNDRmNDBiYjQ5NTE3NGMyNDY2YzJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMmNlZDYxMjI3M2M3NDJhNTlkMDI3MTUzZDk2Zjg0YzcuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wN2M2YzQzZGIyYTU0OGVhYWFmMTJjY2ZlNGE4NzM5YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjgzNjY0NjEsIDQzLjYwNzkxODcwMDAwMDAwNl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzkxMWViNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTAyOTg2MTU2Nzc5NDRhYWIyY2Q1NGQ5MjI5MDYwYzEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmRiZTMzMmY0MTI2NGVhMzhiZGQxZjA2YzU5NjA3MjggPSAkKGA8ZGl2IGlkPSJodG1sX2ZkYmUzMzJmNDEyNjRlYTM4YmRkMWYwNmM1OTYwNzI4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Qc3lraHVyZXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzUwMjk4NjE1Njc3OTQ0YWFiMmNkNTRkOTIyOTA2MGMxLnNldENvbnRlbnQoaHRtbF9mZGJlMzMyZjQxMjY0ZWEzOGJkZDFmMDZjNTk2MDcyOCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wN2M2YzQzZGIyYTU0OGVhYWFmMTJjY2ZlNGE4NzM5YS5iaW5kUG9wdXAocG9wdXBfNTAyOTg2MTU2Nzc5NDRhYWIyY2Q1NGQ5MjI5MDYwYzEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wN2M2YzQzZGIyYTU0OGVhYWFmMTJjY2ZlNGE4NzM5YS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzc3MDcxMTIxNmQ2ODRhNjM4MzQwN2VmOTY4MWY5MTdiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDMuODQxNjEyNSwgNDMuMjA2Mzk0MjAwMDAwMDA1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOTExZWI0IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83MjJkZDM2MTNhYmY0M2JhOTJmZDM1NWI5YWFkMTFhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8yMmM2MjVjNjc4MmI0ZmFjOTY2MjE0NTM2MGI4ZjViNSA9ICQoYDxkaXYgaWQ9Imh0bWxfMjJjNjI1YzY3ODJiNGZhYzk2NjIxNDUzNjBiOGY1YjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlpvbHNrb3llPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83MjJkZDM2MTNhYmY0M2JhOTJmZDM1NWI5YWFkMTFhMi5zZXRDb250ZW50KGh0bWxfMjJjNjI1YzY3ODJiNGZhYzk2NjIxNDUzNjBiOGY1YjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNzcwNzExMjE2ZDY4NGE2MzgzNDA3ZWY5NjgxZjkxN2IuYmluZFBvcHVwKHBvcHVwXzcyMmRkMzYxM2FiZjQzYmE5MmZkMzU1YjlhYWQxMWEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNzcwNzExMjE2ZDY4NGE2MzgzNDA3ZWY5NjgxZjkxN2IuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8wZDc4N2Y1OTU3YjU0NGJiODAwN2FiODRkM2RjNTM3NiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg2MDI4NDcsIDQzLjI1MTQwNDc5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzkxMWViNCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMGFmZDZlY2NhYzVkNDRjMzg3N2IzNjA2OGY0Mzg2ZjUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTQwYjUwZTkyZmIzNDMyYmExNDRmZWU3YjU3ZmYzMDUgPSAkKGA8ZGl2IGlkPSJodG1sXzU0MGI1MGU5MmZiMzQzMmJhMTQ0ZmVlN2I1N2ZmMzA1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5Qc3luYWRha2hhPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8wYWZkNmVjY2FjNWQ0NGMzODc3YjM2MDY4ZjQzODZmNS5zZXRDb250ZW50KGh0bWxfNTQwYjUwZTkyZmIzNDMyYmExNDRmZWU3YjU3ZmYzMDUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMGQ3ODdmNTk1N2I1NDRiYjgwMDdhYjg0ZDNkYzUzNzYuYmluZFBvcHVwKHBvcHVwXzBhZmQ2ZWNjYWM1ZDQ0YzM4NzdiMzYwNjhmNDM4NmY1KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMGQ3ODdmNTk1N2I1NDRiYjgwMDdhYjg0ZDNkYzUzNzYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85ZmQ2ZTVhNmMxMjk0ZDIyYjJkNWE1ZTJjZDg0YTAwZiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQzLjg3ODgzNDksIDQzLjEwNzQ4MTg5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQ2ZjBmMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOWU5ZGNkMWIzYmVlNDRiNmFiY2FlOTc1MTBiYTYwMTkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNmNlNTcwZjk3NzUyNGI1ZGI4NmUzNGM0NTI1NTNhMjUgPSAkKGA8ZGl2IGlkPSJodG1sXzZjZTU3MGY5Nzc1MjRiNWRiODZlMzRjNDUyNTUzYTI1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5TaG9yZGFrb3ZvPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85ZTlkY2QxYjNiZWU0NGI2YWJjYWU5NzUxMGJhNjAxOS5zZXRDb250ZW50KGh0bWxfNmNlNTcwZjk3NzUyNGI1ZGI4NmUzNGM0NTI1NTNhMjUpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfOWZkNmU1YTZjMTI5NGQyMmIyZDVhNWUyY2Q4NGEwMGYuYmluZFBvcHVwKHBvcHVwXzllOWRjZDFiM2JlZTQ0YjZhYmNhZTk3NTEwYmE2MDE5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfOWZkNmU1YTZjMTI5NGQyMmIyZDVhNWUyY2Q4NGEwMGYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83Y2MyYjljNTM5YjA0OTViOTY2ZjY4OTU0YzBiY2VjNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjI0NjExMSwgNDEuNzQxMzg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDZmMGYwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9jN2U5ZTFlZmRiY2U0OGQ0OWJkMGM4ZjQ1NzQ4OTEyMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zMTNlOTI4ZTM0YzQ0ODI1YjI2MGVlYjE3NjIwNWQwMiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzEzZTkyOGUzNGM0NDgyNWIyNjBlZWIxNzYyMDVkMDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPkJlc2xlbmV5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jN2U5ZTFlZmRiY2U0OGQ0OWJkMGM4ZjQ1NzQ4OTEyMS5zZXRDb250ZW50KGh0bWxfMzEzZTkyOGUzNGM0NDgyNWIyNjBlZWIxNzYyMDVkMDIpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfN2NjMmI5YzUzOWIwNDk1Yjk2NmY2ODk1NGMwYmNlYzYuYmluZFBvcHVwKHBvcHVwX2M3ZTllMWVmZGJjZTQ4ZDQ5YmQwYzhmNDU3NDg5MTIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfN2NjMmI5YzUzOWIwNDk1Yjk2NmY2ODk1NGMwYmNlYzYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yYzY0ZjY1YTE2YzA0N2M4OTU0Nzg5MmFjZTIwNGQzNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjMwMDc3NzAwMDAwMDAwNCwgNDEuNzQyNjkzXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNDZmMGYwIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9mYTVmMWZjYTk1ZDg0NTJmOWRkOGEzOGUwYzA2ZDIwMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF84OTYyZWUxN2I3ZDk0OTUxYTg4ODU3ZTE3OWVjOWM4ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfODk2MmVlMTdiN2Q5NDk1MWE4ODg1N2UxNzllYzljOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPlZha28tWmhpbGU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ZhNWYxZmNhOTVkODQ1MmY5ZGQ4YTM4ZTBjMDZkMjAyLnNldENvbnRlbnQoaHRtbF84OTYyZWUxN2I3ZDk0OTUxYTg4ODU3ZTE3OWVjOWM4Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYzY0ZjY1YTE2YzA0N2M4OTU0Nzg5MmFjZTIwNGQzNy5iaW5kUG9wdXAocG9wdXBfZmE1ZjFmY2E5NWQ4NDUyZjlkZDhhMzhlMGMwNmQyMDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yYzY0ZjY1YTE2YzA0N2M4OTU0Nzg5MmFjZTIwNGQzNy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3MjY3NWU2ZjFhZDQ0NDBhOGYyOTk0ZDkyNzU4MzJjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM5MTY2OTk5OTk5OTk2LCA0MS40ODYxMTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzhlYTg4YjM1OWVkZDQ2YzY5MmI4MDJkMTA4YTZhYWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2MwYmE4NGI1N2VkZDQ3Mjc5NjkwYzgwOGE4M2Y0MjcxID0gJChgPGRpdiBpZD0iaHRtbF9jMGJhODRiNTdlZGQ0NzI3OTY5MGM4MDhhODNmNDI3MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S3VyZ29rb3Zza2l5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84ZWE4OGIzNTllZGQ0NmM2OTJiODAyZDEwOGE2YWFjMi5zZXRDb250ZW50KGh0bWxfYzBiYTg0YjU3ZWRkNDcyNzk2OTBjODA4YTgzZjQyNzEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjcyNjc1ZTZmMWFkNDQ0MGE4ZjI5OTRkOTI3NTgzMmMuYmluZFBvcHVwKHBvcHVwXzhlYTg4YjM1OWVkZDQ2YzY5MmI4MDJkMTA4YTZhYWMyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZjcyNjc1ZTZmMWFkNDQ0MGE4ZjI5OTRkOTI3NTgzMmMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yNWY1NzljNGYxYTM0NjdjYTk3ZmRlODBjYTQyMGEzYyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg2MTUyLCA0MS4zMzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViZjU4ZDIwNDQ4MjQwNGJiMGIyOTVhMjNiYTkxMWMyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FlMzI5ZjlkMjM2ODQ4ZThhNTY5OGU0ZDE5YTk4NzYzID0gJChgPGRpdiBpZD0iaHRtbF9hZTMyOWY5ZDIzNjg0OGU4YTU2OThlNGQxOWE5ODc2MyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S29ub2tvdm88L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViZjU4ZDIwNDQ4MjQwNGJiMGIyOTVhMjNiYTkxMWMyLnNldENvbnRlbnQoaHRtbF9hZTMyOWY5ZDIzNjg0OGU4YTU2OThlNGQxOWE5ODc2Myk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yNWY1NzljNGYxYTM0NjdjYTk3ZmRlODBjYTQyMGEzYy5iaW5kUG9wdXAocG9wdXBfZWJmNThkMjA0NDgyNDA0YmIwYjI5NWEyM2JhOTExYzIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yNWY1NzljNGYxYTM0NjdjYTk3ZmRlODBjYTQyMGEzYy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA2OTc3ZjY2OWJjOTQzYjRiMDRiNmNmNzkwNjU0NGQ1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuNjMxMTMyLCA0MC4wNzI2ODJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgxN2FlZTQyZjIzNjRjYzk5ZWIzMzc4YmE4YTY3MWJjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIyZmE1Y2U0NTQ5MzQzNWY4NmM5ZTg0MDk0Yjc1ZjM3ID0gJChgPGRpdiBpZD0iaHRtbF8yMmZhNWNlNDU0OTM0MzVmODZjOWU4NDA5NGI3NWYzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+WmFwYWRueXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzgxN2FlZTQyZjIzNjRjYzk5ZWIzMzc4YmE4YTY3MWJjLnNldENvbnRlbnQoaHRtbF8yMmZhNWNlNDU0OTM0MzVmODZjOWU4NDA5NGI3NWYzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8wNjk3N2Y2NjliYzk0M2I0YjA0YjZjZjc5MDY1NDRkNS5iaW5kUG9wdXAocG9wdXBfODE3YWVlNDJmMjM2NGNjOTllYjMzNzhiYThhNjcxYmMpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8wNjk3N2Y2NjliYzk0M2I0YjA0YjZjZjc5MDY1NDRkNS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzI2ZjE1NWY4MDZlYjQzNmFhNmNiYjdiOGMzMWJmOTUxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODM1LCAzOS4yMDgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM0NmYwZjAiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2IzMzIwMGZmZDE3YzRiMTI4OGE2ZTlkYTE0YjViNGNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzRlMjliN2FlMmRiOTQ1OWRhMDU5MDM0NTgxYTFlNzAzID0gJChgPGRpdiBpZD0iaHRtbF80ZTI5YjdhZTJkYjk0NTlkYTA1OTAzNDU4MWExZTcwMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNla3VwczwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjMzMjAwZmZkMTdjNGIxMjg4YTZlOWRhMTRiNWI0Y2Muc2V0Q29udGVudChodG1sXzRlMjliN2FlMmRiOTQ1OWRhMDU5MDM0NTgxYTFlNzAzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzI2ZjE1NWY4MDZlYjQzNmFhNmNiYjdiOGMzMWJmOTUxLmJpbmRQb3B1cChwb3B1cF9iMzMyMDBmZmQxN2M0YjEyODhhNmU5ZGExNGI1YjRjYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzI2ZjE1NWY4MDZlYjQzNmFhNmNiYjdiOGMzMWJmOTUxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfN2U2ODg2OTc0NDFiNDdhNTljMDNlNjRhZGNmZTk5ZDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NDUsIDM5LjQ2Nzc3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzQ2ZjBmMCIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGE5ZjFhZjcxMjlkNDAzNzk0NTVkM2FiOWZhNmRmMDUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfN2ExN2E3NzIyM2YyNGE0ZDljMmQ0NzZmM2ZiMTdjNWUgPSAkKGA8ZGl2IGlkPSJodG1sXzdhMTdhNzcyMjNmMjRhNGQ5YzJkNDc2ZjNmYjE3YzVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5Bc3Nva29sYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RhOWYxYWY3MTI5ZDQwMzc5NDU1ZDNhYjlmYTZkZjA1LnNldENvbnRlbnQoaHRtbF83YTE3YTc3MjIzZjI0YTRkOWMyZDQ3NmYzZmIxN2M1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl83ZTY4ODY5NzQ0MWI0N2E1OWMwM2U2NGFkY2ZlOTlkOC5iaW5kUG9wdXAocG9wdXBfZGE5ZjFhZjcxMjlkNDAzNzk0NTVkM2FiOWZhNmRmMDUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl83ZTY4ODY5NzQ0MWI0N2E1OWMwM2U2NGFkY2ZlOTlkOC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzBlNzAwYTdkMTI3OTQ2YzRhODE3YmM5MmFlNDZjNzI4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODY2NjY3LCAzOS4yODMzMzNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ZkOTcyODAxOWE0MzQyMGQ5NGIxYWZlZjVlYjU0ODg3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNkOTEzZTJlMTUwMjRmOTRiMmQwMzY4OTgwYTZiZjQxID0gJChgPGRpdiBpZD0iaHRtbF8zZDkxM2UyZTE1MDI0Zjk0YjJkMDM2ODk4MGE2YmY0MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+Vm9jaGVwc2hpeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZmQ5NzI4MDE5YTQzNDIwZDk0YjFhZmVmNWViNTQ4ODcuc2V0Q29udGVudChodG1sXzNkOTEzZTJlMTUwMjRmOTRiMmQwMzY4OTgwYTZiZjQxKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzBlNzAwYTdkMTI3OTQ2YzRhODE3YmM5MmFlNDZjNzI4LmJpbmRQb3B1cChwb3B1cF9mZDk3MjgwMTlhNDM0MjBkOTRiMWFmZWY1ZWI1NDg4NykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzBlNzAwYTdkMTI3OTQ2YzRhODE3YmM5MmFlNDZjNzI4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjAyNjliYjMwODVhNDQwMGI4YmIzOGRiNzc4YTkyMDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44NzM5MDk5OTk5OTk5OTUsIDM5LjE1MzU1NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfOGFiNmEwMDA0ZWQ4NGJjMmIyZDNkMTQwMDFkZmQ3YjggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZjExNzRhOGM5MTM5NGM5Y2JlMTFlNzIwZWYyOGYzZTMgPSAkKGA8ZGl2IGlkPSJodG1sX2YxMTc0YThjOTEzOTRjOWNiZTExZTcyMGVmMjhmM2UzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5DaGV0dWs8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzhhYjZhMDAwNGVkODRiYzJiMmQzZDE0MDAxZGZkN2I4LnNldENvbnRlbnQoaHRtbF9mMTE3NGE4YzkxMzk0YzljYmUxMWU3MjBlZjI4ZjNlMyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMDI2OWJiMzA4NWE0NDAwYjhiYjM4ZGI3NzhhOTIwNy5iaW5kUG9wdXAocG9wdXBfOGFiNmEwMDA0ZWQ4NGJjMmIyZDNkMTQwMDFkZmQ3YjgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yMDI2OWJiMzA4NWE0NDAwYjhiYjM4ZGI3NzhhOTIwNy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y2N2ViYzk2MTVhNzQzMmY4NDE3MDY2NGZiN2M0MTk1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODc0NzIyLCAzOS40NTc3NzgwMDAwMDAwMDVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA0ZjZkODU3NmQ2YjRhNjg4ZDZhYjYzZWY3MmQ3ZTNjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzkwZWFiYWZlZjk0MzQ2ODlhN2IwNzQ1OWI1OGQ0MDQ1ID0gJChgPGRpdiBpZD0iaHRtbF85MGVhYmFmZWY5NDM0Njg5YTdiMDc0NTliNThkNDA0NSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S3Jhc25veWU8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzA0ZjZkODU3NmQ2YjRhNjg4ZDZhYjYzZWY3MmQ3ZTNjLnNldENvbnRlbnQoaHRtbF85MGVhYmFmZWY5NDM0Njg5YTdiMDc0NTliNThkNDA0NSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mNjdlYmM5NjE1YTc0MzJmODQxNzA2NjRmYjdjNDE5NS5iaW5kUG9wdXAocG9wdXBfMDRmNmQ4NTc2ZDZiNGE2ODhkNmFiNjNlZjcyZDdlM2MpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9mNjdlYmM5NjE1YTc0MzJmODQxNzA2NjRmYjdjNDE5NS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzA5OTY4OTg3M2ExMTRmYTg5Yjg2YTNjYmZhMDU2ZDY1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODgzMDU1OTk5OTk5OTk2LCAzOS4zODMwNTU5OTk5OTk5OTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdlZjU3MWQzZDRkZTQ2N2FiYWZkNmQxZDViYjc2ZjhjID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzYyMzU1ZjE4MjEwNTQ0ZTU5NjE1MGRkMjYwM2Y0ZmMwID0gJChgPGRpdiBpZD0iaHRtbF82MjM1NWYxODIxMDU0NGU1OTYxNTBkZDI2MDNmNGZjMCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UG9uZXpodWtheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfN2VmNTcxZDNkNGRlNDY3YWJhZmQ2ZDFkNWJiNzZmOGMuc2V0Q29udGVudChodG1sXzYyMzU1ZjE4MjEwNTQ0ZTU5NjE1MGRkMjYwM2Y0ZmMwKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzA5OTY4OTg3M2ExMTRmYTg5Yjg2YTNjYmZhMDU2ZDY1LmJpbmRQb3B1cChwb3B1cF83ZWY1NzFkM2Q0ZGU0NjdhYmFmZDZkMWQ1YmI3NmY4YykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzA5OTY4OTg3M2ExMTRmYTg5Yjg2YTNjYmZhMDU2ZDY1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZGZkZTQzNGVhOTBiNDY0OWE2Y2FkZGE1ZGQ5ZGE4MzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC44ODM5NDIsIDM5LjA2NjY4Ml0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjhiZjY2NTIyNjkxNGJjMWEwNTExZTAwNTE1NjY4NzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYTZmMWY3MDgzODI5NGIwODljODY5YWE0Zjc0ODEyMmMgPSAkKGA8ZGl2IGlkPSJodG1sX2E2ZjFmNzA4MzgyOTRiMDg5Yzg2OWFhNGY3NDgxMjJjIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5TaGVuZHpoaXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2I4YmY2NjUyMjY5MTRiYzFhMDUxMWUwMDUxNTY2ODc2LnNldENvbnRlbnQoaHRtbF9hNmYxZjcwODM4Mjk0YjA4OWM4NjlhYTRmNzQ4MTIyYyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZmRlNDM0ZWE5MGI0NjQ5YTZjYWRkYTVkZDlkYTgzOS5iaW5kUG9wdXAocG9wdXBfYjhiZjY2NTIyNjkxNGJjMWEwNTExZTAwNTE1NjY4NzYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kZmRlNDM0ZWE5MGI0NjQ5YTZjYWRkYTVkZDlkYTgzOS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzg5ZGZlOWRhNjNiMDQ4MzRiYzRhOWM4ZDlhOWMwMjU0ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODg3Nzc4MDAwMDAwMDA0LCAzOS4yNjYxMTA5OTk5OTk5OTVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M0MzJhYTQzM2IzNDQxOTk5MjQxNDQyNWUwNWYzNjI5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzczMTJlOTNlYzlhYzRjOGZiNGEzNTY3YzkwYWU5MDUxID0gJChgPGRpdiBpZD0iaHRtbF83MzEyZTkzZWM5YWM0YzhmYjRhMzU2N2M5MGFlOTA1MSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UGNoZWdhdGx1a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9jNDMyYWE0MzNiMzQ0MTk5OTI0MTQ0MjVlMDVmMzYyOS5zZXRDb250ZW50KGh0bWxfNzMxMmU5M2VjOWFjNGM4ZmI0YTM1NjdjOTBhZTkwNTEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODlkZmU5ZGE2M2IwNDgzNGJjNGE5YzhkOWE5YzAyNTQuYmluZFBvcHVwKHBvcHVwX2M0MzJhYTQzM2IzNDQxOTk5MjQxNDQyNWUwNWYzNjI5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfODlkZmU5ZGE2M2IwNDgzNGJjNGE5YzhkOWE5YzAyNTQuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82OGRhM2Y4MGMyYzY0NGZkYWViMzViYTVlNDMyODZmMSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljg5MjUyNywgMzkuMjMzNjg5XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZjAzMmU2IiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF85YWY2MGU4NTY2NDE0NzllYWRlNjQ0Njc4YTljMTJhMiA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hYzk5M2I2NTMyZjc0YzIyYmZmYjQ1YzI4ZDZiZDE4NiA9ICQoYDxkaXYgaWQ9Imh0bWxfYWM5OTNiNjUzMmY3NGMyMmJmZmI0NWMyOGQ2YmQxODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9hZHlnMTI0MSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5BZHlnaGU8L2E+PGJyPkdhdGx1a2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF85YWY2MGU4NTY2NDE0NzllYWRlNjQ0Njc4YTljMTJhMi5zZXRDb250ZW50KGh0bWxfYWM5OTNiNjUzMmY3NGMyMmJmZmI0NWMyOGQ2YmQxODYpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNjhkYTNmODBjMmM2NDRmZGFlYjM1YmE1ZTQzMjg2ZjEuYmluZFBvcHVwKHBvcHVwXzlhZjYwZTg1NjY0MTQ3OWVhZGU2NDQ2NzhhOWMxMmEyKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNjhkYTNmODBjMmM2NDRmZGFlYjM1YmE1ZTQzMjg2ZjEuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9jNDRjOTkzOWFhM2Y0NGM2OWUwNTI5Y2I1NTVhNDllMiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjkwNSwgMzkuNDE3NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjExODAyN2QzM2ZhNDI2MGI1YTkyMWIyYmVlMmUxYmMgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzg0NGI5YmZmYzAyNGUzMjhkNjNhM2YwNGFjZWQ3YjIgPSAkKGA8ZGl2IGlkPSJodG1sX2M4NDRiOWJmZmMwMjRlMzI4ZDYzYTNmMDRhY2VkN2IyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5OZXNodWtheTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYjExODAyN2QzM2ZhNDI2MGI1YTkyMWIyYmVlMmUxYmMuc2V0Q29udGVudChodG1sX2M4NDRiOWJmZmMwMjRlMzI4ZDYzYTNmMDRhY2VkN2IyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2M0NGM5OTM5YWEzZjQ0YzY5ZTA1MjljYjU1NWE0OWUyLmJpbmRQb3B1cChwb3B1cF9iMTE4MDI3ZDMzZmE0MjYwYjVhOTIxYjJiZWUyZTFiYykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2M0NGM5OTM5YWEzZjQ0YzY5ZTA1MjljYjU1NWE0OWUyLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTFjYjI1Mjk4OWFmNDhlZTliM2MyYzkyZmYzN2I3ZDcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MjI1LCAzOS4zODI3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzEzYzQ5MjkzMjIwNzQzODA4ZTMwN2Y0MzczNjY2OGNmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzliYjNmMjgyZjNlZDQ3NWM5MzEyM2QyZDBjMmJiYTllID0gJChgPGRpdiBpZD0iaHRtbF85YmIzZjI4MmYzZWQ0NzVjOTMxMjNkMmQwYzJiYmE5ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+TmFjaGVyZXppeTwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMTNjNDkyOTMyMjA3NDM4MDhlMzA3ZjQzNzM2NjY4Y2Yuc2V0Q29udGVudChodG1sXzliYjNmMjgyZjNlZDQ3NWM5MzEyM2QyZDBjMmJiYTllKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2UxY2IyNTI5ODlhZjQ4ZWU5YjNjMmM5MmZmMzdiN2Q3LmJpbmRQb3B1cChwb3B1cF8xM2M0OTI5MzIyMDc0MzgwOGUzMDdmNDM3MzY2NjhjZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2UxY2IyNTI5ODlhZjQ4ZWU5YjNjMmM5MmZmMzdiN2Q3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMjY0OTAxZjJiMTY2NDQ0NjhlZTExMzBhYWE4YjcwZDUgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45MzM4ODksIDM4LjgzNjk0NF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMjVjY2M0NTExZDg2NDRjNWEwMDMxZDY2NWI2OGRkN2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzZjOTc5MTIwYzQyNDk1YzgwZjBhZTZiZDU4YmVmYTQgPSAkKGA8ZGl2IGlkPSJodG1sX2M2Yzk3OTEyMGM0MjQ5NWM4MGYwYWU2YmQ1OGJlZmE0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5Ob3ZvYnpoZWdva2F5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF8yNWNjYzQ1MTFkODY0NGM1YTAwMzFkNjY1YjY4ZGQ3YS5zZXRDb250ZW50KGh0bWxfYzZjOTc5MTIwYzQyNDk1YzgwZjBhZTZiZDU4YmVmYTQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMjY0OTAxZjJiMTY2NDQ0NjhlZTExMzBhYWE4YjcwZDUuYmluZFBvcHVwKHBvcHVwXzI1Y2NjNDUxMWQ4NjQ0YzVhMDAzMWQ2NjViNjhkZDdhKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMjY0OTAxZjJiMTY2NDQ0NjhlZTExMzBhYWE4YjcwZDUuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgQWR5Z2hlYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lN2Q2ODVlZTEzOTI0ZGU5ODljODQyOTA5YWYzOGE4NSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0Ljk0NjM4OSwgMzkuNDFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkzZDM1MWJhYTNmNzRhOWY5MDBiODIyZDk1ZTQ2ZmMwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzVhOWZjOGQyYzk4YTRkOTFhNzUxNzNmZGE5NGQ5NGFkID0gJChgPGRpdiBpZD0iaHRtbF81YTlmYzhkMmM5OGE0ZDkxYTc1MTczZmRhOTRkOTRhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+RHpoaWR6aGlraGFibCc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkzZDM1MWJhYTNmNzRhOWY5MDBiODIyZDk1ZTQ2ZmMwLnNldENvbnRlbnQoaHRtbF81YTlmYzhkMmM5OGE0ZDkxYTc1MTczZmRhOTRkOTRhZCk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lN2Q2ODVlZTEzOTI0ZGU5ODljODQyOTA5YWYzOGE4NS5iaW5kUG9wdXAocG9wdXBfOTNkMzUxYmFhM2Y3NGE5ZjkwMGI4MjJkOTVlNDZmYzApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lN2Q2ODVlZTEzOTI0ZGU5ODljODQyOTA5YWYzOGE4NS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2NhY2E1MDFlMmE5MzQzZGU4NjFhNTgyNjFlMTIxY2Y1ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuOTY1LCAzOS4zNjc3NzhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmMDMyZTYiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2ViYjFmYWNmM2YzODQ0M2RhM2YwODJjNDdiNTEwNTFmID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzIwY2Q2OWU0OWVmNDQ4ZDBhZTk5ODIzZWU2MjdjNWJmID0gJChgPGRpdiBpZD0iaHRtbF8yMGNkNjllNDllZjQ0OGQwYWU5OTgyM2VlNjI3YzViZiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+VGF1eWtoYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWJiMWZhY2YzZjM4NDQzZGEzZjA4MmM0N2I1MTA1MWYuc2V0Q29udGVudChodG1sXzIwY2Q2OWU0OWVmNDQ4ZDBhZTk5ODIzZWU2MjdjNWJmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2NhY2E1MDFlMmE5MzQzZGU4NjFhNTgyNjFlMTIxY2Y1LmJpbmRQb3B1cChwb3B1cF9lYmIxZmFjZjNmMzg0NDNkYTNmMDgyYzQ3YjUxMDUxZikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2NhY2E1MDFlMmE5MzQzZGU4NjFhNTgyNjFlMTIxY2Y1LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNTFlNDBmNGNmOWM4NGI2NDhiYjFhM2Q0M2ZjZDM1ZTcgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45ODMwNTYsIDM5LjQ3NjExMDk5OTk5OTk5Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2YwMzJlNiIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZGQ2NWE3Y2RjNDQ1NGNiZmE0ZTVkMTczYjgyZWUwM2EgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzEwYzc3ZTMxYmE1NDUzNzhmZjY2YmMzYWVjOTNjYTMgPSAkKGA8ZGl2IGlkPSJodG1sX2MxMGM3N2UzMWJhNTQ1Mzc4ZmY2NmJjM2FlYzkzY2EzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvYWR5ZzEyNDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+QWR5Z2hlPC9hPjxicj5LdW5jaHVrb2toYWJsJzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGQ2NWE3Y2RjNDQ1NGNiZmE0ZTVkMTczYjgyZWUwM2Euc2V0Q29udGVudChodG1sX2MxMGM3N2UzMWJhNTQ1Mzc4ZmY2NmJjM2FlYzkzY2EzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzUxZTQwZjRjZjljODRiNjQ4YmIxYTNkNDNmY2QzNWU3LmJpbmRQb3B1cChwb3B1cF9kZDY1YTdjZGM0NDU0Y2JmYTRlNWQxNzNiODJlZTAzYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzUxZTQwZjRjZjljODRiNjQ4YmIxYTNkNDNmY2QzNWU3LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzg3ZmNmMTlkMWY4NDlmZmFhYzNiZDUwZDQxNzJkYTAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC45OTQ0NDQsIDM5LjAwMjVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2M3Mjc3YjNkM2Y0ZTRjZTFiMTk0NzA4MTVhM2UzMjE3ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ExZGYyNmY5YmM5YjQzMDE4MDA5OGU1Mjk4NjkzOThiID0gJChgPGRpdiBpZD0iaHRtbF9hMWRmMjZmOWJjOWI0MzAxODAwOThlNTI5ODY5Mzk4YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+S296ZXQ8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M3Mjc3YjNkM2Y0ZTRjZTFiMTk0NzA4MTVhM2UzMjE3LnNldENvbnRlbnQoaHRtbF9hMWRmMjZmOWJjOWI0MzAxODAwOThlNTI5ODY5Mzk4Yik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8zODdmY2YxOWQxZjg0OWZmYWFjM2JkNTBkNDE3MmRhMC5iaW5kUG9wdXAocG9wdXBfYzcyNzdiM2QzZjRlNGNlMWIxOTQ3MDgxNWEzZTMyMTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8zODdmY2YxOWQxZjg0OWZmYWFjM2JkNTBkNDE3MmRhMC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIyNTJhYjFiNWM1OTQ0MGJiNDkwNjllZTkyOWYyYWYzID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDIzOTcyLCAzOC45MzY5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzE1ZjM4YjhiMDU3YzQ3NGI4MGQ1OGJmNDFlNmNmZWQyID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2EyODg1YjE2ZjhkNzRmZTFiZDMwNGRhZjA3NWNjZTM3ID0gJChgPGRpdiBpZD0iaHRtbF9hMjg4NWIxNmY4ZDc0ZmUxYmQzMDRkYWYwNzVjY2UzNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+Tm92YXlhIEFkeWdleWE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzE1ZjM4YjhiMDU3YzQ3NGI4MGQ1OGJmNDFlNmNmZWQyLnNldENvbnRlbnQoaHRtbF9hMjg4NWIxNmY4ZDc0ZmUxYmQzMDRkYWYwNzVjY2UzNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yMjUyYWIxYjVjNTk0NDBiYjQ5MDY5ZWU5MjlmMmFmMy5iaW5kUG9wdXAocG9wdXBfMTVmMzhiOGIwNTdjNDc0YjgwZDU4YmY0MWU2Y2ZlZDIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yMjUyYWIxYjVjNTk0NDBiYjQ5MDY5ZWU5MjlmMmFmMy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmZWNlNjQ0YjljMDRhOTQ5ZWMzMzQzNDM5ZmQ3YTg5ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDM0MTY3LCAzOC44OTQ3MjE5OTk5OTk5OTRdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkyMDhhNjIwMGM2NjQwOWRiNDgwYmQ5YTlmMTA2OGY1ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwZjhkYTgzZGRlODQ0YWFhODJjMzZhNGU0MWU1NmFlID0gJChgPGRpdiBpZD0iaHRtbF81MGY4ZGE4M2RkZTg0NGFhYTgyYzM2YTRlNDFlNTZhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+U3Rhcm9iemhlZ29rYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkyMDhhNjIwMGM2NjQwOWRiNDgwYmQ5YTlmMTA2OGY1LnNldENvbnRlbnQoaHRtbF81MGY4ZGE4M2RkZTg0NGFhYTgyYzM2YTRlNDFlNTZhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8xZmVjZTY0NGI5YzA0YTk0OWVjMzM0MzQzOWZkN2E4OS5iaW5kUG9wdXAocG9wdXBfOTIwOGE2MjAwYzY2NDA5ZGI0ODBiZDlhOWYxMDY4ZjUpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8xZmVjZTY0NGI5YzA0YTk0OWVjMzM0MzQzOWZkN2E4OS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzhhMjc5NjkxOTljNTQ3Yjk5ZTFmZGM0MmY4MjIyNGQ4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDUuMDY1NTU2LCA0MC4xNzQxNjddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RjZjAxMzczOTYzNjRiNmNiODFlNzZhMGIwN2M1NDFhID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzY4NzZlODJmOTFkMzQ5MDY4M2ZiNGU3MDBhMDQyMTRiID0gJChgPGRpdiBpZD0iaHRtbF82ODc2ZTgyZjkxZDM0OTA2ODNmYjRlNzAwYTA0MjE0YiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+UHNoaWNobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZGNmMDEzNzM5NjM2NGI2Y2I4MWU3NmEwYjA3YzU0MWEuc2V0Q29udGVudChodG1sXzY4NzZlODJmOTFkMzQ5MDY4M2ZiNGU3MDBhMDQyMTRiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzhhMjc5NjkxOTljNTQ3Yjk5ZTFmZGM0MmY4MjIyNGQ4LmJpbmRQb3B1cChwb3B1cF9kY2YwMTM3Mzk2MzY0YjZjYjgxZTc2YTBiMDdjNTQxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzhhMjc5NjkxOTljNTQ3Yjk5ZTFmZGM0MmY4MjIyNGQ4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEFkeWdoZWAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmE4ZTAxMjM4MmNmNGUxZDg3MzFhZWU4MGU2YmIxYzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45NTkzNDg5OTk5OTk5OTYsIDQxLjc0Mzg0Njk5OTk5OTk5NV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2JjZjYwYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNTU2ZTY5NWJhZTRkNDdlMTk4NzQ4NjU2MWUxYWRjNmQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfODZmZjZjMGZlNjk2NDI3Njg5MmQ4YjZkNmIzNThmOGEgPSAkKGA8ZGl2IGlkPSJodG1sXzg2ZmY2YzBmZTY5NjQyNzY4OTJkOGI2ZDZiMzU4ZjhhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5aaGFrbzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTU2ZTY5NWJhZTRkNDdlMTk4NzQ4NjU2MWUxYWRjNmQuc2V0Q29udGVudChodG1sXzg2ZmY2YzBmZTY5NjQyNzY4OTJkOGI2ZDZiMzU4ZjhhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzJhOGUwMTIzODJjZjRlMWQ4NzMxYWVlODBlNmJiMWM5LmJpbmRQb3B1cChwb3B1cF81NTZlNjk1YmFlNGQ0N2UxOTg3NDg2NTYxZTFhZGM2ZCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzJhOGUwMTIzODJjZjRlMWQ4NzMxYWVlODBlNmJiMWM5LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMzA3MjVkMDBkOGRiNDNiZDgzNzZmM2MyMzc4MmMyNjYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0My45ODgzMzMwMDAwMDAwMDQsIDQxLjczODg4OV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2JjZjYwYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjdhZjZhMTI4MWIyNDA4Y2E0Njc5YzE4YmNlNTg0MzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNGY0ZDYzYzU2ODJlNGQ4ZDhjOWQwMWQwYTg3NzI3N2YgPSAkKGA8ZGl2IGlkPSJodG1sXzRmNGQ2M2M1NjgyZTRkOGQ4YzlkMDFkMGE4NzcyNzdmIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BbGktQmVyZHVrb3Zza2l5PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iN2FmNmExMjgxYjI0MDhjYTQ2NzljMThiY2U1ODQzOC5zZXRDb250ZW50KGh0bWxfNGY0ZDYzYzU2ODJlNGQ4ZDhjOWQwMWQwYTg3NzI3N2YpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfMzA3MjVkMDBkOGRiNDNiZDgzNzZmM2MyMzc4MmMyNjYuYmluZFBvcHVwKHBvcHVwX2I3YWY2YTEyODFiMjQwOGNhNDY3OWMxOGJjZTU4NDM4KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfMzA3MjVkMDBkOGRiNDNiZDgzNzZmM2MyMzc4MmMyNjYuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYmMzMzQwMWI0NjI0MjUyYTg3YmZkOGYwZjQ5YTA4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjA0MjM2NTk5OTk5OTk5NCwgNDEuNzY0MDk4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYmNmNjBjIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZTZjNjFiNTAxMWI0ZjFkYTk4ZjBiMzA3ODQ2MTI4NSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF85Y2QzZDliNmQ3ODA0MmJmYjFiOWI4YzM1MzNmNWI4ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfOWNkM2Q5YjZkNzgwNDJiZmIxYjliOGMzNTMzZjViOGYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPktoYWJlejwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWU2YzYxYjUwMTFiNGYxZGE5OGYwYjMwNzg0NjEyODUuc2V0Q29udGVudChodG1sXzljZDNkOWI2ZDc4MDQyYmZiMWI5YjhjMzUzM2Y1YjhmKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ViYzMzNDAxYjQ2MjQyNTJhODdiZmQ4ZjBmNDlhMDhlLmJpbmRQb3B1cChwb3B1cF9lZTZjNjFiNTAxMWI0ZjFkYTk4ZjBiMzA3ODQ2MTI4NSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2ViYzMzNDAxYjQ2MjQyNTJhODdiZmQ4ZjBmNDlhMDhlLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMmFiZmE1OWNhMzk3NDc1YTk2NzM0ZmJjY2VkNjk2M2YgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4xMTUyNzgsIDQxLjgyODA1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2JjZjYwYyIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYzZlMGJiN2ZiMTlkNGJiZGFmZmNkZTU1YzIwYTg3NjkgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNWM2OWMxMjE2ZDgzNDc2NjgyNGM4MjdmYmIxNmI4YmEgPSAkKGA8ZGl2IGlkPSJodG1sXzVjNjljMTIxNmQ4MzQ3NjY4MjRjODI3ZmJiMTZiOGJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5aZXl1a288L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2M2ZTBiYjdmYjE5ZDRiYmRhZmZjZGU1NWMyMGE4NzY5LnNldENvbnRlbnQoaHRtbF81YzY5YzEyMTZkODM0NzY2ODI0YzgyN2ZiYjE2YjhiYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yYWJmYTU5Y2EzOTc0NzVhOTY3MzRmYmNjZWQ2OTYzZi5iaW5kUG9wdXAocG9wdXBfYzZlMGJiN2ZiMTlkNGJiZGFmZmNkZTU1YzIwYTg3NjkpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yYWJmYTU5Y2EzOTc0NzVhOTY3MzRmYmNjZWQ2OTYzZi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U1OWZiN2FmODIxMTQxNjQ5ODk5MjM5YTIyOWY4Mzk4ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTM5OTUxLCA0MS44NTM4NzVdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2E1YmU5ODk3Njc3MTRhNGRiNTIwY2QyOWE3NzFjOWZiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2UxNzNkYjU3ZTkyMjRkMzdhNWEwNjgyYjM3MTAyMDk3ID0gJChgPGRpdiBpZD0iaHRtbF9lMTczZGI1N2U5MjI0ZDM3YTVhMDY4MmIzNzEwMjA5NyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+S29zaC1LaGFibCc8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2E1YmU5ODk3Njc3MTRhNGRiNTIwY2QyOWE3NzFjOWZiLnNldENvbnRlbnQoaHRtbF9lMTczZGI1N2U5MjI0ZDM3YTVhMDY4MmIzNzEwMjA5Nyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lNTlmYjdhZjgyMTE0MTY0OTg5OTIzOWEyMjlmODM5OC5iaW5kUG9wdXAocG9wdXBfYTViZTk4OTc2NzcxNGE0ZGI1MjBjZDI5YTc3MWM5ZmIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lNTlmYjdhZjgyMTE0MTY0OTg5OTIzOWEyMjlmODM5OC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U4N2Q4NGVmNWM5NjQ3MDJiMDNlZTVjNjNmZWUwOTgxID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMTk4NDIzNzk5OTk5OTksIDQxLjY5OTk2NDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNiY2Y2MGMiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzNkZmQ1MTdiN2UxOTRmNDA4YjkwYWRlOTU0MTBmZjdiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2VlOTNmY2Y3NTA1NzQ0MmFhZWM5YjRjMTRhMDc5Y2MyID0gJChgPGRpdiBpZD0iaHRtbF9lZTkzZmNmNzUwNTc0NDJhYWVjOWI0YzE0YTA3OWNjMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2thYmExMjc4IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkthYmFyZGlhbjwvYT48YnI+SW56aGljaGlzaGtobzwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfM2RmZDUxN2I3ZTE5NGY0MDhiOTBhZGU5NTQxMGZmN2Iuc2V0Q29udGVudChodG1sX2VlOTNmY2Y3NTA1NzQ0MmFhZWM5YjRjMTRhMDc5Y2MyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2U4N2Q4NGVmNWM5NjQ3MDJiMDNlZTVjNjNmZWUwOTgxLmJpbmRQb3B1cChwb3B1cF8zZGZkNTE3YjdlMTk0ZjQwOGI5MGFkZTk1NDEwZmY3YikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2U4N2Q4NGVmNWM5NjQ3MDJiMDNlZTVjNjNmZWUwOTgxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYTk3YjVlMjhiZmNmNDA2ODg3NDhhYmQ3YTFjOWQyNzggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC4yNTMyNzE5OTk5OTk5OTYsIDQxLjkwMDA0N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhYmViZSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDMzNjgyM2E3MmY0NDAyNWJjNjM2MjUwMGE1Mjc4MmUgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMmYyNGU1ZmI4MDczNDVhNThhNDY1OWM4N2QwODI5NzAgPSAkKGA8ZGl2IGlkPSJodG1sXzJmMjRlNWZiODA3MzQ1YTU4YTQ2NTljODdkMDgyOTcwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5BYmF6YWt0PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF80MzM2ODIzYTcyZjQ0MDI1YmM2MzYyNTAwYTUyNzgyZS5zZXRDb250ZW50KGh0bWxfMmYyNGU1ZmI4MDczNDVhNThhNDY1OWM4N2QwODI5NzApOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYTk3YjVlMjhiZmNmNDA2ODg3NDhhYmQ3YTFjOWQyNzguYmluZFBvcHVwKHBvcHVwXzQzMzY4MjNhNzJmNDQwMjViYzYzNjI1MDBhNTI3ODJlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYTk3YjVlMjhiZmNmNDA2ODg3NDhhYmQ3YTFjOWQyNzguYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9iZDhmZjhhODFhOTQ0ZjkzYjI2Mjg3YzI2NWNlZjgzNCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ0LjQwMDgzMywgNDEuOTM1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjZmFiZWJlIiwKICAiZmlsbE9wYWNpdHkiOiAwLjcsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF9kODYwYWJmZWIyMDg0ZDM0OGZiMjUzYzdhNDA5YTA3NCk7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lZWM2YjNjNmNlYTQ0YWJhODA1NTRjMzM4ZmRiY2IyNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF82MjcyMzBiNmNiODI0YmUwOWQ1MTRiODcyZjY2ZjI0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfNjI3MjMwYjZjYjgyNGJlMDlkNTE0Yjg3MmY2NmYyNDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9rYWJhMTI3OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5LYWJhcmRpYW48L2E+PGJyPk1hbHl5IFplbGVuY2h1azwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZWVjNmIzYzZjZWE0NGFiYTgwNTU0YzMzOGZkYmNiMjcuc2V0Q29udGVudChodG1sXzYyNzIzMGI2Y2I4MjRiZTA5ZDUxNGI4NzJmNjZmMjQyKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2JkOGZmOGE4MWE5NDRmOTNiMjYyODdjMjY1Y2VmODM0LmJpbmRQb3B1cChwb3B1cF9lZWM2YjNjNmNlYTQ0YWJhODA1NTRjMzM4ZmRiY2IyNykKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2JkOGZmOGE4MWE5NDRmOTNiMjYyODdjMjY1Y2VmODM0LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYEthYmFyZGlhbmAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjFjODBlYWMyNWU4NGMyMjk3ZjUwMDY5MzE1ZjZjZDYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0NC41MTk3MjE5OTk5OTk5OTQsIDQwLjcxMDI3OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhYmViZSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYjIwYjdhOWU5NzAzNDVkODgyY2FmYTE4ZDBjY2EwODggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZGFmYzI3NzdmYzA5NDllMTlkMjUxMTRlYjFjOTRjYTkgPSAkKGA8ZGl2IGlkPSJodG1sX2RhZmMyNzc3ZmMwOTQ5ZTE5ZDI1MTE0ZWIxYzk0Y2E5IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5LaG9keic8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2IyMGI3YTllOTcwMzQ1ZDg4MmNhZmExOGQwY2NhMDg4LnNldENvbnRlbnQoaHRtbF9kYWZjMjc3N2ZjMDk0OWUxOWQyNTExNGViMWM5NGNhOSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82MWM4MGVhYzI1ZTg0YzIyOTdmNTAwNjkzMTVmNmNkNi5iaW5kUG9wdXAocG9wdXBfYjIwYjdhOWU5NzAzNDVkODgyY2FmYTE4ZDBjY2EwODgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82MWM4MGVhYzI1ZTg0YzIyOTdmNTAwNjkzMTVmNmNkNi5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBLYWJhcmRpYW5gICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2RhOTYyZTBkODMzNzQxZjZhNWRkOTkwNzVkZWQ2NzRjID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuODY1LCAzOC45ODgwNTZdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNmYWJlYmUiLAogICJmaWxsT3BhY2l0eSI6IDAuNywKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwX2Q4NjBhYmZlYjIwODRkMzQ4ZmIyNTNjN2E0MDlhMDc0KTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzkwNmM5Zjg5NGZkODQzMjQ5ZGVmNzVkZTY4YzBiNDBiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2Y5NjYyN2QwZGIzMzQzOWI5ZTk3OWMyOWJjNWY1N2FlID0gJChgPGRpdiBpZD0iaHRtbF9mOTY2MjdkMGRiMzM0MzliOWU5NzljMjliYzVmNTdhZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FkeWcxMjQxIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFkeWdoZTwvYT48YnI+TmF0dWtoYXk8L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzkwNmM5Zjg5NGZkODQzMjQ5ZGVmNzVkZTY4YzBiNDBiLnNldENvbnRlbnQoaHRtbF9mOTY2MjdkMGRiMzM0MzliOWU5NzljMjliYzVmNTdhZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kYTk2MmUwZDgzMzc0MWY2YTVkZDk5MDc1ZGVkNjc0Yy5iaW5kUG9wdXAocG9wdXBfOTA2YzlmODk0ZmQ4NDMyNDlkZWY3NWRlNjhjMGI0MGIpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kYTk2MmUwZDgzMzc0MWY2YTVkZDk5MDc1ZGVkNjc0Yy5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGBBZHlnaGVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzgxYmFjZjE0ZWZjNTQxNTFiZGY5Mjk5Y2ZkMzJiZGE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDQuMjEyNSwgNDMuN10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2ZhYmViZSIsCiAgImZpbGxPcGFjaXR5IjogMC43LAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfZDg2MGFiZmViMjA4NGQzNDhmYjI1M2M3YTQwOWEwNzQpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNzZkZmYwMDgyM2FkNDEzNGIzMmVkZDY3MGJmMjM3N2UgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNjQxY2RlMzkyYTZmNDAwZGFlZmMwNWU5MWFlYjNjZjQgPSAkKGA8ZGl2IGlkPSJodG1sXzY0MWNkZTM5MmE2ZjQwMGRhZWZjMDVlOTFhZWIzY2Y0IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2FiYTEyNzgiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2FiYXJkaWFuPC9hPjxicj5VcmF6aGF5bm9lPC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF83NmRmZjAwODIzYWQ0MTM0YjMyZWRkNjcwYmYyMzc3ZS5zZXRDb250ZW50KGh0bWxfNjQxY2RlMzkyYTZmNDAwZGFlZmMwNWU5MWFlYjNjZjQpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfODFiYWNmMTRlZmM1NDE1MWJkZjkyOTljZmQzMmJkYTcuYmluZFBvcHVwKHBvcHVwXzc2ZGZmMDA4MjNhZDQxMzRiMzJlZGQ2NzBiZjIzNzdlKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfODFiYWNmMTRlZmM1NDE1MWJkZjkyOTljZmQzMmJkYTcuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgS2FiYXJkaWFuYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe750524d30>"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#Creating LingMap object\n",
    "m = lingtypology.LingMap(languages)\n",
    "#Setting up start location\n",
    "m.start_location = (44.21, 42.32)\n",
    "#Setting up start zoom\n",
    "m.start_zoom = 7\n",
    "#Inner features < dialect\n",
    "m.add_features(dialects, opacity=0.7)\n",
    "#Outer features < language\n",
    "m.add_stroke_features(languages, opacity=0.8)\n",
    "#Popups < village\n",
    "m.add_popups(popups)\n",
    "#Tooltips < language\n",
    "m.add_tooltips(languages)\n",
    "#Custom coordinates (override the ones from Glottolog)\n",
    "m.add_custom_coordinates(coordinates)\n",
    "#Inner legend title and position\n",
    "m.legend_title = 'Dialects'\n",
    "m.legend_position = 'bottomright'\n",
    "#Outer legend title and position\n",
    "m.stroke_legend_title = 'Languages'\n",
    "m.stroke_legend_position = 'topright'\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2. Consonants Example <a name=\"example3\"></a>\n",
    "Map based on [this](https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/ejective_and_n_consonants.csv) data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pandas.read_csv(\n",
    "    'https://raw.githubusercontent.com/ropensci/lingtypology/master/database_creation/ejective_and_n_consonants.csv',\n",
    "    delimiter=',',\n",
    "    header=0,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "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+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgPHNjcmlwdD5MX1BSRUZFUl9DQU5WQVM9ZmFsc2U7IExfTk9fVE9VQ0g9ZmFsc2U7IExfRElTQUJMRV8zRD1mYWxzZTs8L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS40LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9yYXdjZG4uZ2l0aGFjay5jb20vcHl0aG9uLXZpc3VhbGl6YXRpb24vZm9saXVtL21hc3Rlci9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUuY3NzIi8+CiAgICA8c3R5bGU+aHRtbCwgYm9keSB7d2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO21hcmdpbjogMDtwYWRkaW5nOiAwO308L3N0eWxlPgogICAgPHN0eWxlPiNtYXAge3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7bGVmdDowO308L3N0eWxlPgogICAgCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLAogICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgIDxzdHlsZT4jbWFwXzcyNDg2ZmE0NjRlMDRhZTlhYWFjMTA4YTg1MGIzMTc4IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMC4wJTsKICAgICAgICBoZWlnaHQ6IDEwMC4wJTsKICAgICAgICBsZWZ0OiAwLjAlOwogICAgICAgIHRvcDogMC4wJTsKICAgICAgICB9CiAgICA8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgPGRpdiBjbGFzcz0iZm9saXVtLW1hcCIgaWQ9Im1hcF83MjQ4NmZhNDY0ZTA0YWU5YWFhYzEwOGE4NTBiMzE3OCIgPjwvZGl2PgogICAgCjwhLS0gQmFzZWQgb24gdGhlIHRlbXBsYXRlIGZyb20gaGVyZTogaHR0cHM6Ly9uYnZpZXdlci5qdXB5dGVyLm9yZy9naXN0L3RhbGJlcnRjLXVzZ3MvMThmODkwMWZjOThmMTA5ZjJiNzExNTZjZjNhYzgxY2QgLS0+CjwhZG9jdHlwZSBodG1sPgo8aHRtbCBsYW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLy9jb2RlLmpxdWVyeS5jb20vdWkvMS4xMi4xL3RoZW1lcy9iYXNlL2pxdWVyeS11aS5jc3MiPgoKICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTEuMTIuNC5qcyI+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL3VpLzEuMTIuMS9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogIAogIDxzY3JpcHQ+CiAgICAkKGZ1bmN0aW9uKCl7CiAgICAgICAgJCgiI21hcGxlZ2VuZDAiKS5kcmFnZ2FibGUoewogICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gKGV2ZW50LCB1aSkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoewogICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgdG9wOiAiYXV0byIsCiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9KTsKICA8L3NjcmlwdD4KPC9oZWFkPgo8Ym9keT4KCgo8ZGl2IGlkPSdtYXBsZWdlbmQwJyBjbGFzcz0nbWFwbGVnZW5kJyAKICAgIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6OTk5OTsgYm9yZGVyOjJweCBzb2xpZCBncmV5OyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsKICAgICBib3JkZXItcmFkaXVzOjZweDsgcGFkZGluZzogMTBweDsgZm9udC1zaXplOjE0cHg7IGxlZnQ6IDIwcHg7IGJvdHRvbTogNDBweDsnPgoKCjxkaXYgY2xhc3M9J2xlZ2VuZC10aXRsZSc+Q29uc29uYW50czwvZGl2PgoKPGRpdiBjbGFzcz0nbGVnZW5kLXNjYWxlJz4KICA8dWwgY2xhc3M9J2xlZ2VuZC1sYWJlbHMnPgoKICAgIDxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSIyMCI+PGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMjAiIHkyPSIwInN0eWxlPSJzdHJva2U6I2ZmZmZmZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyIiB4Mj0iMjAiIHkyPSIyInN0eWxlPSJzdHJva2U6I2ZlZmZmZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzIiB4Mj0iMjAiIHkyPSIzInN0eWxlPSJzdHJva2U6I2ZkZmVmZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0IiB4Mj0iMjAiIHkyPSI0InN0eWxlPSJzdHJva2U6I2ZjZmVmYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1IiB4Mj0iMjAiIHkyPSI1InN0eWxlPSJzdHJva2U6I2ZhZmRmYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2IiB4Mj0iMjAiIHkyPSI2InN0eWxlPSJzdHJva2U6I2Y5ZmNmOTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3IiB4Mj0iMjAiIHkyPSI3InN0eWxlPSJzdHJva2U6I2Y4ZmNmODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4IiB4Mj0iMjAiIHkyPSI4InN0eWxlPSJzdHJva2U6I2Y3ZmJmNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5IiB4Mj0iMjAiIHkyPSI5InN0eWxlPSJzdHJva2U6I2Y1ZmFmNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMCIgeDI9IjIwIiB5Mj0iMTAic3R5bGU9InN0cm9rZTojZjRmYWY0O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExIiB4Mj0iMjAiIHkyPSIxMSJzdHlsZT0ic3Ryb2tlOiNmM2Y5ZjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIiIHgyPSIyMCIgeTI9IjEyInN0eWxlPSJzdHJva2U6I2YxZjhmMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMyIgeDI9IjIwIiB5Mj0iMTMic3R5bGU9InN0cm9rZTojZjBmOGYwO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0IiB4Mj0iMjAiIHkyPSIxNCJzdHlsZT0ic3Ryb2tlOiNlZmY3ZWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUiIHgyPSIyMCIgeTI9IjE1InN0eWxlPSJzdHJva2U6I2VlZjdlZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNiIgeDI9IjIwIiB5Mj0iMTYic3R5bGU9InN0cm9rZTojZWNmNmVjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE3IiB4Mj0iMjAiIHkyPSIxNyJzdHlsZT0ic3Ryb2tlOiNlYmY1ZWI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTgiIHgyPSIyMCIgeTI9IjE4InN0eWxlPSJzdHJva2U6I2VhZjVlYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxOCIgeDI9IjIwIiB5Mj0iMTgic3R5bGU9InN0cm9rZTojZTZmM2U2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIwIiB4Mj0iMjAiIHkyPSIyMCJzdHlsZT0ic3Ryb2tlOiNlNWYyZTU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjEiIHgyPSIyMCIgeTI9IjIxInN0eWxlPSJzdHJva2U6I2UzZjFlMztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyMiIgeDI9IjIwIiB5Mj0iMjIic3R5bGU9InN0cm9rZTojZTJmMWUyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjIzIiB4Mj0iMjAiIHkyPSIyMyJzdHlsZT0ic3Ryb2tlOiNlMWYwZTE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjQiIHgyPSIyMCIgeTI9IjI0InN0eWxlPSJzdHJva2U6I2RmZjBkZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUic3R5bGU9InN0cm9rZTojZGVlZmRlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI2IiB4Mj0iMjAiIHkyPSIyNiJzdHlsZT0ic3Ryb2tlOiNkZGVlZGQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMjciIHgyPSIyMCIgeTI9IjI3InN0eWxlPSJzdHJva2U6I2RjZWVkYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIyOCIgeDI9IjIwIiB5Mj0iMjgic3R5bGU9InN0cm9rZTojZGFlZGRhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjI5IiB4Mj0iMjAiIHkyPSIyOSJzdHlsZT0ic3Ryb2tlOiNkOWVjZDk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzAiIHgyPSIyMCIgeTI9IjMwInN0eWxlPSJzdHJva2U6I2Q4ZWNkODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzMSIgeDI9IjIwIiB5Mj0iMzEic3R5bGU9InN0cm9rZTojZDdlYmQ3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjMyIiB4Mj0iMjAiIHkyPSIzMiJzdHlsZT0ic3Ryb2tlOiNkNWVhZDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzMiIHgyPSIyMCIgeTI9IjMzInN0eWxlPSJzdHJva2U6I2Q0ZWFkNDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNCIgeDI9IjIwIiB5Mj0iMzQic3R5bGU9InN0cm9rZTojZDNlOWQzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM1IiB4Mj0iMjAiIHkyPSIzNSJzdHlsZT0ic3Ryb2tlOiNkMWU5ZDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzYiIHgyPSIyMCIgeTI9IjM2InN0eWxlPSJzdHJva2U6I2QwZThkMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIzNiIgeDI9IjIwIiB5Mj0iMzYic3R5bGU9InN0cm9rZTojY2NlNmNjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjM4IiB4Mj0iMjAiIHkyPSIzOCJzdHlsZT0ic3Ryb2tlOiNjYmU1Y2I7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMzkiIHgyPSIyMCIgeTI9IjM5InN0eWxlPSJzdHJva2U6I2NhZTVjYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MCIgeDI9IjIwIiB5Mj0iNDAic3R5bGU9InN0cm9rZTojYzhlNGM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQxIiB4Mj0iMjAiIHkyPSI0MSJzdHlsZT0ic3Ryb2tlOiNjN2UzYzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDIiIHgyPSIyMCIgeTI9IjQyInN0eWxlPSJzdHJva2U6I2M2ZTNjNjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0MyIgeDI9IjIwIiB5Mj0iNDMic3R5bGU9InN0cm9rZTojYzVlMmM1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ0IiB4Mj0iMjAiIHkyPSI0NCJzdHlsZT0ic3Ryb2tlOiNjM2UyYzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDUiIHgyPSIyMCIgeTI9IjQ1InN0eWxlPSJzdHJva2U6I2MyZTFjMjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0NiIgeDI9IjIwIiB5Mj0iNDYic3R5bGU9InN0cm9rZTojYzFlMGMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjQ3IiB4Mj0iMjAiIHkyPSI0NyJzdHlsZT0ic3Ryb2tlOiNiZmUwYmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNDgiIHgyPSIyMCIgeTI9IjQ4InN0eWxlPSJzdHJva2U6I2JlZGZiZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI0OSIgeDI9IjIwIiB5Mj0iNDkic3R5bGU9InN0cm9rZTojYmRkZWJkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUwIiB4Mj0iMjAiIHkyPSI1MCJzdHlsZT0ic3Ryb2tlOiNiY2RlYmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTEiIHgyPSIyMCIgeTI9IjUxInN0eWxlPSJzdHJva2U6I2JhZGRiYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1MiIgeDI9IjIwIiB5Mj0iNTIic3R5bGU9InN0cm9rZTojYjlkY2I5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjUzIiB4Mj0iMjAiIHkyPSI1MyJzdHlsZT0ic3Ryb2tlOiNiOGRjYjg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTQiIHgyPSIyMCIgeTI9IjU0InN0eWxlPSJzdHJva2U6I2I3ZGJiNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1NCIgeDI9IjIwIiB5Mj0iNTQic3R5bGU9InN0cm9rZTojYjNkOWIzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU2IiB4Mj0iMjAiIHkyPSI1NiJzdHlsZT0ic3Ryb2tlOiNiMWQ5YjE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNTciIHgyPSIyMCIgeTI9IjU3InN0eWxlPSJzdHJva2U6I2IwZDhiMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI1OCIgeDI9IjIwIiB5Mj0iNTgic3R5bGU9InN0cm9rZTojYWZkN2FmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjU5IiB4Mj0iMjAiIHkyPSI1OSJzdHlsZT0ic3Ryb2tlOiNhZWQ3YWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjAiIHgyPSIyMCIgeTI9IjYwInN0eWxlPSJzdHJva2U6I2FjZDZhYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2MSIgeDI9IjIwIiB5Mj0iNjEic3R5bGU9InN0cm9rZTojYWJkNWFiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjYyIiB4Mj0iMjAiIHkyPSI2MiJzdHlsZT0ic3Ryb2tlOiNhYWQ1YWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjMiIHgyPSIyMCIgeTI9IjYzInN0eWxlPSJzdHJva2U6I2E4ZDRhODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NCIgeDI9IjIwIiB5Mj0iNjQic3R5bGU9InN0cm9rZTojYTdkNGE3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY1IiB4Mj0iMjAiIHkyPSI2NSJzdHlsZT0ic3Ryb2tlOiNhNmQzYTY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjYiIHgyPSIyMCIgeTI9IjY2InN0eWxlPSJzdHJva2U6I2E1ZDJhNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI2NyIgeDI9IjIwIiB5Mj0iNjcic3R5bGU9InN0cm9rZTojYTNkMmEzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjY4IiB4Mj0iMjAiIHkyPSI2OCJzdHlsZT0ic3Ryb2tlOiNhMmQxYTI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNjkiIHgyPSIyMCIgeTI9IjY5InN0eWxlPSJzdHJva2U6I2ExZDBhMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MCIgeDI9IjIwIiB5Mj0iNzAic3R5bGU9InN0cm9rZTojOWZkMDlmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjcxIiB4Mj0iMjAiIHkyPSI3MSJzdHlsZT0ic3Ryb2tlOiM5ZWNmOWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzIiIHgyPSIyMCIgeTI9IjcyInN0eWxlPSJzdHJva2U6IzlkY2U5ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3MiIgeDI9IjIwIiB5Mj0iNzIic3R5bGU9InN0cm9rZTojOTljZDk5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc0IiB4Mj0iMjAiIHkyPSI3NCJzdHlsZT0ic3Ryb2tlOiM5OGNjOTg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzUiIHgyPSIyMCIgeTI9Ijc1InN0eWxlPSJzdHJva2U6Izk3Y2I5NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3NiIgeDI9IjIwIiB5Mj0iNzYic3R5bGU9InN0cm9rZTojOTVjYjk1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijc3IiB4Mj0iMjAiIHkyPSI3NyJzdHlsZT0ic3Ryb2tlOiM5NGNhOTQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iNzgiIHgyPSIyMCIgeTI9Ijc4InN0eWxlPSJzdHJva2U6IzkzYzk5MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI3OSIgeDI9IjIwIiB5Mj0iNzkic3R5bGU9InN0cm9rZTojOTFjOTkxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgwIiB4Mj0iMjAiIHkyPSI4MCJzdHlsZT0ic3Ryb2tlOiM5MGM4OTA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODEiIHgyPSIyMCIgeTI9IjgxInN0eWxlPSJzdHJva2U6IzhmYzc4ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4MiIgeDI9IjIwIiB5Mj0iODIic3R5bGU9InN0cm9rZTojOGVjNzhlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjgzIiB4Mj0iMjAiIHkyPSI4MyJzdHlsZT0ic3Ryb2tlOiM4Y2M2OGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODQiIHgyPSIyMCIgeTI9Ijg0InN0eWxlPSJzdHJva2U6IzhiYzU4YjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4NSIgeDI9IjIwIiB5Mj0iODUic3R5bGU9InN0cm9rZTojOGFjNThhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg2IiB4Mj0iMjAiIHkyPSI4NiJzdHlsZT0ic3Ryb2tlOiM4OGM0ODg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iODciIHgyPSIyMCIgeTI9Ijg3InN0eWxlPSJzdHJva2U6Izg3YzQ4NztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI4OCIgeDI9IjIwIiB5Mj0iODgic3R5bGU9InN0cm9rZTojODZjMzg2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijg5IiB4Mj0iMjAiIHkyPSI4OSJzdHlsZT0ic3Ryb2tlOiM4NWMyODU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTAiIHgyPSIyMCIgeTI9IjkwInN0eWxlPSJzdHJva2U6IzgzYzI4MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5MCIgeDI9IjIwIiB5Mj0iOTAic3R5bGU9InN0cm9rZTojN2ZjMDdmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjkyIiB4Mj0iMjAiIHkyPSI5MiJzdHlsZT0ic3Ryb2tlOiM3ZWJmN2U7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTMiIHgyPSIyMCIgeTI9IjkzInN0eWxlPSJzdHJva2U6IzdkYmU3ZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NCIgeDI9IjIwIiB5Mj0iOTQic3R5bGU9InN0cm9rZTojN2NiZTdjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk1IiB4Mj0iMjAiIHkyPSI5NSJzdHlsZT0ic3Ryb2tlOiM3YWJkN2E7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTYiIHgyPSIyMCIgeTI9Ijk2InN0eWxlPSJzdHJva2U6Izc5YmQ3OTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSI5NyIgeDI9IjIwIiB5Mj0iOTcic3R5bGU9InN0cm9rZTojNzhiYzc4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9Ijk4IiB4Mj0iMjAiIHkyPSI5OCJzdHlsZT0ic3Ryb2tlOiM3N2JiNzc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iOTkiIHgyPSIyMCIgeTI9Ijk5InN0eWxlPSJzdHJva2U6Izc1YmI3NTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDAiIHgyPSIyMCIgeTI9IjEwMCJzdHlsZT0ic3Ryb2tlOiM3NGJhNzQ7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTAxIiB4Mj0iMjAiIHkyPSIxMDEic3R5bGU9InN0cm9rZTojNzNiOTczO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwMiIgeDI9IjIwIiB5Mj0iMTAyInN0eWxlPSJzdHJva2U6IzcxYjk3MTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDMiIHgyPSIyMCIgeTI9IjEwMyJzdHlsZT0ic3Ryb2tlOiM3MGI4NzA7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA0IiB4Mj0iMjAiIHkyPSIxMDQic3R5bGU9InN0cm9rZTojNmZiNzZmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwNSIgeDI9IjIwIiB5Mj0iMTA1InN0eWxlPSJzdHJva2U6IzZlYjc2ZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDYiIHgyPSIyMCIgeTI9IjEwNiJzdHlsZT0ic3Ryb2tlOiM2Y2I2NmM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTA3IiB4Mj0iMjAiIHkyPSIxMDcic3R5bGU9InN0cm9rZTojNmJiNjZiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEwOCIgeDI9IjIwIiB5Mj0iMTA4InN0eWxlPSJzdHJva2U6IzZhYjU2YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMDgiIHgyPSIyMCIgeTI9IjEwOCJzdHlsZT0ic3Ryb2tlOiM2NmIzNjY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEwIiB4Mj0iMjAiIHkyPSIxMTAic3R5bGU9InN0cm9rZTojNjViMjY1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExMSIgeDI9IjIwIiB5Mj0iMTExInN0eWxlPSJzdHJva2U6IzYzYjI2MztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTIiIHgyPSIyMCIgeTI9IjExMiJzdHlsZT0ic3Ryb2tlOiM2MmIxNjI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTEzIiB4Mj0iMjAiIHkyPSIxMTMic3R5bGU9InN0cm9rZTojNjFiMDYxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNCIgeDI9IjIwIiB5Mj0iMTE0InN0eWxlPSJzdHJva2U6IzVmYjA1ZjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTUiIHgyPSIyMCIgeTI9IjExNSJzdHlsZT0ic3Ryb2tlOiM1ZWFmNWU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE2IiB4Mj0iMjAiIHkyPSIxMTYic3R5bGU9InN0cm9rZTojNWRhZjVkO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjExNyIgeDI9IjIwIiB5Mj0iMTE3InN0eWxlPSJzdHJva2U6IzVjYWU1YztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMTgiIHgyPSIyMCIgeTI9IjExOCJzdHlsZT0ic3Ryb2tlOiM1YWFkNWE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTE5IiB4Mj0iMjAiIHkyPSIxMTkic3R5bGU9InN0cm9rZTojNTlhZDU5O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMCIgeDI9IjIwIiB5Mj0iMTIwInN0eWxlPSJzdHJva2U6IzU4YWM1ODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjEiIHgyPSIyMCIgeTI9IjEyMSJzdHlsZT0ic3Ryb2tlOiM1N2FiNTc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTIyIiB4Mj0iMjAiIHkyPSIxMjIic3R5bGU9InN0cm9rZTojNTVhYjU1O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyMyIgeDI9IjIwIiB5Mj0iMTIzInN0eWxlPSJzdHJva2U6IzU0YWE1NDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjQiIHgyPSIyMCIgeTI9IjEyNCJzdHlsZT0ic3Ryb2tlOiM1M2E5NTM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI1IiB4Mj0iMjAiIHkyPSIxMjUic3R5bGU9InN0cm9rZTojNTFhOTUxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyNiIgeDI9IjIwIiB5Mj0iMTI2InN0eWxlPSJzdHJva2U6IzUwYTg1MDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMjYiIHgyPSIyMCIgeTI9IjEyNiJzdHlsZT0ic3Ryb2tlOiM0Y2E2NGM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTI4IiB4Mj0iMjAiIHkyPSIxMjgic3R5bGU9InN0cm9rZTojNGJhNjRiO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEyOSIgeDI9IjIwIiB5Mj0iMTI5InN0eWxlPSJzdHJva2U6IzRhYTU0YTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzAiIHgyPSIyMCIgeTI9IjEzMCJzdHlsZT0ic3Ryb2tlOiM0OGE0NDg7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTMxIiB4Mj0iMjAiIHkyPSIxMzEic3R5bGU9InN0cm9rZTojNDdhNDQ3O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzMiIgeDI9IjIwIiB5Mj0iMTMyInN0eWxlPSJzdHJva2U6IzQ2YTM0NjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzMiIHgyPSIyMCIgeTI9IjEzMyJzdHlsZT0ic3Ryb2tlOiM0NWEyNDU7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM0IiB4Mj0iMjAiIHkyPSIxMzQic3R5bGU9InN0cm9rZTojNDNhMjQzO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzNSIgeDI9IjIwIiB5Mj0iMTM1InN0eWxlPSJzdHJva2U6IzQyYTE0MjtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzYiIHgyPSIyMCIgeTI9IjEzNiJzdHlsZT0ic3Ryb2tlOiM0MWExNDE7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTM3IiB4Mj0iMjAiIHkyPSIxMzcic3R5bGU9InN0cm9rZTojM2ZhMDNmO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjEzOCIgeDI9IjIwIiB5Mj0iMTM4InN0eWxlPSJzdHJva2U6IzNlOWYzZTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxMzkiIHgyPSIyMCIgeTI9IjEzOSJzdHlsZT0ic3Ryb2tlOiMzZDlmM2Q7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQwIiB4Mj0iMjAiIHkyPSIxNDAic3R5bGU9InN0cm9rZTojM2M5ZTNjO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0MSIgeDI9IjIwIiB5Mj0iMTQxInN0eWxlPSJzdHJva2U6IzNhOWQzYTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDIiIHgyPSIyMCIgeTI9IjE0MiJzdHlsZT0ic3Ryb2tlOiMzOTlkMzk7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQzIiB4Mj0iMjAiIHkyPSIxNDMic3R5bGU9InN0cm9rZTojMzg5YzM4O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NCIgeDI9IjIwIiB5Mj0iMTQ0InN0eWxlPSJzdHJva2U6IzM3OWIzNztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDQiIHgyPSIyMCIgeTI9IjE0NCJzdHlsZT0ic3Ryb2tlOiMzMzlhMzM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ2IiB4Mj0iMjAiIHkyPSIxNDYic3R5bGU9InN0cm9rZTojMzE5OTMxO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE0NyIgeDI9IjIwIiB5Mj0iMTQ3InN0eWxlPSJzdHJva2U6IzMwOTgzMDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNDgiIHgyPSIyMCIgeTI9IjE0OCJzdHlsZT0ic3Ryb2tlOiMyZjk4MmY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTQ5IiB4Mj0iMjAiIHkyPSIxNDkic3R5bGU9InN0cm9rZTojMmU5NzJlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MCIgeDI9IjIwIiB5Mj0iMTUwInN0eWxlPSJzdHJva2U6IzJjOTYyYztzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTEiIHgyPSIyMCIgeTI9IjE1MSJzdHlsZT0ic3Ryb2tlOiMyYjk2MmI7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTUyIiB4Mj0iMjAiIHkyPSIxNTIic3R5bGU9InN0cm9rZTojMmE5NTJhO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1MyIgeDI9IjIwIiB5Mj0iMTUzInN0eWxlPSJzdHJva2U6IzI4OTQyODtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTQiIHgyPSIyMCIgeTI9IjE1NCJzdHlsZT0ic3Ryb2tlOiMyNzk0Mjc7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU1IiB4Mj0iMjAiIHkyPSIxNTUic3R5bGU9InN0cm9rZTojMjY5MzI2O3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1NiIgeDI9IjIwIiB5Mj0iMTU2InN0eWxlPSJzdHJva2U6IzI1OTIyNTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNTciIHgyPSIyMCIgeTI9IjE1NyJzdHlsZT0ic3Ryb2tlOiMyMzkyMjM7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTU4IiB4Mj0iMjAiIHkyPSIxNTgic3R5bGU9InN0cm9rZTojMjI5MTIyO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE1OSIgeDI9IjIwIiB5Mj0iMTU5InN0eWxlPSJzdHJva2U6IzIxOTEyMTtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjAiIHgyPSIyMCIgeTI9IjE2MCJzdHlsZT0ic3Ryb2tlOiMxZjkwMWY7c3Ryb2tlLXdpZHRoOjM7IiAvPjxsaW5lIHgxPSIwIiB5MT0iMTYxIiB4Mj0iMjAiIHkyPSIxNjEic3R5bGU9InN0cm9rZTojMWU4ZjFlO3N0cm9rZS13aWR0aDozOyIgLz48bGluZSB4MT0iMCIgeTE9IjE2MiIgeDI9IjIwIiB5Mj0iMTYyInN0eWxlPSJzdHJva2U6IzFkOGYxZDtzdHJva2Utd2lkdGg6MzsiIC8+PGxpbmUgeDE9IjAiIHkxPSIxNjIiIHgyPSIyMCIgeTI9IjE2MiJzdHlsZT0ic3Ryb2tlOiMxOThkMTk7c3Ryb2tlLXdpZHRoOjM7IiAvPjwvc3ZnPjxzdmcgaGVpZ2h0PSIxNjMiIHdpZHRoPSI1MCI+PHRleHQgeD0iNSIgeT0iMTkiIGR4PSIwIiBkeT0iMGV4Ij4tIDU8L3RleHQ+PHRleHQgeD0iNSIgeT0iMzciIGR4PSIwIiBkeT0iMGV4Ij4tIDEwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjU1IiBkeD0iMCIgZHk9IjBleCI+LSAxNTwvdGV4dD48dGV4dCB4PSI1IiB5PSI3MyIgZHg9IjAiIGR5PSIwZXgiPi0gMjA8L3RleHQ+PHRleHQgeD0iNSIgeT0iOTEiIGR4PSIwIiBkeT0iMGV4Ij4tIDI1PC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjEwOSIgZHg9IjAiIGR5PSIwZXgiPi0gMzA8L3RleHQ+PHRleHQgeD0iNSIgeT0iMTI3IiBkeD0iMCIgZHk9IjBleCI+LSAzNTwvdGV4dD48dGV4dCB4PSI1IiB5PSIxNDUiIGR4PSIwIiBkeT0iMGV4Ij4tIDQwPC90ZXh0Pjx0ZXh0IHg9IjUiIHk9IjE2MyIgZHg9IjAiIGR5PSIwZXgiPi0gNDU8L3RleHQ+PC9zdmc+CgogIDwvdWw+CjwvZGl2Pgo8L2Rpdj4KCjwvYm9keT4KPC9odG1sPgoKPHN0eWxlIHR5cGU9J3RleHQvY3NzJz4KICAubWFwbGVnZW5kIC5sZWdlbmQtdGl0bGUgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1zaXplOiA5MCU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIHsKICAgIG1hcmdpbjogMDsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIHBhZGRpbmc6IDA7CiAgICBmbG9hdDogbGVmdDsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICB9CiAgLm1hcGxlZ2VuZCAubGVnZW5kLXNjYWxlIHVsIGxpIHsKICAgIGZvbnQtc2l6ZTogODAlOwogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgbGluZS1oZWlnaHQ6IDE4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICB9CiAgLm1hcGxlZ2VuZCB1bC5sZWdlbmQtbGFiZWxzIGxpIHNwYW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBmbG9hdDogbGVmdDsKICAgIGhlaWdodDogMTZweDsKICAgIHdpZHRoOiAzMHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIAogICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKICAgIAogICAgfQogIC5tYXBsZWdlbmQgLmxlZ2VuZC1zb3VyY2UgewogICAgZm9udC1zaXplOiA4MCU7CiAgICBjb2xvcjogIzc3NzsKICAgIGNsZWFyOiBib3RoOwogICAgfQogIC5tYXBsZWdlbmQgYSB7CiAgICBjb2xvcjogIzc3NzsKICAgIH0KPC9zdHlsZT4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgCiAgICAgICAgdmFyIGJvdW5kcyA9IG51bGw7CiAgICAKCiAgICB2YXIgbWFwXzcyNDg2ZmE0NjRlMDRhZTlhYWFjMTA4YTg1MGIzMTc4ID0gTC5tYXAoCiAgICAgICAgJ21hcF83MjQ4NmZhNDY0ZTA0YWU5YWFhYzEwOGE4NTBiMzE3OCcsIHsKICAgICAgICBjZW50ZXI6IFswLCAwXSwKICAgICAgICB6b29tOiAyLAogICAgICAgIG1heEJvdW5kczogYm91bmRzLAogICAgICAgIGxheWVyczogW10sCiAgICAgICAgd29ybGRDb3B5SnVtcDogZmFsc2UsCiAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICB6b29tQ29udHJvbDogdHJ1ZSwKICAgICAgICB9KTsKTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwXzcyNDg2ZmE0NjRlMDRhZTlhYWFjMTA4YTg1MGIzMTc4KTsKCiAgICAKICAgIHZhciB0aWxlX2xheWVyXzNkYjAzN2Y5OGRjNDRkOTc5ZWNjNzUyOTlkZGE2Y2Q3ID0gTC50aWxlTGF5ZXIoCiAgICAgICAgJ2h0dHBzOi8ve3N9LnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nJywKICAgICAgICB7CiAgICAgICAgImF0dHJpYnV0aW9uIjogbnVsbCwKICAgICAgICAiZGV0ZWN0UmV0aW5hIjogZmFsc2UsCiAgICAgICAgIm1heE5hdGl2ZVpvb20iOiAxOCwKICAgICAgICAibWF4Wm9vbSI6IDE4LAogICAgICAgICJtaW5ab29tIjogMCwKICAgICAgICAibm9XcmFwIjogZmFsc2UsCiAgICAgICAgIm9wYWNpdHkiOiAxLAogICAgICAgICJzdWJkb21haW5zIjogImFiYyIsCiAgICAgICAgInRtcyI6IGZhbHNlCn0pLmFkZFRvKG1hcF83MjQ4NmZhNDY0ZTA0YWU5YWFhYzEwOGE4NTBiMzE3OCk7CiAgICAKICAgICAgICAgICAgdmFyIGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYgPSBMLmZlYXR1cmVHcm91cCgKICAgICAgICAgICAgICAgICkuYWRkVG8obWFwXzcyNDg2ZmE0NjRlMDRhZTlhYWFjMTA4YTg1MGIzMTc4KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lZGQzYzdmMjUzY2I0YzZkOGU1YTNhYzI2NzNiMjBlMyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjYyOTcsIC0xNTUuNDNdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U0NzVhY2RjYjViODRlZWZhNDg1ZDZiNzFkNTIxODdhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzUuMCwgMTM1LjBdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzFmNjlkOTcyNzI3ZDQxNTc4Nzg1ZWFiNzQzOTNiOTk2ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNjQuNzYyOCwgMjUuNTU3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZTk0ZDU3OGQ0NGUxNGQ3ODkwY2FjZDEzMDY3YzIzYjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9mMTk0NzE0ZDdkMzM0ZDY0OWE5Y2VmYjVkMjQ2Y2UzNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0zOC43MzkyLCAtNzEuMjc3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9lYWM5ODAyOGQxNmE0MTdlYWIzOTk2ZWNiM2VkZWViNSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85M2U4MzYzZTNmODQ0Y2Q0YjE2MDU5YzIzNzIxOGIxZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjUsIDEyOC4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9hZTQ1ODNkZmJjN2E0ZmE2ODg3YmY5MGJiNGNjNDc4NyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWy0xMS42MzA4LCAxMzAuOTQ4OTk5OTk5OTk5OThdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzcxYjNhZDliNmY0ZDRjMjQ5ZThiNWU0YjFhYzNlZTIwID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45MjA0OCwgLTkuOTYxMjhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzY5NDMwZWNkMTZkMjQ4OGM5ZDhkN2Y0Y2I5MmU1NmRiID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMzQuOTQwMywgLTk4LjkwNDJdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM5OTgzZTZiOGZiNDQxZWVhYThiMTdhZDRmN2I3NmFmID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTIuODExNCwgNzUuMjY1MV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDIxNWVjNzhkMWJmNDhhMzg3ZjY5NWRmYmU4ZmRhYTMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85Yzg2MzY1NjYwOGY0ODdjOGE1YjJkNGFjMjM1NzdiNyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzQ2LjkwNjg1ODU3MTQsIDE5LjY1NTUyNzE0MjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzM4ODUxZTM2OTdhOTQ4YThhZWZkYzA5NGQ4MzJmYTNlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzAwMDAwMCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDguMDQ5OTk5OTk5OTk5OTk5LAogICJzdHJva2UiOiB0cnVlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYzMzNmM0ODdkNDQ3NDcwOWIyYjQ2MmYzYzkzNjk1MWIgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl83ZjFiODI5N2U0Y2Y0MmVmYTY2NTJmODhiYWIxODY1OCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzExLjcwODE4MiwgMzkuNTQzNDU2XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjMDAwMDAwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogOC4wNDk5OTk5OTk5OTk5OTksCiAgInN0cm9rZSI6IHRydWUsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85N2YwNzEwYWI5MmM0NjU3YmFiZGUwYmIxYTk5MjhjMCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzk1Yzg3MzBjNmFiMjRkOWFhZTZkNDRhYWE3NThkNTE3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTUuMjY5MTgsIDM1LjQ4MDhdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMwMDAwMDAiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA4LjA0OTk5OTk5OTk5OTk5OSwKICAic3Ryb2tlIjogdHJ1ZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2U3YTRmMTUwMzEyYzQ3ZDE4MjFlNTkxN2IxZTVmYzVlID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbMTkuNjI5NywgLTE1NS40M10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiI2Q3ZWJkNyIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzdjZTRjMWNiYTJmNjQxMjFiNjFhMjAwNTE0ZDA1OGUxID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2YxMjRiYjQ5ZDNiYjQ0NjViYjgyZDZlZjJkY2IwOGRhID0gJChgPGRpdiBpZD0iaHRtbF9mMTI0YmI0OWQzYmI0NDY1YmI4MmQ2ZWYyZGNiMDhkYSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2hhd2ExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkhhd2FpaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdjZTRjMWNiYTJmNjQxMjFiNjFhMjAwNTE0ZDA1OGUxLnNldENvbnRlbnQoaHRtbF9mMTI0YmI0OWQzYmI0NDY1YmI4MmQ2ZWYyZGNiMDhkYSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9lN2E0ZjE1MDMxMmM0N2QxODIxZTU5MTdiMWU1ZmM1ZS5iaW5kUG9wdXAocG9wdXBfN2NlNGMxY2JhMmY2NDEyMWI2MWEyMDA1MTRkMDU4ZTEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9lN2E0ZjE1MDMxMmM0N2QxODIxZTU5MTdiMWU1ZmM1ZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA4YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl81NTljY2IzNmFkMTU0MzViYjExN2E0MjQ5OTBlZDg4YSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM1LjAsIDEzNS4wXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYjNkOWIzIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfNDU4YWMxMDUyMGMwNDNjNDg1NTcwMGM4NjVhYzRmMWEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDQxYjY2MDg0MTk5NDc3NjgyN2U5MTVlNmQyNTEwNzYgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0MWI2NjA4NDE5OTQ3NzY4MjdlOTE1ZTZkMjUxMDc2IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDE2NDMiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+SmFwYW5lc2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNDU4YWMxMDUyMGMwNDNjNDg1NTcwMGM4NjVhYzRmMWEuc2V0Q29udGVudChodG1sX2Q0MWI2NjA4NDE5OTQ3NzY4MjdlOTE1ZTZkMjUxMDc2KTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzU1OWNjYjM2YWQxNTQzNWJiMTE3YTQyNDk5MGVkODhhLmJpbmRQb3B1cChwb3B1cF80NThhYzEwNTIwYzA0M2M0ODU1NzAwYzg2NWFjNGYxYSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzU1OWNjYjM2YWQxNTQzNWJiMTE3YTQyNDk5MGVkODhhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDE1YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl9kZDZlNzE1Y2ZlNzc0MDU0YmMyZjMwNTU4OTZmOGM4MyA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiNhOGQ0YTgiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF8zODY3YjEyNmZiYzM0NzUwYmExOTZiNGM2MmMxZmU1MCA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9hZDI1ZDk4ZWUxNzU0NjZhYWI0YmEwMTRkOTQ5ZDllNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYWQyNWQ5OGVlMTc1NDY2YWFiNGJhMDE0ZDk0OWQ5ZTciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC9maW5uMTMxOCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5GaW5uaXNoPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzM4NjdiMTI2ZmJjMzQ3NTBiYTE5NmI0YzYyYzFmZTUwLnNldENvbnRlbnQoaHRtbF9hZDI1ZDk4ZWUxNzU0NjZhYWI0YmEwMTRkOTQ5ZDllNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kZDZlNzE1Y2ZlNzc0MDU0YmMyZjMwNTU4OTZmOGM4My5iaW5kUG9wdXAocG9wdXBfMzg2N2IxMjZmYmMzNDc1MGJhMTk2YjRjNjJjMWZlNTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kZDZlNzE1Y2ZlNzc0MDU0YmMyZjMwNTU4OTZmOGM4My5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxN2AgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZDkyY2UwODkyOWRkNDRkYTk2Y2YxMTI2ZjNhYWI3NDggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjYTNkMmEzIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZWM1M2MxNDIyMTAzNDY5MTk1YTZkMDAxZGM2OWI3NzggPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZmU5N2MyZjRjMjRmNGY5Nzk1OTIzODA0ZmM5MWY2YjIgPSAkKGA8ZGl2IGlkPSJodG1sX2ZlOTdjMmY0YzI0ZjRmOTc5NTkyMzgwNGZjOTFmNmIyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveW9ydTEyNDUiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WW9ydWJhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2VjNTNjMTQyMjEwMzQ2OTE5NWE2ZDAwMWRjNjliNzc4LnNldENvbnRlbnQoaHRtbF9mZTk3YzJmNGMyNGY0Zjk3OTU5MjM4MDRmYzkxZjZiMik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9kOTJjZTA4OTI5ZGQ0NGRhOTZjZjExMjZmM2FhYjc0OC5iaW5kUG9wdXAocG9wdXBfZWM1M2MxNDIyMTAzNDY5MTk1YTZkMDAxZGM2OWI3NzgpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9kOTJjZTA4OTI5ZGQ0NGRhOTZjZjExMjZmM2FhYjc0OC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAxOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZmFjM2NjMzI2ZDQ4NDhjNjk3NjNmYzUxYTk1ZjQ0YjkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstMzguNzM5MiwgLTcxLjI3N10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzk5Y2Q5OSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y3MDg3M2Y2NTQwMTRiODNiYjIwMzA5ZGI3Yzc4OTAwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzNmNTE3MjVkOGI0MjQ0NTE4MDEwNTI2YzBkMzdmNGFkID0gJChgPGRpdiBpZD0iaHRtbF8zZjUxNzI1ZDhiNDI0NDUxODAxMDUyNmMwZDM3ZjRhZCIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL21hcHUxMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPk1hcHVkdW5ndW48L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjcwODczZjY1NDAxNGI4M2JiMjAzMDlkYjdjNzg5MDAuc2V0Q29udGVudChodG1sXzNmNTE3MjVkOGI0MjQ0NTE4MDEwNTI2YzBkMzdmNGFkKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyX2ZhYzNjYzMyNmQ0ODQ4YzY5NzYzZmM1MWE5NWY0NGI5LmJpbmRQb3B1cChwb3B1cF9mNzA4NzNmNjU0MDE0YjgzYmIyMDMwOWRiN2M3ODkwMCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyX2ZhYzNjYzMyNmQ0ODQ4YzY5NzYzZmM1MWE5NWY0NGI5LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl82YTJmYzVmMTM2MWM0MTY4YjRiMWJhMDVkOGQzZTI3MCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzE4Ljc3NTcsIC04OC45NTY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOTljZDk5IiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfMTA5OGMyNzg0NmQ4NGQ5ZWI5NjA3NGJiOGFlYzdmNDYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZDMyMWU1OWY2Y2E3NDg4Y2EzMzUzMTMyYzM0ZTIzNWUgPSAkKGA8ZGl2IGlkPSJodG1sX2QzMjFlNTlmNmNhNzQ4OGNhMzM1MzEzMmMzNGUyMzVlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQveXVjYTEyNTQiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+WXVjYXRlYyBNYXlhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzEwOThjMjc4NDZkODRkOWViOTYwNzRiYjhhZWM3ZjQ2LnNldENvbnRlbnQoaHRtbF9kMzIxZTU5ZjZjYTc0ODhjYTMzNTMxMzJjMzRlMjM1ZSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl82YTJmYzVmMTM2MWM0MTY4YjRiMWJhMDVkOGQzZTI3MC5iaW5kUG9wdXAocG9wdXBfMTA5OGMyNzg0NmQ4NGQ5ZWI5NjA3NGJiOGFlYzdmNDYpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl82YTJmYzVmMTM2MWM0MTY4YjRiMWJhMDVkOGQzZTI3MC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyMGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNDU2MjU4YzIwNWZmNGIwZmE0YWE3OTRiNWZlMGQ0NzkgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszNy41LCAxMjguMF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzk0Y2E5NCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2JiZDY0YWE3OTg1ODRlYjdhZDI2YjAxMzQ0ZjcyYjFiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzk4MzI0NWI1YzYzMDRhZWQ5MDQ0MDhmN2RlOTMwMzIxID0gJChgPGRpdiBpZD0iaHRtbF85ODMyNDViNWM2MzA0YWVkOTA0NDA4ZjdkZTkzMDMyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2tvcmUxMjgwIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPktvcmVhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9iYmQ2NGFhNzk4NTg0ZWI3YWQyNmIwMTM0NGY3MmIxYi5zZXRDb250ZW50KGh0bWxfOTgzMjQ1YjVjNjMwNGFlZDkwNDQwOGY3ZGU5MzAzMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfNDU2MjU4YzIwNWZmNGIwZmE0YWE3OTRiNWZlMGQ0NzkuYmluZFBvcHVwKHBvcHVwX2JiZDY0YWE3OTg1ODRlYjdhZDI2YjAxMzQ0ZjcyYjFiKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfNDU2MjU4YzIwNWZmNGIwZmE0YWE3OTRiNWZlMGQ0NzkuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMjFgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyXzIwMGYxZTQ4YTQxNDRjZTBiMjhmMzMyYmYzNmM3NmVhID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbLTExLjYzMDgsIDEzMC45NDg5OTk5OTk5OTk5OF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzhmYzc4ZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzU2ZjQ4NjZjYmM0MjQ0YjA5MjE1ZTdkNjExYTM3N2RiID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2FiOThkNGMyMjM2MjQ5YTBhZjE4Yzg3MmU2MGZmYTNiID0gJChgPGRpdiBpZD0iaHRtbF9hYjk4ZDRjMjIzNjI0OWEwYWYxOGM4NzJlNjBmZmEzYiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3Rpd2kxMjQ0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlRpd2k8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfNTZmNDg2NmNiYzQyNDRiMDkyMTVlN2Q2MTFhMzc3ZGIuc2V0Q29udGVudChodG1sX2FiOThkNGMyMjM2MjQ5YTBhZjE4Yzg3MmU2MGZmYTNiKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzIwMGYxZTQ4YTQxNDRjZTBiMjhmMzMyYmYzNmM3NmVhLmJpbmRQb3B1cChwb3B1cF81NmY0ODY2Y2JjNDI0NGIwOTIxNWU3ZDYxMWEzNzdkYikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzIwMGYxZTQ4YTQxNDRjZTBiMjhmMzMyYmYzNmM3NmVhLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIyYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8xMDExN2E1ZjA5ZDM0NGQ5YjVmMmYzZGE2NGY5MTgxNiA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzYuOTIwNDgsIC05Ljk2MTI4XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOGZjNzhmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfYTUxNzIzMTM2MTgwNDAxNzk5ZDBkY2U1ZmZlODMxMzYgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfYzBhN2FjZDQ3NjdlNDllMjkxOWE4NmU3MDExNDg5NDMgPSAkKGA8ZGl2IGlkPSJodG1sX2MwYTdhY2Q0NzY3ZTQ5ZTI5MTlhODZlNzAxMTQ4OTQzIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGliZTEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGliZXJpYSBLcGVsbGU8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfYTUxNzIzMTM2MTgwNDAxNzk5ZDBkY2U1ZmZlODMxMzYuc2V0Q29udGVudChodG1sX2MwYTdhY2Q0NzY3ZTQ5ZTI5MTlhODZlNzAxMTQ4OTQzKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzEwMTE3YTVmMDlkMzQ0ZDliNWYyZjNkYTY0ZjkxODE2LmJpbmRQb3B1cChwb3B1cF9hNTE3MjMxMzYxODA0MDE3OTlkMGRjZTVmZmU4MzEzNikKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzEwMTE3YTVmMDlkMzQ0ZDliNWYyZjNkYTY0ZjkxODE2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIyYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8zYTcyZDFhMDk3ODk0YTY2OTMwMTNhYjM4NzhiNWE2MSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzM0Ljk0MDMsIC05OC45MDQyXSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjOGZjNzhmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZjcxMzk0NGVlYmMyNGI0YTkyMjM0NzMyNWYzYTRmNjQgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfMDdjNTgxM2Q4YWZhNDEyMDgyNTg0ZjYzYjVjMzU4YmEgPSAkKGA8ZGl2IGlkPSJodG1sXzA3YzU4MTNkOGFmYTQxMjA4MjU4NGY2M2I1YzM1OGJhIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQva2lvdzEyNjYiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+S2lvd2E8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjcxMzk0NGVlYmMyNGI0YTkyMjM0NzMyNWYzYTRmNjQuc2V0Q29udGVudChodG1sXzA3YzU4MTNkOGFmYTQxMjA4MjU4NGY2M2I1YzM1OGJhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzNhNzJkMWEwOTc4OTRhNjY5MzAxM2FiMzg3OGI1YTYxLmJpbmRQb3B1cChwb3B1cF9mNzEzOTQ0ZWViYzI0YjRhOTIyMzQ3MzI1ZjNhNGY2NCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzNhNzJkMWEwOTc4OTRhNjY5MzAxM2FiMzg3OGI1YTYxLmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDIyYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl85MjdhMjNlMmFmMTg0YmNiOGY5YTNjZDI3ZmZhYmE4ZSA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzEyLjgxMTQsIDc1LjI2NTFdLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiM4NWMyODUiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF83YjZjYjYyYTI4OTE0ZDQ1OGE1ZGFlNGVjMTQzOThmMSA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF8zNTlkNzkwNGZjMmY0MDgxYTVkM2UxNTBkZmE0YmE2ZiA9ICQoYDxkaXYgaWQ9Imh0bWxfMzU5ZDc5MDRmYzJmNDA4MWE1ZDNlMTUwZGZhNGJhNmYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90dWx1MTI1OCIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UdWx1PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwXzdiNmNiNjJhMjg5MTRkNDU4YTVkYWU0ZWMxNDM5OGYxLnNldENvbnRlbnQoaHRtbF8zNTlkNzkwNGZjMmY0MDgxYTVkM2UxNTBkZmE0YmE2Zik7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl85MjdhMjNlMmFmMTg0YmNiOGY5YTNjZDI3ZmZhYmE4ZS5iaW5kUG9wdXAocG9wdXBfN2I2Y2I2MmEyODkxNGQ0NThhNWRhZTRlYzE0Mzk4ZjEpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl85MjdhMjNlMmFmMTg0YmNiOGY5YTNjZDI3ZmZhYmE4ZS5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyNGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfYjU2NTUwNDE4MGNkNGM3Y2E3ZTc4ZjVlOTExNzU5MjMgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFszOS44NjY3LCAzMi44NjY3XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjN2ZjMDdmIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTE5ZjAyZWJmYzQzNGRkMGIyZjU1ZWNjYTJiNTAzMjEgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfZTM0ODUyMjU3ZDU5NDhmY2I0NTgxOTY2ZThhMDcwM2UgPSAkKGA8ZGl2IGlkPSJodG1sX2UzNDg1MjI1N2Q1OTQ4ZmNiNDU4MTk2NmU4YTA3MDNlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbnVjbDEzMDEiIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+VHVya2lzaDwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF9lMTlmMDJlYmZjNDM0ZGQwYjJmNTVlY2NhMmI1MDMyMS5zZXRDb250ZW50KGh0bWxfZTM0ODUyMjU3ZDU5NDhmY2I0NTgxOTY2ZThhMDcwM2UpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfYjU2NTUwNDE4MGNkNGM3Y2E3ZTc4ZjVlOTExNzU5MjMuYmluZFBvcHVwKHBvcHVwX2UxOWYwMmViZmM0MzRkZDBiMmY1NWVjY2EyYjUwMzIxKQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfYjU2NTUwNDE4MGNkNGM3Y2E3ZTc4ZjVlOTExNzU5MjMuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMjVgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2Y3NmQzY2VlMjFiZDQwN2Q4MmNmMzE4MWE4NmM4ZDYyID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzdhYmQ3YSIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzgyMTJmMWUyNTRhMDQ3NmJhYWY4MTE5NGRlNWMxYTc5ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2ZkNDE5ODFjYzU1ZTQzZTE5MWNjZmZjZWVjMTM1ZTIxID0gJChgPGRpdiBpZD0iaHRtbF9mZDQxOTgxY2M1NWU0M2UxOTFjY2ZmY2VlYzEzNWUyMSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2h1bmcxMjc0IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkh1bmdhcmlhbjwvYT48YnI+PC9kaXY+YClbMF07CiAgICAgICAgICAgICAgICBwb3B1cF84MjEyZjFlMjU0YTA0NzZiYWFmODExOTRkZTVjMWE3OS5zZXRDb250ZW50KGh0bWxfZmQ0MTk4MWNjNTVlNDNlMTkxY2NmZmNlZWMxMzVlMjEpOwogICAgICAgICAgICAKCiAgICAgICAgICAgIGNpcmNsZV9tYXJrZXJfZjc2ZDNjZWUyMWJkNDA3ZDgyY2YzMTgxYTg2YzhkNjIuYmluZFBvcHVwKHBvcHVwXzgyMTJmMWUyNTRhMDQ3NmJhYWY4MTE5NGRlNWMxYTc5KQogICAgICAgICAgICA7CgogICAgICAgICAgICAKICAgICAgICAKICAgIAogICAgICAgIGNpcmNsZV9tYXJrZXJfZjc2ZDNjZWUyMWJkNDA3ZDgyY2YzMTgxYTg2YzhkNjIuYmluZFRvb2x0aXAoCiAgICAgICAgICAgIGA8ZGl2PmAKICAgICAgICAgICAgKyBgMjZgICsgYDwvZGl2PmAsCiAgICAgICAgICAgIHsic3RpY2t5IjogdHJ1ZX0KICAgICAgICApOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBjaXJjbGVfbWFya2VyX2MwMWZiYWNjNmNmNTQ1ZWE5YTMxNWQ4YzRhOTc1MTg3ID0gTC5jaXJjbGVNYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzcwYjg3MCIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2RmYjM5NzBhYWIzYTQ2ZDc5Y2MyYzUxMWQyODNmZWEwID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sX2M0OTAxYWFjNmQ0YjQyOGY4ZTczODBhMTJkYTAwMWM3ID0gJChgPGRpdiBpZD0iaHRtbF9jNDkwMWFhYzZkNGI0MjhmOGU3MzgwYTEyZGEwMDFjNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL251Y2wxMzAyIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkdlb3JnaWFuPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2RmYjM5NzBhYWIzYTQ2ZDc5Y2MyYzUxMWQyODNmZWEwLnNldENvbnRlbnQoaHRtbF9jNDkwMWFhYzZkNGI0MjhmOGU3MzgwYTEyZGEwMDFjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9jMDFmYmFjYzZjZjU0NWVhOWEzMTVkOGM0YTk3NTE4Ny5iaW5kUG9wdXAocG9wdXBfZGZiMzk3MGFhYjNhNDZkNzljYzJjNTExZDI4M2ZlYTApCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9jMDFmYmFjYzZjZjU0NWVhOWEzMTVkOGM0YTk3NTE4Ny5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfZjFiNWEwOWEyNTc0NDc0MDlkMzlkZTc5NzM4MjdlMjAgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFs0Ni4zNjk5LCAtMTAzLjk1XSwKICAgICAgICAgICAgICAgIHsKICAiYnViYmxpbmdNb3VzZUV2ZW50cyI6IHRydWUsCiAgImNvbG9yIjogIiMwMDAwMDAiLAogICJkYXNoQXJyYXkiOiBudWxsLAogICJkYXNoT2Zmc2V0IjogbnVsbCwKICAiZmlsbCI6IHRydWUsCiAgImZpbGxDb2xvciI6ICIjNzBiODcwIiwKICAiZmlsbE9wYWNpdHkiOiAxLAogICJmaWxsUnVsZSI6ICJldmVub2RkIiwKICAibGluZUNhcCI6ICJyb3VuZCIsCiAgImxpbmVKb2luIjogInJvdW5kIiwKICAib3BhY2l0eSI6IDEuMCwKICAicmFkaXVzIjogNywKICAic3Ryb2tlIjogZmFsc2UsCiAgIndlaWdodCI6IDEKfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgLmFkZFRvKGZlYXR1cmVfZ3JvdXBfNTQwMTcwN2VmOGM4NDQyYWExNjNhZGFkYWQ5ODViMmYpOwogICAgICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgcG9wdXBfZTgwMzhmMWY2ZDVjNGZjOWI2ODNkZDEwMmRiOTEzM2YgPSBMLnBvcHVwKHttYXhXaWR0aDogJzEwMCUnCiAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdmFyIGh0bWxfNTkxYTU3MzM4Y2IzNGNjOTlkMWVkOTM0NTg2MmZmMDEgPSAkKGA8ZGl2IGlkPSJodG1sXzU5MWE1NzMzOGNiMzRjYzk5ZDFlZDkzNDU4NjJmZjAxIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij48YSBocmVmPSJodHRwczovL2dsb3R0b2xvZy5vcmcvcmVzb3VyY2UvbGFuZ3VvaWQvaWQvbGFrbzEyNDciIG9uY2xpY2s9InRoaXMudGFyZ2V0PSdfYmxhbmsnOyI+TGFrb3RhPC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2U4MDM4ZjFmNmQ1YzRmYzliNjgzZGQxMDJkYjkxMzNmLnNldENvbnRlbnQoaHRtbF81OTFhNTczMzhjYjM0Y2M5OWQxZWQ5MzQ1ODYyZmYwMSk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl9mMWI1YTA5YTI1NzQ0NzQwOWQzOWRlNzk3MzgyN2UyMC5iaW5kUG9wdXAocG9wdXBfZTgwMzhmMWY2ZDVjNGZjOWI2ODNkZDEwMmRiOTEzM2YpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl9mMWI1YTA5YTI1NzQ0NzQwOWQzOWRlNzk3MzgyN2UyMC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGAyOGAgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfMTc5ZWQyMjdjMzE3NGZlZTk4ZWYzOTY5NzM1NTFjMjggPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzY2YjM2NiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwXzA2ZmRmOTg4MDRiNzRjNDhhYWM4N2VkZjJiZGZiNTI4ID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzgyNGE2YjBiOGRhMTRiNDJiZGMxYTQyNGRjNjM1MzVhID0gJChgPGRpdiBpZD0iaHRtbF84MjRhNmIwYjhkYTE0YjQyYmRjMWE0MjRkYzYzNTM1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL2FtaGExMjQ1IiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPkFtaGFyaWM8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfMDZmZGY5ODgwNGI3NGM0OGFhYzg3ZWRmMmJkZmI1Mjguc2V0Q29udGVudChodG1sXzgyNGE2YjBiOGRhMTRiNDJiZGMxYTQyNGRjNjM1MzVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzE3OWVkMjI3YzMxNzRmZWU5OGVmMzk2OTczNTUxYzI4LmJpbmRQb3B1cChwb3B1cF8wNmZkZjk4ODA0Yjc0YzQ4YWFjODdlZGYyYmRmYjUyOCkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzE3OWVkMjI3YzMxNzRmZWU5OGVmMzk2OTczNTUxYzI4LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDMwYCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgY2lyY2xlX21hcmtlcl8yN2Y0M2RjMDM4Y2M0YjNmOTRmNmIxZGQ2NjYzZWQyOCA9IEwuY2lyY2xlTWFya2VyKAogICAgICAgICAgICAgICAgWzU5LjQ0NDcsIC0xMzUuMjldLAogICAgICAgICAgICAgICAgewogICJidWJibGluZ01vdXNlRXZlbnRzIjogdHJ1ZSwKICAiY29sb3IiOiAiIzAwMDAwMCIsCiAgImRhc2hBcnJheSI6IG51bGwsCiAgImRhc2hPZmZzZXQiOiBudWxsLAogICJmaWxsIjogdHJ1ZSwKICAiZmlsbENvbG9yIjogIiMyMzkyMjMiLAogICJmaWxsT3BhY2l0eSI6IDEsCiAgImZpbGxSdWxlIjogImV2ZW5vZGQiLAogICJsaW5lQ2FwIjogInJvdW5kIiwKICAibGluZUpvaW4iOiAicm91bmQiLAogICJvcGFjaXR5IjogMS4wLAogICJyYWRpdXMiOiA3LAogICJzdHJva2UiOiBmYWxzZSwKICAid2VpZ2h0IjogMQp9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAuYWRkVG8oZmVhdHVyZV9ncm91cF81NDAxNzA3ZWY4Yzg0NDJhYTE2M2FkYWRhZDk4NWIyZik7CiAgICAgICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBwb3B1cF9lYmVjNTIxYjkzNDQ0MDkzYTBjM2M5NjFjMDlhNzhhNyA9IEwucG9wdXAoe21heFdpZHRoOiAnMTAwJScKICAgICAgICAgICAgCiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgaHRtbF9jNjFmNGQ1ZDA1MTc0NTQyODNjMDQ3Zjc0NmMxZjRjNyA9ICQoYDxkaXYgaWQ9Imh0bWxfYzYxZjRkNWQwNTE3NDU0MjgzYzA0N2Y3NDZjMWY0YzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPjxhIGhyZWY9Imh0dHBzOi8vZ2xvdHRvbG9nLm9yZy9yZXNvdXJjZS9sYW5ndW9pZC9pZC90bGluMTI0NSIgb25jbGljaz0idGhpcy50YXJnZXQ9J19ibGFuayc7Ij5UbGluZ2l0PC9hPjxicj48L2Rpdj5gKVswXTsKICAgICAgICAgICAgICAgIHBvcHVwX2ViZWM1MjFiOTM0NDQwOTNhMGMzYzk2MWMwOWE3OGE3LnNldENvbnRlbnQoaHRtbF9jNjFmNGQ1ZDA1MTc0NTQyODNjMDQ3Zjc0NmMxZjRjNyk7CiAgICAgICAgICAgIAoKICAgICAgICAgICAgY2lyY2xlX21hcmtlcl8yN2Y0M2RjMDM4Y2M0YjNmOTRmNmIxZGQ2NjYzZWQyOC5iaW5kUG9wdXAocG9wdXBfZWJlYzUyMWI5MzQ0NDA5M2EwYzNjOTYxYzA5YTc4YTcpCiAgICAgICAgICAgIDsKCiAgICAgICAgICAgIAogICAgICAgIAogICAgCiAgICAgICAgY2lyY2xlX21hcmtlcl8yN2Y0M2RjMDM4Y2M0YjNmOTRmNmIxZGQ2NjYzZWQyOC5iaW5kVG9vbHRpcCgKICAgICAgICAgICAgYDxkaXY+YAogICAgICAgICAgICArIGA0M2AgKyBgPC9kaXY+YCwKICAgICAgICAgICAgeyJzdGlja3kiOiB0cnVlfQogICAgICAgICk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGNpcmNsZV9tYXJrZXJfNjcwM2I1MTYzZmNmNDE2MThjNjQxM2VkMTdhY2NhNzYgPSBMLmNpcmNsZU1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4yNjkxOCwgMzUuNDgwOF0sCiAgICAgICAgICAgICAgICB7CiAgImJ1YmJsaW5nTW91c2VFdmVudHMiOiB0cnVlLAogICJjb2xvciI6ICIjMDAwMDAwIiwKICAiZGFzaEFycmF5IjogbnVsbCwKICAiZGFzaE9mZnNldCI6IG51bGwsCiAgImZpbGwiOiB0cnVlLAogICJmaWxsQ29sb3IiOiAiIzBmODgwZiIsCiAgImZpbGxPcGFjaXR5IjogMSwKICAiZmlsbFJ1bGUiOiAiZXZlbm9kZCIsCiAgImxpbmVDYXAiOiAicm91bmQiLAogICJsaW5lSm9pbiI6ICJyb3VuZCIsCiAgIm9wYWNpdHkiOiAxLjAsCiAgInJhZGl1cyI6IDcsCiAgInN0cm9rZSI6IGZhbHNlLAogICJ3ZWlnaHQiOiAxCn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC5hZGRUbyhmZWF0dXJlX2dyb3VwXzU0MDE3MDdlZjhjODQ0MmFhMTYzYWRhZGFkOTg1YjJmKTsKICAgICAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHBvcHVwX2Y5YmM5ODlmMmYyNDRkZmY4ZjM1YTQxODdiZTI1ZjBlID0gTC5wb3B1cCh7bWF4V2lkdGg6ICcxMDAlJwogICAgICAgICAgICAKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHZhciBodG1sXzUwNGFhMWZkMmMxMDRlMDU5YTI3ZjRjOGRhMjE0OTVhID0gJChgPGRpdiBpZD0iaHRtbF81MDRhYTFmZDJjMTA0ZTA1OWEyN2Y0YzhkYTIxNDk1YSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+PGEgaHJlZj0iaHR0cHM6Ly9nbG90dG9sb2cub3JnL3Jlc291cmNlL2xhbmd1b2lkL2lkL3NhbmQxMjczIiBvbmNsaWNrPSJ0aGlzLnRhcmdldD0nX2JsYW5rJzsiPlNhbmRhd2U8L2E+PGJyPjwvZGl2PmApWzBdOwogICAgICAgICAgICAgICAgcG9wdXBfZjliYzk4OWYyZjI0NGRmZjhmMzVhNDE4N2JlMjVmMGUuc2V0Q29udGVudChodG1sXzUwNGFhMWZkMmMxMDRlMDU5YTI3ZjRjOGRhMjE0OTVhKTsKICAgICAgICAgICAgCgogICAgICAgICAgICBjaXJjbGVfbWFya2VyXzY3MDNiNTE2M2ZjZjQxNjE4YzY0MTNlZDE3YWNjYTc2LmJpbmRQb3B1cChwb3B1cF9mOWJjOTg5ZjJmMjQ0ZGZmOGYzNWE0MTg3YmUyNWYwZSkKICAgICAgICAgICAgOwoKICAgICAgICAgICAgCiAgICAgICAgCiAgICAKICAgICAgICBjaXJjbGVfbWFya2VyXzY3MDNiNTE2M2ZjZjQxNjE4YzY0MTNlZDE3YWNjYTc2LmJpbmRUb29sdGlwKAogICAgICAgICAgICBgPGRpdj5gCiAgICAgICAgICAgICsgYDQ3YCArIGA8L2Rpdj5gLAogICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgKTsKICAgICAgICAKPC9zY3JpcHQ+\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7fe74ec1cd68>"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = lingtypology.LingMap(data.language)\n",
    "m.legend_title = 'Consonants'\n",
    "m.legend_position = 'bottomleft'\n",
    "m.add_tooltips(data.consonants)\n",
    "#If numeric is True, it will look like this\n",
    "m.add_features(data.consonants, numeric=True)\n",
    "m.create_map()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Go back up](#up)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "title": "Lingtypology"
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
