[{"Attribute":[{"category":"External analysis","disable_correlation":false,"first_seen":"2023-05-24T14:17:30.628000+00:00","to_ids":false,"type":"link","uuid":"fb67b87d-14d5-40cc-8019-3de5cf95d93c","value":"https://lookyloo.circl.lu/tree/87fa17f9-7a80-4d41-b964-a7809d139ff2"},{"category":"External analysis","comment":"Screenshot of the page at the end of the capture","data":"iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FDAAAAAXNSR0IArs4c6QAAIABJREFUeJzs3WdAU2ffBvArCQkzEAzKECQ44kAUxYVWRVu1Vq2o3Utsn+7h7LK1il1Ph1Vr91Lbvq21raNS6xa1ilVRFKmKgyjIUCJhQwLJ+yHkkJAEAuqjtdfvS/HM+5yEQLnO/3+LCgtzTSAiIqJrTqkMvtZDICIiIiIiImoxrTbvWg+BiIiIAIiv9QCIiIiIiIiIiIiIiIiIiOjKYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDYABMRERERERERERERERERHSDcLvWAyAiIqJrKyV7OrSVaY1uo/SMho97OEJ84qD0ina6Xc25ZBjOJcNYchbGYk2jx3TvPhmyqIQWjZmIiIiIiIiIiIiIHGMATERE9C+nrUxDbmlyo9tYr5fLVIgJmQu10hzemqp1qNq/CNUHFsNUrXP5vG5hQ1s2YCIiIiIiIiIiIiJyigEwERERNUupXoNkzRSkX1iMgWUT4bn7g2YFv9ejeamZAACV3BMJ6rAWb2ORnKtFcp4WAJCgDoVK7gUAWJaZDU1pJQBgWlQEFDJp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13jJycnEx8eTnZ1NQECAwzDzz4iKisLLy8uYb2pqKikpKTaVqCK/FxcXh7Oz813/PImIPEixsdcf9hREREQEVQCLiIiIiIjIHfz/Cn/h3l80MJvNfzj8hZxWyHm53/AXctr9/pn53M3v1wj28PDAw8PjL7uf5A9FihR52FMQEREREZGHxHFPIhERERERERERERERERER+cdRACwiIiIiIiIiIiIiIiIikk8oABYRERERERERERERERERyScUAIuIiIiIiIiIiIiIiIiI5BMKgEVERERERERERERERERE8gkFwCIiIiIiIiIiIiIiIiIi+YQCYBERERERERERERERERGRfML5YU9ARERE8pfjx48/7CkA0Lx5c+DvMx+Rf7ratWtz5coVbt269bCnIiIiIpLv5P77i4iIiMiDYIqJibA+7EmIiIgI+PoGPOwpiIiIiIiIiPxhsbHXH/YUREREBLWAFhERERERERERERERERHJNxQAi4iIiIiIiIiIiIiIiIjkEwqARURERERERERERERERETyCQXAIiIiIiIiIiIiIiIiIiL5hAJgEREREREREREREREREZF8QgGwiIiIiIiIiIiIiIiIiEg+oQBYRERERERERERERERERCSfUAAsIiIiIiIiIiIiIiIiIpJPKAAWEREREREREREREREREcknFACLiIiIiIiIiIiIiIiIiOQTCoBFRERERERERERERERERPIJBcAiIiIiIiIiIiIiIiIiIvmEAmARERERERERERERERERkXxCAbCIiIiIiIiIiIiIiIiISD6hAFhEREREREREREREREREJJ9QACwiIiIiIiIiIiIiIiIikk8oABYRERERERERERERERERySecH/YERERERPJy+vRpihYtip+f3196n7Nnz3Lo0CHCw8Mxm82UKFGCf/3rX5QpU+Yvva/8eaGhoTg5OVGyZEljX2xsLDExMVSpUuVPjx8SEkJAQAAFCxb802P9Xfz8889UrFgRb2/vhz2VvwWLxYrZbHrY0xAREREREREReWAUAIuIiMgD99tvv+Hl5UWZMmW4dOkSixcvtjneunVrvvnmG5t9AwcOJCAgwGbf3Llzad26Ne3atQMgPDyc7Oxsh/cMCAjA2fn+/tEmLCyMqVOnUqRIEVq1asVTTz2Fk5MToaGhrFmzhpiYGIYMGULx4sXvOlZ0dDT9+/fHy8uLmTNnUqBAgbtec+LECQ4fPnzHcxo2bEhgYKDDY1arldTUVJKSkrh16xY3b94kOjqayMhIwsPDuXr1KhUqVOC9997Dycm+8cvOnTtJTU294/09PT1p0aLFXZ/lfixevJgbN24Y2zVq1ODFF1/8Q2Nt2LABDw8P+vXrZ+w7evQoX375JQMHDmTr1q0MGzbsjmP88MMP1KhRg0ceecRmf2RkJMHBwRw+fJiFCxc6DIG/+uorChYs+MA/I0eSkpK4cuUKNWvW/FPjjBw5kg8//JDGjRvf13UbN27E39+fpk2b3td1R44cYffu3Xf9Hhxp1nbJPZ+7L7in8fdbvj7H6fPRxnbThqV4okkZfj1xg+AdIXwwpBkACYnpdOy1gUXTn6Nk8cLG+VlZ2WRnW23GNzs7YXYy8cXmU6RnWuzu3+nFGri6mO95viIiIiIiIiIifxUFwCIiIvLA/fbbb6xcuZJ58+ZRrFgxunbtahwbM2YMHh4edvsSExPtAuDfe/XVVylUqBBms23IEh0dzcaNGylVqtQ9z/HEiRPMnz+f4cOHU7p0aSIjI/nhhx9IS0ujVq1avPfee1y7do2xY8fSv39/atWqledYVquVMWPGUKpUKRISEhg7diwTJ050GLre7vjx4+zevZvnn3/e4fEtW7bg5ubmMAAePnw4e/bswcPDg8KFC+Pl5UV0dDS+vr7Uq1ePihUrUqxYMVq0aIHVanUwOsycOZMyZcpQtGhRh8ejoqKIiIi4a7iZnZ3N2bNnCQ8PJzU1FV9fX2rWrImXl5fD82vUqEHp0qWN7YCAAM6dO0fv3r0dnt+uXTub8PCTTz7hwoULQE6I7+TkxK+//gpAlSpVqFOnDllZWZQvX56jR4+yfft2nn32WYdjWywWPvjgA6ZMmWITAN+6dYvXXnuNt99+m8jISL777jteeuklu+u///576tata2xnZWVx8eLFPKuPDx06xOXLl0lKSiIxMZHo6Giio6OJj49n4sSJVKpUyeF1kFMR/8EHH7Bjxw6b/Wlpabi7u9udf+TIEWJiYuz2p6enc+TIEW7dumV3rEmTJnl+bykpKcyfP98mALZYLGRkZODh4ZHnvG/evMmBAwfyPH43twe7efl9UFyhnA+eni7GdomAnHC3XBkf9hy8ytMtKtCgTnF27r1MqeJeNuEvwLtjdvDLiRu4OOf8GU5Lz6Jfj/p07hDI4lXHaPpYabwKuQGQZclm07azvNimqgJgEREREREREflbUAAsIiIiD1zXrl1JTExk8ODBfPHFF2zYsIHQ0FAgp6qyQIECrFmzhuvXrxv7bpeamorVajXCpZSUFCPgmjt3LhUqVLA5/7HHHruv+YWFhTF79mymTZtGwYIFOXz4MEOHDqVcuXIEBASwePFinn76aUaNGkVQUBDDhw9n5MiReVYCT548mdDQUFavXk12djY9e/bk/fffZ9y4cbi6ut5xLoUKFaJatWoOj+3cuTPP6yZOnMj169dZunQp77//PmazmfHjx+Pn58cbb7xBaGgoXbp0oU2bNnaB+e26detGw4YNHR47dOgQU6ZMyfNai8XC2rVrWblyJZ6enqSkpODt7Y2npyfnzp2jTZs2DB48GE9PT+Oaffv2cfLkSZtxLl68SMuWLQkODra7x4oVK+yCyu7du5Oeng7AsmXLcHd359///jcAbm5unD9/nqysLFxdXXnnnXdITEzM8xmuXLlCZmYmNWrUMPalp6cTFhbGJ598wltvvcX69evx9fU1ju/ZsweTyURGRgZXr17FxcWFcePGcfXqVc6fP4+3tzdbt27FZLJvK3z+/Hl++ukn/Pz88PPzo169eqxatYrMzExnMy+nAAAgAElEQVSHIW5erFYrcXFxWCwWOnfuTPfu3enSpYvNSwefffYZSUlJRqicmZlJXFwcTz/9NMnJyUZonmvr1q0sWbIkzwD4pZdeYsWKFRw4cIBSpUqxa9cuNm7cSMOGDRk1ahSQE1JHRkbi7u5uPM+1a9dITExk7dq1XL9+nevXrxMdHc2yZcvu+Xlv16ztkjuGwiGX4jh4+JrNvktXbmJyKk/5Mj681K4a5y7EUL92cdZtOcWgNxo5HOfdAU1o+1TOZzdmyh6bY91eqUX5sj4ApKRmsmnb2T/0LCIiIiIiIiIifwUFwCIiIvKX6Nu3LzVr1jTCwDFjxlC6dGni4uL44YcfOHPmDFOmTKFEiRKEh4dz6dIlKleuDMAzzzxDRkYG2dnZ/PLLL0yZMoUFCxY8sLkFBQXx/vvvU7BgQbKysvjoo4+MwBdyKph79epF69atqV+/PsOGDWP27NlMnDjRZpysrCyCgoLYs2cPs2fPpnDhnCrCRYsW8fbbb/PGG2/w4YcfUq5cOYfzKFOmDCdOnGDVqlUOj3t7e+e5DrGTkxMBAQGcOnWKL7/80q46df78+XTr1s1mbVxHLl68mGdIfenSpTyvS09PZ+jQocTGxjJ58mRq165Nt27daNu2LZ06dSIiIoJx48bRu3dvm/bJ7u7uFCpUyG48Nzc3h/t/P7egoCB++eUXYzsqKgqz2czx48eNfcnJyURFRdlUVv/444+8//77duP/+uuvlChRgqysLCwWC2azmYMHDzJ69GgWLlzI2rVrbcJfgE2bNpGUlISHhweRkZFUr16dSpUq0aJFC6pUqXLHNau7d+9O9+7dje1p06aRnp7OggULHFawJyUlsWvXLjIyMjh79iwpKSn069ePc+fOUbduXYKCghg/fjxjx47l6NGjTJgwwab9+JNPPmlU20+aNIkLFy7QtWtXm3C6YsWKeHl52bVlP336NBkZGaSmppKQkEBYWBje3t4MGzaM7Oxs6tSpw+uvv84zzzxj83nu3LmTzMxMo1177hgnTpygaNGiPProoxQvXhyr1eowJL8XdwqBXZydKORp/5t2NjsxauJuY/udD78jLCKBr78P4evvQ3i772MU8cm7kllERERERERE5J9CAbCIiIj8JUwmE82a5ayz6eHhwYIFCyhXrhwhISEUKVKEggULsmDBAooXL87Zs2epXLkyrVq1AmDv3r0A9O/f32YN4Pu1ZcsWrFarzfqyoaGhFC5cmLJlywJw5swZIiMjee2114xzatWqhYeHB9euXaN+/fqULVsWV1dXwsLCjEA1PDyckSNHcvnyZT788EOys7M5f/68McY777zD8uXL6datG126dKFz5842lZUxMTHEx8cbn1Fe4uPjiY2NtQkhR44cyc8//wzktOWdOnUqCxcuJDk5GZPJxKZNm4iLi8PLy4tNmzYBOWsJjxs3zmbs2rVrs3//fvbv35/n/R999FGH+8ePH09aWhpLly412v/e/vkUL16cmTNn8vrrrzNz5kw++OADABo0aEBCQoJNVW+pUqXyDLp/7/XXX6dNmzbG9saNG3F1deW5554z9sXGxhIUFGQ8O2AEjcnJySxYsIDw8HDCwsIICwsjMzOT9u3bYzKZGDBgAJ06deK5557j3XffZcWKFXZzmDlzpvH3jRs35j//+Q8VK1bk/PnzjB07llmzZt2x6jrXkiVL2L59O/Pnz8/z+ZOTk9m5cycFChQgJSUF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YBERERERERERERERERGRfEIBsIiIiIiIiIiIiIiIiIhIPqEAWEREREREREREREREREQkn1AALCIiIiIiIiIiIiIiIiKSTygAFhERERERERERERERERHJJxQAi4iIiIiIiIiIiIiIiIjkEwqARURERERERERERERERETyCQXAIiIiIiIiIiIiIiIiIiL5hAJgEREREREREREREREREZF8QgGwiIiIiIiIiIiIiIiIiEg+oQBYRERERERERERERERERCSfUAAsIiIiIiIiIiIiIiIiIpJPKAAWEREREREREREREREREcknFACLiIiIiIiIiIiIiIiIiOQTzg97AiIiIpK//PDDDw97CgA0b94c+PvMR+Sfrnbt2ly5coVbt2497KmIiIiI5Du5//4iIiIi8iCYYmIirA97EiIiIgK+vgEPewoPxM2bNx/2FADw8fEB/j7zEfmny/0zJSIiIiKSl9jY6w97CiIiIoJaQIuIiIiIiIiIiIiIiIiI5BsKgEVERERERERERERERERE8gkFwCIiIiIiIiIiIiIiIiIi+YQCYBERERERERERERERERGRfEIBsIiIiIiIiIiIiIiIiIhIPuH8sCcgIiIiIiL/TOXLl3/YU5C/iTJlyrB79+6HPQ0RERERERERQRXAIiIiIiIi8ieUKVOGhg0bPuxpiIiIiIiIiMj/UQWwiIiIiIj8KZcurXnYU5CHaPjwTX96jNjYWG7dukWFChXu67qIiAjMZjP+/v73fc/Q0FAASpcubTdm8eLF72usGzduEB0dTWBg4H3P4zrnElMAACAASURBVGG7dOkSLi4ulCpV6mFPRURERERERB4QBcAiIiIiwI8//sipU6eoVasWDRo0uOv5GRkZREdH3/U8Hx8fChQocE9zsFqt3Lx5k+joaMLDwwkLC+Ppp5+mWLFidudmZWVhsVjuOqaTkxMuLi42+85fvEmFct6YnUw2+y0WK2az7T6AsyFxVK1U5J6eQUTkXqSlpeHu7m5s79y5k23btrFy5Upj38WLFylXrhxOTo4bV1mtVt59911KlChBt27djP1eXl52oW6ujIwMZs2aRe/evQkODsZisdC6dWtWrFjB2LFjSUhI4IUXXmDHjh14eXnd8/Ps3bvXbv7/FJ9//jl+fn688cYbxr6VK1fi5OTE888/T1pamrHfbDbj6+v7wO4dGhpq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u5IH/kb7UuEvE65NsfvMlD4/eX8N3Ncm3Ru6B82U64oB4Er6UG6haB/KdcZgud52GAB+vC3D94l+X4xcp6L9qVC/0v7oN/Ik51z8u5QBYJ0zXoXvKkD/+q10XdG+GL+ODLVpqA0GgImIiOhpkj7rDhARERERVUdVmcuZiIiIiIiIiIjoaWEAmIiIiIiIiIiIiIiIiIiommAAmIiIiIiIiIiIiIiIiIiommAAmIiIiIiIiIiIiIiIiIiomjB71h0gIiKi6kUz4bVn3QUiIiIiIiIiIiKi/7eYAUxEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE0wAExEREREREREREREREREVE2YPesOEBERUfXy559/PusuEFUrAQEBiI+PR05OzrPuChERERH9Q1566aVn3QUiIiKqRiQZGSmaZ90JIiIiApydPZ51F56K7OzsZ90FomrFycnpWXeBiIiIiMgkmZkPnnUXiIiICBwCmoiIiIiIiIiIiIiIiIio2mAAmIiIiIiIiIiIiIiIiIiommAAmIiIiP7z1Go11Gr1s+4GERERERERERER0TPHADARERH9J2RlZSEvL09veUREBKZNm4bvvvvO5LY0Gs3T7FqlLl26hM8++wwbNmyAXC7/V7f9tBQUFCAhIQE5OTnPuitERETPhczMTMTGxlZ5vZSUFDx8+PBvb/fcuXMoLi7WWXbr1i2T2kxISEBCQoJon6oqNTUVERERVV7vaRD7Tfg8KCkpwblz5551N54rV69eRW5u7rPuBhEREdH/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U8OHD9fgwYM1Z84cp2H7gQMHtHDhQh04cECDBg1yhFn3gsjISLm4uDjaL9aqVStbsHazU6dOqV+/ftm2b9++XXXq1Lnl9cxms+bOnasBAwbIbDbrhRdeuOX6mzn5K5VAjz32mFJSUjR58mTFxcWpdOnSjjU409LSNHbsWFWrVk2VKlXSkCFDNHv2bMe/5U2bNumdd96RzWZT79691a1bN/n4+Cg1NVXLli3T0qVL1b17d0eb0+HDh2vAgAGaN2+eQkJCdOLECZ06dSrbnH777TeZTCZ9++23Tudcs2bNLC1Et27dqokTJ6pRo0YaMmRIlmNvPPQxaNAg9e7dW6NHj1bLli2zHGMymTR+/HidOHFCCxcudPo5nj59WjabTaVKlXJsu7Ge942WzX+2b9++LNWYf14DWMr8WbF7925duHBBY8aMyfZwxq0qgKXM1qQvv/yybDabWrZsqdDQUHl7eys9PV3u7u5Z3k/x4sX11VdfqVSpUtq5c6djXdKbFS1aVF5eXho/fryOHDmiunXrqk2bNpIyg/Bly5YpLCzMMa67u7u6deumt956S71791bVqlXl4eGhlJQUxcbGql69egoJCdGrr76q8uXLO0LF4cOHq1SpUpo7d6727t2rBQsWaP78+apRo4Zq166tw4cP5+vDAuXLl9f7778vX1/fXH8HuLq6/uVuBAcOHNDkyZNlNpu1YMGCbK1u79SqVav0xRdf6LfffpOfn5/atWunXr165fqQSufOnRUSEpJr14eb9enTRwMHDnR8BufPn9fcuXO1ZcsWR5eAG8GplNnKetq0aRo1apRGjRqlN9980/H35WaXLl3Sp59+qlWrVumxxx7ThAkT7nrXh7xKSEiQxWJxPEATFBSUp99LN1otb926VR9++KHj92W/fv2UnJysnj17qm/fvnrqqaeyBX8JCQl69dVXHVXIr776qr766it98MEHqlKliqMNvc1mU1RUVLYlAp599ln9+OOPGjFihLp166YqVao47jPsdnuOYf+N+65Zs2YpLCxMvr6+MhgMMpvNSklJUUpKikJDQ3Ndi3nIkCE6ceKEunfvrvbt26thw4YqX768QkJCst2DvPDCC9q4caN69Oiha9cW0MyeAAAgAElEQVSuqVevXnl6KOJO7kvv9J62Tp06cnNz04QJE/Tiiy9mC7n/fP9nMpmUmpqqSpUq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QwN99OzmilFD/TGkv4/Gc8nNr8aV+FzcuFWExFuFMDDQw/bvJsHIUB8lZWLMeu0wxo0KxGvP9dSY33jPwZu4dDUHNbVSWJgb4vU5vbSqrk+eS0VlVT2mT+wMADh4NBlyhRKO9mZwdDCHi6OFRiVsUUktvvruL3y6cIhQmVsnkcPE2KDdVMsWFteisKgGfj62wmAAIiIiav9KS/P/7UMgIiIiMAAmIiL6X6M9BcBEpJtUqkB5pQRSqQKODmYwMWZDHkAdFhaX1sLP21ajqvhh5Oar58pta4CqUKo0BnDUimX/+MAFIiIiovaOATAREdH/DgyAiYiI/pdgAExERERERET/lzEAJiIi+t9B78GrEBERERERERERERERERHR/wUMgImIiIiIiIiIiIiIiIiI2gkGwERERERERERERERERERE7QQDYCIiIiIiIiIiIiIiIiKidoIBMBERERERERERERERERFRO8EAmIiIiIiIiIiIiIiIiIionWAATERERERERERERERERETUTjAAJiIiIiIiIiIiIiIiIiJqJxgAExERERERERERERERERG1EwyAiYiIiIiIiIiIiIiIiIjaCQbARERERERERERERERERETtBANgIiIiIiIiIiIiIiIiIqJ2ggEwEREREREREREREREREVE7wQCYiIiIiIiIiIiIiIiIiKidYABMRERERERERERERERERNROMAAmIiIiIiIiIiIiIiIiImonGAATEREREREREREREREREbUTDICJiIiIiIiIiIiIiIiIiNoJBsBERERERERERERERERERO0EA2AiIiIiIiIiIiIiIiIionaCATARERERERERERERERERUTvBAJiIiIiIiIiIiIiIiIiIqJ1gAExERERERERERERERERE1E4wACYiIiIiIiIiIiIiIiIiaicYABMRERERERERERERERERtRMMgImIiIiIiIiIiIiIiIiI2gkGwERERERERERERERERERE7QQDYCIiIiIiIiIiIiIiIiKidoIBMBERERERERERERERERFRO8EAmIiIiIiIiIiIiIiIiIionWAATERERERERERERERERETUTjAAJiIiIiIiIiIiIiIiIiJqJxgAExERERERERERERERERG1EwyAiYiIiIiIiIiIiIiIiIjaCQbARERERERERERERERERETtBANgIiIiIiIiIiIiIiIiIqJ2ggEwEREREREREREREREREVE7wQCYiIiIiIiIiIiIiIiIiKidYABMRERERERERERERERERNROMAAmIiIiIiIiIiIiIiIiImonGAATEREREREREREREREREbUTDICJiIiIiIiIiIiIiIiIiNoJBsBERERERERERERERERERO2Ewb99AERERPTvOpJf8W8fAhERERERET1GE11t/u1DICIion8RK4CJiIiIiIiIiIiIiIiIiNoJBsBERERERERERERERERERO0EA2AiIiIiIiIiIiIiIiIionaCATARERERERERERERERERUTvBAJiIiIiIiIiIiIiIiIiIqJ1gAExERERERERERERERERE1E4wACYiIiIiIiIiIiIiIiIiaicYABMRERERERERERERERERtRMMgImIiIiIiIiIiIiIiIiI2gkGwERERERERERERERERERE7QQDYCIiIiIiIiIiIiIiIiKidoIBMBERERERERERERERERFRO8EAmIiIiIiIiIiIiIiIiIionWAATERERERERERERERERETUTjAAJiIiIiIiIiIiIiIiIiJqJxgAExERERERERERERERERG1EwyAiYiIiIiIiIiIiIiIiIjaCQbARERERERERERERERERETtBANgIiIiIiIiIiIiIiIiIqJ2ggEwEREREREREREREREREVE7YfBvHwARERH9uya62vzbh0BEREREREREREREjwkrgImIiIiIiIiIiIiIiIiI2gkGwERERNQm1TVSSGWKf+2x428U6LwvO7cKmTmVD9yHXK7Epas5UCpVj/vw2pWq6nrEJeb/24dB/wClUgWZTKmxTKUCpNIHf67lciUUiqbPTnWNFOI62UMfQ1FJLUpKxQ+9XX29Aqp/8aNbUiZGaXndv3cAj+BuWhkk9fIW75fJlP/rr4t5BdWorpH+24dB9I/hdy8RERERET1ubAFNREREbfLD9qvQ19fDgD5eqHtA8OPoYI5OgQ6trrNt73WYmxli+sTOD3zstMxyLFsTiUPbn9S67/jpu5BKFZj/cu9W91FTK8W7i0/i/JHnYGSkDwCIjctF0u1irXXHjwqEg53ZA4/rYV1PKkTHAHuYGD/4T7Bjp+5CoVDqvK9fL0842D/4+GQyJQwNtcf7ietkuHQ1F726u8HSwkjjvnvpZfj0y0j8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M2YoJydH48ePV2RkpJo1a1ap47OkgoICtW7dWrm5uTp69KgiIiKUlpamqKgoPfLIIzp06JDd9unp6bYZrZMnT9azzz6rmTNn2u5fsWKFxowZo2bNmikmJsZ2u9lsVmZmpl1bWVlZduUCi9qujtI+OxXtzw0bNqhz58666667lJ6eruPHj0tSpT4nkvTTTz8pNjZWOTk5OnfunG6++WYNGjTIdv+3336rrl27qlevXrp06ZImTZqkdu3aKTw8XBaLRceOHZOfn59mz54ts9msqVOnavfu3Q6zdA8cOKAvv/yyUkF0RYofk1U9vqQ/9lGzZs00ZMgQ/fjjj7a1/axWq2bPnq3IyEjdd999ys/P17vvvqvVq1frkUceUXJysubPn6/HH39cHTt2VFZWlubMmXNZrwcAgPIcO3ZMPj4+slgsioqKktVqLXf70NBQBQQEyNXVVefOnZOLi4vS0tIUFhamsLCwalWNkaRatWqpTp06On/+vC0A9vPz07Bhw8o915Acz4/279+vESNG6IknnlBqaqpee+01bdiwQXfffbfd48o7f0hISNDs2bM1YsSICp8/JSWl1POPoKAgpaSkONx+9OhRxcXFqUePHtVuAwAAoKSruyAGAAD4r1V0MaiiEmq7du1SSEiI7YKGu7u7hg8froMHDyo5Odm2Xb9+/WyzU2+44QZFRkZq165dkqTbb79dW7dulVQYOB44cEA9e/a0PTYhIUEjRoxQSEhIqf08d+6cWrduLamwxFz9+vV15swZ2zZubm4aOXKkvLy85O3trYiICJ0/f77S70XRBSYvLy/l5uaWu11F5a3j4+P1yiuv6Ny5c3rjjTdso/vLe59LXpjLzs7WggUL9OWXX2rChAm65ZZb7O43Go3q1q2bunbtqvT0dG3fvr3Mtj08PDR69GjNmjVLISEhmjFjhpYsWVLhxcDivL29bTNKW7ZsqczMTA0dOlQuLi5q06aNcnJylJSUVKm2Kns8DR48WO7u7mrSpIk8PDzUp08f1apVyzaT4ty5c1VqrySDwaDu3bvr+++/l1QYtrdr167MdWTLExoaqs2bN+vixYtq0qRJuaWaa1p5n53ShIaGas+ePTp58qT8/Px00003Ven5GjdurM6dO6tLly7q0KGDfv75Z1u5SEl65JFH1KNHD128eFFJSUkKCQmxmzXk5uamRx99VEajUX5+frrhhhscSiqfPHlSy5cv16RJk6o1M7oyKnt8VeTUqVOKi4tTixYtdOLECUVHRysiIkJ79uyRVDjTKiwszDZD3tvb2zYYAgCAK+H06dOKjo6WxWJRdHR0mQMNS5OUlKTExESZTKYa6UvJpRV8fHx0xx13VPlc6YYbbrD97RAQEKA777xTO3futNumvPOH9PR0vfXWWxoxYoQ6dOhQ4fO5ubmVuUxFaefQ69atU9++fe2WgahqGwAAACURAAMAgGqpXbu2XFxcFBsbW+52qampCg0NtbutTp06kmQ3er3kCPfQ0FBbKNixY0eZTCadPHlSe/fuVfPmze3abNasWZkBqcFgUGRkpD7//HPFxsZq165diomJsRu57+npaVfu183NrUqzKoODgxUfH6+IiAhduHDBLtCKjo7Wtm3bbP8vWt+sNCdPntQ//vEP9erVSy+++KJt3V3pj/en+DprkuPsgLS0NE2bNk3e3t6aOXOmmjdv7vA87u7uioyMVL9+/fTSSy9px44dioqKKvc11q1bVyNGjNDrr7+uPXv2aN++feVuX1zxdUuL9lPRLNPia7pVRmWPp+JBu6urq92sVldXV9vzVba90nTv3l2HDh2SyWTSzp077QYlVMXf//531alTR9OmTdOMGTOUmJhYrXaqo7zPTmkGDRqkXr16aenSpRo/fryOHj1apeerV6+e2rRpo5tuuknDhw/X0KFD9f777ys/P19SYbnlsWPHauXKlfrpp5+UnZ1tu0+SXTlzqfBYLnnsrFu3zrae7pVS2eOrIqmpqXJ3d9fu3bu1fft2bd++XWfOnFFkZKQsFosSExMdwvmyZusDAFAT+vfvr8GDB6tWrVoaPHiwwyzZ8vTu3Vt9+vRR06ZNL7sfJpNJiYmJFVbOqYySA/Tq1q3rMPiwvPOH9evXy2w2V/r3e0BAQKnnkSkpKQ7VfGJjY3X8+HGHaiZVaQMAAKA0BMAAAKBajEaj2rdvr02bNtkFNFLhBZslS5bIZDKpTp06unjxot398fHxkmQXvJUsdZuQkGALPlxdXdW7d29t27ZNO3fuVK9evey2rSjAatOmjUwmkzZt2qRTp05p6tSpDqHf5bj11lu1efNmhYWF6a677tI777yjJUuW6KOPPtLMmTNlsViUkpIii8VSZhm8xMREzZs3T88884xd+bciISEhqlOnjkN54SNHjqhly5aSCtc3mz17tjp37qxHHnnELiiTCmcLFC8xLBWW16tdu7YuXbpUar+Sk5PtZhnUr19f4eHhSkhIkOQYwKWmppY7C/pyVfZ4+jPaCwoKUkREhL744gsVFBRUWA6wLF5eXho6dKjmz5+vunXr2tZ7LfneWq3WGg+HS352KtqfBoNBPXv21MyZMzVo0CDNnTtXFoul2s/v6+trW5s7Li5Oq1at0ksvvaS///3vevjhh+Xv71/lNp955hkNHDhQ8+bNu6y+/Rnq1Kkji8WiBx98UI8//rjdP3d3dwUEBNiOxyJpaWlXqbcAgP8F69at08qVK2UymbRy5UqtWrWq0o+dNWuWZs6cqR07dlx2P9auXauQkBC7wYxms1kHDx60nYdWVskZycX/zihS3vnD4MGD9eyzz2rZsmUOv5dLExERoeTkZLuKIKmpqYqNjbWVsy7y/fffq3Xr1goICKh2GwAAAKUhAAYAANX20EMPKTU1VXPnztX58+dlsVh0+vRpzZo1S5cuXZKXl5c6deqklJQUbdmyRVLhepqffvqpOnbsKF9fX1tbGzdutJVdPnbsmPbv368uXbrY7u/Zs6cOHjyoS5cuqV27dlXq59dff60GDRqoe/fu6tGjR5WDQqPRqIyMjDLL2fn5+al169b66quvNHjwYE2YMEF+fn7y9vbWhAkT1KFDB61evVp33XVXmc+xevVqtWzZUkajUTExMXb/pMLgrV+/flq/fr3OnTungoICrVu3TmlpaercubOkwrWRc3JyFBER4dBGdna2EhISNH36dH3zzTeyWCwqKCjQjh07dO7cuVJnClutVr399tt67733bEHwgQMHdPbsWbVo0UKSFB4erkOHDik9PV2XLl3S4sWLqzSjtCJF731+fr7MZnOlj6fKutz2brvtNm3ZsqXSs3+LQvmMjAxlZWXJYrFozZo1unTpktzc3NS8eXPbcdagQQPFxsbqzJkzysnJ0cqVKytdKru6KtqfW7Zs0cmTJyUVXpg0m80qKCiQVPHnRCq8AHvp0iUlJCQoKipKH3/8sdq3b2+bUWswGGzt7d69W2fPnlVOTk6VXoOXl5duv/12+fj46JNPPpFUWBZ95cqVdmuDl5SWlqazZ8/a/Ss5uOVyeXh42Aa7mEwmhYeH69prr9XSpUttazv/9ttvmj59uqTC4/PixYu2UuPx8fFavXp1jfYJAIAijz76qDp16qR27dpp7Nixateundq3b69nnnmmUo+fMmWKXnrpJXXv3r1Kz5uamqqzZ88qOjpau3bt0ptvvqk9e/bo2WeftTsPSU5O1uzZs6tUiUaSDh8+bFteIS0tTevXr3eYcVva+UPx+6699lr169dP8+fPr3CAWUhIiDp06KBPPvlEmZmZMplMWrZsmVq0aKHw8HDbdlarVXv37lX79u2r3QYAAEBZ3K52BwAAwH+v4OBgTZs2TatXr9bUqVNlNpsVFBSk7t27a+DAgTIYDPL19dWkSZP00Ucf6auvvpIkRUZGavjw4XZtde3aVUuWLFFSUpIMBoMef/xxu/W9fHx8FB4eroiICIe1wNzd3e3a8vb2tiv1dt999+nzzz9XQkKCzGazTp8+rX79+mnQoEHy8PCwK7VcWps9evTQBx98oNq1a2vixImlrvPavn17eXt768MPP1SzZs108803y2QyKSoqSiaTSSNGjCh3/V+z2azff/9dx48fd7hvzpw5cnFxUe/evZWRkaFp06bJbDarQYMGmjBhgq38bGZmpsxms+bNm+fQxtNPP61mzZppypQpWrFihVasWCEXFxeFhobq+eefL3WtVIPBoPHjx2vFihUaN26c8vLyFBwcrFGjRtn2TY8ePRQTE6OxY8cqICBADzzwgHJzc+XmVniaaTQa7crUubm5ObzfwcHBtu1L7rtOnTppzpw5Onz4sEaOHKmIiIhyjyeDwaDg4GC78n3BwcF2+zMgIMC2Lyp7fBZxd3e363/btm01cOBAde3a1Xabv7+/3b4u/vp8fHzUsWNHTZgwQddff72ee+45eXh46MUXX5SHh4fc3Nz0xBNPSCpcL3fQoEGaOXOmDAaD+vbtq549e5bZdll8fHxKLVlY2menov0ZHBysRYsWKScnRwaDQSNGjLCVJK7oc+Lv76/du3dr9+7dcnFxkb+/vzp16qR+/fpJKiwPff/99+uVV16Rm5ub2rRpowceeMBW9rzksVTyNRTte1dXVxkMBv3tb3/TjBkzdPjwYRmNRm3dulXDhg0r9T3y9/dXVFSUQyn0onLqRa+lqsdX0f1F71+LFi20du1aPfPMM+rbt68GDBigZ599VsuXL7cdC4GBgRo5cqSkwou/48eP17Jly7R69WoFBgZq2LBh+uyzz0p9HQAAVNcHH3xQ7vIJRQMIS/r444/l7u6uzMxMLVq0SJJ07tw5ubm56cSJE/r999/tzpN8fX3tKuL4+/vr4MGDOnjwoDw9PRUYGKiIiAg9/fTTDoPxgoKC9Pzzz1cYgBb/3evp6al77rlH+/fv16effiqLxaKuXbvqjjvukFT++UOrVq0UEBBgW85k0KBBio6O1saNGyssjf3EE09o2bJlevrppyVJrVu3tv2/SGxsrDw8PNS6detqt1HEy8urWpVTAACA8zIkJV2wVrwZAAC40oKDHQO4/zYWi8UhUCouPz+/1NmhU6ZM0cCBA9WpU6cy20hMTNSkSZM0Z86cUgPYsly8eFGTJ0/WggULbKHMqVOnNH36dC1durTS7VTF2bNnFR8fLzc3NzVt2tShpNvlslqtysvLK/e9rkhBQYGsVmuVZutWtH//bGUdT3+V9qrqr/b+lic3N9ehxHhNsVqtslqtNbqG79dff62YmBiNGTOmxtqsaVarVfn5+WUG+nl5eRWG/QAAVMe4ceNsyw+UZ+7cuZo/f77t58mTJ2v48OG2wYil2bZtm8LCwtS3b98a62915efny8XFxW4waXVlZGSUerurq6tq1apl95xFt1dXTbTxZ0pOjrvaXQAAAGIGMAAAqEEVXTSqzEWL0trYunWr1q9fr+7du1cp/JUKR8O7urpqx44datGihbKysrRp0ya1adOmSu1URaNGjdSoUaMr1r7BYLjsoLA64dpfLZys6YtgV/ui2l/t/S3PlQp/pcLjuyYuzBa3f//+Mmf//lUYDIZyA17CXwDAlfL2229Xarvi4a8kzZgxo8LHFK/oc7XV5Lne559/XurtISEhuvPOO2v0Oa/2OSoAAPjvxAxgAAD+IpxhBnB1bdiwQa1atVLjxo1LvVV7BlsAAAQxSURBVP/AgQNKT09Xt27dqhVcJiQkaNeuXUpISJDRaLSVaOZiCvC/wWw220pVAwAA4MphBjAAAH8NBMAAAPxF/C8HwAAAAACA/34EwAAA/DXU3MJaAAAAAAAAAAAAAICrigAYAAAAAAAAAAAAAJwEATAAAAAAAAAAAAAAOAkCYAAAAAAAAAAAAABwEgTAAAAAAAAAAAAAAOAkCIABAAAAAAAAAAAAwEkQAAMAAAAAAAAAAACAkyAABgAAAAAAAAAAAAAnQQAMAAAAAAAAAAAAAE6CABgAAAAAAAAAAAAAnAQBMAAAAAAAAAAAAAA4CQJgAAAAAAAAAAAAAHASBMAAAAAAAAAAAAAA4CQIgAEAAAAAAAAAAADASRAAAwAAAAAAAAAAAICTIAAGAAAAAAAAAAAAACdBAAwAAAAAAAAAAAAAToIAGAAAAAAAAAAAAACcBAEwAAAAAAAAAAAAADgJAmAAAAAAAAAAAAAAcBIEwAAAAAAAAAAAAADgJAiAAQAAAAAAAAAAAMBJEAADAAAAAAAAAAAAgJMgAAYAAAAAAAAAAAAAJ0EADAAAAAAAAAAAAABOggAYAAAAAAAAAAAAAJwEATAAAAAAAAAAAAAAOAkCYAAAAAAAAAAAAABwEgTAAAAAAAAAAAAAAOAkCIABAAAAAAAAAAAAwEkQAAMAAAAAAAAAAACAkyAABgAAAAAAAAAAAAAnQQAMAAAAAAAAAAAAAE6CABgAAAAAAAAAAAAAnAQBMAAAAAAAAAAAAAA4CQJgAAAAAAAAAAAAAHASBMAAAAAAAAAAAAAA4CQIgAEAAAAAAAAAAADASRAAAwAAAAAAAAAAAICTIAAGAAAAAAAAAAAAACdBAAwAAAAAAAAAAAAAToIAGAAAAAAAAAAAAACcBAEwAAAAAAAAAAAAADgJAmAAAAAAAAAAAAAAcBIEwAAAAAAAAAAAAADgJAiAAQAAAAAAAAAAAMBJEAADAAAAAAAAAAAAgJMgAAYAAAAAAAAAAAAAJ0EADAAAAAAAAAAAAABOggAYAAAAAAAAAAAAAJwEATAAAAAAAAAAAAAAOAkCYAAAAAAAAAAAAABwEgTAAAAAAAAAAAAAAOAkCIABAAAAAAAAAAAAwEkQAAMAAAAAAAAAAACAkyAABgAAAAAAAAAAAAAnQQAMAAAAAAAAAAAAAE6CABgAAAAAAAAAAAAAnAQBMAAAAAAAAAAAAAA4CQJgAAAAAAAAAAAAAHASBMAAAAAAAAAAAAAA4CQIgAEAAAAAAAAAAADASRAAAwAAAAAAAAAAAICTIAAGAAAAAAAAAAAAACdBAAwAAAAAAAAAAAAAToIAGAAAAAAAAAAAAACcBAEwAAAAAAAAAAAAADgJAmAAAAAAAAAAAAAAcBIEwAAAAAAAAAAAAADgJAiAAQAAAAAAAAAAAMBJ/D+csEkLy5WglQAAAABJRU5ErkJggg==","disable_correlation":true,"first_seen":"2023-05-24T14:17:30.628000+00:00","to_ids":false,"type":"attachment","uuid":"34697823-7a50-4ad3-a988-f2adca806095","value":"screenshot_landing_page.png"},{"category":"External analysis","comment":"HTTP Archive (HAR) of the whole capture","data":"eyJsb2ciOiB7InZlcnNpb24iOiAiMS4yIiwgImNyZWF0b3IiOiB7Im5hbWUiOiAiUGxheXdyaWdodCIsICJ2ZXJzaW9uIjogIjEuMzMuMCJ9LCAiYnJvd3NlciI6IHsibmFtZSI6ICJjaHJvbWl1bSIsICJ2ZXJzaW9uIjogIjExMy4wLjU2NzIuNTMifSwgInBhZ2VzIjogW3sic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTQ6MTc6MzAuNjIyWiIsICJpZCI6ICJwYWdlQDdkZDllNzNlYjZiYjE3MjMxYTVjYTIwMGYzNDg3ODdmIiwgInRpdGxlIjogIlx1NGUwOVx1NGU5NVx1NGY0Zlx1NTNjYlx1NGZlMVx1OGExN1x1MzBjMFx1MzBhNFx1MzBlY1x1MzBhZlx1MzBjOFx1MzAwMFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmMyIsICJwYWdlVGltaW5ncyI6IHsib25Db250ZW50TG9hZCI6IDE3NTEsICJvbkxvYWQiOiAxNzUyfX1dLCAiZW50cmllcyI6IFt7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE0OjE3OjMwLjYyOFoiLCAidGltZSI6IDQzMi4yNTEsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwOi8vbGFvZ2FuZ3RlYS5jb20vIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2VwdCIsICJ2YWx1ZSI6ICJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjcifSwgeyJuYW1lIjogIkFjY2VwdC1FbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkhvc3QiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIlVwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogMzk4LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAzMDEsICJzdGF0dXNUZXh0IjogIk1vdmVkIFBlcm1hbmVudGx5IiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiQ29udGVudC1MZW5ndGgiLCAidmFsdWUiOiAiMTYyIn0sIHsibmFtZSI6ICJDb250ZW50LVR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sIn0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzAgR01UIn0sIHsibmFtZSI6ICJMb2NhdGlvbiIsICJ2YWx1ZSI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tLyJ9LCB7Im5hbWUiOiAiU2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogLTEsICJtaW1lVHlwZSI6ICJ0ZXh0L2h0bWwiLCAiY29tcHJlc3Npb24iOiAwfSwgImhlYWRlcnNTaXplIjogMjM2LCAiYm9keVNpemUiOiAxNjIsICJyZWRpcmVjdFVSTCI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tLyIsICJfdHJhbnNmZXJTaXplIjogMzk4fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAxLjE2NSwgImNvbm5lY3QiOiAxNDIuMDE1LCAic3NsIjogMTQ0LjYyOSwgInNlbmQiOiAwLCAid2FpdCI6IDE0Mi4yODcsICJyZWNlaXZlIjogMi4xNTV9LCAicGFnZXJlZiI6ICJwYWdlQDdkZDllNzNlYjZiYjE3MjMxYTVjYTIwMGYzNDg3ODdmIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogODAsICJfc2VjdXJpdHlEZXRhaWxzIjoge319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE0OjE3OjMwLjkyMloiLCAidGltZSI6IDYwMC44NTQsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tLyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiLyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCxhcHBsaWNhdGlvbi9zaWduZWQtZXhjaGFuZ2U7dj1iMztxPTAuNyJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJkb2N1bWVudCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibmF2aWdhdGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogIm5vbmUifSwgeyJuYW1lIjogInNlYy1mZXRjaC11c2VyIiwgInZhbHVlIjogIj8xIn0sIHsibmFtZSI6ICJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDUxOCwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMzAyLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctY3JlZGVudGlhbHMiLCAidmFsdWUiOiAidHJ1ZSJ9LCB7Im5hbWUiOiAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctbWV0aG9kcyIsICJ2YWx1ZSI6ICIqIn0sIHsibmFtZSI6ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4iLCAidmFsdWUiOiAiKiJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvaHRtbDtjaGFyc2V0PXV0Zi04In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJsb2NhdGlvbiIsICJ2YWx1ZSI6ICIuL2liZy9jbGllbnQvaXNwYy5waHAifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IC0xLCAibWltZVR5cGUiOiAidGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiLCAiY29tcHJlc3Npb24iOiAwfSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMCwgInJlZGlyZWN0VVJMIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2NsaWVudC9pc3BjLnBocCIsICJfdHJhbnNmZXJTaXplIjogMH0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogMS4yMzgsICJjb25uZWN0IjogMjk4LjA0OSwgInNzbCI6IDE1NC43ODksICJzZW5kIjogMCwgIndhaXQiOiAxNDQuOTQyLCAicmVjZWl2ZSI6IDEuODM2fSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS4zNjRaIiwgInRpbWUiOiAxNDcuNzAyLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2lzcGMucGhwIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2NsaWVudC9pc3BjLnBocCJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCxhcHBsaWNhdGlvbi9zaWduZWQtZXhjaGFuZ2U7dj1iMztxPTAuNyJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJkb2N1bWVudCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibmF2aWdhdGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogIm5vbmUifSwgeyJuYW1lIjogInNlYy1mZXRjaC11c2VyIiwgInZhbHVlIjogIj8xIn0sIHsibmFtZSI6ICJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDU1NiwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sOyBjaGFyc2V0PVVURi04In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogLTEsICJtaW1lVHlwZSI6ICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLCAiY29tcHJlc3Npb24iOiAwfSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogNTkwLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA1OTB9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAxNDQuNzU3LCAicmVjZWl2ZSI6IDIuOTQ1fSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS41MzBaIiwgInRpbWUiOiAxNTUuNjg3LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2lzcGMucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJkb2N1bWVudCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibmF2aWdhdGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDYwNCwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sOyBjaGFyc2V0PVVURi04In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogNTExMTYsICJtaW1lVHlwZSI6ICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLCAiY29tcHJlc3Npb24iOiA0MzIzMiwgInRleHQiOiAiXG48IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuXHQ8aGVhZD5cblx0XHQ8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cblx0XHQ8dGl0bGU+XHU0ZTA5XHU0ZTk1XHU0ZjRmXHU1M2NiXHU0ZmUxXHU4YTE3XHUzMGMwXHUzMGE0XHUzMGVjXHUzMGFmXHUzMGM4XHUzMDAwXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzPC90aXRsZT5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL3RhYmxlcy5jc3NcIj5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL3NjcmVlbi5jc3NcIj5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL3NjcmVlbl9lZGdlLmNzc1wiPlxuXHRcdDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBtZWRpYT1cInByaW50XCIgaHJlZj1cIi4uL2Nzcy9wYy9wcmludC5jc3NcIj5cblx0XHQ8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgbWVkaWE9XCJhbGxcIiBocmVmPVwiLi4vY3NzL3BjL2lzTG9naW4uY3NzXCI+XG5cdFx0PGxpbmsgcmVsPVwic2hvcnRjdXQgaWNvblwiIGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9mYXZpY29uLmljb1wiIHNpemVzPVwiMTZ4MTZcIj5cblx0XHQ8bGluayByZWw9XCJpY29uXCIgaHJlZj1cImh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2Zhdmljb24uaWNvXCIgc2l6ZXM9XCIxNngxNlwiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjE4MHgxODBcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi5wbmdcIj5cblx0XHQ8bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCI1N3g1N1wiIGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTU3eDU3LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjYweDYwXCIgaHJlZj1cImh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNjB4NjAucG5nXCI+XG5cdFx0PGxpbmsgcmVsPVwiYXBwbGUtdG91Y2gtaWNvblwiIHNpemVzPVwiNzJ4NzJcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi03Mng3Mi5wbmdcIj5cblx0XHQ8bGluayByZWw9XCJhcHBsZS10b3VjaC1pY29uXCIgc2l6ZXM9XCI3Nng3NlwiIGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTc2eDc2LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjExNHgxMTRcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMTR4MTE0LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjEyMHgxMjBcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMjB4MTIwLnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjE0NHgxNDRcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNDR4MTQ0LnBuZ1wiPlxuXHRcdDxsaW5rIHJlbD1cImFwcGxlLXRvdWNoLWljb25cIiBzaXplcz1cIjE1MngxNTJcIiBocmVmPVwiaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNTJ4MTUyLnBuZ1wiPlxuXHRcdDxzdHlsZT5cblx0XHRcdC5hY3RpdmUge1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDIwMCk7XG5cdFx0XHR9XG5cblx0XHRcdC51bmFjdGl2ZSB7XG5cdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IHJnYigyMDksIDIxMywgMjE5KTtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0LmxvYWRpbmcge1xuXHRcdFx0XHRoZWlnaHQ6IDEwMHZoO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSB7XG5cdFx0XHRcdHdpZHRoOiAxNTBweDtcblx0XHRcdFx0aGVpZ2h0OiAxNXB4O1xuXHRcdFx0XHRtYXJnaW46IDAgYXV0bztcblx0XHRcdFx0bWFyZ2luLXRvcDogMTAwcHg7XG5cdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuIHtcblx0XHRcdFx0ZGlzcGxheTogaW5saW5lLWJsb2NrO1xuXHRcdFx0XHR3aWR0aDogMTVweDtcblx0XHRcdFx0aGVpZ2h0OiAxMDAlO1xuXHRcdFx0XHRtYXJnaW4tcmlnaHQ6IDVweDtcblx0XHRcdFx0YmFja2dyb3VuZDogYmxhY2s7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uOiBsb2FkIDEuMDRzIGVhc2UgaW5maW5pdGU7XG5cdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHQubG9hZGluZzEgc3BhbjpsYXN0LWNoaWxkIHtcblx0XHRcdFx0bWFyZ2luLXJpZ2h0OiAwcHg7XG5cdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRALXdlYmtpdC1rZXlmcmFtZXMgbG9hZCB7XG5cdFx0XHRcdDAlIHtcblx0XHRcdFx0XHRvcGFjaXR5OiAxO1xuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdDEwMCUge1xuXHRcdFx0XHRcdG9wYWNpdHk6IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgxKSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjEzcztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgyKSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjI2cztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgzKSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjM5cztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCg0KSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjUycztcblx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdC5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCg1KSB7XG5cdFx0XHRcdC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjY1cztcblx0XHRcdH1cblx0XHQ8L3N0eWxlPlxuXHQ8L2hlYWQ+XG5cdDxib2R5PlxuXHRcdDxkaXYgaWQ9XCJwYWdlXCI+XG5cblxuXG5cblx0XHRcdDxkaXYgaWQ9XCJwcmludC1tYXN0aGVhZFwiPlxuXHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiPlxuXHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTNcIj48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjEzXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMjAzXCIgaGVpZ2h0PVwiMzFcIj48aW1nIHNyYz1cIi4uL2ltZy9sb2dvX2NvX3ByaW50LmdpZlwiIGhlaWdodD1cIjMxXCIgd2lkdGg9XCIyMDNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXHU0ZTA5XHU0ZTk1XHU0ZjRmXHU1M2NiXHU0ZmUxXHU4YTE3XHU5MjgwXHU4ODRjXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiMTgzXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjEzXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkIGhlaWdodD1cIjMxXCIgY29sc3Bhbj1cIjNcIiBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjEzXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0PHRkIGhlaWdodD1cIjMwXCIgY29sc3Bhbj1cIjNcIiBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8aDE+XHUzMGE0XHUzMGYzXHUzMGJmXHUzMGZjXHUzMGNkXHUzMGMzXHUzMGM4XHUzMGQwXHUzMGYzXHUzMGFkXHUzMGYzXHUzMGIwXHUzMDAwXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzPC9oMT5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0PC90YWJsZT5cblx0XHRcdDwvZGl2PlxuXG5cblx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdDx0ZD5cblxuXG5cblxuXG5cdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgaWQ9XCJtYXN0aGVhZC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIyMDNcIiBoZWlnaHQ9XCIzNlwiPjxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvbG9nb19jby5naWZcIiBoZWlnaHQ9XCIzMVwiIHdpZHRoPVwiMjAzXCIgYm9yZGVyPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlx1NGUwOVx1NGU5NVx1NGY0Zlx1NTNjYlx1NGZlMVx1OGExN1x1OTI4MFx1ODg0Y1wiPjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgYWxpZ249XCJyaWdodFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgYWxpZ249XCJyaWdodFwiIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImdsb2JhbG5hdmlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjEyXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwiZ25hdmktdGQxXCI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwibWNwLW5vLXJlcGxhY2UtdXJsIG1jcC1wY3NwLWxpbmtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiamF2YXNjcmlwdDpwb3N0VG9VcmwoJ2h0dHBzOi8vc3AuZGlyZWN0LnNtdGIuanAuLi9pbWdiL2xvZ2luLmRvJylcIj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTMwYjlcdTMwZGVcdTMwZmNcdTMwYzhcdTMwZDVcdTMwYTlcdTMwZjNcdTMwYjVcdTMwYTRcdTMwYzhcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODlcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPiB8XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTMwZDhcdTMwZWJcdTMwZDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvYT4gfCA8YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiaHR0cHM6Ly9mYXEuc210Yi5qcC9jYXRlZ29yeS9zaG93LzE2Mj9zaXRlX2RvbWFpbj1kZWZhdWx0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1MzA4OFx1MzA0Zlx1MzA0Mlx1MzA4Ylx1MzA1NFx1OGNlYVx1NTU0ZlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPiB8IDxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL3JhdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ9XCJfYmxhbmtcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHU5MWQxXHU1MjI5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+IHwgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvY2hhcmdlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1NjI0Ylx1NjU3MFx1NjU5OVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPiB8IDxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJodHRwczovL2RpcmVjdC5zbXRiLmpwL2FwMy9zaXJ5b3VTZWlreXV1L3NpcnlvdVNlaWt5dXVHb2FubmFpLmRvXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1OGNjN1x1NjU5OVx1OGFjYlx1NmM0MjwvYT4mbmJzcDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiMTZcIiBhbHQ9XCJcIj48L3RkPlxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBpZD1cIm1hc3RoZWFkLTJcIj5cblx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjExXCIgd2lkdGg9XCI3XCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0XHQ8Zm9ybSBuYW1lPVwiaWJMb2dpbkFjdGlvbkZvcm1cIiBtZXRob2Q9XCJwb3N0XCIgYWN0aW9uPVwiLi4vaW1nYi9sb2dpbi5kb1wiIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiPjxpbnB1dFxuXHRcdFx0XHRcdHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwib3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmh0bWwuVE9LRU5cIlxuXHRcdFx0XHRcdHZhbHVlPVwiZWRlNWVhY2Q2NmNjMjIyYWZhNzI0NmMwYzY4Mjc3YjNcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhdG9tLnNjcmVlbkZsb3cudG9rZW4uZGVmYXVsdFwiXG5cdFx0XHRcdFx0dmFsdWU9XCI2MzlkN2JiZWRkMDVjZGFiNTk0NTIyZTU1MmY4MDhlNFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImF0b21fYWN0aW9uUGFyYW1ldGVyXCIgdmFsdWU9XCJcIj5cblxuXG5cdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdFx0PHRib2R5PlxuXG5cdFx0XHRcdFx0XHQ8dHI+XG5cblx0XHRcdFx0XHRcdFx0PHRkIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgaWQ9XCJwYWdldGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjY1JVwiIHZhbGlnbj1cIm1pZGRsZVwiIGNsYXNzPVwidGQtcGFnZXRpdGxlMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGgxPlx1MzBhNFx1MzBmM1x1MzBiZlx1MzBmY1x1MzBjZFx1MzBjM1x1MzBjOFx1MzBkMFx1MzBmM1x1MzBhZFx1MzBmM1x1MzBiMFx1MzAwMFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmMzwvaDE+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIzNSVcIiBoZWlnaHQ9XCIzMFwiIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiIGNsYXNzPVwidGQtcGFnZXRpdGxlMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMVwiIGFsdD1cIlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cblx0XHRcdFx0XHRcdFx0XHQ8YnI+XG5cblx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNsYXNzPVwiaW5mb3RhYmxlNlwiIHYtc2hvdz0ndGlwc1Nob3cnPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQwXCIgYWxpZ249XCJjZW50ZXJcIiB2YWxpZ249XCJ0b3BcIiBjbGFzcz1cImluZm90YWJsZTYtdGQxXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2FsZXJ0LmdpZlwiIGhlaWdodD1cIjMzXCIgd2lkdGg9XCIyNVwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiIGNsYXNzPVwiaW5mb3RhYmxlNi10ZDJcIj48c3BhbiBjbGFzcz1cImFsZXJ0XCI+XG5cblxuXG5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aDI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTUxNjVcdTUyOWJcdTUxODVcdTViYjlcdTMwNmJcdTRlMGRcdTUwOTlcdTMwNGNcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTlcdTMwMDIoXHUzMGUxXHUzMGMzXHUzMGJiXHUzMGZjXHUzMGI4XHU3NTZhXHU1M2Y3OkEwMEkxMDMpXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2gyPlxuXG5cblxuXG5cblxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cblxuXG5cblxuXG5cblxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7dGlwc319XG5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImxvYWRpbmdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJkaXNwbGF5OiBmbGV4O2p1c3RpZnktY29udGVudDogY2VudGVyO2FsaWduLWl0ZW1zOiBjZW50ZXI7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0di1zaG93PVwibG9hZGluZ1Nob3dcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxwPlx1NzhiYVx1OGE4ZFx1NGUyZFx1MzAwMVx1MzBkYVx1MzBmY1x1MzBiOFx1MzA5Mlx1OTU4OVx1MzA1OFx1MzA2YVx1MzA0NFx1MzA2N1x1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMjwvcD5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsb2FkaW5nMVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBpZD1cImNvbnRlbnQtbWFpblwiIHYtc2hvdz0nY29udGVudFNob3cnPlxuXHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMjBcIj48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjIwXCIgYWx0PVwiXCI+PC90ZD5cblxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHZhbGlnbj1cInRvcFwiPlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJpbmZvdGFibGUxXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJoYWxmLXJvdy1zcGFjaW5nXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9pbmZvcm1hdGlvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFyZ2V0PVwiX2JsYW5rXCIgdGFiaW5kZXg9XCIxXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWZcIiBoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD1cIjE2XCIgYWx0PVwiR29cIj48dT5cdTMwZTFcdTMwZjNcdTMwYzZcdTMwY2FcdTMwZjNcdTMwYjlcdTYwYzVcdTU4MzFcdTMwZmJcdTMwNGFcdTc3ZTVcdTMwODlcdTMwNWJcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODk8L3U+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImhhbGYtcm93LXNwYWNpbmdcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cImh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L3N0YXJ0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ9XCJfYmxhbmtcIiB0YWJpbmRleD1cIjJcIj48aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZlwiIGhlaWdodD1cIjE2XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiR29cIj48dT5cdTUyMWRcdTY3MWZcdTc2N2JcdTkzMzJcdTMwNGNcdTMwNGFcdTZlMDhcdTMwN2ZcdTMwNjdcdTMwNmFcdTMwNDRcdTMwNGFcdTViYTJcdTMwNTVcdTMwN2VcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODk8L3U+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJjb250ZW50LW1haW5cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLUJlZ2luQ29udGVudHMtLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjE5XCIgYm9yZGVyPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJzdWJoZWFkMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiB2YWxpZ249XCJ0b3BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwic3ViaGVhZDItdGQxXCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2ljb19zdWJoZWFkXzEuZ2lmXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhlaWdodD1cIjE5XCIgd2lkdGg9XCIxNlwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBoZWlnaHQ9XCIxOVwiIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cIm1pZGRsZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzdWJoZWFkMi10ZDJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aDI+XHUzMDRhXHU1YmEyXHUzMDU1XHUzMDdlXHU2MGM1XHU1ODMxXHUzMDZlXHU1MTY1XHU1MjliPC9oMj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxwYWRkaW5nPVwiMFwiIGNsYXNzPVwiZGF0YS10YWJsZTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjb2xzcGFuPVwiM1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1MzBjMFx1MzBhNFx1MzBlY1x1MzBhZlx1MzBjOFx1MzA1NFx1NTIyOVx1NzUyOFx1MzBhYlx1MzBmY1x1MzBjOVx1MzA2Ylx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA2YVx1MzA0NFx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZVx1MzA2Zlx1MjQ2MFx1MzA2Ylx1MzAwMVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA0Mlx1MzA4Ylx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZVx1MzA2Zlx1MjQ2MVx1MzA2Ylx1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIzXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMWVtO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1OTA3OFx1NjI5ZVx1ZmYxYVx1MjQ2MFx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA2YVx1MzA0NFx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZSA8aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBhbHQ9XCJHb1wiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpO1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjNcIj5cdThhYWNcdTY2MGU8L2E+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSBcdTVlOTdcdTc1NmFcdTUzZjcgLS0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwibWlkZGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQlXCIgcm93c3Bhbj1cIjJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZGF0YS10YWJsZTItdGgxLXZsaW4tdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ249XCJjZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInJhZGlvXCIgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJrYWlpbk5vS2lzYWlVbXVcIiB0YWJpbmRleD1cIjRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjI1JVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiMSVcIj48L3RoPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0aCB3aWR0aD1cIjkyJVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImRhdGEtdGFibGUyLXRoMS12bGluLXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nOiA3cHggM3B4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduPVwibGVmdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxpZ249XCJtaWRkbGVcIj5cdTVlOTdcdTc1NmFcdTUzZjc8YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwiXHUzMGQ4XHUzMGViXHUzMGQ3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCI1XCI+PGI+XHUyMDNiPC9iPjwvYT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJkYXRhLXRhYmxlMi10ZDMtdmxpbi10XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHhcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxscGFkZGluZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjglXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMHB4XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoYW5rYWt1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwidGVubm9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4bGVuZ3RoPVwiM1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwiZGlhbmZhbmhhb1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwiNFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OmRpc2FibGVkPSdjaG9zZSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz17J3VuYWN0aXZlJzpjaG9zZSwnYWN0aXZlJzohY2hvc2V9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPlx1NTM0YVx1ODlkMlx1NjU3MFx1NWI1NzNcdTY4NDFcdTMwNjdcdTUxNjVcdTUyOWJcdTMwNTdcdTMwNjZcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIFx1NGVlM1x1ODg2OFx1NTNlM1x1NWVhNyAtLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMjUlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIiBjZWxscGFkZGluZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHNwYWNpbmc9XCIwXCIgd2lkdGg9XCIxMDAlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGggd2lkdGg9XCIxJVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cInBhZGRpbmctdG9wOiAxLjVlbTsgcGFkZGluZy1ib3R0b206IDEuNWVtO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiOTIlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiZGF0YS10YWJsZTItdGgxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZzogMTRweCAzcHhcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ249XCJsZWZ0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbGlnbj1cIm1pZGRsZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3PGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjdcIj48Yj5cdTIwM2I8L2I+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImRhdGEtdGFibGUyLXRkM1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiNDAlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxwYWRkaW5nPVwiMFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiaGFua2FrdVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInRleHRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImtvemFub1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhsZW5ndGg9XCI3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJrb3V6dW9mYW5oYW9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cIjlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCI4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpkaXNhYmxlZD0nY2hvc2UnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6Y2xhc3M9eyd1bmFjdGl2ZSc6Y2hvc2UsJ2FjdGl2ZSc6IWNob3NlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD4mbmJzcDsmbmJzcDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+XHUzMDU0XHU1MjI5XHU3NTI4XHU3NTMzXHU4ZmJjXHU2NjQyXHUzMDZiXHU3NjdiXHU5MzMyXHUzMDU3XHUzMDVmXHUzMGE0XHUzMGYzXHUzMGJmXHUzMGZjXHUzMGNkXHUzMGMzXHUzMGM4XHUzMGQwXHUzMGYzXHUzMGFkXHUzMGYzXHUzMGIwXHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3XHUzMDkyXHU1MzRhXHU4OWQyXHU2NTcwXHU1YjU3N1x1Njg0MVx1MzA2N1x1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIzXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMWVtO1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx1OTA3OFx1NjI5ZVx1ZmYxYVx1MjQ2MVx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1OGExOFx1OGYwOVx1MzA0Y1x1MzA0Mlx1MzA4Ylx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZSA8aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBhbHQ9XCJHb1wiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpO1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjlcIj5cdThhYWNcdTY2MGU8L2E+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPVwiMVwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIFx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmNyAtLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiNCVcIiByb3dzcGFuPVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJkYXRhLXRhYmxlMi10aDEtdmxpbi10XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbj1cImNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwicmFkaW9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImthaWluTm9LaXNhaVVtdVwiIHRhYmluZGV4PVwiNFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT1cIjFcIiA6Y2hlY2tlZD0nY2hvc2UnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAY2xpY2s9XCJjaG9zZT10cnVlO2RpYW5mYW5oYW89Jyc7a291enVvZmFuaGFvPScnXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjI1JVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxzcGFjaW5nPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiMSVcIj48L3RoPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0aCB3aWR0aD1cIjkyJVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImRhdGEtdGFibGUyLXRoMS12bGluLXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nOiA3cHggM3B4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduPVwibGVmdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxpZ249XCJtaWRkbGVcIj5cdTRmMWFcdTU0ZTFcdTc1NmFcdTUzZjc8YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRocmVmPVwiSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJylcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cIlx1MzBkOFx1MzBlYlx1MzBkN1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMTBcIj48Yj5cdTIwM2I8L2I+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGg+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjc3JVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJkYXRhLXRhYmxlMi10ZDMtdmxpbi10XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cInBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHhcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjQwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxscGFkZGluZz1cIjBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0clxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJoYW5rYWt1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwidGV4dFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwia2FpaW5Ob1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhsZW5ndGg9XCI4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNpemU9XCIxMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjExXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHYtbW9kZWw9XCJ1c2VybmFtZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6ZGlzYWJsZWQ9JyFjaG9zZSdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDpjbGFzcz17J3VuYWN0aXZlJzohY2hvc2UsJ2FjdGl2ZSc6Y2hvc2V9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOyZuYnNwO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD5cdTUzNGFcdTg5ZDJcdTY1NzBcdTViNTc3XHVmZjVlOFx1Njg0MVx1MzA2N1x1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIzXCIgY2xhc3M9XCJoYWxmLXJvdy1zcGFjaW5nXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpO1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjEyXCI+IDxpbWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJHb1wiPjx1Plx1MzBjMFx1MzBhNFx1MzBlY1x1MzBhZlx1MzBjOFx1MzA1NFx1NTIyOVx1NzUyOFx1MzBhYlx1MzBmY1x1MzBjOVx1MzA2ZVx1N2EyZVx1OTg1ZVx1MzA4NFx1MzA0YVx1NWJhMlx1MzA1NVx1MzA3ZVx1NjBjNVx1NTgzMVx1MzA2ZVx1NTE2NVx1NTI5Ylx1NjViOVx1NmNkNVx1MzA2ZVx1OGE3M1x1N2QzMFx1MzA2Zlx1MzA1M1x1MzA2MVx1MzA4OTwvdT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTlcIiBib3JkZXI9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjbGFzcz1cInN1YmhlYWQyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiIHZhbGlnbj1cInRvcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzdWJoZWFkMi10ZDFcIj48aW1nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzcmM9XCIuLi9pbWcvaWNvX3N1YmhlYWRfMS5naWZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aGVpZ2h0PVwiMTlcIiB3aWR0aD1cIjE2XCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGhlaWdodD1cIjE5XCIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwibWlkZGxlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInN1YmhlYWQyLXRkMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxoMj57e3Bhc3N3b3JkVGV4dH19PC9oMj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNlbGxwYWRkaW5nPVwiMFwiIGNsYXNzPVwiZGF0YS10YWJsZTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImRhdGEtdGFibGUyLXRkNFwiPjxpbWdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwiZGF0YS10YWJsZTItdGQ1XCI+PGltZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD1cIjFcIiBhbHQ9XCJcIj48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRoIHdpZHRoPVwiMjUlXCIgY2xhc3M9XCJkYXRhLXRhYmxlMi10aDFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOTxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm9yYW5nZS1kYXJrXCI+PGI+XHVmZjBhPC9iPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90aD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwiZGF0YS10YWJsZTItdGQzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHBhZGRpbmc9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCI0MCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHNwYWNpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgdmFsaWduPVwidG9wXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCI0NSVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dzcGFuPVwiMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZy10b3A6MC4yZW1cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInBhc3N3b3JkLWZvbnRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJwYXNzd29yZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiaWJwYXNzd29yZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhsZW5ndGg9XCIzMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaXplPVwiMzRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIxM1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2LW1vZGVsPVwicGFzc3dvcmRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ0ZXh0LWlucHV0LWZpZWxkXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ1dHRvbi1yb3NlNFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiYnV0dG9uNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjE0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiXHUzMGJkXHUzMGQ1XHUzMGM4XHUzMGE2XHUzMGE3XHUzMGEyXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhc2NyaXB0OnNob3dLZXlCb2FyZChpYnBhc3N3b3JkKVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMTVcIj48Yj5cdTIwM2I8L2I+PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dzcGFuPVwiMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQmbmJzcDsmbmJzcDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cm93c3Bhbj1cIjJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHU1MzRhXHU4OWQyXHU4MmYxXHU2NTcwXHU1YjU3XHU2ZGY3XHU1NzI4XHUzMDZlNFx1Njg0MVx1NGVlNVx1NGUwYTMyXHU2ODQxXHU0ZWU1XHU1MTg1XHUzMDY3XHUzMDU5XHUzMDAyXHU4MmYxXHU1YjU3XHUzMDZmXHU1OTI3XHU2NTg3XHU1YjU3XHUzMDY4XHU1YzBmXHU2NTg3XHU1YjU3XHUzMDkyXHU1MzNhXHU1MjI1XHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyPGJyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW1nIHNyYz1cIi4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9XCIxNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiR29cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgaHJlZj1cImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly93d3cuc210Yi5qcC9wZXJzb25hbC9kaXJlY3QvaW50ZXJuZXQvaGVscC9sb2NrJywnJyk7XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjE2XCI+XHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDRjXHUzMDhmXHUzMDRiXHUzMDg5XHUzMDZhXHUzMDQ0XHUzMGZiXHU1OTMxXHU1MmI5XHUzMDU3XHUzMDY2XHUzMDU3XHUzMDdlXHUzMDYzXHUzMDVmXHUzMDRhXHU1YmEyXHUzMDU1XHUzMDdlXHUzMDZmXHUzMDUzXHUzMDYxXHUzMDg5PC9hPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblxuXG5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIiBjZWxscGFkZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjE2XCI+PHNwYW4gY2xhc3M9XCJvcmFuZ2UtZGFya1wiPjxiPlx1ZmYwYTwvYj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwibGVmdFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdTMwZWRcdTMwYjBcdTMwYTRcdTMwZjNcdTMwZDFcdTMwYjlcdTMwZWZcdTMwZmNcdTMwYzlcdTMwOTJcdTUxNjVcdTUyOWJcdTc2ZjhcdTkwNTVcdTMwNTVcdTMwOGNcdTMwNWZcdTU4MzRcdTU0MDhcdTMwMDFcdTdiMmNcdTRlMDlcdTgwMDVcdTMwNmJcdTMwODhcdTMwOGJcdTMwMGNcdTMwNmFcdTMwOGFcdTMwNTlcdTMwN2VcdTMwNTdcdTMwMGRcdTMwOTJcdTk2MzJcdTZiNjJcdTMwNTlcdTMwOGJcdTMwNWZcdTMwODFcdTMwMDFcdTMwNGFcdTVjNGFcdTMwNTFcdTMwNmVcdTMwZTFcdTMwZmNcdTMwZWJcdTMwYTJcdTMwYzlcdTMwZWNcdTMwYjlcdTViOWJcdTMwNjZcdTMwNmJcdTkwMjNcdTdkNjFcdTMwNDRcdTMwNWZcdTMwNTdcdTMwN2VcdTMwNTlcdTMwMDJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU2MjQwXHU1YjlhXHU1NmRlXHU2NTcwXHU0ZWU1XHU0ZTBhXHU1MTY1XHU1MjliXHU3NmY4XHU5MDU1XHUzMDU1XHUzMDhjXHUzMDVmXHU1ODM0XHU1NDA4XHUzMDAxXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU1OTMxXHU1MmI5XHUzMDU1XHUzMDViXHUzMDY2XHUzMDQ0XHUzMDVmXHUzMDYwXHUzMDRkXHUzMDdlXHUzMDU5XHUzMDAyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGJyPlxuXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJidG4tYm90dG9tXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgdmFsaWduPVwibWlkZGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCI0OFwiIGFsaWduPVwibGVmdFwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIyNVwiIGFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJkaXZpZGVyXCI+LzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgbm93cmFwPVwibm93cmFwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLWNob2NvXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjE3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMHB4O3BhZGRpbmctcmlnaHQ6IDEwcHg7XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiIFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmMyBcIiBAY2xpY2s9XCJzZW5kKClcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cInJpZ2h0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLWNob2NvXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IG5hbWU9XCIxMjNcIiB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJcdTk1ODlcdTMwNThcdTMwOGJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7cGFkZGluZy1yaWdodDogMTBweDtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIxOFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiIGFsaWduPVwibGVmdFwiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpXCIgdGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMTlcIj48Yj5cdTIwM2I8L2I+PC9hPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGEgaHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjIwXCI+XHU0ZjFhXHU1NGUxXHU3NTZhXHU1M2Y3XHUzMDZiXHUzMDY0XHUzMDQ0XHUzMDY2PC9hPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgdmFsaWduPVwidG9wXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgd2lkdGg9XCIxNlwiIGFsaWduPVwibGVmdFwiPjxhXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfdG9wJylcIiB0aXRsZT1cIlx1MzBkOFx1MzBlYlx1MzBkN1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyMVwiPjxiPlx1MjAzYjwvYj48L2E+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48YSBocmVmPVwiSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyMlwiPlx1NWU5N1x1NzU2YVx1NTNmN1x1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiBhbGlnbj1cImxlZnRcIj48YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKVwiIHRpdGxlPVwiXHUzMGQ4XHUzMGViXHUzMGQ3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJpbmRleD1cIjIzXCI+PGI+XHUyMDNiPC9iPjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyNFwiPlx1NGVlM1x1ODg2OFx1NjY2ZVx1OTAxYVx1OTgxMFx1OTFkMVx1NTNlM1x1NWVhN1x1NzU2YVx1NTNmN1x1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiBhbGlnbj1cImxlZnRcIj48YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJcdTMwZDhcdTMwZWJcdTMwZDdcIiB0YWJpbmRleD1cIjI1XCI+PGI+XHUyMDNiPC9iPjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiaW5kZXg9XCIyNlwiPlx1MzBiZFx1MzBkNVx1MzBjOFx1MzBhNlx1MzBhN1x1MzBhMlx1MzBhZFx1MzBmY1x1MzBkY1x1MzBmY1x1MzBjOVx1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NjwvYT48L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIHZhbGlnbj1cInRvcFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIHdpZHRoPVwiMTZcIiBhbGlnbj1cImxlZnRcIj48YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NldHVwJyk7XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cIlx1MzBkOFx1MzBlYlx1MzBkN1wiIHRhYmluZGV4PVwiMjdcIj48Yj5cdTIwM2I8L2I+PC9hPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGEgaHJlZj1cIkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc2V0dXAnKTtcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmluZGV4PVwiMjhcIj5cdTMwYmRcdTMwZDVcdTMwYzhcdTMwYTZcdTMwYTdcdTMwYTJcdTMwYWRcdTMwZmNcdTMwZGNcdTMwZmNcdTMwYzlcdTMwNmVcdTY1ODdcdTViNTdcdTMwYjVcdTMwYTRcdTMwYmFcdTMwNmVcdTU5MDlcdTY2ZjRcdTY1YjlcdTZjZDVcdTMwNmJcdTMwNjRcdTMwNDRcdTMwNjY8L2E+PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjIwXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIyMFwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0PGJyPlxuXG5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjY1OFwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdDwvdGFibGU+XG5cblxuXG5cblxuXHRcdFx0XHQ8dGFibGUgd2lkdGg9XCIxMDAlXCIgYm9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIGlkPVwiZm9vdGVyXCI+XG5cdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJmb290ZXItdGQxXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgYWx0PVwiXCI+PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCBoZWlnaHQ9XCIyMFwiIHZhbGlnbj1cIm1pZGRsZVwiIGNsYXNzPVwiZm9vdGVyLXRkMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJodHRwczovL3d3dy5zbXRiLmpwL2dlbmVyYWwvcHJpdmFjeS9zZW5nZW5cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx1NTAwYlx1NGViYVx1NjBjNVx1NTgzMVx1MzA2ZVx1MzA0YVx1NTNkNlx1MzA4YVx1NjI3MVx1MzA0NFx1MzA2Ylx1MzA2NFx1MzA0NFx1MzA2NlxuXHRcdFx0XHRcdFx0XHRcdDwvYT4gfCA8YSBocmVmPVwiaHR0cHM6Ly93d3cuc210Yi5qcC9nZW5lcmFsL3NvbGljaXRhdGlvblwiIHRhcmdldD1cIl9ibGFua1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHU0ZTA5XHU0ZTk1XHU0ZjRmXHU1M2NiXHU0ZmUxXHU4YTE3XHU5MjgwXHU4ODRjXHUzMDZlXHU1MmU3XHU4YTk4XHU2NWI5XHU5MWRkXG5cdFx0XHRcdFx0XHRcdFx0PC9hPiB8IDxhIGhyZWY9XCJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX290aGVycycpXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdTk2ZmJcdThhNzFcdTMwNjdcdTMwNmVcdTMwNGFcdTU1NGZcdTMwNDRcdTU0MDhcdTMwOGZcdTMwNWJcdTUxNDhcblx0XHRcdFx0XHRcdFx0XHQ8L2E+XG5cdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJmb290ZXItdGQxXCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI2NThcIiBhbHQ9XCJcIj48L3RkPlxuXHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHQ8L3RhYmxlPlxuXG5cdFx0XHRcdDx0YWJsZSB3aWR0aD1cIjEwMCVcIiBib3JkZXI9XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgaWQ9XCJjb3B5cmlnaHRcIj5cblx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdDx0ZCB3aWR0aD1cIjE0XCI+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxNFwiIGFsdD1cIlwiPjwvdGQ+XG5cdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cImxlZnRcIiB2YWxpZ249XCJtaWRkbGVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInNtYWxsLWdyeVwiPkNvcHlyaWdodCBcdTAwYTkgMjAyM1xuXHRcdFx0XHRcdFx0XHRcdFx0U3VtaXRvbW8gTWl0c3VpIFRydXN0IEJhbmssIExpbWl0ZWRcblx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cInJpZ2h0XCIgdmFsaWduPVwibWlkZGxlXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzbWFsbC1ncnlcIj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHU3NTNiXHU5NzYySURcdWZmMWFcblx0XHRcdFx0XHRcdFx0XHRcdGlia2tfMDcwMVxuXHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0PC90YWJsZT5cblxuXG5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94U2V0TGluZVwiIGlkPVwic29mdHdhcmVLZXlCb2FyZFwiIHN0eWxlPVwibWFyZ2luOiAwcHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgZGlzcGxheTogbm9uZTtcIj5cblx0XHRcdFx0XHQ8dGFibGUgY2xhc3M9XCJzay10YWJsZVwiIGNlbGxzcGFjaW5nPVwiMVwiIGJnY29sb3I9XCIjRkZGRkZGXCIgd2lkdGg9XCI1MjBcIiBoZWlnaHQ9XCIyNTBcIiBib3JkZXI9XCIwXCI+XG5cdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdDx0ciBhbGlnbj1cInJpZ2h0XCIgaGVpZ2h0PVwiMzBcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHQ8dGQgY29sc3Bhbj1cIjJcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLXJvc2U1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyXCIgbmFtZT1cImtleV9DbG9zZVwiIHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPVwiXHUzMGJkXHUzMGQ1XHUzMGM4XHUzMGE2XHUzMGE3XHUzMGEyXHUzMGFkXHUzMGZjXHUzMGRjXHUzMGZjXHUzMGM5XHUzMDkyXHU5NTg5XHUzMDU4XHUzMDhiXCIgaWQ9XCJjbG9zZV9wb3BcIiBvbmNsaWNrPVwiSmF2YVNjcmlwdDogZG9DbG9zZSgpXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0PC90cj5cblxuXHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJjZW50ZXJcIiB2YWxpZ249XCJ0b3BcIj5cblx0XHRcdFx0XHRcdFx0XHQ8dGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYm94U2V0QmdcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGNlbGxzcGFjaW5nPVwiMVwiIGNsYXNzPVwibGF5b3V0XCIgaWQ9XCJrZXlCb2R5XCIgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwiPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgY2xhc3M9XCJrZXlBdG9aXCIgYWxpZ249XCJjZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGFibGUgYm9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNsYXNzPVwibGF5b3V0XCI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMScsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5NFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXk1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5NlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc2JywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXk3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOCcsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXk5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTEwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEwJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTEzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxNFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNCcsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MTVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTUnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTE3XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE3JywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOCcsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkxOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOScsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MjBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjAnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIxJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleTIyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywxKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXkyM1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMycsMSlcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MjRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjQnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5MjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDEpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBjb2xzcGFuPVwiMTdcIj4mbmJzcDs8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMicsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1M0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzQnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc1JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc2JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNycsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1M4XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzgnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1M5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTBcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTAnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTEnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MxMlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzEzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzE0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzE1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMTdcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTcnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTgnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxpbWcgc3JjPVwiLi4vaW1nL2MuZ2lmXCIgaGVpZ2h0PVwiMVwiIHdpZHRoPVwiNVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsdD1cIlwiPjwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MxOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOScsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MyMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiaW5zTGV0dGVyS2V5X1MyMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMScsMilcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PGltZyBzcmM9XCIuLi9pbWcvYy5naWZcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCI1XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWx0PVwiXCI+PC90ZD5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzIyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzIzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnNMZXR0ZXJLZXlfUzI0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywyKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48aW1nIHNyYz1cIi4uL2ltZy9jLmdpZlwiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbHQ9XCJcIj48L3RkPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImluc0xldHRlcktleV9TMjVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDIpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNsYXNzPVwia2V5MHRvOVwiIHZhbGlnbj1cInRvcFwiIGFsaWduPVwiY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIiBjbGFzcz1cImxheW91dFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzInLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzMnLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIiBpZD1cImluc0tleTRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNCcsMClcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIiBpZD1cImluc0tleTVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNScsMClcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQ+PHNwYW4gY2xhc3M9XCJidXR0b24tc29mdHdhcmUta2V5XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiP0BcIiBpZD1cImluc0tleTZcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMClcIj48L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiIGlkPVwiaW5zS2V5N1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc3JywwKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiIGlkPVwiaW5zS2V5OFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc4JywwKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZD48c3BhbiBjbGFzcz1cImJ1dHRvbi1zb2Z0d2FyZS1rZXlcIj48aW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCI/QFwiIGlkPVwiaW5zS2V5OVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25jbGljaz1cIkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc5JywwKVwiPjwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPjxzcGFuIGNsYXNzPVwiYnV0dG9uLXNvZnR3YXJlLWtleVwiPjxpbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIj9AXCIgaWQ9XCJpbnNLZXkwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDApXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkPiZuYnNwOzwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgYWxpZ249XCJsZWZ0XCIgaGVpZ2h0PVwiNDBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwiY2VudGVyXCIgY29sc3Bhbj1cIjJcIj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0YWJsZSBib3JkZXI9XCIwXCIgd2lkdGg9XCI0NiVcIiBhbGlnbj1cImNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwiY2VudGVyXCIgd2lkdGg9XCI1MCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLXJvc2U1XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpbnB1dCBzdHlsZT1cInRleHQtYWxpZ246Y2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZGVsZXRlT25lTGVcIiB0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImRlbGV0ZV9vbmVcIiB2YWx1ZT1cIlx1NTE2NVx1NTI5Ylx1NmUwOFx1MzA2ZVx1NjU4N1x1NWI1N1x1MzA5MjFcdTY1ODdcdTViNTdcdTUyNGFcdTk2NjRcdTMwNTlcdTMwOGJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBkZWxldGVPbmUoKVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGFsaWduPVwicmlnaHRcIiB3aWR0aD1cIjIlXCI+Jm5ic3A7PC90ZD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgYWxpZ249XCJjZW50ZXJcIiB3aWR0aD1cIjQ4JVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJidXR0b24tcm9zZTVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU9XCJkZWxldGVBbGxMZVwiIHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZGVsZXRlX2FsbFwiIHZhbHVlPVwiXHU1MTY1XHU1MjliXHU2ZTA4XHUzMDZlXHU2NTg3XHU1YjU3XHUzMDkyXHU1MTY4XHUzMDY2XHU1MjRhXHU5NjY0XHUzMDU5XHUzMDhiXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbmNsaWNrPVwiSmF2YVNjcmlwdDogZGVsZXRlQWxsKClcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RhYmxlPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90cj5cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRyIGFsaWduPVwibGVmdFwiIGhlaWdodD1cIjIwXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZCBhbGlnbj1cImNlbnRlclwiIGNvbHNwYW49XCIyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjQ1JVwiIGFsaWduPVwiY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGJvZHk+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0cj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGQgYWxpZ249XCJjZW50ZXJcIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiYnV0dG9uLXJvc2U2XCI+PGlucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlclwiIG5hbWU9XCJrZXlEaXNwXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgaWQ9XCJrZXlfRGlzcFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9XCJcdTMwYWRcdTMwZmNcdTMwNmVcdTY1ODdcdTViNTdcdTMwOTJcdTg4NjhcdTc5M2FcdTMwNTdcdTMwNmFcdTMwNDRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uY2xpY2s9XCJKYXZhU2NyaXB0OiBkaXNwU2tiQ3RsKHRoaXMudmFsdWUpXCI+PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdHI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3Rib2R5PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGFibGU+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dHIgaGVpZ2h0PVwiNDBcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHRkIGNvbHNwYW49XCIyXCIgYWxpZ249XCJjZW50ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGlkPVwia2V5TXNnXCI+XHUzMGFkXHUzMGZjXHUzMDZlXHU2NTg3XHU1YjU3XHUzMDkyXHU5NzVlXHU4ODY4XHU3OTNhXHUzMDZiXHUzMDU5XHUzMDhiXHU1ODM0XHU1NDA4XHUzMDZmXHUzMDBjXHUzMGFkXHUzMGZjXHUzMDZlXHU2NTg3XHU1YjU3XHUzMDkyXHU4ODY4XHU3OTNhXHUzMDU3XHUzMDZhXHUzMDQ0XHUzMDBkXHUzMDkyXHU2MmJjXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyPC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RyPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC90Ym9keT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvdGQ+XG5cdFx0XHRcdFx0XHRcdDwvdHI+XG5cblx0XHRcdFx0XHRcdDwvdGJvZHk+XG5cdFx0XHRcdFx0PC90YWJsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Zvcm0+XG5cdFx0PC9kaXY+XG5cblxuXHQ8L2JvZHk+XG5cdDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIi4uL2pzL2pxdWVyeS0zLjUuMS5qc1wiPjwvc2NyaXB0PlxuXHQ8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIuLi9qcy92dWUuanNcIj48L3NjcmlwdD5cblx0PHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCIgc3JjPVwiLi4vanMvaW5kZXhfcGMuanNcIj48L3NjcmlwdD5cbjwvaHRtbD5cbiJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiA3ODg0LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA3ODg0fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMTUxLjk2NSwgInJlY2VpdmUiOiAzLjcyMn0sICJwYWdlcmVmIjogInBhZ2VAN2RkOWU3M2ViNmJiMTcyMzFhNWNhMjAwZjM0ODc4N2YiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy5sYW9nYW5ndGVhLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE4NiwgInZhbGlkVG8iOiAxNjkyNjY5MTg1fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTQ6MTc6MzEuNjkzWiIsICJ0aW1lIjogMTQ2LjUzMSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2Nzcy9wYy90YWJsZXMuY3NzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2Nzcy9wYy90YWJsZXMuY3NzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9jc3MsKi8qO3E9MC4xIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic3R5bGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0NTMsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT00MzIwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9jc3MifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjY0MTg0MmJkLTUyZWJcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDI1IE1heSAyMDIzIDAyOjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJNb24sIDIwIE1hciAyMDIzIDExOjI1OjQ5IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDIxMjI3LCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAxODI3MCwgInRleHQiOiAiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZ2VuZXJhbCBzdHlsZXMgZm9yIHRhYmxlc1xubGFzdCB1cGRhdGUgMjAxMS0wNC0yOC0wOTowMFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xudGFibGUge2ZvbnQtc2l6ZTogMWVtO31cblxuLnN1YmhlYWQxIHtcblx0aGVpZ2h0OiAyNXB4O1xuXHRtYXJnaW4tYm90dG9tOiAzcHg7XG5cdGJhY2tncm91bmQ6I0IwRTZFRiB1cmwoLi4vLi4vaW1nL2JnX3N1YmhlYWQucG5nKSBuby1yZXBlYXQ7XG59XG4uc3ViaGVhZDEtaGFsZiB7XG5cdGhlaWdodDogMjVweDtcblx0bWFyZ2luLWJvdHRvbTogM3B4O1xuXHRiYWNrZ3JvdW5kOiNCMEU2RUYgdXJsKC4uLy4uL2ltZy9iZ19zdWJoZWFkX2hhbGYucG5nKSBuby1yZXBlYXQ7XG59XG4uc3ViaGVhZDEtdGQxIHtcblx0cGFkZGluZzogMHB4O1xuXHRoZWlnaHQ6IDI1cHg7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuLnN1YmhlYWQxLXRkMiB7XG5cdGhlaWdodDogMjVweDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0cGFkZGluZy1yaWdodDogM3B4O1xuXHRjb2xvcjogI0ZGRkZGRjtcbn1cblxuLnN1YmhlYWQyIHtcblx0aGVpZ2h0OiAyNXB4O1xuXHRwYWRkaW5nOiAwcHg7XG5cdG1hcmdpbjogMHB4O1xuXHRiYWNrZ3JvdW5kOiNCMEU2RUYgdXJsKC4uLy4uL2ltZy9iZ19zdWJoZWFkLnBuZykgbm8tcmVwZWF0O1xufVxuLnN1YmhlYWQyLWhhbGYge1xuXHRoZWlnaHQ6IDI1cHg7XG5cdHBhZGRpbmc6IDBweDtcblx0bWFyZ2luOiAwcHg7XG5cdGJhY2tncm91bmQ6I0IwRTZFRiB1cmwoLi4vLi4vaW1nL2JnX3N1YmhlYWRfaGFsZi5wbmcpIG5vLXJlcGVhdDtcbn1cbi5zdWJoZWFkMi10ZDEge1xuXHRwYWRkaW5nOiAwcHg7XG5cdGhlaWdodDogMjVweDtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5zdWJoZWFkMi10ZDIge1xuXHRoZWlnaHQ6IDI1cHg7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdHBhZGRpbmctcmlnaHQ6IDNweDtcblx0Y29sb3I6ICNGRkZGRkY7XG59XG5cbi5zdWJoZWFkMyB7fVxuLnN1YmhlYWQzLXRkMSB7XG5cdGJhY2tncm91bmQ6ICNENkU0RTI7XG5cdG1hcmdpbjogMHB4O1xuXHRoZWlnaHQ6IDE5cHg7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdHBhZGRpbmctcmlnaHQ6IDNweDtcblx0cGFkZGluZy1sZWZ0OiA0cHg7XG59XG5cbi5zdWJoZWFkNCB7fVxuLnN1YmhlYWQ0LXRkMSB7XG5cdGhlaWdodDogMzVweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCgpIG5vLXJlcGVhdDtcblx0dmVydGljYWwtYWxpZ246IHRvcDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMHB4O1xuXHRib3JkZXItYm90dG9tOiAwcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweDtcblx0cGFkZGluZy10b3A6IDRweDtcblx0cGFkZGluZy1yaWdodDogNnB4O1xuXHRwYWRkaW5nLWJvdHRvbTogM3B4O1xuXHRwYWRkaW5nLWxlZnQ6IDM1cHg7XG59XG5cbi5zdWJoZWFkNSB7fVxuLnN1YmhlYWQ1LXRkMSB7XG5cdGhlaWdodDogMjJweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfTkdfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRwYWRkaW5nLXRvcDogMnB4O1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMjdweDtcbn1cblxuLnN1YmhlYWQ2IHt9XG4uc3ViaGVhZDYtdGQxIHtcblx0aGVpZ2h0OiAxOXB4O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRwYWRkaW5nLXRvcDogM3B4O1xuXHRwYWRkaW5nLXJpZ2h0OiAzcHg7XG5cdHBhZGRpbmctbGVmdDogNHB4O1xufVxuXG4uc3ViaGVhZDcge1xuXHRoZWlnaHQ6IDE5cHg7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiA0cHg7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uc3ViaGVhZDctdGQxIHt9XG5cbi5zdWJoZWFkOCB7XG5cdGhlaWdodDogMTlweDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDRweDtcblx0Ym9yZGVyOiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5zdWJoZWFkOC10ZDEge31cblxuLnN1YmhlYWQ5IHtcblx0aGVpZ2h0OiAxOXB4O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNHB4O1xufVxuLnN1YmhlYWQ5LXRkMSB7fVxuXG4uc3ViaGVhZDEwIHt9XG4uc3ViaGVhZDEwLXRkMSB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfR09fcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAyN3B4O1xufVxuLnN1YmhlYWQxMC10ZDIge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX0dPX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNnB4O1xufVxuLnN1YmhlYWQxMC10ZDMge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRjtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAycHg7XG59XG5cbi5zdWJoZWFkMTEge31cbi5zdWJoZWFkMTEtdGQxIHtcblx0LyogaGVpZ2h0OiAxOHB4OyAqL1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19CR19zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDI3cHg7XG59XG4uc3ViaGVhZDExLXRkMiB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfQkdfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiA2cHg7XG59XG4uc3ViaGVhZDExLXRkMyB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGO1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDJweDtcbn1cblxuLnN1YmhlYWQxMiB7fVxuLnN1YmhlYWQxMi10ZDEge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX1NCX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMjdweDtcbn1cbi5zdWJoZWFkMTItdGQyIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19TQl9zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDZweDtcbn1cbi5zdWJoZWFkMTItdGQzIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkY7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMnB4O1xufVxuXG4uc3ViaGVhZDEzIHt9XG4uc3ViaGVhZDEzLXRkMSB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfTkcyX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogMjdweDtcbn1cbi5zdWJoZWFkMTMtdGQyIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19ORzJfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiA2cHg7XG59XG4uc3ViaGVhZDEzLXRkMyB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGO1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDJweDtcbn1cblxuLnN1YmhlYWQxNCB7fVxuLnN1YmhlYWQxNC10ZDEge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX0JHMl9zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDI3cHg7XG59XG4uc3ViaGVhZDE0LXRkMiB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfQkcyX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNnB4O1xufVxuLnN1YmhlYWQxNC10ZDMge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRjtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAycHg7XG59XG5cbi5zdWJoZWFkMTUge31cbi5zdWJoZWFkMTUtdGQxIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19TQjJfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAyN3B4O1xufVxuLnN1YmhlYWQxNS10ZDIge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX1NCX3MuZ2lmKSBuby1yZXBlYXQ7XG5cdGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuXHRwYWRkaW5nLXJpZ2h0OiAycHg7XG5cdHBhZGRpbmctbGVmdDogNnB4O1xufVxuLnN1YmhlYWQxNS10ZDMge1xuXHRoZWlnaHQ6IDE4cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRjtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiAycHg7XG59XG5cbi5zdWJoZWFkMTYge31cbi5zdWJoZWFkMTYtdGQxIHtcblx0aGVpZ2h0OiAxOHB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19OR19zLmdpZikgbm8tcmVwZWF0O1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDI3cHg7XG59XG4uc3ViaGVhZDE2LXRkMiB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfTkdfcy5naWYpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG5cdHBhZGRpbmctcmlnaHQ6IDJweDtcblx0cGFkZGluZy1sZWZ0OiA2cHg7XG59XG4uc3ViaGVhZDE2LXRkMyB7XG5cdGhlaWdodDogMThweDtcblx0YmFja2dyb3VuZDojRkZGRkZGO1xuXHRiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcblx0cGFkZGluZy1yaWdodDogMnB4O1xuXHRwYWRkaW5nLWxlZnQ6IDJweDtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0taW5mby10YWJsZS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5pbmZvdGFibGUxIHt9XG4uaW5mb3RhYmxlMS10ZDEtMSB7XG5cdGhlaWdodDogMzlweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCgpIG5vLXJlcGVhdDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweDtcblx0cGFkZGluZzogNHB4IDZweCAzcHggMzVweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtMiB7XG5cdGJhY2tncm91bmQ6ICNGMERGRTA7XG5cdGJvcmRlcjogMXB4IHNvbGlkICM3NTc1NzU7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTMge1xuXHRiYWNrZ3JvdW5kOiAjRDZFNEUyO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRjb2xvcjogIzMzMzMzMztcbn1cbi5pbmZvdGFibGUxLXRkMS00IHtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyOiAxcHggc29saWQgIzc1NzU3NTtcblx0cGFkZGluZzogM3B4IDZweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtNSB7XG5cdGJhY2tncm91bmQ6ICNGRkZGRkY7XG5cdGJvcmRlcjogMXB4IHNvbGlkICM3NTc1NzU7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTYge1xuXHRiYWNrZ3JvdW5kOiAjRkZGRkM4O1xuXHRib3JkZXI6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRjb2xvcjogIzMzMzMzMztcbn1cbi5pbmZvdGFibGUxLXRkMS03IHtcblx0aGVpZ2h0OiAzOXB4O1xuXHRiYWNrZ3JvdW5kOiNGRkZGRkYgdXJsKC4uLy4uL2ltZy9pX3BldGFsc19CRy5naWYpIG5vLXJlcGVhdDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweDtcblx0cGFkZGluZzogNHB4IDZweCAwcHggMzVweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtOCB7XG5cdGhlaWdodDogMzlweDtcblx0YmFja2dyb3VuZDojRkZGRkZGIHVybCguLi8uLi9pbWcvaV9wZXRhbHNfU0IuZ2lmKSBuby1yZXBlYXQ7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG5cdHBhZGRpbmc6IDRweCA2cHggMHB4IDM1cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xufVxuLmluZm90YWJsZTEtdGQxLTkge1xuXHRoZWlnaHQ6IDM5cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX05HMi5naWYpIG5vLXJlcGVhdDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweDtcblx0cGFkZGluZzogNHB4IDZweCAwcHggMzVweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtMTAge1xuXHRoZWlnaHQ6IDM5cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX0JHMi5naWYpIG5vLXJlcGVhdDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweDtcblx0cGFkZGluZzogNHB4IDZweCAwcHggMzVweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtMTEge1xuXHRoZWlnaHQ6IDM5cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX1NCMi5naWYpIG5vLXJlcGVhdDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1yaWdodDogMHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweDtcblx0cGFkZGluZzogNHB4IDZweCAwcHggMzVweDtcblx0Y29sb3I6ICMzMzMzMzM7XG59XG4uaW5mb3RhYmxlMS10ZDEtMTIge1xuXHRoZWlnaHQ6IDM5cHg7XG5cdGJhY2tncm91bmQ6I0ZGRkZGRiB1cmwoLi4vLi4vaW1nL2lfcGV0YWxzX05HLmdpZikgbm8tcmVwZWF0O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAwcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMHB4O1xuXHRwYWRkaW5nOiA0cHggNnB4IDBweCAzNXB4O1xuXHRjb2xvcjogIzMzMzMzMztcbn1cbi5pbmZvdGFibGUyIHt9XG4uaW5mb3RhYmxlMi10ZDEge1xuXHRiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5pbmZvdGFibGUyLXRkMiB7XG5cdGJhY2tncm91bmQ6ICNGN0Y3Rjc7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG59XG4uaW5mb3RhYmxlMi10ZDMge1xuXHRiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5pbmZvdGFibGUyLXRkNCB7XG5cdGJhY2tncm91bmQ6ICNGN0Y3Rjc7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLmluZm90YWJsZTMge31cbi5pbmZvdGFibGUzLXRkMSB7XG5cdGJhY2tncm91bmQ6ICNGRkZGRkY7XG5cdGJvcmRlcjogMXB4IHNvbGlkICNCRkJGQkY7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG59XG4uaW5mb3RhYmxlMy10ZDIge1xuXHRiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuXHRib3JkZXI6IDFweCBzb2xpZCAjOUYyMDAwO1xuXHRwYWRkaW5nOiAzcHggNnB4O1xufVxuXG4uaW5mb3RhYmxlNCB7fVxuLmluZm90YWJsZTQtdGQxIHtcblx0cGFkZGluZzogMXB4IDZweCAzcHggNnB4O1xuXHRib3JkZXItcmlnaHQ6IDBweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAwcHg7XG59XG5cbi5pbmZvdGFibGU1IHtcblx0cGFkZGluZy10b3A6IDRweDtcbn1cblxuLmluZm90YWJsZTUtdGQxIHtcblx0cGFkZGluZzogMXB4IDZweCA2cHggNnB4O1xuXHRib3JkZXItcmlnaHQ6IDBweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweCBzb2xpZCAjQkZCRkJGO1xuXHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXHQvKiBtb2RpZmllZCAqL1xufVxuLmluZm90YWJsZTUtdGQyIHtcblx0cGFkZGluZzogMXB4IDZweCA2cHggNnB4O1xuXHRib3JkZXItcmlnaHQ6IDBweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItYm90dG9tOiAwcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDBweCBzb2xpZCAjQkZCRkJGO1xuXHR2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuLmluZm90YWJsZTYge31cbi5pbmZvdGFibGU2LXRkMSB7XG5cdGJhY2tncm91bmQ6ICNGRkZGRkY7XG5cdGNvbG9yOiAjMzMzMzMzO1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgIzlGMjAwMDtcblx0Ym9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICM5RjIwMDA7XG5cbn1cbi5pbmZvdGFibGU2LXRkMiB7XG5cdGJhY2tncm91bmQ6ICNGRkZGRkY7XG5cdHBhZGRpbmc6IDNweCA2cHg7XG5cdGNvbG9yOiAjMzMzMzMzO1xuXHRib3JkZXItdG9wOiAzcHggc29saWQgIzlGMjAwMDtcblx0Ym9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICM5RjIwMDA7XG59XG4uaW5mb3RhYmxlNi10ZDMge1xuXHRiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuXHRwYWRkaW5nOiAzcHggNnB4O1xuXHRjb2xvcjogIzMzMzMzMztcblx0Ym9yZGVyLXRvcDogM3B4IHNvbGlkICM5RjIwMDA7XG5cdGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjOUYyMDAwO1xufVxuXG4uaW5mb3RhYmxlNyB7fVxuLmluZm90YWJsZTctdGQxIHtcblx0YmFja2dyb3VuZDogI0Y3RjdGNztcblx0cGFkZGluZzogM3B4IDZweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuLmluZm90YWJsZTctdGQyIHtcblx0cGFkZGluZzogM3B4IDZweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZnJhbWUtb3V0c2lkZXt9XG4uZnJhbWUtb3V0c2lkZS10ZDEge3BhZGRpbmc6IDZweDsgYm9yZGVyOiAxcHggc29saWQgI0JGQkZCRjt9XG5cbi5mcmFtZS1ub3BhZGRpbmcge2JhY2tncm91bmQ6ICNGRkZGRkY7IGJvcmRlcjogMXB4IHNvbGlkICNCRkJGQkY7fVxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLWRhdGEtdGFibGUxLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmRhdGEtdGFibGUxIHt9XG5cbi5kYXRhLXRhYmxlMS10aDEge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi5kYXRhLXRhYmxlMS10aDEtdmxpbi1sIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwNGJcdTMwODlcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5kYXRhLXRhYmxlMS10aDEtbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xufVxuLyotLS0tXHVmZjEyXHU2YjIxXHUzMGQ1XHUzMGE3XHUzMGZjXHUzMGJhXHUzMDY3XHU4ZmZkXHU1MmEwXHVmZjA4XHUzMDUzXHUzMDUzXHUzMDdlXHUzMDY3XHVmZjA5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5kYXRhLXRhYmxlMS10aDIge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUxLXRoMi12bGluIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwNGJcdTMwODlcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5kYXRhLXRhYmxlMS10aDItbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwN2VcdTMwNjdcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLmRhdGEtdGFibGUxLXRoMyB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTEtdGgzLXZsaW4tbCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5kYXRhLXRhYmxlMS10aDMtdmxpbi1sciB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5kYXRhLXRhYmxlMS10aDMtbm9zcGFjZSB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG59XG5cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA0Ylx1MzA4OVx1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmRhdGEtdGFibGUxLXRoMy1ub2xpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA3ZVx1MzA2N1x1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uZGF0YS10YWJsZTEtdGQxIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5kYXRhLXRhYmxlMS10ZDEtbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xufVxuXG4uZGF0YS10YWJsZTEtdGQxLXZsaW4tbCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLyogXHU4ODY4XHUzMDZlXHU4MGNjXHU2NjZmXHU4MjcyXHU4ZmZkXHU1MmEwIFx1MzBkMVx1MzBiZlx1MzBmY1x1MzBmM1x1ZmYxMSAqL1xuLmRhdGEtdGFibGUxLXRkMS12bGluLWwtcDEge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRkZGRTc7XG59XG5cbi8qIFx1ODg2OFx1MzA2ZVx1ODBjY1x1NjY2Zlx1ODI3Mlx1OGZmZFx1NTJhMCBcdTMwZDFcdTMwYmZcdTMwZmNcdTMwZjNcdWZmMTIgKi9cbi5kYXRhLXRhYmxlMS10ZDEtdmxpbi1sLXAyIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRjdFN0U3O1xufVxuXG4vKiBcdTg4NjhcdTMwNmVcdTgwY2NcdTY2NmZcdTgyNzJcdThmZmRcdTUyYTAgXHUzMGQxXHUzMGJmXHUzMGZjXHUzMGYzXHVmZjEzICovXG4uZGF0YS10YWJsZTEtdGQxLXZsaW4tbC1wMyB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VDRkZGRjtcbn1cblxuLyogXHU4ODY4XHUzMDZlXHU4MGNjXHU2NjZmXHU4MjcyXHU4ZmZkXHU1MmEwIFx1MzBkMVx1MzBiZlx1MzBmY1x1MzBmM1x1ZmYxMyAqL1xuLmRhdGEtdGFibGUxLXRkMS12bGluLWwtcDMtZG90IHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VDRkZGRjtcbn1cblxuLmRhdGEtdGFibGUxLXRkMiB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTEtdGQyLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUxLXRkMi12bGluIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTEtdGQzIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMS10ZDMtbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTEtdGQzLXZsaW4tbCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5kYXRhLXRhYmxlMS10ZDMtdmxpbi1sciB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5kYXRhLXRhYmxlMS10ZDMtdmxpbi1sci1kb3Qge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuLmRhdGEtdGFibGUxLXRkMy1ub3NwYWNlIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuXG4uZGF0YS10YWJsZTEtdGQ0IHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5kYXRhLXRhYmxlMS10ZDUge1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuXG4uZGF0YS10YWJsZTEtdGQ2IHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cblxuLmRhdGEtdGFibGUxLXRkNi1yIHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5kYXRhLXRhYmxlMS10ZDcge1xuXHRwYWRkaW5nOiAycHggM3B4O1xufVxuXG4uZGF0YS10YWJsZTEtdGQ4IHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuXG4uZGF0YS10YWJsZTEtdGQ5IHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuXG4vKi0tLS0tLS0tLS0tLS0tLS1kYXRhLXRhYmxlMi0tLS0tLS0tLS0tLS0tLS0tKi9cbi5kYXRhLXRhYmxlMiB7fVxuXG4uZGF0YS10YWJsZTItdGgxIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG59XG4uZGF0YS10YWJsZTItdGgxLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi5kYXRhLXRhYmxlMi10aDEtdmxpbi1sIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwNGJcdTMwODlcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5kYXRhLXRhYmxlMi10aDEtdmxpbi10IHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xufVxuLyotLS0tXHVmZjEyXHU2YjIxXHUzMGQ1XHUzMGE3XHUzMGZjXHUzMGJhXHUzMDY3XHU4ZmZkXHU1MmEwXHVmZjA4XHUzMDUzXHUzMDUzXHUzMDdlXHUzMDY3XHVmZjA5LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi5kYXRhLXRhYmxlMi10aDIge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi5kYXRhLXRhYmxlMi10aDItbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xufVxuLmRhdGEtdGFibGUyLXRoMi12bGluLWwge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5kYXRhLXRhYmxlMi10aDMge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0YmFja2dyb3VuZDogI0VFRUVFRTtcbn1cbi5kYXRhLXRhYmxlMi10aDMtbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xufVxuLmRhdGEtdGFibGUyLXRoMy12bGluLWwge1xuXHRwYWRkaW5nOiAycHggM3B4IDJweCA0cHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRiYWNrZ3JvdW5kOiAjRUVFRUVFO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5kYXRhLXRhYmxlMi10ZDEge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUyLXRkMS1ub2xpbiB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG59XG4uZGF0YS10YWJsZTItdGQxLXZsaW4tbCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cblxuLmRhdGEtdGFibGUyLXRkMiB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTItdGQyLW5vbGluIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUyLXRkMi12bGluIHtcblx0cGFkZGluZzogMnB4IDNweCAycHggNHB4O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTItdGQzIHtcblx0cGFkZGluZzogMnB4IDNweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMi10ZDMtbm9saW4ge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGRkZGRkY7XG59XG4uZGF0YS10YWJsZTItdGQzLXZsaW4tbCB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5kYXRhLXRhYmxlMi10ZDMtdmxpbi1sciB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcbn1cbi5kYXRhLXRhYmxlMi10ZDMtbm9zcGFjZSB7XG5cdHBhZGRpbmc6IDJweCAzcHggMnB4IDRweDtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA0Ylx1MzA4OVx1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmRhdGEtdGFibGUyLXRkMy10b3Age1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuLmRhdGEtdGFibGUyLXRkMy12bGluLXQge1xuXHRwYWRkaW5nOiAycHggM3B4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA3ZVx1MzA2N1x1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uZGF0YS10YWJsZTItdGQ0IHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG5cbi5kYXRhLXRhYmxlMi10ZDUge1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRkZGRkZGO1xufVxuXG4uZGF0YS10YWJsZTItdGQ2IHtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cbi5kYXRhLXRhYmxlMi10ZDYtciB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQkZCRkJGO1xufVxuXG4uZGF0YS10YWJsZTItdGQ3IHtcblx0cGFkZGluZzogMnB4IDNweDtcbn1cblxuLmRhdGEtdGFibGUyLXRkOCB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cblxuLmRhdGEtdGFibGUyLXRkOSB7XG5cdHBhZGRpbmc6IDJweCAzcHg7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0ZGRkZGRjtcbn1cblxuLmRhdGEtdGFibGUzIHtcblx0bWFyZ2luLXRvcDogMXB4O1xufVxuLmRhdGEtdGFibGUzLXRkMSB7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI0JGQkZCRjtcblx0cGFkZGluZy1yaWdodDogM3B4O1xuXHRwYWRkaW5nLWxlZnQ6IDNweDtcbn1cblxuLyotLS0tLS0tLS0tLS0tLS0tZ3JpZC10YWJsZS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5ncmlkLXRhYmxlMiB7fVxuLmdyaWQtdGFibGUyLXRoMCB7XG5cdGJhY2tncm91bmQ6ICNFOEYwRUY7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuLmdyaWQtdGFibGUyLXRoMSB7XG5cdGJhY2tncm91bmQ6ICNENkU0RTI7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuLmdyaWQtdGFibGUyLXRoMiB7XG5cdGJhY2tncm91bmQ6ICNENkU0RTI7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuLmdyaWQtdGFibGUyLXRoMyB7XG5cdGJhY2tncm91bmQ6ICNENkU0RTI7XG5cdGJvcmRlci10b3A6IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuLmdyaWQtdGFibGUyLXRoNCB7XG5cdGJhY2tncm91bmQ6ICNENkU0RTI7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICM0MzUzNTY7XG59XG4uZ3JpZC10YWJsZTItdGg1IHtcblx0YmFja2dyb3VuZDogI0Q2RTRFMjtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQzNTM1Njtcbn1cbi5ncmlkLXRhYmxlMi10aDYge1xuXHRiYWNrZ3JvdW5kOiAjRDZFNEUyO1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuLmdyaWQtdGFibGUyLXRkMSB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICM0MzUzNTY7XG59XG5cbi5ncmlkLXRhYmxlMi10ZDIge1xuXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgIzQzNTM1Njtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjNDM1MzU2O1xufVxuLmdyaWQtdGFibGUyLXRkMyB7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNDM1MzU2O1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICM0MzUzNTY7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM0MzUzNTY7XG59XG5cbi8qLS0tLS0tLS0tLS0tLS0tLXRyIGNvbGxlci0tLS0tLS0tLS0tLS0tLS0tKi9cbnRhYmxlIHRyLmJnLUZ1dHVyZS1CbHVlICAge2JhY2tncm91bmQ6I0UzRjJGNTt9XG50YWJsZSB0ci5iZy1OYXR1cmFsLUdyZWVuIHtiYWNrZ3JvdW5kOiNFREZDQjk7fVxudGFibGUgdHIuYmctR29sZGVuLU9yYW5nZSB7YmFja2dyb3VuZDojRkZFREMxO31cbnRhYmxlIHRyLmJnLVNreS1CbHVlICAgICAge2JhY2tncm91bmQ6I0RGRURGRjt9XG50YWJsZSB0ci5iZy1CbHVlLUdyZWVuICAgIHtiYWNrZ3JvdW5kOiNEMkYxRTM7fVxuXG50YWJsZSB0ci5kYXJrLWJsdWUxICAge2JhY2tncm91bmQ6I0UzRjJGMjt9XG50YWJsZSB0ci5kYXJrLWJsdWUyICAge2JhY2tncm91bmQ6I0VDRUNGRjt9XG50YWJsZSB0ci5kYXJrLXBpbmsxICAge2JhY2tncm91bmQ6I0ZDRTlGODt9XG50YWJsZSB0ci5kYXJrLXBpbmsyICAge2JhY2tncm91bmQ6I0ZGRTdFNjt9XG50YWJsZSB0ci5kYXJrLW9yYW5nZTEge2JhY2tncm91bmQ6I0ZGRURDMTt9XG50YWJsZSB0ci5kYXJrLXllbGxvdzEge2JhY2tncm91bmQ6I0ZGRkZCNTt9XG50YWJsZSB0ci5kYXJrLWdyZWVuMSAge2JhY2tncm91bmQ6I0U0RkY5RDt9XG50YWJsZSB0ci5kYXJrLWdyYXkxICAge2JhY2tncm91bmQ6I0VFRUVFRTt9XG50YWJsZSB0ci5kYXJrLWdyYXkyICAge2JhY2tncm91bmQ6I0Y0RjRGNDt9XG50YWJsZSB0ci53aGl0ZSAgICAgICAge2JhY2tncm91bmQ6I0ZGRkZGRjt9XG5cblxuLyotLS0tLS0tLS0tLS0ta2FrdW5pbi1uby10YWJsZS0tLS0tLS0tLS0tLS0tKi9cbi5rYWt1bmluLW5vLXRhYmxlIHtcbn1cblxuLmtha3VuaW4tbm8tdGFibGUtdGgwIHtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdGJhY2tncm91bmQ6ICMwMDAwMDA7XG5cdGJvcmRlcjogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRmb250LXNpemU6IDAuOWVtO1xufVxuXG4ua2FrdW5pbi1uby10YWJsZS10aDEge1xuXHRjb2xvcjogI0ZGRkZGRjtcblx0YmFja2dyb3VuZDogIzAwMDAwMDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmtha3VuaW4tbm8tdGFibGUtdGgyIHtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdGJhY2tncm91bmQ6ICMwMDAwMDA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ua2FrdW5pbi1uby10YWJsZS10ZCB7XG5cdGJhY2tncm91bmQ6ICNFRUVFRUU7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNzU3NTc1O1xuXHRib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNzU3NTc1O1xufVxuXG4ua2FrdW5pbi1uby10YWJsZS1icmlnaHQge1xuXHRsaW5lLWhlaWdodDogMTdweDtcblx0YmFja2dyb3VuZDogI0ZGRkZDODtcblx0Ym9yZGVyOiAzcHggc29saWQgIzAwMDAwMDtcbn1cblxuLnNrLXRhYmxle1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgIzc1NzU3NTtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICM3NTc1NzU7XG5cdGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzc1NzU3NTtcblx0Ym9yZGVyLXdpZHRoOiAycHg7XHRcbn0ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMjk1NywgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMjk1N30sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDE0NC44OTIsICJyZWNlaXZlIjogMS42Mzl9LCAicGFnZXJlZiI6ICJwYWdlQDdkZDllNzNlYjZiYjE3MjMxYTVjYTIwMGYzNDg3ODdmIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cubGFvZ2FuZ3RlYS5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxODYsICJ2YWxpZFRvIjogMTY5MjY2OTE4NX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE0OjE3OjMxLjY5M1oiLCAidGltZSI6IDE0Ny42NTMwMDAwMDAwMDAwMiwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2Nzcy9wYy9zY3JlZW4uY3NzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2Nzcy9wYy9zY3JlZW4uY3NzIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9jc3MsKi8qO3E9MC4xIn0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic3R5bGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0NTMsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT00MzIwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9jc3MifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiVy9cIjY0MTc0YjdmLTQzZTRcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDI1IE1heSAyMDIzIDAyOjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDE3OjUwOjU1IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDE3MzgwLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAxNDE2OCwgInRleHQiOiAiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZGVjb3JhdGlvbiBzdHlsZXMgZm9yIHNjcmVlbiBtZWRpYVxubGFzdCB1cGRhdGUgMjAxMS0wNC0yOC0wOTowMFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyogLS0tLS0tLSBwcmludCBzdHlsZXMgLS0tLS0tLSAqL1xuI3ByaW50LW1hc3RoZWFkXHR7ZGlzcGxheTpub25lIWltcG9ydGFudDt9XG4vKiAtLS0tIHNvdWRhbiBwcmludCAtLS0tICovXG4jc291ZGFuLXByaW50ICB7ZGlzcGxheTpub25lIWltcG9ydGFudDt9XG4vKiAtLS0tc291ZGFuIHNjcmVlbiBkaXNwbGF5LS0tLSAqL1xuI3NvdWRhbi1kaXNwICB7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50O31cbiNidG4tYm90dG9tXHR7IWltcG9ydGFudDt9XG5cbi8qIC0tLS0tLS0gYmFzaWMgc3R5bGVzIC0tLS0tLS0gKi9cbi8qXG5odG1sLGJvZHkge2JhY2tncm91bmQ6I2ZmZjsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgbWluLXdpZHRoOjY3MHB4OyBmb250LXNpemU6OTAlOyBsaW5lLWhlaWdodDogMS4zZW07fVxuKi9cbmh0bWwsYm9keSB7YmFja2dyb3VuZDojRUNFQ0U2OyBtYXJnaW46MDsgcGFkZGluZzowOyBtaW4td2lkdGg6NjcwcHg7IFxuaGVpZ2h0OiAxMDAlOyBcbmZvbnQtc2l6ZToxMDAlOyBsaW5lLWhlaWdodDogMS4zZW07fVxuYm9keSB7bWFyZ2luLXJpZ2h0OiAxcHg7IG1hcmdpbi1ib3R0b206IDFweDsgbWFyZ2luLWxlZnQ6IDFweDt9XG5cbmh0bWwsYm9keSxcbnAsdWwsb2wsbGksXG50ZCx0aCB7Y29sb3I6IzM1MzUzNTsgZm9udC1mYW1pbHk6XCJNUyBQR290aGljXCIsIE9zYWthO31cblxubGksdGgsdGQsXG5wcmUsY29kZSB7Zm9udC1zaXplOjFlbTt9XG5cbnVsLG9sIHttYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDt9XG5cbnByZSB7bWFyZ2luOiAwcHg7fVxuXG5wIHttYXJnaW46MDsgcGFkZGluZy10b3A6IDNweDsgcGFkZGluZy1ib3R0b206IDNweDt9XG5cbmEgaW1nXHQgIHtib3JkZXI6MCBzb2xpZCAjZjAwO31cbmE6bGluayAgICB7Y29sb3I6IzM5NDg5RDsgdGV4dC1kZWNvcmF0aW9uOiBub25lO31cbmE6dmlzaXRlZCB7Y29sb3I6IzkzMTU4QzsgdGV4dC1kZWNvcmF0aW9uOiBub25lO31cbmE6aG92ZXIgICB7Y29sb3I6IzM5NDg5RDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fVxuXG4uc3ViaGVhZDEgYTpsaW5rICAgIHtjb2xvcjojQ0JEM0ZGOyB0ZXh0LWRlY29yYXRpb246O31cbi5zdWJoZWFkMSBhOnZpc2l0ZWQge2NvbG9yOiNGMENCRUU7IHRleHQtZGVjb3JhdGlvbjo7fVxuLnN1YmhlYWQxIGE6aG92ZXIgICB7Y29sb3I6I0NCRDNGRjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fVxuXG4uc3ViaGVhZDIgYTpsaW5rICAgIHtjb2xvcjojQ0JEM0ZGOyB0ZXh0LWRlY29yYXRpb246O31cbi5zdWJoZWFkMiBhOnZpc2l0ZWQge2NvbG9yOiNGMENCRUU7IHRleHQtZGVjb3JhdGlvbjo7fVxuLnN1YmhlYWQyIGE6aG92ZXIgICB7Y29sb3I6I0NCRDNGRjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fVxuXG4jbWFzdGhlYWQtMSB7IG1hcmdpbjowOyBwYWRkaW5nLXRvcDogNXB4O31cbi8qIG1hdHN1ZGEgbW9kaWZpZWQgKi9cbi5zaWRlYmFyIHtiYWNrZ3JvdW5kOiAjRkZGRkZGO31cbiNnbG9iYWxuYXZpIHt9XG4uZ25hdmktdGQxIHtjb2xvcjogI0MyQzJDMjt9XG5cbi8qIG1hdHN1ZGEgbW9kaWZpZWQgKi9cbi5iZy1sb2dvdXQge31cblxuI21hc3RoZWFkLTIge31cbi50ZC1kaXJlY3QtbTEge2JhY2tncm91bmQ6ICMwMDk5YjMgcmVwZWF0LXg7fVxuLnRkLWRpcmVjdC1tMiB7YmFja2dyb3VuZDogI0ZGRjZEOTt9XG4udGQtZGlyZWN0LW0zIHtiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1nL2JnX3N1YmhlYWQucG5nKSBuby1yZXBlYXQ7fVxuXG4vKiAtLS0tLS0tIG5hdmkgc3R5bGVzIC0tLS0tLS0gKi9cbiNuYXZpIHt9XG4vKiBtYXRzdWRhIG1vZGlmaWVkICovXG4ubmF2aS1zcGFjZSB7YmFja2dyb3VuZDogI2IwZTZlZjsgcmVwZWF0O31cbi5uYXZpLXNwYWNlb24tbCB7YmFja2dyb3VuZDogI0ZGRkZGRjt9XG4ubmF2aS1zcGFjZW9uLXIge2JhY2tncm91bmQ6ICNGRkZGRkY7fVxuLyogbWF0c3VkYSBtb2RpZmllZCAqL1xuLmJnLW5hdmkgIHtcblx0YmFja2dyb3VuZDogI2IwZTZlZiB1cmwoLi4vLi4vaW1nL2lfZGlyZWN0X2cxLnBuZz92ZXI9djIpIG5vLXJlcGVhdDtcblx0YmFja2dyb3VuZC1wb3NpdGlvbjp0b3AgcmlnaHQ7XG50YWJsZS1sYXlvdXQ6Zml4ZWQ7XG59XG5cbi8qIC0tLS0tLS0gcGFnZXRpdGxlIHN0eWxlcyAtLS0tLS0tICovXG4jcGFnZXRpdGxlIHtcblx0dGFibGUtbGF5b3V0OmZpeGVkO1xufVxuLnRkLXBhZ2V0aXRsZTEge1xuXHRiYWNrZ3JvdW5kOiAjMDA5OUIzIHVybCguLi8uLi9pbWcvYmdfcHRpdGlsZS5naWYpIHJlcGVhdC14O1xuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XG5cdHBhZGRpbmctdG9wOiAzcHg7XG5cdGNvbG9yOiAjRkZGRkZGO1xufVxuLnRkLXBhZ2V0aXRsZTIge1xuXHRiYWNrZ3JvdW5kOiAjMDA5OUIzIHVybCguLi8uLi9pbWcvaV9kaXJlY3RfZzIucG5nKSBuby1yZXBlYXQ7XG59XG4udGQtcGFnZXRpdGxlMyB7XG5cdGJhY2tncm91bmQ6ICNCMEU2RUYgIHJlcGVhdC14O1xufVxuXG4vKiAtLS0tLS0tIGNvbnRlbnQgc3R5bGVzIC0tLS0tLS0gKi9cbiNjb250ZW50LW1haW4ge31cbi5zdGF0dXMtdGQxIHtcblx0Y29sb3I6ICNGRkZGRkY7XG5cdGZvbnQtd2VpZ2h0OiBib2xkO1xuXHRwYWRkaW5nLWxlZnQ6IDRweDtcblx0YmFja2dyb3VuZDogIzAwODAzMztcblx0cGFkZGluZy10b3A6IDFweDtcblx0cGFkZGluZy1ib3R0b206IDFweDtcblx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDgwMzM7XG5cdGJvcmRlci1yaWdodDogMXB4IHNvbGlkICMwMDgwMzM7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDA4MDMzO1xuXHRib3JkZXItbGVmdDogMXB4IHNvbGlkICMwMDgwMzM7XG5cdHdpZHRoOiAzNnB4O1xufVxuLnN0YXR1cy10ZDIge1xuXHRjb2xvcjogIzMzM0U0MDtcblx0YmFja2dyb3VuZDogI0ZGRkZGRjtcblx0bGluZS1oZWlnaHQ6IDEuNWVtO1xuXHRwYWRkaW5nOiAxcHggNHB4IDFweCAxMHB4O1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLXJpZ2h0OiAxcHggc29saWQgI0JGQkZCRjtcblx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCRkJGQkY7XG59XG4uc3RhdHVzLW51bS1vbiB7XG5cdGJhY2tncm91bmQ6ICM4ODAwMDA7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4zZW07XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdGZvbnQ6IDAuOWVtIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcblx0bWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cbi5zdGF0dXMtbnVtLW9uMiB7XG5cdGJhY2tncm91bmQ6ICM4ODAwMDA7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4wNWVtO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRmb250OiAwLjllbSBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG5cdG1hcmdpbi1yaWdodDogMnB4O1xufVxuXG4uc3RhdHVzLW51bS1vZmYge1xuXHRiYWNrZ3JvdW5kOiAjREZERkRGO1xuXHRjb2xvcjogIzMzM0U0MDtcblx0aGVpZ2h0OiAxZW07XG5cdHdpZHRoOiAxZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cGFkZGluZzogMC4wMWVtIDAuM2VtO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRmb250OiAwLjllbSBHZW5ldmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG5cdG1hcmdpbi1yaWdodDogMnB4O1xufVxuXG4uc3RhdHVzLW51bS1vZmYyIHtcblx0YmFja2dyb3VuZDogI0RGREZERjtcblx0Y29sb3I6ICMzMzNFNDA7XG5cdGhlaWdodDogMWVtO1xuXHR3aWR0aDogMWVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdHBhZGRpbmc6IDAuMDFlbSAwLjA1ZW07XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG5cdGZvbnQ6IDAuOWVtIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcblx0bWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cblxuLnN0YXR1cy10eHQtb24ge2NvbG9yOiAjODgwMDAwO31cblxuLyogYWRkICovXG4udmVydGljYWwtYWxpZ24tdG9wIHsgdmVydGljYWwtYWxpZ246dG9wIH1cblxuLyogLS0tIHRleHQgc3R5bGVzIC0tLSAqL1xuaDEsaDIsaDMsaDQsaDUsaDYge21hcmdpbjowOyBwYWRkaW5nOjA7fVxuaDEge1xuXHRmb250LXNpemU6IDEuM2VtO1xuXHRmb250LXdlaWdodDogYm9sZDtcbn1cbi8qXG5oMiB7Zm9udC1zaXplOiAxLjFlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuaDMge2ZvbnQtc2l6ZTogMC45ZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbmg0IHtmb250LXNpemU6IDAuOWVtOyBmb250LXdlaWdodDogYm9sZDt9XG5oNSB7Zm9udC1zaXplOiAwLjllbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuaDYge2ZvbnQtc2l6ZTogMC45ZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbiovXG5oMiB7Zm9udC1zaXplOiAxLjEzZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbmgzIHtmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuaDQge2ZvbnQtc2l6ZTogMWVtOyBmb250LXdlaWdodDogYm9sZDt9XG5oNSB7Zm9udC1zaXplOiAxZW07IGZvbnQtd2VpZ2h0OiBib2xkO31cbmg2IHtmb250LXNpemU6IDFlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7fVxuLnNtYWxsXHQgICAge2ZvbnQtc2l6ZTowLjg1ZW07fVxuLnNtYWxsLWdyeVx0e2NvbG9yOiM1QjVCNUI7IGZvbnQtc2l6ZTowLjg1ZW07fVxuLnNlY3Rpb25cdHttYXJnaW46MDsgcGFkZGluZy1sZWZ0OiAwLjZlbTsgZGlzcGxheTogYmxvY2s7fVxuLm5vYm9sZCAgICAge2ZvbnQtd2VpZ2h0OiBub3JtYWw7fVxuLnN1YmhlYWRtZW51XHR7Y29sb3I6I2ZmZmZmZjt9XG4udG9waW5mb1x0e2NvbG9yOiNjNTI4MGU7fVxuLmFsZXJ0ICAgICAge2NvbG9yOiM5RjIwMDA7fVxuLnRyaWFsLWhlYWQgIHtjb2xvcjojREIwMDAwOyBmb250LXNpemU6IDEuMWVtOyBmb250LXdlaWdodDogYm9sZDt9XG5cbi5vcmFuZ2UtZGFyayAge2NvbG9yOiM5RjIwMDA7fVxuLnJlZC1kYXJrMVx0ICB7Y29sb3I6Izg4MDAwMDt9XG4ucmVkLWRhcmsyICAgIHtjb2xvcjojM0MwNDI0O31cbi5ncmVlbi1kYXJrMSAge2NvbG9yOiMzRjRCNEU7fVxuLmdyZWVuLWRhcmsyICB7Y29sb3I6IzA5MjgyRjt9XG4uZ3JheTFcdCAgICAgIHtjb2xvcjojNUI1QjVCO31cbi5ncmF5Mlx0ICAgICAge2NvbG9yOiMyQTJBMkE7fVxuLmJsYWNrXHQgICAgICB7Y29sb3I6IzAwMDAwMDt9XG4ud2hpdGVcdCAgICAgIHtjb2xvcjojRkZGRkZGO31cbi5mdXR1cmUtYmx1ZSAgICAgICB7Y29sb3I6IzAwNjY4MDt9XG5cbi5iZy15ZWxsb3dcdCAgICB7YmFja2dyb3VuZDojRkZGRkM4O31cbi5iZy1yb3NlXHQgICAge2JhY2tncm91bmQ6I0YwREZFMDt9XG4uYmctZ3JlZW5cdCAgICB7YmFja2dyb3VuZDojRDZFNEUyO31cbi5iZy1ncmF5MVx0ICAgIHtiYWNrZ3JvdW5kOiNGN0Y3Rjc7fVxuLmJnLWdyYXkyXHQgICAge2JhY2tncm91bmQ6I0VFRUVFRTt9XG5cbi5iZy1ncmF5LWRhcmsgICB7YmFja2dyb3VuZDojNUI1QjVCO31cbi5iZy1ibGFja1x0ICAgIHtiYWNrZ3JvdW5kOiMwMDAwMDA7fVxuLmJnLXdoaXRlXHQgICAge2JhY2tncm91bmQ6I0ZGRkZGRjt9XG5cblxuLnRvdG9wICAgICB7IG1hcmdpbi10b3A6IDNweDt9XG4udG90b3AtdGQxIHtcblx0Ym9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQkZCRkJGO1xuXHRwYWRkaW5nLXRvcDogMXB4O1xufVxuLnRvdG9wLXRkMiB7cGFkZGluZy10b3A6IDFweDt9XG4udG90b3AtdGQzIHtiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1nL2JnX3RvdG9wLmdpZikgbm8tcmVwZWF0IGxlZnQ7fVxuXG4vKiAtLS0tLS0tIGZvb3RlciBzdHlsZXMgLS0tLS0tLSAqL1xuI2Zvb3RlciB7fVxuLmZvb3Rlci10ZDEge1xuXHRiYWNrZ3JvdW5kOiAjQjBFNkVGO1xufVxuLmZvb3Rlci10ZDIge1xuXHRjb2xvcjogI0MyQzJDMjtcblx0cGFkZGluZy1sZWZ0OiA3cHg7XG59XG5cbiNjb3B5cmlnaHQge31cblxuLyogLS0tLS0tLSBmb3JtIGVsZW1lbnQgdHJlYXRtZW50cyAtLS0tLS0tICovXG5mb3JtXHR7bWFyZ2luOjA7IHBhZGRpbmc6MDt9XG4vKnNlbGVjdCxpbnB1dFx0e2Rpc3BsYXk6aW5saW5lO30qL1xuc2VsZWN0XHR7ZGlzcGxheTppbmxpbmU7fVxuc2VsZWN0XHR7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO31cbi8qXG5zZWxlY3QsaW5wdXQsdGV4dGFyZWFcdHtmb250LXNpemU6LjllbTt9XG4qL1xuc2VsZWN0LGlucHV0LHRleHRhcmVhXHR7Zm9udC1zaXplOjFlbTt9XG5cbi5wYXNzd29yZC1mb250IGlucHV0IHtmb250LWZhbWlseTpcImFyaWFsXCI7fVxuXG4uYnV0dG9uLXNvZnR3YXJlLWtleSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDEuOGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UxLWtleSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDEuOGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMS1rZXktZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDEuOGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UyIGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDdlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1yb3NlMi1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDdlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1yb3NlMyBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxMGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMy1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDEwZW07XG5cdGhlaWdodDogMS45ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2UzLWRvdWJsZSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxMGVtO1xuXHRoZWlnaHQ6IDMuMGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMy1kb3VibGUtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAxMGVtO1xuXHRoZWlnaHQ6IDMuMGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNCBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxMmVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNC1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDEyZW07XG5cdGhlaWdodDogMS45ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5idXR0b24tcm9zZTUgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogMTZlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTUtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAxNmVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2U2IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDIwZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5idXR0b24tcm9zZTYtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAyMGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2U3IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDI0ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U3LWRpc2FibGUgaW5wdXQge1xuXHRjb2xvcjojQTBBMEEwO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojRTdFN0U3O1xuXHR3aWR0aDogMjRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1yb3NlOCBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAyOGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlOC1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDI4ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U5IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDE1LjRlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTEwLWtleSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDIuNWVtO1xuXHRoZWlnaHQ6IDIuNGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1jaG9jbyBpbnB1dCB7XG5cdGNvbG9yOiNmZmY7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6IzJjNTQ3Mztcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgIzg2QzBDRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjODZDMENFO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMDAwMDAwO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDAwMDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tY2hvY28tZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNFN0U3RTc7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6I0FEQUFBRDtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0NFQ0VDRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjQ0VDRUNFO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjOUQ5RDlEO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzhBOEE4QTtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1jaG9jbzEzIGlucHV0IHtcblx0d2lkdGg6IDEzZW07XG59XG4uYnV0dG9uLWNob2NvMTggaW5wdXQge1xuXHR3aWR0aDogMThlbTtcbn1cbi5idXR0b24tY2hvY28zMCBpbnB1dCB7XG5cdHdpZHRoOiAzMGVtO1xufVxuXG4uYnV0dG9uLXJvc2UxOS1kb3VibGUgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogNTBlbTtcblx0aGVpZ2h0OiAzLjBlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTE5LWRvdWJsZS1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDUwZW07XG5cdGhlaWdodDogMy4wZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLW90aGVycy0tLS0tLS0tLS0tLS0tLSovXG4ubGluLXNvbGlkIHtiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1nL2xpbl9zb2xpZC5naWYpIHJlcGVhdC14O31cbi5saW4tZG90cyB7XG5cdGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWcvbGluX2RvdHMuZ2lmKSByZXBlYXQteDtcblx0cGFkZGluZy10b3A6IDRweDtcbn1cblxuLmRpdmlkZXIge1xuXHRmb250LXNpemU6IDEuNmVtO1xuXHR0ZXh0LWFsaWduOiBjZW50ZXI7XG5cdGNvbG9yOiAjNTgyQzM1O1xuXHRwYWRkaW5nLXRvcDogMnB4O1xufVxuLnRkLXNwYWNlcjEge3BhZGRpbmctcmlnaHQ6IDNweDt9XG5cbi5ibG9jayAge2Rpc3BsYXk6YmxvY2s7fVxuXG4uZG91aXppa291IHtcblx0b3ZlcmZsb3c6IHNjcm9sbDtcblx0d2lkdGg6IDgwJTtcblx0aGVpZ2h0OiA0MDBweDtcblx0Ym9yZGVyLXdpZHRoOiAxcHg7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7XG5cdGJvcmRlci1jb2xvcjogc2lsdmVyO1xuXHR0ZXh0LWFsaWduOiBqdXN0aWZ5O1xuXHR0ZXh0LWp1c3RpZnk6IGRpc3RyaWJ1dGU7XG59XG5cbi5oYW5rYWt1IGlucHV0IHtcblx0aW1lLW1vZGU6IGRpc2FibGVkO1xufVxuXG4ua2FrdW5pbi1uby1sYWJlbCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzlGMjAwMDtcbn1cblxuLmtha3VuaW4tbm8tZmllbGQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkM4O1xufVxuXG4udGV4dC1pbnB1dC1maWVsZCB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNGRkZGQzg7XG59XG5cblxuXG5cbi8qIC0tLS0tLS0gc3RlcDMgYWRkIC0tLS0tLS0gKi9cbiNwYWdlIHtcdFxuICB3aWR0aDogODkwcHg7XG4gIHBhZGRpbmc6IDBweCAzMHB4O1xuICBtYXJnaW46IDBweCBhdXRvO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1xuICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xufVx0XG5cbiNwYWdlLXN1Yi13aW5kb3cge1x0XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nOiAwcHggMHB4O1xuICBtYXJnaW46IDBweCBhdXRvO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XHRcblxuLmJ1dHRvbi1yb3NlMl9uZXcgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogNGVtO1xuXHRoZWlnaHQ6IDEuOWVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UyX25ldy1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDRlbTtcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbiNmb290ZXItcG9zaSB7XG5cdGJvdHRvbTogMDtcblx0cG9zaXRpb246IGFic29sdXRlO1xufVxuLyogLS0tLS0tLSBzdGVwMyBhZGQgLS0tLS0tLSAqL1xuXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMzIxMiwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMzIxMn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDE0NS45MywgInJlY2VpdmUiOiAxLjcyM30sICJwYWdlcmVmIjogInBhZ2VAN2RkOWU3M2ViNmJiMTcyMzFhNWNhMjAwZjM0ODc4N2YiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy5sYW9nYW5ndGVhLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE4NiwgInZhbGlkVG8iOiAxNjkyNjY5MTg1fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTQ6MTc6MzEuNjk0WiIsICJ0aW1lIjogMTQ4Ljg1NCwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2Nzcy9wYy9zY3JlZW5fZWRnZS5jc3MiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJsYW9nYW5ndGVhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvY3NzL3BjL3NjcmVlbl9lZGdlLmNzcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvY3NzLCovKjtxPTAuMSJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInN0eWxlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDYzLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9NDMyMDAifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI2NDE3NDlkNS0xZGE3XCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiVGh1LCAyNSBNYXkgMjAyMyAwMjoxNzozMSBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiU3VuLCAxOSBNYXIgMjAyMyAxNzo0Mzo0OSBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA3NTkxLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiA2NDI4LCAidGV4dCI6ICIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5zdHlsZXMgZm9yIGVkZ2UvY2hyb21lXG5sYXN0IHVwZGF0ZSAyMDIxLTA0LTAxLTA5OjAwXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKiAtLS0tLS0tIFx1OTAzMlx1ODg0Y1x1ODg2OFx1NzkzYVx1MzA2ZVx1MzBjYVx1MzBmM1x1MzBkMFx1MzBmY1x1NjU3MFx1NWI1N1x1MzA2ZVx1N2UyNlx1NGY0ZFx1N2Y2ZVx1NjMwN1x1NWI5YVx1MzA5Mlx1NTNkNlx1MzA2M1x1MzA1Zlx1MzA4Mlx1MzA2ZSAtLS0tLS0tICovXG4uc3RhdHVzLW51bS1vbiB7XG5cdGJhY2tncm91bmQ6ICM4ODAwMDA7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4zZW07XG5cdHZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO1xuXHRmb250OiAxZW0gR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuXHRtYXJnaW4tcmlnaHQ6IDJweDtcbn1cbi5zdGF0dXMtbnVtLW9uMiB7XG5cdGJhY2tncm91bmQ6ICM4ODAwMDA7XG5cdGNvbG9yOiAjRkZGRkZGO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4wNWVtO1xuXHR2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtcblx0Zm9udDogMC45ZW0gR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuXHRtYXJnaW4tcmlnaHQ6IDJweDtcbn1cbi5zdGF0dXMtbnVtLW9mZiB7XG5cdGJhY2tncm91bmQ6ICNERkRGREY7XG5cdGNvbG9yOiAjMzMzRTQwO1xuXHRoZWlnaHQ6IDFlbTtcblx0d2lkdGg6IDFlbTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXHRwYWRkaW5nOiAwLjAxZW0gMC4zZW07XG5cdHZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO1xuXHRmb250OiAxZW0gR2VuZXZhLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuXHRtYXJnaW4tcmlnaHQ6IDJweDtcbn1cbi5zdGF0dXMtbnVtLW9mZjIge1xuXHRiYWNrZ3JvdW5kOiAjREZERkRGO1xuXHRjb2xvcjogIzMzM0U0MDtcblx0aGVpZ2h0OiAxZW07XG5cdHdpZHRoOiAxZW07XG5cdHRleHQtYWxpZ246IGNlbnRlcjtcblx0cGFkZGluZzogMC4wMWVtIDAuMDVlbTtcblx0dmVydGljYWwtYWxpZ246YmFzZWxpbmU7XG5cdGZvbnQ6IDAuOWVtIEdlbmV2YSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcblx0bWFyZ2luLXJpZ2h0OiAycHg7XG59XG5cbi5idXR0b24tc29mdHdhcmUta2V5IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmNlbnRlcjtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogMi4wMWVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nOiAwLjE1ZW0gMC4xNWVtIDAuMTVweDtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi8qIC0tLS0tLS0gXHUzMGRjXHUzMGJmXHUzMGYzXHUzMDZlXHU1ZTQ1XHUzMDkyU2FmYXJpXHU3NTI4XHUzMDZiXHU1ZTgzXHUzMDUyXHUzMDVmXHUzMDgyXHUzMDZlIC0tLS0tLS0gKi9cblxuLmJ1dHRvbi1yb3NlMS1rZXkgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246Y2VudGVyO1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAzLjRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZzogMC4xNWVtIDAuMTVlbSAwLjE1cHg7XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnV0dG9uLXJvc2UxLWtleS1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmNlbnRlcjtcblx0YmFja2dyb3VuZDojRTdFN0U3O1xuXHR3aWR0aDogMy40ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmc6IDAuMTVlbSAwLjE1ZW0gMC4xNXB4O1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLmJ1dHRvbi1yb3NlMiBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiA4LjRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTItZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiA4LjRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTMgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogMTEuNGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlMy1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDExLjRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTQgaW5wdXQge1xuXHRjb2xvcjojMzMzMzMzO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojQzZFMEU0O1xuXHR3aWR0aDogMTRlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0RCRjhGRDtcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0RCRjhGRDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi5idXR0b24tcm9zZTQtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAxNGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNSBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAxOGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNS1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDE4ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U2IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDIwZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4vKi0tLS1cdWZmMTJcdTZiMjFcdTMwZDVcdTMwYTdcdTMwZmNcdTMwYmFcdTMwNjdcdThmZmRcdTUyYTBcdWZmMDhcdTMwNTNcdTMwNTNcdTMwNGJcdTMwODlcdWZmMDktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi5idXR0b24tcm9zZTYtZGlzYWJsZSBpbnB1dCB7XG5cdGNvbG9yOiNBMEEwQTA7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNFN0U3RTc7XG5cdHdpZHRoOiAyMGVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjQzZDNkM2O1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgI0JDQkNCQztcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjRjdGN0Y3O1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNyBpbnB1dCB7XG5cdGNvbG9yOiMzMzMzMzM7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpsZWZ0O1xuXHRiYWNrZ3JvdW5kOiNDNkUwRTQ7XG5cdHdpZHRoOiAyNmVtO1xuXHRoZWlnaHQ6IDEuOGVtO1xuXHRwYWRkaW5nLXRvcDogMC4xZW07XG5cdHBhZGRpbmctcmlnaHQ6IDAuMTVlbTtcblx0cGFkZGluZy1sZWZ0OiAwLjE1ZW07XG5cdGJvcmRlci10b3A6IDJweCBzb2xpZCAjREJGOEZEO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzRGQjlDQjtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjREJGOEZEO1xuXHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmJ1dHRvbi1yb3NlNy1kaXNhYmxlIGlucHV0IHtcblx0Y29sb3I6I0EwQTBBMDtcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0U3RTdFNztcblx0d2lkdGg6IDI2ZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNDNkM2QzY7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjQkNCQ0JDO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNGN0Y3Rjc7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U4IGlucHV0IHtcblx0Y29sb3I6IzMzMzMzMztcblx0Zm9udC13ZWlnaHQ6bm9ybWFsO1xuXHR0ZXh0LWFsaWduOmxlZnQ7XG5cdGJhY2tncm91bmQ6I0M2RTBFNDtcblx0d2lkdGg6IDMwZW07XG5cdGhlaWdodDogMS44ZW07XG5cdHBhZGRpbmctdG9wOiAwLjFlbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdGJvcmRlci1yaWdodDogMnB4IHNvbGlkICM0RkI5Q0I7XG5cdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEZCOUNCO1xuXHRib3JkZXItbGVmdDogMnB4IHNvbGlkICNEQkY4RkQ7XG5cdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG4uYnV0dG9uLXJvc2U4LWRpc2FibGUgaW5wdXQge1xuXHRjb2xvcjojQTBBMEEwO1xuXHRmb250LXdlaWdodDpub3JtYWw7XG5cdHRleHQtYWxpZ246bGVmdDtcblx0YmFja2dyb3VuZDojRTdFN0U3O1xuXHR3aWR0aDogMzBlbTtcblx0aGVpZ2h0OiAxLjhlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRwYWRkaW5nLXJpZ2h0OiAwLjE1ZW07XG5cdHBhZGRpbmctbGVmdDogMC4xNWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgI0Y3RjdGNztcblx0Ym9yZGVyLXJpZ2h0OiAycHggc29saWQgI0M2QzZDNjtcblx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNCQ0JDQkM7XG5cdGJvcmRlci1sZWZ0OiAycHggc29saWQgI0Y3RjdGNztcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cbi8qLS0tLVx1ZmYxMlx1NmIyMVx1MzBkNVx1MzBhN1x1MzBmY1x1MzBiYVx1MzA2N1x1OGZmZFx1NTJhMFx1ZmYwOFx1MzA1M1x1MzA1M1x1MzA3ZVx1MzA2N1x1ZmYwOS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4uYnV0dG9uLWNob2NvMTMgaW5wdXQge1xuXHR3aWR0aDogMTVlbTtcbn1cbi5idXR0b24tY2hvY28xOCBpbnB1dCB7XG5cdHdpZHRoOiAyMGVtO1xufVxuLmJ1dHRvbi1jaG9jbzMwIGlucHV0IHtcblx0d2lkdGg6IDMyZW07XG59In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDExNjMsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDExNjN9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAxNDYuOTM2LCAicmVjZWl2ZSI6IDEuOTE4fSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS42OTRaIiwgInRpbWUiOiAxNDkuOTUzLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY3NzL3BjL2lzTG9naW4uY3NzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2Nzcy9wYy9pc0xvZ2luLmNzcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvY3NzLCovKjtxPTAuMSJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInN0eWxlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDU1LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9NDMyMDAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjExMiJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiNjQxNzRhNWMtNzBcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDI1IE1heSAyMDIzIDAyOjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDE3OjQ2OjA0IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogMTEyLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICIvKi0tLS0tLS0tLS0tLS1yb3cgaW5uZXIgc3BhY2luZy0tLS0tLS0tLS0tLS0tKi9cbi5oYWxmLXJvdy1zcGFjaW5ne1xuXHRwYWRkaW5nLXRvcDowLjVlbTtcblx0cGFkZGluZy1ib3R0b206MC41ZW07XG59In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDMxNSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMzE1fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMTQ3Ljg1NSwgInJlY2VpdmUiOiAyLjA5OH0sICJwYWdlcmVmIjogInBhZ2VAN2RkOWU3M2ViNmJiMTcyMzFhNWNhMjAwZjM0ODc4N2YiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy5sYW9nYW5ndGVhLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE4NiwgInZhbGlkVG8iOiAxNjkyNjY5MTg1fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTQ6MTc6MzEuNjk0WiIsICJ0aW1lIjogNTg3Ljk5NiwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2ltZy9jLmdpZiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvYy5naWYifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0ODMsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICI0MyJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImltYWdlL2dpZiJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJXZWQsIDI0IE1heSAyMDIzIDE0OjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJcIjY0MTZhYWFkLTJiXCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiRnJpLCAyMyBKdW4gMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiU3VuLCAxOSBNYXIgMjAyMyAwNjoyNDo0NSBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDQzLCAibWltZVR5cGUiOiAiaW1hZ2UvZ2lmIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiUjBsR09EbGhBUUFCQUlBQUFBQUFBQUFBQUNINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQ1JBRUFPdz09IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAyNDcsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDI0N30sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDQzOC45NzEsICJyZWNlaXZlIjogMTQ5LjAyNX0sICJwYWdlcmVmIjogInBhZ2VAN2RkOWU3M2ViNmJiMTcyMzFhNWNhMjAwZjM0ODc4N2YiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy5sYW9nYW5ndGVhLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE4NiwgInZhbGlkVG8iOiAxNjkyNjY5MTg1fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTQ6MTc6MzEuNjk1WiIsICJ0aW1lIjogNTg4Ljg2NywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2ltZy9sb2dvX2NvX3ByaW50LmdpZiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvbG9nb19jb19wcmludC5naWYifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA1MDcsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICIyODAwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiaW1hZ2UvZ2lmIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiNjQxNmFhYWEtYWYwXCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiRnJpLCAyMyBKdW4gMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiU3VuLCAxOSBNYXIgMjAyMyAwNjoyNDo0MiBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDI4MDAsICJtaW1lVHlwZSI6ICJpbWFnZS9naWYiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJSMGxHT0RsaHl3QWZBUGNBQU82SUFKL1o0aENmdURDc3dYREcxTS9zOFNDbXZlLzUrbUMvME4veTlWQzV5NC9TM3EvZjV3Q0FNN1BaUUVDenN3Qm1nSmxtTXdCbW1XYXoyZmJEZi9LbVFQdmh2NW5NNWN6bDhuL016TWJpY0ovUEVMTFo3T1h5K1NDbXBoQ2ZuKy81K2ZuODcyQ2dzTy8xK2UrUEVITzUzTCtnZ0dDd0UvUzFZSy9mMzU1b01NR0NIV0NndjluRnN2akxqL25TbjZYUzZmTHM1Wi9GMmQ2Q0NxL1AxLzc0Ny9MNTM5bnNueUI1cHYzdzM0L0YyWmJQazYvWHZ6Q1lXZCtHQ28rODBpYU12ekNXeDdtcGFaL1BzakNEbUNDR3NBTnBoWHkrQ3BtVEhlYktna0NnWmdDTFlLTFJuK1h5dnhCd2lGQ29jK0xDbkZDY3doQnduOC9uMlhER3hzemxmNy9mekptZkZ1UGoyUUI1aWRMcGo0M0c0dk90VUNhTXVZL1MwaW1Qd2xDNXVkSzhwYy9zN0ptekRhWjVUYi9mWUt6V01PLzE5OS9zNzBDZnp6Q1d5ZC92cjZScUxmQ1hJT3oxendOcG5KL1oyYXlEV2FiU0lBQ01rNXFnaWQveThqQ0RyQUI4aXdDT2JQTDUvSi9Geng1cWhvL0tzbUNqc2hKcms0L0hwUUNUZ09tR0EvbjE4ZzlvajZMSjFJQy8zeUI1a0wvbDdIL00yVUN6eGdDWnM1bk1BQUNabVRPWnpQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQURMQUI4QUFBai9BRFU0R0Vod29BWXRiaHdwWE9qSUFnVVVGU0pLalBpQ29jV0xHRE5xM01peG84ZVBJRU9LSEluUndhS1RLRk11a25ORFlRMEtKQURJbkVrVEFBV1NPSFBxM01tejUwaVRLb011TXBNa1pzMmpObjFtUklRb3dFV21UakVlWXBwQVlRQ21CenBPUlZUMTQxVkVTaTEyM1htb3JFZWdRbE1pVVRFRDZkR2JISm5LblV1MzZVVkZpaExkelp0eGdDSUJDeG5nMVJzWDc2R1BCL0FPUUlTM3NXTytDeDhyQXJzd3dkUkVreGtlTUlBM2FxTFBvRDlIVlpoQXNTUEdrZzA3UXB0MjBaVUlFZGk2cFFsM1krcmJoQmtPM3B1YjRTRzhDQmhpVmtRQTQ5emhDT3JPWmJpZ00ycmN1aDh6L1N5WnNxTURmaHN2Y0hUYnVpTUVuVS9mLzFaMG1QWENFRTAwYkJnREd6YWJRRzFjV0Zob2dYYkgwUGp6RjFjSUdxK0EvUDZKSmh4ZXo0MUgySGpqTWNTWkFHVTE2T0NEV1JYd1lGbVNHYURBQWwwVmtCMEMyVFdueUFJTittVmRBS1k1WXRtRVpXVmxua1VoQ05FZWJGQmNWTjlNdFlXRllHclcvWmFYamdnU0Zwb0FnK1VYMmtLb0lUTGNqWWNkNlZnaUNvQ1htVVhEYlhjQUFaUGhCV0paSWlxRW1nQUZmTFRpUlNhMDF3SkdNOHBVbzFMOS9RV2dtb2xFdFJtQkJ6d0luSU5kV3NTWkFSNFZBQ1I1QkFpWlg1ZDk1cWVRanQ3eHQyZGpBL0FvSFgrS0dCQW9BeDE5YVpFZ1pFUmdRa1psSmhXV1JidHhDdGxDQ2pSV0tIZFBhcVFZaW1WMWhWMWpoNTJJYXAyRFB2L1lGYUVYSFZBZ1g0cUJCaVJsQ2lDeXFpSUIrQWxhQWF6WmtGRVlFY1NRMFFzMHViQ3BwNzBwMUtsQ0hoSzQxNmkrM2FnSXBPS3gyaTEwa1MzcUNLRVNIakthWlg0bDJxVnFqSHBING81SVZwRlNTeGpGRUlkR0tOQTBYMGZLMVRWYWROR1MyaHRqVG81cXJVYlZqdGNWd2FwdDFlKy9kUzN3V1hhUFdjWFVuVXpwbU56RnBlcHBXQUowT1drQVZXdWs1SUJHWTJLVVEwMDFlS1R0cHdEenhoQWl3VmtiS0hXTmhnYXJRcUZPZXgxZWVGSWJnSTZIT2F3Y3hIVWh5R2gxM1EyNlo4RGpUaHZDQmlnZHdZUklkUGd3RXhjZkNSdmFmdERLdkZCV3BJS2xaR3FIamYxWTJ0MFdTdlMzcWZVbW1RSzlPb25BSVdSYmpBakdpT2ovdU9CeXBQcThrSTY5bFhIU0NRMDBNQVJJTEVpd3h3b3k3YnRwc0RqL2gxK0FpWUJkdGlQbFVxakkzUTNtN2NpN2lBQnBRRllKQUNtQTZGR1ROMjYvVU0xTVY5cTBXaFJzc0hrRnF5T1Y1Q1VRcXJRR2NBWTE0UXpac0FIaWlUZnd4QlFjeVdDSEJOQVBza0lGejJyNThwTFJHVnpxUlp3cGtzQzdBeVNRM2FodmUvMVpuUVhvTitqQnpFMkdHWlBrR1hibm5sWTU4cjVVZ3UrUS9QNDlXSUhSRDFLQW5nQWw0QWNzVkc5MG45blRBTlprT2MyeEwxellHaDF3Rk9Ja1JPSFBkZHFpbldRSVE2dXRySTg2MUNtQVlkNjFvd0VOejJjZytNQVM5cWNFSG14a0JETEF3UUNCTUlFREt1UUFxc09JNEtTMVBSNWlDNGQvR1l1Uy85aVdMUXgrYmtKTzB1Q0hEdUVYRGxvTE5SOThuMTlJbGFUd21QQ0N2Y2tBSXhpQmg4VDk0U01qYU53YnZ0Q0lSbUNnSTUxRGxheHVPRDRkd2d5QzE2cFZoNnh5TmtVTUFFTkZQTXdEcmVlNjFsWFJpWm5oSFdtYWdwbkZJT0JkWmVIZDl1NTNFY0hBN0FOYlpBUWcrQ0NTS0tpaGpJMG93WDJ1ZDdEdURTQWpPeXhiSFZQVHV1QVE0RkRFT1J0ZzFtZkVSTlJsT0VwTWp2QllXVEg3NGF3eFoxdkFudGpHU0RvZUtUY3BpQ1FqUEtBUkdtU2tBNWdzNHlZNVNSbThLSUIxNFlJYWdVWXBtYWdGeDM3K0ljQ3NFSENvd2FrbWc3VEU1VUpRU1J3ZU91WS8xUktBQWhJZ3ZqNWljMkNQMlk1Q3RCaEpPR1RrREVUUVNBbVNlZi9HWnltQWlCZjVqT1lXSXBvMHFwRnoxaUVBQWJoMWtjc3NKSDJKNkJMczVOSVZrTkZsTkFmNENpSVl5aFFHSEdKbkd4MkxWV0RWSjgwWjdWOFBFR1lkTXFJSENLQWhJekJJSmd4c1NOT2EycFNtS1kya1Jnd0JBUkZrQkFQSnZNQk5oMHJVb280a3Axdk1pQWdnd0ZSalhnU29tQlNxVWFkSzFhbzZBcW1NdUFnSStzQlVwanFCRUU4TnFsWEhTbGFjQ3BNaFl2Q0NCK2JRVlFnWUlRZ1Q0RUFIRmdMVk1rcFZJNnNTQUFOY0diWGZFQVpJM0NuUVhnZFRBTVpzUnpDK0dvNEJZTlVvaFV6UmxZNEp3SUpFZUJpNUVLWkFxQmxBK3NCeWlFUWtZRUU5d3dzckJlQVVIRzduTndxSUduYytLb0NCMWhTcndoVG1IYnJhaFdULzJqYXFITkZsUmcvQTE5L282SHVpM1JZVDc1YUk4SWtQc3A4RUQ4ME1jQWp4QlkxVURDaU5JdXpuVVE0ZDRwUVpYZTFwcGtNYUpvSUlFWWthQUFKNjYwb0JmQTlkZDF2ZklSU2dsK2JnaVdpLzRZNHVyMGxVMk1ZMmtsbUFRQkZ1eTkrN1p1UTNCa0FBYnprYlAxY3FZSXF1NHl1d0ZJSll2NkRXU0pTSnI3VEVTNERmSmFLeWVnSHdkbHhuV2VGVTlqOENrQmhuRXlHWU8vSW5SM2tSQUZoR0psemlHRUF3cEVxdFVlMTczMkhxSUEzOHZhMS9NL0s5QWJDWHdMK1JMTENtbTJDd2hOZ3E3bE5BOEthekh4aExxemw2bmU2RlQwT1lBbERKdDQ0Z0FIY0pXbGtETE5CK1lOa3I1NjRNWm0rdTk4VXV2ckFpY0lqZ0FYQnB6Y1kxRnVZSE1nQUNSM1NnRURrVzYwWUtjRGNmRStERlB2NU5ZaEpGNUNTQjVaUUJDSUFBa3RPbUQ4bUZ0QXo0VDJRT1lRREFTQm5EbkVPQVlDamRwaEFieWNOVTlpMENBSzJBQUN5MHlHWldnT1VRUVNVU09jS1JxM1V6TkdsS2hRZlkrdGEyQmtNR1VuQ1JQSEJnQ3hNSXRyQ0Z6UUdPRklDOUNpakFBY2FiN1BTZEpnRE9qbWlXbzJJa1YyYTBPSjVOTkpVVElXQ0NGdUFxOXN0eWwwejlhb0Z5N2pNQ0p2ZENDRER1NGlUbkFNZ3V3RjR6cHhBQ2pBYWlDdGhyMmhUUXAzcnJKYUx3ZGkxTkF3SUFPdz09IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAzMDA2LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAzMDA2fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogNDM5LjQ0NSwgInJlY2VpdmUiOiAxNDkuNDIyfSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS42OTVaIiwgInRpbWUiOiA1ODkuNjk5MDAwMDAwMDAwMSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2ltZy9sb2dvX2NvLmdpZiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvbG9nb19jby5naWYifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0OTUsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICIyODAwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiaW1hZ2UvZ2lmIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiNjQxNmFhYTgtYWYwXCIifSwgeyJuYW1lIjogImV4cGlyZXMiLCAidmFsdWUiOiAiRnJpLCAyMyBKdW4gMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImxhc3QtbW9kaWZpZWQiLCAidmFsdWUiOiAiU3VuLCAxOSBNYXIgMjAyMyAwNjoyNDo0MCBHTVQifSwgeyJuYW1lIjogInNlcnZlciIsICJ2YWx1ZSI6ICJuZ2lueCJ9LCB7Im5hbWUiOiAic3RyaWN0LXRyYW5zcG9ydC1zZWN1cml0eSIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDI4MDAsICJtaW1lVHlwZSI6ICJpbWFnZS9naWYiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJSMGxHT0RsaHl3QWZBUGNBQU82SUFKL1o0aENmdURDc3dYREcxTS9zOFNDbXZlLzUrbUMvME4veTlWQzV5NC9TM3EvZjV3Q0FNN1BaUUVDenN3Qm1nSmxtTXdCbW1XYXoyZmJEZi9LbVFQdmh2NW5NNWN6bDhuL016TWJpY0ovUEVMTFo3T1h5K1NDbXBoQ2ZuKy81K2ZuODcyQ2dzTy8xK2UrUEVITzUzTCtnZ0dDd0UvUzFZSy9mMzU1b01NR0NIV0NndjluRnN2akxqL25TbjZYUzZmTHM1Wi9GMmQ2Q0NxL1AxLzc0Ny9MNTM5bnNueUI1cHYzdzM0L0YyWmJQazYvWHZ6Q1lXZCtHQ28rODBpYU12ekNXeDdtcGFaL1BzakNEbUNDR3NBTnBoWHkrQ3BtVEhlYktna0NnWmdDTFlLTFJuK1h5dnhCd2lGQ29jK0xDbkZDY3doQnduOC9uMlhER3hzemxmNy9mekptZkZ1UGoyUUI1aWRMcGo0M0c0dk90VUNhTXVZL1MwaW1Qd2xDNXVkSzhwYy9zN0ptekRhWjVUYi9mWUt6V01PLzE5OS9zNzBDZnp6Q1d5ZC92cjZScUxmQ1hJT3oxendOcG5KL1oyYXlEV2FiU0lBQ01rNXFnaWQveThqQ0RyQUI4aXdDT2JQTDUvSi9Geng1cWhvL0tzbUNqc2hKcms0L0hwUUNUZ09tR0EvbjE4ZzlvajZMSjFJQy8zeUI1a0wvbDdIL00yVUN6eGdDWnM1bk1BQUNabVRPWnpQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQURMQUI4QUFBai9BRFU0R0Vod29BWXRiaHdwWE9qSUFnVVVGU0pLalBpQ29jV0xHRE5xM01peG84ZVBJRU9LSEluUndhS1RLRk11a25ORFlRMEtKQURJbkVrVEFBV1NPSFBxM01tejUwaVRLb011TXBNa1pzMmpObjFtUklRb3dFV21UakVlWXBwQVlRQ21CenBPUlZUMTQxVkVTaTEyM1htb3JFZWdRbE1pVVRFRDZkR2JISm5LblV1MzZVVkZpaExkelp0eGdDSUJDeG5nMVJzWDc2R1BCL0FPUUlTM3NXTytDeDhyQXJzd3dkUkVreGtlTUlBM2FxTFBvRDlIVlpoQXNTUEdrZzA3UXB0MjBaVUlFZGk2cFFsM1krcmJoQmtPM3B1YjRTRzhDQmhpVmtRQTQ5emhDT3JPWmJpZ00ycmN1aDh6L1N5WnNxTURmaHN2Y0hUYnVpTUVuVS9mLzFaMG1QWENFRTAwYkJnREd6YWJRRzFjV0Zob2dYYkgwUGp6RjFjSUdxK0EvUDZKSmh4ZXo0MUgySGpqTWNTWkFHVTE2T0NEV1JYd1lGbVNHYURBQWwwVmtCMEMyVFdueUFJTittVmRBS1k1WXRtRVpXVmxua1VoQ05FZWJGQmNWTjlNdFlXRllHclcvWmFYamdnU0Zwb0FnK1VYMmtLb0lUTGNqWWNkNlZnaUNvQ1htVVhEYlhjQUFaUGhCV0paSWlxRW1nQUZmTFRpUlNhMDF3SkdNOHBVbzFMOS9RV2dtb2xFdFJtQkJ6d0luSU5kV3NTWkFSNFZBQ1I1QkFpWlg1ZDk1cWVRanQ3eHQyZGpBL0FvSFgrS0dCQW9BeDE5YVpFZ1pFUmdRa1psSmhXV1JidHhDdGxDQ2pSV0tIZFBhcVFZaW1WMWhWMWpoNTJJYXAyRFB2L1lGYUVYSFZBZ1g0cUJCaVJsQ2lDeXFpSUIrQWxhQWF6WmtGRVlFY1NRMFFzMHViQ3BwNzBwMUtsQ0hoSzQxNmkrM2FnSXBPS3gyaTEwa1MzcUNLRVNIakthWlg0bDJxVnFqSHBING81SVZwRlNTeGpGRUlkR0tOQTBYMGZLMVRWYWROR1MyaHRqVG81cXJVYlZqdGNWd2FwdDFlKy9kUzN3V1hhUFdjWFVuVXpwbU56RnBlcHBXQUowT1drQVZXdWs1SUJHWTJLVVEwMDFlS1R0cHdEenhoQWl3VmtiS0hXTmhnYXJRcUZPZXgxZWVGSWJnSTZIT2F3Y3hIVWh5R2gxM1EyNlo4RGpUaHZDQmlnZHdZUklkUGd3RXhjZkNSdmFmdERLdkZCV3BJS2xaR3FIamYxWTJ0MFdTdlMzcWZVbW1RSzlPb25BSVdSYmpBakdpT2ovdU9CeXBQcThrSTY5bFhIU0NRMDBNQVJJTEVpd3h3b3k3YnRwc0RqL2gxK0FpWUJkdGlQbFVxakkzUTNtN2NpN2lBQnBRRllKQUNtQTZGR1ROMjYvVU0xTVY5cTBXaFJzc0hrRnF5T1Y1Q1VRcXJRR2NBWTE0UXpac0FIaWlUZnd4QlFjeVdDSEJOQVBza0lGejJyNThwTFJHVnpxUlp3cGtzQzdBeVNRM2FodmUvMVpuUVhvTitqQnpFMkdHWlBrR1hibm5sWTU4cjVVZ3UrUS9QNDlXSUhSRDFLQW5nQWw0QWNzVkc5MG45blRBTlprT2MyeEwxellHaDF3Rk9Ja1JPSFBkZHFpbldRSVE2dXRySTg2MUNtQVlkNjFvd0VOejJjZytNQVM5cWNFSG14a0JETEF3UUNCTUlFREt1UUFxc09JNEtTMVBSNWlDNGQvR1l1Uy85aVdMUXgrYmtKTzB1Q0hEdUVYRGxvTE5SOThuMTlJbGFUd21QQ0N2Y2tBSXhpQmg4VDk0U01qYU53YnZ0Q0lSbUNnSTUxRGxheHVPRDRkd2d5QzE2cFZoNnh5TmtVTUFFTkZQTXdEcmVlNjFsWFJpWm5oSFdtYWdwbkZJT0JkWmVIZDl1NTNFY0hBN0FOYlpBUWcrQ0NTS0tpaGpJMG93WDJ1ZDdEdURTQWpPeXhiSFZQVHV1QVE0RkRFT1J0ZzFtZkVSTlJsT0VwTWp2QllXVEg3NGF3eFoxdkFudGpHU0RvZUtUY3BpQ1FqUEtBUkdtU2tBNWdzNHlZNVNSbThLSUIxNFlJYWdVWXBtYWdGeDM3K0ljQ3NFSENvd2FrbWc3VEU1VUpRU1J3ZU91WS8xUktBQWhJZ3ZqNWljMkNQMlk1Q3RCaEpPR1RrREVUUVNBbVNlZi9HWnltQWlCZjVqT1lXSXBvMHFwRnoxaUVBQWJoMWtjc3NKSDJKNkJMczVOSVZrTkZsTkFmNENpSVl5aFFHSEdKbkd4MkxWV0RWSjgwWjdWOFBFR1lkTXFJSENLQWhJekJJSmd4c1NOT2EycFNtS1kya1Jnd0JBUkZrQkFQSnZNQk5oMHJVb280a3Axdk1pQWdnd0ZSalhnU29tQlNxVWFkSzFhbzZBcW1NdUFnSStzQlVwanFCRUU4TnFsWEhTbGFjQ3BNaFl2Q0NCK2JRVlFnWUlRZ1Q0RUFIRmdMVk1rcFZJNnNTQUFOY0diWGZFQVpJM0NuUVhnZFRBTVpzUnpDK0dvNEJZTlVvaFV6UmxZNEp3SUpFZUJpNUVLWkFxQmxBK3NCeWlFUWtZRUU5d3dzckJlQVVIRzduTndxSUduYytLb0NCMWhTcndoVG1IYnJhaFdULzJqYXFITkZsUmcvQTE5L282SHVpM1JZVDc1YUk4SWtQc3A4RUQ4ME1jQWp4QlkxVURDaU5JdXpuVVE0ZDRwUVpYZTFwcGtNYUpvSUlFWWthQUFKNjYwb0JmQTlkZDF2ZklSU2dsK2JnaVdpLzRZNHVyMGxVMk1ZMmtsbUFRQkZ1eTkrN1p1UTNCa0FBYnprYlAxY3FZSXF1NHl1d0ZJSll2NkRXU0pTSnI3VEVTNERmSmFLeWVnSHdkbHhuV2VGVTlqOENrQmhuRXlHWU8vSW5SM2tSQUZoR0psemlHRUF3cEVxdFVlMTczMkhxSUEzOHZhMS9NL0s5QWJDWHdMK1JMTENtbTJDd2hOZ3E3bE5BOEthekh4aExxemw2bmU2RlQwT1lBbERKdDQ0Z0FIY0pXbGtETE5CK1lOa3I1NjRNWm0rdTk4VXV2ckFpY0lqZ0FYQnB6Y1kxRnVZSE1nQUNSM1NnRURrVzYwWUtjRGNmRStERlB2NU5ZaEpGNUNTQjVaUUJDSUFBa3RPbUQ4bUZ0QXo0VDJRT1lRREFTQm5EbkVPQVlDamRwaEFieWNOVTlpMENBSzJBQUN5MHlHWldnT1VRUVNVU09jS1JxM1V6TkdsS2hRZlkrdGEyQmtNR1VuQ1JQSEJnQ3hNSXRyQ0Z6UUdPRklDOUNpakFBY2FiN1BTZEpnRE9qbWlXbzJJa1YyYTBPSjVOTkpVVElXQ0NGdUFxOXN0eWwwejlhb0Z5N2pNQ0p2ZENDRER1NGlUbkFNZ3V3RjR6cHhBQ2pBYWlDdGhyMmhUUXAzcnJKYUx3ZGkxTkF3SUFPdz09IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAzMDA2LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAzMDA2fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogNDM5LjkzNywgInJlY2VpdmUiOiAxNDkuNzYyfSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS42OTVaIiwgInRpbWUiOiA1OTAuNTE0LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvaW1nL2ljb19hbGVydC5naWYiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJsYW9nYW5ndGVhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvaW1nL2ljb19hbGVydC5naWYifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY2xpZW50L2xfaG9tZV9wLnBocCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0OTksICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICI2NDIifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YjJhNy0yODJcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE0OjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjU4OjQ3IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogNjQyLCAibWltZVR5cGUiOiAiaW1hZ2UvZ2lmIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiUjBsR09EbGhHUUFoQU9ZQUFMRTRKYkExSWE0eUhxOHpIN0k2SjYwdkc2NHlIZnoyOWJFNEpLODBJSzR4SGZMZTI2NHdIUFhsNHJBM0krZkJ1N0k3SitDeHFkaWJrdUN0cGVmQXVzcDRhc3g3YnM2RWVPQ3dxZmpyNmRxZ2w4SmxWZTdTenZyeDcrbkd3Zm51N2RhWWp2bnc3dXJKeFBibjVQbnc3NjB1R3ZudDdMWkdNOW1nbGEwd0c3UkFMZWE4dGNadFh0K3VwcTgwSCtySnhlSzByY2gyYU5xam1idFJQK2ZBdWJFNUpmYm41ZXpOeUx4VFF2djA4OVdUaUs0ekg2MHVHZTdUejlTUWhjdDViUEhhMXJNK0svLy8vN0EySWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBQVpBQ0VBQUFmZmdFS0NnNFNGaG9lSWlZcUxqSTJKUVVPUmtwT1VsWktRbGtNQm01dVprWmlWRGdTam93aWVFSllKSnhrSHJTUXhQSm1tbGdFSGd6a2JLWmtPbVFGQWd5WXpCcDY5SG9NZk9NT1dvSlFCTDRNMk5RR1p6Sk1KTUlNTkpaN1ZrZ01vZ3lNRjNKa0RNb00zRE9TV0F6cURLK3JVbVFJVmd6VHh5L00vZ3hNSzY1VUNMQXdDNFUrZXBSMHNGaWk4SU9DZkpRTUtERXh6T0NtQWhBY1VIclFvbUk4V2gwRWh4aG1zRkVCRU5wRWRTZllZMUFGbHBXNlNmRVRBRUVGRHc1SEVjcUxLbEdDQWl3RUppS2xBQUtDbzBhTklBY3lhNUtpcDA2ZFFvd29KQkFBNyIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogODQ4LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA4NDh9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0NDAuNDA4LCAicmVjZWl2ZSI6IDE1MC4xMDZ9LCAicGFnZXJlZiI6ICJwYWdlQDdkZDllNzNlYjZiYjE3MjMxYTVjYTIwMGYzNDg3ODdmIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cubGFvZ2FuZ3RlYS5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxODYsICJ2YWxpZFRvIjogMTY5MjY2OTE4NX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE0OjE3OjMxLjY5NloiLCAidGltZSI6IDU5MS4zMzcsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tL2liZy9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogImltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKiwqLyo7cT0wLjgifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJpbWFnZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDUxNywgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXB0LXJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTI1OTIwMDAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjc4In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiaW1hZ2UvZ2lmIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiNjQxNmFhYTMtNGVcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE0OjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjI0OjM1IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogNzgsICJtaW1lVHlwZSI6ICJpbWFnZS9naWYiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJSMGxHT0RsaEVBQVFBSUFCQUR4S25BQUFBQ0g1QkFFQUFBRUFMQUFBQUFBUUFCQUFBQUlsakkrcHk2MEFvd1NKTW50dzBIb2ptRlhiWkhUVUJKcWpWSW9acG9ieS9GUW82K1I2QVFBNyIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMjgyLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyODJ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0NDAuNzcsICJyZWNlaXZlIjogMTUwLjU2N30sICJwYWdlcmVmIjogInBhZ2VAN2RkOWU3M2ViNmJiMTcyMzFhNWNhMjAwZjM0ODc4N2YiLCAic2VydmVySVBBZGRyZXNzIjogIjIwNC40NC45My4xNDEiLCAiX3NlcnZlclBvcnQiOiA0NDMsICJfc2VjdXJpdHlEZXRhaWxzIjogeyJwcm90b2NvbCI6ICJUTFMgMS4zIiwgInN1YmplY3ROYW1lIjogInd3dy5sYW9nYW5ndGVhLmNvbSIsICJpc3N1ZXIiOiAiUjMiLCAidmFsaWRGcm9tIjogMTY4NDg5MzE4NiwgInZhbGlkVG8iOiAxNjkyNjY5MTg1fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjRUMTQ6MTc6MzEuNjk2WiIsICJ0aW1lIjogNTkyLjEzNzk5OTk5OTk5OTksICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tL2liZy9pbWcvaWNvX3N1YmhlYWRfMS5naWYiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJsYW9nYW5ndGVhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvaW1nL2ljb19zdWJoZWFkXzEuZ2lmIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNTA3LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MjU5MjAwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiNDMifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YWFiNS0yYlwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIkZyaSwgMjMgSnVuIDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlN1biwgMTkgTWFyIDIwMjMgMDY6MjQ6NTMgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA0MywgIm1pbWVUeXBlIjogImltYWdlL2dpZiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIlIwbEdPRGxoQVFBQkFJQUFBQUFBQUFBQUFDSDVCQUVBQUFBQUxBQUFBQUFCQUFFQUFBSUNSQUVBT3c9PSIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMjQ3LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyNDd9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0NDEuMTUyLCAicmVjZWl2ZSI6IDE1MC45ODZ9LCAicGFnZXJlZiI6ICJwYWdlQDdkZDllNzNlYjZiYjE3MjMxYTVjYTIwMGYzNDg3ODdmIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cubGFvZ2FuZ3RlYS5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxODYsICJ2YWxpZFRvIjogMTY5MjY2OTE4NX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE0OjE3OjMxLjY5NloiLCAidGltZSI6IDU3NC4xNTEwMDAwMDAwMDAxLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvanMvanF1ZXJ5LTMuNS4xLmpzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2pzL2pxdWVyeS0zLjUuMS5qcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDQ0MSwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTQzMjAwIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI1ZWYxOWQwMS00NjM4ZVwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIlRodSwgMjUgTWF5IDIwMjMgMDI6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlR1ZSwgMjMgSnVuIDIwMjAgMDY6MTE6MTMgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMjg3NjMwLCAibWltZVR5cGUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDE4ODY2MywgInRleHQiOiAiLyohXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYzLjUuMVxuICogaHR0cHM6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjAtMDUtMDRUMjI6NDlaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGZsYXQgPSBhcnIuZmxhdCA/IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7XG59IDogZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7XG59O1xuXG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cbiAgICAgIC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcbiAgICAgIC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuICAgICAgLy8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIjtcbiAgfTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuNS4xXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5mdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy41XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDIwLTAzLTE0XG4gKi9cbiggZnVuY3Rpb24oIHdpbmRvdyApIHtcbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICgge30gKS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hOYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbIGkgXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufFwiICtcblx0XHRcImlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFxbXlxcXFxyXFxcXG5cXFxcZl18W1xcXFx3LV18W15cXDAtXFxcXHg3Zl0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdXG5cdFx0Ly8gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmh0bWwgPSAvSFRNTCQvaSxcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRyZXR1cm4gbm9uSGV4ID9cblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRub25IZXggOlxuXG5cdFx0XHQvLyBSZXBsYWNlIGEgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVuY29kZWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0XHQvLyBzdXJyb2dhdGUgcGFpclxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArXG5cdFx0XHRcdGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZpZWxkc2V0XCI7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKCB0YXJnZXRbIGorKyBdID0gZWxzWyBpKysgXSApICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoIGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KCBub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJjb21iaW5hdG9ycy50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICE9PSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdCggXCJ8XCIgKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFyclsgaSBdIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLm5leHRTaWJsaW5nICkgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKCBuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdC8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZSBsb2FkaW5nIGlmcmFtZXNcblx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzQ4MzNcblx0cmV0dXJuICFyaHRtbC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDExKywgRWRnZSAxMiAtIDE4KywgQ2hyb21lIDw9MTYgLSAyNSBvbmx5LCBGaXJlZm94IDw9My42IC0gMzEgb25seSxcblx0Ly8gU2FmYXJpIDQgLSA1IG9ubHksIE9wZXJhIDw9MTEuNiAtIDEyLnggb25seVxuXHQvLyBJRS9FZGdlICYgb2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0Ly8gU3VwcG9ydDogU2FmYXJpIDYuMCBvbmx5XG5cdC8vIFNhZmFyaSA2LjAgc3VwcG9ydHMgOnNjb3BlIGJ1dCBpdCdzIGFuIGFsaWFzIG9mIDpyb290IHRoZXJlLlxuXHRzdXBwb3J0LnNjb3BlID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cdFx0cmV0dXJuIHR5cGVvZiBlbC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHQhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6c2NvcGUgZmllbGRzZXQgZGl2XCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NOYW1lXCIgKTtcblx0fSApO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCBcIlwiICkgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcIipcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kWyBcIlRBR1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFsgXCJDTEFTU1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKCBzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApICkgKSB7XG5cblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdHZhciBpbnB1dDtcblxuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHRcdC8vIEFkZGluZyBhIHRlbXBvcmFyeSBhdHRyaWJ1dGUgdG8gdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdvcmtzXG5cdFx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6Y2hlY2tlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD0zLjYgLSA1IG9ubHlcblx0XHRcdC8vIE9sZCBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgb24gYSBiYWRseS1lc2NhcGVkIGlkZW50aWZpZXIuXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlxcXFxcXGZcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiW1xcXFxyXFxcXG5cXFxcZl1cIiApO1xuXHRcdH0gKTtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9ZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZW5hYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogT3BlcmEgMTAgLSAxMSBvbmx5XG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCIqLDp4XCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIiwuKjpcIiApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKCBtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IgKSApICkgKSB7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCBcInxcIiApICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpICk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBiID0gYi5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCAhc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlICkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYSA9PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGEgKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBiID09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0cmV0dXJuIGEgPT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFsgaSBdID09PSBicFsgaSBdICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblxuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwWyBpIF0sIGJwWyBpIF0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0YXBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFsgaSBdID09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5TaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKCBzZWwgKyBcIlwiICkucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAoIG5vZGUgPSBlbGVtWyBpKysgXSApICkge1xuXG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblxuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8XG5cdFx0XHRcdG1hdGNoWyA1IF0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDIgXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFsgMyBdID0gXCIgXCIgKyBtYXRjaFsgMyBdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFsgNCBdID0gKyggbWF0Y2hbIDQgXSA/XG5cdFx0XHRcdFx0bWF0Y2hbIDUgXSArICggbWF0Y2hbIDYgXSB8fCAxICkgOlxuXHRcdFx0XHRcdDIgKiAoIG1hdGNoWyAzIF0gPT09IFwiZXZlblwiIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKSApO1xuXHRcdFx0XHRtYXRjaFsgNSBdID0gKyggKCBtYXRjaFsgNyBdICsgbWF0Y2hbIDggXSApIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbIFwiQ0hJTERcIiBdLnRlc3QoIG1hdGNoWyAwIF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdCggZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkgKSAmJlxuXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoIGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCApICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFx0XHRcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmIGNsYXNzQ2FjaGUoXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8XG5cdFx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblxuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpIF0gPSAhKCBtYXRjaGVzWyBpIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KCBsYW5nIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiZcblx0XHRcdFx0KCAhZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSApICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zWyBcImVtcHR5XCIgXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoICggYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICkgPT0gbnVsbCB8fFxuXHRcdFx0XHRcdGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9ICksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zWyBcIm50aFwiIF0gPSBFeHByLnBzZXVkb3NbIFwiZXFcIiBdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIHNraXAgPT09IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0ZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAoIG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKFxuXHRcdFx0XHRzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCxcblx0XHRcdFx0W11cblx0XHRcdCksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwWyBpIF0gKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkWyB0ZW1wIF0gPSAhKCByZXN1bHRzWyB0ZW1wIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAwIF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsgXCIgXCIgXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGkgXS50eXBlIF0gKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zWyBpIF0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbIGkgXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGogXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0dG9rZW5zXG5cdFx0XHRcdFx0XHQuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIFwiVEFHXCIgXSggXCIqXCIsIG91dGVybW9zdCApLFxuXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoIGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xICksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoXG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApXG5cdFx0KTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKCBzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yICkgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKCB0b2tlbiA9IHRva2Vuc1sgMCBdICkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kWyBcIklEXCIgXSggdG9rZW4ubWF0Y2hlc1sgMCBdXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLCBjb250ZXh0ICkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwclsgXCJuZWVkc0NvbnRleHRcIiBdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zWyBpIF07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKCB0eXBlID0gdG9rZW4udHlwZSApIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoIGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSApICkge1xuXG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoICggc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWyAwIF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpICkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIFwiXCIgKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCBcIlwiICkgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwiaHJlZlwiICkgPT09IFwiI1wiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBfbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKCBcImRpc2FibGVkXCIgKSA9PSBudWxsO1xufSApICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSApO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59ICkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7XG5cblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cblxuXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcblxuICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblxufTtcbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgbWFzdGVyIERlZmVycmVkXG5cdFx0XHRtYXN0ZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0bWFzdGVyLnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBtYXN0ZXIuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVzb2x2ZSwgbWFzdGVyLnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIG1hc3Rlci5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gbWFzdGVyLnRoZW4oKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50c1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggcmVzb2x2ZVZhbHVlc1sgaSBdLCB1cGRhdGVGdW5jKCBpICksIG1hc3Rlci5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFzdGVyLnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBfYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9IGVsZW0ubm9kZVR5cGUgJiZcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdC8vIElFIDw9OSByZXBsYWNlcyA8b3B0aW9uPiB0YWdzIHdpdGggdGhlaXIgY29udGVudHMgd2hlbiBpbnNlcnRlZCBvdXRzaWRlIG9mXG5cdC8vIHRoZSBzZWxlY3QgZWxlbWVudC5cblx0ZGl2LmlubmVySFRNTCA9IFwiPG9wdGlvbj48L29wdGlvbj5cIjtcblx0c3VwcG9ydC5vcHRpb24gPSAhIWRpdi5sYXN0Q2hpbGQ7XG59ICkoKTtcblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5pZiAoICFzdXBwb3J0Lm9wdGlvbiApIHtcblx0d3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uID0gWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdO1xufVxuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbnZhclxuXHRya2V5RXZlbnQgPSAvXmtleS8sXG5cdHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLFxuXHRydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcbi8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzLCBleGNlcHQgd2hlbiB0aGV5IGFyZSBuby1vcC5cbi8vIFNvIGV4cGVjdCBmb2N1cyB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgYWN0aXZlLFxuLy8gYW5kIGJsdXIgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgYWxyZWFkeSBhY3RpdmUuXG4vLyAoZm9jdXMgYW5kIGJsdXIgYXJlIGFsd2F5cyBzeW5jaHJvbm91cyBpbiBvdGhlciBzdXBwb3J0ZWQgYnJvd3NlcnMsXG4vLyB0aGlzIGp1c3QgZGVmaW5lcyB3aGVuIHdlIGNhbiBjb3VudCBvbiBpdCkuXG5mdW5jdGlvbiBleHBlY3RTeW5jKCBlbGVtLCB0eXBlICkge1xuXHRyZXR1cm4gKCBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICkgPT09ICggdHlwZSA9PT0gXCJmb2N1c1wiICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XG5cdHZhciBvcmlnRm4sIHR5cGU7XG5cblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxuXHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblxuXHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggb25lID09PSAxICkge1xuXHRcdG9yaWdGbiA9IGZuO1xuXHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cblx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGblxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHR9XG5cdHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0fSApO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLlxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cbiAqL1xualF1ZXJ5LmV2ZW50ID0ge1xuXG5cdGdsb2JhbDoge30sXG5cblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xuXG5cdFx0dmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gT25seSBhdHRhY2ggZXZlbnRzIHRvIG9iamVjdHMgdGhhdCBhY2NlcHQgZGF0YVxuXHRcdGlmICggIWFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lXG5cdFx0Ly8gRXZhbHVhdGUgYWdhaW5zdCBkb2N1bWVudEVsZW1lbnQgaW4gY2FzZSBlbGVtIGlzIGEgbm9uLWVsZW1lbnQgbm9kZSAoZS5nLiwgZG9jdW1lbnQpXG5cdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciApO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSBPYmplY3QuY3JlYXRlKCBudWxsICk7XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsXG5cdFx0XHRhcmdzID0gbmV3IEFycmF5KCBhcmd1bWVudHMubGVuZ3RoICksXG5cblx0XHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApLFxuXG5cdFx0XHRoYW5kbGVycyA9IChcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXG5cdHdoaWNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0dmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcblxuXHRcdC8vIEFkZCB3aGljaCBmb3Iga2V5IGV2ZW50c1xuXHRcdGlmICggZXZlbnQud2hpY2ggPT0gbnVsbCAmJiBya2V5RXZlbnQudGVzdCggZXZlbnQudHlwZSApICkge1xuXHRcdFx0cmV0dXJuIGV2ZW50LmNoYXJDb2RlICE9IG51bGwgPyBldmVudC5jaGFyQ29kZSA6IGV2ZW50LmtleUNvZGU7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHdoaWNoIGZvciBjbGljazogMSA9PT0gbGVmdDsgMiA9PT0gbWlkZGxlOyAzID09PSByaWdodFxuXHRcdGlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICYmIHJtb3VzZUV2ZW50LnRlc3QoIGV2ZW50LnR5cGUgKSApIHtcblx0XHRcdGlmICggYnV0dG9uICYgMSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgMiApIHtcblx0XHRcdFx0cmV0dXJuIDM7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggYnV0dG9uICYgNCApIHtcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC53aGljaDtcblx0fVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSA9IHtcblxuXHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCBleHBlY3RTeW5jICk7XG5cblx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuZ2V0KCBzcmMgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGVzdCwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGZsYXQoIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweFwiO1xuXHRcdFx0XHR0ci5zdHlsZS5oZWlnaHQgPSBcIjFweFwiO1xuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmhlaWdodCA9IFwiOXB4XCI7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50XG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0YWJsZSApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ciApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ckNoaWxkICk7XG5cblx0XHRcdFx0dHJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCB0ciApO1xuXHRcdFx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9IHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCApID4gMztcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0XHRcdC8vIE9ubHkgcmVhZCBzdHlsZXMucG9zaXRpb24gaWYgdGhlIHRlc3QgaGFzIGEgY2hhbmNlIHRvIGZhaWxcblx0XHRcdFx0Ly8gdG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdy5cblx0XHRcdFx0c2Nyb2xsYm94U2l6ZUJ1Z2d5ID0gIXN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpICYmXG5cdFx0XHRcdFx0c3R5bGVzLnBvc2l0aW9uID09PSBcImFic29sdXRlXCIsXG5cblx0XHRcdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtMzk5MSlcblx0XHRcdFx0Ym94U2l6aW5nTmVlZGVkID0gc2Nyb2xsYm94U2l6ZUJ1Z2d5IHx8IGV4dHJhLFxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgP1xuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRcdGlzQm9yZGVyQm94LFxuXHRcdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0MDtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdW5yZWxpYWJsZSBib3JkZXItYm94IGRpbWVuc2lvbnMgYnkgY29tcGFyaW5nIG9mZnNldCogdG8gY29tcHV0ZWQgYW5kXG5cdFx0XHQvLyBmYWtpbmcgYSBjb250ZW50LWJveCB0byBnZXQgYm9yZGVyIGFuZCBwYWRkaW5nIChnaC0zNjk5KVxuXHRcdFx0aWYgKCBpc0JvcmRlckJveCAmJiBzY3JvbGxib3hTaXplQnVnZ3kgKSB7XG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcblx0XHRcdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0XHRcdHBhcnNlRmxvYXQoIHN0eWxlc1sgZGltZW5zaW9uIF0gKSAtXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXG5cdFx0XHRcdFx0MC41XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdFx0KVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbDtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHhtbCA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdGlmICggIXhtbCB8fCB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgZGF0YSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKVxuXHRcdC5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9IClcblx0XHQubWFwKCBmdW5jdGlvbiggX2ksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cdG9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0XG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiYgalF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSApIHtcblx0XHRcdFx0cy5jb252ZXJ0ZXJzWyBcInRleHQgc2NyaXB0XCIgXSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0dmFyIGk7XG5cdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdGlmICggaS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiICkge1xuXHRcdFx0cy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8IFwiXCI7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucywgZG9jICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMsIGRvYyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlLmd1aWQrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggdHlwZW9mIHByb3BzLnRvcCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0cHJvcHMudG9wICs9IFwicHhcIjtcblx0XHRcdH1cblx0XHRcdGlmICggdHlwZW9mIHByb3BzLmxlZnQgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHByb3BzLmxlZnQgKz0gXCJweFwiO1xuXHRcdFx0fVxuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHsgcGFkZGluZzogXCJpbm5lclwiICsgbmFtZSwgY29udGVudDogdHlwZSwgXCJcIjogXCJvdXRlclwiICsgbmFtZSB9LFxuXHRcdGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goICggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG4vLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1BcbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxualF1ZXJ5LnRyaW0gPSBmdW5jdGlvbiggdGV4dCApIHtcblx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XCJcIiA6XG5cdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIlwiICk7XG59O1xuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogOTg5NjcsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDk4OTY3fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMjg1LjAzOSwgInJlY2VpdmUiOiAyODkuMTEyfSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS42OTZaIiwgInRpbWUiOiA1OTQuNTk5LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvanMvdnVlLmpzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2pzL3Z1ZS5qcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInNjcmlwdCJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDQyMywgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTQzMjAwIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI2MDg5NDMyZS01Mzg4MlwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIlRodSwgMjUgTWF5IDIwMjMgMDI6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMjggQXByIDIwMjEgMTE6MTI6NDYgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogMzQyMTQ2LCAibWltZVR5cGUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDIzNTU3MiwgInRleHQiOiAiLyohXG4gKiBWdWUuanMgdjIuNi4xMVxuICogKGMpIDIwMTQtMjAxOSBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlZ1ZSA9IGZhY3RvcnkoKSk7XG59KHRoaXMsIGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qICAqL1xuXG4gIHZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4gIC8vIFRoZXNlIGhlbHBlcnMgcHJvZHVjZSBiZXR0ZXIgVk0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuICAvLyBleHBsaWNpdG5lc3MgYW5kIGZ1bmN0aW9uIGlubGluaW5nLlxuICBmdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gICAgcmV0dXJuIHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsXG4gIH1cblxuICBmdW5jdGlvbiBpc0RlZiAodikge1xuICAgIHJldHVybiB2ICE9PSB1bmRlZmluZWQgJiYgdiAhPT0gbnVsbFxuICB9XG5cbiAgZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gICAgcmV0dXJuIHYgPT09IHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgICByZXR1cm4gdiA9PT0gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB2YWx1ZSBpcyBwcmltaXRpdmUuXG4gICAqL1xuICBmdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fFxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnIHx8XG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAgICogT2JqZWN0cyBmcm9tIHByaW1pdGl2ZSB2YWx1ZXMgd2hlbiB3ZSBrbm93IHRoZSB2YWx1ZVxuICAgKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gICAqL1xuICBmdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAgICovXG4gIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gIGZ1bmN0aW9uIHRvUmF3VHlwZSAodmFsdWUpIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAgICogZm9yIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICovXG4gIGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICAgIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xuICB9XG5cbiAgZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodikgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdmFsIGlzIGEgdmFsaWQgYXJyYXkgaW5kZXguXG4gICAqL1xuICBmdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gICAgdmFyIG4gPSBwYXJzZUZsb2F0KFN0cmluZyh2YWwpKTtcbiAgICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKVxuICB9XG5cbiAgZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaXNEZWYodmFsKSAmJlxuICAgICAgdHlwZW9mIHZhbC50aGVuID09PSAnZnVuY3Rpb24nICYmXG4gICAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZyB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgKi9cbiAgZnVuY3Rpb24gdG9TdHJpbmcgKHZhbCkge1xuICAgIHJldHVybiB2YWwgPT0gbnVsbFxuICAgICAgPyAnJ1xuICAgICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWwsIG51bGwsIDIpXG4gICAgICAgIDogU3RyaW5nKHZhbClcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGFuIGlucHV0IHZhbHVlIHRvIGEgbnVtYmVyIGZvciBwZXJzaXN0ZW5jZS5cbiAgICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gICAqL1xuICBmdW5jdGlvbiB0b051bWJlciAodmFsKSB7XG4gICAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gICAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICAgKiBpcyBpbiB0aGF0IG1hcC5cbiAgICovXG4gIGZ1bmN0aW9uIG1ha2VNYXAgKFxuICAgIHN0cixcbiAgICBleHBlY3RzTG93ZXJDYXNlXG4gICkge1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBtYXBbbGlzdFtpXV0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgICAgPyBmdW5jdGlvbiAodmFsKSB7IHJldHVybiBtYXBbdmFsLnRvTG93ZXJDYXNlKCldOyB9XG4gICAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gICAqL1xuICB2YXIgaXNCdWlsdEluVGFnID0gbWFrZU1hcCgnc2xvdCxjb21wb25lbnQnLCB0cnVlKTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuICAgKi9cbiAgdmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlIChhcnIsIGl0ZW0pIHtcbiAgICBpZiAoYXJyLmxlbmd0aCkge1xuICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICByZXR1cm4gYXJyLnNwbGljZShpbmRleCwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhbiBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eS5cbiAgICovXG4gIHZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIGZ1bmN0aW9uIGhhc093biAob2JqLCBrZXkpIHtcbiAgICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBjYWNoZWQgKGZuKSB7XG4gICAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICAgIHZhciBoaXQgPSBjYWNoZVtzdHJdO1xuICAgICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICAgKi9cbiAgdmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG4gIHZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKGNhbWVsaXplUkUsIGZ1bmN0aW9uIChfLCBjKSB7IHJldHVybiBjID8gYy50b1VwcGVyQ2FzZSgpIDogJyc7IH0pXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBDYXBpdGFsaXplIGEgc3RyaW5nLlxuICAgKi9cbiAgdmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSlcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEh5cGhlbmF0ZSBhIGNhbWVsQ2FzZSBzdHJpbmcuXG4gICAqL1xuICB2YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xuICB2YXIgaHlwaGVuYXRlID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBTaW1wbGUgYmluZCBwb2x5ZmlsbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IHN1cHBvcnQgaXQsXG4gICAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICAgKiBzaW5jZSBuYXRpdmUgYmluZCBpcyBub3cgcGVyZm9ybWFudCBlbm91Z2ggaW4gbW9zdCBicm93c2Vycy5cbiAgICogQnV0IHJlbW92aW5nIGl0IHdvdWxkIG1lYW4gYnJlYWtpbmcgY29kZSB0aGF0IHdhcyBhYmxlIHRvIHJ1biBpblxuICAgKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZnVuY3Rpb24gcG9seWZpbGxCaW5kIChmbiwgY3R4KSB7XG4gICAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgICAgdmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGxcbiAgICAgICAgPyBsID4gMVxuICAgICAgICAgID8gZm4uYXBwbHkoY3R4LCBhcmd1bWVudHMpXG4gICAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgICAgOiBmbi5jYWxsKGN0eClcbiAgICB9XG5cbiAgICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gICAgcmV0dXJuIGJvdW5kRm5cbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdGl2ZUJpbmQgKGZuLCBjdHgpIHtcbiAgICByZXR1cm4gZm4uYmluZChjdHgpXG4gIH1cblxuICB2YXIgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gICAgPyBuYXRpdmVCaW5kXG4gICAgOiBwb2x5ZmlsbEJpbmQ7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYW4gQXJyYXktbGlrZSBvYmplY3QgdG8gYSByZWFsIEFycmF5LlxuICAgKi9cbiAgZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgICBzdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgdmFyIGkgPSBsaXN0Lmxlbmd0aCAtIHN0YXJ0O1xuICAgIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcmV0W2ldID0gbGlzdFtpICsgc3RhcnRdO1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICAvKipcbiAgICogTWl4IHByb3BlcnRpZXMgaW50byB0YXJnZXQgb2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICAgIHRvW2tleV0gPSBfZnJvbVtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gdG9cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBhbiBBcnJheSBvZiBPYmplY3RzIGludG8gYSBzaW5nbGUgT2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFycltpXSkge1xuICAgICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtIG5vIG9wZXJhdGlvbi5cbiAgICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gICAqIHdpdGggLi4ucmVzdCAoaHR0cHM6Ly9mbG93Lm9yZy9ibG9nLzIwMTcvMDUvMDcvU3RyaWN0LUZ1bmN0aW9uLUNhbGwtQXJpdHkvKS5cbiAgICovXG4gIGZ1bmN0aW9uIG5vb3AgKGEsIGIsIGMpIHt9XG5cbiAgLyoqXG4gICAqIEFsd2F5cyByZXR1cm4gZmFsc2UuXG4gICAqL1xuICB2YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbiAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNhbWUgdmFsdWUuXG4gICAqL1xuICB2YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBzdHJpbmcgY29udGFpbmluZyBzdGF0aWMga2V5cyBmcm9tIGNvbXBpbGVyIG1vZHVsZXMuXG4gICAqL1xuICBmdW5jdGlvbiBnZW5TdGF0aWNLZXlzIChtb2R1bGVzKSB7XG4gICAgcmV0dXJuIG1vZHVsZXMucmVkdWNlKGZ1bmN0aW9uIChrZXlzLCBtKSB7XG4gICAgICByZXR1cm4ga2V5cy5jb25jYXQobS5zdGF0aWNLZXlzIHx8IFtdKVxuICAgIH0sIFtdKS5qb2luKCcsJylcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAgICogaWYgdGhleSBhcmUgcGxhaW4gb2JqZWN0cywgZG8gdGhleSBoYXZlIHRoZSBzYW1lIHNoYXBlP1xuICAgKi9cbiAgZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICAgIGlmIChhID09PSBiKSB7IHJldHVybiB0cnVlIH1cbiAgICB2YXIgaXNPYmplY3RBID0gaXNPYmplY3QoYSk7XG4gICAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICAgIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgICB2YXIgaXNBcnJheUIgPSBBcnJheS5pc0FycmF5KGIpO1xuICAgICAgICBpZiAoaXNBcnJheUEgJiYgaXNBcnJheUIpIHtcbiAgICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGUsIGJbaV0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIHJldHVybiBhLmdldFRpbWUoKSA9PT0gYi5nZXRUaW1lKClcbiAgICAgICAgfSBlbHNlIGlmICghaXNBcnJheUEgJiYgIWlzQXJyYXlCKSB7XG4gICAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgICAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMoYik7XG4gICAgICAgICAgcmV0dXJuIGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc09iamVjdEEgJiYgIWlzT2JqZWN0Qikge1xuICAgICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZpcnN0IGluZGV4IGF0IHdoaWNoIGEgbG9vc2VseSBlcXVhbCB2YWx1ZSBjYW4gYmVcbiAgICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAgICogY29udGFpbiBhbiBvYmplY3Qgb2YgdGhlIHNhbWUgc2hhcGUpLCBvciAtMSBpZiBpdCBpcyBub3QgcHJlc2VudC5cbiAgICovXG4gIGZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGxvb3NlRXF1YWwoYXJyW2ldLCB2YWwpKSB7IHJldHVybiBpIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAgICovXG4gIGZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gICAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBTU1JfQVRUUiA9ICdkYXRhLXNlcnZlci1yZW5kZXJlZCc7XG5cbiAgdmFyIEFTU0VUX1RZUEVTID0gW1xuICAgICdjb21wb25lbnQnLFxuICAgICdkaXJlY3RpdmUnLFxuICAgICdmaWx0ZXInXG4gIF07XG5cbiAgdmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgICAnYmVmb3JlQ3JlYXRlJyxcbiAgICAnY3JlYXRlZCcsXG4gICAgJ2JlZm9yZU1vdW50JyxcbiAgICAnbW91bnRlZCcsXG4gICAgJ2JlZm9yZVVwZGF0ZScsXG4gICAgJ3VwZGF0ZWQnLFxuICAgICdiZWZvcmVEZXN0cm95JyxcbiAgICAnZGVzdHJveWVkJyxcbiAgICAnYWN0aXZhdGVkJyxcbiAgICAnZGVhY3RpdmF0ZWQnLFxuICAgICdlcnJvckNhcHR1cmVkJyxcbiAgICAnc2VydmVyUHJlZmV0Y2gnXG4gIF07XG5cbiAgLyogICovXG5cblxuXG4gIHZhciBjb25maWcgPSAoe1xuICAgIC8qKlxuICAgICAqIE9wdGlvbiBtZXJnZSBzdHJhdGVnaWVzICh1c2VkIGluIGNvcmUvdXRpbC9vcHRpb25zKVxuICAgICAqL1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIG9wdGlvbk1lcmdlU3RyYXRlZ2llczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc3VwcHJlc3Mgd2FybmluZ3MuXG4gICAgICovXG4gICAgc2lsZW50OiBmYWxzZSxcblxuICAgIC8qKlxuICAgICAqIFNob3cgcHJvZHVjdGlvbiBtb2RlIHRpcCBtZXNzYWdlIG9uIGJvb3Q/XG4gICAgICovXG4gICAgcHJvZHVjdGlvblRpcDogXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicsXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBkZXZ0b29sc1xuICAgICAqL1xuICAgIGRldnRvb2xzOiBcImRldmVsb3BtZW50XCIgIT09ICdwcm9kdWN0aW9uJyxcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmVjb3JkIHBlcmZcbiAgICAgKi9cbiAgICBwZXJmb3JtYW5jZTogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgICAqL1xuICAgIGVycm9ySGFuZGxlcjogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIFdhcm4gaGFuZGxlciBmb3Igd2F0Y2hlciB3YXJuc1xuICAgICAqL1xuICAgIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogSWdub3JlIGNlcnRhaW4gY3VzdG9tIGVsZW1lbnRzXG4gICAgICovXG4gICAgaWdub3JlZEVsZW1lbnRzOiBbXSxcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAgICovXG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIHRhZyBpcyByZXNlcnZlZCBzbyB0aGF0IGl0IGNhbm5vdCBiZSByZWdpc3RlcmVkIGFzIGFcbiAgICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICovXG4gICAgaXNSZXNlcnZlZFRhZzogbm8sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxuICAgICAqIHByb3AuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAgICovXG4gICAgaXNSZXNlcnZlZEF0dHI6IG5vLFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICAgKi9cbiAgICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgbmFtZXNwYWNlIG9mIGFuIGVsZW1lbnRcbiAgICAgKi9cbiAgICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgICAqL1xuICAgIHBhcnNlUGxhdGZvcm1UYWdOYW1lOiBpZGVudGl0eSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAgICogUGxhdGZvcm0tZGVwZW5kZW50LlxuICAgICAqL1xuICAgIG11c3RVc2VQcm9wOiBubyxcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgICAqIFRoaXMgd2lsbCBzaWduaWZpY2FudGx5IHJlZHVjZSBwZXJmb3JtYW5jZSBpZiBzZXQgdG8gZmFsc2UuXG4gICAgICovXG4gICAgYXN5bmM6IHRydWUsXG5cbiAgICAvKipcbiAgICAgKiBFeHBvc2VkIGZvciBsZWdhY3kgcmVhc29uc1xuICAgICAqL1xuICAgIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXG4gIH0pO1xuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiB1bmljb2RlIGxldHRlcnMgdXNlZCBmb3IgcGFyc2luZyBodG1sIHRhZ3MsIGNvbXBvbmVudCBuYW1lcyBhbmQgcHJvcGVydHkgcGF0aHMuXG4gICAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gICAqIHNraXBwaW5nIFxcdTEwMDAwLVxcdUVGRkZGIGR1ZSB0byBpdCBmcmVlemluZyB1cCBQaGFudG9tSlNcbiAgICovXG4gIHZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHN0cmluZyBzdGFydHMgd2l0aCAkIG9yIF9cbiAgICovXG4gIGZ1bmN0aW9uIGlzUmVzZXJ2ZWQgKHN0cikge1xuICAgIHZhciBjID0gKHN0ciArICcnKS5jaGFyQ29kZUF0KDApO1xuICAgIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAgICovXG4gIGZ1bmN0aW9uIGRlZiAob2JqLCBrZXksIHZhbCwgZW51bWVyYWJsZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbCxcbiAgICAgIGVudW1lcmFibGU6ICEhZW51bWVyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2Ugc2ltcGxlIHBhdGguXG4gICAqL1xuICB2YXIgYmFpbFJFID0gbmV3IFJlZ0V4cCgoXCJbXlwiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiLiRfXFxcXGRdXCIpKTtcbiAgZnVuY3Rpb24gcGFyc2VQYXRoIChwYXRoKSB7XG4gICAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIHJldHVybiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICAgIG9iaiA9IG9ialtzZWdtZW50c1tpXV07XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqXG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLy8gY2FuIHdlIHVzZSBfX3Byb3RvX18/XG4gIHZhciBoYXNQcm90byA9ICdfX3Byb3RvX18nIGluIHt9O1xuXG4gIC8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbiAgdmFyIGluQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuICB2YXIgaW5XZWV4ID0gdHlwZW9mIFdYRW52aXJvbm1lbnQgIT09ICd1bmRlZmluZWQnICYmICEhV1hFbnZpcm9ubWVudC5wbGF0Zm9ybTtcbiAgdmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG4gIHZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICB2YXIgaXNJRSA9IFVBICYmIC9tc2llfHRyaWRlbnQvLnRlc3QoVUEpO1xuICB2YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbiAgdmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xuICB2YXIgaXNBbmRyb2lkID0gKFVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDApIHx8ICh3ZWV4UGxhdGZvcm0gPT09ICdhbmRyb2lkJyk7XG4gIHZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG4gIHZhciBpc0Nocm9tZSA9IFVBICYmIC9jaHJvbWVcXC9cXGQrLy50ZXN0KFVBKSAmJiAhaXNFZGdlO1xuICB2YXIgaXNQaGFudG9tSlMgPSBVQSAmJiAvcGhhbnRvbWpzLy50ZXN0KFVBKTtcbiAgdmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4gIC8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbiAgdmFyIG5hdGl2ZVdhdGNoID0gKHt9KS53YXRjaDtcblxuICB2YXIgc3VwcG9ydHNQYXNzaXZlID0gZmFsc2U7XG4gIGlmIChpbkJyb3dzZXIpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIG9wdHMgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzI4NVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cblxuICAvLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbiAgLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbiAgdmFyIF9pc1NlcnZlcjtcbiAgdmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChfaXNTZXJ2ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWluQnJvd3NlciAmJiAhaW5XZWV4ICYmIHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIC8vIGRldGVjdCBwcmVzZW5jZSBvZiB2dWUtc2VydmVyLXJlbmRlcmVyIGFuZCBhdm9pZFxuICAgICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICAgIF9pc1NlcnZlciA9IGdsb2JhbFsncHJvY2VzcyddICYmIGdsb2JhbFsncHJvY2VzcyddLmVudi5WVUVfRU5WID09PSAnc2VydmVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX2lzU2VydmVyXG4gIH07XG5cbiAgLy8gZGV0ZWN0IGRldnRvb2xzXG4gIHZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiBpc05hdGl2ZSAoQ3Rvcikge1xuICAgIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxuICB9XG5cbiAgdmFyIGhhc1N5bWJvbCA9XG4gICAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICAgIHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShSZWZsZWN0Lm93bktleXMpO1xuXG4gIHZhciBfU2V0O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICh0eXBlb2YgU2V0ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShTZXQpKSB7XG4gICAgLy8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gICAgX1NldCA9IFNldDtcbiAgfSBlbHNlIHtcbiAgICAvLyBhIG5vbi1zdGFuZGFyZCBTZXQgcG9seWZpbGwgdGhhdCBvbmx5IHdvcmtzIHdpdGggcHJpbWl0aXZlIGtleXMuXG4gICAgX1NldCA9IC8qQF9fUFVSRV9fKi8oZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZVxuICAgICAgfTtcbiAgICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgICAgdGhpcy5zZXRba2V5XSA9IHRydWU7XG4gICAgICB9O1xuICAgICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFNldDtcbiAgICB9KCkpO1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHdhcm4gPSBub29wO1xuICB2YXIgdGlwID0gbm9vcDtcbiAgdmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbiAgdmFyIGZvcm1hdENvbXBvbmVudE5hbWUgPSAobm9vcCk7XG5cbiAge1xuICAgIHZhciBoYXNDb25zb2xlID0gdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnO1xuICAgIHZhciBjbGFzc2lmeVJFID0gLyg/Ol58Wy1fXSkoXFx3KS9nO1xuICAgIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgICAgLnJlcGxhY2UoY2xhc3NpZnlSRSwgZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudG9VcHBlckNhc2UoKTsgfSlcbiAgICAgIC5yZXBsYWNlKC9bLV9dL2csICcnKTsgfTtcblxuICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgdmFyIHRyYWNlID0gdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnO1xuXG4gICAgICBpZiAoY29uZmlnLndhcm5IYW5kbGVyKSB7XG4gICAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFzQ29uc29sZSAmJiAoIWNvbmZpZy5zaWxlbnQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW1Z1ZSB3YXJuXTogXCIgKyBtc2cgKyB0cmFjZSkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aXAgPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbVnVlIHRpcF06IFwiICsgbXNnICsgKFxuICAgICAgICAgIHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJ1xuICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICAgIGlmICh2bS4kcm9vdCA9PT0gdm0pIHtcbiAgICAgICAgcmV0dXJuICc8Um9vdD4nXG4gICAgICB9XG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiB2bSA9PT0gJ2Z1bmN0aW9uJyAmJiB2bS5jaWQgIT0gbnVsbFxuICAgICAgICA/IHZtLm9wdGlvbnNcbiAgICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgICA/IHZtLiRvcHRpb25zIHx8IHZtLmNvbnN0cnVjdG9yLm9wdGlvbnNcbiAgICAgICAgICA6IHZtO1xuICAgICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgICAgdmFyIGZpbGUgPSBvcHRpb25zLl9fZmlsZTtcbiAgICAgIGlmICghbmFtZSAmJiBmaWxlKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgICBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIChuYW1lID8gKFwiPFwiICsgKGNsYXNzaWZ5KG5hbWUpKSArIFwiPlwiKSA6IFwiPEFub255bW91cz5cIikgK1xuICAgICAgICAoZmlsZSAmJiBpbmNsdWRlRmlsZSAhPT0gZmFsc2UgPyAoXCIgYXQgXCIgKyBmaWxlKSA6ICcnKVxuICAgICAgKVxuICAgIH07XG5cbiAgICB2YXIgcmVwZWF0ID0gZnVuY3Rpb24gKHN0ciwgbikge1xuICAgICAgdmFyIHJlcyA9ICcnO1xuICAgICAgd2hpbGUgKG4pIHtcbiAgICAgICAgaWYgKG4gJSAyID09PSAxKSB7IHJlcyArPSBzdHI7IH1cbiAgICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgICAgbiA+Pj0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9O1xuXG4gICAgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IGZ1bmN0aW9uICh2bSkge1xuICAgICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICAgIHZhciB0cmVlID0gW107XG4gICAgICAgIHZhciBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgICBpZiAodHJlZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgbGFzdCA9IHRyZWVbdHJlZS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UrKztcbiAgICAgICAgICAgICAgdm0gPSB2bS4kcGFyZW50O1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPiAwKSB7XG4gICAgICAgICAgICAgIHRyZWVbdHJlZS5sZW5ndGggLSAxXSA9IFtsYXN0LCBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2VdO1xuICAgICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uICh2bSwgaSkgeyByZXR1cm4gKFwiXCIgKyAoaSA9PT0gMCA/ICctLS0+ICcgOiByZXBlYXQoJyAnLCA1ICsgaSAqIDIpKSArIChBcnJheS5pc0FycmF5KHZtKVxuICAgICAgICAgICAgICA/ICgoZm9ybWF0Q29tcG9uZW50TmFtZSh2bVswXSkpICsgXCIuLi4gKFwiICsgKHZtWzFdKSArIFwiIHJlY3Vyc2l2ZSBjYWxscylcIilcbiAgICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAgIC5qb2luKCdcXG4nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHVpZCA9IDA7XG5cbiAgLyoqXG4gICAqIEEgZGVwIGlzIGFuIG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxuICAgKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICAgKi9cbiAgdmFyIERlcCA9IGZ1bmN0aW9uIERlcCAoKSB7XG4gICAgdGhpcy5pZCA9IHVpZCsrO1xuICAgIHRoaXMuc3VicyA9IFtdO1xuICB9O1xuXG4gIERlcC5wcm90b3R5cGUuYWRkU3ViID0gZnVuY3Rpb24gYWRkU3ViIChzdWIpIHtcbiAgICB0aGlzLnN1YnMucHVzaChzdWIpO1xuICB9O1xuXG4gIERlcC5wcm90b3R5cGUucmVtb3ZlU3ViID0gZnVuY3Rpb24gcmVtb3ZlU3ViIChzdWIpIHtcbiAgICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xuICB9O1xuXG4gIERlcC5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgRGVwLnRhcmdldC5hZGREZXAodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIERlcC5wcm90b3R5cGUubm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5ICgpIHtcbiAgICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICAgIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XG4gICAgaWYgKCFjb25maWcuYXN5bmMpIHtcbiAgICAgIC8vIHN1YnMgYXJlbid0IHNvcnRlZCBpbiBzY2hlZHVsZXIgaWYgbm90IHJ1bm5pbmcgYXN5bmNcbiAgICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAgIC8vIG9yZGVyXG4gICAgICBzdWJzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBzdWJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgc3Vic1tpXS51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVGhlIGN1cnJlbnQgdGFyZ2V0IHdhdGNoZXIgYmVpbmcgZXZhbHVhdGVkLlxuICAvLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbiAgLy8gY2FuIGJlIGV2YWx1YXRlZCBhdCBhIHRpbWUuXG4gIERlcC50YXJnZXQgPSBudWxsO1xuICB2YXIgdGFyZ2V0U3RhY2sgPSBbXTtcblxuICBmdW5jdGlvbiBwdXNoVGFyZ2V0ICh0YXJnZXQpIHtcbiAgICB0YXJnZXRTdGFjay5wdXNoKHRhcmdldCk7XG4gICAgRGVwLnRhcmdldCA9IHRhcmdldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvcFRhcmdldCAoKSB7XG4gICAgdGFyZ2V0U3RhY2sucG9wKCk7XG4gICAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrW3RhcmdldFN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUgKFxuICAgIHRhZyxcbiAgICBkYXRhLFxuICAgIGNoaWxkcmVuLFxuICAgIHRleHQsXG4gICAgZWxtLFxuICAgIGNvbnRleHQsXG4gICAgY29tcG9uZW50T3B0aW9ucyxcbiAgICBhc3luY0ZhY3RvcnlcbiAgKSB7XG4gICAgdGhpcy50YWcgPSB0YWc7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmVsbSA9IGVsbTtcbiAgICB0aGlzLm5zID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mbk9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mblNjb3BlSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICAgIHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gICAgdGhpcy5jb21wb25lbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJhdyA9IGZhbHNlO1xuICAgIHRoaXMuaXNTdGF0aWMgPSBmYWxzZTtcbiAgICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gICAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2xvbmVkID0gZmFsc2U7XG4gICAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgICB0aGlzLmFzeW5jRmFjdG9yeSA9IGFzeW5jRmFjdG9yeTtcbiAgICB0aGlzLmFzeW5jTWV0YSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xuICB9O1xuXG4gIHZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IGNoaWxkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbiAgLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwcm90b3R5cGVBY2Nlc3NvcnMuY2hpbGQuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFZOb2RlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cbiAgdmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgIGlmICggdGV4dCA9PT0gdm9pZCAwICkgdGV4dCA9ICcnO1xuXG4gICAgdmFyIG5vZGUgPSBuZXcgVk5vZGUoKTtcbiAgICBub2RlLnRleHQgPSB0ZXh0O1xuICAgIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gbm9kZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSAodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBWTm9kZSh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBTdHJpbmcodmFsKSlcbiAgfVxuXG4gIC8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4gIC8vIHVzZWQgZm9yIHN0YXRpYyBub2RlcyBhbmQgc2xvdCBub2RlcyBiZWNhdXNlIHRoZXkgbWF5IGJlIHJldXNlZCBhY3Jvc3NcbiAgLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4gIC8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG4gIGZ1bmN0aW9uIGNsb25lVk5vZGUgKHZub2RlKSB7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICAgIHZub2RlLnRhZyxcbiAgICAgIHZub2RlLmRhdGEsXG4gICAgICAvLyAjNzk3NVxuICAgICAgLy8gY2xvbmUgY2hpbGRyZW4gYXJyYXkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgaW4gY2FzZSBvZiBjbG9uaW5nXG4gICAgICAvLyBhIGNoaWxkLlxuICAgICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICAgIHZub2RlLnRleHQsXG4gICAgICB2bm9kZS5lbG0sXG4gICAgICB2bm9kZS5jb250ZXh0LFxuICAgICAgdm5vZGUuY29tcG9uZW50T3B0aW9ucyxcbiAgICAgIHZub2RlLmFzeW5jRmFjdG9yeVxuICAgICk7XG4gICAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gICAgY2xvbmVkLmlzU3RhdGljID0gdm5vZGUuaXNTdGF0aWM7XG4gICAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICAgIGNsb25lZC5mbkNvbnRleHQgPSB2bm9kZS5mbkNvbnRleHQ7XG4gICAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgICBjbG9uZWQuZm5TY29wZUlkID0gdm5vZGUuZm5TY29wZUlkO1xuICAgIGNsb25lZC5hc3luY01ldGEgPSB2bm9kZS5hc3luY01ldGE7XG4gICAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gY2xvbmVkXG4gIH1cblxuICAvKlxuICAgKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAgICogZHluYW1pY2FsbHkgYWNjZXNzaW5nIG1ldGhvZHMgb24gQXJyYXkgcHJvdG90eXBlXG4gICAqL1xuXG4gIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuICB2YXIgYXJyYXlNZXRob2RzID0gT2JqZWN0LmNyZWF0ZShhcnJheVByb3RvKTtcblxuICB2YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICAgJ3B1c2gnLFxuICAgICdwb3AnLFxuICAgICdzaGlmdCcsXG4gICAgJ3Vuc2hpZnQnLFxuICAgICdzcGxpY2UnLFxuICAgICdzb3J0JyxcbiAgICAncmV2ZXJzZSdcbiAgXTtcblxuICAvKipcbiAgICogSW50ZXJjZXB0IG11dGF0aW5nIG1ldGhvZHMgYW5kIGVtaXQgZXZlbnRzXG4gICAqL1xuICBtZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgICB2YXIgb3JpZ2luYWwgPSBhcnJheVByb3RvW21ldGhvZF07XG4gICAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICAgIHZhciBpbnNlcnRlZDtcbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgICBjYXNlICd1bnNoaWZ0JzpcbiAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3BsaWNlJzpcbiAgICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgICBvYi5kZXAubm90aWZ5KCk7XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8qICAqL1xuXG4gIHZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4gIC8qKlxuICAgKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAgICogdXBkYXRlIGNvbXB1dGF0aW9uLlxuICAgKi9cbiAgdmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIHRvZ2dsZU9ic2VydmluZyAodmFsdWUpIHtcbiAgICBzaG91bGRPYnNlcnZlID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZXIgY2xhc3MgdGhhdCBpcyBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gICAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAgICogb2JqZWN0J3MgcHJvcGVydHkga2V5cyBpbnRvIGdldHRlci9zZXR0ZXJzIHRoYXRcbiAgICogY29sbGVjdCBkZXBlbmRlbmNpZXMgYW5kIGRpc3BhdGNoIHVwZGF0ZXMuXG4gICAqL1xuICB2YXIgT2JzZXJ2ZXIgPSBmdW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gICAgdGhpcy52bUNvdW50ID0gMDtcbiAgICBkZWYodmFsdWUsICdfX29iX18nLCB0aGlzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGlmIChoYXNQcm90bykge1xuICAgICAgICBwcm90b0F1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb3B5QXVnbWVudCh2YWx1ZSwgYXJyYXlNZXRob2RzLCBhcnJheUtleXMpO1xuICAgICAgfVxuICAgICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndhbGsodmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICAgKiBnZXR0ZXIvc2V0dGVycy4gVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW5cbiAgICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gICAqL1xuICBPYnNlcnZlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIHdhbGsgKG9iaikge1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iaiwga2V5c1tpXSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBPYnNlcnZlIGEgbGlzdCBvZiBBcnJheSBpdGVtcy5cbiAgICovXG4gIE9ic2VydmVyLnByb3RvdHlwZS5vYnNlcnZlQXJyYXkgPSBmdW5jdGlvbiBvYnNlcnZlQXJyYXkgKGl0ZW1zKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICAgIH1cbiAgfTtcblxuICAvLyBoZWxwZXJzXG5cbiAgLyoqXG4gICAqIEF1Z21lbnQgYSB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICAgKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICAgKi9cbiAgZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0YXJnZXQsIHNyYykge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gICAgdGFyZ2V0Ll9fcHJvdG9fXyA9IHNyYztcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG4gIH1cblxuICAvKipcbiAgICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgZGVmaW5pbmdcbiAgICogaGlkZGVuIHByb3BlcnRpZXMuXG4gICAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAgICogcmV0dXJucyB0aGUgbmV3IG9ic2VydmVyIGlmIHN1Y2Nlc3NmdWxseSBvYnNlcnZlZCxcbiAgICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gICAqL1xuICBmdW5jdGlvbiBvYnNlcnZlICh2YWx1ZSwgYXNSb290RGF0YSkge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB2YXIgb2I7XG4gICAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgICBvYiA9IHZhbHVlLl9fb2JfXztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgc2hvdWxkT2JzZXJ2ZSAmJlxuICAgICAgIWlzU2VydmVyUmVuZGVyaW5nKCkgJiZcbiAgICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICAgIE9iamVjdC5pc0V4dGVuc2libGUodmFsdWUpICYmXG4gICAgICAhdmFsdWUuX2lzVnVlXG4gICAgKSB7XG4gICAgICBvYiA9IG5ldyBPYnNlcnZlcih2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgICBvYi52bUNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBvYlxuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAgICovXG4gIGZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlJCQxIChcbiAgICBvYmosXG4gICAga2V5LFxuICAgIHZhbCxcbiAgICBjdXN0b21TZXR0ZXIsXG4gICAgc2hhbGxvd1xuICApIHtcbiAgICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gICAgdmFyIHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSk7XG4gICAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGNhdGVyIGZvciBwcmUtZGVmaW5lZCBnZXR0ZXIvc2V0dGVyc1xuICAgIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gICAgdmFyIHNldHRlciA9IHByb3BlcnR5ICYmIHByb3BlcnR5LnNldDtcbiAgICBpZiAoKCFnZXR0ZXIgfHwgc2V0dGVyKSAmJiBhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YWwgPSBvYmpba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRPYiA9ICFzaGFsbG93ICYmIG9ic2VydmUodmFsKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgICAgaWYgKERlcC50YXJnZXQpIHtcbiAgICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICAgIGNoaWxkT2IuZGVwLmRlcGVuZCgpO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICAgIGlmIChjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgICBjdXN0b21TZXR0ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgICAgaWYgKGdldHRlciAmJiAhc2V0dGVyKSB7IHJldHVybiB9XG4gICAgICAgIGlmIChzZXR0ZXIpIHtcbiAgICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gbmV3VmFsO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkT2IgPSAhc2hhbGxvdyAmJiBvYnNlcnZlKG5ld1ZhbCk7XG4gICAgICAgIGRlcC5ub3RpZnkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3QuIEFkZHMgdGhlIG5ldyBwcm9wZXJ0eSBhbmRcbiAgICogdHJpZ2dlcnMgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZiB0aGUgcHJvcGVydHkgZG9lc24ndFxuICAgKiBhbHJlYWR5IGV4aXN0LlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsKSB7XG4gICAgaWYgKGlzVW5kZWYodGFyZ2V0KSB8fCBpc1ByaW1pdGl2ZSh0YXJnZXQpXG4gICAgKSB7XG4gICAgICB3YXJuKChcIkNhbm5vdCBzZXQgcmVhY3RpdmUgcHJvcGVydHkgb24gdW5kZWZpbmVkLCBudWxsLCBvciBwcmltaXRpdmUgdmFsdWU6IFwiICsgKCh0YXJnZXQpKSkpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmIGlzVmFsaWRBcnJheUluZGV4KGtleSkpIHtcbiAgICAgIHRhcmdldC5sZW5ndGggPSBNYXRoLm1heCh0YXJnZXQubGVuZ3RoLCBrZXkpO1xuICAgICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuICAgIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHZhbDtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG4gICAgdmFyIG9iID0gKHRhcmdldCkuX19vYl9fO1xuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgICAnYXQgcnVudGltZSAtIGRlY2xhcmUgaXQgdXBmcm9udCBpbiB0aGUgZGF0YSBvcHRpb24uJ1xuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWxcbiAgICB9XG4gICAgaWYgKCFvYikge1xuICAgICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgICByZXR1cm4gdmFsXG4gICAgfVxuICAgIGRlZmluZVJlYWN0aXZlJCQxKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSBwcm9wZXJ0eSBhbmQgdHJpZ2dlciBjaGFuZ2UgaWYgbmVjZXNzYXJ5LlxuICAgKi9cbiAgZnVuY3Rpb24gZGVsICh0YXJnZXQsIGtleSkge1xuICAgIGlmIChpc1VuZGVmKHRhcmdldCkgfHwgaXNQcmltaXRpdmUodGFyZ2V0KVxuICAgICkge1xuICAgICAgd2FybigoXCJDYW5ub3QgZGVsZXRlIHJlYWN0aXZlIHByb3BlcnR5IG9uIHVuZGVmaW5lZCwgbnVsbCwgb3IgcHJpbWl0aXZlIHZhbHVlOiBcIiArICgodGFyZ2V0KSkpKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgICB0YXJnZXQuc3BsaWNlKGtleSwgMSk7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIG9iID0gKHRhcmdldCkuX19vYl9fO1xuICAgIGlmICh0YXJnZXQuX2lzVnVlIHx8IChvYiAmJiBvYi52bUNvdW50KSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAgICctIGp1c3Qgc2V0IGl0IHRvIG51bGwuJ1xuICAgICAgKTtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBkZWxldGUgdGFyZ2V0W2tleV07XG4gICAgaWYgKCFvYikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICAgKiB3ZSBjYW5ub3QgaW50ZXJjZXB0IGFycmF5IGVsZW1lbnQgYWNjZXNzIGxpa2UgcHJvcGVydHkgZ2V0dGVycy5cbiAgICovXG4gIGZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICAgIGZvciAodmFyIGUgPSAodm9pZCAwKSwgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGUgPSB2YWx1ZVtpXTtcbiAgICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHtcbiAgICAgICAgZGVwZW5kQXJyYXkoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLyoqXG4gICAqIE9wdGlvbiBvdmVyd3JpdGluZyBzdHJhdGVnaWVzIGFyZSBmdW5jdGlvbnMgdGhhdCBoYW5kbGVcbiAgICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAgICogdmFsdWUgaW50byB0aGUgZmluYWwgdmFsdWUuXG4gICAqL1xuICB2YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuICAvKipcbiAgICogT3B0aW9ucyB3aXRoIHJlc3RyaWN0aW9uc1xuICAgKi9cbiAge1xuICAgIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgICAgaWYgKCF2bSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICAgJ2NyZWF0aW9uIHdpdGggdGhlIGBuZXdgIGtleXdvcmQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmF1bHRTdHJhdChwYXJlbnQsIGNoaWxkKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIHRoYXQgcmVjdXJzaXZlbHkgbWVyZ2VzIHR3byBkYXRhIG9iamVjdHMgdG9nZXRoZXIuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZURhdGEgKHRvLCBmcm9tKSB7XG4gICAgaWYgKCFmcm9tKSB7IHJldHVybiB0byB9XG4gICAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG5cbiAgICB2YXIga2V5cyA9IGhhc1N5bWJvbFxuICAgICAgPyBSZWZsZWN0Lm93bktleXMoZnJvbSlcbiAgICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBvYnNlcnZlZC4uLlxuICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgdG9WYWwgPSB0b1trZXldO1xuICAgICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICAgIGlmICghaGFzT3duKHRvLCBrZXkpKSB7XG4gICAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRvVmFsICE9PSBmcm9tVmFsICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QodG9WYWwpICYmXG4gICAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbClcbiAgICAgICkge1xuICAgICAgICBtZXJnZURhdGEodG9WYWwsIGZyb21WYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG9cbiAgfVxuXG4gIC8qKlxuICAgKiBEYXRhXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZURhdGFPckZuIChcbiAgICBwYXJlbnRWYWwsXG4gICAgY2hpbGRWYWwsXG4gICAgdm1cbiAgKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgLy8gaW4gYSBWdWUuZXh0ZW5kIG1lcmdlLCBib3RoIHNob3VsZCBiZSBmdW5jdGlvbnNcbiAgICAgIGlmICghY2hpbGRWYWwpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgICAgfVxuICAgICAgaWYgKCFwYXJlbnRWYWwpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgICB9XG4gICAgICAvLyB3aGVuIHBhcmVudFZhbCAmIGNoaWxkVmFsIGFyZSBib3RoIHByZXNlbnQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAgIC8vIG1lcmdlZCByZXN1bHQgb2YgYm90aCBmdW5jdGlvbnMuLi4gbm8gbmVlZCB0b1xuICAgICAgLy8gY2hlY2sgaWYgcGFyZW50VmFsIGlzIGEgZnVuY3Rpb24gaGVyZSBiZWNhdXNlXG4gICAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWREYXRhRm4gKCkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKFxuICAgICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGhpcykgOiBjaGlsZFZhbCxcbiAgICAgICAgICB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nID8gcGFyZW50VmFsLmNhbGwodGhpcywgdGhpcykgOiBwYXJlbnRWYWxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkSW5zdGFuY2VEYXRhRm4gKCkge1xuICAgICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgICB2YXIgaW5zdGFuY2VEYXRhID0gdHlwZW9mIGNoaWxkVmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBjaGlsZFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgICB2YXIgZGVmYXVsdERhdGEgPSB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyBwYXJlbnRWYWwuY2FsbCh2bSwgdm0pXG4gICAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICAgIGlmIChpbnN0YW5jZURhdGEpIHtcbiAgICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGRlZmF1bHREYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgICBwYXJlbnRWYWwsXG4gICAgY2hpbGRWYWwsXG4gICAgdm1cbiAgKSB7XG4gICAgaWYgKCF2bSkge1xuICAgICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdUaGUgXCJkYXRhXCIgb3B0aW9uIHNob3VsZCBiZSBhIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgICAgfVxuICAgICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbClcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsLCB2bSlcbiAgfTtcblxuICAvKipcbiAgICogSG9va3MgYW5kIHByb3BzIGFyZSBtZXJnZWQgYXMgYXJyYXlzLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgICBwYXJlbnRWYWwsXG4gICAgY2hpbGRWYWxcbiAgKSB7XG4gICAgdmFyIHJlcyA9IGNoaWxkVmFsXG4gICAgICA/IHBhcmVudFZhbFxuICAgICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZFZhbClcbiAgICAgICAgICA/IGNoaWxkVmFsXG4gICAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgICA6IHBhcmVudFZhbDtcbiAgICByZXR1cm4gcmVzXG4gICAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICAgIDogcmVzXG4gIH1cblxuICBmdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBMSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICAgIHN0cmF0c1tob29rXSA9IG1lcmdlSG9vaztcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFzc2V0c1xuICAgKlxuICAgKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gICAqIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gY29uc3RydWN0b3Igb3B0aW9ucywgaW5zdGFuY2VcbiAgICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUFzc2V0cyAoXG4gICAgcGFyZW50VmFsLFxuICAgIGNoaWxkVmFsLFxuICAgIHZtLFxuICAgIGtleVxuICApIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCk7XG4gICAgaWYgKGNoaWxkVmFsKSB7XG4gICAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIEFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFdhdGNoZXJzLlxuICAgKlxuICAgKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gICAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICAgKi9cbiAgc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICAgIHBhcmVudFZhbCxcbiAgICBjaGlsZFZhbCxcbiAgICB2bSxcbiAgICBrZXlcbiAgKSB7XG4gICAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgICBpZiAoY2hpbGRWYWwgPT09IG5hdGl2ZVdhdGNoKSB7IGNoaWxkVmFsID0gdW5kZWZpbmVkOyB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICAgIHtcbiAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICAgIHZhciByZXQgPSB7fTtcbiAgICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICAgIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICAgIHZhciBjaGlsZCA9IGNoaWxkVmFsW2tleSQxXTtcbiAgICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICAgIH1cbiAgICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGQpID8gY2hpbGQgOiBbY2hpbGRdO1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH07XG5cbiAgLyoqXG4gICAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gICAqL1xuICBzdHJhdHMucHJvcHMgPVxuICBzdHJhdHMubWV0aG9kcyA9XG4gIHN0cmF0cy5pbmplY3QgPVxuICBzdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gICAgcGFyZW50VmFsLFxuICAgIGNoaWxkVmFsLFxuICAgIHZtLFxuICAgIGtleVxuICApIHtcbiAgICBpZiAoY2hpbGRWYWwgJiYgXCJkZXZlbG9wbWVudFwiICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICAgIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gICAgaWYgKGNoaWxkVmFsKSB7IGV4dGVuZChyZXQsIGNoaWxkVmFsKTsgfVxuICAgIHJldHVybiByZXRcbiAgfTtcbiAgc3RyYXRzLnByb3ZpZGUgPSBtZXJnZURhdGFPckZuO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICAgKi9cbiAgdmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gICAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICAgID8gcGFyZW50VmFsXG4gICAgICA6IGNoaWxkVmFsXG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tDb21wb25lbnRzIChvcHRpb25zKSB7XG4gICAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gICAgaWYgKCFuZXcgUmVnRXhwKChcIl5bYS16QS1aXVtcXFxcLVxcXFwuMC05X1wiICsgKHVuaWNvZGVSZWdFeHAuc291cmNlKSArIFwiXSokXCIpKS50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgICAnc2hvdWxkIGNvbmZvcm0gdG8gdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZSBpbiBodG1sNSBzcGVjaWZpY2F0aW9uLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc0J1aWx0SW5UYWcobmFtZSkgfHwgY29uZmlnLmlzUmVzZXJ2ZWRUYWcobmFtZSkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgICAnaWQ6ICcgKyBuYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAgICogT2JqZWN0LWJhc2VkIGZvcm1hdC5cbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICAgIHZhciBwcm9wcyA9IG9wdGlvbnMucHJvcHM7XG4gICAgaWYgKCFwcm9wcykgeyByZXR1cm4gfVxuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgaSwgdmFsLCBuYW1lO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkge1xuICAgICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdmFsID0gcHJvcHNbaV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIG5hbWUgPSBjYW1lbGl6ZSh2YWwpO1xuICAgICAgICAgIHJlc1tuYW1lXSA9IHsgdHlwZTogbnVsbCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4oJ3Byb3BzIG11c3QgYmUgc3RyaW5ncyB3aGVuIHVzaW5nIGFycmF5IHN5bnRheC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICB2YWwgPSBwcm9wc1trZXldO1xuICAgICAgICBuYW1lID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgICAgPyB2YWxcbiAgICAgICAgICA6IHsgdHlwZTogdmFsIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJwcm9wc1xcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKHByb3BzKSkgKyBcIi5cIixcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICAgIG9wdGlvbnMucHJvcHMgPSByZXM7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplSW5qZWN0IChvcHRpb25zLCB2bSkge1xuICAgIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgICBpZiAoIWluamVjdCkgeyByZXR1cm4gfVxuICAgIHZhciBub3JtYWxpemVkID0gb3B0aW9ucy5pbmplY3QgPSB7fTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluamVjdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBub3JtYWxpemVkW2luamVjdFtpXV0gPSB7IGZyb206IGluamVjdFtpXSB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChpbmplY3QpKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gaW5qZWN0KSB7XG4gICAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgICAgbm9ybWFsaXplZFtrZXldID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgICAgPyBleHRlbmQoeyBmcm9tOiBrZXkgfSwgdmFsKVxuICAgICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICAgIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICAgIGlmIChkaXJzKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgICBpZiAodHlwZW9mIGRlZiQkMSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmJCQxLCB1cGRhdGU6IGRlZiQkMSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXNzZXJ0T2JqZWN0VHlwZSAobmFtZSwgdmFsdWUsIHZtKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcIlwiICsgbmFtZSArIFwiXFxcIjogZXhwZWN0ZWQgYW4gT2JqZWN0LCBcIiArXG4gICAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICAgKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgICBwYXJlbnQsXG4gICAgY2hpbGQsXG4gICAgdm1cbiAgKSB7XG4gICAge1xuICAgICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gICAgfVxuXG4gICAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgICBub3JtYWxpemVEaXJlY3RpdmVzKGNoaWxkKTtcblxuICAgIC8vIEFwcGx5IGV4dGVuZHMgYW5kIG1peGlucyBvbiB0aGUgY2hpbGQgb3B0aW9ucyxcbiAgICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gICAgLy8gdGhlIHJlc3VsdCBvZiBhbm90aGVyIG1lcmdlT3B0aW9ucyBjYWxsLlxuICAgIC8vIE9ubHkgbWVyZ2VkIG9wdGlvbnMgaGFzIHRoZSBfYmFzZSBwcm9wZXJ0eS5cbiAgICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgICBpZiAoY2hpbGQuZXh0ZW5kcykge1xuICAgICAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBjaGlsZC5leHRlbmRzLCB2bSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQubWl4aW5zKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGQubWl4aW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICB2YXIga2V5O1xuICAgIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgaWYgKCFoYXNPd24ocGFyZW50LCBrZXkpKSB7XG4gICAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgICBvcHRpb25zW2tleV0gPSBzdHJhdChwYXJlbnRba2V5XSwgY2hpbGRba2V5XSwgdm0sIGtleSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zXG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBhbiBhc3NldC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJlY2F1c2UgY2hpbGQgaW5zdGFuY2VzIG5lZWQgYWNjZXNzXG4gICAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAgICovXG4gIGZ1bmN0aW9uIHJlc29sdmVBc3NldCAoXG4gICAgb3B0aW9ucyxcbiAgICB0eXBlLFxuICAgIGlkLFxuICAgIHdhcm5NaXNzaW5nXG4gICkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gICAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgICBpZiAoaGFzT3duKGFzc2V0cywgaWQpKSB7IHJldHVybiBhc3NldHNbaWRdIH1cbiAgICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gICAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gICAgdmFyIFBhc2NhbENhc2VJZCA9IGNhcGl0YWxpemUoY2FtZWxpemVkSWQpO1xuICAgIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gICAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gICAgdmFyIHJlcyA9IGFzc2V0c1tpZF0gfHwgYXNzZXRzW2NhbWVsaXplZElkXSB8fCBhc3NldHNbUGFzY2FsQ2FzZUlkXTtcbiAgICBpZiAod2Fybk1pc3NpbmcgJiYgIXJlcykge1xuICAgICAgd2FybihcbiAgICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cblxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUHJvcCAoXG4gICAga2V5LFxuICAgIHByb3BPcHRpb25zLFxuICAgIHByb3BzRGF0YSxcbiAgICB2bVxuICApIHtcbiAgICB2YXIgcHJvcCA9IHByb3BPcHRpb25zW2tleV07XG4gICAgdmFyIGFic2VudCA9ICFoYXNPd24ocHJvcHNEYXRhLCBrZXkpO1xuICAgIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAgIC8vIGJvb2xlYW4gY2FzdGluZ1xuICAgIHZhciBib29sZWFuSW5kZXggPSBnZXRUeXBlSW5kZXgoQm9vbGVhbiwgcHJvcC50eXBlKTtcbiAgICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICAgIGlmIChhYnNlbnQgJiYgIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgICAgLy8gb25seSBjYXN0IGVtcHR5IHN0cmluZyAvIHNhbWUgbmFtZSB0byBib29sZWFuIGlmXG4gICAgICAgIC8vIGJvb2xlYW4gaGFzIGhpZ2hlciBwcmlvcml0eVxuICAgICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgICBpZiAoc3RyaW5nSW5kZXggPCAwIHx8IGJvb2xlYW5JbmRleCA8IHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgICAgLy8gbWFrZSBzdXJlIHRvIG9ic2VydmUgaXQuXG4gICAgICB2YXIgcHJldlNob3VsZE9ic2VydmUgPSBzaG91bGRPYnNlcnZlO1xuICAgICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgICAgb2JzZXJ2ZSh2YWx1ZSk7XG4gICAgICB0b2dnbGVPYnNlcnZpbmcocHJldlNob3VsZE9ic2VydmUpO1xuICAgIH1cbiAgICB7XG4gICAgICBhc3NlcnRQcm9wKHByb3AsIGtleSwgdmFsdWUsIHZtLCBhYnNlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBwcm9wLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAgIC8vIG5vIGRlZmF1bHQsIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIWhhc093bihwcm9wLCAnZGVmYXVsdCcpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICAgIHZhciBkZWYgPSBwcm9wLmRlZmF1bHQ7XG4gICAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICAgIGlmIChpc09iamVjdChkZWYpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBkZWZhdWx0IHZhbHVlIGZvciBwcm9wIFwiJyArIGtleSArICdcIjogJyArXG4gICAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RvIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLy8gdGhlIHJhdyBwcm9wIHZhbHVlIHdhcyBhbHNvIHVuZGVmaW5lZCBmcm9tIHByZXZpb3VzIHJlbmRlcixcbiAgICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgICBpZiAodm0gJiYgdm0uJG9wdGlvbnMucHJvcHNEYXRhICYmXG4gICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGFba2V5XSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gdm0uX3Byb3BzW2tleV1cbiAgICB9XG4gICAgLy8gY2FsbCBmYWN0b3J5IGZ1bmN0aW9uIGZvciBub24tRnVuY3Rpb24gdHlwZXNcbiAgICAvLyBhIHZhbHVlIGlzIEZ1bmN0aW9uIGlmIGl0cyBwcm90b3R5cGUgaXMgZnVuY3Rpb24gZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGV4ZWN1dGlvbiBjb250ZXh0XG4gICAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgICA/IGRlZi5jYWxsKHZtKVxuICAgICAgOiBkZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlcnQgd2hldGhlciBhIHByb3AgaXMgdmFsaWQuXG4gICAqL1xuICBmdW5jdGlvbiBhc3NlcnRQcm9wIChcbiAgICBwcm9wLFxuICAgIG5hbWUsXG4gICAgdmFsdWUsXG4gICAgdm0sXG4gICAgYWJzZW50XG4gICkge1xuICAgIGlmIChwcm9wLnJlcXVpcmVkICYmIGFic2VudCkge1xuICAgICAgd2FybihcbiAgICAgICAgJ01pc3NpbmcgcmVxdWlyZWQgcHJvcDogXCInICsgbmFtZSArICdcIicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gICAgdmFyIHZhbGlkID0gIXR5cGUgfHwgdHlwZSA9PT0gdHJ1ZTtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodHlwZSkpIHtcbiAgICAgICAgdHlwZSA9IFt0eXBlXTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZS5sZW5ndGggJiYgIXZhbGlkOyBpKyspIHtcbiAgICAgICAgdmFyIGFzc2VydGVkVHlwZSA9IGFzc2VydFR5cGUodmFsdWUsIHR5cGVbaV0pO1xuICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICAgIHZhbGlkID0gYXNzZXJ0ZWRUeXBlLnZhbGlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciB2YWxpZGF0b3IgPSBwcm9wLnZhbGlkYXRvcjtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBpZiAoIXZhbGlkYXRvcih2YWx1ZSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbiAgZnVuY3Rpb24gYXNzZXJ0VHlwZSAodmFsdWUsIHR5cGUpIHtcbiAgICB2YXIgdmFsaWQ7XG4gICAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gICAgaWYgKHNpbXBsZUNoZWNrUkUudGVzdChleHBlY3RlZFR5cGUpKSB7XG4gICAgICB2YXIgdCA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAvLyBmb3IgcHJpbWl0aXZlIHdyYXBwZXIgb2JqZWN0c1xuICAgICAgaWYgKCF2YWxpZCAmJiB0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gJ09iamVjdCcpIHtcbiAgICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09ICdBcnJheScpIHtcbiAgICAgIHZhbGlkID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkID0gdmFsdWUgaW5zdGFuY2VvZiB0eXBlO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IHZhbGlkLFxuICAgICAgZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICAgKiBiZWNhdXNlIGEgc2ltcGxlIGVxdWFsaXR5IGNoZWNrIHdpbGwgZmFpbCB3aGVuIHJ1bm5pbmdcbiAgICogYWNyb3NzIGRpZmZlcmVudCB2bXMgLyBpZnJhbWVzLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0VHlwZSAoZm4pIHtcbiAgICB2YXIgbWF0Y2ggPSBmbiAmJiBmbi50b1N0cmluZygpLm1hdGNoKC9eXFxzKmZ1bmN0aW9uIChcXHcrKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU2FtZVR5cGUgKGEsIGIpIHtcbiAgICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VHlwZUluZGV4ICh0eXBlLCBleHBlY3RlZFR5cGVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgICByZXR1cm4gaXNTYW1lVHlwZShleHBlY3RlZFR5cGVzLCB0eXBlKSA/IDAgOiAtMVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlc1tpXSwgdHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIGlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbnZhbGlkVHlwZU1lc3NhZ2UgKG5hbWUsIHZhbHVlLCBleHBlY3RlZFR5cGVzKSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gZXhwZWN0ZWRUeXBlc1swXTtcbiAgICB2YXIgcmVjZWl2ZWRUeXBlID0gdG9SYXdUeXBlKHZhbHVlKTtcbiAgICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XG4gICAgdmFyIHJlY2VpdmVkVmFsdWUgPSBzdHlsZVZhbHVlKHZhbHVlLCByZWNlaXZlZFR5cGUpO1xuICAgIC8vIGNoZWNrIGlmIHdlIG5lZWQgdG8gc3BlY2lmeSBleHBlY3RlZCB2YWx1ZVxuICAgIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBpc0V4cGxpY2FibGUoZXhwZWN0ZWRUeXBlKSAmJlxuICAgICAgICAhaXNCb29sZWFuKGV4cGVjdGVkVHlwZSwgcmVjZWl2ZWRUeXBlKSkge1xuICAgICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgZXhwZWN0ZWRWYWx1ZTtcbiAgICB9XG4gICAgbWVzc2FnZSArPSBcIiwgZ290IFwiICsgcmVjZWl2ZWRUeXBlICsgXCIgXCI7XG4gICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IHJlY2VpdmVkIHZhbHVlXG4gICAgaWYgKGlzRXhwbGljYWJsZShyZWNlaXZlZFR5cGUpKSB7XG4gICAgICBtZXNzYWdlICs9IFwid2l0aCB2YWx1ZSBcIiArIHJlY2VpdmVkVmFsdWUgKyBcIi5cIjtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlVmFsdWUgKHZhbHVlLCB0eXBlKSB7XG4gICAgaWYgKHR5cGUgPT09ICdTdHJpbmcnKSB7XG4gICAgICByZXR1cm4gKFwiXFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIilcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgICByZXR1cm4gKFwiXCIgKyAoTnVtYmVyKHZhbHVlKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCJcIiArIHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRXhwbGljYWJsZSAodmFsdWUpIHtcbiAgICB2YXIgZXhwbGljaXRUeXBlcyA9IFsnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJ107XG4gICAgcmV0dXJuIGV4cGxpY2l0VHlwZXMuc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gZWxlbTsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQm9vbGVhbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgcmV0dXJuIGFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbSkgeyByZXR1cm4gZWxlbS50b0xvd2VyQ2FzZSgpID09PSAnYm9vbGVhbic7IH0pXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBoYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICAgIC8vIERlYWN0aXZhdGUgZGVwcyB0cmFja2luZyB3aGlsZSBwcm9jZXNzaW5nIGVycm9yIGhhbmRsZXIgdG8gYXZvaWQgcG9zc2libGUgaW5maW5pdGUgcmVuZGVyaW5nLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh2bSkge1xuICAgICAgICB2YXIgY3VyID0gdm07XG4gICAgICAgIHdoaWxlICgoY3VyID0gY3VyLiRwYXJlbnQpKSB7XG4gICAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgICAgaWYgKGhvb2tzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGNhcHR1cmUgPSBob29rc1tpXS5jYWxsKGN1ciwgZXJyLCB2bSwgaW5mbykgPT09IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7IHJldHVybiB9XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxIYW5kbGVFcnJvcihlLCBjdXIsICdlcnJvckNhcHR1cmVkIGhvb2snKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZXJyLCB2bSwgaW5mbyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHBvcFRhcmdldCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nIChcbiAgICBoYW5kbGVyLFxuICAgIGNvbnRleHQsXG4gICAgYXJncyxcbiAgICB2bSxcbiAgICBpbmZvXG4gICkge1xuICAgIHZhciByZXM7XG4gICAgdHJ5IHtcbiAgICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgICAgaWYgKHJlcyAmJiAhcmVzLl9pc1Z1ZSAmJiBpc1Byb21pc2UocmVzKSAmJiAhcmVzLl9oYW5kbGVkKSB7XG4gICAgICAgIHJlcy5jYXRjaChmdW5jdGlvbiAoZSkgeyByZXR1cm4gaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8gKyBcIiAoUHJvbWlzZS9hc3luYylcIik7IH0pO1xuICAgICAgICAvLyBpc3N1ZSAjOTUxMVxuICAgICAgICAvLyBhdm9pZCBjYXRjaCB0cmlnZ2VyaW5nIG11bHRpcGxlIHRpbWVzIHdoZW4gbmVzdGVkIGNhbGxzXG4gICAgICAgIHJlcy5faGFuZGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIGluZm8pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICAgIGlmIChjb25maWcuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlmIHRoZSB1c2VyIGludGVudGlvbmFsbHkgdGhyb3dzIHRoZSBvcmlnaW5hbCBlcnJvciBpbiB0aGUgaGFuZGxlcixcbiAgICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgICBpZiAoZSAhPT0gZXJyKSB7XG4gICAgICAgICAgbG9nRXJyb3IoZSwgbnVsbCwgJ2NvbmZpZy5lcnJvckhhbmRsZXInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZ0Vycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gICAge1xuICAgICAgd2FybigoXCJFcnJvciBpbiBcIiArIGluZm8gKyBcIjogXFxcIlwiICsgKGVyci50b1N0cmluZygpKSArIFwiXFxcIlwiKSwgdm0pO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICgoaW5Ccm93c2VyIHx8IGluV2VleCkgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBpc1VzaW5nTWljcm9UYXNrID0gZmFsc2U7XG5cbiAgdmFyIGNhbGxiYWNrcyA9IFtdO1xuICB2YXIgcGVuZGluZyA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgICBwZW5kaW5nID0gZmFsc2U7XG4gICAgdmFyIGNvcGllcyA9IGNhbGxiYWNrcy5zbGljZSgwKTtcbiAgICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcGllcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29waWVzW2ldKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVyZSB3ZSBoYXZlIGFzeW5jIGRlZmVycmluZyB3cmFwcGVycyB1c2luZyBtaWNyb3Rhc2tzLlxuICAvLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuICAvLyBIb3dldmVyLCBpdCBoYXMgc3VidGxlIHByb2JsZW1zIHdoZW4gc3RhdGUgaXMgY2hhbmdlZCByaWdodCBiZWZvcmUgcmVwYWludFxuICAvLyAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbiAgLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4gIC8vIHRoYXQgY2Fubm90IGJlIGNpcmN1bXZlbnRlZCAoZS5nLiAjNzEwOSwgIzcxNTMsICM3NTQ2LCAjNzgzNCwgIzgxMDkpLlxuICAvLyBTbyB3ZSBub3cgdXNlIG1pY3JvdGFza3MgZXZlcnl3aGVyZSwgYWdhaW4uXG4gIC8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuICAvLyB3aGVyZSBtaWNyb3Rhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZSBpbiBiZXR3ZWVuIHN1cHBvc2VkbHlcbiAgLy8gc2VxdWVudGlhbCBldmVudHMgKGUuZy4gIzQ1MjEsICM2NjkwLCB3aGljaCBoYXZlIHdvcmthcm91bmRzKVxuICAvLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbiAgdmFyIHRpbWVyRnVuYztcblxuICAvLyBUaGUgbmV4dFRpY2sgYmVoYXZpb3IgbGV2ZXJhZ2VzIHRoZSBtaWNyb3Rhc2sgcXVldWUsIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZFxuICAvLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbiAgLy8gTXV0YXRpb25PYnNlcnZlciBoYXMgd2lkZXIgc3VwcG9ydCwgaG93ZXZlciBpdCBpcyBzZXJpb3VzbHkgYnVnZ2VkIGluXG4gIC8vIFVJV2ViVmlldyBpbiBpT1MgPj0gOS4zLjMgd2hlbiB0cmlnZ2VyZWQgaW4gdG91Y2ggZXZlbnQgaGFuZGxlcnMuIEl0XG4gIC8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbiAgLy8gUHJvbWlzZSBpcyBhdmFpbGFibGUsIHdlIHdpbGwgdXNlIGl0OlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCwgJGZsb3ctZGlzYWJsZS1saW5lICovXG4gIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgICB2YXIgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgICAvLyBJbiBwcm9ibGVtYXRpYyBVSVdlYlZpZXdzLCBQcm9taXNlLnRoZW4gZG9lc24ndCBjb21wbGV0ZWx5IGJyZWFrLCBidXRcbiAgICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG5lZWRzIHRvIGRvIHNvbWUgb3RoZXIgd29yaywgZS5nLiBoYW5kbGUgYSB0aW1lci4gVGhlcmVmb3JlIHdlIGNhblxuICAgICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICAgIH07XG4gICAgaXNVc2luZ01pY3JvVGFzayA9IHRydWU7XG4gIH0gZWxzZSBpZiAoIWlzSUUgJiYgdHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnICYmIChcbiAgICBpc05hdGl2ZShNdXRhdGlvbk9ic2VydmVyKSB8fFxuICAgIC8vIFBoYW50b21KUyBhbmQgaU9TIDcueFxuICAgIE11dGF0aW9uT2JzZXJ2ZXIudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTXV0YXRpb25PYnNlcnZlckNvbnN0cnVjdG9yXSdcbiAgKSkge1xuICAgIC8vIFVzZSBNdXRhdGlvbk9ic2VydmVyIHdoZXJlIG5hdGl2ZSBQcm9taXNlIGlzIG5vdCBhdmFpbGFibGUsXG4gICAgLy8gZS5nLiBQaGFudG9tSlMsIGlPUzcsIEFuZHJvaWQgNC40XG4gICAgLy8gKCM2NDY2IE11dGF0aW9uT2JzZXJ2ZXIgaXMgdW5yZWxpYWJsZSBpbiBJRTExKVxuICAgIHZhciBjb3VudGVyID0gMTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaENhbGxiYWNrcyk7XG4gICAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXIpKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRleHROb2RlLCB7XG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgfSk7XG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgY291bnRlciA9IChjb3VudGVyICsgMSkgJSAyO1xuICAgICAgdGV4dE5vZGUuZGF0YSA9IFN0cmluZyhjb3VudGVyKTtcbiAgICB9O1xuICAgIGlzVXNpbmdNaWNyb1Rhc2sgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKHNldEltbWVkaWF0ZSkpIHtcbiAgICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gICAgLy8gVGVjaG5pY2FsbHkgaXQgbGV2ZXJhZ2VzIHRoZSAobWFjcm8pIHRhc2sgcXVldWUsXG4gICAgLy8gYnV0IGl0IGlzIHN0aWxsIGEgYmV0dGVyIGNob2ljZSB0aGFuIHNldFRpbWVvdXQuXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrIHRvIHNldFRpbWVvdXQuXG4gICAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gICAgdmFyIF9yZXNvbHZlO1xuICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjYikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNiLmNhbGwoY3R4KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSB0cnVlO1xuICAgICAgdGltZXJGdW5jKCk7XG4gICAgfVxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgbWFyaztcbiAgdmFyIG1lYXN1cmU7XG5cbiAge1xuICAgIHZhciBwZXJmID0gaW5Ccm93c2VyICYmIHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoXG4gICAgICBwZXJmICYmXG4gICAgICBwZXJmLm1hcmsgJiZcbiAgICAgIHBlcmYubWVhc3VyZSAmJlxuICAgICAgcGVyZi5jbGVhck1hcmtzICYmXG4gICAgICBwZXJmLmNsZWFyTWVhc3VyZXNcbiAgICApIHtcbiAgICAgIG1hcmsgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiBwZXJmLm1hcmsodGFnKTsgfTtcbiAgICAgIG1lYXN1cmUgPSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhzdGFydFRhZyk7XG4gICAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgICAvLyBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSlcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbiAgdmFyIGluaXRQcm94eTtcblxuICB7XG4gICAgdmFyIGFsbG93ZWRHbG9iYWxzID0gbWFrZU1hcChcbiAgICAgICdJbmZpbml0eSx1bmRlZmluZWQsTmFOLGlzRmluaXRlLGlzTmFOLCcgK1xuICAgICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICAgJ01hdGgsTnVtYmVyLERhdGUsQXJyYXksT2JqZWN0LEJvb2xlYW4sU3RyaW5nLFJlZ0V4cCxNYXAsU2V0LEpTT04sSW50bCwnICtcbiAgICAgICdyZXF1aXJlJyAvLyBmb3IgV2VicGFjay9Ccm93c2VyaWZ5XG4gICAgKTtcblxuICAgIHZhciB3YXJuTm9uUHJlc2VudCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgICAncmVmZXJlbmNlZCBkdXJpbmcgcmVuZGVyLiBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIHJlYWN0aXZlLCAnICtcbiAgICAgICAgJ2VpdGhlciBpbiB0aGUgZGF0YSBvcHRpb24sIG9yIGZvciBjbGFzcy1iYXNlZCBjb21wb25lbnRzLCBieSAnICtcbiAgICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9yZWFjdGl2aXR5Lmh0bWwjRGVjbGFyaW5nLVJlYWN0aXZlLVByb3BlcnRpZXMuJyxcbiAgICAgICAgdGFyZ2V0XG4gICAgICApO1xuICAgIH07XG5cbiAgICB2YXIgd2FyblJlc2VydmVkUHJlZml4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcIlByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggXFxcIiRkYXRhLlwiICsga2V5ICsgXCJcXFwiIGJlY2F1c2UgXCIgK1xuICAgICAgICAncHJvcGVydGllcyBzdGFydGluZyB3aXRoIFwiJFwiIG9yIFwiX1wiIGFyZSBub3QgcHJveGllZCBpbiB0aGUgVnVlIGluc3RhbmNlIHRvICcgK1xuICAgICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzLiAnICtcbiAgICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNkYXRhJyxcbiAgICAgICAgdGFyZ2V0XG4gICAgICApO1xuICAgIH07XG5cbiAgICB2YXIgaGFzUHJveHkgPVxuICAgICAgdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XG5cbiAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgIHZhciBpc0J1aWx0SW5Nb2RpZmllciA9IG1ha2VNYXAoJ3N0b3AscHJldmVudCxzZWxmLGN0cmwsc2hpZnQsYWx0LG1ldGEsZXhhY3QnKTtcbiAgICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgIGlmIChpc0J1aWx0SW5Nb2RpZmllcihrZXkpKSB7XG4gICAgICAgICAgICB3YXJuKChcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiICsga2V5KSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgaGFzSGFuZGxlciA9IHtcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgICB2YXIgaGFzID0ga2V5IGluIHRhcmdldDtcbiAgICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzKGtleSkgfHxcbiAgICAgICAgICAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LmNoYXJBdCgwKSA9PT0gJ18nICYmICEoa2V5IGluIHRhcmdldC4kZGF0YSkpO1xuICAgICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGdldEhhbmRsZXIgPSB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmICEoa2V5IGluIHRhcmdldCkpIHtcbiAgICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgICAgZWxzZSB7IHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRba2V5XVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpbml0UHJveHkgPSBmdW5jdGlvbiBpbml0UHJveHkgKHZtKSB7XG4gICAgICBpZiAoaGFzUHJveHkpIHtcbiAgICAgICAgLy8gZGV0ZXJtaW5lIHdoaWNoIHByb3h5IGhhbmRsZXIgdG8gdXNlXG4gICAgICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICAgIHZhciBoYW5kbGVycyA9IG9wdGlvbnMucmVuZGVyICYmIG9wdGlvbnMucmVuZGVyLl93aXRoU3RyaXBwZWRcbiAgICAgICAgICA/IGdldEhhbmRsZXJcbiAgICAgICAgICA6IGhhc0hhbmRsZXI7XG4gICAgICAgIHZtLl9yZW5kZXJQcm94eSA9IG5ldyBQcm94eSh2bSwgaGFuZGxlcnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBzZWVuT2JqZWN0cyA9IG5ldyBfU2V0KCk7XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFuIG9iamVjdCB0byBldm9rZSBhbGwgY29udmVydGVkXG4gICAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gICAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3kuXG4gICAqL1xuICBmdW5jdGlvbiB0cmF2ZXJzZSAodmFsKSB7XG4gICAgX3RyYXZlcnNlKHZhbCwgc2Vlbk9iamVjdHMpO1xuICAgIHNlZW5PYmplY3RzLmNsZWFyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBfdHJhdmVyc2UgKHZhbCwgc2Vlbikge1xuICAgIHZhciBpLCBrZXlzO1xuICAgIHZhciBpc0EgPSBBcnJheS5pc0FycmF5KHZhbCk7XG4gICAgaWYgKCghaXNBICYmICFpc09iamVjdCh2YWwpKSB8fCBPYmplY3QuaXNGcm96ZW4odmFsKSB8fCB2YWwgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh2YWwuX19vYl9fKSB7XG4gICAgICB2YXIgZGVwSWQgPSB2YWwuX19vYl9fLmRlcC5pZDtcbiAgICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzZWVuLmFkZChkZXBJZCk7XG4gICAgfVxuICAgIGlmIChpc0EpIHtcbiAgICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2ldLCBzZWVuKTsgfVxuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtrZXlzW2ldXSwgc2Vlbik7IH1cbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgbm9ybWFsaXplRXZlbnQgPSBjYWNoZWQoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgcGFzc2l2ZSA9IG5hbWUuY2hhckF0KDApID09PSAnJic7XG4gICAgbmFtZSA9IHBhc3NpdmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgICB2YXIgb25jZSQkMSA9IG5hbWUuY2hhckF0KDApID09PSAnfic7IC8vIFByZWZpeGVkIGxhc3QsIGNoZWNrZWQgZmlyc3RcbiAgICBuYW1lID0gb25jZSQkMSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgIHZhciBjYXB0dXJlID0gbmFtZS5jaGFyQXQoMCkgPT09ICchJztcbiAgICBuYW1lID0gY2FwdHVyZSA/IG5hbWUuc2xpY2UoMSkgOiBuYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgb25jZTogb25jZSQkMSxcbiAgICAgIGNhcHR1cmU6IGNhcHR1cmUsXG4gICAgICBwYXNzaXZlOiBwYXNzaXZlXG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBjcmVhdGVGbkludm9rZXIgKGZucywgdm0pIHtcbiAgICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblxuICAgICAgdmFyIGZucyA9IGludm9rZXIuZm5zO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgICB2YXIgY2xvbmVkID0gZm5zLnNsaWNlKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2xvbmVkW2ldLCBudWxsLCBhcmd1bWVudHMkMSwgdm0sIFwidi1vbiBoYW5kbGVyXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZXR1cm4gaGFuZGxlciByZXR1cm4gdmFsdWUgZm9yIHNpbmdsZSBoYW5kbGVyc1xuICAgICAgICByZXR1cm4gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoZm5zLCBudWxsLCBhcmd1bWVudHMsIHZtLCBcInYtb24gaGFuZGxlclwiKVxuICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VyLmZucyA9IGZucztcbiAgICByZXR1cm4gaW52b2tlclxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlTGlzdGVuZXJzIChcbiAgICBvbixcbiAgICBvbGRPbixcbiAgICBhZGQsXG4gICAgcmVtb3ZlJCQxLFxuICAgIGNyZWF0ZU9uY2VIYW5kbGVyLFxuICAgIHZtXG4gICkge1xuICAgIHZhciBuYW1lLCBkZWYkJDEsIGN1ciwgb2xkLCBldmVudDtcbiAgICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICAgIGRlZiQkMSA9IGN1ciA9IG9uW25hbWVdO1xuICAgICAgb2xkID0gb2xkT25bbmFtZV07XG4gICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgaWYgKGlzVW5kZWYoY3VyKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiSW52YWxpZCBoYW5kbGVyIGZvciBldmVudCBcXFwiXCIgKyAoZXZlbnQubmFtZSkgKyBcIlxcXCI6IGdvdCBcIiArIFN0cmluZyhjdXIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGlzVW5kZWYob2xkKSkge1xuICAgICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RydWUoZXZlbnQub25jZSkpIHtcbiAgICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSwgZXZlbnQucGFyYW1zKTtcbiAgICAgIH0gZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgICAgb25bbmFtZV0gPSBvbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobmFtZSBpbiBvbGRPbikge1xuICAgICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICAgIHJlbW92ZSQkMShldmVudC5uYW1lLCBvbGRPbltuYW1lXSwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICAgIGlmIChkZWYgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgICAgZGVmID0gZGVmLmRhdGEuaG9vayB8fCAoZGVmLmRhdGEuaG9vayA9IHt9KTtcbiAgICB9XG4gICAgdmFyIGludm9rZXI7XG4gICAgdmFyIG9sZEhvb2sgPSBkZWZbaG9va0tleV07XG5cbiAgICBmdW5jdGlvbiB3cmFwcGVkSG9vayAoKSB7XG4gICAgICBob29rLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXG4gICAgICAvLyBhbmQgcHJldmVudCBtZW1vcnkgbGVha1xuICAgICAgcmVtb3ZlKGludm9rZXIuZm5zLCB3cmFwcGVkSG9vayk7XG4gICAgfVxuXG4gICAgaWYgKGlzVW5kZWYob2xkSG9vaykpIHtcbiAgICAgIC8vIG5vIGV4aXN0aW5nIGhvb2tcbiAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW3dyYXBwZWRIb29rXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGlzRGVmKG9sZEhvb2suZm5zKSAmJiBpc1RydWUob2xkSG9vay5tZXJnZWQpKSB7XG4gICAgICAgIC8vIGFscmVhZHkgYSBtZXJnZWQgaW52b2tlclxuICAgICAgICBpbnZva2VyID0gb2xkSG9vaztcbiAgICAgICAgaW52b2tlci5mbnMucHVzaCh3cmFwcGVkSG9vayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBleGlzdGluZyBwbGFpbiBob29rXG4gICAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW29sZEhvb2ssIHdyYXBwZWRIb29rXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlci5tZXJnZWQgPSB0cnVlO1xuICAgIGRlZltob29rS2V5XSA9IGludm9rZXI7XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBleHRyYWN0UHJvcHNGcm9tVk5vZGVEYXRhIChcbiAgICBkYXRhLFxuICAgIEN0b3IsXG4gICAgdGFnXG4gICkge1xuICAgIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3IHZhbHVlcyBoZXJlLlxuICAgIC8vIHZhbGlkYXRpb24gYW5kIGRlZmF1bHQgdmFsdWVzIGFyZSBoYW5kbGVkIGluIHRoZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCBpdHNlbGYuXG4gICAgdmFyIHByb3BPcHRpb25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICAgIGlmIChpc1VuZGVmKHByb3BPcHRpb25zKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzO1xuICAgIHZhciBwcm9wcyA9IGRhdGEucHJvcHM7XG4gICAgaWYgKGlzRGVmKGF0dHJzKSB8fCBpc0RlZihwcm9wcykpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIga2V5SW5Mb3dlckNhc2UgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBrZXkgIT09IGtleUluTG93ZXJDYXNlICYmXG4gICAgICAgICAgICBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGlwKFxuICAgICAgICAgICAgICBcIlByb3AgXFxcIlwiICsga2V5SW5Mb3dlckNhc2UgKyBcIlxcXCIgaXMgcGFzc2VkIHRvIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHRhZyB8fCBDdG9yKSkgKyBcIiwgYnV0IHRoZSBkZWNsYXJlZCBwcm9wIG5hbWUgaXNcIiArXG4gICAgICAgICAgICAgIFwiIFxcXCJcIiArIGtleSArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGNhbWVsQ2FzZWQgXCIgK1xuICAgICAgICAgICAgICBcInByb3BzIG5lZWQgdG8gdXNlIHRoZWlyIGtlYmFiLWNhc2UgZXF1aXZhbGVudHMgd2hlbiB1c2luZyBpbi1ET00gXCIgK1xuICAgICAgICAgICAgICBcInRlbXBsYXRlcy4gWW91IHNob3VsZCBwcm9iYWJseSB1c2UgXFxcIlwiICsgYWx0S2V5ICsgXCJcXFwiIGluc3RlYWQgb2YgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjaGVja1Byb3AocmVzLCBwcm9wcywga2V5LCBhbHRLZXksIHRydWUpIHx8XG4gICAgICAgIGNoZWNrUHJvcChyZXMsIGF0dHJzLCBrZXksIGFsdEtleSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBjaGVja1Byb3AgKFxuICAgIHJlcyxcbiAgICBoYXNoLFxuICAgIGtleSxcbiAgICBhbHRLZXksXG4gICAgcHJlc2VydmVcbiAgKSB7XG4gICAgaWYgKGlzRGVmKGhhc2gpKSB7XG4gICAgICBpZiAoaGFzT3duKGhhc2gsIGtleSkpIHtcbiAgICAgICAgcmVzW2tleV0gPSBoYXNoW2tleV07XG4gICAgICAgIGlmICghcHJlc2VydmUpIHtcbiAgICAgICAgICBkZWxldGUgaGFzaFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGhhc093bihoYXNoLCBhbHRLZXkpKSB7XG4gICAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgICAgZGVsZXRlIGhhc2hbYWx0S2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8vIFRoZSB0ZW1wbGF0ZSBjb21waWxlciBhdHRlbXB0cyB0byBtaW5pbWl6ZSB0aGUgbmVlZCBmb3Igbm9ybWFsaXphdGlvbiBieVxuICAvLyBzdGF0aWNhbGx5IGFuYWx5emluZyB0aGUgdGVtcGxhdGUgYXQgY29tcGlsZSB0aW1lLlxuICAvL1xuICAvLyBGb3IgcGxhaW4gSFRNTCBtYXJrdXAsIG5vcm1hbGl6YXRpb24gY2FuIGJlIGNvbXBsZXRlbHkgc2tpcHBlZCBiZWNhdXNlIHRoZVxuICAvLyBnZW5lcmF0ZWQgcmVuZGVyIGZ1bmN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIEFycmF5PFZOb2RlPi4gVGhlcmUgYXJlXG4gIC8vIHR3byBjYXNlcyB3aGVyZSBleHRyYSBub3JtYWxpemF0aW9uIGlzIG5lZWRlZDpcblxuICAvLyAxLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb21wb25lbnRzIC0gYmVjYXVzZSBhIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gIC8vIG1heSByZXR1cm4gYW4gQXJyYXkgaW5zdGVhZCBvZiBhIHNpbmdsZSByb290LiBJbiB0aGlzIGNhc2UsIGp1c3QgYSBzaW1wbGVcbiAgLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBpZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4gIC8vIHRoaW5nIHdpdGggQXJyYXkucHJvdG90eXBlLmNvbmNhdC4gSXQgaXMgZ3VhcmFudGVlZCB0byBiZSBvbmx5IDEtbGV2ZWwgZGVlcFxuICAvLyBiZWNhdXNlIGZ1bmN0aW9uYWwgY29tcG9uZW50cyBhbHJlYWR5IG5vcm1hbGl6ZSB0aGVpciBvd24gY2hpbGRyZW4uXG4gIGZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuW2ldKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgY2hpbGRyZW4pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlblxuICB9XG5cbiAgLy8gMi4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29uc3RydWN0cyB0aGF0IGFsd2F5cyBnZW5lcmF0ZWQgbmVzdGVkIEFycmF5cyxcbiAgLy8gZS5nLiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92aWRlZCBieSB1c2VyXG4gIC8vIHdpdGggaGFuZC13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMgLyBKU1guIEluIHN1Y2ggY2FzZXMgYSBmdWxsIG5vcm1hbGl6YXRpb25cbiAgLy8gaXMgbmVlZGVkIHRvIGNhdGVyIHRvIGFsbCBwb3NzaWJsZSB0eXBlcyBvZiBjaGlsZHJlbiB2YWx1ZXMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICAgIHJldHVybiBpc1ByaW1pdGl2ZShjaGlsZHJlbilcbiAgICAgID8gW2NyZWF0ZVRleHRWTm9kZShjaGlsZHJlbildXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICAgID8gbm9ybWFsaXplQXJyYXlDaGlsZHJlbihjaGlsZHJlbilcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVGV4dE5vZGUgKG5vZGUpIHtcbiAgICByZXR1cm4gaXNEZWYobm9kZSkgJiYgaXNEZWYobm9kZS50ZXh0KSAmJiBpc0ZhbHNlKG5vZGUuaXNDb21tZW50KVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplQXJyYXlDaGlsZHJlbiAoY2hpbGRyZW4sIG5lc3RlZEluZGV4KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpLCBjLCBsYXN0SW5kZXgsIGxhc3Q7XG4gICAgZm9yIChpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKSB7IGNvbnRpbnVlIH1cbiAgICAgIGxhc3RJbmRleCA9IHJlcy5sZW5ndGggLSAxO1xuICAgICAgbGFzdCA9IHJlc1tsYXN0SW5kZXhdO1xuICAgICAgLy8gIG5lc3RlZFxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYykpIHtcbiAgICAgICAgaWYgKGMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGMgPSBub3JtYWxpemVBcnJheUNoaWxkcmVuKGMsICgobmVzdGVkSW5kZXggfHwgJycpICsgXCJfXCIgKyBpKSk7XG4gICAgICAgICAgLy8gbWVyZ2UgYWRqYWNlbnQgdGV4dCBub2Rlc1xuICAgICAgICAgIGlmIChpc1RleHROb2RlKGNbMF0pICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIChjWzBdKS50ZXh0KTtcbiAgICAgICAgICAgIGMuc2hpZnQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBjKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZShjKSkge1xuICAgICAgICBpZiAoaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgICAvLyB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgU1NSIGh5ZHJhdGlvbiBiZWNhdXNlIHRleHQgbm9kZXMgYXJlXG4gICAgICAgICAgLy8gZXNzZW50aWFsbHkgbWVyZ2VkIHdoZW4gcmVuZGVyZWQgdG8gSFRNTCBzdHJpbmdzXG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJycpIHtcbiAgICAgICAgICAvLyBjb252ZXJ0IHByaW1pdGl2ZSB0byB2bm9kZVxuICAgICAgICAgIHJlcy5wdXNoKGNyZWF0ZVRleHRWTm9kZShjKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RleHROb2RlKGMpICYmIGlzVGV4dE5vZGUobGFzdCkpIHtcbiAgICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYy50ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZWZhdWx0IGtleSBmb3IgbmVzdGVkIGFycmF5IGNoaWxkcmVuIChsaWtlbHkgZ2VuZXJhdGVkIGJ5IHYtZm9yKVxuICAgICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgICBpc0RlZihjLnRhZykgJiZcbiAgICAgICAgICAgIGlzVW5kZWYoYy5rZXkpICYmXG4gICAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICAgIGMua2V5ID0gXCJfX3ZsaXN0XCIgKyBuZXN0ZWRJbmRleCArIFwiX1wiICsgaSArIFwiX19cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaW5pdFByb3ZpZGUgKHZtKSB7XG4gICAgdmFyIHByb3ZpZGUgPSB2bS4kb3B0aW9ucy5wcm92aWRlO1xuICAgIGlmIChwcm92aWRlKSB7XG4gICAgICB2bS5fcHJvdmlkZWQgPSB0eXBlb2YgcHJvdmlkZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHByb3ZpZGUuY2FsbCh2bSlcbiAgICAgICAgOiBwcm92aWRlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRJbmplY3Rpb25zICh2bSkge1xuICAgIHZhciByZXN1bHQgPSByZXNvbHZlSW5qZWN0KHZtLiRvcHRpb25zLmluamVjdCwgdm0pO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICB7XG4gICAgICAgICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sIGtleSwgcmVzdWx0W2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHByb3ZpZGVkIGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgIFwiaW5qZWN0aW9uIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgICB2bVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUluamVjdCAoaW5qZWN0LCB2bSkge1xuICAgIGlmIChpbmplY3QpIHtcbiAgICAgIC8vIGluamVjdCBpcyA6YW55IGJlY2F1c2UgZmxvdyBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgY2FjaGVkXG4gICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHZhciBrZXlzID0gaGFzU3ltYm9sXG4gICAgICAgID8gUmVmbGVjdC5vd25LZXlzKGluamVjdClcbiAgICAgICAgOiBPYmplY3Qua2V5cyhpbmplY3QpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIC8vICM2NTc0IGluIGNhc2UgdGhlIGluamVjdCBvYmplY3QgaXMgb2JzZXJ2ZWQuLi5cbiAgICAgICAgaWYgKGtleSA9PT0gJ19fb2JfXycpIHsgY29udGludWUgfVxuICAgICAgICB2YXIgcHJvdmlkZUtleSA9IGluamVjdFtrZXldLmZyb207XG4gICAgICAgIHZhciBzb3VyY2UgPSB2bTtcbiAgICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICAgIGlmIChzb3VyY2UuX3Byb3ZpZGVkICYmIGhhc093bihzb3VyY2UuX3Byb3ZpZGVkLCBwcm92aWRlS2V5KSkge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBzb3VyY2UuX3Byb3ZpZGVkW3Byb3ZpZGVLZXldO1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgc291cmNlID0gc291cmNlLiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgICAgICBpZiAoJ2RlZmF1bHQnIGluIGluamVjdFtrZXldKSB7XG4gICAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB0eXBlb2YgcHJvdmlkZURlZmF1bHQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgPyBwcm92aWRlRGVmYXVsdC5jYWxsKHZtKVxuICAgICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIC8qKlxuICAgKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIHJhdyBjaGlsZHJlbiBWTm9kZXMgaW50byBhIHNsb3Qgb2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZVNsb3RzIChcbiAgICBjaGlsZHJlbixcbiAgICBjb250ZXh0XG4gICkge1xuICAgIGlmICghY2hpbGRyZW4gfHwgIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICAgIHZhciBzbG90cyA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIHZhciBkYXRhID0gY2hpbGQuZGF0YTtcbiAgICAgIC8vIHJlbW92ZSBzbG90IGF0dHJpYnV0ZSBpZiB0aGUgbm9kZSBpcyByZXNvbHZlZCBhcyBhIFZ1ZSBzbG90IG5vZGVcbiAgICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhLmF0dHJzLnNsb3Q7XG4gICAgICB9XG4gICAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAgIC8vIHNhbWUgY29udGV4dC5cbiAgICAgIGlmICgoY2hpbGQuY29udGV4dCA9PT0gY29udGV4dCB8fCBjaGlsZC5mbkNvbnRleHQgPT09IGNvbnRleHQpICYmXG4gICAgICAgIGRhdGEgJiYgZGF0YS5zbG90ICE9IG51bGxcbiAgICAgICkge1xuICAgICAgICB2YXIgbmFtZSA9IGRhdGEuc2xvdDtcbiAgICAgICAgdmFyIHNsb3QgPSAoc2xvdHNbbmFtZV0gfHwgKHNsb3RzW25hbWVdID0gW10pKTtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgIHNsb3QucHVzaC5hcHBseShzbG90LCBjaGlsZC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgICBmb3IgKHZhciBuYW1lJDEgaW4gc2xvdHMpIHtcbiAgICAgIGlmIChzbG90c1tuYW1lJDFdLmV2ZXJ5KGlzV2hpdGVzcGFjZSkpIHtcbiAgICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzbG90c1xuICB9XG5cbiAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChub2RlKSB7XG4gICAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gICAgc2xvdHMsXG4gICAgbm9ybWFsU2xvdHMsXG4gICAgcHJldlNsb3RzXG4gICkge1xuICAgIHZhciByZXM7XG4gICAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gICAgdmFyIGlzU3RhYmxlID0gc2xvdHMgPyAhIXNsb3RzLiRzdGFibGUgOiAhaGFzTm9ybWFsU2xvdHM7XG4gICAgdmFyIGtleSA9IHNsb3RzICYmIHNsb3RzLiRrZXk7XG4gICAgaWYgKCFzbG90cykge1xuICAgICAgcmVzID0ge307XG4gICAgfSBlbHNlIGlmIChzbG90cy5fbm9ybWFsaXplZCkge1xuICAgICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgICByZXR1cm4gc2xvdHMuX25vcm1hbGl6ZWRcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaXNTdGFibGUgJiZcbiAgICAgIHByZXZTbG90cyAmJlxuICAgICAgcHJldlNsb3RzICE9PSBlbXB0eU9iamVjdCAmJlxuICAgICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICAgIWhhc05vcm1hbFNsb3RzICYmXG4gICAgICAhcHJldlNsb3RzLiRoYXNOb3JtYWxcbiAgICApIHtcbiAgICAgIC8vIGZhc3QgcGF0aCAyOiBzdGFibGUgc2NvcGVkIHNsb3RzIHcvIG5vIG5vcm1hbCBzbG90cyB0byBwcm94eSxcbiAgICAgIC8vIG9ubHkgbmVlZCB0byBub3JtYWxpemUgb25jZVxuICAgICAgcmV0dXJuIHByZXZTbG90c1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSB7fTtcbiAgICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICAgIGlmIChzbG90c1trZXkkMV0gJiYga2V5JDFbMF0gIT09ICckJykge1xuICAgICAgICAgIHJlc1trZXkkMV0gPSBub3JtYWxpemVTY29wZWRTbG90KG5vcm1hbFNsb3RzLCBrZXkkMSwgc2xvdHNba2V5JDFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gICAgZm9yICh2YXIga2V5JDIgaW4gbm9ybWFsU2xvdHMpIHtcbiAgICAgIGlmICghKGtleSQyIGluIHJlcykpIHtcbiAgICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gICAgLy8gYW5kIHdoZW4gdGhhdCBpcyBwYXNzZWQgZG93biB0aGlzIHdvdWxkIGNhdXNlIGFuIGVycm9yXG4gICAgaWYgKHNsb3RzICYmIE9iamVjdC5pc0V4dGVuc2libGUoc2xvdHMpKSB7XG4gICAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICAgIH1cbiAgICBkZWYocmVzLCAnJHN0YWJsZScsIGlzU3RhYmxlKTtcbiAgICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gICAgZGVmKHJlcywgJyRoYXNOb3JtYWwnLCBoYXNOb3JtYWxTbG90cyk7XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplU2NvcGVkU2xvdChub3JtYWxTbG90cywga2V5LCBmbikge1xuICAgIHZhciBub3JtYWxpemVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgICAgcmVzID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHJlcylcbiAgICAgICAgPyBbcmVzXSAvLyBzaW5nbGUgdm5vZGVcbiAgICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgICAgcmV0dXJuIHJlcyAmJiAoXG4gICAgICAgIHJlcy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICAgICkgPyB1bmRlZmluZWRcbiAgICAgICAgOiByZXNcbiAgICB9O1xuICAgIC8vIHRoaXMgaXMgYSBzbG90IHVzaW5nIHRoZSBuZXcgdi1zbG90IHN5bnRheCB3aXRob3V0IHNjb3BlLiBhbHRob3VnaCBpdCBpc1xuICAgIC8vIGNvbXBpbGVkIGFzIGEgc2NvcGVkIHNsb3QsIHJlbmRlciBmbiB1c2VycyB3b3VsZCBleHBlY3QgaXQgdG8gYmUgcHJlc2VudFxuICAgIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICAgIGlmIChmbi5wcm94eSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vcm1hbFNsb3RzLCBrZXksIHtcbiAgICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgZnVuY3Rpb24gcHJveHlOb3JtYWxTbG90KHNsb3RzLCBrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc2xvdHNba2V5XTsgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXJMaXN0IChcbiAgICB2YWwsXG4gICAgcmVuZGVyXG4gICkge1xuICAgIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpIHx8IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXQgPSBuZXcgQXJyYXkodmFsLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICByZXRbaV0gPSByZW5kZXIodmFsW2ldLCBpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICByZXQgPSBuZXcgQXJyYXkodmFsKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSkge1xuICAgICAgaWYgKGhhc1N5bWJvbCAmJiB2YWxbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICByZXQgPSBbXTtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gdmFsW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICAgIHJldC5wdXNoKHJlbmRlcihyZXN1bHQudmFsdWUsIHJldC5sZW5ndGgpKTtcbiAgICAgICAgICByZXN1bHQgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzRGVmKHJldCkpIHtcbiAgICAgIHJldCA9IFtdO1xuICAgIH1cbiAgICAocmV0KS5faXNWTGlzdCA9IHRydWU7XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgLyogICovXG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgPHNsb3Q+XG4gICAqL1xuICBmdW5jdGlvbiByZW5kZXJTbG90IChcbiAgICBuYW1lLFxuICAgIGZhbGxiYWNrLFxuICAgIHByb3BzLFxuICAgIGJpbmRPYmplY3RcbiAgKSB7XG4gICAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICAgIHZhciBub2RlcztcbiAgICBpZiAoc2NvcGVkU2xvdEZuKSB7IC8vIHNjb3BlZCBzbG90XG4gICAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgICB9XG4gICAgICBub2RlcyA9IHNjb3BlZFNsb3RGbihwcm9wcykgfHwgZmFsbGJhY2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzID0gdGhpcy4kc2xvdHNbbmFtZV0gfHwgZmFsbGJhY2s7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldCA9IHByb3BzICYmIHByb3BzLnNsb3Q7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub2Rlc1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiBSdW50aW1lIGhlbHBlciBmb3IgcmVzb2x2aW5nIGZpbHRlcnNcbiAgICovXG4gIGZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gICAgcmV0dXJuIHJlc29sdmVBc3NldCh0aGlzLiRvcHRpb25zLCAnZmlsdGVycycsIGlkLCB0cnVlKSB8fCBpZGVudGl0eVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaXNLZXlOb3RNYXRjaCAoZXhwZWN0LCBhY3R1YWwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShleHBlY3QpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGV4cGVjdCAhPT0gYWN0dWFsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAgICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gICAqIHBhc3NpbmcgaW4gZXZlbnRLZXlOYW1lIGFzIGxhc3QgYXJndW1lbnQgc2VwYXJhdGVseSBmb3IgYmFja3dhcmRzIGNvbXBhdFxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gICAgZXZlbnRLZXlDb2RlLFxuICAgIGtleSxcbiAgICBidWlsdEluS2V5Q29kZSxcbiAgICBldmVudEtleU5hbWUsXG4gICAgYnVpbHRJbktleU5hbWVcbiAgKSB7XG4gICAgdmFyIG1hcHBlZEtleUNvZGUgPSBjb25maWcua2V5Q29kZXNba2V5XSB8fCBidWlsdEluS2V5Q29kZTtcbiAgICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgICAgcmV0dXJuIGlzS2V5Tm90TWF0Y2goYnVpbHRJbktleU5hbWUsIGV2ZW50S2V5TmFtZSlcbiAgICB9IGVsc2UgaWYgKG1hcHBlZEtleUNvZGUpIHtcbiAgICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgICB9IGVsc2UgaWYgKGV2ZW50S2V5TmFtZSkge1xuICAgICAgcmV0dXJuIGh5cGhlbmF0ZShldmVudEtleU5hbWUpICE9PSBrZXlcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICAvKipcbiAgICogUnVudGltZSBoZWxwZXIgZm9yIG1lcmdpbmcgdi1iaW5kPVwib2JqZWN0XCIgaW50byBhIFZOb2RlJ3MgZGF0YS5cbiAgICovXG4gIGZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gICAgZGF0YSxcbiAgICB0YWcsXG4gICAgdmFsdWUsXG4gICAgYXNQcm9wLFxuICAgIGlzU3luY1xuICApIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRvT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaGFzaDtcbiAgICAgICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGtleSApIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBrZXkgPT09ICdjbGFzcycgfHxcbiAgICAgICAgICAgIGtleSA9PT0gJ3N0eWxlJyB8fFxuICAgICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBoYXNoID0gZGF0YTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLmF0dHJzICYmIGRhdGEuYXR0cnMudHlwZTtcbiAgICAgICAgICAgIGhhc2ggPSBhc1Byb3AgfHwgY29uZmlnLm11c3RVc2VQcm9wKHRhZywgdHlwZSwga2V5KVxuICAgICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgICAgOiBkYXRhLmF0dHJzIHx8IChkYXRhLmF0dHJzID0ge30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICAgIGlmICghKGNhbWVsaXplZEtleSBpbiBoYXNoKSAmJiAhKGh5cGhlbmF0ZWRLZXkgaW4gaGFzaCkpIHtcbiAgICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICAgIGlmIChpc1N5bmMpIHtcbiAgICAgICAgICAgICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdmFsdWVba2V5XSA9ICRldmVudDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIHN0YXRpYyB0cmVlcy5cbiAgICovXG4gIGZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gICAgaW5kZXgsXG4gICAgaXNJbkZvclxuICApIHtcbiAgICB2YXIgY2FjaGVkID0gdGhpcy5fc3RhdGljVHJlZXMgfHwgKHRoaXMuX3N0YXRpY1RyZWVzID0gW10pO1xuICAgIHZhciB0cmVlID0gY2FjaGVkW2luZGV4XTtcbiAgICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZS5cbiAgICBpZiAodHJlZSAmJiAhaXNJbkZvcikge1xuICAgICAgcmV0dXJuIHRyZWVcbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlLCByZW5kZXIgYSBmcmVzaCB0cmVlLlxuICAgIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgICB0aGlzLl9yZW5kZXJQcm94eSxcbiAgICAgIG51bGwsXG4gICAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICAgKTtcbiAgICBtYXJrU3RhdGljKHRyZWUsIChcIl9fc3RhdGljX19cIiArIGluZGV4KSwgZmFsc2UpO1xuICAgIHJldHVybiB0cmVlXG4gIH1cblxuICAvKipcbiAgICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAgICogRWZmZWN0aXZlbHkgaXQgbWVhbnMgbWFya2luZyB0aGUgbm9kZSBhcyBzdGF0aWMgd2l0aCBhIHVuaXF1ZSBrZXkuXG4gICAqL1xuICBmdW5jdGlvbiBtYXJrT25jZSAoXG4gICAgdHJlZSxcbiAgICBpbmRleCxcbiAgICBrZXlcbiAgKSB7XG4gICAgbWFya1N0YXRpYyh0cmVlLCAoXCJfX29uY2VfX1wiICsgaW5kZXggKyAoa2V5ID8gKFwiX1wiICsga2V5KSA6IFwiXCIpKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtTdGF0aWMgKFxuICAgIHRyZWUsXG4gICAga2V5LFxuICAgIGlzT25jZVxuICApIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0cmVlKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWVbaV0sIChrZXkgKyBcIl9cIiArIGkpLCBpc09uY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcmtTdGF0aWNOb2RlKHRyZWUsIGtleSwgaXNPbmNlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYXJrU3RhdGljTm9kZSAobm9kZSwga2V5LCBpc09uY2UpIHtcbiAgICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgICBub2RlLmtleSA9IGtleTtcbiAgICBub2RlLmlzT25jZSA9IGlzT25jZTtcbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGJpbmRPYmplY3RMaXN0ZW5lcnMgKGRhdGEsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICAgIG9uW2tleV0gPSBleGlzdGluZyA/IFtdLmNvbmNhdChleGlzdGluZywgb3VycykgOiBvdXJzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMgKFxuICAgIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgICByZXMsXG4gICAgLy8gdGhlIGZvbGxvd2luZyBhcmUgYWRkZWQgaW4gMi42XG4gICAgaGFzRHluYW1pY0tleXMsXG4gICAgY29udGVudEhhc2hLZXlcbiAgKSB7XG4gICAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzbG90ID0gZm5zW2ldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgICAgcmVzb2x2ZVNjb3BlZFNsb3RzKHNsb3QsIHJlcywgaGFzRHluYW1pY0tleXMpO1xuICAgICAgfSBlbHNlIGlmIChzbG90KSB7XG4gICAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgICBpZiAoc2xvdC5wcm94eSkge1xuICAgICAgICAgIHNsb3QuZm4ucHJveHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc1tzbG90LmtleV0gPSBzbG90LmZuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29udGVudEhhc2hLZXkpIHtcbiAgICAgIChyZXMpLiRrZXkgPSBjb250ZW50SGFzaEtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gYmluZER5bmFtaWNLZXlzIChiYXNlT2JqLCB2YWx1ZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiBrZXkpIHtcbiAgICAgICAgYmFzZU9ialt2YWx1ZXNbaV1dID0gdmFsdWVzW2kgKyAxXTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSAnJyAmJiBrZXkgIT09IG51bGwpIHtcbiAgICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiSW52YWxpZCB2YWx1ZSBmb3IgZHluYW1pYyBkaXJlY3RpdmUgYXJndW1lbnQgKGV4cGVjdGVkIHN0cmluZyBvciBudWxsKTogXCIgKyBrZXkpLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhc2VPYmpcbiAgfVxuXG4gIC8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuICAvLyBlbnN1cmUgb25seSBhcHBlbmQgd2hlbiB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2FzdFxuICAvLyB0byBzdHJpbmcgYW5kIGNhdXNlIHRoZSB0eXBlIGNoZWNrIHRvIG1pc3MuXG4gIGZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gc3ltYm9sICsgdmFsdWUgOiB2YWx1ZVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaW5zdGFsbFJlbmRlckhlbHBlcnMgKHRhcmdldCkge1xuICAgIHRhcmdldC5fbyA9IG1hcmtPbmNlO1xuICAgIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICAgIHRhcmdldC5fcyA9IHRvU3RyaW5nO1xuICAgIHRhcmdldC5fbCA9IHJlbmRlckxpc3Q7XG4gICAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgICB0YXJnZXQuX3EgPSBsb29zZUVxdWFsO1xuICAgIHRhcmdldC5faSA9IGxvb3NlSW5kZXhPZjtcbiAgICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gICAgdGFyZ2V0Ll9mID0gcmVzb2x2ZUZpbHRlcjtcbiAgICB0YXJnZXQuX2sgPSBjaGVja0tleUNvZGVzO1xuICAgIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgICB0YXJnZXQuX3YgPSBjcmVhdGVUZXh0Vk5vZGU7XG4gICAgdGFyZ2V0Ll9lID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gICAgdGFyZ2V0Ll9nID0gYmluZE9iamVjdExpc3RlbmVycztcbiAgICB0YXJnZXQuX2QgPSBiaW5kRHluYW1pY0tleXM7XG4gICAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICAgIGRhdGEsXG4gICAgcHJvcHMsXG4gICAgY2hpbGRyZW4sXG4gICAgcGFyZW50LFxuICAgIEN0b3JcbiAgKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gICAgLy8gZ2V0cyBhIHVuaXF1ZSBjb250ZXh0IC0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNvcnJlY3QgbmFtZWQgc2xvdCBjaGVja1xuICAgIHZhciBjb250ZXh0Vm07XG4gICAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICAgIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIGNvbnRleHQgdm0gcGFzc2VkIGluIGlzIGEgZnVuY3Rpb25hbCBjb250ZXh0IGFzIHdlbGwuXG4gICAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAgIC8vIHJlYWwgY29udGV4dCBpbnN0YW5jZS5cbiAgICAgIGNvbnRleHRWbSA9IHBhcmVudDtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgcGFyZW50ID0gcGFyZW50Ll9vcmlnaW5hbDtcbiAgICB9XG4gICAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICAgIHZhciBuZWVkTm9ybWFsaXphdGlvbiA9ICFpc0NvbXBpbGVkO1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgICB0aGlzLmluamVjdGlvbnMgPSByZXNvbHZlSW5qZWN0KG9wdGlvbnMuaW5qZWN0LCBwYXJlbnQpO1xuICAgIHRoaXMuc2xvdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgICAgbm9ybWFsaXplU2NvcGVkU2xvdHMoXG4gICAgICAgICAgZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3Njb3BlZFNsb3RzJywgKHtcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVTY29wZWRTbG90cyhkYXRhLnNjb3BlZFNsb3RzLCB0aGlzLnNsb3RzKCkpXG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgLy8gc3VwcG9ydCBmb3IgY29tcGlsZWQgZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICAgIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgICAvLyBleHBvc2luZyAkb3B0aW9ucyBmb3IgcmVuZGVyU3RhdGljKClcbiAgICAgIHRoaXMuJG9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgICAgdGhpcy4kc2xvdHMgPSB0aGlzLnNsb3RzKCk7XG4gICAgICB0aGlzLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuJHNsb3RzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5fc2NvcGVJZCkge1xuICAgICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICAgIGlmICh2bm9kZSAmJiAhQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgICB2bm9kZS5mblNjb3BlSWQgPSBvcHRpb25zLl9zY29wZUlkO1xuICAgICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTsgfTtcbiAgICB9XG4gIH1cblxuICBpbnN0YWxsUmVuZGVySGVscGVycyhGdW5jdGlvbmFsUmVuZGVyQ29udGV4dC5wcm90b3R5cGUpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICAgIEN0b3IsXG4gICAgcHJvcHNEYXRhLFxuICAgIGRhdGEsXG4gICAgY29udGV4dFZtLFxuICAgIGNoaWxkcmVuXG4gICkge1xuICAgIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAgIHZhciBwcm9wcyA9IHt9O1xuICAgIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gICAgaWYgKGlzRGVmKHByb3BPcHRpb25zKSkge1xuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgICBpZiAoaXNEZWYoZGF0YS5wcm9wcykpIHsgbWVyZ2VQcm9wcyhwcm9wcywgZGF0YS5wcm9wcyk7IH1cbiAgICB9XG5cbiAgICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICAgIGRhdGEsXG4gICAgICBwcm9wcyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY29udGV4dFZtLFxuICAgICAgQ3RvclxuICAgICk7XG5cbiAgICB2YXIgdm5vZGUgPSBvcHRpb25zLnJlbmRlci5jYWxsKG51bGwsIHJlbmRlckNvbnRleHQuX2MsIHJlbmRlckNvbnRleHQpO1xuXG4gICAgaWYgKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICB2YXIgdm5vZGVzID0gbm9ybWFsaXplQ2hpbGRyZW4odm5vZGUpIHx8IFtdO1xuICAgICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc1tpXSA9IGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQodm5vZGVzW2ldLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCAodm5vZGUsIGRhdGEsIGNvbnRleHRWbSwgb3B0aW9ucywgcmVuZGVyQ29udGV4dCkge1xuICAgIC8vICM3ODE3IGNsb25lIG5vZGUgYmVmb3JlIHNldHRpbmcgZm5Db250ZXh0LCBvdGhlcndpc2UgaWYgdGhlIG5vZGUgaXMgcmV1c2VkXG4gICAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gICAgLy8gdGhhdCBzaG91bGQgbm90IGJlIG1hdGNoZWQgdG8gbWF0Y2guXG4gICAgdmFyIGNsb25lID0gY2xvbmVWTm9kZSh2bm9kZSk7XG4gICAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICAgIGNsb25lLmZuT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAge1xuICAgICAgKGNsb25lLmRldnRvb2xzTWV0YSA9IGNsb25lLmRldnRvb2xzTWV0YSB8fCB7fSkucmVuZGVyQ29udGV4dCA9IHJlbmRlckNvbnRleHQ7XG4gICAgfVxuICAgIGlmIChkYXRhLnNsb3QpIHtcbiAgICAgIChjbG9uZS5kYXRhIHx8IChjbG9uZS5kYXRhID0ge30pKS5zbG90ID0gZGF0YS5zbG90O1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVcbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlUHJvcHMgKHRvLCBmcm9tKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2NhbWVsaXplKGtleSldID0gZnJvbVtrZXldO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIC8vIGlubGluZSBob29rcyB0byBiZSBpbnZva2VkIG9uIGNvbXBvbmVudCBWTm9kZXMgZHVyaW5nIHBhdGNoXG4gIHZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQgKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICAgIXZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCAmJlxuICAgICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZVxuICAgICAgKSB7XG4gICAgICAgIC8vIGtlcHQtYWxpdmUgY29tcG9uZW50cywgdHJlYXQgYXMgYSBwYXRjaFxuICAgICAgICB2YXIgbW91bnRlZE5vZGUgPSB2bm9kZTsgLy8gd29yayBhcm91bmQgZmxvd1xuICAgICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUoXG4gICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgYWN0aXZlSW5zdGFuY2VcbiAgICAgICAgKTtcbiAgICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIG9wdGlvbnMucHJvcHNEYXRhLCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgICB2bm9kZSwgLy8gbmV3IHBhcmVudCB2bm9kZVxuICAgICAgICBvcHRpb25zLmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQgKHZub2RlKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgY2FsbEhvb2soY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgICB9XG4gICAgICBpZiAodm5vZGUuZGF0YS5rZWVwQWxpdmUpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxuICAgICAgICAgIC8vIER1cmluZyB1cGRhdGVzLCBhIGtlcHQtYWxpdmUgY29tcG9uZW50J3MgY2hpbGQgY29tcG9uZW50cyBtYXlcbiAgICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXG4gICAgICAgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSB3aG9sZSBwYXRjaCBwcm9jZXNzIGVuZGVkLlxuICAgICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGhvb2tzVG9NZXJnZSA9IE9iamVjdC5rZXlzKGNvbXBvbmVudFZOb2RlSG9va3MpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAoXG4gICAgQ3RvcixcbiAgICBkYXRhLFxuICAgIGNvbnRleHQsXG4gICAgY2hpbGRyZW4sXG4gICAgdGFnXG4gICkge1xuICAgIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgYmFzZUN0b3IgPSBjb250ZXh0LiRvcHRpb25zLl9iYXNlO1xuXG4gICAgLy8gcGxhaW4gb3B0aW9ucyBvYmplY3Q6IHR1cm4gaXQgaW50byBhIGNvbnN0cnVjdG9yXG4gICAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgICBDdG9yID0gYmFzZUN0b3IuZXh0ZW5kKEN0b3IpO1xuICAgIH1cblxuICAgIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgICAvLyByZWplY3QuXG4gICAgaWYgKHR5cGVvZiBDdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm4oKFwiSW52YWxpZCBDb21wb25lbnQgZGVmaW5pdGlvbjogXCIgKyAoU3RyaW5nKEN0b3IpKSksIGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gYXN5bmMgY29tcG9uZW50XG4gICAgdmFyIGFzeW5jRmFjdG9yeTtcbiAgICBpZiAoaXNVbmRlZihDdG9yLmNpZCkpIHtcbiAgICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgICBDdG9yID0gcmVzb2x2ZUFzeW5jQ29tcG9uZW50KGFzeW5jRmFjdG9yeSwgYmFzZUN0b3IpO1xuICAgICAgaWYgKEN0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAgIC8vIGFzIGEgY29tbWVudCBub2RlIGJ1dCBwcmVzZXJ2ZXMgYWxsIHRoZSByYXcgaW5mb3JtYXRpb24gZm9yIHRoZSBub2RlLlxuICAgICAgICAvLyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGZvciBhc3luYyBzZXJ2ZXItcmVuZGVyaW5nIGFuZCBoeWRyYXRpb24uXG4gICAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICAgIGFzeW5jRmFjdG9yeSxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgdGFnXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAgIC8vIHJlc29sdmUgY29uc3RydWN0b3Igb3B0aW9ucyBpbiBjYXNlIGdsb2JhbCBtaXhpbnMgYXJlIGFwcGxpZWQgYWZ0ZXJcbiAgICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IgY3JlYXRpb25cbiAgICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gICAgLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGRhdGEgaW50byBwcm9wcyAmIGV2ZW50c1xuICAgIGlmIChpc0RlZihkYXRhLm1vZGVsKSkge1xuICAgICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IHByb3BzXG4gICAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnKTtcblxuICAgIC8vIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gICAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50KEN0b3IsIHByb3BzRGF0YSwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pXG4gICAgfVxuXG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBjaGlsZCBjb21wb25lbnQgbGlzdGVuZXJzIGluc3RlYWQgb2YgRE9NIGxpc3RlbmVyc1xuICAgIHZhciBsaXN0ZW5lcnMgPSBkYXRhLm9uO1xuICAgIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gICAgLy8gc28gaXQgZ2V0cyBwcm9jZXNzZWQgZHVyaW5nIHBhcmVudCBjb21wb25lbnQgcGF0Y2guXG4gICAgZGF0YS5vbiA9IGRhdGEubmF0aXZlT247XG5cbiAgICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAgIC8vIGFic3RyYWN0IGNvbXBvbmVudHMgZG8gbm90IGtlZXAgYW55dGhpbmdcbiAgICAgIC8vIG90aGVyIHRoYW4gcHJvcHMgJiBsaXN0ZW5lcnMgJiBzbG90XG5cbiAgICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICAgIHZhciBzbG90ID0gZGF0YS5zbG90O1xuICAgICAgZGF0YSA9IHt9O1xuICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgZGF0YS5zbG90ID0gc2xvdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpbnN0YWxsIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgICBpbnN0YWxsQ29tcG9uZW50SG9va3MoZGF0YSk7XG5cbiAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICAgIHZhciBuYW1lID0gQ3Rvci5vcHRpb25zLm5hbWUgfHwgdGFnO1xuICAgIHZhciB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgICBkYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb250ZXh0LFxuICAgICAgeyBDdG9yOiBDdG9yLCBwcm9wc0RhdGE6IHByb3BzRGF0YSwgbGlzdGVuZXJzOiBsaXN0ZW5lcnMsIHRhZzogdGFnLCBjaGlsZHJlbjogY2hpbGRyZW4gfSxcbiAgICAgIGFzeW5jRmFjdG9yeVxuICAgICk7XG5cbiAgICByZXR1cm4gdm5vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudEluc3RhbmNlRm9yVm5vZGUgKFxuICAgIHZub2RlLCAvLyB3ZSBrbm93IGl0J3MgTW91bnRlZENvbXBvbmVudFZOb2RlIGJ1dCBmbG93IGRvZXNuJ3RcbiAgICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4gICkge1xuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgICAgX3BhcmVudFZub2RlOiB2bm9kZSxcbiAgICAgIHBhcmVudDogcGFyZW50XG4gICAgfTtcbiAgICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICAgIHZhciBpbmxpbmVUZW1wbGF0ZSA9IHZub2RlLmRhdGEuaW5saW5lVGVtcGxhdGU7XG4gICAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBpbmxpbmVUZW1wbGF0ZS5yZW5kZXI7XG4gICAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGlubGluZVRlbXBsYXRlLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB2bm9kZS5jb21wb25lbnRPcHRpb25zLkN0b3Iob3B0aW9ucylcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICAgIHZhciBob29rcyA9IGRhdGEuaG9vayB8fCAoZGF0YS5ob29rID0ge30pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3NUb01lcmdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgICAgdmFyIGV4aXN0aW5nID0gaG9va3Nba2V5XTtcbiAgICAgIHZhciB0b01lcmdlID0gY29tcG9uZW50Vk5vZGVIb29rc1trZXldO1xuICAgICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgICAgaG9va3Nba2V5XSA9IGV4aXN0aW5nID8gbWVyZ2VIb29rJDEodG9NZXJnZSwgZXhpc3RpbmcpIDogdG9NZXJnZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUhvb2skMSAoZjEsIGYyKSB7XG4gICAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBmbG93IGNvbXBsYWlucyBhYm91dCBleHRyYSBhcmdzIHdoaWNoIGlzIHdoeSB3ZSB1c2UgYW55XG4gICAgICBmMShhLCBiKTtcbiAgICAgIGYyKGEsIGIpO1xuICAgIH07XG4gICAgbWVyZ2VkLl9tZXJnZWQgPSB0cnVlO1xuICAgIHJldHVybiBtZXJnZWRcbiAgfVxuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBpbmZvICh2YWx1ZSBhbmQgY2FsbGJhY2spIGludG9cbiAgLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU1vZGVsIChvcHRpb25zLCBkYXRhKSB7XG4gICAgdmFyIHByb3AgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLnByb3ApIHx8ICd2YWx1ZSc7XG4gICAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICAgIDsoZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KSlbcHJvcF0gPSBkYXRhLm1vZGVsLnZhbHVlO1xuICAgIHZhciBvbiA9IGRhdGEub24gfHwgKGRhdGEub24gPSB7fSk7XG4gICAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICAgIHZhciBjYWxsYmFjayA9IGRhdGEubW9kZWwuY2FsbGJhY2s7XG4gICAgaWYgKGlzRGVmKGV4aXN0aW5nKSkge1xuICAgICAgaWYgKFxuICAgICAgICBBcnJheS5pc0FycmF5KGV4aXN0aW5nKVxuICAgICAgICAgID8gZXhpc3RpbmcuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xXG4gICAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICAgICkge1xuICAgICAgICBvbltldmVudF0gPSBbY2FsbGJhY2tdLmNvbmNhdChleGlzdGluZyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uW2V2ZW50XSA9IGNhbGxiYWNrO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbiAgdmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuXG4gIC8vIHdyYXBwZXIgZnVuY3Rpb24gZm9yIHByb3ZpZGluZyBhIG1vcmUgZmxleGlibGUgaW50ZXJmYWNlXG4gIC8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50IChcbiAgICBjb250ZXh0LFxuICAgIHRhZyxcbiAgICBkYXRhLFxuICAgIGNoaWxkcmVuLFxuICAgIG5vcm1hbGl6YXRpb25UeXBlLFxuICAgIGFsd2F5c05vcm1hbGl6ZVxuICApIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcbiAgICAgIGNoaWxkcmVuID0gZGF0YTtcbiAgICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpc1RydWUoYWx3YXlzTm9ybWFsaXplKSkge1xuICAgICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICAgIH1cbiAgICByZXR1cm4gX2NyZWF0ZUVsZW1lbnQoY29udGV4dCwgdGFnLCBkYXRhLCBjaGlsZHJlbiwgbm9ybWFsaXphdGlvblR5cGUpXG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRWxlbWVudCAoXG4gICAgY29udGV4dCxcbiAgICB0YWcsXG4gICAgZGF0YSxcbiAgICBjaGlsZHJlbixcbiAgICBub3JtYWxpemF0aW9uVHlwZVxuICApIHtcbiAgICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoKGRhdGEpLl9fb2JfXykpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAgICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICAgIH1cbiAgICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgICAgdGFnID0gZGF0YS5pcztcbiAgICB9XG4gICAgaWYgKCF0YWcpIHtcbiAgICAgIC8vIGluIGNhc2Ugb2YgY29tcG9uZW50IDppcyBzZXQgdG8gZmFsc3kgdmFsdWVcbiAgICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgICB9XG4gICAgLy8gd2FybiBhZ2FpbnN0IG5vbi1wcmltaXRpdmUga2V5XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpXG4gICAgKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0F2b2lkIHVzaW5nIG5vbi1wcmltaXRpdmUgdmFsdWUgYXMga2V5LCAnICtcbiAgICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gc3VwcG9ydCBzaW5nbGUgZnVuY3Rpb24gY2hpbGRyZW4gYXMgZGVmYXVsdCBzY29wZWQgc2xvdFxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgICBjaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgIH1cbiAgICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICAgIGNoaWxkcmVuID0gbm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICAgIH1cbiAgICB2YXIgdm5vZGUsIG5zO1xuICAgIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIEN0b3I7XG4gICAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgICAgLy8gcGxhdGZvcm0gYnVpbHQtaW4gZWxlbWVudHNcbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEubmF0aXZlT24pKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIlRoZSAubmF0aXZlIG1vZGlmaWVyIGZvciB2LW9uIGlzIG9ubHkgdmFsaWQgb24gY29tcG9uZW50cyBidXQgaXQgd2FzIHVzZWQgb24gPFwiICsgdGFnICsgXCI+LlwiKSxcbiAgICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KEN0b3IsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuLCB0YWcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAgIC8vIGNoZWNrIGF0IHJ1bnRpbWUgYmVjYXVzZSBpdCBtYXkgZ2V0IGFzc2lnbmVkIGEgbmFtZXNwYWNlIHdoZW4gaXRzXG4gICAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICAgIHRhZywgZGF0YSwgY2hpbGRyZW4sXG4gICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICAgIHZub2RlID0gY3JlYXRlQ29tcG9uZW50KHRhZywgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4pO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgICBpZiAoaXNEZWYobnMpKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7IHJlZ2lzdGVyRGVlcEJpbmRpbmdzKGRhdGEpOyB9XG4gICAgICByZXR1cm4gdm5vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5TlMgKHZub2RlLCBucywgZm9yY2UpIHtcbiAgICB2bm9kZS5ucyA9IG5zO1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgICAgLy8gdXNlIGRlZmF1bHQgbmFtZXNwYWNlIGluc2lkZSBmb3JlaWduT2JqZWN0XG4gICAgICBucyA9IHVuZGVmaW5lZDtcbiAgICAgIGZvcmNlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgICBpc1VuZGVmKGNoaWxkLm5zKSB8fCAoaXNUcnVlKGZvcmNlKSAmJiBjaGlsZC50YWcgIT09ICdzdmcnKSkpIHtcbiAgICAgICAgICBhcHBseU5TKGNoaWxkLCBucywgZm9yY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gcmVmICM1MzE4XG4gIC8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgcGFyZW50IHJlLXJlbmRlciB3aGVuIGRlZXAgYmluZGluZ3MgbGlrZSA6c3R5bGUgYW5kXG4gIC8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyRGVlcEJpbmRpbmdzIChkYXRhKSB7XG4gICAgaWYgKGlzT2JqZWN0KGRhdGEuc3R5bGUpKSB7XG4gICAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRhdGEuY2xhc3MpKSB7XG4gICAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xuICAgIHZtLl92bm9kZSA9IG51bGw7IC8vIHRoZSByb290IG9mIHRoZSBjaGlsZCB0cmVlXG4gICAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgdmFyIHBhcmVudFZub2RlID0gdm0uJHZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7IC8vIHRoZSBwbGFjZWhvbGRlciBub2RlIGluIHBhcmVudCB0cmVlXG4gICAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiwgcmVuZGVyQ29udGV4dCk7XG4gICAgdm0uJHNjb3BlZFNsb3RzID0gZW1wdHlPYmplY3Q7XG4gICAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gICAgLy8gc28gdGhhdCB3ZSBnZXQgcHJvcGVyIHJlbmRlciBjb250ZXh0IGluc2lkZSBpdC5cbiAgICAvLyBhcmdzIG9yZGVyOiB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSwgYWx3YXlzTm9ybWFsaXplXG4gICAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgICB2bS5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KHZtLCBhLCBiLCBjLCBkLCBmYWxzZSk7IH07XG4gICAgLy8gbm9ybWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBmb3IgdGhlIHB1YmxpYyB2ZXJzaW9uLCB1c2VkIGluXG4gICAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gICAgdm0uJGNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgdHJ1ZSk7IH07XG5cbiAgICAvLyAkYXR0cnMgJiAkbGlzdGVuZXJzIGFyZSBleHBvc2VkIGZvciBlYXNpZXIgSE9DIGNyZWF0aW9uLlxuICAgIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgICB2YXIgcGFyZW50RGF0YSA9IHBhcmVudFZub2RlICYmIHBhcmVudFZub2RlLmRhdGE7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gcmVuZGVyTWl4aW4gKFZ1ZSkge1xuICAgIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gICAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICAgIH07XG5cbiAgICBWdWUucHJvdG90eXBlLl9yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgICAgdmFyIHJlbmRlciA9IHJlZi5yZW5kZXI7XG4gICAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgICAgaWYgKF9wYXJlbnRWbm9kZSkge1xuICAgICAgICB2bS4kc2NvcGVkU2xvdHMgPSBub3JtYWxpemVTY29wZWRTbG90cyhcbiAgICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgICB2bS4kc2xvdHMsXG4gICAgICAgICAgdm0uJHNjb3BlZFNsb3RzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCBwYXJlbnQgdm5vZGUuIHRoaXMgYWxsb3dzIHJlbmRlciBmdW5jdGlvbnMgdG8gaGF2ZSBhY2Nlc3NcbiAgICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgICAgdm0uJHZub2RlID0gX3BhcmVudFZub2RlO1xuICAgICAgLy8gcmVuZGVyIHNlbGZcbiAgICAgIHZhciB2bm9kZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBtYWludGFpbiBhIHN0YWNrIGJlY2F1c2UgYWxsIHJlbmRlciBmbnMgYXJlIGNhbGxlZFxuICAgICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgICAgLy8gd2hlbiBwYXJlbnQgY29tcG9uZW50IGlzIHBhdGNoZWQuXG4gICAgICAgIGN1cnJlbnRSZW5kZXJpbmdJbnN0YW5jZSA9IHZtO1xuICAgICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJcIik7XG4gICAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgICAvLyBvciBwcmV2aW91cyB2bm9kZSB0byBwcmV2ZW50IHJlbmRlciBlcnJvciBjYXVzaW5nIGJsYW5rIGNvbXBvbmVudFxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAodm0uJG9wdGlvbnMucmVuZGVyRXJyb3IpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdm5vZGUgPSB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQsIGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSAmJiB2bm9kZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdm5vZGUgPSB2bm9kZVswXTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICAgIGlmICghKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICAgJ3Nob3VsZCByZXR1cm4gYSBzaW5nbGUgcm9vdCBub2RlLicsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgcGFyZW50XG4gICAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgICByZXR1cm4gdm5vZGVcbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gZW5zdXJlQ3RvciAoY29tcCwgYmFzZSkge1xuICAgIGlmIChcbiAgICAgIGNvbXAuX19lc01vZHVsZSB8fFxuICAgICAgKGhhc1N5bWJvbCAmJiBjb21wW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdNb2R1bGUnKVxuICAgICkge1xuICAgICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgICA/IGJhc2UuZXh0ZW5kKGNvbXApXG4gICAgICA6IGNvbXBcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIgKFxuICAgIGZhY3RvcnksXG4gICAgZGF0YSxcbiAgICBjb250ZXh0LFxuICAgIGNoaWxkcmVuLFxuICAgIHRhZ1xuICApIHtcbiAgICB2YXIgbm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgICByZXR1cm4gbm9kZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50IChcbiAgICBmYWN0b3J5LFxuICAgIGJhc2VDdG9yXG4gICkge1xuICAgIGlmIChpc1RydWUoZmFjdG9yeS5lcnJvcikgJiYgaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgICB9XG5cbiAgICBpZiAoaXNEZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gICAgfVxuXG4gICAgdmFyIG93bmVyID0gY3VycmVudFJlbmRlcmluZ0luc3RhbmNlO1xuICAgIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgICAvLyBhbHJlYWR5IHBlbmRpbmdcbiAgICAgIGZhY3Rvcnkub3duZXJzLnB1c2gob3duZXIpO1xuICAgIH1cblxuICAgIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihmYWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkubG9hZGluZ0NvbXBcbiAgICB9XG5cbiAgICBpZiAob3duZXIgJiYgIWlzRGVmKGZhY3Rvcnkub3duZXJzKSkge1xuICAgICAgdmFyIG93bmVycyA9IGZhY3Rvcnkub3duZXJzID0gW293bmVyXTtcbiAgICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICAgIHZhciB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgdmFyIHRpbWVyVGltZW91dCA9IG51bGxcblxuICAgICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICAgIHZhciBmb3JjZVJlbmRlciA9IGZ1bmN0aW9uIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvd25lcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgaWYgKHRpbWVyTG9hZGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyTG9hZGluZyk7XG4gICAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGltZXJUaW1lb3V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2YXIgcmVzb2x2ZSA9IG9uY2UoZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrcyBvbmx5IGlmIHRoaXMgaXMgbm90IGEgc3luY2hyb25vdXMgcmVzb2x2ZVxuICAgICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJGYWlsZWQgdG8gcmVzb2x2ZSBhc3luYyBjb21wb25lbnQ6IFwiICsgKFN0cmluZyhmYWN0b3J5KSkgK1xuICAgICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgICApO1xuICAgICAgICBpZiAoaXNEZWYoZmFjdG9yeS5lcnJvckNvbXApKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgZm9yY2VSZW5kZXIodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgcmVzID0gZmFjdG9yeShyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICBpZiAoaXNPYmplY3QocmVzKSkge1xuICAgICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgICAgaWYgKGlzVW5kZWYoZmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvbWlzZShyZXMuY29tcG9uZW50KSkge1xuICAgICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgICAgaWYgKGlzRGVmKHJlcy5lcnJvcikpIHtcbiAgICAgICAgICAgIGZhY3RvcnkuZXJyb3JDb21wID0gZW5zdXJlQ3RvcihyZXMuZXJyb3IsIGJhc2VDdG9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNEZWYocmVzLmxvYWRpbmcpKSB7XG4gICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmdDb21wID0gZW5zdXJlQ3RvcihyZXMubG9hZGluZywgYmFzZUN0b3IpO1xuICAgICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSAmJiBpc1VuZGVmKGZhY3RvcnkuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZm9yY2VSZW5kZXIoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgICAgXCJ0aW1lb3V0IChcIiArIChyZXMudGltZW91dCkgKyBcIm1zKVwiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLnRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzeW5jID0gZmFsc2U7XG4gICAgICAvLyByZXR1cm4gaW4gY2FzZSByZXNvbHZlZCBzeW5jaHJvbm91c2x5XG4gICAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nXG4gICAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgICA6IGZhY3RvcnkucmVzb2x2ZWRcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpc0FzeW5jUGxhY2Vob2xkZXIgKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3RvcnlcbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChpc0RlZihjKSAmJiAoaXNEZWYoYy5jb21wb25lbnRPcHRpb25zKSB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYykpKSB7XG4gICAgICAgICAgcmV0dXJuIGNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gICAgdm0uX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdm0uX2hhc0hvb2tFdmVudCA9IGZhbHNlO1xuICAgIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICAgIHZhciBsaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGFyZ2V0O1xuXG4gIGZ1bmN0aW9uIGFkZCAoZXZlbnQsIGZuKSB7XG4gICAgdGFyZ2V0LiRvbihldmVudCwgZm4pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlJDEgKGV2ZW50LCBmbikge1xuICAgIHRhcmdldC4kb2ZmKGV2ZW50LCBmbik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKHJlcyAhPT0gbnVsbCkge1xuICAgICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnMgKFxuICAgIHZtLFxuICAgIGxpc3RlbmVycyxcbiAgICBvbGRMaXN0ZW5lcnNcbiAgKSB7XG4gICAgdGFyZ2V0ID0gdm07XG4gICAgdXBkYXRlTGlzdGVuZXJzKGxpc3RlbmVycywgb2xkTGlzdGVuZXJzIHx8IHt9LCBhZGQsIHJlbW92ZSQxLCBjcmVhdGVPbmNlSGFuZGxlciwgdm0pO1xuICAgIHRhcmdldCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV2ZW50c01peGluIChWdWUpIHtcbiAgICB2YXIgaG9va1JFID0gL15ob29rOi87XG4gICAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgdm0uJG9uKGV2ZW50W2ldLCBmbik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICh2bS5fZXZlbnRzW2V2ZW50XSB8fCAodm0uX2V2ZW50c1tldmVudF0gPSBbXSkpLnB1c2goZm4pO1xuICAgICAgICAvLyBvcHRpbWl6ZSBob29rOmV2ZW50IGNvc3QgYnkgdXNpbmcgYSBib29sZWFuIGZsYWcgbWFya2VkIGF0IHJlZ2lzdHJhdGlvblxuICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgICAgaWYgKGhvb2tSRS50ZXN0KGV2ZW50KSkge1xuICAgICAgICAgIHZtLl9oYXNIb29rRXZlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9O1xuXG4gICAgVnVlLnByb3RvdHlwZS4kb25jZSA9IGZ1bmN0aW9uIChldmVudCwgZm4pIHtcbiAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICAgIHZtLiRvZmYoZXZlbnQsIG9uKTtcbiAgICAgICAgZm4uYXBwbHkodm0sIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBvbi5mbiA9IGZuO1xuICAgICAgdm0uJG9uKGV2ZW50LCBvbik7XG4gICAgICByZXR1cm4gdm1cbiAgICB9O1xuXG4gICAgVnVlLnByb3RvdHlwZS4kb2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIC8vIGFsbFxuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICByZXR1cm4gdm1cbiAgICAgIH1cbiAgICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAodmFyIGkkMSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkkMSA8IGw7IGkkMSsrKSB7XG4gICAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZtXG4gICAgICB9XG4gICAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgICAgdmFyIGNicyA9IHZtLl9ldmVudHNbZXZlbnRdO1xuICAgICAgaWYgKCFjYnMpIHtcbiAgICAgICAgcmV0dXJuIHZtXG4gICAgICB9XG4gICAgICBpZiAoIWZuKSB7XG4gICAgICAgIHZtLl9ldmVudHNbZXZlbnRdID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHZtXG4gICAgICB9XG4gICAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgICB2YXIgY2I7XG4gICAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGNiID0gY2JzW2ldO1xuICAgICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICAgIGNicy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZtXG4gICAgfTtcblxuICAgIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICB7XG4gICAgICAgIHZhciBsb3dlckNhc2VFdmVudCA9IGV2ZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgICB0aXAoXG4gICAgICAgICAgICBcIkV2ZW50IFxcXCJcIiArIGxvd2VyQ2FzZUV2ZW50ICsgXCJcXFwiIGlzIGVtaXR0ZWQgaW4gY29tcG9uZW50IFwiICtcbiAgICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgICAgXCJ2LW9uIHRvIGxpc3RlbiB0byBjYW1lbENhc2UgZXZlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIHRlbXBsYXRlcy4gXCIgK1xuICAgICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICAgIGlmIChjYnMpIHtcbiAgICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgICB2YXIgaW5mbyA9IFwiZXZlbnQgaGFuZGxlciBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoY2JzW2ldLCB2bSwgYXJncywgdm0sIGluZm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcbiAgdmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHNldEFjdGl2ZUluc3RhbmNlKHZtKSB7XG4gICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlID0gcHJldkFjdGl2ZUluc3RhbmNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAgIC8vIGxvY2F0ZSBmaXJzdCBub24tYWJzdHJhY3QgcGFyZW50XG4gICAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHdoaWxlIChwYXJlbnQuJG9wdGlvbnMuYWJzdHJhY3QgJiYgcGFyZW50LiRwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICBwYXJlbnQuJGNoaWxkcmVuLnB1c2godm0pO1xuICAgIH1cblxuICAgIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gICAgdm0uJHJvb3QgPSBwYXJlbnQgPyBwYXJlbnQuJHJvb3QgOiB2bTtcblxuICAgIHZtLiRjaGlsZHJlbiA9IFtdO1xuICAgIHZtLiRyZWZzID0ge307XG5cbiAgICB2bS5fd2F0Y2hlciA9IG51bGw7XG4gICAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgICB2bS5faXNNb3VudGVkID0gZmFsc2U7XG4gICAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpZmVjeWNsZU1peGluIChWdWUpIHtcbiAgICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIHZhciBwcmV2RWwgPSB2bS4kZWw7XG4gICAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHZtKTtcbiAgICAgIHZtLl92bm9kZSA9IHZub2RlO1xuICAgICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgICAvLyBiYXNlZCBvbiB0aGUgcmVuZGVyaW5nIGJhY2tlbmQgdXNlZC5cbiAgICAgIGlmICghcHJldlZub2RlKSB7XG4gICAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICAgIHZtLiRlbCA9IHZtLl9fcGF0Y2hfXyh2bS4kZWwsIHZub2RlLCBoeWRyYXRpbmcsIGZhbHNlIC8qIHJlbW92ZU9ubHkgKi8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlc1xuICAgICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18ocHJldlZub2RlLCB2bm9kZSk7XG4gICAgICB9XG4gICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgIC8vIHVwZGF0ZSBfX3Z1ZV9fIHJlZmVyZW5jZVxuICAgICAgaWYgKHByZXZFbCkge1xuICAgICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAodm0uJGVsKSB7XG4gICAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgICB9XG4gICAgICAvLyBpZiBwYXJlbnQgaXMgYW4gSE9DLCB1cGRhdGUgaXRzICRlbCBhcyB3ZWxsXG4gICAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgICB2bS4kcGFyZW50LiRlbCA9IHZtLiRlbDtcbiAgICAgIH1cbiAgICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAgIC8vIHVwZGF0ZWQgaW4gYSBwYXJlbnQncyB1cGRhdGVkIGhvb2suXG4gICAgfTtcblxuICAgIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIGlmICh2bS5fd2F0Y2hlcikge1xuICAgICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2bSA9IHRoaXM7XG4gICAgICBpZiAodm0uX2lzQmVpbmdEZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZURlc3Ryb3knKTtcbiAgICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIC8vIHJlbW92ZSBzZWxmIGZyb20gcGFyZW50XG4gICAgICB2YXIgcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgICAgcmVtb3ZlKHBhcmVudC4kY2hpbGRyZW4sIHZtKTtcbiAgICAgIH1cbiAgICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgICBpZiAodm0uX3dhdGNoZXIpIHtcbiAgICAgICAgdm0uX3dhdGNoZXIudGVhcmRvd24oKTtcbiAgICAgIH1cbiAgICAgIHZhciBpID0gdm0uX3dhdGNoZXJzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgICB9XG4gICAgICAvLyByZW1vdmUgcmVmZXJlbmNlIGZyb20gZGF0YSBvYlxuICAgICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgICBpZiAodm0uX2RhdGEuX19vYl9fKSB7XG4gICAgICAgIHZtLl9kYXRhLl9fb2JfXy52bUNvdW50LS07XG4gICAgICB9XG4gICAgICAvLyBjYWxsIHRoZSBsYXN0IGhvb2suLi5cbiAgICAgIHZtLl9pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICAgIHZtLl9fcGF0Y2hfXyh2bS5fdm5vZGUsIG51bGwpO1xuICAgICAgLy8gZmlyZSBkZXN0cm95ZWQgaG9va1xuICAgICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAgIC8vIHR1cm4gb2ZmIGFsbCBpbnN0YW5jZSBsaXN0ZW5lcnMuXG4gICAgICB2bS4kb2ZmKCk7XG4gICAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICAgIGlmICh2bS4kZWwpIHtcbiAgICAgICAgdm0uJGVsLl9fdnVlX18gPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gcmVsZWFzZSBjaXJjdWxhciByZWZlcmVuY2UgKCM2NzU5KVxuICAgICAgaWYgKHZtLiR2bm9kZSkge1xuICAgICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbW91bnRDb21wb25lbnQgKFxuICAgIHZtLFxuICAgIGVsLFxuICAgIGh5ZHJhdGluZ1xuICApIHtcbiAgICB2bS4kZWwgPSBlbDtcbiAgICBpZiAoIXZtLiRvcHRpb25zLnJlbmRlcikge1xuICAgICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgICAgIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgICAgdm0uJG9wdGlvbnMuZWwgfHwgZWwpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICAgJ2NvbXBpbGVyIGlzIG5vdCBhdmFpbGFibGUuIEVpdGhlciBwcmUtY29tcGlsZSB0aGUgdGVtcGxhdGVzIGludG8gJyArXG4gICAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAnRmFpbGVkIHRvIG1vdW50IGNvbXBvbmVudDogdGVtcGxhdGUgb3IgcmVuZGVyIGZ1bmN0aW9uIG5vdCBkZWZpbmVkLicsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY2FsbEhvb2sodm0sICdiZWZvcmVNb3VudCcpO1xuXG4gICAgdmFyIHVwZGF0ZUNvbXBvbmVudDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5hbWUgPSB2bS5fbmFtZTtcbiAgICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgICAgdmFyIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArIGlkO1xuICAgICAgICB2YXIgZW5kVGFnID0gXCJ2dWUtcGVyZi1lbmQ6XCIgKyBpZDtcblxuICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgICAgdmFyIHZub2RlID0gdm0uX3JlbmRlcigpO1xuICAgICAgICBtYXJrKGVuZFRhZyk7XG4gICAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgICAgIHZtLl91cGRhdGUodm5vZGUsIGh5ZHJhdGluZyk7XG4gICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyBuYW1lICsgXCIgcGF0Y2hcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlQ29tcG9uZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2bS5fdXBkYXRlKHZtLl9yZW5kZXIoKSwgaHlkcmF0aW5nKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgICAvLyBzaW5jZSB0aGUgd2F0Y2hlcidzIGluaXRpYWwgcGF0Y2ggbWF5IGNhbGwgJGZvcmNlVXBkYXRlIChlLmcuIGluc2lkZSBjaGlsZFxuICAgIC8vIGNvbXBvbmVudCdzIG1vdW50ZWQgaG9vayksIHdoaWNoIHJlbGllcyBvbiB2bS5fd2F0Y2hlciBiZWluZyBhbHJlYWR5IGRlZmluZWRcbiAgICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB7XG4gICAgICBiZWZvcmU6IGZ1bmN0aW9uIGJlZm9yZSAoKSB7XG4gICAgICAgIGlmICh2bS5faXNNb3VudGVkICYmICF2bS5faXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdHJ1ZSAvKiBpc1JlbmRlcldhdGNoZXIgKi8pO1xuICAgIGh5ZHJhdGluZyA9IGZhbHNlO1xuXG4gICAgLy8gbWFudWFsbHkgbW91bnRlZCBpbnN0YW5jZSwgY2FsbCBtb3VudGVkIG9uIHNlbGZcbiAgICAvLyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBpbiBpdHMgaW5zZXJ0ZWQgaG9va1xuICAgIGlmICh2bS4kdm5vZGUgPT0gbnVsbCkge1xuICAgICAgdm0uX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICBjYWxsSG9vayh2bSwgJ21vdW50ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVDaGlsZENvbXBvbmVudCAoXG4gICAgdm0sXG4gICAgcHJvcHNEYXRhLFxuICAgIGxpc3RlbmVycyxcbiAgICBwYXJlbnRWbm9kZSxcbiAgICByZW5kZXJDaGlsZHJlblxuICApIHtcbiAgICB7XG4gICAgICBpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIGNvbXBvbmVudCBoYXMgc2xvdCBjaGlsZHJlblxuICAgIC8vIHdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgb3ZlcndyaXRpbmcgJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuLlxuXG4gICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAgIC8vIGR5bmFtaWMgc2xvdCBuYW1lcykuIFN0YXRpYyBzY29wZWQgc2xvdHMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZSBoYXMgdGhlXG4gICAgLy8gXCIkc3RhYmxlXCIgbWFya2VyLlxuICAgIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gICAgdmFyIG9sZFNjb3BlZFNsb3RzID0gdm0uJHNjb3BlZFNsb3RzO1xuICAgIHZhciBoYXNEeW5hbWljU2NvcGVkU2xvdCA9ICEhKFxuICAgICAgKG5ld1Njb3BlZFNsb3RzICYmICFuZXdTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgICAgKG9sZFNjb3BlZFNsb3RzICE9PSBlbXB0eU9iamVjdCAmJiAhb2xkU2NvcGVkU2xvdHMuJHN0YWJsZSkgfHxcbiAgICAgIChuZXdTY29wZWRTbG90cyAmJiB2bS4kc2NvcGVkU2xvdHMuJGtleSAhPT0gbmV3U2NvcGVkU2xvdHMuJGtleSlcbiAgICApO1xuXG4gICAgLy8gQW55IHN0YXRpYyBzbG90IGNoaWxkcmVuIGZyb20gdGhlIHBhcmVudCBtYXkgaGF2ZSBjaGFuZ2VkIGR1cmluZyBwYXJlbnQnc1xuICAgIC8vIHVwZGF0ZS4gRHluYW1pYyBzY29wZWQgc2xvdHMgbWF5IGFsc28gaGF2ZSBjaGFuZ2VkLiBJbiBzdWNoIGNhc2VzLCBhIGZvcmNlZFxuICAgIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gISEoXG4gICAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgIC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4gICAgICBoYXNEeW5hbWljU2NvcGVkU2xvdFxuICAgICk7XG5cbiAgICB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcbiAgICB2bS4kdm5vZGUgPSBwYXJlbnRWbm9kZTsgLy8gdXBkYXRlIHZtJ3MgcGxhY2Vob2xkZXIgbm9kZSB3aXRob3V0IHJlLXJlbmRlclxuXG4gICAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgICAgdm0uX3Zub2RlLnBhcmVudCA9IHBhcmVudFZub2RlO1xuICAgIH1cbiAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAgIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAgIC8vIHRoZXNlIGFyZSBhbHNvIHJlYWN0aXZlIHNvIHRoZXkgbWF5IHRyaWdnZXIgY2hpbGQgdXBkYXRlIGlmIHRoZSBjaGlsZFxuICAgIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gICAgdm0uJGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgICB2bS4kbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuXG4gICAgLy8gdXBkYXRlIHByb3BzXG4gICAgaWYgKHByb3BzRGF0YSAmJiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgICAgdG9nZ2xlT2JzZXJ2aW5nKGZhbHNlKTtcbiAgICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcztcbiAgICAgIHZhciBwcm9wS2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyB8fCBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGtleSA9IHByb3BLZXlzW2ldO1xuICAgICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgICB9XG4gICAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgICAvLyBrZWVwIGEgY29weSBvZiByYXcgcHJvcHNEYXRhXG4gICAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcbiAgICB2YXIgb2xkTGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuXG4gICAgLy8gcmVzb2x2ZSBzbG90cyArIGZvcmNlIHVwZGF0ZSBpZiBoYXMgY2hpbGRyZW5cbiAgICBpZiAobmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgICAgdm0uJHNsb3RzID0gcmVzb2x2ZVNsb3RzKHJlbmRlckNoaWxkcmVuLCBwYXJlbnRWbm9kZS5jb250ZXh0KTtcbiAgICAgIHZtLiRmb3JjZVVwZGF0ZSgpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUgKHZtKSB7XG4gICAgd2hpbGUgKHZtICYmICh2bSA9IHZtLiRwYXJlbnQpKSB7XG4gICAgICBpZiAodm0uX2luYWN0aXZlKSB7IHJldHVybiB0cnVlIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gICAgaWYgKGRpcmVjdCkge1xuICAgICAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gICAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgICAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgICBjYWxsSG9vayh2bSwgJ2FjdGl2YXRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlYWN0aXZhdGVDaGlsZENvbXBvbmVudCAodm0sIGRpcmVjdCkge1xuICAgIGlmIChkaXJlY3QpIHtcbiAgICAgIHZtLl9kaXJlY3RJbmFjdGl2ZSA9IHRydWU7XG4gICAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgICB2bS5faW5hY3RpdmUgPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2bS4kY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgICBjYWxsSG9vayh2bSwgJ2RlYWN0aXZhdGVkJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FsbEhvb2sgKHZtLCBob29rKSB7XG4gICAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGxpZmVjeWNsZSBob29rc1xuICAgIHB1c2hUYXJnZXQoKTtcbiAgICB2YXIgaGFuZGxlcnMgPSB2bS4kb3B0aW9uc1tob29rXTtcbiAgICB2YXIgaW5mbyA9IGhvb2sgKyBcIiBob29rXCI7XG4gICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGhhbmRsZXJzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhoYW5kbGVyc1tpXSwgdm0sIG51bGwsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICAgIHZtLiRlbWl0KCdob29rOicgKyBob29rKTtcbiAgICB9XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgTUFYX1VQREFURV9DT1VOVCA9IDEwMDtcblxuICB2YXIgcXVldWUgPSBbXTtcbiAgdmFyIGFjdGl2YXRlZENoaWxkcmVuID0gW107XG4gIHZhciBoYXMgPSB7fTtcbiAgdmFyIGNpcmN1bGFyID0ge307XG4gIHZhciB3YWl0aW5nID0gZmFsc2U7XG4gIHZhciBmbHVzaGluZyA9IGZhbHNlO1xuICB2YXIgaW5kZXggPSAwO1xuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc2NoZWR1bGVyJ3Mgc3RhdGUuXG4gICAqL1xuICBmdW5jdGlvbiByZXNldFNjaGVkdWxlclN0YXRlICgpIHtcbiAgICBpbmRleCA9IHF1ZXVlLmxlbmd0aCA9IGFjdGl2YXRlZENoaWxkcmVuLmxlbmd0aCA9IDA7XG4gICAgaGFzID0ge307XG4gICAge1xuICAgICAgY2lyY3VsYXIgPSB7fTtcbiAgICB9XG4gICAgd2FpdGluZyA9IGZsdXNoaW5nID0gZmFsc2U7XG4gIH1cblxuICAvLyBBc3luYyBlZGdlIGNhc2UgIzY1NjYgcmVxdWlyZXMgc2F2aW5nIHRoZSB0aW1lc3RhbXAgd2hlbiBldmVudCBsaXN0ZW5lcnMgYXJlXG4gIC8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuICAvLyBpZiB0aGUgcGFnZSBoYXMgdGhvdXNhbmRzIG9mIGV2ZW50IGxpc3RlbmVycy4gSW5zdGVhZCwgd2UgdGFrZSBhIHRpbWVzdGFtcFxuICAvLyBldmVyeSB0aW1lIHRoZSBzY2hlZHVsZXIgZmx1c2hlcyBhbmQgdXNlIHRoYXQgZm9yIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG4gIHZhciBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSAwO1xuXG4gIC8vIEFzeW5jIGVkZ2UgY2FzZSBmaXggcmVxdWlyZXMgc3RvcmluZyBhbiBldmVudCBsaXN0ZW5lcidzIGF0dGFjaCB0aW1lc3RhbXAuXG4gIHZhciBnZXROb3cgPSBEYXRlLm5vdztcblxuICAvLyBEZXRlcm1pbmUgd2hhdCBldmVudCB0aW1lc3RhbXAgdGhlIGJyb3dzZXIgaXMgdXNpbmcuIEFubm95aW5nbHksIHRoZVxuICAvLyB0aW1lc3RhbXAgY2FuIGVpdGhlciBiZSBoaS1yZXMgKHJlbGF0aXZlIHRvIHBhZ2UgbG9hZCkgb3IgbG93LXJlc1xuICAvLyAocmVsYXRpdmUgdG8gVU5JWCBlcG9jaCksIHNvIGluIG9yZGVyIHRvIGNvbXBhcmUgdGltZSB3ZSBoYXZlIHRvIHVzZSB0aGVcbiAgLy8gc2FtZSB0aW1lc3RhbXAgdHlwZSB3aGVuIHNhdmluZyB0aGUgZmx1c2ggdGltZXN0YW1wLlxuICAvLyBBbGwgSUUgdmVyc2lvbnMgdXNlIGxvdy1yZXMgZXZlbnQgdGltZXN0YW1wcywgYW5kIGhhdmUgcHJvYmxlbWF0aWMgY2xvY2tcbiAgLy8gaW1wbGVtZW50YXRpb25zICgjOTYzMilcbiAgaWYgKGluQnJvd3NlciAmJiAhaXNJRSkge1xuICAgIHZhciBwZXJmb3JtYW5jZSA9IHdpbmRvdy5wZXJmb3JtYW5jZTtcbiAgICBpZiAoXG4gICAgICBwZXJmb3JtYW5jZSAmJlxuICAgICAgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgZ2V0Tm93KCkgPiBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKS50aW1lU3RhbXBcbiAgICApIHtcbiAgICAgIC8vIGlmIHRoZSBldmVudCB0aW1lc3RhbXAsIGFsdGhvdWdoIGV2YWx1YXRlZCBBRlRFUiB0aGUgRGF0ZS5ub3coKSwgaXNcbiAgICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAgIC8vIGFuZCB3ZSBuZWVkIHRvIHVzZSB0aGUgaGktcmVzIHZlcnNpb24gZm9yIGV2ZW50IGxpc3RlbmVyIHRpbWVzdGFtcHMgYXNcbiAgICAgIC8vIHdlbGwuXG4gICAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYm90aCBxdWV1ZXMgYW5kIHJ1biB0aGUgd2F0Y2hlcnMuXG4gICAqL1xuICBmdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlICgpIHtcbiAgICBjdXJyZW50Rmx1c2hUaW1lc3RhbXAgPSBnZXROb3coKTtcbiAgICBmbHVzaGluZyA9IHRydWU7XG4gICAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gICAgLy8gU29ydCBxdWV1ZSBiZWZvcmUgZmx1c2guXG4gICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQ6XG4gICAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAgIC8vICAgIGNyZWF0ZWQgYmVmb3JlIHRoZSBjaGlsZClcbiAgICAvLyAyLiBBIGNvbXBvbmVudCdzIHVzZXIgd2F0Y2hlcnMgYXJlIHJ1biBiZWZvcmUgaXRzIHJlbmRlciB3YXRjaGVyIChiZWNhdXNlXG4gICAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAgIC8vIDMuIElmIGEgY29tcG9uZW50IGlzIGRlc3Ryb3llZCBkdXJpbmcgYSBwYXJlbnQgY29tcG9uZW50J3Mgd2F0Y2hlciBydW4sXG4gICAgLy8gICAgaXRzIHdhdGNoZXJzIGNhbiBiZSBza2lwcGVkLlxuICAgIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAgIC8vIGRvIG5vdCBjYWNoZSBsZW5ndGggYmVjYXVzZSBtb3JlIHdhdGNoZXJzIG1pZ2h0IGJlIHB1c2hlZFxuICAgIC8vIGFzIHdlIHJ1biBleGlzdGluZyB3YXRjaGVyc1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgd2F0Y2hlciA9IHF1ZXVlW2luZGV4XTtcbiAgICAgIGlmICh3YXRjaGVyLmJlZm9yZSkge1xuICAgICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgICAgfVxuICAgICAgaWQgPSB3YXRjaGVyLmlkO1xuICAgICAgaGFzW2lkXSA9IG51bGw7XG4gICAgICB3YXRjaGVyLnJ1bigpO1xuICAgICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgICAgaWYgKGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3VsYXJbaWRdIHx8IDApICsgMTtcbiAgICAgICAgaWYgKGNpcmN1bGFyW2lkXSA+IE1BWF9VUERBVEVfQ09VTlQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCAnICsgKFxuICAgICAgICAgICAgICB3YXRjaGVyLnVzZXJcbiAgICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgICAgOiBcImluIGEgY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbi5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gICAgdmFyIGFjdGl2YXRlZFF1ZXVlID0gYWN0aXZhdGVkQ2hpbGRyZW4uc2xpY2UoKTtcbiAgICB2YXIgdXBkYXRlZFF1ZXVlID0gcXVldWUuc2xpY2UoKTtcblxuICAgIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAgIC8vIGNhbGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICAgIGNhbGxBY3RpdmF0ZWRIb29rcyhhY3RpdmF0ZWRRdWV1ZSk7XG4gICAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gICAgLy8gZGV2dG9vbCBob29rXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgICAgZGV2dG9vbHMuZW1pdCgnZmx1c2gnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYWxsVXBkYXRlZEhvb2tzIChxdWV1ZSkge1xuICAgIHZhciBpID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHZhciB3YXRjaGVyID0gcXVldWVbaV07XG4gICAgICB2YXIgdm0gPSB3YXRjaGVyLnZtO1xuICAgICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQgJiYgIXZtLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgICBjYWxsSG9vayh2bSwgJ3VwZGF0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCB0aGF0IHdhcyBhY3RpdmF0ZWQgZHVyaW5nIHBhdGNoLlxuICAgKiBUaGUgcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIGVudGlyZSB0cmVlIGhhcyBiZWVuIHBhdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBxdWV1ZUFjdGl2YXRlZENvbXBvbmVudCAodm0pIHtcbiAgICAvLyBzZXR0aW5nIF9pbmFjdGl2ZSB0byBmYWxzZSBoZXJlIHNvIHRoYXQgYSByZW5kZXIgZnVuY3Rpb24gY2FuXG4gICAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgICB2bS5faW5hY3RpdmUgPSBmYWxzZTtcbiAgICBhY3RpdmF0ZWRDaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbGxBY3RpdmF0ZWRIb29rcyAocXVldWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChxdWV1ZVtpXSwgdHJ1ZSAvKiB0cnVlICovKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cbiAgICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gICAqIHB1c2hlZCB3aGVuIHRoZSBxdWV1ZSBpcyBiZWluZyBmbHVzaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gICAgdmFyIGlkID0gd2F0Y2hlci5pZDtcbiAgICBpZiAoaGFzW2lkXSA9PSBudWxsKSB7XG4gICAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICAgIGlmICghZmx1c2hpbmcpIHtcbiAgICAgICAgcXVldWUucHVzaCh3YXRjaGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIGFscmVhZHkgZmx1c2hpbmcsIHNwbGljZSB0aGUgd2F0Y2hlciBiYXNlZCBvbiBpdHMgaWRcbiAgICAgICAgLy8gaWYgYWxyZWFkeSBwYXN0IGl0cyBpZCwgaXQgd2lsbCBiZSBydW4gbmV4dCBpbW1lZGlhdGVseS5cbiAgICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaSA+IGluZGV4ICYmIHF1ZXVlW2ldLmlkID4gd2F0Y2hlci5pZCkge1xuICAgICAgICAgIGktLTtcbiAgICAgICAgfVxuICAgICAgICBxdWV1ZS5zcGxpY2UoaSArIDEsIDAsIHdhdGNoZXIpO1xuICAgICAgfVxuICAgICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgICBpZiAoIXdhaXRpbmcpIHtcbiAgICAgICAgd2FpdGluZyA9IHRydWU7XG5cbiAgICAgICAgaWYgKCFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgICBmbHVzaFNjaGVkdWxlclF1ZXVlKCk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgbmV4dFRpY2soZmx1c2hTY2hlZHVsZXJRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIHZhciB1aWQkMiA9IDA7XG5cbiAgLyoqXG4gICAqIEEgd2F0Y2hlciBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgY29sbGVjdHMgZGVwZW5kZW5jaWVzLFxuICAgKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxuICAgKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAgICovXG4gIHZhciBXYXRjaGVyID0gZnVuY3Rpb24gV2F0Y2hlciAoXG4gICAgdm0sXG4gICAgZXhwT3JGbixcbiAgICBjYixcbiAgICBvcHRpb25zLFxuICAgIGlzUmVuZGVyV2F0Y2hlclxuICApIHtcbiAgICB0aGlzLnZtID0gdm07XG4gICAgaWYgKGlzUmVuZGVyV2F0Y2hlcikge1xuICAgICAgdm0uX3dhdGNoZXIgPSB0aGlzO1xuICAgIH1cbiAgICB2bS5fd2F0Y2hlcnMucHVzaCh0aGlzKTtcbiAgICAvLyBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgICAgdGhpcy51c2VyID0gISFvcHRpb25zLnVzZXI7XG4gICAgICB0aGlzLmxhenkgPSAhIW9wdGlvbnMubGF6eTtcbiAgICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICAgICAgdGhpcy5iZWZvcmUgPSBvcHRpb25zLmJlZm9yZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWVwID0gdGhpcy51c2VyID0gdGhpcy5sYXp5ID0gdGhpcy5zeW5jID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2IgPSBjYjtcbiAgICB0aGlzLmlkID0gKyt1aWQkMjsgLy8gdWlkIGZvciBiYXRjaGluZ1xuICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICAgIHRoaXMuZGVwcyA9IFtdO1xuICAgIHRoaXMubmV3RGVwcyA9IFtdO1xuICAgIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgICB0aGlzLm5ld0RlcElkcyA9IG5ldyBfU2V0KCk7XG4gICAgdGhpcy5leHByZXNzaW9uID0gZXhwT3JGbi50b1N0cmluZygpO1xuICAgIC8vIHBhcnNlIGV4cHJlc3Npb24gZm9yIGdldHRlclxuICAgIGlmICh0eXBlb2YgZXhwT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldHRlciA9IHBhcnNlUGF0aChleHBPckZuKTtcbiAgICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgICAgdGhpcy5nZXR0ZXIgPSBub29wO1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIiArIGV4cE9yRm4gKyBcIlxcXCIgXCIgK1xuICAgICAgICAgICdXYXRjaGVyIG9ubHkgYWNjZXB0cyBzaW1wbGUgZG90LWRlbGltaXRlZCBwYXRocy4gJyArXG4gICAgICAgICAgJ0ZvciBmdWxsIGNvbnRyb2wsIHVzZSBhIGZ1bmN0aW9uIGluc3RlYWQuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdGhpcy5sYXp5XG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLmdldCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBXYXRjaGVyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiBnZXQgKCkge1xuICAgIHB1c2hUYXJnZXQodGhpcyk7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhciB2bSA9IHRoaXMudm07XG4gICAgdHJ5IHtcbiAgICAgIHZhbHVlID0gdGhpcy5nZXR0ZXIuY2FsbCh2bSwgdm0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChcImdldHRlciBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFwidG91Y2hcIiBldmVyeSBwcm9wZXJ0eSBzbyB0aGV5IGFyZSBhbGwgdHJhY2tlZCBhc1xuICAgICAgLy8gZGVwZW5kZW5jaWVzIGZvciBkZWVwIHdhdGNoaW5nXG4gICAgICBpZiAodGhpcy5kZWVwKSB7XG4gICAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHBvcFRhcmdldCgpO1xuICAgICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfTtcblxuICAvKipcbiAgICogQWRkIGEgZGVwZW5kZW5jeSB0byB0aGlzIGRpcmVjdGl2ZS5cbiAgICovXG4gIFdhdGNoZXIucHJvdG90eXBlLmFkZERlcCA9IGZ1bmN0aW9uIGFkZERlcCAoZGVwKSB7XG4gICAgdmFyIGlkID0gZGVwLmlkO1xuICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5uZXdEZXBJZHMuYWRkKGlkKTtcbiAgICAgIHRoaXMubmV3RGVwcy5wdXNoKGRlcCk7XG4gICAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgZGVwLmFkZFN1Yih0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIENsZWFuIHVwIGZvciBkZXBlbmRlbmN5IGNvbGxlY3Rpb24uXG4gICAqL1xuICBXYXRjaGVyLnByb3RvdHlwZS5jbGVhbnVwRGVwcyA9IGZ1bmN0aW9uIGNsZWFudXBEZXBzICgpIHtcbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdmFyIGRlcCA9IHRoaXMuZGVwc1tpXTtcbiAgICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGRlcC5pZCkpIHtcbiAgICAgICAgZGVwLnJlbW92ZVN1Yih0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICAgIHRoaXMuZGVwSWRzID0gdGhpcy5uZXdEZXBJZHM7XG4gICAgdGhpcy5uZXdEZXBJZHMgPSB0bXA7XG4gICAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgICB0bXAgPSB0aGlzLmRlcHM7XG4gICAgdGhpcy5kZXBzID0gdGhpcy5uZXdEZXBzO1xuICAgIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgICB0aGlzLm5ld0RlcHMubGVuZ3RoID0gMDtcbiAgfTtcblxuICAvKipcbiAgICogU3Vic2NyaWJlciBpbnRlcmZhY2UuXG4gICAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gICAqL1xuICBXYXRjaGVyLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiB1cGRhdGUgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMubGF6eSkge1xuICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN5bmMpIHtcbiAgICAgIHRoaXMucnVuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICAgKiBXaWxsIGJlIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLlxuICAgKi9cbiAgV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlICE9PSB0aGlzLnZhbHVlIHx8XG4gICAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAgIC8vIGhhdmUgbXV0YXRlZC5cbiAgICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICAgIHRoaXMuZGVlcFxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAgICogVGhpcyBvbmx5IGdldHMgY2FsbGVkIGZvciBsYXp5IHdhdGNoZXJzLlxuICAgKi9cbiAgV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAgICovXG4gIFdhdGNoZXIucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMuZGVwc1tpXS5kZXBlbmQoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICAgKi9cbiAgV2F0Y2hlci5wcm90b3R5cGUudGVhcmRvd24gPSBmdW5jdGlvbiB0ZWFyZG93biAoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgICAvLyB0aGlzIGlzIGEgc29tZXdoYXQgZXhwZW5zaXZlIG9wZXJhdGlvbiBzbyB3ZSBza2lwIGl0XG4gICAgICAvLyBpZiB0aGUgdm0gaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICAgIHJlbW92ZSh0aGlzLnZtLl93YXRjaGVycywgdGhpcyk7XG4gICAgICB9XG4gICAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKiAgKi9cblxuICB2YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogbm9vcCxcbiAgICBzZXQ6IG5vb3BcbiAgfTtcblxuICBmdW5jdGlvbiBwcm94eSAodGFyZ2V0LCBzb3VyY2VLZXksIGtleSkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBmdW5jdGlvbiBwcm94eUdldHRlciAoKSB7XG4gICAgICByZXR1cm4gdGhpc1tzb3VyY2VLZXldW2tleV1cbiAgICB9O1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiBwcm94eVNldHRlciAodmFsKSB7XG4gICAgICB0aGlzW3NvdXJjZUtleV1ba2V5XSA9IHZhbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRTdGF0ZSAodm0pIHtcbiAgICB2bS5fd2F0Y2hlcnMgPSBbXTtcbiAgICB2YXIgb3B0cyA9IHZtLiRvcHRpb25zO1xuICAgIGlmIChvcHRzLnByb3BzKSB7IGluaXRQcm9wcyh2bSwgb3B0cy5wcm9wcyk7IH1cbiAgICBpZiAob3B0cy5tZXRob2RzKSB7IGluaXRNZXRob2RzKHZtLCBvcHRzLm1ldGhvZHMpOyB9XG4gICAgaWYgKG9wdHMuZGF0YSkge1xuICAgICAgaW5pdERhdGEodm0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYnNlcnZlKHZtLl9kYXRhID0ge30sIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG4gICAgfVxuICAgIGlmIChvcHRzLmNvbXB1dGVkKSB7IGluaXRDb21wdXRlZCh2bSwgb3B0cy5jb21wdXRlZCk7IH1cbiAgICBpZiAob3B0cy53YXRjaCAmJiBvcHRzLndhdGNoICE9PSBuYXRpdmVXYXRjaCkge1xuICAgICAgaW5pdFdhdGNoKHZtLCBvcHRzLndhdGNoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0UHJvcHMgKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgICB2YXIgcHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhIHx8IHt9O1xuICAgIHZhciBwcm9wcyA9IHZtLl9wcm9wcyA9IHt9O1xuICAgIC8vIGNhY2hlIHByb3Aga2V5cyBzbyB0aGF0IGZ1dHVyZSBwcm9wcyB1cGRhdGVzIGNhbiBpdGVyYXRlIHVzaW5nIEFycmF5XG4gICAgLy8gaW5zdGVhZCBvZiBkeW5hbWljIG9iamVjdCBrZXkgZW51bWVyYXRpb24uXG4gICAgdmFyIGtleXMgPSB2bS4kb3B0aW9ucy5fcHJvcEtleXMgPSBbXTtcbiAgICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gICAgLy8gcm9vdCBpbnN0YW5jZSBwcm9wcyBzaG91bGQgYmUgY29udmVydGVkXG4gICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgfVxuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbGlkYXRlUHJvcChrZXksIHByb3BzT3B0aW9ucywgcHJvcHNEYXRhLCB2bSk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAge1xuICAgICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgICBpZiAoaXNSZXNlcnZlZEF0dHJpYnV0ZShoeXBoZW5hdGVkS2V5KSB8fFxuICAgICAgICAgICAgY29uZmlnLmlzUmVzZXJ2ZWRBdHRyKGh5cGhlbmF0ZWRLZXkpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIChcIlxcXCJcIiArIGh5cGhlbmF0ZWRLZXkgKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGNvbXBvbmVudCBwcm9wLlwiKSxcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZpbmVSZWFjdGl2ZSQkMShwcm9wcywga2V5LCB2YWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaXNSb290ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICAgIFwiSW5zdGVhZCwgdXNlIGEgZGF0YSBvciBjb21wdXRlZCBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgcHJvcCdzIFwiICtcbiAgICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgICAgdm1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIHN0YXRpYyBwcm9wcyBhcmUgYWxyZWFkeSBwcm94aWVkIG9uIHRoZSBjb21wb25lbnQncyBwcm90b3R5cGVcbiAgICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgICB2YXIgZGF0YSA9IHZtLiRvcHRpb25zLmRhdGE7XG4gICAgZGF0YSA9IHZtLl9kYXRhID0gdHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICAgIDogZGF0YSB8fCB7fTtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcbiAgICAgIGRhdGEgPSB7fTtcbiAgICAgIHdhcm4oXG4gICAgICAgICdkYXRhIGZ1bmN0aW9ucyBzaG91bGQgcmV0dXJuIGFuIG9iamVjdDpcXG4nICtcbiAgICAgICAgJ2h0dHBzOi8vdnVlanMub3JnL3YyL2d1aWRlL2NvbXBvbmVudHMuaHRtbCNkYXRhLU11c3QtQmUtYS1GdW5jdGlvbicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gICAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIHtcbiAgICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBkYXRhIHByb3BlcnR5LlwiKSxcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzICYmIGhhc093bihwcm9wcywga2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiVGhlIGRhdGEgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVjbGFyZWQgYXMgYSBwcm9wLiBcIiArXG4gICAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICBwcm94eSh2bSwgXCJfZGF0YVwiLCBrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBvYnNlcnZlIGRhdGFcbiAgICBvYnNlcnZlKGRhdGEsIHRydWUgLyogYXNSb290RGF0YSAqLyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREYXRhIChkYXRhLCB2bSkge1xuICAgIC8vICM3NTczIGRpc2FibGUgZGVwIGNvbGxlY3Rpb24gd2hlbiBpbnZva2luZyBkYXRhIGdldHRlcnNcbiAgICBwdXNoVGFyZ2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkYXRhLmNhbGwodm0sIHZtKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICAgIHJldHVybiB7fVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwb3BUYXJnZXQoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuXG4gIGZ1bmN0aW9uIGluaXRDb21wdXRlZCAodm0sIGNvbXB1dGVkKSB7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgdmFyIHdhdGNoZXJzID0gdm0uX2NvbXB1dGVkV2F0Y2hlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gICAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgICAgaWYgKGdldHRlciA9PSBudWxsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiR2V0dGVyIGlzIG1pc3NpbmcgZm9yIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIi5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1NTUikge1xuICAgICAgICAvLyBjcmVhdGUgaW50ZXJuYWwgd2F0Y2hlciBmb3IgdGhlIGNvbXB1dGVkIHByb3BlcnR5LlxuICAgICAgICB3YXRjaGVyc1trZXldID0gbmV3IFdhdGNoZXIoXG4gICAgICAgICAgdm0sXG4gICAgICAgICAgZ2V0dGVyIHx8IG5vb3AsXG4gICAgICAgICAgbm9vcCxcbiAgICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAgIC8vIGNvbXBvbmVudCBwcm90b3R5cGUuIFdlIG9ubHkgbmVlZCB0byBkZWZpbmUgY29tcHV0ZWQgcHJvcGVydGllcyBkZWZpbmVkXG4gICAgICAvLyBhdCBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICAgIGRlZmluZUNvbXB1dGVkKHZtLCBrZXksIHVzZXJEZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSBpbiB2bS4kZGF0YSkge1xuICAgICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgICB3YXJuKChcIlRoZSBjb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWZpbmVkIGFzIGEgcHJvcC5cIiksIHZtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgICB0YXJnZXQsXG4gICAga2V5LFxuICAgIHVzZXJEZWZcbiAgKSB7XG4gICAgdmFyIHNob3VsZENhY2hlID0gIWlzU2VydmVyUmVuZGVyaW5nKCk7XG4gICAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gc2hvdWxkQ2FjaGVcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBub29wO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgICAgPyBzaG91bGRDYWNoZSAmJiB1c2VyRGVmLmNhY2hlICE9PSBmYWxzZVxuICAgICAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgICAgOiBub29wO1xuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IHVzZXJEZWYuc2V0IHx8IG5vb3A7XG4gICAgfVxuICAgIGlmIChzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID09PSBub29wKSB7XG4gICAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIkNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgYXNzaWduZWQgdG8gYnV0IGl0IGhhcyBubyBzZXR0ZXIuXCIpLFxuICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgIH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkR2V0dGVyIChrZXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgICAgdmFyIHdhdGNoZXIgPSB0aGlzLl9jb21wdXRlZFdhdGNoZXJzICYmIHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnNba2V5XTtcbiAgICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgICAgd2F0Y2hlci5ldmFsdWF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChEZXAudGFyZ2V0KSB7XG4gICAgICAgICAgd2F0Y2hlci5kZXBlbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2F0Y2hlci52YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUdldHRlckludm9rZXIoZm4pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgdGhpcylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0TWV0aG9kcyAodm0sIG1ldGhvZHMpIHtcbiAgICB2YXIgcHJvcHMgPSB2bS4kb3B0aW9ucy5wcm9wcztcbiAgICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIHR5cGUgXFxcIlwiICsgKHR5cGVvZiBtZXRob2RzW2tleV0pICsgXCJcXFwiIGluIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbi4gXCIgK1xuICAgICAgICAgICAgXCJEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5P1wiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgKFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSxcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBWdWUgaW5zdGFuY2UgbWV0aG9kLiBcIiArXG4gICAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2bVtrZXldID0gdHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJyA/IG5vb3AgOiBiaW5kKG1ldGhvZHNba2V5XSwgdm0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRXYXRjaCAodm0sIHdhdGNoKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IHdhdGNoW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShoYW5kbGVyKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXJbaV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVhdGVXYXRjaGVyKHZtLCBrZXksIGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIgKFxuICAgIHZtLFxuICAgIGV4cE9yRm4sXG4gICAgaGFuZGxlcixcbiAgICBvcHRpb25zXG4gICkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGhhbmRsZXIpKSB7XG4gICAgICBvcHRpb25zID0gaGFuZGxlcjtcbiAgICAgIGhhbmRsZXIgPSBoYW5kbGVyLmhhbmRsZXI7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhhbmRsZXIgPSB2bVtoYW5kbGVyXTtcbiAgICB9XG4gICAgcmV0dXJuIHZtLiR3YXRjaChleHBPckZuLCBoYW5kbGVyLCBvcHRpb25zKVxuICB9XG5cbiAgZnVuY3Rpb24gc3RhdGVNaXhpbiAoVnVlKSB7XG4gICAgLy8gZmxvdyBzb21laG93IGhhcyBwcm9ibGVtcyB3aXRoIGRpcmVjdGx5IGRlY2xhcmVkIGRlZmluaXRpb24gb2JqZWN0XG4gICAgLy8gd2hlbiB1c2luZyBPYmplY3QuZGVmaW5lUHJvcGVydHksIHNvIHdlIGhhdmUgdG8gcHJvY2VkdXJhbGx5IGJ1aWxkIHVwXG4gICAgLy8gdGhlIG9iamVjdCBoZXJlLlxuICAgIHZhciBkYXRhRGVmID0ge307XG4gICAgZGF0YURlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kYXRhIH07XG4gICAgdmFyIHByb3BzRGVmID0ge307XG4gICAgcHJvcHNEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcHJvcHMgfTtcbiAgICB7XG4gICAgICBkYXRhRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAgICdVc2UgbmVzdGVkIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkLicsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfTtcbiAgICAgIHByb3BzRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcHJvcHMnLCBwcm9wc0RlZik7XG5cbiAgICBWdWUucHJvdG90eXBlLiRzZXQgPSBzZXQ7XG4gICAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuXG4gICAgVnVlLnByb3RvdHlwZS4kd2F0Y2ggPSBmdW5jdGlvbiAoXG4gICAgICBleHBPckZuLFxuICAgICAgY2IsXG4gICAgICBvcHRpb25zXG4gICAgKSB7XG4gICAgICB2YXIgdm0gPSB0aGlzO1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoY2IpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVXYXRjaGVyKHZtLCBleHBPckZuLCBjYiwgb3B0aW9ucylcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgb3B0aW9ucy51c2VyID0gdHJ1ZTtcbiAgICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNiLmNhbGwodm0sIHdhdGNoZXIudmFsdWUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCB2bSwgKFwiY2FsbGJhY2sgZm9yIGltbWVkaWF0ZSB3YXRjaGVyIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVud2F0Y2hGbiAoKSB7XG4gICAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHVpZCQzID0gMDtcblxuICBmdW5jdGlvbiBpbml0TWl4aW4gKFZ1ZSkge1xuICAgIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIHZtID0gdGhpcztcbiAgICAgIC8vIGEgdWlkXG4gICAgICB2bS5fdWlkID0gdWlkJDMrKztcblxuICAgICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChjb25maWcucGVyZm9ybWFuY2UgJiYgbWFyaykge1xuICAgICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIH1cblxuICAgICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICAgIHZtLl9pc1Z1ZSA9IHRydWU7XG4gICAgICAvLyBtZXJnZSBvcHRpb25zXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgICAvLyBvcHRpbWl6ZSBpbnRlcm5hbCBjb21wb25lbnQgaW5zdGFudGlhdGlvblxuICAgICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgICBpbml0SW50ZXJuYWxDb21wb25lbnQodm0sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgICAgcmVzb2x2ZUNvbnN0cnVjdG9yT3B0aW9ucyh2bS5jb25zdHJ1Y3RvciksXG4gICAgICAgICAgb3B0aW9ucyB8fCB7fSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIHtcbiAgICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICAgIH1cbiAgICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICAgIHZtLl9zZWxmID0gdm07XG4gICAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICAgIGluaXRFdmVudHModm0pO1xuICAgICAgaW5pdFJlbmRlcih2bSk7XG4gICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICAgIGluaXRTdGF0ZSh2bSk7XG4gICAgICBpbml0UHJvdmlkZSh2bSk7IC8vIHJlc29sdmUgcHJvdmlkZSBhZnRlciBkYXRhL3Byb3BzXG4gICAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgdm0uX25hbWUgPSBmb3JtYXRDb21wb25lbnROYW1lKHZtLCBmYWxzZSk7XG4gICAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgICAgbWVhc3VyZSgoXCJ2dWUgXCIgKyAodm0uX25hbWUpICsgXCIgaW5pdFwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgICB2bS4kbW91bnQodm0uJG9wdGlvbnMuZWwpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbml0SW50ZXJuYWxDb21wb25lbnQgKHZtLCBvcHRpb25zKSB7XG4gICAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gICAgLy8gZG9pbmcgdGhpcyBiZWNhdXNlIGl0J3MgZmFzdGVyIHRoYW4gZHluYW1pYyBlbnVtZXJhdGlvbi5cbiAgICB2YXIgcGFyZW50Vm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTtcbiAgICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIG9wdHMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG5cbiAgICB2YXIgdm5vZGVDb21wb25lbnRPcHRpb25zID0gcGFyZW50Vm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gICAgb3B0cy5fcGFyZW50TGlzdGVuZXJzID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycztcbiAgICBvcHRzLl9yZW5kZXJDaGlsZHJlbiA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5jaGlsZHJlbjtcbiAgICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gICAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgICBvcHRzLnJlbmRlciA9IG9wdGlvbnMucmVuZGVyO1xuICAgICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gICAgaWYgKEN0b3Iuc3VwZXIpIHtcbiAgICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgICAgaWYgKHN1cGVyT3B0aW9ucyAhPT0gY2FjaGVkU3VwZXJPcHRpb25zKSB7XG4gICAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICAgIEN0b3Iuc3VwZXJPcHRpb25zID0gc3VwZXJPcHRpb25zO1xuICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgICAvLyB1cGRhdGUgYmFzZSBleHRlbmQgb3B0aW9uc1xuICAgICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tvcHRpb25zLm5hbWVdID0gQ3RvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyAoQ3Rvcikge1xuICAgIHZhciBtb2RpZmllZDtcbiAgICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICAgIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gICAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgICAgaWYgKGxhdGVzdFtrZXldICE9PSBzZWFsZWRba2V5XSkge1xuICAgICAgICBpZiAoIW1vZGlmaWVkKSB7IG1vZGlmaWVkID0ge307IH1cbiAgICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIFZ1ZSAob3B0aW9ucykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBWdWUpXG4gICAgKSB7XG4gICAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gICAgfVxuICAgIHRoaXMuX2luaXQob3B0aW9ucyk7XG4gIH1cblxuICBpbml0TWl4aW4oVnVlKTtcbiAgc3RhdGVNaXhpbihWdWUpO1xuICBldmVudHNNaXhpbihWdWUpO1xuICBsaWZlY3ljbGVNaXhpbihWdWUpO1xuICByZW5kZXJNaXhpbihWdWUpO1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGluaXRVc2UgKFZ1ZSkge1xuICAgIFZ1ZS51c2UgPSBmdW5jdGlvbiAocGx1Z2luKSB7XG4gICAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICAgIGlmIChpbnN0YWxsZWRQbHVnaW5zLmluZGV4T2YocGx1Z2luKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgICB9XG5cbiAgICAgIC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xuICAgICAgdmFyIGFyZ3MgPSB0b0FycmF5KGFyZ3VtZW50cywgMSk7XG4gICAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgICBpZiAodHlwZW9mIHBsdWdpbi5pbnN0YWxsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBsdWdpbi5pbnN0YWxsLmFwcGx5KHBsdWdpbiwgYXJncyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcGx1Z2luLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfVxuICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH07XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpbml0TWl4aW4kMSAoVnVlKSB7XG4gICAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnModGhpcy5vcHRpb25zLCBtaXhpbik7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH07XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgICAvKipcbiAgICAgKiBFYWNoIGluc3RhbmNlIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgVnVlLCBoYXMgYSB1bmlxdWVcbiAgICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAgICogY29uc3RydWN0b3JzXCIgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UgYW5kIGNhY2hlIHRoZW0uXG4gICAgICovXG4gICAgVnVlLmNpZCA9IDA7XG4gICAgdmFyIGNpZCA9IDE7XG5cbiAgICAvKipcbiAgICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgICAqL1xuICAgIFZ1ZS5leHRlbmQgPSBmdW5jdGlvbiAoZXh0ZW5kT3B0aW9ucykge1xuICAgICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgICB2YXIgU3VwZXIgPSB0aGlzO1xuICAgICAgdmFyIFN1cGVySWQgPSBTdXBlci5jaWQ7XG4gICAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgICAgaWYgKGNhY2hlZEN0b3JzW1N1cGVySWRdKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRDdG9yc1tTdXBlcklkXVxuICAgICAgfVxuXG4gICAgICB2YXIgbmFtZSA9IGV4dGVuZE9wdGlvbnMubmFtZSB8fCBTdXBlci5vcHRpb25zLm5hbWU7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBTdWIgPSBmdW5jdGlvbiBWdWVDb21wb25lbnQgKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5faW5pdChvcHRpb25zKTtcbiAgICAgIH07XG4gICAgICBTdWIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdXBlci5wcm90b3R5cGUpO1xuICAgICAgU3ViLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN1YjtcbiAgICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICAgIFN1Yi5vcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgICBTdXBlci5vcHRpb25zLFxuICAgICAgICBleHRlbmRPcHRpb25zXG4gICAgICApO1xuICAgICAgU3ViWydzdXBlciddID0gU3VwZXI7XG5cbiAgICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgICAvLyB0aGUgVnVlIGluc3RhbmNlcyBhdCBleHRlbnNpb24gdGltZSwgb24gdGhlIGV4dGVuZGVkIHByb3RvdHlwZS4gVGhpc1xuICAgICAgLy8gYXZvaWRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBjYWxscyBmb3IgZWFjaCBpbnN0YW5jZSBjcmVhdGVkLlxuICAgICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICAgIGluaXRQcm9wcyQxKFN1Yik7XG4gICAgICB9XG4gICAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgICAgaW5pdENvbXB1dGVkJDEoU3ViKTtcbiAgICAgIH1cblxuICAgICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgICBTdWIuZXh0ZW5kID0gU3VwZXIuZXh0ZW5kO1xuICAgICAgU3ViLm1peGluID0gU3VwZXIubWl4aW47XG4gICAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgICAvLyBjcmVhdGUgYXNzZXQgcmVnaXN0ZXJzLCBzbyBleHRlbmRlZCBjbGFzc2VzXG4gICAgICAvLyBjYW4gaGF2ZSB0aGVpciBwcml2YXRlIGFzc2V0cyB0b28uXG4gICAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIFN1Ylt0eXBlXSA9IFN1cGVyW3R5cGVdO1xuICAgICAgfSk7XG4gICAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBTdWIub3B0aW9ucy5jb21wb25lbnRzW25hbWVdID0gU3ViO1xuICAgICAgfVxuXG4gICAgICAvLyBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdXBlciBvcHRpb25zIGF0IGV4dGVuc2lvbiB0aW1lLlxuICAgICAgLy8gbGF0ZXIgYXQgaW5zdGFudGlhdGlvbiB3ZSBjYW4gY2hlY2sgaWYgU3VwZXIncyBvcHRpb25zIGhhdmVcbiAgICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICAgIFN1Yi5zdXBlck9wdGlvbnMgPSBTdXBlci5vcHRpb25zO1xuICAgICAgU3ViLmV4dGVuZE9wdGlvbnMgPSBleHRlbmRPcHRpb25zO1xuICAgICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgICAgLy8gY2FjaGUgY29uc3RydWN0b3JcbiAgICAgIGNhY2hlZEN0b3JzW1N1cGVySWRdID0gU3ViO1xuICAgICAgcmV0dXJuIFN1YlxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICAgIHZhciBwcm9wcyA9IENvbXAub3B0aW9ucy5wcm9wcztcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gICAgdmFyIGNvbXB1dGVkID0gQ29tcC5vcHRpb25zLmNvbXB1dGVkO1xuICAgIGZvciAodmFyIGtleSBpbiBjb21wdXRlZCkge1xuICAgICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gaW5pdEFzc2V0UmVnaXN0ZXJzIChWdWUpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAgICovXG4gICAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgICBpZCxcbiAgICAgICAgZGVmaW5pdGlvblxuICAgICAgKSB7XG4gICAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNbdHlwZSArICdzJ11baWRdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUNvbXBvbmVudE5hbWUoaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBvbmVudCcgJiYgaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gZGVmaW5pdGlvbi5uYW1lIHx8IGlkO1xuICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlID09PSAnZGlyZWN0aXZlJyAmJiB0eXBlb2YgZGVmaW5pdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF0gPSBkZWZpbml0aW9uO1xuICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAvKiAgKi9cblxuXG5cbiAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICAgIHJldHVybiBvcHRzICYmIChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi5pbmRleE9mKG5hbWUpID4gLTFcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTFcbiAgICB9IGVsc2UgaWYgKGlzUmVnRXhwKHBhdHRlcm4pKSB7XG4gICAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwcnVuZUNhY2hlIChrZWVwQWxpdmVJbnN0YW5jZSwgZmlsdGVyKSB7XG4gICAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gICAgdmFyIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzO1xuICAgIHZhciBfdm5vZGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5fdm5vZGU7XG4gICAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgICB2YXIgY2FjaGVkTm9kZSA9IGNhY2hlW2tleV07XG4gICAgICBpZiAoY2FjaGVkTm9kZSkge1xuICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgICAgaWYgKG5hbWUgJiYgIWZpbHRlcihuYW1lKSkge1xuICAgICAgICAgIHBydW5lQ2FjaGVFbnRyeShjYWNoZSwga2V5LCBrZXlzLCBfdm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5IChcbiAgICBjYWNoZSxcbiAgICBrZXksXG4gICAga2V5cyxcbiAgICBjdXJyZW50XG4gICkge1xuICAgIHZhciBjYWNoZWQkJDEgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWQkJDEgJiYgKCFjdXJyZW50IHx8IGNhY2hlZCQkMS50YWcgIT09IGN1cnJlbnQudGFnKSkge1xuICAgICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgfVxuICAgIGNhY2hlW2tleV0gPSBudWxsO1xuICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICB9XG5cbiAgdmFyIHBhdHRlcm5UeXBlcyA9IFtTdHJpbmcsIFJlZ0V4cCwgQXJyYXldO1xuXG4gIHZhciBLZWVwQWxpdmUgPSB7XG4gICAgbmFtZTogJ2tlZXAtYWxpdmUnLFxuICAgIGFic3RyYWN0OiB0cnVlLFxuXG4gICAgcHJvcHM6IHtcbiAgICAgIGluY2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICAgIH0sXG5cbiAgICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkICgpIHtcbiAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdGhpcy5rZXlzID0gW107XG4gICAgfSxcblxuICAgIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgIHBydW5lQ2FjaGVFbnRyeSh0aGlzLmNhY2hlLCBrZXksIHRoaXMua2V5cyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQgKCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJHdhdGNoKCdpbmNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBwcnVuZUNhY2hlKHRoaXMkMSwgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIG1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuJHdhdGNoKCdleGNsdWRlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICBwcnVuZUNhY2hlKHRoaXMkMSwgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgICAgfSk7XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyICgpIHtcbiAgICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICAgIHZhciB2bm9kZSA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoc2xvdCk7XG4gICAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgICAvLyBjaGVjayBwYXR0ZXJuXG4gICAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKTtcbiAgICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICAgIHZhciBpbmNsdWRlID0gcmVmLmluY2x1ZGU7XG4gICAgICAgIHZhciBleGNsdWRlID0gcmVmLmV4Y2x1ZGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBub3QgaW5jbHVkZWRcbiAgICAgICAgICAoaW5jbHVkZSAmJiAoIW5hbWUgfHwgIW1hdGNoZXMoaW5jbHVkZSwgbmFtZSkpKSB8fFxuICAgICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgICAgKGV4Y2x1ZGUgJiYgbmFtZSAmJiBtYXRjaGVzKGV4Y2x1ZGUsIG5hbWUpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWYkMSA9IHRoaXM7XG4gICAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgICB2YXIga2V5cyA9IHJlZiQxLmtleXM7XG4gICAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbFxuICAgICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgICAgLy8gc28gY2lkIGFsb25lIGlzIG5vdCBlbm91Z2ggKCMzMjY5KVxuICAgICAgICAgID8gY29tcG9uZW50T3B0aW9ucy5DdG9yLmNpZCArIChjb21wb25lbnRPcHRpb25zLnRhZyA/IChcIjo6XCIgKyAoY29tcG9uZW50T3B0aW9ucy50YWcpKSA6ICcnKVxuICAgICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgICBpZiAoY2FjaGVba2V5XSkge1xuICAgICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY2FjaGVba2V5XS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgICAgcmVtb3ZlKGtleXMsIGtleSk7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FjaGVba2V5XSA9IHZub2RlO1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICAgIGlmICh0aGlzLm1heCAmJiBrZXlzLmxlbmd0aCA+IHBhcnNlSW50KHRoaXMubWF4KSkge1xuICAgICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXlzWzBdLCBrZXlzLCB0aGlzLl92bm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZub2RlIHx8IChzbG90ICYmIHNsb3RbMF0pXG4gICAgfVxuICB9O1xuXG4gIHZhciBidWlsdEluQ29tcG9uZW50cyA9IHtcbiAgICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxuICB9O1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGluaXRHbG9iYWxBUEkgKFZ1ZSkge1xuICAgIC8vIGNvbmZpZ1xuICAgIHZhciBjb25maWdEZWYgPSB7fTtcbiAgICBjb25maWdEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnOyB9O1xuICAgIHtcbiAgICAgIGNvbmZpZ0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0RvIG5vdCByZXBsYWNlIHRoZSBWdWUuY29uZmlnIG9iamVjdCwgc2V0IGluZGl2aWR1YWwgZmllbGRzIGluc3RlYWQuJ1xuICAgICAgICApO1xuICAgICAgfTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ2NvbmZpZycsIGNvbmZpZ0RlZik7XG5cbiAgICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgICAvLyBOT1RFOiB0aGVzZSBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHVibGljIEFQSSAtIGF2b2lkIHJlbHlpbmcgb25cbiAgICAvLyB0aGVtIHVubGVzcyB5b3UgYXJlIGF3YXJlIG9mIHRoZSByaXNrLlxuICAgIFZ1ZS51dGlsID0ge1xuICAgICAgd2Fybjogd2FybixcbiAgICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgICBkZWZpbmVSZWFjdGl2ZTogZGVmaW5lUmVhY3RpdmUkJDFcbiAgICB9O1xuXG4gICAgVnVlLnNldCA9IHNldDtcbiAgICBWdWUuZGVsZXRlID0gZGVsO1xuICAgIFZ1ZS5uZXh0VGljayA9IG5leHRUaWNrO1xuXG4gICAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gICAgVnVlLm9ic2VydmFibGUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICBvYnNlcnZlKG9iaik7XG4gICAgICByZXR1cm4gb2JqXG4gICAgfTtcblxuICAgIFZ1ZS5vcHRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBWdWUub3B0aW9uc1t0eXBlICsgJ3MnXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfSk7XG5cbiAgICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gICAgLy8gY29tcG9uZW50cyB3aXRoIGluIFdlZXgncyBtdWx0aS1pbnN0YW5jZSBzY2VuYXJpb3MuXG4gICAgVnVlLm9wdGlvbnMuX2Jhc2UgPSBWdWU7XG5cbiAgICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gICAgaW5pdFVzZShWdWUpO1xuICAgIGluaXRNaXhpbiQxKFZ1ZSk7XG4gICAgaW5pdEV4dGVuZChWdWUpO1xuICAgIGluaXRBc3NldFJlZ2lzdGVycyhWdWUpO1xuICB9XG5cbiAgaW5pdEdsb2JhbEFQSShWdWUpO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICAgIGdldDogaXNTZXJ2ZXJSZW5kZXJpbmdcbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckc3NyQ29udGV4dCcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuIHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHRcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGV4cG9zZSBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCBmb3Igc3NyIHJ1bnRpbWUgaGVscGVyIGluc3RhbGxhdGlvblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnRnVuY3Rpb25hbFJlbmRlckNvbnRleHQnLCB7XG4gICAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG4gIH0pO1xuXG4gIFZ1ZS52ZXJzaW9uID0gJzIuNi4xMSc7XG5cbiAgLyogICovXG5cbiAgLy8gdGhlc2UgYXJlIHJlc2VydmVkIGZvciB3ZWIgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3RseSBjb21waWxlZCBhd2F5XG4gIC8vIGR1cmluZyB0ZW1wbGF0ZSBjb21waWxhdGlvblxuICB2YXIgaXNSZXNlcnZlZEF0dHIgPSBtYWtlTWFwKCdzdHlsZSxjbGFzcycpO1xuXG4gIC8vIGF0dHJpYnV0ZXMgdGhhdCBzaG91bGQgYmUgdXNpbmcgcHJvcHMgZm9yIGJpbmRpbmdcbiAgdmFyIGFjY2VwdFZhbHVlID0gbWFrZU1hcCgnaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcycpO1xuICB2YXIgbXVzdFVzZVByb3AgPSBmdW5jdGlvbiAodGFnLCB0eXBlLCBhdHRyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChhdHRyID09PSAndmFsdWUnICYmIGFjY2VwdFZhbHVlKHRhZykpICYmIHR5cGUgIT09ICdidXR0b24nIHx8XG4gICAgICAoYXR0ciA9PT0gJ3NlbGVjdGVkJyAmJiB0YWcgPT09ICdvcHRpb24nKSB8fFxuICAgICAgKGF0dHIgPT09ICdjaGVja2VkJyAmJiB0YWcgPT09ICdpbnB1dCcpIHx8XG4gICAgICAoYXR0ciA9PT0gJ211dGVkJyAmJiB0YWcgPT09ICd2aWRlbycpXG4gICAgKVxuICB9O1xuXG4gIHZhciBpc0VudW1lcmF0ZWRBdHRyID0gbWFrZU1hcCgnY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrJyk7XG5cbiAgdmFyIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSA9IG1ha2VNYXAoJ2V2ZW50cyxjYXJldCx0eXBpbmcscGxhaW50ZXh0LW9ubHknKTtcblxuICB2YXIgY29udmVydEVudW1lcmF0ZWRWYWx1ZSA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpIHx8IHZhbHVlID09PSAnZmFsc2UnXG4gICAgICA/ICdmYWxzZSdcbiAgICAgIC8vIGFsbG93IGFyYml0cmFyeSBzdHJpbmcgdmFsdWUgZm9yIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgOiBrZXkgPT09ICdjb250ZW50ZWRpdGFibGUnICYmIGlzVmFsaWRDb250ZW50RWRpdGFibGVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZVxuICAgICAgICA6ICd0cnVlJ1xuICB9O1xuXG4gIHZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgICAnYWxsb3dmdWxsc2NyZWVuLGFzeW5jLGF1dG9mb2N1cyxhdXRvcGxheSxjaGVja2VkLGNvbXBhY3QsY29udHJvbHMsZGVjbGFyZSwnICtcbiAgICAnZGVmYXVsdCxkZWZhdWx0Y2hlY2tlZCxkZWZhdWx0bXV0ZWQsZGVmYXVsdHNlbGVjdGVkLGRlZmVyLGRpc2FibGVkLCcgK1xuICAgICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAgICdtdXRlZCxub2hyZWYsbm9yZXNpemUsbm9zaGFkZSxub3ZhbGlkYXRlLG5vd3JhcCxvcGVuLHBhdXNlb25leGl0LHJlYWRvbmx5LCcgK1xuICAgICdyZXF1aXJlZCxyZXZlcnNlZCxzY29wZWQsc2VhbWxlc3Msc2VsZWN0ZWQsc29ydGFibGUsdHJhbnNsYXRlLCcgK1xuICAgICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuICApO1xuXG4gIHZhciB4bGlua05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnO1xuXG4gIHZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoNSkgPT09ICc6JyAmJiBuYW1lLnNsaWNlKDAsIDUpID09PSAneGxpbmsnXG4gIH07XG5cbiAgdmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIGlzWGxpbmsobmFtZSkgPyBuYW1lLnNsaWNlKDYsIG5hbWUubGVuZ3RoKSA6ICcnXG4gIH07XG5cbiAgdmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gZmFsc2VcbiAgfTtcblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBnZW5DbGFzc0ZvclZub2RlICh2bm9kZSkge1xuICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoaXNEZWYoY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIGlmIChjaGlsZE5vZGUgJiYgY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGNoaWxkTm9kZS5kYXRhLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKGlzRGVmKHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudCkpIHtcbiAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgICBkYXRhID0gbWVyZ2VDbGFzc0RhdGEoZGF0YSwgcGFyZW50Tm9kZS5kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlckNsYXNzKGRhdGEuc3RhdGljQ2xhc3MsIGRhdGEuY2xhc3MpXG4gIH1cblxuICBmdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0aWNDbGFzczogY29uY2F0KGNoaWxkLnN0YXRpY0NsYXNzLCBwYXJlbnQuc3RhdGljQ2xhc3MpLFxuICAgICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgICA/IFtjaGlsZC5jbGFzcywgcGFyZW50LmNsYXNzXVxuICAgICAgICA6IHBhcmVudC5jbGFzc1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckNsYXNzIChcbiAgICBzdGF0aWNDbGFzcyxcbiAgICBkeW5hbWljQ2xhc3NcbiAgKSB7XG4gICAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgICByZXR1cm4gY29uY2F0KHN0YXRpY0NsYXNzLCBzdHJpbmdpZnlDbGFzcyhkeW5hbWljQ2xhc3MpKVxuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gICAgcmV0dXJuIGEgPyBiID8gKGEgKyAnICcgKyBiKSA6IGEgOiAoYiB8fCAnJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeUFycmF5KHZhbHVlKVxuICAgIH1cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlBcnJheSAodmFsdWUpIHtcbiAgICB2YXIgcmVzID0gJyc7XG4gICAgdmFyIHN0cmluZ2lmaWVkO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoaXNEZWYoc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlDbGFzcyh2YWx1ZVtpXSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykge1xuICAgICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgICAgcmVzICs9IHN0cmluZ2lmaWVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICAgIHJlcyArPSBrZXk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBuYW1lc3BhY2VNYXAgPSB7XG4gICAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAgIG1hdGg6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJ1xuICB9O1xuXG4gIHZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAgICdodG1sLGJvZHksYmFzZSxoZWFkLGxpbmssbWV0YSxzdHlsZSx0aXRsZSwnICtcbiAgICAnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGZvb3RlcixoZWFkZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGdyb3VwLG5hdixzZWN0aW9uLCcgK1xuICAgICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgICAnYSxiLGFiYnIsYmRpLGJkbyxicixjaXRlLGNvZGUsZGF0YSxkZm4sZW0saSxrYmQsbWFyayxxLHJwLHJ0LHJ0YyxydWJ5LCcgK1xuICAgICdzLHNhbXAsc21hbGwsc3BhbixzdHJvbmcsc3ViLHN1cCx0aW1lLHUsdmFyLHdicixhcmVhLGF1ZGlvLG1hcCx0cmFjayx2aWRlbywnICtcbiAgICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICAgJ2NhcHRpb24sY29sLGNvbGdyb3VwLHRhYmxlLHRoZWFkLHRib2R5LHRkLHRoLHRyLCcgK1xuICAgICdidXR0b24sZGF0YWxpc3QsZmllbGRzZXQsZm9ybSxpbnB1dCxsYWJlbCxsZWdlbmQsbWV0ZXIsb3B0Z3JvdXAsb3B0aW9uLCcgK1xuICAgICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAgICdkZXRhaWxzLGRpYWxvZyxtZW51LG1lbnVpdGVtLHN1bW1hcnksJyArXG4gICAgJ2NvbnRlbnQsZWxlbWVudCxzaGFkb3csdGVtcGxhdGUsYmxvY2txdW90ZSxpZnJhbWUsdGZvb3QnXG4gICk7XG5cbiAgLy8gdGhpcyBtYXAgaXMgaW50ZW50aW9uYWxseSBzZWxlY3RpdmUsIG9ubHkgY292ZXJpbmcgU1ZHIGVsZW1lbnRzIHRoYXQgbWF5XG4gIC8vIGNvbnRhaW4gY2hpbGQgZWxlbWVudHMuXG4gIHZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICAgJ3N2ZyxhbmltYXRlLGNpcmNsZSxjbGlwcGF0aCxjdXJzb3IsZGVmcyxkZXNjLGVsbGlwc2UsZmlsdGVyLGZvbnQtZmFjZSwnICtcbiAgICAnZm9yZWlnbk9iamVjdCxnLGdseXBoLGltYWdlLGxpbmUsbWFya2VyLG1hc2ssbWlzc2luZy1nbHlwaCxwYXRoLHBhdHRlcm4sJyArXG4gICAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICAgIHRydWVcbiAgKTtcblxuICB2YXIgaXNQcmVUYWcgPSBmdW5jdGlvbiAodGFnKSB7IHJldHVybiB0YWcgPT09ICdwcmUnOyB9O1xuXG4gIHZhciBpc1Jlc2VydmVkVGFnID0gZnVuY3Rpb24gKHRhZykge1xuICAgIHJldHVybiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWRyh0YWcpXG4gIH07XG5cbiAgZnVuY3Rpb24gZ2V0VGFnTmFtZXNwYWNlICh0YWcpIHtcbiAgICBpZiAoaXNTVkcodGFnKSkge1xuICAgICAgcmV0dXJuICdzdmcnXG4gICAgfVxuICAgIC8vIGJhc2ljIHN1cHBvcnQgZm9yIE1hdGhNTFxuICAgIC8vIG5vdGUgaXQgZG9lc24ndCBzdXBwb3J0IG90aGVyIE1hdGhNTCBlbGVtZW50cyBiZWluZyBjb21wb25lbnQgcm9vdHNcbiAgICBpZiAodGFnID09PSAnbWF0aCcpIHtcbiAgICAgIHJldHVybiAnbWF0aCdcbiAgICB9XG4gIH1cblxuICB2YXIgdW5rbm93bkVsZW1lbnRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQgKHRhZykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghaW5Ccm93c2VyKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgdGFnID0gdGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5rbm93bkVsZW1lbnRDYWNoZVt0YWddXG4gICAgfVxuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgICBpZiAodGFnLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yODIxMDM2NC8xMDcwMjQ0XG4gICAgICByZXR1cm4gKHVua25vd25FbGVtZW50Q2FjaGVbdGFnXSA9IChcbiAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnQgfHxcbiAgICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MRWxlbWVudFxuICAgICAgKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICh1bmtub3duRWxlbWVudENhY2hlW3RhZ10gPSAvSFRNTFVua25vd25FbGVtZW50Ly50ZXN0KGVsLnRvU3RyaW5nKCkpKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpc1RleHRJbnB1dFR5cGUgPSBtYWtlTWFwKCd0ZXh0LG51bWJlcixwYXNzd29yZCxzZWFyY2gsZW1haWwsdGVsLHVybCcpO1xuXG4gIC8qICAqL1xuXG4gIC8qKlxuICAgKiBRdWVyeSBhbiBlbGVtZW50IHNlbGVjdG9yIGlmIGl0J3Mgbm90IGFuIGVsZW1lbnQgYWxyZWFkeS5cbiAgICovXG4gIGZ1bmN0aW9uIHF1ZXJ5IChlbCkge1xuICAgIGlmICh0eXBlb2YgZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnQ2Fubm90IGZpbmQgZWxlbWVudDogJyArIGVsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbGVjdGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbFxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQkMSAodGFnTmFtZSwgdm5vZGUpIHtcbiAgICB2YXIgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgICBpZiAodGFnTmFtZSAhPT0gJ3NlbGVjdCcpIHtcbiAgICAgIHJldHVybiBlbG1cbiAgICB9XG4gICAgLy8gZmFsc2Ugb3IgbnVsbCB3aWxsIHJlbW92ZSB0aGUgYXR0cmlidXRlIGJ1dCB1bmRlZmluZWQgd2lsbCBub3RcbiAgICBpZiAodm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLmF0dHJzICYmIHZub2RlLmRhdGEuYXR0cnMubXVsdGlwbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsbVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudE5TIChuYW1lc3BhY2UsIHRhZ05hbWUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZU1hcFtuYW1lc3BhY2VdLCB0YWdOYW1lKVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUgKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbW1lbnQgKHRleHQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCh0ZXh0KVxuICB9XG5cbiAgZnVuY3Rpb24gaW5zZXJ0QmVmb3JlIChwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgICBub2RlLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGVuZENoaWxkIChub2RlLCBjaGlsZCkge1xuICAgIG5vZGUuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyZW50Tm9kZSAobm9kZSkge1xuICAgIHJldHVybiBub2RlLnBhcmVudE5vZGVcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHRTaWJsaW5nIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmdcbiAgfVxuXG4gIGZ1bmN0aW9uIHRhZ05hbWUgKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50YWdOYW1lXG4gIH1cblxuICBmdW5jdGlvbiBzZXRUZXh0Q29udGVudCAobm9kZSwgdGV4dCkge1xuICAgIG5vZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0U3R5bGVTY29wZSAobm9kZSwgc2NvcGVJZCkge1xuICAgIG5vZGUuc2V0QXR0cmlidXRlKHNjb3BlSWQsICcnKTtcbiAgfVxuXG4gIHZhciBub2RlT3BzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQkMSxcbiAgICBjcmVhdGVFbGVtZW50TlM6IGNyZWF0ZUVsZW1lbnROUyxcbiAgICBjcmVhdGVUZXh0Tm9kZTogY3JlYXRlVGV4dE5vZGUsXG4gICAgY3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcbiAgICBpbnNlcnRCZWZvcmU6IGluc2VydEJlZm9yZSxcbiAgICByZW1vdmVDaGlsZDogcmVtb3ZlQ2hpbGQsXG4gICAgYXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuICAgIHBhcmVudE5vZGU6IHBhcmVudE5vZGUsXG4gICAgbmV4dFNpYmxpbmc6IG5leHRTaWJsaW5nLFxuICAgIHRhZ05hbWU6IHRhZ05hbWUsXG4gICAgc2V0VGV4dENvbnRlbnQ6IHNldFRleHRDb250ZW50LFxuICAgIHNldFN0eWxlU2NvcGU6IHNldFN0eWxlU2NvcGVcbiAgfSk7XG5cbiAgLyogICovXG5cbiAgdmFyIHJlZiA9IHtcbiAgICBjcmVhdGU6IGZ1bmN0aW9uIGNyZWF0ZSAoXywgdm5vZGUpIHtcbiAgICAgIHJlZ2lzdGVyUmVmKHZub2RlKTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICAgIGlmIChvbGRWbm9kZS5kYXRhLnJlZiAhPT0gdm5vZGUuZGF0YS5yZWYpIHtcbiAgICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUsIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWdpc3RlclJlZiAodm5vZGUsIGlzUmVtb3ZhbCkge1xuICAgIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgICBpZiAoIWlzRGVmKGtleSkpIHsgcmV0dXJuIH1cblxuICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIHJlZiA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmVsbTtcbiAgICB2YXIgcmVmcyA9IHZtLiRyZWZzO1xuICAgIGlmIChpc1JlbW92YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlZnNba2V5XSkpIHtcbiAgICAgICAgcmVtb3ZlKHJlZnNba2V5XSwgcmVmKTtcbiAgICAgIH0gZWxzZSBpZiAocmVmc1trZXldID09PSByZWYpIHtcbiAgICAgICAgcmVmc1trZXldID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodm5vZGUuZGF0YS5yZWZJbkZvcikge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgICAgIHJlZnNba2V5XSA9IFtyZWZdO1xuICAgICAgICB9IGVsc2UgaWYgKHJlZnNba2V5XS5pbmRleE9mKHJlZikgPCAwKSB7XG4gICAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgICAgcmVmc1trZXldLnB1c2gocmVmKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVmc1trZXldID0gcmVmO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0gYmFzZWQgb24gU25hYmJkb20gYnlcbiAgICogU2ltb24gRnJpaXMgVmluZHVtIChAcGFsZGVwaW5kKVxuICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gICAqXG4gICAqIG1vZGlmaWVkIGJ5IEV2YW4gWW91IChAeXl4OTkwODAzKVxuICAgKlxuICAgKiBOb3QgdHlwZS1jaGVja2luZyB0aGlzIGJlY2F1c2UgdGhpcyBmaWxlIGlzIHBlcmYtY3JpdGljYWwgYW5kIHRoZSBjb3N0XG4gICAqIG9mIG1ha2luZyBmbG93IHVuZGVyc3RhbmQgaXQgaXMgbm90IHdvcnRoIGl0LlxuICAgKi9cblxuICB2YXIgZW1wdHlOb2RlID0gbmV3IFZOb2RlKCcnLCB7fSwgW10pO1xuXG4gIHZhciBob29rcyA9IFsnY3JlYXRlJywgJ2FjdGl2YXRlJywgJ3VwZGF0ZScsICdyZW1vdmUnLCAnZGVzdHJveSddO1xuXG4gIGZ1bmN0aW9uIHNhbWVWbm9kZSAoYSwgYikge1xuICAgIHJldHVybiAoXG4gICAgICBhLmtleSA9PT0gYi5rZXkgJiYgKFxuICAgICAgICAoXG4gICAgICAgICAgYS50YWcgPT09IGIudGFnICYmXG4gICAgICAgICAgYS5pc0NvbW1lbnQgPT09IGIuaXNDb21tZW50ICYmXG4gICAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxuICAgICAgICAgIHNhbWVJbnB1dFR5cGUoYSwgYilcbiAgICAgICAgKSB8fCAoXG4gICAgICAgICAgaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJlxuICAgICAgICAgIGEuYXN5bmNGYWN0b3J5ID09PSBiLmFzeW5jRmFjdG9yeSAmJlxuICAgICAgICAgIGlzVW5kZWYoYi5hc3luY0ZhY3RvcnkuZXJyb3IpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBmdW5jdGlvbiBzYW1lSW5wdXRUeXBlIChhLCBiKSB7XG4gICAgaWYgKGEudGFnICE9PSAnaW5wdXQnKSB7IHJldHVybiB0cnVlIH1cbiAgICB2YXIgaTtcbiAgICB2YXIgdHlwZUEgPSBpc0RlZihpID0gYS5kYXRhKSAmJiBpc0RlZihpID0gaS5hdHRycykgJiYgaS50eXBlO1xuICAgIHZhciB0eXBlQiA9IGlzRGVmKGkgPSBiLmRhdGEpICYmIGlzRGVmKGkgPSBpLmF0dHJzKSAmJiBpLnR5cGU7XG4gICAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCBpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQilcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUtleVRvT2xkSWR4IChjaGlsZHJlbiwgYmVnaW5JZHgsIGVuZElkeCkge1xuICAgIHZhciBpLCBrZXk7XG4gICAgdmFyIG1hcCA9IHt9O1xuICAgIGZvciAoaSA9IGJlZ2luSWR4OyBpIDw9IGVuZElkeDsgKytpKSB7XG4gICAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgICBpZiAoaXNEZWYoa2V5KSkgeyBtYXBba2V5XSA9IGk7IH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGF0Y2hGdW5jdGlvbiAoYmFja2VuZCkge1xuICAgIHZhciBpLCBqO1xuICAgIHZhciBjYnMgPSB7fTtcblxuICAgIHZhciBtb2R1bGVzID0gYmFja2VuZC5tb2R1bGVzO1xuICAgIHZhciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjYnNbaG9va3NbaV1dID0gW107XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgICBpZiAoaXNEZWYobW9kdWxlc1tqXVtob29rc1tpXV0pKSB7XG4gICAgICAgICAgY2JzW2hvb2tzW2ldXS5wdXNoKG1vZHVsZXNbal1baG9va3NbaV1dKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0pIHtcbiAgICAgIHJldHVybiBuZXcgVk5vZGUobm9kZU9wcy50YWdOYW1lKGVsbSkudG9Mb3dlckNhc2UoKSwge30sIFtdLCB1bmRlZmluZWQsIGVsbSlcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVSbUNiIChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgICBmdW5jdGlvbiByZW1vdmUkJDEgKCkge1xuICAgICAgICBpZiAoLS1yZW1vdmUkJDEubGlzdGVuZXJzID09PSAwKSB7XG4gICAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlbW92ZSQkMS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgICByZXR1cm4gcmVtb3ZlJCQxXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlTm9kZSAoZWwpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlT3BzLnBhcmVudE5vZGUoZWwpO1xuICAgICAgLy8gZWxlbWVudCBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBkdWUgdG8gdi1odG1sIC8gdi10ZXh0XG4gICAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgICBub2RlT3BzLnJlbW92ZUNoaWxkKHBhcmVudCwgZWwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5rbm93bkVsZW1lbnQkJDEgKHZub2RlLCBpblZQcmUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICFpblZQcmUgJiZcbiAgICAgICAgIXZub2RlLm5zICYmXG4gICAgICAgICEoXG4gICAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgICBjb25maWcuaWdub3JlZEVsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGlnbm9yZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzUmVnRXhwKGlnbm9yZSlcbiAgICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh2bm9kZS50YWcpXG4gICAgICAgICAgICAgIDogaWdub3JlID09PSB2bm9kZS50YWdcbiAgICAgICAgICB9KVxuICAgICAgICApICYmXG4gICAgICAgIGNvbmZpZy5pc1Vua25vd25FbGVtZW50KHZub2RlLnRhZylcbiAgICAgIClcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRpbmdFbG1JblZQcmUgPSAwO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRWxtIChcbiAgICAgIHZub2RlLFxuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLFxuICAgICAgcGFyZW50RWxtLFxuICAgICAgcmVmRWxtLFxuICAgICAgbmVzdGVkLFxuICAgICAgb3duZXJBcnJheSxcbiAgICAgIGluZGV4XG4gICAgKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgICAvLyBUaGlzIHZub2RlIHdhcyB1c2VkIGluIGEgcHJldmlvdXMgcmVuZGVyIVxuICAgICAgICAvLyBub3cgaXQncyB1c2VkIGFzIGEgbmV3IG5vZGUsIG92ZXJ3cml0aW5nIGl0cyBlbG0gd291bGQgY2F1c2VcbiAgICAgICAgLy8gcG90ZW50aWFsIHBhdGNoIGVycm9ycyBkb3duIHRoZSByb2FkIHdoZW4gaXQncyB1c2VkIGFzIGFuIGluc2VydGlvblxuICAgICAgICAvLyByZWZlcmVuY2Ugbm9kZS4gSW5zdGVhZCwgd2UgY2xvbmUgdGhlIG5vZGUgb24tZGVtYW5kIGJlZm9yZSBjcmVhdGluZ1xuICAgICAgICAvLyBhc3NvY2lhdGVkIERPTSBlbGVtZW50IGZvciBpdC5cbiAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgfVxuXG4gICAgICB2bm9kZS5pc1Jvb3RJbnNlcnQgPSAhbmVzdGVkOyAvLyBmb3IgdHJhbnNpdGlvbiBlbnRlciBjaGVja1xuICAgICAgaWYgKGNyZWF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgICAgY3JlYXRpbmdFbG1JblZQcmUrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzVW5rbm93bkVsZW1lbnQkJDEodm5vZGUsIGNyZWF0aW5nRWxtSW5WUHJlKSkge1xuICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgJ1Vua25vd24gY3VzdG9tIGVsZW1lbnQ6IDwnICsgdGFnICsgJz4gLSBkaWQgeW91ICcgK1xuICAgICAgICAgICAgICAncmVnaXN0ZXIgdGhlIGNvbXBvbmVudCBjb3JyZWN0bHk/IEZvciByZWN1cnNpdmUgY29tcG9uZW50cywgJyArXG4gICAgICAgICAgICAgICdtYWtlIHN1cmUgdG8gcHJvdmlkZSB0aGUgXCJuYW1lXCIgb3B0aW9uLicsXG4gICAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdm5vZGUuZWxtID0gdm5vZGUubnNcbiAgICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgICAgOiBub2RlT3BzLmNyZWF0ZUVsZW1lbnQodGFnLCB2bm9kZSk7XG4gICAgICAgIHNldFNjb3BlKHZub2RlKTtcblxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAge1xuICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnByZSkge1xuICAgICAgICAgIGNyZWF0aW5nRWxtSW5WUHJlLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVlKHZub2RlLmlzQ29tbWVudCkpIHtcbiAgICAgICAgdm5vZGUuZWxtID0gbm9kZU9wcy5jcmVhdGVDb21tZW50KHZub2RlLnRleHQpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpO1xuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgICAgdmFyIGkgPSB2bm9kZS5kYXRhO1xuICAgICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGkuaG9vaykgJiYgaXNEZWYoaSA9IGkuaW5pdCkpIHtcbiAgICAgICAgICBpKHZub2RlLCBmYWxzZSAvKiBoeWRyYXRpbmcgKi8pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhlIGluaXQgaG9vaywgaWYgdGhlIHZub2RlIGlzIGEgY2hpbGQgY29tcG9uZW50XG4gICAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgICAvLyBjb21wb25lbnQgYWxzbyBoYXMgc2V0IHRoZSBwbGFjZWhvbGRlciB2bm9kZSdzIGVsbS5cbiAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgZWxlbWVudCBhbmQgYmUgZG9uZS5cbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgICAgICAgIGlmIChpc1RydWUoaXNSZWFjdGl2YXRlZCkpIHtcbiAgICAgICAgICAgIHJlYWN0aXZhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdENvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2VydCkpIHtcbiAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2guYXBwbHkoaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQpO1xuICAgICAgICB2bm9kZS5kYXRhLnBlbmRpbmdJbnNlcnQgPSBudWxsO1xuICAgICAgfVxuICAgICAgdm5vZGUuZWxtID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuJGVsO1xuICAgICAgaWYgKGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgc2V0U2NvcGUodm5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZW1wdHkgY29tcG9uZW50IHJvb3QuXG4gICAgICAgIC8vIHNraXAgYWxsIGVsZW1lbnQtcmVsYXRlZCBtb2R1bGVzIGV4Y2VwdCBmb3IgcmVmICgjMzQ1NSlcbiAgICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBpbnNlcnQgaG9va1xuICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhY3RpdmF0ZUNvbXBvbmVudCAodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pIHtcbiAgICAgIHZhciBpO1xuICAgICAgLy8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJhbnNpdGlvblxuICAgICAgLy8gZG9lcyBub3QgdHJpZ2dlciBiZWNhdXNlIHRoZSBpbm5lciBub2RlJ3MgY3JlYXRlZCBob29rcyBhcmUgbm90IGNhbGxlZFxuICAgICAgLy8gYWdhaW4uIEl0J3Mgbm90IGlkZWFsIHRvIGludm9sdmUgbW9kdWxlLXNwZWNpZmljIGxvZ2ljIGluIGhlcmUgYnV0XG4gICAgICAvLyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxuICAgICAgdmFyIGlubmVyTm9kZSA9IHZub2RlO1xuICAgICAgd2hpbGUgKGlubmVyTm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICBpbm5lck5vZGUgPSBpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgICBpZiAoaXNEZWYoaSA9IGlubmVyTm9kZS5kYXRhKSAmJiBpc0RlZihpID0gaS50cmFuc2l0aW9uKSkge1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMuYWN0aXZhdGUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoKGlubmVyTm9kZSk7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gdW5saWtlIGEgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQsXG4gICAgICAvLyBhIHJlYWN0aXZhdGVkIGtlZXAtYWxpdmUgY29tcG9uZW50IGRvZXNuJ3QgaW5zZXJ0IGl0c2VsZlxuICAgICAgaW5zZXJ0KHBhcmVudEVsbSwgdm5vZGUuZWxtLCByZWZFbG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc2VydCAocGFyZW50LCBlbG0sIHJlZiQkMSkge1xuICAgICAgaWYgKGlzRGVmKHBhcmVudCkpIHtcbiAgICAgICAgaWYgKGlzRGVmKHJlZiQkMSkpIHtcbiAgICAgICAgICBpZiAobm9kZU9wcy5wYXJlbnROb2RlKHJlZiQkMSkgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50LCBlbG0sIHJlZiQkMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQocGFyZW50LCBlbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4gKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAge1xuICAgICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUsIGNoaWxkcmVuLCBpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1ByaW1pdGl2ZSh2bm9kZS50ZXh0KSkge1xuICAgICAgICBub2RlT3BzLmFwcGVuZENoaWxkKHZub2RlLmVsbSwgbm9kZU9wcy5jcmVhdGVUZXh0Tm9kZShTdHJpbmcodm5vZGUudGV4dCkpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICAgIHdoaWxlICh2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkge1xuICAgICAgICB2bm9kZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0RlZih2bm9kZS50YWcpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICBjYnMuY3JlYXRlW2kkMV0oZW1wdHlOb2RlLCB2bm9kZSk7XG4gICAgICB9XG4gICAgICBpID0gdm5vZGUuZGF0YS5ob29rOyAvLyBSZXVzZSB2YXJpYWJsZVxuICAgICAgaWYgKGlzRGVmKGkpKSB7XG4gICAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgICAgaWYgKGlzRGVmKGkuaW5zZXJ0KSkgeyBpbnNlcnRlZFZub2RlUXVldWUucHVzaCh2bm9kZSk7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXQgc2NvcGUgaWQgYXR0cmlidXRlIGZvciBzY29wZWQgQ1NTLlxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzcGVjaWFsIGNhc2UgdG8gYXZvaWQgdGhlIG92ZXJoZWFkXG4gICAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICAgIGZ1bmN0aW9uIHNldFNjb3BlICh2bm9kZSkge1xuICAgICAgdmFyIGk7XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZuU2NvcGVJZCkpIHtcbiAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYW5jZXN0b3IgPSB2bm9kZTtcbiAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgaWYgKGlzRGVmKGkgPSBhbmNlc3Rvci5jb250ZXh0KSAmJiBpc0RlZihpID0gaS4kb3B0aW9ucy5fc2NvcGVJZCkpIHtcbiAgICAgICAgICAgIG5vZGVPcHMuc2V0U3R5bGVTY29wZSh2bm9kZS5lbG0sIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gZm9yIHNsb3QgY29udGVudCB0aGV5IHNob3VsZCBhbHNvIGdldCB0aGUgc2NvcGVJZCBmcm9tIHRoZSBob3N0IGluc3RhbmNlLlxuICAgICAgaWYgKGlzRGVmKGkgPSBhY3RpdmVJbnN0YW5jZSkgJiZcbiAgICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgICBpICE9PSB2bm9kZS5mbkNvbnRleHQgJiZcbiAgICAgICAgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpXG4gICAgICApIHtcbiAgICAgICAgbm9kZU9wcy5zZXRTdHlsZVNjb3BlKHZub2RlLmVsbSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVm5vZGVzIChwYXJlbnRFbG0sIHJlZkVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICAgIGZvciAoOyBzdGFydElkeCA8PSBlbmRJZHg7ICsrc3RhcnRJZHgpIHtcbiAgICAgICAgY3JlYXRlRWxtKHZub2Rlc1tzdGFydElkeF0sIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0sIGZhbHNlLCB2bm9kZXMsIHN0YXJ0SWR4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZva2VEZXN0cm95SG9vayAodm5vZGUpIHtcbiAgICAgIHZhciBpLCBqO1xuICAgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5kZXN0cm95KSkgeyBpKHZub2RlKTsgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayh2bm9kZS5jaGlsZHJlbltqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVWbm9kZXMgKHZub2Rlcywgc3RhcnRJZHgsIGVuZElkeCkge1xuICAgICAgZm9yICg7IHN0YXJ0SWR4IDw9IGVuZElkeDsgKytzdGFydElkeCkge1xuICAgICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgICBpZiAoaXNEZWYoY2gpKSB7XG4gICAgICAgICAgaWYgKGlzRGVmKGNoLnRhZykpIHtcbiAgICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2soY2gpO1xuICAgICAgICAgIH0gZWxzZSB7IC8vIFRleHQgbm9kZVxuICAgICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2sgKHZub2RlLCBybSkge1xuICAgICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIGxpc3RlbmVycyA9IGNicy5yZW1vdmUubGVuZ3RoICsgMTtcbiAgICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAgIC8vIHdlIGhhdmUgYSByZWN1cnNpdmVseSBwYXNzZWQgZG93biBybSBjYWxsYmFja1xuICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBsaXN0ZW5lcnMgY291bnRcbiAgICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRpcmVjdGx5IHJlbW92aW5nXG4gICAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWN1cnNpdmVseSBpbnZva2UgaG9va3Mgb24gY2hpbGQgY29tcG9uZW50IHJvb3Qgbm9kZVxuICAgICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgICByZW1vdmVBbmRJbnZva2VSZW1vdmVIb29rKGksIHJtKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNicy5yZW1vdmVbaV0odm5vZGUsIHJtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICAgIGkodm5vZGUsIHJtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBybSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICAgIHZhciBvbGRTdGFydElkeCA9IDA7XG4gICAgICB2YXIgbmV3U3RhcnRJZHggPSAwO1xuICAgICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgb2xkU3RhcnRWbm9kZSA9IG9sZENoWzBdO1xuICAgICAgdmFyIG9sZEVuZFZub2RlID0gb2xkQ2hbb2xkRW5kSWR4XTtcbiAgICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgICAgdmFyIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFswXTtcbiAgICAgIHZhciBuZXdFbmRWbm9kZSA9IG5ld0NoW25ld0VuZElkeF07XG4gICAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgICAvLyByZW1vdmVPbmx5IGlzIGEgc3BlY2lhbCBmbGFnIHVzZWQgb25seSBieSA8dHJhbnNpdGlvbi1ncm91cD5cbiAgICAgIC8vIHRvIGVuc3VyZSByZW1vdmVkIGVsZW1lbnRzIHN0YXkgaW4gY29ycmVjdCByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgICB2YXIgY2FuTW92ZSA9ICFyZW1vdmVPbmx5O1xuXG4gICAgICB7XG4gICAgICAgIGNoZWNrRHVwbGljYXRlS2V5cyhuZXdDaCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICAgIGlmIChpc1VuZGVmKG9sZFN0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdOyAvLyBWbm9kZSBoYXMgYmVlbiBtb3ZlZCBsZWZ0XG4gICAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgICBvbGRFbmRWbm9kZSA9IG9sZENoWy0tb2xkRW5kSWR4XTtcbiAgICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07XG4gICAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7XG4gICAgICAgICAgcGF0Y2hWbm9kZShvbGRFbmRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgICAgbmV3RW5kVm5vZGUgPSBuZXdDaFstLW5ld0VuZElkeF07XG4gICAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld0VuZFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCByaWdodFxuICAgICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld0VuZElkeCk7XG4gICAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtLCBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVuZFZub2RlLmVsbSkpO1xuICAgICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIGxlZnRcbiAgICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIG5ld0NoLCBuZXdTdGFydElkeCk7XG4gICAgICAgICAgY2FuTW92ZSAmJiBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnRFbG0sIG9sZEVuZFZub2RlLmVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgIG9sZEVuZFZub2RlID0gb2xkQ2hbLS1vbGRFbmRJZHhdO1xuICAgICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNVbmRlZihvbGRLZXlUb0lkeCkpIHsgb2xkS2V5VG9JZHggPSBjcmVhdGVLZXlUb09sZElkeChvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7IH1cbiAgICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxuICAgICAgICAgICAgPyBvbGRLZXlUb0lkeFtuZXdTdGFydFZub2RlLmtleV1cbiAgICAgICAgICAgIDogZmluZElkeEluT2xkKG5ld1N0YXJ0Vm5vZGUsIG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTtcbiAgICAgICAgICBpZiAoaXNVbmRlZihpZHhJbk9sZCkpIHsgLy8gTmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2bm9kZVRvTW92ZSA9IG9sZENoW2lkeEluT2xkXTtcbiAgICAgICAgICAgIGlmIChzYW1lVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUpKSB7XG4gICAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbmV3Q2gsIG5ld1N0YXJ0SWR4KTtcbiAgICAgICAgICAgICAgb2xkQ2hbaWR4SW5PbGRdID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBzYW1lIGtleSBidXQgZGlmZmVyZW50IGVsZW1lbnQuIHRyZWF0IGFzIG5ldyBlbGVtZW50XG4gICAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0sIGZhbHNlLCBuZXdDaCwgbmV3U3RhcnRJZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgICByZWZFbG0gPSBpc1VuZGVmKG5ld0NoW25ld0VuZElkeCArIDFdKSA/IG51bGwgOiBuZXdDaFtuZXdFbmRJZHggKyAxXS5lbG07XG4gICAgICAgIGFkZFZub2RlcyhwYXJlbnRFbG0sIHJlZkVsbSwgbmV3Q2gsIG5ld1N0YXJ0SWR4LCBuZXdFbmRJZHgsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tEdXBsaWNhdGVLZXlzIChjaGlsZHJlbikge1xuICAgICAgdmFyIHNlZW5LZXlzID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB2bm9kZSA9IGNoaWxkcmVuW2ldO1xuICAgICAgICB2YXIga2V5ID0gdm5vZGUua2V5O1xuICAgICAgICBpZiAoaXNEZWYoa2V5KSkge1xuICAgICAgICAgIGlmIChzZWVuS2V5c1trZXldKSB7XG4gICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAoXCJEdXBsaWNhdGUga2V5cyBkZXRlY3RlZDogJ1wiICsga2V5ICsgXCInLiBUaGlzIG1heSBjYXVzZSBhbiB1cGRhdGUgZXJyb3IuXCIpLFxuICAgICAgICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWVuS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kSWR4SW5PbGQgKG5vZGUsIG9sZENoLCBzdGFydCwgZW5kKSB7XG4gICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICB2YXIgYyA9IG9sZENoW2ldO1xuICAgICAgICBpZiAoaXNEZWYoYykgJiYgc2FtZVZub2RlKG5vZGUsIGMpKSB7IHJldHVybiBpIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaFZub2RlIChcbiAgICAgIG9sZFZub2RlLFxuICAgICAgdm5vZGUsXG4gICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICBvd25lckFycmF5LFxuICAgICAgaW5kZXgsXG4gICAgICByZW1vdmVPbmx5XG4gICAgKSB7XG4gICAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNEZWYodm5vZGUuZWxtKSAmJiBpc0RlZihvd25lckFycmF5KSkge1xuICAgICAgICAvLyBjbG9uZSByZXVzZWQgdm5vZGVcbiAgICAgICAgdm5vZGUgPSBvd25lckFycmF5W2luZGV4XSA9IGNsb25lVk5vZGUodm5vZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgICBpZiAoaXNUcnVlKG9sZFZub2RlLmlzQXN5bmNQbGFjZWhvbGRlcikpIHtcbiAgICAgICAgaWYgKGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeS5yZXNvbHZlZCkpIHtcbiAgICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgICAgLy8gbm90ZSB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIHZub2RlIGlzIGNsb25lZCAtXG4gICAgICAvLyBpZiB0aGUgbmV3IG5vZGUgaXMgbm90IGNsb25lZCBpdCBtZWFucyB0aGUgcmVuZGVyIGZ1bmN0aW9ucyBoYXZlIGJlZW5cbiAgICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgICBpZiAoaXNUcnVlKHZub2RlLmlzU3RhdGljKSAmJlxuICAgICAgICBpc1RydWUob2xkVm5vZGUuaXNTdGF0aWMpICYmXG4gICAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAgIChpc1RydWUodm5vZGUuaXNDbG9uZWQpIHx8IGlzVHJ1ZSh2bm9kZS5pc09uY2UpKVxuICAgICAgKSB7XG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wcmVwYXRjaCkpIHtcbiAgICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb2xkQ2ggPSBvbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzUGF0Y2hhYmxlKHZub2RlKSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnVwZGF0ZS5sZW5ndGg7ICsraSkgeyBjYnMudXBkYXRlW2ldKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgICB9XG4gICAgICBpZiAoaXNVbmRlZih2bm9kZS50ZXh0KSkge1xuICAgICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICAgIGlmIChvbGRDaCAhPT0gY2gpIHsgdXBkYXRlQ2hpbGRyZW4oZWxtLCBvbGRDaCwgY2gsIGluc2VydGVkVm5vZGVRdWV1ZSwgcmVtb3ZlT25seSk7IH1cbiAgICAgICAgfSBlbHNlIGlmIChpc0RlZihjaCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGVja0R1cGxpY2F0ZUtleXMoY2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHsgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTsgfVxuICAgICAgICAgIGFkZFZub2RlcyhlbG0sIG51bGwsIGNoLCAwLCBjaC5sZW5ndGggLSAxLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZENoKSkge1xuICAgICAgICAgIHJlbW92ZVZub2RlcyhvbGRDaCwgMCwgb2xkQ2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHtcbiAgICAgICAgICBub2RlT3BzLnNldFRleHRDb250ZW50KGVsbSwgJycpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9sZFZub2RlLnRleHQgIT09IHZub2RlLnRleHQpIHtcbiAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sIHZub2RlLnRleHQpO1xuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5wb3N0cGF0Y2gpKSB7IGkob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludm9rZUluc2VydEhvb2sgKHZub2RlLCBxdWV1ZSwgaW5pdGlhbCkge1xuICAgICAgLy8gZGVsYXkgaW5zZXJ0IGhvb2tzIGZvciBjb21wb25lbnQgcm9vdCBub2RlcywgaW52b2tlIHRoZW0gYWZ0ZXIgdGhlXG4gICAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBpbnNlcnRlZFxuICAgICAgaWYgKGlzVHJ1ZShpbml0aWFsKSAmJiBpc0RlZih2bm9kZS5wYXJlbnQpKSB7XG4gICAgICAgIHZub2RlLnBhcmVudC5kYXRhLnBlbmRpbmdJbnNlcnQgPSBxdWV1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBxdWV1ZVtpXS5kYXRhLmhvb2suaW5zZXJ0KHF1ZXVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoeWRyYXRpb25CYWlsZWQgPSBmYWxzZTtcbiAgICAvLyBsaXN0IG9mIG1vZHVsZXMgdGhhdCBjYW4gc2tpcCBjcmVhdGUgaG9vayBkdXJpbmcgaHlkcmF0aW9uIGJlY2F1c2UgdGhleVxuICAgIC8vIGFyZSBhbHJlYWR5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQgb3IgaGFzIG5vIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uXG4gICAgLy8gTm90ZTogc3R5bGUgaXMgZXhjbHVkZWQgYmVjYXVzZSBpdCByZWxpZXMgb24gaW5pdGlhbCBjbG9uZSBmb3IgZnV0dXJlXG4gICAgLy8gZGVlcCB1cGRhdGVzICgjNzA2MykuXG4gICAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAgIC8vIE5vdGU6IHRoaXMgaXMgYSBicm93c2VyLW9ubHkgZnVuY3Rpb24gc28gd2UgY2FuIGFzc3VtZSBlbG1zIGFyZSBET00gbm9kZXMuXG4gICAgZnVuY3Rpb24gaHlkcmF0ZSAoZWxtLCB2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBpblZQcmUpIHtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICAgIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgICAgaW5WUHJlID0gaW5WUHJlIHx8IChkYXRhICYmIGRhdGEucHJlKTtcbiAgICAgIHZub2RlLmVsbSA9IGVsbTtcblxuICAgICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpICYmIGlzRGVmKHZub2RlLmFzeW5jRmFjdG9yeSkpIHtcbiAgICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIC8vIGFzc2VydCBub2RlIG1hdGNoXG4gICAgICB7XG4gICAgICAgIGlmICghYXNzZXJ0Tm9kZU1hdGNoKGVsbSwgdm5vZGUsIGluVlByZSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gZGF0YS5ob29rKSAmJiBpc0RlZihpID0gaS5pbml0KSkgeyBpKHZub2RlLCB0cnVlIC8qIGh5ZHJhdGluZyAqLyk7IH1cbiAgICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICAgICAgICAvLyBjaGlsZCBjb21wb25lbnQuIGl0IHNob3VsZCBoYXZlIGh5ZHJhdGVkIGl0cyBvd24gdHJlZS5cbiAgICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICAgIGlmIChpc0RlZihjaGlsZHJlbikpIHtcbiAgICAgICAgICAvLyBlbXB0eSBlbGVtZW50LCBhbGxvdyBjbGllbnQgdG8gcGljayB1cCBhbmQgcG9wdWxhdGUgY2hpbGRyZW5cbiAgICAgICAgICBpZiAoIWVsbS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIGNyZWF0ZUNoaWxkcmVuKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXG4gICAgICAgICAgICBpZiAoaXNEZWYoaSA9IGRhdGEpICYmIGlzRGVmKGkgPSBpLmRvbVByb3BzKSAmJiBpc0RlZihpID0gaS5pbm5lckhUTUwpKSB7XG4gICAgICAgICAgICAgIGlmIChpICE9PSBlbG0uaW5uZXJIVE1MKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgICAgICAgIWh5ZHJhdGlvbkJhaWxlZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgaHlkcmF0aW9uQmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdzZXJ2ZXIgaW5uZXJIVE1MOiAnLCBpKTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignY2xpZW50IGlubmVySFRNTDogJywgZWxtLmlubmVySFRNTCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpdGVyYXRlIGFuZCBjb21wYXJlIGNoaWxkcmVuIGxpc3RzXG4gICAgICAgICAgICAgIHZhciBjaGlsZHJlbk1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjaGlsZHJlbi5sZW5ndGg7IGkkMSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGUgfHwgIWh5ZHJhdGUoY2hpbGROb2RlLCBjaGlsZHJlbltpJDFdLCBpbnNlcnRlZFZub2RlUXVldWUsIGluVlByZSkpIHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAgICAgIC8vIGxvbmdlciB0aGFuIHRoZSB2aXJ0dWFsIGNoaWxkcmVuIGxpc3QuXG4gICAgICAgICAgICAgIGlmICghY2hpbGRyZW5NYXRjaCB8fCBjaGlsZE5vZGUpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAhaHlkcmF0aW9uQmFpbGVkXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBoeWRyYXRpb25CYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01pc21hdGNoaW5nIGNoaWxkTm9kZXMgdnMuIFZOb2RlczogJywgZWxtLmNoaWxkTm9kZXMsIGNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICAgICAgdmFyIGZ1bGxJbnZva2UgPSBmYWxzZTtcbiAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFpc1JlbmRlcmVkTW9kdWxlKGtleSkpIHtcbiAgICAgICAgICAgICAgZnVsbEludm9rZSA9IHRydWU7XG4gICAgICAgICAgICAgIGludm9rZUNyZWF0ZUhvb2tzKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZ1bGxJbnZva2UgJiYgZGF0YVsnY2xhc3MnXSkge1xuICAgICAgICAgICAgLy8gZW5zdXJlIGNvbGxlY3RpbmcgZGVwcyBmb3IgZGVlcCBjbGFzcyBiaW5kaW5ncyBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgICAgICAgIHRyYXZlcnNlKGRhdGFbJ2NsYXNzJ10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbG0uZGF0YSAhPT0gdm5vZGUudGV4dCkge1xuICAgICAgICBlbG0uZGF0YSA9IHZub2RlLnRleHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaCAobm9kZSwgdm5vZGUsIGluVlByZSkge1xuICAgICAgaWYgKGlzRGVmKHZub2RlLnRhZykpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlLnRhZy5pbmRleE9mKCd2dWUtY29tcG9uZW50JykgPT09IDAgfHwgKFxuICAgICAgICAgICFpc1Vua25vd25FbGVtZW50JCQxKHZub2RlLCBpblZQcmUpICYmXG4gICAgICAgICAgdm5vZGUudGFnLnRvTG93ZXJDYXNlKCkgPT09IChub2RlLnRhZ05hbWUgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAodm5vZGUuaXNDb21tZW50ID8gOCA6IDMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGNoIChvbGRWbm9kZSwgdm5vZGUsIGh5ZHJhdGluZywgcmVtb3ZlT25seSkge1xuICAgICAgaWYgKGlzVW5kZWYodm5vZGUpKSB7XG4gICAgICAgIGlmIChpc0RlZihvbGRWbm9kZSkpIHsgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpOyB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB2YXIgaXNJbml0aWFsUGF0Y2ggPSBmYWxzZTtcbiAgICAgIHZhciBpbnNlcnRlZFZub2RlUXVldWUgPSBbXTtcblxuICAgICAgaWYgKGlzVW5kZWYob2xkVm5vZGUpKSB7XG4gICAgICAgIC8vIGVtcHR5IG1vdW50IChsaWtlbHkgYXMgY29tcG9uZW50KSwgY3JlYXRlIG5ldyByb290IGVsZW1lbnRcbiAgICAgICAgaXNJbml0aWFsUGF0Y2ggPSB0cnVlO1xuICAgICAgICBjcmVhdGVFbG0odm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaXNSZWFsRWxlbWVudCA9IGlzRGVmKG9sZFZub2RlLm5vZGVUeXBlKTtcbiAgICAgICAgaWYgKCFpc1JlYWxFbGVtZW50ICYmIHNhbWVWbm9kZShvbGRWbm9kZSwgdm5vZGUpKSB7XG4gICAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgICAgcGF0Y2hWbm9kZShvbGRWbm9kZSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgbnVsbCwgbnVsbCwgcmVtb3ZlT25seSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIG1vdW50aW5nIHRvIGEgcmVhbCBlbGVtZW50XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIGlzIHNlcnZlci1yZW5kZXJlZCBjb250ZW50IGFuZCBpZiB3ZSBjYW4gcGVyZm9ybVxuICAgICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICAgIGlmIChvbGRWbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBvbGRWbm9kZS5oYXNBdHRyaWJ1dGUoU1NSX0FUVFIpKSB7XG4gICAgICAgICAgICAgIG9sZFZub2RlLnJlbW92ZUF0dHJpYnV0ZShTU1JfQVRUUik7XG4gICAgICAgICAgICAgIGh5ZHJhdGluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNUcnVlKGh5ZHJhdGluZykpIHtcbiAgICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgICAgaW52b2tlSW5zZXJ0SG9vayh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2xkVm5vZGVcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAgICdzZXJ2ZXItcmVuZGVyZWQgY29udGVudC4gVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IGluY29ycmVjdCAnICtcbiAgICAgICAgICAgICAgICAgICdIVE1MIG1hcmt1cCwgZm9yIGV4YW1wbGUgbmVzdGluZyBibG9jay1sZXZlbCBlbGVtZW50cyBpbnNpZGUgJyArXG4gICAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICAgJ2Z1bGwgY2xpZW50LXNpZGUgcmVuZGVyLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlaXRoZXIgbm90IHNlcnZlci1yZW5kZXJlZCwgb3IgaHlkcmF0aW9uIGZhaWxlZC5cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgICBvbGRWbm9kZSA9IGVtcHR5Tm9kZUF0KG9sZFZub2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyByZXBsYWNpbmcgZXhpc3RpbmcgZWxlbWVudFxuICAgICAgICAgIHZhciBvbGRFbG0gPSBvbGRWbm9kZS5lbG07XG4gICAgICAgICAgdmFyIHBhcmVudEVsbSA9IG5vZGVPcHMucGFyZW50Tm9kZShvbGRFbG0pO1xuXG4gICAgICAgICAgLy8gY3JlYXRlIG5ldyBub2RlXG4gICAgICAgICAgY3JlYXRlRWxtKFxuICAgICAgICAgICAgdm5vZGUsXG4gICAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgICAvLyBleHRyZW1lbHkgcmFyZSBlZGdlIGNhc2U6IGRvIG5vdCBpbnNlcnQgaWYgb2xkIGVsZW1lbnQgaXMgaW4gYVxuICAgICAgICAgICAgLy8gbGVhdmluZyB0cmFuc2l0aW9uLiBPbmx5IGhhcHBlbnMgd2hlbiBjb21iaW5pbmcgdHJhbnNpdGlvbiArXG4gICAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgICAgb2xkRWxtLl9sZWF2ZUNiID8gbnVsbCA6IHBhcmVudEVsbSxcbiAgICAgICAgICAgIG5vZGVPcHMubmV4dFNpYmxpbmcob2xkRWxtKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyB1cGRhdGUgcGFyZW50IHBsYWNlaG9sZGVyIG5vZGUgZWxlbWVudCwgcmVjdXJzaXZlbHlcbiAgICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgICAgdmFyIHBhdGNoYWJsZSA9IGlzUGF0Y2hhYmxlKHZub2RlKTtcbiAgICAgICAgICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgY2JzLmRlc3Ryb3lbaV0oYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgICAgaWYgKHBhdGNoYWJsZSkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMSA9IDA7IGkkMSA8IGNicy5jcmVhdGUubGVuZ3RoOyArK2kkMSkge1xuICAgICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAjNjUxM1xuICAgICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgICAgLy8gZS5nLiBmb3IgZGlyZWN0aXZlcyB0aGF0IHVzZXMgdGhlIFwiaW5zZXJ0ZWRcIiBob29rLlxuICAgICAgICAgICAgICAgIHZhciBpbnNlcnQgPSBhbmNlc3Rvci5kYXRhLmhvb2suaW5zZXJ0O1xuICAgICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAvLyBzdGFydCBhdCBpbmRleCAxIHRvIGF2b2lkIHJlLWludm9raW5nIGNvbXBvbmVudCBtb3VudGVkIGhvb2tcbiAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkkMiA9IDE7IGkkMiA8IGluc2VydC5mbnMubGVuZ3RoOyBpJDIrKykge1xuICAgICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJSZWYoYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGRlc3Ryb3kgb2xkIG5vZGVcbiAgICAgICAgICBpZiAoaXNEZWYocGFyZW50RWxtKSkge1xuICAgICAgICAgICAgcmVtb3ZlVm5vZGVzKFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGFnKSkge1xuICAgICAgICAgICAgaW52b2tlRGVzdHJveUhvb2sob2xkVm5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGlzSW5pdGlhbFBhdGNoKTtcbiAgICAgIHJldHVybiB2bm9kZS5lbG1cbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgZGlyZWN0aXZlcyA9IHtcbiAgICBjcmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gICAgdXBkYXRlOiB1cGRhdGVEaXJlY3RpdmVzLFxuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIHVuYmluZERpcmVjdGl2ZXMgKHZub2RlKSB7XG4gICAgICB1cGRhdGVEaXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiB1cGRhdGVEaXJlY3RpdmVzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICBpZiAob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzIHx8IHZub2RlLmRhdGEuZGlyZWN0aXZlcykge1xuICAgICAgX3VwZGF0ZShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF91cGRhdGUgKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gICAgdmFyIGlzRGVzdHJveSA9IHZub2RlID09PSBlbXB0eU5vZGU7XG4gICAgdmFyIG9sZERpcnMgPSBub3JtYWxpemVEaXJlY3RpdmVzJDEob2xkVm5vZGUuZGF0YS5kaXJlY3RpdmVzLCBvbGRWbm9kZS5jb250ZXh0KTtcbiAgICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSh2bm9kZS5kYXRhLmRpcmVjdGl2ZXMsIHZub2RlLmNvbnRleHQpO1xuXG4gICAgdmFyIGRpcnNXaXRoSW5zZXJ0ID0gW107XG4gICAgdmFyIGRpcnNXaXRoUG9zdHBhdGNoID0gW107XG5cbiAgICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgICBmb3IgKGtleSBpbiBuZXdEaXJzKSB7XG4gICAgICBvbGREaXIgPSBvbGREaXJzW2tleV07XG4gICAgICBkaXIgPSBuZXdEaXJzW2tleV07XG4gICAgICBpZiAoIW9sZERpcikge1xuICAgICAgICAvLyBuZXcgZGlyZWN0aXZlLCBiaW5kXG4gICAgICAgIGNhbGxIb29rJDEoZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuaW5zZXJ0ZWQpIHtcbiAgICAgICAgICBkaXJzV2l0aEluc2VydC5wdXNoKGRpcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGV4aXN0aW5nIGRpcmVjdGl2ZSwgdXBkYXRlXG4gICAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgICAgZGlyLm9sZEFyZyA9IG9sZERpci5hcmc7XG4gICAgICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgICAgaWYgKGRpci5kZWYgJiYgZGlyLmRlZi5jb21wb25lbnRVcGRhdGVkKSB7XG4gICAgICAgICAgZGlyc1dpdGhQb3N0cGF0Y2gucHVzaChkaXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgICAgdmFyIGNhbGxJbnNlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhJbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAnaW5zZXJ0JywgY2FsbEluc2VydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdwb3N0cGF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlyc1dpdGhQb3N0cGF0Y2gubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICghaXNDcmVhdGUpIHtcbiAgICAgIGZvciAoa2V5IGluIG9sZERpcnMpIHtcbiAgICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgICAvLyBubyBsb25nZXIgcHJlc2VudCwgdW5iaW5kXG4gICAgICAgICAgY2FsbEhvb2skMShvbGREaXJzW2tleV0sICd1bmJpbmQnLCBvbGRWbm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZW1wdHlNb2RpZmllcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSAoXG4gICAgZGlycyxcbiAgICB2bVxuICApIHtcbiAgICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBpZiAoIWRpcnMpIHtcbiAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgICB2YXIgaSwgZGlyO1xuICAgIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaXIgPSBkaXJzW2ldO1xuICAgICAgaWYgKCFkaXIubW9kaWZpZXJzKSB7XG4gICAgICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgICAgICBkaXIubW9kaWZpZXJzID0gZW1wdHlNb2RpZmllcnM7XG4gICAgICB9XG4gICAgICByZXNbZ2V0UmF3RGlyTmFtZShkaXIpXSA9IGRpcjtcbiAgICAgIGRpci5kZWYgPSByZXNvbHZlQXNzZXQodm0uJG9wdGlvbnMsICdkaXJlY3RpdmVzJywgZGlyLm5hbWUsIHRydWUpO1xuICAgIH1cbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgICByZXR1cm4gZGlyLnJhd05hbWUgfHwgKChkaXIubmFtZSkgKyBcIi5cIiArIChPYmplY3Qua2V5cyhkaXIubW9kaWZpZXJzIHx8IHt9KS5qb2luKCcuJykpKVxuICB9XG5cbiAgZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICAgIHZhciBmbiA9IGRpci5kZWYgJiYgZGlyLmRlZltob29rXTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKHZub2RlLmVsbSwgZGlyLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBcIiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZU1vZHVsZXMgPSBbXG4gICAgcmVmLFxuICAgIGRpcmVjdGl2ZXNcbiAgXTtcblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9wdHMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIGlmIChpc0RlZihvcHRzKSAmJiBvcHRzLkN0b3Iub3B0aW9ucy5pbmhlcml0QXR0cnMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5hdHRycykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmF0dHJzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBrZXksIGN1ciwgb2xkO1xuICAgIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gICAgdmFyIG9sZEF0dHJzID0gb2xkVm5vZGUuZGF0YS5hdHRycyB8fCB7fTtcbiAgICB2YXIgYXR0cnMgPSB2bm9kZS5kYXRhLmF0dHJzIHx8IHt9O1xuICAgIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICAgIGlmIChpc0RlZihhdHRycy5fX29iX18pKSB7XG4gICAgICBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgPSBleHRlbmQoe30sIGF0dHJzKTtcbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBhdHRycykge1xuICAgICAgY3VyID0gYXR0cnNba2V5XTtcbiAgICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgICBpZiAob2xkICE9PSBjdXIpIHtcbiAgICAgICAgc2V0QXR0cihlbG0sIGtleSwgY3VyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gIzQzOTE6IGluIElFOSwgc2V0dGluZyB0eXBlIGNhbiByZXNldCB2YWx1ZSBmb3IgaW5wdXRbdHlwZT1yYWRpb11cbiAgICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKChpc0lFIHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgICBzZXRBdHRyKGVsbSwgJ3ZhbHVlJywgYXR0cnMudmFsdWUpO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgICAgaWYgKGlzVW5kZWYoYXR0cnNba2V5XSkpIHtcbiAgICAgICAgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRW51bWVyYXRlZEF0dHIoa2V5KSkge1xuICAgICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGVsLnRhZ05hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIGJhc2VTZXRBdHRyKGVsLCBrZXksIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQm9vbGVhbkF0dHIoa2V5KSkge1xuICAgICAgLy8gc2V0IGF0dHJpYnV0ZSBmb3IgYmxhbmsgdmFsdWVcbiAgICAgIC8vIGUuZy4gPG9wdGlvbiBkaXNhYmxlZD5TZWxlY3Qgb25lPC9vcHRpb24+XG4gICAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZWNobmljYWxseSBhbGxvd2Z1bGxzY3JlZW4gaXMgYSBib29sZWFuIGF0dHJpYnV0ZSBmb3IgPGlmcmFtZT4sXG4gICAgICAgIC8vIGJ1dCBGbGFzaCBleHBlY3RzIGEgdmFsdWUgb2YgXCJ0cnVlXCIgd2hlbiB1c2VkIG9uIDxlbWJlZD4gdGFnXG4gICAgICAgIHZhbHVlID0ga2V5ID09PSAnYWxsb3dmdWxsc2NyZWVuJyAmJiBlbC50YWdOYW1lID09PSAnRU1CRUQnXG4gICAgICAgICAgPyAndHJ1ZSdcbiAgICAgICAgICA6IGtleTtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoa2V5LCBjb252ZXJ0RW51bWVyYXRlZFZhbHVlKGtleSwgdmFsdWUpKTtcbiAgICB9IGVsc2UgaWYgKGlzWGxpbmsoa2V5KSkge1xuICAgICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rTlMsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBiYXNlU2V0QXR0cihlbCwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmFzZVNldEF0dHIgKGVsLCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGlzRmFsc3lBdHRyVmFsdWUodmFsdWUpKSB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoa2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gIzcxMzg6IElFMTAgJiAxMSBmaXJlcyBpbnB1dCBldmVudCB3aGVuIHNldHRpbmcgcGxhY2Vob2xkZXIgb25cbiAgICAgIC8vIDx0ZXh0YXJlYT4uLi4gYmxvY2sgdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFuZCByZW1vdmUgdGhlIGJsb2NrZXJcbiAgICAgIC8vIGltbWVkaWF0ZWx5LlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoXG4gICAgICAgIGlzSUUgJiYgIWlzSUU5ICYmXG4gICAgICAgIGVsLnRhZ05hbWUgPT09ICdURVhUQVJFQScgJiZcbiAgICAgICAga2V5ID09PSAncGxhY2Vob2xkZXInICYmIHZhbHVlICE9PSAnJyAmJiAhZWwuX19pZXBoXG4gICAgICApIHtcbiAgICAgICAgdmFyIGJsb2NrZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgICAgfTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBibG9ja2VyKTtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIGVsLl9faWVwaCA9IHRydWU7IC8qIElFIHBsYWNlaG9sZGVyIHBhdGNoZWQgKi9cbiAgICAgIH1cbiAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYXR0cnMgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVBdHRycyxcbiAgICB1cGRhdGU6IHVwZGF0ZUF0dHJzXG4gIH07XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICAgIGlmIChcbiAgICAgIGlzVW5kZWYoZGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgICBpc1VuZGVmKG9sZERhdGEpIHx8IChcbiAgICAgICAgICBpc1VuZGVmKG9sZERhdGEuc3RhdGljQ2xhc3MpICYmXG4gICAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgICApXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBjbGFzc2VzXG4gICAgdmFyIHRyYW5zaXRpb25DbGFzcyA9IGVsLl90cmFuc2l0aW9uQ2xhc3NlcztcbiAgICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgICAgY2xzID0gY29uY2F0KGNscywgc3RyaW5naWZ5Q2xhc3ModHJhbnNpdGlvbkNsYXNzKSk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHRoZSBjbGFzc1xuICAgIGlmIChjbHMgIT09IGVsLl9wcmV2Q2xhc3MpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbHMpO1xuICAgICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgICB9XG4gIH1cblxuICB2YXIga2xhc3MgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVDbGFzcyxcbiAgICB1cGRhdGU6IHVwZGF0ZUNsYXNzXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHZhbGlkRGl2aXNpb25DaGFyUkUgPSAvW1xcdykuK1xcLV8kXFxdXS87XG5cbiAgZnVuY3Rpb24gcGFyc2VGaWx0ZXJzIChleHApIHtcbiAgICB2YXIgaW5TaW5nbGUgPSBmYWxzZTtcbiAgICB2YXIgaW5Eb3VibGUgPSBmYWxzZTtcbiAgICB2YXIgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlO1xuICAgIHZhciBpblJlZ2V4ID0gZmFsc2U7XG4gICAgdmFyIGN1cmx5ID0gMDtcbiAgICB2YXIgc3F1YXJlID0gMDtcbiAgICB2YXIgcGFyZW4gPSAwO1xuICAgIHZhciBsYXN0RmlsdGVySW5kZXggPSAwO1xuICAgIHZhciBjLCBwcmV2LCBpLCBleHByZXNzaW9uLCBmaWx0ZXJzO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGV4cC5sZW5ndGg7IGkrKykge1xuICAgICAgcHJldiA9IGM7XG4gICAgICBjID0gZXhwLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoaW5TaW5nbGUpIHtcbiAgICAgICAgaWYgKGMgPT09IDB4MjcgJiYgcHJldiAhPT0gMHg1QykgeyBpblNpbmdsZSA9IGZhbHNlOyB9XG4gICAgICB9IGVsc2UgaWYgKGluRG91YmxlKSB7XG4gICAgICAgIGlmIChjID09PSAweDIyICYmIHByZXYgIT09IDB4NUMpIHsgaW5Eb3VibGUgPSBmYWxzZTsgfVxuICAgICAgfSBlbHNlIGlmIChpblRlbXBsYXRlU3RyaW5nKSB7XG4gICAgICAgIGlmIChjID09PSAweDYwICYmIHByZXYgIT09IDB4NUMpIHsgaW5UZW1wbGF0ZVN0cmluZyA9IGZhbHNlOyB9XG4gICAgICB9IGVsc2UgaWYgKGluUmVnZXgpIHtcbiAgICAgICAgaWYgKGMgPT09IDB4MmYgJiYgcHJldiAhPT0gMHg1QykgeyBpblJlZ2V4ID0gZmFsc2U7IH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGMgPT09IDB4N0MgJiYgLy8gcGlwZVxuICAgICAgICBleHAuY2hhckNvZGVBdChpICsgMSkgIT09IDB4N0MgJiZcbiAgICAgICAgZXhwLmNoYXJDb2RlQXQoaSAtIDEpICE9PSAweDdDICYmXG4gICAgICAgICFjdXJseSAmJiAhc3F1YXJlICYmICFwYXJlblxuICAgICAgKSB7XG4gICAgICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBmaXJzdCBmaWx0ZXIsIGVuZCBvZiBleHByZXNzaW9uXG4gICAgICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cC5zbGljZSgwLCBpKS50cmltKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHVzaEZpbHRlcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKGMpIHtcbiAgICAgICAgICBjYXNlIDB4MjI6IGluRG91YmxlID0gdHJ1ZTsgYnJlYWsgICAgICAgICAvLyBcIlxuICAgICAgICAgIGNhc2UgMHgyNzogaW5TaW5nbGUgPSB0cnVlOyBicmVhayAgICAgICAgIC8vICdcbiAgICAgICAgICBjYXNlIDB4NjA6IGluVGVtcGxhdGVTdHJpbmcgPSB0cnVlOyBicmVhayAvLyBgXG4gICAgICAgICAgY2FzZSAweDI4OiBwYXJlbisrOyBicmVhayAgICAgICAgICAgICAgICAgLy8gKFxuICAgICAgICAgIGNhc2UgMHgyOTogcGFyZW4tLTsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIClcbiAgICAgICAgICBjYXNlIDB4NUI6IHNxdWFyZSsrOyBicmVhayAgICAgICAgICAgICAgICAvLyBbXG4gICAgICAgICAgY2FzZSAweDVEOiBzcXVhcmUtLTsgYnJlYWsgICAgICAgICAgICAgICAgLy8gXVxuICAgICAgICAgIGNhc2UgMHg3QjogY3VybHkrKzsgYnJlYWsgICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICBjYXNlIDB4N0Q6IGN1cmx5LS07IGJyZWFrICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IDB4MmYpIHsgLy8gL1xuICAgICAgICAgIHZhciBqID0gaSAtIDE7XG4gICAgICAgICAgdmFyIHAgPSAodm9pZCAwKTtcbiAgICAgICAgICAvLyBmaW5kIGZpcnN0IG5vbi13aGl0ZXNwYWNlIHByZXYgY2hhclxuICAgICAgICAgIGZvciAoOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgcCA9IGV4cC5jaGFyQXQoaik7XG4gICAgICAgICAgICBpZiAocCAhPT0gJyAnKSB7IGJyZWFrIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFwIHx8ICF2YWxpZERpdmlzaW9uQ2hhclJFLnRlc3QocCkpIHtcbiAgICAgICAgICAgIGluUmVnZXggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChleHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4cHJlc3Npb24gPSBleHAuc2xpY2UoMCwgaSkudHJpbSgpO1xuICAgIH0gZWxzZSBpZiAobGFzdEZpbHRlckluZGV4ICE9PSAwKSB7XG4gICAgICBwdXNoRmlsdGVyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHVzaEZpbHRlciAoKSB7XG4gICAgICAoZmlsdGVycyB8fCAoZmlsdGVycyA9IFtdKSkucHVzaChleHAuc2xpY2UobGFzdEZpbHRlckluZGV4LCBpKS50cmltKCkpO1xuICAgICAgbGFzdEZpbHRlckluZGV4ID0gaSArIDE7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cHJlc3Npb24gPSB3cmFwRmlsdGVyKGV4cHJlc3Npb24sIGZpbHRlcnNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBleHByZXNzaW9uXG4gIH1cblxuICBmdW5jdGlvbiB3cmFwRmlsdGVyIChleHAsIGZpbHRlcikge1xuICAgIHZhciBpID0gZmlsdGVyLmluZGV4T2YoJygnKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIC8vIF9mOiByZXNvbHZlRmlsdGVyXG4gICAgICByZXR1cm4gKFwiX2YoXFxcIlwiICsgZmlsdGVyICsgXCJcXFwiKShcIiArIGV4cCArIFwiKVwiKVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbmFtZSA9IGZpbHRlci5zbGljZSgwLCBpKTtcbiAgICAgIHZhciBhcmdzID0gZmlsdGVyLnNsaWNlKGkgKyAxKTtcbiAgICAgIHJldHVybiAoXCJfZihcXFwiXCIgKyBuYW1lICsgXCJcXFwiKShcIiArIGV4cCArIChhcmdzICE9PSAnKScgPyAnLCcgKyBhcmdzIDogYXJncykpXG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIGZ1bmN0aW9uIGJhc2VXYXJuIChtc2csIHJhbmdlKSB7XG4gICAgY29uc29sZS5lcnJvcigoXCJbVnVlIGNvbXBpbGVyXTogXCIgKyBtc2cpKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbiAgZnVuY3Rpb24gcGx1Y2tNb2R1bGVGdW5jdGlvbiAoXG4gICAgbW9kdWxlcyxcbiAgICBrZXlcbiAgKSB7XG4gICAgcmV0dXJuIG1vZHVsZXNcbiAgICAgID8gbW9kdWxlcy5tYXAoZnVuY3Rpb24gKG0pIHsgcmV0dXJuIG1ba2V5XTsgfSkuZmlsdGVyKGZ1bmN0aW9uIChfKSB7IHJldHVybiBfOyB9KVxuICAgICAgOiBbXVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkUHJvcCAoZWwsIG5hbWUsIHZhbHVlLCByYW5nZSwgZHluYW1pYykge1xuICAgIChlbC5wcm9wcyB8fCAoZWwucHJvcHMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKSk7XG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEF0dHIgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UsIGR5bmFtaWMpIHtcbiAgICB2YXIgYXR0cnMgPSBkeW5hbWljXG4gICAgICA/IChlbC5keW5hbWljQXR0cnMgfHwgKGVsLmR5bmFtaWNBdHRycyA9IFtdKSlcbiAgICAgIDogKGVsLmF0dHJzIHx8IChlbC5hdHRycyA9IFtdKSk7XG4gICAgYXR0cnMucHVzaChyYW5nZVNldEl0ZW0oeyBuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWUsIGR5bmFtaWM6IGR5bmFtaWMgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xuICB9XG5cbiAgLy8gYWRkIGEgcmF3IGF0dHIgKHVzZSB0aGlzIGluIHByZVRyYW5zZm9ybXMpXG4gIGZ1bmN0aW9uIGFkZFJhd0F0dHIgKGVsLCBuYW1lLCB2YWx1ZSwgcmFuZ2UpIHtcbiAgICBlbC5hdHRyc01hcFtuYW1lXSA9IHZhbHVlO1xuICAgIGVsLmF0dHJzTGlzdC5wdXNoKHJhbmdlU2V0SXRlbSh7IG5hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSB9LCByYW5nZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRGlyZWN0aXZlIChcbiAgICBlbCxcbiAgICBuYW1lLFxuICAgIHJhd05hbWUsXG4gICAgdmFsdWUsXG4gICAgYXJnLFxuICAgIGlzRHluYW1pY0FyZyxcbiAgICBtb2RpZmllcnMsXG4gICAgcmFuZ2VcbiAgKSB7XG4gICAgKGVsLmRpcmVjdGl2ZXMgfHwgKGVsLmRpcmVjdGl2ZXMgPSBbXSkpLnB1c2gocmFuZ2VTZXRJdGVtKHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByYXdOYW1lOiByYXdOYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgYXJnOiBhcmcsXG4gICAgICBpc0R5bmFtaWNBcmc6IGlzRHluYW1pY0FyZyxcbiAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzXG4gICAgfSwgcmFuZ2UpKTtcbiAgICBlbC5wbGFpbiA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGVuZE1vZGlmaWVyTWFya2VyIChzeW1ib2wsIG5hbWUsIGR5bmFtaWMpIHtcbiAgICByZXR1cm4gZHluYW1pY1xuICAgICAgPyAoXCJfcChcIiArIG5hbWUgKyBcIixcXFwiXCIgKyBzeW1ib2wgKyBcIlxcXCIpXCIpXG4gICAgICA6IHN5bWJvbCArIG5hbWUgLy8gbWFyayB0aGUgZXZlbnQgYXMgY2FwdHVyZWRcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEhhbmRsZXIgKFxuICAgIGVsLFxuICAgIG5hbWUsXG4gICAgdmFsdWUsXG4gICAgbW9kaWZpZXJzLFxuICAgIGltcG9ydGFudCxcbiAgICB3YXJuLFxuICAgIHJhbmdlLFxuICAgIGR5bmFtaWNcbiAgKSB7XG4gICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzIHx8IGVtcHR5T2JqZWN0O1xuICAgIC8vIHdhcm4gcHJldmVudCBhbmQgcGFzc2l2ZSBtb2RpZmllclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChcbiAgICAgIHdhcm4gJiZcbiAgICAgIG1vZGlmaWVycy5wcmV2ZW50ICYmIG1vZGlmaWVycy5wYXNzaXZlXG4gICAgKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAncGFzc2l2ZSBhbmQgcHJldmVudCBjYW5cXCd0IGJlIHVzZWQgdG9nZXRoZXIuICcgK1xuICAgICAgICAnUGFzc2l2ZSBoYW5kbGVyIGNhblxcJ3QgcHJldmVudCBkZWZhdWx0IGV2ZW50LicsXG4gICAgICAgIHJhbmdlXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIG5vcm1hbGl6ZSBjbGljay5yaWdodCBhbmQgY2xpY2subWlkZGxlIHNpbmNlIHRoZXkgZG9uJ3QgYWN0dWFsbHkgZmlyZVxuICAgIC8vIHRoaXMgaXMgdGVjaG5pY2FsbHkgYnJvd3Nlci1zcGVjaWZpYywgYnV0IGF0IGxlYXN0IGZvciBub3cgYnJvd3NlcnMgYXJlXG4gICAgLy8gdGhlIG9ubHkgdGFyZ2V0IGVudnMgdGhhdCBoYXZlIHJpZ2h0L21pZGRsZSBjbGlja3MuXG4gICAgaWYgKG1vZGlmaWVycy5yaWdodCkge1xuICAgICAgaWYgKGR5bmFtaWMpIHtcbiAgICAgICAgbmFtZSA9IFwiKFwiICsgbmFtZSArIFwiKT09PSdjbGljayc/J2NvbnRleHRtZW51JzooXCIgKyBuYW1lICsgXCIpXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdjbGljaycpIHtcbiAgICAgICAgbmFtZSA9ICdjb250ZXh0bWVudSc7XG4gICAgICAgIGRlbGV0ZSBtb2RpZmllcnMucmlnaHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChtb2RpZmllcnMubWlkZGxlKSB7XG4gICAgICBpZiAoZHluYW1pYykge1xuICAgICAgICBuYW1lID0gXCIoXCIgKyBuYW1lICsgXCIpPT09J2NsaWNrJz8nbW91c2V1cCc6KFwiICsgbmFtZSArIFwiKVwiO1xuICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnY2xpY2snKSB7XG4gICAgICAgIG5hbWUgPSAnbW91c2V1cCc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgY2FwdHVyZSBtb2RpZmllclxuICAgIGlmIChtb2RpZmllcnMuY2FwdHVyZSkge1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5jYXB0dXJlO1xuICAgICAgbmFtZSA9IHByZXBlbmRNb2RpZmllck1hcmtlcignIScsIG5hbWUsIGR5bmFtaWMpO1xuICAgIH1cbiAgICBpZiAobW9kaWZpZXJzLm9uY2UpIHtcbiAgICAgIGRlbGV0ZSBtb2RpZmllcnMub25jZTtcbiAgICAgIG5hbWUgPSBwcmVwZW5kTW9kaWZpZXJNYXJrZXIoJ34nLCBuYW1lLCBkeW5hbWljKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKG1vZGlmaWVycy5wYXNzaXZlKSB7XG4gICAgICBkZWxldGUgbW9kaWZpZXJzLnBhc3NpdmU7XG4gICAgICBuYW1lID0gcHJlcGVuZE1vZGlmaWVyTWFya2VyKCcmJywgbmFtZSwgZHluYW1pYyk7XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50cztcbiAgICBpZiAobW9kaWZpZXJzLm5hdGl2ZSkge1xuICAgICAgZGVsZXRlIG1vZGlmaWVycy5uYXRpdmU7XG4gICAgICBldmVudHMgPSBlbC5uYXRpdmVFdmVudHMgfHwgKGVsLm5hdGl2ZUV2ZW50cyA9IHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzID0gZWwuZXZlbnRzIHx8IChlbC5ldmVudHMgPSB7fSk7XG4gICAgfVxuXG4gICAgdmFyIG5ld0hhbmRsZXIgPSByYW5nZVNldEl0ZW0oeyB2YWx1ZTogdmFsdWUudHJpbSgpLCBkeW5hbWljOiBkeW5hbWljIH0sIHJhbmdlKTtcbiAgICBpZiAobW9kaWZpZXJzICE9PSBlbXB0eU9iamVjdCkge1xuICAgICAgbmV3SGFuZGxlci5tb2RpZmllcnMgPSBtb2RpZmllcnM7XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJzID0gZXZlbnRzW25hbWVdO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXJzKSkge1xuICAgICAgaW1wb3J0YW50ID8gaGFuZGxlcnMudW5zaGlmdChuZXdIYW5kbGVyKSA6IGhhbmRsZXJzLnB1c2gobmV3SGFuZGxlcik7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVycykge1xuICAgICAgZXZlbnRzW25hbWVdID0gaW1wb3J0YW50ID8gW25ld0hhbmRsZXIsIGhhbmRsZXJzXSA6IFtoYW5kbGVycywgbmV3SGFuZGxlcl07XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50c1tuYW1lXSA9IG5ld0hhbmRsZXI7XG4gICAgfVxuXG4gICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhd0JpbmRpbmdBdHRyIChcbiAgICBlbCxcbiAgICBuYW1lXG4gICkge1xuICAgIHJldHVybiBlbC5yYXdBdHRyc01hcFsnOicgKyBuYW1lXSB8fFxuICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtYmluZDonICsgbmFtZV0gfHxcbiAgICAgIGVsLnJhd0F0dHJzTWFwW25hbWVdXG4gIH1cblxuICBmdW5jdGlvbiBnZXRCaW5kaW5nQXR0ciAoXG4gICAgZWwsXG4gICAgbmFtZSxcbiAgICBnZXRTdGF0aWNcbiAgKSB7XG4gICAgdmFyIGR5bmFtaWNWYWx1ZSA9XG4gICAgICBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnOicgKyBuYW1lKSB8fFxuICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtYmluZDonICsgbmFtZSk7XG4gICAgaWYgKGR5bmFtaWNWYWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzKGR5bmFtaWNWYWx1ZSlcbiAgICB9IGVsc2UgaWYgKGdldFN0YXRpYyAhPT0gZmFsc2UpIHtcbiAgICAgIHZhciBzdGF0aWNWYWx1ZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsIG5hbWUpO1xuICAgICAgaWYgKHN0YXRpY1ZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHN0YXRpY1ZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBnZXQgcHJvY2Vzc2VkIGJ5IHByb2Nlc3NBdHRycy5cbiAgLy8gQnkgZGVmYXVsdCBpdCBkb2VzIE5PVCByZW1vdmUgaXQgZnJvbSB0aGUgbWFwIChhdHRyc01hcCkgYmVjYXVzZSB0aGUgbWFwIGlzXG4gIC8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cbiAgZnVuY3Rpb24gZ2V0QW5kUmVtb3ZlQXR0ciAoXG4gICAgZWwsXG4gICAgbmFtZSxcbiAgICByZW1vdmVGcm9tTWFwXG4gICkge1xuICAgIHZhciB2YWw7XG4gICAgaWYgKCh2YWwgPSBlbC5hdHRyc01hcFtuYW1lXSkgIT0gbnVsbCkge1xuICAgICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChsaXN0W2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZW1vdmVGcm9tTWFwKSB7XG4gICAgICBkZWxldGUgZWwuYXR0cnNNYXBbbmFtZV07XG4gICAgfVxuICAgIHJldHVybiB2YWxcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEFuZFJlbW92ZUF0dHJCeVJlZ2V4IChcbiAgICBlbCxcbiAgICBuYW1lXG4gICkge1xuICAgIHZhciBsaXN0ID0gZWwuYXR0cnNMaXN0O1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBhdHRyID0gbGlzdFtpXTtcbiAgICAgIGlmIChuYW1lLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICBsaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuIGF0dHJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZVNldEl0ZW0gKFxuICAgIGl0ZW0sXG4gICAgcmFuZ2VcbiAgKSB7XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICBpdGVtLnN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgaXRlbS5lbmQgPSByYW5nZS5lbmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtXG4gIH1cblxuICAvKiAgKi9cblxuICAvKipcbiAgICogQ3Jvc3MtcGxhdGZvcm0gY29kZSBnZW5lcmF0aW9uIGZvciBjb21wb25lbnQgdi1tb2RlbFxuICAgKi9cbiAgZnVuY3Rpb24gZ2VuQ29tcG9uZW50TW9kZWwgKFxuICAgIGVsLFxuICAgIHZhbHVlLFxuICAgIG1vZGlmaWVyc1xuICApIHtcbiAgICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICAgIHZhciBudW1iZXIgPSByZWYubnVtYmVyO1xuICAgIHZhciB0cmltID0gcmVmLnRyaW07XG5cbiAgICB2YXIgYmFzZVZhbHVlRXhwcmVzc2lvbiA9ICckJHYnO1xuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSBiYXNlVmFsdWVFeHByZXNzaW9uO1xuICAgIGlmICh0cmltKSB7XG4gICAgICB2YWx1ZUV4cHJlc3Npb24gPVxuICAgICAgICBcIih0eXBlb2YgXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIgPT09ICdzdHJpbmcnXCIgK1xuICAgICAgICBcIj8gXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIudHJpbSgpXCIgK1xuICAgICAgICBcIjogXCIgKyBiYXNlVmFsdWVFeHByZXNzaW9uICsgXCIpXCI7XG4gICAgfVxuICAgIGlmIChudW1iZXIpIHtcbiAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiX24oXCIgKyB2YWx1ZUV4cHJlc3Npb24gKyBcIilcIjtcbiAgICB9XG4gICAgdmFyIGFzc2lnbm1lbnQgPSBnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgdmFsdWVFeHByZXNzaW9uKTtcblxuICAgIGVsLm1vZGVsID0ge1xuICAgICAgdmFsdWU6IChcIihcIiArIHZhbHVlICsgXCIpXCIpLFxuICAgICAgZXhwcmVzc2lvbjogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICAgICAgY2FsbGJhY2s6IChcImZ1bmN0aW9uIChcIiArIGJhc2VWYWx1ZUV4cHJlc3Npb24gKyBcIikge1wiICsgYXNzaWdubWVudCArIFwifVwiKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3Jvc3MtcGxhdGZvcm0gY29kZWdlbiBoZWxwZXIgZm9yIGdlbmVyYXRpbmcgdi1tb2RlbCB2YWx1ZSBhc3NpZ25tZW50IGNvZGUuXG4gICAqL1xuICBmdW5jdGlvbiBnZW5Bc3NpZ25tZW50Q29kZSAoXG4gICAgdmFsdWUsXG4gICAgYXNzaWdubWVudFxuICApIHtcbiAgICB2YXIgcmVzID0gcGFyc2VNb2RlbCh2YWx1ZSk7XG4gICAgaWYgKHJlcy5rZXkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAodmFsdWUgKyBcIj1cIiArIGFzc2lnbm1lbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXCIkc2V0KFwiICsgKHJlcy5leHApICsgXCIsIFwiICsgKHJlcy5rZXkpICsgXCIsIFwiICsgYXNzaWdubWVudCArIFwiKVwiKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHYtbW9kZWwgZXhwcmVzc2lvbiBpbnRvIGEgYmFzZSBwYXRoIGFuZCBhIGZpbmFsIGtleSBzZWdtZW50LlxuICAgKiBIYW5kbGVzIGJvdGggZG90LXBhdGggYW5kIHBvc3NpYmxlIHNxdWFyZSBicmFja2V0cy5cbiAgICpcbiAgICogUG9zc2libGUgY2FzZXM6XG4gICAqXG4gICAqIC0gdGVzdFxuICAgKiAtIHRlc3Rba2V5XVxuICAgKiAtIHRlc3RbdGVzdDFba2V5XV1cbiAgICogLSB0ZXN0W1wiYVwiXVtrZXldXG4gICAqIC0geHh4LnRlc3RbYVthXS50ZXN0MVtrZXldXVxuICAgKiAtIHRlc3QueHh4LmFbXCJhc2FcIl1bdGVzdDFba2V5XV1cbiAgICpcbiAgICovXG5cbiAgdmFyIGxlbiwgc3RyLCBjaHIsIGluZGV4JDEsIGV4cHJlc3Npb25Qb3MsIGV4cHJlc3Npb25FbmRQb3M7XG5cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9kZWwgKHZhbCkge1xuICAgIC8vIEZpeCBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL3B1bGwvNzczMFxuICAgIC8vIGFsbG93IHYtbW9kZWw9XCJvYmoudmFsIFwiICh0cmFpbGluZyB3aGl0ZXNwYWNlKVxuICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgbGVuID0gdmFsLmxlbmd0aDtcblxuICAgIGlmICh2YWwuaW5kZXhPZignWycpIDwgMCB8fCB2YWwubGFzdEluZGV4T2YoJ10nKSA8IGxlbiAtIDEpIHtcbiAgICAgIGluZGV4JDEgPSB2YWwubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgIGlmIChpbmRleCQxID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBleHA6IHZhbC5zbGljZSgwLCBpbmRleCQxKSxcbiAgICAgICAgICBrZXk6ICdcIicgKyB2YWwuc2xpY2UoaW5kZXgkMSArIDEpICsgJ1wiJ1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGV4cDogdmFsLFxuICAgICAgICAgIGtleTogbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3RyID0gdmFsO1xuICAgIGluZGV4JDEgPSBleHByZXNzaW9uUG9zID0gZXhwcmVzc2lvbkVuZFBvcyA9IDA7XG5cbiAgICB3aGlsZSAoIWVvZigpKSB7XG4gICAgICBjaHIgPSBuZXh0KCk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpc1N0cmluZ1N0YXJ0KGNocikpIHtcbiAgICAgICAgcGFyc2VTdHJpbmcoY2hyKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAweDVCKSB7XG4gICAgICAgIHBhcnNlQnJhY2tldChjaHIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleHA6IHZhbC5zbGljZSgwLCBleHByZXNzaW9uUG9zKSxcbiAgICAgIGtleTogdmFsLnNsaWNlKGV4cHJlc3Npb25Qb3MgKyAxLCBleHByZXNzaW9uRW5kUG9zKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHQgKCkge1xuICAgIHJldHVybiBzdHIuY2hhckNvZGVBdCgrK2luZGV4JDEpXG4gIH1cblxuICBmdW5jdGlvbiBlb2YgKCkge1xuICAgIHJldHVybiBpbmRleCQxID49IGxlblxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdHJpbmdTdGFydCAoY2hyKSB7XG4gICAgcmV0dXJuIGNociA9PT0gMHgyMiB8fCBjaHIgPT09IDB4MjdcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQnJhY2tldCAoY2hyKSB7XG4gICAgdmFyIGluQnJhY2tldCA9IDE7XG4gICAgZXhwcmVzc2lvblBvcyA9IGluZGV4JDE7XG4gICAgd2hpbGUgKCFlb2YoKSkge1xuICAgICAgY2hyID0gbmV4dCgpO1xuICAgICAgaWYgKGlzU3RyaW5nU3RhcnQoY2hyKSkge1xuICAgICAgICBwYXJzZVN0cmluZyhjaHIpO1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKGNociA9PT0gMHg1QikgeyBpbkJyYWNrZXQrKzsgfVxuICAgICAgaWYgKGNociA9PT0gMHg1RCkgeyBpbkJyYWNrZXQtLTsgfVxuICAgICAgaWYgKGluQnJhY2tldCA9PT0gMCkge1xuICAgICAgICBleHByZXNzaW9uRW5kUG9zID0gaW5kZXgkMTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVN0cmluZyAoY2hyKSB7XG4gICAgdmFyIHN0cmluZ1F1b3RlID0gY2hyO1xuICAgIHdoaWxlICghZW9mKCkpIHtcbiAgICAgIGNociA9IG5leHQoKTtcbiAgICAgIGlmIChjaHIgPT09IHN0cmluZ1F1b3RlKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIHdhcm4kMTtcblxuICAvLyBpbiBzb21lIGNhc2VzLCB0aGUgZXZlbnQgdXNlZCBoYXMgdG8gYmUgZGV0ZXJtaW5lZCBhdCBydW50aW1lXG4gIC8vIHNvIHdlIHVzZWQgc29tZSByZXNlcnZlZCB0b2tlbnMgZHVyaW5nIGNvbXBpbGUuXG4gIHZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xuICB2YXIgQ0hFQ0tCT1hfUkFESU9fVE9LRU4gPSAnX19jJztcblxuICBmdW5jdGlvbiBtb2RlbCAoXG4gICAgZWwsXG4gICAgZGlyLFxuICAgIF93YXJuXG4gICkge1xuICAgIHdhcm4kMSA9IF93YXJuO1xuICAgIHZhciB2YWx1ZSA9IGRpci52YWx1ZTtcbiAgICB2YXIgbW9kaWZpZXJzID0gZGlyLm1vZGlmaWVycztcbiAgICB2YXIgdGFnID0gZWwudGFnO1xuICAgIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICAgIHtcbiAgICAgIC8vIGlucHV0cyB3aXRoIHR5cGU9XCJmaWxlXCIgYXJlIHJlYWQgb25seSBhbmQgc2V0dGluZyB0aGUgaW5wdXQnc1xuICAgICAgLy8gdmFsdWUgd2lsbCB0aHJvdyBhbiBlcnJvci5cbiAgICAgIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgdHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgIHdhcm4kMShcbiAgICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1tb2RlbD1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIiB0eXBlPVxcXCJmaWxlXFxcIj46XFxuXCIgK1xuICAgICAgICAgIFwiRmlsZSBpbnB1dHMgYXJlIHJlYWQgb25seS4gVXNlIGEgdi1vbjpjaGFuZ2UgbGlzdGVuZXIgaW5zdGVhZC5cIixcbiAgICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSBpZiAodGFnID09PSAnc2VsZWN0Jykge1xuICAgICAgZ2VuU2VsZWN0KGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICBnZW5DaGVja2JveE1vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiB0eXBlID09PSAncmFkaW8nKSB7XG4gICAgICBnZW5SYWRpb01vZGVsKGVsLCB2YWx1ZSwgbW9kaWZpZXJzKTtcbiAgICB9IGVsc2UgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYScpIHtcbiAgICAgIGdlbkRlZmF1bHRNb2RlbChlbCwgdmFsdWUsIG1vZGlmaWVycyk7XG4gICAgfSBlbHNlIGlmICghY29uZmlnLmlzUmVzZXJ2ZWRUYWcodGFnKSkge1xuICAgICAgZ2VuQ29tcG9uZW50TW9kZWwoZWwsIHZhbHVlLCBtb2RpZmllcnMpO1xuICAgICAgLy8gY29tcG9uZW50IHYtbW9kZWwgZG9lc24ndCBuZWVkIGV4dHJhIHJ1bnRpbWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuJDEoXG4gICAgICAgIFwiPFwiICsgKGVsLnRhZykgKyBcIiB2LW1vZGVsPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiPjogXCIgK1xuICAgICAgICBcInYtbW9kZWwgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGVsZW1lbnQgdHlwZS4gXCIgK1xuICAgICAgICAnSWYgeW91IGFyZSB3b3JraW5nIHdpdGggY29udGVudGVkaXRhYmxlLCBpdFxcJ3MgcmVjb21tZW5kZWQgdG8gJyArXG4gICAgICAgICd3cmFwIGEgbGlicmFyeSBkZWRpY2F0ZWQgZm9yIHRoYXQgcHVycG9zZSBpbnNpZGUgYSBjdXN0b20gY29tcG9uZW50LicsXG4gICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LW1vZGVsJ11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIHJ1bnRpbWUgZGlyZWN0aXZlIG1ldGFkYXRhXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkNoZWNrYm94TW9kZWwgKFxuICAgIGVsLFxuICAgIHZhbHVlLFxuICAgIG1vZGlmaWVyc1xuICApIHtcbiAgICB2YXIgbnVtYmVyID0gbW9kaWZpZXJzICYmIG1vZGlmaWVycy5udW1iZXI7XG4gICAgdmFyIHZhbHVlQmluZGluZyA9IGdldEJpbmRpbmdBdHRyKGVsLCAndmFsdWUnKSB8fCAnbnVsbCc7XG4gICAgdmFyIHRydWVWYWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3RydWUtdmFsdWUnKSB8fCAndHJ1ZSc7XG4gICAgdmFyIGZhbHNlVmFsdWVCaW5kaW5nID0gZ2V0QmluZGluZ0F0dHIoZWwsICdmYWxzZS12YWx1ZScpIHx8ICdmYWxzZSc7XG4gICAgYWRkUHJvcChlbCwgJ2NoZWNrZWQnLFxuICAgICAgXCJBcnJheS5pc0FycmF5KFwiICsgdmFsdWUgKyBcIilcIiArXG4gICAgICBcIj9faShcIiArIHZhbHVlICsgXCIsXCIgKyB2YWx1ZUJpbmRpbmcgKyBcIik+LTFcIiArIChcbiAgICAgICAgdHJ1ZVZhbHVlQmluZGluZyA9PT0gJ3RydWUnXG4gICAgICAgICAgPyAoXCI6KFwiICsgdmFsdWUgKyBcIilcIilcbiAgICAgICAgICA6IChcIjpfcShcIiArIHZhbHVlICsgXCIsXCIgKyB0cnVlVmFsdWVCaW5kaW5nICsgXCIpXCIpXG4gICAgICApXG4gICAgKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJyxcbiAgICAgIFwidmFyICQkYT1cIiArIHZhbHVlICsgXCIsXCIgK1xuICAgICAgICAgICckJGVsPSRldmVudC50YXJnZXQsJyArXG4gICAgICAgICAgXCIkJGM9JCRlbC5jaGVja2VkPyhcIiArIHRydWVWYWx1ZUJpbmRpbmcgKyBcIik6KFwiICsgZmFsc2VWYWx1ZUJpbmRpbmcgKyBcIik7XCIgK1xuICAgICAgJ2lmKEFycmF5LmlzQXJyYXkoJCRhKSl7JyArXG4gICAgICAgIFwidmFyICQkdj1cIiArIChudW1iZXIgPyAnX24oJyArIHZhbHVlQmluZGluZyArICcpJyA6IHZhbHVlQmluZGluZykgKyBcIixcIiArXG4gICAgICAgICAgICAnJCRpPV9pKCQkYSwkJHYpOycgK1xuICAgICAgICBcImlmKCQkZWwuY2hlY2tlZCl7JCRpPDAmJihcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYS5jb25jYXQoWyQkdl0pJykpICsgXCIpfVwiICtcbiAgICAgICAgXCJlbHNleyQkaT4tMSYmKFwiICsgKGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCAnJCRhLnNsaWNlKDAsJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSsxKSknKSkgKyBcIil9XCIgK1xuICAgICAgXCJ9ZWxzZXtcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgJyQkYycpKSArIFwifVwiLFxuICAgICAgbnVsbCwgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZW5SYWRpb01vZGVsIChcbiAgICBlbCxcbiAgICB2YWx1ZSxcbiAgICBtb2RpZmllcnNcbiAgKSB7XG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICAgIHZhciB2YWx1ZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3ZhbHVlJykgfHwgJ251bGwnO1xuICAgIHZhbHVlQmluZGluZyA9IG51bWJlciA/IChcIl9uKFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpIDogdmFsdWVCaW5kaW5nO1xuICAgIGFkZFByb3AoZWwsICdjaGVja2VkJywgKFwiX3EoXCIgKyB2YWx1ZSArIFwiLFwiICsgdmFsdWVCaW5kaW5nICsgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCAnY2hhbmdlJywgZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlQmluZGluZyksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuU2VsZWN0IChcbiAgICBlbCxcbiAgICB2YWx1ZSxcbiAgICBtb2RpZmllcnNcbiAgKSB7XG4gICAgdmFyIG51bWJlciA9IG1vZGlmaWVycyAmJiBtb2RpZmllcnMubnVtYmVyO1xuICAgIHZhciBzZWxlY3RlZFZhbCA9IFwiQXJyYXkucHJvdG90eXBlLmZpbHRlclwiICtcbiAgICAgIFwiLmNhbGwoJGV2ZW50LnRhcmdldC5vcHRpb25zLGZ1bmN0aW9uKG8pe3JldHVybiBvLnNlbGVjdGVkfSlcIiArXG4gICAgICBcIi5tYXAoZnVuY3Rpb24obyl7dmFyIHZhbCA9IFxcXCJfdmFsdWVcXFwiIGluIG8gPyBvLl92YWx1ZSA6IG8udmFsdWU7XCIgK1xuICAgICAgXCJyZXR1cm4gXCIgKyAobnVtYmVyID8gJ19uKHZhbCknIDogJ3ZhbCcpICsgXCJ9KVwiO1xuXG4gICAgdmFyIGFzc2lnbm1lbnQgPSAnJGV2ZW50LnRhcmdldC5tdWx0aXBsZSA/ICQkc2VsZWN0ZWRWYWwgOiAkJHNlbGVjdGVkVmFsWzBdJztcbiAgICB2YXIgY29kZSA9IFwidmFyICQkc2VsZWN0ZWRWYWwgPSBcIiArIHNlbGVjdGVkVmFsICsgXCI7XCI7XG4gICAgY29kZSA9IGNvZGUgKyBcIiBcIiArIChnZW5Bc3NpZ25tZW50Q29kZSh2YWx1ZSwgYXNzaWdubWVudCkpO1xuICAgIGFkZEhhbmRsZXIoZWwsICdjaGFuZ2UnLCBjb2RlLCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkRlZmF1bHRNb2RlbCAoXG4gICAgZWwsXG4gICAgdmFsdWUsXG4gICAgbW9kaWZpZXJzXG4gICkge1xuICAgIHZhciB0eXBlID0gZWwuYXR0cnNNYXAudHlwZTtcblxuICAgIC8vIHdhcm4gaWYgdi1iaW5kOnZhbHVlIGNvbmZsaWN0cyB3aXRoIHYtbW9kZWxcbiAgICAvLyBleGNlcHQgZm9yIGlucHV0cyB3aXRoIHYtYmluZDp0eXBlXG4gICAge1xuICAgICAgdmFyIHZhbHVlJDEgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gfHwgZWwuYXR0cnNNYXBbJzp2YWx1ZSddO1xuICAgICAgdmFyIHR5cGVCaW5kaW5nID0gZWwuYXR0cnNNYXBbJ3YtYmluZDp0eXBlJ10gfHwgZWwuYXR0cnNNYXBbJzp0eXBlJ107XG4gICAgICBpZiAodmFsdWUkMSAmJiAhdHlwZUJpbmRpbmcpIHtcbiAgICAgICAgdmFyIGJpbmRpbmcgPSBlbC5hdHRyc01hcFsndi1iaW5kOnZhbHVlJ10gPyAndi1iaW5kOnZhbHVlJyA6ICc6dmFsdWUnO1xuICAgICAgICB3YXJuJDEoXG4gICAgICAgICAgYmluZGluZyArIFwiPVxcXCJcIiArIHZhbHVlJDEgKyBcIlxcXCIgY29uZmxpY3RzIHdpdGggdi1tb2RlbCBvbiB0aGUgc2FtZSBlbGVtZW50IFwiICtcbiAgICAgICAgICAnYmVjYXVzZSB0aGUgbGF0dGVyIGFscmVhZHkgZXhwYW5kcyB0byBhIHZhbHVlIGJpbmRpbmcgaW50ZXJuYWxseScsXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbYmluZGluZ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVmID0gbW9kaWZpZXJzIHx8IHt9O1xuICAgIHZhciBsYXp5ID0gcmVmLmxhenk7XG4gICAgdmFyIG51bWJlciA9IHJlZi5udW1iZXI7XG4gICAgdmFyIHRyaW0gPSByZWYudHJpbTtcbiAgICB2YXIgbmVlZENvbXBvc2l0aW9uR3VhcmQgPSAhbGF6eSAmJiB0eXBlICE9PSAncmFuZ2UnO1xuICAgIHZhciBldmVudCA9IGxhenlcbiAgICAgID8gJ2NoYW5nZSdcbiAgICAgIDogdHlwZSA9PT0gJ3JhbmdlJ1xuICAgICAgICA/IFJBTkdFX1RPS0VOXG4gICAgICAgIDogJ2lucHV0JztcblxuICAgIHZhciB2YWx1ZUV4cHJlc3Npb24gPSAnJGV2ZW50LnRhcmdldC52YWx1ZSc7XG4gICAgaWYgKHRyaW0pIHtcbiAgICAgIHZhbHVlRXhwcmVzc2lvbiA9IFwiJGV2ZW50LnRhcmdldC52YWx1ZS50cmltKClcIjtcbiAgICB9XG4gICAgaWYgKG51bWJlcikge1xuICAgICAgdmFsdWVFeHByZXNzaW9uID0gXCJfbihcIiArIHZhbHVlRXhwcmVzc2lvbiArIFwiKVwiO1xuICAgIH1cblxuICAgIHZhciBjb2RlID0gZ2VuQXNzaWdubWVudENvZGUodmFsdWUsIHZhbHVlRXhwcmVzc2lvbik7XG4gICAgaWYgKG5lZWRDb21wb3NpdGlvbkd1YXJkKSB7XG4gICAgICBjb2RlID0gXCJpZigkZXZlbnQudGFyZ2V0LmNvbXBvc2luZylyZXR1cm47XCIgKyBjb2RlO1xuICAgIH1cblxuICAgIGFkZFByb3AoZWwsICd2YWx1ZScsIChcIihcIiArIHZhbHVlICsgXCIpXCIpKTtcbiAgICBhZGRIYW5kbGVyKGVsLCBldmVudCwgY29kZSwgbnVsbCwgdHJ1ZSk7XG4gICAgaWYgKHRyaW0gfHwgbnVtYmVyKSB7XG4gICAgICBhZGRIYW5kbGVyKGVsLCAnYmx1cicsICckZm9yY2VVcGRhdGUoKScpO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIC8vIG5vcm1hbGl6ZSB2LW1vZGVsIGV2ZW50IHRva2VucyB0aGF0IGNhbiBvbmx5IGJlIGRldGVybWluZWQgYXQgcnVudGltZS5cbiAgLy8gaXQncyBpbXBvcnRhbnQgdG8gcGxhY2UgdGhlIGV2ZW50IGFzIHRoZSBmaXJzdCBpbiB0aGUgYXJyYXkgYmVjYXVzZVxuICAvLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4gIC8vIHVzZXItYXR0YWNoZWQgaGFuZGxlcnMuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50cyAob24pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob25bUkFOR0VfVE9LRU5dKSkge1xuICAgICAgLy8gSUUgaW5wdXRbdHlwZT1yYW5nZV0gb25seSBzdXBwb3J0cyBgY2hhbmdlYCBldmVudFxuICAgICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICAgIG9uW2V2ZW50XSA9IFtdLmNvbmNhdChvbltSQU5HRV9UT0tFTl0sIG9uW2V2ZW50XSB8fCBbXSk7XG4gICAgICBkZWxldGUgb25bUkFOR0VfVE9LRU5dO1xuICAgIH1cbiAgICAvLyBUaGlzIHdhcyBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGZpeCAjNDUyMSBidXQgbm8gbG9uZ2VyIG5lY2Vzc2FyeVxuICAgIC8vIGFmdGVyIDIuNS4gS2VlcGluZyBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdCB3aXRoIGdlbmVyYXRlZCBjb2RlIGZyb20gPCAyLjRcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXNEZWYob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dKSkge1xuICAgICAgb24uY2hhbmdlID0gW10uY29uY2F0KG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSwgb24uY2hhbmdlIHx8IFtdKTtcbiAgICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gICAgfVxuICB9XG5cbiAgdmFyIHRhcmdldCQxO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9uY2VIYW5kbGVyJDEgKGV2ZW50LCBoYW5kbGVyLCBjYXB0dXJlKSB7XG4gICAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTsgLy8gc2F2ZSBjdXJyZW50IHRhcmdldCBlbGVtZW50IGluIGNsb3N1cmVcbiAgICByZXR1cm4gZnVuY3Rpb24gb25jZUhhbmRsZXIgKCkge1xuICAgICAgdmFyIHJlcyA9IGhhbmRsZXIuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgcmVtb3ZlJDIoZXZlbnQsIG9uY2VIYW5kbGVyLCBjYXB0dXJlLCBfdGFyZ2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAjOTQ0NjogRmlyZWZveCA8PSA1MyAoaW4gcGFydGljdWxhciwgRVNSIDUyKSBoYXMgaW5jb3JyZWN0IEV2ZW50LnRpbWVTdGFtcFxuICAvLyBpbXBsZW1lbnRhdGlvbiBhbmQgZG9lcyBub3QgZmlyZSBtaWNyb3Rhc2tzIGluIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24sIHNvXG4gIC8vIHNhZmUgdG8gZXhjbHVkZS5cbiAgdmFyIHVzZU1pY3JvdGFza0ZpeCA9IGlzVXNpbmdNaWNyb1Rhc2sgJiYgIShpc0ZGICYmIE51bWJlcihpc0ZGWzFdKSA8PSA1Myk7XG5cbiAgZnVuY3Rpb24gYWRkJDEgKFxuICAgIG5hbWUsXG4gICAgaGFuZGxlcixcbiAgICBjYXB0dXJlLFxuICAgIHBhc3NpdmVcbiAgKSB7XG4gICAgLy8gYXN5bmMgZWRnZSBjYXNlICM2NTY2OiBpbm5lciBjbGljayBldmVudCB0cmlnZ2VycyBwYXRjaCwgZXZlbnQgaGFuZGxlclxuICAgIC8vIGF0dGFjaGVkIHRvIG91dGVyIGVsZW1lbnQgZHVyaW5nIHBhdGNoLCBhbmQgdHJpZ2dlcmVkIGFnYWluLiBUaGlzXG4gICAgLy8gaGFwcGVucyBiZWNhdXNlIGJyb3dzZXJzIGZpcmUgbWljcm90YXNrIHRpY2tzIGJldHdlZW4gZXZlbnQgcHJvcGFnYXRpb24uXG4gICAgLy8gdGhlIHNvbHV0aW9uIGlzIHNpbXBsZTogd2Ugc2F2ZSB0aGUgdGltZXN0YW1wIHdoZW4gYSBoYW5kbGVyIGlzIGF0dGFjaGVkLFxuICAgIC8vIGFuZCB0aGUgaGFuZGxlciB3b3VsZCBvbmx5IGZpcmUgaWYgdGhlIGV2ZW50IHBhc3NlZCB0byBpdCB3YXMgZmlyZWRcbiAgICAvLyBBRlRFUiBpdCB3YXMgYXR0YWNoZWQuXG4gICAgaWYgKHVzZU1pY3JvdGFza0ZpeCkge1xuICAgICAgdmFyIGF0dGFjaGVkVGltZXN0YW1wID0gY3VycmVudEZsdXNoVGltZXN0YW1wO1xuICAgICAgdmFyIG9yaWdpbmFsID0gaGFuZGxlcjtcbiAgICAgIGhhbmRsZXIgPSBvcmlnaW5hbC5fd3JhcHBlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBubyBidWJibGluZywgc2hvdWxkIGFsd2F5cyBmaXJlLlxuICAgICAgICAgIC8vIHRoaXMgaXMganVzdCBhIHNhZmV0eSBuZXQgaW4gY2FzZSBldmVudC50aW1lU3RhbXAgaXMgdW5yZWxpYWJsZSBpblxuICAgICAgICAgIC8vIGNlcnRhaW4gd2VpcmQgZW52aXJvbm1lbnRzLi4uXG4gICAgICAgICAgZS50YXJnZXQgPT09IGUuY3VycmVudFRhcmdldCB8fFxuICAgICAgICAgIC8vIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGhhbmRsZXIgYXR0YWNobWVudFxuICAgICAgICAgIGUudGltZVN0YW1wID49IGF0dGFjaGVkVGltZXN0YW1wIHx8XG4gICAgICAgICAgLy8gYmFpbCBmb3IgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBidWdneSBldmVudC50aW1lU3RhbXAgaW1wbGVtZW50YXRpb25zXG4gICAgICAgICAgLy8gIzk0NjIgaU9TIDkgYnVnOiBldmVudC50aW1lU3RhbXAgaXMgMCBhZnRlciBoaXN0b3J5LnB1c2hTdGF0ZVxuICAgICAgICAgIC8vICM5NjgxIFF0V2ViRW5naW5lIGV2ZW50LnRpbWVTdGFtcCBpcyBuZWdhdGl2ZSB2YWx1ZVxuICAgICAgICAgIGUudGltZVN0YW1wIDw9IDAgfHxcbiAgICAgICAgICAvLyAjOTQ0OCBiYWlsIGlmIGV2ZW50IGlzIGZpcmVkIGluIGFub3RoZXIgZG9jdW1lbnQgaW4gYSBtdWx0aS1wYWdlXG4gICAgICAgICAgLy8gZWxlY3Ryb24vbncuanMgYXBwLCBzaW5jZSBldmVudC50aW1lU3RhbXAgd2lsbCBiZSB1c2luZyBhIGRpZmZlcmVudFxuICAgICAgICAgIC8vIHN0YXJ0aW5nIHJlZmVyZW5jZVxuICAgICAgICAgIGUudGFyZ2V0Lm93bmVyRG9jdW1lbnQgIT09IGRvY3VtZW50XG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHRhcmdldCQxLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBuYW1lLFxuICAgICAgaGFuZGxlcixcbiAgICAgIHN1cHBvcnRzUGFzc2l2ZVxuICAgICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICAgIDogY2FwdHVyZVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUkMiAoXG4gICAgbmFtZSxcbiAgICBoYW5kbGVyLFxuICAgIGNhcHR1cmUsXG4gICAgX3RhcmdldFxuICApIHtcbiAgICAoX3RhcmdldCB8fCB0YXJnZXQkMSkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgIG5hbWUsXG4gICAgICBoYW5kbGVyLl93cmFwcGVyIHx8IGhhbmRsZXIsXG4gICAgICBjYXB0dXJlXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZURPTUxpc3RlbmVycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5vbikgJiYgaXNVbmRlZih2bm9kZS5kYXRhLm9uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBvbiA9IHZub2RlLmRhdGEub24gfHwge307XG4gICAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgICB0YXJnZXQkMSA9IHZub2RlLmVsbTtcbiAgICBub3JtYWxpemVFdmVudHMob24pO1xuICAgIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgY3JlYXRlT25jZUhhbmRsZXIkMSwgdm5vZGUuY29udGV4dCk7XG4gICAgdGFyZ2V0JDEgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgZXZlbnRzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICAgIHVwZGF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHN2Z0NvbnRhaW5lcjtcblxuICBmdW5jdGlvbiB1cGRhdGVET01Qcm9wcyAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBrZXksIGN1cjtcbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtO1xuICAgIHZhciBvbGRQcm9wcyA9IG9sZFZub2RlLmRhdGEuZG9tUHJvcHMgfHwge307XG4gICAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgICAvLyBjbG9uZSBvYnNlcnZlZCBvYmplY3RzLCBhcyB0aGUgdXNlciBwcm9iYWJseSB3YW50cyB0byBtdXRhdGUgaXRcbiAgICBpZiAoaXNEZWYocHJvcHMuX19vYl9fKSkge1xuICAgICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gICAgfVxuXG4gICAgZm9yIChrZXkgaW4gb2xkUHJvcHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm9wcykpIHtcbiAgICAgICAgZWxtW2tleV0gPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgICAgY3VyID0gcHJvcHNba2V5XTtcbiAgICAgIC8vIGlnbm9yZSBjaGlsZHJlbiBpZiB0aGUgbm9kZSBoYXMgdGV4dENvbnRlbnQgb3IgaW5uZXJIVE1MLFxuICAgICAgLy8gYXMgdGhlc2Ugd2lsbCB0aHJvdyBhd2F5IGV4aXN0aW5nIERPTSBub2RlcyBhbmQgY2F1c2UgcmVtb3ZhbCBlcnJvcnNcbiAgICAgIC8vIG9uIHN1YnNlcXVlbnQgcGF0Y2hlcyAoIzMzNjApXG4gICAgICBpZiAoa2V5ID09PSAndGV4dENvbnRlbnQnIHx8IGtleSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgaWYgKHZub2RlLmNoaWxkcmVuKSB7IHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7IH1cbiAgICAgICAgaWYgKGN1ciA9PT0gb2xkUHJvcHNba2V5XSkgeyBjb250aW51ZSB9XG4gICAgICAgIC8vICM2NjAxIHdvcmsgYXJvdW5kIENocm9tZSB2ZXJzaW9uIDw9IDU1IGJ1ZyB3aGVyZSBzaW5nbGUgdGV4dE5vZGVcbiAgICAgICAgLy8gcmVwbGFjZWQgYnkgaW5uZXJIVE1ML3RleHRDb250ZW50IHJldGFpbnMgaXRzIHBhcmVudE5vZGUgcHJvcGVydHlcbiAgICAgICAgaWYgKGVsbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uY2hpbGROb2Rlc1swXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3ZhbHVlJyAmJiBlbG0udGFnTmFtZSAhPT0gJ1BST0dSRVNTJykge1xuICAgICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgICAvLyBub24tc3RyaW5nIHZhbHVlcyB3aWxsIGJlIHN0cmluZ2lmaWVkXG4gICAgICAgIGVsbS5fdmFsdWUgPSBjdXI7XG4gICAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgICB2YXIgc3RyQ3VyID0gaXNVbmRlZihjdXIpID8gJycgOiBTdHJpbmcoY3VyKTtcbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZVZhbHVlKGVsbSwgc3RyQ3VyKSkge1xuICAgICAgICAgIGVsbS52YWx1ZSA9IHN0ckN1cjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpbm5lckhUTUwnICYmIGlzU1ZHKGVsbS50YWdOYW1lKSAmJiBpc1VuZGVmKGVsbS5pbm5lckhUTUwpKSB7XG4gICAgICAgIC8vIElFIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lckhUTUwgZm9yIFNWRyBlbGVtZW50c1xuICAgICAgICBzdmdDb250YWluZXIgPSBzdmdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHN2Z0NvbnRhaW5lci5pbm5lckhUTUwgPSBcIjxzdmc+XCIgKyBjdXIgKyBcIjwvc3ZnPlwiO1xuICAgICAgICB2YXIgc3ZnID0gc3ZnQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChlbG0uZmlyc3RDaGlsZCkge1xuICAgICAgICAgIGVsbS5yZW1vdmVDaGlsZChlbG0uZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKHN2Zy5maXJzdENoaWxkKSB7XG4gICAgICAgICAgZWxtLmFwcGVuZENoaWxkKHN2Zy5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgLy8gc2tpcCB0aGUgdXBkYXRlIGlmIG9sZCBhbmQgbmV3IFZET00gc3RhdGUgaXMgdGhlIHNhbWUuXG4gICAgICAgIC8vIGB2YWx1ZWAgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGJlY2F1c2UgdGhlIERPTSB2YWx1ZSBtYXkgYmUgdGVtcG9yYXJpbHlcbiAgICAgICAgLy8gb3V0IG9mIHN5bmMgd2l0aCBWRE9NIHN0YXRlIGR1ZSB0byBmb2N1cywgY29tcG9zaXRpb24gYW5kIG1vZGlmaWVycy5cbiAgICAgICAgLy8gVGhpcyAgIzQ1MjEgYnkgc2tpcHBpbmcgdGhlIHVubmVjZXNhcnJ5IGBjaGVja2VkYCB1cGRhdGUuXG4gICAgICAgIGN1ciAhPT0gb2xkUHJvcHNba2V5XVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNvbWUgcHJvcGVydHkgdXBkYXRlcyBjYW4gdGhyb3dcbiAgICAgICAgLy8gZS5nLiBgdmFsdWVgIG9uIDxwcm9ncmVzcz4gdy8gbm9uLWZpbml0ZSB2YWx1ZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGVsbVtrZXldID0gY3VyO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbiAgZnVuY3Rpb24gc2hvdWxkVXBkYXRlVmFsdWUgKGVsbSwgY2hlY2tWYWwpIHtcbiAgICByZXR1cm4gKCFlbG0uY29tcG9zaW5nICYmIChcbiAgICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgICAgaXNOb3RJbkZvY3VzQW5kRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICAgIGlzRGlydHlXaXRoTW9kaWZpZXJzKGVsbSwgY2hlY2tWYWwpXG4gICAgKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm90SW5Gb2N1c0FuZERpcnR5IChlbG0sIGNoZWNrVmFsKSB7XG4gICAgLy8gcmV0dXJuIHRydWUgd2hlbiB0ZXh0Ym94ICgubnVtYmVyIGFuZCAudHJpbSkgbG9zZXMgZm9jdXMgYW5kIGl0cyB2YWx1ZSBpc1xuICAgIC8vIG5vdCBlcXVhbCB0byB0aGUgdXBkYXRlZCB2YWx1ZVxuICAgIHZhciBub3RJbkZvY3VzID0gdHJ1ZTtcbiAgICAvLyAjNjE1N1xuICAgIC8vIHdvcmsgYXJvdW5kIElFIGJ1ZyB3aGVuIGFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluIGFuIGlmcmFtZVxuICAgIHRyeSB7IG5vdEluRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbG07IH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIG5vdEluRm9jdXMgJiYgZWxtLnZhbHVlICE9PSBjaGVja1ZhbFxuICB9XG5cbiAgZnVuY3Rpb24gaXNEaXJ0eVdpdGhNb2RpZmllcnMgKGVsbSwgbmV3VmFsKSB7XG4gICAgdmFyIHZhbHVlID0gZWxtLnZhbHVlO1xuICAgIHZhciBtb2RpZmllcnMgPSBlbG0uX3ZNb2RpZmllcnM7IC8vIGluamVjdGVkIGJ5IHYtbW9kZWwgcnVudGltZVxuICAgIGlmIChpc0RlZihtb2RpZmllcnMpKSB7XG4gICAgICBpZiAobW9kaWZpZXJzLm51bWJlcikge1xuICAgICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gICAgICB9XG4gICAgICBpZiAobW9kaWZpZXJzLnRyaW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKSAhPT0gbmV3VmFsLnRyaW0oKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWUgIT09IG5ld1ZhbFxuICB9XG5cbiAgdmFyIGRvbVByb3BzID0ge1xuICAgIGNyZWF0ZTogdXBkYXRlRE9NUHJvcHMsXG4gICAgdXBkYXRlOiB1cGRhdGVET01Qcm9wc1xuICB9O1xuXG4gIC8qICAqL1xuXG4gIHZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgbGlzdERlbGltaXRlciA9IC87KD8hW14oXSpcXCkpL2c7XG4gICAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXNcbiAgfSk7XG5cbiAgLy8gbWVyZ2Ugc3RhdGljIGFuZCBkeW5hbWljIHN0eWxlIGRhdGEgb24gdGhlIHNhbWUgdm5vZGVcbiAgZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gICAgdmFyIHN0eWxlID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGRhdGEuc3R5bGUpO1xuICAgIC8vIHN0YXRpYyBzdHlsZSBpcyBwcmUtcHJvY2Vzc2VkIGludG8gYW4gb2JqZWN0IGR1cmluZyBjb21waWxhdGlvblxuICAgIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gICAgcmV0dXJuIGRhdGEuc3RhdGljU3R5bGVcbiAgICAgID8gZXh0ZW5kKGRhdGEuc3RhdGljU3R5bGUsIHN0eWxlKVxuICAgICAgOiBzdHlsZVxuICB9XG5cbiAgLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuICBmdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGJpbmRpbmdTdHlsZSkpIHtcbiAgICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgYmluZGluZ1N0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSlcbiAgICB9XG4gICAgcmV0dXJuIGJpbmRpbmdTdHlsZVxuICB9XG5cbiAgLyoqXG4gICAqIHBhcmVudCBjb21wb25lbnQgc3R5bGUgc2hvdWxkIGJlIGFmdGVyIGNoaWxkJ3NcbiAgICogc28gdGhhdCBwYXJlbnQgY29tcG9uZW50J3Mgc3R5bGUgY291bGQgb3ZlcnJpZGUgaXRcbiAgICovXG4gIGZ1bmN0aW9uIGdldFN0eWxlICh2bm9kZSwgY2hlY2tDaGlsZCkge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICB2YXIgc3R5bGVEYXRhO1xuXG4gICAgaWYgKGNoZWNrQ2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZE5vZGUgPSB2bm9kZTtcbiAgICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkTm9kZSAmJiBjaGlsZE5vZGUuZGF0YSAmJlxuICAgICAgICAgIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEoY2hpbGROb2RlLmRhdGEpKVxuICAgICAgICApIHtcbiAgICAgICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgICBleHRlbmQocmVzLCBzdHlsZURhdGEpO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gICAgd2hpbGUgKChwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgICBpZiAocGFyZW50Tm9kZS5kYXRhICYmIChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEocGFyZW50Tm9kZS5kYXRhKSkpIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIGNzc1ZhclJFID0gL14tLS87XG4gIHZhciBpbXBvcnRhbnRSRSA9IC9cXHMqIWltcG9ydGFudCQvO1xuICB2YXIgc2V0UHJvcCA9IGZ1bmN0aW9uIChlbCwgbmFtZSwgdmFsKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGNzc1ZhclJFLnRlc3QobmFtZSkpIHtcbiAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KGh5cGhlbmF0ZShuYW1lKSwgdmFsLnJlcGxhY2UoaW1wb3J0YW50UkUsICcnKSwgJ2ltcG9ydGFudCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAgIC8vIHtkaXNwbGF5OiBbXCItd2Via2l0LWJveFwiLCBcIi1tcy1mbGV4Ym94XCIsIFwiZmxleFwiXX1cbiAgICAgICAgLy8gU2V0IHRoZW0gb25lIGJ5IG9uZSwgYW5kIHRoZSBicm93c2VyIHdpbGwgb25seSBzZXQgdGhvc2UgaXQgY2FuIHJlY29nbml6ZVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsW2ldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5zdHlsZVtub3JtYWxpemVkTmFtZV0gPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciB2ZW5kb3JOYW1lcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddO1xuXG4gIHZhciBlbXB0eVN0eWxlO1xuICB2YXIgbm9ybWFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgZW1wdHlTdHlsZSA9IGVtcHR5U3R5bGUgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gICAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICAgIGlmIChwcm9wICE9PSAnZmlsdGVyJyAmJiAocHJvcCBpbiBlbXB0eVN0eWxlKSkge1xuICAgICAgcmV0dXJuIHByb3BcbiAgICB9XG4gICAgdmFyIGNhcE5hbWUgPSBwcm9wLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zbGljZSgxKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlbmRvck5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcbiAgICAgICAgcmV0dXJuIG5hbWVcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuXG4gICAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgICAgaXNVbmRlZihvbGREYXRhLnN0YXRpY1N0eWxlKSAmJiBpc1VuZGVmKG9sZERhdGEuc3R5bGUpXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgY3VyLCBuYW1lO1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgICB2YXIgb2xkU3RhdGljU3R5bGUgPSBvbGREYXRhLnN0YXRpY1N0eWxlO1xuICAgIHZhciBvbGRTdHlsZUJpbmRpbmcgPSBvbGREYXRhLm5vcm1hbGl6ZWRTdHlsZSB8fCBvbGREYXRhLnN0eWxlIHx8IHt9O1xuXG4gICAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgICB2YXIgb2xkU3R5bGUgPSBvbGRTdGF0aWNTdHlsZSB8fCBvbGRTdHlsZUJpbmRpbmc7XG5cbiAgICB2YXIgc3R5bGUgPSBub3JtYWxpemVTdHlsZUJpbmRpbmcodm5vZGUuZGF0YS5zdHlsZSkgfHwge307XG5cbiAgICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gICAgLy8gbWFrZSBzdXJlIHRvIGNsb25lIGl0IGlmIGl0J3MgcmVhY3RpdmUsIHNpbmNlIHRoZSB1c2VyIGxpa2VseSB3YW50c1xuICAgIC8vIHRvIG11dGF0ZSBpdC5cbiAgICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICAgID8gZXh0ZW5kKHt9LCBzdHlsZSlcbiAgICAgIDogc3R5bGU7XG5cbiAgICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgICBmb3IgKG5hbWUgaW4gb2xkU3R5bGUpIHtcbiAgICAgIGlmIChpc1VuZGVmKG5ld1N0eWxlW25hbWVdKSkge1xuICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgICAgY3VyID0gbmV3U3R5bGVbbmFtZV07XG4gICAgICBpZiAoY3VyICE9PSBvbGRTdHlsZVtuYW1lXSkge1xuICAgICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgICBzZXRQcm9wKGVsLCBuYW1lLCBjdXIgPT0gbnVsbCA/ICcnIDogY3VyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgc3R5bGUgPSB7XG4gICAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgICB1cGRhdGU6IHVwZGF0ZVN0eWxlXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHdoaXRlc3BhY2VSRSA9IC9cXHMrLztcblxuICAvKipcbiAgICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gICAqIFNWRyBlbGVtZW50cyBpbiBJRVxuICAgKi9cbiAgZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWNscyB8fCAhKGNscyA9IGNscy50cmltKCkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgIGlmIChjbHMuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgICAgY2xzLnNwbGl0KHdoaXRlc3BhY2VSRSkuZm9yRWFjaChmdW5jdGlvbiAoYykgeyByZXR1cm4gZWwuY2xhc3NMaXN0LmFkZChjKTsgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKGNscyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjdXIgPSBcIiBcIiArIChlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgfHwgJycpICsgXCIgXCI7XG4gICAgICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA8IDApIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBjbGFzcyB3aXRoIGNvbXBhdGliaWxpdHkgZm9yIFNWRyBzaW5jZSBjbGFzc0xpc3QgaXMgbm90IHN1cHBvcnRlZCBvblxuICAgKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzIChlbCwgY2xzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjbHMgfHwgIShjbHMgPSBjbHMudHJpbSgpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICAgIGNscy5zcGxpdCh3aGl0ZXNwYWNlUkUpLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGVsLmNsYXNzTGlzdC5yZW1vdmUoYyk7IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgICAgfVxuICAgICAgaWYgKCFlbC5jbGFzc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICAgIHZhciB0YXIgPSAnICcgKyBjbHMgKyAnICc7XG4gICAgICB3aGlsZSAoY3VyLmluZGV4T2YodGFyKSA+PSAwKSB7XG4gICAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICAgIH1cbiAgICAgIGN1ciA9IGN1ci50cmltKCk7XG4gICAgICBpZiAoY3VyKSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHJlc29sdmVUcmFuc2l0aW9uIChkZWYkJDEpIHtcbiAgICBpZiAoIWRlZiQkMSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBpZiAoZGVmJCQxLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgZXh0ZW5kKHJlcywgYXV0b0Nzc1RyYW5zaXRpb24oZGVmJCQxLm5hbWUgfHwgJ3YnKSk7XG4gICAgICB9XG4gICAgICBleHRlbmQocmVzLCBkZWYkJDEpO1xuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZiQkMSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYkJDEpXG4gICAgfVxuICB9XG5cbiAgdmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGVyQ2xhc3M6IChuYW1lICsgXCItZW50ZXJcIiksXG4gICAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgICBlbnRlckFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWVudGVyLWFjdGl2ZVwiKSxcbiAgICAgIGxlYXZlQ2xhc3M6IChuYW1lICsgXCItbGVhdmVcIiksXG4gICAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgICBsZWF2ZUFjdGl2ZUNsYXNzOiAobmFtZSArIFwiLWxlYXZlLWFjdGl2ZVwiKVxuICAgIH1cbiAgfSk7XG5cbiAgdmFyIGhhc1RyYW5zaXRpb24gPSBpbkJyb3dzZXIgJiYgIWlzSUU5O1xuICB2YXIgVFJBTlNJVElPTiA9ICd0cmFuc2l0aW9uJztcbiAgdmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4gIC8vIFRyYW5zaXRpb24gcHJvcGVydHkvZXZlbnQgc25pZmZpbmdcbiAgdmFyIHRyYW5zaXRpb25Qcm9wID0gJ3RyYW5zaXRpb24nO1xuICB2YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xuICB2YXIgYW5pbWF0aW9uUHJvcCA9ICdhbmltYXRpb24nO1xuICB2YXIgYW5pbWF0aW9uRW5kRXZlbnQgPSAnYW5pbWF0aW9uZW5kJztcbiAgaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAod2luZG93Lm9udHJhbnNpdGlvbmVuZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRyYW5zaXRpb25Qcm9wID0gJ1dlYmtpdFRyYW5zaXRpb24nO1xuICAgICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICAgIH1cbiAgICBpZiAod2luZG93Lm9uYW5pbWF0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBhbmltYXRpb25Qcm9wID0gJ1dlYmtpdEFuaW1hdGlvbic7XG4gICAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxuICB2YXIgcmFmID0gaW5Ccm93c2VyXG4gICAgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lXG4gICAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgICA6IHNldFRpbWVvdXRcbiAgICA6IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovIGZ1bmN0aW9uIChmbikgeyByZXR1cm4gZm4oKTsgfTtcblxuICBmdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gICAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJhZihmbik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRUcmFuc2l0aW9uQ2xhc3MgKGVsLCBjbHMpIHtcbiAgICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgICBpZiAodHJhbnNpdGlvbkNsYXNzZXMuaW5kZXhPZihjbHMpIDwgMCkge1xuICAgICAgdHJhbnNpdGlvbkNsYXNzZXMucHVzaChjbHMpO1xuICAgICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gICAgaWYgKGVsLl90cmFuc2l0aW9uQ2xhc3Nlcykge1xuICAgICAgcmVtb3ZlKGVsLl90cmFuc2l0aW9uQ2xhc3NlcywgY2xzKTtcbiAgICB9XG4gICAgcmVtb3ZlQ2xhc3MoZWwsIGNscyk7XG4gIH1cblxuICBmdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICAgIGVsLFxuICAgIGV4cGVjdGVkVHlwZSxcbiAgICBjYlxuICApIHtcbiAgICB2YXIgcmVmID0gZ2V0VHJhbnNpdGlvbkluZm8oZWwsIGV4cGVjdGVkVHlwZSk7XG4gICAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgICB2YXIgdGltZW91dCA9IHJlZi50aW1lb3V0O1xuICAgIHZhciBwcm9wQ291bnQgPSByZWYucHJvcENvdW50O1xuICAgIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gICAgdmFyIGV2ZW50ID0gdHlwZSA9PT0gVFJBTlNJVElPTiA/IHRyYW5zaXRpb25FbmRFdmVudCA6IGFuaW1hdGlvbkVuZEV2ZW50O1xuICAgIHZhciBlbmRlZCA9IDA7XG4gICAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgICAgIGNiKCk7XG4gICAgfTtcbiAgICB2YXIgb25FbmQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBlbCkge1xuICAgICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgICBlbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCArIDEpO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uRW5kKTtcbiAgfVxuXG4gIHZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbiAgZnVuY3Rpb24gZ2V0VHJhbnNpdGlvbkluZm8gKGVsLCBleHBlY3RlZFR5cGUpIHtcbiAgICB2YXIgc3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICAgIC8vIEpTRE9NIG1heSByZXR1cm4gdW5kZWZpbmVkIGZvciB0cmFuc2l0aW9uIHByb3BlcnRpZXNcbiAgICB2YXIgdHJhbnNpdGlvbkRlbGF5cyA9IChzdHlsZXNbdHJhbnNpdGlvblByb3AgKyAnRGVsYXknXSB8fCAnJykuc3BsaXQoJywgJyk7XG4gICAgdmFyIHRyYW5zaXRpb25EdXJhdGlvbnMgPSAoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gICAgdmFyIGFuaW1hdGlvbkRlbGF5cyA9IChzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddIHx8ICcnKS5zcGxpdCgnLCAnKTtcbiAgICB2YXIgYW5pbWF0aW9uRHVyYXRpb25zID0gKHN0eWxlc1thbmltYXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10gfHwgJycpLnNwbGl0KCcsICcpO1xuICAgIHZhciBhbmltYXRpb25UaW1lb3V0ID0gZ2V0VGltZW91dChhbmltYXRpb25EZWxheXMsIGFuaW1hdGlvbkR1cmF0aW9ucyk7XG5cbiAgICB2YXIgdHlwZTtcbiAgICB2YXIgdGltZW91dCA9IDA7XG4gICAgdmFyIHByb3BDb3VudCA9IDA7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGV4cGVjdGVkVHlwZSA9PT0gVFJBTlNJVElPTikge1xuICAgICAgaWYgKHRyYW5zaXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgICAgdGltZW91dCA9IHRyYW5zaXRpb25UaW1lb3V0O1xuICAgICAgICBwcm9wQ291bnQgPSB0cmFuc2l0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVHlwZSA9PT0gQU5JTUFUSU9OKSB7XG4gICAgICBpZiAoYW5pbWF0aW9uVGltZW91dCA+IDApIHtcbiAgICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgICAgdGltZW91dCA9IGFuaW1hdGlvblRpbWVvdXQ7XG4gICAgICAgIHByb3BDb3VudCA9IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXQgPSBNYXRoLm1heCh0cmFuc2l0aW9uVGltZW91dCwgYW5pbWF0aW9uVGltZW91dCk7XG4gICAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgICAgPyB0cmFuc2l0aW9uVGltZW91dCA+IGFuaW1hdGlvblRpbWVvdXRcbiAgICAgICAgICA/IFRSQU5TSVRJT05cbiAgICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgICA6IG51bGw7XG4gICAgICBwcm9wQ291bnQgPSB0eXBlXG4gICAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICAgID8gdHJhbnNpdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgICA6IGFuaW1hdGlvbkR1cmF0aW9ucy5sZW5ndGhcbiAgICAgICAgOiAwO1xuICAgIH1cbiAgICB2YXIgaGFzVHJhbnNmb3JtID1cbiAgICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICAgIHRyYW5zZm9ybVJFLnRlc3Qoc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ1Byb3BlcnR5J10pO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgdGltZW91dDogdGltZW91dCxcbiAgICAgIHByb3BDb3VudDogcHJvcENvdW50LFxuICAgICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgd2hpbGUgKGRlbGF5cy5sZW5ndGggPCBkdXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsIGR1cmF0aW9ucy5tYXAoZnVuY3Rpb24gKGQsIGkpIHtcbiAgICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gICAgfSkpXG4gIH1cblxuICAvLyBPbGQgdmVyc2lvbnMgb2YgQ2hyb21pdW0gKGJlbG93IDYxLjAuMzE2My4xMDApIGZvcm1hdHMgZmxvYXRpbmcgcG9pbnRlciBudW1iZXJzXG4gIC8vIGluIGEgbG9jYWxlLWRlcGVuZGVudCB3YXksIHVzaW5nIGEgY29tbWEgaW5zdGVhZCBvZiBhIGRvdC5cbiAgLy8gSWYgY29tbWEgaXMgbm90IHJlcGxhY2VkIHdpdGggYSBkb3QsIHRoZSBpbnB1dCB3aWxsIGJlIHJvdW5kZWQgZG93biAoaS5lLiBhY3RpbmdcbiAgLy8gYXMgYSBmbG9vciBmdW5jdGlvbikgY2F1c2luZyB1bmV4cGVjdGVkIGJlaGF2aW9yc1xuICBmdW5jdGlvbiB0b01zIChzKSB7XG4gICAgcmV0dXJuIE51bWJlcihzLnNsaWNlKDAsIC0xKS5yZXBsYWNlKCcsJywgJy4nKSkgKiAxMDAwXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBlbnRlciAodm5vZGUsIHRvZ2dsZURpc3BsYXkpIHtcbiAgICB2YXIgZWwgPSB2bm9kZS5lbG07XG5cbiAgICAvLyBjYWxsIGxlYXZlIGNhbGxiYWNrIG5vd1xuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICAgIGVsLl9sZWF2ZUNiLmNhbmNlbGxlZCA9IHRydWU7XG4gICAgICBlbC5fbGVhdmVDYigpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0gcmVzb2x2ZVRyYW5zaXRpb24odm5vZGUuZGF0YS50cmFuc2l0aW9uKTtcbiAgICBpZiAoaXNVbmRlZihkYXRhKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSB8fCBlbC5ub2RlVHlwZSAhPT0gMSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdmFyIGNzcyA9IGRhdGEuY3NzO1xuICAgIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICAgIHZhciBlbnRlckNsYXNzID0gZGF0YS5lbnRlckNsYXNzO1xuICAgIHZhciBlbnRlclRvQ2xhc3MgPSBkYXRhLmVudGVyVG9DbGFzcztcbiAgICB2YXIgZW50ZXJBY3RpdmVDbGFzcyA9IGRhdGEuZW50ZXJBY3RpdmVDbGFzcztcbiAgICB2YXIgYXBwZWFyQ2xhc3MgPSBkYXRhLmFwcGVhckNsYXNzO1xuICAgIHZhciBhcHBlYXJUb0NsYXNzID0gZGF0YS5hcHBlYXJUb0NsYXNzO1xuICAgIHZhciBhcHBlYXJBY3RpdmVDbGFzcyA9IGRhdGEuYXBwZWFyQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGJlZm9yZUVudGVyID0gZGF0YS5iZWZvcmVFbnRlcjtcbiAgICB2YXIgZW50ZXIgPSBkYXRhLmVudGVyO1xuICAgIHZhciBhZnRlckVudGVyID0gZGF0YS5hZnRlckVudGVyO1xuICAgIHZhciBlbnRlckNhbmNlbGxlZCA9IGRhdGEuZW50ZXJDYW5jZWxsZWQ7XG4gICAgdmFyIGJlZm9yZUFwcGVhciA9IGRhdGEuYmVmb3JlQXBwZWFyO1xuICAgIHZhciBhcHBlYXIgPSBkYXRhLmFwcGVhcjtcbiAgICB2YXIgYWZ0ZXJBcHBlYXIgPSBkYXRhLmFmdGVyQXBwZWFyO1xuICAgIHZhciBhcHBlYXJDYW5jZWxsZWQgPSBkYXRhLmFwcGVhckNhbmNlbGxlZDtcbiAgICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gICAgLy8gYWN0aXZlSW5zdGFuY2Ugd2lsbCBhbHdheXMgYmUgdGhlIDx0cmFuc2l0aW9uPiBjb21wb25lbnQgbWFuYWdpbmcgdGhpc1xuICAgIC8vIHRyYW5zaXRpb24uIE9uZSBlZGdlIGNhc2UgdG8gY2hlY2sgaXMgd2hlbiB0aGUgPHRyYW5zaXRpb24+IGlzIHBsYWNlZFxuICAgIC8vIGFzIHRoZSByb290IG5vZGUgb2YgYSBjaGlsZCBjb21wb25lbnQuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgLy8gPHRyYW5zaXRpb24+J3MgcGFyZW50IGZvciBhcHBlYXIgY2hlY2suXG4gICAgdmFyIGNvbnRleHQgPSBhY3RpdmVJbnN0YW5jZTtcbiAgICB2YXIgdHJhbnNpdGlvbk5vZGUgPSBhY3RpdmVJbnN0YW5jZS4kdm5vZGU7XG4gICAgd2hpbGUgKHRyYW5zaXRpb25Ob2RlICYmIHRyYW5zaXRpb25Ob2RlLnBhcmVudCkge1xuICAgICAgY29udGV4dCA9IHRyYW5zaXRpb25Ob2RlLmNvbnRleHQ7XG4gICAgICB0cmFuc2l0aW9uTm9kZSA9IHRyYW5zaXRpb25Ob2RlLnBhcmVudDtcbiAgICB9XG5cbiAgICB2YXIgaXNBcHBlYXIgPSAhY29udGV4dC5faXNNb3VudGVkIHx8ICF2bm9kZS5pc1Jvb3RJbnNlcnQ7XG5cbiAgICBpZiAoaXNBcHBlYXIgJiYgIWFwcGVhciAmJiBhcHBlYXIgIT09ICcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgc3RhcnRDbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhckNsYXNzXG4gICAgICA/IGFwcGVhckNsYXNzXG4gICAgICA6IGVudGVyQ2xhc3M7XG4gICAgdmFyIGFjdGl2ZUNsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICAgID8gYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICAgIDogZW50ZXJBY3RpdmVDbGFzcztcbiAgICB2YXIgdG9DbGFzcyA9IGlzQXBwZWFyICYmIGFwcGVhclRvQ2xhc3NcbiAgICAgID8gYXBwZWFyVG9DbGFzc1xuICAgICAgOiBlbnRlclRvQ2xhc3M7XG5cbiAgICB2YXIgYmVmb3JlRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICAgID8gKGJlZm9yZUFwcGVhciB8fCBiZWZvcmVFbnRlcilcbiAgICAgIDogYmVmb3JlRW50ZXI7XG4gICAgdmFyIGVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgICA/ICh0eXBlb2YgYXBwZWFyID09PSAnZnVuY3Rpb24nID8gYXBwZWFyIDogZW50ZXIpXG4gICAgICA6IGVudGVyO1xuICAgIHZhciBhZnRlckVudGVySG9vayA9IGlzQXBwZWFyXG4gICAgICA/IChhZnRlckFwcGVhciB8fCBhZnRlckVudGVyKVxuICAgICAgOiBhZnRlckVudGVyO1xuICAgIHZhciBlbnRlckNhbmNlbGxlZEhvb2sgPSBpc0FwcGVhclxuICAgICAgPyAoYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkKVxuICAgICAgOiBlbnRlckNhbmNlbGxlZDtcblxuICAgIHZhciBleHBsaWNpdEVudGVyRHVyYXRpb24gPSB0b051bWJlcihcbiAgICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgICA/IGR1cmF0aW9uLmVudGVyXG4gICAgICAgIDogZHVyYXRpb25cbiAgICApO1xuXG4gICAgaWYgKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiAhPSBudWxsKSB7XG4gICAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0RW50ZXJEdXJhdGlvbiwgJ2VudGVyJywgdm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGVudGVySG9vayk7XG5cbiAgICB2YXIgY2IgPSBlbC5fZW50ZXJDYiA9IG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBhY3RpdmVDbGFzcyk7XG4gICAgICB9XG4gICAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRlckNhbmNlbGxlZEhvb2sgJiYgZW50ZXJDYW5jZWxsZWRIb29rKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFmdGVyRW50ZXJIb29rICYmIGFmdGVyRW50ZXJIb29rKGVsKTtcbiAgICAgIH1cbiAgICAgIGVsLl9lbnRlckNiID0gbnVsbDtcbiAgICB9KTtcblxuICAgIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAvLyByZW1vdmUgcGVuZGluZyBsZWF2ZSBlbGVtZW50IG9uIGVudGVyIGJ5IGluamVjdGluZyBhbiBpbnNlcnQgaG9va1xuICAgICAgbWVyZ2VWTm9kZUhvb2sodm5vZGUsICdpbnNlcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgICAgICB2YXIgcGVuZGluZ05vZGUgPSBwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nICYmIHBhcmVudC5fcGVuZGluZ1t2bm9kZS5rZXldO1xuICAgICAgICBpZiAocGVuZGluZ05vZGUgJiZcbiAgICAgICAgICBwZW5kaW5nTm9kZS50YWcgPT09IHZub2RlLnRhZyAmJlxuICAgICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYlxuICAgICAgICApIHtcbiAgICAgICAgICBwZW5kaW5nTm9kZS5lbG0uX2xlYXZlQ2IoKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzdGFydCBlbnRlciB0cmFuc2l0aW9uXG4gICAgYmVmb3JlRW50ZXJIb29rICYmIGJlZm9yZUVudGVySG9vayhlbCk7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgc3RhcnRDbGFzcyk7XG4gICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCB0b0NsYXNzKTtcbiAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdEVudGVyRHVyYXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICB0b2dnbGVEaXNwbGF5ICYmIHRvZ2dsZURpc3BsYXkoKTtcbiAgICAgIGVudGVySG9vayAmJiBlbnRlckhvb2soZWwsIGNiKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgIGNiKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbGVhdmUgKHZub2RlLCBybSkge1xuICAgIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAgIC8vIGNhbGwgZW50ZXIgY2FsbGJhY2sgbm93XG4gICAgaWYgKGlzRGVmKGVsLl9lbnRlckNiKSkge1xuICAgICAgZWwuX2VudGVyQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgIGVsLl9lbnRlckNiKCk7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICAgIGlmIChpc1VuZGVmKGRhdGEpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgICByZXR1cm4gcm0oKVxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpc0RlZihlbC5fbGVhdmVDYikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgICB2YXIgdHlwZSA9IGRhdGEudHlwZTtcbiAgICB2YXIgbGVhdmVDbGFzcyA9IGRhdGEubGVhdmVDbGFzcztcbiAgICB2YXIgbGVhdmVUb0NsYXNzID0gZGF0YS5sZWF2ZVRvQ2xhc3M7XG4gICAgdmFyIGxlYXZlQWN0aXZlQ2xhc3MgPSBkYXRhLmxlYXZlQWN0aXZlQ2xhc3M7XG4gICAgdmFyIGJlZm9yZUxlYXZlID0gZGF0YS5iZWZvcmVMZWF2ZTtcbiAgICB2YXIgbGVhdmUgPSBkYXRhLmxlYXZlO1xuICAgIHZhciBhZnRlckxlYXZlID0gZGF0YS5hZnRlckxlYXZlO1xuICAgIHZhciBsZWF2ZUNhbmNlbGxlZCA9IGRhdGEubGVhdmVDYW5jZWxsZWQ7XG4gICAgdmFyIGRlbGF5TGVhdmUgPSBkYXRhLmRlbGF5TGVhdmU7XG4gICAgdmFyIGR1cmF0aW9uID0gZGF0YS5kdXJhdGlvbjtcblxuICAgIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gICAgdmFyIHVzZXJXYW50c0NvbnRyb2wgPSBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKGxlYXZlKTtcblxuICAgIHZhciBleHBsaWNpdExlYXZlRHVyYXRpb24gPSB0b051bWJlcihcbiAgICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgICA/IGR1cmF0aW9uLmxlYXZlXG4gICAgICAgIDogZHVyYXRpb25cbiAgICApO1xuXG4gICAgaWYgKGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICAgIGNoZWNrRHVyYXRpb24oZXhwbGljaXRMZWF2ZUR1cmF0aW9uLCAnbGVhdmUnLCB2bm9kZSk7XG4gICAgfVxuXG4gICAgdmFyIGNiID0gZWwuX2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChlbC5wYXJlbnROb2RlICYmIGVsLnBhcmVudE5vZGUuX3BlbmRpbmcpIHtcbiAgICAgICAgZWwucGFyZW50Tm9kZS5fcGVuZGluZ1t2bm9kZS5rZXldID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RzQ1NTKSB7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVUb0NsYXNzKTtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChjYi5jYW5jZWxsZWQpIHtcbiAgICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJtKCk7XG4gICAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgICB9XG4gICAgICBlbC5fbGVhdmVDYiA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBpZiAoZGVsYXlMZWF2ZSkge1xuICAgICAgZGVsYXlMZWF2ZShwZXJmb3JtTGVhdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZXJmb3JtTGVhdmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUgKCkge1xuICAgICAgLy8gdGhlIGRlbGF5ZWQgbGVhdmUgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIGNhbmNlbGxlZFxuICAgICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8vIHJlY29yZCBsZWF2aW5nIGVsZW1lbnRcbiAgICAgIGlmICghdm5vZGUuZGF0YS5zaG93ICYmIGVsLnBhcmVudE5vZGUpIHtcbiAgICAgICAgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgfHwgKGVsLnBhcmVudE5vZGUuX3BlbmRpbmcgPSB7fSkpWyh2bm9kZS5rZXkpXSA9IHZub2RlO1xuICAgICAgfVxuICAgICAgYmVmb3JlTGVhdmUgJiYgYmVmb3JlTGVhdmUoZWwpO1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICAgICAgbmV4dEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlQ2xhc3MpO1xuICAgICAgICAgIGlmICghY2IuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgICAgICBpZiAoIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjYiwgZXhwbGljaXRMZWF2ZUR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgICAgaWYgKCFleHBlY3RzQ1NTICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgIGNiKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG4gIGZ1bmN0aW9uIGNoZWNrRHVyYXRpb24gKHZhbCwgbmFtZSwgdm5vZGUpIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIG5vdCBhIHZhbGlkIG51bWJlciAtIFwiICtcbiAgICAgICAgXCJnb3QgXCIgKyAoSlNPTi5zdHJpbmdpZnkodmFsKSkgKyBcIi5cIixcbiAgICAgICAgdm5vZGUuY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbCkpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiPHRyYW5zaXRpb24+IGV4cGxpY2l0IFwiICsgbmFtZSArIFwiIGR1cmF0aW9uIGlzIE5hTiAtIFwiICtcbiAgICAgICAgJ3RoZSBkdXJhdGlvbiBleHByZXNzaW9uIG1pZ2h0IGJlIGluY29ycmVjdC4nLFxuICAgICAgICB2bm9kZS5jb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVmFsaWREdXJhdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05hTih2YWwpXG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplIGEgdHJhbnNpdGlvbiBob29rJ3MgYXJndW1lbnQgbGVuZ3RoLiBUaGUgaG9vayBtYXkgYmU6XG4gICAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICAgKiAtIGEgd3JhcHBlZCBjb21wb25lbnQgbWV0aG9kIChjaGVjayAuX2xlbmd0aClcbiAgICogLSBhIHBsYWluIGZ1bmN0aW9uICgubGVuZ3RoKVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aCAoZm4pIHtcbiAgICBpZiAoaXNVbmRlZihmbikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICB2YXIgaW52b2tlckZucyA9IGZuLmZucztcbiAgICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAgIC8vIGludm9rZXJcbiAgICAgIHJldHVybiBnZXRIb29rQXJndW1lbnRzTGVuZ3RoKFxuICAgICAgICBBcnJheS5pc0FycmF5KGludm9rZXJGbnMpXG4gICAgICAgICAgPyBpbnZva2VyRm5zWzBdXG4gICAgICAgICAgOiBpbnZva2VyRm5zXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoZm4uX2xlbmd0aCB8fCBmbi5sZW5ndGgpID4gMVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9lbnRlciAoXywgdm5vZGUpIHtcbiAgICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgICBlbnRlcih2bm9kZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRyYW5zaXRpb24gPSBpbkJyb3dzZXIgPyB7XG4gICAgY3JlYXRlOiBfZW50ZXIsXG4gICAgYWN0aXZhdGU6IF9lbnRlcixcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSQkMSAodm5vZGUsIHJtKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgICBsZWF2ZSh2bm9kZSwgcm0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gOiB7fTtcblxuICB2YXIgcGxhdGZvcm1Nb2R1bGVzID0gW1xuICAgIGF0dHJzLFxuICAgIGtsYXNzLFxuICAgIGV2ZW50cyxcbiAgICBkb21Qcm9wcyxcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uXG4gIF07XG5cbiAgLyogICovXG5cbiAgLy8gdGhlIGRpcmVjdGl2ZSBtb2R1bGUgc2hvdWxkIGJlIGFwcGxpZWQgbGFzdCwgYWZ0ZXIgYWxsXG4gIC8vIGJ1aWx0LWluIG1vZHVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuXG4gIHZhciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbiAgdmFyIHBhdGNoID0gY3JlYXRlUGF0Y2hGdW5jdGlvbih7IG5vZGVPcHM6IG5vZGVPcHMsIG1vZHVsZXM6IG1vZHVsZXMgfSk7XG5cbiAgLyoqXG4gICAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICAgKiBwcm9wZXJ0aWVzIHRvIEVsZW1lbnRzLlxuICAgKi9cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUU5KSB7XG4gICAgLy8gaHR0cDovL3d3dy5tYXR0czQxMS5jb20vcG9zdC9pbnRlcm5ldC1leHBsb3Jlci05LW9uaW5wdXQvXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbCAmJiBlbC52bW9kZWwpIHtcbiAgICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgZGlyZWN0aXZlID0ge1xuICAgIGluc2VydGVkOiBmdW5jdGlvbiBpbnNlcnRlZCAoZWwsIGJpbmRpbmcsIHZub2RlLCBvbGRWbm9kZSkge1xuICAgICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgLy8gIzY5MDNcbiAgICAgICAgaWYgKG9sZFZub2RlLmVsbSAmJiAhb2xkVm5vZGUuZWxtLl92T3B0aW9ucykge1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGlyZWN0aXZlLmNvbXBvbmVudFVwZGF0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09ICd0ZXh0YXJlYScgfHwgaXNUZXh0SW5wdXRUeXBlKGVsLnR5cGUpKSB7XG4gICAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICAgIGlmICghYmluZGluZy5tb2RpZmllcnMubGF6eSkge1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAgIC8vIHN3aXRjaGluZyBmb2N1cyBiZWZvcmUgY29uZmlybWluZyBjb21wb3NpdGlvbiBjaG9pY2VcbiAgICAgICAgICAvLyB0aGlzIGFsc28gZml4ZXMgdGhlIGlzc3VlIHdoZXJlIHNvbWUgYnJvd3NlcnMgZS5nLiBpT1MgQ2hyb21lXG4gICAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGlzSUU5KSB7XG4gICAgICAgICAgICBlbC52bW9kZWwgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRVcGRhdGVkOiBmdW5jdGlvbiBjb21wb25lbnRVcGRhdGVkIChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgICAgLy8gaW4gY2FzZSB0aGUgb3B0aW9ucyByZW5kZXJlZCBieSB2LWZvciBoYXZlIGNoYW5nZWQsXG4gICAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgICAgLy8gZGV0ZWN0IHN1Y2ggY2FzZXMgYW5kIGZpbHRlciBvdXQgdmFsdWVzIHRoYXQgbm8gbG9uZ2VyIGhhcyBhIG1hdGNoaW5nXG4gICAgICAgIC8vIG9wdGlvbiBpbiB0aGUgRE9NLlxuICAgICAgICB2YXIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICAgIHZhciBjdXJPcHRpb25zID0gZWwuX3ZPcHRpb25zID0gW10ubWFwLmNhbGwoZWwub3B0aW9ucywgZ2V0VmFsdWUpO1xuICAgICAgICBpZiAoY3VyT3B0aW9ucy5zb21lKGZ1bmN0aW9uIChvLCBpKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCBwcmV2T3B0aW9uc1tpXSk7IH0pKSB7XG4gICAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgICAvLyBubyBtYXRjaGluZyBvcHRpb24gZm91bmQgZm9yIGF0IGxlYXN0IG9uZSB2YWx1ZVxuICAgICAgICAgIHZhciBuZWVkUmVzZXQgPSBlbC5tdWx0aXBsZVxuICAgICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgICA6IGJpbmRpbmcudmFsdWUgIT09IGJpbmRpbmcub2xkVmFsdWUgJiYgaGFzTm9NYXRjaGluZ09wdGlvbihiaW5kaW5nLnZhbHVlLCBjdXJPcHRpb25zKTtcbiAgICAgICAgICBpZiAobmVlZFJlc2V0KSB7XG4gICAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gICAgdmFyIHZhbHVlID0gYmluZGluZy52YWx1ZTtcbiAgICB2YXIgaXNNdWx0aXBsZSA9IGVsLm11bHRpcGxlO1xuICAgIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgd2FybihcbiAgICAgICAgXCI8c2VsZWN0IG11bHRpcGxlIHYtbW9kZWw9XFxcIlwiICsgKGJpbmRpbmcuZXhwcmVzc2lvbikgKyBcIlxcXCI+IFwiICtcbiAgICAgICAgXCJleHBlY3RzIGFuIEFycmF5IHZhbHVlIGZvciBpdHMgYmluZGluZywgYnV0IGdvdCBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKSksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHZhciBzZWxlY3RlZCwgb3B0aW9uO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gZWwub3B0aW9ucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICBzZWxlY3RlZCA9IGxvb3NlSW5kZXhPZih2YWx1ZSwgZ2V0VmFsdWUob3B0aW9uKSkgPiAtMTtcbiAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxvb3NlRXF1YWwoZ2V0VmFsdWUob3B0aW9uKSwgdmFsdWUpKSB7XG4gICAgICAgICAgaWYgKGVsLnNlbGVjdGVkSW5kZXggIT09IGkpIHtcbiAgICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYXNOb01hdGNoaW5nT3B0aW9uICh2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmV2ZXJ5KGZ1bmN0aW9uIChvKSB7IHJldHVybiAhbG9vc2VFcXVhbChvLCB2YWx1ZSk7IH0pXG4gIH1cblxuICBmdW5jdGlvbiBnZXRWYWx1ZSAob3B0aW9uKSB7XG4gICAgcmV0dXJuICdfdmFsdWUnIGluIG9wdGlvblxuICAgICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgICA6IG9wdGlvbi52YWx1ZVxuICB9XG5cbiAgZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gICAgZS50YXJnZXQuY29tcG9zaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgICAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgYW4gaW5wdXQgZXZlbnQgZm9yIG5vIHJlYXNvblxuICAgIGlmICghZS50YXJnZXQuY29tcG9zaW5nKSB7IHJldHVybiB9XG4gICAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdHJpZ2dlcihlLnRhcmdldCwgJ2lucHV0Jyk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKTtcbiAgICBlLmluaXRFdmVudCh0eXBlLCB0cnVlLCB0cnVlKTtcbiAgICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xuICB9XG5cbiAgLyogICovXG5cbiAgLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuICBmdW5jdGlvbiBsb2NhdGVOb2RlICh2bm9kZSkge1xuICAgIHJldHVybiB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSAmJiAoIXZub2RlLmRhdGEgfHwgIXZub2RlLmRhdGEudHJhbnNpdGlvbilcbiAgICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgICA6IHZub2RlXG4gIH1cblxuICB2YXIgc2hvdyA9IHtcbiAgICBiaW5kOiBmdW5jdGlvbiBiaW5kIChlbCwgcmVmLCB2bm9kZSkge1xuICAgICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuXG4gICAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgICAgdmFyIHRyYW5zaXRpb24kJDEgPSB2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEudHJhbnNpdGlvbjtcbiAgICAgIHZhciBvcmlnaW5hbERpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXkgPVxuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgICBpZiAodmFsdWUgJiYgdHJhbnNpdGlvbiQkMSkge1xuICAgICAgICB2bm9kZS5kYXRhLnNob3cgPSB0cnVlO1xuICAgICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBvcmlnaW5hbERpc3BsYXk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IHZhbHVlID8gb3JpZ2luYWxEaXNwbGF5IDogJ25vbmUnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHJlZi52YWx1ZTtcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXZhbHVlID09PSAhb2xkVmFsdWUpIHsgcmV0dXJuIH1cbiAgICAgIHZub2RlID0gbG9jYXRlTm9kZSh2bm9kZSk7XG4gICAgICB2YXIgdHJhbnNpdGlvbiQkMSA9IHZub2RlLmRhdGEgJiYgdm5vZGUuZGF0YS50cmFuc2l0aW9uO1xuICAgICAgaWYgKHRyYW5zaXRpb24kJDEpIHtcbiAgICAgICAgdm5vZGUuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSBlbC5fX3ZPcmlnaW5hbERpc3BsYXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVhdmUodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQgKFxuICAgICAgZWwsXG4gICAgICBiaW5kaW5nLFxuICAgICAgdm5vZGUsXG4gICAgICBvbGRWbm9kZSxcbiAgICAgIGlzRGVzdHJveVxuICAgICkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3kpIHtcbiAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIHBsYXRmb3JtRGlyZWN0aXZlcyA9IHtcbiAgICBtb2RlbDogZGlyZWN0aXZlLFxuICAgIHNob3c6IHNob3dcbiAgfTtcblxuICAvKiAgKi9cblxuICB2YXIgdHJhbnNpdGlvblByb3BzID0ge1xuICAgIG5hbWU6IFN0cmluZyxcbiAgICBhcHBlYXI6IEJvb2xlYW4sXG4gICAgY3NzOiBCb29sZWFuLFxuICAgIG1vZGU6IFN0cmluZyxcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgZW50ZXJDbGFzczogU3RyaW5nLFxuICAgIGxlYXZlQ2xhc3M6IFN0cmluZyxcbiAgICBlbnRlclRvQ2xhc3M6IFN0cmluZyxcbiAgICBsZWF2ZVRvQ2xhc3M6IFN0cmluZyxcbiAgICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gICAgbGVhdmVBY3RpdmVDbGFzczogU3RyaW5nLFxuICAgIGFwcGVhckNsYXNzOiBTdHJpbmcsXG4gICAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgICBhcHBlYXJUb0NsYXNzOiBTdHJpbmcsXG4gICAgZHVyYXRpb246IFtOdW1iZXIsIFN0cmluZywgT2JqZWN0XVxuICB9O1xuXG4gIC8vIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFsc28gYW4gYWJzdHJhY3QgY29tcG9uZW50LCBlLmcuIDxrZWVwLWFsaXZlPlxuICAvLyB3ZSB3YW50IHRvIHJlY3Vyc2l2ZWx5IHJldHJpZXZlIHRoZSByZWFsIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZFxuICBmdW5jdGlvbiBnZXRSZWFsQ2hpbGQgKHZub2RlKSB7XG4gICAgdmFyIGNvbXBPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcE9wdGlvbnMgJiYgY29tcE9wdGlvbnMuQ3Rvci5vcHRpb25zLmFic3RyYWN0KSB7XG4gICAgICByZXR1cm4gZ2V0UmVhbENoaWxkKGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoY29tcE9wdGlvbnMuY2hpbGRyZW4pKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdm5vZGVcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBleHRyYWN0VHJhbnNpdGlvbkRhdGEgKGNvbXApIHtcbiAgICB2YXIgZGF0YSA9IHt9O1xuICAgIHZhciBvcHRpb25zID0gY29tcC4kb3B0aW9ucztcbiAgICAvLyBwcm9wc1xuICAgIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgICAgZGF0YVtrZXldID0gY29tcFtrZXldO1xuICAgIH1cbiAgICAvLyBldmVudHMuXG4gICAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMgYW5kIHBhc3MgdGhlbSBkaXJlY3RseSB0byB0aGUgdHJhbnNpdGlvbiBtZXRob2RzXG4gICAgdmFyIGxpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICBmb3IgKHZhciBrZXkkMSBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgIGRhdGFbY2FtZWxpemUoa2V5JDEpXSA9IGxpc3RlbmVyc1trZXkkMV07XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZWhvbGRlciAoaCwgcmF3Q2hpbGQpIHtcbiAgICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgICByZXR1cm4gaCgna2VlcC1hbGl2ZScsIHtcbiAgICAgICAgcHJvcHM6IHJhd0NoaWxkLmNvbXBvbmVudE9wdGlvbnMucHJvcHNEYXRhXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24gKHZub2RlKSB7XG4gICAgd2hpbGUgKCh2bm9kZSA9IHZub2RlLnBhcmVudCkpIHtcbiAgICAgIGlmICh2bm9kZS5kYXRhLnRyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1NhbWVDaGlsZCAoY2hpbGQsIG9sZENoaWxkKSB7XG4gICAgcmV0dXJuIG9sZENoaWxkLmtleSA9PT0gY2hpbGQua2V5ICYmIG9sZENoaWxkLnRhZyA9PT0gY2hpbGQudGFnXG4gIH1cblxuICB2YXIgaXNOb3RUZXh0Tm9kZSA9IGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRhZyB8fCBpc0FzeW5jUGxhY2Vob2xkZXIoYyk7IH07XG5cbiAgdmFyIGlzVlNob3dEaXJlY3RpdmUgPSBmdW5jdGlvbiAoZCkgeyByZXR1cm4gZC5uYW1lID09PSAnc2hvdyc7IH07XG5cbiAgdmFyIFRyYW5zaXRpb24gPSB7XG4gICAgbmFtZTogJ3RyYW5zaXRpb24nLFxuICAgIHByb3BzOiB0cmFuc2l0aW9uUHJvcHMsXG4gICAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoaCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBmaWx0ZXIgb3V0IHRleHQgbm9kZXMgKHBvc3NpYmxlIHdoaXRlc3BhY2VzKVxuICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoaXNOb3RUZXh0Tm9kZSk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyB3YXJuIG11bHRpcGxlIGVsZW1lbnRzXG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICc8dHJhbnNpdGlvbj4gY2FuIG9ubHkgYmUgdXNlZCBvbiBhIHNpbmdsZSBlbGVtZW50LiBVc2UgJyArXG4gICAgICAgICAgJzx0cmFuc2l0aW9uLWdyb3VwPiBmb3IgbGlzdHMuJyxcbiAgICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICAgIC8vIHdhcm4gaW52YWxpZCBtb2RlXG4gICAgICBpZiAobW9kZSAmJiBtb2RlICE9PSAnaW4tb3V0JyAmJiBtb2RlICE9PSAnb3V0LWluJ1xuICAgICAgKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ2ludmFsaWQgPHRyYW5zaXRpb24+IG1vZGU6ICcgKyBtb2RlLFxuICAgICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcblxuICAgICAgLy8gaWYgdGhpcyBpcyBhIGNvbXBvbmVudCByb290IG5vZGUgYW5kIHRoZSBjb21wb25lbnQnc1xuICAgICAgLy8gcGFyZW50IGNvbnRhaW5lciBub2RlIGFsc28gaGFzIHRyYW5zaXRpb24sIHNraXAuXG4gICAgICBpZiAoaGFzUGFyZW50VHJhbnNpdGlvbih0aGlzLiR2bm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHJhd0NoaWxkXG4gICAgICB9XG5cbiAgICAgIC8vIGFwcGx5IHRyYW5zaXRpb24gZGF0YSB0byBjaGlsZFxuICAgICAgLy8gdXNlIGdldFJlYWxDaGlsZCgpIHRvIGlnbm9yZSBhYnN0cmFjdCBjb21wb25lbnRzIGUuZy4ga2VlcC1hbGl2ZVxuICAgICAgdmFyIGNoaWxkID0gZ2V0UmVhbENoaWxkKHJhd0NoaWxkKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2xlYXZpbmcpIHtcbiAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgICAgfVxuXG4gICAgICAvLyBlbnN1cmUgYSBrZXkgdGhhdCBpcyB1bmlxdWUgdG8gdGhlIHZub2RlIHR5cGUgYW5kIHRvIHRoaXMgdHJhbnNpdGlvblxuICAgICAgLy8gY29tcG9uZW50IGluc3RhbmNlLiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gcmVtb3ZlIHBlbmRpbmcgbGVhdmluZyBub2Rlc1xuICAgICAgLy8gZHVyaW5nIGVudGVyaW5nLlxuICAgICAgdmFyIGlkID0gXCJfX3RyYW5zaXRpb24tXCIgKyAodGhpcy5fdWlkKSArIFwiLVwiO1xuICAgICAgY2hpbGQua2V5ID0gY2hpbGQua2V5ID09IG51bGxcbiAgICAgICAgPyBjaGlsZC5pc0NvbW1lbnRcbiAgICAgICAgICA/IGlkICsgJ2NvbW1lbnQnXG4gICAgICAgICAgOiBpZCArIGNoaWxkLnRhZ1xuICAgICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgICA/IChTdHJpbmcoY2hpbGQua2V5KS5pbmRleE9mKGlkKSA9PT0gMCA/IGNoaWxkLmtleSA6IGlkICsgY2hpbGQua2V5KVxuICAgICAgICAgIDogY2hpbGQua2V5O1xuXG4gICAgICB2YXIgZGF0YSA9IChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuICAgICAgdmFyIG9sZFJhd0NoaWxkID0gdGhpcy5fdm5vZGU7XG4gICAgICB2YXIgb2xkQ2hpbGQgPSBnZXRSZWFsQ2hpbGQob2xkUmF3Q2hpbGQpO1xuXG4gICAgICAvLyBtYXJrIHYtc2hvd1xuICAgICAgLy8gc28gdGhhdCB0aGUgdHJhbnNpdGlvbiBtb2R1bGUgY2FuIGhhbmQgb3ZlciB0aGUgY29udHJvbCB0byB0aGUgZGlyZWN0aXZlXG4gICAgICBpZiAoY2hpbGQuZGF0YS5kaXJlY3RpdmVzICYmIGNoaWxkLmRhdGEuZGlyZWN0aXZlcy5zb21lKGlzVlNob3dEaXJlY3RpdmUpKSB7XG4gICAgICAgIGNoaWxkLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgb2xkQ2hpbGQgJiZcbiAgICAgICAgb2xkQ2hpbGQuZGF0YSAmJlxuICAgICAgICAhaXNTYW1lQ2hpbGQoY2hpbGQsIG9sZENoaWxkKSAmJlxuICAgICAgICAhaXNBc3luY1BsYWNlaG9sZGVyKG9sZENoaWxkKSAmJlxuICAgICAgICAvLyAjNjY4NyBjb21wb25lbnQgcm9vdCBpcyBhIGNvbW1lbnQgbm9kZVxuICAgICAgICAhKG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlICYmIG9sZENoaWxkLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZS5pc0NvbW1lbnQpXG4gICAgICApIHtcbiAgICAgICAgLy8gcmVwbGFjZSBvbGQgY2hpbGQgdHJhbnNpdGlvbiBkYXRhIHdpdGggZnJlc2ggb25lXG4gICAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgICAgdmFyIG9sZERhdGEgPSBvbGRDaGlsZC5kYXRhLnRyYW5zaXRpb24gPSBleHRlbmQoe30sIGRhdGEpO1xuICAgICAgICAvLyBoYW5kbGUgdHJhbnNpdGlvbiBtb2RlXG4gICAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAgIC8vIHJldHVybiBwbGFjZWhvbGRlciBub2RlIGFuZCBxdWV1ZSB1cGRhdGUgd2hlbiBsZWF2ZSBmaW5pc2hlc1xuICAgICAgICAgIHRoaXMuX2xlYXZpbmcgPSB0cnVlO1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcyQxLl9sZWF2aW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzJDEuJGZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyKGgsIHJhd0NoaWxkKVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdpbi1vdXQnKSB7XG4gICAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBvbGRSYXdDaGlsZFxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICAgIHZhciBwZXJmb3JtTGVhdmUgPSBmdW5jdGlvbiAoKSB7IGRlbGF5ZWRMZWF2ZSgpOyB9O1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKGRhdGEsICdhZnRlckVudGVyJywgcGVyZm9ybUxlYXZlKTtcbiAgICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdkZWxheUxlYXZlJywgZnVuY3Rpb24gKGxlYXZlKSB7IGRlbGF5ZWRMZWF2ZSA9IGxlYXZlOyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmF3Q2hpbGRcbiAgICB9XG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIHByb3BzID0gZXh0ZW5kKHtcbiAgICB0YWc6IFN0cmluZyxcbiAgICBtb3ZlQ2xhc3M6IFN0cmluZ1xuICB9LCB0cmFuc2l0aW9uUHJvcHMpO1xuXG4gIGRlbGV0ZSBwcm9wcy5tb2RlO1xuXG4gIHZhciBUcmFuc2l0aW9uR3JvdXAgPSB7XG4gICAgcHJvcHM6IHByb3BzLFxuXG4gICAgYmVmb3JlTW91bnQ6IGZ1bmN0aW9uIGJlZm9yZU1vdW50ICgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICB2YXIgdXBkYXRlID0gdGhpcy5fdXBkYXRlO1xuICAgICAgdGhpcy5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICAgICAgdmFyIHJlc3RvcmVBY3RpdmVJbnN0YW5jZSA9IHNldEFjdGl2ZUluc3RhbmNlKHRoaXMkMSk7XG4gICAgICAgIC8vIGZvcmNlIHJlbW92aW5nIHBhc3NcbiAgICAgICAgdGhpcyQxLl9fcGF0Y2hfXyhcbiAgICAgICAgICB0aGlzJDEuX3Zub2RlLFxuICAgICAgICAgIHRoaXMkMS5rZXB0LFxuICAgICAgICAgIGZhbHNlLCAvLyBoeWRyYXRpbmdcbiAgICAgICAgICB0cnVlIC8vIHJlbW92ZU9ubHkgKCFpbXBvcnRhbnQsIGF2b2lkcyB1bm5lY2Vzc2FyeSBtb3ZlcylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcyQxLl92bm9kZSA9IHRoaXMkMS5rZXB0O1xuICAgICAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAgICAgdXBkYXRlLmNhbGwodGhpcyQxLCB2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyIChoKSB7XG4gICAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgICAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5wcmV2Q2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuICAgICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHZhciB0cmFuc2l0aW9uRGF0YSA9IGV4dHJhY3RUcmFuc2l0aW9uRGF0YSh0aGlzKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYyA9IHJhd0NoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoYy50YWcpIHtcbiAgICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjKTtcbiAgICAgICAgICAgIG1hcFtjLmtleV0gPSBjXG4gICAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBvcHRzID8gKG9wdHMuQ3Rvci5vcHRpb25zLm5hbWUgfHwgb3B0cy50YWcgfHwgJycpIDogYy50YWc7XG4gICAgICAgICAgICB3YXJuKChcIjx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiBtdXN0IGJlIGtleWVkOiA8XCIgKyBuYW1lICsgXCI+XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgICB2YXIga2VwdCA9IFtdO1xuICAgICAgICB2YXIgcmVtb3ZlZCA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgIHZhciBjJDEgPSBwcmV2Q2hpbGRyZW5baSQxXTtcbiAgICAgICAgICBjJDEuZGF0YS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBpZiAobWFwW2MkMS5rZXldKSB7XG4gICAgICAgICAgICBrZXB0LnB1c2goYyQxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGMkMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMua2VwdCA9IGgodGFnLCBudWxsLCBrZXB0KTtcbiAgICAgICAgdGhpcy5yZW1vdmVkID0gcmVtb3ZlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGgodGFnLCBudWxsLCBjaGlsZHJlbilcbiAgICB9LFxuXG4gICAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCAoKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICAgIHZhciBtb3ZlQ2xhc3MgPSB0aGlzLm1vdmVDbGFzcyB8fCAoKHRoaXMubmFtZSB8fCAndicpICsgJy1tb3ZlJyk7XG4gICAgICBpZiAoIWNoaWxkcmVuLmxlbmd0aCB8fCAhdGhpcy5oYXNNb3ZlKGNoaWxkcmVuWzBdLmVsbSwgbW92ZUNsYXNzKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gd2UgZGl2aWRlIHRoZSB3b3JrIGludG8gdGhyZWUgbG9vcHMgdG8gYXZvaWQgbWl4aW5nIERPTSByZWFkcyBhbmQgd3JpdGVzXG4gICAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICAgIGNoaWxkcmVuLmZvckVhY2goY2FsbFBlbmRpbmdDYnMpO1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaChyZWNvcmRQb3NpdGlvbik7XG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgICAvLyBmb3JjZSByZWZsb3cgdG8gcHV0IGV2ZXJ5dGhpbmcgaW4gcG9zaXRpb25cbiAgICAgIC8vIGFzc2lnbiB0byB0aGlzIHRvIGF2b2lkIGJlaW5nIHJlbW92ZWQgaW4gdHJlZS1zaGFraW5nXG4gICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgIHRoaXMuX3JlZmxvdyA9IGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgICB2YXIgZWwgPSBjLmVsbTtcbiAgICAgICAgICB2YXIgcyA9IGVsLnN0eWxlO1xuICAgICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgICBzLnRyYW5zZm9ybSA9IHMuV2Via2l0VHJhbnNmb3JtID0gcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnJztcbiAgICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgZWwuX21vdmVDYiA9IGZ1bmN0aW9uIGNiIChlKSB7XG4gICAgICAgICAgICBpZiAoZSAmJiBlLnRhcmdldCAhPT0gZWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBjYik7XG4gICAgICAgICAgICAgIGVsLl9tb3ZlQ2IgPSBudWxsO1xuICAgICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBoYXNNb3ZlOiBmdW5jdGlvbiBoYXNNb3ZlIChlbCwgbW92ZUNsYXNzKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRoaXMuX2hhc01vdmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5faGFzTW92ZVxuICAgICAgICB9XG4gICAgICAgIC8vIERldGVjdCB3aGV0aGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgbW92ZSBjbGFzcyBhcHBsaWVkIGhhc1xuICAgICAgICAvLyBDU1MgdHJhbnNpdGlvbnMuIFNpbmNlIHRoZSBlbGVtZW50IG1heSBiZSBpbnNpZGUgYW4gZW50ZXJpbmdcbiAgICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgICAvLyBhbGwgb3RoZXIgdHJhbnNpdGlvbiBjbGFzc2VzIGFwcGxpZWQgdG8gZW5zdXJlIG9ubHkgdGhlIG1vdmUgY2xhc3NcbiAgICAgICAgLy8gaXMgYXBwbGllZC5cbiAgICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICAgIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICAgICAgICBlbC5fdHJhbnNpdGlvbkNsYXNzZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xzKSB7IHJlbW92ZUNsYXNzKGNsb25lLCBjbHMpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRDbGFzcyhjbG9uZSwgbW92ZUNsYXNzKTtcbiAgICAgICAgY2xvbmUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgICB2YXIgaW5mbyA9IGdldFRyYW5zaXRpb25JbmZvKGNsb25lKTtcbiAgICAgICAgdGhpcy4kZWwucmVtb3ZlQ2hpbGQoY2xvbmUpO1xuICAgICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY2FsbFBlbmRpbmdDYnMgKGMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgICAgYy5lbG0uX21vdmVDYigpO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoYy5lbG0uX2VudGVyQ2IpIHtcbiAgICAgIGMuZWxtLl9lbnRlckNiKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb3JkUG9zaXRpb24gKGMpIHtcbiAgICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseVRyYW5zbGF0aW9uIChjKSB7XG4gICAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gICAgdmFyIG5ld1BvcyA9IGMuZGF0YS5uZXdQb3M7XG4gICAgdmFyIGR4ID0gb2xkUG9zLmxlZnQgLSBuZXdQb3MubGVmdDtcbiAgICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgICBpZiAoZHggfHwgZHkpIHtcbiAgICAgIGMuZGF0YS5tb3ZlZCA9IHRydWU7XG4gICAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IFwidHJhbnNsYXRlKFwiICsgZHggKyBcInB4LFwiICsgZHkgKyBcInB4KVwiO1xuICAgICAgcy50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwbGF0Zm9ybUNvbXBvbmVudHMgPSB7XG4gICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgICBUcmFuc2l0aW9uR3JvdXA6IFRyYW5zaXRpb25Hcm91cFxuICB9O1xuXG4gIC8qICAqL1xuXG4gIC8vIGluc3RhbGwgcGxhdGZvcm0gc3BlY2lmaWMgdXRpbHNcbiAgVnVlLmNvbmZpZy5tdXN0VXNlUHJvcCA9IG11c3RVc2VQcm9wO1xuICBWdWUuY29uZmlnLmlzUmVzZXJ2ZWRUYWcgPSBpc1Jlc2VydmVkVGFnO1xuICBWdWUuY29uZmlnLmlzUmVzZXJ2ZWRBdHRyID0gaXNSZXNlcnZlZEF0dHI7XG4gIFZ1ZS5jb25maWcuZ2V0VGFnTmFtZXNwYWNlID0gZ2V0VGFnTmFtZXNwYWNlO1xuICBWdWUuY29uZmlnLmlzVW5rbm93bkVsZW1lbnQgPSBpc1Vua25vd25FbGVtZW50O1xuXG4gIC8vIGluc3RhbGwgcGxhdGZvcm0gcnVudGltZSBkaXJlY3RpdmVzICYgY29tcG9uZW50c1xuICBleHRlbmQoVnVlLm9wdGlvbnMuZGlyZWN0aXZlcywgcGxhdGZvcm1EaXJlY3RpdmVzKTtcbiAgZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIHBsYXRmb3JtQ29tcG9uZW50cyk7XG5cbiAgLy8gaW5zdGFsbCBwbGF0Zm9ybSBwYXRjaCBmdW5jdGlvblxuICBWdWUucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuICAvLyBwdWJsaWMgbW91bnQgbWV0aG9kXG4gIFZ1ZS5wcm90b3R5cGUuJG1vdW50ID0gZnVuY3Rpb24gKFxuICAgIGVsLFxuICAgIGh5ZHJhdGluZ1xuICApIHtcbiAgICBlbCA9IGVsICYmIGluQnJvd3NlciA/IHF1ZXJ5KGVsKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbiAgfTtcblxuICAvLyBkZXZ0b29scyBnbG9iYWwgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoaW5Ccm93c2VyKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgICAgIGlmIChkZXZ0b29scykge1xuICAgICAgICAgIGRldnRvb2xzLmVtaXQoJ2luaXQnLCBWdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGVbY29uc29sZS5pbmZvID8gJ2luZm8nIDogJ2xvZyddKFxuICAgICAgICAgICAgJ0Rvd25sb2FkIHRoZSBWdWUgRGV2dG9vbHMgZXh0ZW5zaW9uIGZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOlxcbicgK1xuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5wcm9kdWN0aW9uVGlwICE9PSBmYWxzZSAmJlxuICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICkge1xuICAgICAgICBjb25zb2xlW2NvbnNvbGUuaW5mbyA/ICdpbmZvJyA6ICdsb2cnXShcbiAgICAgICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICAgICAgXCJNYWtlIHN1cmUgdG8gdHVybiBvbiBwcm9kdWN0aW9uIG1vZGUgd2hlbiBkZXBsb3lpbmcgZm9yIHByb2R1Y3Rpb24uXFxuXCIgK1xuICAgICAgICAgIFwiU2VlIG1vcmUgdGlwcyBhdCBodHRwczovL3Z1ZWpzLm9yZy9ndWlkZS9kZXBsb3ltZW50Lmh0bWxcIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyogICovXG5cbiAgdmFyIGRlZmF1bHRUYWdSRSA9IC9cXHtcXHsoKD86LnxcXHI/XFxuKSs/KVxcfVxcfS9nO1xuICB2YXIgcmVnZXhFc2NhcGVSRSA9IC9bLS4qKz9eJHt9KCl8W1xcXVxcL1xcXFxdL2c7XG5cbiAgdmFyIGJ1aWxkUmVnZXggPSBjYWNoZWQoZnVuY3Rpb24gKGRlbGltaXRlcnMpIHtcbiAgICB2YXIgb3BlbiA9IGRlbGltaXRlcnNbMF0ucmVwbGFjZShyZWdleEVzY2FwZVJFLCAnXFxcXCQmJyk7XG4gICAgdmFyIGNsb3NlID0gZGVsaW1pdGVyc1sxXS5yZXBsYWNlKHJlZ2V4RXNjYXBlUkUsICdcXFxcJCYnKTtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChvcGVuICsgJygoPzoufFxcXFxuKSs/KScgKyBjbG9zZSwgJ2cnKVxuICB9KTtcblxuXG5cbiAgZnVuY3Rpb24gcGFyc2VUZXh0IChcbiAgICB0ZXh0LFxuICAgIGRlbGltaXRlcnNcbiAgKSB7XG4gICAgdmFyIHRhZ1JFID0gZGVsaW1pdGVycyA/IGJ1aWxkUmVnZXgoZGVsaW1pdGVycykgOiBkZWZhdWx0VGFnUkU7XG4gICAgaWYgKCF0YWdSRS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdmFyIHRva2VucyA9IFtdO1xuICAgIHZhciByYXdUb2tlbnMgPSBbXTtcbiAgICB2YXIgbGFzdEluZGV4ID0gdGFnUkUubGFzdEluZGV4ID0gMDtcbiAgICB2YXIgbWF0Y2gsIGluZGV4LCB0b2tlblZhbHVlO1xuICAgIHdoaWxlICgobWF0Y2ggPSB0YWdSRS5leGVjKHRleHQpKSkge1xuICAgICAgaW5kZXggPSBtYXRjaC5pbmRleDtcbiAgICAgIC8vIHB1c2ggdGV4dCB0b2tlblxuICAgICAgaWYgKGluZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCwgaW5kZXgpKTtcbiAgICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgICAgfVxuICAgICAgLy8gdGFnIHRva2VuXG4gICAgICB2YXIgZXhwID0gcGFyc2VGaWx0ZXJzKG1hdGNoWzFdLnRyaW0oKSk7XG4gICAgICB0b2tlbnMucHVzaCgoXCJfcyhcIiArIGV4cCArIFwiKVwiKSk7XG4gICAgICByYXdUb2tlbnMucHVzaCh7ICdAYmluZGluZyc6IGV4cCB9KTtcbiAgICAgIGxhc3RJbmRleCA9IGluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobGFzdEluZGV4IDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgIHJhd1Rva2Vucy5wdXNoKHRva2VuVmFsdWUgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkpO1xuICAgICAgdG9rZW5zLnB1c2goSlNPTi5zdHJpbmdpZnkodG9rZW5WYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZXhwcmVzc2lvbjogdG9rZW5zLmpvaW4oJysnKSxcbiAgICAgIHRva2VuczogcmF3VG9rZW5zXG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtTm9kZSAoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljQ2xhc3MgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgICBpZiAoc3RhdGljQ2xhc3MpIHtcbiAgICAgIHZhciByZXMgPSBwYXJzZVRleHQoc3RhdGljQ2xhc3MsIG9wdGlvbnMuZGVsaW1pdGVycyk7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJjbGFzcz1cXFwiXCIgKyBzdGF0aWNDbGFzcyArIFwiXFxcIjogXCIgK1xuICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICdVc2Ugdi1iaW5kIG9yIHRoZSBjb2xvbiBzaG9ydGhhbmQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsICcgK1xuICAgICAgICAgICdpbnN0ZWFkIG9mIDxkaXYgY2xhc3M9XCJ7eyB2YWwgfX1cIj4sIHVzZSA8ZGl2IDpjbGFzcz1cInZhbFwiPi4nLFxuICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWydjbGFzcyddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGF0aWNDbGFzcykge1xuICAgICAgZWwuc3RhdGljQ2xhc3MgPSBKU09OLnN0cmluZ2lmeShzdGF0aWNDbGFzcyk7XG4gICAgfVxuICAgIHZhciBjbGFzc0JpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2NsYXNzJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoY2xhc3NCaW5kaW5nKSB7XG4gICAgICBlbC5jbGFzc0JpbmRpbmcgPSBjbGFzc0JpbmRpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGF0YSAoZWwpIHtcbiAgICB2YXIgZGF0YSA9ICcnO1xuICAgIGlmIChlbC5zdGF0aWNDbGFzcykge1xuICAgICAgZGF0YSArPSBcInN0YXRpY0NsYXNzOlwiICsgKGVsLnN0YXRpY0NsYXNzKSArIFwiLFwiO1xuICAgIH1cbiAgICBpZiAoZWwuY2xhc3NCaW5kaW5nKSB7XG4gICAgICBkYXRhICs9IFwiY2xhc3M6XCIgKyAoZWwuY2xhc3NCaW5kaW5nKSArIFwiLFwiO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgdmFyIGtsYXNzJDEgPSB7XG4gICAgc3RhdGljS2V5czogWydzdGF0aWNDbGFzcyddLFxuICAgIHRyYW5zZm9ybU5vZGU6IHRyYW5zZm9ybU5vZGUsXG4gICAgZ2VuRGF0YTogZ2VuRGF0YVxuICB9O1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHRyYW5zZm9ybU5vZGUkMSAoZWwsIG9wdGlvbnMpIHtcbiAgICB2YXIgd2FybiA9IG9wdGlvbnMud2FybiB8fCBiYXNlV2FybjtcbiAgICB2YXIgc3RhdGljU3R5bGUgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAnc3R5bGUnKTtcbiAgICBpZiAoc3RhdGljU3R5bGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAge1xuICAgICAgICB2YXIgcmVzID0gcGFyc2VUZXh0KHN0YXRpY1N0eWxlLCBvcHRpb25zLmRlbGltaXRlcnMpO1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwic3R5bGU9XFxcIlwiICsgc3RhdGljU3R5bGUgKyBcIlxcXCI6IFwiICtcbiAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgJ1VzZSB2LWJpbmQgb3IgdGhlIGNvbG9uIHNob3J0aGFuZCBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgJyArXG4gICAgICAgICAgICAnaW5zdGVhZCBvZiA8ZGl2IHN0eWxlPVwie3sgdmFsIH19XCI+LCB1c2UgPGRpdiA6c3R5bGU9XCJ2YWxcIj4uJyxcbiAgICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWydzdHlsZSddXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWwuc3RhdGljU3R5bGUgPSBKU09OLnN0cmluZ2lmeShwYXJzZVN0eWxlVGV4dChzdGF0aWNTdHlsZSkpO1xuICAgIH1cblxuICAgIHZhciBzdHlsZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3N0eWxlJywgZmFsc2UgLyogZ2V0U3RhdGljICovKTtcbiAgICBpZiAoc3R5bGVCaW5kaW5nKSB7XG4gICAgICBlbC5zdHlsZUJpbmRpbmcgPSBzdHlsZUJpbmRpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGF0YSQxIChlbCkge1xuICAgIHZhciBkYXRhID0gJyc7XG4gICAgaWYgKGVsLnN0YXRpY1N0eWxlKSB7XG4gICAgICBkYXRhICs9IFwic3RhdGljU3R5bGU6XCIgKyAoZWwuc3RhdGljU3R5bGUpICsgXCIsXCI7XG4gICAgfVxuICAgIGlmIChlbC5zdHlsZUJpbmRpbmcpIHtcbiAgICAgIGRhdGEgKz0gXCJzdHlsZTooXCIgKyAoZWwuc3R5bGVCaW5kaW5nKSArIFwiKSxcIjtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxuXG4gIHZhciBzdHlsZSQxID0ge1xuICAgIHN0YXRpY0tleXM6IFsnc3RhdGljU3R5bGUnXSxcbiAgICB0cmFuc2Zvcm1Ob2RlOiB0cmFuc2Zvcm1Ob2RlJDEsXG4gICAgZ2VuRGF0YTogZ2VuRGF0YSQxXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIGRlY29kZXI7XG5cbiAgdmFyIGhlID0ge1xuICAgIGRlY29kZTogZnVuY3Rpb24gZGVjb2RlIChodG1sKSB7XG4gICAgICBkZWNvZGVyID0gZGVjb2RlciB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGRlY29kZXIuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJldHVybiBkZWNvZGVyLnRleHRDb250ZW50XG4gICAgfVxuICB9O1xuXG4gIC8qICAqL1xuXG4gIHZhciBpc1VuYXJ5VGFnID0gbWFrZU1hcChcbiAgICAnYXJlYSxiYXNlLGJyLGNvbCxlbWJlZCxmcmFtZSxocixpbWcsaW5wdXQsaXNpbmRleCxrZXlnZW4sJyArXG4gICAgJ2xpbmssbWV0YSxwYXJhbSxzb3VyY2UsdHJhY2ssd2JyJ1xuICApO1xuXG4gIC8vIEVsZW1lbnRzIHRoYXQgeW91IGNhbiwgaW50ZW50aW9uYWxseSwgbGVhdmUgb3BlblxuICAvLyAoYW5kIHdoaWNoIGNsb3NlIHRoZW1zZWx2ZXMpXG4gIHZhciBjYW5CZUxlZnRPcGVuVGFnID0gbWFrZU1hcChcbiAgICAnY29sZ3JvdXAsZGQsZHQsbGksb3B0aW9ucyxwLHRkLHRmb290LHRoLHRoZWFkLHRyLHNvdXJjZSdcbiAgKTtcblxuICAvLyBIVE1MNSB0YWdzIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZGljZXMuaHRtbCNlbGVtZW50cy0zXG4gIC8vIFBocmFzaW5nIENvbnRlbnQgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjcGhyYXNpbmctY29udGVudFxuICB2YXIgaXNOb25QaHJhc2luZ1RhZyA9IG1ha2VNYXAoXG4gICAgJ2FkZHJlc3MsYXJ0aWNsZSxhc2lkZSxiYXNlLGJsb2NrcXVvdGUsYm9keSxjYXB0aW9uLGNvbCxjb2xncm91cCxkZCwnICtcbiAgICAnZGV0YWlscyxkaWFsb2csZGl2LGRsLGR0LGZpZWxkc2V0LGZpZ2NhcHRpb24sZmlndXJlLGZvb3Rlcixmb3JtLCcgK1xuICAgICdoMSxoMixoMyxoNCxoNSxoNixoZWFkLGhlYWRlcixoZ3JvdXAsaHIsaHRtbCxsZWdlbmQsbGksbWVudWl0ZW0sbWV0YSwnICtcbiAgICAnb3B0Z3JvdXAsb3B0aW9uLHBhcmFtLHJwLHJ0LHNvdXJjZSxzdHlsZSxzdW1tYXJ5LHRib2R5LHRkLHRmb290LHRoLHRoZWFkLCcgK1xuICAgICd0aXRsZSx0cix0cmFjaydcbiAgKTtcblxuICAvKipcbiAgICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgaXQncyBtb3N0bHkgdmVuZG9yIGNvZGUuXG4gICAqL1xuXG4gIC8vIFJlZ3VsYXIgRXhwcmVzc2lvbnMgZm9yIHBhcnNpbmcgdGFncyBhbmQgYXR0cmlidXRlc1xuICB2YXIgYXR0cmlidXRlID0gL15cXHMqKFteXFxzXCInPD5cXC89XSspKD86XFxzKig9KVxccyooPzpcIihbXlwiXSopXCIrfCcoW14nXSopJyt8KFteXFxzXCInPTw+YF0rKSkpPy87XG4gIHZhciBkeW5hbWljQXJnQXR0cmlidXRlID0gL15cXHMqKCg/OnYtW1xcdy1dKzp8QHw6fCMpXFxbW149XStcXF1bXlxcc1wiJzw+XFwvPV0qKSg/OlxccyooPSlcXHMqKD86XCIoW15cIl0qKVwiK3wnKFteJ10qKScrfChbXlxcc1wiJz08PmBdKykpKT8vO1xuICB2YXIgbmNuYW1lID0gXCJbYS16QS1aX11bXFxcXC1cXFxcLjAtOV9hLXpBLVpcIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qXCI7XG4gIHZhciBxbmFtZUNhcHR1cmUgPSBcIigoPzpcIiArIG5jbmFtZSArIFwiXFxcXDopP1wiICsgbmNuYW1lICsgXCIpXCI7XG4gIHZhciBzdGFydFRhZ09wZW4gPSBuZXcgUmVnRXhwKChcIl48XCIgKyBxbmFtZUNhcHR1cmUpKTtcbiAgdmFyIHN0YXJ0VGFnQ2xvc2UgPSAvXlxccyooXFwvPyk+LztcbiAgdmFyIGVuZFRhZyA9IG5ldyBSZWdFeHAoKFwiXjxcXFxcL1wiICsgcW5hbWVDYXB0dXJlICsgXCJbXj5dKj5cIikpO1xuICB2YXIgZG9jdHlwZSA9IC9ePCFET0NUWVBFIFtePl0rPi9pO1xuICAvLyAjNzI5ODogZXNjYXBlIC0gdG8gYXZvaWQgYmVpbmcgcGFzc2VkIGFzIEhUTUwgY29tbWVudCB3aGVuIGlubGluZWQgaW4gcGFnZVxuICB2YXIgY29tbWVudCA9IC9ePCFcXC0tLztcbiAgdmFyIGNvbmRpdGlvbmFsQ29tbWVudCA9IC9ePCFcXFsvO1xuXG4gIC8vIFNwZWNpYWwgRWxlbWVudHMgKGNhbiBjb250YWluIGFueXRoaW5nKVxuICB2YXIgaXNQbGFpblRleHRFbGVtZW50ID0gbWFrZU1hcCgnc2NyaXB0LHN0eWxlLHRleHRhcmVhJywgdHJ1ZSk7XG4gIHZhciByZUNhY2hlID0ge307XG5cbiAgdmFyIGRlY29kaW5nTWFwID0ge1xuICAgICcmbHQ7JzogJzwnLFxuICAgICcmZ3Q7JzogJz4nLFxuICAgICcmcXVvdDsnOiAnXCInLFxuICAgICcmYW1wOyc6ICcmJyxcbiAgICAnJiMxMDsnOiAnXFxuJyxcbiAgICAnJiM5Oyc6ICdcXHQnLFxuICAgICcmIzM5Oyc6IFwiJ1wiXG4gIH07XG4gIHZhciBlbmNvZGVkQXR0ciA9IC8mKD86bHR8Z3R8cXVvdHxhbXB8IzM5KTsvZztcbiAgdmFyIGVuY29kZWRBdHRyV2l0aE5ld0xpbmVzID0gLyYoPzpsdHxndHxxdW90fGFtcHwjMzl8IzEwfCM5KTsvZztcblxuICAvLyAjNTk5MlxuICB2YXIgaXNJZ25vcmVOZXdsaW5lVGFnID0gbWFrZU1hcCgncHJlLHRleHRhcmVhJywgdHJ1ZSk7XG4gIHZhciBzaG91bGRJZ25vcmVGaXJzdE5ld2xpbmUgPSBmdW5jdGlvbiAodGFnLCBodG1sKSB7IHJldHVybiB0YWcgJiYgaXNJZ25vcmVOZXdsaW5lVGFnKHRhZykgJiYgaHRtbFswXSA9PT0gJ1xcbic7IH07XG5cbiAgZnVuY3Rpb24gZGVjb2RlQXR0ciAodmFsdWUsIHNob3VsZERlY29kZU5ld2xpbmVzKSB7XG4gICAgdmFyIHJlID0gc2hvdWxkRGVjb2RlTmV3bGluZXMgPyBlbmNvZGVkQXR0cldpdGhOZXdMaW5lcyA6IGVuY29kZWRBdHRyO1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlLCBmdW5jdGlvbiAobWF0Y2gpIHsgcmV0dXJuIGRlY29kaW5nTWFwW21hdGNoXTsgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSFRNTCAoaHRtbCwgb3B0aW9ucykge1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBleHBlY3RIVE1MID0gb3B0aW9ucy5leHBlY3RIVE1MO1xuICAgIHZhciBpc1VuYXJ5VGFnJCQxID0gb3B0aW9ucy5pc1VuYXJ5VGFnIHx8IG5vO1xuICAgIHZhciBjYW5CZUxlZnRPcGVuVGFnJCQxID0gb3B0aW9ucy5jYW5CZUxlZnRPcGVuVGFnIHx8IG5vO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxhc3QsIGxhc3RUYWc7XG4gICAgd2hpbGUgKGh0bWwpIHtcbiAgICAgIGxhc3QgPSBodG1sO1xuICAgICAgLy8gTWFrZSBzdXJlIHdlJ3JlIG5vdCBpbiBhIHBsYWludGV4dCBjb250ZW50IGVsZW1lbnQgbGlrZSBzY3JpcHQvc3R5bGVcbiAgICAgIGlmICghbGFzdFRhZyB8fCAhaXNQbGFpblRleHRFbGVtZW50KGxhc3RUYWcpKSB7XG4gICAgICAgIHZhciB0ZXh0RW5kID0gaHRtbC5pbmRleE9mKCc8Jyk7XG4gICAgICAgIGlmICh0ZXh0RW5kID09PSAwKSB7XG4gICAgICAgICAgLy8gQ29tbWVudDpcbiAgICAgICAgICBpZiAoY29tbWVudC50ZXN0KGh0bWwpKSB7XG4gICAgICAgICAgICB2YXIgY29tbWVudEVuZCA9IGh0bWwuaW5kZXhPZignLS0+Jyk7XG5cbiAgICAgICAgICAgIGlmIChjb21tZW50RW5kID49IDApIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkS2VlcENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvbW1lbnQoaHRtbC5zdWJzdHJpbmcoNCwgY29tbWVudEVuZCksIGluZGV4LCBpbmRleCArIGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhZHZhbmNlKGNvbW1lbnRFbmQgKyAzKTtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbmRpdGlvbmFsX2NvbW1lbnQjRG93bmxldmVsLXJldmVhbGVkX2NvbmRpdGlvbmFsX2NvbW1lbnRcbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWxDb21tZW50LnRlc3QoaHRtbCkpIHtcbiAgICAgICAgICAgIHZhciBjb25kaXRpb25hbEVuZCA9IGh0bWwuaW5kZXhPZignXT4nKTtcblxuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbmFsRW5kID49IDApIHtcbiAgICAgICAgICAgICAgYWR2YW5jZShjb25kaXRpb25hbEVuZCArIDIpO1xuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIERvY3R5cGU6XG4gICAgICAgICAgdmFyIGRvY3R5cGVNYXRjaCA9IGh0bWwubWF0Y2goZG9jdHlwZSk7XG4gICAgICAgICAgaWYgKGRvY3R5cGVNYXRjaCkge1xuICAgICAgICAgICAgYWR2YW5jZShkb2N0eXBlTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRW5kIHRhZzpcbiAgICAgICAgICB2YXIgZW5kVGFnTWF0Y2ggPSBodG1sLm1hdGNoKGVuZFRhZyk7XG4gICAgICAgICAgaWYgKGVuZFRhZ01hdGNoKSB7XG4gICAgICAgICAgICB2YXIgY3VySW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGFkdmFuY2UoZW5kVGFnTWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHBhcnNlRW5kVGFnKGVuZFRhZ01hdGNoWzFdLCBjdXJJbmRleCwgaW5kZXgpO1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdGFydCB0YWc6XG4gICAgICAgICAgdmFyIHN0YXJ0VGFnTWF0Y2ggPSBwYXJzZVN0YXJ0VGFnKCk7XG4gICAgICAgICAgaWYgKHN0YXJ0VGFnTWF0Y2gpIHtcbiAgICAgICAgICAgIGhhbmRsZVN0YXJ0VGFnKHN0YXJ0VGFnTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFydFRhZ01hdGNoLnRhZ05hbWUsIGh0bWwpKSB7XG4gICAgICAgICAgICAgIGFkdmFuY2UoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB0ZXh0ID0gKHZvaWQgMCksIHJlc3QgPSAodm9pZCAwKSwgbmV4dCA9ICh2b2lkIDApO1xuICAgICAgICBpZiAodGV4dEVuZCA+PSAwKSB7XG4gICAgICAgICAgcmVzdCA9IGh0bWwuc2xpY2UodGV4dEVuZCk7XG4gICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgIWVuZFRhZy50ZXN0KHJlc3QpICYmXG4gICAgICAgICAgICAhc3RhcnRUYWdPcGVuLnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAgICFjb21tZW50LnRlc3QocmVzdCkgJiZcbiAgICAgICAgICAgICFjb25kaXRpb25hbENvbW1lbnQudGVzdChyZXN0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gPCBpbiBwbGFpbiB0ZXh0LCBiZSBmb3JnaXZpbmcgYW5kIHRyZWF0IGl0IGFzIHRleHRcbiAgICAgICAgICAgIG5leHQgPSByZXN0LmluZGV4T2YoJzwnLCAxKTtcbiAgICAgICAgICAgIGlmIChuZXh0IDwgMCkgeyBicmVhayB9XG4gICAgICAgICAgICB0ZXh0RW5kICs9IG5leHQ7XG4gICAgICAgICAgICByZXN0ID0gaHRtbC5zbGljZSh0ZXh0RW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCA9IGh0bWwuc3Vic3RyaW5nKDAsIHRleHRFbmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRleHRFbmQgPCAwKSB7XG4gICAgICAgICAgdGV4dCA9IGh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgIGFkdmFuY2UodGV4dC5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY2hhcnMgJiYgdGV4dCkge1xuICAgICAgICAgIG9wdGlvbnMuY2hhcnModGV4dCwgaW5kZXggLSB0ZXh0Lmxlbmd0aCwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgZW5kVGFnTGVuZ3RoID0gMDtcbiAgICAgICAgdmFyIHN0YWNrZWRUYWcgPSBsYXN0VGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhciByZVN0YWNrZWRUYWcgPSByZUNhY2hlW3N0YWNrZWRUYWddIHx8IChyZUNhY2hlW3N0YWNrZWRUYWddID0gbmV3IFJlZ0V4cCgnKFtcXFxcc1xcXFxTXSo/KSg8LycgKyBzdGFja2VkVGFnICsgJ1tePl0qPiknLCAnaScpKTtcbiAgICAgICAgdmFyIHJlc3QkMSA9IGh0bWwucmVwbGFjZShyZVN0YWNrZWRUYWcsIGZ1bmN0aW9uIChhbGwsIHRleHQsIGVuZFRhZykge1xuICAgICAgICAgIGVuZFRhZ0xlbmd0aCA9IGVuZFRhZy5sZW5ndGg7XG4gICAgICAgICAgaWYgKCFpc1BsYWluVGV4dEVsZW1lbnQoc3RhY2tlZFRhZykgJiYgc3RhY2tlZFRhZyAhPT0gJ25vc2NyaXB0Jykge1xuICAgICAgICAgICAgdGV4dCA9IHRleHRcbiAgICAgICAgICAgICAgLnJlcGxhY2UoLzwhXFwtLShbXFxzXFxTXSo/KS0tPi9nLCAnJDEnKSAvLyAjNzI5OFxuICAgICAgICAgICAgICAucmVwbGFjZSgvPCFcXFtDREFUQVxcWyhbXFxzXFxTXSo/KV1dPi9nLCAnJDEnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNob3VsZElnbm9yZUZpcnN0TmV3bGluZShzdGFja2VkVGFnLCB0ZXh0KSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRpb25zLmNoYXJzKSB7XG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzKHRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IGh0bWwubGVuZ3RoIC0gcmVzdCQxLmxlbmd0aDtcbiAgICAgICAgaHRtbCA9IHJlc3QkMTtcbiAgICAgICAgcGFyc2VFbmRUYWcoc3RhY2tlZFRhZywgaW5kZXggLSBlbmRUYWdMZW5ndGgsIGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGh0bWwgPT09IGxhc3QpIHtcbiAgICAgICAgb3B0aW9ucy5jaGFycyAmJiBvcHRpb25zLmNoYXJzKGh0bWwpO1xuICAgICAgICBpZiAoIXN0YWNrLmxlbmd0aCAmJiBvcHRpb25zLndhcm4pIHtcbiAgICAgICAgICBvcHRpb25zLndhcm4oKFwiTWFsLWZvcm1hdHRlZCB0YWcgYXQgZW5kIG9mIHRlbXBsYXRlOiBcXFwiXCIgKyBodG1sICsgXCJcXFwiXCIpLCB7IHN0YXJ0OiBpbmRleCArIGh0bWwubGVuZ3RoIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgYW55IHJlbWFpbmluZyB0YWdzXG4gICAgcGFyc2VFbmRUYWcoKTtcblxuICAgIGZ1bmN0aW9uIGFkdmFuY2UgKG4pIHtcbiAgICAgIGluZGV4ICs9IG47XG4gICAgICBodG1sID0gaHRtbC5zdWJzdHJpbmcobik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VTdGFydFRhZyAoKSB7XG4gICAgICB2YXIgc3RhcnQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnT3Blbik7XG4gICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgdmFyIG1hdGNoID0ge1xuICAgICAgICAgIHRhZ05hbWU6IHN0YXJ0WzFdLFxuICAgICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgICBzdGFydDogaW5kZXhcbiAgICAgICAgfTtcbiAgICAgICAgYWR2YW5jZShzdGFydFswXS5sZW5ndGgpO1xuICAgICAgICB2YXIgZW5kLCBhdHRyO1xuICAgICAgICB3aGlsZSAoIShlbmQgPSBodG1sLm1hdGNoKHN0YXJ0VGFnQ2xvc2UpKSAmJiAoYXR0ciA9IGh0bWwubWF0Y2goZHluYW1pY0FyZ0F0dHJpYnV0ZSkgfHwgaHRtbC5tYXRjaChhdHRyaWJ1dGUpKSkge1xuICAgICAgICAgIGF0dHIuc3RhcnQgPSBpbmRleDtcbiAgICAgICAgICBhZHZhbmNlKGF0dHJbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBhdHRyLmVuZCA9IGluZGV4O1xuICAgICAgICAgIG1hdGNoLmF0dHJzLnB1c2goYXR0cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgIG1hdGNoLnVuYXJ5U2xhc2ggPSBlbmRbMV07XG4gICAgICAgICAgYWR2YW5jZShlbmRbMF0ubGVuZ3RoKTtcbiAgICAgICAgICBtYXRjaC5lbmQgPSBpbmRleDtcbiAgICAgICAgICByZXR1cm4gbWF0Y2hcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0YXJ0VGFnIChtYXRjaCkge1xuICAgICAgdmFyIHRhZ05hbWUgPSBtYXRjaC50YWdOYW1lO1xuICAgICAgdmFyIHVuYXJ5U2xhc2ggPSBtYXRjaC51bmFyeVNsYXNoO1xuXG4gICAgICBpZiAoZXhwZWN0SFRNTCkge1xuICAgICAgICBpZiAobGFzdFRhZyA9PT0gJ3AnICYmIGlzTm9uUGhyYXNpbmdUYWcodGFnTmFtZSkpIHtcbiAgICAgICAgICBwYXJzZUVuZFRhZyhsYXN0VGFnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuQmVMZWZ0T3BlblRhZyQkMSh0YWdOYW1lKSAmJiBsYXN0VGFnID09PSB0YWdOYW1lKSB7XG4gICAgICAgICAgcGFyc2VFbmRUYWcodGFnTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHVuYXJ5ID0gaXNVbmFyeVRhZyQkMSh0YWdOYW1lKSB8fCAhIXVuYXJ5U2xhc2g7XG5cbiAgICAgIHZhciBsID0gbWF0Y2guYXR0cnMubGVuZ3RoO1xuICAgICAgdmFyIGF0dHJzID0gbmV3IEFycmF5KGwpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBtYXRjaC5hdHRyc1tpXTtcbiAgICAgICAgdmFyIHZhbHVlID0gYXJnc1szXSB8fCBhcmdzWzRdIHx8IGFyZ3NbNV0gfHwgJyc7XG4gICAgICAgIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IHRhZ05hbWUgPT09ICdhJyAmJiBhcmdzWzFdID09PSAnaHJlZidcbiAgICAgICAgICA/IG9wdGlvbnMuc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmXG4gICAgICAgICAgOiBvcHRpb25zLnNob3VsZERlY29kZU5ld2xpbmVzO1xuICAgICAgICBhdHRyc1tpXSA9IHtcbiAgICAgICAgICBuYW1lOiBhcmdzWzFdLFxuICAgICAgICAgIHZhbHVlOiBkZWNvZGVBdHRyKHZhbHVlLCBzaG91bGREZWNvZGVOZXdsaW5lcylcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICBhdHRyc1tpXS5zdGFydCA9IGFyZ3Muc3RhcnQgKyBhcmdzWzBdLm1hdGNoKC9eXFxzKi8pLmxlbmd0aDtcbiAgICAgICAgICBhdHRyc1tpXS5lbmQgPSBhcmdzLmVuZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXVuYXJ5KSB7XG4gICAgICAgIHN0YWNrLnB1c2goeyB0YWc6IHRhZ05hbWUsIGxvd2VyQ2FzZWRUYWc6IHRhZ05hbWUudG9Mb3dlckNhc2UoKSwgYXR0cnM6IGF0dHJzLCBzdGFydDogbWF0Y2guc3RhcnQsIGVuZDogbWF0Y2guZW5kIH0pO1xuICAgICAgICBsYXN0VGFnID0gdGFnTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBhdHRycywgdW5hcnksIG1hdGNoLnN0YXJ0LCBtYXRjaC5lbmQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlRW5kVGFnICh0YWdOYW1lLCBzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgcG9zLCBsb3dlckNhc2VkVGFnTmFtZTtcbiAgICAgIGlmIChzdGFydCA9PSBudWxsKSB7IHN0YXJ0ID0gaW5kZXg7IH1cbiAgICAgIGlmIChlbmQgPT0gbnVsbCkgeyBlbmQgPSBpbmRleDsgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBjbG9zZXN0IG9wZW5lZCB0YWcgb2YgdGhlIHNhbWUgdHlwZVxuICAgICAgaWYgKHRhZ05hbWUpIHtcbiAgICAgICAgbG93ZXJDYXNlZFRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGZvciAocG9zID0gc3RhY2subGVuZ3RoIC0gMTsgcG9zID49IDA7IHBvcy0tKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3Bvc10ubG93ZXJDYXNlZFRhZyA9PT0gbG93ZXJDYXNlZFRhZ05hbWUpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBubyB0YWcgbmFtZSBpcyBwcm92aWRlZCwgY2xlYW4gc2hvcFxuICAgICAgICBwb3MgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9zID49IDApIHtcbiAgICAgICAgLy8gQ2xvc2UgYWxsIHRoZSBvcGVuIGVsZW1lbnRzLCB1cCB0aGUgc3RhY2tcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gcG9zOyBpLS0pIHtcbiAgICAgICAgICBpZiAoaSA+IHBvcyB8fCAhdGFnTmFtZSAmJlxuICAgICAgICAgICAgb3B0aW9ucy53YXJuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBvcHRpb25zLndhcm4oXG4gICAgICAgICAgICAgIChcInRhZyA8XCIgKyAoc3RhY2tbaV0udGFnKSArIFwiPiBoYXMgbm8gbWF0Y2hpbmcgZW5kIHRhZy5cIiksXG4gICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YWNrW2ldLnN0YXJ0LCBlbmQ6IHN0YWNrW2ldLmVuZCB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZW5kKHN0YWNrW2ldLnRhZywgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBvcGVuIGVsZW1lbnRzIGZyb20gdGhlIHN0YWNrXG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHBvcztcbiAgICAgICAgbGFzdFRhZyA9IHBvcyAmJiBzdGFja1twb3MgLSAxXS50YWc7XG4gICAgICB9IGVsc2UgaWYgKGxvd2VyQ2FzZWRUYWdOYW1lID09PSAnYnInKSB7XG4gICAgICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgb3B0aW9ucy5zdGFydCh0YWdOYW1lLCBbXSwgdHJ1ZSwgc3RhcnQsIGVuZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlZFRhZ05hbWUgPT09ICdwJykge1xuICAgICAgICBpZiAob3B0aW9ucy5zdGFydCkge1xuICAgICAgICAgIG9wdGlvbnMuc3RhcnQodGFnTmFtZSwgW10sIGZhbHNlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5lbmQpIHtcbiAgICAgICAgICBvcHRpb25zLmVuZCh0YWdOYW1lLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIHZhciBvblJFID0gL15AfF52LW9uOi87XG4gIHZhciBkaXJSRSA9IC9edi18XkB8Xjp8XiMvO1xuICB2YXIgZm9yQWxpYXNSRSA9IC8oW1xcc1xcU10qPylcXHMrKD86aW58b2YpXFxzKyhbXFxzXFxTXSopLztcbiAgdmFyIGZvckl0ZXJhdG9yUkUgPSAvLChbXixcXH1cXF1dKikoPzosKFteLFxcfVxcXV0qKSk/JC87XG4gIHZhciBzdHJpcFBhcmVuc1JFID0gL15cXCh8XFwpJC9nO1xuICB2YXIgZHluYW1pY0FyZ1JFID0gL15cXFsuKlxcXSQvO1xuXG4gIHZhciBhcmdSRSA9IC86KC4qKSQvO1xuICB2YXIgYmluZFJFID0gL146fF5cXC58XnYtYmluZDovO1xuICB2YXIgbW9kaWZpZXJSRSA9IC9cXC5bXi5cXF1dKyg/PVteXFxdXSokKS9nO1xuXG4gIHZhciBzbG90UkUgPSAvXnYtc2xvdCg6fCQpfF4jLztcblxuICB2YXIgbGluZUJyZWFrUkUgPSAvW1xcclxcbl0vO1xuICB2YXIgd2hpdGVzcGFjZVJFJDEgPSAvXFxzKy9nO1xuXG4gIHZhciBpbnZhbGlkQXR0cmlidXRlUkUgPSAvW1xcc1wiJzw+XFwvPV0vO1xuXG4gIHZhciBkZWNvZGVIVE1MQ2FjaGVkID0gY2FjaGVkKGhlLmRlY29kZSk7XG5cbiAgdmFyIGVtcHR5U2xvdFNjb3BlVG9rZW4gPSBcIl9lbXB0eV9cIjtcblxuICAvLyBjb25maWd1cmFibGUgc3RhdGVcbiAgdmFyIHdhcm4kMjtcbiAgdmFyIGRlbGltaXRlcnM7XG4gIHZhciB0cmFuc2Zvcm1zO1xuICB2YXIgcHJlVHJhbnNmb3JtcztcbiAgdmFyIHBvc3RUcmFuc2Zvcm1zO1xuICB2YXIgcGxhdGZvcm1Jc1ByZVRhZztcbiAgdmFyIHBsYXRmb3JtTXVzdFVzZVByb3A7XG4gIHZhciBwbGF0Zm9ybUdldFRhZ05hbWVzcGFjZTtcbiAgdmFyIG1heWJlQ29tcG9uZW50O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFTVEVsZW1lbnQgKFxuICAgIHRhZyxcbiAgICBhdHRycyxcbiAgICBwYXJlbnRcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IDEsXG4gICAgICB0YWc6IHRhZyxcbiAgICAgIGF0dHJzTGlzdDogYXR0cnMsXG4gICAgICBhdHRyc01hcDogbWFrZUF0dHJzTWFwKGF0dHJzKSxcbiAgICAgIHJhd0F0dHJzTWFwOiB7fSxcbiAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgSFRNTCBzdHJpbmcgdG8gQVNULlxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2UgKFxuICAgIHRlbXBsYXRlLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgd2FybiQyID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuXG4gICAgcGxhdGZvcm1Jc1ByZVRhZyA9IG9wdGlvbnMuaXNQcmVUYWcgfHwgbm87XG4gICAgcGxhdGZvcm1NdXN0VXNlUHJvcCA9IG9wdGlvbnMubXVzdFVzZVByb3AgfHwgbm87XG4gICAgcGxhdGZvcm1HZXRUYWdOYW1lc3BhY2UgPSBvcHRpb25zLmdldFRhZ05hbWVzcGFjZSB8fCBubztcbiAgICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgICBtYXliZUNvbXBvbmVudCA9IGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gISFlbC5jb21wb25lbnQgfHwgIWlzUmVzZXJ2ZWRUYWcoZWwudGFnKTsgfTtcblxuICAgIHRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3RyYW5zZm9ybU5vZGUnKTtcbiAgICBwcmVUcmFuc2Zvcm1zID0gcGx1Y2tNb2R1bGVGdW5jdGlvbihvcHRpb25zLm1vZHVsZXMsICdwcmVUcmFuc2Zvcm1Ob2RlJyk7XG4gICAgcG9zdFRyYW5zZm9ybXMgPSBwbHVja01vZHVsZUZ1bmN0aW9uKG9wdGlvbnMubW9kdWxlcywgJ3Bvc3RUcmFuc2Zvcm1Ob2RlJyk7XG5cbiAgICBkZWxpbWl0ZXJzID0gb3B0aW9ucy5kZWxpbWl0ZXJzO1xuXG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIHByZXNlcnZlV2hpdGVzcGFjZSA9IG9wdGlvbnMucHJlc2VydmVXaGl0ZXNwYWNlICE9PSBmYWxzZTtcbiAgICB2YXIgd2hpdGVzcGFjZU9wdGlvbiA9IG9wdGlvbnMud2hpdGVzcGFjZTtcbiAgICB2YXIgcm9vdDtcbiAgICB2YXIgY3VycmVudFBhcmVudDtcbiAgICB2YXIgaW5WUHJlID0gZmFsc2U7XG4gICAgdmFyIGluUHJlID0gZmFsc2U7XG4gICAgdmFyIHdhcm5lZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gd2Fybk9uY2UgKG1zZywgcmFuZ2UpIHtcbiAgICAgIGlmICghd2FybmVkKSB7XG4gICAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgICAgIHdhcm4kMihtc2csIHJhbmdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZUVsZW1lbnQgKGVsZW1lbnQpIHtcbiAgICAgIHRyaW1FbmRpbmdXaGl0ZXNwYWNlKGVsZW1lbnQpO1xuICAgICAgaWYgKCFpblZQcmUgJiYgIWVsZW1lbnQucHJvY2Vzc2VkKSB7XG4gICAgICAgIGVsZW1lbnQgPSBwcm9jZXNzRWxlbWVudChlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIC8vIHRyZWUgbWFuYWdlbWVudFxuICAgICAgaWYgKCFzdGFjay5sZW5ndGggJiYgZWxlbWVudCAhPT0gcm9vdCkge1xuICAgICAgICAvLyBhbGxvdyByb290IGVsZW1lbnRzIHdpdGggdi1pZiwgdi1lbHNlLWlmIGFuZCB2LWVsc2VcbiAgICAgICAgaWYgKHJvb3QuaWYgJiYgKGVsZW1lbnQuZWxzZWlmIHx8IGVsZW1lbnQuZWxzZSkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjaGVja1Jvb3RDb25zdHJhaW50cyhlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkSWZDb25kaXRpb24ocm9vdCwge1xuICAgICAgICAgICAgZXhwOiBlbGVtZW50LmVsc2VpZixcbiAgICAgICAgICAgIGJsb2NrOiBlbGVtZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICBcIkNvbXBvbmVudCB0ZW1wbGF0ZSBzaG91bGQgY29udGFpbiBleGFjdGx5IG9uZSByb290IGVsZW1lbnQuIFwiICtcbiAgICAgICAgICAgIFwiSWYgeW91IGFyZSB1c2luZyB2LWlmIG9uIG11bHRpcGxlIGVsZW1lbnRzLCBcIiArXG4gICAgICAgICAgICBcInVzZSB2LWVsc2UtaWYgdG8gY2hhaW4gdGhlbSBpbnN0ZWFkLlwiLFxuICAgICAgICAgICAgeyBzdGFydDogZWxlbWVudC5zdGFydCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgIWVsZW1lbnQuZm9yYmlkZGVuKSB7XG4gICAgICAgIGlmIChlbGVtZW50LmVsc2VpZiB8fCBlbGVtZW50LmVsc2UpIHtcbiAgICAgICAgICBwcm9jZXNzSWZDb25kaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRQYXJlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlbGVtZW50LnNsb3RTY29wZSkge1xuICAgICAgICAgICAgLy8gc2NvcGVkIHNsb3RcbiAgICAgICAgICAgIC8vIGtlZXAgaXQgaW4gdGhlIGNoaWxkcmVuIGxpc3Qgc28gdGhhdCB2LWVsc2UoLWlmKSBjb25kaXRpb25zIGNhblxuICAgICAgICAgICAgLy8gZmluZCBpdCBhcyB0aGUgcHJldiBub2RlLlxuICAgICAgICAgICAgdmFyIG5hbWUgPSBlbGVtZW50LnNsb3RUYXJnZXQgfHwgJ1wiZGVmYXVsdFwiJ1xuICAgICAgICAgICAgOyhjdXJyZW50UGFyZW50LnNjb3BlZFNsb3RzIHx8IChjdXJyZW50UGFyZW50LnNjb3BlZFNsb3RzID0ge30pKVtuYW1lXSA9IGVsZW1lbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICBlbGVtZW50LnBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZmluYWwgY2hpbGRyZW4gY2xlYW51cFxuICAgICAgLy8gZmlsdGVyIG91dCBzY29wZWQgc2xvdHNcbiAgICAgIGVsZW1lbnQuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykgeyByZXR1cm4gIShjKS5zbG90U2NvcGU7IH0pO1xuICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2Ugbm9kZSBhZ2FpblxuICAgICAgdHJpbUVuZGluZ1doaXRlc3BhY2UoZWxlbWVudCk7XG5cbiAgICAgIC8vIGNoZWNrIHByZSBzdGF0ZVxuICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgIGluVlByZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHBsYXRmb3JtSXNQcmVUYWcoZWxlbWVudC50YWcpKSB7XG4gICAgICAgIGluUHJlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBhcHBseSBwb3N0LXRyYW5zZm9ybXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9zdFRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcG9zdFRyYW5zZm9ybXNbaV0oZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJpbUVuZGluZ1doaXRlc3BhY2UgKGVsKSB7XG4gICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBub2RlXG4gICAgICBpZiAoIWluUHJlKSB7XG4gICAgICAgIHZhciBsYXN0Tm9kZTtcbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgIChsYXN0Tm9kZSA9IGVsLmNoaWxkcmVuW2VsLmNoaWxkcmVuLmxlbmd0aCAtIDFdKSAmJlxuICAgICAgICAgIGxhc3ROb2RlLnR5cGUgPT09IDMgJiZcbiAgICAgICAgICBsYXN0Tm9kZS50ZXh0ID09PSAnICdcbiAgICAgICAgKSB7XG4gICAgICAgICAgZWwuY2hpbGRyZW4ucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1Jvb3RDb25zdHJhaW50cyAoZWwpIHtcbiAgICAgIGlmIChlbC50YWcgPT09ICdzbG90JyB8fCBlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgXCJDYW5ub3QgdXNlIDxcIiArIChlbC50YWcpICsgXCI+IGFzIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSBpdCBtYXkgXCIgK1xuICAgICAgICAgICdjb250YWluIG11bHRpcGxlIG5vZGVzLicsXG4gICAgICAgICAgeyBzdGFydDogZWwuc3RhcnQgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGVsLmF0dHJzTWFwLmhhc093blByb3BlcnR5KCd2LWZvcicpKSB7XG4gICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICdDYW5ub3QgdXNlIHYtZm9yIG9uIHN0YXRlZnVsIGNvbXBvbmVudCByb290IGVsZW1lbnQgYmVjYXVzZSAnICtcbiAgICAgICAgICAnaXQgcmVuZGVycyBtdWx0aXBsZSBlbGVtZW50cy4nLFxuICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWyd2LWZvciddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFyc2VIVE1MKHRlbXBsYXRlLCB7XG4gICAgICB3YXJuOiB3YXJuJDIsXG4gICAgICBleHBlY3RIVE1MOiBvcHRpb25zLmV4cGVjdEhUTUwsXG4gICAgICBpc1VuYXJ5VGFnOiBvcHRpb25zLmlzVW5hcnlUYWcsXG4gICAgICBjYW5CZUxlZnRPcGVuVGFnOiBvcHRpb25zLmNhbkJlTGVmdE9wZW5UYWcsXG4gICAgICBzaG91bGREZWNvZGVOZXdsaW5lczogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZjogb3B0aW9ucy5zaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWYsXG4gICAgICBzaG91bGRLZWVwQ29tbWVudDogb3B0aW9ucy5jb21tZW50cyxcbiAgICAgIG91dHB1dFNvdXJjZVJhbmdlOiBvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlLFxuICAgICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0ICh0YWcsIGF0dHJzLCB1bmFyeSwgc3RhcnQkMSwgZW5kKSB7XG4gICAgICAgIC8vIGNoZWNrIG5hbWVzcGFjZS5cbiAgICAgICAgLy8gaW5oZXJpdCBwYXJlbnQgbnMgaWYgdGhlcmUgaXMgb25lXG4gICAgICAgIHZhciBucyA9IChjdXJyZW50UGFyZW50ICYmIGN1cnJlbnRQYXJlbnQubnMpIHx8IHBsYXRmb3JtR2V0VGFnTmFtZXNwYWNlKHRhZyk7XG5cbiAgICAgICAgLy8gaGFuZGxlIElFIHN2ZyBidWdcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFICYmIG5zID09PSAnc3ZnJykge1xuICAgICAgICAgIGF0dHJzID0gZ3VhcmRJRVNWR0J1ZyhhdHRycyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZWxlbWVudCA9IGNyZWF0ZUFTVEVsZW1lbnQodGFnLCBhdHRycywgY3VycmVudFBhcmVudCk7XG4gICAgICAgIGlmIChucykge1xuICAgICAgICAgIGVsZW1lbnQubnMgPSBucztcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgZWxlbWVudC5zdGFydCA9IHN0YXJ0JDE7XG4gICAgICAgICAgICBlbGVtZW50LmVuZCA9IGVuZDtcbiAgICAgICAgICAgIGVsZW1lbnQucmF3QXR0cnNNYXAgPSBlbGVtZW50LmF0dHJzTGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGN1bXVsYXRlZCwgYXR0cikge1xuICAgICAgICAgICAgICBjdW11bGF0ZWRbYXR0ci5uYW1lXSA9IGF0dHI7XG4gICAgICAgICAgICAgIHJldHVybiBjdW11bGF0ZWRcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXR0cnMuZm9yRWFjaChmdW5jdGlvbiAoYXR0cikge1xuICAgICAgICAgICAgaWYgKGludmFsaWRBdHRyaWJ1dGVSRS50ZXN0KGF0dHIubmFtZSkpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBkeW5hbWljIGFyZ3VtZW50IGV4cHJlc3Npb246IGF0dHJpYnV0ZSBuYW1lcyBjYW5ub3QgY29udGFpbiBcIiArXG4gICAgICAgICAgICAgICAgXCJzcGFjZXMsIHF1b3RlcywgPCwgPiwgLyBvciA9LlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXJ0OiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmluZGV4T2YoXCJbXCIpLFxuICAgICAgICAgICAgICAgICAgZW5kOiBhdHRyLnN0YXJ0ICsgYXR0ci5uYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0ZvcmJpZGRlblRhZyhlbGVtZW50KSAmJiAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSkge1xuICAgICAgICAgIGVsZW1lbnQuZm9yYmlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAnVGVtcGxhdGVzIHNob3VsZCBvbmx5IGJlIHJlc3BvbnNpYmxlIGZvciBtYXBwaW5nIHRoZSBzdGF0ZSB0byB0aGUgJyArXG4gICAgICAgICAgICAnVUkuIEF2b2lkIHBsYWNpbmcgdGFncyB3aXRoIHNpZGUtZWZmZWN0cyBpbiB5b3VyIHRlbXBsYXRlcywgc3VjaCBhcyAnICtcbiAgICAgICAgICAgIFwiPFwiICsgdGFnICsgXCI+XCIgKyAnLCBhcyB0aGV5IHdpbGwgbm90IGJlIHBhcnNlZC4nLFxuICAgICAgICAgICAgeyBzdGFydDogZWxlbWVudC5zdGFydCB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGx5IHByZS10cmFuc2Zvcm1zXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlVHJhbnNmb3Jtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGVsZW1lbnQgPSBwcmVUcmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWluVlByZSkge1xuICAgICAgICAgIHByb2Nlc3NQcmUoZWxlbWVudCk7XG4gICAgICAgICAgaWYgKGVsZW1lbnQucHJlKSB7XG4gICAgICAgICAgICBpblZQcmUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhdGZvcm1Jc1ByZVRhZyhlbGVtZW50LnRhZykpIHtcbiAgICAgICAgICBpblByZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluVlByZSkge1xuICAgICAgICAgIHByb2Nlc3NSYXdBdHRycyhlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmICghZWxlbWVudC5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAvLyBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZXNcbiAgICAgICAgICBwcm9jZXNzRm9yKGVsZW1lbnQpO1xuICAgICAgICAgIHByb2Nlc3NJZihlbGVtZW50KTtcbiAgICAgICAgICBwcm9jZXNzT25jZShlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgIHJvb3QgPSBlbGVtZW50O1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrUm9vdENvbnN0cmFpbnRzKHJvb3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdW5hcnkpIHtcbiAgICAgICAgICBjdXJyZW50UGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICBzdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsb3NlRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZW5kOiBmdW5jdGlvbiBlbmQgKHRhZywgc3RhcnQsIGVuZCQxKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIC8vIHBvcCBzdGFja1xuICAgICAgICBzdGFjay5sZW5ndGggLT0gMTtcbiAgICAgICAgY3VycmVudFBhcmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgIGVsZW1lbnQuZW5kID0gZW5kJDE7XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgfSxcblxuICAgICAgY2hhcnM6IGZ1bmN0aW9uIGNoYXJzICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAgIGlmICghY3VycmVudFBhcmVudCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0ZXh0ID09PSB0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgICAnQ29tcG9uZW50IHRlbXBsYXRlIHJlcXVpcmVzIGEgcm9vdCBlbGVtZW50LCByYXRoZXIgdGhhbiBqdXN0IHRleHQuJyxcbiAgICAgICAgICAgICAgICB7IHN0YXJ0OiBzdGFydCB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCh0ZXh0ID0gdGV4dC50cmltKCkpKSB7XG4gICAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIChcInRleHQgXFxcIlwiICsgdGV4dCArIFwiXFxcIiBvdXRzaWRlIHJvb3QgZWxlbWVudCB3aWxsIGJlIGlnbm9yZWQuXCIpLFxuICAgICAgICAgICAgICAgIHsgc3RhcnQ6IHN0YXJ0IH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgLy8gSUUgdGV4dGFyZWEgcGxhY2Vob2xkZXIgYnVnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXNJRSAmJlxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQudGFnID09PSAndGV4dGFyZWEnICYmXG4gICAgICAgICAgY3VycmVudFBhcmVudC5hdHRyc01hcC5wbGFjZWhvbGRlciA9PT0gdGV4dFxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICB2YXIgY2hpbGRyZW4gPSBjdXJyZW50UGFyZW50LmNoaWxkcmVuO1xuICAgICAgICBpZiAoaW5QcmUgfHwgdGV4dC50cmltKCkpIHtcbiAgICAgICAgICB0ZXh0ID0gaXNUZXh0VGFnKGN1cnJlbnRQYXJlbnQpID8gdGV4dCA6IGRlY29kZUhUTUxDYWNoZWQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgd2hpdGVzcGFjZS1vbmx5IG5vZGUgcmlnaHQgYWZ0ZXIgYW4gb3BlbmluZyB0YWdcbiAgICAgICAgICB0ZXh0ID0gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAod2hpdGVzcGFjZU9wdGlvbikge1xuICAgICAgICAgIGlmICh3aGl0ZXNwYWNlT3B0aW9uID09PSAnY29uZGVuc2UnKSB7XG4gICAgICAgICAgICAvLyBpbiBjb25kZW5zZSBtb2RlLCByZW1vdmUgdGhlIHdoaXRlc3BhY2Ugbm9kZSBpZiBpdCBjb250YWluc1xuICAgICAgICAgICAgLy8gbGluZSBicmVhaywgb3RoZXJ3aXNlIGNvbmRlbnNlIHRvIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgICAgICB0ZXh0ID0gbGluZUJyZWFrUkUudGVzdCh0ZXh0KSA/ICcnIDogJyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0ID0gJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gcHJlc2VydmVXaGl0ZXNwYWNlID8gJyAnIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICBpZiAoIWluUHJlICYmIHdoaXRlc3BhY2VPcHRpb24gPT09ICdjb25kZW5zZScpIHtcbiAgICAgICAgICAgIC8vIGNvbmRlbnNlIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2VzIGludG8gc2luZ2xlIHNwYWNlXG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHdoaXRlc3BhY2VSRSQxLCAnICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgIHZhciBjaGlsZDtcbiAgICAgICAgICBpZiAoIWluVlByZSAmJiB0ZXh0ICE9PSAnICcgJiYgKHJlcyA9IHBhcnNlVGV4dCh0ZXh0LCBkZWxpbWl0ZXJzKSkpIHtcbiAgICAgICAgICAgIGNoaWxkID0ge1xuICAgICAgICAgICAgICB0eXBlOiAyLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiByZXMuZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgdG9rZW5zOiByZXMudG9rZW5zLFxuICAgICAgICAgICAgICB0ZXh0OiB0ZXh0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGV4dCAhPT0gJyAnIHx8ICFjaGlsZHJlbi5sZW5ndGggfHwgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udGV4dCAhPT0gJyAnKSB7XG4gICAgICAgICAgICBjaGlsZCA9IHtcbiAgICAgICAgICAgICAgdHlwZTogMyxcbiAgICAgICAgICAgICAgdGV4dDogdGV4dFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgICBjaGlsZC5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21tZW50OiBmdW5jdGlvbiBjb21tZW50ICh0ZXh0LCBzdGFydCwgZW5kKSB7XG4gICAgICAgIC8vIGFkZGluZyBhbnl0aW5nIGFzIGEgc2libGluZyB0byB0aGUgcm9vdCBub2RlIGlzIGZvcmJpZGRlblxuICAgICAgICAvLyBjb21tZW50cyBzaG91bGQgc3RpbGwgYmUgYWxsb3dlZCwgYnV0IGlnbm9yZWRcbiAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgICB2YXIgY2hpbGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAzLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICAgIGlzQ29tbWVudDogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG9wdGlvbnMub3V0cHV0U291cmNlUmFuZ2UpIHtcbiAgICAgICAgICAgIGNoaWxkLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICBjaGlsZC5lbmQgPSBlbmQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRQYXJlbnQuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm9vdFxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1ByZSAoZWwpIHtcbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtcHJlJykgIT0gbnVsbCkge1xuICAgICAgZWwucHJlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzUmF3QXR0cnMgKGVsKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgdmFyIGxlbiA9IGxpc3QubGVuZ3RoO1xuICAgIGlmIChsZW4pIHtcbiAgICAgIHZhciBhdHRycyA9IGVsLmF0dHJzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGF0dHJzW2ldID0ge1xuICAgICAgICAgIG5hbWU6IGxpc3RbaV0ubmFtZSxcbiAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkobGlzdFtpXS52YWx1ZSlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGxpc3RbaV0uc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgIGF0dHJzW2ldLnN0YXJ0ID0gbGlzdFtpXS5zdGFydDtcbiAgICAgICAgICBhdHRyc1tpXS5lbmQgPSBsaXN0W2ldLmVuZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWVsLnByZSkge1xuICAgICAgLy8gbm9uIHJvb3Qgbm9kZSBpbiBwcmUgYmxvY2tzIHdpdGggbm8gYXR0cmlidXRlc1xuICAgICAgZWwucGxhaW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NFbGVtZW50IChcbiAgICBlbGVtZW50LFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgcHJvY2Vzc0tleShlbGVtZW50KTtcblxuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoaXMgaXMgYSBwbGFpbiBlbGVtZW50IGFmdGVyXG4gICAgLy8gcmVtb3Zpbmcgc3RydWN0dXJhbCBhdHRyaWJ1dGVzXG4gICAgZWxlbWVudC5wbGFpbiA9IChcbiAgICAgICFlbGVtZW50LmtleSAmJlxuICAgICAgIWVsZW1lbnQuc2NvcGVkU2xvdHMgJiZcbiAgICAgICFlbGVtZW50LmF0dHJzTGlzdC5sZW5ndGhcbiAgICApO1xuXG4gICAgcHJvY2Vzc1JlZihlbGVtZW50KTtcbiAgICBwcm9jZXNzU2xvdENvbnRlbnQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc1Nsb3RPdXRsZXQoZWxlbWVudCk7XG4gICAgcHJvY2Vzc0NvbXBvbmVudChlbGVtZW50KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyYW5zZm9ybXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVsZW1lbnQgPSB0cmFuc2Zvcm1zW2ldKGVsZW1lbnQsIG9wdGlvbnMpIHx8IGVsZW1lbnQ7XG4gICAgfVxuICAgIHByb2Nlc3NBdHRycyhlbGVtZW50KTtcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0tleSAoZWwpIHtcbiAgICB2YXIgZXhwID0gZ2V0QmluZGluZ0F0dHIoZWwsICdrZXknKTtcbiAgICBpZiAoZXhwKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICBcIjx0ZW1wbGF0ZT4gY2Fubm90IGJlIGtleWVkLiBQbGFjZSB0aGUga2V5IG9uIHJlYWwgZWxlbWVudHMgaW5zdGVhZC5cIixcbiAgICAgICAgICAgIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbC5mb3IpIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBlbC5pdGVyYXRvcjIgfHwgZWwuaXRlcmF0b3IxO1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yICYmIGl0ZXJhdG9yID09PSBleHAgJiYgcGFyZW50ICYmIHBhcmVudC50YWcgPT09ICd0cmFuc2l0aW9uLWdyb3VwJykge1xuICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICBcIkRvIG5vdCB1c2Ugdi1mb3IgaW5kZXggYXMga2V5IG9uIDx0cmFuc2l0aW9uLWdyb3VwPiBjaGlsZHJlbiwgXCIgK1xuICAgICAgICAgICAgICBcInRoaXMgaXMgdGhlIHNhbWUgYXMgbm90IHVzaW5nIGtleXMuXCIsXG4gICAgICAgICAgICAgIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAna2V5JyksXG4gICAgICAgICAgICAgIHRydWUgLyogdGlwICovXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWwua2V5ID0gZXhwO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NSZWYgKGVsKSB7XG4gICAgdmFyIHJlZiA9IGdldEJpbmRpbmdBdHRyKGVsLCAncmVmJyk7XG4gICAgaWYgKHJlZikge1xuICAgICAgZWwucmVmID0gcmVmO1xuICAgICAgZWwucmVmSW5Gb3IgPSBjaGVja0luRm9yKGVsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzRm9yIChlbCkge1xuICAgIHZhciBleHA7XG4gICAgaWYgKChleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1mb3InKSkpIHtcbiAgICAgIHZhciByZXMgPSBwYXJzZUZvcihleHApO1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICBleHRlbmQoZWwsIHJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgKFwiSW52YWxpZCB2LWZvciBleHByZXNzaW9uOiBcIiArIGV4cCksXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG5cbiAgZnVuY3Rpb24gcGFyc2VGb3IgKGV4cCkge1xuICAgIHZhciBpbk1hdGNoID0gZXhwLm1hdGNoKGZvckFsaWFzUkUpO1xuICAgIGlmICghaW5NYXRjaCkgeyByZXR1cm4gfVxuICAgIHZhciByZXMgPSB7fTtcbiAgICByZXMuZm9yID0gaW5NYXRjaFsyXS50cmltKCk7XG4gICAgdmFyIGFsaWFzID0gaW5NYXRjaFsxXS50cmltKCkucmVwbGFjZShzdHJpcFBhcmVuc1JFLCAnJyk7XG4gICAgdmFyIGl0ZXJhdG9yTWF0Y2ggPSBhbGlhcy5tYXRjaChmb3JJdGVyYXRvclJFKTtcbiAgICBpZiAoaXRlcmF0b3JNYXRjaCkge1xuICAgICAgcmVzLmFsaWFzID0gYWxpYXMucmVwbGFjZShmb3JJdGVyYXRvclJFLCAnJykudHJpbSgpO1xuICAgICAgcmVzLml0ZXJhdG9yMSA9IGl0ZXJhdG9yTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgaWYgKGl0ZXJhdG9yTWF0Y2hbMl0pIHtcbiAgICAgICAgcmVzLml0ZXJhdG9yMiA9IGl0ZXJhdG9yTWF0Y2hbMl0udHJpbSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMuYWxpYXMgPSBhbGlhcztcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0lmIChlbCkge1xuICAgIHZhciBleHAgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicpO1xuICAgIGlmIChleHApIHtcbiAgICAgIGVsLmlmID0gZXhwO1xuICAgICAgYWRkSWZDb25kaXRpb24oZWwsIHtcbiAgICAgICAgZXhwOiBleHAsXG4gICAgICAgIGJsb2NrOiBlbFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlJykgIT0gbnVsbCkge1xuICAgICAgICBlbC5lbHNlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBlbHNlaWYgPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJyk7XG4gICAgICBpZiAoZWxzZWlmKSB7XG4gICAgICAgIGVsLmVsc2VpZiA9IGVsc2VpZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzSWZDb25kaXRpb25zIChlbCwgcGFyZW50KSB7XG4gICAgdmFyIHByZXYgPSBmaW5kUHJldkVsZW1lbnQocGFyZW50LmNoaWxkcmVuKTtcbiAgICBpZiAocHJldiAmJiBwcmV2LmlmKSB7XG4gICAgICBhZGRJZkNvbmRpdGlvbihwcmV2LCB7XG4gICAgICAgIGV4cDogZWwuZWxzZWlmLFxuICAgICAgICBibG9jazogZWxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuJDIoXG4gICAgICAgIFwidi1cIiArIChlbC5lbHNlaWYgPyAoJ2Vsc2UtaWY9XCInICsgZWwuZWxzZWlmICsgJ1wiJykgOiAnZWxzZScpICsgXCIgXCIgK1xuICAgICAgICBcInVzZWQgb24gZWxlbWVudCA8XCIgKyAoZWwudGFnKSArIFwiPiB3aXRob3V0IGNvcnJlc3BvbmRpbmcgdi1pZi5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbZWwuZWxzZWlmID8gJ3YtZWxzZS1pZicgOiAndi1lbHNlJ11cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZFByZXZFbGVtZW50IChjaGlsZHJlbikge1xuICAgIHZhciBpID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGlmIChjaGlsZHJlbltpXS50eXBlID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlbltpXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuW2ldLnRleHQgIT09ICcgJykge1xuICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgIFwidGV4dCBcXFwiXCIgKyAoY2hpbGRyZW5baV0udGV4dC50cmltKCkpICsgXCJcXFwiIGJldHdlZW4gdi1pZiBhbmQgdi1lbHNlKC1pZikgXCIgK1xuICAgICAgICAgICAgXCJ3aWxsIGJlIGlnbm9yZWQuXCIsXG4gICAgICAgICAgICBjaGlsZHJlbltpXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRyZW4ucG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkSWZDb25kaXRpb24gKGVsLCBjb25kaXRpb24pIHtcbiAgICBpZiAoIWVsLmlmQ29uZGl0aW9ucykge1xuICAgICAgZWwuaWZDb25kaXRpb25zID0gW107XG4gICAgfVxuICAgIGVsLmlmQ29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzT25jZSAoZWwpIHtcbiAgICB2YXIgb25jZSQkMSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICd2LW9uY2UnKTtcbiAgICBpZiAob25jZSQkMSAhPSBudWxsKSB7XG4gICAgICBlbC5vbmNlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBoYW5kbGUgY29udGVudCBiZWluZyBwYXNzZWQgdG8gYSBjb21wb25lbnQgYXMgc2xvdCxcbiAgLy8gZS5nLiA8dGVtcGxhdGUgc2xvdD1cInh4eFwiPiwgPGRpdiBzbG90LXNjb3BlPVwieHh4XCI+XG4gIGZ1bmN0aW9uIHByb2Nlc3NTbG90Q29udGVudCAoZWwpIHtcbiAgICB2YXIgc2xvdFNjb3BlO1xuICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIHNsb3RTY29wZSA9IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzY29wZScpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoc2xvdFNjb3BlKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcInRoZSBcXFwic2NvcGVcXFwiIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIHNsb3RzIGhhdmUgYmVlbiBkZXByZWNhdGVkIGFuZCBcIiArXG4gICAgICAgICAgXCJyZXBsYWNlZCBieSBcXFwic2xvdC1zY29wZVxcXCIgc2luY2UgMi41LiBUaGUgbmV3IFxcXCJzbG90LXNjb3BlXFxcIiBhdHRyaWJ1dGUgXCIgK1xuICAgICAgICAgIFwiY2FuIGFsc28gYmUgdXNlZCBvbiBwbGFpbiBlbGVtZW50cyBpbiBhZGRpdGlvbiB0byA8dGVtcGxhdGU+IHRvIFwiICtcbiAgICAgICAgICBcImRlbm90ZSBzY29wZWQgc2xvdHMuXCIsXG4gICAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3Njb3BlJ10sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlIHx8IGdldEFuZFJlbW92ZUF0dHIoZWwsICdzbG90LXNjb3BlJyk7XG4gICAgfSBlbHNlIGlmICgoc2xvdFNjb3BlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3Nsb3Qtc2NvcGUnKSkpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGVsLmF0dHJzTWFwWyd2LWZvciddKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcIkFtYmlndW91cyBjb21iaW5lZCB1c2FnZSBvZiBzbG90LXNjb3BlIGFuZCB2LWZvciBvbiA8XCIgKyAoZWwudGFnKSArIFwiPiBcIiArXG4gICAgICAgICAgXCIodi1mb3IgdGFrZXMgaGlnaGVyIHByaW9yaXR5KS4gVXNlIGEgd3JhcHBlciA8dGVtcGxhdGU+IGZvciB0aGUgXCIgK1xuICAgICAgICAgIFwic2NvcGVkIHNsb3QgdG8gbWFrZSBpdCBjbGVhcmVyLlwiLFxuICAgICAgICAgIGVsLnJhd0F0dHJzTWFwWydzbG90LXNjb3BlJ10sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdFNjb3BlO1xuICAgIH1cblxuICAgIC8vIHNsb3Q9XCJ4eHhcIlxuICAgIHZhciBzbG90VGFyZ2V0ID0gZ2V0QmluZGluZ0F0dHIoZWwsICdzbG90Jyk7XG4gICAgaWYgKHNsb3RUYXJnZXQpIHtcbiAgICAgIGVsLnNsb3RUYXJnZXQgPSBzbG90VGFyZ2V0ID09PSAnXCJcIicgPyAnXCJkZWZhdWx0XCInIDogc2xvdFRhcmdldDtcbiAgICAgIGVsLnNsb3RUYXJnZXREeW5hbWljID0gISEoZWwuYXR0cnNNYXBbJzpzbG90J10gfHwgZWwuYXR0cnNNYXBbJ3YtYmluZDpzbG90J10pO1xuICAgICAgLy8gcHJlc2VydmUgc2xvdCBhcyBhbiBhdHRyaWJ1dGUgZm9yIG5hdGl2ZSBzaGFkb3cgRE9NIGNvbXBhdFxuICAgICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90cy5cbiAgICAgIGlmIChlbC50YWcgIT09ICd0ZW1wbGF0ZScgJiYgIWVsLnNsb3RTY29wZSkge1xuICAgICAgICBhZGRBdHRyKGVsLCAnc2xvdCcsIHNsb3RUYXJnZXQsIGdldFJhd0JpbmRpbmdBdHRyKGVsLCAnc2xvdCcpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAyLjYgdi1zbG90IHN5bnRheFxuICAgIHtcbiAgICAgIGlmIChlbC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgLy8gdi1zbG90IG9uIDx0ZW1wbGF0ZT5cbiAgICAgICAgdmFyIHNsb3RCaW5kaW5nID0gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIHNsb3RSRSk7XG4gICAgICAgIGlmIChzbG90QmluZGluZykge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChlbC5zbG90VGFyZ2V0IHx8IGVsLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwucGFyZW50ICYmICFtYXliZUNvbXBvbmVudChlbC5wYXJlbnQpKSB7XG4gICAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgICBcIjx0ZW1wbGF0ZSB2LXNsb3Q+IGNhbiBvbmx5IGFwcGVhciBhdCB0aGUgcm9vdCBsZXZlbCBpbnNpZGUgXCIgK1xuICAgICAgICAgICAgICAgIFwidGhlIHJlY2VpdmluZyBjb21wb25lbnRcIixcbiAgICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcmVmID0gZ2V0U2xvdE5hbWUoc2xvdEJpbmRpbmcpO1xuICAgICAgICAgIHZhciBuYW1lID0gcmVmLm5hbWU7XG4gICAgICAgICAgdmFyIGR5bmFtaWMgPSByZWYuZHluYW1pYztcbiAgICAgICAgICBlbC5zbG90VGFyZ2V0ID0gbmFtZTtcbiAgICAgICAgICBlbC5zbG90VGFyZ2V0RHluYW1pYyA9IGR5bmFtaWM7XG4gICAgICAgICAgZWwuc2xvdFNjb3BlID0gc2xvdEJpbmRpbmcudmFsdWUgfHwgZW1wdHlTbG90U2NvcGVUb2tlbjsgLy8gZm9yY2UgaXQgaW50byBhIHNjb3BlZCBzbG90IGZvciBwZXJmXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHYtc2xvdCBvbiBjb21wb25lbnQsIGRlbm90ZXMgZGVmYXVsdCBzbG90XG4gICAgICAgIHZhciBzbG90QmluZGluZyQxID0gZ2V0QW5kUmVtb3ZlQXR0ckJ5UmVnZXgoZWwsIHNsb3RSRSk7XG4gICAgICAgIGlmIChzbG90QmluZGluZyQxKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFtYXliZUNvbXBvbmVudChlbCkpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICAgIFwidi1zbG90IGNhbiBvbmx5IGJlIHVzZWQgb24gY29tcG9uZW50cyBvciA8dGVtcGxhdGU+LlwiLFxuICAgICAgICAgICAgICAgIHNsb3RCaW5kaW5nJDFcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbC5zbG90U2NvcGUgfHwgZWwuc2xvdFRhcmdldCkge1xuICAgICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgICAgXCJVbmV4cGVjdGVkIG1peGVkIHVzYWdlIG9mIGRpZmZlcmVudCBzbG90IHN5bnRheGVzLlwiLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWwuc2NvcGVkU2xvdHMpIHtcbiAgICAgICAgICAgICAgd2FybiQyKFxuICAgICAgICAgICAgICAgIFwiVG8gYXZvaWQgc2NvcGUgYW1iaWd1aXR5LCB0aGUgZGVmYXVsdCBzbG90IHNob3VsZCBhbHNvIHVzZSBcIiArXG4gICAgICAgICAgICAgICAgXCI8dGVtcGxhdGU+IHN5bnRheCB3aGVuIHRoZXJlIGFyZSBvdGhlciBuYW1lZCBzbG90cy5cIixcbiAgICAgICAgICAgICAgICBzbG90QmluZGluZyQxXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGFkZCB0aGUgY29tcG9uZW50J3MgY2hpbGRyZW4gdG8gaXRzIGRlZmF1bHQgc2xvdFxuICAgICAgICAgIHZhciBzbG90cyA9IGVsLnNjb3BlZFNsb3RzIHx8IChlbC5zY29wZWRTbG90cyA9IHt9KTtcbiAgICAgICAgICB2YXIgcmVmJDEgPSBnZXRTbG90TmFtZShzbG90QmluZGluZyQxKTtcbiAgICAgICAgICB2YXIgbmFtZSQxID0gcmVmJDEubmFtZTtcbiAgICAgICAgICB2YXIgZHluYW1pYyQxID0gcmVmJDEuZHluYW1pYztcbiAgICAgICAgICB2YXIgc2xvdENvbnRhaW5lciA9IHNsb3RzW25hbWUkMV0gPSBjcmVhdGVBU1RFbGVtZW50KCd0ZW1wbGF0ZScsIFtdLCBlbCk7XG4gICAgICAgICAgc2xvdENvbnRhaW5lci5zbG90VGFyZ2V0ID0gbmFtZSQxO1xuICAgICAgICAgIHNsb3RDb250YWluZXIuc2xvdFRhcmdldER5bmFtaWMgPSBkeW5hbWljJDE7XG4gICAgICAgICAgc2xvdENvbnRhaW5lci5jaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgaWYgKCFjLnNsb3RTY29wZSkge1xuICAgICAgICAgICAgICBjLnBhcmVudCA9IHNsb3RDb250YWluZXI7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2xvdENvbnRhaW5lci5zbG90U2NvcGUgPSBzbG90QmluZGluZyQxLnZhbHVlIHx8IGVtcHR5U2xvdFNjb3BlVG9rZW47XG4gICAgICAgICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGFzIHRoZXkgYXJlIHJldHVybmVkIGZyb20gc2NvcGVkU2xvdHMgbm93XG4gICAgICAgICAgZWwuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAvLyBtYXJrIGVsIG5vbi1wbGFpbiBzbyBkYXRhIGdldHMgZ2VuZXJhdGVkXG4gICAgICAgICAgZWwucGxhaW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNsb3ROYW1lIChiaW5kaW5nKSB7XG4gICAgdmFyIG5hbWUgPSBiaW5kaW5nLm5hbWUucmVwbGFjZShzbG90UkUsICcnKTtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIGlmIChiaW5kaW5nLm5hbWVbMF0gIT09ICcjJykge1xuICAgICAgICBuYW1lID0gJ2RlZmF1bHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgIFwidi1zbG90IHNob3J0aGFuZCBzeW50YXggcmVxdWlyZXMgYSBzbG90IG5hbWUuXCIsXG4gICAgICAgICAgYmluZGluZ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSlcbiAgICAgIC8vIGR5bmFtaWMgW25hbWVdXG4gICAgICA/IHsgbmFtZTogbmFtZS5zbGljZSgxLCAtMSksIGR5bmFtaWM6IHRydWUgfVxuICAgICAgLy8gc3RhdGljIG5hbWVcbiAgICAgIDogeyBuYW1lOiAoXCJcXFwiXCIgKyBuYW1lICsgXCJcXFwiXCIpLCBkeW5hbWljOiBmYWxzZSB9XG4gIH1cblxuICAvLyBoYW5kbGUgPHNsb3QvPiBvdXRsZXRzXG4gIGZ1bmN0aW9uIHByb2Nlc3NTbG90T3V0bGV0IChlbCkge1xuICAgIGlmIChlbC50YWcgPT09ICdzbG90Jykge1xuICAgICAgZWwuc2xvdE5hbWUgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ25hbWUnKTtcbiAgICAgIGlmIChlbC5rZXkpIHtcbiAgICAgICAgd2FybiQyKFxuICAgICAgICAgIFwiYGtleWAgZG9lcyBub3Qgd29yayBvbiA8c2xvdD4gYmVjYXVzZSBzbG90cyBhcmUgYWJzdHJhY3Qgb3V0bGV0cyBcIiArXG4gICAgICAgICAgXCJhbmQgY2FuIHBvc3NpYmx5IGV4cGFuZCBpbnRvIG11bHRpcGxlIGVsZW1lbnRzLiBcIiArXG4gICAgICAgICAgXCJVc2UgdGhlIGtleSBvbiBhIHdyYXBwaW5nIGVsZW1lbnQgaW5zdGVhZC5cIixcbiAgICAgICAgICBnZXRSYXdCaW5kaW5nQXR0cihlbCwgJ2tleScpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0NvbXBvbmVudCAoZWwpIHtcbiAgICB2YXIgYmluZGluZztcbiAgICBpZiAoKGJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ2lzJykpKSB7XG4gICAgICBlbC5jb21wb25lbnQgPSBiaW5kaW5nO1xuICAgIH1cbiAgICBpZiAoZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ2lubGluZS10ZW1wbGF0ZScpICE9IG51bGwpIHtcbiAgICAgIGVsLmlubGluZVRlbXBsYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzQXR0cnMgKGVsKSB7XG4gICAgdmFyIGxpc3QgPSBlbC5hdHRyc0xpc3Q7XG4gICAgdmFyIGksIGwsIG5hbWUsIHJhd05hbWUsIHZhbHVlLCBtb2RpZmllcnMsIHN5bmNHZW4sIGlzRHluYW1pYztcbiAgICBmb3IgKGkgPSAwLCBsID0gbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG5hbWUgPSByYXdOYW1lID0gbGlzdFtpXS5uYW1lO1xuICAgICAgdmFsdWUgPSBsaXN0W2ldLnZhbHVlO1xuICAgICAgaWYgKGRpclJFLnRlc3QobmFtZSkpIHtcbiAgICAgICAgLy8gbWFyayBlbGVtZW50IGFzIGR5bmFtaWNcbiAgICAgICAgZWwuaGFzQmluZGluZ3MgPSB0cnVlO1xuICAgICAgICAvLyBtb2RpZmllcnNcbiAgICAgICAgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllcnMobmFtZS5yZXBsYWNlKGRpclJFLCAnJykpO1xuICAgICAgICAvLyBzdXBwb3J0IC5mb28gc2hvcnRoYW5kIHN5bnRheCBmb3IgdGhlIC5wcm9wIG1vZGlmaWVyXG4gICAgICAgIGlmIChtb2RpZmllcnMpIHtcbiAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKG1vZGlmaWVyUkUsICcnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmluZFJFLnRlc3QobmFtZSkpIHsgLy8gdi1iaW5kXG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShiaW5kUkUsICcnKTtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmlsdGVycyh2YWx1ZSk7XG4gICAgICAgICAgaXNEeW5hbWljID0gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSk7XG4gICAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB3YXJuJDIoXG4gICAgICAgICAgICAgIChcIlRoZSB2YWx1ZSBmb3IgYSB2LWJpbmQgZXhwcmVzc2lvbiBjYW5ub3QgYmUgZW1wdHkuIEZvdW5kIGluIFxcXCJ2LWJpbmQ6XCIgKyBuYW1lICsgXCJcXFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLnByb3AgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICAgIGlmIChuYW1lID09PSAnaW5uZXJIdG1sJykgeyBuYW1lID0gJ2lubmVySFRNTCc7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb2RpZmllcnMuY2FtZWwgJiYgIWlzRHluYW1pYykge1xuICAgICAgICAgICAgICBuYW1lID0gY2FtZWxpemUobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9kaWZpZXJzLnN5bmMpIHtcbiAgICAgICAgICAgICAgc3luY0dlbiA9IGdlbkFzc2lnbm1lbnRDb2RlKHZhbHVlLCBcIiRldmVudFwiKTtcbiAgICAgICAgICAgICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAoXCJ1cGRhdGU6XCIgKyAoY2FtZWxpemUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgICBsaXN0W2ldXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoaHlwaGVuYXRlKG5hbWUpICE9PSBjYW1lbGl6ZShuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgYWRkSGFuZGxlcihcbiAgICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAgIChcInVwZGF0ZTpcIiArIChoeXBoZW5hdGUobmFtZSkpKSxcbiAgICAgICAgICAgICAgICAgICAgc3luY0dlbixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHdhcm4kMixcbiAgICAgICAgICAgICAgICAgICAgbGlzdFtpXVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlciB3LyBkeW5hbWljIGV2ZW50IG5hbWVcbiAgICAgICAgICAgICAgICBhZGRIYW5kbGVyKFxuICAgICAgICAgICAgICAgICAgZWwsXG4gICAgICAgICAgICAgICAgICAoXCJcXFwidXBkYXRlOlxcXCIrKFwiICsgbmFtZSArIFwiKVwiKSxcbiAgICAgICAgICAgICAgICAgIHN5bmNHZW4sXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgICB3YXJuJDIsXG4gICAgICAgICAgICAgICAgICBsaXN0W2ldLFxuICAgICAgICAgICAgICAgICAgdHJ1ZSAvLyBkeW5hbWljXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKG1vZGlmaWVycyAmJiBtb2RpZmllcnMucHJvcCkgfHwgKFxuICAgICAgICAgICAgIWVsLmNvbXBvbmVudCAmJiBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSlcbiAgICAgICAgICApKSB7XG4gICAgICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCB2YWx1ZSwgbGlzdFtpXSwgaXNEeW5hbWljKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkQXR0cihlbCwgbmFtZSwgdmFsdWUsIGxpc3RbaV0sIGlzRHluYW1pYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9uUkUudGVzdChuYW1lKSkgeyAvLyB2LW9uXG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShvblJFLCAnJyk7XG4gICAgICAgICAgaXNEeW5hbWljID0gZHluYW1pY0FyZ1JFLnRlc3QobmFtZSk7XG4gICAgICAgICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZGRIYW5kbGVyKGVsLCBuYW1lLCB2YWx1ZSwgbW9kaWZpZXJzLCBmYWxzZSwgd2FybiQyLCBsaXN0W2ldLCBpc0R5bmFtaWMpO1xuICAgICAgICB9IGVsc2UgeyAvLyBub3JtYWwgZGlyZWN0aXZlc1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoZGlyUkUsICcnKTtcbiAgICAgICAgICAvLyBwYXJzZSBhcmdcbiAgICAgICAgICB2YXIgYXJnTWF0Y2ggPSBuYW1lLm1hdGNoKGFyZ1JFKTtcbiAgICAgICAgICB2YXIgYXJnID0gYXJnTWF0Y2ggJiYgYXJnTWF0Y2hbMV07XG4gICAgICAgICAgaXNEeW5hbWljID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGFyZykge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgLShhcmcubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgaWYgKGR5bmFtaWNBcmdSRS50ZXN0KGFyZykpIHtcbiAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkRGlyZWN0aXZlKGVsLCBuYW1lLCByYXdOYW1lLCB2YWx1ZSwgYXJnLCBpc0R5bmFtaWMsIG1vZGlmaWVycywgbGlzdFtpXSk7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICdtb2RlbCcpIHtcbiAgICAgICAgICAgIGNoZWNrRm9yQWxpYXNNb2RlbChlbCwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGl0ZXJhbCBhdHRyaWJ1dGVcbiAgICAgICAge1xuICAgICAgICAgIHZhciByZXMgPSBwYXJzZVRleHQodmFsdWUsIGRlbGltaXRlcnMpO1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHdhcm4kMihcbiAgICAgICAgICAgICAgbmFtZSArIFwiPVxcXCJcIiArIHZhbHVlICsgXCJcXFwiOiBcIiArXG4gICAgICAgICAgICAgICdJbnRlcnBvbGF0aW9uIGluc2lkZSBhdHRyaWJ1dGVzIGhhcyBiZWVuIHJlbW92ZWQuICcgK1xuICAgICAgICAgICAgICAnVXNlIHYtYmluZCBvciB0aGUgY29sb24gc2hvcnRoYW5kIGluc3RlYWQuIEZvciBleGFtcGxlLCAnICtcbiAgICAgICAgICAgICAgJ2luc3RlYWQgb2YgPGRpdiBpZD1cInt7IHZhbCB9fVwiPiwgdXNlIDxkaXYgOmlkPVwidmFsXCI+LicsXG4gICAgICAgICAgICAgIGxpc3RbaV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFkZEF0dHIoZWwsIG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSwgbGlzdFtpXSk7XG4gICAgICAgIC8vICM2ODg3IGZpcmVmb3ggZG9lc24ndCB1cGRhdGUgbXV0ZWQgc3RhdGUgaWYgc2V0IHZpYSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gZXZlbiBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNyZWF0aW9uXG4gICAgICAgIGlmICghZWwuY29tcG9uZW50ICYmXG4gICAgICAgICAgICBuYW1lID09PSAnbXV0ZWQnICYmXG4gICAgICAgICAgICBwbGF0Zm9ybU11c3RVc2VQcm9wKGVsLnRhZywgZWwuYXR0cnNNYXAudHlwZSwgbmFtZSkpIHtcbiAgICAgICAgICBhZGRQcm9wKGVsLCBuYW1lLCAndHJ1ZScsIGxpc3RbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tJbkZvciAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gZWw7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgaWYgKHBhcmVudC5mb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vZGlmaWVycyAobmFtZSkge1xuICAgIHZhciBtYXRjaCA9IG5hbWUubWF0Y2gobW9kaWZpZXJSRSk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG4gICAgICBtYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7IHJldFttLnNsaWNlKDEpXSA9IHRydWU7IH0pO1xuICAgICAgcmV0dXJuIHJldFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VBdHRyc01hcCAoYXR0cnMpIHtcbiAgICB2YXIgbWFwID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhdHRycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbWFwW2F0dHJzW2ldLm5hbWVdICYmICFpc0lFICYmICFpc0VkZ2VcbiAgICAgICkge1xuICAgICAgICB3YXJuJDIoJ2R1cGxpY2F0ZSBhdHRyaWJ1dGU6ICcgKyBhdHRyc1tpXS5uYW1lLCBhdHRyc1tpXSk7XG4gICAgICB9XG4gICAgICBtYXBbYXR0cnNbaV0ubmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcFxuICB9XG5cbiAgLy8gZm9yIHNjcmlwdCAoZS5nLiB0eXBlPVwieC90ZW1wbGF0ZVwiKSBvciBzdHlsZSwgZG8gbm90IGRlY29kZSBjb250ZW50XG4gIGZ1bmN0aW9uIGlzVGV4dFRhZyAoZWwpIHtcbiAgICByZXR1cm4gZWwudGFnID09PSAnc2NyaXB0JyB8fCBlbC50YWcgPT09ICdzdHlsZSdcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRm9yYmlkZGVuVGFnIChlbCkge1xuICAgIHJldHVybiAoXG4gICAgICBlbC50YWcgPT09ICdzdHlsZScgfHxcbiAgICAgIChlbC50YWcgPT09ICdzY3JpcHQnICYmIChcbiAgICAgICAgIWVsLmF0dHJzTWFwLnR5cGUgfHxcbiAgICAgICAgZWwuYXR0cnNNYXAudHlwZSA9PT0gJ3RleHQvamF2YXNjcmlwdCdcbiAgICAgICkpXG4gICAgKVxuICB9XG5cbiAgdmFyIGllTlNCdWcgPSAvXnhtbG5zOk5TXFxkKy87XG4gIHZhciBpZU5TUHJlZml4ID0gL15OU1xcZCs6LztcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiBndWFyZElFU1ZHQnVnIChhdHRycykge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYXR0ciA9IGF0dHJzW2ldO1xuICAgICAgaWYgKCFpZU5TQnVnLnRlc3QoYXR0ci5uYW1lKSkge1xuICAgICAgICBhdHRyLm5hbWUgPSBhdHRyLm5hbWUucmVwbGFjZShpZU5TUHJlZml4LCAnJyk7XG4gICAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0ZvckFsaWFzTW9kZWwgKGVsLCB2YWx1ZSkge1xuICAgIHZhciBfZWwgPSBlbDtcbiAgICB3aGlsZSAoX2VsKSB7XG4gICAgICBpZiAoX2VsLmZvciAmJiBfZWwuYWxpYXMgPT09IHZhbHVlKSB7XG4gICAgICAgIHdhcm4kMihcbiAgICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1tb2RlbD1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIj46IFwiICtcbiAgICAgICAgICBcIllvdSBhcmUgYmluZGluZyB2LW1vZGVsIGRpcmVjdGx5IHRvIGEgdi1mb3IgaXRlcmF0aW9uIGFsaWFzLiBcIiArXG4gICAgICAgICAgXCJUaGlzIHdpbGwgbm90IGJlIGFibGUgdG8gbW9kaWZ5IHRoZSB2LWZvciBzb3VyY2UgYXJyYXkgYmVjYXVzZSBcIiArXG4gICAgICAgICAgXCJ3cml0aW5nIHRvIHRoZSBhbGlhcyBpcyBsaWtlIG1vZGlmeWluZyBhIGZ1bmN0aW9uIGxvY2FsIHZhcmlhYmxlLiBcIiArXG4gICAgICAgICAgXCJDb25zaWRlciB1c2luZyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCB1c2Ugdi1tb2RlbCBvbiBhbiBvYmplY3QgcHJvcGVydHkgaW5zdGVhZC5cIixcbiAgICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1tb2RlbCddXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBfZWwgPSBfZWwucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHByZVRyYW5zZm9ybU5vZGUgKGVsLCBvcHRpb25zKSB7XG4gICAgaWYgKGVsLnRhZyA9PT0gJ2lucHV0Jykge1xuICAgICAgdmFyIG1hcCA9IGVsLmF0dHJzTWFwO1xuICAgICAgaWYgKCFtYXBbJ3YtbW9kZWwnXSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdmFyIHR5cGVCaW5kaW5nO1xuICAgICAgaWYgKG1hcFsnOnR5cGUnXSB8fCBtYXBbJ3YtYmluZDp0eXBlJ10pIHtcbiAgICAgICAgdHlwZUJpbmRpbmcgPSBnZXRCaW5kaW5nQXR0cihlbCwgJ3R5cGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghbWFwLnR5cGUgJiYgIXR5cGVCaW5kaW5nICYmIG1hcFsndi1iaW5kJ10pIHtcbiAgICAgICAgdHlwZUJpbmRpbmcgPSBcIihcIiArIChtYXBbJ3YtYmluZCddKSArIFwiKS50eXBlXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlQmluZGluZykge1xuICAgICAgICB2YXIgaWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1pZicsIHRydWUpO1xuICAgICAgICB2YXIgaWZDb25kaXRpb25FeHRyYSA9IGlmQ29uZGl0aW9uID8gKFwiJiYoXCIgKyBpZkNvbmRpdGlvbiArIFwiKVwiKSA6IFwiXCI7XG4gICAgICAgIHZhciBoYXNFbHNlID0gZ2V0QW5kUmVtb3ZlQXR0cihlbCwgJ3YtZWxzZScsIHRydWUpICE9IG51bGw7XG4gICAgICAgIHZhciBlbHNlSWZDb25kaXRpb24gPSBnZXRBbmRSZW1vdmVBdHRyKGVsLCAndi1lbHNlLWlmJywgdHJ1ZSk7XG4gICAgICAgIC8vIDEuIGNoZWNrYm94XG4gICAgICAgIHZhciBicmFuY2gwID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgLy8gcHJvY2VzcyBmb3Igb24gdGhlIG1haW4gbm9kZVxuICAgICAgICBwcm9jZXNzRm9yKGJyYW5jaDApO1xuICAgICAgICBhZGRSYXdBdHRyKGJyYW5jaDAsICd0eXBlJywgJ2NoZWNrYm94Jyk7XG4gICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDAsIG9wdGlvbnMpO1xuICAgICAgICBicmFuY2gwLnByb2Nlc3NlZCA9IHRydWU7IC8vIHByZXZlbnQgaXQgZnJvbSBkb3VibGUtcHJvY2Vzc2VkXG4gICAgICAgIGJyYW5jaDAuaWYgPSBcIihcIiArIHR5cGVCaW5kaW5nICsgXCIpPT09J2NoZWNrYm94J1wiICsgaWZDb25kaXRpb25FeHRyYTtcbiAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgIGV4cDogYnJhbmNoMC5pZixcbiAgICAgICAgICBibG9jazogYnJhbmNoMFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gMi4gYWRkIHJhZGlvIGVsc2UtaWYgY29uZGl0aW9uXG4gICAgICAgIHZhciBicmFuY2gxID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gxLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgYWRkUmF3QXR0cihicmFuY2gxLCAndHlwZScsICdyYWRpbycpO1xuICAgICAgICBwcm9jZXNzRWxlbWVudChicmFuY2gxLCBvcHRpb25zKTtcbiAgICAgICAgYWRkSWZDb25kaXRpb24oYnJhbmNoMCwge1xuICAgICAgICAgIGV4cDogXCIoXCIgKyB0eXBlQmluZGluZyArIFwiKT09PSdyYWRpbydcIiArIGlmQ29uZGl0aW9uRXh0cmEsXG4gICAgICAgICAgYmxvY2s6IGJyYW5jaDFcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDMuIG90aGVyXG4gICAgICAgIHZhciBicmFuY2gyID0gY2xvbmVBU1RFbGVtZW50KGVsKTtcbiAgICAgICAgZ2V0QW5kUmVtb3ZlQXR0cihicmFuY2gyLCAndi1mb3InLCB0cnVlKTtcbiAgICAgICAgYWRkUmF3QXR0cihicmFuY2gyLCAnOnR5cGUnLCB0eXBlQmluZGluZyk7XG4gICAgICAgIHByb2Nlc3NFbGVtZW50KGJyYW5jaDIsIG9wdGlvbnMpO1xuICAgICAgICBhZGRJZkNvbmRpdGlvbihicmFuY2gwLCB7XG4gICAgICAgICAgZXhwOiBpZkNvbmRpdGlvbixcbiAgICAgICAgICBibG9jazogYnJhbmNoMlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaGFzRWxzZSkge1xuICAgICAgICAgIGJyYW5jaDAuZWxzZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxzZUlmQ29uZGl0aW9uKSB7XG4gICAgICAgICAgYnJhbmNoMC5lbHNlaWYgPSBlbHNlSWZDb25kaXRpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnJhbmNoMFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lQVNURWxlbWVudCAoZWwpIHtcbiAgICByZXR1cm4gY3JlYXRlQVNURWxlbWVudChlbC50YWcsIGVsLmF0dHJzTGlzdC5zbGljZSgpLCBlbC5wYXJlbnQpXG4gIH1cblxuICB2YXIgbW9kZWwkMSA9IHtcbiAgICBwcmVUcmFuc2Zvcm1Ob2RlOiBwcmVUcmFuc2Zvcm1Ob2RlXG4gIH07XG5cbiAgdmFyIG1vZHVsZXMkMSA9IFtcbiAgICBrbGFzcyQxLFxuICAgIHN0eWxlJDEsXG4gICAgbW9kZWwkMVxuICBdO1xuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIHRleHQgKGVsLCBkaXIpIHtcbiAgICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgICBhZGRQcm9wKGVsLCAndGV4dENvbnRlbnQnLCAoXCJfcyhcIiArIChkaXIudmFsdWUpICsgXCIpXCIpLCBkaXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qICAqL1xuXG4gIGZ1bmN0aW9uIGh0bWwgKGVsLCBkaXIpIHtcbiAgICBpZiAoZGlyLnZhbHVlKSB7XG4gICAgICBhZGRQcm9wKGVsLCAnaW5uZXJIVE1MJywgKFwiX3MoXCIgKyAoZGlyLnZhbHVlKSArIFwiKVwiKSwgZGlyKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZGlyZWN0aXZlcyQxID0ge1xuICAgIG1vZGVsOiBtb2RlbCxcbiAgICB0ZXh0OiB0ZXh0LFxuICAgIGh0bWw6IGh0bWxcbiAgfTtcblxuICAvKiAgKi9cblxuICB2YXIgYmFzZU9wdGlvbnMgPSB7XG4gICAgZXhwZWN0SFRNTDogdHJ1ZSxcbiAgICBtb2R1bGVzOiBtb2R1bGVzJDEsXG4gICAgZGlyZWN0aXZlczogZGlyZWN0aXZlcyQxLFxuICAgIGlzUHJlVGFnOiBpc1ByZVRhZyxcbiAgICBpc1VuYXJ5VGFnOiBpc1VuYXJ5VGFnLFxuICAgIG11c3RVc2VQcm9wOiBtdXN0VXNlUHJvcCxcbiAgICBjYW5CZUxlZnRPcGVuVGFnOiBjYW5CZUxlZnRPcGVuVGFnLFxuICAgIGlzUmVzZXJ2ZWRUYWc6IGlzUmVzZXJ2ZWRUYWcsXG4gICAgZ2V0VGFnTmFtZXNwYWNlOiBnZXRUYWdOYW1lc3BhY2UsXG4gICAgc3RhdGljS2V5czogZ2VuU3RhdGljS2V5cyhtb2R1bGVzJDEpXG4gIH07XG5cbiAgLyogICovXG5cbiAgdmFyIGlzU3RhdGljS2V5O1xuICB2YXIgaXNQbGF0Zm9ybVJlc2VydmVkVGFnO1xuXG4gIHZhciBnZW5TdGF0aWNLZXlzQ2FjaGVkID0gY2FjaGVkKGdlblN0YXRpY0tleXMkMSk7XG5cbiAgLyoqXG4gICAqIEdvYWwgb2YgdGhlIG9wdGltaXplcjogd2FsayB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIEFTVCB0cmVlXG4gICAqIGFuZCBkZXRlY3Qgc3ViLXRyZWVzIHRoYXQgYXJlIHB1cmVseSBzdGF0aWMsIGkuZS4gcGFydHMgb2ZcbiAgICogdGhlIERPTSB0aGF0IG5ldmVyIG5lZWRzIHRvIGNoYW5nZS5cbiAgICpcbiAgICogT25jZSB3ZSBkZXRlY3QgdGhlc2Ugc3ViLXRyZWVzLCB3ZSBjYW46XG4gICAqXG4gICAqIDEuIEhvaXN0IHRoZW0gaW50byBjb25zdGFudHMsIHNvIHRoYXQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG9cbiAgICogICAgY3JlYXRlIGZyZXNoIG5vZGVzIGZvciB0aGVtIG9uIGVhY2ggcmUtcmVuZGVyO1xuICAgKiAyLiBDb21wbGV0ZWx5IHNraXAgdGhlbSBpbiB0aGUgcGF0Y2hpbmcgcHJvY2Vzcy5cbiAgICovXG4gIGZ1bmN0aW9uIG9wdGltaXplIChyb290LCBvcHRpb25zKSB7XG4gICAgaWYgKCFyb290KSB7IHJldHVybiB9XG4gICAgaXNTdGF0aWNLZXkgPSBnZW5TdGF0aWNLZXlzQ2FjaGVkKG9wdGlvbnMuc3RhdGljS2V5cyB8fCAnJyk7XG4gICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnID0gb3B0aW9ucy5pc1Jlc2VydmVkVGFnIHx8IG5vO1xuICAgIC8vIGZpcnN0IHBhc3M6IG1hcmsgYWxsIG5vbi1zdGF0aWMgbm9kZXMuXG4gICAgbWFya1N0YXRpYyQxKHJvb3QpO1xuICAgIC8vIHNlY29uZCBwYXNzOiBtYXJrIHN0YXRpYyByb290cy5cbiAgICBtYXJrU3RhdGljUm9vdHMocm9vdCwgZmFsc2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuU3RhdGljS2V5cyQxIChrZXlzKSB7XG4gICAgcmV0dXJuIG1ha2VNYXAoXG4gICAgICAndHlwZSx0YWcsYXR0cnNMaXN0LGF0dHJzTWFwLHBsYWluLHBhcmVudCxjaGlsZHJlbixhdHRycyxzdGFydCxlbmQscmF3QXR0cnNNYXAnICtcbiAgICAgIChrZXlzID8gJywnICsga2V5cyA6ICcnKVxuICAgIClcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcmtTdGF0aWMkMSAobm9kZSkge1xuICAgIG5vZGUuc3RhdGljID0gaXNTdGF0aWMobm9kZSk7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgLy8gZG8gbm90IG1ha2UgY29tcG9uZW50IHNsb3QgY29udGVudCBzdGF0aWMuIHRoaXMgYXZvaWRzXG4gICAgICAvLyAxLiBjb21wb25lbnRzIG5vdCBhYmxlIHRvIG11dGF0ZSBzbG90IG5vZGVzXG4gICAgICAvLyAyLiBzdGF0aWMgc2xvdCBjb250ZW50IGZhaWxzIGZvciBob3QtcmVsb2FkaW5nXG4gICAgICBpZiAoXG4gICAgICAgICFpc1BsYXRmb3JtUmVzZXJ2ZWRUYWcobm9kZS50YWcpICYmXG4gICAgICAgIG5vZGUudGFnICE9PSAnc2xvdCcgJiZcbiAgICAgICAgbm9kZS5hdHRyc01hcFsnaW5saW5lLXRlbXBsYXRlJ10gPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgICBtYXJrU3RhdGljJDEoY2hpbGQpO1xuICAgICAgICBpZiAoIWNoaWxkLnN0YXRpYykge1xuICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmlmQ29uZGl0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpJDEgPSAxLCBsJDEgPSBub2RlLmlmQ29uZGl0aW9ucy5sZW5ndGg7IGkkMSA8IGwkMTsgaSQxKyspIHtcbiAgICAgICAgICB2YXIgYmxvY2sgPSBub2RlLmlmQ29uZGl0aW9uc1tpJDFdLmJsb2NrO1xuICAgICAgICAgIG1hcmtTdGF0aWMkMShibG9jayk7XG4gICAgICAgICAgaWYgKCFibG9jay5zdGF0aWMpIHtcbiAgICAgICAgICAgIG5vZGUuc3RhdGljID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWFya1N0YXRpY1Jvb3RzIChub2RlLCBpc0luRm9yKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgaWYgKG5vZGUuc3RhdGljIHx8IG5vZGUub25jZSkge1xuICAgICAgICBub2RlLnN0YXRpY0luRm9yID0gaXNJbkZvcjtcbiAgICAgIH1cbiAgICAgIC8vIEZvciBhIG5vZGUgdG8gcXVhbGlmeSBhcyBhIHN0YXRpYyByb290LCBpdCBzaG91bGQgaGF2ZSBjaGlsZHJlbiB0aGF0XG4gICAgICAvLyBhcmUgbm90IGp1c3Qgc3RhdGljIHRleHQuIE90aGVyd2lzZSB0aGUgY29zdCBvZiBob2lzdGluZyBvdXQgd2lsbFxuICAgICAgLy8gb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIGFuZCBpdCdzIGJldHRlciBvZmYgdG8ganVzdCBhbHdheXMgcmVuZGVyIGl0IGZyZXNoLlxuICAgICAgaWYgKG5vZGUuc3RhdGljICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoICYmICEoXG4gICAgICAgIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmXG4gICAgICAgIG5vZGUuY2hpbGRyZW5bMF0udHlwZSA9PT0gM1xuICAgICAgKSkge1xuICAgICAgICBub2RlLnN0YXRpY1Jvb3QgPSB0cnVlO1xuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuc3RhdGljUm9vdCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIG1hcmtTdGF0aWNSb290cyhub2RlLmNoaWxkcmVuW2ldLCBpc0luRm9yIHx8ICEhbm9kZS5mb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5pZkNvbmRpdGlvbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSQxID0gMSwgbCQxID0gbm9kZS5pZkNvbmRpdGlvbnMubGVuZ3RoOyBpJDEgPCBsJDE7IGkkMSsrKSB7XG4gICAgICAgICAgbWFya1N0YXRpY1Jvb3RzKG5vZGUuaWZDb25kaXRpb25zW2kkMV0uYmxvY2ssIGlzSW5Gb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTdGF0aWMgKG5vZGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAyKSB7IC8vIGV4cHJlc3Npb25cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAobm9kZS50eXBlID09PSAzKSB7IC8vIHRleHRcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIHJldHVybiAhIShub2RlLnByZSB8fCAoXG4gICAgICAhbm9kZS5oYXNCaW5kaW5ncyAmJiAvLyBubyBkeW5hbWljIGJpbmRpbmdzXG4gICAgICAhbm9kZS5pZiAmJiAhbm9kZS5mb3IgJiYgLy8gbm90IHYtaWYgb3Igdi1mb3Igb3Igdi1lbHNlXG4gICAgICAhaXNCdWlsdEluVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBidWlsdC1pblxuICAgICAgaXNQbGF0Zm9ybVJlc2VydmVkVGFnKG5vZGUudGFnKSAmJiAvLyBub3QgYSBjb21wb25lbnRcbiAgICAgICFpc0RpcmVjdENoaWxkT2ZUZW1wbGF0ZUZvcihub2RlKSAmJlxuICAgICAgT2JqZWN0LmtleXMobm9kZSkuZXZlcnkoaXNTdGF0aWNLZXkpXG4gICAgKSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRGlyZWN0Q2hpbGRPZlRlbXBsYXRlRm9yIChub2RlKSB7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50KSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gICAgICBpZiAobm9kZS50YWcgIT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAobm9kZS5mb3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgZm5FeHBSRSA9IC9eKFtcXHckX10rfFxcKFteKV0qP1xcKSlcXHMqPT58XmZ1bmN0aW9uKD86XFxzK1tcXHckXSspP1xccypcXCgvO1xuICB2YXIgZm5JbnZva2VSRSA9IC9cXChbXildKj9cXCk7KiQvO1xuICB2YXIgc2ltcGxlUGF0aFJFID0gL15bQS1aYS16XyRdW1xcdyRdKig/OlxcLltBLVphLXpfJF1bXFx3JF0qfFxcWydbXiddKj8nXXxcXFtcIlteXCJdKj9cIl18XFxbXFxkK118XFxbW0EtWmEtel8kXVtcXHckXSpdKSokLztcblxuICAvLyBLZXlib2FyZEV2ZW50LmtleUNvZGUgYWxpYXNlc1xuICB2YXIga2V5Q29kZXMgPSB7XG4gICAgZXNjOiAyNyxcbiAgICB0YWI6IDksXG4gICAgZW50ZXI6IDEzLFxuICAgIHNwYWNlOiAzMixcbiAgICB1cDogMzgsXG4gICAgbGVmdDogMzcsXG4gICAgcmlnaHQ6IDM5LFxuICAgIGRvd246IDQwLFxuICAgICdkZWxldGUnOiBbOCwgNDZdXG4gIH07XG5cbiAgLy8gS2V5Ym9hcmRFdmVudC5rZXkgYWxpYXNlc1xuICB2YXIga2V5TmFtZXMgPSB7XG4gICAgLy8gIzc4ODA6IElFMTEgYW5kIEVkZ2UgdXNlIGBFc2NgIGZvciBFc2NhcGUga2V5IG5hbWUuXG4gICAgZXNjOiBbJ0VzYycsICdFc2NhcGUnXSxcbiAgICB0YWI6ICdUYWInLFxuICAgIGVudGVyOiAnRW50ZXInLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYFNwYWNlYmFyYCBmb3IgU3BhY2Uga2V5IG5hbWUuXG4gICAgc3BhY2U6IFsnICcsICdTcGFjZWJhciddLFxuICAgIC8vICM3ODA2OiBJRTExIHVzZXMga2V5IG5hbWVzIHdpdGhvdXQgYEFycm93YCBwcmVmaXggZm9yIGFycm93IGtleXMuXG4gICAgdXA6IFsnVXAnLCAnQXJyb3dVcCddLFxuICAgIGxlZnQ6IFsnTGVmdCcsICdBcnJvd0xlZnQnXSxcbiAgICByaWdodDogWydSaWdodCcsICdBcnJvd1JpZ2h0J10sXG4gICAgZG93bjogWydEb3duJywgJ0Fycm93RG93biddLFxuICAgIC8vICM5MTEyOiBJRTExIHVzZXMgYERlbGAgZm9yIERlbGV0ZSBrZXkgbmFtZS5cbiAgICAnZGVsZXRlJzogWydCYWNrc3BhY2UnLCAnRGVsZXRlJywgJ0RlbCddXG4gIH07XG5cbiAgLy8gIzQ4Njg6IG1vZGlmaWVycyB0aGF0IHByZXZlbnQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbGlzdGVuZXJcbiAgLy8gbmVlZCB0byBleHBsaWNpdGx5IHJldHVybiBudWxsIHNvIHRoYXQgd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIHRvIHJlbW92ZVxuICAvLyB0aGUgbGlzdGVuZXIgZm9yIC5vbmNlXG4gIHZhciBnZW5HdWFyZCA9IGZ1bmN0aW9uIChjb25kaXRpb24pIHsgcmV0dXJuIChcImlmKFwiICsgY29uZGl0aW9uICsgXCIpcmV0dXJuIG51bGw7XCIpOyB9O1xuXG4gIHZhciBtb2RpZmllckNvZGUgPSB7XG4gICAgc3RvcDogJyRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsnLFxuICAgIHByZXZlbnQ6ICckZXZlbnQucHJldmVudERlZmF1bHQoKTsnLFxuICAgIHNlbGY6IGdlbkd1YXJkKFwiJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXRcIiksXG4gICAgY3RybDogZ2VuR3VhcmQoXCIhJGV2ZW50LmN0cmxLZXlcIiksXG4gICAgc2hpZnQ6IGdlbkd1YXJkKFwiISRldmVudC5zaGlmdEtleVwiKSxcbiAgICBhbHQ6IGdlbkd1YXJkKFwiISRldmVudC5hbHRLZXlcIiksXG4gICAgbWV0YTogZ2VuR3VhcmQoXCIhJGV2ZW50Lm1ldGFLZXlcIiksXG4gICAgbGVmdDogZ2VuR3VhcmQoXCInYnV0dG9uJyBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMFwiKSxcbiAgICBtaWRkbGU6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDFcIiksXG4gICAgcmlnaHQ6IGdlbkd1YXJkKFwiJ2J1dHRvbicgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDJcIilcbiAgfTtcblxuICBmdW5jdGlvbiBnZW5IYW5kbGVycyAoXG4gICAgZXZlbnRzLFxuICAgIGlzTmF0aXZlXG4gICkge1xuICAgIHZhciBwcmVmaXggPSBpc05hdGl2ZSA/ICduYXRpdmVPbjonIDogJ29uOic7XG4gICAgdmFyIHN0YXRpY0hhbmRsZXJzID0gXCJcIjtcbiAgICB2YXIgZHluYW1pY0hhbmRsZXJzID0gXCJcIjtcbiAgICBmb3IgKHZhciBuYW1lIGluIGV2ZW50cykge1xuICAgICAgdmFyIGhhbmRsZXJDb2RlID0gZ2VuSGFuZGxlcihldmVudHNbbmFtZV0pO1xuICAgICAgaWYgKGV2ZW50c1tuYW1lXSAmJiBldmVudHNbbmFtZV0uZHluYW1pYykge1xuICAgICAgICBkeW5hbWljSGFuZGxlcnMgKz0gbmFtZSArIFwiLFwiICsgaGFuZGxlckNvZGUgKyBcIixcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRpY0hhbmRsZXJzICs9IFwiXFxcIlwiICsgbmFtZSArIFwiXFxcIjpcIiArIGhhbmRsZXJDb2RlICsgXCIsXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRpY0hhbmRsZXJzID0gXCJ7XCIgKyAoc3RhdGljSGFuZGxlcnMuc2xpY2UoMCwgLTEpKSArIFwifVwiO1xuICAgIGlmIChkeW5hbWljSGFuZGxlcnMpIHtcbiAgICAgIHJldHVybiBwcmVmaXggKyBcIl9kKFwiICsgc3RhdGljSGFuZGxlcnMgKyBcIixbXCIgKyAoZHluYW1pY0hhbmRsZXJzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCJcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZWZpeCArIHN0YXRpY0hhbmRsZXJzXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuSGFuZGxlciAoaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlcikge1xuICAgICAgcmV0dXJuICdmdW5jdGlvbigpe30nXG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcikpIHtcbiAgICAgIHJldHVybiAoXCJbXCIgKyAoaGFuZGxlci5tYXAoZnVuY3Rpb24gKGhhbmRsZXIpIHsgcmV0dXJuIGdlbkhhbmRsZXIoaGFuZGxlcik7IH0pLmpvaW4oJywnKSkgKyBcIl1cIilcbiAgICB9XG5cbiAgICB2YXIgaXNNZXRob2RQYXRoID0gc2ltcGxlUGF0aFJFLnRlc3QoaGFuZGxlci52YWx1ZSk7XG4gICAgdmFyIGlzRnVuY3Rpb25FeHByZXNzaW9uID0gZm5FeHBSRS50ZXN0KGhhbmRsZXIudmFsdWUpO1xuICAgIHZhciBpc0Z1bmN0aW9uSW52b2NhdGlvbiA9IHNpbXBsZVBhdGhSRS50ZXN0KGhhbmRsZXIudmFsdWUucmVwbGFjZShmbkludm9rZVJFLCAnJykpO1xuXG4gICAgaWYgKCFoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgaWYgKGlzTWV0aG9kUGF0aCB8fCBpc0Z1bmN0aW9uRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gaGFuZGxlci52YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIChcImZ1bmN0aW9uKCRldmVudCl7XCIgKyAoaXNGdW5jdGlvbkludm9jYXRpb24gPyAoXCJyZXR1cm4gXCIgKyAoaGFuZGxlci52YWx1ZSkpIDogaGFuZGxlci52YWx1ZSkgKyBcIn1cIikgLy8gaW5saW5lIHN0YXRlbWVudFxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29kZSA9ICcnO1xuICAgICAgdmFyIGdlbk1vZGlmaWVyQ29kZSA9ICcnO1xuICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBoYW5kbGVyLm1vZGlmaWVycykge1xuICAgICAgICBpZiAobW9kaWZpZXJDb2RlW2tleV0pIHtcbiAgICAgICAgICBnZW5Nb2RpZmllckNvZGUgKz0gbW9kaWZpZXJDb2RlW2tleV07XG4gICAgICAgICAgLy8gbGVmdC9yaWdodFxuICAgICAgICAgIGlmIChrZXlDb2Rlc1trZXldKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZXhhY3QnKSB7XG4gICAgICAgICAgdmFyIG1vZGlmaWVycyA9IChoYW5kbGVyLm1vZGlmaWVycyk7XG4gICAgICAgICAgZ2VuTW9kaWZpZXJDb2RlICs9IGdlbkd1YXJkKFxuICAgICAgICAgICAgWydjdHJsJywgJ3NoaWZ0JywgJ2FsdCcsICdtZXRhJ11cbiAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5TW9kaWZpZXIpIHsgcmV0dXJuICFtb2RpZmllcnNba2V5TW9kaWZpZXJdOyB9KVxuICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXlNb2RpZmllcikgeyByZXR1cm4gKFwiJGV2ZW50LlwiICsga2V5TW9kaWZpZXIgKyBcIktleVwiKTsgfSlcbiAgICAgICAgICAgICAgLmpvaW4oJ3x8JylcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgY29kZSArPSBnZW5LZXlGaWx0ZXIoa2V5cyk7XG4gICAgICB9XG4gICAgICAvLyBNYWtlIHN1cmUgbW9kaWZpZXJzIGxpa2UgcHJldmVudCBhbmQgc3RvcCBnZXQgZXhlY3V0ZWQgYWZ0ZXIga2V5IGZpbHRlcmluZ1xuICAgICAgaWYgKGdlbk1vZGlmaWVyQ29kZSkge1xuICAgICAgICBjb2RlICs9IGdlbk1vZGlmaWVyQ29kZTtcbiAgICAgIH1cbiAgICAgIHZhciBoYW5kbGVyQ29kZSA9IGlzTWV0aG9kUGF0aFxuICAgICAgICA/IChcInJldHVybiBcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKCRldmVudClcIilcbiAgICAgICAgOiBpc0Z1bmN0aW9uRXhwcmVzc2lvblxuICAgICAgICAgID8gKFwicmV0dXJuIChcIiArIChoYW5kbGVyLnZhbHVlKSArIFwiKSgkZXZlbnQpXCIpXG4gICAgICAgICAgOiBpc0Z1bmN0aW9uSW52b2NhdGlvblxuICAgICAgICAgICAgPyAoXCJyZXR1cm4gXCIgKyAoaGFuZGxlci52YWx1ZSkpXG4gICAgICAgICAgICA6IGhhbmRsZXIudmFsdWU7XG4gICAgICByZXR1cm4gKFwiZnVuY3Rpb24oJGV2ZW50KXtcIiArIGNvZGUgKyBoYW5kbGVyQ29kZSArIFwifVwiKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbktleUZpbHRlciAoa2V5cykge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBtYWtlIHN1cmUgdGhlIGtleSBmaWx0ZXJzIG9ubHkgYXBwbHkgdG8gS2V5Ym9hcmRFdmVudHNcbiAgICAgIC8vICM5NDQxOiBjYW4ndCB1c2UgJ2tleUNvZGUnIGluICRldmVudCBiZWNhdXNlIENocm9tZSBhdXRvZmlsbCBmaXJlcyBmYWtlXG4gICAgICAvLyBrZXkgZXZlbnRzIHRoYXQgZG8gbm90IGhhdmUga2V5Q29kZSBwcm9wZXJ0eS4uLlxuICAgICAgXCJpZighJGV2ZW50LnR5cGUuaW5kZXhPZigna2V5JykmJlwiICtcbiAgICAgIChrZXlzLm1hcChnZW5GaWx0ZXJDb2RlKS5qb2luKCcmJicpKSArIFwiKXJldHVybiBudWxsO1wiXG4gICAgKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRmlsdGVyQ29kZSAoa2V5KSB7XG4gICAgdmFyIGtleVZhbCA9IHBhcnNlSW50KGtleSwgMTApO1xuICAgIGlmIChrZXlWYWwpIHtcbiAgICAgIHJldHVybiAoXCIkZXZlbnQua2V5Q29kZSE9PVwiICsga2V5VmFsKVxuICAgIH1cbiAgICB2YXIga2V5Q29kZSA9IGtleUNvZGVzW2tleV07XG4gICAgdmFyIGtleU5hbWUgPSBrZXlOYW1lc1trZXldO1xuICAgIHJldHVybiAoXG4gICAgICBcIl9rKCRldmVudC5rZXlDb2RlLFwiICtcbiAgICAgIChKU09OLnN0cmluZ2lmeShrZXkpKSArIFwiLFwiICtcbiAgICAgIChKU09OLnN0cmluZ2lmeShrZXlDb2RlKSkgKyBcIixcIiArXG4gICAgICBcIiRldmVudC5rZXksXCIgK1xuICAgICAgXCJcIiArIChKU09OLnN0cmluZ2lmeShrZXlOYW1lKSkgK1xuICAgICAgXCIpXCJcbiAgICApXG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBvbiAoZWwsIGRpcikge1xuICAgIGlmIChkaXIubW9kaWZpZXJzKSB7XG4gICAgICB3YXJuKFwidi1vbiB3aXRob3V0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgbW9kaWZpZXJzLlwiKTtcbiAgICB9XG4gICAgZWwud3JhcExpc3RlbmVycyA9IGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJfZyhcIiArIGNvZGUgKyBcIixcIiArIChkaXIudmFsdWUpICsgXCIpXCIpOyB9O1xuICB9XG5cbiAgLyogICovXG5cbiAgZnVuY3Rpb24gYmluZCQxIChlbCwgZGlyKSB7XG4gICAgZWwud3JhcERhdGEgPSBmdW5jdGlvbiAoY29kZSkge1xuICAgICAgcmV0dXJuIChcIl9iKFwiICsgY29kZSArIFwiLCdcIiArIChlbC50YWcpICsgXCInLFwiICsgKGRpci52YWx1ZSkgKyBcIixcIiArIChkaXIubW9kaWZpZXJzICYmIGRpci5tb2RpZmllcnMucHJvcCA/ICd0cnVlJyA6ICdmYWxzZScpICsgKGRpci5tb2RpZmllcnMgJiYgZGlyLm1vZGlmaWVycy5zeW5jID8gJyx0cnVlJyA6ICcnKSArIFwiKVwiKVxuICAgIH07XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgYmFzZURpcmVjdGl2ZXMgPSB7XG4gICAgb246IG9uLFxuICAgIGJpbmQ6IGJpbmQkMSxcbiAgICBjbG9hazogbm9vcFxuICB9O1xuXG4gIC8qICAqL1xuXG5cblxuXG5cbiAgdmFyIENvZGVnZW5TdGF0ZSA9IGZ1bmN0aW9uIENvZGVnZW5TdGF0ZSAob3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy53YXJuID0gb3B0aW9ucy53YXJuIHx8IGJhc2VXYXJuO1xuICAgIHRoaXMudHJhbnNmb3JtcyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAndHJhbnNmb3JtQ29kZScpO1xuICAgIHRoaXMuZGF0YUdlbkZucyA9IHBsdWNrTW9kdWxlRnVuY3Rpb24ob3B0aW9ucy5tb2R1bGVzLCAnZ2VuRGF0YScpO1xuICAgIHRoaXMuZGlyZWN0aXZlcyA9IGV4dGVuZChleHRlbmQoe30sIGJhc2VEaXJlY3RpdmVzKSwgb3B0aW9ucy5kaXJlY3RpdmVzKTtcbiAgICB2YXIgaXNSZXNlcnZlZFRhZyA9IG9wdGlvbnMuaXNSZXNlcnZlZFRhZyB8fCBubztcbiAgICB0aGlzLm1heWJlQ29tcG9uZW50ID0gZnVuY3Rpb24gKGVsKSB7IHJldHVybiAhIWVsLmNvbXBvbmVudCB8fCAhaXNSZXNlcnZlZFRhZyhlbC50YWcpOyB9O1xuICAgIHRoaXMub25jZUlkID0gMDtcbiAgICB0aGlzLnN0YXRpY1JlbmRlckZucyA9IFtdO1xuICAgIHRoaXMucHJlID0gZmFsc2U7XG4gIH07XG5cblxuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlIChcbiAgICBhc3QsXG4gICAgb3B0aW9uc1xuICApIHtcbiAgICB2YXIgc3RhdGUgPSBuZXcgQ29kZWdlblN0YXRlKG9wdGlvbnMpO1xuICAgIHZhciBjb2RlID0gYXN0ID8gZ2VuRWxlbWVudChhc3QsIHN0YXRlKSA6ICdfYyhcImRpdlwiKSc7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcjogKFwid2l0aCh0aGlzKXtyZXR1cm4gXCIgKyBjb2RlICsgXCJ9XCIpLFxuICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5FbGVtZW50IChlbCwgc3RhdGUpIHtcbiAgICBpZiAoZWwucGFyZW50KSB7XG4gICAgICBlbC5wcmUgPSBlbC5wcmUgfHwgZWwucGFyZW50LnByZTtcbiAgICB9XG5cbiAgICBpZiAoZWwuc3RhdGljUm9vdCAmJiAhZWwuc3RhdGljUHJvY2Vzc2VkKSB7XG4gICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLm9uY2UgJiYgIWVsLm9uY2VQcm9jZXNzZWQpIHtcbiAgICAgIHJldHVybiBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLmZvciAmJiAhZWwuZm9yUHJvY2Vzc2VkKSB7XG4gICAgICByZXR1cm4gZ2VuRm9yKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyAmJiAhZWwuc2xvdFRhcmdldCAmJiAhc3RhdGUucHJlKSB7XG4gICAgICByZXR1cm4gZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndm9pZCAwJ1xuICAgIH0gZWxzZSBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgIHJldHVybiBnZW5TbG90KGVsLCBzdGF0ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcG9uZW50IG9yIGVsZW1lbnRcbiAgICAgIHZhciBjb2RlO1xuICAgICAgaWYgKGVsLmNvbXBvbmVudCkge1xuICAgICAgICBjb2RlID0gZ2VuQ29tcG9uZW50KGVsLmNvbXBvbmVudCwgZWwsIHN0YXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoIWVsLnBsYWluIHx8IChlbC5wcmUgJiYgc3RhdGUubWF5YmVDb21wb25lbnQoZWwpKSkge1xuICAgICAgICAgIGRhdGEgPSBnZW5EYXRhJDIoZWwsIHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgICAgIGNvZGUgPSBcIl9jKCdcIiArIChlbC50YWcpICsgXCInXCIgKyAoZGF0YSA/IChcIixcIiArIGRhdGEpIDogJycpICsgKGNoaWxkcmVuID8gKFwiLFwiICsgY2hpbGRyZW4pIDogJycpICsgXCIpXCI7XG4gICAgICB9XG4gICAgICAvLyBtb2R1bGUgdHJhbnNmb3Jtc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS50cmFuc2Zvcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBzdGF0ZS50cmFuc2Zvcm1zW2ldKGVsLCBjb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2RlXG4gICAgfVxuICB9XG5cbiAgLy8gaG9pc3Qgc3RhdGljIHN1Yi10cmVlcyBvdXRcbiAgZnVuY3Rpb24gZ2VuU3RhdGljIChlbCwgc3RhdGUpIHtcbiAgICBlbC5zdGF0aWNQcm9jZXNzZWQgPSB0cnVlO1xuICAgIC8vIFNvbWUgZWxlbWVudHMgKHRlbXBsYXRlcykgbmVlZCB0byBiZWhhdmUgZGlmZmVyZW50bHkgaW5zaWRlIG9mIGEgdi1wcmVcbiAgICAvLyBub2RlLiAgQWxsIHByZSBub2RlcyBhcmUgc3RhdGljIHJvb3RzLCBzbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBsb2NhdGlvbiB0b1xuICAgIC8vIHdyYXAgYSBzdGF0ZSBjaGFuZ2UgYW5kIHJlc2V0IGl0IHVwb24gZXhpdGluZyB0aGUgcHJlIG5vZGUuXG4gICAgdmFyIG9yaWdpbmFsUHJlU3RhdGUgPSBzdGF0ZS5wcmU7XG4gICAgaWYgKGVsLnByZSkge1xuICAgICAgc3RhdGUucHJlID0gZWwucHJlO1xuICAgIH1cbiAgICBzdGF0ZS5zdGF0aWNSZW5kZXJGbnMucHVzaCgoXCJ3aXRoKHRoaXMpe3JldHVybiBcIiArIChnZW5FbGVtZW50KGVsLCBzdGF0ZSkpICsgXCJ9XCIpKTtcbiAgICBzdGF0ZS5wcmUgPSBvcmlnaW5hbFByZVN0YXRlO1xuICAgIHJldHVybiAoXCJfbShcIiArIChzdGF0ZS5zdGF0aWNSZW5kZXJGbnMubGVuZ3RoIC0gMSkgKyAoZWwuc3RhdGljSW5Gb3IgPyAnLHRydWUnIDogJycpICsgXCIpXCIpXG4gIH1cblxuICAvLyB2LW9uY2VcbiAgZnVuY3Rpb24gZ2VuT25jZSAoZWwsIHN0YXRlKSB7XG4gICAgZWwub25jZVByb2Nlc3NlZCA9IHRydWU7XG4gICAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCkge1xuICAgICAgcmV0dXJuIGdlbklmKGVsLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKGVsLnN0YXRpY0luRm9yKSB7XG4gICAgICB2YXIga2V5ID0gJyc7XG4gICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LmZvcikge1xuICAgICAgICAgIGtleSA9IHBhcmVudC5rZXk7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgICAgfVxuICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgc3RhdGUud2FybihcbiAgICAgICAgICBcInYtb25jZSBjYW4gb25seSBiZSB1c2VkIGluc2lkZSB2LWZvciB0aGF0IGlzIGtleWVkLiBcIixcbiAgICAgICAgICBlbC5yYXdBdHRyc01hcFsndi1vbmNlJ11cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgICAgfVxuICAgICAgcmV0dXJuIChcIl9vKFwiICsgKGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIixcIiArIChzdGF0ZS5vbmNlSWQrKykgKyBcIixcIiArIGtleSArIFwiKVwiKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2VuU3RhdGljKGVsLCBzdGF0ZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5JZiAoXG4gICAgZWwsXG4gICAgc3RhdGUsXG4gICAgYWx0R2VuLFxuICAgIGFsdEVtcHR5XG4gICkge1xuICAgIGVsLmlmUHJvY2Vzc2VkID0gdHJ1ZTsgLy8gYXZvaWQgcmVjdXJzaW9uXG4gICAgcmV0dXJuIGdlbklmQ29uZGl0aW9ucyhlbC5pZkNvbmRpdGlvbnMuc2xpY2UoKSwgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpXG4gIH1cblxuICBmdW5jdGlvbiBnZW5JZkNvbmRpdGlvbnMgKFxuICAgIGNvbmRpdGlvbnMsXG4gICAgc3RhdGUsXG4gICAgYWx0R2VuLFxuICAgIGFsdEVtcHR5XG4gICkge1xuICAgIGlmICghY29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBhbHRFbXB0eSB8fCAnX2UoKSdcbiAgICB9XG5cbiAgICB2YXIgY29uZGl0aW9uID0gY29uZGl0aW9ucy5zaGlmdCgpO1xuICAgIGlmIChjb25kaXRpb24uZXhwKSB7XG4gICAgICByZXR1cm4gKFwiKFwiICsgKGNvbmRpdGlvbi5leHApICsgXCIpP1wiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkgKyBcIjpcIiArIChnZW5JZkNvbmRpdGlvbnMoY29uZGl0aW9ucywgc3RhdGUsIGFsdEdlbiwgYWx0RW1wdHkpKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlwiICsgKGdlblRlcm5hcnlFeHAoY29uZGl0aW9uLmJsb2NrKSkpXG4gICAgfVxuXG4gICAgLy8gdi1pZiB3aXRoIHYtb25jZSBzaG91bGQgZ2VuZXJhdGUgY29kZSBsaWtlIChhKT9fbSgwKTpfbSgxKVxuICAgIGZ1bmN0aW9uIGdlblRlcm5hcnlFeHAgKGVsKSB7XG4gICAgICByZXR1cm4gYWx0R2VuXG4gICAgICAgID8gYWx0R2VuKGVsLCBzdGF0ZSlcbiAgICAgICAgOiBlbC5vbmNlXG4gICAgICAgICAgPyBnZW5PbmNlKGVsLCBzdGF0ZSlcbiAgICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkZvciAoXG4gICAgZWwsXG4gICAgc3RhdGUsXG4gICAgYWx0R2VuLFxuICAgIGFsdEhlbHBlclxuICApIHtcbiAgICB2YXIgZXhwID0gZWwuZm9yO1xuICAgIHZhciBhbGlhcyA9IGVsLmFsaWFzO1xuICAgIHZhciBpdGVyYXRvcjEgPSBlbC5pdGVyYXRvcjEgPyAoXCIsXCIgKyAoZWwuaXRlcmF0b3IxKSkgOiAnJztcbiAgICB2YXIgaXRlcmF0b3IyID0gZWwuaXRlcmF0b3IyID8gKFwiLFwiICsgKGVsLml0ZXJhdG9yMikpIDogJyc7XG5cbiAgICBpZiAoc3RhdGUubWF5YmVDb21wb25lbnQoZWwpICYmXG4gICAgICBlbC50YWcgIT09ICdzbG90JyAmJlxuICAgICAgZWwudGFnICE9PSAndGVtcGxhdGUnICYmXG4gICAgICAhZWwua2V5XG4gICAgKSB7XG4gICAgICBzdGF0ZS53YXJuKFxuICAgICAgICBcIjxcIiArIChlbC50YWcpICsgXCIgdi1mb3I9XFxcIlwiICsgYWxpYXMgKyBcIiBpbiBcIiArIGV4cCArIFwiXFxcIj46IGNvbXBvbmVudCBsaXN0cyByZW5kZXJlZCB3aXRoIFwiICtcbiAgICAgICAgXCJ2LWZvciBzaG91bGQgaGF2ZSBleHBsaWNpdCBrZXlzLiBcIiArXG4gICAgICAgIFwiU2VlIGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2xpc3QuaHRtbCNrZXkgZm9yIG1vcmUgaW5mby5cIixcbiAgICAgICAgZWwucmF3QXR0cnNNYXBbJ3YtZm9yJ10sXG4gICAgICAgIHRydWUgLyogdGlwICovXG4gICAgICApO1xuICAgIH1cblxuICAgIGVsLmZvclByb2Nlc3NlZCA9IHRydWU7IC8vIGF2b2lkIHJlY3Vyc2lvblxuICAgIHJldHVybiAoYWx0SGVscGVyIHx8ICdfbCcpICsgXCIoKFwiICsgZXhwICsgXCIpLFwiICtcbiAgICAgIFwiZnVuY3Rpb24oXCIgKyBhbGlhcyArIGl0ZXJhdG9yMSArIGl0ZXJhdG9yMiArIFwiKXtcIiArXG4gICAgICAgIFwicmV0dXJuIFwiICsgKChhbHRHZW4gfHwgZ2VuRWxlbWVudCkoZWwsIHN0YXRlKSkgK1xuICAgICAgJ30pJ1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGF0YSQyIChlbCwgc3RhdGUpIHtcbiAgICB2YXIgZGF0YSA9ICd7JztcblxuICAgIC8vIGRpcmVjdGl2ZXMgZmlyc3QuXG4gICAgLy8gZGlyZWN0aXZlcyBtYXkgbXV0YXRlIHRoZSBlbCdzIG90aGVyIHByb3BlcnRpZXMgYmVmb3JlIHRoZXkgYXJlIGdlbmVyYXRlZC5cbiAgICB2YXIgZGlycyA9IGdlbkRpcmVjdGl2ZXMoZWwsIHN0YXRlKTtcbiAgICBpZiAoZGlycykgeyBkYXRhICs9IGRpcnMgKyAnLCc7IH1cblxuICAgIC8vIGtleVxuICAgIGlmIChlbC5rZXkpIHtcbiAgICAgIGRhdGEgKz0gXCJrZXk6XCIgKyAoZWwua2V5KSArIFwiLFwiO1xuICAgIH1cbiAgICAvLyByZWZcbiAgICBpZiAoZWwucmVmKSB7XG4gICAgICBkYXRhICs9IFwicmVmOlwiICsgKGVsLnJlZikgKyBcIixcIjtcbiAgICB9XG4gICAgaWYgKGVsLnJlZkluRm9yKSB7XG4gICAgICBkYXRhICs9IFwicmVmSW5Gb3I6dHJ1ZSxcIjtcbiAgICB9XG4gICAgLy8gcHJlXG4gICAgaWYgKGVsLnByZSkge1xuICAgICAgZGF0YSArPSBcInByZTp0cnVlLFwiO1xuICAgIH1cbiAgICAvLyByZWNvcmQgb3JpZ2luYWwgdGFnIG5hbWUgZm9yIGNvbXBvbmVudHMgdXNpbmcgXCJpc1wiIGF0dHJpYnV0ZVxuICAgIGlmIChlbC5jb21wb25lbnQpIHtcbiAgICAgIGRhdGEgKz0gXCJ0YWc6XFxcIlwiICsgKGVsLnRhZykgKyBcIlxcXCIsXCI7XG4gICAgfVxuICAgIC8vIG1vZHVsZSBkYXRhIGdlbmVyYXRpb24gZnVuY3Rpb25zXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5kYXRhR2VuRm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkYXRhICs9IHN0YXRlLmRhdGFHZW5GbnNbaV0oZWwpO1xuICAgIH1cbiAgICAvLyBhdHRyaWJ1dGVzXG4gICAgaWYgKGVsLmF0dHJzKSB7XG4gICAgICBkYXRhICs9IFwiYXR0cnM6XCIgKyAoZ2VuUHJvcHMoZWwuYXR0cnMpKSArIFwiLFwiO1xuICAgIH1cbiAgICAvLyBET00gcHJvcHNcbiAgICBpZiAoZWwucHJvcHMpIHtcbiAgICAgIGRhdGEgKz0gXCJkb21Qcm9wczpcIiArIChnZW5Qcm9wcyhlbC5wcm9wcykpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIGV2ZW50IGhhbmRsZXJzXG4gICAgaWYgKGVsLmV2ZW50cykge1xuICAgICAgZGF0YSArPSAoZ2VuSGFuZGxlcnMoZWwuZXZlbnRzLCBmYWxzZSkpICsgXCIsXCI7XG4gICAgfVxuICAgIGlmIChlbC5uYXRpdmVFdmVudHMpIHtcbiAgICAgIGRhdGEgKz0gKGdlbkhhbmRsZXJzKGVsLm5hdGl2ZUV2ZW50cywgdHJ1ZSkpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIHNsb3QgdGFyZ2V0XG4gICAgLy8gb25seSBmb3Igbm9uLXNjb3BlZCBzbG90c1xuICAgIGlmIChlbC5zbG90VGFyZ2V0ICYmICFlbC5zbG90U2NvcGUpIHtcbiAgICAgIGRhdGEgKz0gXCJzbG90OlwiICsgKGVsLnNsb3RUYXJnZXQpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIHNjb3BlZCBzbG90c1xuICAgIGlmIChlbC5zY29wZWRTbG90cykge1xuICAgICAgZGF0YSArPSAoZ2VuU2NvcGVkU2xvdHMoZWwsIGVsLnNjb3BlZFNsb3RzLCBzdGF0ZSkpICsgXCIsXCI7XG4gICAgfVxuICAgIC8vIGNvbXBvbmVudCB2LW1vZGVsXG4gICAgaWYgKGVsLm1vZGVsKSB7XG4gICAgICBkYXRhICs9IFwibW9kZWw6e3ZhbHVlOlwiICsgKGVsLm1vZGVsLnZhbHVlKSArIFwiLGNhbGxiYWNrOlwiICsgKGVsLm1vZGVsLmNhbGxiYWNrKSArIFwiLGV4cHJlc3Npb246XCIgKyAoZWwubW9kZWwuZXhwcmVzc2lvbikgKyBcIn0sXCI7XG4gICAgfVxuICAgIC8vIGlubGluZS10ZW1wbGF0ZVxuICAgIGlmIChlbC5pbmxpbmVUZW1wbGF0ZSkge1xuICAgICAgdmFyIGlubGluZVRlbXBsYXRlID0gZ2VuSW5saW5lVGVtcGxhdGUoZWwsIHN0YXRlKTtcbiAgICAgIGlmIChpbmxpbmVUZW1wbGF0ZSkge1xuICAgICAgICBkYXRhICs9IGlubGluZVRlbXBsYXRlICsgXCIsXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLywkLywgJycpICsgJ30nO1xuICAgIC8vIHYtYmluZCBkeW5hbWljIGFyZ3VtZW50IHdyYXBcbiAgICAvLyB2LWJpbmQgd2l0aCBkeW5hbWljIGFyZ3VtZW50cyBtdXN0IGJlIGFwcGxpZWQgdXNpbmcgdGhlIHNhbWUgdi1iaW5kIG9iamVjdFxuICAgIC8vIG1lcmdlIGhlbHBlciBzbyB0aGF0IGNsYXNzL3N0eWxlL211c3RVc2VQcm9wIGF0dHJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cbiAgICBpZiAoZWwuZHluYW1pY0F0dHJzKSB7XG4gICAgICBkYXRhID0gXCJfYihcIiArIGRhdGEgKyBcIixcXFwiXCIgKyAoZWwudGFnKSArIFwiXFxcIixcIiArIChnZW5Qcm9wcyhlbC5keW5hbWljQXR0cnMpKSArIFwiKVwiO1xuICAgIH1cbiAgICAvLyB2LWJpbmQgZGF0YSB3cmFwXG4gICAgaWYgKGVsLndyYXBEYXRhKSB7XG4gICAgICBkYXRhID0gZWwud3JhcERhdGEoZGF0YSk7XG4gICAgfVxuICAgIC8vIHYtb24gZGF0YSB3cmFwXG4gICAgaWYgKGVsLndyYXBMaXN0ZW5lcnMpIHtcbiAgICAgIGRhdGEgPSBlbC53cmFwTGlzdGVuZXJzKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuRGlyZWN0aXZlcyAoZWwsIHN0YXRlKSB7XG4gICAgdmFyIGRpcnMgPSBlbC5kaXJlY3RpdmVzO1xuICAgIGlmICghZGlycykgeyByZXR1cm4gfVxuICAgIHZhciByZXMgPSAnZGlyZWN0aXZlczpbJztcbiAgICB2YXIgaGFzUnVudGltZSA9IGZhbHNlO1xuICAgIHZhciBpLCBsLCBkaXIsIG5lZWRSdW50aW1lO1xuICAgIGZvciAoaSA9IDAsIGwgPSBkaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZGlyID0gZGlyc1tpXTtcbiAgICAgIG5lZWRSdW50aW1lID0gdHJ1ZTtcbiAgICAgIHZhciBnZW4gPSBzdGF0ZS5kaXJlY3RpdmVzW2Rpci5uYW1lXTtcbiAgICAgIGlmIChnZW4pIHtcbiAgICAgICAgLy8gY29tcGlsZS10aW1lIGRpcmVjdGl2ZSB0aGF0IG1hbmlwdWxhdGVzIEFTVC5cbiAgICAgICAgLy8gcmV0dXJucyB0cnVlIGlmIGl0IGFsc28gbmVlZHMgYSBydW50aW1lIGNvdW50ZXJwYXJ0LlxuICAgICAgICBuZWVkUnVudGltZSA9ICEhZ2VuKGVsLCBkaXIsIHN0YXRlLndhcm4pO1xuICAgICAgfVxuICAgICAgaWYgKG5lZWRSdW50aW1lKSB7XG4gICAgICAgIGhhc1J1bnRpbWUgPSB0cnVlO1xuICAgICAgICByZXMgKz0gXCJ7bmFtZTpcXFwiXCIgKyAoZGlyLm5hbWUpICsgXCJcXFwiLHJhd05hbWU6XFxcIlwiICsgKGRpci5yYXdOYW1lKSArIFwiXFxcIlwiICsgKGRpci52YWx1ZSA/IChcIix2YWx1ZTooXCIgKyAoZGlyLnZhbHVlKSArIFwiKSxleHByZXNzaW9uOlwiICsgKEpTT04uc3RyaW5naWZ5KGRpci52YWx1ZSkpKSA6ICcnKSArIChkaXIuYXJnID8gKFwiLGFyZzpcIiArIChkaXIuaXNEeW5hbWljQXJnID8gZGlyLmFyZyA6IChcIlxcXCJcIiArIChkaXIuYXJnKSArIFwiXFxcIlwiKSkpIDogJycpICsgKGRpci5tb2RpZmllcnMgPyAoXCIsbW9kaWZpZXJzOlwiICsgKEpTT04uc3RyaW5naWZ5KGRpci5tb2RpZmllcnMpKSkgOiAnJykgKyBcIn0sXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNSdW50aW1lKSB7XG4gICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIC0xKSArICddJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbklubGluZVRlbXBsYXRlIChlbCwgc3RhdGUpIHtcbiAgICB2YXIgYXN0ID0gZWwuY2hpbGRyZW5bMF07XG4gICAgaWYgKGVsLmNoaWxkcmVuLmxlbmd0aCAhPT0gMSB8fCBhc3QudHlwZSAhPT0gMSkge1xuICAgICAgc3RhdGUud2FybihcbiAgICAgICAgJ0lubGluZS10ZW1wbGF0ZSBjb21wb25lbnRzIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBjaGlsZCBlbGVtZW50LicsXG4gICAgICAgIHsgc3RhcnQ6IGVsLnN0YXJ0IH1cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhc3QgJiYgYXN0LnR5cGUgPT09IDEpIHtcbiAgICAgIHZhciBpbmxpbmVSZW5kZXJGbnMgPSBnZW5lcmF0ZShhc3QsIHN0YXRlLm9wdGlvbnMpO1xuICAgICAgcmV0dXJuIChcImlubGluZVRlbXBsYXRlOntyZW5kZXI6ZnVuY3Rpb24oKXtcIiArIChpbmxpbmVSZW5kZXJGbnMucmVuZGVyKSArIFwifSxzdGF0aWNSZW5kZXJGbnM6W1wiICsgKGlubGluZVJlbmRlckZucy5zdGF0aWNSZW5kZXJGbnMubWFwKGZ1bmN0aW9uIChjb2RlKSB7IHJldHVybiAoXCJmdW5jdGlvbigpe1wiICsgY29kZSArIFwifVwiKTsgfSkuam9pbignLCcpKSArIFwiXX1cIilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5TY29wZWRTbG90cyAoXG4gICAgZWwsXG4gICAgc2xvdHMsXG4gICAgc3RhdGVcbiAgKSB7XG4gICAgLy8gYnkgZGVmYXVsdCBzY29wZWQgc2xvdHMgYXJlIGNvbnNpZGVyZWQgXCJzdGFibGVcIiwgdGhpcyBhbGxvd3MgY2hpbGRcbiAgICAvLyBjb21wb25lbnRzIHdpdGggb25seSBzY29wZWQgc2xvdHMgdG8gc2tpcCBmb3JjZWQgdXBkYXRlcyBmcm9tIHBhcmVudC5cbiAgICAvLyBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGJhaWwtb3V0IG9mIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgLy8gZm9yIGV4YW1wbGUgaWYgdGhlIHNsb3QgY29udGFpbnMgZHluYW1pYyBuYW1lcywgaGFzIHYtaWYgb3Igdi1mb3Igb24gdGhlbS4uLlxuICAgIHZhciBuZWVkc0ZvcmNlVXBkYXRlID0gZWwuZm9yIHx8IE9iamVjdC5rZXlzKHNsb3RzKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBzbG90ID0gc2xvdHNba2V5XTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNsb3Quc2xvdFRhcmdldER5bmFtaWMgfHxcbiAgICAgICAgc2xvdC5pZiB8fFxuICAgICAgICBzbG90LmZvciB8fFxuICAgICAgICBjb250YWluc1Nsb3RDaGlsZChzbG90KSAvLyBpcyBwYXNzaW5nIGRvd24gc2xvdCBmcm9tIHBhcmVudCB3aGljaCBtYXkgYmUgZHluYW1pY1xuICAgICAgKVxuICAgIH0pO1xuXG4gICAgLy8gIzk1MzQ6IGlmIGEgY29tcG9uZW50IHdpdGggc2NvcGVkIHNsb3RzIGlzIGluc2lkZSBhIGNvbmRpdGlvbmFsIGJyYW5jaCxcbiAgICAvLyBpdCdzIHBvc3NpYmxlIGZvciB0aGUgc2FtZSBjb21wb25lbnQgdG8gYmUgcmV1c2VkIGJ1dCB3aXRoIGRpZmZlcmVudFxuICAgIC8vIGNvbXBpbGVkIHNsb3QgY29udGVudC4gVG8gYXZvaWQgdGhhdCwgd2UgZ2VuZXJhdGUgYSB1bmlxdWUga2V5IGJhc2VkIG9uXG4gICAgLy8gdGhlIGdlbmVyYXRlZCBjb2RlIG9mIGFsbCB0aGUgc2xvdCBjb250ZW50cy5cbiAgICB2YXIgbmVlZHNLZXkgPSAhIWVsLmlmO1xuXG4gICAgLy8gT1Igd2hlbiBpdCBpcyBpbnNpZGUgYW5vdGhlciBzY29wZWQgc2xvdCBvciB2LWZvciAodGhlIHJlYWN0aXZpdHkgbWF5IGJlXG4gICAgLy8gZGlzY29ubmVjdGVkIGR1ZSB0byB0aGUgaW50ZXJtZWRpYXRlIHNjb3BlIHZhcmlhYmxlKVxuICAgIC8vICM5NDM4LCAjOTUwNlxuICAgIC8vIFRPRE86IHRoaXMgY2FuIGJlIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHByb3Blcmx5IGFuYWx5emluZyBpbi1zY29wZSBiaW5kaW5nc1xuICAgIC8vIGFuZCBza2lwIGZvcmNlIHVwZGF0aW5nIG9uZXMgdGhhdCBkbyBub3QgYWN0dWFsbHkgdXNlIHNjb3BlIHZhcmlhYmxlcy5cbiAgICBpZiAoIW5lZWRzRm9yY2VVcGRhdGUpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAocGFyZW50LnNsb3RTY29wZSAmJiBwYXJlbnQuc2xvdFNjb3BlICE9PSBlbXB0eVNsb3RTY29wZVRva2VuKSB8fFxuICAgICAgICAgIHBhcmVudC5mb3JcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmVlZHNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50LmlmKSB7XG4gICAgICAgICAgbmVlZHNLZXkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlZFNsb3RzID0gT2JqZWN0LmtleXMoc2xvdHMpXG4gICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGdlblNjb3BlZFNsb3Qoc2xvdHNba2V5XSwgc3RhdGUpOyB9KVxuICAgICAgLmpvaW4oJywnKTtcblxuICAgIHJldHVybiAoXCJzY29wZWRTbG90czpfdShbXCIgKyBnZW5lcmF0ZWRTbG90cyArIFwiXVwiICsgKG5lZWRzRm9yY2VVcGRhdGUgPyBcIixudWxsLHRydWVcIiA6IFwiXCIpICsgKCFuZWVkc0ZvcmNlVXBkYXRlICYmIG5lZWRzS2V5ID8gKFwiLG51bGwsZmFsc2UsXCIgKyAoaGFzaChnZW5lcmF0ZWRTbG90cykpKSA6IFwiXCIpICsgXCIpXCIpXG4gIH1cblxuICBmdW5jdGlvbiBoYXNoKHN0cikge1xuICAgIHZhciBoYXNoID0gNTM4MTtcbiAgICB2YXIgaSA9IHN0ci5sZW5ndGg7XG4gICAgd2hpbGUoaSkge1xuICAgICAgaGFzaCA9IChoYXNoICogMzMpIF4gc3RyLmNoYXJDb2RlQXQoLS1pKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2ggPj4+IDBcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zU2xvdENoaWxkIChlbCkge1xuICAgIGlmIChlbC50eXBlID09PSAxKSB7XG4gICAgICBpZiAoZWwudGFnID09PSAnc2xvdCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbC5jaGlsZHJlbi5zb21lKGNvbnRhaW5zU2xvdENoaWxkKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlblNjb3BlZFNsb3QgKFxuICAgIGVsLFxuICAgIHN0YXRlXG4gICkge1xuICAgIHZhciBpc0xlZ2FjeVN5bnRheCA9IGVsLmF0dHJzTWFwWydzbG90LXNjb3BlJ107XG4gICAgaWYgKGVsLmlmICYmICFlbC5pZlByb2Nlc3NlZCAmJiAhaXNMZWdhY3lTeW50YXgpIHtcbiAgICAgIHJldHVybiBnZW5JZihlbCwgc3RhdGUsIGdlblNjb3BlZFNsb3QsIFwibnVsbFwiKVxuICAgIH1cbiAgICBpZiAoZWwuZm9yICYmICFlbC5mb3JQcm9jZXNzZWQpIHtcbiAgICAgIHJldHVybiBnZW5Gb3IoZWwsIHN0YXRlLCBnZW5TY29wZWRTbG90KVxuICAgIH1cbiAgICB2YXIgc2xvdFNjb3BlID0gZWwuc2xvdFNjb3BlID09PSBlbXB0eVNsb3RTY29wZVRva2VuXG4gICAgICA/IFwiXCJcbiAgICAgIDogU3RyaW5nKGVsLnNsb3RTY29wZSk7XG4gICAgdmFyIGZuID0gXCJmdW5jdGlvbihcIiArIHNsb3RTY29wZSArIFwiKXtcIiArXG4gICAgICBcInJldHVybiBcIiArIChlbC50YWcgPT09ICd0ZW1wbGF0ZSdcbiAgICAgICAgPyBlbC5pZiAmJiBpc0xlZ2FjeVN5bnRheFxuICAgICAgICAgID8gKFwiKFwiICsgKGVsLmlmKSArIFwiKT9cIiArIChnZW5DaGlsZHJlbihlbCwgc3RhdGUpIHx8ICd1bmRlZmluZWQnKSArIFwiOnVuZGVmaW5lZFwiKVxuICAgICAgICAgIDogZ2VuQ2hpbGRyZW4oZWwsIHN0YXRlKSB8fCAndW5kZWZpbmVkJ1xuICAgICAgICA6IGdlbkVsZW1lbnQoZWwsIHN0YXRlKSkgKyBcIn1cIjtcbiAgICAvLyByZXZlcnNlIHByb3h5IHYtc2xvdCB3aXRob3V0IHNjb3BlIG9uIHRoaXMuJHNsb3RzXG4gICAgdmFyIHJldmVyc2VQcm94eSA9IHNsb3RTY29wZSA/IFwiXCIgOiBcIixwcm94eTp0cnVlXCI7XG4gICAgcmV0dXJuIChcIntrZXk6XCIgKyAoZWwuc2xvdFRhcmdldCB8fCBcIlxcXCJkZWZhdWx0XFxcIlwiKSArIFwiLGZuOlwiICsgZm4gKyByZXZlcnNlUHJveHkgKyBcIn1cIilcbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbkNoaWxkcmVuIChcbiAgICBlbCxcbiAgICBzdGF0ZSxcbiAgICBjaGVja1NraXAsXG4gICAgYWx0R2VuRWxlbWVudCxcbiAgICBhbHRHZW5Ob2RlXG4gICkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHZhciBlbCQxID0gY2hpbGRyZW5bMF07XG4gICAgICAvLyBvcHRpbWl6ZSBzaW5nbGUgdi1mb3JcbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZWwkMS5mb3IgJiZcbiAgICAgICAgZWwkMS50YWcgIT09ICd0ZW1wbGF0ZScgJiZcbiAgICAgICAgZWwkMS50YWcgIT09ICdzbG90J1xuICAgICAgKSB7XG4gICAgICAgIHZhciBub3JtYWxpemF0aW9uVHlwZSA9IGNoZWNrU2tpcFxuICAgICAgICAgID8gc3RhdGUubWF5YmVDb21wb25lbnQoZWwkMSkgPyBcIiwxXCIgOiBcIiwwXCJcbiAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIHJldHVybiAoXCJcIiArICgoYWx0R2VuRWxlbWVudCB8fCBnZW5FbGVtZW50KShlbCQxLCBzdGF0ZSkpICsgbm9ybWFsaXphdGlvblR5cGUpXG4gICAgICB9XG4gICAgICB2YXIgbm9ybWFsaXphdGlvblR5cGUkMSA9IGNoZWNrU2tpcFxuICAgICAgICA/IGdldE5vcm1hbGl6YXRpb25UeXBlKGNoaWxkcmVuLCBzdGF0ZS5tYXliZUNvbXBvbmVudClcbiAgICAgICAgOiAwO1xuICAgICAgdmFyIGdlbiA9IGFsdEdlbk5vZGUgfHwgZ2VuTm9kZTtcbiAgICAgIHJldHVybiAoXCJbXCIgKyAoY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBnZW4oYywgc3RhdGUpOyB9KS5qb2luKCcsJykpICsgXCJdXCIgKyAobm9ybWFsaXphdGlvblR5cGUkMSA/IChcIixcIiArIG5vcm1hbGl6YXRpb25UeXBlJDEpIDogJycpKVxuICAgIH1cbiAgfVxuXG4gIC8vIGRldGVybWluZSB0aGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgZm9yIHRoZSBjaGlsZHJlbiBhcnJheS5cbiAgLy8gMDogbm8gbm9ybWFsaXphdGlvbiBuZWVkZWRcbiAgLy8gMTogc2ltcGxlIG5vcm1hbGl6YXRpb24gbmVlZGVkIChwb3NzaWJsZSAxLWxldmVsIGRlZXAgbmVzdGVkIGFycmF5KVxuICAvLyAyOiBmdWxsIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gIGZ1bmN0aW9uIGdldE5vcm1hbGl6YXRpb25UeXBlIChcbiAgICBjaGlsZHJlbixcbiAgICBtYXliZUNvbXBvbmVudFxuICApIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZWwgPSBjaGlsZHJlbltpXTtcbiAgICAgIGlmIChlbC50eXBlICE9PSAxKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAobmVlZHNOb3JtYWxpemF0aW9uKGVsKSB8fFxuICAgICAgICAgIChlbC5pZkNvbmRpdGlvbnMgJiYgZWwuaWZDb25kaXRpb25zLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5lZWRzTm9ybWFsaXphdGlvbihjLmJsb2NrKTsgfSkpKSB7XG4gICAgICAgIHJlcyA9IDI7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAobWF5YmVDb21wb25lbnQoZWwpIHx8XG4gICAgICAgICAgKGVsLmlmQ29uZGl0aW9ucyAmJiBlbC5pZkNvbmRpdGlvbnMuc29tZShmdW5jdGlvbiAoYykgeyByZXR1cm4gbWF5YmVDb21wb25lbnQoYy5ibG9jayk7IH0pKSkge1xuICAgICAgICByZXMgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH1cblxuICBmdW5jdGlvbiBuZWVkc05vcm1hbGl6YXRpb24gKGVsKSB7XG4gICAgcmV0dXJuIGVsLmZvciAhPT0gdW5kZWZpbmVkIHx8IGVsLnRhZyA9PT0gJ3RlbXBsYXRlJyB8fCBlbC50YWcgPT09ICdzbG90J1xuICB9XG5cbiAgZnVuY3Rpb24gZ2VuTm9kZSAobm9kZSwgc3RhdGUpIHtcbiAgICBpZiAobm9kZS50eXBlID09PSAxKSB7XG4gICAgICByZXR1cm4gZ2VuRWxlbWVudChub2RlLCBzdGF0ZSlcbiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gMyAmJiBub2RlLmlzQ29tbWVudCkge1xuICAgICAgcmV0dXJuIGdlbkNvbW1lbnQobm9kZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdlblRleHQobm9kZSlcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZW5UZXh0ICh0ZXh0KSB7XG4gICAgcmV0dXJuIChcIl92KFwiICsgKHRleHQudHlwZSA9PT0gMlxuICAgICAgPyB0ZXh0LmV4cHJlc3Npb24gLy8gbm8gbmVlZCBmb3IgKCkgYmVjYXVzZSBhbHJlYWR5IHdyYXBwZWQgaW4gX3MoKVxuICAgICAgOiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMoSlNPTi5zdHJpbmdpZnkodGV4dC50ZXh0KSkpICsgXCIpXCIpXG4gIH1cblxuICBmdW5jdGlvbiBnZW5Db21tZW50IChjb21tZW50KSB7XG4gICAgcmV0dXJuIChcIl9lKFwiICsgKEpTT04uc3RyaW5naWZ5KGNvbW1lbnQudGV4dCkpICsgXCIpXCIpXG4gIH1cblxuICBmdW5jdGlvbiBnZW5TbG90IChlbCwgc3RhdGUpIHtcbiAgICB2YXIgc2xvdE5hbWUgPSBlbC5zbG90TmFtZSB8fCAnXCJkZWZhdWx0XCInO1xuICAgIHZhciBjaGlsZHJlbiA9IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSk7XG4gICAgdmFyIHJlcyA9IFwiX3QoXCIgKyBzbG90TmFtZSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKTtcbiAgICB2YXIgYXR0cnMgPSBlbC5hdHRycyB8fCBlbC5keW5hbWljQXR0cnNcbiAgICAgID8gZ2VuUHJvcHMoKGVsLmF0dHJzIHx8IFtdKS5jb25jYXQoZWwuZHluYW1pY0F0dHJzIHx8IFtdKS5tYXAoZnVuY3Rpb24gKGF0dHIpIHsgcmV0dXJuICh7XG4gICAgICAgICAgLy8gc2xvdCBwcm9wcyBhcmUgY2FtZWxpemVkXG4gICAgICAgICAgbmFtZTogY2FtZWxpemUoYXR0ci5uYW1lKSxcbiAgICAgICAgICB2YWx1ZTogYXR0ci52YWx1ZSxcbiAgICAgICAgICBkeW5hbWljOiBhdHRyLmR5bmFtaWNcbiAgICAgICAgfSk7IH0pKVxuICAgICAgOiBudWxsO1xuICAgIHZhciBiaW5kJCQxID0gZWwuYXR0cnNNYXBbJ3YtYmluZCddO1xuICAgIGlmICgoYXR0cnMgfHwgYmluZCQkMSkgJiYgIWNoaWxkcmVuKSB7XG4gICAgICByZXMgKz0gXCIsbnVsbFwiO1xuICAgIH1cbiAgICBpZiAoYXR0cnMpIHtcbiAgICAgIHJlcyArPSBcIixcIiArIGF0dHJzO1xuICAgIH1cbiAgICBpZiAoYmluZCQkMSkge1xuICAgICAgcmVzICs9IChhdHRycyA/ICcnIDogJyxudWxsJykgKyBcIixcIiArIGJpbmQkJDE7XG4gICAgfVxuICAgIHJldHVybiByZXMgKyAnKSdcbiAgfVxuXG4gIC8vIGNvbXBvbmVudE5hbWUgaXMgZWwuY29tcG9uZW50LCB0YWtlIGl0IGFzIGFyZ3VtZW50IHRvIHNodW4gZmxvdydzIHBlc3NpbWlzdGljIHJlZmluZW1lbnRcbiAgZnVuY3Rpb24gZ2VuQ29tcG9uZW50IChcbiAgICBjb21wb25lbnROYW1lLFxuICAgIGVsLFxuICAgIHN0YXRlXG4gICkge1xuICAgIHZhciBjaGlsZHJlbiA9IGVsLmlubGluZVRlbXBsYXRlID8gbnVsbCA6IGdlbkNoaWxkcmVuKGVsLCBzdGF0ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIChcIl9jKFwiICsgY29tcG9uZW50TmFtZSArIFwiLFwiICsgKGdlbkRhdGEkMihlbCwgc3RhdGUpKSArIChjaGlsZHJlbiA/IChcIixcIiArIGNoaWxkcmVuKSA6ICcnKSArIFwiKVwiKVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuUHJvcHMgKHByb3BzKSB7XG4gICAgdmFyIHN0YXRpY1Byb3BzID0gXCJcIjtcbiAgICB2YXIgZHluYW1pY1Byb3BzID0gXCJcIjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gdHJhbnNmb3JtU3BlY2lhbE5ld2xpbmVzKHByb3AudmFsdWUpO1xuICAgICAgaWYgKHByb3AuZHluYW1pYykge1xuICAgICAgICBkeW5hbWljUHJvcHMgKz0gKHByb3AubmFtZSkgKyBcIixcIiArIHZhbHVlICsgXCIsXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0aWNQcm9wcyArPSBcIlxcXCJcIiArIChwcm9wLm5hbWUpICsgXCJcXFwiOlwiICsgdmFsdWUgKyBcIixcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljUHJvcHMgPSBcIntcIiArIChzdGF0aWNQcm9wcy5zbGljZSgwLCAtMSkpICsgXCJ9XCI7XG4gICAgaWYgKGR5bmFtaWNQcm9wcykge1xuICAgICAgcmV0dXJuIChcIl9kKFwiICsgc3RhdGljUHJvcHMgKyBcIixbXCIgKyAoZHluYW1pY1Byb3BzLnNsaWNlKDAsIC0xKSkgKyBcIl0pXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdGF0aWNQcm9wc1xuICAgIH1cbiAgfVxuXG4gIC8vICMzODk1LCAjNDI2OFxuICBmdW5jdGlvbiB0cmFuc2Zvcm1TcGVjaWFsTmV3bGluZXMgKHRleHQpIHtcbiAgICByZXR1cm4gdGV4dFxuICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JylcbiAgfVxuXG4gIC8qICAqL1xuXG5cblxuICAvLyB0aGVzZSBrZXl3b3JkcyBzaG91bGQgbm90IGFwcGVhciBpbnNpZGUgZXhwcmVzc2lvbnMsIGJ1dCBvcGVyYXRvcnMgbGlrZVxuICAvLyB0eXBlb2YsIGluc3RhbmNlb2YgYW5kIGluIGFyZSBhbGxvd2VkXG4gIHZhciBwcm9oaWJpdGVkS2V5d29yZFJFID0gbmV3IFJlZ0V4cCgnXFxcXGInICsgKFxuICAgICdkbyxpZixmb3IsbGV0LG5ldyx0cnksdmFyLGNhc2UsZWxzZSx3aXRoLGF3YWl0LGJyZWFrLGNhdGNoLGNsYXNzLGNvbnN0LCcgK1xuICAgICdzdXBlcix0aHJvdyx3aGlsZSx5aWVsZCxkZWxldGUsZXhwb3J0LGltcG9ydCxyZXR1cm4sc3dpdGNoLGRlZmF1bHQsJyArXG4gICAgJ2V4dGVuZHMsZmluYWxseSxjb250aW51ZSxkZWJ1Z2dlcixmdW5jdGlvbixhcmd1bWVudHMnXG4gICkuc3BsaXQoJywnKS5qb2luKCdcXFxcYnxcXFxcYicpICsgJ1xcXFxiJyk7XG5cbiAgLy8gdGhlc2UgdW5hcnkgb3BlcmF0b3JzIHNob3VsZCBub3QgYmUgdXNlZCBhcyBwcm9wZXJ0eS9tZXRob2QgbmFtZXNcbiAgdmFyIHVuYXJ5T3BlcmF0b3JzUkUgPSBuZXcgUmVnRXhwKCdcXFxcYicgKyAoXG4gICAgJ2RlbGV0ZSx0eXBlb2Ysdm9pZCdcbiAgKS5zcGxpdCgnLCcpLmpvaW4oJ1xcXFxzKlxcXFwoW15cXFxcKV0qXFxcXCl8XFxcXGInKSArICdcXFxccypcXFxcKFteXFxcXCldKlxcXFwpJyk7XG5cbiAgLy8gc3RyaXAgc3RyaW5ncyBpbiBleHByZXNzaW9uc1xuICB2YXIgc3RyaXBTdHJpbmdSRSA9IC8nKD86W14nXFxcXF18XFxcXC4pKid8XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifGAoPzpbXmBcXFxcXXxcXFxcLikqXFwkXFx7fFxcfSg/OlteYFxcXFxdfFxcXFwuKSpgfGAoPzpbXmBcXFxcXXxcXFxcLikqYC9nO1xuXG4gIC8vIGRldGVjdCBwcm9ibGVtYXRpYyBleHByZXNzaW9ucyBpbiBhIHRlbXBsYXRlXG4gIGZ1bmN0aW9uIGRldGVjdEVycm9ycyAoYXN0LCB3YXJuKSB7XG4gICAgaWYgKGFzdCkge1xuICAgICAgY2hlY2tOb2RlKGFzdCwgd2Fybik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tOb2RlIChub2RlLCB3YXJuKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gMSkge1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBub2RlLmF0dHJzTWFwKSB7XG4gICAgICAgIGlmIChkaXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgdmFyIHZhbHVlID0gbm9kZS5hdHRyc01hcFtuYW1lXTtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IG5vZGUucmF3QXR0cnNNYXBbbmFtZV07XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3YtZm9yJykge1xuICAgICAgICAgICAgICBjaGVja0Zvcihub2RlLCAoXCJ2LWZvcj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAndi1zbG90JyB8fCBuYW1lWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgICAgY2hlY2tGdW5jdGlvblBhcmFtZXRlckV4cHJlc3Npb24odmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob25SRS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICAgIGNoZWNrRXZlbnQodmFsdWUsIChuYW1lICsgXCI9XFxcIlwiICsgdmFsdWUgKyBcIlxcXCJcIiksIHdhcm4sIHJhbmdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoZWNrRXhwcmVzc2lvbih2YWx1ZSwgKG5hbWUgKyBcIj1cXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKSwgd2FybiwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY2hlY2tOb2RlKG5vZGUuY2hpbGRyZW5baV0sIHdhcm4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnR5cGUgPT09IDIpIHtcbiAgICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIG5vZGUudGV4dCwgd2Fybiwgbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tFdmVudCAoZXhwLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIHZhciBzdHJpcHBlZCA9IGV4cC5yZXBsYWNlKHN0cmlwU3RyaW5nUkUsICcnKTtcbiAgICB2YXIga2V5d29yZE1hdGNoID0gc3RyaXBwZWQubWF0Y2godW5hcnlPcGVyYXRvcnNSRSk7XG4gICAgaWYgKGtleXdvcmRNYXRjaCAmJiBzdHJpcHBlZC5jaGFyQXQoa2V5d29yZE1hdGNoLmluZGV4IC0gMSkgIT09ICckJykge1xuICAgICAgd2FybihcbiAgICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IHVuYXJ5IG9wZXJhdG9yIGFzIHByb3BlcnR5IG5hbWU6IFwiICtcbiAgICAgICAgXCJcXFwiXCIgKyAoa2V5d29yZE1hdGNoWzBdKSArIFwiXFxcIiBpbiBleHByZXNzaW9uIFwiICsgKHRleHQudHJpbSgpKSxcbiAgICAgICAgcmFuZ2VcbiAgICAgICk7XG4gICAgfVxuICAgIGNoZWNrRXhwcmVzc2lvbihleHAsIHRleHQsIHdhcm4sIHJhbmdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRm9yIChub2RlLCB0ZXh0LCB3YXJuLCByYW5nZSkge1xuICAgIGNoZWNrRXhwcmVzc2lvbihub2RlLmZvciB8fCAnJywgdGV4dCwgd2FybiwgcmFuZ2UpO1xuICAgIGNoZWNrSWRlbnRpZmllcihub2RlLmFsaWFzLCAndi1mb3IgYWxpYXMnLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuaXRlcmF0b3IxLCAndi1mb3IgaXRlcmF0b3InLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gICAgY2hlY2tJZGVudGlmaWVyKG5vZGUuaXRlcmF0b3IyLCAndi1mb3IgaXRlcmF0b3InLCB0ZXh0LCB3YXJuLCByYW5nZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0lkZW50aWZpZXIgKFxuICAgIGlkZW50LFxuICAgIHR5cGUsXG4gICAgdGV4dCxcbiAgICB3YXJuLFxuICAgIHJhbmdlXG4gICkge1xuICAgIGlmICh0eXBlb2YgaWRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24oKFwidmFyIFwiICsgaWRlbnQgKyBcIj1fXCIpKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgd2FybigoXCJpbnZhbGlkIFwiICsgdHlwZSArIFwiIFxcXCJcIiArIGlkZW50ICsgXCJcXFwiIGluIGV4cHJlc3Npb246IFwiICsgKHRleHQudHJpbSgpKSksIHJhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0V4cHJlc3Npb24gKGV4cCwgdGV4dCwgd2FybiwgcmFuZ2UpIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEZ1bmN0aW9uKChcInJldHVybiBcIiArIGV4cCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciBrZXl3b3JkTWF0Y2ggPSBleHAucmVwbGFjZShzdHJpcFN0cmluZ1JFLCAnJykubWF0Y2gocHJvaGliaXRlZEtleXdvcmRSRSk7XG4gICAgICBpZiAoa2V5d29yZE1hdGNoKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJhdm9pZCB1c2luZyBKYXZhU2NyaXB0IGtleXdvcmQgYXMgcHJvcGVydHkgbmFtZTogXCIgK1xuICAgICAgICAgIFwiXFxcIlwiICsgKGtleXdvcmRNYXRjaFswXSkgKyBcIlxcXCJcXG4gIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSksXG4gICAgICAgICAgcmFuZ2VcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJpbnZhbGlkIGV4cHJlc3Npb246IFwiICsgKGUubWVzc2FnZSkgKyBcIiBpblxcblxcblwiICtcbiAgICAgICAgICBcIiAgICBcIiArIGV4cCArIFwiXFxuXFxuXCIgK1xuICAgICAgICAgIFwiICBSYXcgZXhwcmVzc2lvbjogXCIgKyAodGV4dC50cmltKCkpICsgXCJcXG5cIixcbiAgICAgICAgICByYW5nZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRnVuY3Rpb25QYXJhbWV0ZXJFeHByZXNzaW9uIChleHAsIHRleHQsIHdhcm4sIHJhbmdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIG5ldyBGdW5jdGlvbihleHAsICcnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB3YXJuKFxuICAgICAgICBcImludmFsaWQgZnVuY3Rpb24gcGFyYW1ldGVyIGV4cHJlc3Npb246IFwiICsgKGUubWVzc2FnZSkgKyBcIiBpblxcblxcblwiICtcbiAgICAgICAgXCIgICAgXCIgKyBleHAgKyBcIlxcblxcblwiICtcbiAgICAgICAgXCIgIFJhdyBleHByZXNzaW9uOiBcIiArICh0ZXh0LnRyaW0oKSkgKyBcIlxcblwiLFxuICAgICAgICByYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICB2YXIgcmFuZ2UgPSAyO1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlQ29kZUZyYW1lIChcbiAgICBzb3VyY2UsXG4gICAgc3RhcnQsXG4gICAgZW5kXG4gICkge1xuICAgIGlmICggc3RhcnQgPT09IHZvaWQgMCApIHN0YXJ0ID0gMDtcbiAgICBpZiAoIGVuZCA9PT0gdm9pZCAwICkgZW5kID0gc291cmNlLmxlbmd0aDtcblxuICAgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyP1xcbi8pO1xuICAgIHZhciBjb3VudCA9IDA7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvdW50ICs9IGxpbmVzW2ldLmxlbmd0aCArIDE7XG4gICAgICBpZiAoY291bnQgPj0gc3RhcnQpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGkgLSByYW5nZTsgaiA8PSBpICsgcmFuZ2UgfHwgZW5kID4gY291bnQ7IGorKykge1xuICAgICAgICAgIGlmIChqIDwgMCB8fCBqID49IGxpbmVzLmxlbmd0aCkgeyBjb250aW51ZSB9XG4gICAgICAgICAgcmVzLnB1c2goKFwiXCIgKyAoaiArIDEpICsgKHJlcGVhdCQxKFwiIFwiLCAzIC0gU3RyaW5nKGogKyAxKS5sZW5ndGgpKSArIFwifCAgXCIgKyAobGluZXNbal0pKSk7XG4gICAgICAgICAgdmFyIGxpbmVMZW5ndGggPSBsaW5lc1tqXS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGogPT09IGkpIHtcbiAgICAgICAgICAgIC8vIHB1c2ggdW5kZXJsaW5lXG4gICAgICAgICAgICB2YXIgcGFkID0gc3RhcnQgLSAoY291bnQgLSBsaW5lTGVuZ3RoKSArIDE7XG4gICAgICAgICAgICB2YXIgbGVuZ3RoID0gZW5kID4gY291bnQgPyBsaW5lTGVuZ3RoIC0gcGFkIDogZW5kIC0gc3RhcnQ7XG4gICAgICAgICAgICByZXMucHVzaChcIiAgIHwgIFwiICsgcmVwZWF0JDEoXCIgXCIsIHBhZCkgKyByZXBlYXQkMShcIl5cIiwgbGVuZ3RoKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChqID4gaSkge1xuICAgICAgICAgICAgaWYgKGVuZCA+IGNvdW50KSB7XG4gICAgICAgICAgICAgIHZhciBsZW5ndGgkMSA9IE1hdGgubWluKGVuZCAtIGNvdW50LCBsaW5lTGVuZ3RoKTtcbiAgICAgICAgICAgICAgcmVzLnB1c2goXCIgICB8ICBcIiArIHJlcGVhdCQxKFwiXlwiLCBsZW5ndGgkMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnQgKz0gbGluZUxlbmd0aCArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXMuam9pbignXFxuJylcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcGVhdCQxIChzdHIsIG4pIHtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgaWYgKG4gPiAwKSB7XG4gICAgICB3aGlsZSAodHJ1ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgIGlmIChuICYgMSkgeyByZXN1bHQgKz0gc3RyOyB9XG4gICAgICAgIG4gPj4+PSAxO1xuICAgICAgICBpZiAobiA8PSAwKSB7IGJyZWFrIH1cbiAgICAgICAgc3RyICs9IHN0cjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyogICovXG5cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uIChjb2RlLCBlcnJvcnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihjb2RlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyb3JzLnB1c2goeyBlcnI6IGVyciwgY29kZTogY29kZSB9KTtcbiAgICAgIHJldHVybiBub29wXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcGlsZVRvRnVuY3Rpb25GbiAoY29tcGlsZSkge1xuICAgIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gY29tcGlsZVRvRnVuY3Rpb25zIChcbiAgICAgIHRlbXBsYXRlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHZtXG4gICAgKSB7XG4gICAgICBvcHRpb25zID0gZXh0ZW5kKHt9LCBvcHRpb25zKTtcbiAgICAgIHZhciB3YXJuJCQxID0gb3B0aW9ucy53YXJuIHx8IHdhcm47XG4gICAgICBkZWxldGUgb3B0aW9ucy53YXJuO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgLy8gZGV0ZWN0IHBvc3NpYmxlIENTUCByZXN0cmljdGlvblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG5ldyBGdW5jdGlvbigncmV0dXJuIDEnKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGlmIChlLnRvU3RyaW5nKCkubWF0Y2goL3Vuc2FmZS1ldmFsfENTUC8pKSB7XG4gICAgICAgICAgICB3YXJuJCQxKFxuICAgICAgICAgICAgICAnSXQgc2VlbXMgeW91IGFyZSB1c2luZyB0aGUgc3RhbmRhbG9uZSBidWlsZCBvZiBWdWUuanMgaW4gYW4gJyArXG4gICAgICAgICAgICAgICdlbnZpcm9ubWVudCB3aXRoIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHRoYXQgcHJvaGliaXRzIHVuc2FmZS1ldmFsLiAnICtcbiAgICAgICAgICAgICAgJ1RoZSB0ZW1wbGF0ZSBjb21waWxlciBjYW5ub3Qgd29yayBpbiB0aGlzIGVudmlyb25tZW50LiBDb25zaWRlciAnICtcbiAgICAgICAgICAgICAgJ3JlbGF4aW5nIHRoZSBwb2xpY3kgdG8gYWxsb3cgdW5zYWZlLWV2YWwgb3IgcHJlLWNvbXBpbGluZyB5b3VyICcgK1xuICAgICAgICAgICAgICAndGVtcGxhdGVzIGludG8gcmVuZGVyIGZ1bmN0aW9ucy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjaGVjayBjYWNoZVxuICAgICAgdmFyIGtleSA9IG9wdGlvbnMuZGVsaW1pdGVyc1xuICAgICAgICA/IFN0cmluZyhvcHRpb25zLmRlbGltaXRlcnMpICsgdGVtcGxhdGVcbiAgICAgICAgOiB0ZW1wbGF0ZTtcbiAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBjYWNoZVtrZXldXG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBpbGVcbiAgICAgIHZhciBjb21waWxlZCA9IGNvbXBpbGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBjaGVjayBjb21waWxhdGlvbiBlcnJvcnMvdGlwc1xuICAgICAge1xuICAgICAgICBpZiAoY29tcGlsZWQuZXJyb3JzICYmIGNvbXBpbGVkLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXRTb3VyY2VSYW5nZSkge1xuICAgICAgICAgICAgY29tcGlsZWQuZXJyb3JzLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgICAgICBcIkVycm9yIGNvbXBpbGluZyB0ZW1wbGF0ZTpcXG5cXG5cIiArIChlLm1zZykgKyBcIlxcblxcblwiICtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvZGVGcmFtZSh0ZW1wbGF0ZSwgZS5zdGFydCwgZS5lbmQpLFxuICAgICAgICAgICAgICAgIHZtXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgICAgXCJFcnJvciBjb21waWxpbmcgdGVtcGxhdGU6XFxuXFxuXCIgKyB0ZW1wbGF0ZSArIFwiXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBjb21waWxlZC5lcnJvcnMubWFwKGZ1bmN0aW9uIChlKSB7IHJldHVybiAoXCItIFwiICsgZSk7IH0pLmpvaW4oJ1xcbicpICsgJ1xcbicsXG4gICAgICAgICAgICAgIHZtXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcGlsZWQudGlwcyAmJiBjb21waWxlZC50aXBzLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICBjb21waWxlZC50aXBzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgcmV0dXJuIHRpcChlLm1zZywgdm0pOyB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcGlsZWQudGlwcy5mb3JFYWNoKGZ1bmN0aW9uIChtc2cpIHsgcmV0dXJuIHRpcChtc2csIHZtKTsgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHR1cm4gY29kZSBpbnRvIGZ1bmN0aW9uc1xuICAgICAgdmFyIHJlcyA9IHt9O1xuICAgICAgdmFyIGZuR2VuRXJyb3JzID0gW107XG4gICAgICByZXMucmVuZGVyID0gY3JlYXRlRnVuY3Rpb24oY29tcGlsZWQucmVuZGVyLCBmbkdlbkVycm9ycyk7XG4gICAgICByZXMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWQuc3RhdGljUmVuZGVyRm5zLm1hcChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb24oY29kZSwgZm5HZW5FcnJvcnMpXG4gICAgICB9KTtcblxuICAgICAgLy8gY2hlY2sgZnVuY3Rpb24gZ2VuZXJhdGlvbiBlcnJvcnMuXG4gICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIgaXRzZWxmLlxuICAgICAgLy8gbW9zdGx5IGZvciBjb2RlZ2VuIGRldmVsb3BtZW50IHVzZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICB7XG4gICAgICAgIGlmICgoIWNvbXBpbGVkLmVycm9ycyB8fCAhY29tcGlsZWQuZXJyb3JzLmxlbmd0aCkgJiYgZm5HZW5FcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgd2FybiQkMShcbiAgICAgICAgICAgIFwiRmFpbGVkIHRvIGdlbmVyYXRlIHJlbmRlciBmdW5jdGlvbjpcXG5cXG5cIiArXG4gICAgICAgICAgICBmbkdlbkVycm9ycy5tYXAoZnVuY3Rpb24gKHJlZikge1xuICAgICAgICAgICAgICB2YXIgZXJyID0gcmVmLmVycjtcbiAgICAgICAgICAgICAgdmFyIGNvZGUgPSByZWYuY29kZTtcblxuICAgICAgICAgICAgICByZXR1cm4gKChlcnIudG9TdHJpbmcoKSkgKyBcIiBpblxcblxcblwiICsgY29kZSArIFwiXFxuXCIpO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoY2FjaGVba2V5XSA9IHJlcylcbiAgICB9XG4gIH1cblxuICAvKiAgKi9cblxuICBmdW5jdGlvbiBjcmVhdGVDb21waWxlckNyZWF0b3IgKGJhc2VDb21waWxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyIChiYXNlT3B0aW9ucykge1xuICAgICAgZnVuY3Rpb24gY29tcGlsZSAoXG4gICAgICAgIHRlbXBsYXRlLFxuICAgICAgICBvcHRpb25zXG4gICAgICApIHtcbiAgICAgICAgdmFyIGZpbmFsT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMpO1xuICAgICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICAgIHZhciB0aXBzID0gW107XG5cbiAgICAgICAgdmFyIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgKHRpcCA/IHRpcHMgOiBlcnJvcnMpLnB1c2gobXNnKTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgIGlmIChvcHRpb25zLm91dHB1dFNvdXJjZVJhbmdlKSB7XG4gICAgICAgICAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIHZhciBsZWFkaW5nU3BhY2VMZW5ndGggPSB0ZW1wbGF0ZS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHdhcm4gPSBmdW5jdGlvbiAobXNnLCByYW5nZSwgdGlwKSB7XG4gICAgICAgICAgICAgIHZhciBkYXRhID0geyBtc2c6IG1zZyB9O1xuICAgICAgICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGF0YS5zdGFydCA9IHJhbmdlLnN0YXJ0ICsgbGVhZGluZ1NwYWNlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmFuZ2UuZW5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGEuZW5kID0gcmFuZ2UuZW5kICsgbGVhZGluZ1NwYWNlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAodGlwID8gdGlwcyA6IGVycm9ycykucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG1lcmdlIGN1c3RvbSBtb2R1bGVzXG4gICAgICAgICAgaWYgKG9wdGlvbnMubW9kdWxlcykge1xuICAgICAgICAgICAgZmluYWxPcHRpb25zLm1vZHVsZXMgPVxuICAgICAgICAgICAgICAoYmFzZU9wdGlvbnMubW9kdWxlcyB8fCBbXSkuY29uY2F0KG9wdGlvbnMubW9kdWxlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG1lcmdlIGN1c3RvbSBkaXJlY3RpdmVzXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aXZlcykge1xuICAgICAgICAgICAgZmluYWxPcHRpb25zLmRpcmVjdGl2ZXMgPSBleHRlbmQoXG4gICAgICAgICAgICAgIE9iamVjdC5jcmVhdGUoYmFzZU9wdGlvbnMuZGlyZWN0aXZlcyB8fCBudWxsKSxcbiAgICAgICAgICAgICAgb3B0aW9ucy5kaXJlY3RpdmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb3B5IG90aGVyIG9wdGlvbnNcbiAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ21vZHVsZXMnICYmIGtleSAhPT0gJ2RpcmVjdGl2ZXMnKSB7XG4gICAgICAgICAgICAgIGZpbmFsT3B0aW9uc1trZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbmFsT3B0aW9ucy53YXJuID0gd2FybjtcblxuICAgICAgICB2YXIgY29tcGlsZWQgPSBiYXNlQ29tcGlsZSh0ZW1wbGF0ZS50cmltKCksIGZpbmFsT3B0aW9ucyk7XG4gICAgICAgIHtcbiAgICAgICAgICBkZXRlY3RFcnJvcnMoY29tcGlsZWQuYXN0LCB3YXJuKTtcbiAgICAgICAgfVxuICAgICAgICBjb21waWxlZC5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICAgIGNvbXBpbGVkLnRpcHMgPSB0aXBzO1xuICAgICAgICByZXR1cm4gY29tcGlsZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcGlsZTogY29tcGlsZSxcbiAgICAgICAgY29tcGlsZVRvRnVuY3Rpb25zOiBjcmVhdGVDb21waWxlVG9GdW5jdGlvbkZuKGNvbXBpbGUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyogICovXG5cbiAgLy8gYGNyZWF0ZUNvbXBpbGVyQ3JlYXRvcmAgYWxsb3dzIGNyZWF0aW5nIGNvbXBpbGVycyB0aGF0IHVzZSBhbHRlcm5hdGl2ZVxuICAvLyBwYXJzZXIvb3B0aW1pemVyL2NvZGVnZW4sIGUuZyB0aGUgU1NSIG9wdGltaXppbmcgY29tcGlsZXIuXG4gIC8vIEhlcmUgd2UganVzdCBleHBvcnQgYSBkZWZhdWx0IGNvbXBpbGVyIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRzLlxuICB2YXIgY3JlYXRlQ29tcGlsZXIgPSBjcmVhdGVDb21waWxlckNyZWF0b3IoZnVuY3Rpb24gYmFzZUNvbXBpbGUgKFxuICAgIHRlbXBsYXRlLFxuICAgIG9wdGlvbnNcbiAgKSB7XG4gICAgdmFyIGFzdCA9IHBhcnNlKHRlbXBsYXRlLnRyaW0oKSwgb3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMub3B0aW1pemUgIT09IGZhbHNlKSB7XG4gICAgICBvcHRpbWl6ZShhc3QsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB2YXIgY29kZSA9IGdlbmVyYXRlKGFzdCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFzdDogYXN0LFxuICAgICAgcmVuZGVyOiBjb2RlLnJlbmRlcixcbiAgICAgIHN0YXRpY1JlbmRlckZuczogY29kZS5zdGF0aWNSZW5kZXJGbnNcbiAgICB9XG4gIH0pO1xuXG4gIC8qICAqL1xuXG4gIHZhciByZWYkMSA9IGNyZWF0ZUNvbXBpbGVyKGJhc2VPcHRpb25zKTtcbiAgdmFyIGNvbXBpbGUgPSByZWYkMS5jb21waWxlO1xuICB2YXIgY29tcGlsZVRvRnVuY3Rpb25zID0gcmVmJDEuY29tcGlsZVRvRnVuY3Rpb25zO1xuXG4gIC8qICAqL1xuXG4gIC8vIGNoZWNrIHdoZXRoZXIgY3VycmVudCBicm93c2VyIGVuY29kZXMgYSBjaGFyIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzXG4gIHZhciBkaXY7XG4gIGZ1bmN0aW9uIGdldFNob3VsZERlY29kZSAoaHJlZikge1xuICAgIGRpdiA9IGRpdiB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gaHJlZiA/IFwiPGEgaHJlZj1cXFwiXFxuXFxcIi8+XCIgOiBcIjxkaXYgYT1cXFwiXFxuXFxcIi8+XCI7XG4gICAgcmV0dXJuIGRpdi5pbm5lckhUTUwuaW5kZXhPZignJiMxMDsnKSA+IDBcbiAgfVxuXG4gIC8vICMzNjYzOiBJRSBlbmNvZGVzIG5ld2xpbmVzIGluc2lkZSBhdHRyaWJ1dGUgdmFsdWVzIHdoaWxlIG90aGVyIGJyb3dzZXJzIGRvbid0XG4gIHZhciBzaG91bGREZWNvZGVOZXdsaW5lcyA9IGluQnJvd3NlciA/IGdldFNob3VsZERlY29kZShmYWxzZSkgOiBmYWxzZTtcbiAgLy8gIzY4Mjg6IGNocm9tZSBlbmNvZGVzIGNvbnRlbnQgaW4gYVtocmVmXVxuICB2YXIgc2hvdWxkRGVjb2RlTmV3bGluZXNGb3JIcmVmID0gaW5Ccm93c2VyID8gZ2V0U2hvdWxkRGVjb2RlKHRydWUpIDogZmFsc2U7XG5cbiAgLyogICovXG5cbiAgdmFyIGlkVG9UZW1wbGF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgZWwgPSBxdWVyeShpZCk7XG4gICAgcmV0dXJuIGVsICYmIGVsLmlubmVySFRNTFxuICB9KTtcblxuICB2YXIgbW91bnQgPSBWdWUucHJvdG90eXBlLiRtb3VudDtcbiAgVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbiAoXG4gICAgZWwsXG4gICAgaHlkcmF0aW5nXG4gICkge1xuICAgIGVsID0gZWwgJiYgcXVlcnkoZWwpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGVsID09PSBkb2N1bWVudC5ib2R5IHx8IGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwiRG8gbm90IG1vdW50IFZ1ZSB0byA8aHRtbD4gb3IgPGJvZHk+IC0gbW91bnQgdG8gbm9ybWFsIGVsZW1lbnRzIGluc3RlYWQuXCJcbiAgICAgICk7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIHZhciBvcHRpb25zID0gdGhpcy4kb3B0aW9ucztcbiAgICAvLyByZXNvbHZlIHRlbXBsYXRlL2VsIGFuZCBjb252ZXJ0IHRvIHJlbmRlciBmdW5jdGlvblxuICAgIGlmICghb3B0aW9ucy5yZW5kZXIpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IG9wdGlvbnMudGVtcGxhdGU7XG4gICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KDApID09PSAnIycpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlID0gaWRUb1RlbXBsYXRlKHRlbXBsYXRlKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgIChcIlRlbXBsYXRlIGVsZW1lbnQgbm90IGZvdW5kIG9yIGlzIGVtcHR5OiBcIiArIChvcHRpb25zLnRlbXBsYXRlKSksXG4gICAgICAgICAgICAgICAgdGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZS5ub2RlVHlwZSkge1xuICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuaW5uZXJIVE1MO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdhcm4oJ2ludmFsaWQgdGVtcGxhdGUgb3B0aW9uOicgKyB0ZW1wbGF0ZSwgdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZWwpIHtcbiAgICAgICAgdGVtcGxhdGUgPSBnZXRPdXRlckhUTUwoZWwpO1xuICAgICAgfVxuICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICBtYXJrKCdjb21waWxlJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVmID0gY29tcGlsZVRvRnVuY3Rpb25zKHRlbXBsYXRlLCB7XG4gICAgICAgICAgb3V0cHV0U291cmNlUmFuZ2U6IFwiZGV2ZWxvcG1lbnRcIiAhPT0gJ3Byb2R1Y3Rpb24nLFxuICAgICAgICAgIHNob3VsZERlY29kZU5ld2xpbmVzOiBzaG91bGREZWNvZGVOZXdsaW5lcyxcbiAgICAgICAgICBzaG91bGREZWNvZGVOZXdsaW5lc0ZvckhyZWY6IHNob3VsZERlY29kZU5ld2xpbmVzRm9ySHJlZixcbiAgICAgICAgICBkZWxpbWl0ZXJzOiBvcHRpb25zLmRlbGltaXRlcnMsXG4gICAgICAgICAgY29tbWVudHM6IG9wdGlvbnMuY29tbWVudHNcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgICAgICB2YXIgc3RhdGljUmVuZGVyRm5zID0gcmVmLnN0YXRpY1JlbmRlckZucztcbiAgICAgICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXI7XG4gICAgICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgICAgICBtYXJrKCdjb21waWxlIGVuZCcpO1xuICAgICAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHRoaXMuX25hbWUpICsgXCIgY29tcGlsZVwiKSwgJ2NvbXBpbGUnLCAnY29tcGlsZSBlbmQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW91bnQuY2FsbCh0aGlzLCBlbCwgaHlkcmF0aW5nKVxuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgb3V0ZXJIVE1MIG9mIGVsZW1lbnRzLCB0YWtpbmcgY2FyZVxuICAgKiBvZiBTVkcgZWxlbWVudHMgaW4gSUUgYXMgd2VsbC5cbiAgICovXG4gIGZ1bmN0aW9uIGdldE91dGVySFRNTCAoZWwpIHtcbiAgICBpZiAoZWwub3V0ZXJIVE1MKSB7XG4gICAgICByZXR1cm4gZWwub3V0ZXJIVE1MXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbC5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgICAgcmV0dXJuIGNvbnRhaW5lci5pbm5lckhUTUxcbiAgICB9XG4gIH1cblxuICBWdWUuY29tcGlsZSA9IGNvbXBpbGVUb0Z1bmN0aW9ucztcblxuICByZXR1cm4gVnVlO1xuXG59KSk7XG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTA2NTc0LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAxMDY1NzR9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0MzcuOTU0LCAicmVjZWl2ZSI6IDE1Ni42NDV9LCAicGFnZXJlZiI6ICJwYWdlQDdkZDllNzNlYjZiYjE3MjMxYTVjYTIwMGYzNDg3ODdmIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cubGFvZ2FuZ3RlYS5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxODYsICJ2YWxpZFRvIjogMTY5MjY2OTE4NX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE0OjE3OjMxLjY5N1oiLCAidGltZSI6IDU4NS43NDM5OTk5OTk5OTk5LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvanMvaW5kZXhfcGMuanMiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJsYW9nYW5ndGVhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvanMvaW5kZXhfcGMuanMifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tL2liZy9jbGllbnQvbF9ob21lX3AucGhwIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzY3JpcHQifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0MzMsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT00MzIwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJXZWQsIDI0IE1heSAyMDIzIDE0OjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJXL1wiNjQzNGRlYzktMjE1ZFwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIlRodSwgMjUgTWF5IDIwMjMgMDI6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlR1ZSwgMTEgQXByIDIwMjMgMDQ6MTU6MDUgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifV0sICJjb250ZW50IjogeyJzaXplIjogODU0MSwgIm1pbWVUeXBlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCAiY29tcHJlc3Npb24iOiA2NTg5LCAidGV4dCI6ICJjb25zdCBhcHAgPSBuZXcgVnVlKHtcblx0ZWw6ICcjcGFnZScsXG5cdGRhdGE6IHtcblx0XHRjaG9zZTogdHJ1ZSxcblx0XHRkaWFuZmFuaGFvOiAnJyxcblx0XHRrb3V6dW9mYW5oYW86ICcnLFxuXHRcdHVzZXJuYW1lOiAnJyxcblx0XHRwYXNzd29yZFRleHQ6J1x1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOVx1MzA2ZVx1NTE2NVx1NTI5YicsXG5cdFx0cGFzc3dvcmQ6ICcnLFxuXHRcdHRpcHNTaG93OiBmYWxzZSxcblx0XHRjb250ZW50U2hvdzogdHJ1ZSxcblx0XHRsb2FkaW5nU2hvdzogZmFsc2UsXG5cdFx0dGlwczogJ1x1NzhiYVx1OGE4ZFx1NzU2YVx1NTNmN1x1MzA5Mlx1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMicsXG5cdFx0aXNGaXJzdDogdHJ1ZVxuXHR9LFxuXHRtb3VudGVkKCkge1xuXHRcdHRoaXMub25saW5lKClcblx0fSxcblx0bWV0aG9kczoge1xuXHRcdG9ubGluZSgpIHtcblx0XHRcdHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0aWYgKHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSkge1xuXHRcdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcInBvc3RcIixcblx0XHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS91cGRhdGFfc3RhdGUucGhwPycsXG5cdFx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdCd1c2VySWQnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdFx0Y2FjaGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5pbmZvLmluZGV4T2YoJ3N1Y2Nlc3MnKSAhPSAtMSkge1xuXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YS5pbmZvKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH1cblx0XHRcdH0sIDMwMDApXG5cdFx0fSxcblx0XHRzZW5kKCkge1xuXHRcdFx0aWYgKHRoaXMuY2hvc2UpIHtcblx0XHRcdFx0aWYgKHRoaXMudXNlcm5hbWUgPT0gJycpIHtcblx0XHRcdFx0XHR0aGlzLnRpcHMgPSAnXHUyNDYwXHU1ZTk3XHU3NTZhXHU1M2Y3XHUzMGZiXHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3XHUzMDdlXHUzMDVmXHUzMDZmXHUyNDYxXHU0ZjFhXHU1NGUxXHU3NTZhXHU1M2Y3XHUzMDZlXHUzMDY5XHUzMDYxXHUzMDg5XHUzMDRiXHUzMDkyXHUzMDU0XHU1MTY1XHU1MjliXHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU1MTY1XHU1MjliXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyJ1xuXHRcdFx0XHRcdHRoaXMudGlwc1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLnBhc3N3b3JkID09ICcnKSB7XG5cdFx0XHRcdFx0dGhpcy50aXBzID0gJ1x1MjQ2MFx1NWU5N1x1NzU2YVx1NTNmN1x1MzBmYlx1NGVlM1x1ODg2OFx1NjY2ZVx1OTAxYVx1OTgxMFx1OTFkMVx1NTNlM1x1NWVhN1x1NzU2YVx1NTNmN1x1MzA3ZVx1MzA1Zlx1MzA2Zlx1MjQ2MVx1NGYxYVx1NTRlMVx1NzU2YVx1NTNmN1x1MzA2ZVx1MzA2OVx1MzA2MVx1MzA4OVx1MzA0Ylx1MzA5Mlx1MzA1NFx1NTE2NVx1NTI5Ylx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOVx1MzA5Mlx1NTE2NVx1NTI5Ylx1MzA1N1x1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMidcblx0XHRcdFx0XHR0aGlzLnRpcHNTaG93ID0gdHJ1ZVxuXHRcdFx0XHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdGlmKHRoaXMucGFzc3dvcmQubGVuZ3RoPDYpe1xuXHRcdFx0XHQgICAgdGhpcy50aXBzPSdcdTMwNTRcdTUyMjlcdTc1MjhcdTc1MzNcdThmYmNcdTMwOTJcdTg4NGNcdTMwNjNcdTMwNjZcdTMwNDRcdTMwNmFcdTMwNDRcdTU4MzRcdTU0MDhcdTMwNmZcdTMwNTNcdTMwNjFcdTMwODlcdTMwNjdcdTc1MzNcdTMwNTdcdThmYmNcdTMwN2ZcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDJcdTMwNmFcdTMwNGFcdTMwMDFcdTYyNDBcdTViOWFcdTU2ZGVcdTY1NzBcdTRlZTVcdTRlMGFcdTk1OTNcdTkwNTVcdTMwNDhcdTMwOGJcdTMwNjhcdTMwZWRcdTMwYjBcdTMwYTRcdTMwZjNcdTMwNGNcdTg4NGNcdTMwNDhcdTMwNmFcdTMwNDRcdTU4MzRcdTU0MDhcdTMwNGNcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTlcdTMwMDJcdTUxOGRcdTk1OGJcdTY1YjlcdTZjZDVcdTMwNmZcdTMwZDhcdTMwZWJcdTMwZDdcdTMwNjdcdTc4YmFcdThhOGRcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDInXG5cdFx0XHRcdCAgICB0aGlzLnRpcHNTaG93ID0gdHJ1ZVxuXHRcdFx0XHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHRoaXMuZGlhbmZhbmhhbyA9PSAnJyB8fCB0aGlzLmtvdXp1b2ZhbmhhbyA9PSAnJykge1xuXHRcdFx0XHRcdHRoaXMudGlwcyA9ICdcdTI0NjBcdTVlOTdcdTc1NmFcdTUzZjdcdTMwZmJcdTRlZTNcdTg4NjhcdTY2NmVcdTkwMWFcdTk4MTBcdTkxZDFcdTUzZTNcdTVlYTdcdTc1NmFcdTUzZjdcdTMwN2VcdTMwNWZcdTMwNmZcdTI0NjFcdTRmMWFcdTU0ZTFcdTc1NmFcdTUzZjdcdTMwNmVcdTMwNjlcdTMwNjFcdTMwODlcdTMwNGJcdTMwOTJcdTMwNTRcdTUxNjVcdTUyOWJcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDJcdTMwZWRcdTMwYjBcdTMwYTRcdTMwZjNcdTMwZDFcdTMwYjlcdTMwZWZcdTMwZmNcdTMwYzlcdTMwOTJcdTUxNjVcdTUyOWJcdTMwNTdcdTMwNjZcdTMwNGZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDInXG5cdFx0XHRcdFx0dGhpcy50aXBzU2hvdyA9IHRydWVcblx0XHRcdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXHRcdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRoaXMucGFzc3dvcmQgPT0gJycpIHtcblx0XHRcdFx0XHR0aGlzLnRpcHMgPSAnXHUyNDYwXHU1ZTk3XHU3NTZhXHU1M2Y3XHUzMGZiXHU0ZWUzXHU4ODY4XHU2NjZlXHU5MDFhXHU5ODEwXHU5MWQxXHU1M2UzXHU1ZWE3XHU3NTZhXHU1M2Y3XHUzMDdlXHUzMDVmXHUzMDZmXHUyNDYxXHU0ZjFhXHU1NGUxXHU3NTZhXHU1M2Y3XHUzMDZlXHUzMDY5XHUzMDYxXHUzMDg5XHUzMDRiXHUzMDkyXHUzMDU0XHU1MTY1XHU1MjliXHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyXHUzMGVkXHUzMGIwXHUzMGE0XHUzMGYzXHUzMGQxXHUzMGI5XHUzMGVmXHUzMGZjXHUzMGM5XHUzMDkyXHU1MTY1XHU1MjliXHUzMDU3XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyJ1xuXHRcdFx0XHRcdHRoaXMudGlwc1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdFx0aWYodGhpcy5wYXNzd29yZC5sZW5ndGg8Nil7XG5cdFx0XHRcdCAgICB0aGlzLnRpcHM9J1x1MzA1NFx1NTIyOVx1NzUyOFx1NzUzM1x1OGZiY1x1MzA5Mlx1ODg0Y1x1MzA2M1x1MzA2Nlx1MzA0NFx1MzA2YVx1MzA0NFx1NTgzNFx1NTQwOFx1MzA2Zlx1MzA1M1x1MzA2MVx1MzA4OVx1MzA2N1x1NzUzM1x1MzA1N1x1OGZiY1x1MzA3Zlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlx1MzA2YVx1MzA0YVx1MzAwMVx1NjI0MFx1NWI5YVx1NTZkZVx1NjU3MFx1NGVlNVx1NGUwYVx1OTU5M1x1OTA1NVx1MzA0OFx1MzA4Ylx1MzA2OFx1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzA0Y1x1ODg0Y1x1MzA0OFx1MzA2YVx1MzA0NFx1NTgzNFx1NTQwOFx1MzA0Y1x1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1OVx1MzAwMlx1NTE4ZFx1OTU4Ylx1NjViOVx1NmNkNVx1MzA2Zlx1MzBkOFx1MzBlYlx1MzBkN1x1MzA2N1x1NzhiYVx1OGE4ZFx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMidcblx0XHRcdFx0ICAgIHRoaXMudGlwc1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5pc0ZpcnN0ID09IHRydWUpIHtcblx0XHRcdFx0Y29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRcdG5vdyA9IGRhdGUuZ2V0VGltZSgpO1xuXG5cdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJwb3N0XCIsXG5cdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2NyZWF0ZXVzZXIucGhwJyxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHQnZGlhbmZhbmhhbyc6IHRoaXMuZGlhbmZhbmhhbyxcblx0XHRcdFx0XHRcdFwia291enVvZmFuaGFvXCI6IHRoaXMua291enVvZmFuaGFvLFxuXHRcdFx0XHRcdFx0J3VzZXJuYW1lJzogdGhpcy51c2VybmFtZSxcblx0XHRcdFx0XHRcdCdwYXNzd29yZCc6IHRoaXMucGFzc3dvcmRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFUeXBlOiBcImpzb25cIixcblx0XHRcdFx0XHRjYWNoZTogZmFsc2UsXG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0c3VjY2VzczogKGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdGlmIChkYXRhLmluZm8uaW5kZXhPZignc3VjY2VzcycpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VySWQnLCBkYXRhLmlkKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE9wdGlvbnMoKVxuXHRcdFx0XHRcdFx0XHR0aGlzLmNvbnRlbnRTaG93ID0gZmFsc2Vcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU2hvdyA9IHRydWVcblx0XHRcdFx0XHRcdFx0dGhpcy50aXBzU2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmxvZyhkYXRhLmluZm8pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSlcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0XHRub3cgPSBkYXRlLmdldFRpbWUoKTtcblxuXHRcdFx0XHQkLmFqYXgoe1xuXHRcdFx0XHRcdHR5cGU6IFwicG9zdFwiLFxuXHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS91cGRhdGF1c2VyX2luZGV4LnBocCcsXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0J3VzZXJJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcblx0XHRcdFx0XHRcdCdkaWFuZmFuaGFvJzogdGhpcy5kaWFuZmFuaGFvLFxuXHRcdFx0XHRcdFx0XCJrb3V6dW9mYW5oYW9cIjogdGhpcy5rb3V6dW9mYW5oYW8sXG5cdFx0XHRcdFx0XHQndXNlcm5hbWUnOiB0aGlzLnVzZXJuYW1lLFxuXHRcdFx0XHRcdFx0J3Bhc3N3b3JkJzogdGhpcy5wYXNzd29yZFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEuaW5mby5pbmRleE9mKCdzdWNjZXNzJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5nZXRPcHRpb25zKClcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250ZW50U2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdHRoaXMubG9hZGluZ1Nob3cgPSB0cnVlXG5cdFx0XHRcdFx0XHRcdHRoaXMudGlwc1Nob3cgPSBmYWxzZVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2coZGF0YS5pbmZvKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pXG5cdFx0XHR9XG5cblx0XHR9LFxuXHRcdGdldE9wdGlvbnMoKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdG5vdyA9IGRhdGUuZ2V0VGltZSgpO1xuXG5cdFx0XHRsZXQgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0dHlwZTogXCJwb3N0XCIsXG5cdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2dldG9wdGlvbnMucGhwPycgKyBub3csXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0XCJ1c2VySWRcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRhdGEub3B0aW9ucy5pbmRleE9mKCdwYXNzd29yZGVycm9yJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCA9IDBcblx0XHRcdFx0XHRcdFx0dGhpcy50aXBzID0gJ1x1MzBlZFx1MzBiMFx1MzBhNFx1MzBmM1x1MzBkMVx1MzBiOVx1MzBlZlx1MzBmY1x1MzBjOVx1MzA2ZVx1NTE2NVx1NTI5Ylx1NjViOVx1NmNkNVx1MzA0Y1x1OTU5M1x1OTA1NVx1MzA2M1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1OVx1MzAwMidcblx0XHRcdFx0XHRcdFx0dGhpcy50aXBzU2hvdyA9IHRydWVcblx0XHRcdFx0XHRcdFx0dGhpcy5jb250ZW50U2hvdyA9IHRydWVcblx0XHRcdFx0XHRcdFx0dGhpcy5sb2FkaW5nU2hvdyA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdHRoaXMuaXNGaXJzdCA9IGZhbHNlXG5cdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEub3B0aW9ucy5pbmRleE9mKCd0b3Bob25ldmVyaWZpY2F0aW9uJykgIT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0d2luZG93LmxvY2F0aW9uLmFzc2lnbignLi4vY2xpZW50L3BfdmVyX3AucGhwJylcblx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lcilcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5vcHRpb25zLmluZGV4T2YoJ3RvYXV0aGVudGljYXRpb24nKSAhPSAtMSkge1xuXHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCcuLi9jbGllbnQvbG9naW5fcGMucGhwJylcblx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lcilcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZGF0YS5vcHRpb25zLmluZGV4T2YoJ3RvbWliYW9uZXcnKSAhPSAtMSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhcmQoKVxuXHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChkYXRhLm9wdGlvbnMuaW5kZXhPZigndG9taWJhb29sZCcpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0Q2FyZE9sZCgpXG5cdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZiAoZGF0YS5vcHRpb25zLmluZGV4T2YoJ3RvaG9tZScpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJy4uL2NsaWVudC9vX3BjLnBocCcpXG5cdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGRhdGEub3B0aW9ucy5pbmRleE9mKCdyZXNldCcpICE9IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJy4uL2NsaWVudC9sX2hvbWVfcC5waHAnKVxuXHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pXG5cdFx0XHR9LCAxMDAwKVxuXHRcdH0sXG5cdFx0Z2V0Q2FyZCgpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuXHRcdFx0bm93ID0gZGF0ZS5nZXRUaW1lKCk7XG5cblx0XHRcdChmdW5jdGlvbigpIHtcblx0XHRcdFx0bGV0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcInBvc3RcIixcblx0XHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS9nZXRjYXJkMS5waHA/JyArIG5vdyxcblx0XHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdFx0J3VzZXJJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkYXRhVHlwZTogXCJqc29uXCIsXG5cdFx0XHRcdFx0XHRjYWNoZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLmNhcmQxICE9IG51bGwgJiYgZGF0YS5jYXJkMSAhPSAnJykge1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJkMScsIGRhdGEuY2FyZDEpXG5cdFx0XHRcdFx0XHRcdFx0Z2V0Q2FyZDIoKVxuXHRcdFx0XHRcdFx0XHRcdGNsZWFySW50ZXJ2YWwodGltZXIpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSwgMTAwMClcblx0XHRcdH0pKClcblxuXHRcdFx0ZnVuY3Rpb24gZ2V0Q2FyZDIoKSB7XG5cdFx0XHRcdGxldCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdFx0XHQkLmFqYXgoe1xuXHRcdFx0XHRcdFx0dHlwZTogXCJwb3N0XCIsXG5cdFx0XHRcdFx0XHR1cmw6ICcuLi8uLi9hcGkvZ2V0Y2FyZDIucGhwPycgKyBub3csXG5cdFx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRcdCd1c2VySWQnOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0ZGF0YVR5cGU6IFwianNvblwiLFxuXHRcdFx0XHRcdFx0Y2FjaGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0XHRzdWNjZXNzOiAoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAoZGF0YS5jYXJkMiAhPSBudWxsICYmIGRhdGEuY2FyZDIgIT0gJycpIHtcblx0XHRcdFx0XHRcdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FyZDInLCBkYXRhLmNhcmQyKVxuXHRcdFx0XHRcdFx0XHRcdGdldENhcmQzKClcblx0XHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sIDEwMDApXG5cdFx0XHR9XG5cblx0XHRcdGZ1bmN0aW9uIGdldENhcmQzKCkge1xuXHRcdFx0XHRsZXQgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRcdFx0JC5hamF4KHtcblx0XHRcdFx0XHRcdHR5cGU6IFwicG9zdFwiLFxuXHRcdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2dldGNhcmQzLnBocD8nICsgbm93LFxuXHRcdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0XHQndXNlcklkJzogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRhdGFUeXBlOiBcImpzb25cIixcblx0XHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3VjY2VzczogKGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEuY2FyZDMgIT0gbnVsbCAmJiBkYXRhLmNhcmQzICE9ICcnKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcmQzJywgZGF0YS5jYXJkMylcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCcuLi9jbGllbnQvaXNsb2dpbl9jX3AucGhwJylcblx0XHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sIDEwMDApXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRnZXRDYXJkT2xkKCl7XG5cdFx0XHRjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcblx0XHRcdG5vdyA9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0XG5cdFx0XHQoZnVuY3Rpb24oKXtcblx0XHRcdFx0bGV0IHRpbWVyPXNldEludGVydmFsKCgpPT57XG5cdFx0XHRcdFx0JC5hamF4KHtcblx0XHRcdFx0XHRcdHR5cGU6IFwicG9zdFwiLFxuXHRcdFx0XHRcdFx0dXJsOiAnLi4vLi4vYXBpL2dldGNhcmQxLnBocD8nICsgbm93LFxuXHRcdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0XHQndXNlcklkJzogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGRhdGFUeXBlOiBcImpzb25cIixcblx0XHRcdFx0XHRcdGNhY2hlOiBmYWxzZSxcblx0XHRcdFx0XHRcdGFzeW5jOiB0cnVlLFxuXHRcdFx0XHRcdFx0c3VjY2VzczogKGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKGRhdGEuY2FyZDEhPW51bGwmJmRhdGEuY2FyZDEhPScnKSB7XG5cdFx0XHRcdFx0XHRcdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhcmQxJyxkYXRhLmNhcmQxKVxuXHRcdFx0XHRcdFx0XHRcdGdldENhcmQyKClcblx0XHRcdFx0XHRcdFx0XHRjbGVhckludGVydmFsKHRpbWVyKVxuXHRcdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9LDEwMDApXG5cdFx0XHR9KSgpXG5cdFx0XHRcblx0XHRcdGZ1bmN0aW9uIGdldENhcmQyKCl7XG5cdFx0XHRcdGxldCB0aW1lcj1zZXRJbnRlcnZhbCgoKT0+e1xuXHRcdFx0XHRcdCQuYWpheCh7XG5cdFx0XHRcdFx0XHR0eXBlOiBcInBvc3RcIixcblx0XHRcdFx0XHRcdHVybDogJy4uLy4uL2FwaS9nZXRjYXJkMi5waHA/JyArIG5vdyxcblx0XHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdFx0J3VzZXJJZCc6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRkYXRhVHlwZTogXCJqc29uXCIsXG5cdFx0XHRcdFx0XHRjYWNoZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRcdHN1Y2Nlc3M6IChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChkYXRhLmNhcmQyIT1udWxsJiZkYXRhLmNhcmQyIT0nJykge1xuXHRcdFx0XHRcdFx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJkMicsZGF0YS5jYXJkMilcblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24uYXNzaWduKCcuLi9jbGllbnQvaXNsb2dpbl9jX29sZF9wLnBocCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lcilcblx0XHRcdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSwxMDAwKVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcbn0pXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTk1MiwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTk1Mn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDQzOC41MywgInJlY2VpdmUiOiAxNDcuMjE0fSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS42OTlaIiwgInRpbWUiOiA1OTEuNzQyOTk5OTk5OTk5OSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2Nzcy9wYy9wcmludC5jc3MiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJsYW9nYW5ndGVhLmNvbSJ9LCB7Im5hbWUiOiAiOm1ldGhvZCIsICJ2YWx1ZSI6ICJHRVQifSwgeyJuYW1lIjogIjpwYXRoIiwgInZhbHVlIjogIi9pYmcvY3NzL3BjL3ByaW50LmNzcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogInRleHQvY3NzLCovKjtxPTAuMSJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2NsaWVudC9sX2hvbWVfcC5waHAifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogInN0eWxlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDUxLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9NDMyMDAifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogInRleHQvY3NzIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIldlZCwgMjQgTWF5IDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlcvXCI2NDE3NDlmNi01ZThcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJUaHUsIDI1IE1heSAyMDIzIDAyOjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDE3OjQ0OjIyIEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifSwgeyJuYW1lIjogInZhcnkiLCAidmFsdWUiOiAiQWNjZXB0LUVuY29kaW5nIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDE1MTIsICJtaW1lVHlwZSI6ICJ0ZXh0L2NzcyIsICJjb21wcmVzc2lvbiI6IDY4MiwgInRleHQiOiAiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZ2VuZXJhbCBzdHlsZXMgZm9yIHByaW50IG1lZGlhXG5sYXN0IHVwZGF0ZSAyMDExLTA0LTI4LTA5OjAwXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5ib2R5IHtiYWNrZ3JvdW5kOiB3aGl0ZTtmb250LXNpemU6IDEwcHQ7Y29sb3I6IzAwMDt9XG5cbmh0bWwsYm9keSxcbnAsdWwsb2wsbGksXG50ZCx0aCB7Y29sb3I6IzAwMDAwMDt9XG5cbmE6bGluaywgYTp2aXNpdGVkIHt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO31cblxuI3ByaW50LW1hc3RoZWFkIHtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50O31cbiNtYXN0aGVhZC0xIHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9XG4jbWFzdGhlYWQtMiB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fVxuI25hdmkge2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O31cbi8qIC0tLS1zb3VkYW4gc2NyZWVuIGRpc3BsYXktLS0tICovXG4jc291ZGFuLWRpc3AgIHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9XG4vKiAtLS0tIHNvdWRhbiBwcmludCAtLS0tICovXG4jc291ZGFuLXByaW50ICB7ZGlzcGxheTppbmxpbmUgIWltcG9ydGFudDt9XG4vKi0tXG4jYnRuLWJvdHRvbSB7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fVxuLS0qL1xuXG4jZm9vdGVyIHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9XG5cbi8qIC0tLS0gdGVudG8ga2FucnlvdSB0YW50b3VyYW4gLS0tICovXG4jdGFudG91cmFuIHtkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50O31cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLW1hYyBzYWZhcmktLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4uc2lkZWJhciB7YmFja2dyb3VuZDojRkZGRkZGO31cbiNwYWdldGl0bGUge2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O31cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLmJ1dHRvbi1jaG9jbyBpbnB1dCB7XG5cdGNvbG9yOiNmZmY7XG5cdGZvbnQtd2VpZ2h0Om5vcm1hbDtcblx0dGV4dC1hbGlnbjpjZW50ZXI7XG5cdGJhY2tncm91bmQ6IzJjNTQ3Mztcblx0aGVpZ2h0OiAxLjllbTtcblx0cGFkZGluZy1yaWdodDogMC4xNWVtO1xuXHRwYWRkaW5nLWxlZnQ6IDAuMTVlbTtcblx0cGFkZGluZy10b3A6IDAuMWVtO1xuXHRib3JkZXItdG9wOiAycHggc29saWQgIzg2QzBDRTtcblx0Ym9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjODZDMENFO1xuXHRib3JkZXItcmlnaHQ6IDJweCBzb2xpZCAjMDAwMDAwO1xuXHRib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDAwMDtcblx0dmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLyogcHJpbnRpbmcgZm9ybXMgKi9cbnRleHRhcmVhIHtvdmVyZmxvdzp2aXNpYmxlfVxuXG4jcGFnZSB7XHRcbiAgd2lkdGg6IDk1JTtcbiAgcGFkZGluZzogMHB4IDMwcHg7XG4gIG1hcmdpbjogMHB4IGF1dG87XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGhlaWdodDogYXV0byAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG59XHQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogODMwLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA4MzB9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiA0NDEuNTg0LCAicmVjZWl2ZSI6IDE1MC4xNTl9LCAicGFnZXJlZiI6ICJwYWdlQDdkZDllNzNlYjZiYjE3MjMxYTVjYTIwMGYzNDg3ODdmIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyMDQuNDQuOTMuMTQxIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMyIsICJzdWJqZWN0TmFtZSI6ICJ3d3cubGFvZ2FuZ3RlYS5jb20iLCAiaXNzdWVyIjogIlIzIiwgInZhbGlkRnJvbSI6IDE2ODQ4OTMxODYsICJ2YWxpZFRvIjogMTY5MjY2OTE4NX19LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI0VDE0OjE3OjMxLjg4NFoiLCAidGltZSI6IDQzNi4yMjc5OTk5OTk5OTk5NSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2ltZy9iZ19wdGl0aWxlLmdpZiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvYmdfcHRpdGlsZS5naWYifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICJpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZyxpbWFnZS9zdmcreG1sLGltYWdlLyosKi8qO3E9MC44In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvY3NzL3BjL3NjcmVlbi5jc3MifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImltYWdlIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJzYW1lLW9yaWdpbiJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDk5LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIiIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJhY2NlcHQtcmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJjYWNoZS1jb250cm9sIiwgInZhbHVlIjogIm1heC1hZ2U9MjU5MjAwMCJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiNDYifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9naWYifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE3NGI2OC0yZVwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIkZyaSwgMjMgSnVuIDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlN1biwgMTkgTWFyIDIwMjMgMTc6NTA6MzIgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA0NiwgIm1pbWVUeXBlIjogImltYWdlL2dpZiIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIlIwbEdPRGxoQVFBZUFJQUFBUC8vL3dDWnN5SDVCQUFBQUFBQUxBQUFBQUFCQUI0QUFBSUZSSTZweTFFQU93PT0iLCAiZW5jb2RpbmciOiAiYmFzZTY0In0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDI1MCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMjUwfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMjkwLjkwOSwgInJlY2VpdmUiOiAxNDUuMzE5fSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS44ODRaIiwgInRpbWUiOiA0MzYuNTEzLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvaW1nL2lfZGlyZWN0X2cyLnBuZyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzIuMCIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICI6YXV0aG9yaXR5IiwgInZhbHVlIjogImxhb2dhbmd0ZWEuY29tIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2liZy9pbWcvaV9kaXJlY3RfZzIucG5nIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAiaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qLCovKjtxPTAuOCJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vbGFvZ2FuZ3RlYS5jb20vaWJnL2Nzcy9wYy9zY3JlZW4uY3NzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJpbWFnZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibm8tY29ycyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLXNpdGUiLCAidmFsdWUiOiAic2FtZS1vcmlnaW4ifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDUwMSwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXB0LXJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTI1OTIwMDAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjkzMyJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImltYWdlL3BuZyJ9LCB7Im5hbWUiOiAiZGF0ZSIsICJ2YWx1ZSI6ICJXZWQsIDI0IE1heSAyMDIzIDE0OjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAiZXRhZyIsICJ2YWx1ZSI6ICJcIjY0MTZhYWExLTNhNVwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIkZyaSwgMjMgSnVuIDIwMjMgMTQ6MTc6MzEgR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIlN1biwgMTkgTWFyIDIwMjMgMDY6MjQ6MzMgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAibmdpbngifSwgeyJuYW1lIjogInN0cmljdC10cmFuc3BvcnQtc2VjdXJpdHkiLCAidmFsdWUiOiAibWF4LWFnZT0zMTUzNjAwMCJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA5MzMsICJtaW1lVHlwZSI6ICJpbWFnZS9wbmciLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBd0FBQUFDV0NBSUFBQURtTkhnYUFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBMGRKUkVGVWVOcnMxbTFPckRBQWhsRmU0LzRYNERyYzMyZ21BcVdmbVBqTE9lZm1aa1JLcVZOR256d2VqdzBBNEpXODUrUHoreVhITi9MOGR4N3RYNlE0ZjV6S2RjeCtuT3ZsU1M2SCsvOTA1a2s2TS94TVVJeS9YSnRpZ2RVNms4RlYrNTNLcTVwTHp2ZGl2OUV2eGljcDc1WHo1MzZlTGQ2Q2NuQzF6bXFSMWJ0eERCNHRyN2hkTlcxNXUzTmt0ZW5YcmFnTzZwSEZQcmVudGx4Zmh2T2ttWE9iSGFjNmMyc0JHWjV0ZitCMlpIOEI2YjJNN3BMcWd6TytTNGJ6WkxXRzV1UForZDVpUTh1UDZYSlBPL090VnBMcGNXLzhlSDk3dDhzMm1iQTkzWDBzTTN2Z2x6dmUzRFRyTVRjZXdodkw2ejhNTis2ZTdtWU4xNURKNHpEY21zbVgzVDFiekRuOUhiVllmMy9uYjArUzlVb3puaWpqUDh6ejg1bGVuTlZmL2NVSDZjWU0vOGFiQmdRQVhvMEFBZ0FFRUFDQUFBSUFFRUFBQUFJSUFFQUFBUUFJSUFBQUFRUUFJSUFBQUFRUUFJQUFBZ0FRUUFBQUFnZ0FRQUFCQUFnZ0FBQUJCQUFJSUFBQUFRUUFJSUFBQUFRUUFJQUFBZ0FRUUFBQUFnZ0FRQUFCQUFnZ0FBQUJCQUFnZ0FBQUJCQUFnQUFDQUJCQUFBQUNDQUFRUUFBQUFnZ0FRQUFCQUFnZ0FBQUJCQUFnZ0FBQUJCQUFnQUFDQUJCQUFBQUNDQUJBQUFFQUNDQUFBQUVFQUNDQUFBQUVFQUFnZ0FBQUJCQUFnQUFDQUJCQUFBQUNDQUJBQUFFQUNDQUFBQUVFQUNDQUFBQUVFQUNBQUFJQUVFQUFBQUlJQUVBQUFRQUlJQUJBQUFFQUNDQUFBQUVFQUNDQUFBQUVFQUNBQUFJQUVFQUFBQUlJQUVBQUFRQUlJQUFBQVFRQUlJQUFBQVFRQUlBQUFnQVFRQUNBQUFJQUVFQUFBQUlJQUVBQUFRQUlJQUFBQVFRQUlJQUFBQVFRQUlBQUFnQVFRQUFBQWdnQVFBQUJBQWdnQUFBQkJBQWdnQUFBQkJBQUlJQUFBQVFRQUlBQUFnQVFRQUFBQWdnQVFBQUJBQWdnQUFBQkJBQWdnQUFBQkJBQWdBQUNBQkJBQUFBQ0NBQkFBQUVBQ0NBQVFBQUJBQWdnQUFBQkJBQWdnQUFBQkJBQWdBQUNBQkJBQUFBQ0NBQkFBQUVBQ0NBQUFBRUVBQ0NBQUFBRUVBQ0FBQUlBRUVBQWdBQUNBQkJBQUFBQ0NBQkFBQUVBQ0NBQUFBRUVBQ0NBQUFBRUVBQ0FBQUlBRUVBQUFBSUlBRUFBQVFBSUlBQUFBUVFBSUlBQUFBRUVBQ0NBQUFBRUVBQ0FBQUlBRUVBQUFBSUlBRUFBQVFBSUlBQUFBUVFBSUlBQUFQN2Nsd0FEQUM1dEJyTTlkd3B2QUFBQUFFbEZUa1N1UW1DQyIsICJlbmNvZGluZyI6ICJiYXNlNjQifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTEzOCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTEzOH0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDI5MS42MzMsICJyZWNlaXZlIjogMTQ0Ljg4fSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNFQxNDoxNzozMS44ODVaIiwgInRpbWUiOiA0MzYuMDkzLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9sYW9nYW5ndGVhLmNvbS9pYmcvaW1nL2JnX3N1YmhlYWQucG5nIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAibGFvZ2FuZ3RlYS5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvaWJnL2ltZy9iZ19zdWJoZWFkLnBuZyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogImltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKiwqLyo7cT0wLjgifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL2xhb2dhbmd0ZWEuY29tL2liZy9jc3MvcGMvdGFibGVzLmNzcyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAiaW1hZ2UifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogInNhbWUtb3JpZ2luIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0OTksICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibWF4LWFnZT0yNTkyMDAwIn0sIHsibmFtZSI6ICJjb250ZW50LWxlbmd0aCIsICJ2YWx1ZSI6ICI4NDUifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJpbWFnZS9wbmcifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiV2VkLCAyNCBNYXkgMjAyMyAxNDoxNzozMSBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCI2NDE2YWE5OS0zNGRcIiJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJGcmksIDIzIEp1biAyMDIzIDE0OjE3OjMxIEdNVCJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJTdW4sIDE5IE1hciAyMDIzIDA2OjI0OjI1IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIm5naW54In0sIHsibmFtZSI6ICJzdHJpY3QtdHJhbnNwb3J0LXNlY3VyaXR5IiwgInZhbHVlIjogIm1heC1hZ2U9MzE1MzYwMDAifV0sICJjb250ZW50IjogeyJzaXplIjogODQ1LCAibWltZVR5cGUiOiAiaW1hZ2UvcG5nIiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQTZvQUFBQkxDQUlBQUFEMjd1M3pBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXU5SlJFRlVlTnJzMWs5T0ZFRVloK0g1R1cvbTFxMkg4UmplZ0pVbmNHR2lleE1TVnJpUWhJUkVaQVVod1JFa0pLUmRhR0RHcWZxcXg1M004eXdJTU5QZDFWWDk1ODAwVFlzVng5K3YzeDZmZmZ4MmNiSzhPYnUrWGYxb2tkVmZzeWlsL0t6Y09CbnVObHNkY1dPSEdXK1Z6cDZ5NWZubTc4K0tNMWo1WnpYQ05QNlp4YXpkUG13K2V3S3pNZVNaSTgrY1UyNWRDWnM3U01aRHpjWlhVNTlnMW45MHR1b2NPc1Y2ZEk2YllwblNtSlp5VkkxRnJTNnlGSGRFNW93bjlSZFNMbGQ1ck1iOWtmSm1UVVlqV2RucnZKRmt6dEtuZllSNkdCa3NkLzVoREptNXlpbXU4dlUvazk2enAzbW0zU3N0cldWTWU1WWVMNmwwbmphcHBtdjlDNzFEdEFmV3ZwUmFlMHM2YTVGRlk0SFR1UURLbzZRL0EydDdUV3YyMDM3eWJlNHc1VlN2N2JVejIrdmY2UjRyaTJJWTViUnYzUGpEeVc5TWNibzNlMGJYLzNnNUdzK2k4UTM0ZUdLRFIyajVrdTBjS1BPZXNlMU5zLzByZGZCV1RSVWpHYjVIUjU5a20rb3JYcmVyZnoxLytPMzg5dTcxL3BlOW85UDdhUnEwTFFBQS9KLys1Ty9oNWZMbCsvMnZQMzZhRVFBQW5uaituaXh2WHJ6N2RINTdaem9BQUhqYW50MVAwNnNQQjlvWEFJQ2R5Tis5bzlPRGl5c1RBUURBVHVUdm04OG5aZ0VBZ0YzSjM4UExwVmtBQUdCWDh0Y1VBQUFnZndFQVFQNENBSUQ4QlFBQStRc0FBUElYQUFEa0x3QUF5RjhBQUpDL0FBQWdmd0VBUVA0Q0FJRDhCUUJBL2dJQWdQd0ZBQUQ1Q3dBQThoY0FBT1F2QUFESVh3QUFrTDhBQUNCL0FRQkEvZ0lBZ1B3RkFBRDVDd0NBL0FVQUFQa0xBQUR5RndBQTVDOEFBTWhmQUFDUXZ3QUFJSDhCQUVEK0FnQ0EvQVVBQVBrTEFBRHlGd0FBK1FzQUFQSVhBQURrTHdBQXlGOEFBSkMvQUFBZ2Z3RUFRUDRDQUlEOEJRQUErUXNBQVBJWEFBRGtMd0FBOGhjQUFPUXZBQURJWHdBQWtMOEFBQ0IvQVFCQS9nSUFnUHdGQUFENUN3QUE4aGNBQU9RdkFBRElYd0FBa0w4QUFNaGZBQUNRdndBQUlIOEJBRUQrQWdDQS9BVUFBUGtMQUFEeUZ3QUE1QzhBQU1oZkFBQ1F2d0FBOE5zdkFRWUFpYUU4MXErcmhsQUFBQUFBU1VWT1JLNUNZSUk9IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAwLCAiYm9keVNpemUiOiAxMDUxLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAxMDUxfSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMjkxLjAyNiwgInJlY2VpdmUiOiAxNDUuMDY3fSwgInBhZ2VyZWYiOiAicGFnZUA3ZGQ5ZTczZWI2YmIxNzIzMWE1Y2EyMDBmMzQ4Nzg3ZiIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMjA0LjQ0LjkzLjE0MSIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjMiLCAic3ViamVjdE5hbWUiOiAid3d3Lmxhb2dhbmd0ZWEuY29tIiwgImlzc3VlciI6ICJSMyIsICJ2YWxpZEZyb20iOiAxNjg0ODkzMTg2LCAidmFsaWRUbyI6IDE2OTI2NjkxODV9fV19fQ==","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"6467e8cb-ccdd-42ab-afa8-0f8082ddef87","value":"har.json"},{"category":"External analysis","comment":"The rendered page at the end of the capture","data":"PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+CgkJPG1ldGEgY2hhcnNldD0idXRmLTgiPgoJCTx0aXRsZT7kuInkupXkvY/lj4vkv6HoqJfjg4DjgqTjg6zjgq/jg4jjgIDjg63jgrDjgqTjg7M8L3RpdGxlPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiIGhyZWY9Ii4uL2Nzcy9wYy90YWJsZXMuY3NzIj4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiBocmVmPSIuLi9jc3MvcGMvc2NyZWVuLmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0iLi4vY3NzL3BjL3NjcmVlbl9lZGdlLmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InByaW50IiBocmVmPSIuLi9jc3MvcGMvcHJpbnQuY3NzIj4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiBocmVmPSIuLi9jc3MvcGMvaXNMb2dpbi5jc3MiPgoJCTxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vZmF2aWNvbi5pY28iIHNpemVzPSIxNngxNiI+CgkJPGxpbmsgcmVsPSJpY29uIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9mYXZpY29uLmljbyIgc2l6ZXM9IjE2eDE2Ij4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxODB4MTgwIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iNTd4NTciIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNTd4NTcucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI2MHg2MCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi02MHg2MC5wbmciPgoJCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjcyeDcyIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTcyeDcyLnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iNzZ4NzYiIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNzZ4NzYucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxMTR4MTE0IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTExNHgxMTQucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxMjB4MTIwIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTEyMHgxMjAucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNDR4MTQ0IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTE0NHgxNDQucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNTJ4MTUyIiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTE1MngxNTIucG5nIj4KCQk8c3R5bGU+CgkJCS5hY3RpdmUgewoJCQkJYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyMDApOwoJCQl9CgoJCQkudW5hY3RpdmUgewoJCQkJYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwOSwgMjEzLCAyMTkpOwoJCQl9CgkJCQoJCQkubG9hZGluZyB7CgkJCQloZWlnaHQ6IDEwMHZoOwoJCQkJYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHsKCQkJCXdpZHRoOiAxNTBweDsKCQkJCWhlaWdodDogMTVweDsKCQkJCW1hcmdpbjogMCBhdXRvOwoJCQkJbWFyZ2luLXRvcDogMTAwcHg7CgkJCQl0ZXh0LWFsaWduOiBjZW50ZXI7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW4gewoJCQkJZGlzcGxheTogaW5saW5lLWJsb2NrOwoJCQkJd2lkdGg6IDE1cHg7CgkJCQloZWlnaHQ6IDEwMCU7CgkJCQltYXJnaW4tcmlnaHQ6IDVweDsKCQkJCWJhY2tncm91bmQ6IGJsYWNrOwoJCQkJLXdlYmtpdC1hbmltYXRpb246IGxvYWQgMS4wNHMgZWFzZSBpbmZpbml0ZTsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpsYXN0LWNoaWxkIHsKCQkJCW1hcmdpbi1yaWdodDogMHB4OwoJCQl9CgkJCQkJCgkJCUAtd2Via2l0LWtleWZyYW1lcyBsb2FkIHsKCQkJCTAlIHsKCQkJCQlvcGFjaXR5OiAxOwoJCQkJfQoJCQkJCQoJCQkJMTAwJSB7CgkJCQkJb3BhY2l0eTogMDsKCQkJCX0KCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoMSkgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMTNzOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgyKSB7CgkJCQktd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC4yNnM7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bnRoLWNoaWxkKDMpIHsKCQkJCS13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjM5czsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoNCkgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuNTJzOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCg1KSB7CgkJCQktd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC42NXM7CgkJCX0KCQk8L3N0eWxlPgoJPC9oZWFkPgoJPGJvZHk+CgkJPGRpdiBpZD0icGFnZSI+PGRpdiBpZD0icHJpbnQtbWFzdGhlYWQiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0Ym9keT48dHI+PHRkIHdpZHRoPSIxMyI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTMiIGFsdD0iIj48L3RkPiA8dGQgd2lkdGg9IjIwMyIgaGVpZ2h0PSIzMSI+PGltZyBzcmM9Ii4uL2ltZy9sb2dvX2NvX3ByaW50LmdpZiIgaGVpZ2h0PSIzMSIgd2lkdGg9IjIwMyIgYWx0PSLkuInkupXkvY/lj4vkv6HoqJfpioDooYwiPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxODMiIGFsdD0iIj48L3RkPjwvdHI+IDx0cj48dGQgd2lkdGg9IjEzIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4gPHRkIGhlaWdodD0iMzEiIGNvbHNwYW49IjMiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+PC90cj4gPHRyPjx0ZCB3aWR0aD0iMTMiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIj48L3RkPiA8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48aDE+44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw44CA44Ot44Kw44Kk44OzPC9oMT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dGJvZHk+PHRyPjx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHI+PHRkPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJtYXN0aGVhZC0xIj48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iMjAzIiBoZWlnaHQ9IjM2Ij48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwIiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Ii4uL2ltZy9sb2dvX2NvLmdpZiIgaGVpZ2h0PSIzMSIgd2lkdGg9IjIwMyIgYm9yZGVyPSIwIiBhbHQ9IuS4ieS6leS9j+WPi+S/oeiol+mKgOihjCI+PC9hPjwvdGQ+IDx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj48dGFibGUgYm9yZGVyPSIwIiBhbGlnbj0icmlnaHQiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgaWQ9Imdsb2JhbG5hdmkiPjx0Ym9keT48dHI+PHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTIiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHI+PHRkIGNsYXNzPSJnbmF2aS10ZDEiPjxhIGhyZWY9ImphdmFzY3JpcHQ6cG9zdFRvVXJsKCdodHRwczovL3NwLmRpcmVjdC5zbXRiLmpwLi4vaW1nYi9sb2dpbi5kbycpIiBjbGFzcz0ibWNwLW5vLXJlcGxhY2UtdXJsIG1jcC1wY3NwLWxpbmsiPgoKCQkJCQkJCQkJCQkJCQkJCeOCueODnuODvOODiOODleOCqeODs+OCteOCpOODiOOBr+OBk+OBoeOCiQoKCQkJCQkJCQkJCQkJCQkJPC9hPiB8CgoJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpOyI+CgkJCQkJCQkJCQkJCQkJCQnjg5jjg6vjg5cKCQkJCQkJCQkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vZmFxLnNtdGIuanAvY2F0ZWdvcnkvc2hvdy8xNjI/c2l0ZV9kb21haW49ZGVmYXVsdCIgdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ44KI44GP44GC44KL44GU6LOq5ZWPCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL3JhdGUiIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJCQkJCQkJCemHkeWIqQoJCQkJCQkJCQkJCQkJCQk8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc210Yi5qcC9wZXJzb25hbC9jaGFyZ2UiIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJCQkJCQkJCeaJi+aVsOaWmQoJCQkJCQkJCQkJCQkJCQk8L2E+IHwgPGEgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC9hcDMvc2lyeW91U2Vpa3l1dS9zaXJ5b3VTZWlreXV1R29hbm5haS5kbyIgdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ6LOH5paZ6KuL5rGCPC9hPiZuYnNwOwoJCQkJCQkJCQkJCQkJCTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD4gPHRkIHdpZHRoPSIxNiI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTYiIGFsdD0iIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBpZD0ibWFzdGhlYWQtMiI+PHRib2R5Pjx0cj48dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxMSIgd2lkdGg9IjciIGFsdD0iIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxmb3JtIG5hbWU9ImliTG9naW5BY3Rpb25Gb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iLi4vaW1nYi9sb2dpbi5kbyIgb25zdWJtaXQ9InJldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5odG1sLlRPS0VOIiB2YWx1ZT0iZWRlNWVhY2Q2NmNjMjIyYWZhNzI0NmMwYzY4Mjc3YjMiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF0b20uc2NyZWVuRmxvdy50b2tlbi5kZWZhdWx0IiB2YWx1ZT0iNjM5ZDdiYmVkZDA1Y2RhYjU5NDUyMmU1NTJmODA4ZTQiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF0b21fYWN0aW9uUGFyYW1ldGVyIiB2YWx1ZT0iIj4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+PHRib2R5Pjx0cj48dGQgdmFsaWduPSJ0b3AiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJwYWdldGl0bGUiPjx0Ym9keT48dHI+PHRkIHdpZHRoPSI2NSUiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0idGQtcGFnZXRpdGxlMSI+PGgxPuOCpOODs+OCv+ODvOODjeODg+ODiOODkOODs+OCreODs+OCsOOAgOODreOCsOOCpOODszwvaDE+PC90ZD4gPHRkIHdpZHRoPSIzNSUiIGhlaWdodD0iMzAiIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgY2xhc3M9InRkLXBhZ2V0aXRsZTIiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTYiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4gPGJyPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iaW5mb3RhYmxlNiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iNDAiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiBjbGFzcz0iaW5mb3RhYmxlNi10ZDEiPjxpbWcgc3JjPSIuLi9pbWcvaWNvX2FsZXJ0LmdpZiIgaGVpZ2h0PSIzMyIgd2lkdGg9IjI1IiBhbHQ9IiI+PC90ZD4gPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCIgY2xhc3M9ImluZm90YWJsZTYtdGQyIj48c3BhbiBjbGFzcz0iYWxlcnQiPjxoMj4KCgkJCQkJCQkJCQkJCQkJ5YWl5Yqb5YaF5a6544Gr5LiN5YKZ44GM44GC44KK44G+44GZ44CCKOODoeODg+OCu+ODvOOCuOeVquWPtzpBMDBJMTAzKQoKCgkJCQkJCQkJCQkJCQk8L2gyPjwvc3Bhbj4KCgoKCgoKCgoKCgkJCQkJCQkJCQkJCeeiuuiqjeeVquWPt+OCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAggoKCgoKCgkJCQkJCQkJCQkJPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4gPGRpdiBjbGFzcz0ibG9hZGluZyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyI+PHA+56K66KqN5Lit44CB44Oa44O844K444KS6ZaJ44GY44Gq44GE44Gn44GP44Gg44GV44GE44CCPC9wPiA8ZGl2IGNsYXNzPSJsb2FkaW5nMSI+PHNwYW4+PC9zcGFuPiA8c3Bhbj48L3NwYW4+IDxzcGFuPjwvc3Bhbj4gPHNwYW4+PC9zcGFuPiA8c3Bhbj48L3NwYW4+PC9kaXY+PC9kaXY+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGlkPSJjb250ZW50LW1haW4iPjx0Ym9keT48dHI+PHRkIHdpZHRoPSIyMCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMjAiIGFsdD0iIj48L3RkPiA8dGQgdmFsaWduPSJ0b3AiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImluZm90YWJsZTEiPjx0Ym9keT48dHI+PHRkIGNsYXNzPSJoYWxmLXJvdy1zcGFjaW5nIj48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9pbmZvcm1hdGlvbiIgdGFyZ2V0PSJfYmxhbmsiIHRhYmluZGV4PSIxIj48aW1nIHNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgYWx0PSJHbyI+PHU+44Oh44Oz44OG44OK44Oz44K55oOF5aCx44O744GK55+l44KJ44Gb44Gv44GT44Gh44KJPC91PjwvYT48L3RkPjwvdHI+IDx0cj48dGQgY2xhc3M9ImhhbGYtcm93LXNwYWNpbmciPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L3N0YXJ0IiB0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9IjIiPjxpbWcgc3JjPSIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiBhbHQ9IkdvIj48dT7liJ3mnJ/nmbvpjLLjgYzjgYrmuIjjgb/jgafjgarjgYTjgYrlrqLjgZXjgb7jga/jgZPjgaHjgok8L3U+PC9hPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJjb250ZW50LW1haW4iPjx0Ym9keT48dHI+PHRkIHZhbGlnbj0idG9wIj48dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ic3ViaGVhZDIiPjx0Ym9keT48dHI+PHRkIHdpZHRoPSIxNiIgdmFsaWduPSJ0b3AiIGNsYXNzPSJzdWJoZWFkMi10ZDEiPjxpbWcgc3JjPSIuLi9pbWcvaWNvX3N1YmhlYWRfMS5naWYiIGhlaWdodD0iMTkiIHdpZHRoPSIxNiIgYWx0PSIiPjwvdGQ+IDx0ZCBoZWlnaHQ9IjE5IiBhbGlnbj0ibGVmdCIgdmFsaWduPSJtaWRkbGUiIGNsYXNzPSJzdWJoZWFkMi10ZDIiPjxoMj7jgYrlrqLjgZXjgb7mg4XloLHjga7lhaXlips8L2gyPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJkYXRhLXRhYmxlMiI+PHRib2R5Pjx0cj48dGQgY29sc3Bhbj0iMyI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJ44OA44Kk44Os44Kv44OI44GU5Yip55So44Kr44O844OJ44Gr5Lya5ZOh55Wq5Y+344Gu6KiY6LyJ44GM44Gq44GE44GK5a6i44GV44G+44Gv4pGg44Gr44CB6KiY6LyJ44GM44GC44KL44GK5a6i44GV44G+44Gv4pGh44Gr5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCCgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9InBhZGRpbmctdG9wOiAxZW07Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQnpgbjmip7vvJrikaDkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgarjgYTjgYrlrqLjgZXjgb4gPGltZyBzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIiBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIGFsdD0iR28iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly9mYXEuc210Yi5qcC9mYXEvc2hvdy8zMjMyP3NpdGVfZG9tYWluPWRlZmF1bHQnLCcnKTsiIHRhYmluZGV4PSIzIj7oqqzmmI48L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48dGQgd2lkdGg9IjQlIiByb3dzcGFuPSIyIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCI+PGlucHV0IHR5cGU9InJhZGlvIiBkaXNhYmxlZD0iZGlzYWJsZWQiIG5hbWU9ImthaWluTm9LaXNhaVVtdSIgdGFiaW5kZXg9IjQiIHZhbHVlPSIwIj48L3RkPiA8dGQgd2lkdGg9IjI1JSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRib2R5Pjx0cj48dGggd2lkdGg9IjElIj48L3RoPiA8dGggd2lkdGg9IjkyJSIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCIgc3R5bGU9InBhZGRpbmc6IDdweCAzcHg7Ij7lupfnlarlj7c8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIiB0aXRsZT0i44OY44Or44OXIiB0YWJpbmRleD0iNSI+PGI+4oC7PC9iPjwvYT48L3RoPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+IDx0ZCBjbGFzcz0iZGF0YS10YWJsZTItdGQzLXZsaW4tdCIgc3R5bGU9InBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHg7Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk+PHRyIGFsaWduPSJsZWZ0Ij48dGQgd2lkdGg9IjQwJSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+PHRib2R5Pjx0cj48dGQgd2lkdGg9IjglIiBzdHlsZT0icGFkZGluZy1yaWdodDogMTBweDsiPjxzcGFuIGNsYXNzPSJoYW5rYWt1Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGVubm8iIG1heGxlbmd0aD0iMyIgc2l6ZT0iNCIgdGFiaW5kZXg9IjYiIGRpc2FibGVkPSJkaXNhYmxlZCIgY2xhc3M9InVuYWN0aXZlIj48L3NwYW4+PC90ZD4gPHRkPuWNiuinkuaVsOWtlzPmoYHjgaflhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj4gPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIyNSUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPjx0Ym9keT48dHI+PHRoIHdpZHRoPSIxJSIgc3R5bGU9InBhZGRpbmctdG9wOiAxLjVlbTsgcGFkZGluZy1ib3R0b206IDEuNWVtOyI+PC90aD4gPHRoIHdpZHRoPSI5MiUiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSIgY2xhc3M9ImRhdGEtdGFibGUyLXRoMSIgc3R5bGU9InBhZGRpbmc6IDE0cHggM3B4OyI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCeS7o+ihqOaZrumAmumgkOmHkeWPo+W6p+eVquWPtzxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpIiB0aXRsZT0i44OY44Or44OXIiB0YWJpbmRleD0iNyI+PGI+4oC7PC9iPjwvYT48L3RoPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+IDx0ZCBjbGFzcz0iZGF0YS10YWJsZTItdGQzIj48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk+PHRyIGFsaWduPSJsZWZ0Ij48dGQgd2lkdGg9IjQwJSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dGJvZHk+PHRyPjx0ZD48c3BhbiBjbGFzcz0iaGFua2FrdSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImtvemFubyIgbWF4bGVuZ3RoPSI3IiBzaXplPSI5IiB0YWJpbmRleD0iOCIgdmFsdWU9IiIgZGlzYWJsZWQ9ImRpc2FibGVkIiBjbGFzcz0idW5hY3RpdmUiPjwvc3Bhbj48L3RkPiA8dGQ+Jm5ic3A7Jm5ic3A7CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+IDx0ZD7jgZTliKnnlKjnlLPovrzmmYLjgavnmbvpjLLjgZfjgZ/jgqTjg7Pjgr/jg7zjg43jg4Pjg4jjg5Djg7Pjgq3jg7PjgrDku6Pooajmma7pgJrpoJDph5Hlj6Pluqfnlarlj7fjgpLljYrop5LmlbDlrZc35qGB44Gn5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMyIgc3R5bGU9InBhZGRpbmctdG9wOiAxZW07Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQnpgbjmip7vvJrikaHkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgYLjgovjgYrlrqLjgZXjgb4gPGltZyBzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIiBoZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIGFsdD0iR28iPjxhIGhyZWY9ImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly9mYXEuc210Yi5qcC9mYXEvc2hvdy8zMjMyP3NpdGVfZG9tYWluPWRlZmF1bHQnLCcnKTsiIHRhYmluZGV4PSI5Ij7oqqzmmI48L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48dGQgd2lkdGg9IjQlIiByb3dzcGFuPSIxIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJrYWlpbk5vS2lzYWlVbXUiIHRhYmluZGV4PSI0IiB2YWx1ZT0iMSI+PC90ZD4gPHRkIHdpZHRoPSIyNSUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPjx0Ym9keT48dHI+PHRoIHdpZHRoPSIxJSI+PC90aD4gPHRoIHdpZHRoPSI5MiUiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSIgY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiIHN0eWxlPSJwYWRkaW5nOiA3cHggM3B4OyI+5Lya5ZOh55Wq5Y+3PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJykiIHRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIxMCI+PGI+4oC7PC9iPjwvYT48L3RoPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+IDx0ZCB3aWR0aD0iNzclIiBjbGFzcz0iZGF0YS10YWJsZTItdGQzLXZsaW4tdCIgc3R5bGU9InBhZGRpbmctbGVmdDogM3B4OyBwYWRkaW5nLXJpZ2h0OiAzcHg7Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk+PHRyIGFsaWduPSJsZWZ0Ij48dGQgd2lkdGg9IjQwJSI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj48dGJvZHk+PHRyIHZhbGlnbj0idG9wIj48dGQ+PHNwYW4gY2xhc3M9Imhhbmtha3UiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJrYWlpbk5vIiBtYXhsZW5ndGg9IjgiIHNpemU9IjEyIiB0YWJpbmRleD0iMTEiIGNsYXNzPSJhY3RpdmUiPjwvc3Bhbj48L3RkPiA8dGQ+Jm5ic3A7Jm5ic3A7CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+IDx0ZD7ljYrop5LmlbDlrZc3772eOOahgeOBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAggoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0iaGFsZi1yb3ctc3BhY2luZyI+PGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpOyIgdGFiaW5kZXg9IjEyIj48aW1nIHNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgYWx0PSJHbyI+PHU+44OA44Kk44Os44Kv44OI44GU5Yip55So44Kr44O844OJ44Gu56iu6aGe44KE44GK5a6i44GV44G+5oOF5aCx44Gu5YWl5Yqb5pa55rOV44Gu6Kmz57Sw44Gv44GT44Gh44KJPC91PjwvYT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj4gPHRyPjx0ZCB2YWxpZ249InRvcCI+PHRhYmxlIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjE5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InN1YmhlYWQyIj48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iMTYiIHZhbGlnbj0idG9wIiBjbGFzcz0ic3ViaGVhZDItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2ljb19zdWJoZWFkXzEuZ2lmIiBoZWlnaHQ9IjE5IiB3aWR0aD0iMTYiIGFsdD0iIj48L3RkPiA8dGQgaGVpZ2h0PSIxOSIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0ic3ViaGVhZDItdGQyIj48aDI+44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44Gu5YWl5YqbPC9oMj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iZGF0YS10YWJsZTIiPjx0Ym9keT48dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgY2xhc3M9ImRhdGEtdGFibGUyLXRkNCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+IDx0ZCBjbGFzcz0iZGF0YS10YWJsZTItdGQ1Ij48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGggd2lkdGg9IjI1JSIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0iZGF0YS10YWJsZTItdGgxIj7jg63jgrDjgqTjg7Pjg5Hjgrnjg6/jg7zjg4k8c3BhbiBjbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+PC90aD4gPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0Ym9keT48dHIgYWxpZ249ImxlZnQiPjx0ZCB3aWR0aD0iNDAlIj48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPjx0Ym9keT48dHI+PHRkIHZhbGlnbj0idG9wIiB3aWR0aD0iNDUlIiByb3dzcGFuPSIyIiBzdHlsZT0icGFkZGluZy10b3A6IDAuMmVtOyI+PHNwYW4gY2xhc3M9InBhc3N3b3JkLWZvbnQiPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iaWJwYXNzd29yZCIgbWF4bGVuZ3RoPSIzMiIgc2l6ZT0iMzQiIHRhYmluZGV4PSIxMyIgY2xhc3M9InRleHQtaW5wdXQtZmllbGQiPjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNCI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgbmFtZT0iYnV0dG9uNSIgdGFiaW5kZXg9IjE0IiB2YWx1ZT0i44K944OV44OI44Km44Kn44Ki44Kt44O844Oc44O844OJIiBvbmNsaWNrPSJKYXZhc2NyaXB0OnNob3dLZXlCb2FyZChpYnBhc3N3b3JkKSI+PC9zcGFuPiA8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NvZnR3YXJlS2V5Ym9hcmQnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjE1Ij48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZCByb3dzcGFuPSIyIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSZuYnNwOyZuYnNwOwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPiA8dGQgcm93c3Bhbj0iMiI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQnljYrop5Loi7HmlbDlrZfmt7flnKjjga405qGB5Lul5LiKMzLmoYHku6XlhoXjgafjgZnjgILoi7HlrZfjga/lpKfmloflrZfjgajlsI/mloflrZfjgpLljLrliKXjgZfjgabjgY/jgaDjgZXjgYTjgII8YnI+IDxpbWcgc3JjPSIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiBhbHQ9IkdvIj4gPGEgaHJlZj0iamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9pbnRlcm5ldC9oZWxwL2xvY2snLCcnKTsiIHRhYmluZGV4PSIxNiI+44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44GM44KP44GL44KJ44Gq44GE44O75aSx5Yq544GX44Gm44GX44G+44Gj44Gf44GK5a6i44GV44G+44Gv44GT44Gh44KJPC9hPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPjx0Ym9keT48dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjE2Ij48c3BhbiBjbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+PC90ZD4gPHRkIGFsaWduPSJsZWZ0Ij4KCQkJCQkJCQkJCQkJCQkJCeODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOCkuWFpeWKm+ebuOmBleOBleOCjOOBn+WgtOWQiOOAgeesrOS4ieiAheOBq+OCiOOCi+OAjOOBquOCiuOBmeOBvuOBl+OAjeOCkumYsuatouOBmeOCi+OBn+OCgeOAgeOBiuWxiuOBkeOBruODoeODvOODq+OCouODieODrOOCueWum+OBpuOBq+mAo+e1oeOBhOOBn+OBl+OBvuOBmeOAggoJCQkJCQkJCQkJCQkJCQkJ44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44KS5omA5a6a5Zue5pWw5Lul5LiK5YWl5Yqb55u46YGV44GV44KM44Gf5aC05ZCI44CB44Ot44Kw44Kk44Oz44OR44K544Ov44O844OJ44KS5aSx5Yq544GV44Gb44Gm44GE44Gf44Gg44GN44G+44GZ44CCCgkJCQkJCQkJCQkJCQkJCTwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxicj4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaWQ9ImJ0bi1ib3R0b20iPjx0Ym9keT48dHIgdmFsaWduPSJtaWRkbGUiPjx0ZCB3aWR0aD0iNDgiIGFsaWduPSJsZWZ0Ij48L3RkPiA8dGQgd2lkdGg9IjI1IiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGl2aWRlciI+LzwvdGQ+IDx0ZCBub3dyYXA9Im5vd3JhcCI+PHNwYW4gY2xhc3M9ImJ1dHRvbi1jaG9jbyI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjE3IiB2YWx1ZT0iIOODreOCsOOCpOODsyAiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7Ij48L3NwYW4+PC90ZD4gPHRkIGFsaWduPSJyaWdodCI+PHNwYW4gY2xhc3M9ImJ1dHRvbi1jaG9jbyI+PGlucHV0IG5hbWU9IjEyMyIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0i6ZaJ44GY44KLIiB0YWJpbmRleD0iMTgiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHg7IHBhZGRpbmctcmlnaHQ6IDEwcHg7Ij48L3NwYW4+PC90ZD4gPHRkPiZuYnNwOzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxicj4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+PHRib2R5Pjx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjE5Ij48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGFiaW5kZXg9IjIwIj7kvJrlk6Hnlarlj7fjgavjgaTjgYTjgaY8L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjE2IiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjIxIj48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIiB0YWJpbmRleD0iMjIiPuW6l+eVquWPt+OBq+OBpOOBhOOBpjwvYT48L3RkPjwvdHI+IDx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPjx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGl0bGU9IuODmOODq+ODlyIgdGFiaW5kZXg9IjIzIj48Yj7igLs8L2I+PC9hPjwvdGQ+IDx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIgdGFiaW5kZXg9IjI0Ij7ku6Pooajmma7pgJrpoJDph5Hlj6Pluqfnlarlj7fjgavjgaTjgYTjgaY8L2E+PC90ZD48L3RyPiA8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj48dGQgd2lkdGg9IjE2IiBhbGlnbj0ibGVmdCI+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zb2Z0d2FyZUtleWJvYXJkJykiIHRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNSI+PGI+4oC7PC9iPjwvYT48L3RkPiA8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zb2Z0d2FyZUtleWJvYXJkJykiIHRhYmluZGV4PSIyNiI+44K944OV44OI44Km44Kn44Ki44Kt44O844Oc44O844OJ44Gr44Gk44GE44GmPC9hPjwvdGQ+PC90cj4gPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+PHRkIHdpZHRoPSIxNiIgYWxpZ249ImxlZnQiPjxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc2V0dXAnKTsiIHRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNyI+PGI+4oC7PC9iPjwvYT48L3RkPiA8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zZXR1cCcpOyIgdGFiaW5kZXg9IjI4Ij7jgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4njga7mloflrZfjgrXjgqTjgrrjga7lpInmm7Tmlrnms5XjgavjgaTjgYTjgaY8L2E+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPiA8dGQgd2lkdGg9IjIwIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIyMCIgYWx0PSIiPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxicj48L3RkPjwvdHI+IDx0cj48dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNjU4IiBhbHQ9IiI+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4gPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaWQ9ImZvb3RlciI+PHRib2R5Pjx0cj48dGQgY2xhc3M9ImZvb3Rlci10ZDEiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIj48L3RkPjwvdHI+IDx0cj48dGQgaGVpZ2h0PSIyMCIgdmFsaWduPSJtaWRkbGUiIGNsYXNzPSJmb290ZXItdGQyIj48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL2dlbmVyYWwvcHJpdmFjeS9zZW5nZW4iIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJ5YCL5Lq65oOF5aCx44Gu44GK5Y+W44KK5omx44GE44Gr44Gk44GE44GmCgkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvZ2VuZXJhbC9zb2xpY2l0YXRpb24iIHRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJ5LiJ5LqV5L2P5Y+L5L+h6KiX6YqA6KGM44Gu5Yun6KqY5pa56YedCgkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfb3RoZXJzJykiPgoJCQkJCQkJCQnpm7voqbHjgafjga7jgYrllY/jgYTlkIjjgo/jgZvlhYgKCQkJCQkJCQk8L2E+PC90ZD48L3RyPiA8dHI+PHRkIGNsYXNzPSJmb290ZXItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI2NTgiIGFsdD0iIj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBpZD0iY29weXJpZ2h0Ij48dGJvZHk+PHRyPjx0ZCB3aWR0aD0iMTQiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjE0IiBhbHQ9IiI+PC90ZD4gPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSI+PHNwYW4gY2xhc3M9InNtYWxsLWdyeSI+Q29weXJpZ2h0IMKpIDIwMjMKCQkJCQkJCQkJU3VtaXRvbW8gTWl0c3VpIFRydXN0IEJhbmssIExpbWl0ZWQKCQkJCQkJCQk8L3NwYW4+PC90ZD4gPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJtaWRkbGUiPjxzcGFuIGNsYXNzPSJzbWFsbC1ncnkiPgoKCQkJCQkJCQkJ55S76Z2iSUTvvJoKCQkJCQkJCQkJaWJra18wNzAxCgkJCQkJCQkJPC9zcGFuPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IDxkaXYgaWQ9InNvZnR3YXJlS2V5Qm9hcmQiIGNsYXNzPSJib3hTZXRMaW5lIiBzdHlsZT0ibWFyZ2luOiAwcHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgZGlzcGxheTogbm9uZTsiPjx0YWJsZSBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI0ZGRkZGRiIgd2lkdGg9IjUyMCIgaGVpZ2h0PSIyNTAiIGJvcmRlcj0iMCIgY2xhc3M9InNrLXRhYmxlIj48dGJvZHk+PHRyIGFsaWduPSJyaWdodCIgaGVpZ2h0PSIzMCIgdmFsaWduPSJ0b3AiPjx0ZCBjb2xzcGFuPSIyIiB3aWR0aD0iMTAwJSI+PHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNSI+PGlucHV0IG5hbWU9ImtleV9DbG9zZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0i44K944OV44OI44Km44Kn44Ki44Kt44O844Oc44O844OJ44KS6ZaJ44GY44KLIiBpZD0iY2xvc2VfcG9wIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBkb0Nsb3NlKCkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3NwYW4+PC90ZD48L3RyPiA8dHIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPjx0ZD48ZGl2IGNsYXNzPSJib3hTZXRCZyI+PHRhYmxlIGNlbGxzcGFjaW5nPSIxIiBpZD0ia2V5Qm9keSIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImxheW91dCI+PHRib2R5Pjx0cj48dGQgYWxpZ249ImNlbnRlciIgY2xhc3M9ImtleUF0b1oiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibGF5b3V0Ij48dGJvZHk+PHRyPjx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMScsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTIiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkzIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5NSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTYiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc2JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5NyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXk4IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOCcsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5OSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxMCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEwJywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTIiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMSkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTEzIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTMnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxNCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTUiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNScsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MTYiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNicsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTE3IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTcnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxOCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE4JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkxOSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE5JywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MjAiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTIxIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjEnLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleTIyIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjInLDEpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXkyMyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywxKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MjQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyNCcsMSkiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5MjUiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyNScsMSkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQgY29sc3Bhbj0iMTciPiZuYnNwOzwvdGQ+PC90cj4gPHRyPjx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MwIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzIiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzMiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCczJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1M0IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TNSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TNiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzYnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzciIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc3JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1M4IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1M5IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMTAiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMTEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxMiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEyJywyKSI+PC9zcGFuPjwvdGQ+PC90cj4gPHRyPjx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxMyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxNCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MxNSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzE2IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzE3IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTcnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzE4IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTgnLDIpIj48L3NwYW4+PC90ZD4gPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiIGFsdD0iIj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMTkiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxOScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMjAiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0xldHRlcktleV9TMjEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMScsMikiPjwvc3Bhbj48L3RkPiA8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIgYWx0PSIiPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MyMiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MyMyIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zTGV0dGVyS2V5X1MyNCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywyKSI+PC9zcGFuPjwvdGQ+IDx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IiBhbHQ9IiI+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNMZXR0ZXJLZXlfUzI1IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDIpIj48L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPiA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJrZXkwdG85Ij48dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxheW91dCI+PHRib2R5Pjx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTEiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxJywwKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5MiIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzInLDApIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXkzIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMCkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywwKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5NSIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDApIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk2IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMCkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTciIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc3JywwKSI+PC9zcGFuPjwvdGQ+IDx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5OCIgb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzgnLDApIj48L3NwYW4+PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk5IiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOScsMCkiPjwvc3Bhbj48L3RkPjwvdHI+IDx0cj48dGQ+Jm5ic3A7PC90ZD4gPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXkwIiBvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMCcsMCkiPjwvc3Bhbj48L3RkPiA8dGQ+Jm5ic3A7PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0ciBhbGlnbj0ibGVmdCIgaGVpZ2h0PSI0MCI+PHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI0NiUiIGFsaWduPSJjZW50ZXIiPjx0Ym9keT48dHI+PHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1MCUiPjxzcGFuIGNsYXNzPSJidXR0b24tcm9zZTUiPjxpbnB1dCBuYW1lPSJkZWxldGVPbmVMZSIgdHlwZT0iYnV0dG9uIiBpZD0iZGVsZXRlX29uZSIgdmFsdWU9IuWFpeWKm+a4iOOBruaWh+Wtl+OCkjHmloflrZfliYrpmaTjgZnjgosiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGRlbGV0ZU9uZSgpIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PC9zcGFuPjwvdGQ+IDx0ZCBhbGlnbj0icmlnaHQiIHdpZHRoPSIyJSI+Jm5ic3A7PC90ZD4gPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI0OCUiPjxzcGFuIGNsYXNzPSJidXR0b24tcm9zZTUiPjxpbnB1dCBuYW1lPSJkZWxldGVBbGxMZSIgdHlwZT0iYnV0dG9uIiBpZD0iZGVsZXRlX2FsbCIgdmFsdWU9IuWFpeWKm+a4iOOBruaWh+Wtl+OCkuWFqOOBpuWJiumZpOOBmeOCiyIgb25jbGljaz0iSmF2YVNjcmlwdDogZGVsZXRlQWxsKCkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0ciBhbGlnbj0ibGVmdCIgaGVpZ2h0PSIyMCI+PHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI0NSUiIGFsaWduPSJjZW50ZXIiPjx0Ym9keT48dHI+PHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj48c3BhbiBjbGFzcz0iYnV0dG9uLXJvc2U2Ij48aW5wdXQgbmFtZT0ia2V5RGlzcCIgdHlwZT0iYnV0dG9uIiBpZD0ia2V5X0Rpc3AiIHZhbHVlPSLjgq3jg7zjga7mloflrZfjgpLooajnpLrjgZfjgarjgYQiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGRpc3BTa2JDdGwodGhpcy52YWx1ZSkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48L3NwYW4+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+IDx0ciBoZWlnaHQ9IjQwIj48dGQgY29sc3Bhbj0iMiIgYWxpZ249ImNlbnRlciI+PGRpdiBpZD0ia2V5TXNnIj7jgq3jg7zjga7mloflrZfjgpLpnZ7ooajnpLrjgavjgZnjgovloLTlkIjjga/jgIzjgq3jg7zjga7mloflrZfjgpLooajnpLrjgZfjgarjgYTjgI3jgpLmirzjgZfjgabjgY/jgaDjgZXjgYTjgII8L2Rpdj48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvZGl2PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9mb3JtPjwvZGl2PgoKCgkKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2pzL2pxdWVyeS0zLjUuMS5qcyI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9qcy92dWUuanMiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vanMvaW5kZXhfcGMuanMiPjwvc2NyaXB0PgoKPC9ib2R5PjwvaHRtbD4=","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"84507fc6-a69f-46d4-8d8a-c88fe1b34055","value":"rendered_page.html"},{"category":"Network activity","comment":"The address in the browser address bar at the end of the capture.","disable_correlation":false,"to_ids":true,"type":"url","uuid":"ffea6551-d1e9-4978-97e0-140eff4e9e65","value":"https://laogangtea.com/ibg/client/l_home_p.php"}],"Object":[{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"8176ee92-4bd1-4e99-896d-4af6c4d42746","value":"http://laogangtea.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"9d3c57e0-70f8-4135-a917-74db511d8eef","value":"laogangtea.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"876c88eb-c74a-4d1d-b605-5462aef24d35","value":"laogangtea.com"}],"ObjectReference":[{"comment":"Capture on lookyloo","object_uuid":"677d3295-a811-4ebb-8d33-81322f5b5b99","referenced_uuid":"fb67b87d-14d5-40cc-8019-3de5cf95d93c","relationship_type":"captured-by","uuid":"43b958e3-7826-489a-8946-c44c2115c1ac"},{"object_uuid":"677d3295-a811-4ebb-8d33-81322f5b5b99","referenced_uuid":"736acbed-ae54-46ab-a01a-921413ded123","relationship_type":"redirects-to","uuid":"77423956-c58a-4523-aa7c-941d93ac2601"}],"comment":"Submitted URL","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2023-05-24T14:17:30.628000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"677d3295-a811-4ebb-8d33-81322f5b5b99"},{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"55d5751f-0cb8-4513-a295-fd3b7fae8ed2","value":"http://laogangtea.com/"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"922eb449-d4cb-481e-9975-351eeb2bc3e3","value":"laogangtea.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"0becb83e-536a-4b40-a185-57282054b365","value":"laogangtea.com"}],"ObjectReference":[{"object_uuid":"736acbed-ae54-46ab-a01a-921413ded123","referenced_uuid":"3db0c12c-b957-4ac8-963d-0b6155e42aba","relationship_type":"redirects-to","uuid":"280f22c8-7c76-4d16-8a7a-e3fd87c37f03"}],"comment":"Redirect 0","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2023-05-24T14:17:30.628000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"736acbed-ae54-46ab-a01a-921413ded123"},{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"2258a020-fcd1-4c4f-b88c-c5d65c7b1747","value":"https://laogangtea.com/ibg/client/l_home_p.php"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"f8e7f417-410c-4582-ad30-51ebbc9d9f22","value":"laogangtea.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"975453fb-c81c-4d6d-8f13-394eb1eb3725","value":"laogangtea.com"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"de4c66c8-426b-422f-8bcc-4f4ef2776556","value":"bd82dd5447c3a86b9799c08d44ec1a3b"}],"comment":"Last redirect (1)","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2023-05-24T14:17:30.628000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"3db0c12c-b957-4ac8-963d-0b6155e42aba"},{"Attribute":[{"category":"Payload delivery","disable_correlation":true,"object_relation":"filename","to_ids":true,"type":"filename","uuid":"3eb55484-ec01-4caa-a03e-2958ac19a2f8","value":"l_home_p.php"},{"category":"Other","disable_correlation":true,"object_relation":"size-in-bytes","to_ids":false,"type":"size-in-bytes","uuid":"740944a0-f912-4b12-b0ba-96abf6d9fd25","value":"51116"},{"category":"Other","disable_correlation":true,"object_relation":"entropy","to_ids":false,"type":"float","uuid":"b48347a7-fe02-4e6f-a36d-379a74302e24","value":4.390703390763787},{"category":"Payload delivery","disable_correlation":false,"object_relation":"md5","to_ids":true,"type":"md5","uuid":"d00147be-941a-456d-9b38-8b17ffea7a56","value":"3bd3d0a3f20f43262d4b2a0dc1d8e214"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha1","to_ids":true,"type":"sha1","uuid":"f9ad4ad8-c21f-4aa0-92d5-d87e11e23576","value":"0efc4401146ffb302926ef3d6657c4d67af94119"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha256","to_ids":true,"type":"sha256","uuid":"ad553561-6fec-46b6-a53e-1372b29110de","value":"0db15476b13a7728962f639f3c7cded167811d69a44e1e3539e8ff7d4ec43290"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha512","to_ids":true,"type":"sha512","uuid":"0569a692-c70e-4265-b23f-f307df610315","value":"67426354541aa511a4a2415b6887f954120b1b628b71173b78a6721278114ed6d6a40b54f53d1986b57e58b26c9a9a6120e03af91c482afe1f4fa77517a99065"},{"category":"Payload delivery","data":"CjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KCTxoZWFkPgoJCTxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KCQk8dGl0bGU+5LiJ5LqV5L2P5Y+L5L+h6KiX44OA44Kk44Os44Kv44OI44CA44Ot44Kw44Kk44OzPC90aXRsZT4KCQk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIiBocmVmPSIuLi9jc3MvcGMvdGFibGVzLmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0iLi4vY3NzL3BjL3NjcmVlbi5jc3MiPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiIGhyZWY9Ii4uL2Nzcy9wYy9zY3JlZW5fZWRnZS5jc3MiPgoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJwcmludCIgaHJlZj0iLi4vY3NzL3BjL3ByaW50LmNzcyI+CgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCIgaHJlZj0iLi4vY3NzL3BjL2lzTG9naW4uY3NzIj4KCQk8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2Zhdmljb24uaWNvIiBzaXplcz0iMTZ4MTYiPgoJCTxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vZmF2aWNvbi5pY28iIHNpemVzPSIxNngxNiI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTgweDE4MCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi5wbmciPgoJCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjU3eDU3IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTU3eDU3LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iNjB4NjAiIGhyZWY9Imh0dHBzOi8vZGlyZWN0LnNtdGIuanAvL2FwcGxlLXRvdWNoLWljb24tNjB4NjAucG5nIj4KCQk8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSI3Mng3MiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi03Mng3Mi5wbmciPgoJCTxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9Ijc2eDc2IiBocmVmPSJodHRwczovL2RpcmVjdC5zbXRiLmpwLy9hcHBsZS10b3VjaC1pY29uLTc2eDc2LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTE0eDExNCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMTR4MTE0LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTIweDEyMCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xMjB4MTIwLnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTQ0eDE0NCIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNDR4MTQ0LnBuZyI+CgkJPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTUyeDE1MiIgaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC8vYXBwbGUtdG91Y2gtaWNvbi0xNTJ4MTUyLnBuZyI+CgkJPHN0eWxlPgoJCQkuYWN0aXZlIHsKCQkJCWJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjAwKTsKCQkJfQoKCQkJLnVuYWN0aXZlIHsKCQkJCWJhY2tncm91bmQtY29sb3I6IHJnYigyMDksIDIxMywgMjE5KTsKCQkJfQoJCQkKCQkJLmxvYWRpbmcgewoJCQkJaGVpZ2h0OiAxMDB2aDsKCQkJCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSB7CgkJCQl3aWR0aDogMTUwcHg7CgkJCQloZWlnaHQ6IDE1cHg7CgkJCQltYXJnaW46IDAgYXV0bzsKCQkJCW1hcmdpbi10b3A6IDEwMHB4OwoJCQkJdGV4dC1hbGlnbjogY2VudGVyOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuIHsKCQkJCWRpc3BsYXk6IGlubGluZS1ibG9jazsKCQkJCXdpZHRoOiAxNXB4OwoJCQkJaGVpZ2h0OiAxMDAlOwoJCQkJbWFyZ2luLXJpZ2h0OiA1cHg7CgkJCQliYWNrZ3JvdW5kOiBibGFjazsKCQkJCS13ZWJraXQtYW5pbWF0aW9uOiBsb2FkIDEuMDRzIGVhc2UgaW5maW5pdGU7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bGFzdC1jaGlsZCB7CgkJCQltYXJnaW4tcmlnaHQ6IDBweDsKCQkJfQoJCQkJCQoJCQlALXdlYmtpdC1rZXlmcmFtZXMgbG9hZCB7CgkJCQkwJSB7CgkJCQkJb3BhY2l0eTogMTsKCQkJCX0KCQkJCQkKCQkJCTEwMCUgewoJCQkJCW9wYWNpdHk6IDA7CgkJCQl9CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bnRoLWNoaWxkKDEpIHsKCQkJCS13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjEzczsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoMikgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuMjZzOwoJCQl9CgkJCQkJCgkJCS5sb2FkaW5nMSBzcGFuOm50aC1jaGlsZCgzKSB7CgkJCQktd2Via2l0LWFuaW1hdGlvbi1kZWxheTogMC4zOXM7CgkJCX0KCQkJCQkKCQkJLmxvYWRpbmcxIHNwYW46bnRoLWNoaWxkKDQpIHsKCQkJCS13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAwLjUyczsKCQkJfQoJCQkJCQoJCQkubG9hZGluZzEgc3BhbjpudGgtY2hpbGQoNSkgewoJCQkJLXdlYmtpdC1hbmltYXRpb24tZGVsYXk6IDAuNjVzOwoJCQl9CgkJPC9zdHlsZT4KCTwvaGVhZD4KCTxib2R5PgoJCTxkaXYgaWQ9InBhZ2UiPgoKCgoKCQkJPGRpdiBpZD0icHJpbnQtbWFzdGhlYWQiPgoJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCI+CgkJCQkJPHRib2R5PgoJCQkJCQk8dHI+CgkJCQkJCQk8dGQgd2lkdGg9IjEzIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxMyIgYWx0PSIiPjwvdGQ+CgkJCQkJCQk8dGQgd2lkdGg9IjIwMyIgaGVpZ2h0PSIzMSI+PGltZyBzcmM9Ii4uL2ltZy9sb2dvX2NvX3ByaW50LmdpZiIgaGVpZ2h0PSIzMSIgd2lkdGg9IjIwMyIKCQkJCQkJCQkJYWx0PSLkuInkupXkvY/lj4vkv6HoqJfpioDooYwiPjwvdGQ+CgkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTgzIiBhbHQ9IiI+PC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIHdpZHRoPSIxMyI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQk8dGQgaGVpZ2h0PSIzMSIgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiCgkJCQkJCQkJCXdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIHdpZHRoPSIxMyI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQk8dGQgaGVpZ2h0PSIzMCIgY29sc3Bhbj0iMyIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj4KCQkJCQkJCQk8aDE+44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw44CA44Ot44Kw44Kk44OzPC9oMT4KCQkJCQkJCTwvdGQ+CgkJCQkJCTwvdHI+CgkJCQkJPC90Ym9keT4KCQkJCTwvdGFibGU+CgkJCTwvZGl2PgoKCgkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgoJCQkJPHRib2R5PgoJCQkJCTx0cj4KCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjEiIGFsdD0iIj48L3RkPgoJCQkJCTwvdHI+CgkJCQkJPHRyPgoJCQkJCQk8dGQ+CgoKCgoKCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGlkPSJtYXN0aGVhZC0xIj4KCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMjAzIiBoZWlnaHQ9IjM2Ij48YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwIiB0YXJnZXQ9Il9ibGFuayI+PGltZwoJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvbG9nb19jby5naWYiIGhlaWdodD0iMzEiIHdpZHRoPSIyMDMiIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCWFsdD0i5LiJ5LqV5L2P5Y+L5L+h6KiX6YqA6KGMIj48L2E+PC90ZD4KCQkJCQkJCQkJCTx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBhbGlnbj0icmlnaHQiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIKCQkJCQkJCQkJCQkJaWQ9Imdsb2JhbG5hdmkiPgoJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTIiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8dHI+CgoJCQkJCQkJCQkJCQkJCTx0ZCBjbGFzcz0iZ25hdmktdGQxIj4KCgkJCQkJCQkJCQkJCQkJCTxhIGNsYXNzPSJtY3Atbm8tcmVwbGFjZS11cmwgbWNwLXBjc3AtbGluayIKCQkJCQkJCQkJCQkJCQkJCWhyZWY9ImphdmFzY3JpcHQ6cG9zdFRvVXJsKCdodHRwczovL3NwLmRpcmVjdC5zbXRiLmpwLi4vaW1nYi9sb2dpbi5kbycpIj4KCgkJCQkJCQkJCQkJCQkJCQnjgrnjg57jg7zjg4jjg5Xjgqnjg7PjgrXjgqTjg4jjga/jgZPjgaHjgokKCgkJCQkJCQkJCQkJCQkJCTwvYT4gfAoKCQkJCQkJCQkJCQkJCQkJPGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF90b3AnKTsiPgoJCQkJCQkJCQkJCQkJCQkJ44OY44Or44OXCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YQoJCQkJCQkJCQkJCQkJCQkJaHJlZj0iaHR0cHM6Ly9mYXEuc210Yi5qcC9jYXRlZ29yeS9zaG93LzE2Mj9zaXRlX2RvbWFpbj1kZWZhdWx0IgoJCQkJCQkJCQkJCQkJCQkJdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ44KI44GP44GC44KL44GU6LOq5ZWPCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL3JhdGUiCgkJCQkJCQkJCQkJCQkJCQl0YXJnZXQ9Il9ibGFuayI+CgkJCQkJCQkJCQkJCQkJCQnph5HliKkKCQkJCQkJCQkJCQkJCQkJPC9hPiB8IDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvY2hhcmdlIgoJCQkJCQkJCQkJCQkJCQkJdGFyZ2V0PSJfYmxhbmsiPgoJCQkJCQkJCQkJCQkJCQkJ5omL5pWw5paZCgkJCQkJCQkJCQkJCQkJCTwvYT4gfCA8YQoJCQkJCQkJCQkJCQkJCQkJaHJlZj0iaHR0cHM6Ly9kaXJlY3Quc210Yi5qcC9hcDMvc2lyeW91U2Vpa3l1dS9zaXJ5b3VTZWlreXV1R29hbm5haS5kbyIKCQkJCQkJCQkJCQkJCQkJCXRhcmdldD0iX2JsYW5rIj4KCQkJCQkJCQkJCQkJCQkJCeizh+aWmeiri+axgjwvYT4mbmJzcDsKCQkJCQkJCQkJCQkJCQk8L3RkPgoKCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCTwvdGQ+CgoKCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjE2IiBhbHQ9IiI+PC90ZD4KCgoJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgaWQ9Im1hc3RoZWFkLTIiPgoJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMTEiIHdpZHRoPSI3IiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJPC90cj4KCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJPC90YWJsZT4KCQkJCQkJPC90ZD4KCQkJCQk8L3RyPgoJCQkJPC90Ym9keT4KCQkJPC90YWJsZT4KCQkJPGZvcm0gbmFtZT0iaWJMb2dpbkFjdGlvbkZvcm0iIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIuLi9pbWdiL2xvZ2luLmRvIiBvbnN1Ym1pdD0icmV0dXJuIGZhbHNlOyI+PGlucHV0CgkJCQkJdHlwZT0iaGlkZGVuIiBuYW1lPSJvcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIuaHRtbC5UT0tFTiIKCQkJCQl2YWx1ZT0iZWRlNWVhY2Q2NmNjMjIyYWZhNzI0NmMwYzY4Mjc3YjMiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImF0b20uc2NyZWVuRmxvdy50b2tlbi5kZWZhdWx0IgoJCQkJCXZhbHVlPSI2MzlkN2JiZWRkMDVjZGFiNTk0NTIyZTU1MmY4MDhlNCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYXRvbV9hY3Rpb25QYXJhbWV0ZXIiIHZhbHVlPSIiPgoKCgkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KCQkJCQk8dGJvZHk+CgoJCQkJCQk8dHI+CgoJCQkJCQkJPHRkIHZhbGlnbj0idG9wIj4KCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBpZD0icGFnZXRpdGxlIj4KCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNjUlIiB2YWxpZ249Im1pZGRsZSIgY2xhc3M9InRkLXBhZ2V0aXRsZTEiPgoJCQkJCQkJCQkJCQk8aDE+44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw44CA44Ot44Kw44Kk44OzPC9oMT4KCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMzUlIiBoZWlnaHQ9IjMwIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJ0ZC1wYWdldGl0bGUyIj4KCQkJCQkJCQkJCQkJPGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxNiIgd2lkdGg9IjEiIGFsdD0iIj4KCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQk8L3RhYmxlPgoKCQkJCQkJCQk8YnI+CgoJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJpbmZvdGFibGU2IiB2LXNob3c9J3RpcHNTaG93Jz4KCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJPHRyPgoKCgoKCgkJCQkJCQkJCQkJPHRkIHdpZHRoPSI0MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJpbmZvdGFibGU2LXRkMSI+PGltZwoJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvaWNvX2FsZXJ0LmdpZiIgaGVpZ2h0PSIzMyIgd2lkdGg9IjI1IiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQk8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIiBjbGFzcz0iaW5mb3RhYmxlNi10ZDIiPjxzcGFuIGNsYXNzPSJhbGVydCI+CgoKCgoKCgoKCQkJCQkJCQkJCQkJCTxoMj4KCgkJCQkJCQkJCQkJCQkJ5YWl5Yqb5YaF5a6544Gr5LiN5YKZ44GM44GC44KK44G+44GZ44CCKOODoeODg+OCu+ODvOOCuOeVquWPtzpBMDBJMTAzKQoKCgkJCQkJCQkJCQkJCQk8L2gyPgoKCgoKCgoKCQkJCQkJCQkJCQkJPC9zcGFuPgoKCgoKCgoKCgoKCQkJCQkJCQkJCQkJe3t0aXBzfX0KCgoKCgoJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCgkJCQkJCQkJPGRpdiBjbGFzcz0ibG9hZGluZyIKCQkJCQkJCQkJc3R5bGU9ImRpc3BsYXk6IGZsZXg7anVzdGlmeS1jb250ZW50OiBjZW50ZXI7YWxpZ24taXRlbXM6IGNlbnRlcjtmbGV4LWRpcmVjdGlvbjogY29sdW1uOyIKCQkJCQkJCQkJdi1zaG93PSJsb2FkaW5nU2hvdyI+CgkJCQkJCQkJCTxwPueiuuiqjeS4reOAgeODmuODvOOCuOOCkumWieOBmOOBquOBhOOBp+OBj+OBoOOBleOBhOOAgjwvcD4KCQkJCQkJCQkJPGRpdiBjbGFzcz0ibG9hZGluZzEiPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQkJPHNwYW4+PC9zcGFuPgoJCQkJCQkJCQk8L2Rpdj4KCQkJCQkJCQk8L2Rpdj4KCgkJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgaWQ9ImNvbnRlbnQtbWFpbiIgdi1zaG93PSdjb250ZW50U2hvdyc+CgkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjIwIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIyMCIgYWx0PSIiPjwvdGQ+CgoKCQkJCQkJCQkJCQk8dGQgdmFsaWduPSJ0b3AiPgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImluZm90YWJsZTEiPgoJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJoYWxmLXJvdy1zcGFjaW5nIj4KCQkJCQkJCQkJCQkJCQkJCTxhIGhyZWY9Imh0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L2luZm9ybWF0aW9uIgoJCQkJCQkJCQkJCQkJCQkJCXRhcmdldD0iX2JsYW5rIiB0YWJpbmRleD0iMSI+PGltZwoJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIiBoZWlnaHQ9IjE2IgoJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMTYiIGFsdD0iR28iPjx1PuODoeODs+ODhuODiuODs+OCueaDheWgseODu+OBiuefpeOCieOBm+OBr+OBk+OBoeOCiTwvdT48L2E+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCTx0ZCBjbGFzcz0iaGFsZi1yb3ctc3BhY2luZyI+CgkJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL3BlcnNvbmFsL2RpcmVjdC9zdGFydCIKCQkJCQkJCQkJCQkJCQkJCQl0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9IjIiPjxpbWcKCQkJCQkJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvaWNvX2xpbmtfZncyX3BvcHVwLmdpZiIgaGVpZ2h0PSIxNiIKCQkJCQkJCQkJCQkJCQkJCQkJd2lkdGg9IjE2IgoJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IkdvIj48dT7liJ3mnJ/nmbvpjLLjgYzjgYrmuIjjgb/jgafjgarjgYTjgYrlrqLjgZXjgb7jga/jgZPjgaHjgok8L3U+PC9hPgoJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJaWQ9ImNvbnRlbnQtbWFpbiI+CgkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQk8dGQgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQkJPCEtLUJlZ2luQ29udGVudHMtLT4KCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxOSIgYm9yZGVyPSIwIgoJCQkJCQkJCQkJCQkJCQkJCWNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InN1YmhlYWQyIj4KCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiIHZhbGlnbj0idG9wIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWNsYXNzPSJzdWJoZWFkMi10ZDEiPjxpbWcKCQkJCQkJCQkJCQkJCQkJCQkJCQkJc3JjPSIuLi9pbWcvaWNvX3N1YmhlYWRfMS5naWYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWhlaWdodD0iMTkiIHdpZHRoPSIxNiIgYWx0PSIiPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgaGVpZ2h0PSIxOSIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWNsYXNzPSJzdWJoZWFkMi10ZDIiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTxoMj7jgYrlrqLjgZXjgb7mg4XloLHjga7lhaXlips8L2gyPgoJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIgY2xhc3M9ImRhdGEtdGFibGUyIj4KCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCBjb2xzcGFuPSIzIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQnjg4DjgqTjg6zjgq/jg4jjgZTliKnnlKjjgqvjg7zjg4njgavkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgarjgYTjgYrlrqLjgZXjgb7jga/ikaDjgavjgIHoqJjovInjgYzjgYLjgovjgYrlrqLjgZXjgb7jga/ikaHjgavlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIIKCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCBjb2xzcGFuPSIzIiBzdHlsZT0icGFkZGluZy10b3A6IDFlbTsiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCemBuOaKnu+8muKRoOS8muWToeeVquWPt+OBruiomOi8ieOBjOOBquOBhOOBiuWuouOBleOBviA8aW1nCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWhlaWdodD0iMTYiIHdpZHRoPSIxNiIgYWx0PSJHbyI+PGEKCQkJCQkJCQkJCQkJCQkJCQkJCQkJaHJlZj0iamF2YXNjcmlwdDpvcGVuV2luZG93KCcnLCdodHRwczovL2ZhcS5zbXRiLmpwL2ZhcS9zaG93LzMyMzI/c2l0ZV9kb21haW49ZGVmYXVsdCcsJycpOyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjMiPuiqrOaYjjwvYT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTwhLS0g5bqX55Wq5Y+3IC0tPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNCUiIHJvd3NwYW49IjIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImNlbnRlciI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9InJhZGlvIiBkaXNhYmxlZD0iZGlzYWJsZWQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJrYWlpbk5vS2lzYWlVbXUiIHRhYmluZGV4PSI0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl2YWx1ZT0iMCI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyNSUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSIxJSI+PC90aD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGggd2lkdGg9IjkyJSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nOiA3cHggM3B4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlhbGlnbj0ibGVmdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdmFsaWduPSJtaWRkbGUiPuW6l+eVquWPtzxhCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGl0bGU9IuODmOODq+ODlyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI1Ij48Yj7igLs8L2I+PC9hPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGg+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMtdmxpbi10IgoJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLWxlZnQ6IDNweDsgcGFkZGluZy1yaWdodDogM3B4Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjQwJSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSI4JSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLXJpZ2h0OiAxMHB4Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxzcGFuCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9Imhhbmtha3UiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJ0ZXh0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJ0ZW5ubyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJbWF4bGVuZ3RoPSIzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2LW1vZGVsPSJkaWFuZmFuaGFvIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzaXplPSI0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iNiIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJOmRpc2FibGVkPSdjaG9zZScKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJOmNsYXNzPXsndW5hY3RpdmUnOmNob3NlLCdhY3RpdmUnOiFjaG9zZX0+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZD7ljYrop5LmlbDlrZcz5qGB44Gn5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTwhLS0g5Luj6KGo5Y+j5bqnIC0tPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMjUlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0aCB3aWR0aD0iMSUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLXRvcDogMS41ZW07IHBhZGRpbmctYm90dG9tOiAxLjVlbTsiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGg+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSI5MiUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNsYXNzPSJkYXRhLXRhYmxlMi10aDEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nOiAxNHB4IDNweCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImxlZnQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbGlnbj0ibWlkZGxlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJ5Luj6KGo5pmu6YCa6aCQ6YeR5Y+j5bqn55Wq5Y+3PGEKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfd29yZCcpIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGl0bGU9IuODmOODq+ODlyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI3Ij48Yj7igLs8L2I+PC9hPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGg+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHBhZGRpbmc9IjAiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iaGFua2FrdSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9InRleHQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImtvemFubyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJbWF4bGVuZ3RoPSI3IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2LW1vZGVsPSJrb3V6dW9mYW5oYW8iCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXNpemU9IjkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2YWx1ZT0iIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk6ZGlzYWJsZWQ9J2Nob3NlJwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk6Y2xhc3M9eyd1bmFjdGl2ZSc6Y2hvc2UsJ2FjdGl2ZSc6IWNob3NlfT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPiZuYnNwOyZuYnNwOwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQ+44GU5Yip55So55Sz6L685pmC44Gr55m76Yyy44GX44Gf44Kk44Oz44K/44O844ON44OD44OI44OQ44Oz44Kt44Oz44Kw5Luj6KGo5pmu6YCa6aCQ6YeR5Y+j5bqn55Wq5Y+344KS5Y2K6KeS5pWw5a2XN+ahgeOBp+WFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAggoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY29sc3Bhbj0iMyIgc3R5bGU9InBhZGRpbmctdG9wOiAxZW07Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQnpgbjmip7vvJrikaHkvJrlk6Hnlarlj7fjga7oqJjovInjgYzjgYLjgovjgYrlrqLjgZXjgb4gPGltZwoJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQloZWlnaHQ9IjE2IiB3aWR0aD0iMTYiIGFsdD0iR28iPjxhCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWhyZWY9ImphdmFzY3JpcHQ6b3BlbldpbmRvdygnJywnaHR0cHM6Ly9mYXEuc210Yi5qcC9mYXEvc2hvdy8zMjMyP3NpdGVfZG9tYWluPWRlZmF1bHQnLCcnKTsiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSI5Ij7oqqzmmI48L2E+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJPCEtLSDkvJrlk6Hnlarlj7cgLS0+CgkJCQkJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJtaWRkbGUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSI0JSIgcm93c3Bhbj0iMSIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iZGF0YS10YWJsZTItdGgxLXZsaW4tdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlhbGlnbj0iY2VudGVyIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgdHlwZT0icmFkaW8iCgkJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImthaWluTm9LaXNhaVVtdSIgdGFiaW5kZXg9IjQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbHVlPSIxIiA6Y2hlY2tlZD0nY2hvc2UnCgkJCQkJCQkJCQkJCQkJCQkJCQkJCUBjbGljaz0iY2hvc2U9dHJ1ZTtkaWFuZmFuaGFvPScnO2tvdXp1b2Zhbmhhbz0nJyI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyNSUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSIxJSI+PC90aD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGggd2lkdGg9IjkyJSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9ImRhdGEtdGFibGUyLXRoMS12bGluLXQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nOiA3cHggM3B4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlhbGlnbj0ibGVmdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdmFsaWduPSJtaWRkbGUiPuS8muWToeeVquWPtzxhCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTAiPjxiPuKAuzwvYj48L2E+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90aD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9Ijc3JSIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iZGF0YS10YWJsZTItdGQzLXZsaW4tdCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlzdHlsZT0icGFkZGluZy1sZWZ0OiAzcHg7IHBhZGRpbmctcmlnaHQ6IDNweCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSI0MCUiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHNwYWNpbmc9IjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRyCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iaGFua2FrdSI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9InRleHQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImthaWluTm8iCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW1heGxlbmd0aD0iOCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJc2l6ZT0iMTIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSIxMSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdi1tb2RlbD0idXNlcm5hbWUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTpkaXNhYmxlZD0nIWNob3NlJwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk6Y2xhc3M9eyd1bmFjdGl2ZSc6IWNob3NlLCdhY3RpdmUnOmNob3NlfT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkPiZuYnNwOyZuYnNwOwoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQ+5Y2K6KeS5pWw5a2XN++9njjmoYHjgaflhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY29sc3Bhbj0iMyIgY2xhc3M9ImhhbGYtcm93LXNwYWNpbmciCgkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XaW5kb3coJycsJ2h0dHBzOi8vZmFxLnNtdGIuanAvZmFxL3Nob3cvMzIzMj9zaXRlX2RvbWFpbj1kZWZhdWx0JywnJyk7IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTIiPiA8aW1nCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9pY29fbGlua19mdzJfcG9wdXAuZ2lmIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJYWx0PSJHbyI+PHU+44OA44Kk44Os44Kv44OI44GU5Yip55So44Kr44O844OJ44Gu56iu6aGe44KE44GK5a6i44GV44G+5oOF5aCx44Gu5YWl5Yqb5pa55rOV44Gu6Kmz57Sw44Gv44GT44Gh44KJPC91PgoJCQkJCQkJCQkJCQkJCQkJCQkJCTwvYT4KCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCTx0ZCB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTkiIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJzdWJoZWFkMiI+CgkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjE2IiB2YWxpZ249InRvcCIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0ic3ViaGVhZDItdGQxIj48aW1nCgkJCQkJCQkJCQkJCQkJCQkJCQkJCXNyYz0iLi4vaW1nL2ljb19zdWJoZWFkXzEuZ2lmIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQloZWlnaHQ9IjE5IiB3aWR0aD0iMTYiIGFsdD0iIj48L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGhlaWdodD0iMTkiIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSIKCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0ic3ViaGVhZDItdGQyIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8aDI+e3twYXNzd29yZFRleHR9fTwvaDI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCWNlbGxwYWRkaW5nPSIwIiBjbGFzcz0iZGF0YS10YWJsZTIiPgoJCQkJCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY2xhc3M9ImRhdGEtdGFibGUyLXRkNCI+PGltZwoJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQk8dGQgY2xhc3M9ImRhdGEtdGFibGUyLXRkNSI+PGltZwoJCQkJCQkJCQkJCQkJCQkJCQkJCQlzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMSIgYWx0PSIiPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRoIHdpZHRoPSIyNSUiIGNsYXNzPSJkYXRhLXRhYmxlMi10aDEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj7jg63jgrDjgqTjg7Pjg5Hjgrnjg6/jg7zjg4k8c3BhbgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RoPgoJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJkYXRhLXRhYmxlMi10ZDMiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQljZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iNDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCWNlbGxzcGFjaW5nPSIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2VsbHBhZGRpbmc9IjAiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHRkIHZhbGlnbj0idG9wIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJd2lkdGg9IjQ1JSIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJvd3NwYW49IjIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzdHlsZT0icGFkZGluZy10b3A6MC4yZW0iPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0icGFzc3dvcmQtZm9udCI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9InBhc3N3b3JkIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJpYnBhc3N3b3JkIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQltYXhsZW5ndGg9IjMyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQlzaXplPSIzNCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjEzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl2LW1vZGVsPSJwYXNzd29yZCIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJY2xhc3M9InRleHQtaW5wdXQtZmllbGQiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQljbGFzcz0iYnV0dG9uLXJvc2U0Ij4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQluYW1lPSJidXR0b241IgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbHVlPSLjgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4kiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFzY3JpcHQ6c2hvd0tleUJvYXJkKGlicGFzc3dvcmQpIj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxhIGhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc29mdHdhcmVLZXlib2FyZCcpIgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjE1Ij48Yj7igLs8L2I+PC9hPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8dGQKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXJvd3NwYW49IjIiPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJJm5ic3A7Jm5ic3A7CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx0ZAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcm93c3Bhbj0iMiI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQnljYrop5Loi7HmlbDlrZfmt7flnKjjga405qGB5Lul5LiKMzLmoYHku6XlhoXjgafjgZnjgILoi7HlrZfjga/lpKfmloflrZfjgajlsI/mloflrZfjgpLljLrliKXjgZfjgabjgY/jgaDjgZXjgYTjgII8YnI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8aW1nIHNyYz0iLi4vaW1nL2ljb19saW5rX2Z3Ml9wb3B1cC5naWYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJaGVpZ2h0PSIxNiIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl3aWR0aD0iMTYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJYWx0PSJHbyI+CgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8YSBocmVmPSJqYXZhc2NyaXB0Om9wZW5XaW5kb3coJycsJ2h0dHBzOi8vd3d3LnNtdGIuanAvcGVyc29uYWwvZGlyZWN0L2ludGVybmV0L2hlbHAvbG9jaycsJycpOyIKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMTYiPuODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOBjOOCj+OBi+OCieOBquOBhOODu+WkseWKueOBl+OBpuOBl+OBvuOBo+OBn+OBiuWuouOBleOBvuOBr+OBk+OBoeOCiTwvYT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQkJCQkJPC90YWJsZT4KCgoKCgkJCQkJCQkJCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgoJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjE2Ij48c3BhbiBjbGFzcz0ib3JhbmdlLWRhcmsiPjxiPu+8ijwvYj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZCBhbGlnbj0ibGVmdCI+CgkJCQkJCQkJCQkJCQkJCQnjg63jgrDjgqTjg7Pjg5Hjgrnjg6/jg7zjg4njgpLlhaXlipvnm7jpgZXjgZXjgozjgZ/loLTlkIjjgIHnrKzkuInogIXjgavjgojjgovjgIzjgarjgorjgZnjgb7jgZfjgI3jgpLpmLLmraLjgZnjgovjgZ/jgoHjgIHjgYrlsYrjgZHjga7jg6Hjg7zjg6vjgqLjg4njg6zjgrnlrpvjgabjgavpgKPntaHjgYTjgZ/jgZfjgb7jgZnjgIIKCQkJCQkJCQkJCQkJCQkJCeODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOCkuaJgOWumuWbnuaVsOS7peS4iuWFpeWKm+ebuOmBleOBleOCjOOBn+WgtOWQiOOAgeODreOCsOOCpOODs+ODkeOCueODr+ODvOODieOCkuWkseWKueOBleOBm+OBpuOBhOOBn+OBoOOBjeOBvuOBmeOAggoJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQk8YnI+CgoKCQkJCQkJCQkJCQkJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIKCQkJCQkJCQkJCQkJCWlkPSJidG4tYm90dG9tIj4KCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQk8dHIgdmFsaWduPSJtaWRkbGUiPgoJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjQ4IiBhbGlnbj0ibGVmdCI+PC90ZD4KCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyNSIgYWxpZ249ImNlbnRlciIgY2xhc3M9ImRpdmlkZXIiPi88L3RkPgoJCQkJCQkJCQkJCQkJCQk8dGQgbm93cmFwPSJub3dyYXAiPgoJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1jaG9jbyI+CgkJCQkJCQkJCQkJCQkJCQkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjE3IgoJCQkJCQkJCQkJCQkJCQkJCQlzdHlsZT0icGFkZGluZy1sZWZ0OiAxMHB4O3BhZGRpbmctcmlnaHQ6IDEwcHg7IgoJCQkJCQkJCQkJCQkJCQkJCQl2YWx1ZT0iIOODreOCsOOCpOODsyAiIEBjbGljaz0ic2VuZCgpIj4KCQkJCQkJCQkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJyaWdodCI+CgkJCQkJCQkJCQkJCQkJCQk8c3BhbiBjbGFzcz0iYnV0dG9uLWNob2NvIj4KCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgbmFtZT0iMTIzIiB0eXBlPSJidXR0b24iIHZhbHVlPSLplonjgZjjgosiCgkJCQkJCQkJCQkJCQkJCQkJCXN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHg7cGFkZGluZy1yaWdodDogMTBweDsiCgkJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSIxOCI+CgkJCQkJCQkJCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD4mbmJzcDs8L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCQk8YnI+CgoJCQkJCQkJCQkJCQk8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KCQkJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIxNiIgYWxpZ249ImxlZnQiPjxhCgkJCQkJCQkJCQkJCQkJCQkJaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJykiIHRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjE5Ij48Yj7igLs8L2I+PC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIKCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMjAiPuS8muWToeeVquWPt+OBq+OBpOOBhOOBpjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YQoJCQkJCQkJCQkJCQkJCQkJCWhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfdG9wJykiIHRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjIxIj48Yj7igLs8L2I+PC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3RvcCcpIgoJCQkJCQkJCQkJCQkJCQkJCXRhYmluZGV4PSIyMiI+5bqX55Wq5Y+344Gr44Gk44GE44GmPC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQkJCQkJCQkJPHRkIHdpZHRoPSIxNiIgYWxpZ249ImxlZnQiPjxhCgkJCQkJCQkJCQkJCQkJCQkJaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF93b3JkJykiIHRpdGxlPSLjg5jjg6vjg5ciCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjIzIj48Yj7igLs8L2I+PC9hPjwvdGQ+CgkJCQkJCQkJCQkJCQkJCTx0ZD48YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3dvcmQnKSIKCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMjQiPuS7o+ihqOaZrumAmumgkOmHkeWPo+W6p+eVquWPt+OBq+OBpOOBhOOBpjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJPHRyIGFsaWduPSJsZWZ0IiB2YWxpZ249InRvcCI+CgkJCQkJCQkJCQkJCQkJCTx0ZCB3aWR0aD0iMTYiIGFsaWduPSJsZWZ0Ij48YQoJCQkJCQkJCQkJCQkJCQkJCWhyZWY9IkphdmFTY3JpcHQ6b3BlbkhlbHAoJ2hlbHBfc29mdHdhcmVLZXlib2FyZCcpIgoJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNSI+PGI+4oC7PC9iPjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCQk8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zb2Z0d2FyZUtleWJvYXJkJykiCgkJCQkJCQkJCQkJCQkJCQkJdGFiaW5kZXg9IjI2Ij7jgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4njgavjgaTjgYTjgaY8L2E+PC90ZD4KCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCTx0ciBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCQkJCQkJCQk8dGQgd2lkdGg9IjE2IiBhbGlnbj0ibGVmdCI+PGEKCQkJCQkJCQkJCQkJCQkJCQlocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX3NldHVwJyk7IgoJCQkJCQkJCQkJCQkJCQkJCXRpdGxlPSLjg5jjg6vjg5ciIHRhYmluZGV4PSIyNyI+PGI+4oC7PC9iPjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCQk8dGQ+PGEgaHJlZj0iSmF2YVNjcmlwdDpvcGVuSGVscCgnaGVscF9zZXR1cCcpOyIKCQkJCQkJCQkJCQkJCQkJCQl0YWJpbmRleD0iMjgiPuOCveODleODiOOCpuOCp+OCouOCreODvOODnOODvOODieOBruaWh+Wtl+OCteOCpOOCuuOBruWkieabtOaWueazleOBq+OBpOOBhOOBpjwvYT48L3RkPgoJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJPHRkIHdpZHRoPSIyMCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMjAiIGFsdD0iIj48L3RkPgoJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJPC90Ym9keT4KCQkJCQkJCQk8L3RhYmxlPgoJCQkJCQkJCTxicj4KCgoJCQkJCQkJPC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjY1OCIgYWx0PSIiPjwvdGQ+CgkJCQkJCTwvdHI+CgkJCQkJPC90Ym9keT4KCQkJCTwvdGFibGU+CgoKCgoKCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGlkPSJmb290ZXIiPgoJCQkJCTx0Ym9keT4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIGNsYXNzPSJmb290ZXItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSIxIiBhbHQ9IiI+PC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIGhlaWdodD0iMjAiIHZhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZm9vdGVyLXRkMiI+CgkJCQkJCQkJPGEgaHJlZj0iaHR0cHM6Ly93d3cuc210Yi5qcC9nZW5lcmFsL3ByaXZhY3kvc2VuZ2VuIiB0YXJnZXQ9Il9ibGFuayI+CgkJCQkJCQkJCeWAi+S6uuaDheWgseOBruOBiuWPluOCiuaJseOBhOOBq+OBpOOBhOOBpgoJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJodHRwczovL3d3dy5zbXRiLmpwL2dlbmVyYWwvc29saWNpdGF0aW9uIiB0YXJnZXQ9Il9ibGFuayI+CgkJCQkJCQkJCeS4ieS6leS9j+WPi+S/oeiol+mKgOihjOOBruWLp+iqmOaWuemHnQoJCQkJCQkJCTwvYT4gfCA8YSBocmVmPSJKYXZhU2NyaXB0Om9wZW5IZWxwKCdoZWxwX290aGVycycpIj4KCQkJCQkJCQkJ6Zu76Kmx44Gn44Gu44GK5ZWP44GE5ZCI44KP44Gb5YWICgkJCQkJCQkJPC9hPgoJCQkJCQkJPC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIGNsYXNzPSJmb290ZXItdGQxIj48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI2NTgiIGFsdD0iIj48L3RkPgoJCQkJCQk8L3RyPgoJCQkJCTwvdGJvZHk+CgkJCQk8L3RhYmxlPgoKCQkJCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGlkPSJjb3B5cmlnaHQiPgoJCQkJCTx0Ym9keT4KCQkJCQkJPHRyPgoJCQkJCQkJPHRkIHdpZHRoPSIxNCI+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iMTQiIGFsdD0iIj48L3RkPgoJCQkJCQkJPHRkIGFsaWduPSJsZWZ0IiB2YWxpZ249Im1pZGRsZSI+CgkJCQkJCQkJPHNwYW4gY2xhc3M9InNtYWxsLWdyeSI+Q29weXJpZ2h0IMKpIDIwMjMKCQkJCQkJCQkJU3VtaXRvbW8gTWl0c3VpIFRydXN0IEJhbmssIExpbWl0ZWQKCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQk8L3RkPgoJCQkJCQkJPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJtaWRkbGUiPgoJCQkJCQkJCTxzcGFuIGNsYXNzPSJzbWFsbC1ncnkiPgoKCQkJCQkJCQkJ55S76Z2iSUTvvJoKCQkJCQkJCQkJaWJra18wNzAxCgkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJPC90ZD4KCQkJCQkJPC90cj4KCQkJCQk8L3Rib2R5PgoJCQkJPC90YWJsZT4KCgoKCgkJCQk8ZGl2IGNsYXNzPSJib3hTZXRMaW5lIiBpZD0ic29mdHdhcmVLZXlCb2FyZCIgc3R5bGU9Im1hcmdpbjogMHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IGRpc3BsYXk6IG5vbmU7Ij4KCQkJCQk8dGFibGUgY2xhc3M9InNrLXRhYmxlIiBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI0ZGRkZGRiIgd2lkdGg9IjUyMCIgaGVpZ2h0PSIyNTAiIGJvcmRlcj0iMCI+CgkJCQkJCTx0Ym9keT4KCQkJCQkJCTx0ciBhbGlnbj0icmlnaHQiIGhlaWdodD0iMzAiIHZhbGlnbj0idG9wIj4KCQkJCQkJCQk8dGQgY29sc3Bhbj0iMiIgd2lkdGg9IjEwMCUiPgoJCQkJCQkJCQk8c3BhbiBjbGFzcz0iYnV0dG9uLXJvc2U1Ij4KCQkJCQkJCQkJCTxpbnB1dCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiIG5hbWU9ImtleV9DbG9zZSIgdHlwZT0iYnV0dG9uIgoJCQkJCQkJCQkJCXZhbHVlPSLjgr3jg5Xjg4jjgqbjgqfjgqLjgq3jg7zjg5zjg7zjg4njgpLplonjgZjjgosiIGlkPSJjbG9zZV9wb3AiIG9uY2xpY2s9IkphdmFTY3JpcHQ6IGRvQ2xvc2UoKSI+CgkJCQkJCQkJCTwvc3Bhbj4KCQkJCQkJCQk8L3RkPgoJCQkJCQkJPC90cj4KCgkJCQkJCQk8dHIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPgoJCQkJCQkJCTx0ZD4KCQkJCQkJCQkJPGRpdiBjbGFzcz0iYm94U2V0QmciPgoJCQkJCQkJCQkJPHRhYmxlIGNlbGxzcGFjaW5nPSIxIiBjbGFzcz0ibGF5b3V0IiBpZD0ia2V5Qm9keSIgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CgoJCQkJCQkJCQkJCTx0Ym9keT4KCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJrZXlBdG9aIiBhbGlnbj0iY2VudGVyIj4KCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxheW91dCI+CgoJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMCcsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDEpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXkyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MyIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMycsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzQnLDEpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXk1IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc1JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5NiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTciCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDEpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXk4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc4JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5OSIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnOScsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTEwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMCcsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTExIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMScsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48aW1nIHNyYz0iLi4vaW1nL2MuZ2lmIiBoZWlnaHQ9IjEiIHdpZHRoPSI1IgoJCQkJCQkJCQkJCQkJCQkJCQkJYWx0PSIiPjwvdGQ+CgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleTEyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMicsMSkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJPC90cj4KCgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTMiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEzJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE0JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE2JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTciCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE3JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTgiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE4JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MTkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE5JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIwJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIxJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIyJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjMiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIzJywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5MjUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI1JywxKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQk8dGQgY29sc3Bhbj0iMTciPiZuYnNwOzwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzIiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzInLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIKCQkJCQkJCQkJCQkJCQkJCQkJCWFsdD0iIj48L3RkPgoKCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzMiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzMnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzQnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIKCQkJCQkJCQkJCQkJCQkJCQkJCWFsdD0iIj48L3RkPgoKCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzYiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzYnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzciCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzcnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzgiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzgnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PGltZyBzcmM9Ii4uL2ltZy9jLmdpZiIgaGVpZ2h0PSIxIiB3aWR0aD0iNSIKCQkJCQkJCQkJCQkJCQkJCQkJCWFsdD0iIj48L3RkPgoKCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzEwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxMCcsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMTEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzExJywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxMiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTInLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxMyIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTMnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzE0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNCcsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMTUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE1JywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxNiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTYnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzE3IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcxNycsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMTgiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzE4JywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MxOSIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMTknLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzIwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMCcsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMjEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzIxJywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MyMiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjInLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIgoJCQkJCQkJCQkJCQkJCQkJCQkJCWlkPSJpbnNMZXR0ZXJLZXlfUzIzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCcyMycsMikiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9Imluc0xldHRlcktleV9TMjQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzI0JywyKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxpbWcgc3JjPSIuLi9pbWcvYy5naWYiIGhlaWdodD0iMSIgd2lkdGg9IjUiCgkJCQkJCQkJCQkJCQkJCQkJCQlhbHQ9IiI+PC90ZD4KCgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIKCQkJCQkJCQkJCQkJCQkJCQkJCQlpZD0iaW5zTGV0dGVyS2V5X1MyNSIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMjUnLDIpIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCTwvdGQ+CgoJCQkJCQkJCQkJCQkJPHRkIGNsYXNzPSJrZXkwdG85IiB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+CgkJCQkJCQkJCQkJCQkJPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJsYXlvdXQiPgoJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTEiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzEnLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5MiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnMicsMCkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXkzIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCczJywwKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk0IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc0JywwKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTUiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzUnLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5NiIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNicsMCkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJPC90cj4KCQkJCQkJCQkJCQkJCQkJCTx0cj4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+PHNwYW4gY2xhc3M9ImJ1dHRvbi1zb2Z0d2FyZS1rZXkiPjxpbnB1dAoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgdmFsdWU9Ij9AIiBpZD0iaW5zS2V5NyIKCQkJCQkJCQkJCQkJCQkJCQkJCQlvbmNsaWNrPSJKYXZhU2NyaXB0OiBpbnNWYWx1ZSgnNycsMCkiPjwvc3Bhbj4KCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZD48c3BhbiBjbGFzcz0iYnV0dG9uLXNvZnR3YXJlLWtleSI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJdHlwZT0iYnV0dG9uIiB2YWx1ZT0iP0AiIGlkPSJpbnNLZXk4IgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGluc1ZhbHVlKCc4JywwKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTkiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzknLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPiZuYnNwOzwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkPjxzcGFuIGNsYXNzPSJidXR0b24tc29mdHdhcmUta2V5Ij48aW5wdXQKCQkJCQkJCQkJCQkJCQkJCQkJCQl0eXBlPSJidXR0b24iIHZhbHVlPSI/QCIgaWQ9Imluc0tleTAiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogaW5zVmFsdWUoJzAnLDApIj48L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCQk8dGQ+Jm5ic3A7PC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCTwvdHI+CgoJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIGhlaWdodD0iNDAiPgoJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPgoKCQkJCQkJCQkJCQkJCQk8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNDYlIiBhbGlnbj0iY2VudGVyIj4KCQkJCQkJCQkJCQkJCQkJPHRib2R5PgoJCQkJCQkJCQkJCQkJCQkJPHRyPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNTAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNSI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImRlbGV0ZU9uZUxlIiB0eXBlPSJidXR0b24iCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9ImRlbGV0ZV9vbmUiIHZhbHVlPSLlhaXlipvmuIjjga7mloflrZfjgpIx5paH5a2X5YmK6Zmk44GZ44KLIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW9uY2xpY2s9IkphdmFTY3JpcHQ6IGRlbGV0ZU9uZSgpIj4KCQkJCQkJCQkJCQkJCQkJCQkJPC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJyaWdodCIgd2lkdGg9IjIlIj4mbmJzcDs8L3RkPgoJCQkJCQkJCQkJCQkJCQkJCTx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNDglIj4KCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNSI+CgkJCQkJCQkJCQkJCQkJCQkJCQk8aW5wdXQgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIgoJCQkJCQkJCQkJCQkJCQkJCQkJCW5hbWU9ImRlbGV0ZUFsbExlIiB0eXBlPSJidXR0b24iCgkJCQkJCQkJCQkJCQkJCQkJCQkJaWQ9ImRlbGV0ZV9hbGwiIHZhbHVlPSLlhaXlipvmuIjjga7mloflrZfjgpLlhajjgabliYrpmaTjgZnjgosiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogZGVsZXRlQWxsKCkiPgoJCQkJCQkJCQkJCQkJCQkJCQk8L3NwYW4+CgkJCQkJCQkJCQkJCQkJCQkJPC90ZD4KCQkJCQkJCQkJCQkJCQkJCTwvdHI+CgkJCQkJCQkJCQkJCQkJCTwvdGJvZHk+CgkJCQkJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCTwvdHI+CgoJCQkJCQkJCQkJCQk8dHIgYWxpZ249ImxlZnQiIGhlaWdodD0iMjAiPgoJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPgoJCQkJCQkJCQkJCQkJCTx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI0NSUiIGFsaWduPSJjZW50ZXIiPgoJCQkJCQkJCQkJCQkJCQk8dGJvZHk+CgkJCQkJCQkJCQkJCQkJCQk8dHI+CgkJCQkJCQkJCQkJCQkJCQkJPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIxMDAlIj4KCQkJCQkJCQkJCQkJCQkJCQkJPHNwYW4gY2xhc3M9ImJ1dHRvbi1yb3NlNiI+PGlucHV0CgkJCQkJCQkJCQkJCQkJCQkJCQkJc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIiBuYW1lPSJrZXlEaXNwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCXR5cGU9ImJ1dHRvbiIgaWQ9ImtleV9EaXNwIgoJCQkJCQkJCQkJCQkJCQkJCQkJCXZhbHVlPSLjgq3jg7zjga7mloflrZfjgpLooajnpLrjgZfjgarjgYQiCgkJCQkJCQkJCQkJCQkJCQkJCQkJb25jbGljaz0iSmF2YVNjcmlwdDogZGlzcFNrYkN0bCh0aGlzLnZhbHVlKSI+PC9zcGFuPgoJCQkJCQkJCQkJCQkJCQkJCTwvdGQ+CgkJCQkJCQkJCQkJCQkJCQk8L3RyPgoJCQkJCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJCQkJCTwvdGFibGU+CgkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQkJPHRyIGhlaWdodD0iNDAiPgoJCQkJCQkJCQkJCQkJPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgoJCQkJCQkJCQkJCQkJCTxkaXYgaWQ9ImtleU1zZyI+44Kt44O844Gu5paH5a2X44KS6Z2e6KGo56S644Gr44GZ44KL5aC05ZCI44Gv44CM44Kt44O844Gu5paH5a2X44KS6KGo56S644GX44Gq44GE44CN44KS5oq844GX44Gm44GP44Gg44GV44GE44CCPC9kaXY+CgkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJCQk8L3RyPgoKCQkJCQkJCQkJCQk8L3Rib2R5PgoJCQkJCQkJCQkJPC90YWJsZT4KCQkJCQkJCQkJPC9kaXY+CgkJCQkJCQkJPC90ZD4KCQkJCQkJCTwvdHI+CgoJCQkJCQk8L3Rib2R5PgoJCQkJCTwvdGFibGU+CgkJCQk8L2Rpdj4KCQkJPC9mb3JtPgoJCTwvZGl2PgoKCgk8L2JvZHk+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9qcy9qcXVlcnktMy41LjEuanMiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vanMvdnVlLmpzIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2pzL2luZGV4X3BjLmpzIj48L3NjcmlwdD4KPC9odG1sPgo=","disable_correlation":true,"encrypt":true,"malware_filename":"l_home_p.php","object_relation":"malware-sample","to_ids":true,"type":"malware-sample","uuid":"3758ec1e-f82c-4fb7-a892-1f11150fbdc4","value":"l_home_p.php"},{"category":"Artifacts dropped","disable_correlation":true,"object_relation":"mimetype","to_ids":false,"type":"mime-type","uuid":"264d9681-1485-416b-9d04-50501c234033","value":"text/html"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"ssdeep","to_ids":true,"type":"ssdeep","uuid":"298e0222-2102-4a14-8414-77bb244302d6","value":"384:X2BTjANzPCk+hjAyWuPxvNgmpfC7UNGHLKGHYHHsv6F+nGn6F+KfEEEEkrTmSmJm:mBTjANzYmEEEEZH3s/ETWzxz"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"98835fa2-d6bc-4521-aea0-d3dc66c0d36a","value":"bd82dd5447c3a86b9799c08d44ec1a3b"}],"ObjectReference":[{"comment":"URL loading that content","object_uuid":"a519a724-b89a-4c81-8488-4b6fb892e187","referenced_uuid":"3db0c12c-b957-4ac8-963d-0b6155e42aba","relationship_type":"loaded-by","uuid":"8a5e457f-5689-4b3d-b3ef-b74b34c83328"},{"comment":"Screenshot of the page","object_uuid":"a519a724-b89a-4c81-8488-4b6fb892e187","referenced_uuid":"34697823-7a50-4ad3-a988-f2adca806095","relationship_type":"rendered-as","uuid":"cceb475c-0688-4471-add2-17edc8c515c4"},{"comment":"Rendered HTML at the end of the capture","object_uuid":"a519a724-b89a-4c81-8488-4b6fb892e187","referenced_uuid":"84507fc6-a69f-46d4-8d8a-c88fe1b34055","relationship_type":"rendered-as","uuid":"cf611a34-0c85-4aa7-bbc4-a37ba687d1e6"}],"comment":"Content received for the final redirect (before rendering)","description":"File object describing a file with meta-information","distribution":"5","first_seen":"2023-05-24T14:17:31.530000+00:00","magic_db":null,"meta-category":"file","name":"file","sharing_group_id":"0","template_uuid":"688c46fb-5edb-40a3-8273-1af7923e2215","template_version":"25","uuid":"a519a724-b89a-4c81-8488-4b6fb892e187"}],"info":"Lookyloo Capture (http://laogangtea.com)","uuid":"5ae779d5-4309-4a3b-ab0b-fb6f05202c64"}]
