GeneralCatalog
6.2.1
Ported to 6.2
6.2.x
Znuny
https://www.znuny.org/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
The General Catalog package.
Das General Catalog Paket.
El paquete General Catalog.
Az általános katalógus csomag.
build.znuny.com
2021-11-09 08:41:23 UTC
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EolEYWFhQUE0DdryIwAgtsxfo7/5+te/nv4vAJyVsrKysrKyqEYvLS2NML0CgD52vly7nS91nmvx+oDS3Nz86quvvv322zU1NadPny4uLi4vL7/ooouuvPLKzGUIcn/bvv71r7c7uLCwcPjw4TNmzLjmmms6fkBsa2urrKzcsmXL4cOHm5qaBg0aVF5ePmXKlPe9731jx47NcdB33nlnw4YNe/bsaWhoKCkpmTJlyrx58yZPnpxLtd3YBQD0D+Xl5VGXAEAsnD59urKycseOHTU1NadOnRo0aNCoUaNmzpw5d+7c4uLiqKs751pbW19//fW33367urq6sbExPz9/5MiRM2fOnD9//uDBg6OubuCKUX60Z8+eZ5555uTJk+ktDQ0NDQ0Ne/bsWbNmzSc/+clcIpgutbS01NTU1NTU/P73v7/33ntHjBiR3tXc3Lxs2bJ9+/alt5w6dWrfvn379u1bvXp1jgnOqlWrfvvb36bXvzx58uSWLVu2bNkiAAIAAKBL27dvX7FixalTp9JbGhsb9+zZs2fPntWrV990001z5syJsLxz7Z133nnmmWeOHz+e3tLa2lpdXV1dXb1u3bqbbrrpsssuO6sT6h7qLXHJj/bt2/f4448nk8mKioprrrlm8uTJJSUlp06d2rt375o1a/bv3//444/ffffdEyZMCM70xnf5A5He1dDQsG/fvhdffLGuru6ll176xCc+kT5m1apV+/btGzx48Ic//OELL7ywrKyspaWltrZ2165dW7ZsyeVZbNy4cdWqVXl5eQsWLLj88stHjBhx+vTpnTt3btiwIfeXwo81AADAwLRjx44nn3wylUpNnTp1/vz5EyZMKC0tbW5urq2t3bZtW2Vl5YoVK/pxfvTOO+98//vfb21traiouOqqqyZPnlxWVtba2nr06NG3335748aNP/nJT842P6K3xCI/SiaTP/7xj5PJ5GWXXfYnf/IneXl/WNW7rKxs1qxZF1988U9/+tNNmzb96Ec/uv/++/Pz83sy1uDBgy+++OLS0tLHHnts586dmbveeOONIAhuvfXW6dOnh1vy8/MnTJgwYcKEhQsXdnnmhoaGX/3qV0EQ3HzzzZdffnl6uNmzZ8+ePbsnNQMAANDvtbS0PPvss6lU6oMf/OCHP/zh9PaSkpKJEydOnDjx2muvfe655yKs8JxKJpM/+tGPWltbr7zyyptuuimdDBQUFFRUVFRUVCxYsKAfP/34i0V+tHnz5mPHjo0aNermm29O/4ik5eXl3Xzzzfv37w8nnfVK1hguZtTU1JS58cSJE0EQTJw4sXvnfP3115ubmydOnJgOj86FsDvpn/7pnyorK1977bXa2tqWlpZ/+qd/CoJg//79mzZt2r17d11dXSKRGDZs2EUXXXTttdeWlJR0PMPXv/71TZs2bdy4saamJi8vb+LEiYsWLQpfltdffz3cnkqlJk6c+JGPfKTj2k91dXVr166tqqqqr68vKCgYN27cVVdddfHFF6cP+D//5/8cO3bsvvvuGzduXLjl2Wefff3114MguPTSS2+55ZZwY3V19dKlS0eMGPHXf/3X6cfu27dv7dq1+/btO3XqVElJyaRJkxYsWBC2nuXyOnTU1NS0YsWKbdu25eXl3XjjjfPmzTvLVx0AAOCc27RpU0NDw6RJkzLDo0zFxcW33nprx+1dXqAFGVeCr7/++oYNG8IrwUmTJqWvBLt3wp5cnLYTJgNjx47NDI8yFRUVLV68OH03l1HS83syJ/qkb3evzlAu161BEGzfvn3NmjXV1dWpVKq8vHzu3Llz5849T6fUxSI/2rZtWxAEf/RHf9RZb1F+fv5VV13185//fNu2bb2SH1VXVwdBMHTo0MyNQ4YMOX78+I4dO2bNmtWNc1ZVVQVB0DedhL/4xS9effXVdhsffvjhzLu1tbW1tbVbt25dsmRJaWlpu4Off/75zFl127dv37Nnz5IlSzZu3PjKK6+kt1dVVb3zzjv33XffyJEjMzcuX768ubk5vNva2rpr165du3Z94AMfuO6668KN06ZNe+2113bt2pXOj3bt2tXuRhAEYQvY1KlT01s2btz43HPPZS4gtXXr1jfffPOP//iP586dm8vr0E5dXd1TTz11+PDh0tLS22+/PXMsAACA+Ni+fXsQBGf7B+9cLtDSXnzxxXXr1mWOuGfPnvvuu++CCy7o3gl7fnGalk4GzhgeddS9UXrlDDlet65fv/6FF15I3z1w4MCBAwcOHjyYS20xFIv86MCBA8F7Q4SOwr3hkT0RLjz24osvBkHQblrZnDlzVq9evWLFiqqqqosuumj8+PFntbT74cOHgyCYOHHiG2+8sXbt2sOHD+fn548ePfryyy+/7LLLEolEDyvPVFlZuWDBgiuuuGLkyJHpX60pU6bMnTt30qRJZWVlzc3NBw4ceOmll/bv37969errr7++3Rk2btx4zTXXXHHFFUOHDj106NDKlStramqeeOKJ+vr6jttXr1798Y9/PHxgfX39008/3dzcPHv27AULFlxwwQWnTp164403/uu//uvll1+ePn16uMz51KlTw/xowYIFQRDU1tbW19eXlZWlUqn6+vra2trwK2bCLCn91h88ePD5559PpVKXX375tddeO3z48GPHjq1evXrTpk3PPffcxIkTR48e3eXrkGn37t1PP/10Y2Pj6NGj//RP/zRzuXQAAIBYCZOFs5oTk+MFWtqGDRsWLlx4+eWXl5WVHTx4cOXKlUeOHFm9enW6r+dsT9jzi9O0sM8j9y/OymWU9Heyn7HZp3t15njdevDgwV/+8pdBEMybN2/BggVDhw6tr69fu3btxo0bc3yCcROL/KixsTHo0A3UTrg3PLIbOv6szJ49+wMf+EDmlg996EP19fWvv/56ZWVlZWVlOOiUKVMuvfTS9IpIWYTL42/ZsuV3v/tduKWlpWXv3r179+7dvn377bffnmOE1Nnq4JnmzZv30Y9+tN3Gz3zmM+nbJSUl06dPLy8v/9d//de3336744/+Nddcs2jRovD2hAkTbrrppv/8z/88duzYwoULO27P7Bhav359U1NT5hy0oqKiBQsW5OfnP//886+88ko6PwqCYM+ePclkMj8/P50TpVKpLVu27Nq1q7y8PJlM7tmzJ8jIjzZs2NDW1jZz5sx0XHXBBRcsXrz45MmTO3bsWL9+/Z/8yZ90+Tqkvfrqq88991xbW9tFF1106623Dho0qLMjAQAAIhde8JaVlbXbnuUiMccLtLSFCxemJ8dNmjTpYx/72OOPP7579+70AWd7wp5fnKY1NDQEQTBkyJDODuiVUXp+hhyvW1955ZW2trZZs2Z97GMfCw8bMWLExz72sYaGhq1bt+b4HGMlFvlR3xs2bNgHP/jBdtPl8vPzb7nllgULFmzZsmXPnj0HDx6sr6/fvHnz5s2bZ82a9YlPfCL70t1h69qaNWuKi4uvv/76mTNnBkHw9ttvv/DCC1u3bt24ceP8+fN7q/4rr7yy48Ywy9y5c+exY8fSrYZBEGR+8WHaFVdckXm3oqIiy/ZwZajQjh07giC46qqr2p3wfe973/PPP79v377wbllZ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3HvttdceOXKk158CnAvyIwCgP2tra2toaDh9+nTUhXQqfTkkQhoIJk+eHHUJvWbOnDmR/NCe8QI+R1HVnF08q4qhPnuVvvKVr3z2s59N3z1w4MA999yzbt26L3/5y7W1tR2PX7JkybJly1566aVUKrVq1aq77rory94f//jHmXs/97nPffWrXz1HTwR6V0HUBQAAnEPNzc0HDhwoKCiYOnVq1LWcmaaDAWXv3r1Rl3Deq66ujroE+rOqqqrKyspHH300vaWiouKxxx7L8pC8vLxRo0aFtxcsWNDQ0JBlb3Nzc+beT3/609/+9rerqqqmT5/eO08Azhn9RwBAf5ZKpYqLi4uLi6MupFP6jwiC4JFHHpk6dWpZWdknP/nJ48ePt5un89Of/vSqq64qLS2dNWvWihUrMh8YHnny5MnFixcXFRV1nDuT5bFBxoSgZcuWXXLJJUOHDn3ggQfSex966KF77723oqJi/PjxS5Ys2bVrV28933Xr1t14443Dhg0rKSlZuHDhb37zm5kzZ3Y57owZM8JqExnanbknNf/whz+8/PLLBw8efMUVVzz99NPt9mZ/j3ryfLPL8oyeffbZoqKiRCJRUlJy5ZVXrlix4v3vf3+Oe0Pz58+fP39+jpWktXvxO74X2d+F7D91Xb5W27dvX7BgQUFBQcef9p6Mm7Z06dJ77733rF6Qw4cPd3tvEAR333330qVLz2pEiEYKAIBIvf3222+//XZra2vUhdDLpk6dunnz5swtZ/z4/fTTT1977bU7duxobm7esmXLF7/4xczDfvjDH9555507d+5samrasmXLokWLXnjhhXbn/Mu//MuXX365ra1txYoVhYWFuT82fPgdd9xx6623VlZWNjc3P//88+ldO3bsCG/U1tZ+7WtfmzZtWsfiu3FB8eKLL86ePfuFF144cuRIc3Pznj17HnzwwZEjR+Y4bvYRu13zU089ddtttzU0NKRSqYaGhttuu2358uXpvdnfox4+3+zPK8szKiwsXLFiRSqVSiaThw8fXrZs2ahRo3LcG7ryyiuvvPLKHJ9IpoULF65Zsya8vWbNmg984AM51hzq7Keuy9cqCII//uM/3rJlS8ef9p6Mm2n27NlvvPFGZ0/8jG9TIpHIckzHvX/7t3+bueX3v//9+9///s5GhPiQHwEARCyZTCaTyairoPel86OOS/ZUVFSkD7v00kszY6YNGzZkXn/OmjXrnXfeSd99++23r7nmmsxRgiB4+umnM+/m/tjw+F/84hddPpfW1tYzXjl3Iz+aM2fO+vXrczy447i5j3hWNV9yySVvvfVW+u5bb711ySWXpO9mf4+yy/H55nLCds+otLT0oYceOnbs2BkPzr63hx5//PG77747vP2Zz3xm2bJlnR15xnehs5+6Ll+rIAiqq6sz7/bKuJlKSkrCGLGzArrc2OXddvnRyZMni4uLs1cFcZBI6ZQGAIBzYNq0aStXrpw9e3Z6S9iJ0O6wsrKympqakpKS8G5DQ0NZWVn6sOLi4qampszjS0pKGhsbOztn5t0uH9tZSUEQHD58+H/9r//13HPP7d69u7S09LLLLvvNb37T8cjOHp7FoEGDjh49Onjw4DPu7XLcLCP2pOaioqLjx4+n34VTp04NHz48/eplf4968nyzV5X9GT3//PMf//jHW1paioqKRo8ePWTIkP/8z/+cN29eLnt76NSpUxdeeOHWrVuDIJg1a9aOHTvS04RzeRc6exO7fK2y/LT3ZNxMJSUlR44cKS0tzaWAzqpqa2vLnN/Xbu/f/u3f/su//Et6S0NDw6hRo9r9YkIMWf8IAACiNGPGjKqqqvTdzZs3Z+6dNWvWm2++mfkX4NyvM3vy2MWLF998881bt25tbGzcv3//97///Rwf2KWpU6du2rSpt8bNDMh6UvOMGTP27NmTvrtnz57M9Yyzv0fZZX++2WV/RjfeeGNzc3Nzc/P+/ftffvnlu+6666Mf/WiOe3uopKRk8eLFTz755BNPPHHLLbdkrjHXk3fh3L1WuZs+ffru3bu799i0ZDKZZW9bW1vm3V27ds2YMaOHI0IfkB8BAECUvva1r/3N3/zNwYMHk8nkli1bfvCDH2Tu/eY3v7lkyZJXXnnl1KlTDQ0Nr7322ic+8Ykcz9yTx+7evbuurq6pqammpmbt2rXf+c53zu5Zde4b3/jG5z//+R07dgRB0NDQ8Oabby5duvTuu+/OcdzCwsJw1eTq6urvfve7CxYs6JWa//Ef//GLX/xi+O3stbW1X/ziF//xH/8xvTf7e9ST55td9mc0atSol19+uaWlpby8fOrUqRdffHHmN39l3xvq3vrZoSVLljz88MOPPPLIkiVLcq85u3P3WuXuhhtueOmll87qISUlJWvXrg1vb9y4cejQoZkNR+32Dho0qN3Df/3rX994443dqxb61DmZFQcAAANex/WzJ02adMYjv/e9702ePLmkpOTWW28NI4zMvc8///y8efOKiorGjBlzzz337NmzJ72r3af6jh/yszw21WEaTuauVatWXXHFFcXFxWPHjr3vvvv2799/xoG6d2WxatWq6667bty4ccOHD583b953v/vd9Ioz2cdNpVLhqsmJRGLixIl/9Vd/deDAgd6q+cknn7z44osLCwsvvvjiJ598sl3N2d+jbj/f7FVlf0bz5s1bvnz57NmzCwoKgiBIL5idy97QFVdc0b31s9NDzJs3r+OTzf4OZv+xyeW1OuPdHo6btn379ssuu6zdxuxvU/gzGQRBeXl5RUXFb3/728zHttt7zz33tFv/6NJLL62qquqsHogP6x8BAMA50XH9o1zU1dWNHTu23bpFxIr3qH9bsmTJokWLPvWpT52Lkz/wwAN1dXXp9Y+eeuqpVatWLV269FyMBb3L/DUAAIiL2trab33rW3fddVfUhdAp71G/98///M//8R//0TdjPfzww9/61rf6ZizoIfkRAABEqbm5+Rvf+EZeXl4ikZgxY8bgwYM1I8SN92hAKS8v/93vftc3Y7300kvl5eV9Mxb0kPlrAEC/dfTo0RMnTgwbNmz48OFR18JA1L35a+e7yZMn792794y7Jk2alPkdZ/3DQHu+9FC7+WtwHimIugAAgHMl/O7q+P+1rKGhobm5uaSkJPM7sOE8NdASk4H2fIEBy/w1AKDfam1tDYIg/O6hODt58mRtbW1jY2PUhQAAnFncP04BAHRbS0tLcD7kR6WlpYlEYtCgQVEXAgBwZnH/OAUA0G3JZDIIgsLCwqgL6cKQIUOGDBkSdRUAAJ0yfw0A6J9aW1tTqVQikYh//xEAQMzJjwCA/ul8mbwGnF/Cf1sABhr5EQDQP50vi2cDuUskEolEog8GqqmpWbRoUbuNlZWVX/jCFyoqKjoe//LLL99www3XXXddIpEoKip69tlnc9977bXXHjlypNefAkDvkh8BAP1T2CMQ/8WPGFAmT54cdQnnt1Qq1TcDfeUrX/nsZz+bvnvgwIF77rln3bp1X/7yl2trazsev2TJkmXLlr300kupVGrVqlV33XVX7ns/97nPffWrXz1HTwSgt/iLHADQP+k/Iob27t0bdQl0raqqqrKy8tFHH01vqaioeOyxx7I8JC8vb9SoUeHtBQsWNDQ05L7305/+9Le//e2qqqrp06f3zhMAOAf0HwEA/ZP8iPNFOCfr5MmTixcvLioq6ji/6aGHHrr33nsrKirGjx+/ZMmSXbt2ZT7w3//934cMGbJ27dqVK1cOGzas3WN/+tOfXnXVVaWlpbNmzVqxYkXH0efPnz9//vzu1ZyeStbubpaaM48PgmDZsmWXXHLJ0KFDH3jggfTedevW3XjjjcOGDSspKVm4cOFvfvObmTNnZj58+/btCxYsKCgoyP21ymXctKVLl957771n9YIcPny423uDILj77ruXLl16ViMC9DH5EQDQP5m/xvkinJP1pS996e/+7u+ampqWL19+xx13ZB5w/fXXP/roowcOHNi8efOYMWP+23/7b5kPPHTo0GOPPXbLLbc8/fTTjzzySOZjly9fvnz58h/+8IfHjh175plnHnrooRdffLHj6N2YFJZKpRYuXLhmzZrw7po1az7wgQ9knqezmjMr/9SnPvWTn/zkiSeeOHLkyLx588Jdv/zlL++7776/+Zu/2bVrV319/RNPPLFt27Z2ywN94QtfePjhh1taWnJ/rbocN9MLL7zQcfGj7Orq6rq9NwiCj3zkI88///xZjQjQxxJ9NoUYAKAvVVVVtbW1TZ48uaioKOpaGKCmTZu2cuXK2bNnjx8//sCBA5m7Kioq9u/fn76bSCSefvrp22+/PX23s0/pyWSyoKAgvTeRSLS0tBQUFCQSicbGxpKSkszHvu997/vlL385fvz48O727dvvvvvu3/3ud73y7JYtW/Zf//Vf4ayuu+++e9GiRX/2Z3+WS83pyn/xi1/cdNNN7Q6+9NJLv/e971111VWdjZtIJKqrq8eOHZu+m+NrlX3cTKWlpbW1taWlpZ0V0HHEdhvP6m4QBA0NDeXl5adOncpSFf3DAw88UFdX9y//8i9RFwJnTf8RANAPJZPJtra24DzpPzp16tT27dt3794ddSGcK/v370+3+YQ3MsOjUDo8aufw4cNf/OIXZ82aVVpaWl5efv3117c7ID1Js6SkpN2uqqqqCRMmpCeXzZw587XXXuuF5xMEQRDcdtttv/zlL+vr6+vr63/1q1/ddtttudccOmOI89Zbb73//e/PPnQ6PGqnJ+Nm6pU/sWc/yRkTqJ4PCnDuyI8AgH4onLyWn59/XlyS5eXlBUEQBl7QzuLFi2+++eatW7c2Njbu37//+9//fu6PnTVr1ptvvpnK0NjY2FuFlZSULF68+Mknn3ziiSduueWW4uLiXql56tSpmzZt6l5JPRk30/Tp03ue5yaTydz37tq1a8aMGT0cEeCckh8BAP3Q+bX4UZgfWVWAM9q9e3ddXV1TU1NNTc3atWu/853v5P7Yb37zm0uWLHnllVdOnTrV0NDw2muvfeITn2h3TPfWzw4tWbLk4YcffuSRR5YsWdJbNX/jG9/4/Oc/v2PHjiAIGhoa3nzzzaVLl9599925PLYn42a64YYbXnrppbN6SElJydq1a8PbGzduHDp0aOZvdPa9QRD8+te/vvHGG7tXLUDfkB8BAP3Q+Zgf6T8aCCZNmtRxY9gll/ldZpl3n3rqqQceeGD48OFz5sxZvnz5l7/85XbHtHtg5o2bbrrpa1/72v/8n/9z+PDh06dPf/DBB//1X/+13ejJZLLb2eWll16an5+fn58/Z86czO1Zam73HNt9a1sQBJ/85Cf//d///b777quoqJgwYcKf//mft7S0PPjggz18rbocN9Nf/uVfPvroo+02Zj6q4xmeeOKJD33oQ4lEYtSoUYsXL/7Zz36W+e9P9r1BEHz/+9+/7777OqsHIA6snw0A9EOHDh2qr68fOXLkBRdcEHUtXWtra6uqqgqCYPr06WGWRP+QXj876kI4a0uWLFm0aNGnPvWpPhjrqaeeWrVq1dKlS/tgLCJn/WzOXz6gAAD90PnYfxRoQYLY+Od//uf/+I//6JuxHn744W9961t9MxZAtxVEXQAAQO87v/KjIAjy8vLa2to0hkNMlJeX/+53v+ubsc52rSWASOg/AgD6rfMoPwoXUtF/BADEk/4jAKAfmjp1aiqVyrI+btzk5eUlk0n5EQAQT/qPAID+6TwKjwJfwQYAxJv8CAAgemF+ZP0jACCe5EcAANGz/hEAEGfyIwCA6Jm/BgDEmfwIACB68iNiK55LicWzqgGopaUl6hKAPiI/AgCInvWPePbZZ4uKihKJxJAhQ6ZPn/7xj3886oois3nz5kQiISHqUp+9SjU1NYsWLWq3sbKy8gtf+EJFRUXH419++eUbbrjhuuuuSyQSRUVFzz77bO57r7322iNHjvT6UwB6Tn4EABA96x8NEJMnT+5s1x133LF8+fJUKnXixImqqqqVK1f2QT1nvPhvp+9jzTlz5nQ5aGcH5PKM+o0+e2u+8pWvfPazn03fPXDgwD333LNu3bovf/nLtbW1HY9fsmTJsmXLXnrppVQqtWrVqrvuuiv3vZ/73Oe++tWvnqMnAvREQdQFAABg/tpAsXfv3s52tbS03HLLLX1ZTBAE1dXVfTziudb/nlHkqqqqKisrH3300fSWioqKxx57LMtD8vLyRo0aFd5esGBBQ0ND7ns//elPf/vb366qqpo+fXrvPAGgl+g/AgD6lYaGhv3799fV1UVdyNmRHw1kkydPDhvQEhnSe3O5e/LkycWLFxcVFXWcDbRu3bob11xsAAAAIABJREFUb7zx/7F39/FRVPfix2c2u5vsJiSo4QIbICYmNAYiFEmwtHhvgcpDS03k0QeqAfPCWrWIYH2JTV8FbhWxeAvX9AaQ6g1PQRoEERTEIheCglKMXALmGU0CgRgI2V12N7v7+2Nu5zfdJJvN4+xuPu+/dubMOec7Z6JsvjnnTFRUlMFgmDBhwuHDh4cPHy4IQkJCgpdOJSUlJV5WSO3YseP73/9+eHj4mDFjdu7cqSxqN6qcnJyFCxeaTKaYmJisrKyKigrfh6utqLzfUVtnEhMTlY2kpaWlpaX5Hkyrjbfsy/v9yhfn5eXdeeedkZGRK1eulEvbeoLKARk/frxWq+3oOHvvV5abm7tw4cIODUhdXV2nSwVByMzMzM3N7VCPAHoB+SMAABBUbDabxWKx2+1qB9Ix0m9x7H/UN1VVVUmP3q0gl3r8VLR6uGzZsueee85ms+Xn58+dO1cuPXjw4KJFixYvXlxRUdHY2Lh169YLFy5Im8uUlpZ66VSSmJjY1s/kjh07/vrXvx4/ftxsNh87duydd95RppC8RyUIwpQpU958882ampqioqKBAwdOnjzZ9+FqKyrvd3Tjxo3hw4crMxeNjY1JSUmfffaZspFWx6Fdbrd7woQJx48flw6PHz9+7733Ktvxfr/SlfPmzXv33Xe3bt1aX1+fmpoqFXl5grIlS5Zs3LjR4XB0dJy99Kv0wQcftNz8yDvvGfx28/s/+clPDhw40KEeAfQCka8pAAAgmNjt9ps3b+p0OoPBoHYsHXDjxo1Lly4ZDIYhQ4aoHQu6TXx8/J49e1JSUmJiYmpqapRFJpOpurpaeUYU2/xm7lHU8nDnzp2zZ89uWTpq1KgNGzaMGzeurQi9dOr9muTk5N27d3/ve9+TDi9cuJCRkXHu3DlfovLgdDq1Wm3LUu+xtVXqpdbGjRtPnz795z//WTp88cUXo6OjlyxZ0lYXHZKXl/e3v/1NWtWVmZk5adKkRx55pNUrW71fURTff//96dOne1zsyxOsra0dNGiQfNihcW6rXyWj0Xj16lWj0dhWAO0+uw4dCoJgNpujo6OtVquXqALXypUrGxoa1q5dq3YgQIcx/wgAAAQVvV4fGRkZWMkjQRA0Gg1vmwpi1dXV8sQW6YNH8qiL5DSNh/Pnz48cObIbO5KVlpYOGzZMPhw2bFhZWZmPUdXV1S1dujQ5OdloNEZHR0+ZMqUnImxpwYIFn376qZTk+uabb957772nnnqquxqfNWvWwYMHGxsbGxsbDx06NGvWLLnIx/ttNYnjyxOUk0ceutKvUrdMOPDeSKsZqK53CqB7kT8CAABQX3h4eEJCApOP0K5WX3fVlri4uDNnzvh+vc1m8/HKhISEqqoq+bCqqsr33Y7T09NnzJhx7tw5i8VSXV391ltv+R5hRynvKCQkZPXq1cuWLRMEYfny5dnZ2Xq9vrs6MhgM6enp27Zt27p1a0ZGRlhYmFzUlfvt6BNU6q5xvuOOOyorKztXV+Z0On0vraioSEhI6GKPALod+SMAAADAr+l0ut27d9tstg8//PCxxx7zveKKFSuefPLJ0tJSQRDMZnNxcXFubm5mZqZHy4Ig1NbWrl+/fvz48T62nJ2dvXTpUimZdfXq1aVLl2ZnZ/tYt7KysqGhwWazXblypbCwcM2aNb7fUbu839F9993ncrlWr15dXl7e6vSozu2fLcnKytq4ceOmTZuysrKU57tyv+0+QS+6a5ynTp368ccfd6iKwWAoLCyUPp86dSoyMlI5w8h7qSAIH3300bRp0zoXLYAe5AYAAADQA+Li4oqKipRnhg0b1uqV3r+iFxQU6HS6fv36PfLII5cvX1Ze41GlZQtHjhyZOHHi4MGD+/fvn5qaun79erPZ7NGyKIpDhw595plnampq2gqpZWDbtm1LSkrS6XRJSUnbtm1r9XZaPTxy5MiYMWPCwsIGDRq0aNEieSmfL/22G5WXO5KcPXtWFMUTJ060+iDGjBkzduzYVot8kZqampqa6nHS+/22vKmW1dt6gl0Z53b7lZWUlIwePdrjpPcHIT0FQRCio6NNJtMnn3yirOu91O12jxo1qqysrK14At2KFSueffZZtaMAOoP9swEAAIAeIe+frXYg+P/27Nmzbdu2/Px8tQMJJFlZWZMmTZo3b14v9LV9+/YjR47k5ub2Ql+qYP9sBC6t2gEAAAAAQG9obm7Ozs5+99131Q4kwLz88svp6em9kz/auHHjzp07e6EjAB1F/ggAAABAkFO+zys+Pp5FGB0SHR197Nix3umro3stAeg15I8AAAAABDkSRgDQRbx/DQAABI8bN25YrVZ+UQQAAOhe5I8AAECQcDqdly5d+vbbb9UOBAAAINiwfg0AAAQJu90uCIL06m61Y+mM69evW63WyMhIo9GodiwAAAD/hPlHAAAgSMj5I7UD6SSr1Xrjxg2bzaZ2IAAAAJ6YfwQAAIKEw+EQBEGv16sdSCdFRkaGhYUZDAa1AwEAAPBE/ggAAASJQJ9/ZDQaWbmGHiKKYg/tK99zLQciRgNAEGP9GgAACBKBPv8I6JyioiJRFLu+7Ve3NNLLLXcv7yPZXeMMAAGK/BEAAAgGbreb/BH8X2xsbLe3edddd7U758WXSTGdmzjTcy33Pu8j2V3j3JLJZOpELQDoZeSPAABAMGhubna73aIoarUsz4f/unjxotohwO/U1taqHQIAtI/8EQAACAbS5kdMPkIgEv+h1UNBEHJychYuXGgymWJiYrKysioqKnxvvKSkxMuqq82bNycmJkZERMyaNevq1asdCruLLaelpaWlpXWoR0EQdu/erdfrRVE0GAxjx44tKCgYOXKkVCQFs27dun79+hUWFu7ZsycqKmr37t3K6l0ZSe+8jIZ0vqmpKT09Xa/X6/V6OaqEhASpiqjQXSEBQPcifwQAAIJBoG+ejb7M7XZPmDDh+PHj0uHx48fvvfde5UqoKVOmvPnmmzU1NUVFRQMHDpw8ebLvjScmJra1qCovL2/Lli2HDh2qr69//vnnX3rppQ6F3cWW3W53J1Z7zZ07Nz8/3+12m83mAwcOWCyWuro6uUFBEC5fvrx58+aMjIydO3du2rRp7ty5yupdGUnvvIyGdH7ZsmXPPfeczWbLz8+XoyotLZVK3QrdFRIAdC9eEAAAAIJBXV3d9evXb7311ttuu03tWID/Ex8fv2fPnpSUlJiYmJqaGmWRyWSqrq6WD/Py8v72t79t3rxZEITMzMxJkyY98sgjrbbpdDq1Wm3L7/De3/zVaunIkSPz8/NHjBghHZ4+ffruu+/u6G8HPddyq8LDw1977bWHHnooKiqq1WAcDodWqxVF0WKxGAwGL8PSjSPZbqkoijt37pw9e3arl/HWtj5l5cqVDQ0Na9euVTsQoMOYfwQAAIIB84/gz6qrq+WpJdIHZfJIEIRZs2YdPHiwsbGxsbHx0KFDs2bNkovq6uqWLl2anJxsNBqjo6OnTJnSXVGVlpbGx8fLh0lJSf7f8q5du37961/3798/NDR06NChycnJp06dUl4g74BmMBg86vbcSPpCTh4BQIAifwQAAIJBcLx8zeVyORwOZiL0QQaDIT09fdu2bVu3bs3IyAgLC5OL0tPTZ8yYce7cOYvFUl1d/dZbb3VXpwkJCeXl5fLhhQsX/L/ladOm2e12u91eXV199OjR+fPn33fffT7W7bmR7F42m03tEACgFeSPAABAwHO5XM3NzULgzz8qLy+vrKyU7gV9TVZW1saNGzdt2pSVlaU8X1lZ2dDQYLPZrly5UlhYuGbNmu7qcdmyZU8//XRVVZXdbv/88883bdrUmy13bv/sAQMGHD161OFwREdHx8XFJSUlmc1mH+v23Eh2kU6nk3bUrq2tXb9+/fjx49WOCABaQf4IAAAEPGnyUUhISEhIiNqxdIkUv8vlUjsQ9JRhw4a1VTRq1CjpZ/iuu+5Snt++ffvKlSv79+9/11135efn/+Y3vxEEodWXtbV8gZf30kcffXTevHkTJ0685ZZbXn755d///vfKlr3restOp7MTU+3i4uIuXbp0zz336HQ6URSl7bTlkDxGxuNDz41ku6Ut41FeIO2ordFoxo0bV1paum/fvo4OCwD0ArZqAwAAAa+xsfHy5csGg2HIkCFqx9IlFy9etNlsMTExRqNR7VjQDeT9s9UOBIC/YP9sBC7mHwEAgIAnbZ4d6JsfCf+Yf+R0OtUOBAAA4J+QPwIAAAEvaPJHGo1GIH8EAAD8D/kjAAAQ8KT8UWhoqNqBdBXzj+AnYmNjxTbExsaqHR0AQAVatQMAAADoEumd90JQzD8ifwQ/UVVVpXYIAAD/Qv4IAAAENlEUBw8ebLfbA/3lawL5IwAA4K/IHwEAgMAmimJERITaUXQPKX/kcrnUDgQAAOCfsP8RAACAv2D+EQAA8E/kjwAAAPwF+SMAAOCfyB8BAAD4C/JHAADAP5E/AgAA8BcajUYQBLfbzRZIgF8RRVEUxV7o6MqVK5MmTZIPt2/fHhISIv6DXq/fvXu38vqjR49OnTp14sSJnSj90Y9+VF9f36O3AyCYkD8CAADwFxqNRvodlSlIwSo2NlbtELqNyWRSO4Te43a7e6ejF1544fHHH5cPH3300X379rn/IT8/f+7cucrrs7Ky8vLyPv74Y7fbfeTIkfnz5/te+stf/vLFF1/s0dsBEEzIHwEAAPgRlrAFt4sXL6odQrepra1VO4RgU1ZW9sUXXzz44IPyGZPJNG3aNPkwIyOjublZWUWj0QwYMED6PH78eLPZ7Hvpww8/fOLEibKysu69CwDBivwRAACAH5HyR6xf62tOnDgxbdq0qKgog8EwYcKEw4cPDx8+XC7dsWPH97///fDw8DFjxuzcuVM+L61pWrduXb9+/QoLC/fs2RMVFSWvUfJeKtm7d++4ceOMRmNycnJBQYGySKre1NSUnp6u1+uVq58SEhKkiXKigrLu7t279Xq9KIoGg2Hs2LEFBQUjR470uOW0tLS0tLSODpRHdy17z8nJWbhwoclkiomJycrKqqioaFldEIS8vLw777wzMjJy5cqVcqn3pyAIQklJyfjx47Vabcu1YF3pV5abm7tw4ULlmcrKSuVheXn5s88+qzxTV1fXxlC1XyoIQmZmZm5urvdrAEBC/ggAAAQwi8VitVqDKdvC/KM+6ODBg4sWLVq8eHFFRUVjY+PWrVsvXLggb0yzY8eOv/71r8ePHzebzceOHXvnnXfkFJK0qOry5cubN2/OyMjYuXPnpk2b5PVN3ksFQcjPz8/Pz9+xY8e1a9feeeednJycDz/8UC6Vqi9btuy5556z2WzKlVOlpaVSqVtBeUdz587Nz893u91ms/nAgQMWi6VlIqNlLV+43e4JEyYcP35cOjx+/Pi9996rbGfKlClvvvlmTU1NUVHRwIEDJ0+e7FFdEIR58+a9++67W7dura+vT01NlYq8PwXJkiVLNm7c6HA4Wq4j63S/Sh988IFy8yMPTU1NxcXFf/zjH5UnGxoa2hys9koFQfjJT35y4MAB79cAgETstaW8AAAA3a6ystLhcAwZMsRgMKgdS/eora1tamoaMGBA//791Y4FXRUfH79nz56UlJSYmJiamhplkclkqq6ulj6PGjVqw4YN48aNa7WR5OTk3bt3f+9735MOL1y4kJGRce7cOelQFEWHw6HVakVRtFgsBoNBFP//N3zvpSNGjDh48GBMTIx0WFJSkpmZeezYMblrURR37tw5e/Zs+VD5u4PHoVJ4ePhrr7320EMPRUVF+TpYPsvLy/vb3/62efNmQRAyMzMnTZr0yCOPtHql0+nUarUeQYqi+P7770+fPt3jYu9PQapYW1s7aNAg+bCt2+9Qv0pGo/Hq1atGo7FlUV1d3YULFyZMmNAyKi8Ppd1HZjabo6OjrVarl6jQvVauXNnQ0LB27Vq1AwE6jPlHAAAggOl0OmktidqBdBvmHwWl6upqebqN9EFOHgmCcP78+ZbLu2SlpaXDhg2TD4cNG+axYY1Wq5U+tJpF9VJaVlY2ZMgQeQnY8OHDT58+7XGNnDzqkF27dv3617/u379/aGjo0KFDk5OTT5061Yl2WjVr1qyDBw82NjY2NjYeOnRo1qxZclFdXd3SpUuTk5ONRmN0dPSUKVNabaHVJI73pyCRk0ceutKvUlsJqbNnz549e7Zl8qhDjbRV2jvvlQMQBMgfAQCAABYTExMXFyflXIID+aM+KC4u7syZM22VJiQkVFVVyYdVVVV33HFHt/SbnJxcXFysXINmsVg63ZrNZpM/T5s2zW632+326urqo0ePzp8//7777uuOkAVBEAwGQ3p6+rZt27Zu3ZqRkREWFiYXpaenz5gx49y5cxaLpbq6+q233vK9We9Pwbuu9Kt0xx13eGx4JAjCyZMn6+rqJk6c6GMj3v/v4VFaUVGRkJDQkRgB9F3kjwAAAPyIXq8PCwuT54ygL1ixYsWTTz5ZWloqCILZbC4uLs7Nzc3MzJRKs7Ozly5devXqVUEQrl69unTp0uzs7G7pd9WqVVlZWSdPnrRarWaz+fTp0zNnzvS9uk6nk/aQrq2tXb9+/fjx4+WiAQMGHD161OFwREdHx8XFJSUlebz5S+js/tmSrKysjRs3btq0KSsrS3m+srKyoaHBZrNduXKlsLBwzZo1vrfp/Sl415V+laZOnfrxxx8rzxw9ejQsLEyZPPKYLmQwGAoLC6XPp06dioyMVM4w8l4qCMJHH32kfL8bAHjjBgAAANAD4uLiioqKlGeGDRvW6pVHjhyZOHHi4MGD+/fvn5qaun79erPZLJdu27YtKSlJp9MlJSVt27ZNPq/8St/Wh7ZKJQcOHEhNTdXr9QMHDlywYEFVVVWrjbc8dLvdBQUFOp1OFMWhQ4c+88wzNTU1clFqamp+fn5KSoqUCdXpdAUFBR63PGbMmLFjx/o0jq1JTU1NTU31OHnkyJExY8aEhYUNGjRo0aJF8iLBljfV6q9CXp6C99HoYr+ykpKS0aNHK89ERER4/w1OegqCIERHR5tMpk8++cT3UrfbPWrUqLKysrbiQU9YsWLFs88+q3YUQGewfzYAAADQI+T9s9UOBAEjKytr0qRJ8+bN64W+tm/ffuTIkdzc3F7oCzL2z0bgYv0aAAAAAPiFl19++T//8z97p6+NGzf++7//e+/0BSAIsLQeAAAAAPxCdHT0sWPHeqcvj72WAMA75h8BAAAAAADAG/JHAAAAAAAA8Ib8EQAACEi8AwQAAKDXsP8RAAAISN98801zc/PgwYMNBoPasQAAAAQ58kcAACDwuN1uu93udrt1Op3asQAAAAQ/1q8B6Lv+8Ic//OxnP/N+jSiK0ofp06e/8sorPR8UAJ9IyaOQkBCtNgj/GHb9+vXKysqrV6+qHQgAAMD/IX8EoI8ym82vv/7666+/Lh3KeaK2rF27du3atVartedDA9A+m80mCIJer1c7kB7hdrsdDofD4VA7EKBntfuPLwDAf5A/AtBHFRQUjB8/PjExUTpsdyPepKSksWPH7tmzp+dDA9A+KX8UGhqqdiA9IiIiwmQy3XbbbWoHAvRdoiiS3gIAJfJHAPqo9957b/bs2R2qMmfOnL1793ZL7ydOnDh48GC3NAX0TcGdP9JqteHh4cE6u6qPi42NVTuEf2IymVRs2Z/fotjR2HpuJAHAT5A/AqA+j7/vyYeHDx8eM2aMwWC4/fbbN23aJJ10uVyrVq2Ki4u79dZbFyxYYDab5Vqvv/760KFDNRpNW3WVPv/88x/84ActO7Xb7b/61a9uu+22QYMGrVmzRlnlhz/84cmTJ7t4sydOnLj33nsnTZo0ZsyYLjYF9GXBnT9CELt48aLaIfyT2tragGvZP/W1+wXQB5E/AuC/5s+fv3z58mvXrh09evTTTz+VTv7Hf/zHkSNHPv7447KyMofDkZ2dLV//ySeffPbZZy6Xq626SpcuXRo8eHDL83/4wx++/vrroqKizz///MCBA8oik8lUU1PT6dspLCz8wQ9+8OMf//j48eO/+tWvoqOjO90U0Mc1Nze7XC5RFJmhg6Bx4sSJadOmRUVFGQyGCRMmHD58ePjw4XKpvJYqLy/vzjvvjIyMXLlypVy6d+/ecePGGY3G5OTkgoICj5ZzcnIWLlxoMpliYmKysrIqKiqk8wkJCVKbooJHXe8tt8WXlktKSlo9L51ct25dv379CgsL9+zZExUVtXv37g5FlZaWlpaW5mO0Sps3b05MTIyIiJg1a1bLDex7fyQBwK8E4StLAAQNrVZbU1NTV1c3bNgweQ7Rxo0b33333bi4OEEQXnvttXHjxv3xj3+Uiv70pz/Js8dbravU1rz0LVu27N27NyYmRhCEdevWpaSkdP1Gjh079vzzz585c8Zms7lcLq1WW1dXt2jRIqn0q6++Ki4u9lJ90KBBbMEAKLlcrubmZlEUdTqd2rHAL0yePHndunVqR9F5Bw8eXLp06Zo1a7Zu3dqvX7/a2tp9+/bV19fLF7jdblEU582b53A4tm7dmpKScvjwYakoPz9/7969O3bsiImJKSkp+fWvfx0eHj5lyhS57pQpU5588klBEOrr619//fXJkyeXlZUJglBaWioIgiiKbf2D2G7LbWm3ZUEQEhMTpZvyOC+dvHz58ubNmzMyMiZPnrxp06a5c+fa7Xbfo+rcsri8vLwtW7YcOnRo8ODBX3755UsvveRxQe+PJAD4FW//WweA3uHxlUs+PH369MqVK//nf/7n1ltv/dOf/jRt2jRBEIxGo/IlaBqNxul0SrWk+QjS+VbrKsXHxx88eDAhIcGjU4PB0NDQEBYWJgjCzZs3DQaDHFtJScnUqVOlL4sdcvbs2RdffPGjjz5qbm52OBw6ne6FF14IDw+XSv/+97+fOXPGS/Xbb79dWpQHQGK32x0Oh1arZf0aBEE4deqUyWT68ssv1Q6kFfHx8Xv27ElJSYmJifGYwWoymaqrq6XPo0aN2rBhw7hx47w0JYri+++/P336dI/zI0aMOHjwoPRnD0EQSkpKMjMzjx071mojTqdTq9W2+m9uSx1qudWA2/1Fo9VrRFGU/gMXRdFisRgMBuVlXYzKi5EjR+bn548YMUI6PH369N13393WLfTmSCLIrFy5sqGhYe3atWoHAnQY848AqC8sLMxisRiNRkEQLl26JJ8fM2bM7t273W73/v37FyxYIO0sMGzYsA8++OD2229v2Y7yz5it1lUaO3bs8ePH5fyRLCYmpry8PDk5WRAEj1TR8ePHOzcffuTIkXv37v3yyy9feOGFo0eP3rx5s6mpacWKFZ1oCoAgCLW1tU1NTdHR0bfccovasUB9U6dO9f+tZ+RUUatZhvPnz48cObLdRlomjwRBKCsrGzJkiPKMwWCQP9fV1b366qv79++vrKw0Go2jR4/2PWbvLfcorVbbVo89F1VpaWl8fLx8mJSUpCwN0JEEgG7EH7QBqO/uu+9+7bXXzGZzRUWFvKpLEIQHH3zw3LlzDodDEAR5As4vf/nLrKys4uJiu93+1VdfzZs3r9U2W62rNGPGjF27drU8/9BDDz377LPV1dXV1dWLFy9WFu3atWvGjBmdvUth1KhRBw4cOHr06L/+67/m5uZeuXKl000BfRybZyPIxMXFeZ+I6kVycnJxcbFbwWKxyKXp6ekzZsw4d+6cxWKprq5+6623vLcm/cflS8sdpWy5K7o3KqWEhITy8nL58MKFC8pS/xlJAFAL+SMA6vuv//qvAwcOREdH//jHP546dap8/v7773/ggQeioqJ++9vfbtmyRTr59NNP//znP3/ggQciIyMffvjhBx98sNU2W62rNHPmzE8//fTrr7/2OL98+fL4+PiUlJQxY8bcd9998vkLFy6cPHkyIyOjizd79913f/zxx0eOHPnqq6+62BTQN7lcLik1TP4IQWPFihVPPvmktI2O2WwuLi7Ozc3NzMz0pe6qVauysrJOnjxptVrNZvPp06dnzpwpl1ZWVjY0NNhstitXrhQWFnq8V1QQBJ1OJ+1OXVtbu379+vHjx/vYcru8tNwVvkTVuf2zly1b9vTTT1dVVdnt9s8//9xj80QVRxIA/IUbAPqqP/zhD9OnT/fx4unTp7/88ss9Gg8AX1gslq+//rq8vFztQHqWzWa7fv16U1OT2oEEgClTptx1111qR9G6uLi4oqIi5Zlhw4a1euWRI0cmTpw4ePDg/v37p6amrl+/3mw2y6Xev8AfOHAgNTVVr9cPHDhwwYIFVVVVymbHjBkTFhY2aNCgRYsWycvo5AsKCgp0Op0oikOHDn3mmWdqamp8bLldXlr28luJ8rDlBx+jGjNmzNixY30PVZabmxsfH280Gh944AF5mrBUpOJIIsisWLHi2WefVTsKoDPYPxsAAASS69ev19XVhYeHy+9bDEqNjY2XL182Go3ynrtoi7T/kZ/vn612IAD8BftnI3Cxfg0AAASSmzdvCoKg1+vVDqRnSfsHNzc3qx0IAACAIJA/AgAAgUXKH4WFhakdSM8ifwQAAPwK+SMAABAwXC6X3W4X+kz+yOVyuVwutWMBPMXGxoptiI2NVTs6AECP0KodAAAAgK+kV2JrtVopvRLENBqNRqORXjbHm+bgb6qqqtQOAQDQ25h/BAAAAoaUP+oj+RSWsAEAAP9B/ggAAAQMnU7Xr1+/8PBwtQPpDTqdTiB/BAAA/EOQz/0GAADBJDw8vI8kjwTmHwEAAH/C/CMAAAB/RP4IAAD4D/JHAAAA/oj8EdBpoiiqHQIABBvyRwAAAP5Iyh85HA61AwE6TBRFMjgAEGTIHwEAAPgj5h8FpdjYWLVD+Ccmk6knmnW73T3RbE8H0EOjAQDBgfwRAACAP5Lev+Z2u51Op9qxoNtcvHhR7RD+SW1trdojJlUAAAAgAElEQVQh+BFGAwC8IH8EAADgj0RRDAkJEZiC1DecOHFi2rRpUVFRBoNhwoQJhw8fHj58uFwqLwfLy8u78847IyMjV65cKZfu3bt33LhxRqMxOTm5oKDAo+WcnJyFCxeaTKaYmJisrKyKigrpfEJCgtSmqOBR13vL7bJarY899lhERMTtt9+em5urvBdlX9JhYmKism5aWlpaWlpHexQEoaSkpK3Vc9L5pqam9PR0vV6v1+t3794tFfkyGgDQx5E/AgAA8FMsYesjDh48uGjRosWLF1dUVDQ2Nm7duvXChQv19fXyBdJqrHnz5r377rtbt26tr69PTU2VivLz8/Pz83fs2HHt2rV33nknJyfnww8/VDY+ZcqUN998s6ampqioaODAgZMnT5bOl5aWSs26FZQV2225Xb/97W8ffvjhy5cvFxQU/OUvf9mxY4cgCDdu3Bg+fHhdXZ18WWNjY1JS0meffaas2zIeHyUmJrZVUTq/bNmy5557zmaz5efnz507VypqdzQAACL/ZwQAAP7PbreLoigt6eo7ampqzGbzgAED+vfvr3Ys/mvq1KkdzWv0moiIiMLCwpSUlJiYmJqaGmWRyWSqrq6WPo8aNWrDhg3jxo3z0pQoiu+///706dM9zo8YMeLgwYMxMTHSYUlJSWZm5rFjx1ptxOl0arVa5fd/UWzz14EOtdxqwIcOHZLTVWfPnn3ooYeKiooEQdi4cePp06f//Oc/S0UvvvhidHT0kiVLfGzZx95bvS9RFHfu3Dl79uxWL/MyGkB3WblyZUNDw9q1a9UOBOgwrdoBAAAAtO/q1at9MJPC/CNf/Nu//VtiYuL69evVDqQV8fHx0gc5VdRqhuL8+fMjR45st7WWySNBEMrKyoYMGaI8YzAY5M91dXWvvvrq/v37KysrjUbj6NGjfQ/ee8u+uOeee+TP8fHx5eXl0ucFCxbk5OScO3cuOTn5m2++ee+997744osOtdwVcvIIANAhrF8DAACBQRTF0NBQtaPoVeSP+oi4uLgzZ850rm5ycnJxcbFy1ZXFYpFL09PTZ8yYce7cOYvFUl1d/dZbb3lvzWaz+diyL5RL0s6fPy/v6BQSErJ69eply5YJgrB8+fLs7Gy9Xt+hlnuHcjQAAOSPAABAADCZTPHx8WFhYWoH0quk9Xrkj4LeihUrnnzyydLSUkEQzGZzcXFxbm5uZmamL3VXrVqVlZV18uRJq9VqNptPnz49c+ZMubSysrKhocFms125cqWwsHDNmjUe1XU6nbSHdG1t7fr168ePH+9jy77Yv3//4cOHLRbLqVOnHn/88eXLl8tF9913n8vlWr16dXl5easTgjq9f3ZXeBkNAADr1wAAQGDQaPrc372YfxR8hg0b1vLknDlzBg4cuGjRouLiYqvVmpiY+Itf/OKNN96QL5BfDSYdKlfATZ8+XaPRPPXUU19++eUtt9zy05/+9PXXX5dLt2/fvmTJkgcffLB///73339/dnb2unXrlGvopD2km5ubhwwZkpGRsW/fPh9b9k4KdcWKFU888cTPf/7zAQMGLF++3CP99Nprr6WkpBQWFrbagtPp7MR/8h6vdZM+yDcrD6N0xuNQ8DoaAAC2iAMAAPBTTqfz+vXrOp2uX79+asfiv1555ZXq6mq/3f9oz549KSkpagfij/bs2bNt27b8/Hy1AwF6FftnI3Ax/wgAAMBPhYSE3HrrrWpHAXS/5ubm7Ozsd999V+1AAAC+In8EAAAAoJcol5jFx8ezGAIAAkWf20cAAAAAQFfExsaKbYiNjfVe1/3PeidgAEDXMf8IAAAAQAdUVVWpHQIAoLcx/wgAAAAAAADekD8CAAB+jRUuAAAAqiN/BAAA/JfT6SwrK/v222/JIgEAAKiI/BEAAPBfVqvV7XY7nU7lO5sABAf+uwaAAEL+CAAA+K+bN28KgmAwGNQORE1Op9NqtTqdTrUDgTqk95qpHUWfw7ADgAfyRwAAwH9ZrVZBEMLCwtQORE3V1dXffvutNBQIdO2+3r6lAF28aTKZ2r3Gn2+to7H5cr8AENC0agcAAADQOrfbbbPZhD6fP9LpdE6n059/04bvLl68qHYIvaS2tlbtEHpVX7tfAH0Q848AAICfstlsbrc7JCREr9erHYuaBg8eHBcX169fP7UDQQ86ceLEtGnToqKiDAbDhAkTDh8+PHz4cOUFJSUl48eP12q1er1+9+7dyqKcnJyFCxeaTKaYmJisrKyKigq5SFqE1dTUlJ6ertfrW9bdtGlTXFxcRETEnDlzrl+/7rFoa+/evePGjTMajcnJyQUFBT7eS0JCgtSIqOBxTUlJSavnpZPr1q3r169fYWHhnj17oqKiPGJuN6q0tLS0tDQfo1XavHlzYmJiRETErFmzrl696lHa1jj7cr+dG0kA8CvkjwAAgJ9i8Rr6iIMHDy5atGjx4sUVFRWNjY1bt269cOFCfX298polS5Zs3LjR4XDk5+fPnTtXWTRlypQ333yzpqamqKho4MCBkydPloukaWvLli177rnnbDabR9133nnn7bff/uijjxoaGn73u9+tWrVKUKzbys/Pz8/P37Fjx7Vr1955552cnJwPP/zQl9spLS2VGnEreFyTmJjY6pQ66eTly5c3b96ckZGxc+fOTZs2KWP2JapWe2xXXl7eli1bDh06VF9f//zzz7/00kseF7Q1zu3eb6dHEgD8ishcaAAA4J9qa2ubmppuu+22W2+9Ve1Y4L9eeeWV6urq9evXqx1IK+Lj4/fs2ZOSkhITE1NTU6MsMplM1dXV0udRo0Zt2LBh3LhxbbUjimJtbe2gQYPkw7a+wzudTq1WqywVRXHnzp2zZ89uWXf06NF5eXkpKSnS4cmTJ8eNGyeXjhgx4uDBgzExMdJhSUlJZmbmsWPHfLx3L0F6v0YURYfDodVqRVG0WCwGg0F5WRej8mLkyJH5+fkjRoyQDk+fPn333Xd3aJzburjnYkYgWrlyZUNDw9q1a9UOBOgw9j8CAAB+ipevIWjIqaJWswznz58fOXKk9xbk5JGHurq6V199df/+/ZWVlUajcfTo0S2vkZNHHkpLSxMSEuRDOXUiKSsrGzJkiPJMr/3HqNVq2+qx56IqLS2Nj4+XD5OSkpSlvoxzW1QcSQDoRqxfAwAA/sjhcDQ3N4uiGBoaqnYsQM+Ki4s7c+ZM5+qmp6fPmDHj3LlzFoulurr6rbfe8r1uQkJCWVmZfFhUVKQsTU5OLi4uVq7JslgsnQtSEARpL/yu696olBISEsrLy+XDCxcuKEs7Os7K++25mAGgN5E/AgAA/kiafKTX6zUavq4gyK1YseLJJ58sLS0VBMFsNhcXF+fm5mZmZvpSt7KysqGhwWazXblypbCwcM2aNb73u3z58sWLF1+6dMnpdJ49e3bLli3K0lWrVmVlZZ08edJqtZrN5tOnT8+cOdP3xnU6nbTvdW1t7fr168ePH+97XS98iapz+2cvW7bs6aefrqqqstvtn3/++aZNm5Sl7Y6zl/vt4kgCgJ9g/RoAAPBHLF5DUBo2bFjLk3PmzBk4cOCiRYuKi4utVmtiYuIvfvGLN954QyqV3+0lLXzzONy+ffuSJUsefPDB/v3733///dnZ2evWrWvrYo/D2bNnX7t27Z577qmrq5s2bdqGDRtycnLkqKZPn67RaJ566qkvv/zylltu+elPf/r666/7fqfSXt3Nzc1DhgzJyMjYt2+fXKR8PZn8ua2APT74EpXT6exE3vnRRx+12WwTJ068dOnS1KlTc3Nzc3JyfBxn7/fbxZEEAD/B/tkAAMAfXbx40WazDRo0iPfWw7uA2D9b7UB80tDQMGjQoO5aaAagVeyfjcDF/CMAAOB3XC6X3W4XBCEsLEztWIA+4erVq6+88sr8+fPVDgQA4KfYUAAAAPidmzdvut1urVar0+nUjsUv2Gy2b7/9Vn6HF9At7Hb7ihUrNBqNKIoJCQnh4eG5ublqBwUA8FPkjwAAgN+xWq0Cmx8piKJotVqlYQG6i16vz87Odrlcbrf72rVrv//970NCQnypGBsbK7YhNja2p8MGAKiC9WsAAMDvkD/yoNPppJ16HQ4Hc7KguqqqKrVDAAD0NuYfAQAA/+J2u6WXrxmNRrVj8ReiKEppI2lbKAAAgF5G/ggAAPgXq9XK5kct6fV6QRAcDofagQAAgL6I/BEAAPAvLF5rlZQ/Yv4RAABQBfsfAQAA/2I0Gl0uF/kjD6xfAwAAKiJ/BAAA/IvBYCB51BLzjwDfSfvNqx0FAAQV1q8BAAAEACl/5HQ6XS6X2rGgV4miKIqi2lF0TCDGDADwjvwRAABAANBoNFqtVmAKUoCLjY3taJVAnEejesydC8BkMnV7JAAQNMgfAQAABAa2QAoCFy9eVDsEtKm2tlbtEADAf5E/AgAACAxsgRTETpw4MW3atKioKIPBMGHChMOHDw8fPlx5QUlJyfjx47VarV6v3717t7IoJydn4cKFJpMpJiYmKyuroqJCLpLWkTU1NaWnp+v1+pZ1N23aFBcXFxERMWfOnOvXr3usO9u7d++4ceOMRmNycnJBQUFHb8pqtT722GMRERG33357bm6uMiRlL9JhYmKism5aWlpaWlpHexQEoaSkpK3Vc15GIyEhQaoiKnSidwAIYuSPAAAAAgP5o2B18ODBRYsWLV68uKKiorGxcevWrRcuXKivr1des2TJko0bNzocjvz8/Llz5yqLpkyZ8uabb9bU1BQVFQ0cOHDy5MlykbSMa9myZc8995zNZvOo+84777z99tsfffRRQ0PD7373u1WrVgmKlV/5+fn5+fk7duy4du3aO++8k5OT8+GHH3bovn77298+/PDDly9fLigo+Mtf/rJjxw5BEG7cuDF8+PC6ujr5ssbGxqSkpM8++0xZ1+12d24NWmJiYlsVvYxGaWmpVOpW6ETvABDEeDEBAABAYLBYLNXV1Xq9vhN76ASxV1555e9///vzzz+vdiCtyMjIeP/991NSUmJiYmpqapRFJpOpurpa+jxq1KgNGzaMGzeurXZEUaytrR00aJB82NZ3eKfTqdVqlaWiKO7cuXP27Nkt644ePTovLy8lJUU6PHny5Lhx4+TSESNGHDx4MCYmRjosKSnJzMw8duyYj/cuiuKhQ4fkZNbZs2cfeuihoqIiQRA2btx4+vTpP//5z1LRiy++GB0dvWTJEh9b9rH3VofIy2h4qQV0o5UrVzY0NKxdu1btQIAO06odAAAAAHwizT9yOBxut5vFNbL+/ft//vnnc+bMUTuQVly/fl36IKeKWs1QnD9/fuTIkd6bkpNHHurq6l599dX9+/dXVlYajcbRo0e3vEZOl3goLS1NSEiQD0eMGKEsLSsrGzJkiPKMwWDwHqSHe+65R/4cHx9fXl4ufV6wYEFOTs65c+eSk5O/+eab995774svvuhQy13R1mgAALwjfwQAAPyC2+2+fv26wWAIDQ1VOxY/pdVqNRqNy+VyOBxSLgmCIDzxxBNPPPGE2lG0Lj4+3pfL4uLizpw588Mf/rATXaSnp7/88suvvfaaIAg2m+3KlStDhw71sW5CQkJZWZmcupImB8mSk5O3bduWlJTUiagkn3322aRJk6TP58+fl3d0CgkJWb169bJly95///3ly5dnZ2f758+zzWbjf0cAIGP/IwAA4Bdu3rx55coVeZoGWsUr2ILSihUrnnzyydLSUkEQzGZzcXFxbm5uZmamL3UrKysbGhqkzFFhYeGaNWt873f58uWLFy++dOmS0+k8e/bsli1blKWrVq3Kyso6efKk1Wo1m82nT5+eOXNmh+5r//79hw8ftlgsp06devzxx5cvXy4X3XfffS6Xa/Xq1eXl5a1OCOr0/tldodPppB21a2tr169fP378+F4OAAD8GfOPAACAvzAajVotX0680ev1NpvN4XCoHQg6adiwYS1PzpkzZ+DAgYsWLSouLrZarYmJib/4xS/eeOMNqVR+L5i08M3jcPv27UuWLHnwwQf79+9///33Z2dnr1u3rq2LPQ5nz5597dq1e+65p66ubtq0aRs2bMjJyZGjmj59ukajeeqpp7788stbbrnlpz/96euvv+7jbUodrVix4oknnvj5z38+YMCA5cuXe6SfXnvttZSUlMLCwlZbcDqdGk2H/9Tt8Vo36YO8YND7aAiCIO2o3dzcPGTIkIyMjH379nU0AAAIYmwRBwAAEDC+++67+vr6yMjIgQMHqh0L2hcfH79nzx55g2o/19DQMGjQIJvN1jvd7dmzZ9u2bfn5+b3THeAn2D8bgYs/8QEAAAQMaZuYXvsNH33H1atXX3nllfnz5/dOd83NzdnZ2e+++27vdAcA6Dr2PwIAAAgYer1eFMVOrOsBWrLb7StWrNBoNKIoJiQkhIeH5+bm9nSnoiiKoqjT6YqKinzcXxwA4A+YfwQAABAw9Hr9HXfcodzkBeg0vV6fnZ2dnZ3d0YqxsbEXL15stWjYsGFVVVVe6rJ7BgAEKPJHAAAAgYTkEVTnPUMEAAhKTH4GAAAAAACAN8w/AgAAAHqE3W7ft2/fl19+qXYgAPzFl19+eeutt6odBdAZIiuQAQAAgJ4QFRWl1+u1Wv5kC+D/NDU1jRo16tixY2oHAnQY/5gBAACVmc3msLCwkJAQtQMButltt922Z8+elJQUtQMB4C9WrlzZ0NCgdhRAZ7D/EQAAUJPdbq+pqamsrGRONAAAgN8ifwQAANRkNpsFQQgLC+O1YgAAAH6L9WsAAEBNFotFEASj0ah2IECPuOuuu9QOAYB/efbZZ9UOAegM8kcAAEA1brfbarUK5I866ObNm1euXNFoNDExMWrHAm/Ky8vVDgEAgO5B/ggAAKjGarW63W6tVhsaGqp2LIFEo9HcvHlTFEW32826PwAA0AvIHwEAANWweK1z9Hr94MGDQ0NDSR4BAIDeQf4IAACohvxRp0VERKgdAgAA6EN4/xoAAFBHc3OzzWYTyB8BAAD4PfJHAABAHdLO2aGhoSEhIWrHAgAAAG/IHwEAAHWweA0AACBQkD8CAADqMJvNAvkjAACAQED+CAAAqMBmszmdTlEUDQaD2rEAAACgHeSPAACACqTFawaDgTfQAwAA+D/yRwAAQAXS4rXw8HC1AwEAAED7yB8BAIDe5nQ6pZevRUREqB1LAHO5XNeuXbty5YragQAAgOBH/ggAAPQ2afFaaGioVqtVO5bAduXKlWvXrjU3N6sdCAAACHLkjwAAQG9ramoSWLzWZRqNRq/XC4Jgs9nUjgUAAAQ58kcAAKBXud1uaf4R+aOuCwsLEwTh5s2bagcCAACCHPkjAADQq6xWq8vlCgkJkXIf6AryRwAAoHeQPwIAAL3K4XCIomg0GtUOJBiEhoYKrF8DAAA9j00rAQBAr4qKiurXr5/L5VI7kGAQGhoqiqLT6XQ4HDqdTu1wAABA0GL+EQAA6G0ajYY3r3ULURSlKUgsYQMAAD2K/BEAAEAAI38EAAB6AfkjAACAACZtoc0WSAAAoEeRPwIAAAhg8vwjt9utdiwAACBokT8CAAAIYKGhoRqNxu122+12tWMBAABBi/wRAABAYJOmILGEDQAA9BzyRwAAAIGNLbQBAEBPI38EAAB6g9PpdDqdakcRnNhCGwAA9DTyRwAAoDd899135eXl3333ndqBBCE5f8QW2gAAoIeQPwIAAL3B4XAIgqDX69UOJAjpdDqtVut2u1nCBgAAeohW7QAAAECfYDKZHA6HVst3jx5hMBhu3LhhtVoNBoPasQAAgCDE/CMAANBLdDqdKIpqRxGcpCVsVqtV7UAAAEBwIn8EAAAQ8KRpR6xfAwAAPYT8EQAAQMALDQ3VaDTCP/aZAgAA6F4i7+kAAAAIAs3NzWwvBQAAegj5IwAAAAAAAHjD+jUAAAAAAAB4Q/4IAAAAAAAA3pA/AgAAPchut6sdAgAAALqK/BEAAOgpzc3NVVVVFRUVLpdL7VgAAADQeeSPAABAT2lqahIEQafTSa+WBwAAQIDiyxwAAOgpUv4oIiJC7UAAAADQJeSPAABAj2hubrZarQL5IzW43W61QwAAAEFFq3YAAAAgOEmTj8LCwrRavm/0nhs3btTX14eHhw8YMEDtWAAAQPBg/hEAAOgRLF5Ti8PhuHnzptpRAACAoMLfAwEAQPdj8ZpajEajyWQyGAxqBwIAAIJKMOeP7Ha72WxWOwoAfqd///6iKKodBRDkpH+Cw8LCdDqd2rH0LSEhIeHh4WpHAQAAgk0w54+2b9/+2GOPqR0FAL9z7dq1qKgotaMAghyL1wAAAIJJMOePBEGYOXPmrl271I4CgB9hH1+gFzidTovFIpA/AgAACBbsnw0AALqZtHgtNDSUxWsAAADBgfwRAADoZo2NjYIg9OvXT+1AAAAA0D3IHwEAgO7kcDikN6+RPwIAAAga7AOCQOXl/Vlut7s3IwEAKN24cUMQBKPRyHZjAAAAQYMvdghUyiSRKIrdlTPqxqYAoG+S8kdMPgIAAAgmrF8DAADdxmaz2e12URR585rqbty48e23316/fl3tQAAAQDAgf4QgJ/5DW+eVRdLnVq8HAPhCmnwUHh6u0fAdQ2XNzc1Wq1V6Fx4AAEAXsX4NwUy5GK2tz8pDt9vN+jUA6AopfxQZGal2IBCMRqMgCFarVfrXTe1wAABAYONvgwhaHpkgvj0DQE+zWCzNzc0hISFS5gLqCg0NDQkJcblcN2/eVDsWAAAQ8MgfoY9S5pKYcAQA3cLlcul0uoiICPL1fkJK5FksFrUDAQAAAY/1awhmbf0CIyWMpFKSRwDQXSIiIiIiIlwul9qB4P8YjcYbN25YLJbbbrtN7VgAAEBgI3+EYOY9N0QWCQB6Ajtn+w9p/tHNmzedTmdISIja4QAAgADGNzz0IfJ0JBavAQD6Aq1Wq9frBUGwWq1qxwIAAAIb+SMELY8Ns3mxGgCgD2ILJAAA0C3IHyGYSSkkSct3sXkvUiNeAAC6mcFgEJh/BAAAuoz9jxAMvEwsaquoE1UAAAg40vwju93ucDh0Op3a4QAAgEDF/CMAAICgpdFopClIZrNZ7VgAAEAAI38EAAAQzMLDwwXyRwAAoGvIHwEAgC757rvvbDab2lGgTVL+yGq1ulwutWMBAACBivwRAADoPKvVWl9f/80335Cb8Ft6vV6n07ndbt7CBgAAOo38EQAA6DyNRhMeHh4ZGanR8KXCf0lTkMgfAQCATgvm968dO3bsr3/9Ky9iB+ChsbExKipK7SiAIBEaGmoymdSOAu0IDw+/du0aWyABAIBOC+b80Y9+9KOGhoZdu3apHQgAP6LVaiMjI9WOAgB6lcFg0Gg0zc3NNpstNDRU7XAAAEDgYao5AABAkBNF0WAwCLyFDQAAdBb5IwAAgOAnbYFE/ggAAHROMK9fAwAAgCQiIuLmzZtSFgkAAKCjyB/9E1EU3W533+kXAAD0ESEhIQMHDlQ7CgAAEKhYv9ZhoijyTjcAAAAAANB39Ln8UWxsrJdSXyYB9cREoc61yfuSAQAAAABAL+hz+aOLFy+qHUK3qa2tVTsEAEBf5HA4vvnmmxs3bqgdCAAAAHpJn8sftaWkpMTLwrTNmzcnJiZGRETMmjXr6tWrLS9IS0tLS0vr3n6l801NTenp6Xq9Xq/X7969WypKSEiQqogKnegdAIBOuH79+s2bNxsbG9UOBAAAAL2E/NH/SUxMbGsRWV5e3pYtWw4dOlRfX//888+/9NJLLa9xu92dW4PmpV/p/LJly5577jmbzZafnz937lypqLS0VCp1K3SidwAAOsrtdkuZo6ioKLVjAQAAQC/pK+9fi4mJqampkT5LU3VMJlN1dbUvdVevXp2fn3/77bcLgpCWlqbVanNzcz2uOXXqVHeGqzBx4sQJEyYIgpCRkeFwOHqoFwAAfGQ2m51OZ0hICG+CBwAA6Dv6Sv5IThWJotjRqTqlpaXx8fHyYVJSUndG1p7Zs2f3ZncAAHgnTT6KjIxk6TQAAEDfwfq19iUkJJSXl8uHFy5cUDEYL2w2m9ohAACCXHNzs9lsFgQhMjJS7VjQSW63+9q1a7W1tSx+BwAAviN/1L5ly5Y9/fTTVVVVdrv9888/37RpU8trOr1/dlfodDppR+3a2tr169ePHz++lwMAAPQ10uSjsLAwvV6vdizoJFEUGxoampqaLBaL2rEAAICA0VfWr8mGDRvW8qRyBr78Wf6j3KOPPmqz2SZOnHjp0qWpU6fm5ubm5OR4rINzOp0aTYeTcd77ld+wJp3xOBQEQdpRu7m5eciQIRkZGfv27etoAAAAdIi8eE3tQNAlt9xyiyAIYWFhagcCAAACRoc3Awogb7/99nvvvbdr1y61AwHgR7RabX19Pe+NAjrBYrFUV1drNJq4uLhO/NUEAAAAgYsvfwAAwCcNDQ2CIERFRZE8AgAA6Gv4/gcAANpnt9ul7XL69++vdiwAAADobeSPAABA+65fvy4IQnh4uFbb5zZPBAAAAPkjAADQDpfLJe2czeQjAACAvon8EQAAaMeNGzdcLpderzcajWrHAgAAABWQPwIAAO24du2aIAi8uBAAAKDPIn8EAAC8sVgsdrtdo9FERkaqHQsAAADUwRaYAAKJw+HQ6XRqRwH0LdLO2f369dNo+LNTsLHb7Q0NDYIgDBw4UO1YAACAX+OLYAArKioSRVEURbUD6QD/jNk/o/JDvTZKV65cmTRpksfJL774YsmSJSaTqeX1R48enTp16sSJE0VR1Ov1u3fv9lLqdruVpT/60Y/q6+u7/RaAoOFwOJqamgR2zg5ejY2NN27ccDqdagcCAAD8Wp/LH8XGxqodQre56667PH4T7h2t/gLvI7Vi9s4/o/JDvTZKL7zwwuOPPy4f1tTULFiw4MSJE7/5zW+uXr3a8vqsrKy8vDso5ZsAACAASURBVLyPP/7Y7XYfOXJk/vz5XkpdLpey9Je//OWLL77YQzcCBAFp8pHRaNTr9WrHgu6n1+tDQ0PdbreUJQQAAGhLn1u/dvHiRbVDCHi1tbVqh4BgVlZW9sUXX7z55pvyGZPJtHnzZi9VNBrNgAEDpM/jx483m81eSj3qPvzww6tXry4rK7vjjju6IXogGGk0GnbODmL9+vWz2WxNTU08ZQAA4EWfm3/Ulk2bNsXFxUVERMyZM+f69ese63T27t07btw4o9GYnJxcUFCgrChd2dTUlJ6ertfrW66d8VJXUCwIysvLu/POOyMjI1euXCmX5uTkLFy40GQyxcTEZGVlVVRUdNf9njhxYtq0aVFRUQaDYcKECYcPHx4+fHi7/SYkJEjRigoeLXcl5h07dnz/+98PDw8fM2bMzp07PUq9P6Ou3K93Xu5o9+7der1eFEWDwTB27NiCgoKRI0f6WCpJS0tLS0vzMRKZx+C3fBben4L3n7p2x6qkpGT8+PFarbblT3tX+pXl5uYuXLiwQwNSV1fX6VJBEDIzM3NzczvUI9B3REdHx8XFhYeHqx0IekpERIQgCBaLpbm5We1YAACAH3MHr7feemvmzJkeJ1u95Z07d/7oRz8qLS212+1nz55dunSp8rIdO3Y89NBD5eXlNpvt7NmzkyZN+uCDDzzafOKJJ44ePepyuQoKCnQ6ne91pepz58594IEHvvjiC7vdfuDAAbmotLRU+nD16tXly5fHx8e3DL4TD/HDDz9MSUn54IMP6uvr7XZ7VVXVG2+8ceutt/rYr/ceOx3z9u3bZ82aZTab3W632WyeNWtWfn6+XOr9GXXxfr3fl5c70ul0BQUFbrfb6XTW1dXl5eUNGDDAx1LJ2LFjx44d6+ONKE2YMOH48ePS5+PHj997770+xixp66eu3bESBOFnP/vZ2bNnW/60d6VfpZSUlP/93/9t68ZbfUyiKHq5pmXptWvXlGe++uqrkSNHttUjAAS9b7755uuvv66vr1c7EAAA4L/6Sv6o5ZY9JpNJvnLUqFFFRUXy4Weffab8/TM5Ofnbb7+VD7/++usf/vCHyo4EQdi5c6fy0Pe60vXvv/9+u7cj/VWw5flO5I/uuuuuTz/91MeLW/bre48divnOO+88f/68fHj+/Pk777xTPvT+jLzz8X59adDjjoxGY05OjkcywsfSLvrv//7vzMxM6fNjjz2Wl5fX1pWtPoW2furaHStBEGpra5WH3dKvksFgkNKIbQXQ7sl2Dz0eSlNTU1hYmPeoACCIXb9+/euvv66srFQ7EAAA4L9Ed/BuG/z222+/9957u3btUp6UZiJ4XBkREXHlyhWDwSAdms3miIgI+bKwsDCbzaa83mAwWCyWttpUHrZbt62QBEGoq6t79dVX9+/fX1lZaTQaR48effjw4ZZXtlXdi9DQ0O+++66txQjt9uulx67ErNfrr1+/Lj8Fq9Xav39/efS8P6Ou3K/3qLzf0YEDB+6//36Hw6HX6//lX/6lX79+b7/9dmpqqi+lXWS1WhMTE8+dOycIQnJycmlpaVhYmC8xe7lZwYex8vLT3pV+lQwGQ319vdFo9CWAtqJyuVzK9X0epQ0NDco3SZnN5gEDBnj8hwkAfYfL5aqoqHC5XEOHDpX/NQEAAFBi/yNBEISEhISysjL5sKioSFmanJxcXFyszLr5/ntmV+qmp6fPmDHj3LlzFoulurr6rbfe8rFiu+Li4s6cOdNd/SoTZF2JOSEhoaqqSj6sqqpS7mfs/Rl55/1+vfN+R9OmTbPb7Xa7vbq6+ujRo/Pnz7/vvvt8LO0ig8GQnp6+bdu2rVu3ZmRkKL/ud+Up9NxY+e6OO+6orKzsXF2Z9xdRe5RWVFQkJCR0sUcACFwajUb6y8GNGzfUjgUAAPgp8keCIAjLly9fvHjxpUuXnE7n2bNnt2zZoixdtWpVVlbWyZMnrVar2Ww+ffr0zJkzfWy5K3UrKysbGhpsNtuVK1cKCwvXrFnTsbtq24oVK5588snS0lJBEMxmc3FxcW5ubmZmpo/96nQ6adfk2tra9evXK19o1ZWYs7Ozly5dKr2d/erVq0uXLs3OzpZLvT+jrtyvd97vaMCAAUePHnU4HNL+sklJSco3f3kvlXRu/2xJVlbWxo0bN23alJWV5XvM3vXcWPlu6tSpH3/8cYeqGAyGwsJC6fOpU6ciIyOVE448SgVB8JjB9NFHH02bNq1z0QJAcIiMjBQE4caNG0E8Mx0AAHRJD6yJ8xet7p89bNiwVi/esGFDbGyswWB44IEHpBSGsvTAgQOpqal6vX7gwIELFiyoqqqSizxGsuXAeqnrbvEVTVl05MiRMWPGhIWFDRo0aNGiRdXV1a121LmneeTIkYkTJw4ePLh///6pqanr16+Xd5zx3q/b7ZZ2TRZFcejQoc8880xNTU13xbxt27akpCSdTpeUlLRt2zaPmL0/o07fr/eovN9Rampqfn5+SkqKVqsVBEHeMNuXUsmYMWM6t3+23EVqamrLm/X+BL3/2PgyVq0edrFfWUlJyejRoz1Oen9M0s+kIAjR0dEmk+mTTz5R1vUo1Wg0HvsfjRo1qqysrK14AKCPKC8v//rrr6UUEgAAgIc+t/+RLxoaGgYNGuSxbxH8Cs8ouGVlZU2aNGnevHk90bhWq62v/3/s3XtwE+e9//FndbMkX2QbX2XAJTGUmCRQyuUMUzpngIZAJ6emhEDbpK1LPbSZXnJIaDuhhzMlyeSX0DOdCS0dczswxICBA0lIQkNCymHATEnDpEwGh9jENsSyLVm+6mJJlvb3x/aoqi+yfF1ber/+8u6zu89nHyXY/nqfZ50Wi0XZPHbs2MWLF8vLy8ejLwCYQpxOZ1tbW0pKSn5+vtpZAADApMP8tb5aW1tfeOGFJ554Qu0gGBSfUdx78cUXf//7309MX/v27XvhhRcmpi9gqmhsbFQe01M7CCZUamqqEMLtdkdfQg4AACQm6kdCCOH3+3fu3KnRaCRJKioqSk5O5mGEyYbPKKFkZWVdvnx5Yvp6//33s7KyJqYvYEpwu90ej8fpdFI/SjQGgyEpKUmW5a6uLrWzAACASYf5a3GosLDwzp07AzbNnDkz8h1n8SHR7hej1Gf+GoA+QqFQV1eXLMsZGRlqZ8FE6+zstNvtBoOhsLBQ7SwAAGBy0akdAGMv0SomiXa/ADCuNBpNenq62imgjtTU1NbWVr/f7/V6TSaT2nEAAMAkwvw1AAAACCGERqNJSUkRQnR2dqqdBQAATC7UjwAAAPB3yvRel8sVCoXUzgIAACYR6kcAAAD4O6PRyCraAACgP+pHAAAA+IfU1FQhhN/vVzsIAACYRFg/G1NPIBDQ6/VqpwAAID5ZLJaUlBS+1QIAgEg8f4ThkSRJkqQJ6MjhcKxcubLPzg8//HDr1q1Wq7X/8ZcuXXr44YdXrFghSZLBYDhz5kzsrV/5ylecTueY3wIAAFORRqOheAQAAPpIuPpRYWGh2hGmNlmWJ6ajX/3qVz/84Q/Dmzab7Qc/+MHVq1d/+ctftra29j++rKzsyJEj77//vizLFy9efOKJJ2Jv/fGPf/zss8+O040AwOTn9XqDwaDaKQAAADB5Jdz8tTt37qgdAUO7ffv2hx9+eODAgfAeq9V68ODBKKdoNJrs7Gzl62XLlrnd7thbv/Od77z00ku3b9++9957x+YGAGDqkGW5ubk5GAwWFBSYTCa14wAAAGAySrjnjwakzMlyuVwlJSUGg6H//KY9e/Zs3rzZarUWFBSUlZXV1dVFnvjKK6+kpqZWVVW9/vrrFoulz7lvvPHG0qVLzWZzcXHx6dOn+/e+ZMmSJUuWjCxzeCpZn80omSOPF0IcOXLkvvvuS0tLe+6558KtV69eXbNmjcViMZlMy5cvv3Dhwpw5cyJPr6mpWbZsmU6ni32sYuk3rLy8fPPmzcMaELvdPuJWIURpaWl5efmwegSA+NDZ2dnb26vT6YxGo9pZAAAAMElRPxLi/+Zkbdu27emnn/b5fJWVlRs3bow8YPXq1QcOHLDZbDdu3MjNzV21alXkiS0tLQcPHly3bt2JEyf2798feW5lZWVlZeXx48c7OjpOnjy5Z8+ed955p3/vI5gUJsvy8uXLr1y5omxeuXLlq1/9auR1BsscmXzTpk2vvfZaRUWF0+lcvHix0nT+/PktW7Y89dRTdXV1XV1dFRUVt27d6rM80NatW/ft2xcIBGIfqyH7jfSnP/2p/+JH0bW3t4+4VQjxta997dy5c8PqEQDigCzLyr+Q6enpE7O8HQAAAKYiacKWs5l4hw8fPnv27KlTp4QQBQUFNpststVqtTY2NoY3JUk6ceLEhg0bwpuDjUwwGNTpdOFWSZICgYBOp5MkyePxmEymyHPnzZt3/vz5goICZbOmpqa0tPTy5ctjcoNHjhz585//rMzqKi0tXbly5eOPPx5L5nDyt956a+3atX0Onj9//t69e5cuXTpYv5IkNTU15eXlhTdjHKvo/UYym82tra1ms3mwAP177LNzWJtCCLfbnZWV5fV6o6RCfNDpdE6n02KxqB0EmBS6u7ubm5u1Wu0XvvAFjYa/KgEAAGBgifKTYmNjY/gxH+WLyOKRIlw86sNutz/zzDPFxcVmszkrK2v16tV9DtDp/r6MVP9lI27fvj19+vTw5LI5c+Zcv359DO5HCCHEo48+ev78+a6urq6urnfffffRRx+NPbNiwCLOJ598cv/990fvOlw86mM0/UYak7Jm9IsMWIEafacAMLW0tbUJISwWC8UjAAAARMEPi0MrKSl55JFHbt686fF4GhsbDx06FPu5xcXF1dXVcgSPxzNWwUwmU0lJydGjRysqKtatWxe5bsVoMs+aNeujjz4aWaTR9Bvp3nvvra+vH9m5YdHfJdSnta6urqioaJQ9AsDU0t3d7ff7NRpNRkaG2lkweblcru7ubrVTAAAAlVE/Glp9fX17e7vP53M4HFVVVbt27Yr93Oeff76srOzatWter9ftdl+/fn39+vV9jhnZ+tmKsrKyffv27d+/v6ysbKwy79y588knn6ytrRVCuN3u6urq8vLy0tLSWM4dTb+RHn744ffff39Yp5hMpqqqKuXrDz74IC0tLfIJo+itQoj33ntvzZo1I0sLAFOU8vBReno6Dx9hMC6Xq6mpqbW1NY5XPAAAALFIuJ8XZ86c2X+nMnEp8l1mkZvHjh177rnn0tPTH3zwwcrKyl/+8pd9julzYuQXa9eu3b59+09+8pP09PR77733D3/4w+9+97s+vQeDwRH/TDZ//nytVqvVah988MHI/VEy97nHPm9tE0I89thjr7zyypYtW6xW6/Tp07/3ve8FAoE//OEPoxyrIfuN9KMf/ejAgQN9dkae1f8KFRUV//qv/ypJUnZ2dklJydmzZ/V6fYytQohDhw5t2bJlsDwAEH9cLhcPH2FIycnJer0+JSWF+hEAAAkuUdbPxpRTVla2cuXKTZs2TUBfx44du3jxYnl5+QT0BdWxfjagaGho8Pv9mZmZ06ZNUzsLAAAAJruEe/4IU8WLL774+9//fmL62rdv3wsvvDAxfQHAZBB++Cg9PV3tLAAAAJgCdGoHAAaWlZV1+fLlielruGstAcBUF175SKvVqp0FAAAAUwDPHwEAkFjcbrfP5+PhIwAAAMSO+hEAAIlFefgoLS2Nh48AAAAQI+pHAAAkELfb3dPTI0kSr10DAABA7KgfAQCQQJxOpxDCYrHodKyBCAAAgFhRPwIAIFG4XC5l5aPMzEy1s2CqkmVZlmW1UwAAgIlG/QgAgEQRfviIlY8wMp2dnfX19d3d3WoHAQAAE4360RQgSZLaEQYwOVMloEAgoHYEAFNDd3e33+/XaDSsfIQRC4VCvb297e3tagcBAAATjfrRP5w5c8ZgMEiSlJqaeu+9937jG99QO5Fqbty4IUkSFaIhTdgoORyOlStX9tn54Ycfbt261Wq19j/+0qVLDz/88IoVKyRJMhgMZ86cib31K1/5ivKEAoA4o9Fo9Ho9Dx9hNCwWi0aj8fv9brdb7SwAAGBCSXE8g/3w4cNnz549depU5M7CwsKGhoYBjzcYDJWVlevWrZuQdH9ntVptNttE9hg7SRrJfx6T+Y7Gw8hGabg2b968atWqb33rW8qmzWb79a9/vXDhwg0bNuTl5fUP8MUvfvHy5cvZ2dlCiKqqqoceesjlcsXYWlFRcenSpfLy8vG+KbXodDqn02mxWNQOAqhAWblGo+GvRxg5p9PZ1tZmNBpnzJihdhYAADBxEq5+FOW3/YkpBEyGTmM0smyT+Y7GwwTc7+3bt9evX//RRx/FHuC+++6rrq4e7JjorUKIBx988MyZM/fee+8YpJ98qB8BwGgEg8G6ujpZlqdPn24ymdSOAwAAJgh/gRRCiMLCQmUWkhQh3BrLpsvlKikpMRgM/WcDXb16dc2aNRaLxWQyLV++/MKFC3PmzBFCFBUVRelUUVNTE2WG1PHjx7/0pS8lJycvXLjwxIkTkU1DptqzZ8/mzZutVmtBQUFZWVldXV3swzVYquh3NNie2bNnR15kyZIlS5YsiT3MgBfv31f0+w0ffOTIkfvuuy8tLe25554Ltw72CUYOyLJly3Q63XDHOXq/YeXl5Zs3bx7WgNjt9hG3CiFKS0vj+PkjAMBoaLXa1NRUIURHR4faWQAAwMShfiSEEA0NDcrzF3KEcGufRzMG3Ny2bdvTTz/t8/kqKys3btwYbj1//vyWLVueeuqpurq6rq6uioqKW7duKYvL1NbWRulUMXv27MGebTl+/Pj//M//XLlyxe12X758+eTJk5ElpOiphBCrV68+cOCAzWa7ceNGbm7uqlWrYh+uwVJFv6Pu7u45c+ZEVi66urrmzp37l7/8JfIiI3srsCzLy5cvv3LlirJ55cqVr371q5HXiX6/ypGbNm167bXXKioqnE7n4sWLlaYon2DY1q1b9+3bFwgEhjvOUfqN9Kc//an/4kfRRV/ZdMh1T7/2ta+dO3duWD0CABKHsgS7y+Xy+/1qZwEAABMknqcaRc5fKygo6LMoj9VqbWxsjNwT+9S2/psnTpzYsGFD/9b58+fv3bt36dKlg4WMZfbTgMcUFxefOXPmi1/8orJ569atdevW3bx5M5ZUfQSDQZ1O1781erbBWqOctW/fvuvXr//xj39UNp999tmsrKytW7cO1sWwHDly5M9//vPBgweFEKWlpStXrnz88ccHPHLA+5Uk6a233lq7dm2fg2P5BJuamvLy8sKbwxrnwfqNZDabW1tbzWbzYAGG/OyGtSmEcLvdWVlZXq83Sqqpi/lrADB6zc3N3d3dqamp4e+AAAAgviVK/ShsZOsfjfi38aSkpLa2tuTk5MFCjrh+ZDAYOjs7w+sOeL3e9PR0n88XSyq73f7yyy+//fbb9fX1ZrN5wYIFFy5cmID6UTAYXLRoUUVFRXFx8d27d9euXfvhhx8aDIZB73w4vF7v7NmzlQpacXFxbW2t0WhUmmK538FiD/cTHO44x/IfgMlkcjqdo6wfhUKhyPl9UVqFEG63Ozs72+PxRA82RVE/AoDR8/v9ygtJCgsLx+pbOQAAmMyYvzZsra2tsR88a9aswZY9HlBkASi6oqKiyBfJNTQ0xL7acUlJySOPPHLz5k2Px9PY2Hjo0KHYEw5X5B1ptdqXXnpp27ZtQojt27fv2LFjDH/iNJlMJSUlR48eraioWLduXbh4JEZ3v8P9BCON1Tjfe++99fX1Izs3LBgMxt5aV1dXVFQ0yh4BAHHMYDCkpKQIIdra2tTOAgAAJgL1o5jo9fozZ874fL533nnn+9//fuwn7ty588knn6ytrRVCuN3u6urq8vLy0tLSPlcWQjQ1Ne3evXvZsmUxXnnHjh3PPPOMUsxqbW195plnduzYEeO59fX17e3tPp/P4XBUVVXt2rUr9jsaUvQ7euihh0Kh0EsvvfTZZ5+F59ZFGtn62YqysrJ9+/bt37+/rKwscv9o7nfITzCKsRrnhx9++P333x/WKSaTqaqqSvn6gw8+SEtLi3zgKHqrEOK9995bs2bNyNICmDyCwWAgEFA7BeJWZmamEKK7u5tVkAAASAhy/Dp06ND69ev77Jw5c+aAB0cfltOnT+v1+tTU1Mcff7ylpSXymD6n9L/CxYsXV6xYkZ+fn56evnjx4t27d7vd7j5XliRpxowZP/vZz2w222CR+gc7evTo3Llz9Xr93Llzjx49OuDtDLh58eLFhQsXGo3GvLy8LVu2hNeBiqXfIVNFuSPFxx9/LEnS1atXB/wgFi5cuGjRogGbYrF48eLFixf32Rn9fvvfVP/TB/sERzPOQ/YbVlNTs2DBgj47o38QyqcghMjKyrJarf/7v/8beW70VlmW58+ff/v27cHyTHVarbajo0PtFMBEsNvtNTU17e3tagdB3GpsbPz000+bm5vVDgIAAMZdwq1/BNW9/vrrR48eraysVDvIVFJWVrZy5cpNmzZNQF/Hjh27ePFieXn5BPSlCtY/QuKw2Wxut7ugoGCwBdSAUerp6bl7964kSYWFhcpfJgAAQLzSqR0AiaW3t3fHjh2vvfaa2kGmmBdffLGkpGRi6kf79u07ceLEBHQEYLxZrdaenp7I9eCAsWU0Gk0mk9fr7ejoyM7OVjsOAAAYR9SPMEEiX+91zz33xPGDb+MhKyvr8uXLE9PXcNdaAjCZUTzCeMvMzGxsbOzs7MzIyNDp+MESAIC4xfrZmCB9Zk6qHQcAAIwBs9lsNptlWXY6nWpnAQAA44j6EQAAAEZu2rRpQoiuri5exAYAQByjfgQAAICRMxqNycnJQoi2tja1swAAgPFC/QgAAACjkpmZKYTweDyhUEjtLAAAYFywzCEAAABGxWg05uXlJScnazT8bRIAgPjE93gAAOJEb2+v2hGQuFJTUykeAQAQx/g2P0Ei314/Va48FTEaABJWb29vfX29zWZjAhEAAADGHPWjMXDjxg1JkkZfuRiTi0zwlcdW9JEcq3EGgLjkcDhkWQ6FQjwDAgAAgDGXcD9iFhYWjvk1H3zwQVmWox8z5AExHjORV5540UdyrMa5P6vVOoKzAGDy8Hg8LpdLkqScnBy1swAAACAOJVz96M6dO2pHwKTT1NSkdgQAGDlZlh0OhxAiLS3NYDCoHQcAAABxKOHqRwOS/s+Am0KIPXv2bN682Wq1FhQUlJWV1dXVxX7xmpqaKLOuDh48OHv27JSUlEcffbS1tXVYsUd55SVLlixZsmRYPQohzpw5YzAYJEkymUyLFi06ffr0/fffrzQpYV555ZXU1NSqqqrXX3/dYrGcOXMm8vTRjGR0UUZD2e9yuUpKSgwGg8FgCKcqKipSTpEijFUkAJgYXV1dfr9fq9VOmzZN7SwAAACIT9SPhBBCluXly5dfuXJF2bxy5cpXv/rVyJlQq1evPnDggM1mu3HjRm5u7qpVq2K/+OzZswebVHXkyJFXX3313XffdTqdv/jFL379618PK/YoryzL8ghme23cuLGyslKWZbfbfe7cOY/HY7fbwxcUQrS0tBw8eHDdunUnTpzYv3//xo0bI08fzUhGF2U0lP3btm17+umnfT5fZWVlOFVtba3SKkcYq0gAMAGCwaDT6RRCZGZmarVateMAAAAgPklx/Nvy4cOHz549e+rUKSFEQUGBzWaLbLVarY2NjeHNI0eO/PnPfz548KAQorS0dOXKlY8//viAlw0Ggzqdrv+4SVK0wRyw9f7776+srJw3b56yef369S9/+cvD/UTG78oDSk5O/u1vf/vtb3/bYrEMGCYQCOh0OkmSPB6PyWSKMixjOJJDtkqSdOLEiQ0bNgx4WPRrIs7odDqn0zngf8DAVORwODo6OgwGw8yZM3mCEpOELMvt7e3d3d0zZsxgQXcAAOJDonxHb2xsDD9aonwRWTwSQjz66KPnz5/v6urq6up69913H3300XCT3W5/5plniouLzWZzVlbW6tWrxypVbW3tPffcE96cO3fu5L/yqVOnfv7zn6enpyclJc2YMaO4uPiDDz6IPECn0ylfmEymPueO30jGIlw8AoC44ff7Ozs7hRDZ2dkUjzCpKNMqu7q61A4CAADGRqLUj4ZkMplKSkqOHj1aUVGxbt06o9EYbiopKXnkkUdu3rzp8XgaGxsPHTo0Vp0WFRV99tln4c1bt25N/iuvWbPG7/f7/f7GxsZLly498cQTDz30UIznjt9Iji2fz6d2BACISWtrqyzLZrPZbDarnQX4B0mSsrOzc3Nz09PT1c4CAADGBvWjfygrK9u3b9/+/fvLysoi99fX17e3t/t8PofDUVVVtWvXrrHqcdu2bT/96U8bGhr8fv9f//rX/fv3T+SVR7Z+dnZ29qVLlwKBQFZW1qxZs+bOnet2u2M8d/xGcpT0er2yonZTU9Pu3buXLVumdiIAGJrb7Xa73cov6mpnAfpKTk5OS0tTOwUAABgzCVc/mjlz5mBN8+fP12q1Wq32wQcfjNx/7Nix5557Lj09/cEHH6ysrPzlL38phBjwZW39X+AVvfV73/vepk2bVqxYkZGR8eKLL/7mN7+JvHJ0o79yMBgcwaI/s2bNam5u/pd/+Re9Xi9JkrKcdjhSn5Hp88X4jeSQrf3zRB6grKit0WiWLl1aW1v75ptvDndYAGCChUIh5fUFGRkZBoNB7TgAAACIc/G8bHDk+tkAoGD9bMQHp9PZ1tam1+sLCwtZ+QgAAADjLeGePwIAYKrz+/3t7e1CiKysLIpHAAAAmADUjwAAmGIcDocsy8nJySkpKWpnAQAAQEKgfjRJKfMRBlRYWKh2OgCAalwul8fjYdlsAAAATCSd2gEwsIaGBrUjAAAmnVAo5HA4hBAZGRl6vV7tOAAAAEgU1I8AAJgyOjo6Mt0h3AAAIABJREFUent7dTpdRkaG2lmAYejt7W1tbRVC5OXlqZ0FAACMBPPXAACYGkKhUHjZbI2G7+CYSoLBoMvl6u7u9ng8amcBAAAjwU+fAABMDRqNZsaMGZmZmampqWpnAYYnKSnJYrGI/1v9Xe04AABg2KgfAQAwZRgMhmnTpqmdAhiJadOmabVav9/f0dGhdhYAADBs1I8AAAAw7jQaTVZWlhCira2tt7dX7TgAAGB4qB9hapAkSZKkCejI4XCsXLkyvHns2DGtViv9H4PBcObMmcjjL1269PDDD69YsWIErV/5ylecTue43g4AAJNHWlqa0WgMhULKWtoAAGAKSbj6UWFhodoRxozValU7wsSZsLUSfvWrX/3whz8Mb37ve99788035f9TWVm5cePGyOPLysqOHDny/vvvy7J88eLFJ554IvbWH//4x88+++y43g4AAJNKdna2EKK7u9vr9aqdBQAADEPC1Y/u3LmjdoQx09TUpHaEeHP79u0PP/zwW9/6VniP1Wpds2ZNeHPdunV9HrnXaDTKj8JCiGXLlrnd7thbv/Od71y9evX27dtjexcAAExaRqMxLS1NCGG321lIGwCAKSTh6keDuXr16po1aywWi8lkWr58+YULF+bMmRNuPX78+Je+9KXk5OSFCxeeOHEivF+Z0/TKK6+kpqZWVVW9/vrrFoslPEcpeqvijTfeWLp0qdlsLi4uPn36dGSTcrrL5SopKTEYDJGzn4qKipTJXFKEyHPPnDljMBgkSTKZTIsWLTp9+vT999/f55aXLFmyZMmS4Q5Un+76975nz57NmzdbrdaCgoKysrK6urr+pwshjhw5ct9996WlpT333HPh1uifghCipqZm2bJlOp2u/1yw0fQbVl5evnnz5sg99fX1kZufffbZv//7v0fusdvtgwzV0K1CiNLS0vLy8ujHAAAQT7Kzs3U6nd/vb2trUzsLAACIFfUjIYQ4f/78li1bnnrqqbq6uq6uroqKilu3boUXpjl+/Pj//M//XLlyxe12X758+eTJk+ESkvJ3s5aWloMHD65bt+7EiRP79+8Pz2+K3iqEqKysrKysPH78eEdHx8mTJ/fs2fPOO++EW5XTt23b9vTTT/t8vsiZU7W1tUqrHCHyjjZu3FhZWSnLstvtPnfunMfj6V/I6H9WLGRZXr58+ZUrV5TNK1eufPWrX428zurVqw8cOGCz2W7cuJGbm7tq1ao+pwshNm3a9Nprr1VUVDidzsWLFytN0T8FxdatW/ft2xcIBPrPIxtxv5H+9Kc/RS5+1IfL5aqurv6v//qvyJ3t7e2DDtZQrUKIr33ta+fOnYt+DICE1dvbywMaiD/hh3Pb29t9Pp/acQAAQEykOP7B9PDhw2fPnj116pQQoqCgwGazRbZardbGxkbl6/nz5+/du3fp0qUDXqe4uPjMmTNf/OIXlc1bt26tW7fu5s2byqYkSYFAQKfTSZLk8XhMJpMk/WNUo7fOmzfv/PnzBQUFymZNTU1paenly5fDXUuSdOLEiQ0bNoQ3Iz+vPpuRkpOTf/vb337729+2WCwxDlfsjhw58uc///ngwYNCiNLS0pUrVz7++OMDHhkMBnU6XZ+QkiS99dZba9eu7XNw9E9BObGpqSkvLy+8OdjtD6vfSGazubW11Ww292+y2+23bt1avnx5/1RRPpQhPzK3252VlcUaEBNJp9M5nc7x+F8DGHOff/55b29vXl6e0WhUOwswxmw2m9vtNhqNM2bMUDsLAAAYWqLUj8IGLDokJSW1tbUlJycPeB2DwdDZ2WkymZRNr9ebnp4e/nNZ+IL9vxiy1Wg09vmzm8lk8ng8g6WNvX507ty5b3zjG4FAwGAw5OTkpKamHj58eMAnbkbA6/XOnj1bqaAVFxfX1taGf7Gx2+0vv/zy22+/XV9fbzabFyxYcOHChf51nAFjR/8U+p8YuTmafiOZTCan09m/fvTxxx/b7fYVK1bEkioUCkXO74vSKoRwu93Z2dmRHzrGG/UjTBWBQODu3buyLBcWFup0OrXjAGOst7e3oaEhFAplZ2enp6erHQcAAAyB+WtCCDFr1qyPPvposNaioqKGhobwZkNDw7333jsm/RYXF1dXV0fOQRtNHSGyFLVmzRq/3+/3+xsbGy9duvTEE0889NBDYxFZCCFMJlNJScnRo0crKirWrVsX+VfxkpKSRx555ObNmx6Pp7Gx8dChQ7FfNvqnEN1o+o1077339lnwSAhx7dq1wYpHAwoGg7G31tXVFRUVDScjgESh1+sLCwvz8/MpHiEu6XS6adOmCSGcTmefd1MAAIBJiPqREELs3LnzySefrK2tFUK43e7q6ury8vLS0lKldceOHc8880xra6sQorW19ZlnntmxY8eY9Pv888+XlZVdu3bN6/W63e7r16+vX78+9tP1er2yhnRTU9Pu3buXLVsWbsrOzr506VIgEMjKypo1a9bcuXP7vPlLjHT9bEVZWdm+ffv2799fVlYWub++vl5Zy8DhcFRVVe3atSv2a0b/FKIbTb+RHn744ffffz9yz6VLl4xGY2TxqM9S5SaTqaqqSvn6gw8+SEtLi3zgKHqrEOK9996LfL8bAETSarUDzqgF4kN6errRaAyFQkO+bgIAAKhPjl+HDh1av359n50zZ84c8OCLFy+uWLEiPz8/PT198eLFu3fvdrvd4dajR4/OnTtXr9fPnTv36NGj4f2RwzjYF4O1Ks6dO7d48WKDwZCbm/uDH/ygoaFhwIv335Rl+fTp03q9XpKkGTNm/OxnP7PZbOGmxYsXV1ZWPvDAA8pfrfV6/enTp/vc8sKFCxctWjT0OA5i8eLFixcv7rPz4sWLCxcuNBqNeXl5W7ZsCa8w1f+mBvzPL8qnEH00RtlvWE1NzYIFCyL3pKSkRP+/RvkUhBBZWVlWq/V///d/Y2+VZXn+/Pm3b98eLA/Gg1ar7ejoUDsFAECWZdnr9X766aeffvqpy+VSOwsAAIgm4dY/AqIrKytbuXLlpk2bJqCvY8eOXbx4sby8fAL6QhjrHwHApNLa2tre3q7T6QoLCzUaHo0HAGCS4ps08E9efPHF3//+9xPT1759+1544YWJ6QsAgMlp2rRpSUlJvb29zGIDAGAyo34E/JOsrKzLly9PTF/vv/9+VlbWxPQFAMDkJElSTk6OEKK7u9vv96sdBwAADIxXugAAAEBNRqMxOzvbaDQaDAa1swAAgIHx/BEAAJMCbzFHIlPexaZ2CgAAMCjqRwAAqK+rq6utre3OnTuhUEjtLAAAAEBf1I8AAFBZIBBwOBxCiIyMDN4/BQAAgEmIH1IBAFCZ3W4PhUJGozEjI0PtLAAAAMAAqB8BAKCmzs5Oj8cjSVJubq7aWQAAAICBUT9KaJIkqR0BABJab29va2urECIzM5M3TwEAAGDSon6ESUqSJMpbAOJec3MzM9eAAcmy3NnZqXYKAADwdwlXPyosLFQ7wj+xWq0qXlmW5XHqffSGm238RhIAxklbW5vX69VoNHl5eVTMgT5sNpvdbm9ra1M7CAAAECIB60d37txRO8I/aWpqmnJXnpwS7X4BTHU9PT3KL8bZ2dl6vV7tOMCkk5qaqtFo+L8DAIBJIuHqR4O5evXqmjVrLBaLyWRavnz5hQsX5syZE24Nz6U6cuTIfffdl5aW9txzz4Vb33jjjaVLl5rN5uLi4tOnT/e58p49ezZv3my1WgsKCsrKyurq6pT9RUVFyjWlCH3OjX7lwcRy5ZqamgH3KztfeeWV1NTUqqqq119/3WKxnDlzZliplixZsmTJkhjTRjp48ODs2bNTUlIeffRRZUGQSBM/kgAwTkKhUHNzsyzLqampaWlpascBJqO0tLQvfOELqampagcBAABCCKFTO8CkcP78+WeeeWbXrl0VFRWpqalNTU1vvvmm0+kMHyDLsiRJmzZtCgQCFRUVDzzwwIULF5SmysrKN9544/jx4wUFBTU1NT//+c+Tk5NXr14dPnf16tVPPvmkEMLpdP7ud79btWrV7du3hRC1tbVCCEmSBpuoNeSVBzPklYUQs2fPVm6qz35lZ0tLy8GDB9etW7dq1ar9+/dv3LjR7/fHnmpk0+KOHDny6quvvvvuu/n5+X/7299+/etf9zlg4kcSAMZJa2trIBDQ6XQ5OTlqZwEmL61Wq3YEAADwd9FKDFPd4cOHz549e+rUKSFEQUGBzWaLbLVarY2NjcrX8+fP37t379KlS6NcTZKkt956a+3atX32z5s37/z58wUFBcpmTU1NaWnp5cuXB7xIMBjU6XSRYx6l6jGsKw8YeMgPd8BjJElSfquRJMnj8ZhMpsjDRpkqivvvv7+ysnLevHnK5vXr17/85S8PdgsTOZKIMzqdzul0WiwWtYMgcbndbuVbUkFBgdlsVjsOAAAAMLREef4oXCoasMrwySef3H///UNepH/xSAhx+/bt6dOnR+4xmUzhr+12+8svv/z222/X19ebzeYFCxbEnjn6lceVTqcbrMfxS1VbW3vPPfeEN+fOnRvZOkVHEgD6CAaDLS0tQoj09HSKRwAAAJgqWP9ICCFmzZr10Ucfjezc4uLi6upqOYLH4wm3lpSUPPLIIzdv3vR4PI2NjYcOHYp+NZ/PF+OVhyvyyqMxtqkiFRUVffbZZ+HNW7duRbZOnpEEgNGw2+3BYNBgMGRlZamdBQAAAIgV9SMhhNi5c+eTTz6pLKPjdrurq6vLy8tLS0tjOff5558vKyu7du2a1+t1u93Xr19fv359uLW+vr69vd3n8zkcjqqqql27dvU5Xa/XK6tTNzU17d69e9myZTFeeUhRrjwasaQa2frZ27Zt++lPf9rQ0OD3+//617/u378/slXFkQSAsdLR0eFyuSRJysvL678CHQAAADB5yfHr0KFD69ev77Nz5syZAx588eLFFStW5Ofnp6enL168ePfu3W63O9wafdDOnTu3ePFig8GQm5v7gx/8oKGhIfKyCxcuNBqNeXl5W7ZsCU+jCx9w+vRpvV4vSdKMGTN+9rOf2Wy2GK88pChXjvJfQuRm/y9iTLVw4cJFixbFHjWsvLz8nnvuMZvN3/zmNx0OR2S/Ko4k4oxWq+3o6FA7BRKR1+utqan59NNP+S8QGI3e3l61IwAAkIgSZf1sAFCwfjZUEQqF7ty5EwgEUlJS8vPz1Y4DTEmyLDscDpfLNXPmzPBajQAAYGIwfw0AgHHn8/l6e3u1Wm1OTo7aWYApzOfzBYPBpqamOP4LKAAAkxP1IwAAxp3JZJo5c2Z+fr5Wq1U7CzBVSZJktVp1Ol1PT4/yHkMAADBhqB9NSYWFhdIgCgsL1U4HABiAwWAwmUxqpwCmNq1Wqyw/393d3dnZqXYcAAASCFPHp6SGhga1IwAAAKjAZDJlZmY6nU6Hw2E0GpOSktROBABAQuD5IwAAAEwlmZmZKSkpsizbbLZgMKh2HAAAEgL1IwAAAEwxOTk5er2+t7fXbrernQUAgIRA/QgAAABTTHghJJfL1dbWpnYcAADiH/UjAAAATD1GozE7O1sI4XQ63W632nEAAIhz1I8wLiRJUjsCAKimtbW1tbVVlmW1gwBxzmKxpKenCyGam5t9Pp/acQAAiGfUj+KTJElUcABAFX6/v729vb293ev1qp0FiH9ZWVlmszkUCrGWNgAA4yrh6keFhYVqR/gnVqt1PC6r+h+9RxZgnEYDACaSwWDIz8/PzMw0m81qZwHinyRJeXl5ylraTU1Nqv8IBABAvEq4+tGdO3fUjvBPmpqa1I4wiTAaAOJDSkrKtGnT1E4BJAqtVmu1WjUajdfrdTgcascBACA+JVz9aDBXr15ds2aNxWIxmUzLly+/cOHCnDlzwq3h6WBHjhy577770tLSnnvuuXDrG2+8sXTpUrPZXFxcfPr06T5X3rNnz+bNm61Wa0FBQVlZWV1dnbK/qKhIuaYUoc+50a88JK/X+/3vfz8lJeULX/hCeXl55L1E9qVszp49O/LcJUuWLFmyZLg9CiFqamoGmz2n7He5XCUlJQaDwWAwnDlzRmmKZTQAAAAGZDAYcnJyhBCdnZ1dXV1qxwEAIA5RPxJCiPPnz2/ZsuWpp56qq6vr6uqqqKi4deuW0+kMH6A8C71p06bXXnutoqLC6XQuXrxYaaqsrKysrDx+/HhHR8fJkyf37NnzzjvvRF589erVBw4csNlsN27cyM3NXbVqlbK/trZWuawcIfLEIa88pP/4j//4zne+09LScvr06f/+7/8+fvy4EKK7u3vOnDl2uz18WFdX19y5c//yl79Ents/T4xmz5492InK/m3btj399NM+n6+ysnLjxo1K05CjAQAAEEVqampmZqYQwm63s/oYAABjTorj39IPHz589uzZU6dOCSEKCgpsNltkq9VqbWxsVL6eP3/+3r17ly5dGuVqkiS99dZba9eu7bN/3rx558+fLygoUDZrampKS0svX7484EWCwaBOp4scc0ka9CMY1pUHDPzuu++Gy1Uff/zxt7/97Rs3bggh9u3bd/369T/+8Y9K07PPPpuVlbV169YYrxxj7wPelyRJJ06c2LBhw4CHRRkNYKzodDqn02mxWNQOAgAYe01NTS6XS6vVTp8+3WAwqB0HAID4Ec+/rkfWj8IGrFAkJSW1tbUlJydHudpgpQ2j0djnfbEmk8nj8Shf2+32l19++e23366vrzebzQsWLLhw4UKMFZPoVx6SJEnd3d0pKSnKpsfjycnJcblcQohgMLho0aKKiori4uK7d++uXbv2ww8/HNufsaLUj6LcPvUjTADqRwAQx2RZ/vzzzyVJUlZEUjsOAADxg2+rQggxa9asjz76aGTnFhcXV1dXR866iizxlJSUPPLIIzdv3vR4PI2NjYcOHYp+tciCUfQrxyJyStonn3wSXtFJq9W+9NJL27ZtE0Js3759x44dk/MPdH3KZwAAANEplSOKRwAAjDm+swohxM6dO5988sna2lohhNvtrq6uLi8vLy0tjeXc559/vqys7Nq1a16v1+12X79+ff369eHW+vr69vZ2n8/ncDiqqqp27drV53S9Xq+sId3U1LR79+5ly5bFeOVYvP322xcuXPB4PB988MEPf/jD7du3h5seeuihUCj00ksvffbZZ+HZZJFGvH72aEQZDQCYnFpbWzs6OtROAeAftFotxSMAAMacTu0AE23mzJn9dz722GO5ublbtmyprq72er2zZ8/+7ne/+4c//CF8QPjVYMpm5ByrtWvXajSan/zkJ3/7298yMjK+/vWv/+53vwu3Hjt2bOvWrd/61rfS09O/8Y1v7Nix45VXXomcpaWsId3b2zt9+vR169a9+eabMV45OiXqzp07f/SjH/3bv/1bdnb29u3b+5Sffvvb3z7wwANVVVUDXiEYDI7gZ68+r3VTvgjfbHgYlT19NkXU0QCASai7u7u9vV0IYTQajUaj2nEAAACA8RLPy80MuP4Rwl5//fWjR49WVlaqHQSYUKx/hLHS09Pz+eefy7KcmZk5bdo0teMAAAAA4yjhnj+Core3d8eOHa+99praQQBgSurt7W1qapJlOTk5meIRAAAA4h71o4QTOcXsnnvuieMH0ABgnIRCIZvN1tvbm5SUlJ+fr3Yc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f/+ePXvuvvvuo0ePbtq0afPmzYWRe/bs+cQnPqEoihCira3t3HPPPeussy655JJLL710yBvJEe9Y+c5RD51CJW+88ca5555bU1PT09MjhGhubo7FYm+88cbZZ59d/udjqampicVir7/++v/+7/9u3779zTffdDqdZ5555he+8IWvfOUrtj9wnPwIE0bX9cOHDwsh2traSIgAAAAAYAZxuVyapuXzeafTOeKAfD7vdrudTmc+nx9+tJL8aLiVK1f+5Cc/GZKMHDx4cOvWrbt3704mk4WdLS0t3/nOd6699toKX06FtZUvu8JKii/y4Q9/+JVXXnnooYdM07z++us//OEP79u3b9QbWZxOp67r69ev/4d/+Ichh5YtW/b0008Hg8GKXvDkID9CpUzTVFVVCOH1ekuN6evrc7lc4XCYlWgAAAAAMINMwfyjIVpaWh577DFrmdhwuq6/+eabBw4c2Ldv389//vO3335bkqRHH330M5/5TKUvqYLaKol1Rq2k+CI7duy44447VqxYYZrmc889t2PHjttuu63CG4VCoVQqJUnSRz/60a1bt55zzjn5fH737t3r16+PxWLr1q0bnitNJfIjlGQYRjabVRRFVVVVVTVNE0IEAoF58+bZXRoAAAAAYCJ95CMfefnll5966qmPf/zjIw546qmnrrzyyo985CMvvfTS8KOVr1/L5/NHjhzZsmXLT3/60/r6+t/97neNjY3lazMMY+PGjd/61reGPN2sQuPMj0atpPgi8Xh83rx52WxWCOHz+U6cOBEOhyu80WmnnfbOO++EQqGurq7q6urC/scff/zqq69euHBhZ2dnhXVOBiaJ4A8Mw1AUJR6P9/b2Fj8oLZ1OW+GRw+FgYhEAAAAAzD5XXHGFEOKHP/xhqQHWIWvYeLhcrtNPP/3HP/7xlVde2dfXt3HjxlFPkWV5w4YNQogDBw6M8+7jNGolVVVV1113nWmapml+/vOft8KjCp177rlCiNNPP704PBJCXHLJJUKId99999TrnghkAXOapmmZTCYajZ44caKzs/PQoUPd3d29vb3xeFxRFNM0nU5nIBCIRCLz5s1rbW1ta2tramqyu2oAAAAAwAS7/fbbXS7Xww8//LOf/Wz40Z/+9Kf/8R//4Xa7b7/99gm5nSRJ3/3ud51O509+8pPf//73o463HoJmbwOgCitZvXr1kI0K/dmf/ZkQ4u23347H48X7Ozo6hBC2rwQiP5qLBgYGjh8/fvjw4SNHjhw/fry/vz+VSuVyOSGEy+UKBoO1tbXz5s1ra2trbW2dN29ebW1tIBAo1UQNAAAAADDTLVy4cNu2bUKIm2+++dZbb3355ZczmUw2m33llVduu+22v/zLvxRCfOtb31qwYMFE3fH0009ftWqVpmnFU5CWLl26cePGX/7yl93d3aqqKopy5MiR73//+1azoauuuqowUpKk4W2VRtx5aiqvZIhLLrnEmn908cUXj+mOf/EXf7F48eJEIvGpT31qz5498Xi8v7//gQceuOmmm4QQX/ziF8f5isaJ/kdzUWdnp5UWSZLk9Xo9Ho/H4/F6vS6Xa6L+TwMAAAAAzDhbtmzZtGmTYRhD9suy/M1vfvMb3/hGqRMr739UrKenZ8mSJYqi7Nu370Mf+pAo/aQ2IcQZZ5zx3HPPFdbEjHjNyndWeOiUK6n8RsVeffXVFStWDJl/JIS49NJLf/7zn/t8vvKnTyryo9kmn88nEglJkkr1zBdCWP8tWrERgREAAAAAoODAgQPf+973nn322ePHj5um2dLScvnll991111Lly4tc9ap5UdCiK9//ev33nvvFVdc8fTTTwsh/ud//mf37t0dHR0HDhzo7e01TbO2tnbp0qXXXHPNl7/85eKngU92fjTOSiq/0RDHjh3bsmXLk08+2dPT4/P5zjrrrBtuuOHWW291OByjnjupyI9mG1VVu7q6HA5HW1ub3bUAAAAAAIDZgI42M4ZhGLlcTlXVfD7v8/kCgcCIw9xudzgcdrvdpmkytwgAAAAAAIwf+dE0lc/nc7mcFRjlcrl8Pl+8ANU0zVL5kSRJjY2NU1UmAAAAAACY/ciPpgVd13Pvp2na8GFOp9Ptdrvdbr/fP/VFAgAAAACAuYn8yB66rieTyUJapOv68DGFtKjA9nZZAAAAAABgDiI/soeu6319fcV7hqRFHo9HlmW7ygMAAAAAACggP5oUyWQylUoFAoFwODziAJfLFQwGXS5XITAiLQIAAAAAANMT+dEpKv90s1wul0qlHA5HqfxIkqTm5uZJqw4AAAAAAGDCkB+NzjRNTdOsB6IVvubz+dbWVqdz5B9gIBBwOBxer3eKSwUAAAAAAJhwrJl6H9M0c7lcOp2ORqO9vb3Hjx8/evTooUOHjh49evz48b6+vlgslslk8vm8EML6OiKv11tdXU1+BAAAAACYQV599dWbbrqptbXV6/X6fL4PfOADq1ateuGFF+yuSwghyqwBEkL88pe//PSnP11fX+9yuZqamq699tpnnnlmyu4+F0imadpdg22sZ59Zk4msDU3TRhwpSZLb7Xa9h6ehAQAAAABmme985zs7d+78xje+cdlllzU2Nkaj0V/96lf33nvv/v37p0N0IEklE4xNmzY98cQTmzdvXr58udfrff311++9997//M//LF92mQuOc/CsNKdf/8mTJxOJxJCdsiwXQqJCYFRqnRoAAAAAALNAR0fHnXfe+d///d9D2vgahrFu3bpvf/vbdhVWUCrBeeqpp9rb2/fu3evz+Yr333PPPZs2bTqFC45/8Kw0a9ev6bre3d195MiRMmM8Ho/X6w2FQpFIpKmpacGCBW1tbYsXL164cGFzc3NtbW04HPb5fIRHAAAAAIDZ7dvf/vamTZuGPwNKluXi8Oixxx4777zzPB7PH/3RHz3wwAOF/ZIkPfTQQ+eff77X621sbLzxxhsHBgYqPOvCCy8MBoOFJT7Hjx9fs2ZNKBRqbW1tb29XFKV85ffff/+mTZuGhEdCiEJ4NOIFrfVo0nsKZ1Vy9507dy5ZssTtdi9ZsuSHP/xh8aFdu3a1tra63e7TTjtt586ds2nV28zLj3RdVxQllUrFYrF0Ol1qmMPhUFXV6ntdakx1dfWCBQuamppqa2tDoZDX62VJGgAAAABgDtq7d+9ll11WfsyLL7548803t7e39/X1/fu///vWrVuffPLJwtEtW7Zs3769v79///79hmHcddddlZy1efPmbdu29fb26rpu7Vm+fPkFF1xw4sSJX/3qV52dnZs3by5f1W9+85uLL764zIARL2hNJjLfU35wsUcfffTv//7vd+3aNTAwsGvXrnvuuefxxx+3Dv3Xf/3Xtm3bfvzjHw8ODv7zP//ztm3bylc+s0zT+VeFR55pmjZko7jgUCjU1NRU6iKZTMbhcLjd7tkU+AEAAAAAMOFcLlc2mx2y/qbwbtp6J/7xj3/8tttuu+6666ydL7300po1a15++WVr5GuvvXbeeedZh3p7e88888z+/v5Rz+ro6CiT/kSj0Q996EOHDh0SpVeQjVj5eC5YfvDy5cvXr19/zTXXWGMeffTRf/zHf7RajF9yySXt7e2f/vSnrUOPP/741VdfPT1Tl1Ngc35kPe+skBAVcqJSfawtTqfT6knk8/mqqqqmrFoAAAAAAGalhoaGN998s6GhYfihQnRSX19vRUIFDofDev8uSZKu67Isj/WsbDZb/OzywcHBv/3bv33iiSd6enpUVR0yeMQEo76+/q233qqrqxvxdY3pgpUMjkQihw4dqqmpsU6JRqOLFy8eHBy0Dh0+fLi6urpwKBKJzJr8yOb1a6qqdnV19fT09PX1RaPRVCqlKIr1u5Fl2e12BwKBqqqq2trapqamlpaW1tbWJUuWtLa2trS0NDU1ER4BAAAAADB+y5Yte/bZZ8uPSaVSyWTSLFI8+aM4PKr8rOLwSAhx0003aZr2i1/8IhaLmaaZSqUK69pKufDCCzs6OkodHdMFT+Huc8fkdobu7e1NJpN1dXWlgh5nEWtKkfXV6XTSiggAAAAAgKmxdu3aO++888orr4xEIqXGXHDBBa+++uqf/MmfjOnKYzqro6Oju7u7kCGMGmkJIdasWfNXf/VXV1111ZAW2t/85jf/5m/+pswFnU6nruvF4UMldz/jjDM6Ojo+85nPWN/++te/PvPMM63ts84664UXXiisX3vxxRcreMUzRqXzj3Rdz+VymUwmkUhEo9G+vr4TJ04cO3asu7u7/ImGYZRZjOZ0OltbWxcsWNDc3FxXV1ddXR0IBDweD+ERAAAAAABT5oorrrj55psvuOCCXbt2HTlyJJfLJZPJgwcP3nfffYUxmzdvXrduXUdHRyqVSqfTzz777Kc+9alRrzyms84555z77rtvcHAwFos9/PDDt95666jX/+QnP/mnf/qnF1988RNPPBGPxxVF+c1vfnPNNddYz18rc8GFCxc+88wzhmGM6e7r1q1bu3bt888/n0qlnn/++a9+9asbNmywDrW3t69du3bPnj3pdHrPnj1r164dtfgZ5A+L/XRd13W90H7I2i7sKbNgb8mSJaUaVFsnOp1OOlgDAAAAADDNdXR03H///S+++GJfX5/b7V60aNEnPvGJ1atX//Ef/7E14Ne//vXmzZv37dtnGMayZcs2bty4YsUKMVIvoeI9lZ919OjRu+66a8+ePYqifPCDH7z77rtvvvlma0z5dtdPPvnk/fffv2/fvng8Xltbu3z58jvvvHPFihVlLvjII4+sW7euq6tL13VrT4V337Fjx/bt2zs7OxctWrRhw4ZbbrmlUMbOnTu3bdvW09OzaNGiNWvWtLe3W32UZgHJNM2urq5cLjdqSydZlgsrywqLzhwOh9frJR4CAAAAAAAo2Lt376pVq9566y27C5kYTiGE1b9KCCFJUnEwNGS7VCssAAAAAAAA3HjjjRs2bGhra/vd7353++23r1q1yu6KJoxTCNHU1CRJksPhoOsQAAAAAADAqbniiitWrlx5+PDhRYsW3XLLLV/96lftrmjClFs9CAAAAAAAALAkDQAAAAAAAOWQHwEAAAAAAKAc8iMAAAAAAACUQ34EAAAAAACAcsiPAAAAAADAH3R2dnZ3d1vbqVTq6NGj1raqqgMDA0KIdDp97NixY8eOvfvuu8UnFg8eGBg4ePBgmSsXb2P64/lrAAAAAADg/z322GO//e1vBwcHW1tbr7vuuq997WvnnHOOx+O5+uqr77vvvr6+vt27d7/yyiu/+MUvstnsyy+//NRTT1knnjhxojD40ksv3bJly0UXXXTo0KEdO3YMv/KiRYsK23fddZd9LxeVIj8CAAAAAADvk0gk7rjjjosuumjp0qWXXXbZ5z73uUceeUQIcc011+zevdsa87Of/czpdK5cudL69nvf+15h8OrVq995550bbrjhK1/5yr/9278Nv/KDDz44ZBvTHOvXAAAAAADAH5im2d7evn79+r6+vvr6+lLDHn300c9+9rOHDx9+5ZVXstls8eDzzz9/7969a9euveqqqwoDiq88ZBvTH/kRAAAAAAD4g3Xr1n3+858/99xz58+f39PTI4SQJGnImHfeeaelpcXr9fb09Bw8eFBRlOLBDzzwwNe+9rUHH3zwkUceKQwovvKQbUx/jr/7u7+zuwYAAAAAADAt7Nq16+GHH06n02+//fbKlSvvueeeF1544eKLL160aNH69etfeOGFbDb7sY99bPv27ddff31zc/PChQvPPvtsn8/X2tpaGLxs2bLt27e//vrrgUDgtttuswYUX/m3v/1tYXvZsmV2v2iMjv5HAAAAAABgZKZpKori8/nGOljTtGw2GwqFJrlATJH/A2wGHHe4IBW1AAAAAElFTkSuQmCC
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIyLjAiIGluaXQ9IkZyYW1ld29yayI+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5HZW5lcmFsQ2F0YWxvZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5kUmVnaXN0cmF0aW9uIj4KICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPmFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkFkbWluLjwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIiBUcmFuc2xhdGFibGU9IjEiPkdlbmVyYWwgQ2F0YWxvZzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hdkJhck5hbWUiPkFkbWluPC9JdGVtPgogICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pbkdlbmVyYWxDYXRhbG9nIyMjMDAxLUdlbmVyYWxDYXRhbG9nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxvYWRlciBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkxvYWRlcjwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPklUU00uR2VuZXJhbENhdGFsb2cuanM8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluR2VuZXJhbENhdGFsb2cjIyMwMDEtR2VuZXJhbENhdGFsb2ciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFpbiBtZW51IGl0ZW0gcmVnaXN0cmF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246Ok1haW5NZW51PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPERlZmF1bHRJdGVtIFZhbHVlVHlwZT0iRnJvbnRlbmROYXZpZ2F0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0RlZmF1bHRJdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJGcm9udGVuZDo6TmF2aWdhdGlvbk1vZHVsZSMjI0FkbWluR2VuZXJhbENhdGFsb2ciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWRtaW4gYXJlYSBuYXZpZ2F0aW9uIGZvciB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb246OkFkbWluT3ZlcnZpZXc8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXAiPgogICAgICAgICAgICAgICAgICAgIDxBcnJheT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+YWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhcjo6TW9kdWxlQWRtaW48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+R2VuZXJhbCBDYXRhbG9nPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+QWRtaW5pc3RyYXRpb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPkNyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uQmlnIj5mYS1ib29rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJY29uU21hbGwiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjQ29tbWVudDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkdlbmVyYWxDYXRhbG9nPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXM6OkdlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPkNvbW1lbnQgMjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzYyIgVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJCbG9jayI+VGV4dEFyZWE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbHMiPjUwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSb3dzIj41PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Db21tZW50MjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6R2VuZXJhbENhdGFsb2c8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGFiZWwiIFRyYW5zbGF0YWJsZT0iMSI+UGVybWlzc2lvbiBHcm91cDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPlBlcm1pc3Npb248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNsYXNzIj5JVFNNOjpDb25maWdJdGVtOjpDbGFzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+UGVybWlzc2lvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3Ryc19jb25maWc+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjphcl9TQV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpiZ19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn0KTRg9C90LrRhtC40L7QvdCw0LvQvdC+0YHRgic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC+0YHQvdC+0LLQvdC40Y8g0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn0JTQvtCx0LDQstC4INC10LvQtdC80LXQvdGCINC60YrQvCDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn0JTQvtCx0LDQstC4INC60LvQsNGBINCyINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ9Ca0LvQsNGB0L7QstC1INCyINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ9Ch0YrQt9C00LDQstCw0L3QtSDQuCDQv9C+0LTQtNGA0YrQttC60LAg0L3QsCDQntGB0L3QvtCy0L3QuNGPINC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQvdCwINC/0YDQtdC00L3QuNGPINC80L7QtNGD0Lsg0LfQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y/RgtCwINC90LAg0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRgdC60LjRjyDQntGB0L3QvtCy0LXQvSDQutCw0YLQsNC70L7QsyDQsiDQkNC00LzQuNC90LjRgdGC0YDQsNGC0LjQstC90LDRgtCwINGH0LDRgdGCLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfQntGB0L3QvtCy0LXQvSDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC90LAg0L/RgNC40LzQtdGA0L3QuNGPINC60L7QvNC10L3RgtCw0YAgMiDQvdCwINCw0YLRgNC40LHRg9GC0LjRgtC1INC90LAg0L7QsdGJ0LjRjyDQutCw0YLQsNC70L7Qsy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC30LAg0L/RgNC40LzQtdGA0L3QuNGC0LUg0YDQsNC30YDQtdGI0LjRgtC10LvQvdC4INCz0YDRg9C/0Lgg0L7RgiDQsNGC0YDQuNCx0YPRgtC40YLQtSDQvdCwINC+0LHRidC40Y8g0LrQsNGC0LDQu9C+0LMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpjYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpjc19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua2Npb25hbGl0YSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdTcHLDoXZhIEhsYXZuw61obyBLYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdQxZlpZGF0IHBvbG/Fvmt1IEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnUMWZaWRhdCB0xZnDrWR1IEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdUxZnDrWR5IEthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdWeXR2b8WZaXQgYSBzcHJhdm92YXQgaGxhdm7DrSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmRvdsOhIHJlZ2lzdHJhY2UgbW9kdWx1IHBybyBrb25maWd1cmFjaSBobGF2bsOtaG8ga2F0YWxvZ3UgdiBhZG1pbmlzdHJhdGl2bsOtIG9ibGFzdGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0hsYXZuw60gS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUMWZw61rbGFkIHBhcmFtZXRyxa8gcHJvIGtvbWVudMOhxZkgMiBvYmVjbsO9Y2ggYXRyaWJ1dMWvIGthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyeSBza3VwaW55IHBybyBwxZnDrWtsYWQgb3Byw6F2bsSbbsOtIG9iZWNuw71jaCBhdHJpYnV0xa8ga2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua3Rpb25hbGl0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VuZXJhbCBLYXRhbG9nIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnVGlsZsO4aiBrYXRhbG9nIHBvc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdUaWxmw7hqIEthdGFsb2cga2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9nIEtsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ1JlZGlnZXIgZW5oZWQgaSBrYXRhbG9nZXQnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ09wcmV0IG9nIGjDpW5kdGVyIHN0YW5kYXJkIGthdGFsb2dldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHZW5lcmFsIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkZV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua3Rpb25hbGl0w6R0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlbmVyYWwgS2F0YWxvZy1WZXJ3YWx0dW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnRWxlbWVudGUgaW4gS2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ8OEbmRlcmUgZGFzIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnS2xhc3NlIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnRsO8Z2UgSXRlbSBoaW56dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnS2F0YWxvZ2VsZW1lbnQgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9na2xhc3NlIGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9na2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnS2F0YWxvZ2VsZW1lbnQgYmVhcmJlaXRlbic7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnRGVyIFN0YXR1cyBkZXMgV2FybnZvcmZhbGxzIGthbm4gbmljaHQgYXVmIHVuZ8O8bHRpZyBnZXNldHp0IHdlcmRlbi4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdLb21tZW50YXIgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0dlbmVyYWwgS2F0YWxvZyBlcnN0ZWxsZW4gdW5kIHZlcndhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0xlZ2VuIFNpZSBkZW4gS29tbWVudGFyIDIgZsO8ciBkZW4gR2VuZXJhbCBLYXRhbG9nIGZlc3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICdEZWZpbmllcnQgZGllIFVSTCBkZXMgSlMtRmFyYnfDpGhsZXItUGZhZHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RyaWVydW5nIGRlcyBGcm9udGVuZC1Nb2R1bHMgZsO8ciBkaWUgS29uZmlndXJhdGlvbiB2b24gQWRtaW5HZW5lcmFsQ2F0YWxvZyBpbSBBZG1pbi1CZXJlaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHZW5lcmFsIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciBmw7xyIGRlbiBCZWlzcGllbC1Lb21tZW50YXIgMiBkZXIgR2VuZXJhbCBLYXRhbG9nLUF0dHJpYnV0ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyIGbDvHIgZGllIHp1Z3JpZmZzYmVyZWNodGlndGUgR3J1cHBlIGRlciBHZW5lcmFsIEthdGFsb2ctQXR0cmlidXRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnQmVyZWNodGlndW5nc2dydXBwZSBcKic7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplbl9DQV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplbl9HQl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY3Rpb25hbGl0eSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZW5lcmFsIENhdGFsb2d1ZSBNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0FkZCBDYXRhbG9ndWUgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0FkZCBDYXRhbG9ndWUgQ2xhc3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NhdGFsb2cgQ2xhc3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdFZGl0IENhdGFsb2d1ZSBJdGVtJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9ndWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvdXIgUGlja2VyIHBhdGguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZ3VlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0dlbmVyYWwgQ2F0YWxvZ3VlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZ3VlIGF0dHJpYnV0ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2d1ZSBhdHRyaWJ1dGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19DT19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY2lvbmFsaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzbiBkZWwgQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdJdGVtcyBlbiBDbGFzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdFZGl0YXIgZWxlbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnQcOxYWRpciBDbGFzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0HDsWFkaXIgZWxlbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0HDsWFkaXIgRWxlbWVudG8gYWwgQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQcOxYWRpciBDbGFzZSBhbCBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNlIGRlIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0VkaXRhciBFbGVtZW50byBkZWwgQ2F0w6Fsb2dvJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICdFbCBlc3RhZG8gZGUgaW5jaWRlbnRlIEF0ZW5jacOzbiBubyBwdWVkZSBzZXIgaW52w6FsaWRvLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0NvbWVudGFyaW8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWEgeSBnZXN0aW9uYSBlbCBDYXTDoWxvZ28gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnRGVmaW5pciBlbCBjb21lbnRhcmlvIDIgZGVsIGNhdMOhbG9nbyBnZW5lcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnRGVmaW5lIGxhIHJ1dGEgVVJMIEpTIGRlbCBzZWxlY3RvciBkZSBjb2xvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRWwgRnJvbnRlbmQgZGVsIHJlZ2lzdHJvIGRlbCBtw7NkdWxvIHBhcmEgbGEgY29uZmlndXJhY2nDs24gZGVsIEFkbWluR2VuZXJhbENhdGFsb2cgZW4gZWwgw6FyZWEgYWRtaW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgZWwgZWplbXBsbyBjb21lbnRhcmlvIDIgZGUgbG9zIGF0cmlidXRvcyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgbG9zIHBlcm1pc29zIGRlIGVqZW1wbG8gZGUgbG9zIGF0cmlidXRvcyBkZWwgY2F0w6Fsb2dvIGdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICdHcnVwbyBkZSBwZXJtaXNvcyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19NWF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY2lvbmFsaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdBZG1pbmlzdHJhY2nDs24gZGVsIENhdMOhbG9nbyBHZW5lcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0HDsWFkaXIgYXJ0w61jdWxvIGRlbCBjYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBw7FhZGlyIGNsYXNlIGRlbCBjYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NhdMOhbG9nbyBkZSBjbGFzZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdFZGl0YXIgYXJ0w61jdWxvIGRlbCBjYXTDoWxvZ28nOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWFyIHkgYWRtaW5pc3RyYXIgZWwgQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnRGVmaW5lIGxhIFVSTCBwYXJhIGVsIFNlbGVjdG9yIGRlIENvbG9yIEpTLiAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGRlIEZyb250ZW5kIHBhcmEgbGEgYWRtaW5pc3RyYWNpw7NuIGRlbCBjYXTDoWxvZ28gZ2VuZXJhbCBlbiBlbCDDoXJlYSBkZSBhZG1pbmlzdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6Fsb2dvIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgZWwgY29tZW50YXJpbyBkZSBlamVtcGxvIDIgZGVsIGNhdMOhbG9nbyBnZW5lcmFsIGRlIGF0cmlidXRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDoW1ldHJvcyBwYXJhIGVsIGVqZW1wbG8gZGUgcGVybWlzb3MgZGUgZ3J1cG8gZGVsIGNhdMOhbG9nbyBnZW5lcmFsIGRlIGF0cmlidXRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpldF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn2qnYp9ix2qnYsdiv24wnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn2YXYr9uM2LHbjNiqINmB2YfYsdiz2Kog2LnZhdmI2YXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfYp9i22KfZgdmHINqp2LHYr9mGINuM2qkg2YLZhNmFINmB2YfYsdiz2KonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfYp9i22KfZgdmHINqp2LHYr9mGINqp2YTYp9izINmB2YfYsdiz2KrbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn2YHZh9ix2LPYqiDaqdmE2KfYs9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfYs9in2K7YqiDZiCDZhdiv24zYsduM2Kog2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDZgdmH2LHYs9iqINi52YXZiNmF24wg2K/YsSDYqNiu2LQg2YXYr9uM2LHbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9mB2YfYsdiz2Kog2LnZhdmI2YXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn2b7Yp9ix2KfZhdiq2LHZh9in24zbjCDYqNix2KfbjCDYqtmI2LbbjNitINmG2YXZiNmG2Ycg27Ig2YXYsdio2YjYtyDYqNmHINmI24zamNqv24zigIzZh9in24wg2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9m+2KfYsdin2YXYqtix2YfYp9uM24wg2KjYsdin24wg2q/YsdmI2YfigIzZh9in24wg2K/Ys9iq2LHYs9uMINmG2YXZiNmG2Ycg2YXYsdio2YjYtyDYqNmHINmI24zamNqv24zigIzZh9in24wg2YHZh9ix2LPYqiDYudmF2YjZhduMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmaV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9DQV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRm9uY3Rpb25uYWxpdMOpJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3Rpb24gZHUgY2F0YWxvZ3VlIGfDqW7DqXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ8OJbMOpbWVudHMgZGFucyBsYSBjbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnw4lkaXRlciB1biDDqWzDqW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnQWpvdXRlciB1bmUgY2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnQWpvdXRlciB1biDDqWzDqW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0Fqb3V0ZXIgdW4gw6lsw6ltZW50IGF1IGNhdGFsb2d1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0Fqb3V0ZXIgdW5lIGNsYXNzZSBhdSBjYXRhbG9ndWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNzZSBkZSBjYXRhbG9ndWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICfDiWRpdGVyIHVuIMOpbMOpbWVudCBkdSBjYXRhbG9ndWUnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0NvbW1lbnRhaXJlIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcsOpZXIgZXQgZ8OpcmVyIGxlIGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEw6lmaW5pciBsZSBjb21tZW50YWlyZSAyIGR1IGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICdEw6lmaW5pdCBsXCdVUkwgZHUgY2hlbWluICJKUyBDb2xvciBQaWNrZXIiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnSW50ZXJmYWNlIGRcJ2VucmVnaXN0cmVtZW50IGRlIG1vZHVsZSBwb3VyIGxhIGNvbmZpZ3VyYXRpb24gZHUgY2F0YWxvZ3VlIGfDqW7DqXJhbCBkYW5zIGxhIHpvbmUgYWRtaW5pc3RyYXRldXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0YWxvZ3VlIGfDqW7DqXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW3DqHRyZXMgcG91ciBsXCdleGVtcGxlIGR1IGNvbW1lbnRhaXJlIDIgZGVzIGF0dHJpYnV0cyBkdSBjYXRhbG9ndWUgZ8OpbsOpcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtw6h0cmVzIHBvdXIgbFwnZXhlbXBsZSBkZXMgcGVybWlzc2lvbnMgZGUgZ3JvdXBlcyBkZXMgYXR0cmlidXRzIGR1IGNhdGFsb2d1ZSBnw6luw6lyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpnbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY2lvbmFsaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnWGVzdGnDs24gZG8gQ2F0w6Fsb2dvIFhlcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0VuZ2FkaXIgdW4gZWxlbWVudG8gYW8gY2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnRW5nYWRpciB1bmhhIGNsYXNlIGFvIGNhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc2UgZG8gY2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDcmVhciBlIHhlc3Rpb25hciBvIENhdMOhbG9nbyBYZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JleGlzdHJvIG5vIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmFjacOzbiBkZSBBZG1pbkdlbmVyYWxDYXRhbG9nIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gWGVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOhbWV0cm9zIHBhcmEgbyBjb21lbnRhcmlvIGRlIGV4ZW1wbG8gMiBkb3MgYXRyaWJ1dG9zIGRvIGNhdMOhbG9nbyB4ZXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyw6FtZXRyb3MgcGFyYSBvcyBncnVwb3MgZGUgcGVybWlzb3MgZGUgZXhlbXBsbyBkb3MgYXRyaWJ1dG9zIGRvIGNhdMOhbG9nbyB4ZXJhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpoZV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn16TXldeg16fXpteZ15XXoNec15knOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn16DXmdeU15XXnCDXp9eY15zXldeSINeb15zXnNeZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ9eU15XXodejINek16jXmdeYINec16fXmNec15XXkic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfXmdem15nXqNeUINeV16DXmdeU15XXnCDXqdecINeU16fXmNec15XXkiDXlNeb15zXnNeZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9eg15nXlNeV15wg16fXmNec15XXkic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpoaV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpocl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY2lvbmFsbm9zdCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdPcMSHZSBwb3N0YXZrZSBLYXRhbG9nYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdEb2RhaiBzdGF2a3UgdSBLYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0RvZGFqIGtsYXN1IHUgS2F0YWxvZ3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb8Wha2Ega2xhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ05hcHJhdmkgaSBwb2Rlc2kgT3DEh2kga2F0YWxvZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnT3DEh2kga2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpodV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua2Npb25hbGl0w6FzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ8OBbHRhbMOhbm9zIGthdGFsw7NndXMga2V6ZWzDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdFbGVtZWsgYXogb3N6dMOhbHliYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnRWxlbSBzemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ09zenTDoWx5IGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0VsZW0gaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdLYXRhbMOzZ3VzZWxlbSBob3p6w6FhZMOhc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbMOzZ3Vzb3N6dMOhbHkgaG96esOhYWTDoXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbMOzZ3Vzb3N6dMOhbHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdLYXRhbMOzZ3VzZWxlbSBzemVya2VzenTDqXNlJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICdBIGZpZ3llbG1lenRldMOpcyBpbmNpZGVuc8OhbGxhcG90b3QgbmVtIGxlaGV0IMOpcnbDqW55dGVsZW5yZSDDoWxsw610YW5pLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJzIuIG1lZ2plZ3l6w6lzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnQXogw6FsdGFsw6Fub3Mga2F0YWzDs2d1cyBsw6l0cmVob3rDoXNhIMOpcyBrZXplbMOpc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdNZWdoYXTDoXJvenphIGF6IMOhbHRhbMOhbm9zIGthdGFsw7NndXMgMi4gbWVnamVneXrDqXPDqXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICdNZWdoYXTDoXJvenphIGEgSlMgc3rDrW52w6FsYXN6dMOzIMO6dHZvbmFsw6FuYWsgVVJMLcOpdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0VsxZF0w6l0cHJvZ3JhbSBtb2R1bCByZWdpc3p0csOhY2nDsyBheiBhZG1pbmlzenRyw6FjacOzcyB0ZXLDvGxldGVuIGzDqXbFkSDDoWx0YWzDoW5vcyBrYXRhbMOzZ3VzIGJlw6FsbMOtdMOhc2hvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnw4FsdGFsw6Fub3Mga2F0YWzDs2d1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW3DqXRlcmVrIGF6IMOhbHRhbMOhbm9zIGthdGFsw7NndXMgYXR0cmliw7p0dW1haW5hayAyLiBww6lsZGEgbWVnamVneXrDqXNlaWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW3DqXRlcmVrIGF6IMOhbHRhbMOhbm9zIGthdGFsw7NndXMgYXR0cmliw7p0dW1haW5hayBww6lsZGEgam9nb3N1bHRzw6FnIGNzb3BvcnRqYWlob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICdKb2dvc3VsdHPDoWdpIGNzb3BvcnQnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjppZF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuZ3Npb25hbGl0YXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnTWFuYWplbWVuIEthdGFsb2cgVW11bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdUYW1iYWggSXRlbSBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnVGFtYmFoIEtlbGFzIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0tlbGFzIEthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0J1YXQgZGFuIGtlbG9sYSBLYXRhbG9nIFVtdW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RyYXNpIG1vZHVsIGZyb250ZW5kIHVudHVrIHBlbmdhdHVyYW4gQWRtaW5LYXRhbG9nVW11bSBkaSBhcmVhIGFkbWluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdLYXRhbG9nIFVtdW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayAyIGNvbnRvaCBrb21lbnRhciBkYXJpIGF0cmlidXQga2F0YWxvZyB1bXVtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgZ3J1cCBjb25vdGggcGVyaXppbmFuIGRhcmkgYXRyaWJ1dCBrYXRhbG9nIHVtdW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjppdF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuemlvbmFsaXTDoCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uZSBkZWwgQ2F0YWxvZ28gR2VuZXJhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdFbGVtZW50aSBuZWxsYSBDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnTW9kaWZpY2EgRWxlbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnQWdnaXVuZ2kgQ2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnQWdnaXVuZ2kgRWxlbWVudG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0FnZ2l1bmdpIEVsZW1lbnRvIGFsIENhdGFsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWdnaXVuZ2kgQ2xhc3NlIGFsIENhdGFsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdDbGFzc2UgZGkgQ2F0YWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdNb2RpZmljYSBlbGVtZW50byBkaSBjYXRhbG9nbyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnTG8gc3RhdG8gZGVsbFwnaW5jaWRlbnRlIGRpIGF2dmlzbyBub24gcHXDsiBlc3NlcmUgaW1wb3N0YXRvIHN1IG5vbiB2YWxpZG8uJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnQ29tbWVudG8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWEgZSBnZXN0aXNjaSBpbCBDYXRhbG9nbyBHZW5lcmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluaXNjaSBpbCBjb21tZW50byAyIGRlbCBjYXRhbG9nbyBnZW5lcmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ1NwZWNpZmljYSBpbCBwZXJjb3JzbyBkZWxsXCdVUkwgZGVsIHNlbGV0dG9yZSBkaSBjb2xvcmkgSlMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNb2R1bG8gZGkgcmVnaXN0cmF6aW9uZSBwZXIgbGEgY29uZmlndXJhemlvbmUgZGkgQWRtaW5HZW5lcmFsQ2F0YWxvZyBuZWxsXCdhcmVhIGRpIGFkbWluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXRhbG9nbyBHZW5lcmFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHBlciBpbCBjb21tZW50byBkaSBlc2VtcGlvIDIgZGVnbGkgYXR0cmlidXRpIGRlbCBjYXRhbG9nbyBnZW5lcmFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHBlciBpIGdydXBwaSBkaSBwZXJtZXNzaSBkaSBlc2VtcGlvIGRlZ2xpIGF0dHJpYnV0aSBkZWwgY2F0YWxvZ28gZ2VuZXJhbGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICdHcnVwcG8gZGkgYXV0b3JpenphemlvbmknOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpqYV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn5qmf6IO95oCnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ+OCuOOCp+ODjeODqeODq+ODu+OCq+OCv+ODreOCsOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ+OCr+ODqeOCueWGheOBruOCouOCpOODhuODoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAn44Kv44Op44K544Gu6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfjgqvjgr/jg63jgrDpoIXnm67jgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfjgqvjgr/jg63jgrDjgq/jg6njgrnjgpLov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+OCq+OCv+ODreOCsOOCr+ODqeOCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ+OCq+OCv+ODreOCsOODu+OCouOCpOODhuODoOOCkuS/ruatoyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn44K444Oj44ON44Op44Or44O744Kr44K/44Ot44Kw44Gu5L2c5oiQ44Go566h55CGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ1VSTCBKUyDjgqvjg6njg7zjg5Tjg4Pjgqvjg7zjga7jg5HjgrnjgpLlrprnvqnjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ+euoeeQhuOCqOODquOCouOBp+OBrkFkbWluR2VuZXJhbENhdGFsb2fjga7jg5Xjg63jg7Pjg4jjgqjjg7Pjg4njg6Ljgrjjg6Xjg7zjg6vjga7nmbvpjLInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn44K444Kn44ON44Op44Or44O744Kr44K/44Ot44KwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfjgrjjgqfjg43jg6njg6vjg7vjgqvjgr/jg63jgrDlsZ7mgKfjga7jgrPjg6Hjg7Pjg4jkvosgMuOAgOOBruioreWumuWApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfjgrjjgqfjg43jg6njg6vjg7vjgqvjgr/jg63jgrDlsZ7mgKfjga7mqKnpmZDjgrDjg6vjg7zjg5fjgIDjga7oqK3lrprlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ+aoqemZkOOCsOODq+ODvOODlyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjprb19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpsdF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua2Npb25hbHVtYXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnQmVuZHJvam8ga2F0YWxvZ28gdmFsZHltYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnUmVkYWd1b3RpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ1ByaWTEl3RpIGRva3VtZW50xIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ1ByaWTEl3RpIGthdGFsb2dvIG9iamVrdMSFJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9nbyBrbGFzxJcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdSZWRhZ3VvdGkga2F0YWxvZ28gb2JqZWt0xIUnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpsdl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpta19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn0KTRg9C90LrRhtC40L7QvdCw0LvQvdC+0YHRgic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfQntC/0YjRgiDQmtCw0YLQsNC70L7QsyDQnNC10L3QsNGf0LzQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn0JTQvtC00LDQtNC4INCa0LDRgtCw0LvQvtCzINGB0YLQsNCy0LrQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ9CU0L7QtNCw0LTQuCDQmtCw0YLQsNC70L7QsyDQmtC70LDRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfQmtCw0YLQsNC70L7QsyDQmtC70LDRgdCwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfQlNC+0LTQsNC00Lgg0Lgg0JzQtdC90LDRn9C40YDQsNGYINCz0L4g0J7Qv9GI0YLQuNC+0YIg0JrQsNGC0LDQu9C+0LMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn0J/QvtC30LDQtNC40L3RgdC60Lgg0LzQvtC00YPQuyDRgNC10LPQuNGB0YLRgNCw0YbQuNGY0LAg0LfQsCDQkNC00LzQuNC90J7Qv9GI0YLQmtCw0YLQsNC70L7QsyDQutC+0L3RhNC40LPRg9GA0LDRhtC40ZjQsCDQstC+INCw0LTQvNC40L0g0LTQtdC7Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfQntC/0YjRgiDQmtCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLQsNGAINC30LAg0L/RgNC40LzQtdGAINC60L7QvNC10L3RgtCw0YAgMiDQvtC0INC+0L/RiNGCINC60LDRgtCw0LvQvtCzINCw0YLRgNC40LHRg9GCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQt9CwINC/0YDQuNC80LXRgCDQtNC+0LfQstC+0LvQuNGC0LUg0LfQsCDQs9GA0YPQv9C4INC+0LQg0LPQtdC90LXRgNCw0LvQvdC4INC60LDRgtCw0LvQvtCzINCw0YLRgNC40LHRg9GC0LguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjptc19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuZ3NpJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0thdGFsb2cgUGVuZ3VydXNhbiBHZW5lcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ1RhbWJhaGFuIEl0ZW0gS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ1RhbWJhaCBLZWxhcyBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLZWxhcyBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdDaXB0YSBkYW4gdXJ1cyBLYXRhbG9nIEdlbmVyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTW9kdWwgcGVuZGFmdGFyYW4gbXVrYSBoYWRhcGFuIGJhZ2kga29uZmlndXJhc2kgS2F0YWxvZ1VtdW1UYWRiaXIgZGFsYW0gcnVhbmdhbiBwZW50YWRiaXIuICc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdLYXRhbG9nIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlciB1bnR1ayBjb250b2gga29tZW4gMiBwYWRhIGNpcmktY2lyaSBrYXRhbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0ZXIgdW50dWsgY29udG9oIGt1bXB1bGFuIHlhbmcgZGliZW5hcmthbiBwYWRhIGNpcmktY2lyaSBrYXRhbG9nLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpuYl9OT19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua3Nqb25hbGl0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnQWRtaW5pc3RyYXNqb24gYXYgR2VuZXJlbGwgS2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdFbmRyZSBvYmpla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdMZWdnIHRpbCBrYXRhbG9nb2JqZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnTGVnZyB0aWwga2F0YWxvZy1rbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0thdGFsb2cta2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdPcHByZXR0IG9nIGFkbWluaXN0csOpciBkZW4gZ2VuZXJlbGxlIGthdGFsb2dlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0ZvcnNpZGVtb2R1bC1yZWdpc3RyZXJpbmcgZm9yIEFkbWluR2VuZXJhbENhdGFsb2ctb3Bwc2V0dCBpIGFkbWluLWRlbGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHZW5lcmVsbCBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cmUgZm9yIGVrc2VtcGVsa29tbWVudGFyIDIgaSBhdHRyaWJ1dHRlbmUgZm9yIGdlbmVyZWxsIGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldGVyZSBmb3IgdGlsZ2FuZ3NncnVwcGUtZWtzZW1wZWwgaSBhdHRyaWJ1dHRlbmUgZm9yIGdlbmVyZWxsIGthdGFsb2cuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpubF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY3Rpb25hbGl0ZWl0JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0FsZ2VtZW5lIENhdGFsb2d1cyBiZWhlZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdJdGVtcyBpbiBrbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnSXRlbSBiZXdlcmtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdLbGFzc2UgdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnSXRlbSB0b2V2b2VnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ0NhdGFsb2d1c2l0ZW0gdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQ2F0YWxvZ3Vza2xhc3NlIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2F0YWxvZ3Vza2xhc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnQ2F0YWxvZ3VzaXRlbSBiZXdlcmtlbic7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnV2FhcnNjaHV3aW5nIGluY2lkZW50IHN0YXR1cyBrYW4gbmlldCB3b3JkZW4gaW5nZXN0ZWxkIG9wIG9uZ2VsZGlnLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0NvbW1lbnRhYXIgMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ01hYWsgZW4gYmVoZWVyIGRlIEFsZ2VtZW5lIENhdGFsb2d1cy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluaWVlciBkZSBhbGdlbWVuZSBjYXRhbG9ndXNjb21tZW50YWFyIDIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICdEZWZpbmllZXJ0IGhldCBVUkwgSlMta2xldXJraWV6ZXJwYWQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aWUgdm9vciBkZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpZSBpbiBoZXQgYWRtaW4gZ2ViaWVkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdBbGdlbWVuZSBDYXRhbG9ndXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcnMgdm9vciBoZXQgdm9vcmJlZWxkY29tbWVudGFhciAyIHZhbiBkZSBhbGdlbWVuZSBjYXRhbG9ndXNrZW5tZXJrZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRlcnMgdm9vciBkZSB2b29yYmVlbGRtYWNodGlnaW5nc2dyb2VwZW4gdmFuIGRlIGFsZ2VtZW5lIGNhdGFsb2d1c2tlbm1lcmtlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ1RvZXN0ZW1taW5nc2dyb2VwJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua2Nqb25hbG5vxZvEhyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdaYXJ6xIVkemFuaWUga2F0YWxvZ2llbSBnxYLDs3dueW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdFbGVtZW50eSBrbGFzeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdFZHl0dWogZWxlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdEb2RhaiBrbGFzxJknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdEb2RhaiBlbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdEb2RhaiBlbGVtZW50IGthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnRG9kYWoga2xhc8SZIGthdGFsb2d1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLbGFzYSBrYXRhbG9ndSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0VkeXR1aiBlbGVtZW50IGthdGFsb2d1JzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdLb21lbnRhcnogMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1V0d8OzcnogaSB6YXJ6xIVkemFqIGthdGFsb2dpZW0gZ8WCw7N3bnltLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnRGVmaW5pdWoga29tZW50YXJ6IDIgZG8ga2F0YWxvZ3UgZ8WCw7N3bmVnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnRGVmaW5pdWplIFVSTCBkbyBKUyBDb2xvciBQaWNrZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdSZWplc3RyYWNqYSBtb2R1xYJ1IGZyb250ZW5kIGRvIGtvbmZpZ3VyYWNqaSBtb2R1xYJ1IEFkbWluR2VuZXJhbENhdGFsb2cgdyBwYW5lbHUgYWRtaW5pc3RyYXRvcmEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ0thdGFsb2cgZ8WCw7N3bnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyeSBkbyBwcnp5a8WCYWRvd2VnbyBrb21lbnRhcnphIDIgYXRyeWJ1dMOzdyBrYXRhbG9ndSBnZW5lcmFsbmVnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJ5IGRsYSBwcnp5a8WCYWRvd3ljaCBncnVwIHVwcmF3bmllxYQgYXRyeWJ1dMOzdyBrYXRhbG9ndSBnxYLDs3duZWdvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9CUl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY2lvbmFsaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VyZW5jaWFtZW50byBkbyBDYXTDoWxvZ28gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdJdGVucyBuYSBDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnQWx0ZXJhciBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ0FkaWNpb25hciBDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEl0ZW0nfSA9ICdBZGljaW9uYXIgSXRlbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnQWRpY2lvbmFyIEl0ZW0gYW8gQ2F0w6Fsb2dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnQWRpY2lvbmFyIENsYXNzZSBhbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ0NsYXNzZSBkbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICdBbHRlcmFyIEl0ZW0gZG8gQ2F0w6Fsb2dvJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICdDb21lbnTDoXJpbyAyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnQ3JpYXIgZSBnZXJlbmNpYXIgbyBDYXTDoWxvZ28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEZWZpbmEgbyBjb21lbnTDoXJpbyAyIGRvIGNhdMOhbG9nbyBnZW7DqXJpY28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICdEZWZpbmUgbyBjYW1pbmhvIFVSTCBKUyBDb2xvciBQaWNrZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdNw7NkdWxvIGRlIHJlZ2lzdG8gZGEgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBBZG1pbkdlbmVyYWxDYXRhbG9nIG5hIMOhcmVhIGFkbWluaXN0cmF0aXZhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdDYXTDoWxvZ28gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIHBhcmEgbyBjb21lbnTDoXJpbyBkZSBleGVtcGxvIDIgZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcsOibWV0cm9zIGRvIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwdF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY2lvbmFsaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VzdMOjbyBkbyBDYXTDoWxvZ28gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICdJdGVtcyBuYSBDbGFzc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnRWRpdGFyIEl0ZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnQWRpY2lvbmFyIENsYXNzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0FkaWNpb25hciBJdGVtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBZGljaW9uYXIgSXRlbSBhbyBDYXTDoWxvZ28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdBZGljaW9uYXIgQ2xhc3NlIGFvIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnQ2xhc3NlIGRvIENhdMOhbG9nbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ0VkaXRhciBJdGVtIGRvIENhdMOhbG9nbyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnQ29tZW50w6FyaW8gMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyaWFyIGUgZ2VyaXIgbyBDYXTDoWxvZ28gR2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICdEZWZpbmlyIG8gQ2F0w6Fsb2dvIEdlcmFsIGNvbWVudMOhcmlvIDIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICdEZWZpbmlyIG8gVVJMIHBhcmEgbyBjYW1pbmhvIGRvIEpTIENvbG9yIFBpY2tlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTcOzZHVsbyBkZSByZWdpc3RvIGRhIGludGVyZmFjZSBwYXJhIGEgY29uZmlndXJhw6fDo28gQWRtaW5HZW5lcmFsQ2F0YWxvZyBuYSDDoXJlYSBhZG1pbmlzdHJhdGl2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnQ2F0w6Fsb2dvIEdlcmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBwYXJhIG8gY29tZW50w6FyaW8gZGUgZXhlbXBsbyAyIGRvcyBhdHJpYnV0b3MgZG8gY2F0w6Fsb2dvIGdlcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXLDom1ldHJvcyBwYXJhIG9zIGdydXBvcyBkZSBwZXJtaXNzw6NvIGRlIGV4ZW1wbG8gZG9zIGF0cmlidXRvcyBkbyBjYXTDoWxvZ28gZ2VyYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpyb19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVuY3Rpb25hbGl0YXRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICdFZGl0YXJlIGVsZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnQWRhdWfEgyBlbGVtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdBZGF1Z2EgYXJ0aWNvbCBpbiBjYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0NyZWF6YSBzaSBhZG1pbmlzdHJlYXphIENhdGFsb2d1bCBHZW5lcmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJyc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn0KTRg9C90LrRhtC40L7QvdCw0LvRjNC90L7RgdGC0YwnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0J7QsdGJ0LjQvCDQutCw0YLQsNC70L7Qs9C+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICfQrdC70LXQvNC10L3RgtGLINCyINC60LvQsNGB0YHQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICfQmNC30LzQtdC90LjRgtGMINGN0LvQtdC80LXQvdGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0LrQu9Cw0YHRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ9CU0L7QsdCw0LLQuNGC0Ywg0Y3Qu9C10LzQtdC90YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ9CU0L7QsdCw0LLQu9C10L3QuNC1INGN0LvQtdC80LXQvdGC0LAg0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ9CU0L7QsdCw0LLQu9C10L3QuNC1INC60LvQsNGB0YHQsCDQutCw0YLQsNC70L7Qs9CwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfQmtC70LDRgdGBINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICfQn9GA0LDQstC60LAg0Y3Qu9C10LzQtdC90YLQsCDQutCw0YLQsNC70L7Qs9CwJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfQodC+0LfQtNCw0L3QuNC1INC4INGD0L/RgNCw0LLQu9C10L3QuNC1INCe0LHRidC40Lwg0LrQsNGC0LDQu9C+0LPQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ9CX0LDQtNCw0LXRgiDQv9GD0YLRjCBVUkwgSlMgQ29sb3IgUGlja2VyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnTW9kdWxlIHJlZ2lzdHJhdGlvbiDQtNC70Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IEFkbWluR2VuZXJhbENhdGFsb2cg0LIg0L/QsNC90LXQu9C4INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ9Ce0LHRidC40Lkg0LrQsNGC0LDQu9C+0LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9CU0L7QsdCw0LLQu9C10L3QuNC1INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0LPQviDQutC+0LzQvNC10L3RgtCw0YDQuNGPINC6INCw0YLRgNC40LHRg9GC0LDQvCDQntCx0YnQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Ysg0LTQu9GPINC/0YDQuNC80LXRgNC90YvRhSDQs9GA0YPQv9C/0L7QstGL0YUg0L/RgNCw0LIg0LTQu9GPINCw0YLRgNC40LHRg9GC0L7QsiDQntCx0YnQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpza19TS19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzcl9DeXJsX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICfQpNGD0L3QutGG0LjQvtC90LDQu9C90L7RgdGCJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLRmdCw0ZrQtSDQntC/0YjRgtC40Lwg0LrQsNGC0LDQu9C+0LPQvtC8JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0l0ZW1zIGluIENsYXNzJ30gPSAn0KHRgtCw0LLQutC1INGDINC60LvQsNGB0LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAn0KPRgNC10LTQuCDRgdGC0LDQstC60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAn0JTQvtC00LDRmCDQutC70LDRgdGDJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAn0JTQvtC00LDRmCDRgdGC0LDQstC60YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgSXRlbSd9ID0gJ9CU0L7QtNCw0LLQsNGa0LUg0YHRgtCw0LLQutC1INGDINC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAn0JTQvtC00LDQstCw0ZrQtSDQutC70LDRgdC1INGDINC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICfQmtC70LDRgdCwINC60LDRgtCw0LvQvtCz0LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICfQo9GA0LXQtNC4INGB0YLQsNCy0LrRgyDQutCw0YLQsNC70L7Qs9CwJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICfQodGC0LDRgtGD0YEg0LjQvdGG0LjQtNC10L3RgtCwINGD0L/QvtC30L7RgNC10ZrQsCDQvdC1INC80L7QttC1INGB0LUg0L/QvtGB0YLQsNCy0LjRgtC4INC90LAg0L3QtdCy0LDQttC10ZvQuC4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICfQmtC+0LzQtdC90YLQsNGAIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICfQmtGA0LXQuNGA0LDRmtC1INC4INGD0L/RgNCw0LLRmdCw0ZrQtSDQvtC/0YjRgtC40Lwg0LrQsNGC0LDQu9C+0LPQvtC8Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAn0JTQtdGE0LjQvdC40YjQtSDQutC+0LzQtdC90YLQsNGAIDIg0YMg0L7Qv9GI0YLQtdC8INC60LDRgtCw0LvQvtCz0YMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICfQlNC10YTQuNC90LjRiNC1IFVSTCDQv9GD0YLQsNGa0YMg0LfQsCBKUyDQsdC40YDQsNGHINCx0L7RmNC1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn0KDQtdCz0LjRgdGC0YDQsNGG0LjRmNCwINC/0YDQuNGB0YLRg9C/0L3QvtCzINC80L7QtNGD0LvQsCDQt9CwIEFkbWluR2VuZXJhbENhdGFsb2cg0YMg0LjQvdGC0LXRgNGE0LXRmNGB0YMg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn0J7Qv9GI0YLQuCDQutCw0YLQsNC70L7Qsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAn0J/QsNGA0LDQvNC10YLRgNC4INC30LAg0L/RgNC40LzQtdGAINC60L7QvNC10L3RgtCw0YDQsCAyINCw0YLRgNC40LHRg9GC0LAg0L7Qv9GI0YLQtdCzINC60LDRgtCw0LvQvtCz0LAuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ9Cf0LDRgNCw0LzQtdGC0YDQuCDQt9CwINC/0YDQuNC80LXRgCDQs9GA0YPQv9C1INC30LAg0LTQvtC30LLQvtC70LUg0LDRgtGA0LjQsdGD0YLQsCDQvtC/0YjRgtC10LMg0LrQsNGC0LDQu9C+0LPQsC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVybWlzc2lvbiBHcm91cCd9ID0gJ9CT0YDRg9C/0LAg0L/RgNC40YHRgtGD0L/QsCc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzcl9MYXRuX0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Z1bmN0aW9uYWxpdHknfSA9ICdGdW5rY2lvbmFsbm9zdCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdVcHJhdmxqYW5qZSBPcMWhdGltIGthdGFsb2dvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ1N0YXZrZSB1IGtsYXNpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgSXRlbSd9ID0gJ1VyZWRpIHN0YXZrdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2xhc3MnfSA9ICdEb2RhaiBrbGFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJ0RvZGFqIHN0YXZrdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnRG9kYXZhbmplIHN0YXZrZSB1IGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICdEb2RhdmFuamUga2xhc2UgdSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLbGFzYSBrYXRhbG9nYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ1VyZWRpIHN0YXZrdSBrYXRhbG9nYSc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnU3RhdHVzIGluY2lkZW50YSB1cG96b3JlbmphIG5lIG1vxb5lIHNlIHBvc3Rhdml0aSBuYSBuZXZhxb5lxIdpLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJ0tvbWVudGFyIDInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdLcmVpcmFuamUgaSB1cHJhdmxqYW5qZSBvcMWhdGltIGthdGFsb2dvbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJ0RlZmluacWhZSBrb21lbnRhciAyIHUgb3DFoXRlbSBrYXRhbG9ndS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJ0RlZmluacWhZSBVUkwgcHV0YW5qdSB6YSBKUyBiaXJhxI0gYm9qZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJhY2lqYSBwcmlzdHVwbm9nIG1vZHVsYSB6YSBBZG1pbkdlbmVyYWxDYXRhbG9nIHUgaW50ZXJmZWpzdSBhZG1pbmlzdHJhdG9yYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnT3DFoXRpIGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyaSB6YSBwcmltZXIga29tZW50YXJhIDIgYXRyaWJ1dGEgb3DFoXRlZyBrYXRhbG9nYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnUGFyYW1ldHJpIHphIHByaW1lciBncnVwZSB6YSBkb3p2b2xlIGF0cmlidXRhIG9wxaF0ZWcga2F0YWxvZ2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICdHcnVwYSBwcmlzdHVwYSc7CgoKICAgIHB1c2ggQHsgJFNlbGYtPntKYXZhU2NyaXB0U3RyaW5nc30gLy8gW10gfSwgKAogICAgJ0NhbmNlbCcsCiAgICAnV2FybmluZycsCiAgICAnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicsCiAgICApOwoKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzdl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnRnVua3Rpb25hbGl0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnSGFudGVyYSBncnVuZGthdGFsb2cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAnTMOkZ2cgdGlsbCBrYXRhbG9ncG9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ID0gJ0zDpGdnIHRpbGwga2xhc3MgaSBrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhdGFsb2cgQ2xhc3MnfSA9ICdLYXRhbG9na2xhc3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ1NrYXBhIG9jaCBoYW50ZXJhIGdydW5ka2F0YWxvZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kbW9kdWwgZsO2ciBBZG1pbkdlbmVyYWxDYXRhbG9nLWluc3TDpGxsbmluZ2FyIGkgYWRtaW5hcmVhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnR3J1bmRrYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cmFyIGbDtnIgZXhlbXBlbGtvbW1lbnRhciAyIGkgYXR0cmlidXRlbiBmw7ZyIGdydW5ka2F0YWxvZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdQYXJhbWV0cmFyIGbDtnIgZXhlbXBlbCBww6UgYmVow7ZyaWdoZXRzZWdydXBwZXIgaSBncnVuZGthdGFsb2dlbnMgYXR0cmlidXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpzd19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnVXRlbmRhamknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnVXNpbWFtaXppIHdhIGthdGFsb2dpIHdhIHVqdW1sYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdPbmdlemEga2lwZW5nZWxlIHlhIGthdGFsb2dpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnT25nZXphIHRhYmFrYSBsYSBrYXRhbG9naSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnVGFiYWthIGxhIGthdGFsb2dpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQ2F0YWxvZyBJdGVtJ30gPSAnJzsKCiAgICAjIEpTIEZpbGU6IElUU00uR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50IDInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIGFuZCBtYW5hZ2UgdGhlIEdlbmVyYWwgQ2F0YWxvZy4nfSA9ICdUZW5nZW5lemEgbmEgc2ltYW1pYSBLYXRhbG9naSB5YSB1anVtbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnVXNhamlsaSB3YSBtb2R1bGkgeWEgbWF6aW5naXJhIHlhIG1iZWxlIGt3YSB1c2FuaWRpIHdhIGthdGFsb2dpIHlhIHVqdW1sYSB5YSBtc2ltYW1pemkga2F0aWthIGVuZW8gbGEgdXNpbWFtaXppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdLYXRhbG9naSB5YSB1anVtbGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ1ZpZ2V6byBrd2EgbWZhbm8gTWFvbmkgMiB5YSBzaWZhIHphIGthdGFsb2dpIHphIHVqdW1sYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnVmlnZXpvIGt3YSBtZmFubyBydWh1c2EgemEgdmlrdW5kaSBrd2Egc2lmYSB6YSBrYXRhbG9naSB6YSB1anVtbGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp0aF9USF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn4Lif4Lix4LiH4LiB4LmM4LiK4Lix4LmI4LiZ4LiB4Liy4Lij4LiX4Liz4LiH4Liy4LiZJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ+C4geC4suC4o+C4iOC4seC4lOC4geC4suC4o+C5geC4hOC5h+C4leC4leC4suC4peC5h+C4reC4geC4l+C4seC5iOC4p+C5hOC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfguYDguJ7guLTguYjguKHguKPguLLguKLguIHguLLguKPguYHguITguYfguJXguJXguLLguKXguYfguK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfguYDguJ7guLTguYjguKHguKvguYnguK3guIfguYHguITguYfguJXguJXguLLguKXguYfguK3guIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+C4q+C5ieC4reC4h+C5geC4hOC5h+C4leC4leC4suC4peC5h+C4reC4gSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn4Liq4Lij4LmJ4Liy4LiH4LmB4Lil4Liw4LiI4Lix4LiU4LiB4Liy4Lij4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiB4LiX4Lix4LmI4Lin4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAn4LiB4Liy4Lij4Lil4LiH4LiX4Liw4LmA4Lia4Li14Lii4LiZ4LmC4Lih4LiU4Li54LilIEZyb250ZW5kIOC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C4geC4s+C4q+C4meC4lOC4hOC5iOC4suC4guC4reC4hyBBZG1pbkdlbmVyYWxDYXRhbG9nIOC5g+C4meC4nuC4t+C5ieC4meC4l+C4teC5iOC4guC4reC4h+C5geC4reC4lOC4oeC4tOC4mSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfguYHguITguYfguJXguJXguLLguKXguYfguK3guIHguJfguLHguYjguKfguYTguJsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgY29tbWVudCAyIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+C4nuC4suC4o+C4suC4oeC4tOC5gOC4leC4reC4o+C5jOC4quC4s+C4q+C4o+C4seC4muC4leC4seC4p+C4reC4ouC5iOC4suC4h+C4hOC4p+C4suC4oeC4hOC4tOC4lOC5gOC4q+C5h+C4meC4l+C4teC5iDIg4LiC4Lit4LiH4LmB4LiE4LmH4LiV4LiV4Liy4Lil4LmH4Lit4LiB4LmB4Lit4LiV4LiX4Lij4Li04Lia4Li04Lin4LiV4LmM4LiX4Lix4LmI4Lin4LmE4LibJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ+C4nuC4suC4o+C4suC4oeC4tOC5gOC4leC4reC4o+C5jOC4quC4s+C4q+C4o+C4seC4muC4leC4seC4p+C4reC4ouC5iOC4suC4h+C4geC4peC4uOC5iOC4oeC4l+C4teC5iOC5hOC4lOC5ieC4o+C4seC4muC4reC4meC4uOC4jeC4suC4leC4guC4reC4h+C5geC4reC4leC4l+C4o+C4tOC4muC4tOC4p+C4leC5jOC5geC4hOC5h+C4leC4leC4suC4peC5h+C4reC4geC4l+C4seC5iOC4p+C5hOC4myc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp0cl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnxLDFn2xldnNlbGxpayc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICdHZW5lbCBLYXRhbG9nIFnDtm5ldGltaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdLYXRhbG9nIMOWZ2VzaSBFa2xleWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZyBTxLFuxLFmxLEgRWtsZXlpbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnS2F0YWxvZyBTxLFuxLFmxLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBDYXRhbG9nIEl0ZW0nfSA9ICcnOwoKICAgICMgSlMgRmlsZTogSVRTTS5HZW5lcmFsQ2F0YWxvZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLid9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnQgMid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ0dlbmVsIEthdGFsb2cgecO2bmV0aW1pLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1nDtm5ldGltIGLDtmzDvG3DvG5la2kgQWRtaW5HZW5lcmFsQ2F0YWxvZyBheWFybGFyxLEgacOnaW4gw7ZuecO8eiBtb2TDvGwga2F5ZMSxLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICdHZW5lbCBLYXRhbG9nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICdHZW5lbCBrYXRhbG9nIMO2em5pdGVsaWtsZXJpbmluIGlraW5jaSDDtnJuZWsgeW9ydW11bnVuIHBhcmFtZXRyZWxlcmkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJ0dlbmVsIGthdGFsb2cgw7Z6bml0ZWxpa2xlcmluaW4gw7ZybmVrIGl6aW4gZ3J1cGxhcsSxbsSxbiBwYXJhbWV0cmVsZXJpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp1a19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn0KTRg9C90LrRhtGW0L7QvdCw0LvRjNC90ZbRgdGC0YwnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluR2VuZXJhbENhdGFsb2cKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn0JrQtdGA0YPQstCw0L3QvdGPINC30LDQs9Cw0LvRjNC90LjQvCDQutCw0YLQsNC70L7Qs9C+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSXRlbXMgaW4gQ2xhc3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgSXRlbSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gPSAn0JTQvtC00LDRgtC4INC10LvQtdC80LXQvdGCINC60LDRgtCw0LvQvtCz0YMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfQlNC+0LTQsNGC0Lgg0LrQu9Cw0YEg0LrQsNGC0LDQu9C+0LPRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAn0JrQu9Cw0YEg0LrQsNGC0LDQu9C+0LPRgyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn0KHRgtCy0L7RgNC40YLQuCDRliDQutC10YDRg9Cy0LDRgtC4INC30LDQs9Cw0LvRjNC90LjQvCDQutCw0YLQsNC70L7Qs9C+0LwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lIHRoZSBnZW5lcmFsIGNhdGFsb2cgY29tbWVudCAyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbkdlbmVyYWxDYXRhbG9nIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICdGcm9udGVuZCDQvNC+0LTRg9C70Ywg0YDQtdGU0YHRgtGA0LDRhtGW0Zcg0LIg0LfQvtC90ZYg0LDQtNC80ZbQvdGW0YHRgtGA0YPQstCw0L3QvdGPINC00LvRjyDQutC+0L3RhNGW0LPRg9GA0LDRhtGW0ZcgQWRtaW5HZW5lcmFsQ2F0YWxvZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cnfSA9ICfQl9Cw0LPQsNC70YzQvdC4INC60LDRgtCw0LvQvtCzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LTQu9GPINC/0YDQuNC60LvQsNC00YMg0LrQvtC80LXQvdGC0LDRgCAyINCw0YLRgNC40LHRg9GC0ZbQsiDQt9Cw0LPQsNC70YzQvdC+0LPQviDQutCw0YLQsNC70L7Qs9GDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfQn9Cw0YDQsNC80LXRgtGA0Lgg0LTQu9GPINC/0YDQuNC60LvQsNC00YMg0LTQvtC30LLQvtC70YMg0LPRgNGD0L8g0LfQsNCz0LDQu9GM0L3QuNGFINCw0YLRgNC40LHRg9GC0ZbQsiDQutCw0YLQsNC70L7Qs9GDLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp2aV9WTl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAnQ2jhu6ljIG7Eg25nJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1F14bqjbiBsw70gZGFuaCBt4bulYyBjaHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICdUaMOqbSBkYW5oIG3hu6VjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIENsYXNzJ30gPSAnVGjDqm0gbOG7m3AgZGFuaCBt4bulYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYXRhbG9nIENsYXNzJ30gPSAnTOG7m3AgZGFuaCBt4bulYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAnVOG6oW8gdsOgIHF14bqjbiBsw70gZGFuaCBt4bulYyBjaHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIFVSTCBKUyBDb2xvciBQaWNrZXIgcGF0aC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ8SQxINuZyBrw70gbcO0LcSRdW4gxJHhu4MgY+G6pXUgaMOsbmggQWRtaW5HZW5lcmFsQ2F0YWxvZyB0cm9uZyBnaWFvIGRp4buHbiBxdeG6o24gdHLhu4snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAnRGFuaCBt4bulYyBjaHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnVGhhbSBz4buRIGNobyBjaMO6IHRow61jaCB0aOG7qSAyIGPhu6dhIHRodeG7mWMgdMOtbmggZGFuaCBt4bulYyBjaHVuZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGV4YW1wbGUgcGVybWlzc2lvbiBncm91cHMgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnVGhhbSBz4buRIGNobyBuaMOzbSBj4bqlcCBwaMOpcCBj4bunYSB0aHXhu5ljIHTDrW5oIGRhbmggbeG7pWMgY2h1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICcnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp6aF9DTl9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn5Yqf6IO9JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ+ebruW9leeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJ+S7peS4i+adoeebruWxnuS6juexuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICfnvJbovpHmnaHnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAn5re75Yqg57G7JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAn5re75Yqg5p2h55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfmt7vliqDnm67lvZXpobnnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfmt7vliqDmlrDnm67lvZXnsbsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+ebruW9leexuyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJ+e8lui+keebruW9lemhueebric7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAn6K2m5ZGK5LqL5Lu254q25oCB5LiN6IO96K6+572u5Li65peg5pWI44CCJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAn5rOo6YeKMic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgYW5kIG1hbmFnZSB0aGUgR2VuZXJhbCBDYXRhbG9nLid9ID0gJ+WIm+W7uuWSjOeuoeeQhuebruW9leOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJ30gPSAn5a6a5LmJ6YCa55So55uu5b2V5rOo6YeKMuOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBVUkwgSlMgQ29sb3IgUGlja2VyIHBhdGguJ30gPSAn5a6a5LmJSlPpopzoibLpgInmi6nlmajnmoTot6/lvoRVUkzjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluR2VuZXJhbENhdGFsb2cgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ+WcqOezu+e7n+euoeeQhuS4reazqOWGjOebruW9leeuoeeQhuaooeWdl0FkbWluR2VuZXJhbENhdGFsb2fnmoTliY3nq6/mqKHlnZfjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBDYXRhbG9nJ30gPSAn55uu5b2VJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIGNvbW1lbnQgMiBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfnm67lvZXlsZ7mgKfmoLfkvost5rOo6YeKMueahOWPguaVsOiuvue9ruOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBwZXJtaXNzaW9uIGdyb3VwcyBvZiB0aGUgZ2VuZXJhbCBjYXRhbG9nIGF0dHJpYnV0ZXMuJ30gPQogICAgICAgICfnm67lvZXlsZ7mgKfmoLfkvost5p2D6ZmQ57uE55qE5Y+C5pWw44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Blcm1pc3Npb24gR3JvdXAnfSA9ICfmnYPpmZDnu4QnOwoKCiAgICBwdXNoIEB7ICRTZWxmLT57SmF2YVNjcmlwdFN0cmluZ3N9IC8vIFtdIH0sICgKICAgICdDYW5jZWwnLAogICAgJ1dhcm5pbmcnLAogICAgJ1dhcm5pbmcgaW5jaWRlbnQgc3RhdGUgY2FuIG5vdCBiZSBzZXQgdG8gaW52YWxpZC4nLAogICAgKTsKCn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp6aF9UV19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGdW5jdGlvbmFsaXR5J30gPSAn5Yqf6IO9JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ+ebrumMhOeuoeeQhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJdGVtcyBpbiBDbGFzcyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEl0ZW0nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENsYXNzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBJdGVtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBDYXRhbG9nIEl0ZW0nfSA9ICfmt7vliqDnm67pjITpoIXnm64nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSA9ICfmt7vliqDmlrDnm67pjITpoZ7liKUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0YWxvZyBDbGFzcyd9ID0gJ+ebrumMhOmhnuWIpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IENhdGFsb2cgSXRlbSd9ID0gJyc7CgogICAgIyBKUyBGaWxlOiBJVFNNLkdlbmVyYWxDYXRhbG9nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudCAyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBhbmQgbWFuYWdlIHRoZSBHZW5lcmFsIENhdGFsb2cuJ30gPSAn5Ym15bu65ZKM566h55CG55uu6YyEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZSB0aGUgZ2VuZXJhbCBjYXRhbG9nIGNvbW1lbnQgMi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgVVJMIEpTIENvbG9yIFBpY2tlciBwYXRoLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgQ2F0YWxvZyd9ID0gJ+ebrumMhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgZXhhbXBsZSBjb21tZW50IDIgb2YgdGhlIGdlbmVyYWwgY2F0YWxvZyBhdHRyaWJ1dGVzLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBleGFtcGxlIHBlcm1pc3Npb24gZ3JvdXBzIG9mIHRoZSBnZW5lcmFsIGNhdGFsb2cgYXR0cmlidXRlcy4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJtaXNzaW9uIEdyb3VwJ30gPSAnJzsKCgogICAgcHVzaCBAeyAkU2VsZi0+e0phdmFTY3JpcHRTdHJpbmdzfSAvLyBbXSB9LCAoCiAgICAnQ2FuY2VsJywKICAgICdXYXJuaW5nJywKICAgICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJywKICAgICk7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluR2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgJE9iamVjdE1hbmFnZXJEaXNhYmxlZCA9IDE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3QKICAgIG15ICRDb25maWdPYmplY3QgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7CiAgICBteSAkUGFyYW1PYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7CiAgICBteSAkTGF5b3V0T2JqZWN0ICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkVmFsaWRPYmplY3QgICAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKTsKICAgIG15ICRHZW5lcmFsQ2F0YWxvZ09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpOwoKICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICBLZXkgICA9PiAnR2VuZXJhbENhdGFsb2c6OkZyb250ZW5kOjpKU0NvbG9yUGlja2VyUGF0aCcsCiAgICAgICAgVmFsdWUgPT4gJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZzo6RnJvbnRlbmQ6OkpTQ29sb3JQaWNrZXJQYXRoJyksCiAgICApOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2F0YWxvZyBpdGVtIGxpc3QKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdJdGVtTGlzdCcgKSB7CiAgICAgICAgbXkgJENsYXNzID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIkNsYXNzIiApIHx8ICcnOwoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBjbGFzcwogICAgICAgIGlmICggISRDbGFzcyApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBQYXJhbSAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICBTdWJhY3Rpb24gPT4gJFNlbGYtPntTdWJhY3Rpb259LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3SXRlbScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGF2YWlsYWJpbGl0eSBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCA9ICRWYWxpZE9iamVjdC0+VmFsaWRMaXN0KCk7CgogICAgICAgICMgZ2V0IGNhdGFsb2cgaXRlbSBsaXN0CiAgICAgICAgbXkgJEl0ZW1JRExpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgIFZhbGlkID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpdGVtIGxpc3QKICAgICAgICBpZiAoICEkSXRlbUlETGlzdCB8fCAhJXskSXRlbUlETGlzdH0gKSB7CiAgICAgICAgICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KCiAgICAgICAgZm9yIG15ICRJdGVtSUQgKCBzb3J0IHsgJEl0ZW1JRExpc3QtPnskYX0gY21wICRJdGVtSURMaXN0LT57JGJ9IH0ga2V5cyAleyRJdGVtSURMaXN0fSApIHsKCiAgICAgICAgICAgICMgZ2V0IGl0ZW0gZGF0YQogICAgICAgICAgICBteSAkSXRlbURhdGEgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGl0ZW0gbGlzdAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3SXRlbUxpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskSXRlbURhdGF9LAogICAgICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZExpc3R7ICRJdGVtRGF0YS0+e1ZhbGlkSUR9IH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBBY3Rpb25PdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25BZGRJdGVtJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBBY3Rpb25PdmVydmlldwogICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25PdmVydmlldycsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY3JlYXRlIG91dHB1dCBzdHJpbmcKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkdlbmVyYWxDYXRhbG9nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkTGF5b3V0T2JqZWN0LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjYXRhbG9nIGl0ZW0gZWRpdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0l0ZW1FZGl0JyApIHsKICAgICAgICBteSAlSXRlbURhdGE7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgICRJdGVtRGF0YXtJdGVtSUR9ID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gIkl0ZW1JRCIgKTsKCiAgICAgICAgIyBhZGQgYSBuZXcgY2F0YWxvZyBpdGVtCiAgICAgICAgaWYgKCAkSXRlbURhdGF7SXRlbUlEfSBlcSAnTkVXJyApIHsKCiAgICAgICAgICAgICMgZ2V0IGNsYXNzCiAgICAgICAgICAgICRJdGVtRGF0YXtDbGFzc30gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAiQ2xhc3MiICk7CgogICAgICAgICAgICAjIHJlZGlyZWN0IHRvIG92ZXJ2aWV3CiAgICAgICAgICAgIGlmICggISRJdGVtRGF0YXtDbGFzc30gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGVkaXQgYW4gZXhpc3RpbmcgY2F0YWxvZyBpdGVtCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGdldCBpdGVtIGRhdGEKICAgICAgICAgICAgbXkgJEl0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtRGF0YXtJdGVtSUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBTZW5kIGRhdGEgdG8gSlMgaWYgdGhlcmUgaXMgYSBzcGVjaWZpYyBzY3JlZW4gKCdXYXJuaW5nJyBpdGVtIGluICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJyBjbGFzcykuCiAgICAgICAgICAgICMgU2VlIGJ1ZyMxNDY4Mi4KICAgICAgICAgICAgaWYgKCAkSXRlbURhdGFSZWYtPntDbGFzc30gZXEgJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnICYmICRJdGVtRGF0YVJlZi0+e05hbWV9IGVxICdXYXJuaW5nJyApIHsKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkFkZEpTRGF0YSgKICAgICAgICAgICAgICAgICAgICBLZXkgICA9PiAnV2FybmluZ0luY2lkZW50U3RhdGUnLAogICAgICAgICAgICAgICAgICAgIFZhbHVlID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGl0ZW0gZGF0YQogICAgICAgICAgICBpZiAoICEkSXRlbURhdGFSZWYgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJUl0ZW1EYXRhID0gJXskSXRlbURhdGFSZWZ9OwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAkSXRlbURhdGF7Q2xhc3N9LAogICAgICAgICAgICAgICAgU3ViYWN0aW9uID0+ICRTZWxmLT57U3ViYWN0aW9ufSwKICAgICAgICAgICAgICAgIEl0ZW1OYW1lICA9PiAkSXRlbURhdGF7TmFtZX0sCiAgICAgICAgICAgICAgICBJdGVtRWRpdCAgPT4gJEl0ZW1EYXRhe0l0ZW1JRH0gZXEgJ05FVycgPyAwIDogMSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIFZhbGlkT3B0aW9uU3RyZwogICAgICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJFZhbGlkT2JqZWN0LT5WYWxpZExpc3QoKTsKICAgICAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKICAgICAgICBteSAkVmFsaWRPcHRpb25TdHJnICA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdWYWxpZElEJywKICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkSXRlbURhdGF7VmFsaWRJRH0gfHwgJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBDbGFzcyAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1FZGl0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlSXRlbURhdGEsCiAgICAgICAgICAgICAgICBWYWxpZE9wdGlvblN0cmcgPT4gJFZhbGlkT3B0aW9uU3RyZywKICAgICAgICAgICAgICAgIEl0ZW1FZGl0ICAgICAgICA9PiAkSXRlbURhdGF7SXRlbUlEfSBlcSAnTkVXJyA/IDAgOiAxLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBlYWNoIHByZWZlcmVuY2VzIHNldHRpbmcKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgICAgICBpZiAoICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpICkgewogICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKSB9OwogICAgICAgIH0KCiAgICAgICAgSVRFTToKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewoKICAgICAgICAgICAgIyBza2lwIGl0ZW1zIHRoYXQgZG9uJ3QgYmVsb25nIHRvIHRoZSBjbGFzcwogICAgICAgICAgICBpZiAoICRQcmVmZXJlbmNlc3skSXRlbX0tPntDbGFzc30gJiYgJFByZWZlcmVuY2VzeyRJdGVtfS0+e0NsYXNzfSBuZSAkSXRlbURhdGF7Q2xhc3N9ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbmV4dCBJVEVNOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGZpbmQgb3V0cHV0IG1vZHVsZQogICAgICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJE1vZHVsZSkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNyZWF0ZSBvYmplY3QgZm9yIHRoaXMgcHJlZmVyZW5jZXMgaXRlbQogICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBzaG93IGFsbCBwYXJhbWV0ZXJzCiAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggR2VuZXJhbENhdGFsb2dEYXRhID0+IHsgJUl0ZW1EYXRhLCAlUGFyYW0gfSApOwogICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewoKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQYXJhbUl0ZW0tPnsnT3B0aW9uJ30gPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgJXsgJFByZWZlcmVuY2VzeyRJdGVtfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAleyRQYXJhbUl0ZW19LAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJFBhcmFtSXRlbS0+e0Jsb2NrfSB8fCAkUHJlZmVyZW5jZXN7JEl0ZW19LT57QmxvY2t9IHx8ICdPcHRpb24nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggJEl0ZW1EYXRhe0NsYXNzfSBlcSAnTkVXJyApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0Q2xhc3NBZGQKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtRWRpdENsYXNzQWRkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRJdGVtRGF0YXtDbGFzc30sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0Q2xhc3NFeGlzdAogICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1FZGl0Q2xhc3NFeGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkSXRlbURhdGF7Q2xhc3N9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQWN0aW9uT3ZlcnZpZXcKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnLAogICAgICAgICk7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbVNhdmUnICkgewogICAgICAgIG15ICVJdGVtRGF0YTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbSAocXcoQ2xhc3MgSXRlbUlEIFZhbGlkSUQgQ29tbWVudCkpIHsKICAgICAgICAgICAgJEl0ZW1EYXRheyRQYXJhbX0gPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW0gKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgZ2V0IG5hbWUgcGFyYW0sIG5hbWUgbXVzdCBiZSBub3QgZW1wdHksIGJ1dCBudW1iZXIgemVybyAoMCkgaXMgYWxsb3dlZAogICAgICAgICRJdGVtRGF0YXtOYW1lfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdOYW1lJyApOwoKICAgICAgICAjIGNoZWNrIGNsYXNzCiAgICAgICAgaWYgKCAkSXRlbURhdGF7Q2xhc3N9IGVxICdORVcnICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgbXkgJFN1Y2Nlc3M7CiAgICAgICAgbXkgJEl0ZW1JRCA9ICRJdGVtRGF0YXtJdGVtSUR9OwogICAgICAgIGlmICggJEl0ZW1EYXRhe0l0ZW1JRH0gZXEgJ05FVycgKSB7CiAgICAgICAgICAgICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgICAgICAgICAgJUl0ZW1EYXRhLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJEl0ZW1JRCA9ICRTdWNjZXNzOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1VcGRhdGUoCiAgICAgICAgICAgICAgICAlSXRlbURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgcHJlZmVyZW5jZXMKICAgICAgICBteSAkR0NEYXRhICAgICAgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoIEl0ZW1JRCA9PiAkSXRlbUlEICk7CiAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgbXkgJE5vdGUgICAgICAgID0gJyc7CgogICAgICAgIGlmICggJENvbmZpZ09iamVjdC0+R2V0KCdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgICAgICVQcmVmZXJlbmNlcyA9ICV7ICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpIH07CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJEl0ZW0gKCBzb3J0IGtleXMgJVByZWZlcmVuY2VzICkgewogICAgICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYyc7CgogICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJE1vZHVsZSkgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIEdlbmVyYWxDYXRhbG9nRGF0YSA9PiAkR0NEYXRhICk7CiAgICAgICAgICAgIGlmIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgQEFycmF5ID0gJFBhcmFtT2JqZWN0LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgJEdldFBhcmFteyAkUGFyYW1JdGVtLT57TmFtZX0gfSA9IFxAQXJyYXk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgISRPYmplY3QtPlJ1bigKICAgICAgICAgICAgICAgICAgICAgICAgR2V0UGFyYW0gPT4gXCVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgSXRlbUlEICAgPT4gJEdDRGF0YS0+e0l0ZW1JRH0sCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkTm90ZSAuPSAkTGF5b3V0T2JqZWN0LT5Ob3RpZnkoIEluZm8gPT4gJE9iamVjdC0+RXJyb3IoKSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQoKICAgICAgICBteSAkQ29udGludWVBZnRlclNhdmUgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAnQ29udGludWVBZnRlclNhdmUnICk7CiAgICAgICAgaWYgKCRDb250aW51ZUFmdGVyU2F2ZSkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249SXRlbUVkaXQ7Q2xhc3M9JEl0ZW1EYXRhe0NsYXNzfTtJdGVtSUQ9JEl0ZW1EYXRhe0l0ZW1JRH0iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlZGlyZWN0IHRvIG92ZXJ2aWV3IGNsYXNzIGxpc3QKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1JdGVtTGlzdDtDbGFzcz0kSXRlbURhdGF7Q2xhc3N9IgogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdDbGFzcycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGNhdGFsb2cgY2xhc3MgbGlzdAogICAgICAgIG15ICRDbGFzc0xpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkNsYXNzTGlzdCgpOwoKICAgICAgICBpZiAoIEB7JENsYXNzTGlzdH0gKSB7CgogICAgICAgICAgICBmb3IgbXkgJENsYXNzICggQHskQ2xhc3NMaXN0fSApIHsKCiAgICAgICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBjbGFzcyBsaXN0CiAgICAgICAgICAgICAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0NsYXNzTGlzdCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIEFjdGlvbkFkZENsYXNzCiAgICAgICAgJExheW91dE9iamVjdC0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbkFkZENsYXNzJywKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkTGF5b3V0T2JqZWN0LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJExheW91dE9iamVjdC0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgbmVlZGVkIHBhcmFtcwogICAgZm9yIG15ICROZWVkZWQgKHF3KCBVc2VySUQgQ29uZmlnSXRlbSApKSB7CiAgICAgICAgZGllICJHb3Qgbm8gJE5lZWRlZCEiIGlmICggISRTZWxmLT57JE5lZWRlZH0gKTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBQYXJhbSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBQYXJhbXMgPSAoKTsKICAgIG15ICRHZXRQYXJhbQogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpLT5HZXRQYXJhbSggUGFyYW0gPT4gJFNlbGYtPntDb25maWdJdGVtfS0+e1ByZWZLZXl9ICk7CgogICAgaWYgKCAhZGVmaW5lZCgkR2V0UGFyYW0pICkgewogICAgICAgICRHZXRQYXJhbSA9IGRlZmluZWQoICRQYXJhbXtHZW5lcmFsQ2F0YWxvZ0RhdGF9LT57ICRTZWxmLT57Q29uZmlnSXRlbX0tPntQcmVmS2V5fSB9ICkKICAgICAgICAgICAgPyAkUGFyYW17R2VuZXJhbENhdGFsb2dEYXRhfS0+eyAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57UHJlZktleX0gfQogICAgICAgICAgICA6ICRTZWxmLT57Q29uZmlnSXRlbX0tPntEYXRhU2VsZWN0ZWR9OwogICAgfQoKICAgIGlmICggISggZGVmaW5lZCAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57QmxvY2t9ICYmICRTZWxmLT57Q29uZmlnSXRlbX0tPntCbG9ja30gKSApIHsKICAgICAgICAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57QmxvY2t9ID0gJ1RleHQnOwogICAgfQoKICAgIGlmICggJFNlbGYtPntDb25maWdJdGVtfS0+e0Jsb2NrfSBlcSAnUGVybWlzc2lvbicgKSB7CiAgICAgICAgJFBhcmFte0RhdGF9ICAgICAgICAgPSB7ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExpc3QoIFZhbGlkID0+IDEgKSB9OwogICAgICAgICRQYXJhbXtQb3NzaWJsZU5vbmV9ID0gMTsKICAgICAgICAkUGFyYW17QmxvY2t9ICAgICAgICA9ICdPcHRpb24nOwogICAgfQoKICAgIHB1c2goCiAgICAgICAgQFBhcmFtcywKICAgICAgICB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU2VsZi0+e0NvbmZpZ0l0ZW19LT57UHJlZktleX0sCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEdldFBhcmFtLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAUGFyYW1zOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJFBhcmFte0dldFBhcmFtfSB9ICkgewogICAgICAgIG15IEBBcnJheSA9IEB7ICRQYXJhbXtHZXRQYXJhbX0tPnskS2V5fSB9OwogICAgICAgIGZvciBteSAkVmFsdWUgKEBBcnJheSkgewoKICAgICAgICAgICAgIyBwcmVmIHVwZGF0ZSBkYgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkUGFyYW17SXRlbUlEfSwKICAgICAgICAgICAgICAgIEtleSAgICA9PiAkS2V5LAogICAgICAgICAgICAgICAgVmFsdWUgID0+ICRWYWx1ZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPntNZXNzYWdlfSA9ICdQcmVmZXJlbmNlcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseSEnOwogICAgcmV0dXJuIDE7Cn0KCnN1YiBFcnJvciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAkU2VsZi0+e0Vycm9yfSB8fCAnJzsKfQoKc3ViIE1lc3NhZ2UgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJFNlbGYtPntNZXNzYWdlfSB8fCAnJzsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKIyBDb21tb24KWyUgVHJhbnNsYXRlKCJGdW5jdGlvbmFsaXR5IikgfCBodG1sICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIkdlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICBbJSBVU0UgSXRlbXNUaXRsZSA9IFN0cmluZyhUcmFuc2xhdGUoIkl0ZW1zIGluIENsYXNzIikpICVdCiAgICBbJSBVU0UgRWRpdFRpdGxlICA9IFN0cmluZyhUcmFuc2xhdGUoIkVkaXQgSXRlbSIpKSAlXQoKICAgIFslIEJyZWFkY3J1bWJQYXRoID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBOYW1lID0+IFRyYW5zbGF0ZSgnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnKSwKICAgICAgICAgICAgICAgIExpbmsgPT4gJ0FkbWluR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICB9LAogICAgICAgIF07CgogICAgICAgIElGIERhdGEuQ2xhc3MgJiYgRGF0YS5DbGFzcyA9PSAnTkVXJzsKCiAgICAgICAgICAgIEJyZWFkY3J1bWJQYXRoLnB1c2goewogICAgICAgICAgICAgICAgTmFtZSA9PiBUcmFuc2xhdGUoJ0FkZCBDbGFzcycpLAogICAgICAgICAgICB9KTsKCiAgICAgICAgRUxTSUYgRGF0YS5DbGFzczsKCiAgICAgICAgICAgIENsYXNzVVJJID0gRGF0YS5DbGFzczsKCiAgICAgICAgICAgIEJyZWFkY3J1bWJQYXRoLnB1c2goewogICAgICAgICAgICAgICAgTmFtZSA9PiBJdGVtc1RpdGxlLmFwcGVuZCggJzogJywgRGF0YS5DbGFzcyApLAogICAgICAgICAgICAgICAgTGluayA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZztTdWJhY3Rpb249SXRlbUxpc3Q7Q2xhc3M9JyBfIENsYXNzVVJJLAogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIElGIERhdGEuU3ViYWN0aW9uICYmIERhdGEuU3ViYWN0aW9uID09ICdJdGVtRWRpdCc7CiAgICAgICAgICAgICAgICBCcmVhZGNydW1iUGF0aC5wdXNoKHsKICAgICAgICAgICAgICAgICAgICBOYW1lID0+IERhdGEuSXRlbUVkaXQgPyBFZGl0VGl0bGUuYXBwZW5kKCAnOiAnLCBEYXRhLkl0ZW1OYW1lICkgOiBUcmFuc2xhdGUoJ0FkZCBJdGVtJyksCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIEVORDsKCiAgICAgICAgRU5EOwogICAgJV0KCiAgICBbJSBJTkNMVURFICJCcmVhZGNydW1iLnR0IiBQYXRoID0gQnJlYWRjcnVtYlBhdGggJV0KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQWN0aW9ucyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSdDb250ZW50Jz4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZEl0ZW0iKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9ImdldCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJJdGVtRWRpdCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3MiIHZhbHVlPSJbJSBEYXRhLkNsYXNzIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSXRlbUlEIiB2YWx1ZT0iTkVXIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciBDcmVhdGUiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlslIFRyYW5zbGF0ZSgiQWRkIikgfCBodG1sICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aSBjbGFzcz0iZmEgZmEtcGx1cy1zcXVhcmUiPjwvaT5bJSBUcmFuc2xhdGUoIkFkZCBDYXRhbG9nIEl0ZW0iKSB8IGh0bWwgJV08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGRJdGVtIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uQWRkQ2xhc3MiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9ImdldCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJbJSBFbnYoIkFjdGlvbiIpICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJJdGVtRWRpdCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSXRlbUlEIiB2YWx1ZT0iTkVXIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDbGFzcyIgdmFsdWU9Ik5FVyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIgQ3JlYXRlIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIkFkZCIpIHwgaHRtbCAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgQ2F0YWxvZyBDbGFzcyIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZENsYXNzIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0NsYXNzIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDYXRhbG9nIENsYXNzIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdDbGFzc0xpc3QiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFzQmxvY2siICBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249SXRlbUxpc3Q7Q2xhc3M9WyUgRGF0YS5DbGFzcyB8IHVyaSAlXSI+WyUgRGF0YS5DbGFzcyB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdDbGFzc0xpc3QiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3Q2xhc3MiKSAlXQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdJdGVtIikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJXNjBwYyI+WyUgVHJhbnNsYXRlKCJOYW1lIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2VudGVyIj5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdJdGVtTGlzdCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbJSBJRiBEYXRhLlZhbGlkSUQgIT0gMSVdY2xhc3M9IkludmFsaWQiWyUgRU5EICVdPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1JdGVtRWRpdDtJdGVtSUQ9WyUgRGF0YS5JdGVtSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJDZW50ZXIiPlslIFRyYW5zbGF0ZShEYXRhLlZhbGlkKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdJdGVtTGlzdCIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdJdGVtIikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkl0ZW1FZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJS0KICAgICAgICAgICAgICAgIElGIERhdGEuQ2xhc3MgJiYgRGF0YS5DbGFzcyA9PSAnTkVXJzsKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUoIkFkZCBDYXRhbG9nIENsYXNzIikgfCBodG1sOwogICAgICAgICAgICAgICAgRUxTSUYgRGF0YS5JdGVtRWRpdDsKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUoIkVkaXQgQ2F0YWxvZyBJdGVtIikgfCBodG1sOwogICAgICAgICAgICAgICAgRUxTRTsKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUoIkFkZCBDYXRhbG9nIEl0ZW0iKSB8IGh0bWw7CiAgICAgICAgICAgICAgICBFTkQ7CiAgICAgICAgICAgICAgICAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0iZ2V0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJJdGVtU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikl0ZW1JRCIgdmFsdWU9IlslIERhdGEuSXRlbUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNvbnRpbnVlQWZ0ZXJTYXZlIiBpZD0iQ29udGludWVBZnRlclNhdmUiIHZhbHVlPSIiLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkl0ZW1FZGl0Q2xhc3NBZGQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJDbGFzc0RzYyI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIkNhdGFsb2cgQ2xhc3MiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNsYXNzIiBpZD0iQ2xhc3NEc2MiIHZhbHVlPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQiIG1heGxlbmd0aD0iMTAwIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2xhc3NEc2NFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ2xhc3NEc2NTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJdGVtRWRpdENsYXNzQWRkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSXRlbUVkaXRDbGFzc0V4aXN0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2F0YWxvZyBDbGFzcyIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNsYXNzIiB2YWx1ZT0iWyUgRGF0YS5DbGFzcyB8IGh0bWwgJV0iPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSXRlbUVkaXRDbGFzc0V4aXN0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTmFtZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIk5hbWUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCIgbWF4bGVuZ3RoPSIxMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiID48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSW5wdXRLZXkiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMTAwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dEtleSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8YnIvPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiAoRGF0YS5EZXNjKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPihbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0pPC9lbT4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgRU5EICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZXh0QXJlYSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06PGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgWyUgSUYgKERhdGEuRGVzYykgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbT4oWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdKTwvZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIEVORCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHJvd3M9IlslIERhdGEuUm93cyB8IGh0bWwgJV0iIGNvbHM9IlslIERhdGEuQ29scyB8IGh0bWwgJV0iPlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVGV4dEFyZWEiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIChEYXRhLkRlc2MpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0+KFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXSk8L2VtPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk9wdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdHlwZT0iZmlsZSIgc2l6ZT0iMzAiIGNsYXNzPSJmaXhlZCIvPjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiPlslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVXBsb2FkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFzc3dvcmQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlBhc3N3b3JkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29sb3JQaWNrZXIiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjxici8+CiAgICAgICAgICAgICAgICAgICAgICAgIFslIElGIChEYXRhLkRlc2MpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0+KFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXSk8L2VtPgogICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBkYXRhLWpzY29sb3I9IntiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoMjQ1LCAyNDUsIDI0NSknLCBib3JkZXJDb2xvcjogJ3JnYigyMDEsIDIwMSwgMjAxKScsIGJvcmRlclJhZGl1czonMCd9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbG9yUGlja2VyIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iVmFsaWRJRCI+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkNvbW1lbnQiIGlkPSJDb21tZW50IiB2YWx1ZT0iWyUgRGF0YS5Db21tZW50IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBJRiAoRGF0YS5DbGFzcyAmJiBEYXRhLkNsYXNzID09ICdORVcnKSB8fCBEYXRhLkl0ZW1JRCA9PSAnTkVXJyAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmFtZT0iU3VibWl0IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iPlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRUxTRSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmFtZT0iU3VibWl0QW5kQ29udGludWUiIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFByaW1hcnkiIGlkPSJTdWJtaXRBbmRDb250aW51ZSIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU3VibWl0Ij48c3Bhbj5bJSBUcmFuc2xhdGUoIlNhdmUiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJvciIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmFtZT0iU3VibWl0IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQcmltYXJ5IiBpZD0iU3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiPjxzcGFuPlslIFRyYW5zbGF0ZSgiU2F2ZSBhbmQgZmluaXNoIikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249SXRlbUxpc3Q7Q2xhc3M9WyUgRGF0YS5DbGFzcyAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBFTkQgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJdGVtRWRpdCIpICVdCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlldyIpICVdCg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWluJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cgLSBnZW5lcmFsIGNhdGFsb2cgbGliCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkR2VuZXJhbENhdGFsb2dPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBsb2FkIGdlbmVyYXRvciBwcmVmZXJlbmNlcyBtb2R1bGUKICAgIG15ICRHZW5lcmF0b3JNb2R1bGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ0dlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlc01vZHVsZScpCiAgICAgICAgfHwgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzo6UHJlZmVyZW5jZXNEQic7CiAgICBpZiAoICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmUoJEdlbmVyYXRvck1vZHVsZSkgKSB7CiAgICAgICAgJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0gPSAkR2VuZXJhdG9yTW9kdWxlLT5uZXcoJVBhcmFtKTsKICAgIH0KCiAgICAjIGRlZmluZSBjYWNoZSBzZXR0aW5ncwogICAgJFNlbGYtPntDYWNoZVR5cGV9ID0gJ0dlbmVyYWxDYXRhbG9nJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAzOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIENsYXNzTGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgcmVmZXJlbmNlIG9mIGFsbCBnZW5lcmFsIGNhdGFsb2cgY2xhc3NlcwoKICAgIG15ICRBcnJheVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NMaXN0KCk7Cgo9Y3V0CgpzdWIgQ2xhc3NMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIERJU1RJTkNUKGdlbmVyYWxfY2F0YWxvZ19jbGFzcykgJwogICAgICAgICAgICAuICdGUk9NIGdlbmVyYWxfY2F0YWxvZyBPUkRFUiBCWSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MnLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBDbGFzc0xpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQENsYXNzTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICAjIGNhY2hlIHRoZSByZXN1bHQKICAgIG15ICRDYWNoZUtleSA9ICdDbGFzc0xpc3QnOwogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgIFZhbHVlID0+IFxAQ2xhc3NMaXN0LAogICAgKTsKCiAgICByZXR1cm4gXEBDbGFzc0xpc3Q7Cn0KCj1oZWFkMiBDbGFzc1JlbmFtZSgpCgpyZW5hbWUgYSBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKCiAgICBteSAkVHJ1ZSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OlN0YXRlJywKICAgICAgICBDbGFzc05ldyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICk7Cgo9Y3V0CgpzdWIgQ2xhc3NSZW5hbWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3NPbGQgQ2xhc3NOZXcpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzT2xkIENsYXNzTmV3KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsU3BhY2VzICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtDbGFzc05ld30gZXEgJFBhcmFte0NsYXNzT2xkfTsKCiAgICAjIGNoZWNrIGlmIG5ldyBjbGFzcyBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDbGFzc05ld30gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRBbHJlYWR5RXhpc3RzID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFscmVhZHlFeGlzdHMgPSAxOwogICAgfQoKICAgIGlmICgkQWxyZWFkeUV4aXN0cykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgcmVuYW1lIGNsYXNzICRQYXJhbXtDbGFzc09sZH0hIE5ldyBjbGFzc25hbWUgYWxyZWFkeSBleGlzdHMuIgogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKCiAgICAjIHJlbmFtZSBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgZ2VuZXJhbF9jYXRhbG9nIFNFVCBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/ICcKICAgICAgICAgICAgLiAnV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2xhc3NOZXd9LCBcJFBhcmFte0NsYXNzT2xkfSBdLAogICAgKTsKfQoKPWhlYWQyIEl0ZW1MaXN0KCkKCnJldHVybnMgYSBsaXN0IGFzIGEgaGFzaCByZWZlcmVuY2Ugb2Ygb25lIGdlbmVyYWwgY2F0YWxvZyBjbGFzcwoKICAgIG15ICRIYXNoUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICAgID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICAgICBWYWxpZCAgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEKICAgICAgICBQcmVmZXJlbmNlcyAgID0+IHsgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IHt9CiAgICAgICAgICAgIFBlcm1pc3Npb24gPT4gMiwgICAgICAgICAgICAgICAgICAgICAjIG9yIHdoYXRldmVyIHByZWZlcmVuY2VzIGNhbiBiZSB1c2VkCiAgICAgICAgfSwKICAgICk7Cgo9Y3V0CgpzdWIgSXRlbUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3MhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWUKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICBteSAkUHJlZmVyZW5jZXNDYWNoZUtleSA9ICcnOwogICAgbXkgJFByZWZlcmVuY2VzVGFibGUgICAgPSAnJzsKICAgIG15ICRQcmVmZXJlbmNlc1doZXJlICAgID0gJyc7CiAgICBteSBAUHJlZmVyZW5jZXNCaW5kOwoKICAgICMgaGFuZGxlIGdpdmVuIHByZWZlcmVuY2VzCiAgICBpZiAoIGV4aXN0cyAkUGFyYW17UHJlZmVyZW5jZXN9ICYmIHJlZiAkUGFyYW17UHJlZmVyZW5jZXN9IGVxICdIQVNIJyApIHsKCiAgICAgICAgJFByZWZlcmVuY2VzVGFibGUgPSAnLCBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMnOwogICAgICAgIG15IEBXaGVyZXM7CgogICAgICAgICMgYWRkIGFsbCBwcmVmZXJlbmNlcyBnaXZlbiB0byB3aGVyZS1jbGF1c2UKICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAleyAkUGFyYW17UHJlZmVyZW5jZXN9IH0gKSB7CgogICAgICAgICAgICBpZiAoIHJlZiggJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9ICkgbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtQcmVmZXJlbmNlc30tPnskS2V5fSA9IFsgJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9IF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1c2ggQFdoZXJlcywgJyhwcmVmX2tleSA9ID8gQU5EIHByZWZfdmFsdWUgSU4gKCcKICAgICAgICAgICAgICAgIC4gam9pbiggJywgJywgbWFwIHsnPyd9IEB7ICRQYXJhbXtQcmVmZXJlbmNlc30tPnskS2V5fSB9ICkKICAgICAgICAgICAgICAgIC4gJykpJzsKCiAgICAgICAgICAgIHB1c2ggQFByZWZlcmVuY2VzQmluZCwgXCRLZXksIG1hcCB7IFwkXyB9IEB7ICRQYXJhbXtQcmVmZXJlbmNlc30tPnskS2V5fSB9OwoKICAgICAgICAgICAgIyBhZGQgZnVuY3Rpb25hbGl0eSBsaXN0IHRvIGNhY2hlIGtleQogICAgICAgICAgICAkUHJlZmVyZW5jZXNDYWNoZUtleSAuPSAnIyMjIycgaWYgJFByZWZlcmVuY2VzQ2FjaGVLZXk7CiAgICAgICAgICAgICRQcmVmZXJlbmNlc0NhY2hlS2V5IC49IGpvaW4gcXsjIyMjfSwgJEtleSwgbWFwIHskX30gQHsgJFBhcmFte1ByZWZlcmVuY2VzfS0+eyRLZXl9IH07CiAgICAgICAgfQoKICAgICAgICAkUHJlZmVyZW5jZXNXaGVyZSA9ICdBTkQgZ2VuZXJhbF9jYXRhbG9nLmlkID0gZ2VuZXJhbF9jYXRhbG9nX3ByZWZlcmVuY2VzLmdlbmVyYWxfY2F0YWxvZ19pZCc7CiAgICAgICAgJFByZWZlcmVuY2VzV2hlcmUgLj0gJyBBTkQgJyAuIGpvaW4gJyBBTkQgJywgQFdoZXJlczsKICAgIH0KCiAgICAjIGNyZWF0ZSBzcWwgc3RyaW5nCiAgICBteSAkU1FMID0gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIGdlbmVyYWxfY2F0YWxvZyAkUHJlZmVyZW5jZXNUYWJsZSAiCiAgICAgICAgLiAiV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyAkUHJlZmVyZW5jZXNXaGVyZSAiOwogICAgbXkgQEJJTkQgPSAoIFwkUGFyYW17Q2xhc3N9LCBAUHJlZmVyZW5jZXNCaW5kICk7CgogICAgIyBhZGQgdmFsaWQgc3RyaW5nIHRvIHNxbCBzdHJpbmcKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgdmFsaWRfaWQgPSAxICc7CiAgICB9CgogICAgIyBjcmVhdGUgY2FjaGUga2V5CiAgICBteSAkQ2FjaGVLZXkgPSAnSXRlbUxpc3Q6OicgLiAkUGFyYW17Q2xhc3N9IC4gJyMjIyMnIC4gJFBhcmFte1ZhbGlkfSAuICcjIyMjJyAuICRQcmVmZXJlbmNlc0NhY2hlS2V5OwoKICAgICMgY2hlY2sgaWYgcmVzdWx0IGlzIGFscmVhZHkgY2FjaGVkCiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBcQEJJTkQsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRheyAkUm93WzBdIH0gPSAkUm93WzFdOwogICAgfQoKICAgICMganVzdCByZXR1cm4gd2l0aG91dCBsb2dnaW5nIGFuIGVycm9yIGFuZCB3aXRob3V0IGNhY2hpbmcgdGhlIGVtcHR5IHJlc3VsdAogICAgcmV0dXJuIGlmICElRGF0YTsKCiAgICAjIGNhY2hlIHRoZSByZXN1bHQKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJURhdGEsCiAgICApOwoKICAgIHJldHVybiBcJURhdGE7Cn0KCj1oZWFkMiBJdGVtR2V0KCkKCmdldCBpdGVtIGF0dHJpYnV0ZXMKCiAgICBteSAkSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEID0+IDMsCiAgICApOwoKICAgIG9yCgogICAgbXkgJEl0ZW1EYXRhUmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICAgICBOYW1lICA9PiAnVW5kZXJwaW5uaW5nIENvbnRyYWN0JywKICAgICk7CgpyZXR1cm5zCgogICAgbXkgJEl0ZW0gPSB7CiAgICAgICAgJ0l0ZW1JRCcgICAgID0+ICcyMycsCiAgICAgICAgJ0NsYXNzJyAgICAgID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICAgICAnTmFtZScgICAgICAgPT4gJ1VuZGVycGlubmluZyBDb250cmFjdCcKICAgICAgICAnQ29tbWVudCcgICAgPT4gJ1NvbWUgQ29tbWVudCcsCiAgICAgICAgJ1ZhbGlkSUQnICAgID0+ICcxJywKICAgICAgICAnQ3JlYXRlVGltZScgPT4gJzIwMTItMDEtMTIgMDk6MzY6MjQnLAogICAgICAgICdDcmVhdGVCeScgICA9PiAnMScsCiAgICAgICAgJ0NoYW5nZVRpbWUnID0+ICcyMDEyLTAxLTEyIDA5OjM2OjI0JywKICAgICAgICAnQ2hhbmdlQnknICAgPT4gJzEnLAogICAgfTsKCj1jdXQKCnN1YiBJdGVtR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtJdGVtSUR9ICYmICggISRQYXJhbXtDbGFzc30gfHwgJFBhcmFte05hbWV9IGVxICcnICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW1JRCBPUiBDbGFzcyBhbmQgTmFtZSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgc3FsIHN0cmluZwogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQsIGdlbmVyYWxfY2F0YWxvZ19jbGFzcywgbmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCAnCiAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSAnOwogICAgbXkgQEJJTkQ7CgogICAgIyBhZGQgb3B0aW9ucyB0byBzcWwgc3RyaW5nCiAgICBpZiAoICRQYXJhbXtDbGFzc30gJiYgJFBhcmFte05hbWV9IG5lICcnICkgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIG15ICRDYWNoZUtleSA9ICdJdGVtR2V0OjpDbGFzczo6JyAuICRQYXJhbXtDbGFzc30gLiAnOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgJENhY2hlOwoKICAgICAgICAjIGFkZCBjbGFzcyBhbmQgbmFtZSB0byBzcWwgc3RyaW5nCiAgICAgICAgJFNRTCAuPSAnZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyBBTkQgbmFtZSA9ID8nOwogICAgICAgIHB1c2ggQEJJTkQsICggXCRQYXJhbXtDbGFzc30sIFwkUGFyYW17TmFtZX0gKTsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIG15ICRDYWNoZUtleSA9ICdJdGVtR2V0OjpJdGVtSUQ6OicgLiAkUGFyYW17SXRlbUlEfTsKICAgICAgICBteSAkQ2FjaGUgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJENhY2hlIGlmICRDYWNoZTsKCiAgICAgICAgIyBhZGQgaXRlbSBpZCB0byBzcWwgc3RyaW5nCiAgICAgICAgJFNRTCAuPSAnaWQgPSA/JzsKICAgICAgICBwdXNoIEBCSU5ELCBcJFBhcmFte0l0ZW1JRH07CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgQmluZCAgPT4gXEBCSU5ELAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJUl0ZW1EYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkSXRlbURhdGF7SXRlbUlEfSAgICAgPSAkUm93WzBdOwogICAgICAgICRJdGVtRGF0YXtDbGFzc30gICAgICA9ICRSb3dbMV07CiAgICAgICAgJEl0ZW1EYXRhe05hbWV9ICAgICAgID0gJFJvd1syXTsKICAgICAgICAkSXRlbURhdGF7VmFsaWRJRH0gICAgPSAkUm93WzNdOwogICAgICAgICRJdGVtRGF0YXtDb21tZW50fSAgICA9ICRSb3dbNF0gfHwgJyc7CiAgICAgICAgJEl0ZW1EYXRhe0NyZWF0ZVRpbWV9ID0gJFJvd1s1XTsKICAgICAgICAkSXRlbURhdGF7Q3JlYXRlQnl9ICAgPSAkUm93WzZdOwogICAgICAgICRJdGVtRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbN107CiAgICAgICAgJEl0ZW1EYXRhe0NoYW5nZUJ5fSAgID0gJFJvd1s4XTsKICAgIH0KCiAgICAjIGNoZWNrIGl0ZW0KICAgIGlmICggISRJdGVtRGF0YXtJdGVtSUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnSXRlbSBub3QgZm91bmQgaW4gZGF0YWJhc2UhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBnZW5lcmFsIGNhdGFsb2cgcHJlZmVyZW5jZXMKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZWxmLT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCBJdGVtSUQgPT4gJEl0ZW1EYXRhe0l0ZW1JRH0gKTsKCiAgICAjIG1lcmdlIGhhc2gKICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAlSXRlbURhdGEgPSAoICVJdGVtRGF0YSwgJVByZWZlcmVuY2VzICk7CiAgICB9CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAnSXRlbUdldDo6Q2xhc3M6OicgLiAkSXRlbURhdGF7Q2xhc3N9IC4gJzo6JyAuICRJdGVtRGF0YXtOYW1lfSwKICAgICAgICBWYWx1ZSA9PiBcJUl0ZW1EYXRhLAogICAgKTsKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICdJdGVtR2V0OjpJdGVtSUQ6OicgLiAkSXRlbURhdGF7SXRlbUlEfSwKICAgICAgICBWYWx1ZSA9PiBcJUl0ZW1EYXRhLAogICAgKTsKCiAgICByZXR1cm4gXCVJdGVtRGF0YTsKfQoKPWhlYWQyIEl0ZW1BZGQoKQoKYWRkIGEgbmV3IGdlbmVyYWwgY2F0YWxvZyBpdGVtCgogICAgbXkgJEl0ZW1JRCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUFkZCgKICAgICAgICBDbGFzcyAgICAgICAgID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdJdGVtIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgID0+ICdDb21tZW50JywgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgSXRlbUFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhDbGFzcyBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBuYW1lIG11c3QgYmUgbm90IGVtcHR5LCBidXQgbnVtYmVyIHplcm8gKDApIGlzIGFsbG93ZWQKICAgIGlmICggISggZGVmaW5lZCAkUGFyYW17TmFtZX0gKSB8fCAhKCBsZW5ndGggJFBhcmFte05hbWV9ICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIE5hbWUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ29tbWVudCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gJyc7CiAgICB9CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3MpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxTcGFjZXMgICA9PiAxLAogICAgICAgICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIENvbW1lbnQpKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpLT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBmaW5kIGV4aXRpbmcgaXRlbSB3aXRoIHNhbWUgbmFtZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQgRlJPTSBnZW5lcmFsX2NhdGFsb2cgJwogICAgICAgICAgICAuICdXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0NsYXNzfSwgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJE5vQWRkOwogICAgd2hpbGUgKCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICROb0FkZCA9IDE7CiAgICB9CgogICAgIyBhYm9ydCBpbnNlcnQgb2YgbmV3IGl0ZW0sIGlmIGl0ZW0gbmFtZSBhbHJlYWR5IGV4aXN0cwogICAgaWYgKCROb0FkZCkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgYWRkIG5ldyBpdGVtISBHZW5lcmFsIGNhdGFsb2cgaXRlbSB3aXRoIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIGNsYXNzLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgICMgaW5zZXJ0IG5ldyBpdGVtCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIGdlbmVyYWxfY2F0YWxvZyAnCiAgICAgICAgICAgIC4gJyhnZW5lcmFsX2NhdGFsb2dfY2xhc3MsIG5hbWUsIHZhbGlkX2lkLCBjb21tZW50cywgJwogICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAuICcoPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17Q2xhc3N9LCBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGZpbmQgaWQgb2YgbmV3IGl0ZW0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nICcKICAgICAgICAgICAgLiAnV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyBBTkQgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDbGFzc30sIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRJdGVtSUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRJdGVtSUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkSXRlbUlEOwp9Cgo9aGVhZDIgSXRlbVVwZGF0ZSgpCgp1cGRhdGUgYW4gZXhpc3RpbmcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KCiAgICBteSAkVHJ1ZSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbVVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgICAgID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdJdGVtIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBJdGVtVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEl0ZW1JRCBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBuYW1lIG11c3QgYmUgbm90IGVtcHR5LCBidXQgbnVtYmVyIHplcm8gKDApIGlzIGFsbG93ZWQKICAgIGlmICggJFBhcmFte05hbWV9IGVxICcnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCBOYW1lISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENvbW1lbnQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gfHw9ICcnOwogICAgfQoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzKSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsU3BhY2VzICAgPT4gMSwKICAgICAgICApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNsYXNzIG9mIGl0ZW0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0l0ZW1JRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDbGFzczsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENsYXNzID0gJFJvd1swXTsKICAgIH0KCiAgICBpZiAoICEkQ2xhc3MgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCB1cGRhdGUgaXRlbSEgR2VuZXJhbCBjYXRhbG9nIGl0ZW0gbm90IGZvdW5kIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGZpbmQgZXhpdGluZyBpdGVtIHdpdGggc2FtZSBuYW1lCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8gQU5EIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkQ2xhc3MsIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRVcGRhdGUgPSAxOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRQYXJhbXtJdGVtSUR9IG5lICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRVcGRhdGUgPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICEkVXBkYXRlICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgdXBkYXRlIGl0ZW0hIEdlbmVyYWwgY2F0YWxvZyBpdGVtIHdpdGggc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoaXMgY2xhc3MuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBnZW5lcmFsX2NhdGFsb2cgU0VUICcKICAgICAgICAgICAgLiAnbmFtZSA9ID8sIHZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCAnCiAgICAgICAgICAgIC4gJ2NoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sICBcJFBhcmFte0l0ZW1JRH0sCiAgICAgICAgXSwKICAgICk7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KCkKCnNldCBHZW5lcmFsQ2F0YWxvZyBwcmVmZXJlbmNlcwoKICAgICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICBJdGVtSUQgPT4gMTIzLAogICAgICAgIEtleSAgICA9PiAnVXNlckNvbW1lbnQnLAogICAgICAgIFZhbHVlICA9PiAnc29tZSBjb21tZW50JywKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KCVQYXJhbSk7Cn0KCj1oZWFkMiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCkKCmdldCBHZW5lcmFsQ2F0YWxvZyBwcmVmZXJlbmNlcwoKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRRdWV1ZU9iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCgKICAgICAgICBJdGVtSUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KCVQYXJhbSk7Cn0KCjE7Cgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0zLjAudHh0Pi4KCj1jdXQK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzREI7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c6OlByZWZlcmVuY2VzREIgLSBzb21lIHByZWZlcmVuY2VzIGZ1bmN0aW9ucyBmb3IgZ2VuZXJhbCBjYXRhbG9nCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPWN1dAoKPWhlYWQyIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0RCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlc0RCJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgcHJlZmVyZW5jZXMgdGFibGUgZGF0YQogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlfSAgICAgID0gJ2dlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyc7CiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVLZXl9ICAgPSAncHJlZl9rZXknOwogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9ID0gJ3ByZWZfdmFsdWUnOwogICAgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlR2NJRH0gID0gJ2dlbmVyYWxfY2F0YWxvZ19pZCc7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgpCgpTZXQgcHJlZmVyZW5jZXMgZm9yIGFuIGl0ZW0KCiAgICAkUHJlZmVyZW5jZXNPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNTZXQoCiAgICAgICAgSXRlbUlEID0+IDEyMzQsCiAgICAgICAgS2V5ICAgID0+ICdGdW5jdGlvbmFsaXR5JywKICAgICAgICBWYWx1ZSAgPT4gJ29wZXJhdGlvbmFsJywKICAgICk7Cgo9Y3V0CgpzdWIgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSXRlbUlEIEtleSBWYWx1ZSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkKCAkUGFyYW17JE5lZWRlZH0gKSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVsZXRlIG9sZCBkYXRhCiAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZX0gV0hFUkUgIgogICAgICAgICAgICAuICIkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVHY0lEfSA9ID8gQU5EICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUtleX0gPSA/IiwKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBcJFBhcmFte0tleX0sCiAgICAgICAgXSwKICAgICk7CgogICAgIyBpbnNlcnQgbmV3IGRhdGEKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJJTlNFUlQgSU5UTyAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGV9ICgkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVHY0lEfSwgIgogICAgICAgICAgICAuICIgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlS2V5fSwgJFNlbGYtPntQcmVmZXJlbmNlc1RhYmxlVmFsdWV9KSAiCiAgICAgICAgICAgIC4gIiBWQUxVRVMgKD8sID8sID8pIiwKICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgXCRQYXJhbXtJdGVtSUR9LAogICAgICAgICAgICBcJFBhcmFte0tleX0sCiAgICAgICAgICAgIFwkUGFyYW17VmFsdWV9LAogICAgICAgIF0sCiAgICApOwp9Cgo9aGVhZDIgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dldCgpCgpHZXQgYWxsIFByZWZlcmVuY2VzIGZvciBhbiBpdGVtCgogICAgbXkgJVByZWZlcmVuY2VzID0gJFByZWZlcmVuY2VzT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2V0KAogICAgICAgIEl0ZW1JRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KEl0ZW1JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHF1ZXVlIHByZWZlcmVuY2VzIGFyZSBhdmFpbGFibGUKICAgIGlmICggISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpICkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBwcmVmZXJlbmNlcwogICAgcmV0dXJuIGlmICEkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVLZXl9LCAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGVWYWx1ZX0gIgogICAgICAgICAgICAuICIgRlJPTSAkU2VsZi0+e1ByZWZlcmVuY2VzVGFibGV9IFdIRVJFICRTZWxmLT57UHJlZmVyZW5jZXNUYWJsZUdjSUR9ID0gPyIsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17SXRlbUlEfSBdLAogICAgKTsKCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgIyByZXR1cm4gZGF0YQogICAgcmV0dXJuICVEYXRhOwp9CgoxOwoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwczovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCiMgY3JlYXRlIGxvY2FsIG9iamVjdHMKbXkgJENvbmZpZ09iamVjdCAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyk7Cm15ICRVc2VyT2JqZWN0ICAgICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgojIGdldCBoZWxwZXIgb2JqZWN0CiRLZXJuZWw6Ok9NLT5PYmplY3RQYXJhbUFkZCgKICAgICdLZXJuZWw6OlN5c3RlbTo6VW5pdFRlc3Q6OkhlbHBlcicgPT4gewogICAgICAgIFJlc3RvcmVEYXRhYmFzZSA9PiAxLAogICAgfSwKKTsKbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgojIGRlZmluZSBuZWVkZWQgdmFyaWFibGUKbXkgJFJhbmRvbUlEID0gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0NoZWNrRW1haWxBZGRyZXNzZXMnKSB8fCAxOwogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAwLAogICAgKTsKCiAgICBmb3IgbXkgJENvdW50ZXIgKCAxIC4uIDIgKSB7CgogICAgICAgICMgY3JlYXRlIG5ldyB1c2VycyBmb3IgdGhlIHRlc3RzCiAgICAgICAgbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdHZW5lcmFsQ2F0YWxvZycgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1HZW5lcmFsQ2F0YWxvZy0nIC4gJENvdW50ZXIgLiAkUmFuZG9tSUQsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LUdlbmVyYWxDYXRhbG9nLScgLiAkQ291bnRlciAuICdAbG9jYWxob3N0JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAVXNlcklEcywgJFVzZXJJRDsKICAgIH0KCiAgICAjIHJlc3RvcmUgb3JpZ2luYWwgZW1haWwgY2hlY2sgcGFyYW0KICAgICRDb25maWdPYmplY3QtPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gJENoZWNrRW1haWxBZGRyZXNzZXNPcmcsCiAgICApOwp9CgojIGNyZWF0ZSBuZWVkZWQgcmFuZG9tIGNsYXNzZXMKbXkgQENsYXNzUmFuZDsKCmZvciBteSAkQ291bnRlciAoIDEgLi4gMyApIHsKCiAgICBwdXNoIEBDbGFzc1JhbmQsICRIZWxwZXItPkdldFJhbmRvbU51bWJlcigpOwp9CgojIHN0b3JlIG9yaWdpbmFsIGdlbmVyYWwgY2F0YWxvZyBwZXJtaXNzaW9uIHByZWZlcmVuY2VzIHNldHRpbmcKbXkgJEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNQZXJtaXNzaW9uc09yZzsKaWYgKCAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKSApIHsKICAgICRHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzUGVybWlzc2lvbnNPcmcgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMnKS0+e1Blcm1pc3Npb25zfTsKfQoKIyBlbmFibGUgZ2VuZXJhbCBjYXRhbG9nIHBlcm1pc3Npb24gcHJlZmVyZW5jZXMgc2V0dGluZyB3aXRoIGEgZHVtbXkgdHJ1ZSB2YWx1ZQokQ29uZmlnT2JqZWN0LT5TZXQoCiAgICBLZXkgICA9PiAnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI1Blcm1pc3Npb25zJywKICAgIFZhbHVlID0+IDEsCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyBpdGVtIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICA9PiAnVGVzdEl0ZW0yJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW0zJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTQnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0SXRlbTQnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBwcmVmZXJlbmNlcyBvZiB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgc2V0CiAgICB7CiAgICAgICAgUHJlZmVyZW5jZXNTZXQgPT4gewogICAgICAgICAgICBIZWxsbyA9PiAnV29ybGQnLAogICAgICAgICAgICBDb2xvciA9PiAnUmVkJywKICAgICAgICB9LAogICAgICAgIFByZWZlcmVuY2VzR2V0ID0+IHsKICAgICAgICAgICAgSGVsbG8gPT4gJ1dvcmxkJywKICAgICAgICAgICAgQ29sb3IgPT4gJ1JlZCcsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIG9uZSB0ZXN0IGJlZm9yZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTUnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0SXRlbTUnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBwcmVmZXJlbmNlcyBvZiB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgc2V0CiAgICB7CiAgICAgICAgUHJlZmVyZW5jZXNTZXQgPT4gewogICAgICAgICAgICBIZWxsbyA9PiAnTmV3V29ybGQnLAogICAgICAgICAgICBDb2xvciA9PiAnQmx1ZScsCiAgICAgICAgfSwKICAgICAgICBQcmVmZXJlbmNlc0dldCA9PiB7CiAgICAgICAgICAgIEhlbGxvID0+ICdOZXdXb3JsZCcsCiAgICAgICAgICAgIENvbG9yID0+ICdCbHVlJywKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoaXRlbSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBWYWxpZElEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChpdGVtIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAnVGVzdEl0ZW01VVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoaXRlbSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBWYWxpZElEID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW01VVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW01VVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAoaXRlbSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTVVUERBVEUzJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW01VVBEQVRFMycsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAiIFx0IFxuIFxyIFVuaXQgVGVzdCA6OiBUZXN0IENsYXNzIFx0IFxuIFxyICIgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICIgXHQgXG4gXHIgVGVzdCBJdGVtIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdCBJdGVtJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1Rlc3QgQ29tbWVudCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gIiBcdCBcbiBcciBUZXN0IEl0ZW0gVVBEQVRFMSBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBDb21tZW50ID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFVQREFURTEgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgID0+ICdUZXN0IEl0ZW0gVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBDb21tZW50ICA9PiAnVGVzdCBDb21tZW50IFVQREFURTEnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAodW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzc8KpJyAuICRDbGFzc1JhbmRbMV0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJyDPkiDPoSBUZXN0IEl0ZW0gxqkgz54gJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcgz6Ag0K8gVGVzdCBDb21tZW50INGsINGgICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzwqknIC4gJENsYXNzUmFuZFsxXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ8+SIM+hIFRlc3QgSXRlbSDGqSDPnicsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgID0+ICfPoCDQryBUZXN0IENvbW1lbnQg0awg0aAnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0IEl0ZW0gxqkgyaQgVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJyBUZXN0IENvbW1lbnQg0Zkg0ZIgVVBEQVRFMSAnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3QgSXRlbSDGqSDJpCBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdUZXN0IENvbW1lbnQg0Zkg0ZIgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+ICRVc2VySURzWzFdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjY2Vzc2Z1bGx5IChhIHNlY29uZCBpdGVtIHdpdGggRnVuY3Rpb25hbGl0eSAndGVzdDEnKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW02JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICA9PiAnVGVzdEl0ZW02JywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAoc2V0IGZ1bmN0aW9uYWxpdHkgdG8gJycpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW02VVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3RJdGVtNlVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseSAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3NbdGVzdF0lKlxcJyAuICRDbGFzc1JhbmRbMV0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJyBbdGVzdF0lKlxcIFRlc3QgSXRlbSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3NbdGVzdF0lKlxcJyAuICRDbGFzc1JhbmRbMV0sCiAgICAgICAgICAgIE5hbWUgICAgID0+ICdbdGVzdF0lKlxcIFRlc3QgSXRlbSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IChzcGVjaWFsIGNoYXJhY3RlciBjaGVja3MpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBJdGVtIFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBWYWxpZElEID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICBDb21tZW50ID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICA9PiAnW3Rlc3RdJSpcXCBUZXN0IEl0ZW0gVVBEQVRFMSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSA9PiAkVXNlcklEc1sxXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBtdXN0IGJlIGluc2VydGVkIHN1Y2Nlc3NmdWxseQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW1QcmVmZXJlbmNlcycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJ1Rlc3RJdGVtUHJlZmVyZW5jZXMnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBwcmVmZXJlbmNlcyBvZiB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgc2V0CiAgICB7CiAgICAgICAgUHJlZmVyZW5jZXNTZXQgPT4gewogICAgICAgICAgICBUZXN0ICA9PiAnaGVsbG8gd29ybGQnLAogICAgICAgICAgICBHcm91cCA9PiAzMywKICAgICAgICB9LAogICAgICAgIFByZWZlcmVuY2VzR2V0ID0+IHsKICAgICAgICAgICAgVGVzdCAgPT4gJ2hlbGxvIHdvcmxkJywKICAgICAgICAgICAgR3JvdXAgPT4gMzMsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgcHJlZmVyZW5jZXMgb2YgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHNldAogICAgewogICAgICAgIFByZWZlcmVuY2VzU2V0ID0+IHsKICAgICAgICAgICAgVGVzdCA9PiAnaGVsbG8nLAogICAgICAgICAgICBTaXplID0+IDM4LAogICAgICAgIH0sCiAgICAgICAgUHJlZmVyZW5jZXNHZXQgPT4gewogICAgICAgICAgICBUZXN0ID0+ICdoZWxsbycsCiAgICAgICAgICAgIFNpemUgPT4gMzgsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gaGFzIGFuIGVtcHR5IG5hbWUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICcnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBtdXN0IGJlIGFkZGVkLCB0aGUgbnVtYmVyIHplcm8gKDApIGlzIGFsbG93ZWQgYXMgbmFtZQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnMCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICAgPT4gJzAnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseSAodXBkYXRpbmcgbmFtZSB0byBudW1iZXIgemVybyAoMCkgKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJzAnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgPT4gJycsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgID0+ICcwJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3Qgbm90IGJlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5CiAgICAjIChlbXB0eSBzdHJpbmcgYXMgbmFtZSBpcyBub3QgYWxsb3dlZCApCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAnJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcnLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCl07CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgcnVuIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFRlc3RDb3VudCA9IDE7Cm15ICRMYXN0QWRkZWRJdGVtSUQ7Cm15ICVBZGRlZEl0ZW1Db3VudGVyOwoKZm9yIG15ICRJdGVtICggQHskSXRlbURhdGF9ICkgewoKICAgIGlmICggJEl0ZW0tPntBZGR9ICkgewoKICAgICAgICAjIGFkZCBuZXcgaXRlbQogICAgICAgIG15ICRJdGVtSUQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1BZGQoCiAgICAgICAgICAgICV7ICRJdGVtLT57QWRkfSB9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgaXRlbSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntBZGRHZXR9ICkgewoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkSXRlbUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUFkZCgpIC0gSXRlbUtleTogJEl0ZW1JRCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJEl0ZW1JRCkgewoKICAgICAgICAgICAgICAgICMgc2V0IGxhc3QgaXRlbSBpZCB2YXJpYWJsZQogICAgICAgICAgICAgICAgJExhc3RBZGRlZEl0ZW1JRCA9ICRJdGVtSUQ7CgogICAgICAgICAgICAgICAgIyBpbmNyZW1lbnQgdGhlIGFkZGVkIGl0ZW0gY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkSXRlbUNvdW50ZXJ7ICRJdGVtLT57QWRkR2V0fS0+e0NsYXNzfSB9Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgICRJdGVtSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtQWRkKCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgaXRlbSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgY3JlYXRpb24gb2YgaXRlbSB1c2luZyBJdGVtSWQgYW5kIFVzZXJJRAogICAgICAgIG15ICRJdGVtR2V0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgVXNlcklEID0+ICRJdGVtLT57QWRkfS0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpdGVtIGRhdGEgYWZ0ZXIgY3JlYXRpb24gb2YgaXRlbQogICAgICAgIGZvciBteSAkSXRlbUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJEl0ZW1HZXQtPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtR2V0KCkgLSBVc2luZyBJdGVtSUQgYW5kIFVzZXJJRCAtICRJdGVtQXR0cmlidXRlICIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBpdGVtIGRhdGEgdG8gY2hlY2sgdGhlIHZhbHVlcyBhZnRlciBjcmVhdGlvbiBvZiBpdGVtIHVzaW5nIENsYXNzIGFuZCBOYW1lCiAgICAgICAgJEl0ZW1HZXQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIENsYXNzID0+ICRJdGVtLT57QWRkR2V0fS0+e0NsYXNzfSwKICAgICAgICAgICAgTmFtZSAgPT4gJEl0ZW0tPntBZGRHZXR9LT57TmFtZX0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpdGVtIGRhdGEgYWZ0ZXIgY3JlYXRpb24gb2YgaXRlbQogICAgICAgIGZvciBteSAkSXRlbUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e0FkZEdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJEl0ZW1HZXQtPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPnskSXRlbUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtR2V0KCkgLSBVc2luZyBDbGFzcyBhbmQgTmFtZSAtICRJdGVtQXR0cmlidXRlICIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEl0ZW0tPntVcGRhdGV9ICkgewoKICAgICAgICAjIGNoZWNrIGxhc3QgaXRlbSBpZCB2YXJpYWJsZQogICAgICAgIGlmICggISRMYXN0QWRkZWRJdGVtSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIElURU0gSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIGl0ZW0KICAgICAgICBteSAkVXBkYXRlU3VjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtVXBkYXRlKAogICAgICAgICAgICAleyAkSXRlbS0+e1VwZGF0ZX0gfSwKICAgICAgICAgICAgSXRlbUlEID0+ICRMYXN0QWRkZWRJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBpdGVtIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbVVwZGF0ZSgpIC0gSXRlbUtleTogJExhc3RBZGRlZEl0ZW1JRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGl0ZW0gZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIHRoZSB1cGRhdGUKICAgICAgICBteSAkSXRlbUdldDIgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkTGFzdEFkZGVkSXRlbUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGl0ZW0gZGF0YSBhZnRlciB1cGRhdGUKICAgICAgICBmb3IgbXkgJEl0ZW1BdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntVcGRhdGVHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRJdGVtR2V0Mi0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+eyRJdGVtQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1HZXQoKSAtICRJdGVtQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1ByZWZlcmVuY2VzU2V0fSApIHsKCiAgICAgICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntQcmVmZXJlbmNlc1NldH0gfSApIHsKCiAgICAgICAgICAgICMgc2V0IHByZWZlcmVuY2VzCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgS2V5ICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICBWYWx1ZSAgPT4gJEl0ZW0tPntQcmVmZXJlbmNlc1NldH0tPnskS2V5fSwKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkTGFzdEFkZGVkSXRlbUlELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFByZWZlcmVuY2VzU2V0KCkgLSAkS2V5IiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBwcmVmZXJlbmNlcwogICAgaWYgKCAkSXRlbS0+e1ByZWZlcmVuY2VzR2V0fSApIHsKICAgICAgICBteSAlUHJlZmVyZW5jZXMgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgICAgIEl0ZW1JRCA9PiAkTGFzdEFkZGVkSXRlbUlELAogICAgICAgICk7CgogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7ICRJdGVtLT57UHJlZmVyZW5jZXNHZXR9IH0gKSB7CiAgICAgICAgICAgIGlmICggJEl0ZW0tPntQcmVmZXJlbmNlc0dldH0tPnskS2V5fSBlcSAkUHJlZmVyZW5jZXN7JEtleX0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFByZWZlcmVuY2VzR2V0KCkgLSAkS2V5IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFByZWZlcmVuY2VzR2V0KCkgLSAkS2V5IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMgZm9yIGxhdGVyIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCBhcnJheXMKbXkgJUV4aXN0aW5nQ2xhc3Nlc1RtcDsKSVRFTToKZm9yIG15ICRJdGVtICggQHskSXRlbURhdGF9ICkgewogICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e0FkZEdldH0tPntDbGFzc307CiAgICAkRXhpc3RpbmdDbGFzc2VzVG1weyAkSXRlbS0+e0FkZEdldH0tPntDbGFzc30gfSA9IDE7Cn0KbXkgQEV4aXN0aW5nQ2xhc3NlcyA9IHNvcnQga2V5cyAlRXhpc3RpbmdDbGFzc2VzVG1wOwoKbXkgJUV4aXN0aW5nRnVuY3Rpb25hbGl0aWVzVG1wOwpJVEVNOgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CiAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntGdW5jdGlvbmFsaXR5fSB8fD0gJyc7CiAgICAkRXhpc3RpbmdGdW5jdGlvbmFsaXRpZXNUbXB7ICRJdGVtLT57VXBkYXRlR2V0fS0+e0Z1bmN0aW9uYWxpdHl9IH0gPSAxOwp9Cm15IEBFeGlzdGluZ0Z1bmN0aW9uYWxpdGllcyA9IHNvcnQga2V5cyAlRXhpc3RpbmdGdW5jdGlvbmFsaXRpZXNUbXA7CgpteSBATm9uRXhpc3RpbmdDbGFzc2VzID0gKCAnVW5pdFRlc3Q6Ok5vRXhpc3RpbmdDbGFzczEnLCAnVW5pdFRlc3Q6Ok5vRXhpc3RpbmdDbGFzczInICk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NMaXN0IHRlc3QgMQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ2xhc3NMaXN0MSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NMaXN0KCk7Cgpmb3IgbXkgJENsYXNzIChARXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJENsYXNzQ291bnQgPSAwOwogICAgaWYgKCAkQ2xhc3NMaXN0MSAmJiByZWYgJENsYXNzTGlzdDEgZXEgJ0FSUkFZJyApIHsKICAgICAgICAkQ2xhc3NDb3VudCA9IGdyZXAgeyAkXyBlcSAkQ2xhc3MgfSBAeyRDbGFzc0xpc3QxfTsKICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJENsYXNzQ291bnQsCiAgICAgICAgMSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc0xpc3QoKSAtICRDbGFzcyBsaXN0ZWQiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBJdGVtTGlzdCB0ZXN0IDEKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKZm9yIG15ICRDbGFzcyAoQE5vbkV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkSXRlbUxpc3QsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSAtICRDbGFzcyBub3QgZXhpc3RzIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgSXRlbUxpc3QgdGVzdCAyCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkTGlzdENvdW50ID0gJ05VTEwnOwogICAgaWYgKCBkZWZpbmVkICRJdGVtTGlzdCAmJiByZWYgJEl0ZW1MaXN0IGVxICdIQVNIJyApIHsKICAgICAgICAkTGlzdENvdW50ID0ga2V5cyAleyRJdGVtTGlzdH07CiAgICB9CgogICAgJFNlbGYtPklzKAogICAgICAgICRMaXN0Q291bnQsCiAgICAgICAgJEFkZGVkSXRlbUNvdW50ZXJ7JENsYXNzfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtTGlzdCgpIC0gJENsYXNzIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgSXRlbUxpc3QgdGVzdCAzIC0gSXRlbSBMaXN0IHdpdGggcHJlZmVyZW5jZXMgKHNpbmdsZSBoYXNoIGVudHJ5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgp7CgogICAgbXkgJENsYXNzICAgID0gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXTsKICAgIG15ICRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgICAgICAgPT4gJENsYXNzLAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBIZWxsbyA9PiAnV29ybGQnLAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICRMaXN0Q291bnQgPSAnTlVMTCc7CiAgICBpZiAoIGRlZmluZWQgJEl0ZW1MaXN0ICYmIHJlZiAkSXRlbUxpc3QgZXEgJ0hBU0gnICkgewogICAgICAgICRMaXN0Q291bnQgPSBrZXlzICV7JEl0ZW1MaXN0fTsKICAgIH0KCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJExpc3RDb3VudCwKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1MaXN0KCkgcHJlZmVyZW5jZXMgKHNpbmdsZSBoYXNoIGVudHJ5KSAtICRDbGFzcyBjb3JyZWN0IG51bWJlciBvZiBpdGVtcyIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEl0ZW1MaXN0IHRlc3QgNCAtIEl0ZW0gTGlzdCB3aXRoIHByZWZlcmVuY2VzIChhcnJheSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKewoKICAgIG15ICRDbGFzcyAgICA9ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF07CiAgICBteSAkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICBWYWxpZCAgICAgICA9PiAxLAogICAgICAgIFByZWZlcmVuY2VzID0+IHsKICAgICAgICAgICAgQ29sb3IgPT4gWyAnUmVkJywgJ0JsdWUnIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJExpc3RDb3VudCA9ICdOVUxMJzsKICAgIGlmICggZGVmaW5lZCAkSXRlbUxpc3QgJiYgcmVmICRJdGVtTGlzdCBlcSAnSEFTSCcgKSB7CiAgICAgICAgJExpc3RDb3VudCA9IGtleXMgJXskSXRlbUxpc3R9OwogICAgfQoKICAgICRTZWxmLT5JcygKICAgICAgICAkTGlzdENvdW50LAogICAgICAgIDIsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSBwcmVmZXJlbmNlcyAoYXJyYXkpIC0gJENsYXNzIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgUHJlZmVyZW5jZXMgdGVzdCAxCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRJdGVtSUQgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1BZGQoCiAgICAgICAgQ2xhc3MgICA9PiAkQ2xhc3MsCiAgICAgICAgTmFtZSAgICA9PiAnSXRlbSBQcmVmZXJlbmNlcycsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5HZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzU2V0KAogICAgICAgIEl0ZW1JRCA9PiAkSXRlbUlELAogICAgICAgIEtleSAgICA9PiAnVW5pdFRlc3RQcmVmJywKICAgICAgICBWYWx1ZSAgPT4gJzEnLAogICAgKTsKCiAgICBteSAkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICBQcmVmZXJlbmNlcyA9PiB7CiAgICAgICAgICAgIFVuaXRUZXN0UHJlZiA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkSXRlbUxpc3QtPnskSXRlbUlEfSwKICAgICAgICAnSXRlbSBQcmVmZXJlbmNlcycsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUxpc3QoKSAtIENsYXNzICRDbGFzcyBQcmVmZXJlbmNlcyBtYXRjaCIsCiAgICApOwoKICAgICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICBLZXkgICAgPT4gJ1VuaXRUZXN0UHJlZicsCiAgICAgICAgVmFsdWUgID0+ICcyJywKICAgICk7CgogICAgJEl0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICA9PiAkQ2xhc3MsCiAgICAgICAgUHJlZmVyZW5jZXMgPT4gewogICAgICAgICAgICBVbml0VGVzdFByZWYgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEl0ZW1MaXN0LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1MaXN0KCkgLSBDbGFzcyAkQ2xhc3MgUHJlZmVyZW5jZXMgbm90IG1hdGNoIGFmdGVyIFByZWZlcmVuY2VzU2V0IENoYW5nZSIKICAgICk7CgogICAgJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtVXBkYXRlKAogICAgICAgIEl0ZW1JRCAgPT4gJEl0ZW1JRCwKICAgICAgICBOYW1lICAgID0+ICdJdGVtIFByZWZlcmVuY2VzJywKICAgICAgICBWYWxpZElEID0+IDIsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBQcmVmZXJlbmNlcyB0ZXN0IDIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKPXBvZAoKbXkgJUZ1bmN0aW9uYWxpdHlMaXN0MTsKbWFwIHsgJEZ1bmN0aW9uYWxpdHlMaXN0MXskX30gPSAxIH0gQEV4aXN0aW5nRnVuY3Rpb25hbGl0aWVzOwoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRGdW5jdGlvbmFsaXR5TGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+RnVuY3Rpb25hbGl0eUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRnVuY3Rpb25hbGl0eUxpc3QgJiYgcmVmICRGdW5jdGlvbmFsaXR5TGlzdCBlcSAnQVJSQVknLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEZ1bmN0aW9uYWxpdHlMaXN0KCkgLSByZXR1cm4gYSBhcnJheSByZWZlcmVuY2UiLAogICAgKTsKCiAgICBmb3IgbXkgJEZ1bmN0aW9uYWxpdHkgKCBAeyRGdW5jdGlvbmFsaXR5TGlzdH0gKSB7CiAgICAgICAgZGVsZXRlICRGdW5jdGlvbmFsaXR5TGlzdDF7JEZ1bmN0aW9uYWxpdHl9OwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKJFNlbGYtPlRydWUoCiAgICAha2V5cyAlRnVuY3Rpb25hbGl0eUxpc3QxLAogICAgIlRlc3QgJFRlc3RDb3VudDogRnVuY3Rpb25hbGl0eUxpc3QoKSIsCik7CgokVGVzdENvdW50Kys7Cgo9Y3V0CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NSZW5hbWUgdGVzdCAxIChjaGVjayBub3JtYWwgcmVuYW1lKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpDTEFTUzoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRPbGRJdGVtTGlzdCA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgIG15ICRTdWNjZXNzID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAkQ2xhc3MsCiAgICAgICAgQ2xhc3NOZXcgPT4gJENsYXNzIC4gJ1JFTkFNRTEnLAogICAgKTsKCiAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBSZW5hbWUgZmFpbGVkIiwKICAgICAgICApOwogICAgICAgIG5leHQgQ0xBU1M7CiAgICB9CgogICAgbXkgJE5ld0l0ZW1MaXN0ID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MgLiAnUkVOQU1FMScsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgaWYgKAogICAgICAgICEkT2xkSXRlbUxpc3QKICAgICAgICB8fCAhJE5ld0l0ZW1MaXN0CiAgICAgICAgfHwgcmVmICRPbGRJdGVtTGlzdCBuZSAnSEFTSCcKICAgICAgICB8fCByZWYgJE5ld0l0ZW1MaXN0IG5lICdIQVNIJwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBJdGVtTGlzdCBmYWlsZWQiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBDTEFTUzsKICAgIH0KCiAgICBPTERLRVk6CiAgICBmb3IgbXkgJE9sZEtleSAoIHNvcnQga2V5cyAleyRPbGRJdGVtTGlzdH0gKSB7CgogICAgICAgIGlmICggIWV4aXN0cyAkTmV3SXRlbUxpc3QtPnskT2xkS2V5fSApIHsKICAgICAgICAgICAgJE5ld0l0ZW1MaXN0LT57RmFpbGVkRHVtbXl9ID0gMTsKICAgICAgICAgICAgbmV4dCBPTERLRVk7CiAgICAgICAgfQoKICAgICAgICBuZXh0IE9MREtFWSBpZiAkT2xkSXRlbUxpc3QtPnskT2xkS2V5fSBuZSAkTmV3SXRlbUxpc3QtPnskT2xkS2V5fTsKCiAgICAgICAgZGVsZXRlICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9OwogICAgfQoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICFrZXlzICV7JE5ld0l0ZW1MaXN0fSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NSZW5hbWUgdGVzdCAyIChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKQ0xBU1M6CmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkT2xkSXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcyAuICdSRU5BTUUxJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJENsYXNzIC4gJ1JFTkFNRTEnLAogICAgICAgIENsYXNzTmV3ID0+ICcgJyAuICRDbGFzcyAuICJSRSBOQSBNRSAyIFxuIFxyIFx0ICIsCiAgICApOwoKICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIFJlbmFtZSBmYWlsZWQiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBDTEFTUzsKICAgIH0KCiAgICBteSAkTmV3SXRlbUxpc3QgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcyAuICdSRU5BTUUyJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBpZiAoCiAgICAgICAgISRPbGRJdGVtTGlzdAogICAgICAgIHx8ICEkTmV3SXRlbUxpc3QKICAgICAgICB8fCByZWYgJE9sZEl0ZW1MaXN0IG5lICdIQVNIJwogICAgICAgIHx8IHJlZiAkTmV3SXRlbUxpc3QgbmUgJ0hBU0gnCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIEl0ZW1MaXN0IGZhaWxlZCIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IENMQVNTOwogICAgfQoKICAgIE9MREtFWToKICAgIGZvciBteSAkT2xkS2V5ICggc29ydCBrZXlzICV7JE9sZEl0ZW1MaXN0fSApIHsKCiAgICAgICAgaWYgKCAhZXhpc3RzICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9ICkgewogICAgICAgICAgICAkTmV3SXRlbUxpc3QtPntGYWlsZWREdW1teX0gPSAxOwogICAgICAgICAgICBuZXh0IE9MREtFWTsKICAgICAgICB9CgogICAgICAgIG5leHQgT0xES0VZIGlmICRPbGRJdGVtTGlzdC0+eyRPbGRLZXl9IG5lICROZXdJdGVtTGlzdC0+eyRPbGRLZXl9OwoKICAgICAgICBkZWxldGUgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX07CiAgICB9CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgIWtleXMgJXskTmV3SXRlbUxpc3R9LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBDbGFzc1JlbmFtZSB0ZXN0IDIgKGlkZW50aWNhbCBuYW1lIHRlc3QpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkU3VjY2VzcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJENsYXNzIC4gJ1JFTkFNRTInLAogICAgICAgIENsYXNzTmV3ID0+ICRDbGFzcyAuICdSRU5BTUUyJywKICAgICk7CgogICAgJFNlbGYtPlRydWUoCiAgICAgICAgJFN1Y2Nlc3MsCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSAtIG9sZG5hbWUgYW5kIG5ld25hbWUgaWRlbnRpY2FsIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NSZW5hbWUgdGVzdCAzIChuZXcgY2xhc3MgbmFtZSBhbHJlYWR5IGV4aXN0cykKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzJdLAogICAgTmFtZSAgICAgICAgICA9PiAnRHVtbXknLAogICAgRnVuY3Rpb25hbGl0eSA9PiAnJywKICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKKTsKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkU3VjY2VzcyA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJENsYXNzIC4gJ1JFTkFNRTInLAogICAgICAgIENsYXNzTmV3ID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMl0sCiAgICApOwoKICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAkU3VjY2VzcywKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIC0gbmV3IGNsYXNzIG5hbWUgYWxyZWFkeSBleGlzdHMiLAogICAgKTsKCiAgICAkVGVzdENvdW50Kys7Cn0KCiMgcmVzdG9yZSBvcmlnaW5hbCBnZW5lcmFsIGNhdGFsb2cgcGVybWlzc2lvbiBwcmVmZXJlbmNlcyBzZXR0aW5nCiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMnLAogICAgVmFsdWUgPT4gJEdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNQZXJtaXNzaW9uc09yZywKKTsKCiMgY2xlYW51cCBpcyBkb25lIGJ5IFJlc3RvcmVEYXRhYmFzZQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKIyBnZXQgc2VsZW5pdW0gb2JqZWN0Cm15ICRTZWxlbml1bSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6U2VsZW5pdW0nKTsKCiRTZWxlbml1bS0+UnVuVGVzdCgKICAgIHN1YiB7CgogICAgICAgICMgZ2V0IGhlbHBlciBvYmplY3QKICAgICAgICBteSAkSGVscGVyID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKCiAgICAgICAgIyBnZXQgc3lzY29uZmlnIG9iamVjdAogICAgICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDAsCiAgICAgICAgICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjQ29tbWVudDInLAogICAgICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgICAgICBNb2R1bGUgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYycsCiAgICAgICAgICAgICAgICBMYWJlbCAgID0+ICdDb21tZW50MicsCiAgICAgICAgICAgICAgICBEZXNjICAgID0+ICdEZWZpbmUgdGhlIGdlbmVyYWwgY2F0YWxvZyBjb21tZW50IDIuJywKICAgICAgICAgICAgICAgIEJsb2NrICAgPT4gJ1RleHRBcmVhJywKICAgICAgICAgICAgICAgIENvbHMgICAgPT4gJzUwJywKICAgICAgICAgICAgICAgIFJvd3MgICAgPT4gJzUnLAogICAgICAgICAgICAgICAgUHJlZktleSA9PiAnQ29tbWVudDInLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDAsCiAgICAgICAgICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMnLAogICAgICAgICAgICBWYWx1ZSA9PiB7CiAgICAgICAgICAgICAgICBNb2R1bGUgID0+ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlczo6R2VuZXJpYycsCiAgICAgICAgICAgICAgICBMYWJlbCAgID0+ICdQZXJtaXNzaW9ucycsCiAgICAgICAgICAgICAgICBEZXNjICAgID0+ICdEZWZpbmUgdGhlIGdyb3VwIHdpdGggcGVybWlzc2lvbnMuJywKICAgICAgICAgICAgICAgIEJsb2NrICAgPT4gJ1Blcm1pc3Npb24nLAogICAgICAgICAgICAgICAgQ2xhc3MgICA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6Q2xhc3MnLAogICAgICAgICAgICAgICAgUHJlZktleSA9PiAnUGVybWlzc2lvbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgYW5kIGxvZyBpbiB0ZXN0IHVzZXIKICAgICAgICBteSAkVGVzdFVzZXJMb2dpbiA9ICRIZWxwZXItPlRlc3RVc2VyQ3JlYXRlKAogICAgICAgICAgICBHcm91cHMgPT4gWydhZG1pbiddLAogICAgICAgICkgfHwgZGllICJEaWQgbm90IGdldCB0ZXN0IHVzZXIiOwoKICAgICAgICAkU2VsZW5pdW0tPkxvZ2luKAogICAgICAgICAgICBUeXBlICAgICA9PiAnQWdlbnQnLAogICAgICAgICAgICBVc2VyICAgICA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICAgICAgUGFzc3dvcmQgPT4gJFRlc3RVc2VyTG9naW4sCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgc2NyaXB0IGFsaWFzCiAgICAgICAgbXkgJFNjcmlwdEFsaWFzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTY3JpcHRBbGlhcycpOwoKICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgICAgICMgVGVzdCBjYXNlOiBDb21tZW50MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiAgICAgICAgIyBuYXZpZ2F0ZSB0byBBZG1pbkdlbmVyYWxDYXRhbG9nIHNjcmVlbgogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRHZXQoIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2ciKTsKCiAgICAgICAgIyBjbGljayAiQWRkIENhdGFsb2cgQ2xhc3MiCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J0FkZCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IGdlbmVyYWwgY2F0YWxvZyBwcmVmZXJlbmNlIENvbW1lbnQyIGlzIG5vdCBwcmVzZW50IHdoaWxlIGludmFsaWQKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICIjQ29tbWVudDIiICkgPT0gLTEsCiAgICAgICAgICAgICIjQ29tbWVudDIgaXMgbm90IGVuYWJsZWQhIiwKICAgICAgICApOwoKICAgICAgICAjIGdldCBnZW5lcmFsIGNhdGFsb2cgcHJlZmVyZW5jZSBDb21tZW50MiBkZWZhdWx0IHN5c2NvbmZpZwogICAgICAgIG15ICVQcmVmZXJlbmNlQ29tbWVudDJDb25maWcgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nR2V0KAogICAgICAgICAgICBOYW1lICAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjQ29tbWVudDInLAogICAgICAgICAgICBEZWZhdWx0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBzZXQgZ2VuZXJhbCBjYXRhbG9nIHByZWZlcmVuY2UgQ29tbWVudDIgdG8gdmFsaWQKICAgICAgICBteSAlUHJlZmVyZW5jZUNvbW1lbnQyQ29uZmlnVXBkYXRlID0gbWFwIHsgJF8tPntLZXl9ID0+ICRfLT57Q29udGVudH0gfQogICAgICAgICAgICBncmVwIHsgZGVmaW5lZCAkXy0+e0tleX0gfQogICAgICAgICAgICBAeyAkUHJlZmVyZW5jZUNvbW1lbnQyQ29uZmlne1hNTENvbnRlbnRQYXJzZWR9LT57VmFsdWV9LT5bMF0tPntIYXNofS0+WzBdLT57SXRlbX0gfTsKCiAgICAgICAgI0B7ICRQcmVmZXJlbmNlQ29tbWVudDJDb25maWd7U2V0dGluZ30tPlsxXS0+e0hhc2h9LT5bMV0tPntJdGVtfSB9OwoKICAgICAgICAkSGVscGVyLT5Db25maWdTZXR0aW5nQ2hhbmdlKAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICBLZXkgICA9PiAnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI0NvbW1lbnQyJywKICAgICAgICAgICAgVmFsdWUgPT4gXCVQcmVmZXJlbmNlQ29tbWVudDJDb25maWdVcGRhdGUsCiAgICAgICAgKTsKCiAgICAgICAgIyByZWZyZXNoIHNjcmVlbiBmb3Igc3lzY29uZmlnIHVwZGF0ZSB0byB0YWtlIGVmZmVjdAogICAgICAgICRTZWxlbml1bS0+VmVyaWZpZWRSZWZyZXNoKCk7CgogICAgICAgICMgdmVyaWZ5IHRoYXQgZ2VuZXJhbCBjYXRhbG9nIHByZWZlcmVuY2UgQ29tbWVudDIgaXMgcHJlc2VudCB3aGlsZSB2YWxpZAogICAgICAgIG15ICRTdWNjZXNzID0gJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudDIiLCAnY3NzJyApLT5pc19lbmFibGVkKCk7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAiI0NvbW1lbnQyIGlzIGVuYWJsZWQhIiwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSByZWFsIHRlc3QgY2F0YWxvZyBjbGFzcwogICAgICAgIG15ICRDYXRhbG9nQ2xhc3NEc2MgID0gIkNhdGFsb2dDbGFzc0RzYyIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDYXRhbG9nQ2xhc3NOYW1lID0gIkNhdGFsb2dDbGFzc05hbWUiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDbGFzc0RzYyIsICdjc3MnICktPnNlbmRfa2V5cygkQ2F0YWxvZ0NsYXNzRHNjKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgICdjc3MnICktPnNlbmRfa2V5cygkQ2F0YWxvZ0NsYXNzTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICAnY3NzJyApLT5zZW5kX2tleXMoIlNlbGVuaXVtIGNhdGFsb2cgY2xhc3MiKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI1ZhbGlkSUQnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjbGljayAiQWRkIENhdGFsb2cgSXRlbSIKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nQWRkJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgY3JlYXRlIHJlYWwgdGVzdCBjYXRhbG9nIGl0ZW0KICAgICAgICBteSAkQ2F0YWxvZ0NsYXNzSXRlbSA9ICJDYXRhbG9nQ2xhc3NJdGVtIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICAgICdjc3MnICktPnNlbmRfa2V5cygkQ2F0YWxvZ0NsYXNzSXRlbSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICdjc3MnICktPnNlbmRfa2V5cygiU2VsZW5pdW0gY2F0YWxvZyBpdGVtIik7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNWYWxpZElEJykudmFsKCcxJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKCiAgICAgICAgIyBzZXQgaW5jbHVkZWQgcXVldWUgYXR0cmlidXRlIENvbW1lbnQyCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudDIiLCAnY3NzJyApLT5zZW5kX2tleXMoJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZW5lcmljIENvbW1lbnQyJyk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGdldCB0ZXN0IGNhdGFsb2cgaXRlbXMgSURzCiAgICAgICAgbXkgQENhdGFsb2dJdGVtSURzOwogICAgICAgIGZvciBteSAkQ2F0YWxvZ0l0ZW1zICggJENhdGFsb2dDbGFzc05hbWUsICRDYXRhbG9nQ2xhc3NJdGVtICkgewogICAgICAgICAgICBteSAkQ2F0YWxvZ0NsYXNzSXRlbURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICRDYXRhbG9nQ2xhc3NEc2MsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ2F0YWxvZ0l0ZW1zLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkQ2F0YWxvZ0l0ZW1JRCA9ICRDYXRhbG9nQ2xhc3NJdGVtRGF0YS0+e0l0ZW1JRH07CiAgICAgICAgICAgIHB1c2ggQENhdGFsb2dJdGVtSURzLCAkQ2F0YWxvZ0l0ZW1JRDsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgbmV3IHRlc3QgY2F0YWxvZyBpdGVtIENvbW1lbnQyIHZhbHVlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoCiAgICAgICAgICAgICIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nO1N1YmFjdGlvbj1JdGVtRWRpdDtJdGVtSUQ9JENhdGFsb2dJdGVtSURzWzFdJyApXSIKICAgICAgICApLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjQ29tbWVudDInLCAnY3NzJyApLT5nZXRfdmFsdWUoKSwKICAgICAgICAgICAgJ0dlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXNHZW5lcmljIENvbW1lbnQyJywKICAgICAgICAgICAgIiNDb21tZW50MiBzdG9yZWQgdmFsdWUiLAogICAgICAgICk7CgogICAgICAgICMgdXBkYXRlIENvbW1lbnQyCiAgICAgICAgbXkgJFVwZGF0ZUNvbW1lbnQyID0gIlVwZGF0ZWQgY29tbWVudCBmb3IgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc0dlbmVyaWMgQ29tbWVudDIiOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NvbW1lbnQyIiwgJ2NzcycgKS0+Y2xlYXIoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDb21tZW50MiIsICdjc3MnICktPnNlbmRfa2V5cygkVXBkYXRlQ29tbWVudDIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdTdWJtaXQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBjaGVjayB1cGRhdGVkIENvbW1lbnQyIHZhbHVlCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICRDYXRhbG9nQ2xhc3NJdGVtLCAnbGlua190ZXh0JyApLT5WZXJpZmllZENsaWNrKCk7CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNDb21tZW50MicsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkVXBkYXRlQ29tbWVudDIsCiAgICAgICAgICAgICIjQ29tbWVudDIgdXBkYXRlZCB2YWx1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICAgICAjIFRlc3QgY2FzZTogUGVybWlzc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgogICAgICAgICMgbmF2aWdhdGUgdG8gQWRtaW5HZW5lcmFsQ2F0YWxvZyBzY3JlZW4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KCIke1NjcmlwdEFsaWFzfWluZGV4LnBsP0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nIik7CgogICAgICAgICMgY2xpY2sgb24gdGVzdCBDYXRhbG9nQ2xhc3MKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJENhdGFsb2dDbGFzc0RzYywgJ2xpbmtfdGV4dCcgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIGNsaWNrICJBZGQgQ2F0YWxvZyBJdGVtIgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdBZGQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyB2ZXJpZnkgdGhhdCBnZW5lcmFsIGNhdGFsb2cgcHJlZmVyZW5jZSBQZXJtaXNzaW9ucyBpcyBub3QgcHJlc2VudCB3aGlsZSBpbnZhbGlkCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAiI1Blcm1pc3Npb25fU2VhcmNoIiApID09IC0xLAogICAgICAgICAgICAiI1Blcm1pc3Npb25zIGlzIG5vdCBlbmFibGVkISIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgZ2VuZXJhbCBjYXRhbG9nIHByZWZlcmVuY2UgUGVybWlzc2lvbiBkZWZhdWx0IHN5c2NvbmZpZwogICAgICAgIG15ICVQcmVmZXJlbmNlUGVybWlzc2lvbnNDb25maWcgPSAkU3lzQ29uZmlnT2JqZWN0LT5TZXR0aW5nR2V0KAogICAgICAgICAgICBOYW1lICAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMnLAogICAgICAgICAgICBEZWZhdWx0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFByZWZlcmVuY2VQZXJtaXNzaW9uc0VmZmVjdGl2ZUNvbmZpZyA9ICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdFZmZlY3RpdmVWYWx1ZUdldCgKICAgICAgICAgICAgVmFsdWUgPT4gJFByZWZlcmVuY2VQZXJtaXNzaW9uc0NvbmZpZ3tYTUxDb250ZW50UGFyc2VkfS0+e1ZhbHVlfSwKICAgICAgICApOwoKICAgICAgICAjIHNldCBDbGFzcyBmb3IgR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI1Blcm1pc3Npb25zIGFzIHRlc3QgQ2F0YWxvZ0NsYXNzCiAgICAgICAgJFByZWZlcmVuY2VQZXJtaXNzaW9uc0VmZmVjdGl2ZUNvbmZpZy0+e0NsYXNzfSA9ICRDYXRhbG9nQ2xhc3NEc2M7CgogICAgICAgICRIZWxwZXItPkNvbmZpZ1NldHRpbmdDaGFuZ2UoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgIEtleSAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjUGVybWlzc2lvbnMnLAogICAgICAgICAgICBWYWx1ZSA9PiAkUHJlZmVyZW5jZVBlcm1pc3Npb25zRWZmZWN0aXZlQ29uZmlnLAogICAgICAgICk7CgogICAgICAgICMgcmVmcmVzaCBzY3JlZW4gZm9yIHN5c2NvbmZpZyB1cGRhdGUgdG8gdGFrZSBlZmZlY3QKICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkUmVmcmVzaCgpOwoKICAgICAgICAjIHZlcmlmeSB0aGF0IGdlbmVyYWwgY2F0YWxvZyBwcmVmZXJlbmNlIFBlcm1pc3Npb25zIGlzIHByZXNlbnQgd2hpbGUgdmFsaWQKICAgICAgICAkU3VjY2VzcyA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1Blcm1pc3Npb25fU2VhcmNoIiwgJ2NzcycgKS0+aXNfZW5hYmxlZCgpOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgIiNQZXJtaXNzaW9ucyBpcyBlbmFibGVkISIsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgREIgb2JqZWN0CiAgICAgICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICMgZGVsZXRlIGNyZWF0ZWQgdGVzdCBjYXRhbG9nIGNsYXNzCiAgICAgICAgZm9yIG15ICRDYXRhbG9nSXRlbSAoQENhdGFsb2dJdGVtSURzKSB7CgogICAgICAgICAgICAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIGdlbmVyYWxfY2F0YWxvZ19wcmVmZXJlbmNlcyBXSEVSRSBnZW5lcmFsX2NhdGFsb2dfaWQgPSAkQ2F0YWxvZ0l0ZW0iLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNhdGFsb2dJdGVtSUQgJENhdGFsb2dJdGVtIHByZWZlcmVuY2UgLSBkZWxldGVkIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkREJPYmplY3QtPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBnZW5lcmFsX2NhdGFsb2cgV0hFUkUgaWQgPSAkQ2F0YWxvZ0l0ZW0iLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNhdGFsb2dJdGVtSUQgJENhdGFsb2dJdGVtIC0gZGVsZXRlZCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNsZWFuIHVwIGNhY2hlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoIFR5cGUgPT4gJ0dlbmVyYWxDYXRhbG9nJyApOwogICAgfQopOwoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIChxdygkU2VsZikpOwoKbXkgJFNlbGVuaXVtID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpTZWxlbml1bScpOwoKJFNlbGVuaXVtLT5SdW5UZXN0KAogICAgc3ViIHsKCiAgICAgICAgbXkgJEhlbHBlciA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7CgogICAgICAgICMgQ3JlYXRlIGFuZCBsb2cgaW4gdGVzdCB1c2VyLgogICAgICAgIG15ICRUZXN0VXNlckxvZ2luID0gJEhlbHBlci0+VGVzdFVzZXJDcmVhdGUoCiAgICAgICAgICAgIEdyb3VwcyA9PiBbJ2FkbWluJ10sCiAgICAgICAgKSB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgdXNlciI7CgogICAgICAgICRTZWxlbml1bS0+TG9naW4oCiAgICAgICAgICAgIFR5cGUgICAgID0+ICdBZ2VudCcsCiAgICAgICAgICAgIFVzZXIgICAgID0+ICRUZXN0VXNlckxvZ2luLAogICAgICAgICAgICBQYXNzd29yZCA9PiAkVGVzdFVzZXJMb2dpbiwKICAgICAgICApOwoKICAgICAgICBteSAkU2NyaXB0QWxpYXMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OkNvbmZpZycpLT5HZXQoJ1NjcmlwdEFsaWFzJyk7CgogICAgICAgICMgTmF2aWdhdGUgdG8gQWRtaW5HZW5lcmFsQ2F0YWxvZyBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5HZW5lcmFsQ2F0YWxvZyIpOwoKICAgICAgICAjIENsaWNrICJBZGQgQ2F0YWxvZyBDbGFzcyIuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J0FkZCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGZvciBpbnB1dCBmaWVsZHMuCiAgICAgICAgZm9yIG15ICRJRCAoCiAgICAgICAgICAgIHF3KENsYXNzRHNjIE5hbWUgVmFsaWRJRCBDb21tZW50KQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkRWxlbWVudCA9ICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiIyRJRCIsICdjc3MnICk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19lbmFibGVkKCk7CiAgICAgICAgICAgICRFbGVtZW50LT5pc19kaXNwbGF5ZWQoKTsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgY2xpZW50IHNpZGUgdmFsaWRhdGlvbi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiI05hbWUuRXJyb3IiKS5sZW5ndGgnICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNOYW1lJykuaGFzQ2xhc3MoJ0Vycm9yJykiCiAgICAgICAgICAgICksCiAgICAgICAgICAgICcxJywKICAgICAgICAgICAgJ0NsaWVudCBzaWRlIHZhbGlkYXRpb24gY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgaW5wdXQgdmFsdWUnLAogICAgICAgICk7CgogICAgICAgICMgQ3JlYXRlIHJlYWwgdGVzdCBjYXRhbG9nIGNsYXNzLgogICAgICAgIG15ICRDYXRhbG9nQ2xhc3NEc2MgID0gIkNhdGFsb2dDbGFzc0RzYyIgLiAkSGVscGVyLT5HZXRSYW5kb21JRCgpOwogICAgICAgIG15ICRDYXRhbG9nQ2xhc3NOYW1lID0gIkNhdGFsb2dDbGFzc05hbWUiIC4gJEhlbHBlci0+R2V0UmFuZG9tSUQoKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNDbGFzc0RzYyIsICdjc3MnICktPnNlbmRfa2V5cygkQ2F0YWxvZ0NsYXNzRHNjKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAgICdjc3MnICktPnNlbmRfa2V5cygkQ2F0YWxvZ0NsYXNzTmFtZSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICAnY3NzJyApLT5zZW5kX2tleXMoIlNlbGVuaXVtIGNhdGFsb2cgY2xhc3MiKTsKICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJcJCgnI1ZhbGlkSUQnKS52YWwoJzEnKS50cmlnZ2VyKCdyZWRyYXcuSW5wdXRGaWVsZCcpLnRyaWdnZXIoJ2NoYW5nZScpOyIpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAnI1N1Ym1pdCcsICdjc3MnICktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDbGljayAiR28gdG8gb3ZlcnZpZXciLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2FbY29udGFpbnMoXEBocmVmLCBcJ0FjdGlvbj1BZG1pbkdlbmVyYWxDYXRhbG9nJyApXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgZm9yIGNyZWF0ZWQgdGVzdCBjYXRhbG9nIGNsYXNzIGluIEFkbWluR2VuZXJhbENhdGFsb2cgc2NyZWVuIGFuZCBjbGljayBvbiBpdC4KICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgaW5kZXgoICRTZWxlbml1bS0+Z2V0X3BhZ2Vfc291cmNlKCksICRDYXRhbG9nQ2xhc3NEc2MgKSA+IC0xLAogICAgICAgICAgICAiQ3JlYXRlZCB0ZXN0IGNhdGFsb2cgY2xhc3MgJENhdGFsb2dDbGFzc0RzYyAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWRtaW5HZW5lcmFsQ2F0YWxvZztTdWJhY3Rpb249SXRlbUxpc3Q7Q2xhc3M9JENhdGFsb2dDbGFzc0RzYycgKV0iCiAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENsaWNrICJBZGQgQ2F0YWxvZyBJdGVtIi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nQWRkJ11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgQ2hlY2sgY2xpZW50IHNpZGUgdmFsaWRhdGlvbi4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgICAnY3NzJyApLT5jbGVhcigpOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdCIsICdjc3MnICktPmNsaWNrKCk7CiAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiI05hbWUuRXJyb3IiKS5sZW5ndGgnICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgKICAgICAgICAgICAgICAgICJyZXR1cm4gXCQoJyNOYW1lJykuaGFzQ2xhc3MoJ0Vycm9yJykiCiAgICAgICAgICAgICksCiAgICAgICAgICAgICcxJywKICAgICAgICAgICAgJ0NsaWVudCBzaWRlIHZhbGlkYXRpb24gY29ycmVjdGx5IGRldGVjdGVkIG1pc3NpbmcgaW5wdXQgdmFsdWUnLAogICAgICAgICk7CgogICAgICAgICMgVHJ5IHRvIGNyZWF0ZSBjYXRhbG9nIGl0ZW0gdGhhdCBhbHJlYWR5IGV4aXN0cy4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiNOYW1lIiwgJ2NzcycgKS0+c2VuZF9rZXlzKCRDYXRhbG9nQ2xhc3NOYW1lKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgVmVyaWZ5IGVycm9yIG1lc3NhZ2UuCiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgIGluZGV4KCAkU2VsZW5pdW0tPmdldF9wYWdlX3NvdXJjZSgpLCAnTmVlZCBJdGVtSUQgT1IgQ2xhc3MgYW5kIE5hbWUhJyApID4gLTEsCiAgICAgICAgICAgICJFcnJvciBtZXNzYWdlIC0gZGlzcGxheWVkIiwKICAgICAgICApOwoKICAgICAgICAjIFJldHVybiBiYWNrIHRvIHRlc3QgY2F0YWxvZyBjbGFzcyBzY3JlZW4gYW5kIGNsaWNrIG9uICJBZGQgQ2F0YWxvZyBJdGVtIi4KICAgICAgICAkU2VsZW5pdW0tPlZlcmlmaWVkR2V0KAogICAgICAgICAgICAiJHtTY3JpcHRBbGlhc31pbmRleC5wbD9BY3Rpb249QWRtaW5HZW5lcmFsQ2F0YWxvZztTdWJhY3Rpb249SXRlbUxpc3Q7Q2xhc3M9JENhdGFsb2dDbGFzc0RzYyIKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCIvL2J1dHRvbltcQHZhbHVlPSdBZGQnXVtcQHR5cGU9J3N1Ym1pdCddIiktPlZlcmlmaWVkQ2xpY2soKTsKCiAgICAgICAgIyBDcmVhdGUgcmVhbCB0ZXN0IGNhdGFsb2cgaXRlbS4KICAgICAgICBteSAkQ2F0YWxvZ0NsYXNzSXRlbSA9ICJDYXRhbG9nQ2xhc3NJdGVtIiAuICRIZWxwZXItPkdldFJhbmRvbUlEKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICAgICdjc3MnICktPnNlbmRfa2V5cygkQ2F0YWxvZ0NsYXNzSXRlbSk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjQ29tbWVudCIsICdjc3MnICktPnNlbmRfa2V5cygiU2VsZW5pdW0gY2F0YWxvZyBpdGVtIik7CiAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgiXCQoJyNWYWxpZElEJykudmFsKCcxJykudHJpZ2dlcigncmVkcmF3LklucHV0RmllbGQnKS50cmlnZ2VyKCdjaGFuZ2UnKTsiKTsKICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCgiLy9idXR0b25bXEB2YWx1ZT0nU3VibWl0J11bXEB0eXBlPSdzdWJtaXQnXSIpLT5WZXJpZmllZENsaWNrKCk7CgogICAgICAgICMgR2V0IHRlc3QgY2F0YWxvZyBpdGVtcyBJRHMuCiAgICAgICAgbXkgQENhdGFsb2dJdGVtSURzOwogICAgICAgIGZvciBteSAkQ2F0YWxvZ0l0ZW1zICggJENhdGFsb2dDbGFzc05hbWUsICRDYXRhbG9nQ2xhc3NJdGVtICkgewogICAgICAgICAgICBteSAkQ2F0YWxvZ0NsYXNzSXRlbURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgICAgIENsYXNzID0+ICRDYXRhbG9nQ2xhc3NEc2MsCiAgICAgICAgICAgICAgICBOYW1lICA9PiAkQ2F0YWxvZ0l0ZW1zLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAkQ2F0YWxvZ0l0ZW1JRCA9ICRDYXRhbG9nQ2xhc3NJdGVtRGF0YS0+e0l0ZW1JRH07CiAgICAgICAgICAgIHB1c2ggQENhdGFsb2dJdGVtSURzLCAkQ2F0YWxvZ0l0ZW1JRDsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgZm9yIGNyZWF0ZWQgdGVzdCBjYXRhbG9nIGl0ZW0gYW5kIGNsaWNrIG9uIGl0LgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICBpbmRleCggJFNlbGVuaXVtLT5nZXRfcGFnZV9zb3VyY2UoKSwgJENhdGFsb2dDbGFzc0l0ZW0gKSA+IC0xLAogICAgICAgICAgICAiQ3JlYXRlZCB0ZXN0IGNhdGFsb2cgaXRlbSAkQ2F0YWxvZ0NsYXNzSXRlbSAtIGZvdW5kIiwKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KAogICAgICAgICAgICAiLy9hW2NvbnRhaW5zKFxAaHJlZiwgXCdBY3Rpb249QWRtaW5HZW5lcmFsQ2F0YWxvZztTdWJhY3Rpb249SXRlbUVkaXQ7SXRlbUlEPSRDYXRhbG9nSXRlbUlEc1sxXScgKV0iCiAgICAgICAgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIG5ldyB0ZXN0IGNhdGFsb2cgaXRlbSB2YWx1ZXMuCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggJyNOYW1lJywgJ2NzcycgKS0+Z2V0X3ZhbHVlKCksCiAgICAgICAgICAgICRDYXRhbG9nQ2xhc3NJdGVtLAogICAgICAgICAgICAiI05hbWUgc3RvcmVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjQ29tbWVudCcsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAiU2VsZW5pdW0gY2F0YWxvZyBpdGVtIiwKICAgICAgICAgICAgIiNDb21tZW50IHN0b3JlZCB2YWx1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBFZGl0IG5hbWUgYW5kIGNvbW1lbnQuCiAgICAgICAgbXkgJEVkaXRDYXRhbG9nQ2xhc3NJdGVtID0gIkVkaXQiIC4gJENhdGFsb2dDbGFzc0l0ZW07CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICAgICdjc3MnICktPmNsZWFyKCk7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICIjTmFtZSIsICAgICdjc3MnICktPnNlbmRfa2V5cygkRWRpdENhdGFsb2dDbGFzc0l0ZW0pOwogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI0NvbW1lbnQiLCAnY3NzJyApLT5zZW5kX2tleXMoIiBlZGl0Iik7CiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoIi8vYnV0dG9uW1xAdmFsdWU9J1N1Ym1pdCddW1xAdHlwZT0nc3VibWl0J10iKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAjIENoZWNrIGVkaXRlZCB0ZXN0IGNhdGFsb2cgaXRlbSB2YWx1ZXMuCiAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICRFZGl0Q2F0YWxvZ0NsYXNzSXRlbSwgJ2xpbmtfdGV4dCcgKS0+VmVyaWZpZWRDbGljaygpOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjTmFtZScsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAkRWRpdENhdGFsb2dDbGFzc0l0ZW0sCiAgICAgICAgICAgICIjTmFtZSB1cGRhdGVkIHZhbHVlIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjQ29tbWVudCcsICdjc3MnICktPmdldF92YWx1ZSgpLAogICAgICAgICAgICAiU2VsZW5pdW0gY2F0YWxvZyBpdGVtIGVkaXQiLAogICAgICAgICAgICAiI0NvbW1lbnQgdXBkYXRlZCB2YWx1ZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayBvbiAnY2FuY2VsJyBhbmQgdmVyaWZ5IGNvcnJlY3QgbGluay4KICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIkNhbmNlbCIsICdsaW5rX3RleHQnICktPlZlcmlmaWVkQ2xpY2soKTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICRFZGl0Q2F0YWxvZ0NsYXNzSXRlbSwgJ2xpbmtfdGV4dCcgKSwKICAgICAgICAgICAgIkNhbmNlbCBsaW5rIGlzIGNvcnJlY3QuIgogICAgICAgICk7CgogICAgICAgICMgR2V0IFdhcm5pbmdJRC4KICAgICAgICBteSAkSXRlbURhdGFSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkluY2lkZW50U3RhdGUnLAogICAgICAgICAgICBOYW1lICA9PiAnV2FybmluZycsCiAgICAgICAgKTsKICAgICAgICBteSAkV2FybmluZ0lEID0gJEl0ZW1EYXRhUmVmLT57SXRlbUlEfTsKICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgJFdhcm5pbmdJRCwKICAgICAgICAgICAgIldhcm5pbmcgaW5jaWRlbnQgc3RhdGUgSUQgLSAkV2FybmluZ0lEIiwKICAgICAgICApOwoKICAgICAgICAjIE5hdmlnYXRlIHRvIFdhcm5pbmcgZWRpdCBzY3JlZW4uCiAgICAgICAgJFNlbGVuaXVtLT5WZXJpZmllZEdldCgKICAgICAgICAgICAgIiR7U2NyaXB0QWxpYXN9aW5kZXgucGw/QWN0aW9uPUFkbWluR2VuZXJhbENhdGFsb2c7U3ViYWN0aW9uPUl0ZW1FZGl0O0l0ZW1JRD0kV2FybmluZ0lEIgogICAgICAgICk7CgogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcigKICAgICAgICAgICAgSmF2YVNjcmlwdCA9PiAncmV0dXJuIHR5cGVvZigkKSA9PT0gImZ1bmN0aW9uIiAmJiAkKCIjVmFsaWRJRCIpLmxlbmd0aCAmJiAkKCIjRnVuY3Rpb25hbGl0eSIpLmxlbmd0aDsnCiAgICAgICAgKTsKCiAgICAgICAgIyBTZWxlY3QgJ3dhcm5pbmcnIGFzIEZ1bmN0aW9uYWxpdHkgb3B0aW9uLgogICAgICAgICRTZWxlbml1bS0+SW5wdXRGaWVsZFZhbHVlU2V0KAogICAgICAgICAgICBFbGVtZW50ID0+ICcjRnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgIFZhbHVlICAgPT4gJ3dhcm5pbmcnLAogICAgICAgICk7CgogICAgICAgICMgU2VsZWN0ICdJbnZhbGlkJyBhcyBWYWxpZElEIG9wdGlvbi4KICAgICAgICAkU2VsZW5pdW0tPklucHV0RmllbGRWYWx1ZVNldCgKICAgICAgICAgICAgRWxlbWVudCA9PiAnI1ZhbGlkSUQnLAogICAgICAgICAgICBWYWx1ZSAgID0+ICcyJywKICAgICAgICApOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3JqUXVlcnlFdmVudEJvdW5kKAogICAgICAgICAgICBDU1NTZWxlY3RvciA9PiAnI1N1Ym1pdEFuZENvbnRpbnVlJywKICAgICAgICAgICAgRXZlbnQgICAgICAgPT4gJ2NsaWNrJywKICAgICAgICApOwogICAgICAgICRTZWxlbml1bS0+V2FpdEZvcmpRdWVyeUV2ZW50Qm91bmQoCiAgICAgICAgICAgIENTU1NlbGVjdG9yID0+ICcjU3VibWl0JywKICAgICAgICAgICAgRXZlbnQgICAgICAgPT4gJ2NsaWNrJywKICAgICAgICApOwoKICAgICAgICAjIENsaWNrICdTYXZlJyBhbmQgJ1NhdmUgYW5kIGZpbmlzaCcuCiAgICAgICAgZm9yIG15ICRCdXR0b25JRCAocXcoU3VibWl0QW5kQ29udGludWUgU3VibWl0KSkgewogICAgICAgICAgICAkU2VsZW5pdW0tPmZpbmRfZWxlbWVudCggIiMkQnV0dG9uSUQiLCAnY3NzJyApLT5jbGljaygpOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yKCBKYXZhU2NyaXB0ID0+ICdyZXR1cm4gJCgiLkRpYWxvZzp2aXNpYmxlIikubGVuZ3RoOycgKTsKCiAgICAgICAgICAgIG15ICRXYXJuaW5nVGV4dCA9ICdXYXJuaW5nIGluY2lkZW50IHN0YXRlIGNhbiBub3QgYmUgc2V0IHRvIGludmFsaWQuJzsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNlbGVuaXVtLT5leGVjdXRlX3NjcmlwdCgicmV0dXJuIFwkKCcuRGlhbG9nOmNvbnRhaW5zKFwiJFdhcm5pbmdUZXh0XCIpJykubGVuZ3RoOyIpLAogICAgICAgICAgICAgICAgIickQnV0dG9uSUQnIGNsaWNrIC0gV2FybmluZyBkaWFsb2cgaXMgZm91bmQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFNlbGVuaXVtLT5XYWl0Rm9yalF1ZXJ5RXZlbnRCb3VuZCgKICAgICAgICAgICAgICAgIENTU1NlbGVjdG9yID0+ICcjRGlhbG9nQnV0dG9uMScsCiAgICAgICAgICAgICAgICBFdmVudCAgICAgICA9PiAnY2xpY2snLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBDbGljayB0aGUgY2FuY2VsIGJ1dHRvbi4KICAgICAgICAgICAgJFNlbGVuaXVtLT5maW5kX2VsZW1lbnQoICcjRGlhbG9nQnV0dG9uMScsICdjc3MnICktPmNsaWNrKCk7CgogICAgICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoIEphdmFTY3JpcHQgPT4gJ3JldHVybiAhJCgiLkRpYWxvZzp2aXNpYmxlIikubGVuZ3RoOycgKTsKICAgICAgICB9CgogICAgICAgICMgU2VsZWN0ICdWYWxpZCcgYXMgVmFsaWRJRCBvcHRpb24uCiAgICAgICAgJFNlbGVuaXVtLT5JbnB1dEZpZWxkVmFsdWVTZXQoCiAgICAgICAgICAgIEVsZW1lbnQgPT4gJyNWYWxpZElEJywKICAgICAgICAgICAgVmFsdWUgICA9PiAnMScsCiAgICAgICAgKTsKCiAgICAgICAgIyBDbGljayBTYXZlLgogICAgICAgICRTZWxlbml1bS0+ZmluZF9lbGVtZW50KCAiI1N1Ym1pdEFuZENvbnRpbnVlIiwgJ2NzcycgKS0+VmVyaWZpZWRDbGljaygpOwoKICAgICAgICAkU2VsZW5pdW0tPldhaXRGb3IoCiAgICAgICAgICAgIEphdmFTY3JpcHQgPT4gJ3JldHVybiB0eXBlb2YoJCkgPT09ICJmdW5jdGlvbiIgJiYgJCgiI1ZhbGlkSUQiKS5sZW5ndGggJiYgJCgiI0Z1bmN0aW9uYWxpdHkiKS5sZW5ndGg7JwogICAgICAgICk7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNGdW5jdGlvbmFsaXR5JykudmFsKCkgPT0gJ3dhcm5pbmcnOyIpLAogICAgICAgICAgICAiSW5jaWRlbnQgU3RhdGUgVHlwZSBpcyBzZXQgdG8gJ3dhcm5pbmcnIiwKICAgICAgICApOwogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkU2VsZW5pdW0tPmV4ZWN1dGVfc2NyaXB0KCJyZXR1cm4gXCQoJyNWYWxpZElEJykudmFsKCkgPT0gJzEnOyIpLAogICAgICAgICAgICAiVmFsaWRJRCBpcyBzZXQgdG8gJzEnIiwKICAgICAgICApOwoKICAgICAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAgICAgIyBEZWxldGUgY3JlYXRlZCB0ZXN0IGNhdGFsb2cgY2xhc3MuCiAgICAgICAgZm9yIG15ICRDYXRhbG9nSXRlbSAoQENhdGFsb2dJdGVtSURzKSB7CgogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICREQk9iamVjdC0+RG8oCiAgICAgICAgICAgICAgICBTUUwgID0+ICJERUxFVEUgRlJPTSBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMgV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2lkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRDYXRhbG9nSXRlbSBdLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRTdWNjZXNzLAogICAgICAgICAgICAgICAgIkNhdGFsb2dJdGVtSUQgJENhdGFsb2dJdGVtIHByZWZlcmVuY2UgLSBkZWxldGVkIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTdWNjZXNzID0gJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgICAgIFNRTCAgPT4gIkRFTEVURSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSBpZCA9ID8iLAogICAgICAgICAgICAgICAgQmluZCA9PiBbIFwkQ2F0YWxvZ0l0ZW0gXSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU3VjY2VzcywKICAgICAgICAgICAgICAgICJDYXRhbG9nSXRlbUlEICRDYXRhbG9nSXRlbSAtIGRlbGV0ZWQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBDbGVhbiB1cCBjYWNoZS4KICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCggVHlwZSA9PiAnR2VuZXJhbENhdGFsb2cnICk7CiAgICB9Cik7CgoxOwo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjEgT1RSUyBBRywgaHR0cHM6Ly9vdHJzLmNvbS8KLy8gQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CgovKioKICogQG5hbWVzcGFjZSBHZW5lcmFsQ2F0YWxvZwogKiBAYXV0aG9yIE9UUlMgQUcKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9uIGZvciBHZW5lcmFsIENhdGFsb2cuCiAqLwogSVRTTS5HZW5lcmFsQ2F0YWxvZyA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBuYW1lIEluaXQKICAgICAqIEBtZW1iZXJvZiBHZW5lcmFsQ2F0YWxvZwogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhY3Rpb25zIGZvciBHZW5lcmFsIENhdGFsb2cuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbigpIHsKCiAgICAgICAgaWYgKHR5cGVvZiBDb3JlLkNvbmZpZy5HZXQoJ1dhcm5pbmdJbmNpZGVudFN0YXRlJykgIT09ICd1bmRlZmluZWQnCiAgICAgICAgICAgICYmIHBhcnNlSW50KENvcmUuQ29uZmlnLkdldCgnV2FybmluZ0luY2lkZW50U3RhdGUnKSwgMTApID09PSAxCiAgICAgICAgKSB7CiAgICAgICAgICAgICQoJyNTdWJtaXQnKS5jbGljayhmdW5jdGlvbihFdmVudCl7CiAgICAgICAgICAgICAgICB2YXIgRnVuY3Rpb25hbGl0eSA9ICQoJyNGdW5jdGlvbmFsaXR5JykudmFsKCksCiAgICAgICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9ICQoJyNWYWxpZElEJykudmFsKCk7CgogICAgICAgICAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKCiAgICAgICAgICAgICAgICBpZiAoRnVuY3Rpb25hbGl0eSA9PT0gJ3dhcm5pbmcnICYmIFZhbGlkSUQgIT0gJzEnKSB7CiAgICAgICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0RpYWxvZyh7CiAgICAgICAgICAgICAgICAgICAgICAgIE1vZGFsOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBUaXRsZTogQ29yZS5MYW5ndWFnZS5UcmFuc2xhdGUoJ1dhcm5pbmcnKSwKICAgICAgICAgICAgICAgICAgICAgICAgSFRNTDogJzxwPicgKyBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnV2FybmluZyBpbmNpZGVudCBzdGF0ZSBjYW4gbm90IGJlIHNldCB0byBpbnZhbGlkLicpICsgJzwvcD4nLAogICAgICAgICAgICAgICAgICAgICAgICBQb3NpdGlvblRvcDogJzE1JScsCiAgICAgICAgICAgICAgICAgICAgICAgIFBvc2l0aW9uTGVmdDogJ0NlbnRlcicsCiAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlT25Fc2NhcGU6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBDbG9zZU9uQ2xpY2tPdXRzaWRlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uczogWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsOiBDb3JlLkxhbmd1YWdlLlRyYW5zbGF0ZSgnQ2FuY2VsJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZzp2aXNpYmxlJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS50cmlnZ2VyKCdzdWJtaXQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKCiAgICBDb3JlLkluaXQuUmVnaXN0ZXJOYW1lc3BhY2UoVGFyZ2V0TlMsICdBUFBfTU9EVUxFJyk7CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uR2VuZXJhbENhdGFsb2cgfHwge30pKTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIxIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDIxIFpudW55IEdtYkgsIGh0dHBzOi8vem51bnkub3JnLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMy4wLnR4dC4KIyAtLQoKcGFja2FnZSB2YXI6OnBhY2thZ2VzZXR1cDo6R2VuZXJhbENhdGFsb2c7ICAgICMjIG5vIGNyaXRpYwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZycsCik7Cgo9aGVhZDEgTkFNRQoKdmFyOjpwYWNrYWdlc2V0dXA6OkdlbmVyYWxDYXRhbG9nIC0gY29kZSB0byBleGVjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1jdXQKCj1oZWFkMiBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJENvZGVPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCd2YXI6OnBhY2thZ2VzZXR1cDo6R2VuZXJhbENhdGFsb2cnKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBGb3JjZSBhIHJlbG9hZCBvZiBaWlpBdXRvLnBtIGFuZCBaWlpBQXV0by5wbSB0byBnZXQgdGhlIGZyZXNoIGNvbmZpZ3VyYXRpb24gdmFsdWVzLgogICAgZm9yIG15ICRNb2R1bGUgKCBzb3J0IGtleXMgJUlOQyApIHsKICAgICAgICBpZiAoICRNb2R1bGUgPX4gbS9aWlpBQT91dG9cLnBtJC8gKSB7CiAgICAgICAgICAgIGRlbGV0ZSAkSU5DeyRNb2R1bGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIENyZWF0ZSBjb21tb24gb2JqZWN0cyB3aXRoIGZyZXNoIGRlZmF1bHQgY29uZmlnLgogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKCk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aGVhZDIgQ29kZUluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVJlaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgcmVpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVSZWluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlUmVpbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgcmV0dXJuIDE7Cn0KCj1oZWFkMiBDb2RlVXBncmFkZSgpCgpydW4gdGhlIGNvZGUgdXBncmFkZSBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZSgpOwoKPWN1dAoKc3ViIENvZGVVcGdyYWRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBtaWdyYXRlICdmdW5jdGlvbmFsaXR5JyB0byBleHRlcm5hbCB0YWJsZQogICAgIyB0aGlzIGlzIG9ubHkgbmVjY2VzYXJ5IGluIENvZGVVcGdyYWRlLCBmb3IgbmV3IGluc3RhbGxhdGlvbnMgdGhpcyBpcyBkb25lCiAgICAjIGluIHRoZSBwYWNrYWdlIElUU01Db3JlIGR1cmluZyBDb2RlSW5zdGFsbAogICAgJFNlbGYtPl9NaWdyYXRlRnVuY3Rpb25hbGl0eSgpOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSgpCgpUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaWYgdGhlIGluc3RhbGxlZCBtb2R1bGUgdmVyc2lvbiBpcyBzbWFsbGVyIHRoYW4gNC4wLjkxLgoKbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVXBncmFkZUZyb21Mb3dlclRoYW5fNF8wXzkxKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGVGcm9tTG93ZXJUaGFuXzRfMF85MSB7ICAgICMjIG5vIGNyaXRpYwogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoYW5nZSBjb25maWd1cmF0aW9ucyB0byBtYXRjaCB0aGUgbmV3IG1vZHVsZSBsb2NhdGlvbi4KICAgICRTZWxmLT5fTWlncmF0ZUNvbmZpZ3MoKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAxOwp9Cgo9aGVhZDIgX01pZ3JhdGVGdW5jdGlvbmFsaXR5KCkKCj1jdXQKCnN1YiBfTWlncmF0ZUZ1bmN0aW9uYWxpdHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIFNFTEVDVCBhbGwgZnVuY3Rpb25hbGl0eSB2YWx1ZXMKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBmdW5jdGlvbmFsaXR5IEZST00gZ2VuZXJhbF9jYXRhbG9nJywKICAgICk7CgogICAgbXkgQExpc3Q7CiAgICBST1c6CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG5leHQgUk9XIGlmICEkUm93WzFdOwoKICAgICAgICBwdXNoIEBMaXN0LCBcQFJvdzsKICAgIH0KCiAgICAjIHNhdmUgZW50cmllcyBpbiBuZXcgdGFibGUKICAgIGZvciBteSAkRW50cnkgKEBMaXN0KSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4KICAgICAgICAgICAgICAgICdJTlNFUlQgSU5UTyBnZW5lcmFsX2NhdGFsb2dfcHJlZmVyZW5jZXMoIGdlbmVyYWxfY2F0YWxvZ19pZCwgcHJlZl9rZXksIHByZWZfdmFsdWUgKScKICAgICAgICAgICAgICAgIC4gJyBWQUxVRVMoID8sIFwnRnVuY3Rpb25hbGl0eVwnLCA/ICknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRFbnRyeS0+WzBdLCBcJEVudHJ5LT5bMV0gXSwKICAgICAgICApOwogICAgfQoKICAgICMgZHJvcCBjb2x1bW4gZnVuY3Rpb25hbGl0eQogICAgbXkgKCREcm9wKSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5TUUxQcm9jZXNzb3IoCiAgICAgICAgRGF0YWJhc2UgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZUFsdGVyJywKICAgICAgICAgICAgICAgIE5hbWUgICAgPT4gJ2dlbmVyYWxfY2F0YWxvZycsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ0NvbHVtbkRyb3AnLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnZnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnRW5kJywKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICREcm9wLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWhlYWQyIF9NaWdyYXRlQ29uZmlncygpCgpjaGFuZ2UgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggdGhlIG5ldyBtb2R1bGUgbG9jYXRpb24uCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWlncmF0ZUNvbmZpZ3MoKTsKCj1jdXQKCnN1YiBfTWlncmF0ZUNvbmZpZ3MgewoKICAgIG15ICRTeXNDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnJyk7CiAgICBteSAkQ29uZmlnT2JqZWN0ICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKCiAgICBteSAkU2V0dGluZyA9ICRDb25maWdPYmplY3QtPkdldCgnR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcycpOwoKICAgIG15IEBOZXdTZXR0aW5nczsKCiAgICBDT05GSUdJVEVNOgogICAgZm9yIG15ICRNZW51TW9kdWxlICggc29ydCBrZXlzICV7JFNldHRpbmd9ICkgewoKICAgICAgICAjIHVwZGF0ZSBtb2R1bGUgbG9jYXRpb24KICAgICAgICBteSAkTW9kdWxlID0gJFNldHRpbmctPnskTWVudU1vZHVsZX0tPnsnTW9kdWxlJ307CiAgICAgICAgaWYgKCAkTW9kdWxlICF+IG17S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXMoXHcrKX0gKSB7CiAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTTsKICAgICAgICB9CgogICAgICAgICMgRGVmaW5lIHRoZSBuZXcgc2V0dGluZyB2YWx1ZS4KICAgICAgICAkU2V0dGluZy0+eyRNZW51TW9kdWxlfS0+e01vZHVsZX0gPSAiS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkdlbmVyYWxDYXRhbG9nUHJlZmVyZW5jZXM6OkdlbmVyaWMiOwoKICAgICAgICAjIEJ1aWxkIG5ldyBzZXR0aW5nLgogICAgICAgIHB1c2ggQE5ld1NldHRpbmdzLCB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgID0+ICdHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzIyMjJyAuICRNZW51TW9kdWxlLAogICAgICAgICAgICBFZmZlY3RpdmVWYWx1ZSA9PiAkU2V0dGluZy0+eyRNZW51TW9kdWxlfSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiAxIGlmICFATmV3U2V0dGluZ3M7CgogICAgIyBXcml0ZSBuZXcgc2V0dGluZy4KICAgICRTeXNDb25maWdPYmplY3QtPlNldHRpbmdzU2V0KAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgQ29tbWVudHMgPT4gJ0dlbmVyYWxDYXRhbG9nIC0gcGFja2FnZSBzZXR1cCBmdW5jdGlvbjogX01pZ3JhdGVDb25maWdzJywKICAgICAgICBTZXR0aW5ncyA9PiBcQE5ld1NldHRpbmdzLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKMTsKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTMuMC50eHQ+LgoKPWN1dAo=
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
]]>
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
]]>
{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgrade();
]]>
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_4_0_91();
]]>
{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
]]>
ATTENTION
If you uninstall this package, all database tables that were created during installation will be deleted.
All data from this table will be irrevocably lost.
((enjoy))
]]>
ACHTUNG
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
((enjoy))
]]>
ATENCIÓN
Si usted desinstala este paquete, todas las tablas de la base de datos creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
((enjoy))
]]>
FIGYELEM
Ha eltávolítja ezt a csomagot, akkor a telepítés során létrehozott összes adatbázistábla törlésre kerül.
Az ezekben a táblákban lévő összes adat visszavonhatatlanul el fog veszni!
((enjoy))
]]>