[{"Attribute":[{"category":"External analysis","disable_correlation":false,"first_seen":"2023-05-26T05:10:12.319000+00:00","to_ids":false,"type":"link","uuid":"80c9adce-d2bc-4e14-9cb9-d65071cd6a6d","value":"https://lookyloo.circl.lu/tree/2e6cd1f6-7994-4ec2-b047-9ec8eed0dbff"},{"category":"External analysis","comment":"Screenshot of the page at the end of the capture","data":"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QZcvX9a8efM0evRo9enTJ9tr5ufZvFN275vcsGRMsuvbgxib7du3q3LlymbB090aN26sbt26qXjx4mblKSkpateuneLj4/W///3P7NgPP/ygf/75R+3atcsyzLO3t9f06dN18+ZNTZw4UR9++KHOnj2radOmqVChQjkP4n2W136sW7dOY8eOVc2aNRUaGmoK8oODg3Xy5Mn71r6vvvpKRYoUUcuWLRUYGKhSpUrp66+/zlTP0s/D/D5fM2fO1NKlS9WjRw8tWrRIEyZMUGJiovr27WsKNy2pExsbqx49euj333/Xu+++q6VLlyowMFDTp0/X1KlT78vYOTg4KCkpSa+99ppatWqljRs3au7cuTpw4IDZnr379u3T6NGj5eTkpNDQUL311lvasGGDtm7dmq/7v/POOypRooSmTJmiQYMGaffu3XrzzTfN2nfr1i1NnTpVzz33nN5//31Jlo+NsX/vvPOOgoOD9d1336ldu3ZaunSp+vfvr6tXr+rzzz/XihUr9Mcff2jSpEn56g8AAAAA4OFjCWgAAB4D169fV1xcnOn17t27tWrVKvXp00eVKlXK8pynnnpKJUuWlK2trZ5++mlTeVZl06ZNU40aNbRgwQI5ODhIkvz8/NS5c2fNmTNHQUFB2bbN1tZW586d08cff2xqywsvvKAxY8aofPny6tatmyTp2Wef1bx587Rv3z4FBwfn+b5paWlatWqV6tevb/aP2m5uburWrZucnJxy3S9bW1tFR0dr/vz5pkD9xRdf1LJly7Rr1y6FhIRk2/9OnTpp69atWr9+vb777jv5+fmpcePG8vLyUu3ate+5B2hex/7q1av65Zdf9Nprr6lLly6SJB8fH9WpU0d79uxRQkKCihQpkum8OXPmqHr16lqwYIFsbTO+S+jk5KQxY8boxx9/lL+/v6SMLxisWLFCPj4+kqQWLVpo586d+v777zVw4MAc+5SXcy0dB3t7ex06dEgff/xxjuGllL9n807ZvZdyw5Ixya5v93tskpKSdP78ebVq1SpPfUlPT1etWrVkMBi0du1ade7c2XRs3bp1qlGjhmrVqpXt+dWqVdOYMWM0ceJE2djYaMiQIaY9si0VFxeXKeA0KlGihEVhcl77cfbsWfn4+GjatGmm93eNGjXUrl07bd68WdWrV89VX7ISFxenLVu2qGPHjqY9jTt06KDw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b76ZKWB+9tlnZTAYtGXLFnl7e2vJkiWSpP3796tXr15q2LChfH19NWvWLKWlpZn6OXXqVDVv3lzu7u5q06aNPvvsM9M1z58/r+HDh8vb21v169dXjx49tG/fPtPxpKQkTZ06VS1atFDdunXVs2dPHT9+PFd9Bx6WQoUKae7cuZo7d65WrlypiRMnSpIiIiIkSZcuXdLIkSPl4+Ojhg0bKjg4WH///bfp/DvfS56enhoyZIguXLhwz+O//fabDAaDxo0bJynjCx8NGjQwW8L9559/lsFg0NSpUyVJe/fuVZcuXeTu7i5PT0+98cYbiouLM93r7vf76NGj1apVK0nSwoULH9jS8wAAAAAAAATAAABYqQMHDujKlStZhrKvvPKKNm3apN69e5uVly9fXuXKlTPN+k1ISNCPP/6Y5YzdAQMGqGbNmlq5cqXeeOMNpaen67333lOhQoUeSH8aNWokKWNJaEn66aefdPPmzUxtW7ZsmRYvXix3d3dNnDhRsbGxGjp0qC5fvpyv+69fv16S1Lp1awUGBurMmTM6evSo6fipU6c0atQoXb9+XYMHD5aDg4M2btxodg3j2MyYMUPt2rVTrVq1dObMGfXv318xMTGaNGmS2rVrp0WLFplC3gULFmj58uUKDAzU+++/r8qVK2vChAmKioqSJL3xxhvasWOHgoOD9dZbb+natWsKDg42BVGTJk0ynT916lTFxsYqJCREycnJ+RoP4GEwfjHk2rVrkqSxY8dq48aN6tGjh4YNG6bvv/9eo0aNkiTFx8drwIABunTpksaMGaOBAwdq9+7dGjZs2D2PGwwGlShRQseOHZMkHT9+XAkJCSpWrJgOHjwoSab3u5eXlw4cOKC+ffvqwoULGjJkiFq0aKFvvvlGffv2NX154+73e5MmTfTcc89JkgICAvTOO+88jCEEAAAAAACPIZaABgDASp09e1aSVLt2bdnaZnznKzY2VgsXLjSrd2cIkZaWpmbNmmnt2rWKj4/X7t27lZSUpGbNmumrr74yO8/BwUHjx49X79699ddff8nf319Nmza9Z7uioqJkMBjMyqpVq2aaZZedChUqqEqVKtq6datCQkK0bds2OTo6ysvLy6xtzZs3l4eHh2rVqqWSJUtq//79+uqrr3T06FE1b978nu3LSmJior777ju5uLioQYMGunbtmtasWaMNGzaobt26kqQNGzYoPT1dL730kkJCQiRJx44dM5tlbfw7vPjii3rppZckSbNnz9bt27fVt29fBQUFqUWLFtq0aZM+++wzvfjii6blYv39/eXv76/WrVvr1KlTqlq1qiTp9OnTKlq0qNq0aaNKlSqpWbNmun79uooWLapbt25p7dq1Kl26tEaNGiUbGxtdvXpVEydO1LZt29S6des8jQfwMFy9elUrV66UJLm7u0uSBg8erFdffVVeXl6ysbHRp59+qqNHjyo+Pl4XL15UQkKCKlasqA4dOqhYsWLy8/OTg4ODJOV43MbGRg0bNtT333+v27dva//+/SpatKg6d+6cKQBu1KiRRo8erfT0dE2cONE0q/f8+fPau3evdu3apaZNm2b5fk9OTtaaNWtkMBjUrl27hzeYAAAAAADgsUIADACAlbKxsZEk02w0KSNQCQ8PN6tnXPLUKDAwUF9++aW+//57RUVFqUSJEvL09MzyHsZZqFJGOHLt2jWVLFkyx3ZltQewcb/hyMhIffLJJ6by0NDQTG1bsWKFLl++rO3bt8vX11dFihQxq+Pg4KBly5bp2LFjSkhIMM10jY+Pz7Fd2d3fyclJ27dvV3x8vDp37iwbGxs1adJERYsW1caNGzV27FjZ2trq3LlzkqTq1aubzq9Xr16mZbYlqUGDBqbXxoB38uTJmjx5sqn86tWrSk9PV7t27bRx40aFhISodOnS8vLyUrdu3VSiRAlJUvv27fXxxx+rRYsWeuqpp+Tj46M+ffrI0dFRf/zxh5KTkxUXF6f69eubtSG3S2ADD8OtW7cyfUHExcVFgwcPlpTxPp43b57++usvJScn6/bt25IyViuoUqWKateurT179sjLy0u1atVS8+bNTeHrvY57enpqx44dOn78uPbv3y8PDw95enrq888/161bt3TkyBHTF0tOnDghKeM9blS7dm3t3btXp06dMvsyzJ3vdwAAAAAAgIeBABgAACtlnCH666+/KjU1VXZ2dqpZs6Z+//13SRnB4cmTJzOdZwxVd+3apR07dqh58+ays7PLVO+3335TWFiYqlatKn9/f61cuVKzZ8/WhAkTcmyXcQ/grMTExJhm20kZ+9feqWXLllq+fLk++eQTRUdHa+DAgZmuMWzYMJ08eVJTpkxRw4YN9dFHHykyMjLHNt3r/sblnz/99FN9+umnpuPx8fHa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AAAAAACAghCAAQAAAAAAAApCAAYAAAAAAAAoCAEYAAAAAAAAoCAEYAAAAAAAAICCEIABAAAAAAAACkIABgAAAAAAACgIARgAAAAAAACgIARgAAAAAAAAgIIQgAEAAAAAAAAKQgAGAAAAAAAAKAgBGAAAAAAAAKAgBGAAAAAAAACAghCAAQAAAAAAAApCAAYAAAAAAAAoCAEYAAAAAAAAoCAEYAAAAAAAAICCEIABAAAAAAAACkIABgAAAAAAACgIARgAAAAAAACgIARgAAAAAAAAgIIQgAEAAAAAAAAKQgAGAAAAAAAAKAgBGAAAAAAAAKAgBGAAAAAAAACAghCAAQAAAAAAAApCAAYAAAAAAAAoCAEYAAAAAAAAoCAEYAAAAAAAAICCEIABAAAAAAAACkIABgAAAAAAACgIARgAAAAAAACgIARgAAAAAAAAgIIQgAEAAAAAAAAKQgAGAAAAAAAAKAgBGAAAAAAAAKAgBGAAAAAAAACAghCAAQAAAAAAAApCAAYAAAAAAAAoCAEYAAAAAAAAoCAEYAAAAAAAAICCEIABAAAAAAAACkIABgAAAAAAACgIARgAAAAAAACgIARgAAAAAAAAgIIQgAEAAAAAAAAKQgAGAAAAAAAAKAgBGAAAAAAAAKAgBGAAAAAAAACAghCAAQAAAAAAAApCAAYAAAAAAAAoCAEYAAAAAAAAoCAEYAAAAAAAAICCEIABAAAAAAAACkIABgAAAAAAACgIARgAAAAAAACgIARgAAAAAAAAgIIQgAEAAAAAAAAKQgAGAAAAAAAAKAgBGAAAAAAAAKAgBGAAAAAAAACAghCAAQAAAAAAAApCAAYAAAAAAAAoCAEYAAAAAAAAoCAEYAAAAAAAAICCEIABAAAAAAAACkIABgAAAAAAACgIARgAAAAAAACgIARgAAAAAAAAgIIQgAEAAAAAAAAKQgAGAAAAAAAAKAgBGAAAAAAAAKAgBGAAAAAAAACAghCAAQAAAAAAAApCAAYAAAAAAAAoCAEYAAAAAAAAoCAEYAAAAAAAAICCEIABAAAAAAAACkIABgAAAAAAACgIARgAAAAAAACgIARgAAAAAAAAgIIQgAEAAAAAAAAKQgAGAAAAAAAAKAgBGAAAAAAAAKAgyvt7AAA4Hnz1q1/t7xEAAADghPfya97U3yMAwDHPCmAAAAAAAACAghCA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AAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAPTaLDAAAAseSURBVAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmBDAAAAAAAAAABMCGAAAAAAAAGBCAAMAAAAAAABMCGAAAAAAAACACQEMAAAAAAAAMCGAAQAAAAAAACYEMAAAAAAAAMCEAAYAAAAAAACYEMAAAAAAAAAAEwIYAAAAAAAAYEIAAwAAAAAAAEwIYAAAAAAAAIAJAQwAAAAAAAAwIYABAAAAAAAAJgQwAAAAAAAAwIQABgAAAAAAAJgQwAAAAAAAAAATAhgAAAAAAABgQgADAAAAAAAATAhgAAAAAAAAgAkBDAAAAAAAADAhgAEAAAAAAAAmBDAAAAAAAADAhAAGAAAAAAAAmAgD2AjoN9SENAAAAABJRU5ErkJggg==","disable_correlation":true,"first_seen":"2023-05-26T05:10:12.319000+00:00","to_ids":false,"type":"attachment","uuid":"005cf4a9-6a04-4fcf-a0b4-51c5f034c6c0","value":"screenshot_landing_page.png"},{"category":"External analysis","comment":"HTTP Archive (HAR) of the whole capture","data":"eyJsb2ciOiB7InZlcnNpb24iOiAiMS4yIiwgImNyZWF0b3IiOiB7Im5hbWUiOiAiUGxheXdyaWdodCIsICJ2ZXJzaW9uIjogIjEuMzMuMCJ9LCAiYnJvd3NlciI6IHsibmFtZSI6ICJjaHJvbWl1bSIsICJ2ZXJzaW9uIjogIjExMy4wLjU2NzIuNTMifSwgInBhZ2VzIjogW3sic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTIuMzE0WiIsICJpZCI6ICJwYWdlQDZjZDhmNzlkZjJhOGFiMDBiZGFhMGRkNDlkN2I4ZGZlIiwgInRpdGxlIjogIkxvZ2luIiwgInBhZ2VUaW1pbmdzIjogeyJvbkNvbnRlbnRMb2FkIjogMTE5LCAib25Mb2FkIjogMTQxMX19XSwgImVudHJpZXMiOiBbeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNlQwNToxMDoxMi4zMTlaIiwgInRpbWUiOiAzMy44NywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHA6Ly9qb3JhbWVkaWEuZGUvaW5kZXgyLmh0bWwiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQWNjZXB0IiwgInZhbHVlIjogInRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL2F2aWYsaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCxhcHBsaWNhdGlvbi9zaWduZWQtZXhjaGFuZ2U7dj1iMztxPTAuNyJ9LCB7Im5hbWUiOiAiQWNjZXB0LUVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiSG9zdCIsICJ2YWx1ZSI6ICJqb3JhbWVkaWEuZGUifSwgeyJuYW1lIjogIlVwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDA3LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiQ29udGVudC1FbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJDb250ZW50LVR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sIn0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTIgR01UIn0sIHsibmFtZSI6ICJFVGFnIiwgInZhbHVlIjogIlcvXCIxODFkLTU5OGU2ZTg3ZDllODBcIiJ9LCB7Im5hbWUiOiAiS2VlcC1BbGl2ZSIsICJ2YWx1ZSI6ICJ0aW1lb3V0PTE1In0sIHsibmFtZSI6ICJMYXN0LU1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMDQgRGVjIDIwMTkgMjA6NDY6MzQgR01UIn0sIHsibmFtZSI6ICJTZXJ2ZXIiLCAidmFsdWUiOiAiQXBhY2hlIn0sIHsibmFtZSI6ICJUcmFuc2Zlci1FbmNvZGluZyIsICJ2YWx1ZSI6ICJjaHVua2VkIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDYxNzMsICJtaW1lVHlwZSI6ICJ0ZXh0L2h0bWwiLCAiY29tcHJlc3Npb24iOiAzOTk3LCAidGV4dCI6ICI8IURPQ1RZUEUgaHRtbD5cbjwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDYpaHR0cHM6Ly93d3cuZ214Lm5ldC9sb2dpbi8/c3RhdHVzPWxvZ2luLWZhaWxlZCAtLT5cbjxodG1sIGxhbmc9XCJkZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiIHhtbG5zOmg9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLThcIj48c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIuL01vYmlsZSBMb2dpbl9maWxlcy9qcXVlcnktMi4yLjQtdmVyLTJGNkIxMUE3RTkxNDcxOEUwMjkwNDEwRTg1MzY2RkU5LmpzLmRvd25sb2FkXCI+PC9zY3JpcHQ+XG5cbiAgICA8dGl0bGU+TG9naW48L3RpdGxlPlxuICAgIFxuICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJNb2JpbGVyIEdNWCBMb2dpbjogQXVmIGRpZXNlciBTZWl0ZSBrXHUwMGY2bm5lbiBTaWUgc2ljaCBtaXQgZGVtIFNtYXJ0cGhvbmUgb2RlciBUYWJsZXQgZWluZmFjaCB1bmQgc2ljaGVyIHVudGVyd2VncyBpbiBJaHIgR01YIFBvc3RmYWNoIGVpbmxvZ2dlbi5cIj5cbiAgICA8bWV0YSBuYW1lPVwicm9ib3RzXCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICA8bGluayByZWw9XCJzaG9ydGN1dCBpY29uXCIgdHlwZT1cImltYWdlL3gtaWNvblwiIGhyZWY9XCJodHRwczovL2ltZy51aS1wb3J0YWwuZGUvY2QvY2kvZ214Lm5ldC9mYXZpY29uLmljb1wiPlxuICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wXCI+XG4gICAgPGxpbmsgdHlwZT1cInRleHQvY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIuL01vYmlsZSBMb2dpbl9maWxlcy9iYXNlLXZlci1DRDM1OTUwQjI0QUNBQ0RBNkY1RDMzOEJERDc0QkY1Ni5jc3NcIj5cbiAgICA8c2NyaXB0IHNyYz1cIi4vTW9iaWxlIExvZ2luX2ZpbGVzL2xvZ2luLWFkYXB0aXZlLmpzLmRvd25sb2FkXCI+PC9zY3JpcHQ+XG4gICAgPHNjcmlwdCBzcmM9XCIuL01vYmlsZSBMb2dpbl9maWxlcy9tYXMtYXNwLmpzLmRvd25sb2FkXCI+PC9zY3JpcHQ+XG48L2hlYWQ+XG5cbjxib2R5IGlkPVwidG9wXCIgY2xhc3M9XCJzaXRlLWdteCBqc0VuYWJsZWRcIj5cbjxkaXYgY2xhc3M9XCJzdGF0aXN0aWNzXCI+XG4gICAgPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+XG4gICAgICAgIC8qIDwhW0NEQVRBWyAqL1xuICAgICAgICBwYWdlQmVnaW4oKTtcbiAgICAgICAgLyogXV0+ICovXG4gICAgPC9zY3JpcHQ+XG48L2Rpdj5cblxuPGRpdiBpZD1cIndyYXBwZXJcIj5cbiAgICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+XG5cbiAgICAgICAgPGg6aGVhZGVyIGlkPVwicGFnZS1oZWFkZXJcIiBjbGFzcz1cImhlYWRlci1zaW1wbGVcIj5cbiAgICAgICAgICAgIDxhIGlkPVwiaGVhZGVyLWJyYW5kXCIgaHJlZj1cIiNcIj5HTVguTkVUPC9hPlxuICAgICAgICAgICAgPHNwYW4gaWQ9XCJoZWFkZXItc2VydmljZVwiPkxvZ2luPC9zcGFuPlxuICAgICAgICA8L2g6aGVhZGVyPlxuXG4gICAgICAgIDxoOnNlY3Rpb24gaWQ9XCJwYWdlLWNvbnRlbnRcIj5cblxuICAgICAgICAgICAgPGg6c2VjdGlvbiBpZD1cIm1haW5cIj5cbiAgICAgICAgICAgICAgICA8aDpzZWN0aW9uIGNsYXNzPVwiaGludCBoaW50LWVycm9yIGhpbnQtc2luZ2xlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZWVkYmFja1BhbmVsRVJST1JcIj48c3BhbiBjbGFzcz1cImhpbnQtaGVhZGxpbmVcIj5EZXIgTG9naW4gd2FyIG5pY2h0IGVyZm9sZ3JlaWNoPC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvaDpzZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxoOnNlY3Rpb24gY2xhc3M9XCJjb250ZW50LXBhcnQgY29udGVudC1wYXJ0LWNvbDQgbG9naW4tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMT5Mb2dpbjwvaDE+XG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInN1YmxpbmVcIj5CaXR0ZSBtZWxkZW4gU2llIHNpY2ggaGllciBtaXQgSWhyZXIgR01YIEUtTWFpbC1BZHJlc3NlIHVuZCBJaHJlbSBQYXNzd29ydCBhbi48L2gyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1sIGZvcm0tbG9naW5cIiBuYW1lPVwibG9naW5Gb3JtXCIgbWV0aG9kPVwicG9zdFwiIGFjdGlvbj1cIjIucGhwXCIgYWNjZXB0LWNoYXJzZXQ9XCJVVEYtOFwiIGRhdGEtZm9ybWVycm9yLWNoZWNrPVwic2VydmVyY2hlY2tlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPkxvZ2luRm9ybTwvbGVnZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWl0ZW0gbG9naW4tdXNlcm5hbWUganNWYWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiMDpsb2dpbkZvcm06YWNjb3VudElkZW50aWZpZXJcIiBjbGFzcz1cImpzVmFsaWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1sYWJlbCBqc1ZhbGlkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLS1ibG9jayBtYXJnaW4tYm90dG9tLS00IGpzVmFsaWRcIiBmb3I9XCJpZDFcIj5HTVggRS1NYWlsLUFkcmVzc2U8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRhdGEgcmVsYXRpdmUganNWYWxpZFwiPlxuICAgICAgICBcbiAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBqc1ZhbGlkXCIgdmFsdWU9XCJcIiBuYW1lPVwidXNlcm5hbWVcIiBpZD1cImlkMVwiIHR5cGU9XCJlbWFpbFwiIHRhYmluZGV4PVwiMVwiIGRhdGEtd2ViZHJpdmVyLWlkPVwiMzMxZTk0M2U1MmE1NjY5YTIyYjViZjBkZmNmNDE3ZWMzMDU4MjA0ZlwiIGRhdGEtZm9ybWVycm9yLXRleHQ9XCJCaXR0ZSBFLU1haWwtQWRyZXNzZSBlaW5nZWJlbi5cIiBkYXRhLWZvcm1lcnJvci1jaGVjaz1cIiBzZXJ2ZXJjaGVja2VkXCIgdGl0bGU9XCJcIj48aDpvdXRwdXQgY2xhc3M9XCJmZWVkYmFjayBmZWVkYmFjay1pZDEgZmVlZGJhY2stXCIgZGF0YS1mb3I9XCJpZDFcIiBpZD1cImVycm9ybXNnLWZvci1pZDFcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PHAgZGF0YS13ZWJkcml2ZXItaWQ9XCJmZWVkYmFja1wiPkJpdHRlIEUtTWFpbC1BZHJlc3NlIGVpbmdlYmVuLjwvcD48c3BhbiBjbGFzcz1cIm5vc2VcIj48L3NwYW4+PC9oOm91dHB1dD5cblxuICAgICAgICA8aDpvdXRwdXQgY2xhc3M9XCJzdGF0dXNcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIj48L2g6b3V0cHV0PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxhIGhyZWY9XCIjXCI+SmV0enQga29zdGVubG9zIHJlZ2lzdHJpZXJlbiE8L2E+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWl0ZW0gbG9naW4tcGFzc3dvcmQganNWYWxpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiMDpsb2dpbkZvcm06cGFzc3dvcmRJbnB1dFwiIGNsYXNzPVwianNWYWxpZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLWxhYmVsIGpzVmFsaWRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtLWJsb2NrIG1hcmdpbi1ib3R0b20tLTQganNWYWxpZFwiIGZvcj1cImlkMlwiPlBhc3N3b3J0PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1kYXRhIHJlbGF0aXZlIGpzVmFsaWRcIj5cbiAgICAgICAgXG4gICAgPGlucHV0IGNsYXNzPVwiaW5wdXQganNWYWxpZFwiIHZhbHVlPVwiXCIgbmFtZT1cInBhc3N3b3JkXCIgaWQ9XCJpZDJcIiB0eXBlPVwicGFzc3dvcmRcIiB0YWJpbmRleD1cIjJcIiBkYXRhLXdlYmRyaXZlci1pZD1cIjdlMTQzZWY3ZmVmNzUwNjk1MTE1MGViOTkwMWE5ZGZjZDA5ODE4ZDNcIiBkYXRhLWZvcm1lcnJvci10ZXh0PVwiQml0dGUgUGFzc3dvcnQgZWluZ2ViZW4uXCIgZGF0YS1mb3JtZXJyb3ItY2hlY2s9XCIgc2VydmVyY2hlY2tlZFwiIHRpdGxlPVwiXCI+PGg6b3V0cHV0IGNsYXNzPVwiZmVlZGJhY2sgZmVlZGJhY2staWQyIGZlZWRiYWNrLVwiIGRhdGEtZm9yPVwiaWQyXCIgaWQ9XCJlcnJvcm1zZy1mb3ItaWQyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjxwIGRhdGEtd2ViZHJpdmVyLWlkPVwiZmVlZGJhY2tcIj5CaXR0ZSBQYXNzd29ydCBlaW5nZWJlbi48L3A+PHNwYW4gY2xhc3M9XCJub3NlXCI+PC9zcGFuPjwvaDpvdXRwdXQ+XG5cbiAgICAgICAgPGg6b3V0cHV0IGNsYXNzPVwic3RhdHVzXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCI+PC9oOm91dHB1dD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YSBocmVmPVwiI1wiPlBhc3N3b3J0IHZlcmdlc3Nlbj88L2E+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dpbi1zdWJtaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi13cmFwcGVyIGJ0bi1tIGJ0bi1rZXkgdHJpZ2dlcnMtYWN0aW9uXCI+PGlucHV0IGlkPVwiY29udGludWVCdXR0b25cIiBuYW1lPVwibG9naW5cIiB0eXBlPVwic3VibWl0XCIgdGFiaW5kZXg9XCIzXCIgdmFsdWU9XCJMb2dpblwiIGRhdGEtd2ViZHJpdmVyLWlkPVwiMTQyZGQ2MWM3MjVhZTE5ZjNmYTVjZDIxMzExYTQwOGU5NzUzZTI4YVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uQWN0aW9uSW5Qcm9ncmVzc1wiPiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICA8L2g6c2VjdGlvbj5cbiAgICAgICAgICAgIDwvaDpzZWN0aW9uPlxuICAgICAgICAgICAgPGg6c2VjdGlvbiBpZD1cImFkQmxvY2tcIj5cbiAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz1cIi4vTW9iaWxlIExvZ2luX2ZpbGVzL2VpYy5qcy5kb3dubG9hZFwiPjwvc2NyaXB0PlxuICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPVwiLi9Nb2JpbGUgTG9naW5fZmlsZXMvbW9iaWxlLWFwcHMuanMuZG93bmxvYWRcIj48L3NjcmlwdD48aWZyYW1lIHNyYz1cIi4vTW9iaWxlIExvZ2luX2ZpbGVzL3BsLW0tZnJhbWUtYXNwLmh0bWxcIiBmcmFtZWJvcmRlcj1cIjBcIiBzY3JvbGxpbmc9XCJub1wiIGFsbG93dHJhbnNwYXJlbmN5PVwidHJ1ZVwiIHdpZHRoPVwiMzAwXCIgaGVpZ2h0PVwiMFwiPjwvaWZyYW1lPlxuICAgICAgICAgICAgPC9oOnNlY3Rpb24+XG4gICAgICAgIDwvaDpzZWN0aW9uPlxuXG4gICAgICAgIFxuICAgIDxsb2dpbmFwcC1mb290ZXIgaWQ9XCJwYWdlLWZvb3RlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW5hcHAtZm9vdGVyXCIgaWQ9XCJmb290ZXJNYWluXCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwiZm9vdGVyTWFpbmxpbmtzXCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsb2dpbmFwcC1mb290ZXJfX2xpc3QgbC1ob3Jpem9udGFsIGwtY2VudGVyLWp1c3RpZmllZCBsLWNlbnRlci1hbGlnbmVkIGwtd3JhcFwiPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxvZ2luYXBwLWZvb3Rlcl9fbGlzdC1pdGVtIGZpcnN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibG9naW5hcHAtZm9vdGVyX19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIiNcIj5JbXByZXNzdW08L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsb2dpbmFwcC1mb290ZXJfX2xpc3QtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxvZ2luYXBwLWZvb3Rlcl9fbGlua1wiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIjXCI+QUdCPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibG9naW5hcHAtZm9vdGVyX19saXN0LWl0ZW0gbGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxvZ2luYXBwLWZvb3Rlcl9fbGlua1wiIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCIjXCI+RGF0ZW5zY2h1dHo8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9sb2dpbmFwcC1mb290ZXI+XG5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG5cblxuXG48L2JvZHk+PC9odG1sPiJ9LCAiaGVhZGVyc1NpemUiOiAyNzMsICJib2R5U2l6ZSI6IDIxNzYsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDI0NDl9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDAuNzU1LCAiY29ubmVjdCI6IDcuMDc0LCAic3NsIjogOS4xOCwgInNlbmQiOiAwLCAid2FpdCI6IDE0LjcxNywgInJlY2VpdmUiOiAyLjE0NH0sICJwYWdlcmVmIjogInBhZ2VANmNkOGY3OWRmMmE4YWIwMGJkYWEwZGQ0OWQ3YjhkZmUiLCAic2VydmVySVBBZGRyZXNzIjogIlsyMDAxOjhkODoxMDBmOmYwMDA6OjJkM10iLCAiX3NlcnZlclBvcnQiOiA4MCwgIl9zZWN1cml0eURldGFpbHMiOiB7fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTIuMzYwWiIsICJ0aW1lIjogMjguMjMsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwOi8vam9yYW1lZGlhLmRlL01vYmlsZSUyMExvZ2luX2ZpbGVzL2pxdWVyeS0yLjIuNC12ZXItMkY2QjExQTdFOTE0NzE4RTAyOTA0MTBFODUzNjZGRTkuanMuZG93bmxvYWQiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiQWNjZXB0LUVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiSG9zdCIsICJ2YWx1ZSI6ICJqb3JhbWVkaWEuZGUifSwgeyJuYW1lIjogIlJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS9pbmRleDIuaHRtbCJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogMzU4LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2VwdC1SYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiQ29udGVudC1MZW5ndGgiLCAidmFsdWUiOiAiODU1NzgifSwgeyJuYW1lIjogIkNvbnRlbnQtVHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L2phdmFzY3JpcHQifSwgeyJuYW1lIjogIkRhdGUiLCAidmFsdWUiOiAiRnJpLCAyNiBNYXkgMjAyMyAwNToxMDoxMiBHTVQifSwgeyJuYW1lIjogIkVUYWciLCAidmFsdWUiOiAiXCIxNGU0YS01OThjZWQzZjA5ZTgwXCIifSwgeyJuYW1lIjogIktlZXAtQWxpdmUiLCAidmFsdWUiOiAidGltZW91dD0xNSJ9LCB7Im5hbWUiOiAiTGFzdC1Nb2RpZmllZCIsICJ2YWx1ZSI6ICJUdWUsIDAzIERlYyAyMDE5IDE2OjAyOjUwIEdNVCJ9LCB7Im5hbWUiOiAiU2VydmVyIiwgInZhbHVlIjogIkFwYWNoZSJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA4NTU3OCwgIm1pbWVUeXBlIjogInRleHQvamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIi8qISBqUXVlcnkgdjIuMi40IHwgKGMpIGpRdWVyeSBGb3VuZGF0aW9uIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovXG4hZnVuY3Rpb24oYSxiKXtcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9YS5kb2N1bWVudD9iKGEsITApOmZ1bmN0aW9uKGEpe2lmKCFhLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcihcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIik7cmV0dXJuIGIoYSl9OmIoYSl9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkPWEuZG9jdW1lbnQsZT1jLnNsaWNlLGY9Yy5jb25jYXQsZz1jLnB1c2gsaD1jLmluZGV4T2YsaT17fSxqPWkudG9TdHJpbmcsaz1pLmhhc093blByb3BlcnR5LGw9e30sbT1cIjIuMi40XCIsbj1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgbi5mbi5pbml0KGEsYil9LG89L15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLHA9L14tbXMtLyxxPS8tKFtcXGRhLXpdKS9naSxyPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07bi5mbj1uLnByb3RvdHlwZT17anF1ZXJ5Om0sY29uc3RydWN0b3I6bixzZWxlY3RvcjpcIlwiLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/MD5hP3RoaXNbYSt0aGlzLmxlbmd0aF06dGhpc1thXTplLmNhbGwodGhpcyl9LHB1c2hTdGFjazpmdW5jdGlvbihhKXt2YXIgYj1uLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gYi5wcmV2T2JqZWN0PXRoaXMsYi5jb250ZXh0PXRoaXMuY29udGV4dCxifSxlYWNoOmZ1bmN0aW9uKGEpe3JldHVybiBuLmVhY2godGhpcyxhKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhuLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0rYSsoMD5hP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmI+Yz9bdGhpc1tjXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6Zyxzb3J0OmMuc29ydCxzcGxpY2U6Yy5zcGxpY2V9LG4uZXh0ZW5kPW4uZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYixjLGQsZSxmLGc9YXJndW1lbnRzWzBdfHx7fSxoPTEsaT1hcmd1bWVudHMubGVuZ3RoLGo9ITE7Zm9yKFwiYm9vbGVhblwiPT10eXBlb2YgZyYmKGo9ZyxnPWFyZ3VtZW50c1toXXx8e30saCsrKSxcIm9iamVjdFwiPT10eXBlb2YgZ3x8bi5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTtpPmg7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2JdLGchPT1kJiYoaiYmZCYmKG4uaXNQbGFpbk9iamVjdChkKXx8KGU9bi5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZuLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZuLmlzUGxhaW5PYmplY3QoYyk/Yzp7fSxnW2JdPW4uZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxuLmV4dGVuZCh7ZXhwYW5kbzpcImpRdWVyeVwiKyhtK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xcRC9nLFwiXCIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxub29wOmZ1bmN0aW9uKCl7fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVyblwiZnVuY3Rpb25cIj09PW4udHlwZShhKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hJiZhPT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXt2YXIgYj1hJiZhLnRvU3RyaW5nKCk7cmV0dXJuIW4uaXNBcnJheShhKSYmYi1wYXJzZUZsb2F0KGIpKzE+PTB9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oYSl7dmFyIGI7aWYoXCJvYmplY3RcIiE9PW4udHlwZShhKXx8YS5ub2RlVHlwZXx8bi5pc1dpbmRvdyhhKSlyZXR1cm4hMTtpZihhLmNvbnN0cnVjdG9yJiYhay5jYWxsKGEsXCJjb25zdHJ1Y3RvclwiKSYmIWsuY2FsbChhLmNvbnN0cnVjdG9yLnByb3RvdHlwZXx8e30sXCJpc1Byb3RvdHlwZU9mXCIpKXJldHVybiExO2ZvcihiIGluIGEpO3JldHVybiB2b2lkIDA9PT1ifHxrLmNhbGwoYSxiKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2ErXCJcIjpcIm9iamVjdFwiPT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT10eXBlb2YgYT9pW2ouY2FsbChhKV18fFwib2JqZWN0XCI6dHlwZW9mIGF9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYSl7dmFyIGIsYz1ldmFsO2E9bi50cmltKGEpLGEmJigxPT09YS5pbmRleE9mKFwidXNlIHN0cmljdFwiKT8oYj1kLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksYi50ZXh0PWEsZC5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShwLFwibXMtXCIpLnJlcGxhY2UocSxyKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yi50b0xvd2VyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0wO2lmKHMoYSkpe2ZvcihjPWEubGVuZ3RoO2M+ZDtkKyspaWYoYi5jYWxsKGFbZF0sZCxhW2RdKT09PSExKWJyZWFrfWVsc2UgZm9yKGQgaW4gYSlpZihiLmNhbGwoYVtkXSxkLGFbZF0pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjooYStcIlwiKS5yZXBsYWNlKG8sXCJcIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO3JldHVybiBudWxsIT1hJiYocyhPYmplY3QoYSkpP24ubWVyZ2UoYyxcInN0cmluZ1wiPT10eXBlb2YgYT9bYV06YSk6Zy5jYWxsKGMsYSkpLGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBudWxsPT1iPy0xOmguY2FsbChiLGEsYyl9LG1lcmdlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPStiLmxlbmd0aCxkPTAsZT1hLmxlbmd0aDtjPmQ7ZCsrKWFbZSsrXT1iW2RdO3JldHVybiBhLmxlbmd0aD1lLGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoLGg9IWM7Zz5mO2YrKylkPSFiKGFbZl0sZiksZCE9PWgmJmUucHVzaChhW2ZdKTtyZXR1cm4gZX0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGc9MCxoPVtdO2lmKHMoYSkpZm9yKGQ9YS5sZW5ndGg7ZD5nO2crKyllPWIoYVtnXSxnLGMpLG51bGwhPWUmJmgucHVzaChlKTtlbHNlIGZvcihnIGluIGEpZT1iKGFbZ10sZyxjKSxudWxsIT1lJiZoLnB1c2goZSk7cmV0dXJuIGYuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZjtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxuLmlzRnVuY3Rpb24oYSk/KGQ9ZS5jYWxsKGFyZ3VtZW50cywyKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYnx8dGhpcyxkLmNvbmNhdChlLmNhbGwoYXJndW1lbnRzKSkpfSxmLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8bi5ndWlkKyssZik6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3VwcG9ydDpsfSksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiYobi5mbltTeW1ib2wuaXRlcmF0b3JdPWNbU3ltYm9sLml0ZXJhdG9yXSksbi5lYWNoKFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24oYSxiKXtpW1wiW29iamVjdCBcIitiK1wiXVwiXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBzKGEpe3ZhciBiPSEhYSYmXCJsZW5ndGhcImluIGEmJmEubGVuZ3RoLGM9bi50eXBlKGEpO3JldHVyblwiZnVuY3Rpb25cIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6XCJhcnJheVwiPT09Y3x8MD09PWJ8fFwibnVtYmVyXCI9PXR5cGVvZiBiJiZiPjAmJmItMSBpbiBhfXZhciB0PWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoLGksaixrLGwsbSxuLG8scCxxLHIscyx0LHU9XCJzaXp6bGVcIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9Z2EoKSx6PWdhKCksQT1nYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPVwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixMPVwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixNPVwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFxcXHgwMC1cXFxceGEwXSkrXCIsTj1cIlxcXFxbXCIrTCtcIiooXCIrTStcIikoPzpcIitMK1wiKihbKl4kfCF+XT89KVwiK0wrXCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIitNK1wiKSl8KVwiK0wrXCIqXFxcXF1cIixPPVwiOihcIitNK1wiKSg/OlxcXFwoKCgnKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIitOK1wiKSopfC4qKVxcXFwpfClcIixQPW5ldyBSZWdFeHAoTCtcIitcIixcImdcIiksUT1uZXcgUmVnRXhwKFwiXlwiK0wrXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiK0wrXCIrJFwiLFwiZ1wiKSxSPW5ldyBSZWdFeHAoXCJeXCIrTCtcIiosXCIrTCtcIipcIiksUz1uZXcgUmVnRXhwKFwiXlwiK0wrXCIqKFs+K35dfFwiK0wrXCIpXCIrTCtcIipcIiksVD1uZXcgUmVnRXhwKFwiPVwiK0wrXCIqKFteXFxcXF0nXFxcIl0qPylcIitMK1wiKlxcXFxdXCIsXCJnXCIpLFU9bmV3IFJlZ0V4cChPKSxWPW5ldyBSZWdFeHAoXCJeXCIrTStcIiRcIiksVz17SUQ6bmV3IFJlZ0V4cChcIl4jKFwiK00rXCIpXCIpLENMQVNTOm5ldyBSZWdFeHAoXCJeXFxcXC4oXCIrTStcIilcIiksVEFHOm5ldyBSZWdFeHAoXCJeKFwiK00rXCJ8WypdKVwiKSxBVFRSOm5ldyBSZWdFeHAoXCJeXCIrTiksUFNFVURPOm5ldyBSZWdFeHAoXCJeXCIrTyksQ0hJTEQ6bmV3IFJlZ0V4cChcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIrTCtcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiK0wrXCIqKD86KFsrLV18KVwiK0wrXCIqKFxcXFxkKyl8KSlcIitMK1wiKlxcXFwpfClcIixcImlcIiksYm9vbDpuZXcgUmVnRXhwKFwiXig/OlwiK0srXCIpJFwiLFwiaVwiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cChcIl5cIitMK1wiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIitMK1wiKigoPzotXFxcXGQpP1xcXFxkKilcIitMK1wiKlxcXFwpfCkoPz1bXi1dfCQpXCIsXCJpXCIpfSxYPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWT0vXmhcXGQkL2ksWj0vXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLCQ9L14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXz0vWyt+XS8sYWE9Lyd8XFxcXC9nLGJhPW5ldyBSZWdFeHAoXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIitMK1wiP3woXCIrTCtcIil8LilcIixcImlnXCIpLGNhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cIjB4XCIrYi02NTUzNjtyZXR1cm4gZCE9PWR8fGM/YjowPmQ/U3RyaW5nLmZyb21DaGFyQ29kZShkKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKGQ+PjEwfDU1Mjk2LDEwMjMmZHw1NjMyMCl9LGRhPWZ1bmN0aW9uKCl7bSgpfTt0cnl7SC5hcHBseShFPUkuY2FsbCh2LmNoaWxkTm9kZXMpLHYuY2hpbGROb2RlcyksRVt2LmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlYSl7SD17YXBwbHk6RS5sZW5ndGg/ZnVuY3Rpb24oYSxiKXtHLmFwcGx5KGEsSS5jYWxsKGIpKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmxlbmd0aCxkPTA7d2hpbGUoYVtjKytdPWJbZCsrXSk7YS5sZW5ndGg9Yy0xfX19ZnVuY3Rpb24gZmEoYSxiLGQsZSl7dmFyIGYsaCxqLGssbCxvLHIscyx3PWImJmIub3duZXJEb2N1bWVudCx4PWI/Yi5ub2RlVHlwZTo5O2lmKGQ9ZHx8W10sXCJzdHJpbmdcIiE9dHlwZW9mIGF8fCFhfHwxIT09eCYmOSE9PXgmJjExIT09eClyZXR1cm4gZDtpZighZSYmKChiP2Iub3duZXJEb2N1bWVudHx8Yjp2KSE9PW4mJm0oYiksYj1ifHxuLHApKXtpZigxMSE9PXgmJihvPSQuZXhlYyhhKSkpaWYoZj1vWzFdKXtpZig5PT09eCl7aWYoIShqPWIuZ2V0RWxlbWVudEJ5SWQoZikpKXJldHVybiBkO2lmKGouaWQ9PT1mKXJldHVybiBkLnB1c2goaiksZH1lbHNlIGlmKHcmJihqPXcuZ2V0RWxlbWVudEJ5SWQoZikpJiZ0KGIsaikmJmouaWQ9PT1mKXJldHVybiBkLnB1c2goaiksZH1lbHNle2lmKG9bMl0pcmV0dXJuIEguYXBwbHkoZCxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpKSxkO2lmKChmPW9bM10pJiZjLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gSC5hcHBseShkLGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmKSksZH1pZihjLnFzYSYmIUFbYStcIiBcIl0mJighcXx8IXEudGVzdChhKSkpe2lmKDEhPT14KXc9YixzPWE7ZWxzZSBpZihcIm9iamVjdFwiIT09Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXsoaz1iLmdldEF0dHJpYnV0ZShcImlkXCIpKT9rPWsucmVwbGFjZShhYSxcIlxcXFwkJlwiKTpiLnNldEF0dHJpYnV0ZShcImlkXCIsaz11KSxyPWcoYSksaD1yLmxlbmd0aCxsPVYudGVzdChrKT9cIiNcIitrOlwiW2lkPSdcIitrK1wiJ11cIjt3aGlsZShoLS0pcltoXT1sK1wiIFwiK3FhKHJbaF0pO3M9ci5qb2luKFwiLFwiKSx3PV8udGVzdChhKSYmb2EoYi5wYXJlbnROb2RlKXx8Yn1pZihzKXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbChzKSksZH1jYXRjaCh5KXt9ZmluYWxseXtrPT09dSYmYi5yZW1vdmVBdHRyaWJ1dGUoXCJpZFwiKX19fXJldHVybiBpKGEucmVwbGFjZShRLFwiJDFcIiksYixkLGUpfWZ1bmN0aW9uIGdhKCl7dmFyIGE9W107ZnVuY3Rpb24gYihjLGUpe3JldHVybiBhLnB1c2goYytcIiBcIik+ZC5jYWNoZUxlbmd0aCYmZGVsZXRlIGJbYS5zaGlmdCgpXSxiW2MrXCIgXCJdPWV9cmV0dXJuIGJ9ZnVuY3Rpb24gaGEoYSl7cmV0dXJuIGFbdV09ITAsYX1mdW5jdGlvbiBpYShhKXt2YXIgYj1uLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dHJ5e3JldHVybiEhYShiKX1jYXRjaChjKXtyZXR1cm4hMX1maW5hbGx5e2IucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpLGI9bnVsbH19ZnVuY3Rpb24gamEoYSxiKXt2YXIgYz1hLnNwbGl0KFwifFwiKSxlPWMubGVuZ3RoO3doaWxlKGUtLSlkLmF0dHJIYW5kbGVbY1tlXV09Yn1mdW5jdGlvbiBrYShhLGIpe3ZhciBjPWImJmEsZD1jJiYxPT09YS5ub2RlVHlwZSYmMT09PWIubm9kZVR5cGUmJih+Yi5zb3VyY2VJbmRleHx8QyktKH5hLnNvdXJjZUluZGV4fHxDKTtpZihkKXJldHVybiBkO2lmKGMpd2hpbGUoYz1jLm5leHRTaWJsaW5nKWlmKGM9PT1iKXJldHVybi0xO3JldHVybiBhPzE6LTF9ZnVuY3Rpb24gbGEoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1jJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBtYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihcImlucHV0XCI9PT1jfHxcImJ1dHRvblwiPT09YykmJmIudHlwZT09PWF9fWZ1bmN0aW9uIG5hKGEpe3JldHVybiBoYShmdW5jdGlvbihiKXtyZXR1cm4gYj0rYixoYShmdW5jdGlvbihjLGQpe3ZhciBlLGY9YShbXSxjLmxlbmd0aCxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSljW2U9ZltnXV0mJihjW2VdPSEoZFtlXT1jW2VdKSl9KX0pfWZ1bmN0aW9uIG9hKGEpe3JldHVybiBhJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmYX1jPWZhLnN1cHBvcnQ9e30sZj1mYS5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj1hJiYoYS5vd25lckRvY3VtZW50fHxhKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGI/XCJIVE1MXCIhPT1iLm5vZGVOYW1lOiExfSxtPWZhLnNldERvY3VtZW50PWZ1bmN0aW9uKGEpe3ZhciBiLGUsZz1hP2Eub3duZXJEb2N1bWVudHx8YTp2O3JldHVybiBnIT09biYmOT09PWcubm9kZVR5cGUmJmcuZG9jdW1lbnRFbGVtZW50PyhuPWcsbz1uLmRvY3VtZW50RWxlbWVudCxwPSFmKG4pLChlPW4uZGVmYXVsdFZpZXcpJiZlLnRvcCE9PWUmJihlLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKFwidW5sb2FkXCIsZGEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoXCJvbnVubG9hZFwiLGRhKSksYy5hdHRyaWJ1dGVzPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNsYXNzTmFtZT1cImlcIiwhYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIil9KSxjLmdldEVsZW1lbnRzQnlUYWdOYW1lPWlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKG4uY3JlYXRlQ29tbWVudChcIlwiKSksIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aH0pLGMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1aLnRlc3Qobi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxjLmdldEJ5SWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIG8uYXBwZW5kQ2hpbGQoYSkuaWQ9dSwhbi5nZXRFbGVtZW50c0J5TmFtZXx8IW4uZ2V0RWxlbWVudHNCeU5hbWUodSkubGVuZ3RofSksYy5nZXRCeUlkPyhkLmZpbmQuSUQ9ZnVuY3Rpb24oYSxiKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgYi5nZXRFbGVtZW50QnlJZCYmcCl7dmFyIGM9Yi5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gYz9bY106W119fSxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoXCJpZFwiKT09PWJ9fSk6KGRlbGV0ZSBkLmZpbmQuSUQsZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGJhLGNhKTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSYmYS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIik7cmV0dXJuIGMmJmMudmFsdWU9PT1ifX0pLGQuZmluZC5UQUc9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihhLGIpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lP2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk6Yy5xc2E/Yi5xdWVyeVNlbGVjdG9yQWxsKGEpOnZvaWQgMH06ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9MCxmPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYSk7aWYoXCIqXCI9PT1hKXt3aGlsZShjPWZbZSsrXSkxPT09Yy5ub2RlVHlwZSYmZC5wdXNoKGMpO3JldHVybiBkfXJldHVybiBmfSxkLmZpbmQuQ0xBU1M9Yy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihhLGIpe3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnA/Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpOnZvaWQgMH0scj1bXSxxPVtdLChjLnFzYT1aLnRlc3Qobi5xdWVyeVNlbGVjdG9yQWxsKSkmJihpYShmdW5jdGlvbihhKXtvLmFwcGVuZENoaWxkKGEpLmlubmVySFRNTD1cIjxhIGlkPSdcIit1K1wiJz48L2E+PHNlbGVjdCBpZD0nXCIrdStcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiLGEucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCYmcS5wdXNoKFwiWypeJF09XCIrTCtcIiooPzonJ3xcXFwiXFxcIilcIiksYS5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGh8fHEucHVzaChcIlxcXFxbXCIrTCtcIiooPzp2YWx1ZXxcIitLK1wiKVwiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWR+PVwiK3UrXCItXVwiKS5sZW5ndGh8fHEucHVzaChcIn49XCIpLGEucXVlcnlTZWxlY3RvckFsbChcIjpjaGVja2VkXCIpLmxlbmd0aHx8cS5wdXNoKFwiOmNoZWNrZWRcIiksYS5xdWVyeVNlbGVjdG9yQWxsKFwiYSNcIit1K1wiKypcIikubGVuZ3RofHxxLnB1c2goXCIuIy4rWyt+XVwiKX0pLGlhKGZ1bmN0aW9uKGEpe3ZhciBiPW4uY3JlYXRlRWxlbWVudChcImlucHV0XCIpO2Iuc2V0QXR0cmlidXRlKFwidHlwZVwiLFwiaGlkZGVuXCIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKFwibmFtZVwiLFwiRFwiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGgmJnEucHVzaChcIm5hbWVcIitMK1wiKlsqXiR8IX5dPz1cIiksYS5xdWVyeVNlbGVjdG9yQWxsKFwiOmVuYWJsZWRcIikubGVuZ3RofHxxLnB1c2goXCI6ZW5hYmxlZFwiLFwiOmRpc2FibGVkXCIpLGEucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIikscS5wdXNoKFwiLC4qOlwiKX0pKSwoYy5tYXRjaGVzU2VsZWN0b3I9Wi50ZXN0KHM9by5tYXRjaGVzfHxvLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8by5tb3pNYXRjaGVzU2VsZWN0b3J8fG8ub01hdGNoZXNTZWxlY3Rvcnx8by5tc01hdGNoZXNTZWxlY3RvcikpJiZpYShmdW5jdGlvbihhKXtjLmRpc2Nvbm5lY3RlZE1hdGNoPXMuY2FsbChhLFwiZGl2XCIpLHMuY2FsbChhLFwiW3MhPScnXTp4XCIpLHIucHVzaChcIiE9XCIsTyl9KSxxPXEubGVuZ3RoJiZuZXcgUmVnRXhwKHEuam9pbihcInxcIikpLHI9ci5sZW5ndGgmJm5ldyBSZWdFeHAoci5qb2luKFwifFwiKSksYj1aLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHxaLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1ufHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PW58fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxnPVthXSxoPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1uPy0xOmI9PT1uPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGthKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWcudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaC51bnNoaWZ0KGMpO3doaWxlKGdbZF09PT1oW2RdKWQrKztyZXR1cm4gZD9rYShnW2RdLGhbZF0pOmdbZF09PT12Py0xOmhbZF09PT12PzE6MH0sbik6bn0sZmEubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBmYShhLG51bGwsbnVsbCxiKX0sZmEubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFQsXCI9JyQxJ11cIiksYy5tYXRjaGVzU2VsZWN0b3ImJnAmJiFBW2IrXCIgXCJdJiYoIXJ8fCFyLnRlc3QoYikpJiYoIXF8fCFxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBmYShiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxmYS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGZhLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZELmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxmYS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIithKX0sZmEudW5pcXVlU29ydD1mdW5jdGlvbihhKXt2YXIgYixkPVtdLGU9MCxmPTA7aWYobD0hYy5kZXRlY3REdXBsaWNhdGVzLGs9IWMuc29ydFN0YWJsZSYmYS5zbGljZSgwKSxhLnNvcnQoQiksbCl7d2hpbGUoYj1hW2YrK10pYj09PWFbZl0mJihlPWQucHVzaChmKSk7d2hpbGUoZS0tKWEuc3BsaWNlKGRbZV0sMSl9cmV0dXJuIGs9bnVsbCxhfSxlPWZhLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYz1cIlwiLGQ9MCxmPWEubm9kZVR5cGU7aWYoZil7aWYoMT09PWZ8fDk9PT1mfHwxMT09PWYpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9ZmEuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aGEsbWF0Y2g6VyxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6e1wiPlwiOntkaXI6XCJwYXJlbnROb2RlXCIsZmlyc3Q6ITB9LFwiIFwiOntkaXI6XCJwYXJlbnROb2RlXCJ9LFwiK1wiOntkaXI6XCJwcmV2aW91c1NpYmxpbmdcIixmaXJzdDohMH0sXCJ+XCI6e2RpcjpcInByZXZpb3VzU2libGluZ1wifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdPWFbMV0ucmVwbGFjZShiYSxjYSksYVszXT0oYVszXXx8YVs0XXx8YVs1XXx8XCJcIikucmVwbGFjZShiYSxjYSksXCJ+PVwiPT09YVsyXSYmKGFbM109XCIgXCIrYVszXStcIiBcIiksYS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93ZXJDYXNlKCksXCJudGhcIj09PWFbMV0uc2xpY2UoMCwzKT8oYVszXXx8ZmEuZXJyb3IoYVswXSksYVs0XT0rKGFbNF0/YVs1XSsoYVs2XXx8MSk6MiooXCJldmVuXCI9PT1hWzNdfHxcIm9kZFwiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fFwib2RkXCI9PT1hWzNdKSk6YVszXSYmZmEuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM9IWFbNl0mJmFbMl07cmV0dXJuIFcuQ0hJTEQudGVzdChhWzBdKT9udWxsOihhWzNdP2FbMl09YVs0XXx8YVs1XXx8XCJcIjpjJiZVLnRlc3QoYykmJihiPWcoYywhMCkpJiYoYj1jLmluZGV4T2YoXCIpXCIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYoYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoYmEsY2EpLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCIqXCI9PT1hP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1ifX0sQ0xBU1M6ZnVuY3Rpb24oYSl7dmFyIGI9eVthK1wiIFwiXTtyZXR1cm4gYnx8KGI9bmV3IFJlZ0V4cChcIihefFwiK0wrXCIpXCIrYStcIihcIitMK1wifCQpXCIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoXCJzdHJpbmdcIj09dHlwZW9mIGEuY2xhc3NOYW1lJiZhLmNsYXNzTmFtZXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGEuZ2V0QXR0cmlidXRlJiZhLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwiKX0pfSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCl7dmFyIGU9ZmEuYXR0cihkLGEpO3JldHVybiBudWxsPT1lP1wiIT1cIj09PWI6Yj8oZSs9XCJcIixcIj1cIj09PWI/ZT09PWM6XCIhPVwiPT09Yj9lIT09YzpcIl49XCI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6XCIqPVwiPT09Yj9jJiZlLmluZGV4T2YoYyk+LTE6XCIkPVwiPT09Yj9jJiZlLnNsaWNlKC1jLmxlbmd0aCk9PT1jOlwifj1cIj09PWI/KFwiIFwiK2UucmVwbGFjZShQLFwiIFwiKStcIiBcIikuaW5kZXhPZihjKT4tMTpcInw9XCI9PT1iP2U9PT1jfHxlLnNsaWNlKDAsYy5sZW5ndGgrMSk9PT1jK1wiLVwiOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGY9XCJudGhcIiE9PWEuc2xpY2UoMCwzKSxnPVwibGFzdFwiIT09YS5zbGljZSgtNCksaD1cIm9mLXR5cGVcIj09PWI7cmV0dXJuIDE9PT1kJiYwPT09ZT9mdW5jdGlvbihhKXtyZXR1cm4hIWEucGFyZW50Tm9kZX06ZnVuY3Rpb24oYixjLGkpe3ZhciBqLGssbCxtLG4sbyxwPWYhPT1nP1wibmV4dFNpYmxpbmdcIjpcInByZXZpb3VzU2libGluZ1wiLHE9Yi5wYXJlbnROb2RlLHI9aCYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9IWkmJiFoLHQ9ITE7aWYocSl7aWYoZil7d2hpbGUocCl7bT1iO3doaWxlKG09bVtwXSlpZihoP20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXI6MT09PW0ubm9kZVR5cGUpcmV0dXJuITE7bz1wPVwib25seVwiPT09YSYmIW8mJlwibmV4dFNpYmxpbmdcIn1yZXR1cm4hMH1pZihvPVtnP3EuZmlyc3RDaGlsZDpxLmxhc3RDaGlsZF0sZyYmcyl7bT1xLGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSx0PW4mJmpbMl0sbT1uJiZxLmNoaWxkTm9kZXNbbl07d2hpbGUobT0rK24mJm0mJm1bcF18fCh0PW49MCl8fG8ucG9wKCkpaWYoMT09PW0ubm9kZVR5cGUmJisrdCYmbT09PWIpe2tbYV09W3csbix0XTticmVha319ZWxzZSBpZihzJiYobT1iLGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSx0PW4pLHQ9PT0hMSl3aGlsZShtPSsrbiYmbSYmbVtwXXx8KHQ9bj0wKXx8by5wb3AoKSlpZigoaD9tLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1tLm5vZGVUeXBlKSYmKyt0JiYocyYmKGw9bVt1XXx8KG1bdV09e30pLGs9bFttLnVuaXF1ZUlEXXx8KGxbbS51bmlxdWVJRF09e30pLGtbYV09W3csdF0pLG09PT1iKSlicmVhaztyZXR1cm4gdC09ZSx0PT09ZHx8dCVkPT09MCYmdC9kPj0wfX19LFBTRVVETzpmdW5jdGlvbihhLGIpe3ZhciBjLGU9ZC5wc2V1ZG9zW2FdfHxkLnNldEZpbHRlcnNbYS50b0xvd2VyQ2FzZSgpXXx8ZmEuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiK2EpO3JldHVybiBlW3VdP2UoYik6ZS5sZW5ndGg+MT8oYz1bYSxhLFwiXCIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aGEoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUooYSxmW2ddKSxhW2RdPSEoY1tkXT1mW2ddKX0pOmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsMCxjKX0pOmV9fSxwc2V1ZG9zOntub3Q6aGEoZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWgoYS5yZXBsYWNlKFEsXCIkMVwiKSk7cmV0dXJuIGRbdV0/aGEoZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSkoZj1nW2hdKSYmKGFbaF09IShiW2hdPWYpKX0pOmZ1bmN0aW9uKGEsZSxmKXtyZXR1cm4gYlswXT1hLGQoYixudWxsLGYsYyksYlswXT1udWxsLCFjLnBvcCgpfX0pLGhhczpoYShmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGZhKGEsYikubGVuZ3RoPjB9fSksY29udGFpbnM6aGEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9YS5yZXBsYWNlKGJhLGNhKSxmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGUoYikpLmluZGV4T2YoYSk+LTF9fSksbGFuZzpoYShmdW5jdGlvbihhKXtyZXR1cm4gVi50ZXN0KGF8fFwiXCIpfHxmYS5lcnJvcihcInVuc3VwcG9ydGVkIGxhbmc6IFwiK2EpLGE9YS5yZXBsYWNlKGJhLGNhKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9iLmxhbmc6Yi5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKXx8Yi5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKXJldHVybiBjPWMudG9Mb3dlckNhc2UoKSxjPT09YXx8MD09PWMuaW5kZXhPZihhK1wiLVwiKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9jYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIuaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxuLmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PWImJiEhYS5jaGVja2VkfHxcIm9wdGlvblwiPT09YiYmISFhLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxhLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGEpe2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZylpZihhLm5vZGVUeXBlPDYpcmV0dXJuITE7cmV0dXJuITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hZC5wc2V1ZG9zLmVtcHR5KGEpfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFkudGVzdChhLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFgudGVzdChhLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1iJiZcImJ1dHRvblwiPT09YS50eXBlfHxcImJ1dHRvblwiPT09Yn0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm5cImlucHV0XCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJlwidGV4dFwiPT09YS50eXBlJiYobnVsbD09KGI9YS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKXx8XCJ0ZXh0XCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpuYShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bmEoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOm5hKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpjXX0pLGV2ZW46bmEoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6bmEoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpuYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0Om5hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1sYShiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1tYShiKTtmdW5jdGlvbiBwYSgpe31wYS5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9bmV3IHBhLGc9ZmEudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpbYStcIiBcIl07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1kLnByZUZpbHRlcjt3aGlsZShoKXtjJiYhKGU9Ui5leGVjKGgpKXx8KGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9Uy5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShRLFwiIFwiKX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2ZvcihnIGluIGQuZmlsdGVyKSEoZT1XW2ddLmV4ZWMoaCkpfHxqW2ddJiYhKGU9altnXShlKSl8fChjPWUuc2hpZnQoKSxmLnB1c2goe3ZhbHVlOmMsdHlwZTpnLG1hdGNoZXM6ZX0pLGg9aC5zbGljZShjLmxlbmd0aCkpO2lmKCFjKWJyZWFrfXJldHVybiBiP2gubGVuZ3RoOmg/ZmEuZXJyb3IoYSk6eihhLGkpLnNsaWNlKDApfTtmdW5jdGlvbiBxYShhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoLGQ9XCJcIjtjPmI7YisrKWQrPWFbYl0udmFsdWU7cmV0dXJuIGR9ZnVuY3Rpb24gcmEoYSxiLGMpe3ZhciBkPWIuZGlyLGU9YyYmXCJwYXJlbnROb2RlXCI9PT1kLGY9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgsaSxqLGs9W3csZl07aWYoZyl7d2hpbGUoYj1iW2RdKWlmKCgxPT09Yi5ub2RlVHlwZXx8ZSkmJmEoYixjLGcpKXJldHVybiEwfWVsc2Ugd2hpbGUoYj1iW2RdKWlmKDE9PT1iLm5vZGVUeXBlfHxlKXtpZihqPWJbdV18fChiW3VdPXt9KSxpPWpbYi51bmlxdWVJRF18fChqW2IudW5pcXVlSURdPXt9KSwoaD1pW2RdKSYmaFswXT09PXcmJmhbMV09PT1mKXJldHVybiBrWzJdPWhbMl07aWYoaVtkXT1rLGtbMl09YShiLGMsZykpcmV0dXJuITB9fX1mdW5jdGlvbiBzYShhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiB0YShhLGIsYyl7Zm9yKHZhciBkPTAsZT1iLmxlbmd0aDtlPmQ7ZCsrKWZhKGEsYltkXSxjKTtyZXR1cm4gY31mdW5jdGlvbiB1YShhLGIsYyxkLGUpe2Zvcih2YXIgZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9bnVsbCE9YjtpPmg7aCsrKShmPWFbaF0pJiYoYyYmIWMoZixkLGUpfHwoZy5wdXNoKGYpLGomJmIucHVzaChoKSkpO3JldHVybiBnfWZ1bmN0aW9uIHZhKGEsYixjLGQsZSxmKXtyZXR1cm4gZCYmIWRbdV0mJihkPXZhKGQpKSxlJiYhZVt1XSYmKGU9dmEoZSxmKSksaGEoZnVuY3Rpb24oZixnLGgsaSl7dmFyIGosayxsLG09W10sbj1bXSxvPWcubGVuZ3RoLHA9Znx8dGEoYnx8XCIqXCIsaC5ub2RlVHlwZT9baF06aCxbXSkscT0hYXx8IWYmJmI/cDp1YShwLG0sYSxoLGkpLHI9Yz9lfHwoZj9hOm98fGQpP1tdOmc6cTtpZihjJiZjKHEscixoLGkpLGQpe2o9dWEocixuKSxkKGosW10saCxpKSxrPWoubGVuZ3RoO3doaWxlKGstLSkobD1qW2tdKSYmKHJbbltrXV09IShxW25ba11dPWwpKX1pZihmKXtpZihlfHxhKXtpZihlKXtqPVtdLGs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiZqLnB1c2gocVtrXT1sKTtlKG51bGwscj1bXSxqLGkpfWs9ci5sZW5ndGg7d2hpbGUoay0tKShsPXJba10pJiYoaj1lP0ooZixsKTptW2tdKT4tMSYmKGZbal09IShnW2pdPWwpKX19ZWxzZSByPXVhKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTpILmFwcGx5KGcscil9KX1mdW5jdGlvbiB3YShhKXtmb3IodmFyIGIsYyxlLGY9YS5sZW5ndGgsZz1kLnJlbGF0aXZlW2FbMF0udHlwZV0saD1nfHxkLnJlbGF0aXZlW1wiIFwiXSxpPWc/MTowLGs9cmEoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1ifSxoLCEwKSxsPXJhKGZ1bmN0aW9uKGEpe3JldHVybiBKKGIsYSk+LTF9LGgsITApLG09W2Z1bmN0aW9uKGEsYyxkKXt2YXIgZT0hZyYmKGR8fGMhPT1qKXx8KChiPWMpLm5vZGVUeXBlP2soYSxjLGQpOmwoYSxjLGQpKTtyZXR1cm4gYj1udWxsLGV9XTtmPmk7aSsrKWlmKGM9ZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3JhKHNhKG0pLGMpXTtlbHNle2lmKGM9ZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1XSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJyZWFrO3JldHVybiB2YShpPjEmJnNhKG0pLGk+MSYmcWEoYS5zbGljZSgwLGktMSkuY29uY2F0KHt2YWx1ZTpcIiBcIj09PWFbaS0yXS50eXBlP1wiKlwiOlwiXCJ9KSkucmVwbGFjZShRLFwiJDFcIiksYyxlPmkmJndhKGEuc2xpY2UoaSxlKSksZj5lJiZ3YShhPWEuc2xpY2UoZSkpLGY+ZSYmcWEoYSkpfW0ucHVzaChjKX1yZXR1cm4gc2EobSl9ZnVuY3Rpb24geGEoYSxiKXt2YXIgYz1iLmxlbmd0aD4wLGU9YS5sZW5ndGg+MCxmPWZ1bmN0aW9uKGYsZyxoLGksayl7dmFyIGwsbyxxLHI9MCxzPVwiMFwiLHQ9ZiYmW10sdT1bXSx2PWoseD1mfHxlJiZkLmZpbmQuVEFHKFwiKlwiLGspLHk9dys9bnVsbD09dj8xOk1hdGgucmFuZG9tKCl8fC4xLHo9eC5sZW5ndGg7Zm9yKGsmJihqPWc9PT1ufHxnfHxrKTtzIT09eiYmbnVsbCE9KGw9eFtzXSk7cysrKXtpZihlJiZsKXtvPTAsZ3x8bC5vd25lckRvY3VtZW50PT09bnx8KG0obCksaD0hcCk7d2hpbGUocT1hW28rK10paWYocShsLGd8fG4saCkpe2kucHVzaChsKTticmVha31rJiYodz15KX1jJiYoKGw9IXEmJmwpJiZyLS0sZiYmdC5wdXNoKGwpKX1pZihyKz1zLGMmJnMhPT1yKXtvPTA7d2hpbGUocT1iW28rK10pcSh0LHUsZyxoKTtpZihmKXtpZihyPjApd2hpbGUocy0tKXRbc118fHVbc118fCh1W3NdPUYuY2FsbChpKSk7dT11YSh1KX1ILmFwcGx5KGksdSksayYmIWYmJnUubGVuZ3RoPjAmJnIrYi5sZW5ndGg+MSYmZmEudW5pcXVlU29ydChpKX1yZXR1cm4gayYmKHc9eSxqPXYpLHR9O3JldHVybiBjP2hhKGYpOmZ9cmV0dXJuIGg9ZmEuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1bXSxmPUFbYStcIiBcIl07aWYoIWYpe2J8fChiPWcoYSkpLGM9Yi5sZW5ndGg7d2hpbGUoYy0tKWY9d2EoYltjXSksZlt1XT9kLnB1c2goZik6ZS5wdXNoKGYpO2Y9QShhLHhhKGUsZCkpLGYuc2VsZWN0b3I9YX1yZXR1cm4gZn0saT1mYS5zZWxlY3Q9ZnVuY3Rpb24oYSxiLGUsZil7dmFyIGksaixrLGwsbSxuPVwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJmEsbz0hZiYmZyhhPW4uc2VsZWN0b3J8fGEpO2lmKGU9ZXx8W10sMT09PW8ubGVuZ3RoKXtpZihqPW9bMF09b1swXS5zbGljZSgwKSxqLmxlbmd0aD4yJiZcIklEXCI9PT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShiYSxjYSksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1iLnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPVcubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lmKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRbbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGJhLGNhKSxfLnRlc3QoalswXS50eXBlKSYmb2EoYi5wYXJlbnROb2RlKXx8YikpKXtpZihqLnNwbGljZShpLDEpLGE9Zi5sZW5ndGgmJnFhKGopLCFhKXJldHVybiBILmFwcGx5KGUsZiksZTticmVha319fXJldHVybihufHxoKGEsbykpKGYsYiwhcCxlLCFifHxfLnRlc3QoYSkmJm9hKGIucGFyZW50Tm9kZSl8fGIpLGV9LGMuc29ydFN0YWJsZT11LnNwbGl0KFwiXCIpLnNvcnQoQikuam9pbihcIlwiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9aWEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpfSksaWEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuaW5uZXJIVE1MPVwiPGEgaHJlZj0nIyc+PC9hPlwiLFwiI1wiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcImhyZWZcIil9KXx8amEoXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjP3ZvaWQgMDphLmdldEF0dHJpYnV0ZShiLFwidHlwZVwiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD1cIjxpbnB1dC8+XCIsYS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsXCJcIiksXCJcIj09PWEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKX0pfHxqYShcInZhbHVlXCIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHxcImlucHV0XCIhPT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dm9pZCAwOmEuZGVmYXVsdFZhbHVlfSksaWEoZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWEuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIil9KXx8amEoSyxmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGM/dm9pZCAwOmFbYl09PT0hMD9iLnRvTG93ZXJDYXNlKCk6KGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZC5zcGVjaWZpZWQ/ZC52YWx1ZTpudWxsfSksZmF9KGEpO24uZmluZD10LG4uZXhwcj10LnNlbGVjdG9ycyxuLmV4cHJbXCI6XCJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlU29ydD1uLnVuaXF1ZT10LnVuaXF1ZVNvcnQsbi50ZXh0PXQuZ2V0VGV4dCxuLmlzWE1MRG9jPXQuaXNYTUwsbi5jb250YWlucz10LmNvbnRhaW5zO3ZhciB1PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sdj1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY30sdz1uLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHg9L148KFtcXHctXSspXFxzKlxcLz8+KD86PFxcL1xcMT58KSQvLHk9L14uW146I1xcW1xcLixdKiQvO2Z1bmN0aW9uIHooYSxiLGMpe2lmKG4uaXNGdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXtpZih5LnRlc3QoYikpcmV0dXJuIG4uZmlsdGVyKGIsYSxjKTtiPW4uZmlsdGVyKGIsYSl9cmV0dXJuIG4uZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBoLmNhbGwoYixhKT4tMSE9PWN9KX1uLmZpbHRlcj1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YlswXTtyZXR1cm4gYyYmKGE9XCI6bm90KFwiK2ErXCIpXCIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz10aGlzLmxlbmd0aCxkPVtdLGU9dGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sobihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2M+YjtiKyspaWYobi5jb250YWlucyhlW2JdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihiPTA7Yz5iO2IrKyluLmZpbmQoYSxlW2JdLGQpO3JldHVybiBkPXRoaXMucHVzaFN0YWNrKGM+MT9uLnVuaXF1ZShkKTpkKSxkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3I/dGhpcy5zZWxlY3RvcitcIiBcIithOmEsZH0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayh6KHRoaXMsYXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayh6KHRoaXMsYXx8W10sITApKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISF6KHRoaXMsXCJzdHJpbmdcIj09dHlwZW9mIGEmJncudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIEEsQj0vXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0qKSkkLyxDPW4uZm4uaW5pdD1mdW5jdGlvbihhLGIsYyl7dmFyIGUsZjtpZighYSlyZXR1cm4gdGhpcztpZihjPWN8fEEsXCJzdHJpbmdcIj09dHlwZW9mIGEpe2lmKGU9XCI8XCI9PT1hWzBdJiZcIj5cIj09PWFbYS5sZW5ndGgtMV0mJmEubGVuZ3RoPj0zP1tudWxsLGEsbnVsbF06Qi5leGVjKGEpLCFlfHwhZVsxXSYmYilyZXR1cm4hYnx8Yi5qcXVlcnk/KGJ8fGMpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihiKS5maW5kKGEpO2lmKGVbMV0pe2lmKGI9YiBpbnN0YW5jZW9mIG4/YlswXTpiLG4ubWVyZ2UodGhpcyxuLnBhcnNlSFRNTChlWzFdLGImJmIubm9kZVR5cGU/Yi5vd25lckRvY3VtZW50fHxiOmQsITApKSx4LnRlc3QoZVsxXSkmJm4uaXNQbGFpbk9iamVjdChiKSlmb3IoZSBpbiBiKW4uaXNGdW5jdGlvbih0aGlzW2VdKT90aGlzW2VdKGJbZV0pOnRoaXMuYXR0cihlLGJbZV0pO3JldHVybiB0aGlzfXJldHVybiBmPWQuZ2V0RWxlbWVudEJ5SWQoZVsyXSksZiYmZi5wYXJlbnROb2RlJiYodGhpcy5sZW5ndGg9MSx0aGlzWzBdPWYpLHRoaXMuY29udGV4dD1kLHRoaXMuc2VsZWN0b3I9YSx0aGlzfXJldHVybiBhLm5vZGVUeXBlPyh0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTEsdGhpcyk6bi5pc0Z1bmN0aW9uKGEpP3ZvaWQgMCE9PWMucmVhZHk/Yy5yZWFkeShhKTphKG4pOih2b2lkIDAhPT1hLnNlbGVjdG9yJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpLG4ubWFrZUFycmF5KGEsdGhpcykpfTtDLnByb3RvdHlwZT1uLmZuLEE9bihkKTt2YXIgRD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxFPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O24uZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9bihhLHRoaXMpLGM9Yi5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7Yz5hO2ErKylpZihuLmNvbnRhaW5zKHRoaXMsYlthXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYyxkPTAsZT10aGlzLmxlbmd0aCxmPVtdLGc9dy50ZXN0KGEpfHxcInN0cmluZ1wiIT10eXBlb2YgYT9uKGEsYnx8dGhpcy5jb250ZXh0KTowO2U+ZDtkKyspZm9yKGM9dGhpc1tkXTtjJiZjIT09YjtjPWMucGFyZW50Tm9kZSlpZihjLm5vZGVUeXBlPDExJiYoZz9nLmluZGV4KGMpPi0xOjE9PT1jLm5vZGVUeXBlJiZuLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGMsYSkpKXtmLnB1c2goYyk7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGYubGVuZ3RoPjE/bi51bmlxdWVTb3J0KGYpOmYpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT9cInN0cmluZ1wiPT10eXBlb2YgYT9oLmNhbGwobihhKSx0aGlzWzBdKTpoLmNhbGwodGhpcyxhLmpxdWVyeT9hWzBdOmEpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4udW5pcXVlU29ydChuLm1lcmdlKHRoaXMuZ2V0KCksbihhLGIpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmFkZChudWxsPT1hP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGEpKX19KTtmdW5jdGlvbiBGKGEsYil7d2hpbGUoKGE9YVtiXSkmJjEhPT1hLm5vZGVUeXBlKTtyZXR1cm4gYX1uLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJjExIT09Yi5ub2RlVHlwZT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHUoYSxcInBhcmVudE5vZGVcIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHUoYSxcInBhcmVudE5vZGVcIixjKX0sbmV4dDpmdW5jdGlvbihhKXtyZXR1cm4gRihhLFwibmV4dFNpYmxpbmdcIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEYoYSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gdShhLFwibmV4dFNpYmxpbmdcIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHUoYSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLFwibmV4dFNpYmxpbmdcIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdShhLFwicHJldmlvdXNTaWJsaW5nXCIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiB2KChhLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGEpfSxjaGlsZHJlbjpmdW5jdGlvbihhKXtyZXR1cm4gdihhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gYS5jb250ZW50RG9jdW1lbnR8fG4ubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPW4ubWFwKHRoaXMsYixjKTtyZXR1cm5cIlVudGlsXCIhPT1hLnNsaWNlKC01KSYmKGQ9YyksZCYmXCJzdHJpbmdcIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihFW2FdfHxuLnVuaXF1ZVNvcnQoZSksRC50ZXN0KGEpJiZlLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soZSl9fSk7dmFyIEc9L1xcUysvZztmdW5jdGlvbiBIKGEpe3ZhciBiPXt9O3JldHVybiBuLmVhY2goYS5tYXRjaChHKXx8W10sZnVuY3Rpb24oYSxjKXtiW2NdPSEwfSksYn1uLkNhbGxiYWNrcz1mdW5jdGlvbihhKXthPVwic3RyaW5nXCI9PXR5cGVvZiBhP0goYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZj1bXSxnPVtdLGg9LTEsaT1mdW5jdGlvbigpe2ZvcihlPWEub25jZSxkPWI9ITA7Zy5sZW5ndGg7aD0tMSl7Yz1nLnNoaWZ0KCk7d2hpbGUoKytoPGYubGVuZ3RoKWZbaF0uYXBwbHkoY1swXSxjWzFdKT09PSExJiZhLnN0b3BPbkZhbHNlJiYoaD1mLmxlbmd0aCxjPSExKX1hLm1lbW9yeXx8KGM9ITEpLGI9ITEsZSYmKGY9Yz9bXTpcIlwiKX0saj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihjJiYhYiYmKGg9Zi5sZW5ndGgtMSxnLnB1c2goYykpLGZ1bmN0aW9uIGQoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXtuLmlzRnVuY3Rpb24oYyk/YS51bmlxdWUmJmouaGFzKGMpfHxmLnB1c2goYyk6YyYmYy5sZW5ndGgmJlwic3RyaW5nXCIhPT1uLnR5cGUoYykmJmQoYyl9KX0oYXJndW1lbnRzKSxjJiYhYiYmaSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPW4uaW5BcnJheShiLGYsYykpPi0xKWYuc3BsaWNlKGMsMSksaD49YyYmaC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBhP24uaW5BcnJheShhLGYpPi0xOmYubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGYmJihmPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGU9Zz1bXSxmPWM9XCJcIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFmfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIGU9Zz1bXSxjfHwoZj1jPVwiXCIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhZX0sZmlyZVdpdGg6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZXx8KGM9Y3x8W10sYz1bYSxjLnNsaWNlP2Muc2xpY2UoKTpjXSxnLnB1c2goYyksYnx8aSgpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGouZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFkfX07cmV0dXJuIGp9LG4uZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihhKXt2YXIgYj1bW1wicmVzb2x2ZVwiLFwiZG9uZVwiLG4uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksXCJyZXNvbHZlZFwiXSxbXCJyZWplY3RcIixcImZhaWxcIixuLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLFwicmVqZWN0ZWRcIl0sW1wibm90aWZ5XCIsXCJwcm9ncmVzc1wiLG4uQ2FsbGJhY2tzKFwibWVtb3J5XCIpXV0sYz1cInBlbmRpbmdcIixkPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBjfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgYT1hcmd1bWVudHM7cmV0dXJuIG4uRGVmZXJyZWQoZnVuY3Rpb24oYyl7bi5lYWNoKGIsZnVuY3Rpb24oYixmKXt2YXIgZz1uLmlzRnVuY3Rpb24oYVtiXSkmJmFbYl07ZVtmWzFdXShmdW5jdGlvbigpe3ZhciBhPWcmJmcuYXBwbHkodGhpcyxhcmd1bWVudHMpO2EmJm4uaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlzZSgpLnByb2dyZXNzKGMubm90aWZ5KS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCk6Y1tmWzBdK1wiV2l0aFwiXSh0aGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlswXStcIldpdGhcIl0odGhpcz09PWU/ZDp0aGlzLGFyZ3VtZW50cyksdGhpc30sZVtmWzBdK1wiV2l0aFwiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWUuY2FsbChhcmd1bWVudHMpLGQ9Yy5sZW5ndGgsZj0xIT09ZHx8YSYmbi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZDowLGc9MT09PWY/YTpuLkRlZmVycmVkKCksaD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9lLmNhbGwoYXJndW1lbnRzKTpkLGM9PT1pP2cubm90aWZ5V2l0aChiLGMpOi0tZnx8Zy5yZXNvbHZlV2l0aChiLGMpfX0saSxqLGs7aWYoZD4xKWZvcihpPW5ldyBBcnJheShkKSxqPW5ldyBBcnJheShkKSxrPW5ldyBBcnJheShkKTtkPmI7YisrKWNbYl0mJm4uaXNGdW5jdGlvbihjW2JdLnByb21pc2UpP2NbYl0ucHJvbWlzZSgpLnByb2dyZXNzKGgoYixqLGkpKS5kb25lKGgoYixrLGMpKS5mYWlsKGcucmVqZWN0KTotLWY7cmV0dXJuIGZ8fGcucmVzb2x2ZVdpdGgoayxjKSxnLnByb21pc2UoKX19KTt2YXIgSTtuLmZuLnJlYWR5PWZ1bmN0aW9uKGEpe3JldHVybiBuLnJlYWR5LnByb21pc2UoKS5kb25lKGEpLHRoaXN9LG4uZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP24ucmVhZHlXYWl0Kys6bi5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpeyhhPT09ITA/LS1uLnJlYWR5V2FpdDpuLmlzUmVhZHkpfHwobi5pc1JlYWR5PSEwLGEhPT0hMCYmLS1uLnJlYWR5V2FpdD4wfHwoSS5yZXNvbHZlV2l0aChkLFtuXSksbi5mbi50cmlnZ2VySGFuZGxlciYmKG4oZCkudHJpZ2dlckhhbmRsZXIoXCJyZWFkeVwiKSxuKGQpLm9mZihcInJlYWR5XCIpKSkpfX0pO2Z1bmN0aW9uIEooKXtkLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsSiksYS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLEopLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJuIEl8fChJPW4uRGVmZXJyZWQoKSxcImNvbXBsZXRlXCI9PT1kLnJlYWR5U3RhdGV8fFwibG9hZGluZ1wiIT09ZC5yZWFkeVN0YXRlJiYhZC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/YS5zZXRUaW1lb3V0KG4ucmVhZHkpOihkLmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsSiksYS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLEopKSksSS5wcm9taXNlKGIpfSxuLnJlYWR5LnByb21pc2UoKTt2YXIgSz1mdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgaD0wLGk9YS5sZW5ndGgsaj1udWxsPT1jO2lmKFwib2JqZWN0XCI9PT1uLnR5cGUoYykpe2U9ITA7Zm9yKGggaW4gYylLKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEpLGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9LEw9ZnVuY3Rpb24oYSl7cmV0dXJuIDE9PT1hLm5vZGVUeXBlfHw5PT09YS5ub2RlVHlwZXx8ISthLm5vZGVUeXBlfTtmdW5jdGlvbiBNKCl7dGhpcy5leHBhbmRvPW4uZXhwYW5kbytNLnVpZCsrfU0udWlkPTEsTS5wcm90b3R5cGU9e3JlZ2lzdGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9Ynx8e307cmV0dXJuIGEubm9kZVR5cGU/YVt0aGlzLmV4cGFuZG9dPWM6T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdGhpcy5leHBhbmRvLHt2YWx1ZTpjLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGFbdGhpcy5leHBhbmRvXX0sY2FjaGU6ZnVuY3Rpb24oYSl7aWYoIUwoYSkpcmV0dXJue307dmFyIGI9YVt0aGlzLmV4cGFuZG9dO3JldHVybiBifHwoYj17fSxMKGEpJiYoYS5ub2RlVHlwZT9hW3RoaXMuZXhwYW5kb109YjpPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx0aGlzLmV4cGFuZG8se3ZhbHVlOmIsY29uZmlndXJhYmxlOiEwfSkpKSxifSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5jYWNoZShhKTtpZihcInN0cmluZ1wiPT10eXBlb2YgYillW2JdPWM7ZWxzZSBmb3IoZCBpbiBiKWVbZF09YltkXTtyZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHZvaWQgMD09PWI/dGhpcy5jYWNoZShhKTphW3RoaXMuZXhwYW5kb10mJmFbdGhpcy5leHBhbmRvXVtiXX0sYWNjZXNzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gdm9pZCAwPT09Ynx8YiYmXCJzdHJpbmdcIj09dHlwZW9mIGImJnZvaWQgMD09PWM/KGQ9dGhpcy5nZXQoYSxiKSx2b2lkIDAhPT1kP2Q6dGhpcy5nZXQoYSxuLmNhbWVsQ2FzZShiKSkpOih0aGlzLnNldChhLGIsYyksdm9pZCAwIT09Yz9jOmIpfSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZj1hW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09Zil7aWYodm9pZCAwPT09Yil0aGlzLnJlZ2lzdGVyKGEpO2Vsc2V7bi5pc0FycmF5KGIpP2Q9Yi5jb25jYXQoYi5tYXAobi5jYW1lbENhc2UpKTooZT1uLmNhbWVsQ2FzZShiKSxiIGluIGY/ZD1bYixlXTooZD1lLGQ9ZCBpbiBmP1tkXTpkLm1hdGNoKEcpfHxbXSkpLGM9ZC5sZW5ndGg7d2hpbGUoYy0tKWRlbGV0ZSBmW2RbY11dfSh2b2lkIDA9PT1ifHxuLmlzRW1wdHlPYmplY3QoZikpJiYoYS5ub2RlVHlwZT9hW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBhW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihhKXt2YXIgYj1hW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PWImJiFuLmlzRW1wdHlPYmplY3QoYil9fTt2YXIgTj1uZXcgTSxPPW5ldyBNLFA9L14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFE9L1tBLVpdL2c7ZnVuY3Rpb24gUihhLGIsYyl7dmFyIGQ7aWYodm9pZCAwPT09YyYmMT09PWEubm9kZVR5cGUpaWYoZD1cImRhdGEtXCIrYi5yZXBsYWNlKFEsXCItJCZcIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLFwic3RyaW5nXCI9PXR5cGVvZiBjKXt0cnl7Yz1cInRydWVcIj09PWM/ITA6XCJmYWxzZVwiPT09Yz8hMTpcIm51bGxcIj09PWM/bnVsbDorYytcIlwiPT09Yz8rYzpQLnRlc3QoYyk/bi5wYXJzZUpTT04oYyk6Yztcbn1jYXRjaChlKXt9Ty5zZXQoYSxiLGMpfWVsc2UgYz12b2lkIDA7cmV0dXJuIGN9bi5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIE8uaGFzRGF0YShhKXx8Ti5oYXNEYXRhKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gTy5hY2Nlc3MoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7Ty5yZW1vdmUoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBOLmFjY2VzcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7Ti5yZW1vdmUoYSxiKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhpcy5sZW5ndGgmJihlPU8uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTi5nZXQoZixcImhhc0RhdGFBdHRyc1wiKSkpe2M9Zy5sZW5ndGg7d2hpbGUoYy0tKWdbY10mJihkPWdbY10ubmFtZSwwPT09ZC5pbmRleE9mKFwiZGF0YS1cIikmJihkPW4uY2FtZWxDYXNlKGQuc2xpY2UoNSkpLFIoZixkLGVbZF0pKSk7Ti5zZXQoZixcImhhc0RhdGFBdHRyc1wiLCEwKX1yZXR1cm4gZX1yZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgYT90aGlzLmVhY2goZnVuY3Rpb24oKXtPLnNldCh0aGlzLGEpfSk6Syh0aGlzLGZ1bmN0aW9uKGIpe3ZhciBjLGQ7aWYoZiYmdm9pZCAwPT09Yil7aWYoYz1PLmdldChmLGEpfHxPLmdldChmLGEucmVwbGFjZShRLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCkpLHZvaWQgMCE9PWMpcmV0dXJuIGM7aWYoZD1uLmNhbWVsQ2FzZShhKSxjPU8uZ2V0KGYsZCksdm9pZCAwIT09YylyZXR1cm4gYztpZihjPVIoZixkLHZvaWQgMCksdm9pZCAwIT09YylyZXR1cm4gY31lbHNlIGQ9bi5jYW1lbENhc2UoYSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9Ty5nZXQodGhpcyxkKTtPLnNldCh0aGlzLGQsYiksYS5pbmRleE9mKFwiLVwiKT4tMSYmdm9pZCAwIT09YyYmTy5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe08ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHxcImZ4XCIpK1wicXVldWVcIixkPU4uZ2V0KGEsYiksYyYmKCFkfHxuLmlzQXJyYXkoYyk/ZD1OLmFjY2VzcyhhLGIsbi5tYWtlQXJyYXkoYykpOmQucHVzaChjKSksZHx8W10pOnZvaWQgMH0sZGVxdWV1ZTpmdW5jdGlvbihhLGIpe2I9Ynx8XCJmeFwiO3ZhciBjPW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07XCJpbnByb2dyZXNzXCI9PT1lJiYoZT1jLnNoaWZ0KCksZC0tKSxlJiYoXCJmeFwiPT09YiYmYy51bnNoaWZ0KFwiaW5wcm9ncmVzc1wiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iK1wicXVldWVIb29rc1wiO3JldHVybiBOLmdldChhLGMpfHxOLmFjY2VzcyhhLGMse2VtcHR5Om4uQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uKCl7Ti5yZW1vdmUoYSxbYitcInF1ZXVlXCIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBhJiYoYj1hLGE9XCJmeFwiLGMtLSksYXJndW1lbnRzLmxlbmd0aDxjP24ucXVldWUodGhpc1swXSxhKTp2b2lkIDA9PT1iP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9bi5xdWV1ZSh0aGlzLGEsYik7bi5fcXVldWVIb29rcyh0aGlzLGEpLFwiZnhcIj09PWEmJlwiaW5wcm9ncmVzc1wiIT09Y1swXSYmbi5kZXF1ZXVlKHRoaXMsYSl9KX0sZGVxdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5kZXF1ZXVlKHRoaXMsYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHxcImZ4XCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD0xLGU9bi5EZWZlcnJlZCgpLGY9dGhpcyxnPXRoaXMubGVuZ3RoLGg9ZnVuY3Rpb24oKXstLWR8fGUucmVzb2x2ZVdpdGgoZixbZl0pfTtcInN0cmluZ1wiIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHxcImZ4XCI7d2hpbGUoZy0tKWM9Ti5nZXQoZltnXSxhK1wicXVldWVIb29rc1wiKSxjJiZjLmVtcHR5JiYoZCsrLGMuZW1wdHkuYWRkKGgpKTtyZXR1cm4gaCgpLGUucHJvbWlzZShiKX19KTt2YXIgUz0vWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLy5zb3VyY2UsVD1uZXcgUmVnRXhwKFwiXig/OihbKy1dKT18KShcIitTK1wiKShbYS16JV0qKSRcIixcImlcIiksVT1bXCJUb3BcIixcIlJpZ2h0XCIsXCJCb3R0b21cIixcIkxlZnRcIl0sVj1mdW5jdGlvbihhLGIpe3JldHVybiBhPWJ8fGEsXCJub25lXCI9PT1uLmNzcyhhLFwiZGlzcGxheVwiKXx8IW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfTtmdW5jdGlvbiBXKGEsYixjLGQpe3ZhciBlLGY9MSxnPTIwLGg9ZD9mdW5jdGlvbigpe3JldHVybiBkLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBuLmNzcyhhLGIsXCJcIil9LGk9aCgpLGo9YyYmY1szXXx8KG4uY3NzTnVtYmVyW2JdP1wiXCI6XCJweFwiKSxrPShuLmNzc051bWJlcltiXXx8XCJweFwiIT09aiYmK2kpJiZULmV4ZWMobi5jc3MoYSxiKSk7aWYoayYma1szXSE9PWope2o9anx8a1szXSxjPWN8fFtdLGs9K2l8fDE7ZG8gZj1mfHxcIi41XCIsay89ZixuLnN0eWxlKGEsYixrK2opO3doaWxlKGYhPT0oZj1oKCkvaSkmJjEhPT1mJiYtLWcpfXJldHVybiBjJiYoaz0ra3x8K2l8fDAsZT1jWzFdP2srKGNbMV0rMSkqY1syXTorY1syXSxkJiYoZC51bml0PWosZC5zdGFydD1rLGQuZW5kPWUpKSxlfXZhciBYPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLFk9LzwoW1xcdzotXSspLyxaPS9eJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksJD17b3B0aW9uOlsxLFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLFwiPC9zZWxlY3Q+XCJdLHRoZWFkOlsxLFwiPHRhYmxlPlwiLFwiPC90YWJsZT5cIl0sY29sOlsyLFwiPHRhYmxlPjxjb2xncm91cD5cIixcIjwvY29sZ3JvdXA+PC90YWJsZT5cIl0sdHI6WzIsXCI8dGFibGU+PHRib2R5PlwiLFwiPC90Ym9keT48L3RhYmxlPlwiXSx0ZDpbMyxcIjx0YWJsZT48dGJvZHk+PHRyPlwiLFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCJdLF9kZWZhdWx0OlswLFwiXCIsXCJcIl19OyQub3B0Z3JvdXA9JC5vcHRpb24sJC50Ym9keT0kLnRmb290PSQuY29sZ3JvdXA9JC5jYXB0aW9uPSQudGhlYWQsJC50aD0kLnRkO2Z1bmN0aW9uIF8oYSxiKXt2YXIgYz1cInVuZGVmaW5lZFwiIT10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fFwiKlwiKTpcInVuZGVmaW5lZFwiIT10eXBlb2YgYS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHxcIipcIik6W107cmV0dXJuIHZvaWQgMD09PWJ8fGImJm4ubm9kZU5hbWUoYSxiKT9uLm1lcmdlKFthXSxjKTpjfWZ1bmN0aW9uIGFhKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKU4uc2V0KGFbY10sXCJnbG9iYWxFdmFsXCIsIWJ8fE4uZ2V0KGJbY10sXCJnbG9iYWxFdmFsXCIpKX12YXIgYmE9Lzx8JiM/XFx3KzsvO2Z1bmN0aW9uIGNhKGEsYixjLGQsZSl7Zm9yKHZhciBmLGcsaCxpLGosayxsPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLG09W10sbz0wLHA9YS5sZW5ndGg7cD5vO28rKylpZihmPWFbb10sZnx8MD09PWYpaWYoXCJvYmplY3RcIj09PW4udHlwZShmKSluLm1lcmdlKG0sZi5ub2RlVHlwZT9bZl06Zik7ZWxzZSBpZihiYS50ZXN0KGYpKXtnPWd8fGwuYXBwZW5kQ2hpbGQoYi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxoPShZLmV4ZWMoZil8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpLGk9JFtoXXx8JC5fZGVmYXVsdCxnLmlubmVySFRNTD1pWzFdK24uaHRtbFByZWZpbHRlcihmKStpWzJdLGs9aVswXTt3aGlsZShrLS0pZz1nLmxhc3RDaGlsZDtuLm1lcmdlKG0sZy5jaGlsZE5vZGVzKSxnPWwuZmlyc3RDaGlsZCxnLnRleHRDb250ZW50PVwiXCJ9ZWxzZSBtLnB1c2goYi5jcmVhdGVUZXh0Tm9kZShmKSk7bC50ZXh0Q29udGVudD1cIlwiLG89MDt3aGlsZShmPW1bbysrXSlpZihkJiZuLmluQXJyYXkoZixkKT4tMSllJiZlLnB1c2goZik7ZWxzZSBpZihqPW4uY29udGFpbnMoZi5vd25lckRvY3VtZW50LGYpLGc9XyhsLmFwcGVuZENoaWxkKGYpLFwic2NyaXB0XCIpLGomJmFhKGcpLGMpe2s9MDt3aGlsZShmPWdbaysrXSlaLnRlc3QoZi50eXBlfHxcIlwiKSYmYy5wdXNoKGYpfXJldHVybiBsfSFmdW5jdGlvbigpe3ZhciBhPWQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGI9YS5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLGM9ZC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7Yy5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJyYWRpb1wiKSxjLnNldEF0dHJpYnV0ZShcImNoZWNrZWRcIixcImNoZWNrZWRcIiksYy5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJ0XCIpLGIuYXBwZW5kQ2hpbGQoYyksbC5jaGVja0Nsb25lPWIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIuaW5uZXJIVE1MPVwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiLGwubm9DbG9uZUNoZWNrZWQ9ISFiLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZX0oKTt2YXIgZGE9L15rZXkvLGVhPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxmYT0vXihbXi5dKikoPzpcXC4oLispfCkvO2Z1bmN0aW9uIGdhKCl7cmV0dXJuITB9ZnVuY3Rpb24gaGEoKXtyZXR1cm4hMX1mdW5jdGlvbiBpYSgpe3RyeXtyZXR1cm4gZC5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319ZnVuY3Rpb24gamEoYSxiLGMsZCxlLGYpe3ZhciBnLGg7aWYoXCJvYmplY3RcIj09dHlwZW9mIGIpe1wic3RyaW5nXCIhPXR5cGVvZiBjJiYoZD1kfHxjLGM9dm9pZCAwKTtmb3IoaCBpbiBiKWphKGEsaCxjLGQsYltoXSxmKTtyZXR1cm4gYX1pZihudWxsPT1kJiZudWxsPT1lPyhlPWMsZD1jPXZvaWQgMCk6bnVsbD09ZSYmKFwic3RyaW5nXCI9PXR5cGVvZiBjPyhlPWQsZD12b2lkIDApOihlPWQsZD1jLGM9dm9pZCAwKSksZT09PSExKWU9aGE7ZWxzZSBpZighZSlyZXR1cm4gYTtyZXR1cm4gMT09PWYmJihnPWUsZT1mdW5jdGlvbihhKXtyZXR1cm4gbigpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1uLmd1aWQrKykpLGEuZWFjaChmdW5jdGlvbigpe24uZXZlbnQuYWRkKHRoaXMsYixlLGQsYyl9KX1uLmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPU4uZ2V0KGEpO2lmKHIpe2MuaGFuZGxlciYmKGY9YyxjPWYuaGFuZGxlcixlPWYuc2VsZWN0b3IpLGMuZ3VpZHx8KGMuZ3VpZD1uLmd1aWQrKyksKGk9ci5ldmVudHMpfHwoaT1yLmV2ZW50cz17fSksKGc9ci5oYW5kbGUpfHwoZz1yLmhhbmRsZT1mdW5jdGlvbihiKXtyZXR1cm5cInVuZGVmaW5lZFwiIT10eXBlb2YgbiYmbi5ldmVudC50cmlnZ2VyZWQhPT1iLnR5cGU/bi5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSksYj0oYnx8XCJcIikubWF0Y2goRyl8fFtcIlwiXSxqPWIubGVuZ3RoO3doaWxlKGotLSloPWZhLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKFwiLlwiKX0sZiksKG09aVtvXSl8fChtPWlbb109W10sbS5kZWxlZ2F0ZUNvdW50PTAsbC5zZXR1cCYmbC5zZXR1cC5jYWxsKGEsZCxwLGcpIT09ITF8fGEuYWRkRXZlbnRMaXN0ZW5lciYmYS5hZGRFdmVudExpc3RlbmVyKG8sZykpLGwuYWRkJiYobC5hZGQuY2FsbChhLGspLGsuaGFuZGxlci5ndWlkfHwoay5oYW5kbGVyLmd1aWQ9Yy5ndWlkKSksZT9tLnNwbGljZShtLmRlbGVnYXRlQ291bnQrKywwLGspOm0ucHVzaChrKSxuLmV2ZW50Lmdsb2JhbFtvXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnLGgsaSxqLGssbCxtLG8scCxxLHI9Ti5oYXNEYXRhKGEpJiZOLmdldChhKTtpZihyJiYoaT1yLmV2ZW50cykpe2I9KGJ8fFwiXCIpLm1hdGNoKEcpfHxbXCJcIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1mYS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLG8pe2w9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShkP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLG09aVtvXXx8W10saD1oWzJdJiZuZXcgUmVnRXhwKFwiKF58XFxcXC4pXCIrcC5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikrXCIoXFxcXC58JClcIiksZz1mPW0ubGVuZ3RoO3doaWxlKGYtLSlrPW1bZl0sIWUmJnEhPT1rLm9yaWdUeXBlfHxjJiZjLmd1aWQhPT1rLmd1aWR8fGgmJiFoLnRlc3Qoay5uYW1lc3BhY2UpfHxkJiZkIT09ay5zZWxlY3RvciYmKFwiKipcIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxrKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEscCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRlbGV0ZSBpW29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jbal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaSkmJk4ucmVtb3ZlKGEsXCJoYW5kbGUgZXZlbnRzXCIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50LmZpeChhKTt2YXIgYixjLGQsZixnLGg9W10saT1lLmNhbGwoYXJndW1lbnRzKSxqPShOLmdldCh0aGlzLFwiZXZlbnRzXCIpfHx7fSlbYS50eXBlXXx8W10saz1uLmV2ZW50LnNwZWNpYWxbYS50eXBlXXx8e307aWYoaVswXT1hLGEuZGVsZWdhdGVUYXJnZXQ9dGhpcywhay5wcmVEaXNwYXRjaHx8ay5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsYSkhPT0hMSl7aD1uLmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxhLGopLGI9MDt3aGlsZSgoZj1oW2IrK10pJiYhYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGM9MDt3aGlsZSgoZz1mLmhhbmRsZXJzW2MrK10pJiYhYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWEucm5hbWVzcGFjZSYmIWEucm5hbWVzcGFjZS50ZXN0KGcubmFtZXNwYWNlKXx8KGEuaGFuZGxlT2JqPWcsYS5kYXRhPWcuZGF0YSxkPSgobi5ldmVudC5zcGVjaWFsW2cub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxnLmhhbmRsZXIpLmFwcGx5KGYuZWxlbSxpKSx2b2lkIDAhPT1kJiYoYS5yZXN1bHQ9ZCk9PT0hMSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGsucG9zdERpc3BhdGNoJiZrLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsYSksYS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9W10saD1iLmRlbGVnYXRlQ291bnQsaT1hLnRhcmdldDtpZihoJiZpLm5vZGVUeXBlJiYoXCJjbGlja1wiIT09YS50eXBlfHxpc05hTihhLmJ1dHRvbil8fGEuYnV0dG9uPDEpKWZvcig7aSE9PXRoaXM7aT1pLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWkubm9kZVR5cGUmJihpLmRpc2FibGVkIT09ITB8fFwiY2xpY2tcIiE9PWEudHlwZSkpe2ZvcihkPVtdLGM9MDtoPmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrXCIgXCIsdm9pZCAwPT09ZFtlXSYmKGRbZV09Zi5uZWVkc0NvbnRleHQ/bihlLHRoaXMpLmluZGV4KGkpPi0xOm4uZmluZChlLHRoaXMsbnVsbCxbaV0pLmxlbmd0aCksZFtlXSYmZC5wdXNoKGYpO2QubGVuZ3RoJiZnLnB1c2goe2VsZW06aSxoYW5kbGVyczpkfSl9cmV0dXJuIGg8Yi5sZW5ndGgmJmcucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOmIuc2xpY2UoaCl9KSxnfSxwcm9wczpcImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGRldGFpbCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2hcIi5zcGxpdChcIiBcIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOlwiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZVwiLnNwbGl0KFwiIFwiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbnVsbD09YS53aGljaCYmKGEud2hpY2g9bnVsbCE9Yi5jaGFyQ29kZT9iLmNoYXJDb2RlOmIua2V5Q29kZSksYX19LG1vdXNlSG9va3M6e3Byb3BzOlwiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50XCIuc3BsaXQoXCIgXCIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGQsZT1jLmRvY3VtZW50RWxlbWVudCxmPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZSYmZS5zY3JvbGxMZWZ0fHxmJiZmLnNjcm9sbExlZnR8fDApLShlJiZlLmNsaWVudExlZnR8fGYmJmYuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGUmJmUuc2Nyb2xsVG9wfHxmJiZmLnNjcm9sbFRvcHx8MCktKGUmJmUuY2xpZW50VG9wfHxmJiZmLmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWd8fChhLndoaWNoPTEmZz8xOjImZz8zOjQmZz8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZSxmPWEudHlwZSxnPWEsaD10aGlzLmZpeEhvb2tzW2ZdO2h8fCh0aGlzLmZpeEhvb2tzW2ZdPWg9ZWEudGVzdChmKT90aGlzLm1vdXNlSG9va3M6ZGEudGVzdChmKT90aGlzLmtleUhvb2tzOnt9KSxlPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wcyxhPW5ldyBuLkV2ZW50KGcpLGI9ZS5sZW5ndGg7d2hpbGUoYi0tKWM9ZVtiXSxhW2NdPWdbY107cmV0dXJuIGEudGFyZ2V0fHwoYS50YXJnZXQ9ZCksMz09PWEudGFyZ2V0Lm5vZGVUeXBlJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PWlhKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c2luXCJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWlhKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOlwiZm9jdXNvdXRcIn0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm5cImNoZWNrYm94XCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJm4ubm9kZU5hbWUodGhpcyxcImlucHV0XCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsXCJhXCIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oYSl7dm9pZCAwIT09YS5yZXN1bHQmJmEub3JpZ2luYWxFdmVudCYmKGEub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1hLnJlc3VsdCl9fX19LG4ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYyl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5WYWx1ZT09PSExP2dhOmhhKTp0aGlzLnR5cGU9YSxiJiZuLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxuLm5vdygpLHZvaWQodGhpc1tuLmV4cGFuZG9dPSEwKSk6bmV3IG4uRXZlbnQoYSxiKX0sbi5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4uRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOmhhLGlzUHJvcGFnYXRpb25TdG9wcGVkOmhhLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmhhLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPWdhLGEmJiF0aGlzLmlzU2ltdWxhdGVkJiZhLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWdhLGEmJiF0aGlzLmlzU2ltdWxhdGVkJiZhLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1nYSxhJiYhdGhpcy5pc1NpbXVsYXRlZCYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sbi5lYWNoKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwicG9pbnRlcm92ZXJcIixwb2ludGVybGVhdmU6XCJwb2ludGVyb3V0XCJ9LGZ1bmN0aW9uKGEsYil7bi5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iajtyZXR1cm4gZSYmKGU9PT1kfHxuLmNvbnRhaW5zKGQsZSkpfHwoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGphKHRoaXMsYSxiLGMsZCl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gamEodGhpcyxhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYSYmYS5wcmV2ZW50RGVmYXVsdCYmYS5oYW5kbGVPYmopcmV0dXJuIGQ9YS5oYW5kbGVPYmosbihhLmRlbGVnYXRlVGFyZ2V0KS5vZmYoZC5uYW1lc3BhY2U/ZC5vcmlnVHlwZStcIi5cIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBhKXtmb3IoZSBpbiBhKXRoaXMub2ZmKGUsYixhW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gYiE9PSExJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBifHwoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPWhhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtuLmV2ZW50LnJlbW92ZSh0aGlzLGEsYyxiKX0pfX0pO3ZhciBrYT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXFx3Oi1dKylbXj5dKilcXC8+L2dpLGxhPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLG1hPS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksbmE9L150cnVlXFwvKC4qKS8sb2E9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO2Z1bmN0aW9uIHBhKGEsYil7cmV0dXJuIG4ubm9kZU5hbWUoYSxcInRhYmxlXCIpJiZuLm5vZGVOYW1lKDExIT09Yi5ub2RlVHlwZT9iOmIuZmlyc3RDaGlsZCxcInRyXCIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0Ym9keVwiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRib2R5XCIpKTphfWZ1bmN0aW9uIHFhKGEpe3JldHVybiBhLnR5cGU9KG51bGwhPT1hLmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK2EudHlwZSxhfWZ1bmN0aW9uIHJhKGEpe3ZhciBiPW5hLmV4ZWMoYS50eXBlKTtyZXR1cm4gYj9hLnR5cGU9YlsxXTphLnJlbW92ZUF0dHJpYnV0ZShcInR5cGVcIiksYX1mdW5jdGlvbiBzYShhLGIpe3ZhciBjLGQsZSxmLGcsaCxpLGo7aWYoMT09PWIubm9kZVR5cGUpe2lmKE4uaGFzRGF0YShhKSYmKGY9Ti5hY2Nlc3MoYSksZz1OLnNldChiLGYpLGo9Zi5ldmVudHMpKXtkZWxldGUgZy5oYW5kbGUsZy5ldmVudHM9e307Zm9yKGUgaW4gailmb3IoYz0wLGQ9altlXS5sZW5ndGg7ZD5jO2MrKyluLmV2ZW50LmFkZChiLGUsaltlXVtjXSl9Ty5oYXNEYXRhKGEpJiYoaD1PLmFjY2VzcyhhKSxpPW4uZXh0ZW5kKHt9LGgpLE8uc2V0KGIsaSkpfX1mdW5jdGlvbiB0YShhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcImlucHV0XCI9PT1jJiZYLnRlc3QoYS50eXBlKT9iLmNoZWNrZWQ9YS5jaGVja2VkOlwiaW5wdXRcIiE9PWMmJlwidGV4dGFyZWFcIiE9PWN8fChiLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZSl9ZnVuY3Rpb24gdWEoYSxiLGMsZCl7Yj1mLmFwcGx5KFtdLGIpO3ZhciBlLGcsaCxpLGosayxtPTAsbz1hLmxlbmd0aCxwPW8tMSxxPWJbMF0scj1uLmlzRnVuY3Rpb24ocSk7aWYocnx8bz4xJiZcInN0cmluZ1wiPT10eXBlb2YgcSYmIWwuY2hlY2tDbG9uZSYmbWEudGVzdChxKSlyZXR1cm4gYS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBmPWEuZXEoZSk7ciYmKGJbMF09cS5jYWxsKHRoaXMsZSxmLmh0bWwoKSkpLHVhKGYsYixjLGQpfSk7aWYobyYmKGU9Y2EoYixhWzBdLm93bmVyRG9jdW1lbnQsITEsYSxkKSxnPWUuZmlyc3RDaGlsZCwxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9ZyksZ3x8ZCkpe2ZvcihoPW4ubWFwKF8oZSxcInNjcmlwdFwiKSxxYSksaT1oLmxlbmd0aDtvPm07bSsrKWo9ZSxtIT09cCYmKGo9bi5jbG9uZShqLCEwLCEwKSxpJiZuLm1lcmdlKGgsXyhqLFwic2NyaXB0XCIpKSksYy5jYWxsKGFbbV0saixtKTtpZihpKWZvcihrPWhbaC5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxuLm1hcChoLHJhKSxtPTA7aT5tO20rKylqPWhbbV0sWi50ZXN0KGoudHlwZXx8XCJcIikmJiFOLmFjY2VzcyhqLFwiZ2xvYmFsRXZhbFwiKSYmbi5jb250YWlucyhrLGopJiYoai5zcmM/bi5fZXZhbFVybCYmbi5fZXZhbFVybChqLnNyYyk6bi5nbG9iYWxFdmFsKGoudGV4dENvbnRlbnQucmVwbGFjZShvYSxcIlwiKSkpfXJldHVybiBhfWZ1bmN0aW9uIHZhKGEsYixjKXtmb3IodmFyIGQsZT1iP24uZmlsdGVyKGIsYSk6YSxmPTA7bnVsbCE9KGQ9ZVtmXSk7ZisrKWN8fDEhPT1kLm5vZGVUeXBlfHxuLmNsZWFuRGF0YShfKGQpKSxkLnBhcmVudE5vZGUmJihjJiZuLmNvbnRhaW5zKGQub3duZXJEb2N1bWVudCxkKSYmYWEoXyhkLFwic2NyaXB0XCIpKSxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCkpO3JldHVybiBhfW4uZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2Uoa2EsXCI8JDE+PC8kMj5cIil9LGNsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuY2xvbmVOb2RlKCEwKSxpPW4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpO2lmKCEobC5ub0Nsb25lQ2hlY2tlZHx8MSE9PWEubm9kZVR5cGUmJjExIT09YS5ub2RlVHlwZXx8bi5pc1hNTERvYyhhKSkpZm9yKGc9XyhoKSxmPV8oYSksZD0wLGU9Zi5sZW5ndGg7ZT5kO2QrKyl0YShmW2RdLGdbZF0pO2lmKGIpaWYoYylmb3IoZj1mfHxfKGEpLGc9Z3x8XyhoKSxkPTAsZT1mLmxlbmd0aDtlPmQ7ZCsrKXNhKGZbZF0sZ1tkXSk7ZWxzZSBzYShhLGgpO3JldHVybiBnPV8oaCxcInNjcmlwdFwiKSxnLmxlbmd0aD4wJiZhYShnLCFpJiZfKGEsXCJzY3JpcHRcIikpLGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGU9bi5ldmVudC5zcGVjaWFsLGY9MDt2b2lkIDAhPT0oYz1hW2ZdKTtmKyspaWYoTChjKSl7aWYoYj1jW04uZXhwYW5kb10pe2lmKGIuZXZlbnRzKWZvcihkIGluIGIuZXZlbnRzKWVbZF0/bi5ldmVudC5yZW1vdmUoYyxkKTpuLnJlbW92ZUV2ZW50KGMsZCxiLmhhbmRsZSk7Y1tOLmV4cGFuZG9dPXZvaWQgMH1jW08uZXhwYW5kb10mJihjW08uZXhwYW5kb109dm9pZCAwKX19fSksbi5mbi5leHRlbmQoe2RvbU1hbmlwOnVhLGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdmEodGhpcyxhLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe3JldHVybiB2YSh0aGlzLGEpfSx0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWEpfSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHVhKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGEpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgYj1wYSh0aGlzLGEpO2IuYXBwZW5kQ2hpbGQoYSl9fSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPXBhKHRoaXMsYSk7Yi5pbnNlcnRCZWZvcmUoYSxiLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdWEodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj0wO251bGwhPShhPXRoaXNbYl0pO2IrKykxPT09YS5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKF8oYSwhMSkpLGEudGV4dENvbnRlbnQ9XCJcIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9bnVsbD09YT8hMTphLGI9bnVsbD09Yj9hOmIsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF18fHt9LGM9MCxkPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWEmJjE9PT1iLm5vZGVUeXBlKXJldHVybiBiLmlubmVySFRNTDtpZihcInN0cmluZ1wiPT10eXBlb2YgYSYmIWxhLnRlc3QoYSkmJiEkWyhZLmV4ZWMoYSl8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1uLmh0bWxQcmVmaWx0ZXIoYSk7dHJ5e2Zvcig7ZD5jO2MrKyliPXRoaXNbY118fHt9LDE9PT1iLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEoXyhiLCExKSksYi5pbm5lckhUTUw9YSk7Yj0wfWNhdGNoKGUpe319YiYmdGhpcy5lbXB0eSgpLmFwcGVuZChhKX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB1YSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihiKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7bi5pbkFycmF5KHRoaXMsYSk8MCYmKG4uY2xlYW5EYXRhKF8odGhpcykpLGMmJmMucmVwbGFjZUNoaWxkKGIsdGhpcykpfSxhKX19KSxuLmVhY2goe2FwcGVuZFRvOlwiYXBwZW5kXCIscHJlcGVuZFRvOlwicHJlcGVuZFwiLGluc2VydEJlZm9yZTpcImJlZm9yZVwiLGluc2VydEFmdGVyOlwiYWZ0ZXJcIixyZXBsYWNlQWxsOlwicmVwbGFjZVdpdGhcIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9bihhKSxmPWUubGVuZ3RoLTEsaD0wO2Y+PWg7aCsrKWM9aD09PWY/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGcuYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHdhLHhhPXtIVE1MOlwiYmxvY2tcIixCT0RZOlwiYmxvY2tcIn07ZnVuY3Rpb24geWEoYSxiKXt2YXIgYz1uKGIuY3JlYXRlRWxlbWVudChhKSkuYXBwZW5kVG8oYi5ib2R5KSxkPW4uY3NzKGNbMF0sXCJkaXNwbGF5XCIpO3JldHVybiBjLmRldGFjaCgpLGR9ZnVuY3Rpb24gemEoYSl7dmFyIGI9ZCxjPXhhW2FdO3JldHVybiBjfHwoYz15YShhLGIpLFwibm9uZVwiIT09YyYmY3x8KHdhPSh3YXx8bihcIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz5cIikpLmFwcGVuZFRvKGIuZG9jdW1lbnRFbGVtZW50KSxiPXdhWzBdLmNvbnRlbnREb2N1bWVudCxiLndyaXRlKCksYi5jbG9zZSgpLGM9eWEoYSxiKSx3YS5kZXRhY2goKSkseGFbYV09YyksY312YXIgQWE9L15tYXJnaW4vLEJhPW5ldyBSZWdFeHAoXCJeKFwiK1MrXCIpKD8hcHgpW2EteiVdKyRcIixcImlcIiksQ2E9ZnVuY3Rpb24oYil7dmFyIGM9Yi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiBjJiZjLm9wZW5lcnx8KGM9YSksYy5nZXRDb21wdXRlZFN0eWxlKGIpfSxEYT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGc9e307Zm9yKGYgaW4gYilnW2ZdPWEuc3R5bGVbZl0sYS5zdHlsZVtmXT1iW2ZdO2U9Yy5hcHBseShhLGR8fFtdKTtmb3IoZiBpbiBiKWEuc3R5bGVbZl09Z1tmXTtyZXR1cm4gZX0sRWE9ZC5kb2N1bWVudEVsZW1lbnQ7IWZ1bmN0aW9uKCl7dmFyIGIsYyxlLGYsZz1kLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksaD1kLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7aWYoaC5zdHlsZSl7aC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsaC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsbC5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09aC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxnLnN0eWxlLmNzc1RleHQ9XCJib3JkZXI6MDt3aWR0aDo4cHg7aGVpZ2h0OjA7dG9wOjA7bGVmdDotOTk5OXB4O3BhZGRpbmc6MDttYXJnaW4tdG9wOjFweDtwb3NpdGlvbjphYnNvbHV0ZVwiLGcuYXBwZW5kQ2hpbGQoaCk7ZnVuY3Rpb24gaSgpe2guc3R5bGUuY3NzVGV4dD1cIi13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7dG9wOjElO3dpZHRoOjUwJVwiLGguaW5uZXJIVE1MPVwiXCIsRWEuYXBwZW5kQ2hpbGQoZyk7dmFyIGQ9YS5nZXRDb21wdXRlZFN0eWxlKGgpO2I9XCIxJVwiIT09ZC50b3AsZj1cIjJweFwiPT09ZC5tYXJnaW5MZWZ0LGM9XCI0cHhcIj09PWQud2lkdGgsaC5zdHlsZS5tYXJnaW5SaWdodD1cIjUwJVwiLGU9XCI0cHhcIj09PWQubWFyZ2luUmlnaHQsRWEucmVtb3ZlQ2hpbGQoZyl9bi5leHRlbmQobCx7cGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiBpKCksYn0sYm94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YyYmaSgpLGN9LHBpeGVsTWFyZ2luUmlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09YyYmaSgpLGV9LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBudWxsPT1jJiZpKCksZn0scmVsaWFibGVNYXJnaW5SaWdodDpmdW5jdGlvbigpe3ZhciBiLGM9aC5hcHBlbmRDaGlsZChkLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO3JldHVybiBjLnN0eWxlLmNzc1RleHQ9aC5zdHlsZS5jc3NUZXh0PVwiLXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjBcIixjLnN0eWxlLm1hcmdpblJpZ2h0PWMuc3R5bGUud2lkdGg9XCIwXCIsaC5zdHlsZS53aWR0aD1cIjFweFwiLEVhLmFwcGVuZENoaWxkKGcpLGI9IXBhcnNlRmxvYXQoYS5nZXRDb21wdXRlZFN0eWxlKGMpLm1hcmdpblJpZ2h0KSxFYS5yZW1vdmVDaGlsZChnKSxoLnJlbW92ZUNoaWxkKGMpLGJ9fSl9fSgpO2Z1bmN0aW9uIEZhKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8Q2EoYSksZz1jP2MuZ2V0UHJvcGVydHlWYWx1ZShiKXx8Y1tiXTp2b2lkIDAsXCJcIiE9PWcmJnZvaWQgMCE9PWd8fG4uY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpfHwoZz1uLnN0eWxlKGEsYikpLGMmJiFsLnBpeGVsTWFyZ2luUmlnaHQoKSYmQmEudGVzdChnKSYmQWEudGVzdChiKSYmKGQ9aC53aWR0aCxlPWgubWluV2lkdGgsZj1oLm1heFdpZHRoLGgubWluV2lkdGg9aC5tYXhXaWR0aD1oLndpZHRoPWcsZz1jLndpZHRoLGgud2lkdGg9ZCxoLm1pbldpZHRoPWUsaC5tYXhXaWR0aD1mKSx2b2lkIDAhPT1nP2crXCJcIjpnfWZ1bmN0aW9uIEdhKGEsYil7cmV0dXJue2dldDpmdW5jdGlvbigpe3JldHVybiBhKCk/dm9pZCBkZWxldGUgdGhpcy5nZXQ6KHRoaXMuZ2V0PWIpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXZhciBIYT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sSWE9e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsZGlzcGxheTpcImJsb2NrXCJ9LEphPXtsZXR0ZXJTcGFjaW5nOlwiMFwiLGZvbnRXZWlnaHQ6XCI0MDBcIn0sS2E9W1wiV2Via2l0XCIsXCJPXCIsXCJNb3pcIixcIm1zXCJdLExhPWQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZTtmdW5jdGlvbiBNYShhKXtpZihhIGluIExhKXJldHVybiBhO3ZhciBiPWFbMF0udG9VcHBlckNhc2UoKSthLnNsaWNlKDEpLGM9S2EubGVuZ3RoO3doaWxlKGMtLSlpZihhPUthW2NdK2IsYSBpbiBMYSlyZXR1cm4gYX1mdW5jdGlvbiBOYShhLGIsYyl7dmFyIGQ9VC5leGVjKGIpO3JldHVybiBkP01hdGgubWF4KDAsZFsyXS0oY3x8MCkpKyhkWzNdfHxcInB4XCIpOmJ9ZnVuY3Rpb24gT2EoYSxiLGMsZCxlKXtmb3IodmFyIGY9Yz09PShkP1wiYm9yZGVyXCI6XCJjb250ZW50XCIpPzQ6XCJ3aWR0aFwiPT09Yj8xOjAsZz0wOzQ+ZjtmKz0yKVwibWFyZ2luXCI9PT1jJiYoZys9bi5jc3MoYSxjK1VbZl0sITAsZSkpLGQ/KFwiY29udGVudFwiPT09YyYmKGctPW4uY3NzKGEsXCJwYWRkaW5nXCIrVVtmXSwhMCxlKSksXCJtYXJnaW5cIiE9PWMmJihnLT1uLmNzcyhhLFwiYm9yZGVyXCIrVVtmXStcIldpZHRoXCIsITAsZSkpKTooZys9bi5jc3MoYSxcInBhZGRpbmdcIitVW2ZdLCEwLGUpLFwicGFkZGluZ1wiIT09YyYmKGcrPW4uY3NzKGEsXCJib3JkZXJcIitVW2ZdK1wiV2lkdGhcIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIFBhKGEsYixjKXt2YXIgZD0hMCxlPVwid2lkdGhcIj09PWI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodCxmPUNhKGEpLGc9XCJib3JkZXItYm94XCI9PT1uLmNzcyhhLFwiYm94U2l6aW5nXCIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT1GYShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLEJhLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYobC5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK09hKGEsYixjfHwoZz9cImJvcmRlclwiOlwiY29udGVudFwiKSxkLGYpK1wicHhcIn1mdW5jdGlvbiBRYShhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1OLmdldChkLFwib2xkZGlzcGxheVwiKSxjPWQuc3R5bGUuZGlzcGxheSxiPyhmW2ddfHxcIm5vbmVcIiE9PWN8fChkLnN0eWxlLmRpc3BsYXk9XCJcIiksXCJcIj09PWQuc3R5bGUuZGlzcGxheSYmVihkKSYmKGZbZ109Ti5hY2Nlc3MoZCxcIm9sZGRpc3BsYXlcIix6YShkLm5vZGVOYW1lKSkpKTooZT1WKGQpLFwibm9uZVwiPT09YyYmZXx8Ti5zZXQoZCxcIm9sZGRpc3BsYXlcIixlP2M6bi5jc3MoZCxcImRpc3BsYXlcIikpKSk7Zm9yKGc9MDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoYiYmXCJub25lXCIhPT1kLnN0eWxlLmRpc3BsYXkmJlwiXCIhPT1kLnN0eWxlLmRpc3BsYXl8fChkLnN0eWxlLmRpc3BsYXk9Yj9mW2ddfHxcIlwiOlwibm9uZVwiKSk7cmV0dXJuIGF9bi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1GYShhLFwib3BhY2l0eVwiKTtyZXR1cm5cIlwiPT09Yz9cIjFcIjpjfX19fSxjc3NOdW1iZXI6e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGNvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOntcImZsb2F0XCI6XCJjc3NGbG9hdFwifSxzdHlsZTpmdW5jdGlvbihhLGIsYyxkKXtpZihhJiYzIT09YS5ub2RlVHlwZSYmOCE9PWEubm9kZVR5cGUmJmEuc3R5bGUpe3ZhciBlLGYsZyxoPW4uY2FtZWxDYXNlKGIpLGk9YS5zdHlsZTtyZXR1cm4gYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1NYShoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLHZvaWQgMD09PWM/ZyYmXCJnZXRcImluIGcmJnZvaWQgMCE9PShlPWcuZ2V0KGEsITEsZCkpP2U6aVtiXTooZj10eXBlb2YgYyxcInN0cmluZ1wiPT09ZiYmKGU9VC5leGVjKGMpKSYmZVsxXSYmKGM9VyhhLGIsZSksZj1cIm51bWJlclwiKSxudWxsIT1jJiZjPT09YyYmKFwibnVtYmVyXCI9PT1mJiYoYys9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2hdP1wiXCI6XCJweFwiKSksbC5jbGVhckNsb25lU3R5bGV8fFwiXCIhPT1jfHwwIT09Yi5pbmRleE9mKFwiYmFja2dyb3VuZFwiKXx8KGlbYl09XCJpbmhlcml0XCIpLGcmJlwic2V0XCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1NYShoKXx8aCksZz1uLmNzc0hvb2tzW2JdfHxuLmNzc0hvb2tzW2hdLGcmJlwiZ2V0XCJpbiBnJiYoZT1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1lJiYoZT1GYShhLGIsZCkpLFwibm9ybWFsXCI9PT1lJiZiIGluIEphJiYoZT1KYVtiXSksXCJcIj09PWN8fGM/KGY9cGFyc2VGbG9hdChlKSxjPT09ITB8fGlzRmluaXRlKGYpP2Z8fDA6ZSk6ZX19KSxuLmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGM/SGEudGVzdChuLmNzcyhhLFwiZGlzcGxheVwiKSkmJjA9PT1hLm9mZnNldFdpZHRoP0RhKGEsSWEsZnVuY3Rpb24oKXtyZXR1cm4gUGEoYSxiLGQpfSk6UGEoYSxiLGQpOnZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxmPWQmJkNhKGEpLGc9ZCYmT2EoYSxiLGQsXCJib3JkZXItYm94XCI9PT1uLmNzcyhhLFwiYm94U2l6aW5nXCIsITEsZiksZik7cmV0dXJuIGcmJihlPVQuZXhlYyhjKSkmJlwicHhcIiE9PShlWzNdfHxcInB4XCIpJiYoYS5zdHlsZVtiXT1jLGM9bi5jc3MoYSxiKSksTmEoYSxjLGcpfX19KSxuLmNzc0hvb2tzLm1hcmdpbkxlZnQ9R2EobC5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj8ocGFyc2VGbG9hdChGYShhLFwibWFyZ2luTGVmdFwiKSl8fGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1EYShhLHttYXJnaW5MZWZ0OjB9LGZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0pKStcInB4XCI6dm9pZCAwfSksbi5jc3NIb29rcy5tYXJnaW5SaWdodD1HYShsLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9EYShhLHtkaXNwbGF5OlwiaW5saW5lLWJsb2NrXCJ9LEZhLFthLFwibWFyZ2luUmlnaHRcIl0pOnZvaWQgMH0pLG4uZWFjaCh7bWFyZ2luOlwiXCIscGFkZGluZzpcIlwiLGJvcmRlcjpcIldpZHRoXCJ9LGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPVwic3RyaW5nXCI9PXR5cGVvZiBjP2Muc3BsaXQoXCIgXCIpOltjXTs0PmQ7ZCsrKWVbYStVW2RdK2JdPWZbZF18fGZbZC0yXXx8ZlswXTtyZXR1cm4gZX19LEFhLnRlc3QoYSl8fChuLmNzc0hvb2tzW2ErYl0uc2V0PU5hKX0pLG4uZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9e30sZz0wO2lmKG4uaXNBcnJheShiKSl7Zm9yKGQ9Q2EoYSksZT1iLmxlbmd0aDtlPmc7ZysrKWZbYltnXV09bi5jc3MoYSxiW2ddLCExLGQpO3JldHVybiBmfXJldHVybiB2b2lkIDAhPT1jP24uc3R5bGUoYSxiLGMpOm4uY3NzKGEsYil9LGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIFFhKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIFFhKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Vih0aGlzKT9uKHRoaXMpLnNob3coKTpuKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uIFJhKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBSYS5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfW4uVHdlZW49UmEsUmEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpSYSxpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHxuLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9Yix0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9ZCx0aGlzLnVuaXQ9Znx8KG4uY3NzTnVtYmVyW2NdP1wiXCI6XCJweFwiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGE9UmEucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGEmJmEuZ2V0P2EuZ2V0KHRoaXMpOlJhLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihhKXt2YXIgYixjPVJhLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9Yj1uLmVhc2luZ1t0aGlzLmVhc2luZ10oYSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz1iPWEsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmIrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksYyYmYy5zZXQ/Yy5zZXQodGhpcyk6UmEucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sUmEucHJvdG90eXBlLmluaXQucHJvdG90eXBlPVJhLnByb3RvdHlwZSxSYS5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIDEhPT1hLmVsZW0ubm9kZVR5cGV8fG51bGwhPWEuZWxlbVthLnByb3BdJiZudWxsPT1hLmVsZW0uc3R5bGVbYS5wcm9wXT9hLmVsZW1bYS5wcm9wXTooYj1uLmNzcyhhLmVsZW0sYS5wcm9wLFwiXCIpLGImJlwiYXV0b1wiIT09Yj9iOjApfSxzZXQ6ZnVuY3Rpb24oYSl7bi5meC5zdGVwW2EucHJvcF0/bi5meC5zdGVwW2EucHJvcF0oYSk6MSE9PWEuZWxlbS5ub2RlVHlwZXx8bnVsbD09YS5lbGVtLnN0eWxlW24uY3NzUHJvcHNbYS5wcm9wXV0mJiFuLmNzc0hvb2tzW2EucHJvcF0/YS5lbGVtW2EucHJvcF09YS5ub3c6bi5zdHlsZShhLmVsZW0sYS5wcm9wLGEubm93K2EudW5pdCl9fX0sUmEucHJvcEhvb2tzLnNjcm9sbFRvcD1SYS5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGEpe2EuZWxlbS5ub2RlVHlwZSYmYS5lbGVtLnBhcmVudE5vZGUmJihhLmVsZW1bYS5wcm9wXT1hLm5vdyl9fSxuLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4uNS1NYXRoLmNvcyhhKk1hdGguUEkpLzJ9LF9kZWZhdWx0Olwic3dpbmdcIn0sbi5meD1SYS5wcm90b3R5cGUuaW5pdCxuLmZ4LnN0ZXA9e307dmFyIFNhLFRhLFVhPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxWYT0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIFdhKCl7cmV0dXJuIGEuc2V0VGltZW91dChmdW5jdGlvbigpe1NhPXZvaWQgMH0pLFNhPW4ubm93KCl9ZnVuY3Rpb24gWGEoYSxiKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIpYz1VW2RdLGVbXCJtYXJnaW5cIitjXT1lW1wicGFkZGluZ1wiK2NdPWE7cmV0dXJuIGImJihlLm9wYWNpdHk9ZS53aWR0aD1hKSxlfWZ1bmN0aW9uIFlhKGEsYixjKXtmb3IodmFyIGQsZT0oX2EudHdlZW5lcnNbYl18fFtdKS5jb25jYXQoX2EudHdlZW5lcnNbXCIqXCJdKSxmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlvbiBaYShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxvPWEuc3R5bGUscD1hLm5vZGVUeXBlJiZWKGEpLHE9Ti5nZXQoYSxcImZ4c2hvd1wiKTtjLnF1ZXVlfHwoaD1uLl9xdWV1ZUhvb2tzKGEsXCJmeFwiKSxudWxsPT1oLnVucXVldWVkJiYoaC51bnF1ZXVlZD0wLGk9aC5lbXB0eS5maXJlLGguZW1wdHkuZmlyZT1mdW5jdGlvbigpe2gudW5xdWV1ZWR8fGkoKX0pLGgudW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7aC51bnF1ZXVlZC0tLG4ucXVldWUoYSxcImZ4XCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKFwiaGVpZ2h0XCJpbiBifHxcIndpZHRoXCJpbiBiKSYmKGMub3ZlcmZsb3c9W28ub3ZlcmZsb3csby5vdmVyZmxvd1gsby5vdmVyZmxvd1ldLGo9bi5jc3MoYSxcImRpc3BsYXlcIiksaz1cIm5vbmVcIj09PWo/Ti5nZXQoYSxcIm9sZGRpc3BsYXlcIil8fHphKGEubm9kZU5hbWUpOmosXCJpbmxpbmVcIj09PWsmJlwibm9uZVwiPT09bi5jc3MoYSxcImZsb2F0XCIpJiYoby5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIpKSxjLm92ZXJmbG93JiYoby5vdmVyZmxvdz1cImhpZGRlblwiLGwuYWx3YXlzKGZ1bmN0aW9uKCl7by5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLG8ub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0sby5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKWlmKGU9YltkXSxVYS5leGVjKGUpKXtpZihkZWxldGUgYltkXSxmPWZ8fFwidG9nZ2xlXCI9PT1lLGU9PT0ocD9cImhpZGVcIjpcInNob3dcIikpe2lmKFwic2hvd1wiIT09ZXx8IXF8fHZvaWQgMD09PXFbZF0pY29udGludWU7cD0hMH1tW2RdPXEmJnFbZF18fG4uc3R5bGUoYSxkKX1lbHNlIGo9dm9pZCAwO2lmKG4uaXNFbXB0eU9iamVjdChtKSlcImlubGluZVwiPT09KFwibm9uZVwiPT09aj96YShhLm5vZGVOYW1lKTpqKSYmKG8uZGlzcGxheT1qKTtlbHNle3E/XCJoaWRkZW5cImluIHEmJihwPXEuaGlkZGVuKTpxPU4uYWNjZXNzKGEsXCJmeHNob3dcIix7fSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7Ti5yZW1vdmUoYSxcImZ4c2hvd1wiKTtmb3IoYiBpbiBtKW4uc3R5bGUoYSxiLG1bYl0pfSk7Zm9yKGQgaW4gbSlnPVlhKHA/cVtkXTowLGQsbCksZCBpbiBxfHwocVtkXT1nLnN0YXJ0LHAmJihnLmVuZD1nLnN0YXJ0LGcuc3RhcnQ9XCJ3aWR0aFwiPT09ZHx8XCJoZWlnaHRcIj09PWQ/MTowKSl9fWZ1bmN0aW9uICRhKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW4uY3NzSG9va3NbZF0sZyYmXCJleHBhbmRcImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX1mdW5jdGlvbiBfYShhLGIsYyl7dmFyIGQsZSxmPTAsZz1fYS5wcmVmaWx0ZXJzLmxlbmd0aCxoPW4uRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgaS5lbGVtfSksaT1mdW5jdGlvbigpe2lmKGUpcmV0dXJuITE7Zm9yKHZhciBiPVNhfHxXYSgpLGM9TWF0aC5tYXgoMCxqLnN0YXJ0VGltZStqLmR1cmF0aW9uLWIpLGQ9Yy9qLmR1cmF0aW9ufHwwLGY9MS1kLGc9MCxpPWoudHdlZW5zLmxlbmd0aDtpPmc7ZysrKWoudHdlZW5zW2ddLnJ1bihmKTtyZXR1cm4gaC5ub3RpZnlXaXRoKGEsW2osZixjXSksMT5mJiZpP2M6KGgucmVzb2x2ZVdpdGgoYSxbal0pLCExKX0saj1oLnByb21pc2Uoe2VsZW06YSxwcm9wczpuLmV4dGVuZCh7fSxiKSxvcHRzOm4uZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpuLmVhc2luZy5fZGVmYXVsdH0sYyksb3JpZ2luYWxQcm9wZXJ0aWVzOmIsb3JpZ2luYWxPcHRpb25zOmMsc3RhcnRUaW1lOlNhfHxXYSgpLGR1cmF0aW9uOmMuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGIsYyl7dmFyIGQ9bi5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGQpLGR9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7aWYoZSlyZXR1cm4gdGhpcztmb3IoZT0hMDtkPmM7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj8oaC5ub3RpZnlXaXRoKGEsW2osMSwwXSksaC5yZXNvbHZlV2l0aChhLFtqLGJdKSk6aC5yZWplY3RXaXRoKGEsW2osYl0pLHRoaXN9fSksaz1qLnByb3BzO2ZvcigkYShrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtnPmY7ZisrKWlmKGQ9X2EucHJlZmlsdGVyc1tmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIG4uaXNGdW5jdGlvbihkLnN0b3ApJiYobi5fcXVldWVIb29rcyhqLmVsZW0sai5vcHRzLnF1ZXVlKS5zdG9wPW4ucHJveHkoZC5zdG9wLGQpKSxkO3JldHVybiBuLm1hcChrLFlhLGopLG4uaXNGdW5jdGlvbihqLm9wdHMuc3RhcnQpJiZqLm9wdHMuc3RhcnQuY2FsbChhLGopLG4uZngudGltZXIobi5leHRlbmQoaSx7ZWxlbTphLGFuaW06aixxdWV1ZTpqLm9wdHMucXVldWV9KSksai5wcm9ncmVzcyhqLm9wdHMucHJvZ3Jlc3MpLmRvbmUoai5vcHRzLmRvbmUsai5vcHRzLmNvbXBsZXRlKS5mYWlsKGoub3B0cy5mYWlsKS5hbHdheXMoai5vcHRzLmFsd2F5cyl9bi5BbmltYXRpb249bi5leHRlbmQoX2Ese3R3ZWVuZXJzOntcIipcIjpbZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNyZWF0ZVR3ZWVuKGEsYik7cmV0dXJuIFcoYy5lbGVtLGEsVC5leGVjKGIpLGMpLGN9XX0sdHdlZW5lcjpmdW5jdGlvbihhLGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9W1wiKlwiXSk6YT1hLm1hdGNoKEcpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxfYS50d2VlbmVyc1tjXT1fYS50d2VlbmVyc1tjXXx8W10sX2EudHdlZW5lcnNbY10udW5zaGlmdChiKX0scHJlZmlsdGVyczpbWmFdLHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/X2EucHJlZmlsdGVycy51bnNoaWZ0KGEpOl9hLnByZWZpbHRlcnMucHVzaChhKX19KSxuLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZcIm9iamVjdFwiPT10eXBlb2YgYT9uLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fG4uaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhbi5pc0Z1bmN0aW9uKGIpJiZifTtyZXR1cm4gZC5kdXJhdGlvbj1uLmZ4Lm9mZj8wOlwibnVtYmVyXCI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCxudWxsIT1kLnF1ZXVlJiZkLnF1ZXVlIT09ITB8fChkLnF1ZXVlPVwiZnhcIiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoVikuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1uLmlzRW1wdHlPYmplY3QoYSksZj1uLnNwZWVkKGIsYyxkKSxnPWZ1bmN0aW9uKCl7dmFyIGI9X2EodGhpcyxuLmV4dGVuZCh7fSxhKSxmKTsoZXx8Ti5nZXQodGhpcyxcImZpbmlzaFwiKSkmJmIuc3RvcCghMCl9O3JldHVybiBnLmZpbmlzaD1nLGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGMpfTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHxcImZ4XCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPSEwLGU9bnVsbCE9YSYmYStcInF1ZXVlSG9va3NcIixmPW4udGltZXJzLGc9Ti5nZXQodGhpcyk7aWYoZSlnW2VdJiZnW2VdLnN0b3AmJmQoZ1tlXSk7ZWxzZSBmb3IoZSBpbiBnKWdbZV0mJmdbZV0uc3RvcCYmVmEudGVzdChlKSYmZChnW2VdKTtmb3IoZT1mLmxlbmd0aDtlLS07KWZbZV0uZWxlbSE9PXRoaXN8fG51bGwhPWEmJmZbZV0ucXVldWUhPT1hfHwoZltlXS5hbmltLnN0b3AoYyksYj0hMSxmLnNwbGljZShlLDEpKTshYiYmY3x8bi5kZXF1ZXVlKHRoaXMsYSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiBhIT09ITEmJihhPWF8fFwiZnhcIiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsYz1OLmdldCh0aGlzKSxkPWNbYStcInF1ZXVlXCJdLGU9Y1thK1wicXVldWVIb29rc1wiXSxmPW4udGltZXJzLGc9ZD9kLmxlbmd0aDowO2ZvcihjLmZpbmlzaD0hMCxuLnF1ZXVlKHRoaXMsYSxbXSksZSYmZS5zdG9wJiZlLnN0b3AuY2FsbCh0aGlzLCEwKSxiPWYubGVuZ3RoO2ItLTspZltiXS5lbGVtPT09dGhpcyYmZltiXS5xdWV1ZT09PWEmJihmW2JdLmFuaW0uc3RvcCghMCksZi5zcGxpY2UoYiwxKSk7Zm9yKGI9MDtnPmI7YisrKWRbYl0mJmRbYl0uZmluaXNoJiZkW2JdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBjLmZpbmlzaH0pfX0pLG4uZWFjaChbXCJ0b2dnbGVcIixcInNob3dcIixcImhpZGVcIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1uLmZuW2JdO24uZm5bYl09ZnVuY3Rpb24oYSxkLGUpe3JldHVybiBudWxsPT1hfHxcImJvb2xlYW5cIj09dHlwZW9mIGE/Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKFhhKGIsITApLGEsZCxlKX19KSxuLmVhY2goe3NsaWRlRG93bjpYYShcInNob3dcIiksc2xpZGVVcDpYYShcImhpZGVcIiksc2xpZGVUb2dnbGU6WGEoXCJ0b2dnbGVcIiksZmFkZUluOntvcGFjaXR5Olwic2hvd1wifSxmYWRlT3V0OntvcGFjaXR5OlwiaGlkZVwifSxmYWRlVG9nZ2xlOntvcGFjaXR5OlwidG9nZ2xlXCJ9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYSxjLGQpe3JldHVybiB0aGlzLmFuaW1hdGUoYixhLGMsZCl9fSksbi50aW1lcnM9W10sbi5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGEsYj0wLGM9bi50aW1lcnM7Zm9yKFNhPW4ubm93KCk7YjxjLmxlbmd0aDtiKyspYT1jW2JdLGEoKXx8Y1tiXSE9PWF8fGMuc3BsaWNlKGItLSwxKTtjLmxlbmd0aHx8bi5meC5zdG9wKCksU2E9dm9pZCAwfSxuLmZ4LnRpbWVyPWZ1bmN0aW9uKGEpe24udGltZXJzLnB1c2goYSksYSgpP24uZnguc3RhcnQoKTpuLnRpbWVycy5wb3AoKX0sbi5meC5pbnRlcnZhbD0xMyxuLmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7VGF8fChUYT1hLnNldEludGVydmFsKG4uZngudGljayxuLmZ4LmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2EuY2xlYXJJbnRlcnZhbChUYSksVGE9bnVsbH0sbi5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sbi5mbi5kZWxheT1mdW5jdGlvbihiLGMpe3JldHVybiBiPW4uZng/bi5meC5zcGVlZHNbYl18fGI6YixjPWN8fFwiZnhcIix0aGlzLnF1ZXVlKGMsZnVuY3Rpb24oYyxkKXt2YXIgZT1hLnNldFRpbWVvdXQoYyxiKTtkLnN0b3A9ZnVuY3Rpb24oKXthLmNsZWFyVGltZW91dChlKX19KX0sZnVuY3Rpb24oKXt2YXIgYT1kLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSxiPWQuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKSxjPWIuYXBwZW5kQ2hpbGQoZC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpKTthLnR5cGU9XCJjaGVja2JveFwiLGwuY2hlY2tPbj1cIlwiIT09YS52YWx1ZSxsLm9wdFNlbGVjdGVkPWMuc2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxsLm9wdERpc2FibGVkPSFjLmRpc2FibGVkLGE9ZC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksYS52YWx1ZT1cInRcIixhLnR5cGU9XCJyYWRpb1wiLGwucmFkaW9WYWx1ZT1cInRcIj09PWEudmFsdWV9KCk7dmFyIGFiLGJiPW4uZXhwci5hdHRySGFuZGxlO24uZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEsodGhpcyxuLmF0dHIsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24ucmVtb3ZlQXR0cih0aGlzLGEpfSl9fSksbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj1hLm5vZGVUeXBlO2lmKDMhPT1mJiY4IT09ZiYmMiE9PWYpcmV0dXJuXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuZ2V0QXR0cmlidXRlP24ucHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZT1uLmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYik/YWI6dm9pZCAwKSksdm9pZCAwIT09Yz9udWxsPT09Yz92b2lkIG4ucmVtb3ZlQXR0cihhLGIpOmUmJlwic2V0XCJpbiBlJiZ2b2lkIDAhPT0oZD1lLnNldChhLGMsYikpP2Q6KGEuc2V0QXR0cmlidXRlKGIsYytcIlwiKSxjKTplJiZcImdldFwiaW4gZSYmbnVsbCE9PShkPWUuZ2V0KGEsYikpP2Q6KGQ9bi5maW5kLmF0dHIoYSxiKSxudWxsPT1kP3ZvaWQgMDpkKSl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGEsYil7aWYoIWwucmFkaW9WYWx1ZSYmXCJyYWRpb1wiPT09YiYmbi5ub2RlTmFtZShhLFwiaW5wdXRcIikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKFwidHlwZVwiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRyk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYmKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfX0pLGFiPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXFx3Ky9nKSxmdW5jdGlvbihhLGIpe3ZhciBjPWJiW2JdfHxuLmZpbmQuYXR0cjtiYltiXT1mdW5jdGlvbihhLGIsZCl7dmFyIGUsZjtyZXR1cm4gZHx8KGY9YmJbYl0sYmJbYl09ZSxlPW51bGwhPWMoYSxiLGQpP2IudG9Mb3dlckNhc2UoKTpudWxsLGJiW2JdPWYpLGV9fSk7dmFyIGNiPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksZGI9L14oPzphfGFyZWEpJC9pO24uZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEsodGhpcyxuLnByb3AsYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW24ucHJvcEZpeFthXXx8YV19KX19KSxuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmPWEubm9kZVR5cGU7aWYoMyE9PWYmJjghPT1mJiYyIT09ZilyZXR1cm4gMT09PWYmJm4uaXNYTUxEb2MoYSl8fChiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tzW2JdKSxcbnZvaWQgMCE9PWM/ZSYmXCJzZXRcImluIGUmJnZvaWQgMCE9PShkPWUuc2V0KGEsYyxiKSk/ZDphW2JdPWM6ZSYmXCJnZXRcImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXt2YXIgYj1uLmZpbmQuYXR0cihhLFwidGFiaW5kZXhcIik7cmV0dXJuIGI/cGFyc2VJbnQoYiwxMCk6Y2IudGVzdChhLm5vZGVOYW1lKXx8ZGIudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7XCJmb3JcIjpcImh0bWxGb3JcIixcImNsYXNzXCI6XCJjbGFzc05hbWVcIn19KSxsLm9wdFNlbGVjdGVkfHwobi5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtiJiYoYi5zZWxlY3RlZEluZGV4LGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLG4uZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7dmFyIGViPS9bXFx0XFxyXFxuXFxmXS9nO2Z1bmN0aW9uIGZiKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSYmYS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIn1uLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaT0wO2lmKG4uaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe24odGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYixmYih0aGlzKSkpfSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGEmJmEpe2I9YS5tYXRjaChHKXx8W107d2hpbGUoYz10aGlzW2krK10paWYoZT1mYihjKSxkPTE9PT1jLm5vZGVUeXBlJiYoXCIgXCIrZStcIiBcIikucmVwbGFjZShlYixcIiBcIikpe2c9MDt3aGlsZShmPWJbZysrXSlkLmluZGV4T2YoXCIgXCIrZitcIiBcIik8MCYmKGQrPWYrXCIgXCIpO2g9bi50cmltKGQpLGUhPT1oJiZjLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsaCl9fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGcsaCxpPTA7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLGZiKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKFwiY2xhc3NcIixcIlwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgYSYmYSl7Yj1hLm1hdGNoKEcpfHxbXTt3aGlsZShjPXRoaXNbaSsrXSlpZihlPWZiKGMpLGQ9MT09PWMubm9kZVR5cGUmJihcIiBcIitlK1wiIFwiKS5yZXBsYWNlKGViLFwiIFwiKSl7Zz0wO3doaWxlKGY9YltnKytdKXdoaWxlKGQuaW5kZXhPZihcIiBcIitmK1wiIFwiKT4tMSlkPWQucmVwbGFjZShcIiBcIitmK1wiIFwiLFwiIFwiKTtoPW4udHJpbShkKSxlIT09aCYmYy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGgpfX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYTtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGImJlwic3RyaW5nXCI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOm4uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLGZiKHRoaXMpLGIpLGIpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGIsZCxlLGY7aWYoXCJzdHJpbmdcIj09PWMpe2Q9MCxlPW4odGhpcyksZj1hLm1hdGNoKEcpfHxbXTt3aGlsZShiPWZbZCsrXSllLmhhc0NsYXNzKGIpP2UucmVtb3ZlQ2xhc3MoYik6ZS5hZGRDbGFzcyhiKX1lbHNlIHZvaWQgMCE9PWEmJlwiYm9vbGVhblwiIT09Y3x8KGI9ZmIodGhpcyksYiYmTi5zZXQodGhpcyxcIl9fY2xhc3NOYW1lX19cIixiKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGJ8fGE9PT0hMT9cIlwiOk4uZ2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIpfHxcIlwiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPTA7Yj1cIiBcIithK1wiIFwiO3doaWxlKGM9dGhpc1tkKytdKWlmKDE9PT1jLm5vZGVUeXBlJiYoXCIgXCIrZmIoYykrXCIgXCIpLnJlcGxhY2UoZWIsXCIgXCIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGdiPS9cXHIvZyxoYj0vW1xceDIwXFx0XFxyXFxuXFxmXSsvZztuLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIGU/ZSs9XCJcIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/XCJcIjphK1wiXCJ9KSksYj1uLnZhbEhvb2tzW3RoaXMudHlwZV18fG4udmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxiJiZcInNldFwiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLFwidmFsdWVcIil8fCh0aGlzLnZhbHVlPWUpKX0pO2lmKGUpcmV0dXJuIGI9bi52YWxIb29rc1tlLnR5cGVdfHxuLnZhbEhvb2tzW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sYiYmXCJnZXRcImluIGImJnZvaWQgMCE9PShjPWIuZ2V0KGUsXCJ2YWx1ZVwiKSk/YzooYz1lLnZhbHVlLFwic3RyaW5nXCI9PXR5cGVvZiBjP2MucmVwbGFjZShnYixcIlwiKTpudWxsPT1jP1wiXCI6Yyl9fX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSxcInZhbHVlXCIpO3JldHVybiBudWxsIT1iP2I6bi50cmltKG4udGV4dChhKSkucmVwbGFjZShoYixcIiBcIil9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkPWEub3B0aW9ucyxlPWEuc2VsZWN0ZWRJbmRleCxmPVwic2VsZWN0LW9uZVwiPT09YS50eXBlfHwwPmUsZz1mP251bGw6W10saD1mP2UrMTpkLmxlbmd0aCxpPTA+ZT9oOmY/ZTowO2g+aTtpKyspaWYoYz1kW2ldLChjLnNlbGVjdGVkfHxpPT09ZSkmJihsLm9wdERpc2FibGVkPyFjLmRpc2FibGVkOm51bGw9PT1jLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpKSYmKCFjLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFuLm5vZGVOYW1lKGMucGFyZW50Tm9kZSxcIm9wdGdyb3VwXCIpKSl7aWYoYj1uKGMpLnZhbCgpLGYpcmV0dXJuIGI7Zy5wdXNoKGIpfXJldHVybiBnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5vcHRpb25zLGY9bi5tYWtlQXJyYXkoYiksZz1lLmxlbmd0aDt3aGlsZShnLS0pZD1lW2ddLChkLnNlbGVjdGVkPW4uaW5BcnJheShuLnZhbEhvb2tzLm9wdGlvbi5nZXQoZCksZik+LTEpJiYoYz0hMCk7cmV0dXJuIGN8fChhLnNlbGVjdGVkSW5kZXg9LTEpLGZ9fX19KSxuLmVhY2goW1wicmFkaW9cIixcImNoZWNrYm94XCJdLGZ1bmN0aW9uKCl7bi52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uaXNBcnJheShiKT9hLmNoZWNrZWQ9bi5pbkFycmF5KG4oYSkudmFsKCksYik+LTE6dm9pZCAwfX0sbC5jaGVja09ufHwobi52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PT1hLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpP1wib25cIjphLnZhbHVlfSl9KTt2YXIgaWI9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvO24uZXh0ZW5kKG4uZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oYixjLGUsZil7dmFyIGcsaCxpLGosbCxtLG8scD1bZXx8ZF0scT1rLmNhbGwoYixcInR5cGVcIik/Yi50eXBlOmIscj1rLmNhbGwoYixcIm5hbWVzcGFjZVwiKT9iLm5hbWVzcGFjZS5zcGxpdChcIi5cIik6W107aWYoaD1pPWU9ZXx8ZCwzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJiFpYi50ZXN0KHErbi5ldmVudC50cmlnZ2VyZWQpJiYocS5pbmRleE9mKFwiLlwiKT4tMSYmKHI9cS5zcGxpdChcIi5cIikscT1yLnNoaWZ0KCksci5zb3J0KCkpLGw9cS5pbmRleE9mKFwiOlwiKTwwJiZcIm9uXCIrcSxiPWJbbi5leHBhbmRvXT9iOm5ldyBuLkV2ZW50KHEsXCJvYmplY3RcIj09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWY/MjozLGIubmFtZXNwYWNlPXIuam9pbihcIi5cIiksYi5ybmFtZXNwYWNlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoXCIoXnxcXFxcLilcIityLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKTpudWxsLGIucmVzdWx0PXZvaWQgMCxiLnRhcmdldHx8KGIudGFyZ2V0PWUpLGM9bnVsbD09Yz9bYl06bi5tYWtlQXJyYXkoYyxbYl0pLG89bi5ldmVudC5zcGVjaWFsW3FdfHx7fSxmfHwhby50cmlnZ2VyfHxvLnRyaWdnZXIuYXBwbHkoZSxjKSE9PSExKSl7aWYoIWYmJiFvLm5vQnViYmxlJiYhbi5pc1dpbmRvdyhlKSl7Zm9yKGo9by5kZWxlZ2F0ZVR5cGV8fHEsaWIudGVzdChqK3EpfHwoaD1oLnBhcmVudE5vZGUpO2g7aD1oLnBhcmVudE5vZGUpcC5wdXNoKGgpLGk9aDtpPT09KGUub3duZXJEb2N1bWVudHx8ZCkmJnAucHVzaChpLmRlZmF1bHRWaWV3fHxpLnBhcmVudFdpbmRvd3x8YSl9Zz0wO3doaWxlKChoPXBbZysrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPWc+MT9qOm8uYmluZFR5cGV8fHEsbT0oTi5nZXQoaCxcImV2ZW50c1wiKXx8e30pW2IudHlwZV0mJk4uZ2V0KGgsXCJoYW5kbGVcIiksbSYmbS5hcHBseShoLGMpLG09bCYmaFtsXSxtJiZtLmFwcGx5JiZMKGgpJiYoYi5yZXN1bHQ9bS5hcHBseShoLGMpLGIucmVzdWx0PT09ITEmJmIucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGIudHlwZT1xLGZ8fGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fG8uX2RlZmF1bHQmJm8uX2RlZmF1bHQuYXBwbHkocC5wb3AoKSxjKSE9PSExfHwhTChlKXx8bCYmbi5pc0Z1bmN0aW9uKGVbcV0pJiYhbi5pc1dpbmRvdyhlKSYmKGk9ZVtsXSxpJiYoZVtsXT1udWxsKSxuLmV2ZW50LnRyaWdnZXJlZD1xLGVbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaSYmKGVbbF09aSkpLGIucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW4uZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMH0pO24uZXZlbnQudHJpZ2dlcihkLG51bGwsYil9fSksbi5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSksbi5lYWNoKFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudVwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbihhLGIpe24uZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24oYixudWxsLGEsYyk6dGhpcy50cmlnZ2VyKGIpfX0pLG4uZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX19KSxsLmZvY3VzaW49XCJvbmZvY3VzaW5cImluIGEsbC5mb2N1c2lufHxuLmVhY2goe2ZvY3VzOlwiZm9jdXNpblwiLGJsdXI6XCJmb2N1c291dFwifSxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGEpe24uZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxuLmV2ZW50LmZpeChhKSl9O24uZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1OLmFjY2VzcyhkLGIpO2V8fGQuYWRkRXZlbnRMaXN0ZW5lcihhLGMsITApLE4uYWNjZXNzKGQsYiwoZXx8MCkrMSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLGU9Ti5hY2Nlc3MoZCxiKS0xO2U/Ti5hY2Nlc3MoZCxiLGUpOihkLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCEwKSxOLnJlbW92ZShkLGIpKX19fSk7dmFyIGpiPWEubG9jYXRpb24sa2I9bi5ub3coKSxsYj0vXFw/LztuLnBhcnNlSlNPTj1mdW5jdGlvbihhKXtyZXR1cm4gSlNPTi5wYXJzZShhK1wiXCIpfSxuLnBhcnNlWE1MPWZ1bmN0aW9uKGIpe3ZhciBjO2lmKCFifHxcInN0cmluZ1wiIT10eXBlb2YgYilyZXR1cm4gbnVsbDt0cnl7Yz0obmV3IGEuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYixcInRleHQveG1sXCIpfWNhdGNoKGQpe2M9dm9pZCAwfXJldHVybiBjJiYhYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpLmxlbmd0aHx8bi5lcnJvcihcIkludmFsaWQgWE1MOiBcIitiKSxjfTt2YXIgbWI9LyMuKiQvLG5iPS8oWz8mXSlfPVteJl0qLyxvYj0vXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL2dtLHBiPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLHFiPS9eKD86R0VUfEhFQUQpJC8scmI9L15cXC9cXC8vLHNiPXt9LHRiPXt9LHViPVwiKi9cIi5jb25jYXQoXCIqXCIpLHZiPWQuY3JlYXRlRWxlbWVudChcImFcIik7dmIuaHJlZj1qYi5ocmVmO2Z1bmN0aW9uIHdiKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe1wic3RyaW5nXCIhPXR5cGVvZiBiJiYoYz1iLGI9XCIqXCIpO3ZhciBkLGU9MCxmPWIudG9Mb3dlckNhc2UoKS5tYXRjaChHKXx8W107aWYobi5pc0Z1bmN0aW9uKGMpKXdoaWxlKGQ9ZltlKytdKVwiK1wiPT09ZFswXT8oZD1kLnNsaWNlKDEpfHxcIipcIiwoYVtkXT1hW2RdfHxbXSkudW5zaGlmdChjKSk6KGFbZF09YVtkXXx8W10pLnB1c2goYyl9fWZ1bmN0aW9uIHhiKGEsYixjLGQpe3ZhciBlPXt9LGY9YT09PXRiO2Z1bmN0aW9uIGcoaCl7dmFyIGk7cmV0dXJuIGVbaF09ITAsbi5lYWNoKGFbaF18fFtdLGZ1bmN0aW9uKGEsaCl7dmFyIGo9aChiLGMsZCk7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlW1wiKlwiXSYmZyhcIipcIil9ZnVuY3Rpb24geWIoYSxiKXt2YXIgYyxkLGU9bi5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihjIGluIGIpdm9pZCAwIT09YltjXSYmKChlW2NdP2E6ZHx8KGQ9e30pKVtjXT1iW2NdKTtyZXR1cm4gZCYmbi5leHRlbmQoITAsYSxkKSxhfWZ1bmN0aW9uIHpiKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuY29udGVudHMsaT1hLmRhdGFUeXBlczt3aGlsZShcIipcIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWQmJihkPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIikpO2lmKGQpZm9yKGUgaW4gaClpZihoW2VdJiZoW2VdLnRlc3QoZCkpe2kudW5zaGlmdChlKTticmVha31pZihpWzBdaW4gYylmPWlbMF07ZWxzZXtmb3IoZSBpbiBjKXtpZighaVswXXx8YS5jb252ZXJ0ZXJzW2UrXCIgXCIraVswXV0pe2Y9ZTticmVha31nfHwoZz1lKX1mPWZ8fGd9cmV0dXJuIGY/KGYhPT1pWzBdJiZpLnVuc2hpZnQoZiksY1tmXSk6dm9pZCAwfWZ1bmN0aW9uIEFiKGEsYixjLGQpe3ZhciBlLGYsZyxoLGksaj17fSxrPWEuZGF0YVR5cGVzLnNsaWNlKCk7aWYoa1sxXSlmb3IoZyBpbiBhLmNvbnZlcnRlcnMpaltnLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1tnXTtmPWsuc2hpZnQoKTt3aGlsZShmKWlmKGEucmVzcG9uc2VGaWVsZHNbZl0mJihjW2EucmVzcG9uc2VGaWVsZHNbZl1dPWIpLCFpJiZkJiZhLmRhdGFGaWx0ZXImJihiPWEuZGF0YUZpbHRlcihiLGEuZGF0YVR5cGUpKSxpPWYsZj1rLnNoaWZ0KCkpaWYoXCIqXCI9PT1mKWY9aTtlbHNlIGlmKFwiKlwiIT09aSYmaSE9PWYpe2lmKGc9altpK1wiIFwiK2ZdfHxqW1wiKiBcIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdChcIiBcIiksaFsxXT09PWYmJihnPWpbaStcIiBcIitoWzBdXXx8altcIiogXCIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhW1widGhyb3dzXCJdKWI9ZyhiKTtlbHNlIHRyeXtiPWcoYil9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOlwicGFyc2VyZXJyb3JcIixlcnJvcjpnP2w6XCJObyBjb252ZXJzaW9uIGZyb20gXCIraStcIiB0byBcIitmfX19cmV0dXJue3N0YXRlOlwic3VjY2Vzc1wiLGRhdGE6Yn19bi5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOmpiLmhyZWYsdHlwZTpcIkdFVFwiLGlzTG9jYWw6cGIudGVzdChqYi5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOlwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsYWNjZXB0czp7XCIqXCI6dWIsdGV4dDpcInRleHQvcGxhaW5cIixodG1sOlwidGV4dC9odG1sXCIseG1sOlwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLGpzb246XCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIn0sY29udGVudHM6e3htbDovXFxieG1sXFxiLyxodG1sOi9cXGJodG1sLyxqc29uOi9cXGJqc29uXFxiL30scmVzcG9uc2VGaWVsZHM6e3htbDpcInJlc3BvbnNlWE1MXCIsdGV4dDpcInJlc3BvbnNlVGV4dFwiLGpzb246XCJyZXNwb25zZUpTT05cIn0sY29udmVydGVyczp7XCIqIHRleHRcIjpTdHJpbmcsXCJ0ZXh0IGh0bWxcIjohMCxcInRleHQganNvblwiOm4ucGFyc2VKU09OLFwidGV4dCB4bWxcIjpuLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj95Yih5YihhLG4uYWpheFNldHRpbmdzKSxiKTp5YihuLmFqYXhTZXR0aW5ncyxhKX0sYWpheFByZWZpbHRlcjp3YihzYiksYWpheFRyYW5zcG9ydDp3Yih0YiksYWpheDpmdW5jdGlvbihiLGMpe1wib2JqZWN0XCI9PXR5cGVvZiBiJiYoYz1iLGI9dm9pZCAwKSxjPWN8fHt9O3ZhciBlLGYsZyxoLGksaixrLGwsbT1uLmFqYXhTZXR1cCh7fSxjKSxvPW0uY29udGV4dHx8bSxwPW0uY29udGV4dCYmKG8ubm9kZVR5cGV8fG8uanF1ZXJ5KT9uKG8pOm4uZXZlbnQscT1uLkRlZmVycmVkKCkscj1uLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLHM9bS5zdGF0dXNDb2RlfHx7fSx0PXt9LHU9e30sdj0wLHc9XCJjYW5jZWxlZFwiLHg9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYjtpZigyPT09dil7aWYoIWgpe2g9e307d2hpbGUoYj1vYi5leGVjKGcpKWhbYlsxXS50b0xvd2VyQ2FzZSgpXT1iWzJdfWI9aFthLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1iP251bGw6Yn0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIDI9PT12P2c6bnVsbH0sc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTtyZXR1cm4gdnx8KGE9dVtjXT11W2NdfHxhLHRbYV09YiksdGhpc30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdnx8KG0ubWltZVR5cGU9YSksdGhpc30sc3RhdHVzQ29kZTpmdW5jdGlvbihhKXt2YXIgYjtpZihhKWlmKDI+dilmb3IoYiBpbiBhKXNbYl09W3NbYl0sYVtiXV07ZWxzZSB4LmFsd2F5cyhhW3guc3RhdHVzXSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe3ZhciBiPWF8fHc7cmV0dXJuIGUmJmUuYWJvcnQoYikseigwLGIpLHRoaXN9fTtpZihxLnByb21pc2UoeCkuY29tcGxldGU9ci5hZGQseC5zdWNjZXNzPXguZG9uZSx4LmVycm9yPXguZmFpbCxtLnVybD0oKGJ8fG0udXJsfHxqYi5ocmVmKStcIlwiKS5yZXBsYWNlKG1iLFwiXCIpLnJlcGxhY2UocmIsamIucHJvdG9jb2wrXCIvL1wiKSxtLnR5cGU9Yy5tZXRob2R8fGMudHlwZXx8bS5tZXRob2R8fG0udHlwZSxtLmRhdGFUeXBlcz1uLnRyaW0obS5kYXRhVHlwZXx8XCIqXCIpLnRvTG93ZXJDYXNlKCkubWF0Y2goRyl8fFtcIlwiXSxudWxsPT1tLmNyb3NzRG9tYWluKXtqPWQuY3JlYXRlRWxlbWVudChcImFcIik7dHJ5e2ouaHJlZj1tLnVybCxqLmhyZWY9ai5ocmVmLG0uY3Jvc3NEb21haW49dmIucHJvdG9jb2wrXCIvL1wiK3ZiLmhvc3QhPWoucHJvdG9jb2wrXCIvL1wiK2ouaG9zdH1jYXRjaCh5KXttLmNyb3NzRG9tYWluPSEwfX1pZihtLmRhdGEmJm0ucHJvY2Vzc0RhdGEmJlwic3RyaW5nXCIhPXR5cGVvZiBtLmRhdGEmJihtLmRhdGE9bi5wYXJhbShtLmRhdGEsbS50cmFkaXRpb25hbCkpLHhiKHNiLG0sYyx4KSwyPT09dilyZXR1cm4geDtrPW4uZXZlbnQmJm0uZ2xvYmFsLGsmJjA9PT1uLmFjdGl2ZSsrJiZuLmV2ZW50LnRyaWdnZXIoXCJhamF4U3RhcnRcIiksbS50eXBlPW0udHlwZS50b1VwcGVyQ2FzZSgpLG0uaGFzQ29udGVudD0hcWIudGVzdChtLnR5cGUpLGY9bS51cmwsbS5oYXNDb250ZW50fHwobS5kYXRhJiYoZj1tLnVybCs9KGxiLnRlc3QoZik/XCImXCI6XCI/XCIpK20uZGF0YSxkZWxldGUgbS5kYXRhKSxtLmNhY2hlPT09ITEmJihtLnVybD1uYi50ZXN0KGYpP2YucmVwbGFjZShuYixcIiQxXz1cIitrYisrKTpmKyhsYi50ZXN0KGYpP1wiJlwiOlwiP1wiKStcIl89XCIra2IrKykpLG0uaWZNb2RpZmllZCYmKG4ubGFzdE1vZGlmaWVkW2ZdJiZ4LnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Nb2RpZmllZC1TaW5jZVwiLG4ubGFzdE1vZGlmaWVkW2ZdKSxuLmV0YWdbZl0mJnguc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIixuLmV0YWdbZl0pKSwobS5kYXRhJiZtLmhhc0NvbnRlbnQmJm0uY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLG0uY29udGVudFR5cGUpLHguc2V0UmVxdWVzdEhlYWRlcihcIkFjY2VwdFwiLG0uZGF0YVR5cGVzWzBdJiZtLmFjY2VwdHNbbS5kYXRhVHlwZXNbMF1dP20uYWNjZXB0c1ttLmRhdGFUeXBlc1swXV0rKFwiKlwiIT09bS5kYXRhVHlwZXNbMF0/XCIsIFwiK3ViK1wiOyBxPTAuMDFcIjpcIlwiKTptLmFjY2VwdHNbXCIqXCJdKTtmb3IobCBpbiBtLmhlYWRlcnMpeC5zZXRSZXF1ZXN0SGVhZGVyKGwsbS5oZWFkZXJzW2xdKTtpZihtLmJlZm9yZVNlbmQmJihtLmJlZm9yZVNlbmQuY2FsbChvLHgsbSk9PT0hMXx8Mj09PXYpKXJldHVybiB4LmFib3J0KCk7dz1cImFib3J0XCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0peFtsXShtW2xdKTtpZihlPXhiKHRiLG0sYyx4KSl7aWYoeC5yZWFkeVN0YXRlPTEsayYmcC50cmlnZ2VyKFwiYWpheFNlbmRcIixbeCxtXSksMj09PXYpcmV0dXJuIHg7bS5hc3luYyYmbS50aW1lb3V0PjAmJihpPWEuc2V0VGltZW91dChmdW5jdGlvbigpe3guYWJvcnQoXCJ0aW1lb3V0XCIpfSxtLnRpbWVvdXQpKTt0cnl7dj0xLGUuc2VuZCh0LHopfWNhdGNoKHkpe2lmKCEoMj52KSl0aHJvdyB5O3ooLTEseSl9fWVsc2UgeigtMSxcIk5vIFRyYW5zcG9ydFwiKTtmdW5jdGlvbiB6KGIsYyxkLGgpe3ZhciBqLGwsdCx1LHcseT1jOzIhPT12JiYodj0yLGkmJmEuY2xlYXJUaW1lb3V0KGkpLGU9dm9pZCAwLGc9aHx8XCJcIix4LnJlYWR5U3RhdGU9Yj4wPzQ6MCxqPWI+PTIwMCYmMzAwPmJ8fDMwND09PWIsZCYmKHU9emIobSx4LGQpKSx1PUFiKG0sdSx4LGopLGo/KG0uaWZNb2RpZmllZCYmKHc9eC5nZXRSZXNwb25zZUhlYWRlcihcIkxhc3QtTW9kaWZpZWRcIiksdyYmKG4ubGFzdE1vZGlmaWVkW2ZdPXcpLHc9eC5nZXRSZXNwb25zZUhlYWRlcihcImV0YWdcIiksdyYmKG4uZXRhZ1tmXT13KSksMjA0PT09Ynx8XCJIRUFEXCI9PT1tLnR5cGU/eT1cIm5vY29udGVudFwiOjMwND09PWI/eT1cIm5vdG1vZGlmaWVkXCI6KHk9dS5zdGF0ZSxsPXUuZGF0YSx0PXUuZXJyb3Isaj0hdCkpOih0PXksIWImJnl8fCh5PVwiZXJyb3JcIiwwPmImJihiPTApKSkseC5zdGF0dXM9Yix4LnN0YXR1c1RleHQ9KGN8fHkpK1wiXCIsaj9xLnJlc29sdmVXaXRoKG8sW2wseSx4XSk6cS5yZWplY3RXaXRoKG8sW3gseSx0XSkseC5zdGF0dXNDb2RlKHMpLHM9dm9pZCAwLGsmJnAudHJpZ2dlcihqP1wiYWpheFN1Y2Nlc3NcIjpcImFqYXhFcnJvclwiLFt4LG0saj9sOnRdKSxyLmZpcmVXaXRoKG8sW3gseV0pLGsmJihwLnRyaWdnZXIoXCJhamF4Q29tcGxldGVcIixbeCxtXSksLS1uLmFjdGl2ZXx8bi5ldmVudC50cmlnZ2VyKFwiYWpheFN0b3BcIikpKX1yZXR1cm4geH0sZ2V0SlNPTjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZ2V0KGEsYixjLFwianNvblwiKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsXCJzY3JpcHRcIil9fSksbi5lYWNoKFtcImdldFwiLFwicG9zdFwiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheChuLmV4dGVuZCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0sbi5pc1BsYWluT2JqZWN0KGEpJiZhKSl9fSksbi5fZXZhbFVybD1mdW5jdGlvbihhKXtyZXR1cm4gbi5hamF4KHt1cmw6YSx0eXBlOlwiR0VUXCIsZGF0YVR5cGU6XCJzY3JpcHRcIixhc3luYzohMSxnbG9iYWw6ITEsXCJ0aHJvd3NcIjohMH0pfSxuLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gbi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk6KHRoaXNbMF0mJihiPW4oYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0RWxlbWVudENoaWxkKWE9YS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtyZXR1cm4gbi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1uKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3ZhciBiPW4uaXNGdW5jdGlvbihhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe24odGhpcykud3JhcEFsbChiP2EuY2FsbCh0aGlzLGMpOmEpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtuLm5vZGVOYW1lKHRoaXMsXCJib2R5XCIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KSxuLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJuIW4uZXhwci5maWx0ZXJzLnZpc2libGUoYSl9LG4uZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGg+MHx8YS5vZmZzZXRIZWlnaHQ+MHx8YS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD4wfTt2YXIgQmI9LyUyMC9nLENiPS9cXFtcXF0kLyxEYj0vXFxyP1xcbi9nLEViPS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxGYj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24gR2IoYSxiLGMsZCl7dmFyIGU7aWYobi5pc0FycmF5KGIpKW4uZWFjaChiLGZ1bmN0aW9uKGIsZSl7Y3x8Q2IudGVzdChhKT9kKGEsZSk6R2IoYStcIltcIisoXCJvYmplY3RcIj09dHlwZW9mIGUmJm51bGwhPWU/YjpcIlwiKStcIl1cIixlLGMsZCl9KTtlbHNlIGlmKGN8fFwib2JqZWN0XCIhPT1uLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilHYihhK1wiW1wiK2UrXCJdXCIsYltlXSxjLGQpfW4ucGFyYW09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9ZnVuY3Rpb24oYSxiKXtiPW4uaXNGdW5jdGlvbihiKT9iKCk6bnVsbD09Yj9cIlwiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChiKX07aWYodm9pZCAwPT09YiYmKGI9bi5hamF4U2V0dGluZ3MmJm4uYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxuLmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYhbi5pc1BsYWluT2JqZWN0KGEpKW4uZWFjaChhLGZ1bmN0aW9uKCl7ZSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihjIGluIGEpR2IoYyxhW2NdLGIsZSk7cmV0dXJuIGQuam9pbihcIiZcIikucmVwbGFjZShCYixcIitcIil9LG4uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW4ucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIGE/bi5tYWtlQXJyYXkoYSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBhPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhbih0aGlzKS5pcyhcIjpkaXNhYmxlZFwiKSYmRmIudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUViLnRlc3QoYSkmJih0aGlzLmNoZWNrZWR8fCFYLnRlc3QoYSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9bih0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09Yz9udWxsOm4uaXNBcnJheShjKT9uLm1hcChjLGZ1bmN0aW9uKGEpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoRGIsXCJcXHJcXG5cIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShEYixcIlxcclxcblwiKX19KS5nZXQoKX19KSxuLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319O3ZhciBIYj17MDoyMDAsMTIyMzoyMDR9LEliPW4uYWpheFNldHRpbmdzLnhocigpO2wuY29ycz0hIUliJiZcIndpdGhDcmVkZW50aWFsc1wiaW4gSWIsbC5hamF4PUliPSEhSWIsbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGIpe3ZhciBjLGQ7cmV0dXJuIGwuY29yc3x8SWImJiFiLmNyb3NzRG9tYWluP3tzZW5kOmZ1bmN0aW9uKGUsZil7dmFyIGcsaD1iLnhocigpO2lmKGgub3BlbihiLnR5cGUsYi51cmwsYi5hc3luYyxiLnVzZXJuYW1lLGIucGFzc3dvcmQpLGIueGhyRmllbGRzKWZvcihnIGluIGIueGhyRmllbGRzKWhbZ109Yi54aHJGaWVsZHNbZ107Yi5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYi5taW1lVHlwZSksYi5jcm9zc0RvbWFpbnx8ZVtcIlgtUmVxdWVzdGVkLVdpdGhcIl18fChlW1wiWC1SZXF1ZXN0ZWQtV2l0aFwiXT1cIlhNTEh0dHBSZXF1ZXN0XCIpO2ZvcihnIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGcsZVtnXSk7Yz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oKXtjJiYoYz1kPWgub25sb2FkPWgub25lcnJvcj1oLm9uYWJvcnQ9aC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxcImFib3J0XCI9PT1hP2guYWJvcnQoKTpcImVycm9yXCI9PT1hP1wibnVtYmVyXCIhPXR5cGVvZiBoLnN0YXR1cz9mKDAsXCJlcnJvclwiKTpmKGguc3RhdHVzLGguc3RhdHVzVGV4dCk6ZihIYltoLnN0YXR1c118fGguc3RhdHVzLGguc3RhdHVzVGV4dCxcInRleHRcIiE9PShoLnJlc3BvbnNlVHlwZXx8XCJ0ZXh0XCIpfHxcInN0cmluZ1wiIT10eXBlb2YgaC5yZXNwb25zZVRleHQ/e2JpbmFyeTpoLnJlc3BvbnNlfTp7dGV4dDpoLnJlc3BvbnNlVGV4dH0saC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0saC5vbmxvYWQ9YygpLGQ9aC5vbmVycm9yPWMoXCJlcnJvclwiKSx2b2lkIDAhPT1oLm9uYWJvcnQ/aC5vbmFib3J0PWQ6aC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09aC5yZWFkeVN0YXRlJiZhLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjJiZkKCl9KX0sYz1jKFwiYWJvcnRcIik7dHJ5e2guc2VuZChiLmhhc0NvbnRlbnQmJmIuZGF0YXx8bnVsbCl9Y2F0Y2goaSl7aWYoYyl0aHJvdyBpfX0sYWJvcnQ6ZnVuY3Rpb24oKXtjJiZjKCl9fTp2b2lkIDB9KSxuLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OlwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIn0sY29udGVudHM6e3NjcmlwdDovXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi99LGNvbnZlcnRlcnM6e1widGV4dCBzY3JpcHRcIjpmdW5jdGlvbihhKXtyZXR1cm4gbi5nbG9iYWxFdmFsKGEpLGF9fX0pLG4uYWpheFByZWZpbHRlcihcInNjcmlwdFwiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPVwiR0VUXCIpfSksbi5hamF4VHJhbnNwb3J0KFwic2NyaXB0XCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGIsYztyZXR1cm57c2VuZDpmdW5jdGlvbihlLGYpe2I9bihcIjxzY3JpcHQ+XCIpLnByb3Aoe2NoYXJzZXQ6YS5zY3JpcHRDaGFyc2V0LHNyYzphLnVybH0pLm9uKFwibG9hZCBlcnJvclwiLGM9ZnVuY3Rpb24oYSl7Yi5yZW1vdmUoKSxjPW51bGwsYSYmZihcImVycm9yXCI9PT1hLnR5cGU/NDA0OjIwMCxhLnR5cGUpfSksZC5oZWFkLmFwcGVuZENoaWxkKGJbMF0pfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoKX19fX0pO3ZhciBKYj1bXSxLYj0vKD0pXFw/KD89JnwkKXxcXD9cXD8vO24uYWpheFNldHVwKHtqc29ucDpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPUpiLnBvcCgpfHxuLmV4cGFuZG8rXCJfXCIra2IrKztyZXR1cm4gdGhpc1thXT0hMCxhfX0pLG4uYWpheFByZWZpbHRlcihcImpzb24ganNvbnBcIixmdW5jdGlvbihiLGMsZCl7dmFyIGUsZixnLGg9Yi5qc29ucCE9PSExJiYoS2IudGVzdChiLnVybCk/XCJ1cmxcIjpcInN0cmluZ1wiPT10eXBlb2YgYi5kYXRhJiYwPT09KGIuY29udGVudFR5cGV8fFwiXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikmJktiLnRlc3QoYi5kYXRhKSYmXCJkYXRhXCIpO3JldHVybiBofHxcImpzb25wXCI9PT1iLmRhdGFUeXBlc1swXT8oZT1iLmpzb25wQ2FsbGJhY2s9bi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGg/YltoXT1iW2hdLnJlcGxhY2UoS2IsXCIkMVwiK2UpOmIuanNvbnAhPT0hMSYmKGIudXJsKz0obGIudGVzdChiLnVybCk/XCImXCI6XCI/XCIpK2IuanNvbnArXCI9XCIrZSksYi5jb252ZXJ0ZXJzW1wic2NyaXB0IGpzb25cIl09ZnVuY3Rpb24oKXtyZXR1cm4gZ3x8bi5lcnJvcihlK1wiIHdhcyBub3QgY2FsbGVkXCIpLGdbMF19LGIuZGF0YVR5cGVzWzBdPVwianNvblwiLGY9YVtlXSxhW2VdPWZ1bmN0aW9uKCl7Zz1hcmd1bWVudHN9LGQuYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09Zj9uKGEpLnJlbW92ZVByb3AoZSk6YVtlXT1mLGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxiYWNrLEpiLnB1c2goZSkpLGcmJm4uaXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSksXCJzY3JpcHRcIik6dm9pZCAwfSksbi5wYXJzZUhUTUw9ZnVuY3Rpb24oYSxiLGMpe2lmKCFhfHxcInN0cmluZ1wiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtcImJvb2xlYW5cIj09dHlwZW9mIGImJihjPWIsYj0hMSksYj1ifHxkO3ZhciBlPXguZXhlYyhhKSxmPSFjJiZbXTtyZXR1cm4gZT9bYi5jcmVhdGVFbGVtZW50KGVbMV0pXTooZT1jYShbYV0sYixmKSxmJiZmLmxlbmd0aCYmbihmKS5yZW1vdmUoKSxuLm1lcmdlKFtdLGUuY2hpbGROb2RlcykpfTt2YXIgTGI9bi5mbi5sb2FkO24uZm4ubG9hZD1mdW5jdGlvbihhLGIsYyl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEmJkxiKXJldHVybiBMYi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGQsZSxmLGc9dGhpcyxoPWEuaW5kZXhPZihcIiBcIik7cmV0dXJuIGg+LTEmJihkPW4udHJpbShhLnNsaWNlKGgpKSxhPWEuc2xpY2UoMCxoKSksbi5pc0Z1bmN0aW9uKGIpPyhjPWIsYj12b2lkIDApOmImJlwib2JqZWN0XCI9PXR5cGVvZiBiJiYoZT1cIlBPU1RcIiksZy5sZW5ndGg+MCYmbi5hamF4KHt1cmw6YSx0eXBlOmV8fFwiR0VUXCIsZGF0YVR5cGU6XCJodG1sXCIsZGF0YTpifSkuZG9uZShmdW5jdGlvbihhKXtmPWFyZ3VtZW50cyxnLmh0bWwoZD9uKFwiPGRpdj5cIikuYXBwZW5kKG4ucGFyc2VIVE1MKGEpKS5maW5kKGQpOmEpfSkuYWx3YXlzKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGZ1bmN0aW9uKCl7Yy5hcHBseSh0aGlzLGZ8fFthLnJlc3BvbnNlVGV4dCxiLGFdKX0pfSksdGhpc30sbi5lYWNoKFtcImFqYXhTdGFydFwiLFwiYWpheFN0b3BcIixcImFqYXhDb21wbGV0ZVwiLFwiYWpheEVycm9yXCIsXCJhamF4U3VjY2Vzc1wiLFwiYWpheFNlbmRcIl0sZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07ZnVuY3Rpb24gTWIoYSl7cmV0dXJuIG4uaXNXaW5kb3coYSk/YTo5PT09YS5ub2RlVHlwZSYmYS5kZWZhdWx0Vmlld31uLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZyxoLGksaixrPW4uY3NzKGEsXCJwb3NpdGlvblwiKSxsPW4oYSksbT17fTtcInN0YXRpY1wiPT09ayYmKGEuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxoPWwub2Zmc2V0KCksZj1uLmNzcyhhLFwidG9wXCIpLGk9bi5jc3MoYSxcImxlZnRcIiksaj0oXCJhYnNvbHV0ZVwiPT09a3x8XCJmaXhlZFwiPT09aykmJihmK2kpLmluZGV4T2YoXCJhdXRvXCIpPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxuLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsbi5leHRlbmQoe30saCkpKSxudWxsIT1iLnRvcCYmKG0udG9wPWIudG9wLWgudG9wK2cpLG51bGwhPWIubGVmdCYmKG0ubGVmdD1iLmxlZnQtaC5sZWZ0K2UpLFwidXNpbmdcImluIGI/Yi51c2luZy5jYWxsKGEsbSk6bC5jc3MobSl9fSxuLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWE/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7bi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBiLGMsZD10aGlzWzBdLGU9e3RvcDowLGxlZnQ6MH0sZj1kJiZkLm93bmVyRG9jdW1lbnQ7aWYoZilyZXR1cm4gYj1mLmRvY3VtZW50RWxlbWVudCxuLmNvbnRhaW5zKGIsZCk/KGU9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPU1iKGYpLHt0b3A6ZS50b3ArYy5wYWdlWU9mZnNldC1iLmNsaWVudFRvcCxsZWZ0OmUubGVmdCtjLnBhZ2VYT2Zmc2V0LWIuY2xpZW50TGVmdH0pOmV9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGEsYixjPXRoaXNbMF0sZD17dG9wOjAsbGVmdDowfTtyZXR1cm5cImZpeGVkXCI9PT1uLmNzcyhjLFwicG9zaXRpb25cIik/Yj1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihhPXRoaXMub2Zmc2V0UGFyZW50KCksYj10aGlzLm9mZnNldCgpLG4ubm9kZU5hbWUoYVswXSxcImh0bWxcIil8fChkPWEub2Zmc2V0KCkpLGQudG9wKz1uLmNzcyhhWzBdLFwiYm9yZGVyVG9wV2lkdGhcIiwhMCksZC5sZWZ0Kz1uLmNzcyhhWzBdLFwiYm9yZGVyTGVmdFdpZHRoXCIsITApKSx7dG9wOmIudG9wLWQudG9wLW4uY3NzKGMsXCJtYXJnaW5Ub3BcIiwhMCksbGVmdDpiLmxlZnQtZC5sZWZ0LW4uY3NzKGMsXCJtYXJnaW5MZWZ0XCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGEmJlwic3RhdGljXCI9PT1uLmNzcyhhLFwicG9zaXRpb25cIikpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8RWF9KX19KSxuLmVhY2goe3Njcm9sbExlZnQ6XCJwYWdlWE9mZnNldFwiLHNjcm9sbFRvcDpcInBhZ2VZT2Zmc2V0XCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9XCJwYWdlWU9mZnNldFwiPT09YjtuLmZuW2FdPWZ1bmN0aW9uKGQpe3JldHVybiBLKHRoaXMsZnVuY3Rpb24oYSxkLGUpe3ZhciBmPU1iKGEpO3JldHVybiB2b2lkIDA9PT1lP2Y/ZltiXTphW2RdOnZvaWQoZj9mLnNjcm9sbFRvKGM/Zi5wYWdlWE9mZnNldDplLGM/ZTpmLnBhZ2VZT2Zmc2V0KTphW2RdPWUpfSxhLGQsYXJndW1lbnRzLmxlbmd0aCl9fSksbi5lYWNoKFtcInRvcFwiLFwibGVmdFwiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09R2EobC5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9RmEoYSxiKSxCYS50ZXN0KGMpP24oYSkucG9zaXRpb24oKVtiXStcInB4XCI6Yyk6dm9pZCAwfSl9KSxuLmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24oYSxiKXtuLmVhY2goe3BhZGRpbmc6XCJpbm5lclwiK2EsY29udGVudDpiLFwiXCI6XCJvdXRlclwiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHxcImJvb2xlYW5cIiE9dHlwZW9mIGQpLGc9Y3x8KGQ9PT0hMHx8ZT09PSEwP1wibWFyZ2luXCI6XCJib3JkZXJcIik7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbXCJjbGllbnRcIithXTo5PT09Yi5ub2RlVHlwZT8oZT1iLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChiLmJvZHlbXCJzY3JvbGxcIithXSxlW1wic2Nyb2xsXCIrYV0sYi5ib2R5W1wib2Zmc2V0XCIrYV0sZVtcIm9mZnNldFwiK2FdLGVbXCJjbGllbnRcIithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsXCIqKlwiKTp0aGlzLm9mZihiLGF8fFwiKipcIixjKX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH19KSxuLmZuLmFuZFNlbGY9bi5mbi5hZGRCYWNrLFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKFwianF1ZXJ5XCIsW10sZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBOYj1hLmpRdWVyeSxPYj1hLiQ7cmV0dXJuIG4ubm9Db25mbGljdD1mdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09biYmKGEuJD1PYiksYiYmYS5qUXVlcnk9PT1uJiYoYS5qUXVlcnk9TmIpLG59LGJ8fChhLmpRdWVyeT1hLiQ9biksbn0pO1xuIn0sICJoZWFkZXJzU2l6ZSI6IDI3MSwgImJvZHlTaXplIjogODU1NzgsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDg1ODQ5fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAtMSwgImNvbm5lY3QiOiAtMSwgInNzbCI6IC0xLCAic2VuZCI6IDAsICJ3YWl0IjogMTIuMDk2LCAicmVjZWl2ZSI6IDE2LjEzNH0sICJwYWdlcmVmIjogInBhZ2VANmNkOGY3OWRmMmE4YWIwMGJkYWEwZGQ0OWQ3YjhkZmUiLCAic2VydmVySVBBZGRyZXNzIjogIlsyMDAxOjhkODoxMDBmOmYwMDA6OjJkM10iLCAiX3NlcnZlclBvcnQiOiA4MCwgIl9zZWN1cml0eURldGFpbHMiOiB7fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTIuMzYwWiIsICJ0aW1lIjogNDYuMDQ0LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS9Nb2JpbGUlMjBMb2dpbl9maWxlcy9iYXNlLXZlci1DRDM1OTUwQjI0QUNBQ0RBNkY1RDMzOEJERDc0QkY1Ni5jc3MiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQWNjZXB0IiwgInZhbHVlIjogInRleHQvY3NzLCovKjtxPTAuMSJ9LCB7Im5hbWUiOiAiQWNjZXB0LUVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiSG9zdCIsICJ2YWx1ZSI6ICJqb3JhbWVkaWEuZGUifSwgeyJuYW1lIjogIlJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS9pbmRleDIuaHRtbCJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogMzU3LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2VwdC1SYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiQ29udGVudC1MZW5ndGgiLCAidmFsdWUiOiAiNjc1NDAifSwgeyJuYW1lIjogIkNvbnRlbnQtVHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L2NzcyJ9LCB7Im5hbWUiOiAiRGF0ZSIsICJ2YWx1ZSI6ICJGcmksIDI2IE1heSAyMDIzIDA1OjEwOjEyIEdNVCJ9LCB7Im5hbWUiOiAiRVRhZyIsICJ2YWx1ZSI6ICJcIjEwN2Q0LTU5OGU2Y2Q2ZTIxMDBcIiJ9LCB7Im5hbWUiOiAiS2VlcC1BbGl2ZSIsICJ2YWx1ZSI6ICJ0aW1lb3V0PTE1In0sIHsibmFtZSI6ICJMYXN0LU1vZGlmaWVkIiwgInZhbHVlIjogIldlZCwgMDQgRGVjIDIwMTkgMjA6Mzk6MDAgR01UIn0sIHsibmFtZSI6ICJTZXJ2ZXIiLCAidmFsdWUiOiAiQXBhY2hlIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDY3NTQwLCAibWltZVR5cGUiOiAidGV4dC9jc3MiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJodG1sLCBib2R5IHtcbiAgICBoZWlnaHQ6IDEwMCU7XG59XG5ib2R5IHtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG59XG5odG1sIHtcbiAgICBiYWNrZ3JvdW5kOiAjRjNGM0YzO1xuICAgIGNvbG9yOiAjMjYyNjI2O1xuICAgIGZvbnQ6IDQwMCAxM3B4LzIwcHggVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBkaXJlY3Rpb246IGx0cjtcbn1cbmJvZHksIGJvZHkgKiB7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgZm9udC1zaXplOiAxZW07XG4gICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cbmh0bWwsYm9keSx1bCxvbCxsaSxkbCxkZCxkdCxmb3JtLGgxLGgyLGgzLGg0LGg1LGg2LHAsZmllbGRzZXQge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xufVxuaFxcOmhncm91cCxoXFw6aGVhZGVyLGhcXDpuYXYsaFxcOmFydGljbGUsaFxcOnNlY3Rpb24saFxcOmFzaWRlLGhcXDpmb290ZXIsaFxcOmRldGFpbHMsaFxcOm91dHB1dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5hIHtcbiAgICBjb2xvcjogIzIyNjlDMztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuYTpob3ZlciB7XG4gICAgY29sb3I6ICMyMjY5QzM7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5hOnZpc2l0ZWQge1xuICAgIGNvbG9yOiAjNjQ5NkQ1O1xufVxuYTphY3RpdmUge1xuICAgIGNvbG9yOiAjNjQ5NkQ1O1xufVxudWwgbGkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcbn1cbmltZyB7XG4gICAgYm9yZGVyOiBub25lO1xufVxuYSBpbWcge1xuICAgIGJvcmRlcjogMCBub25lO1xufVxuZm9ybSB7XG4gICAgZGlzcGxheTogaW5saW5lO1xufVxuZmllbGRzZXQge1xuICAgIGJvcmRlcjogMCBzb2xpZDtcbn1cbmxlZ2VuZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBjb2xvcjogIzI2MjYyNjtcbn1cbnNlbGVjdCxvcHRpb24ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkY7XG59XG50YWJsZSB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICBlbXB0eS1jZWxsczogc2hvdztcbn1cbnRkLFxudGgge1xuICAgIHBhZGRpbmc6IDA7XG59XG5pZnJhbWUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlcjogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cbm9iamVjdCxcbmE6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG4uY2VudGVyZWQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiogaHRtbCBzY3JpcHQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxlZnQ6IC02MDAwcHg7XG4gICAgaGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAwO1xufVxuLmhyIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGNsZWFyOiBib3RoO1xufVxuLmhyIGhyIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuLnNraXAgKiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbi5zdGF0aXN0aWNzIHtcbiAgICBsZWZ0OiAtNjAwMHB4O1xuICAgIGhlaWdodDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMDtcbn1cbiNwYWdlLWhlYWRlciB7XG4gICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICNGRkM4MDA7XG4gICAgaGVpZ2h0OiA5MnB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuYm9keS5zaXRlLWdteCAjcGFnZS1oZWFkZXIge1xuICAgIGJhY2tncm91bmQ6ICMxQzQ0OUI7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDtcbn1cblxuI3BhZ2UtaGVhZGVyLmhlYWRlci1zaW1wbGUge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQzBDOUNFO1xuICAgIG1hcmdpbi1ib3R0b206IDE3cHg7XG59XG5cbiNoZWFkZXItYnJhbmQge1xuICAgIGJhY2tncm91bmQ6ICB1cmwoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSDBBQUFCR0NBTUFBQURXNDJ0NUFBQUFCR2RCVFVFQUFMR1BDL3hoQlFBQUFBRnpVa2RDQUs3T0hPa0FBQU44YVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4UDNod1lXTnJaWFFnWW1WbmFXNDlJdSs3dnlJZ2FXUTlJbGMxVFRCTmNFTmxhR2xJZW5KbFUzcE9WR042YTJNNVpDSS9QaUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pCWkc5aVpTQllUVkFnUTI5eVpTQTFMall0WXpFME1pQTNPUzR4TmpBNU1qUXNJREl3TVRjdk1EY3ZNVE10TURFNk1EWTZNemtnSUNBZ0lDQWdJQ0krSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0lEeHlaR1k2UkdWelkzSnBjSFJwYjI0Z2NtUm1PbUZpYjNWMFBTSWlJSGh0Ykc1ek9uaHRjRTFOUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmJXMHZJaUI0Yld4dWN6cHpkRkpsWmowaWFIUjBjRG92TDI1ekxtRmtiMkpsTG1OdmJTOTRZWEF2TVM0d0wzTlVlWEJsTDFKbGMyOTFjbU5sVW1WbUl5SWdlRzFzYm5NNmVHMXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2SWlCNGJYQk5UVHBQY21sbmFXNWhiRVJ2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2UmpCRVFUWTVSa1ExTVVNM01URkZNMEZDUmtGQlJrRkJOemc1TkVWRk9FSWlJSGh0Y0UxTk9rUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZNa0k1T0RkRk16ZEdSVUl6TVRGRk56azJPRVJHTlVSRE9UUXlOVU5GUlVVaUlIaHRjRTFOT2tsdWMzUmhibU5sU1VROUluaHRjQzVwYVdRNk1rSTVPRGRGTXpaR1JVSXpNVEZGTnprMk9FUkdOVVJET1RReU5VTkZSVVVpSUhodGNEcERjbVZoZEc5eVZHOXZiRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJRU5UTmlBb1YybHVaRzkzY3lraVBpQThlRzF3VFUwNlJHVnlhWFpsWkVaeWIyMGdjM1JTWldZNmFXNXpkR0Z1WTJWSlJEMGllRzF3TG1scFpEb3dOemt4WldNME1DMWlOemN3TFRsbE5ETXRZakUzTVMweFpEQTRZemd5Tm1VMk5UY2lJSE4wVW1WbU9tUnZZM1Z0Wlc1MFNVUTlJbUZrYjJKbE9tUnZZMmxrT25Cb2IzUnZjMmh2Y0RvMVpUbGhOakJpTkMwNU5HSXpMV05qTkRndE9HUmpPUzAwTlRVMk0yRTNaamswWmpNaUx6NGdQQzl5WkdZNlJHVnpZM0pwY0hScGIyNCtJRHd2Y21SbU9sSkVSajRnUEM5NE9uaHRjRzFsZEdFK0lEdy9lSEJoWTJ0bGRDQmxibVE5SW5JaVB6NTFDTUp6QUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUFxeFFURlJGVEdseC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vVlk1bTJnQUFBT04wVWs1VEFQNkFCQUVRL2ZEZ1FCWUhhd0xQQ2hIMCt3TXg3NURxQy9QWFc5bWM5ZzVnS3VnTkJ2bjhRMExjYm1NSW1hd1Y4b0w0Mk1QUUhNZjZscjlxcEV3dVlramF4czJvWGNsNEhsTG50V3lOd09ueGRENzNJbllsT1JLbHFwN0lxeFF3Tm1Yc2lLNTZQNkdNVUMzS0d2WGhtc1hkNnlsem5lMTliN0VtcHFBWDVHZUJHRFBiVmpybHdTZlVSTDBvb25IZklSOWZrOFRMU29kY1BkNDF1aGs3VHd5NWUyaWJhVlhTdk9aOGNORk56ck5IVVlrOHAxNU9Nbm1TWmh1cGlsUllmbVNSTkRjUHROWmhSWVFrY2gwajFUaUQ3Z1VyVjc3TWk3SzQ0cCt2NHlCVG8xcWhGY3NCQUFBRTAwbEVRVlI0QWUzWDUxZVVSeGdGOEl1c0xOSkJRd0dsZzRnUUVjR0NYV1B2UmFQRzNqWDJFald4OTJLTXNaaW8wWmplZSsrOTk5NUxjditSd0w3dnpQTzg3eTc3TFRrbjUrenZFeHptek95Qis5d1o4TytMaVltSmlZbUo2YlkvKzhIMWVlU1UwclR0V3dmZ3YxUmVjQ3lCMnVCSlJmQVlIelRtd2FNNmFOU2l4YVNnMkFKcldOREtoa2RxMTRNTXN6QWxGU0tRU2VNbGFJR09OSWFqUmZ4c1dsbDc0WnE3Z2NaVlNkQnV2SjRSamQ4RGF5cXRoY2xRMnRFS0l1VHpURnBIek5ydHRGS2dyWkRWUGpzM3duaWU0blVvTjFFa0llUkRpa1VJcWFLVjFoN0t3QVMycXZRVHVFWlFqSUdZVzBFeEdZNnJhU1Y4aVdZMWcybGRDMlZVQXFQb1liTFhqeUpoRmF4TlZMckNNZU9nMmlFZFFIZGExMEU1bnNtb2JvYWprY29JblRsbE9WeWQ0MmhsQXlVVmtTUFgvbkVxY2V2R1RWcFNtMC90STJkZFBaV09LblBhTmhqTDFhYVRBdzJ0Uk80K0twMUdJbVR5VUlvanFhR3hvTWNCeVZ6a1Q1V2NSdXVXRTYxRUxua0NyY0wrTU9JMzAvcmdaQ2dkOU9nRVIxSUZ0YXg0R0NWVEtGcUpYRmRhV1VjaEFtNXFLeGRYQmREaVRYclU1U0prR3IybXcwcWhJcEhUR21oTmc5WjJBc21janorRDZ4cDZQWWNXZ1M3MGVneFdZQXdWaVp4WUpkSE1qNGZIV1BZcUtJZjFCYjJhbkdqVFp4UEVqaHdLaVp6NG05WmI4TXJ0QU9XYkxQcE1SYk5aOUZrTHBUK0ZSRTcwb2JHNkRORjhTNy91QUpKNjArZFE1TzBsY2xvVGpmY1IxWGYwVzVNcW1ST2pvYVhuUjRpY1dFTmppUjIyZHVIbVNsUG1mMDNYVVpXNTcybThCNjFEUlhqa3hHb2FvMnpZR2U1T0xLWnJUalpkTXlWemhlZHB2QU9QaHltMndvZlcrV2ludDROdDg2OUs2SnJTZG83dG5pczBoa0g0QnZWWitOQ2FIKzMwK1RVSmRKM0NHYnJhMkRub2dJVTZqR0lRdGZ2aEpaa2RGTzMwbGZOb1hFWXhYZllUOVFKK29PdFZLT2tYcUczb0JvOGNHZ09qbmQ2dFFMNUVlcEErdDZ2blJDT1VwK20xR0I3eW5xdU5jbm85RnRuY0FqaE5yNXhrNEVmYkd3RllBeXJwVXdEdEx4bzlvcHplaUovb09ndGdKYjF1QTlDWHhrZ1lxYlBwZDhNZUtIMXBtV0t0YWVQb1ErdFhYSkF4YXphRVdzS3RBTTdSNkJ4aGN6RUdTZ210ZnZCYVFhdjRpcjJNZHFQWlFHcmJ2QnVOdFRmWVJFWlFES1VIamJqNThMaFhmbkxwb3ZjUGwxdEg1Y2xRdW1tOGpmQjM3Y1E4R3NHZUVDTm83Y3VBTWpLVHhoMG9wbkV4N1BiWUYvQk96MTBSTHJqcVlzcHVBVmdabWJTR3ErUExtM1RQTHFmaExKbEhjUUlodyswakRpRzVhMmc5R3ErdjRnVVF1eW5XTDRWcitobGFhUUg4YkRNYk5xbUZHYjVLalV0R2kzRVV6d0F6ZHRMSU93a3JQWkhLK0YwRE1tWWNmbU5XYjRxbHdDOTByWlBub085NXVVaUtFYzFlcVBUOVIxQVZSNk1wQU90QUphT3FCWXBvTElNak44OC9xUGZRK0JOQSs3TXFjanZRNHJYSTc2c1VSdE9ZRGx5bXNRV3V0Vkx4Y3AvSVM2R2FvaG9oNVdrMENxZEQzTTNXZGVrSllBR04vWER0bFlwM0hOYS9uNTUxdEI2SWgyTmpJWTJHVkloZFdXeEZmbWc2czFVaEdrTnR4VHVTcVc2ODMzUnNJblhmcDFEZTdjS0kraFdoeFRFYVpUQmVOaFZ2UENRWDBRcUttYkFDVDlDb1B3Nmw1c1Vnd3d4K0NvNVN1a3BobGVVNUZXOUorZi94TzYyNlN4QkpFMmpNVG9WVzlzaFFlaHdhRmc5SFVhSXhCMkpjOC9mTElFNG5HdG1KWWl5MGM0bFdGWHltTHRnOFpIUnZzbjUwUTZkVHIrRC9LQ1ltSmlZbUp1WWZBT28zTUpGbTYrNEFBQUFBU1VWT1JLNUNZSUk9Jykgbm8tcmVwZWF0IDAgMDtcbiAgICB3aWR0aDogNzBweDtcbiAgICBoZWlnaHQ6IDcwcHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDQ3cHg7XG4gICAgdG9wOiAxMXB4O1xuICAgIHRleHQtaW5kZW50OiAtMjAwZW07XG4gICAgei1pbmRleDogMTtcbn1cbmJvZHkuc2l0ZS1nbXggI2hlYWRlci1icmFuZCB7XG4gICAgYmFja2dyb3VuZDogIHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFIMEFBQUJHQ0FNQUFBRFc0MnQ1QUFBQUJHZEJUVUVBQUxHUEMveGhCUUFBQUFGelVrZENBSzdPSE9rQUFBTjhhVlJZZEZoTlREcGpiMjB1WVdSdlltVXVlRzF3QUFBQUFBQThQM2h3WVdOclpYUWdZbVZuYVc0OUl1Kzd2eUlnYVdROUlsYzFUVEJOY0VObGFHbEllbkpsVTNwT1ZHTjZhMk01WkNJL1BpQThlRHA0YlhCdFpYUmhJSGh0Ykc1ek9uZzlJbUZrYjJKbE9tNXpPbTFsZEdFdklpQjRPbmh0Y0hSclBTSkJaRzlpWlNCWVRWQWdRMjl5WlNBMUxqWXRZekUwTWlBM09TNHhOakE1TWpRc0lESXdNVGN2TURjdk1UTXRNREU2TURZNk16a2dJQ0FnSUNBZ0lDSStJRHh5WkdZNlVrUkdJSGh0Ykc1ek9uSmtaajBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOHdNaTh5TWkxeVpHWXRjM2x1ZEdGNExXNXpJeUkrSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUlIaHRiRzV6T25odGNFMU5QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YlcwdklpQjRiV3h1Y3pwemRGSmxaajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDNOVWVYQmxMMUpsYzI5MWNtTmxVbVZtSXlJZ2VHMXNibk02ZUcxd1BTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZJaUI0YlhCTlRUcFBjbWxuYVc1aGJFUnZZM1Z0Wlc1MFNVUTlJbmh0Y0M1a2FXUTZSakJFUVRZNVJrUTFNVU0zTVRGRk0wRkNSa0ZCUmtGQk56ZzVORVZGT0VJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNk1rSTVPRGRGTXpkR1JVSXpNVEZGTnprMk9FUkdOVVJET1RReU5VTkZSVVVpSUhodGNFMU5Pa2x1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2TWtJNU9EZEZNelpHUlVJek1URkZOemsyT0VSR05VUkRPVFF5TlVORlJVVWlJSGh0Y0RwRGNtVmhkRzl5Vkc5dmJEMGlRV1J2WW1VZ1VHaHZkRzl6YUc5d0lFTlROaUFvVjJsdVpHOTNjeWtpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRvd056a3haV00wTUMxaU56Y3dMVGxsTkRNdFlqRTNNUzB4WkRBNFl6Z3lObVUyTlRjaUlITjBVbVZtT21SdlkzVnRaVzUwU1VROUltRmtiMkpsT21SdlkybGtPbkJvYjNSdmMyaHZjRG8xWlRsaE5qQmlOQzA1TkdJekxXTmpORGd0T0dSak9TMDBOVFUyTTJFM1pqazBaak1pTHo0Z1BDOXlaR1k2UkdWelkzSnBjSFJwYjI0K0lEd3ZjbVJtT2xKRVJqNGdQQzk0T25odGNHMWxkR0UrSUR3L2VIQmhZMnRsZENCbGJtUTlJbklpUHo1MUNNSnpBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXF4UVRGUkZUR2x4Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9WWTVtMmdBQUFPTjBVazVUQVA2QUJBRVEvZkRnUUJZSGF3TFBDaEgwK3dNeDc1RHFDL1BYVzltYzlnNWdLdWdOQnZuOFEwTGNibU1JbWF3VjhvTDQyTVBRSE1mNmxyOXFwRXd1WWtqYXhzMm9YY2w0SGxMbnRXeU53T254ZEQ3M0luWWxPUktscXA3SXF4UXdObVhzaUs1NlA2R01VQzNLR3ZYaG1zWGQ2eWx6bmUxOWI3RW1wcUFYNUdlQkdEUGJWanJsd1NmVVJMMG9vbkhmSVI5Zms4VExTb2RjUGQ0MXVoazdUd3k1ZTJpYmFWWFN2T1o4Y05GTnpyTkhVWWs4cDE1T01ubVNaaHVwaWxSWWZtU1JORGNQdE5aaFJZUWtjaDBqMVRpRDdnVXJWNzdNaTdLNDRwK3Y0eUJUbzFxaEZjc0JBQUFFMDBsRVFWUjRBZTNYNTFlVVJ4Z0Y4SXVzTE5KQlF3R2xnNGdRRWNHQ1hXUHZSYVBHM2pYMkVqV3g5MktNc1ppbzBaamVlKys5OTk1TGN2K1J3TDd2elBPODd5NzdMVGtuNSt6dkV4em16T3lCKzl3WjhPK0xpWW1KaVltSjZiWS8rOEgxZWVTVTByVHRXd2ZndjFSZWNDeUIydUJKUmZBWUh6VG13YU02YU5TaXhhU2cyQUpyV05ES2hrZHExNE1Nc3pBbEZTS1FTZU1sYUlHT05JYWpSZnhzV2xsNzRacTdnY1pWU2RCdXZKNFJqZDhEYXlxdGhjbFEydEVLSXVUelRGcEh6TnJ0dEZLZ3JaRFZQanMzd25pZTRuVW9OMUVrSWVSRGlrVUlxYUtWMWg3S3dBUzJxdlFUdUVaUWpJR1lXMEV4R1k2cmFTVjhpV1kxZzJsZEMyVlVBcVBvWWJMWGp5SmhGYXhOVkxyQ01lT2cyaUVkUUhkYTEwRTVuc21vYm9hamtjb0luVGxsT1Z5ZDQyaGxBeVVWa1NQWC9uRXFjZXZHVFZwU20wL3RJMmRkUFpXT0tuUGFOaGpMMWFhVEF3MnRSTzQrS3AxR0ltVHlVSW9qcWFHeG9NY0J5VnprVDVXY1J1dVdFNjFFTG5rQ3JjTCtNT0kzMC9yZ1pDZ2Q5T2dFUjFJRnRheDRHQ1ZUS0ZxSlhGZGFXVWNoQW01cUt4ZFhCZERpVFhyVTVTSmtHcjJtdzBxaElwSFRHbWhOZzlaMkFzbWNqeitENnhwNlBZY1dnUzcwZWd4V1lBd1ZpWnhZSmRITWo0ZkhXUFlxS0lmMUJiMmFuR2pUWnhQRWpod0tpWno0bTlaYjhNcnRBT1diTFBwTVJiTlo5RmtMcFQrRlJFNzBvYkc2RE5GOFM3L3VBSko2MCtkUTVPMGxjbG9UamZjUjFYZjBXNU1xbVJPam9hWG5SNGljV0VOamlSMjJkdUhtU2xQbWYwM1hVWlc1NzJtOEI2MURSWGpreEdvYW8yellHZTVPTEtaclRqWmRNeVZ6aGVkcHZBT1BoeW0yd29mVytXaW50NE50ODY5SzZKclNkbzd0bmlzMGhrSDRCdlZaK05DYUgrMzArVFVKZEozQ0dicmEyRG5vZ0lVNmpHSVF0ZnZoSlprZEZPMzBsZk5vWEVZeFhmWVQ5UUorb090VktPa1hxRzNvQm84Y0dnT2puZDZ0UUw1RWVwQSt0NnZuUkNPVXArbTFHQjd5bnF1TmNubzlGdG5jQWpoTnI1eGs0RWZiR3dGWUF5cnBVd0R0THhvOW9wemVpSi9vT2d0Z0piMXVBOUNYeGtnWXFiUHBkOE1lS0gxcG1XS3RhZVBvUSt0WFhKQXhhemFFV3NLdEFNN1I2QnhoY3pFR1NnbXRmdkJhUWF2NGlyMk1kcVBaUUdyYnZCdU50VGZZUkVaUURLVUhqYmo1OExoWGZuTHBvdmNQbDF0SDVjbFF1bW04amZCMzdjUThHc0dlRUNObzdjdUFNaktUeGgwb3BuRXg3UGJZRi9CT3oxMFJMcmpxWXNwdUFWZ1ptYlNHcStQTG0zVFBMcWZoTEpsSGNRSWh3KzBqRGlHNWEyZzlHcSt2NGdVUXV5bldMNFZyK2hsYWFRSDhiRE1iTnFtRkdiNUtqVXRHaTNFVXp3QXpkdExJT3drclBaSEsrRjBETW1ZY2ZtTldiNHFsd0M5MHJaUG5vTzk1dVVpS0VjMWVxUFQ5UjFBVlI2TXBBT3RBSmFPcUJZcG9MSU1qTjg4L3FQZlErQk5BKzdNcWNqdlE0clhJNzZzVVJ0T1lEbHltc1FXdXRWTHhjcC9JUzZHYW9ob2g1V2swQ3FkRDNNM1dkZWtKWUFHTi9YRHRsWXAzSE5hL241NTF0QjZJaDJOaklZMkdWSWhkV1d4RmZtZzZzMVVoR2tOdHhUdVNxVzY4MzNSc0luWGZwMURlN2NLSStoV2h4VEVhWlRCZU5oVnZQQ1FYMFFxS21iQUNUOUNvUHc2bDVzVWd3d3grQ281U3VrcGhsZVU1Rlc5SitmL3hPNjI2U3hCSkUyak1Ub1ZXOXNoUWVod2FGZzlIVWFJeEIySmM4L2ZMSUU0bkd0bUpZaXkwYzRsV0ZYeW1MdGc4WkhSdnNuNTBRNmRUcitEL0tDWW1KaVltSnVZZkFPbzNNSkZtNis0QUFBQUFTVVZPUks1Q1lJST0nKSBuby1yZXBlYXQgc2Nyb2xsIDAgMDtcbiAgICB3aWR0aDogMTI1cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDI5cHg7XG4gICAgdG9wOiAxMHB4O1xufVxuXG5ib2R5LnNpdGUtdWxpICNoZWFkZXItYnJhbmQge1xuICAgIGJhY2tncm91bmQ6IHVybCggdXJsKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUgwQUFBQkdDQU1BQUFEVzQydDVBQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQUZ6VWtkQ0FLN09IT2tBQUFOOGFWUllkRmhOVERwamIyMHVZV1J2WW1VdWVHMXdBQUFBQUFBOFAzaHdZV05yWlhRZ1ltVm5hVzQ5SXUrN3Z5SWdhV1E5SWxjMVRUQk5jRU5sYUdsSWVuSmxVM3BPVkdONmEyTTVaQ0kvUGlBOGVEcDRiWEJ0WlhSaElIaHRiRzV6T25nOUltRmtiMkpsT201ek9tMWxkR0V2SWlCNE9uaHRjSFJyUFNKQlpHOWlaU0JZVFZBZ1EyOXlaU0ExTGpZdFl6RTBNaUEzT1M0eE5qQTVNalFzSURJd01UY3ZNRGN2TVRNdE1ERTZNRFk2TXprZ0lDQWdJQ0FnSUNJK0lEeHlaR1k2VWtSR0lIaHRiRzV6T25Ka1pqMGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M4d01pOHlNaTF5WkdZdGMzbHVkR0Y0TFc1ekl5SStJRHh5WkdZNlJHVnpZM0pwY0hScGIyNGdjbVJtT21GaWIzVjBQU0lpSUhodGJHNXpPbmh0Y0UxTlBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZiVzB2SWlCNGJXeHVjenB6ZEZKbFpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMM05VZVhCbEwxSmxjMjkxY21ObFVtVm1JeUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiWEJOVFRwUGNtbG5hVzVoYkVSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlJqQkVRVFk1UmtRMU1VTTNNVEZGTTBGQ1JrRkJSa0ZCTnpnNU5FVkZPRUlpSUhodGNFMU5Pa1J2WTNWdFpXNTBTVVE5SW5odGNDNWthV1E2TWtJNU9EZEZNemRHUlVJek1URkZOemsyT0VSR05VUkRPVFF5TlVORlJVVWlJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZNa0k1T0RkRk16WkdSVUl6TVRGRk56azJPRVJHTlVSRE9UUXlOVU5GUlVVaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5pQW9WMmx1Wkc5M2N5a2lQaUE4ZUcxd1RVMDZSR1Z5YVhabFpFWnliMjBnYzNSU1pXWTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRG93TnpreFpXTTBNQzFpTnpjd0xUbGxORE10WWpFM01TMHhaREE0WXpneU5tVTJOVGNpSUhOMFVtVm1PbVJ2WTNWdFpXNTBTVVE5SW1Ga2IySmxPbVJ2WTJsa09uQm9iM1J2YzJodmNEbzFaVGxoTmpCaU5DMDVOR0l6TFdOak5EZ3RPR1JqT1MwME5UVTJNMkUzWmprMFpqTWlMejRnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrSUR3dmNtUm1PbEpFUmo0Z1BDOTRPbmh0Y0cxbGRHRStJRHcvZUhCaFkydGxkQ0JsYm1ROUluSWlQejUxQ01KekFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBcXhRVEZSRlRHbHgvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1ZZNW0yZ0FBQU9OMFVrNVRBUDZBQkFFUS9mRGdRQllIYXdMUENoSDArd014NzVEcUMvUFhXOW1jOWc1Z0t1Z05Cdm44UTBMY2JtTUltYXdWOG9MNDJNUFFITWY2bHI5cXBFd3VZa2pheHMyb1hjbDRIbExudFd5TndPbnhkRDczSW5ZbE9SS2xxcDdJcXhRd05tWHNpSzU2UDZHTVVDM0tHdlhobXNYZDZ5bHpuZTE5YjdFbXBxQVg1R2VCR0RQYlZqcmx3U2ZVUkwwb29uSGZJUjlmazhUTFNvZGNQZDQxdWhrN1R3eTVlMmliYVZYU3ZPWjhjTkZOenJOSFVZazhwMTVPTW5tU1podXBpbFJZZm1TUk5EY1B0TlpoUllRa2NoMGoxVGlEN2dVclY3N01pN0s0NHArdjR5QlRvMXFoRmNzQkFBQUUwMGxFUVZSNEFlM1g1MWVVUnhnRjhJdXNMTkpCUXdHbGc0Z1FFY0dDWFdQdlJhUEczalgyRWpXeDkyS01zWmlvMFpqZWUrKzk5OTVMY3YrUndMN3Z6UE84N3k3N0xUa241K3p2RXh6bXpPeUIrOXdaOE8rTGlZbUppWW1KNmJZLys4SDFlZVNVMHJUdFd3Zmd2MVJlY0N5QjJ1QkpSZkFZSHpUbXdhTTZhTlNpeGFTZzJBSnJXTkRLaGtkcTE0TU1zekFsRlNLUVNlTWxhSUdPTklhalJmeHNXbGw3NFpxN2djWlZTZEJ1dko0UmpkOERheXF0aGNsUTJ0RUtJdVR6VEZwSHpOcnR0RktnclpEVlBqczN3bmllNG5Vb04xRWtJZVJEaWtVSXFhS1YxaDdLd0FTMnF2UVR1RVpRaklHWVcwRXhHWTZyYVNWOGlXWTFnMmxkQzJWVUFxUG9ZYkxYanlKaEZheE5WTHJDTWVPZzJpRWRRSGRhMTBFNW5zbW9ib2Fqa2NvSW5UbGxPVnlkNDJobEF5VVZrU1BYL25FcWNldkdUVnBTbTAvdEkyZGRQWldPS25QYU5oakwxYWFUQXcydFJPNCtLcDFHSW1UeVVJb2pxYUd4b01jQnlWemtUNVdjUnV1V0U2MUVMbmtDcmNMK01PSTMwL3JnWkNnZDlPZ0VSMUlGdGF4NEdDVlRLRnFKWEZkYVdVY2hBbTVxS3hkWEJkRGlUWHJVNVNKa0dyMm13MHFoSXBIVEdtaE5nOVoyQXNtY2p6K0Q2eHA2UFljV2dTNzBlZ3hXWUF3VmlaeFlKZEhNajRmSFdQWXFLSWYxQmIyYW5HalRaeFBFamh3S2laejRtOVpiOE1ydEFPV2JMUHBNUmJOWjlGa0xwVCtGUkU3MG9iRzZETkY4UzcvdUFKSjYwK2RRNU8wbGNsb1RqZmNSMVhmMFc1TXFtUk9qb2FYblI0aWNXRU5qaVIyMmR1SG1TbFBtZjAzWFVaVzU3Mm04QjYxRFJYamt4R29hbzJ6WUdlNU9MS1pyVGpaZE15VnpoZWRwdkFPUGh5bTJ3b2ZXK1dpbnQ0TnQ4NjlLNkpyU2RvN3RuaXMwaGtINEJ2VlorTkNhSCszMCtUVUpkSjNDR2JyYTJEbm9nSVU2akdJUXRmdmhKWmtkRk8zMGxmTm9YRVl4WGZZVDlRSitvT3RWS09rWHFHM29CbzhjR2dPam5kNnRRTDVFZXBBK3Q2dm5SQ09VcCttMUdCN3lucXVOY25vOUZ0bmNBamhOcjV4azRFZmJHd0ZZQXlycFV3RHRMeG85b3B6ZWlKL29PZ3RnSmIxdUE5Q1h4a2dZcWJQcGQ4TWVLSDFwbVdLdGFlUG9RK3RYWEpBeGF6YUVXc0t0QU03UjZCeGhjekVHU2dtdGZ2QmFRYXY0aXIyTWRxUFpRR3JidkJ1TnRUZllSRVpRREtVSGpiajU4TGhYZm5McG92Y1BsMXRINWNsUXVtbThqZkIzN2NROEdzR2VFQ05vN2N1QU1qS1R4aDBvcG5FeDdQYllGL0JPejEwUkxyanFZc3B1QVZnWm1iU0dxK1BMbTNUUExxZmhMSmxIY1FJaHcrMGpEaUc1YTJnOUdxK3Y0Z1VRdXluV0w0VnIraGxhYVFIOGJETWJOcW1GR2I1S2pVdEdpM0VVendBemR0TElPd2tyUFpISytGMERNbVljZm1OV2I0cWx3QzkwclpQbm9POTV1VWlLRWMxZXFQVDlSMUFWUjZNcEFPdEFKYU9xQllwb0xJTWpOODgvcVBmUStCTkErN01xY2p2UTRyWEk3NnNVUnRPWURseW1zUVd1dFZMeGNwL0lTNkdhb2hvaDVXazBDcWREM00zV2Rla0pZQUdOL1hEdGxZcDNITmEvbjU1MXRCNkloMk5qSVkyR1ZJaGRXV3hGZm1nNnMxVWhHa050eFR1U3FXNjgzM1JzSW5YZnAxRGU3Y0tJK2hXaHhURWFaVEJlTmhWdlBDUVgwUXFLbWJBQ1Q5Q29QdzZsNXNVZ3d3eCtDbzVTdWtwaGxlVTVGVzlKK2YveE82MjZTeEJKRTJqTVRvVlc5c2hRZWh3YUZnOUhVYUl4QjJKYzgvZkxJRTRuR3RtSllpeTBjNGxXRlh5bUx0ZzhaSFJ2c241MFE2ZFRyK0QvS0NZbUppWW1KdVlmQU9vM01KRm02KzRBQUFBQVNVVk9SSzVDWUlJPScpKSBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICAgIHdpZHRoOiAxMDBweDtcbiAgICB0b3A6IDIwcHg7XG59XG5cbiNoZWFkZXItc2VydmljZSB7XG4gICAgY29sb3I6ICM1MjUyNTI7XG4gICAgZm9udC1mYW1pbHk6ICdXZWJkZVNhbnNNZWRpdW0nLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDMycHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICBoZWlnaHQ6IDcwcHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDE2MHB4O1xuICAgIHRvcDogMzZweDtcbiAgICB6LWluZGV4OiAxO1xufVxuXG5cbmJvZHkuc2l0ZS1nbXggI2hlYWRlci1zZXJ2aWNlIHtcbiAgICBjb2xvcjogI0ZGRjtcbiAgICBmb250LWZhbWlseTogJ1JvYm90b0NvbmRMaWdodCcsQXJpYWwsVmVyZGFuYSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDQ4cHg7XG59XG5cbiNoZWFkZXJVc2VyaW5mbyB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIG5vLXJlcGVhdCAxMDAlIDEwMCU7XG4gICAgaGVpZ2h0OiA0OHB4O1xuICAgIHBhZGRpbmc6IDRweCAxMHB4IDlweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgdG9wOiAxN3B4O1xufVxuXG5odG1sIHtcbiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7XG4gICAgdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbn1cbiN3cmFwcGVyIHtcbiAgICBtaW4taGVpZ2h0OiAxMDAlO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1pbi13aWR0aDogMzIwcHg7XG4gICAgei1pbmRleDogMTAwO1xufVxuI2NvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogI0ZGRkZGRjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjQzBDOUNFO1xuICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMDAwcHg7XG59XG4ucmljaGNvbnRlbnQgI2NvbnRhaW5lciB7XG4gICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xufVxuI3BhZ2UtY29udGVudCB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiA0NXB4IDEwcHggOTNweCAzMHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwMHB4O1xufVxuI21haW4ge1xuICAgIG1pbi1oZWlnaHQ6IDQ1MHB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbiNwYWdlLWhlYWRlci5oZWFkZXItc2ltcGxlIH4gI3BhZ2UtY29udGVudCAjbWFpbiB7XG4gICAgbWluLWhlaWdodDogMDtcbn1cbmhcXDpzZWN0aW9uIGgxIHtcbiAgICBmb250OiA0MDAgMzBweC8zN3B4IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG59XG5oXFw6c2VjdGlvbiBoMiB7XG4gICAgZm9udDogNDAwIDIxcHgvMjhweCBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xufVxuaFxcOnNlY3Rpb24gaDMsXG5oXFw6c2VjdGlvbiAuc3VibGluZSxcbi50YWItY29udGFpbmVyIGgzIHtcbiAgICBmb250OiA0MDAgMThweC8yNXB4IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG59XG5oXFw6c2VjdGlvbiBoNCB7XG4gICAgZm9udDogNzAwIDE0cHgvMjFweCBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xufVxuaFxcOnNlY3Rpb24gaDUsXG5oXFw6c2VjdGlvbiBoNiB7XG4gICAgZm9udDogNzAwIDEzcHgvMjBweCBWZXJkYW5hLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO1xufVxuaFxcOnNlY3Rpb24+aDEsXG5oXFw6c2VjdGlvbj5oMixcbmhcXDpzZWN0aW9uPmgzLFxuaFxcOnNlY3Rpb24+aDQsXG5oXFw6c2VjdGlvbj5oNSxcbmhcXDpzZWN0aW9uPmg2LFxuaFxcOnNlY3Rpb24+cCxcbmhcXDpzZWN0aW9uPi5zdWJsaW5lIHtcbiAgICBjbGVhcjogbGVmdDtcbiAgICBwYWRkaW5nOiAwIDE1cHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xufVxuaFxcOnNlY3Rpb24+aDEsXG4uYXJ0aWNsZS10ZXh0PmgxIHtcbiAgICBtYXJnaW4tYm90dG9tOiAzMXB4O1xufVxuaFxcOnNlY3Rpb24+aDIsXG4uYXJ0aWNsZS10ZXh0PmgyIHtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5oXFw6c2VjdGlvbj5oMyxcbi5hcnRpY2xlLXRleHQ+aDMsXG4udGFiLWNvbnRhaW5lcj5oMyB7XG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xufVxuaFxcOnNlY3Rpb24+LnN1YmxpbmUsXG4uYXJ0aWNsZS10ZXh0Pi5zdWJsaW5lIHtcbiAgICBtYXJnaW4tYm90dG9tOiAzMXB4O1xufVxuaFxcOnNlY3Rpb24+aDErLnN1YmxpbmUsXG4uYXJ0aWNsZS10ZXh0PmgxKy5zdWJsaW5lIHtcbiAgICBtYXJnaW4tdG9wOiAtMjlweDtcbn1cbmhcXDpzZWN0aW9uPmg0LFxuLmFydGljbGUtdGV4dD5oNCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMXB4O1xufVxuaFxcOnNlY3Rpb24+cCxcbi5hcnRpY2xlLXRleHQ+cCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cbi5jb250ZW50LWZvcm0gLnN1YmxpbmUsXG4uY29udGVudC1mb3JtIGgxLFxuLmNvbnRlbnQtZm9ybSBoMixcbi5jb250ZW50LWZvcm0gaDMsXG4uY29udGVudC1mb3JtIGg0LFxuLmNvbnRlbnQtZm9ybSAuc3VibGluZSB7XG4gICAgcGFkZGluZzogMDtcbn1cbi5jb250ZW50LWZvcm0gaDQge1xuICAgIHBhZGRpbmctYm90dG9tOiA1cHg7XG59XG4uYXJ0aWNsZS10ZXh0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7XG4gICAgcGFkZGluZzogMTVweCAxNXB4IDA7XG59XG4uYXJ0aWNsZS10ZXh0IGgxOmZpcnN0LWNoaWxkLFxuLmFydGljbGUtdGV4dCBoMjpmaXJzdC1jaGlsZCxcbi5hcnRpY2xlLXRleHQgaDM6Zmlyc3QtY2hpbGQsXG4uYXJ0aWNsZS10ZXh0IGg0OmZpcnN0LWNoaWxkLFxuLmFydGljbGUtdGV4dCBwOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAtNHB4O1xufVxuLmFydGljbGUtdGV4dCBwLmludHJvIHtcbiAgICBmb250LXdlaWdodDogNzAwO1xufVxuLmFydGljbGUtdGV4dCBwK2gxIHtcbiAgICBtYXJnaW4tdG9wOiAzN3B4O1xufVxuLmFydGljbGUtdGV4dCBwK2gyIHtcbiAgICBtYXJnaW4tdG9wOiAyOHB4O1xufVxuLmFydGljbGUtdGV4dCBwK2gzIHtcbiAgICBtYXJnaW4tdG9wOiAyNXB4O1xufVxuLmFydGljbGUtdGV4dCBwK2g0IHtcbiAgICBtYXJnaW4tdG9wOiAyMXB4O1xufVxuLmFydGljbGUtdGV4dCAuYnRuLXdyYXBwZXIge1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG4uYXJ0aWNsZS10ZXh0IC5idG4tcHJpbnQge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG4uY29udGVudC1wYXJ0IHtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbn1cbi5jb250ZW50LXBhcnQtY29sNiB7XG4gICAgd2lkdGg6IDk2MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLmNvbnRlbnQtcGFydC1jb2w1IHtcbiAgICB3aWR0aDogODAwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG59XG4uY29udGVudC1wYXJ0LWNvbDQge1xuICAgIHdpZHRoOiA2NDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5jb250ZW50LXBhcnQtY29sMyB7XG4gICAgd2lkdGg6IDQ4MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLmNvbnRlbnQtcGFydC1jb2wyIHtcbiAgICB3aWR0aDogMzIwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG59XG4uY29udGVudC1wYXJ0LXF1YWQge1xuICAgIHdpZHRoOiAyNDBweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5jb250ZW50LXBhcnQtZmlmdGgge1xuICAgIHdpZHRoOiAxOTJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbn1cbi5jb250ZW50LXBhcnQtY29sMSB7XG4gICAgd2lkdGg6IDE2MHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLm5vdGUge1xuICAgIGNvbG9yOiAjNkE2QTZBO1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBsaW5lLWhlaWdodDogMTRweDtcbn1cbi5ub3RlLWRhcmsge1xuICAgIGNvbG9yOiAjMjYyNjI2O1xuICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICBsaW5lLWhlaWdodDogMTRweDtcbn1cbi5jYXNlZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0VFRjBGMztcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG4uaHIge1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRDFENEQ5O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG5kaXYuaHIge1xuICAgIG1hcmdpbjogLTEwcHggMCAyNXB4IDA7XG4gICAgcGFkZGluZy1ib3R0b206IDIwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuZGl2LmhyPmhyIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuI3BhZ2UtaGVhZGVyOmFmdGVyLFxuI3BhZ2UtY29udGVudDphZnRlcixcbiNtYWluOmFmdGVyLFxuLmNvbnRlbnQtcGFydDphZnRlcixcbmhcXDphcnRpY2xlOmFmdGVyLFxuaFxcOmFzaWRlOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIi5cIjtcbiAgICBjbGVhcjogYm90aDtcbiAgICBoZWlnaHQ6IDA7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbioraHRtbCAjcGFnZS1oZWFkZXIsXG4qK2h0bWwgI3BhZ2UtY29udGVudCxcbioraHRtbCAjcGFnZS1mb290ZXIsXG4qK2h0bWwgI21haW4sXG4qK2h0bWwgLmNvbnRlbnQtcGFydCxcbioraHRtbCBoXFw6YXJ0aWNsZSxcbioraHRtbCBoXFw6YXNpZGUge1xuICAgIHpvb206IDE7XG59XG4uaGludCB7XG4gICAgbWFyZ2luOiAyMHB4IDIwcHggMzVweCAwO1xuICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgcGFkZGluZzogMTJweCAxNXB4IDEzcHg7XG4gICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkO1xufVxuYm9keS5zaXRlLWdteCAuaGludCB7XG4gICAgbWFyZ2luOiAyMHB4IDIwcHggMzVweCAwO1xufVxuI21haW4gLmhpbnQ6Zmlyc3QtY2hpbGQsXG4jcGFnZS1jb250ZW50IC5oaW50OmZpcnN0LWNoaWxkLFxuI2JyZWFkY3J1bWIgKyAuaGludCxcbiNicmVhZGNydW1iICsgI21haW4gLmhpbnQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG4uaGludCAuaGludC1oZWFkbGluZSB7XG5cbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQ6IDQwMCAxOHB4LzI0cHggVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAwO1xuICAgIG1heC13aWR0aDogNTQwcHg7XG4gICAgcGFkZGluZzogMCAwIDIycHggNTBweDtcbn1cbmJvZHkuc2l0ZS1nbXggLmhpbnQgLmhpbnQtaGVhZGxpbmUge1xuXG59XG4uaGludC1zaW5nbGUgLmhpbnQtaGVhZGxpbmUge1xuICAgIGhlaWdodDogNDJweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICBwYWRkaW5nOiAwIDAgM3B4IDUwcHg7XG4gICAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuLmhpbnQtc2luZ2xlIHsgcGFkZGluZzogMTJweCAxNXB4OyB9XG5ib2R5LnNpdGUtZ214IC5oaW50LXNpbmdsZSB7IHBhZGRpbmc6IDEycHggMTVweDsgfVxuYm9keS5zaXRlLWdteCAuaGludC1zaW5nbGUgLmhpbnQtaGVhZGxpbmUge1xuICAgIGhlaWdodDogNDJweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbiAgICBwYWRkaW5nOiAwIDAgM3B4IDUwcHg7XG59XG4uaGludCBwIHtcbiAgICBtYXJnaW46IC0xOHB4IDAgMCA1MHB4O1xuICAgIG1heC13aWR0aDogNTQwcHg7XG4gICAgcGFkZGluZzogMDtcbn1cbi5oaW50IC5zdWJ0ZXh0IHtcbiAgICBjb2xvcjogIzZBNkE2QTtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgbGluZS1oZWlnaHQ6IDEzcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDUwcHg7XG59XG4uaGludC1jb25maXJtIC5oaW50LWhlYWRsaW5lIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwICAgIDNweDtcbn1cbi5oaW50LWluZm8gICAgLmhpbnQtaGVhZGxpbmUge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgIC03N3B4O1xufVxuLmhpbnQtd2FybmluZyAuaGludC1oZWFkbGluZSB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTU3cHg7XG59XG4uaGludC1lcnJvciAgIC5oaW50LWhlYWRsaW5lIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMzdweDtcbn1cbi5oaW50LWluZm8ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZmY0Zjg7XG4gICAgYm9yZGVyLWNvbG9yOiAjYjljZmRkO1xufVxuYm9keS5nbXggLmhpbnQtaW5mbyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U5ZTllOTtcbiAgICBib3JkZXI6IG5vbmU7XG59XG4uaGludC13YXJuaW5nIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkRGOUVBO1xuICAgIGJvcmRlci1jb2xvcjogI0YzREE3OTtcbn1cbmJvZHkuc2l0ZS1nbXggLmhpbnQtd2FybmluZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjdlMDtcbiAgICBib3JkZXI6IG5vbmU7XG59XG4uaGludC1lcnJvciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0Y4RUVFRTtcbiAgICBib3JkZXItY29sb3I6ICNENTkzOTQ7XG59XG5ib2R5LnNpdGUtZ214IC5oaW50LWVycm9yIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjZGNkO1xuICAgIGJvcmRlcjogbm9uZTtcbn1cbi5oaW50LWNvbmZpcm0ge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGMUY2RUQ7XG4gICAgYm9yZGVyLWNvbG9yOiAjQTlDODhGO1xufVxuYm9keS5zaXRlLWdteCAuaGludC1jb25maXJtIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTJmOWRmO1xuICAgIGJvcmRlcjogbm9uZTtcbn1cbi5qc0VuYWJsZWQgLmhpbnQtanNEaXNhYmxlZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbi5qc0VuYWJsZWQgLmhpbnQtdGVzdC1wZW5kaW5nIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuLmJ0bi13cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmpzRW5hYmxlZCAuYnRuLXdyYXBwZXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5idG4td3JhcHBlciA+ICoge1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG9Db25kJywgQXJpYWwsIFZlcmRhbmEsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIG1hcmdpbjogMDtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB3aWR0aDogYXV0bztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHotaW5kZXg6IDE7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xufVxuLmJ0bi13cmFwcGVyID4gKjpiZWZvcmUsXG4uYnRuLXdyYXBwZXIgPiAqOmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBmb250LWZhbWlseTogQXJpYWwsIFZlcmRhbmEsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbn1cbi5idG4td3JhcHBlciA+IGEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cbioraHRtbCAuYnRuLXdyYXBwZXIgPiAqIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbn1cbi5idG4td3JhcHBlciBpbnB1dDo6LW1vei1mb2N1cy1pbm5lciB7XG4gICAgYm9yZGVyOiAwIHNvbGlkO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xufVxuLmJ0bi1kaXNhYmxlZCA+IGlucHV0W2Rpc2FibGVkXSB7XG4gICAgb3BhY2l0eTogMTtcbn1cbi5idG4td3JhcHBlci5idG4tZGlzYWJsZWQsXG4uYnRuLXdyYXBwZXIuYnRuLWRpc2FibGVkID4gKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuLmJ0bi14eGwge1xuICAgIGhlaWdodDogNzZweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbn1cbi5idG4teHhsPioge1xuICAgIGhlaWdodDogNjZweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgICBmb250LXNpemU6IDE5cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBwYWRkaW5nOiA4cHggMjBweCAwO1xufVxuLmJ0bi14eGwgPiAqIHNwYW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xufVxuLmJ0bi14bCB7XG4gICAgaGVpZ2h0OiA2MnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xufVxuLmJ0bi14bD4qIHtcbiAgICBoZWlnaHQ6IDUycHg7XG4gICAgbGluZS1oZWlnaHQ6IDI2cHg7XG4gICAgZm9udC1zaXplOiAxOXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgcGFkZGluZzogOHB4IDIwcHggMDtcbn1cbi5idG4teGwgPiAqIHNwYW4ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xufVxuLmJ0bi1sIHtcbiAgICBoZWlnaHQ6IDQ2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDQxcHg7XG59XG4uYnRuLWw+KiB7XG4gICAgaGVpZ2h0OiA0MXB4O1xuICAgIGxpbmUtaGVpZ2h0OiA0MXB4O1xuICAgIGZvbnQtc2l6ZTogMTlweDtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIHBhZGRpbmc6IDAgMjBweCAzcHg7XG59XG4uYnRuLWw+aW5wdXQge1xuICAgIGhlaWdodDogNDZweDtcbn1cbi5idG4tbSB7XG4gICAgaGVpZ2h0OiAzNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuLmJ0bi1tPioge1xuICAgIGhlaWdodDogMzBweDtcbiAgICBsaW5lLWhlaWdodDogMzBweDtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBwYWRkaW5nOiAwIDE0cHggMnB4O1xufVxuLmJ0bi1tPmlucHV0IHtcbiAgICBoZWlnaHQ6IDM0cHg7XG59XG4uYnRuLXMge1xuICAgIGhlaWdodDogMjZweDtcbiAgICBsaW5lLWhlaWdodDogMjJweDtcbn1cbi5idG4tcz4qIHtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcGFkZGluZzogMCAxMnB4IDJweDtcbn1cbi5idG4tcz5pbnB1dCB7XG4gICAgaGVpZ2h0OiAyNnB4O1xufVxuLmJ0bi14cyB7XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxOXB4O1xufVxuLmJ0bi14cz4qIHtcbiAgICBoZWlnaHQ6IDE5cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE5cHg7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgcGFkZGluZzogMCAxMHB4IDFweDtcbn1cbi5idG4teHMgPiBpbnB1dCB7XG4gICAgaGVpZ2h0OiAyMnB4O1xufVxuLmJ0bi1rZXk+KiB7XG4gICAgY29sb3I6ICMzMzMzMzM7XG4gICAgYm9yZGVyOiAxcHggI0ZGQzgwMCBzb2xpZDtcbiAgICBiYWNrZ3JvdW5kOiAjRkZDODAwO1xufVxuLmJ0bi1rZXkgPiBhIHtcbiAgICBjb2xvcjogIzMzMzMzMztcbn1cbi5idG4ta2V5LmJ0bi1vdmVyID4gKiB7XG4gICAgY29sb3I6ICMzMzMzMzM7XG4gICAgYm9yZGVyLWNvbG9yOiAjQ0NBMDAwO1xuICAgIGJhY2tncm91bmQ6ICNDQ0EwMDA7XG59XG4uYnRuLWtleS5idG4tcHJlc3NlZCA+ICoge1xuICAgIGNvbG9yOiAjMzMzMzMzO1xuICAgIGJvcmRlci1jb2xvcjogI0ZGQzgwMDtcbiAgICBiYWNrZ3JvdW5kOiAjRkZDODAwO1xufVxuLmJ0bi1rZXkuYnRuLWRpc2FibGVkID4gKixcbi5idG4ta2V5LmJ0bi1kaXNhYmxlZC5idG4tb3ZlciA+ICoge1xuICAgIGNvbG9yOiAjREFEQURBO1xuICAgIGJvcmRlci1jb2xvcjogI0ZGRjVEMTtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGNUQxO1xufVxuLmJ0bi1zZXJ2aWNlID4gKiB7XG4gICAgY29sb3I6ICNGRkY7XG4gICAgYm9yZGVyOiAxcHggIzQyODFDMSBzb2xpZDtcbiAgICBiYWNrZ3JvdW5kOiAjNzJBNUQ5O1xufVxuLmJ0bi1zZXJ2aWNlID4gYSB7XG4gICAgY29sb3I6ICNGRkY7XG59XG4uYnRuLXNlcnZpY2UuYnRuLW92ZXIgPiAqIHtcbiAgICBjb2xvcjogI0ZGRjtcbiAgICBib3JkZXItY29sb3I6ICM0MDdFQkM7XG4gICAgYmFja2dyb3VuZDogIzY2OUNENTtcbn1cbi5idG4tc2VydmljZS5idG4tcHJlc3NlZCA+ICoge1xuICAgIGNvbG9yOiAjREJFN0Y1O1xuICAgIGJvcmRlci1jb2xvcjogIzJBNTM3QztcbiAgICBiYWNrZ3JvdW5kOiAjNUI5M0QxO1xufVxuLmJ0bi1zZXJ2aWNlLmJ0bi1kaXNhYmxlZCA+ICosXG4uYnRuLXdyYXBwZXIuYnRuLXNlcnZpY2UuYnRuLWRpc2FibGVkLmJ0bi1vdmVyID4gKiB7XG4gICAgY29sb3I6ICNGRkY7XG4gICAgYm9yZGVyLWNvbG9yOiAjQTFDMEUwO1xuICAgIGJhY2tncm91bmQ6ICNCOUQyRUM7XG59XG4uYnRuLXNlY29uZGFyeSA+ICoge1xuICAgIGNvbG9yOiAjNjY2O1xuICAgIGJvcmRlcjogMXB4ICNDMkMyQzIgc29saWQ7XG4gICAgYmFja2dyb3VuZDogI0MyQzJDMjtcbn1cbi5idG4tc2Vjb25kYXJ5ID4gYSB7XG4gICAgY29sb3I6ICM2NjY7XG59XG4uYnRuLXNlY29uZGFyeS5idG4tb3ZlciA+ICoge1xuICAgIGNvbG9yOiAjNUM1QzVDO1xuICAgIGJvcmRlci1jb2xvcjogI0I2QjZCNztcbiAgICBiYWNrZ3JvdW5kOiAjQjZCNkI3O1xufVxuLmJ0bi1zZWNvbmRhcnkuYnRuLXByZXNzZWQgPiAqIHtcbiAgICBjb2xvcjogIzdDN0M3QztcbiAgICBib3JkZXItY29sb3I6ICNEOEQ4RDg7XG4gICAgYmFja2dyb3VuZDogI0Q4RDhEOFxufVxuLmJ0bi1zZWNvbmRhcnkuYnRuLWRpc2FibGVkID4gKixcbi5idG4td3JhcHBlci5idG4tc2Vjb25kYXJ5LmJ0bi1kaXNhYmxlZC5idG4tb3ZlciA+ICoge1xuICAgIGNvbG9yOiAjQjNCM0IzO1xuICAgIGJvcmRlci1jb2xvcjogI0UxRTFFMTtcbiAgICBiYWNrZ3JvdW5kOiAjRTFFMUUxO1xufVxuLmJ0bi1sZXZlbDQgPiAqIHtcbiAgICBjb2xvcjogIzIyNjlDMztcbiAgICBib3JkZXI6IDFweCB0cmFuc3BhcmVudCBzb2xpZDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uYnRuLWxldmVsNCA+IGEge1xuICAgIGNvbG9yOiAjMjI2OUMzO1xufVxuLmJ0bi1sZXZlbDQuYnRuLW92ZXIgPiAqIHtcbiAgICBjb2xvcjogIzVDNUM1QztcbiAgICBib3JkZXItY29sb3I6ICNCNkI2Qjc7XG4gICAgYmFja2dyb3VuZDogI0I2QjZCNztcbn1cbi5idG4tbGV2ZWw0LmJ0bi1wcmVzc2VkPioge1xuICAgIGNvbG9yOiAjN0M3QzdDO1xuICAgIGJvcmRlci1jb2xvcjogI0Q4RDhEODtcbiAgICBiYWNrZ3JvdW5kOiAjRDhEOEQ4O1xufVxuLmJ0bi13cmFwcGVyLmJ0bi1sZXZlbDQuYnRuLWRpc2FibGVkID4gKixcbi5idG4td3JhcHBlci5idG4tbGV2ZWw0LmJ0bi1kaXNhYmxlZC5idG4tb3ZlciA+ICoge1xuICAgIGNvbG9yOiAjQjNCM0IzO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbi5idG4td3JhcHBlci5oYXNJY29uIHtcbnBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5idG4td3JhcHBlci5vbmx5SWNvbiA+ICoge1xudGV4dC1pbmRlbnQ6IC05OTk5cHg7XG59XG4uYnRuLXdyYXBwZXIuaGFzSWNvbi5idG4tbCA+ICogeyBwYWRkaW5nLWxlZnQ6IDU4cHg7IH1cbi5idG4td3JhcHBlci5oYXNJY29uLmJ0bi1tID4gKiB7IHBhZGRpbmctbGVmdDogNDNweDsgfVxuLmJ0bi13cmFwcGVyLmhhc0ljb24uYnRuLXMgPiAqIHsgcGFkZGluZy1sZWZ0OiAzMnB4OyB9XG4uYnRuLXdyYXBwZXIub25seUljb24uYnRuLWwgPiAqIHsgcGFkZGluZy1sZWZ0OiA0NHB4OyB9XG4uYnRuLXdyYXBwZXIub25seUljb24uYnRuLW0gPiAqIHsgcGFkZGluZy1sZWZ0OiAzMnB4OyB9XG4uYnRuLXdyYXBwZXIub25seUljb24uYnRuLXMgPiAqIHsgcGFkZGluZy1sZWZ0OiAyNHB4OyB9XG4uYnRuLWZpeC5vbmx5SWNvbi5idG4tbCA+ICogeyBwYWRkaW5nLWxlZnQ6IDQ1cHg7IH1cbi5idG4tZml4Lm9ubHlJY29uLmJ0bi1tID4gKiB7IHBhZGRpbmctbGVmdDogMzNweDsgfVxuLmJ0bi1maXgub25seUljb24uYnRuLXMgPiAqIHsgcGFkZGluZy1sZWZ0OiAyNXB4OyB9XG4qK2h0bWwgLmJ0bi1maXgub25seUljb24uYnRuLWwgaW5wdXQgeyB3aWR0aDogNjFweDsgfVxuKitodG1sIC5idG4tZml4Lm9ubHlJY29uLmJ0bi1tIGlucHV0IHsgd2lkdGg6IDQzcHg7IH1cbioraHRtbCAuYnRuLWZpeC5vbmx5SWNvbi5idG4tcyBpbnB1dCB7IHdpZHRoOiAzM3B4OyB9XG4uYnRuLXdyYXBwZXIuaGFzSWNvbiAuYnRuLWljb24ge1xuYm9yZGVyOiBub25lO1xuYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbi13ZWJraXQtYm9yZGVyLXJhZGl1czogMDtcbi1tb3otYm9yZGVyLXJhZGl1czogMDtcbmJvcmRlci1yYWRpdXM6IDA7XG4td2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4tbW96LWJveC1zaGFkb3c6IG5vbmU7XG5ib3gtc2hhZG93OiBub25lO1xubWFyZ2luOiAwO1xucGFkZGluZzogMDtcbnBvc2l0aW9uOiBhYnNvbHV0ZTtcbnotaW5kZXg6IDEwMTtcbn1cbi5idG4td3JhcHBlci5idG4tbCAuYnRuLWljb24ge1xubGluZS1oZWlnaHQ6IDMycHg7XG5oZWlnaHQ6IDMycHg7XG53aWR0aDogMzJweDtcbmxlZnQ6IDE3cHg7XG50b3A6IDdweDtcbn1cbi5idG4td3JhcHBlci5idG4tbSAuYnRuLWljb24ge1xubGluZS1oZWlnaHQ6IDI0cHg7XG5oZWlnaHQ6IDI0cHg7XG53aWR0aDogMjRweDtcbmxlZnQ6IDEycHg7XG50b3A6IDVweDtcbn1cbi5idG4td3JhcHBlci5idG4tcyAuYnRuLWljb24ge1xubGluZS1oZWlnaHQ6IDE2cHg7XG5oZWlnaHQ6IDE2cHg7XG53aWR0aDogMTZweDtcbmxlZnQ6IDExcHg7XG50b3A6IDVweDtcbn1cbi5idG4td3JhcHBlci5oYXNJY29uIC5idG4taWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgMDsgfVxuLmJ0bi13cmFwcGVyLmhhc0ljb246aG92ZXIgLmJ0bi1pY29uLFxuLmJ0bi13cmFwcGVyLmhhc0ljb24uYnRuLWhvdmVyIC5idG4taWNvbiB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTQwcHg7IH1cbi5idG4td3JhcHBlci5oYXNJY29uOmFjdGl2ZSAuYnRuLWljb24sXG4uYnRuLXdyYXBwZXIuaGFzSWNvbi5idG4tcHJlc3NlZCAuYnRuLWljb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC04MHB4OyB9XG4uYnRuLXdyYXBwZXIuaGFzSWNvbi5idG4tZGlzYWJsZWQgLmJ0bi1pY29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAxMDAlOyB9XG4uanNEaXNhYmxlZCAuYnRuLXdyYXBwZXIub25seUljb24gPiAqIHtcbnRleHQtaW5kZW50OiAwO1xufVxuLmpzRGlzYWJsZWQgLmJ0bi13cmFwcGVyIC5idG4taWNvbiB7XG5kaXNwbGF5OiBub25lO1xufVxuLmpzRGlzYWJsZWQgLmJ0bi14eGwuaGFzSWNvbiA+ICosXG4uanNEaXNhYmxlZCAuYnRuLXh4bC5vbmx5SWNvbiA+ICosXG4uanNEaXNhYmxlZCAuYnRuLXhsLmhhc0ljb24gPiAqLFxuLmpzRGlzYWJsZWQgLmJ0bi14bC5vbmx5SWNvbiA+ICoge1xucGFkZGluZzogOXB4IDE2cHggMCAyMXB4O1xufVxuLmpzRGlzYWJsZWQgLmJ0bi1sLmhhc0ljb24gPiAqLFxuLmpzRGlzYWJsZWQgLmJ0bi1sLm9ubHlJY29uID4gKiB7XG5wYWRkaW5nOiAwIDE2cHggM3B4IDIxcHg7XG59XG4uanNEaXNhYmxlZCAuYnRuLW0uaGFzSWNvbiA+ICosXG4uanNEaXNhYmxlZCAuYnRuLW0ub25seUljb24gPiAqIHtcbnBhZGRpbmc6IDAgMTBweCAycHggMTVweDtcbn1cbi5qc0Rpc2FibGVkIC5idG4tcy5oYXNJY29uID4gKixcbi5qc0Rpc2FibGVkIC5idG4tcy5vbmx5SWNvbiA+ICoge1xucGFkZGluZzogMCA4cHggMnB4IDEzcHg7XG59XG4uanNEaXNhYmxlZCAuYnRuLXhzLmhhc0ljb24gPiAqLFxuLmpzRGlzYWJsZWQgLmJ0bi14cy5vbmx5SWNvbiA+ICoge1xucGFkZGluZzogMCA2cHggMXB4IDExcHg7XG59XG4uY29udGVudC1mb3JtIHtcbiAgICBib3JkZXI6IDAgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNEMUQ0RDk7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIG1hcmdpbjogMCAyMHB4IDM1cHggMDtcbiAgICBwYWRkaW5nOiAwIDE1cHggMjBweDtcbn1cbi5jb250ZW50LXBhcnQtY29sNCAuY29udGVudC1mb3JtIHtcbiAgICB3aWR0aDogNTkwcHg7XG59XG4uY29udGVudC1wYXJ0LWNvbDQgLmZvcm0taXRlbSB7XG4gICAgd2lkdGg6IDU5MHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2w0IC5mb3JtLWl0ZW0gLml0ZW0tbGFiZWwge1xuICAgIHdpZHRoOiAxNTBweDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5jb250ZW50LXBhcnQtY29sNCAuaXRlbS1sYWJlbCsuaXRlbS1kYXRhIHtcbiAgICB3aWR0aDogNDQwcHg7XG59XG4uY29udGVudC1wYXJ0LWNvbDQgLml0ZW0tbGFiZWwubGFiZWwtdG9wIHtcbiAgICB3aWR0aDogNTkwcHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5jb250ZW50LXBhcnQtY29sNCAuaXRlbS1kYXRhLFxuLmNvbnRlbnQtcGFydC1jb2w0IC5sYWJlbC10b3ArLml0ZW0tZGF0YSB7XG4gICAgd2lkdGg6IDU5MHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wzIC5jb250ZW50LWZvcm0ge1xuICAgIHdpZHRoOiA0MzBweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMyAuZm9ybS1pdGVtIHtcbiAgICB3aWR0aDogNDMwcHg7XG59XG4uY29udGVudC1wYXJ0LWNvbDMgLmZvcm0taXRlbSAuaXRlbS1sYWJlbCB7XG4gICAgd2lkdGg6IDE1MHB4O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIHBhZGRpbmctcmlnaHQ6IDEwcHg7XG59XG4uY29udGVudC1wYXJ0LWNvbDMgLml0ZW0tbGFiZWwrLml0ZW0tZGF0YSB7XG4gICAgd2lkdGg6IDI3MHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wzIC5pdGVtLWxhYmVsLmxhYmVsLXRvcCB7XG4gICAgd2lkdGg6IDQzMHB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbn1cbi5jb250ZW50LXBhcnQtY29sMyAuaXRlbS1kYXRhLFxuLmNvbnRlbnQtcGFydC1jb2wzIC5sYWJlbC10b3ArLml0ZW0tZGF0YSB7XG4gICAgd2lkdGg6IDQzMHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wyIC5jb250ZW50LWZvcm0ge1xuICAgIHdpZHRoOiAyNzBweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMiAuZm9ybS1pdGVtIHtcbiAgICB3aWR0aDogMjcwcHg7XG59XG4uY29udGVudC1wYXJ0LWNvbDIgLmZvcm0taXRlbSAuaXRlbS1sYWJlbCB7XG4gICAgd2lkdGg6IDI3MHB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uY29udGVudC1wYXJ0LWNvbDIgLmZvcm0taXRlbSAuaXRlbS1kYXRhIHtcbiAgICB3aWR0aDogMjcwcHg7XG59XG4uZm9ybS1pdGVtIHtcbiAgICBjbGVhcjogbGVmdDtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgcGFkZGluZy1ib3R0b206IDEwcHg7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmZvcm0tbCB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMXB4O1xufVxuLmZvcm0tbCAuZm9ybS1pdGVtIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbn1cbi5mb3JtLWl0ZW0uYWN0aW9uIHtcbiAgICBwYWRkaW5nLXRvcDogNXB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAwO1xufVxuLmZvcm0tc2VuZCAuYnRuLXdyYXBwZXIge1xuICAgIGZsb2F0OiByaWdodDtcbn1cbi5pdGVtLWRhdGEge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pdGVtLWRhdGEgc3Ryb25nIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG59XG4uaXRlbS1kYXRhIGxhYmVsIHN0cm9uZyB7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLml0ZW0tbGFiZWwgbGFiZWwsXG4uaXRlbS1sYWJlbCxcbi5pdGVtLWRhdGEsXG4uZm9ybS1pdGVtIGhcXDpkZXRhaWxzLFxuLmZvcm0taXRlbSBoXFw6b3V0cHV0LFxuLmZvcm0taXRlbSBzcGFuLm1hcmsge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbWluLWhlaWdodDogMjRweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMiAuaXRlbS1sYWJlbCBsYWJlbCBoXFw6ZGV0YWlscyxcbi5jb250ZW50LXBhcnQtY29sNCAuaXRlbS1sYWJlbCBsYWJlbCBoXFw6ZGV0YWlscyxcbi5jb250ZW50LXBhcnQtY29sNCAuaXRlbS1sYWJlbCBsYWJlbCxcbi5jb250ZW50LXBhcnQtY29sNCAuaXRlbS1sYWJlbCBzcGFuLm1hcmssXG4uY29udGVudC1wYXJ0LWNvbDQgLml0ZW0tbGFiZWwgaFxcOmRldGFpbHMsXG4uY29udGVudC1wYXJ0LWNvbDMgLml0ZW0tbGFiZWwgbGFiZWwsXG4uY29udGVudC1wYXJ0LWNvbDMgLml0ZW0tbGFiZWwgc3Bhbi5tYXJrLFxuLmNvbnRlbnQtcGFydC1jb2wzIC5pdGVtLWxhYmVsIGhcXDpkZXRhaWxzIHtcbiAgICBmbG9hdDogcmlnaHQ7XG59XG4jbWFpbiAuZm9ybS1sb2dpbiAuaXRlbS1sYWJlbCArIC5pdGVtLWRhdGEsXG4jbWFpbiAuZm9ybS1sb2dpbiAuaXRlbS1sYWJlbCB7XG4gICAgd2lkdGg6IDMwMHB4O1xufVxuI21haW4gLmZvcm0tbG9naW4gLml0ZW0tbGFiZWwgbGFiZWwge1xuICAgIGZsb2F0OiBub25lO1xuICAgIGNsZWFyOiBib3RoO1xufVxuI21haW4gLmZvcm0tbG9naW4gLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuI21haW4gLmZvcm0tbG9naW4gLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbiNtYWluIC5mb3JtLWxvZ2luIC5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xufVxuI21haW4gLmZvcm0tbG9naW4gLmZvcm0taXRlbSAuaXRlbS1sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbiNtYWluIC5mb3JtLWxvZ2luIGhcXDpvdXRwdXQuc3RhdHVzIHtcbiAgICB0b3A6IC0zM3B4O1xufVxuKitodG1sIC5jb250ZW50LXBhcnQtY29sMiAuaXRlbS1sYWJlbCBsYWJlbCBoXFw6ZGV0YWlscyxcbioraHRtbCAuY29udGVudC1wYXJ0LWNvbDQgLml0ZW0tbGFiZWwgaFxcOmRldGFpbHMge1xuICAgIGZsb2F0OiBub25lO1xufVxuLmNvbnRlbnQtcGFydC1jb2w0IC5sYWJlbC10b3AgbGFiZWwsXG4uY29udGVudC1wYXJ0LWNvbDQgLmxhYmVsLXRvcCBzcGFuLm1hcmssXG4uY29udGVudC1wYXJ0LWNvbDQgLmxhYmVsLXRvcCBoXFw6ZGV0YWlscyB7XG4gICAgZmxvYXQ6IGxlZnQ7XG59XG4uZm9ybS1sIC5pdGVtLWxhYmVsIGxhYmVsLFxuLmZvcm0tbCAuaXRlbS1sYWJlbCxcbi5mb3JtLWwgLml0ZW0tZGF0YSxcbi5mb3JtLWwgLmZvcm0taXRlbSBoXFw6ZGV0YWlscyxcbi5mb3JtLWwgLmZvcm0taXRlbSBoXFw6b3V0cHV0LFxuLmZvcm0tbCAuZm9ybS1pdGVtIHNwYW4ubWFyayB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzM3B4O1xuICAgIG1pbi1oZWlnaHQ6IDM0cHg7XG59XG4uZm9ybS1pdGVtIGhcXDpkZXRhaWxzIHtcbiAgICBjb2xvcjogIzZBNkE2QTtcbiAgICBmb250LXNpemU6IDExcHg7XG4gICAgbGluZS1oZWlnaHQ6IDIzcHg7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG4uZm9ybS1sIC5mb3JtLWl0ZW0gaFxcOmRldGFpbHMge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMzRweDtcbn1cbi5pdGVtLWxhYmVsIGhcXDpkZXRhaWxzLFxuLml0ZW0tZGF0YSBzcGFuLm1hcmsge1xuICAgIG1hcmdpbi1sZWZ0OiA1cHg7XG59XG4uaXRlbS1kYXRhIHNwYW4ubWFyayB7XG4gICAgbWFyZ2luLXJpZ2h0OiAtNXB4O1xufVxuaW5wdXRbdHlwZT1cInRleHRcIl0sXG5pbnB1dFt0eXBlPVwiZW1haWxcIl0sXG5pbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNCM0I4QzA7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJhY2tncm91bmQ6ICNGRkY7XG4gICAgY29sb3I6ICMyNjI2MjY7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBmb250LWZhbWlseTogVmVyZGFuYSxBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgbGluZS1oZWlnaHQ6IDE2cHg7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBwYWRkaW5nOiAycHggNnB4IDRweDtcbn1cbi5mb3JtLWwgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4uZm9ybS1sIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbi5mb3JtLWwgaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIHBhZGRpbmc6IDVweCA2cHggN3B4O1xufVxuLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbi5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0sXG4uaXRlbS1sYWJlbCArIC5pdGVtLWRhdGEgLnNlbGVjdC13cmFwcGVyLFxuLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIHRleHRhcmVhIHtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMiAuZm9ybS1pdGVtIGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuLmNvbnRlbnQtcGFydC1jb2wyIC5mb3JtLWl0ZW0gaW5wdXRbdHlwZT1cImVtYWlsXCJdLFxuLmNvbnRlbnQtcGFydC1jb2wyIC5mb3JtLWl0ZW0gaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdLFxuLmNvbnRlbnQtcGFydC1jb2wyIC5mb3JtLWl0ZW0gLnNlbGVjdC13cmFwcGVyLFxuLmNvbnRlbnQtcGFydC1jb2wyIC5mb3JtLWl0ZW0gdGV4dGFyZWEsXG4uY29udGVudC1wYXJ0LWNvbDMgLmZvcm0taXRlbSBpbnB1dFt0eXBlPVwidGV4dFwiXSxcbi5jb250ZW50LXBhcnQtY29sMyAuZm9ybS1pdGVtIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbi5jb250ZW50LXBhcnQtY29sMyAuZm9ybS1pdGVtIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcbi5jb250ZW50LXBhcnQtY29sMyAuZm9ybS1pdGVtIC5zZWxlY3Qtd3JhcHBlcixcbi5jb250ZW50LXBhcnQtY29sMyAuZm9ybS1pdGVtIHRleHRhcmVhLFxuLmxhYmVsLXRvcCArIC5pdGVtLWRhdGEgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4ubGFiZWwtdG9wICsgLml0ZW0tZGF0YSBpbnB1dFt0eXBlPVwiZW1haWxcIl0sXG4ubGFiZWwtdG9wICsgLml0ZW0tZGF0YSBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0sXG4ubGFiZWwtdG9wICsgLml0ZW0tZGF0YSAuc2VsZWN0LXdyYXBwZXIsXG4ubGFiZWwtdG9wICsgLml0ZW0tZGF0YSB0ZXh0YXJlYSB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uY29udGVudC1wYXJ0LWNvbDQgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4uY29udGVudC1wYXJ0LWNvbDQgaW5wdXRbdHlwZT1cImVtYWlsXCJdLFxuLmNvbnRlbnQtcGFydC1jb2w0IGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcbi5jb250ZW50LXBhcnQtY29sNCB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDQxNnB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2w0IHNlbGVjdCB7XG4gICAgd2lkdGg6IDQyOHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2w0IGlucHV0LmNpdHksXG4uY29udGVudC1wYXJ0LWNvbDQgaW5wdXQuc3RyZWV0TmFtZSB7XG4gICAgd2lkdGg6IDMxMXB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2w0IGlucHV0LnppcENvZGUsXG4uY29udGVudC1wYXJ0LWNvbDQgaW5wdXQuc3RyZWV0TnVtYmVyIHtcbiAgICB3aWR0aDogODFweDtcbn1cbi5jb250ZW50LXBhcnQtY29sNCBpbnB1dC5iaXJ0aERheSxcbi5jb250ZW50LXBhcnQtY29sNCBpbnB1dC5iaXJ0aE1vbnRoIHtcbiAgICB3aWR0aDogMThweDtcbn1cbi5jb250ZW50LXBhcnQtY29sNCBpbnB1dC5iaXJ0aFllYXIge1xuICAgIHdpZHRoOiAzOHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wzIGlucHV0W3R5cGU9XCJ0ZXh0XCJdLFxuLmNvbnRlbnQtcGFydC1jb2wzIGlucHV0W3R5cGU9XCJlbWFpbFwiXSxcbi5jb250ZW50LXBhcnQtY29sMyBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0sXG4uY29udGVudC1wYXJ0LWNvbDMgdGV4dGFyZWEge1xuICAgIHdpZHRoOiAyNTZweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMyBzZWxlY3Qge1xuICAgIHdpZHRoOiAyNjhweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMyBpbnB1dC5jaXR5LFxuLmNvbnRlbnQtcGFydC1jb2wzIGlucHV0LnN0cmVldE5hbWUge1xuICAgIHdpZHRoOiAyMDBweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMyBpbnB1dC56aXBDb2RlLFxuLmNvbnRlbnQtcGFydC1jb2wzIGlucHV0LnN0cmVldE51bWJlciB7XG4gICAgd2lkdGg6IDUzcHg7XG59XG4uY29udGVudC1wYXJ0LWNvbDIgaW5wdXRbdHlwZT1cInRleHRcIl0sXG4uY29udGVudC1wYXJ0LWNvbDIgaW5wdXRbdHlwZT1cImVtYWlsXCJdLFxuLmNvbnRlbnQtcGFydC1jb2wyIGlucHV0W3R5cGU9XCJwYXNzd29yZFwiXSxcbi5jb250ZW50LXBhcnQtY29sMiB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDI1NnB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wyIHNlbGVjdCB7XG4gICAgd2lkdGg6IDI2OHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wyIGlucHV0LmNpdHksXG4uY29udGVudC1wYXJ0LWNvbDIgaW5wdXQuc3RyZWV0TmFtZSB7XG4gICAgd2lkdGg6IDIwMHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wyIGlucHV0LnppcENvZGUsXG4uY29udGVudC1wYXJ0LWNvbDIgaW5wdXQuc3RyZWV0TnVtYmVyIHtcbiAgICB3aWR0aDogNTNweDtcbn1cbi5jb250ZW50LXBhcnQtY29sNCBpbnB1dFt0eXBlPVwidGV4dFwiXS5mdWxsd2lkdGgsXG4uY29udGVudC1wYXJ0LWNvbDQgaW5wdXRbdHlwZT1cImVtYWlsXCJdLmZ1bGx3aWR0aCxcbi5jb250ZW50LXBhcnQtY29sNCBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0uZnVsbHdpZHRoLFxuLmNvbnRlbnQtcGFydC1jb2w0IHRleHRhcmVhLmZ1bGx3aWR0aCB7XG4gICAgd2lkdGg6IDU3NnB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2w0IHNlbGVjdC5mdWxsd2lkdGgge1xuICAgIHdpZHRoOiA1ODhweDtcbn1cbnNlbGVjdC5hdXRvd2lkdGgge1xuICAgIHdpZHRoOiBhdXRvO1xufVxuLnNlbGVjdC13cmFwcGVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNCM0I4QzA7XG4gICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGNvbG9yOiAjMjYyNjI2O1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZm9ybS1sIC5zZWxlY3Qtd3JhcHBlciB7XG4gICAgaGVpZ2h0OiAzMnB4O1xufVxuLnNlbGVjdC13cmFwcGVyIHNlbGVjdCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAwIHNvbGlkO1xuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIC1tb3otYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICBjb2xvcjogIzI2MjYyNjtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGhlaWdodDogMThweDtcbiAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICBtYXJnaW46IDFweCAwO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgcGFkZGluZzogMCAzcHg7XG59XG4uZm9ybS1sIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3Qge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICBoZWlnaHQ6IDIxcHg7XG4gICAgbGluZS1oZWlnaHQ6IDIxcHg7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xufVxuc3Bhbi5zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uIHtcbiAgICBwYWRkaW5nOiAycHggNnB4IDJweCAycHg7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cbkAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKSB7XG4gICAgLmZvcm0tbCAuc2VsZWN0LXdyYXBwZXIgc2VsZWN0IHtcbiAgICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgIH1cbn1cbkBtZWRpYSBzY3JlZW4gYW5kICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCkge1xuICAgIC5zZWxlY3Qtd3JhcHBlciB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNFRUYwRjM7XG4gICAgfVxuICAgIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3Qge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRUVGMEYzO1xuICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4IDNweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgICAuZm9ybS1sIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3Qge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRUVGMEYzO1xuICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICAgICAgICBwYWRkaW5nOiAxcHggM3B4IDNweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbn1cbng6LW8tcHJlZm9jdXMsLnNlbGVjdC13cmFwcGVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGO1xufVxueDotby1wcmVmb2N1cywgLnNlbGVjdC13cmFwcGVyIHNlbGVjdCB7XG4gICAgbWFyZ2luOiAxcHggM3B4O1xuICAgIHdpZHRoOiA0MjJweDtcbn1cbng6LW8tcHJlZm9jdXMsIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3QuZnVsbHdpZHRoIHtcbiAgICB3aWR0aDogNTgycHg7XG59XG54Oi1vLXByZWZvY3VzLCAuc2VsZWN0LXdyYXBwZXIgc2VsZWN0LmF1dG93aWR0aCB7XG4gICAgd2lkdGg6IGF1dG87XG59XG54Oi1vLXByZWZvY3VzLCAuY29udGVudC1wYXJ0LWNvbDMgLnNlbGVjdC13cmFwcGVyIHNlbGVjdCxcbng6LW8tcHJlZm9jdXMsIC5jb250ZW50LXBhcnQtY29sMiAuc2VsZWN0LXdyYXBwZXIgc2VsZWN0IHtcbiAgICB3aWR0aDogMjYycHg7XG59XG4qK2h0bWwgLnNlbGVjdC13cmFwcGVyIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogMCBzb2xpZDtcbn1cbioraHRtbCAuc2VsZWN0LXdyYXBwZXIgc2VsZWN0LFxuKitodG1sIC5mb3JtLWwgLnNlbGVjdC13cmFwcGVyIHNlbGVjdCB7XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIG1hcmdpbjogMDtcbiAgICB3aWR0aDogNDMwcHg7XG59XG4qK2h0bWwgLmZvcm0tbCAuc2VsZWN0LXdyYXBwZXIgc2VsZWN0IHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG59XG4qK2h0bWwgLnNlbGVjdC13cmFwcGVyIHNlbGVjdC5mdWxsd2lkdGgge1xuICAgIHdpZHRoOiA1OTBweDtcbn1cbioraHRtbCAuc2VsZWN0LXdyYXBwZXIgc2VsZWN0LmF1dG93aWR0aCB7XG4gICAgd2lkdGg6IGF1dG87XG59XG4qK2h0bWwgLmNvbnRlbnQtcGFydC1jb2wzIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3QsXG4qK2h0bWwgLmNvbnRlbnQtcGFydC1jb2wyIC5zZWxlY3Qtd3JhcHBlciBzZWxlY3Qge1xuICAgIHdpZHRoOiAyNzBweDtcbn1cbnRleHRhcmVhIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjQjNCOEMwO1xuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiAjRkZGOyAgICBcbiAgICBjb2xvcjogIzI2MjYyNjtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1pbi1oZWlnaHQ6IDEwMHB4O1xuICAgIG92ZXJmbG93OiBhdXRvO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgcGFkZGluZzogMnB4IDZweCA0cHg7XG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xufVxuLmZvcm0tbCB0ZXh0YXJlYSB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGhlaWdodDogMjBweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBwYWRkaW5nOiA1cHggNnB4IDdweDtcbn1cbnRleHRhcmVhLm5vcmVzaXplIHtcbiAgICByZXNpemU6IG5vbmU7XG59XG50ZXh0YXJlYS52cmVzaXplIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xufVxuaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAjNkE2QTZBO1xufVxuaW5wdXQ6Zm9jdXM6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cbmlucHV0Oi1tb3otcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICM2QTZBNkE7XG59XG5pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogIzZBNkE2QTtcbn1cbmlucHV0Lmhhc0Vycm9yW3R5cGU9XCJ0ZXh0XCJdLFxuaW5wdXQuaGFzRXJyb3JbdHlwZT1cImVtYWlsXCJdLFxuaW5wdXQuaGFzRXJyb3JbdHlwZT1cInBhc3N3b3JkXCJdLFxudGV4dGFyZWEuaGFzRXJyb3Ige1xuICAgIGJhY2tncm91bmQ6ICNGOEVFRUUgbm9uZTtcbiAgICBib3JkZXItY29sb3I6ICNDMDAwMzA7XG4gICAgY29sb3I6ICNDMDAwMzA7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xufVxuLnNlbGVjdC13cmFwcGVyLmhhc0Vycm9yLHNlbGVjdC5oYXNFcnJvciB7XG4gICAgYm9yZGVyLWNvbG9yOiAjQzAwMDMwO1xuICAgIGNvbG9yOiAjQzAwMDMwO1xufVxubGFiZWwuaGFzRXJyb3IgaFxcOmRldGFpbHMsbGFiZWwuaGFzRXJyb3Ige1xuICAgIGNvbG9yOiAjQzAwMDMwO1xufVxuOi1tb3otdWktaW52YWxpZDpub3Qob3V0cHV0KSB7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbn1cbmlucHV0W3R5cGU9XCJ0ZXh0XCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cImVtYWlsXCJdOmZvY3VzLFxuaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdOmZvY3VzLFxuLnNlbGVjdC13cmFwcGVyLmZvY3VzLFxudGV4dGFyZWE6Zm9jdXMsXG5pbnB1dC5oYXNFcnJvclt0eXBlPVwidGV4dFwiXTpmb2N1cyxcbmlucHV0Lmhhc0Vycm9yW3R5cGU9XCJlbWFpbFwiXTpmb2N1cyxcbmlucHV0Lmhhc0Vycm9yW3R5cGU9XCJwYXNzd29yZFwiXTpmb2N1cyxcbi5zZWxlY3Qtd3JhcHBlci5oYXNFcnJvci5mb2N1cyxcbnRleHRhcmVhLmhhc0Vycm9yOmZvY3VzLFxuaW5wdXQuaXNWYWxpZFt0eXBlPVwidGV4dFwiXTpmb2N1cyxcbmlucHV0LmlzVmFsaWRbdHlwZT1cImVtYWlsXCJdOmZvY3VzLFxuaW5wdXQuaXNWYWxpZFt0eXBlPVwicGFzc3dvcmRcIl06Zm9jdXMsXG4uc2VsZWN0LXdyYXBwZXIuaXNWYWxpZC5mb2N1cyxcbnRleHRhcmVhLmlzVmFsaWQ6Zm9jdXMge1xuICAgIGJhY2tncm91bmQ6ICNGRkYgbm9uZTtcbiAgICBib3JkZXItY29sb3I6ICM5OUExQTc7XG4gICAgY29sb3I6ICMyNjI2MjY7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuc2VsZWN0OmZvY3VzLHNlbGVjdC5oYXNFcnJvcjpmb2N1cyxzZWxlY3QuaXNWYWxpZDpmb2N1cyB7XG4gICAgYmFja2dyb3VuZDogI0ZGRjtcbiAgICBjb2xvcjogIzI2MjYyNjtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG59XG5pbnB1dFtkaXNhYmxlZD1cImRpc2FibGVkXCJdLFxuaW5wdXQuaGFzRXJyb3JbZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXSxcbmlucHV0LmlzVmFsaWRbZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXSxcbi5zZWxlY3Qtd3JhcHBlcltkaXNhYmxlZD1cImRpc2FibGVkXCJdLFxuLnNlbGVjdC13cmFwcGVyLmhhc0Vycm9yW2Rpc2FibGVkPVwiZGlzYWJsZWRcIl0sXG4uc2VsZWN0LXdyYXBwZXIuaXNWYWxpZFtkaXNhYmxlZD1cImRpc2FibGVkXCJdLFxudGV4dGFyZWFbZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXSxcbnRleHRhcmVhLmhhc0Vycm9yW2Rpc2FibGVkPVwiZGlzYWJsZWRcIl0sXG50ZXh0YXJlYS5pc1ZhbGlkW2Rpc2FibGVkPVwiZGlzYWJsZWRcIl0sXG5zZWxlY3RbZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXSxcbnNlbGVjdC5oYXNFcnJvcltkaXNhYmxlZD1cImRpc2FibGVkXCJdLFxuc2VsZWN0LmlzVmFsaWRbZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXSxcbi5pc0Rpc2FibGVkIGxhYmVsLFxuLmlzRGlzYWJsZWQgaFxcOmRldGFpbHMsXG4uaXNEaXNhYmxlZCBoXFw6b3V0cHV0LFxuLmlzRGlzYWJsZWQgc3Bhbi5tYXJrLFxuLmlzRGlzYWJsZWQgcC5jaGFyLWNvdW50ZXIsbGFiZWwuaXNEaXNhYmxlZCxoXFw6ZGV0YWlscy5pc0Rpc2FibGVkLGhcXDpvdXRwdXQuaXNEaXNhYmxlZCxzcGFuLm1hcmsuaXNEaXNhYmxlZCxwLmNoYXItY291bnRlci5pc0Rpc2FibGVkIHtcbiAgICBjb2xvcjogIzk5OTtcbiAgICBib3JkZXItY29sb3I6ICNEN0Q5REU7XG59XG5kaXYuZm9ybS1jaGVja2JveC1lbGVtZW50LGRpdi5mb3JtLXJhZGlvLWVsZW1lbnQge1xuICAgIGNsZWFyOiBsZWZ0O1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAyNXB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cbi5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBkaXYuZm9ybS1jaGVja2JveC1lbGVtZW50LFxuLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIGRpdi5mb3JtLXJhZGlvLWVsZW1lbnQge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wyIC5mb3JtLWl0ZW0gZGl2LmZvcm0tY2hlY2tib3gtZWxlbWVudCxcbi5jb250ZW50LXBhcnQtY29sMiAuZm9ybS1pdGVtIGRpdi5mb3JtLXJhZGlvLWVsZW1lbnQsXG4ubGFiZWwtdG9wICsgLml0ZW0tZGF0YSBkaXYuZm9ybS1jaGVja2JveC1lbGVtZW50LFxuLmxhYmVsLXRvcCArIC5pdGVtLWRhdGEgZGl2LmZvcm0tcmFkaW8tZWxlbWVudCB7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG59XG4uZm9ybS1sIGRpdi5mb3JtLWNoZWNrYm94LWVsZW1lbnQsXG4uZm9ybS1sIGRpdi5mb3JtLXJhZGlvLWVsZW1lbnQsZGl2LmZvcm0tY2hlY2tib3gtZWxlbWVudC5zaXplLWwsZGl2LmZvcm0tcmFkaW8tZWxlbWVudC5zaXplLWwge1xuICAgIHBhZGRpbmctbGVmdDogMzRweDtcbn1cbmRpdi5mb3JtLWNoZWNrYm94LWVsZW1lbnQuc2l6ZS1zLGRpdi5mb3JtLXJhZGlvLWVsZW1lbnQuc2l6ZS1zIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7XG59XG4qK2h0bWwgZGl2LmZvcm0tY2hlY2tib3gtZWxlbWVudCxcbioraHRtbCBkaXYuZm9ybS1yYWRpby1lbGVtZW50IHtcbiAgICB6b29tOiAxO1xufVxuLmRhdGEtaG9yaXpvbnRhbCBkaXYuZm9ybS1jaGVja2JveC1lbGVtZW50LFxuLmRhdGEtaG9yaXpvbnRhbCBkaXYuZm9ybS1yYWRpby1lbGVtZW50IHtcbiAgICBjbGVhcjogbm9uZTtcbiAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7XG59XG5zcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlcixzcGFuLmZvcm0tcmFkaW8td3JhcHBlciB7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIHdpZHRoOiAyMHB4O1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiA0cHg7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG59XG4uZm9ybS1sIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyLFxuLmZvcm0tbCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlcixcbi5zaXplLWwgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIsXG4uc2l6ZS1sIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyIHtcbiAgICBoZWlnaHQ6IDM0cHg7XG4gICAgd2lkdGg6IDM0cHg7XG59XG4uc2l6ZS1zIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyLFxuLnNpemUtcyBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciB7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIHdpZHRoOiAyMHB4O1xufVxuLmZvcm0tbCAuc2l6ZS1zIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyLFxuLmZvcm0tbCAuc2l6ZS1zIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyIHtcbiAgICB0b3A6IDlweDtcbn1cbnNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbnNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGhlaWdodDogMTlweDtcbiAgICBtYXJnaW46IDA7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTlweDtcbiAgICB6LWluZGV4OiAtMTtcbn1cbi5mb3JtLWwgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuLmZvcm0tbCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0sXG4uc2l6ZS1sIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5zaXplLWwgc3Bhbi5mb3JtLXJhZGlvLXdyYXBwZXIgICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBoZWlnaHQ6IDI4cHg7XG4gICAgd2lkdGg6IDI4cHg7XG59XG4uc2l6ZS1zIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbi5zaXplLXMgc3Bhbi5mb3JtLXJhZGlvLXdyYXBwZXIgICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBoZWlnaHQ6IDE5cHg7XG4gICAgd2lkdGg6IDE5cHg7XG59XG4qK2h0bWwgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuKitodG1sIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDA7XG59XG5zcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Zm9jdXMsXG5zcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl06Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG5zcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0gKyBsYWJlbCxcbnNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXStsYWJlbCB7XG5cbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgaGVpZ2h0OiAxOXB4O1xuICAgIHdpZHRoOiAxOXB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHRvcDogMDtcbiAgICBtYXJnaW46IDA7XG59XG4uZm9ybS1sIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSArIGxhYmVsLFxuLmZvcm0tbCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0rbGFiZWwge1xuXG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIHdpZHRoOiAyOHB4O1xufVxuLnNpemUtcyBzcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0gKyBsYWJlbCxcbi5zaXplLXMgc3Bhbi5mb3JtLXJhZGlvLXdyYXBwZXIgICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdK2xhYmVsIHtcblxuICAgIGhlaWdodDogMTlweDtcbiAgICB3aWR0aDogMTlweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4ICAgIC03cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXStsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTdweCAgIC00N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCtsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ3cHggICAgLTdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4ICAgIC03cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDdweCAgIC00N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0rbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ3cHggICAtNDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4ICAgLTg3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpmb2N1cytsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTdweCAgIC04N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZDpmb2N1cytsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ3cHggICAtODdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdOmZvY3VzK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4ICAgLTg3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXTpjaGVja2VkOmZvY3VzK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDdweCAgIC04N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl06Zm9jdXMrbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ3cHggICAtODdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4IC0xNjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQrbGFiZWwge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQrbGFiZWw6aG92ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0xNjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdK2xhYmVsLmNoZWNrZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0xNjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtN3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQ6Zm9jdXMrbGFiZWwge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQ6Zm9jdXMrbGFiZWw6aG92ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmZvY3VzK2xhYmVsLmNoZWNrZWQ6aG92ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC00N3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmhhc0Vycm9yK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODdweCAgIC03cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXS5oYXNFcnJvcitsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTg3cHggIC00N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaGFzRXJyb3I6Y2hlY2tlZCtsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4ICAgLTdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmhhc0Vycm9yK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjdweCAgIC03cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXS5oYXNFcnJvcjpjaGVja2VkK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI3cHggIC00N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaGFzRXJyb3IrbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4ICAtNDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmhhc0Vycm9yOmZvY3VzK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODdweCAgLTg3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXS5oYXNFcnJvcjpmb2N1cytsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTg3cHggIC04N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaGFzRXJyb3I6Y2hlY2tlZDpmb2N1cytsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4ICAtODdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmhhc0Vycm9yOmZvY3VzK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjdweCAgLTg3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXS5oYXNFcnJvcjpjaGVja2VkOmZvY3VzK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI3cHggIC04N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaGFzRXJyb3I6Zm9jdXMrbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4ICAtODdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmhhc0Vycm9yK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODdweCAtMTI3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5oYXNFcnJvcitsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTg3cHggLTE2N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaGFzRXJyb3I6Y2hlY2tlZCtsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmhhc0Vycm9yK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjdweCAtMTI3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5oYXNFcnJvcjpjaGVja2VkK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI3cHggLTE2N3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaGFzRXJyb3IrbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4IC0xNjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmhhc0Vycm9yOmZvY3VzK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODdweCAtMjA3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5oYXNFcnJvcjpmb2N1cytsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTg3cHggLTIwN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaGFzRXJyb3I6Y2hlY2tlZDpmb2N1cytsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmhhc0Vycm9yOmZvY3VzK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjdweCAtMjA3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5oYXNFcnJvcjpjaGVja2VkOmZvY3VzK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI3cHggLTIwN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaGFzRXJyb3I6Zm9jdXMrbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyN3B4IC0yMDdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmlzRGlzYWJsZWQrbGFiZWwge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDdweCAgLTdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmlzRGlzYWJsZWQrbGFiZWw6aG92ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDdweCAgLTdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmlzRGlzYWJsZWQ6Y2hlY2tlZCtsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4ICAtN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaXNEaXNhYmxlZCtsYWJlbC5jaGVja2VkIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg3cHggIC03cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXS5pc0Rpc2FibGVkOmNoZWNrZWQrbGFiZWw6aG92ZXIge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yODdweCAgLTdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmlzRGlzYWJsZWQrbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4ICAtN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaXNEaXNhYmxlZDpmb2N1cytsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0N3B4ICAtN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaXNEaXNhYmxlZDpmb2N1cytsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0N3B4ICAtN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaXNEaXNhYmxlZDpjaGVja2VkOmZvY3VzK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg3cHggIC03cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJyYWRpb1wiXS5pc0Rpc2FibGVkOmZvY3VzK2xhYmVsLmNoZWNrZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yODdweCAgLTdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmlzRGlzYWJsZWQ6Y2hlY2tlZDpmb2N1cytsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4ICAtN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaXNEaXNhYmxlZDpmb2N1cytsYWJlbC5jaGVja2VkOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg3cHggIC03cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5pc0Rpc2FibGVkK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQ3cHggLTEyN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaXNEaXNhYmxlZCtsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0N3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmlzRGlzYWJsZWQ6Y2hlY2tlZCtsYWJlbCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmlzRGlzYWJsZWQrbGFiZWwuY2hlY2tlZCB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmlzRGlzYWJsZWQ6Y2hlY2tlZCtsYWJlbDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmlzRGlzYWJsZWQrbGFiZWwuY2hlY2tlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI4N3B4IC0xMjdweDtcbn1cbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmlzRGlzYWJsZWQ6Zm9jdXMrbGFiZWwge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0yNDdweCAtMTI3cHg7XG59XG5zcGFuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5pc0Rpc2FibGVkOmZvY3VzK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQ3cHggLTEyN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaXNEaXNhYmxlZDpjaGVja2VkOmZvY3VzK2xhYmVsIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg3cHggLTEyN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaXNEaXNhYmxlZDpmb2N1cytsYWJlbC5jaGVja2VkIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg3cHggLTEyN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaXNEaXNhYmxlZDpjaGVja2VkOmZvY3VzK2xhYmVsOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg3cHggLTEyN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0uaXNEaXNhYmxlZDpmb2N1cytsYWJlbC5jaGVja2VkOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjg3cHggLTEyN3B4O1xufVxuc3BhbiBpbnB1dFt0eXBlPVwicmFkaW9cIl0uaXNEaXNhYmxlZCxcbnNwYW4gaW5wdXRbdHlwZT1cInJhZGlvXCJdLmlzRGlzYWJsZWQgKyBsYWJlbCxcbnNwYW4gaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLmlzRGlzYWJsZWQsXG5zcGFuIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXS5pc0Rpc2FibGVkK2xhYmVsIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5zcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlcitsYWJlbCxzcGFuLmZvcm0tcmFkaW8td3JhcHBlcitsYWJlbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIG1pbi1oZWlnaHQ6IDIwcHg7XG4gICAgcGFkZGluZzogMnB4IDA7XG59XG4uZm9ybS1sIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyICsgbGFiZWwsXG4uZm9ybS1sIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgICsgbGFiZWwsXG4uc2l6ZS1sIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyICsgbGFiZWwsXG4uc2l6ZS1sIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgICsgbGFiZWwsXG4uZm9ybS1sIGRpdi5mb3JtLWNoZWNrYm94LWVsZW1lbnQuc2l6ZS1zICsgbGFiZWwsXG4uZm9ybS1sIGRpdi5mb3JtLXJhZGlvLWVsZW1lbnQuc2l6ZS1zK2xhYmVsIHtcbiAgICBsaW5lLWhlaWdodDogMjFweDtcbiAgICBtaW4taGVpZ2h0OiAyMXB4O1xuICAgIHBhZGRpbmc6IDZweCAwIDdweDtcbn1cbi5oYXNFcnJvciBzcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlciArIGxhYmVsLFxuLmhhc0Vycm9yIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyK2xhYmVsIHtcbiAgICBjb2xvcjogI0MwMDAzMDtcbn1cbmRpdi5mb3JtLWNoZWNrYm94LWVsZW1lbnR+cCxkaXYuZm9ybS1yYWRpby1lbGVtZW50fnAge1xuICAgIGNsZWFyOiBsZWZ0O1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICBwYWRkaW5nOiAwIDAgMCAyNXB4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0ycHg7XG59XG4uZm9ybS1sIGRpdi5mb3JtLWNoZWNrYm94LWVsZW1lbnQgfiBwLFxuLmZvcm0tbCBkaXYuZm9ybS1yYWRpby1lbGVtZW50fnAsZGl2LmZvcm0tY2hlY2tib3gtZWxlbWVudC5zaXplLWx+cCxkaXYuZm9ybS1yYWRpby1lbGVtZW50LnNpemUtbH5wIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIxcHg7XG4gICAgdG9wOiAtN3B4O1xuICAgIHBhZGRpbmc6IDAgMCAwIDM0cHg7XG59XG4qK2h0bWwgLml0ZW0tZGF0YS5kYXRhLWhvcml6b250YWwgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgKyBsYWJlbCxcbioraHRtbCAuaXRlbS1kYXRhLmRhdGEtaG9yaXpvbnRhbCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICArIGxhYmVsLFxuKitodG1sIC5mb3JtLWwgLml0ZW0tZGF0YS5kYXRhLWhvcml6b250YWwgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgKyBsYWJlbCxcbioraHRtbCAuZm9ybS1sIC5pdGVtLWRhdGEuZGF0YS1ob3Jpem9udGFsIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyK2xhYmVsIHtcbiAgICB3aWR0aDogYXV0bztcbn1cbioraHRtbCAuaXRlbS1kYXRhIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyICsgbGFiZWwsXG4qK2h0bWwgLml0ZW0tZGF0YSBzcGFuLmZvcm0tcmFkaW8td3JhcHBlcitsYWJlbCB7XG4gICAgd2lkdGg6IDQwNXB4O1xufVxuKitodG1sIC5mb3JtLWwgLml0ZW0tZGF0YSBzcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlciArIGxhYmVsLFxuKitodG1sIC5mb3JtLWwgLml0ZW0tZGF0YSBzcGFuLmZvcm0tcmFkaW8td3JhcHBlcitsYWJlbCB7XG4gICAgd2lkdGg6IDM5NnB4O1xufVxuc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIrbGFiZWwsc3Bhbi5mb3JtLXJhZGlvLXdyYXBwZXIrbGFiZWwge1xuICAgIGRpc3BsYXk6IGlubGluZVxcMDtcbiAgICBmbG9hdDogbGVmdFxcMDtcbn1cbjpyb290IHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyICsgbGFiZWwsXG46cm9vdCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlcitsYWJlbCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXFwwO1xuICAgIGZsb2F0OiBub25lXFwwO1xufVxuKitodG1sIC5qc0Rpc2FibGVkIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbioraHRtbCAuanNEaXNhYmxlZCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgZmlsdGVyOiBub25lO1xuICAgIHotaW5kZXg6IDE7XG59XG4qK2h0bWwgLmpzRGlzYWJsZWQgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdICsgbGFiZWwsXG4qK2h0bWwgLmpzRGlzYWJsZWQgc3Bhbi5mb3JtLXJhZGlvLXdyYXBwZXIgICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdK2xhYmVsIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuLmpzRGlzYWJsZWQgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuLmpzRGlzYWJsZWQgc3Bhbi5mb3JtLXJhZGlvLXdyYXBwZXIgICAgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBvcGFjaXR5OiAxXFwwO1xuICAgIGZpbHRlcjogbm9uZTtcbiAgICB6LWluZGV4OiAxXFwwO1xufVxuLmpzRGlzYWJsZWQgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdICsgbGFiZWwsXG4uanNEaXNhYmxlZCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPVwicmFkaW9cIl0rbGFiZWwge1xuICAgIGRpc3BsYXk6IG5vbmVcXDA7XG59XG46cm9vdCAuanNEaXNhYmxlZCBzcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG46cm9vdCAuanNEaXNhYmxlZCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0ge1xuICAgIG9wYWNpdHk6IDBcXDA7XG4gICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApXFwwO1xuICAgIHotaW5kZXg6IC0xXFwwO1xufVxuOnJvb3QgLmpzRGlzYWJsZWQgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdICsgbGFiZWwsXG46cm9vdCAuanNEaXNhYmxlZCBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0rbGFiZWwge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xcMDtcbn1cbmhcXDpvdXRwdXQuc3RhdHVzIHtcbiBcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbiAgICB3aWR0aDogMTZweDtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi5kYXRhLWhvcml6b250YWwgaFxcOm91dHB1dC5zdGF0dXMge1xuICAgIG1hcmdpbi1sZWZ0OiAtNXB4O1xufVxuLmZvcm0tbCBoXFw6b3V0cHV0LnN0YXR1cyB7XG4gICAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gICAgaGVpZ2h0OiAzNHB4O1xufVxuLmNvbnRlbnQtcGFydC1jb2wyIC5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBoXFw6b3V0cHV0LnN0YXR1cyB7XG4gICAgdG9wOiAtMjRweDtcbiAgICByaWdodDogMDtcbn1cbi5jb250ZW50LXBhcnQtY29sMiAuZm9ybS1sIC5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBoXFw6b3V0cHV0LnN0YXR1cyB7XG4gICAgdG9wOiAtMzRweDtcbn1cbmhcXDpvdXRwdXQuc3RhdHVzLmhhc0Vycm9yLFxuLmhhc0Vycm9yIGhcXDpvdXRwdXQuc3RhdHVzIHtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0yMzZweDtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG59XG4uZm9ybS1sIGhcXDpvdXRwdXQuc3RhdHVzLmhhc0Vycm9yLFxuLmZvcm0tbCAuaGFzRXJyb3IgaFxcOm91dHB1dC5zdGF0dXMge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIzMXB4O1xufVxuaFxcOm91dHB1dC5zdGF0dXMuaXNWYWxpZCxcbi5pc1ZhbGlkIGhcXDpvdXRwdXQuc3RhdHVzIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGRpc3BsYXk6IGlubGluZTtcbn1cbi5mb3JtLWwgaFxcOm91dHB1dC5zdGF0dXMuaXNWYWxpZCxcbi5mb3JtLWwgLmlzVmFsaWQgaFxcOm91dHB1dC5zdGF0dXMge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgOXB4O1xufVxuc3Bhbi5pbmZvIHtcblxuICAgIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICAgIGhlaWdodDogMzRweDtcbiAgICB3aWR0aDogMTZweDtcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWluZGVudDogLTk5OTlweDtcbn1cbi5oYXNFcnJvciBzcGFuLmluZm8ge1xuICAgIG1hcmdpbi1sZWZ0OiAyN3B4O1xufVxuaFxcOm91dHB1dC5mZWVkYmFjayB7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9XG5oXFw6b3V0cHV0LmZlZWRiYWNrLFxuLmZvcm0tbCBoXFw6b3V0cHV0LmZlZWRiYWNrIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQjMzQzNEO1xuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIC1tb3otYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogbm9uZTtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIG1pbi1oZWlnaHQ6IDIwcHg7XG4gICAgbWFyZ2luOiAtMzhweCAwIDAgMjBweDtcbiAgICBwYWRkaW5nOiA0cHggMTBweCA3cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIHotaW5kZXg6IDk5OTtcbn1cbi5mb3JtLWwgLnNpemUtcyBoXFw6b3V0cHV0LmZlZWRiYWNrIHtcbiAgICB0b3A6IDVweDtcbn1cbi5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBoXFw6b3V0cHV0LmZlZWRiYWNrIHtcbiAgICBtYXJnaW4tbGVmdDogMzBweDtcbn1cbi5jb250ZW50LXBhcnQtY29sMyAubGF5ZXItY29udGVudCAuaXRlbS1kYXRhIGhcXDpvdXRwdXQuZmVlZGJhY2ssXG4ubGFiZWwtdG9wICsgLml0ZW0tZGF0YSBoXFw6b3V0cHV0LmZlZWRiYWNrLFxuLmNvbnRlbnQtcGFydC1jb2wyIC5pdGVtLWRhdGEgaFxcOm91dHB1dC5mZWVkYmFjayB7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG59XG4uaXRlbS1kYXRhIHNlbGVjdCArIGhcXDpvdXRwdXQuZmVlZGJhY2ssXG4uaXRlbS1sYWJlbCArIC5pdGVtLWRhdGEgc2VsZWN0ICsgaFxcOm91dHB1dC5mZWVkYmFjayxcbi5jb250ZW50LXBhcnQtY29sMiBzZWxlY3QraFxcOm91dHB1dC5mZWVkYmFjayB7XG4gICAgbWFyZ2luLWxlZnQ6IDE5cHg7XG59XG4uaXRlbS1kYXRhIHNlbGVjdCtoXFw6b3V0cHV0LmZlZWRiYWNrIHtcbiAgICBtYXJnaW4tdG9wOiAtNDFweDtcbn1cbioraHRtbCAuaXRlbS1kYXRhIHNlbGVjdCtoXFw6b3V0cHV0LmZlZWRiYWNrIHtcbiAgICBtYXJnaW4tdG9wOiAtMzZweDtcbn1cbmhcXDpvdXRwdXQuZmVlZGJhY2sgcCB7XG4gICAgY29sb3I6ICNGRkY7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gICAgbWluLWhlaWdodDogMjBweDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuaFxcOm91dHB1dC5mZWVkYmFjayBzcGFuLm5vc2Uge1xuICAgIGJvcmRlci1jb2xvcjogI0IzM0MzRCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIGJvcmRlci13aWR0aDogNnB4O1xuICAgIGhlaWdodDogMDtcbiAgICBtYXJnaW46IDdweCAwIDAgM3B4O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMDtcbn1cbioraHRtbCBoXFw6b3V0cHV0LmZlZWRiYWNrIHtcbiAgICBsZWZ0OiAwO1xufVxuKitodG1sIGhcXDpvdXRwdXQuZmVlZGJhY2sgc3Bhbi5ub3NlIHtcbiAgICB0b3A6IDI0cHg7XG4gICAgbGVmdDogMTBweDtcbn1cbi5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBoXFw6b3V0cHV0LmZlZWRiYWNrLmZlZWRiYWNrLWNpdHkge1xuICAgIG1hcmdpbi1sZWZ0OiAxMzVweDtcbn1cbi5pdGVtLWxhYmVsICsgLml0ZW0tZGF0YSBoXFw6b3V0cHV0LmZlZWRiYWNrLmZlZWRiYWNrLXN0cmVldE51bWJlciB7XG4gICAgbWFyZ2luLWxlZnQ6IDM2NXB4O1xufVxuLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIGhcXDpvdXRwdXQuZmVlZGJhY2suZmVlZGJhY2stYmlydGhEYXkge1xuICAgIG1hcmdpbi1sZWZ0OiAxMHB4O1xufVxuLml0ZW0tbGFiZWwgKyAuaXRlbS1kYXRhIGhcXDpvdXRwdXQuZmVlZGJhY2suZmVlZGJhY2stYmlydGhNb250aCB7XG4gICAgbWFyZ2luLWxlZnQ6IDU3cHg7XG59XG4uaXRlbS1sYWJlbCArIC5pdGVtLWRhdGEgaFxcOm91dHB1dC5mZWVkYmFjay5mZWVkYmFjay1iaXJ0aFllYXIge1xuICAgIG1hcmdpbi1sZWZ0OiAxMDRweDtcbn1cbi5mb3JtLWxvZ2luIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDAgMjBweCAyMHB4IDA7XG4gICAgcGFkZGluZzogOXB4IDVweCAwIDE1cHg7XG59XG4uZm9ybS1sb2dpbiBmaWVsZHNldCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmZvcm0tbG9naW4gbGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGxpbmUtaGVpZ2h0OiAzM3B4O1xuICAgIG1pbi1oZWlnaHQ6IDM0cHg7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cbi5mb3JtLWxvZ2luIC5sb2dpbi11c2VybmFtZSxcbi5mb3JtLWxvZ2luIC5sb2dpbi1wYXNzd29yZCB7XG4gICAgY2xlYXI6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gICAgd2lkdGg6IDMwMHB4O1xufVxuLmZvcm0tbG9naW4gaW5wdXRbdHlwZT1cInRleHRcIl0sXG4uZm9ybS1sb2dpbiBpbnB1dFt0eXBlPVwiZW1haWxcIl0sXG4uZm9ybS1sb2dpbiBpbnB1dFt0eXBlPVwicGFzc3dvcmRcIl0ge1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgICB3aWR0aDogMjc2cHg7XG59XG4uZm9ybS1sb2dpbiBzcGFuIGEge1xuICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICBsaW5lLWhlaWdodDogMjBweDtcbn1cbi5mb3JtLWxvZ2luIC5sb2dpbi1zdWJtaXQge1xuICAgIGNsZWFyOiBib3RoO1xuICAgIGZsb2F0OiBub25lO1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbi5mb3JtLWxvZ2luIGhcXDpvdXRwdXQuc3RhdHVzIHtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDEwcHg7XG59XG4uZm9ybS1sb2dpbiAuZm9ybS1pdGVtPi5mZWVkYmFjayB7XG4gICAgdG9wOiAyNHB4O1xufVxuLmZvcm0tbG9naW4uZm9ybS1sIC5mb3JtLWl0ZW0+LmZlZWRiYWNrIHtcbiAgICB0b3A6IDM0cHg7XG59XG4ubG9naW4tYWdiIC5mb3JtLWNoZWNrYm94LWVsZW1lbnQgbGFiZWwge1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4ubG9naW4tYWdiIC5mb3JtLWNoZWNrYm94LWVsZW1lbnQuc2l6ZS1zLFxuLmxvZ2luLWFnYiAuZm9ybS1yYWRpby1lbGVtZW50LnNpemUtcyB7XG4gICAgcGFkZGluZy1yaWdodDogMjFweDtcbiAgICB3aWR0aDogNTQ0cHg7XG59XG4ubG9naW4tYWdiIC5mb3JtLWNoZWNrYm94LWVsZW1lbnQraFxcOm91dHB1dC5zdGF0dXMge1xuICAgIHJpZ2h0OiAwO1xufVxuLm9wZXJhLW1pbmkgLmJ0bi1tPioge1xuICAgIGZvbnQtc2l6ZTogMjAwJTtcbiAgICBmb250LXdlaWdodDogNDAwO1xufVxuLm9wZXJhLW1pbmkgLmJ0bi1zPioge1xuICAgIGZvbnQtc2l6ZTogMTUwJTtcbiAgICBmb250LXdlaWdodDogNDAwO1xufVxuLm9wZXJhLW1pbmkgLmJ0bi14cz4qIHtcbiAgICBmb250LXNpemU6IDEyNSU7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cbiNwYWdlLWZvb3RlciB7XG4gICAgY29sb3I6ICM1MTUxNTE7XG4gICAgZm9udDogMTNweC8yMHB4IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJhY2tncm91bmQ6ICNGM0YzRjM7XG59XG4jcGFnZS1mb290ZXIgYSB7XG4gICAgY29sb3I6ICM1MTUxNTE7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuI3BhZ2UtZm9vdGVyIGE6aG92ZXIsXG4jcGFnZS1mb290ZXIgYTpmb2N1cyB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cblxuI2Zvb3RlclNvY2lhbGJvb2ttYXJrcyBwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xuICAgIGxlZnQ6IDYzcHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMjZweDtcbn1cblxuI2Zvb3Rlck5hdmxpbmtzIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgcGFkZGluZy10b3A6IDE1cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cbiNmb290ZXJOYXZsaW5rcyBoXFw6bmF2IHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgZmxvYXQ6IGxlZnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgIHBhZGRpbmctdG9wOiAzM3B4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTQwcHg7XG59XG4jZm9vdGVyTmF2bGlua3MgaFxcOm5hdiBsaSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxvYXQ6IG5vbmU7XG59XG4jZm9vdGVyTmF2bGlua3MgaFxcOm5hdiBoNCxcbiNmb290ZXJOYXZsaW5rcyBoXFw6bmF2IC5oZWFkbGluZSB7XG4gICAgY29sb3I6ICM1MTUxNTE7XG4gICAgZm9udDogNDAwIDE4cHgvMjVweCAnUm9ib3RvTWVkJywgQXJpYWwsIFZlcmRhbmEsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICB0b3A6IDFweDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuI2Zvb3Rlck5hdmxpbmtzLnRocmVlQ29scyBoXFw6bmF2IHtcbiAgICB3aWR0aDogMTkzcHg7XG59XG4jZm9vdGVySWNvbnMge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIG1hcmdpbjogMTlweCAwIDEwcHg7XG59XG4jZm9vdGVySWNvbnMgbGkge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBtYXJnaW4tcmlnaHQ6IDhweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuI2Zvb3Rlckljb25zIGxpLmxhc3Qge1xuICAgIG1hcmdpbi1yaWdodDogMDtcbn1cbiNmb290ZXJJY29ucyBsaSBhLFxuI2Zvb3Rlckljb25zIGxpIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4jZm9vdGVyTWFpbmxpbmtzIHtcbiAgICBiYWNrZ3JvdW5kOiAjOTk5OTk5O1xuICAgIG1hcmdpbjogYXV0bztcbiAgICBoZWlnaHQ6IDYycHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgY2xlYXI6IGJvdGg7XG59XG4jZm9vdGVyTWFpbmxpbmtzIGEge1xuICAgIGNvbG9yOiAjRjNGM0YzO1xufVxuI2Zvb3RlckFkZGl0aW9uIH4gI2Zvb3Rlck1haW5saW5rcyB7XG4gICAgYmFja2dyb3VuZDogIzk5OTk5OTtcbn1cbiNmb290ZXJBZGRpdGlvbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbiNmb290ZXJNYWlubGlua3MgdWwge1xuICAgIHBhZGRpbmc6MjRweCAwIDI0cHggMzBweDtcbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXJnaW46IGF1dG8gMDtcbn1cbiNmb290ZXJNYWlubGlua3MgbGkge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBmbG9hdDogbGVmdDtcbiAgICBtYXJnaW4tcmlnaHQ6IDI0cHg7XG59XG4jZm9vdGVyTWFpbmxpbmtzIC5sYXN0IHtcbiAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLm5vYnIge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4uaGlkZV8zMjAsLmhpZGVfNDgwLC5oaWRlXzY4MCwuc2hvd18xMDAwIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uc2hvd18zMjAsLnNob3dfNDgwLC5zaG93XzY4MCwuaGlkZV8xMDAwLC5oaWRlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuLm5vdC12aXNpYmxlIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5ib2R5LnNpdGUtZ214IGEgICAgICAgICB7IGNvbG9yOiAjMjI2OUMzOyB9XG5ib2R5LnNpdGUtZ214IGE6aG92ZXIgICB7IGNvbG9yOiAjMjI2OUMzOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfVxuYm9keS5zaXRlLWdteCBhOnZpc2l0ZWQgeyBjb2xvcjogIzIyNjlDMzsgfVxuYm9keS5zaXRlLWdteCBhOmFjdGl2ZSAgeyBjb2xvcjogIzIyNjlDMzsgfVxuXG5ib2R5LnNpdGUtZ214LFxuYm9keS5zaXRlLWdteCAjd3JhcHBlciAgICAgIHsgYmFja2dyb3VuZC1jb2xvcjogI0UzRURGQTsgfVxuYm9keS5zaXRlLWdteCAjY29udGFpbmVyIHtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQzBDOUMzO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7XG59XG5cbmJvZHkuc2l0ZS1nbXggI2NvbnRhaW5lcixcblxuYm9keS5zaXRlLWdteCAuYnRuLWtleS5idG4tZGlzYWJsZWQgPiAqIHtcbiAgICBib3JkZXI6IDAgIWltcG9ydGFudDtcbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG59XG5ib2R5LnNpdGUtZ214LmpzRW5hYmxlZCAuYnRuLWtleS5idG4tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgLTE1MHB4O1xufVxuYm9keS5zaXRlLWdteC5qc0VuYWJsZWQgLmJ0bi1rZXkuYnRuLWRpc2FibGVkLmJ0bi1tLFxuYm9keS5zaXRlLWdteC5qc0VuYWJsZWQgLmJ0bi1rZXkuYnRuLWRpc2FibGVkLmJ0bi1tPioge1xuICAgXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTUwcHg7XG59XG5ib2R5LnNpdGUtZ214IC5idG4ta2V5LmJ0bi1kaXNhYmxlZDpob3ZlciA+ICogeyBjb2xvcjogI0ZGRkZGRjsgfVxuYm9keS5zaXRlLWdteCAuYnRuLWtleSA+IGlucHV0W25hbWU9XCJsb2dpblwiXSB7XG4gICAgY29sb3I6ICNGRkZGRkY7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6ICM2RTk4MDQ7XG59XG5ib2R5LnNpdGUtZ214IC5idG4ta2V5LmJ0bi1vdmVyID4gaW5wdXRbbmFtZT1cImxvZ2luXCJdIHtcbiAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogIzU4N0EwMztcbn1cbmJvZHkuc2l0ZS1nbXggLmJ0bi1rZXkuYnRuLXByZXNzZWQgPiBpbnB1dFtuYW1lPVwibG9naW5cIl0ge1xuICAgIGNvbG9yOiAjREJFN0Y1O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjNkU5ODA0O1xufVxuYm9keS5zaXRlLWdteCAuYnRuLWtleSA+ICoge1xuICAgIGNvbG9yOiAjRkZGRkZGO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiAjM0M4NEQwO1xufVxuYm9keS5zaXRlLWdteCAuYnRuLWtleS5idG4tb3Zlcj4qIHtcbiAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYmFja2dyb3VuZDogIzJBODJGMTtcbn1cbmJvZHkuc2l0ZS1nbXggLmJ0bi1rZXkuYnRuLXByZXNzZWQ+KiB7XG4gICAgY29sb3I6ICNEM0UyRjU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6ICMyOTdFRUI7XG59XG5cbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjgwcHgpIGFuZCAobWF4LXdpZHRoOiA5OTlweCkge1xuICAgICNjb250YWluZXIge1xuICAgICAgICBib3JkZXItdG9wOiBub25lO1xuICAgICAgICB3aWR0aDogNjgwcHg7XG4gICAgfVxuICAgICNwYWdlLWNvbnRlbnQge1xuICAgICAgICBwYWRkaW5nLXRvcDogMjBweDtcbiAgICAgICAgd2lkdGg6IDY4MHB4O1xuICAgIH1cbiAgICAuY29udGVudC1wYXJ0LWNvbDYsLmNvbnRlbnQtcGFydC1jb2w1IHtcbiAgICAgICAgd2lkdGg6IDY0MHB4O1xuICAgIH1cbiAgICAjZm9vdGVyT3B0aW9uYWwge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgICAjZm9vdGVyTmF2bGlua3Mge1xuICAgICAgICB3aWR0aDogNjQwcHg7XG4gICAgfVxuICAgICNmb290ZXJJY29ucyB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDE3cHg7XG4gICAgICAgIGZsb2F0OiBub25lO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG4gICAgI2Zvb3Rlck1haW5saW5rcyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcGFkZGluZzogMCAwIDIwcHggMDtcbiAgICB9XG4gICAgI2Zvb3Rlck1haW5saW5rcyB1bCB7XG4gICAgICAgIHdpZHRoOiA2MjBweDtcbiAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgIH1cbiAgICAjZm9vdGVyTWFpbmxpbmtzIGxpIHtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xuICAgIH1cbiAgICAuaGlkZV8zMjAsLmhpZGVfNDgwLC5zaG93XzY4MCwuaGlkZV8xMDAwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICAuc2hvd18zMjAsLnNob3dfNDgwLC5oaWRlXzY4MCwuc2hvd18xMDAwIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY3OXB4KSB7XG4gICAgI2NvbnRhaW5lciB7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgLW1vei1ib3gtc2hhZG93OiBub25lO1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICBib2R5LnNpdGUtZ214ICNjb250YWluZXIgeyB3aWR0aDogMTAwJTsgfVxuICAgICNwYWdlLWNvbnRlbnQge1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgICBtaW4td2lkdGg6IDMyMHB4O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7XG4gICAgfVxuICAgIGJvZHkuc2l0ZS1nbXggI3BhZ2UtY29udGVudCB7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH1cbiAgICAuY29udGVudC1wYXJ0LWNvbDYsLmNvbnRlbnQtcGFydC1jb2w1LC5jb250ZW50LXBhcnQtY29sNCB7XG4gICAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgICAjcGFnZS1oZWFkZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjRkZEMzMyO1xuICAgICAgICBoZWlnaHQ6IDMzcHg7XG4gICAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC0zMHB4O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgei1pbmRleDogMTAwMDtcbiAgICB9XG4gICAgYm9keS5zaXRlLWdteCAjcGFnZS1oZWFkZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMUM0NDlCICBuby1yZXBlYXQgc2Nyb2xsIDUwJSA1MCU7XG4gICAgICAgIGhlaWdodDogMzNweDtcbiAgICAgICAgbWFyZ2luOiAwIDAgMTdweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDA7XG4gICAgfVxuXG4gICAgI3BhZ2UtaGVhZGVyLmhlYWRlci1zaW1wbGUge1xuICAgICAgICBib3JkZXItYm90dG9tOiAwIHNvbGlkO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxN3B4O1xuICAgIH1cbiAgICAjaGVhZGVyLWJyYW5kIHtcbiAgICAgICAgYmFja2dyb3VuZDogIG5vLXJlcGVhdCAwIDA7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMTVweDtcbiAgICAgICAgaGVpZ2h0OiAzM3B4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgYm9keS5zaXRlLWdteCAjaGVhZGVyLWJyYW5kIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI2hlYWRlci1zZXJ2aWNlIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG4gICAgI2Zvb3Rlck9wdGlvbmFsIHtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgIH1cbiAgICAjZm9vdGVyU29jaWFsYm9va21hcmtzIHtcbiAgICAgICAgd2lkdGg6IDMyMHB4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTVweDtcbiAgICB9XG4gICAgI2Zvb3RlclNvY2lhbGJvb2ttYXJrcyBsaSB7XG4gICAgICAgIGNsZWFyOiBib3RoO1xuICAgICAgICBkaXNwbGF5OiBsaXN0LWl0ZW07XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICB9XG4gICAgI2Zvb3Rlck5hdmxpbmtzIHtcbiAgICAgICAgd2lkdGg6IDMyMHB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogNnB4O1xuICAgIH1cbiAgICAjZm9vdGVyTmF2bGlua3MgaFxcOm5hdjpudGgtY2hpbGQoM24rMykge1xuICAgICAgICBjbGVhcjogYm90aDtcbiAgICB9XG4gICAgI2Zvb3Rlck5hdmxpbmtzIGhcXDpuYXYge1xuICAgICAgICBwYWRkaW5nLXRvcDogNDBweDtcbiAgICB9XG4gICAgI2Zvb3Rlck5hdmxpbmtzIGhcXDpuYXYgaDQsXG4gICAgI2Zvb3Rlck5hdmxpbmtzIGhcXDpuYXYgLmhlYWRsaW5lIHtcbiAgICAgICAgdG9wOiAxMXB4O1xuICAgIH1cbiAgICAjZm9vdGVyTmF2bGlua3MudGhyZWVDb2xzIGhcXDpuYXYge1xuICAgICAgICB3aWR0aDogMTQwcHg7XG4gICAgfVxuICAgICNmb290ZXJNYWlubGlua3Mge1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcGFkZGluZzogMCAwIDIwcHg7XG4gICAgfVxuICAgICNmb290ZXJNYWlubGlua3MgdWwge1xuICAgICAgICB3aWR0aDogMzIwcHg7XG4gICAgICAgIG1hcmdpbjogYXV0bztcbiAgICB9XG4gICAgXG4gICAgLnNob3dfMzIwLC5oaWRlXzQ4MCwuaGlkZV82ODAsLmhpZGVfMTAwMCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB9XG4gICAgLmhpZGVfMzIwLC5zaG93XzQ4MCwuc2hvd182ODAsLnNob3dfMTAwMCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIC5oaW50LFxuICAgIGJvZHkuc2l0ZS1nbXggLmhpbnQge1xuICAgICAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMjVweDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgIH1cbiAgICBkaXYuZm9ybS1jaGVja2JveC1lbGVtZW50LnNpemUtcyxkaXYuZm9ybS1yYWRpby1lbGVtZW50LnNpemUtcyB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMzRweDtcbiAgICB9XG4gICAgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIsXG4gICAgc3Bhbi5mb3JtLXJhZGlvLXdyYXBwZXIsXG4gICAgLnNpemUtcyBzcGFuLmZvcm0tY2hlY2tib3gtd3JhcHBlcixcbiAgICAuc2l6ZS1zIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyIHtcbiAgICAgICAgaGVpZ2h0OiAzNHB4O1xuICAgICAgICB3aWR0aDogMzRweDtcbiAgICB9XG4gICAgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdLFxuICAgIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSxcbiAgICAuc2l6ZS1zIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSxcbiAgICAuc2l6ZS1zIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSB7XG4gICAgICAgIGhlaWdodDogMjhweDtcbiAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgfVxuICAgIHNwYW4uZm9ybS1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSArIGxhYmVsLFxuICAgIHNwYW4uZm9ybS1yYWRpby13cmFwcGVyICAgIGlucHV0W3R5cGU9XCJyYWRpb1wiXSAgICArIGxhYmVsLFxuICAgIC5zaXplLXMgc3Bhbi5mb3JtLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdICsgbGFiZWwsXG4gICAgLnNpemUtcyBzcGFuLmZvcm0tcmFkaW8td3JhcHBlciAgICBpbnB1dFt0eXBlPVwicmFkaW9cIl0rbGFiZWwge1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiA7XG4gICAgICAgIGhlaWdodDogMjhweDtcbiAgICAgICAgd2lkdGg6IDI4cHg7XG4gICAgfVxuICAgIC5mb3JtLWxvZ2luIHtcbiAgICAgICAgbWFyZ2luOiAtMTVweCAwIDA7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDI3MHB4O1xuICAgIH1cbiAgICAuY29udGVudC1wYXJ0LWNvbDQgLmZvcm0taXRlbSxcbiAgICAuY29udGVudC1wYXJ0LWNvbDQgLml0ZW0tZGF0YSxcbiAgICAuZm9ybS1sb2dpbiAubG9naW4tc3VibWl0IHtcbiAgICAgICAgd2lkdGg6IDI3MHB4O1xuICAgIH1cbiAgICAuZm9ybS1sb2dpbiAubG9naW4tdXNlcm5hbWUsXG4gICAgLmZvcm0tbG9naW4gLmxvZ2luLXBhc3N3b3JkIHtcbiAgICAgICAgd2lkdGg6IDI3MHB4O1xuICAgIH1cbiAgICAuZm9ybS1sb2dpbiBpbnB1dFt0eXBlPVwidGV4dFwiXSxcbiAgICAuZm9ybS1sb2dpbiBpbnB1dFt0eXBlPVwiZW1haWxcIl0sXG4gICAgLmZvcm0tbG9naW4gaW5wdXRbdHlwZT1cInBhc3N3b3JkXCJdIHtcbiAgICAgICAgd2lkdGg6IDI1NnB4O1xuICAgIH1cbiAgICAjbWFpbiAuZm9ybS1sb2dpbiAuaXRlbS1sYWJlbCArIC5pdGVtLWRhdGEsXG4gICAgI21haW4gLmZvcm0tbG9naW4gLml0ZW0tbGFiZWwge1xuICAgICAgICB3aWR0aDogMjcwcHg7XG4gICAgfVxuICAgIC5sb2dpbi1jb250YWluZXIgaDEge1xuICAgICAgICBtYXJnaW4tbGVmdDogLTE1cHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogLTVweDtcbiAgICAgICAgZm9udC1zaXplOiAyMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMjhweDtcbiAgICB9XG4gICAgLmxvZ2luLWNvbnRhaW5lciBoMiB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMTVweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNXB4O1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAyMXB4O1xuICAgIH1cbiAgICAuZm9ybS1sb2dpbiAubG9naW4tc3VibWl0IHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwO1xuICAgIH1cbiAgICAuZm9ybS1sb2dpbiBoXFw6b3V0cHV0LnN0YXR1cyB7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgIH1cbiAgICAubG9naW4tYWdiIC5mb3JtLWNoZWNrYm94LWVsZW1lbnQuc2l6ZS1zLFxuICAgIC5sb2dpbi1hZ2IgLmZvcm0tcmFkaW8tZWxlbWVudC5zaXplLXMge1xuICAgICAgICB3aWR0aDogMjE1cHg7XG4gICAgfVxufVxuI2FkQmxvY2sgeyBtYXJnaW4tcmlnaHQ6IDQwcHg7IH1cbiNhZEJsb2NrIGlmcmFtZSB7IG1hcmdpbjogMCBhdXRvOyB6LWluZGV4OiA5OTk5OyB9XG4ifSwgImhlYWRlcnNTaXplIjogMjY0LCAiYm9keVNpemUiOiA2NzU0MCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogNjc4MDR9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDAuMDA4LCAiY29ubmVjdCI6IDcuMzQzLCAic3NsIjogOS4zODYsICJzZW5kIjogMCwgIndhaXQiOiAxMy40MDYsICJyZWNlaXZlIjogMTUuOTAxfSwgInBhZ2VyZWYiOiAicGFnZUA2Y2Q4Zjc5ZGYyYThhYjAwYmRhYTBkZDQ5ZDdiOGRmZSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzIwMDE6OGQ4OjEwMGY6ZjAwMDo6MmQzXSIsICJfc2VydmVyUG9ydCI6IDgwLCAiX3NlY3VyaXR5RGV0YWlscyI6IHt9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNlQwNToxMDoxMi4zNjBaIiwgInRpbWUiOiA2MC4wOTQsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwOi8vam9yYW1lZGlhLmRlL01vYmlsZSUyMExvZ2luX2ZpbGVzL2xvZ2luLWFkYXB0aXZlLmpzLmRvd25sb2FkIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogIkFjY2VwdC1FbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkhvc3QiLCAidmFsdWUiOiAiam9yYW1lZGlhLmRlIn0sIHsibmFtZSI6ICJSZWZlcmVyIiwgInZhbHVlIjogImh0dHA6Ly9qb3JhbWVkaWEuZGUvaW5kZXgyLmh0bWwifSwgeyJuYW1lIjogIlVzZXItQWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDMyMywgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICJPSyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQtUmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkNvbnRlbnQtTGVuZ3RoIiwgInZhbHVlIjogIjI4MjcxOCJ9LCB7Im5hbWUiOiAiQ29udGVudC1UeXBlIiwgInZhbHVlIjogInRleHQvamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiRGF0ZSIsICJ2YWx1ZSI6ICJGcmksIDI2IE1heSAyMDIzIDA1OjEwOjEyIEdNVCJ9LCB7Im5hbWUiOiAiRVRhZyIsICJ2YWx1ZSI6ICJcIjQ1MDVlLTU5OGNlZDNmMDllODBcIiJ9LCB7Im5hbWUiOiAiS2VlcC1BbGl2ZSIsICJ2YWx1ZSI6ICJ0aW1lb3V0PTE1In0sIHsibmFtZSI6ICJMYXN0LU1vZGlmaWVkIiwgInZhbHVlIjogIlR1ZSwgMDMgRGVjIDIwMTkgMTY6MDI6NTAgR01UIn0sIHsibmFtZSI6ICJTZXJ2ZXIiLCAidmFsdWUiOiAiQXBhY2hlIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDI4MjcxOCwgIm1pbWVUeXBlIjogInRleHQvamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogIihmdW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7XG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsXG4gICAgbmF2aWdhdG9yID0gd2luZG93Lm5hdmlnYXRvcixcbiAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbnZhciBqUXVlcnkgPSAoZnVuY3Rpb24oKSB7XG52YXIgalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuICAgICAgICByZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApO1xuICAgIH0sXG4gICAgX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG4gICAgXyQgPSB3aW5kb3cuJCxcbiAgICByb290alF1ZXJ5LFxuICAgIHF1aWNrRXhwciA9IC9eKD86W14jPF0qKDxbXFx3XFxXXSs+KVtePl0qJHwjKFtcXHdcXC1dKikkKS8sXG4gICAgcm5vdHdoaXRlID0gL1xcUy8sXG4gICAgdHJpbUxlZnQgPSAvXlxccysvLFxuICAgIHRyaW1SaWdodCA9IC9cXHMrJC8sXG4gICAgcnNpbmdsZVRhZyA9IC9ePChcXHcrKVxccypcXC8/Pig/OjxcXC9cXDE+KT8kLyxcbiAgICBydmFsaWRjaGFycyA9IC9eW1xcXSw6e31cXHNdKiQvLFxuICAgIHJ2YWxpZGVzY2FwZSA9IC9cXFxcKD86W1wiXFxcXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2csXG4gICAgcnZhbGlkdG9rZW5zID0gL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPy9nLFxuICAgIHJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpcXHMqXFxbKSsvZyxcbiAgICByd2Via2l0ID0gLyh3ZWJraXQpWyBcXC9dKFtcXHcuXSspLyxcbiAgICByb3BlcmEgPSAvKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcXC9dKFtcXHcuXSspLyxcbiAgICBybXNpZSA9IC8obXNpZSkgKFtcXHcuXSspLyxcbiAgICBybW96aWxsYSA9IC8obW96aWxsYSkoPzouKj8gcnY6KFtcXHcuXSspKT8vLFxuICAgIHJkYXNoQWxwaGEgPSAvLShbYS16XXxbMC05XSkvaWcsXG4gICAgcm1zUHJlZml4ID0gL14tbXMtLyxcbiAgICBmY2FtZWxDYXNlID0gZnVuY3Rpb24oIGFsbCwgbGV0dGVyICkge1xuICAgICAgICByZXR1cm4gKCBsZXR0ZXIgKyBcIlwiICkudG9VcHBlckNhc2UoKTtcbiAgICB9LFxuICAgIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgYnJvd3Nlck1hdGNoLFxuICAgIHJlYWR5TGlzdCxcbiAgICBET01Db250ZW50TG9hZGVkLFxuICAgIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxcbiAgICBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFxuICAgIHB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaCxcbiAgICBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZSxcbiAgICB0cmltID0gU3RyaW5nLnByb3RvdHlwZS50cmltLFxuICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZixcbiAgICBjbGFzczJ0eXBlID0ge307XG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBqUXVlcnksXG4gICAgaW5pdDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICkge1xuICAgICAgICB2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jO1xuICAgICAgICBpZiAoICFzZWxlY3RvciApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzWzBdID0gc2VsZWN0b3I7XG4gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHNlbGVjdG9yID09PSBcImJvZHlcIiAmJiAhY29udGV4dCAmJiBkb2N1bWVudC5ib2R5ICkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gZG9jdW1lbnQ7XG4gICAgICAgICAgICB0aGlzWzBdID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgaWYgKCBzZWxlY3Rvci5jaGFyQXQoMCkgPT09IFwiPFwiICYmIHNlbGVjdG9yLmNoYXJBdCggc2VsZWN0b3IubGVuZ3RoIC0gMSApID09PSBcIj5cIiAmJiBzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggbWF0Y2ggJiYgKG1hdGNoWzFdIHx8ICFjb250ZXh0KSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIG1hdGNoWzFdICkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbMF0gOiBjb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICBkb2MgPSAoIGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50ICk7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IHJzaW5nbGVUYWcuZXhlYyggc2VsZWN0b3IgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBbIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIHJldFsxXSApIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmZuLmF0dHIuY2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBbIGRvYy5jcmVhdGVFbGVtZW50KCByZXRbMV0gKSBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0galF1ZXJ5LmJ1aWxkRnJhZ21lbnQoIFsgbWF0Y2hbMV0gXSwgWyBkb2MgXSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSAoIHJldC5jYWNoZWFibGUgPyBqUXVlcnkuY2xvbmUocmV0LmZyYWdtZW50KSA6IHJldC5mcmFnbWVudCApLmNoaWxkTm9kZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5tZXJnZSggdGhpcywgc2VsZWN0b3IgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWzJdICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uaWQgIT09IG1hdGNoWzJdICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290alF1ZXJ5LmZpbmQoIHNlbGVjdG9yICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzWzBdID0gZWxlbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBkb2N1bWVudDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCBjb250ZXh0IHx8IHJvb3RqUXVlcnkgKS5maW5kKCBzZWxlY3RvciApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuICAgICAgICAgICAgcmV0dXJuIHJvb3RqUXVlcnkucmVhZHkoIHNlbGVjdG9yICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gc2VsZWN0b3IuY29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcbiAgICB9LFxuICAgIHNlbGVjdG9yOiBcIlwiLFxuICAgIGpxdWVyeTogXCIxLjcuMlwiLFxuICAgIGxlbmd0aDogMCxcbiAgICBzaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVuZ3RoO1xuICAgIH0sXG4gICAgdG9BcnJheTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzbGljZS5jYWxsKCB0aGlzLCAwICk7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG4gICAgICAgIHJldHVybiBudW0gPT0gbnVsbCA/XG4gICAgICAgICAgICB0aGlzLnRvQXJyYXkoKSA6XG4gICAgICAgICAgICAoIG51bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTtcbiAgICB9LFxuICAgIHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zLCBuYW1lLCBzZWxlY3RvciApIHtcbiAgICAgICAgdmFyIHJldCA9IHRoaXMuY29uc3RydWN0b3IoKTtcbiAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggZWxlbXMgKSApIHtcbiAgICAgICAgICAgIHB1c2guYXBwbHkoIHJldCwgZWxlbXMgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggcmV0LCBlbGVtcyApO1xuICAgICAgICB9XG4gICAgICAgIHJldC5wcmV2T2JqZWN0ID0gdGhpcztcbiAgICAgICAgcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGlmICggbmFtZSA9PT0gXCJmaW5kXCIgKSB7XG4gICAgICAgICAgICByZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgKCB0aGlzLnNlbGVjdG9yID8gXCIgXCIgOiBcIlwiICkgKyBzZWxlY3RvcjtcbiAgICAgICAgfSBlbHNlIGlmICggbmFtZSApIHtcbiAgICAgICAgICAgIHJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyBcIi5cIiArIG5hbWUgKyBcIihcIiArIHNlbGVjdG9yICsgXCIpXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjaywgYXJncyApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjaywgYXJncyApO1xuICAgIH0sXG4gICAgcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHtcbiAgICAgICAgalF1ZXJ5LmJpbmRSZWFkeSgpO1xuICAgICAgICByZWFkeUxpc3QuYWRkKCBmbiApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVxOiBmdW5jdGlvbiggaSApIHtcbiAgICAgICAgaSA9ICtpO1xuICAgICAgICByZXR1cm4gaSA9PT0gLTEgP1xuICAgICAgICAgICAgdGhpcy5zbGljZSggaSApIDpcbiAgICAgICAgICAgIHRoaXMuc2xpY2UoIGksIGkgKyAxICk7XG4gICAgfSxcbiAgICBmaXJzdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVxKCAwICk7XG4gICAgfSxcbiAgICBsYXN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXEoIC0xICk7XG4gICAgfSxcbiAgICBzbGljZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLFxuICAgICAgICAgICAgXCJzbGljZVwiLCBzbGljZS5jYWxsKGFyZ3VtZW50cykuam9pbihcIixcIikgKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAodGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuICAgICAgICB9KSk7XG4gICAgfSxcbiAgICBlbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7XG4gICAgfSxcbiAgICBwdXNoOiBwdXNoLFxuICAgIHNvcnQ6IFtdLnNvcnQsXG4gICAgc3BsaWNlOiBbXS5zcGxpY2Vcbn07XG5qUXVlcnkuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcbiAgICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LFxuICAgICAgICBpID0gMSxcbiAgICAgICAgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgZGVlcCA9IGZhbHNlO1xuICAgIGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG4gICAgICAgIGRlZXAgPSB0YXJnZXQ7XG4gICAgICAgIHRhcmdldCA9IGFyZ3VtZW50c1sxXSB8fCB7fTtcbiAgICAgICAgaSA9IDI7XG4gICAgfVxuICAgIGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhalF1ZXJ5LmlzRnVuY3Rpb24odGFyZ2V0KSApIHtcbiAgICAgICAgdGFyZ2V0ID0ge307XG4gICAgfVxuICAgIGlmICggbGVuZ3RoID09PSBpICkge1xuICAgICAgICB0YXJnZXQgPSB0aGlzO1xuICAgICAgICAtLWk7XG4gICAgfVxuICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuICAgICAgICBpZiAoIChvcHRpb25zID0gYXJndW1lbnRzWyBpIF0pICE9IG51bGwgKSB7XG4gICAgICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG4gICAgICAgICAgICAgICAgc3JjID0gdGFyZ2V0WyBuYW1lIF07XG4gICAgICAgICAgICAgICAgY29weSA9IG9wdGlvbnNbIG5hbWUgXTtcbiAgICAgICAgICAgICAgICBpZiAoIHRhcmdldCA9PT0gY29weSApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY29weUlzQXJyYXkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3Qoc3JjKSA/IHNyYyA6IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFsgbmFtZSBdID0gY29weTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG5qUXVlcnkuZXh0ZW5kKHtcbiAgICBub0NvbmZsaWN0OiBmdW5jdGlvbiggZGVlcCApIHtcbiAgICAgICAgaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuICAgICAgICAgICAgd2luZG93LiQgPSBfJDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuICAgICAgICAgICAgd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpRdWVyeTtcbiAgICB9LFxuICAgIGlzUmVhZHk6IGZhbHNlLFxuICAgIHJlYWR5V2FpdDogMSxcbiAgICBob2xkUmVhZHk6IGZ1bmN0aW9uKCBob2xkICkge1xuICAgICAgICBpZiAoIGhvbGQgKSB7XG4gICAgICAgICAgICBqUXVlcnkucmVhZHlXYWl0Kys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBqUXVlcnkucmVhZHkoIHRydWUgKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuICAgICAgICBpZiAoICh3YWl0ID09PSB0cnVlICYmICEtLWpRdWVyeS5yZWFkeVdhaXQpIHx8ICh3YWl0ICE9PSB0cnVlICYmICFqUXVlcnkuaXNSZWFkeSkgKSB7XG4gICAgICAgICAgICBpZiAoICFkb2N1bWVudC5ib2R5ICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWR5TGlzdC5maXJlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcbiAgICAgICAgICAgIGlmICggalF1ZXJ5LmZuLnRyaWdnZXIgKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoIFwicmVhZHlcIiApLm9mZiggXCJyZWFkeVwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGJpbmRSZWFkeTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICggcmVhZHlMaXN0ICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlYWR5TGlzdCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApO1xuICAgICAgICBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiApIHtcbiAgICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgRE9NQ29udGVudExvYWRlZCwgZmFsc2UgKTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgalF1ZXJ5LnJlYWR5LCBmYWxzZSApO1xuICAgICAgICB9IGVsc2UgaWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLCBET01Db250ZW50TG9hZGVkICk7XG4gICAgICAgICAgICB3aW5kb3cuYXR0YWNoRXZlbnQoIFwib25sb2FkXCIsIGpRdWVyeS5yZWFkeSApO1xuICAgICAgICAgICAgdmFyIHRvcGxldmVsID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRvcGxldmVsID0gd2luZG93LmZyYW1lRWxlbWVudCA9PSBudWxsO1xuICAgICAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgICAgICAgaWYgKCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgJiYgdG9wbGV2ZWwgKSB7XG4gICAgICAgICAgICAgICAgZG9TY3JvbGxDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkge1xuICAgICAgICByZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gXCJmdW5jdGlvblwiO1xuICAgIH0sXG4gICAgaXNBcnJheTogQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiggb2JqICkge1xuICAgICAgICByZXR1cm4galF1ZXJ5LnR5cGUob2JqKSA9PT0gXCJhcnJheVwiO1xuICAgIH0sXG4gICAgaXNXaW5kb3c6IGZ1bmN0aW9uKCBvYmogKSB7XG4gICAgICAgIHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT0gb2JqLndpbmRvdztcbiAgICB9LFxuICAgIGlzTnVtZXJpYzogZnVuY3Rpb24oIG9iaiApIHtcbiAgICAgICAgcmV0dXJuICFpc05hTiggcGFyc2VGbG9hdChvYmopICkgJiYgaXNGaW5pdGUoIG9iaiApO1xuICAgIH0sXG4gICAgdHlwZTogZnVuY3Rpb24oIG9iaiApIHtcbiAgICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID9cbiAgICAgICAgICAgIFN0cmluZyggb2JqICkgOlxuICAgICAgICAgICAgY2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbChvYmopIF0gfHwgXCJvYmplY3RcIjtcbiAgICB9LFxuICAgIGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG4gICAgICAgIGlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSBcIm9iamVjdFwiIHx8IG9iai5ub2RlVHlwZSB8fCBqUXVlcnkuaXNXaW5kb3coIG9iaiApICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIG9iai5jb25zdHJ1Y3RvciAmJlxuICAgICAgICAgICAgICAgICFoYXNPd24uY2FsbChvYmosIFwiY29uc3RydWN0b3JcIikgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgXCJpc1Byb3RvdHlwZU9mXCIpICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoIGUgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yICgga2V5IGluIG9iaiApIHt9XG4gICAgICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBoYXNPd24uY2FsbCggb2JqLCBrZXkgKTtcbiAgICB9LFxuICAgIGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG4gICAgICAgIGZvciAoIHZhciBuYW1lIGluIG9iaiApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuICAgIH0sXG4gICAgcGFyc2VKU09OOiBmdW5jdGlvbiggZGF0YSApIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiB8fCAhZGF0YSApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSApO1xuICAgICAgICBpZiAoIHdpbmRvdy5KU09OICYmIHdpbmRvdy5KU09OLnBhcnNlICkge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5KU09OLnBhcnNlKCBkYXRhICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBydmFsaWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVzY2FwZSwgXCJAXCIgKVxuICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgXCJdXCIgKVxuICAgICAgICAgICAgLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgXCJcIikpICkge1xuICAgICAgICAgICAgcmV0dXJuICggbmV3IEZ1bmN0aW9uKCBcInJldHVybiBcIiArIGRhdGEgKSApKCk7XG4gICAgICAgIH1cbiAgICAgICAgalF1ZXJ5LmVycm9yKCBcIkludmFsaWQgSlNPTjogXCIgKyBkYXRhICk7XG4gICAgfSxcbiAgICBwYXJzZVhNTDogZnVuY3Rpb24oIGRhdGEgKSB7XG4gICAgICAgIGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgfHwgIWRhdGEgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgeG1sLCB0bXA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIHdpbmRvdy5ET01QYXJzZXIgKSB7XG4gICAgICAgICAgICAgICAgdG1wID0gbmV3IERPTVBhcnNlcigpO1xuICAgICAgICAgICAgICAgIHhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCBcInRleHQveG1sXCIgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeG1sID0gbmV3IEFjdGl2ZVhPYmplY3QoIFwiTWljcm9zb2Z0LlhNTERPTVwiICk7XG4gICAgICAgICAgICAgICAgeG1sLmFzeW5jID0gXCJmYWxzZVwiO1xuICAgICAgICAgICAgICAgIHhtbC5sb2FkWE1MKCBkYXRhICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2goIGUgKSB7XG4gICAgICAgICAgICB4bWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiICkubGVuZ3RoICkge1xuICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIGRhdGEgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geG1sO1xuICAgIH0sXG4gICAgbm9vcDogZnVuY3Rpb24oKSB7fSxcbiAgICBnbG9iYWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHtcbiAgICAgICAgaWYgKCBkYXRhICYmIHJub3R3aGl0ZS50ZXN0KCBkYXRhICkgKSB7XG4gICAgICAgICAgICAoIHdpbmRvdy5leGVjU2NyaXB0IHx8IGZ1bmN0aW9uKCBkYXRhICkge1xuICAgICAgICAgICAgICAgIHdpbmRvd1sgXCJldmFsXCIgXS5jYWxsKCB3aW5kb3csIGRhdGEgKTtcbiAgICAgICAgICAgIH0gKSggZGF0YSApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYW1lbENhc2U6IGZ1bmN0aW9uKCBzdHJpbmcgKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xuICAgIH0sXG4gICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5hbWUudG9VcHBlckNhc2UoKTtcbiAgICB9LFxuICAgIGVhY2g6IGZ1bmN0aW9uKCBvYmplY3QsIGNhbGxiYWNrLCBhcmdzICkge1xuICAgICAgICB2YXIgbmFtZSwgaSA9IDAsXG4gICAgICAgICAgICBsZW5ndGggPSBvYmplY3QubGVuZ3RoLFxuICAgICAgICAgICAgaXNPYmogPSBsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNGdW5jdGlvbiggb2JqZWN0ICk7XG4gICAgICAgIGlmICggYXJncyApIHtcbiAgICAgICAgICAgIGlmICggaXNPYmogKSB7XG4gICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmplY3QgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgbmFtZSBdLCBhcmdzICkgPT09IGZhbHNlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suYXBwbHkoIG9iamVjdFsgaSsrIF0sIGFyZ3MgKSA9PT0gZmFsc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICggaXNPYmogKSB7XG4gICAgICAgICAgICAgICAgZm9yICggbmFtZSBpbiBvYmplY3QgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBuYW1lIF0sIG5hbWUsIG9iamVjdFsgbmFtZSBdICkgPT09IGZhbHNlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2suY2FsbCggb2JqZWN0WyBpIF0sIGksIG9iamVjdFsgaSsrIF0gKSA9PT0gZmFsc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH0sXG4gICAgdHJpbTogdHJpbSA/XG4gICAgICAgIGZ1bmN0aW9uKCB0ZXh0ICkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/XG4gICAgICAgICAgICAgICAgXCJcIiA6XG4gICAgICAgICAgICAgICAgdHJpbS5jYWxsKCB0ZXh0ICk7XG4gICAgICAgIH0gOlxuICAgICAgICBmdW5jdGlvbiggdGV4dCApIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0ID09IG51bGwgP1xuICAgICAgICAgICAgICAgIFwiXCIgOlxuICAgICAgICAgICAgICAgIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKCB0cmltTGVmdCwgXCJcIiApLnJlcGxhY2UoIHRyaW1SaWdodCwgXCJcIiApO1xuICAgICAgICB9LFxuICAgIG1ha2VBcnJheTogZnVuY3Rpb24oIGFycmF5LCByZXN1bHRzICkge1xuICAgICAgICB2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcbiAgICAgICAgaWYgKCBhcnJheSAhPSBudWxsICkge1xuICAgICAgICAgICAgdmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJyYXkgKTtcbiAgICAgICAgICAgIGlmICggYXJyYXkubGVuZ3RoID09IG51bGwgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlID09PSBcImZ1bmN0aW9uXCIgfHwgdHlwZSA9PT0gXCJyZWdleHBcIiB8fCBqUXVlcnkuaXNXaW5kb3coIGFycmF5ICkgKSB7XG4gICAgICAgICAgICAgICAgcHVzaC5jYWxsKCByZXQsIGFycmF5ICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5tZXJnZSggcmV0LCBhcnJheSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyYXksIGkgKSB7XG4gICAgICAgIHZhciBsZW47XG4gICAgICAgIGlmICggYXJyYXkgKSB7XG4gICAgICAgICAgICBpZiAoIGluZGV4T2YgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbCggYXJyYXksIGVsZW0sIGkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxlbiA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgIGkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7XG4gICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGkgaW4gYXJyYXkgJiYgYXJyYXlbIGkgXSA9PT0gZWxlbSApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9LFxuICAgIG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcbiAgICAgICAgdmFyIGkgPSBmaXJzdC5sZW5ndGgsXG4gICAgICAgICAgICBqID0gMDtcbiAgICAgICAgaWYgKCB0eXBlb2Ygc2Vjb25kLmxlbmd0aCA9PT0gXCJudW1iZXJcIiApIHtcbiAgICAgICAgICAgIGZvciAoIHZhciBsID0gc2Vjb25kLmxlbmd0aDsgaiA8IGw7IGorKyApIHtcbiAgICAgICAgICAgICAgICBmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdoaWxlICggc2Vjb25kW2pdICE9PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqKysgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdC5sZW5ndGggPSBpO1xuICAgICAgICByZXR1cm4gZmlyc3Q7XG4gICAgfSxcbiAgICBncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnYgKSB7XG4gICAgICAgIHZhciByZXQgPSBbXSwgcmV0VmFsO1xuICAgICAgICBpbnYgPSAhIWludjtcbiAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsZW5ndGggPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKyApIHtcbiAgICAgICAgICAgIHJldFZhbCA9ICEhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcbiAgICAgICAgICAgIGlmICggaW52ICE9PSByZXRWYWwgKSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2goIGVsZW1zWyBpIF0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG4gICAgICAgIHZhciB2YWx1ZSwga2V5LCByZXQgPSBbXSxcbiAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgbGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuICAgICAgICAgICAgaXNBcnJheSA9IGVsZW1zIGluc3RhbmNlb2YgalF1ZXJ5IHx8IGxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgKCAoIGxlbmd0aCA+IDAgJiYgZWxlbXNbIDAgXSAmJiBlbGVtc1sgbGVuZ3RoIC0xIF0gKSB8fCBsZW5ndGggPT09IDAgfHwgalF1ZXJ5LmlzQXJyYXkoIGVsZW1zICkgKSA7XG4gICAgICAgIGlmICggaXNBcnJheSApIHtcbiAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKCBrZXkgaW4gZWxlbXMgKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApO1xuICAgICAgICAgICAgICAgIGlmICggdmFsdWUgIT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0WyByZXQubGVuZ3RoIF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTtcbiAgICB9LFxuICAgIGd1aWQ6IDEsXG4gICAgcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcbiAgICAgICAgICAgIHZhciB0bXAgPSBmblsgY29udGV4dCBdO1xuICAgICAgICAgICAgY29udGV4dCA9IGZuO1xuICAgICAgICAgICAgZm4gPSB0bXA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICksXG4gICAgICAgICAgICBwcm94eSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSggY29udGV4dCwgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBwcm94eS5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG4gICAgICAgIHJldHVybiBwcm94eTtcbiAgICB9LFxuICAgIGFjY2VzczogZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcGFzcyApIHtcbiAgICAgICAgdmFyIGV4ZWMsXG4gICAgICAgICAgICBidWxrID0ga2V5ID09IG51bGwsXG4gICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgIGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcbiAgICAgICAgaWYgKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcbiAgICAgICAgICAgIGZvciAoIGkgaW4ga2V5ICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5W2ldLCAxLCBlbXB0eUdldCwgdmFsdWUgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoYWluYWJsZSA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICBleGVjID0gcGFzcyA9PT0gdW5kZWZpbmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApO1xuICAgICAgICAgICAgaWYgKCBidWxrICkge1xuICAgICAgICAgICAgICAgIGlmICggZXhlYyApIHtcbiAgICAgICAgICAgICAgICAgICAgZXhlYyA9IGZuO1xuICAgICAgICAgICAgICAgICAgICBmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWMuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG4gICAgICAgICAgICAgICAgICAgIGZuID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIGZuICkge1xuICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZuKCBlbGVtc1tpXSwga2V5LCBleGVjID8gdmFsdWUuY2FsbCggZWxlbXNbaV0sIGksIGZuKCBlbGVtc1tpXSwga2V5ICkgKSA6IHZhbHVlLCBwYXNzICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhaW5hYmxlID0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hhaW5hYmxlID9cbiAgICAgICAgICAgIGVsZW1zIDpcbiAgICAgICAgICAgIGJ1bGsgP1xuICAgICAgICAgICAgICAgIGZuLmNhbGwoIGVsZW1zICkgOlxuICAgICAgICAgICAgICAgIGxlbmd0aCA/IGZuKCBlbGVtc1swXSwga2V5ICkgOiBlbXB0eUdldDtcbiAgICB9LFxuICAgIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiAoIG5ldyBEYXRlKCkgKS5nZXRUaW1lKCk7XG4gICAgfSxcbiAgICB1YU1hdGNoOiBmdW5jdGlvbiggdWEgKSB7XG4gICAgICAgIHVhID0gdWEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgdmFyIG1hdGNoID0gcndlYmtpdC5leGVjKCB1YSApIHx8XG4gICAgICAgICAgICByb3BlcmEuZXhlYyggdWEgKSB8fFxuICAgICAgICAgICAgcm1zaWUuZXhlYyggdWEgKSB8fFxuICAgICAgICAgICAgdWEuaW5kZXhPZihcImNvbXBhdGlibGVcIikgPCAwICYmIHJtb3ppbGxhLmV4ZWMoIHVhICkgfHxcbiAgICAgICAgICAgIFtdO1xuICAgICAgICByZXR1cm4geyBicm93c2VyOiBtYXRjaFsxXSB8fCBcIlwiLCB2ZXJzaW9uOiBtYXRjaFsyXSB8fCBcIjBcIiB9O1xuICAgIH0sXG4gICAgc3ViOiBmdW5jdGlvbigpIHtcbiAgICAgICAgZnVuY3Rpb24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgalF1ZXJ5U3ViLmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG4gICAgICAgIH1cbiAgICAgICAgalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7XG4gICAgICAgIGpRdWVyeVN1Yi5zdXBlcmNsYXNzID0gdGhpcztcbiAgICAgICAgalF1ZXJ5U3ViLmZuID0galF1ZXJ5U3ViLnByb3RvdHlwZSA9IHRoaXMoKTtcbiAgICAgICAgalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViO1xuICAgICAgICBqUXVlcnlTdWIuc3ViID0gdGhpcy5zdWI7XG4gICAgICAgIGpRdWVyeVN1Yi5mbi5pbml0ID0gZnVuY3Rpb24gaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG4gICAgICAgICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQgPSBqUXVlcnlTdWIoIGNvbnRleHQgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBqUXVlcnkuZm4uaW5pdC5jYWxsKCB0aGlzLCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeVN1YiApO1xuICAgICAgICB9O1xuICAgICAgICBqUXVlcnlTdWIuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnlTdWIuZm47XG4gICAgICAgIHZhciByb290alF1ZXJ5U3ViID0galF1ZXJ5U3ViKGRvY3VtZW50KTtcbiAgICAgICAgcmV0dXJuIGpRdWVyeVN1YjtcbiAgICB9LFxuICAgIGJyb3dzZXI6IHt9XG59KTtcbmpRdWVyeS5lYWNoKFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdFwiLnNwbGl0KFwiIFwiKSwgZnVuY3Rpb24oaSwgbmFtZSkge1xuICAgIGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xufSk7XG5icm93c2VyTWF0Y2ggPSBqUXVlcnkudWFNYXRjaCggdXNlckFnZW50ICk7XG5pZiAoIGJyb3dzZXJNYXRjaC5icm93c2VyICkge1xuICAgIGpRdWVyeS5icm93c2VyWyBicm93c2VyTWF0Y2guYnJvd3NlciBdID0gdHJ1ZTtcbiAgICBqUXVlcnkuYnJvd3Nlci52ZXJzaW9uID0gYnJvd3Nlck1hdGNoLnZlcnNpb247XG59XG5cbmlmICggalF1ZXJ5LmJyb3dzZXIud2Via2l0ICkge1xuICAgIGpRdWVyeS5icm93c2VyLnNhZmFyaSA9IHRydWU7XG59XG5cbmlmICggcm5vdHdoaXRlLnRlc3QoIFwiXFx4QTBcIiApICkge1xuICAgIHRyaW1MZWZ0ID0gL15bXFxzXFx4QTBdKy87XG4gICAgdHJpbVJpZ2h0ID0gL1tcXHNcXHhBMF0rJC87XG59XG5cbnJvb3RqUXVlcnkgPSBqUXVlcnkoZG9jdW1lbnQpO1xuaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkge1xuICAgIERPTUNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7XG4gICAgICAgIGpRdWVyeS5yZWFkeSgpO1xuICAgIH07XG59IGVsc2UgaWYgKCBkb2N1bWVudC5hdHRhY2hFdmVudCApIHtcbiAgICBET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiICkge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGV0YWNoRXZlbnQoIFwib25yZWFkeXN0YXRlY2hhbmdlXCIsIERPTUNvbnRlbnRMb2FkZWQgKTtcbiAgICAgICAgICAgIGpRdWVyeS5yZWFkeSgpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZG9TY3JvbGxDaGVjaygpIHtcbiAgICBpZiAoIGpRdWVyeS5pc1JlYWR5ICkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbChcImxlZnRcIik7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ssIDEgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBqUXVlcnkucmVhZHkoKTtcbn1cblxucmV0dXJuIGpRdWVyeTtcbn0pKCk7XG52YXIgZmxhZ3NDYWNoZSA9IHt9O1xuZnVuY3Rpb24gY3JlYXRlRmxhZ3MoIGZsYWdzICkge1xuICAgIHZhciBvYmplY3QgPSBmbGFnc0NhY2hlWyBmbGFncyBdID0ge30sXG4gICAgICAgIGksIGxlbmd0aDtcbiAgICBmbGFncyA9IGZsYWdzLnNwbGl0KCAvXFxzKy8gKTtcbiAgICBmb3IgKCBpID0gMCwgbGVuZ3RoID0gZmxhZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG4gICAgICAgIG9iamVjdFsgZmxhZ3NbaV0gXSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggZmxhZ3MgKSB7XG4gICAgZmxhZ3MgPSBmbGFncyA/ICggZmxhZ3NDYWNoZVsgZmxhZ3MgXSB8fCBjcmVhdGVGbGFncyggZmxhZ3MgKSApIDoge307XG4gICAgdmFyXG4gICAgICAgIGxpc3QgPSBbXSxcbiAgICAgICAgc3RhY2sgPSBbXSxcbiAgICAgICAgbWVtb3J5LFxuICAgICAgICBmaXJlZCxcbiAgICAgICAgZmlyaW5nLFxuICAgICAgICBmaXJpbmdTdGFydCxcbiAgICAgICAgZmlyaW5nTGVuZ3RoLFxuICAgICAgICBmaXJpbmdJbmRleCxcbiAgICAgICAgYWRkID0gZnVuY3Rpb24oIGFyZ3MgKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICAgICAgZWxlbSxcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGFjdHVhbDtcbiAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsZW5ndGggPSBhcmdzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgICAgIGVsZW0gPSBhcmdzWyBpIF07XG4gICAgICAgICAgICAgICAgdHlwZSA9IGpRdWVyeS50eXBlKCBlbGVtICk7XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSBcImFycmF5XCIgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZCggZWxlbSApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZnVuY3Rpb25cIiApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZmxhZ3MudW5pcXVlIHx8ICFzZWxmLmhhcyggZWxlbSApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKCBlbGVtICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZpcmUgPSBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IFtdO1xuICAgICAgICAgICAgbWVtb3J5ID0gIWZsYWdzLm1lbW9yeSB8fCBbIGNvbnRleHQsIGFyZ3MgXTtcbiAgICAgICAgICAgIGZpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGZpcmluZyA9IHRydWU7XG4gICAgICAgICAgICBmaXJpbmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7XG4gICAgICAgICAgICBmaXJpbmdTdGFydCA9IDA7XG4gICAgICAgICAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoIDsgbGlzdCAmJiBmaXJpbmdJbmRleCA8IGZpcmluZ0xlbmd0aDsgZmlyaW5nSW5kZXgrKyApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIGNvbnRleHQsIGFyZ3MgKSA9PT0gZmFsc2UgJiYgZmxhZ3Muc3RvcE9uRmFsc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbW9yeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCBsaXN0ICkge1xuICAgICAgICAgICAgICAgIGlmICggIWZsYWdzLm9uY2UgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggc3RhY2sgJiYgc3RhY2subGVuZ3RoICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ID0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlyZVdpdGgoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWVtb3J5ID09PSB0cnVlICkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzZWxmID0ge1xuICAgICAgICAgICAgYWRkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgYWRkKCBhcmd1bWVudHMgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJpbmcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJpbmdMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWVtb3J5ICYmIG1lbW9yeSAhPT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ1N0YXJ0ID0gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIGxpc3QgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnSW5kZXggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnTGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoIDsgYXJnSW5kZXggPCBhcmdMZW5ndGggOyBhcmdJbmRleCsrICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGFyZ3NbIGFyZ0luZGV4IF0gPT09IGxpc3RbIGkgXSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmaXJpbmcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGkgPD0gZmlyaW5nTGVuZ3RoICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcmluZ0xlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaSA8PSBmaXJpbmdJbmRleCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyaW5nSW5kZXgtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5zcGxpY2UoIGktLSwgMSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGZsYWdzLnVuaXF1ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhczogZnVuY3Rpb24oIGZuICkge1xuICAgICAgICAgICAgICAgIGlmICggbGlzdCApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBmbiA9PT0gbGlzdFsgaSBdICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGxpc3QgPSBzdGFjayA9IG1lbW9yeSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFsaXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxvY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHN0YWNrID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGlmICggIW1lbW9yeSB8fCBtZW1vcnkgPT09IHRydWUgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhc3RhY2s7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuICAgICAgICAgICAgICAgIGlmICggc3RhY2sgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggZmlyaW5nICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhZmxhZ3Mub25jZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKCBbIGNvbnRleHQsIGFyZ3MgXSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhKCBmbGFncy5vbmNlICYmIG1lbW9yeSApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyZSggY29udGV4dCwgYXJncyApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpcmVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gISFmaXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn07XG52YXJcbiAgICBzbGljZURlZmVycmVkID0gW10uc2xpY2U7XG5qUXVlcnkuZXh0ZW5kKHtcbiAgICBEZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG4gICAgICAgIHZhciBkb25lTGlzdCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuICAgICAgICAgICAgZmFpbExpc3QgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcbiAgICAgICAgICAgIHByb2dyZXNzTGlzdCA9IGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcbiAgICAgICAgICAgIHN0YXRlID0gXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICBsaXN0cyA9IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlOiBkb25lTGlzdCxcbiAgICAgICAgICAgICAgICByZWplY3Q6IGZhaWxMaXN0LFxuICAgICAgICAgICAgICAgIG5vdGlmeTogcHJvZ3Jlc3NMaXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJvbWlzZSA9IHtcbiAgICAgICAgICAgICAgICBkb25lOiBkb25lTGlzdC5hZGQsXG4gICAgICAgICAgICAgICAgZmFpbDogZmFpbExpc3QuYWRkLFxuICAgICAgICAgICAgICAgIHByb2dyZXNzOiBwcm9ncmVzc0xpc3QuYWRkLFxuICAgICAgICAgICAgICAgIHN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZG9uZUxpc3QuZmlyZWQsXG4gICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFpbExpc3QuZmlyZWQsXG4gICAgICAgICAgICAgICAgdGhlbjogZnVuY3Rpb24oIGRvbmVDYWxsYmFja3MsIGZhaWxDYWxsYmFja3MsIHByb2dyZXNzQ2FsbGJhY2tzICkge1xuICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5kb25lKCBkb25lQ2FsbGJhY2tzICkuZmFpbCggZmFpbENhbGxiYWNrcyApLnByb2dyZXNzKCBwcm9ncmVzc0NhbGxiYWNrcyApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFsd2F5czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLmRvbmUuYXBwbHkoIGRlZmVycmVkLCBhcmd1bWVudHMgKS5mYWlsLmFwcGx5KCBkZWZlcnJlZCwgYXJndW1lbnRzICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGlwZTogZnVuY3Rpb24oIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LkRlZmVycmVkKGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogWyBmbkRvbmUsIFwicmVzb2x2ZVwiIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbDogWyBmbkZhaWwsIFwicmVqZWN0XCIgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogWyBmblByb2dyZXNzLCBcIm5vdGlmeVwiIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCBoYW5kbGVyLCBkYXRhICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IGRhdGFbIDAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gZGF0YVsgMSBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBmbiApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZFsgaGFuZGxlciBdKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgPSBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldHVybmVkICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQucHJvbWlzZSgpLnRoZW4oIG5ld0RlZmVyLnJlc29sdmUsIG5ld0RlZmVyLnJlamVjdCwgbmV3RGVmZXIubm90aWZ5ICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RlZmVyWyBhY3Rpb24gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IG5ld0RlZmVyIDogdGhpcywgWyByZXR1cm5lZCBdICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkWyBoYW5kbGVyIF0oIG5ld0RlZmVyWyBhY3Rpb24gXSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIG9iaiA9PSBudWxsICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIHZhciBrZXkgaW4gcHJvbWlzZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpbIGtleSBdID0gcHJvbWlzZVsga2V5IF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmZXJyZWQgPSBwcm9taXNlLnByb21pc2Uoe30pLFxuICAgICAgICAgICAga2V5O1xuICAgICAgICBmb3IgKCBrZXkgaW4gbGlzdHMgKSB7XG4gICAgICAgICAgICBkZWZlcnJlZFsga2V5IF0gPSBsaXN0c1sga2V5IF0uZmlyZTtcbiAgICAgICAgICAgIGRlZmVycmVkWyBrZXkgKyBcIldpdGhcIiBdID0gbGlzdHNbIGtleSBdLmZpcmVXaXRoO1xuICAgICAgICB9XG4gICAgICAgIGRlZmVycmVkLmRvbmUoIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc3RhdGUgPSBcInJlc29sdmVkXCI7XG4gICAgICAgIH0sIGZhaWxMaXN0LmRpc2FibGUsIHByb2dyZXNzTGlzdC5sb2NrICkuZmFpbCggZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFwicmVqZWN0ZWRcIjtcbiAgICAgICAgfSwgZG9uZUxpc3QuZGlzYWJsZSwgcHJvZ3Jlc3NMaXN0LmxvY2sgKTtcbiAgICAgICAgaWYgKCBmdW5jICkge1xuICAgICAgICAgICAgZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfSxcbiAgICB3aGVuOiBmdW5jdGlvbiggZmlyc3RQYXJhbSApIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBzbGljZURlZmVycmVkLmNhbGwoIGFyZ3VtZW50cywgMCApLFxuICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICBsZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgICAgICAgIHBWYWx1ZXMgPSBuZXcgQXJyYXkoIGxlbmd0aCApLFxuICAgICAgICAgICAgY291bnQgPSBsZW5ndGgsXG4gICAgICAgICAgICBwQ291bnQgPSBsZW5ndGgsXG4gICAgICAgICAgICBkZWZlcnJlZCA9IGxlbmd0aCA8PSAxICYmIGZpcnN0UGFyYW0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGZpcnN0UGFyYW0ucHJvbWlzZSApID9cbiAgICAgICAgICAgICAgICBmaXJzdFBhcmFtIDpcbiAgICAgICAgICAgICAgICBqUXVlcnkuRGVmZXJyZWQoKSxcbiAgICAgICAgICAgIHByb21pc2UgPSBkZWZlcnJlZC5wcm9taXNlKCk7XG4gICAgICAgIGZ1bmN0aW9uIHJlc29sdmVGdW5jKCBpICkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcbiAgICAgICAgICAgICAgICBhcmdzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlRGVmZXJyZWQuY2FsbCggYXJndW1lbnRzLCAwICkgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoICEoIC0tY291bnQgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGRlZmVycmVkLCBhcmdzICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwcm9ncmVzc0Z1bmMoIGkgKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuICAgICAgICAgICAgICAgIHBWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2VEZWZlcnJlZC5jYWxsKCBhcmd1bWVudHMsIDAgKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgIGRlZmVycmVkLm5vdGlmeVdpdGgoIHByb21pc2UsIHBWYWx1ZXMgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBsZW5ndGggPiAxICkge1xuICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBhcmdzWyBpIF0gJiYgYXJnc1sgaSBdLnByb21pc2UgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIGFyZ3NbIGkgXS5wcm9taXNlICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbIGkgXS5wcm9taXNlKCkudGhlbiggcmVzb2x2ZUZ1bmMoaSksIGRlZmVycmVkLnJlamVjdCwgcHJvZ3Jlc3NGdW5jKGkpICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLS1jb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoICFjb3VudCApIHtcbiAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIGFyZ3MgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICggZGVmZXJyZWQgIT09IGZpcnN0UGFyYW0gKSB7XG4gICAgICAgICAgICBkZWZlcnJlZC5yZXNvbHZlV2l0aCggZGVmZXJyZWQsIGxlbmd0aCA/IFsgZmlyc3RQYXJhbSBdIDogW10gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG59KTtcbmpRdWVyeS5zdXBwb3J0ID0gKGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdXBwb3J0LFxuICAgICAgICBhbGwsXG4gICAgICAgIGEsXG4gICAgICAgIHNlbGVjdCxcbiAgICAgICAgb3B0LFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgIHRkcyxcbiAgICAgICAgZXZlbnRzLFxuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGksXG4gICAgICAgIGlzU3VwcG9ydGVkLFxuICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG4gICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBkaXYuc2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIsIFwidFwiKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gXCIgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPlwiO1xuICAgIGFsbCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCIqXCIgKTtcbiAgICBhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcImFcIiApWyAwIF07XG4gICAgaWYgKCAhYWxsIHx8ICFhbGwubGVuZ3RoIHx8ICFhICkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKTtcbiAgICBvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIikgKTtcbiAgICBpbnB1dCA9IGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJpbnB1dFwiIClbIDAgXTtcbiAgICBzdXBwb3J0ID0ge1xuICAgICAgICBsZWFkaW5nV2hpdGVzcGFjZTogKCBkaXYuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMyApLFxuICAgICAgICB0Ym9keTogIWRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRib2R5XCIpLmxlbmd0aCxcbiAgICAgICAgaHRtbFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJsaW5rXCIpLmxlbmd0aCxcbiAgICAgICAgc3R5bGU6IC90b3AvLnRlc3QoIGEuZ2V0QXR0cmlidXRlKFwic3R5bGVcIikgKSxcbiAgICAgICAgaHJlZk5vcm1hbGl6ZWQ6ICggYS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpID09PSBcIi9hXCIgKSxcbiAgICAgICAgb3BhY2l0eTogL14wLjU1Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSxcbiAgICAgICAgY3NzRmxvYXQ6ICEhYS5zdHlsZS5jc3NGbG9hdCxcbiAgICAgICAgY2hlY2tPbjogKCBpbnB1dC52YWx1ZSA9PT0gXCJvblwiICksXG4gICAgICAgIG9wdFNlbGVjdGVkOiBvcHQuc2VsZWN0ZWQsXG4gICAgICAgIGdldFNldEF0dHJpYnV0ZTogZGl2LmNsYXNzTmFtZSAhPT0gXCJ0XCIsXG4gICAgICAgIGVuY3R5cGU6ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImZvcm1cIikuZW5jdHlwZSxcbiAgICAgICAgaHRtbDVDbG9uZTogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm5hdlwiKS5jbG9uZU5vZGUoIHRydWUgKS5vdXRlckhUTUwgIT09IFwiPDpuYXY+PC86bmF2PlwiLFxuICAgICAgICBzdWJtaXRCdWJibGVzOiB0cnVlLFxuICAgICAgICBjaGFuZ2VCdWJibGVzOiB0cnVlLFxuICAgICAgICBmb2N1c2luQnViYmxlczogZmFsc2UsXG4gICAgICAgIGRlbGV0ZUV4cGFuZG86IHRydWUsXG4gICAgICAgIG5vQ2xvbmVFdmVudDogdHJ1ZSxcbiAgICAgICAgaW5saW5lQmxvY2tOZWVkc0xheW91dDogZmFsc2UsXG4gICAgICAgIHNocmlua1dyYXBCbG9ja3M6IGZhbHNlLFxuICAgICAgICByZWxpYWJsZU1hcmdpblJpZ2h0OiB0cnVlLFxuICAgICAgICBwaXhlbE1hcmdpbjogdHJ1ZVxuICAgIH07XG4gICAgalF1ZXJ5LmJveE1vZGVsID0gc3VwcG9ydC5ib3hNb2RlbCA9IChkb2N1bWVudC5jb21wYXRNb2RlID09PSBcIkNTUzFDb21wYXRcIik7XG4gICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7XG4gICAgc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9IGlucHV0LmNsb25lTm9kZSggdHJ1ZSApLmNoZWNrZWQ7XG4gICAgc2VsZWN0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICBzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDtcbiAgICB0cnkge1xuICAgICAgICBkZWxldGUgZGl2LnRlc3Q7XG4gICAgfSBjYXRjaCggZSApIHtcbiAgICAgICAgc3VwcG9ydC5kZWxldGVFeHBhbmRvID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICggIWRpdi5hZGRFdmVudExpc3RlbmVyICYmIGRpdi5hdHRhY2hFdmVudCAmJiBkaXYuZmlyZUV2ZW50ICkge1xuICAgICAgICBkaXYuYXR0YWNoRXZlbnQoIFwib25jbGlja1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHN1cHBvcnQubm9DbG9uZUV2ZW50ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBkaXYuY2xvbmVOb2RlKCB0cnVlICkuZmlyZUV2ZW50KCBcIm9uY2xpY2tcIiApO1xuICAgIH1cbiAgICBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBpbnB1dC52YWx1ZSA9IFwidFwiO1xuICAgIGlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJyYWRpb1wiKTtcbiAgICBzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG4gICAgaW5wdXQuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIik7XG4gICAgaW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcbiAgICBkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG4gICAgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdi5sYXN0Q2hpbGQgKTtcbiAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBmcmFnbWVudC5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcbiAgICBzdXBwb3J0LmFwcGVuZENoZWNrZWQgPSBpbnB1dC5jaGVja2VkO1xuICAgIGZyYWdtZW50LnJlbW92ZUNoaWxkKCBpbnB1dCApO1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKCBkaXYgKTtcbiAgICBpZiAoIGRpdi5hdHRhY2hFdmVudCApIHtcbiAgICAgICAgZm9yICggaSBpbiB7XG4gICAgICAgICAgICBzdWJtaXQ6IDEsXG4gICAgICAgICAgICBjaGFuZ2U6IDEsXG4gICAgICAgICAgICBmb2N1c2luOiAxXG4gICAgICAgIH0pIHtcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9IFwib25cIiArIGk7XG4gICAgICAgICAgICBpc1N1cHBvcnRlZCA9ICggZXZlbnROYW1lIGluIGRpdiApO1xuICAgICAgICAgICAgaWYgKCAhaXNTdXBwb3J0ZWQgKSB7XG4gICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSggZXZlbnROYW1lLCBcInJldHVybjtcIiApO1xuICAgICAgICAgICAgICAgIGlzU3VwcG9ydGVkID0gKCB0eXBlb2YgZGl2WyBldmVudE5hbWUgXSA9PT0gXCJmdW5jdGlvblwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBwb3J0WyBpICsgXCJCdWJibGVzXCIgXSA9IGlzU3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZyYWdtZW50LnJlbW92ZUNoaWxkKCBkaXYgKTtcbiAgICBmcmFnbWVudCA9IHNlbGVjdCA9IG9wdCA9IGRpdiA9IGlucHV0ID0gbnVsbDtcbiAgICBqUXVlcnkoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjb250YWluZXIsIG91dGVyLCBpbm5lciwgdGFibGUsIHRkLCBvZmZzZXRTdXBwb3J0LFxuICAgICAgICAgICAgbWFyZ2luRGl2LCBjb25NYXJnaW5Ub3AsIHN0eWxlLCBodG1sLCBwb3NpdGlvblRvcExlZnRXaWR0aEhlaWdodCxcbiAgICAgICAgICAgIHBhZGRpbmdNYXJnaW5Cb3JkZXJWaXNpYmlsaXR5LCBwYWRkaW5nTWFyZ2luQm9yZGVyLFxuICAgICAgICAgICAgYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKVswXTtcbiAgICAgICAgaWYgKCAhYm9keSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25NYXJnaW5Ub3AgPSAxO1xuICAgICAgICBwYWRkaW5nTWFyZ2luQm9yZGVyID0gXCJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOlwiO1xuICAgICAgICBwb3NpdGlvblRvcExlZnRXaWR0aEhlaWdodCA9IFwicG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjFweDtoZWlnaHQ6MXB4O1wiO1xuICAgICAgICBwYWRkaW5nTWFyZ2luQm9yZGVyVmlzaWJpbGl0eSA9IHBhZGRpbmdNYXJnaW5Cb3JkZXIgKyBcIjA7dmlzaWJpbGl0eTpoaWRkZW47XCI7XG4gICAgICAgIHN0eWxlID0gXCJzdHlsZT0nXCIgKyBwb3NpdGlvblRvcExlZnRXaWR0aEhlaWdodCArIHBhZGRpbmdNYXJnaW5Cb3JkZXIgKyBcIjVweCBzb2xpZCAjMDAwO1wiO1xuICAgICAgICBodG1sID0gXCI8ZGl2IFwiICsgc3R5bGUgKyBcImRpc3BsYXk6YmxvY2s7Jz48ZGl2IHN0eWxlPSdcIiArIHBhZGRpbmdNYXJnaW5Cb3JkZXIgKyBcIjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj48L2Rpdj5cIiArXG4gICAgICAgICAgICBcIjx0YWJsZSBcIiArIHN0eWxlICsgXCInIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+XCIgK1xuICAgICAgICAgICAgXCI8dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPlwiO1xuICAgICAgICBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IHBhZGRpbmdNYXJnaW5Cb3JkZXJWaXNpYmlsaXR5ICsgXCJ3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOlwiICsgY29uTWFyZ2luVG9wICsgXCJweFwiO1xuICAgICAgICBib2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTtcbiAgICAgICAgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKCBkaXYgKTtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IFwiPHRhYmxlPjx0cj48dGQgc3R5bGU9J1wiICsgcGFkZGluZ01hcmdpbkJvcmRlciArIFwiMDtkaXNwbGF5Om5vbmUnPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT5cIjtcbiAgICAgICAgdGRzID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInRkXCIgKTtcbiAgICAgICAgaXNTdXBwb3J0ZWQgPSAoIHRkc1sgMCBdLm9mZnNldEhlaWdodCA9PT0gMCApO1xuICAgICAgICB0ZHNbIDAgXS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICAgICAgdGRzWyAxIF0uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICBzdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyA9IGlzU3VwcG9ydGVkICYmICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7XG4gICAgICAgIGlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7XG4gICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIG1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcbiAgICAgICAgICAgIG1hcmdpbkRpdi5zdHlsZS53aWR0aCA9IFwiMFwiO1xuICAgICAgICAgICAgbWFyZ2luRGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gXCIwXCI7XG4gICAgICAgICAgICBkaXYuc3R5bGUud2lkdGggPSBcIjJweFwiO1xuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKCBtYXJnaW5EaXYgKTtcbiAgICAgICAgICAgIHN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCA9XG4gICAgICAgICAgICAgICAgKCBwYXJzZUludCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxsICkgfHwgeyBtYXJnaW5SaWdodDogMCB9ICkubWFyZ2luUmlnaHQsIDEwICkgfHwgMCApID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdHlwZW9mIGRpdi5zdHlsZS56b29tICE9PSBcInVuZGVmaW5lZFwiICkge1xuICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBkaXYuc3R5bGUud2lkdGggPSBkaXYuc3R5bGUucGFkZGluZyA9IFwiMXB4XCI7XG4gICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyID0gMDtcbiAgICAgICAgICAgIGRpdi5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICBkaXYuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lXCI7XG4gICAgICAgICAgICBkaXYuc3R5bGUuem9vbSA9IDE7XG4gICAgICAgICAgICBzdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gMyApO1xuICAgICAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgICAgICBkaXYuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBcIjxkaXYgc3R5bGU9J3dpZHRoOjVweDsnPjwvZGl2PlwiO1xuICAgICAgICAgICAgc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzID0gKCBkaXYub2Zmc2V0V2lkdGggIT09IDMgKTtcbiAgICAgICAgfVxuICAgICAgICBkaXYuc3R5bGUuY3NzVGV4dCA9IHBvc2l0aW9uVG9wTGVmdFdpZHRoSGVpZ2h0ICsgcGFkZGluZ01hcmdpbkJvcmRlclZpc2liaWxpdHk7XG4gICAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sO1xuICAgICAgICBvdXRlciA9IGRpdi5maXJzdENoaWxkO1xuICAgICAgICBpbm5lciA9IG91dGVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHRkID0gb3V0ZXIubmV4dFNpYmxpbmcuZmlyc3RDaGlsZC5maXJzdENoaWxkO1xuICAgICAgICBvZmZzZXRTdXBwb3J0ID0ge1xuICAgICAgICAgICAgZG9lc05vdEFkZEJvcmRlcjogKCBpbm5lci5vZmZzZXRUb3AgIT09IDUgKSxcbiAgICAgICAgICAgIGRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzOiAoIHRkLm9mZnNldFRvcCA9PT0gNSApXG4gICAgICAgIH07XG4gICAgICAgIGlubmVyLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiO1xuICAgICAgICBpbm5lci5zdHlsZS50b3AgPSBcIjIwcHhcIjtcbiAgICAgICAgb2Zmc2V0U3VwcG9ydC5maXhlZFBvc2l0aW9uID0gKCBpbm5lci5vZmZzZXRUb3AgPT09IDIwIHx8IGlubmVyLm9mZnNldFRvcCA9PT0gMTUgKTtcbiAgICAgICAgaW5uZXIuc3R5bGUucG9zaXRpb24gPSBpbm5lci5zdHlsZS50b3AgPSBcIlwiO1xuICAgICAgICBvdXRlci5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgICAgIG91dGVyLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuICAgICAgICBvZmZzZXRTdXBwb3J0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSA9ICggaW5uZXIub2Zmc2V0VG9wID09PSAtNSApO1xuICAgICAgICBvZmZzZXRTdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ID0gKCBib2R5Lm9mZnNldFRvcCAhPT0gY29uTWFyZ2luVG9wICk7XG4gICAgICAgIGlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7XG4gICAgICAgICAgICBkaXYuc3R5bGUubWFyZ2luVG9wID0gXCIxJVwiO1xuICAgICAgICAgICAgc3VwcG9ydC5waXhlbE1hcmdpbiA9ICggd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiwgbnVsbCApIHx8IHsgbWFyZ2luVG9wOiAwIH0gKS5tYXJnaW5Ub3AgIT09IFwiMSVcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHR5cGVvZiBjb250YWluZXIuc3R5bGUuem9vbSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS56b29tID0gMTtcbiAgICAgICAgfVxuICAgICAgICBib2R5LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcbiAgICAgICAgbWFyZ2luRGl2ID0gZGl2ID0gY29udGFpbmVyID0gbnVsbDtcbiAgICAgICAgalF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwgb2Zmc2V0U3VwcG9ydCApO1xuICAgIH0pO1xuICAgIHJldHVybiBzdXBwb3J0O1xufSkoKTtcbnZhciByYnJhY2UgPSAvXig/Olxcey4qXFx9fFxcWy4qXFxdKSQvLFxuICAgIHJtdWx0aURhc2ggPSAvKFtBLVpdKS9nO1xualF1ZXJ5LmV4dGVuZCh7XG4gICAgY2FjaGU6IHt9LFxuICAgIHV1aWQ6IDAsXG4gICAgZXhwYW5kbzogXCJqUXVlcnlcIiArICggalF1ZXJ5LmZuLmpxdWVyeSArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcbiAgICBub0RhdGE6IHtcbiAgICAgICAgXCJlbWJlZFwiOiB0cnVlLFxuICAgICAgICBcIm9iamVjdFwiOiBcImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMFwiLFxuICAgICAgICBcImFwcGxldFwiOiB0cnVlXG4gICAgfSxcbiAgICBoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgZWxlbSA9IGVsZW0ubm9kZVR5cGUgPyBqUXVlcnkuY2FjaGVbIGVsZW1balF1ZXJ5LmV4cGFuZG9dIF0gOiBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdO1xuICAgICAgICByZXR1cm4gISFlbGVtICYmICFpc0VtcHR5RGF0YU9iamVjdCggZWxlbSApO1xuICAgIH0sXG4gICAgZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEsIHB2dCAgKSB7XG4gICAgICAgIGlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByaXZhdGVDYWNoZSwgdGhpc0NhY2hlLCByZXQsXG4gICAgICAgICAgICBpbnRlcm5hbEtleSA9IGpRdWVyeS5leHBhbmRvLFxuICAgICAgICAgICAgZ2V0QnlOYW1lID0gdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLFxuICAgICAgICAgICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLFxuICAgICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBpbnRlcm5hbEtleSBdIDogZWxlbVsgaW50ZXJuYWxLZXkgXSAmJiBpbnRlcm5hbEtleSxcbiAgICAgICAgICAgIGlzRXZlbnRzID0gbmFtZSA9PT0gXCJldmVudHNcIjtcbiAgICAgICAgaWYgKCAoIWlkIHx8ICFjYWNoZVtpZF0gfHwgKCFpc0V2ZW50cyAmJiAhcHZ0ICYmICFjYWNoZVtpZF0uZGF0YSkpICYmIGdldEJ5TmFtZSAmJiBkYXRhID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAhaWQgKSB7XG4gICAgICAgICAgICBpZiAoIGlzTm9kZSApIHtcbiAgICAgICAgICAgICAgICBlbGVtWyBpbnRlcm5hbEtleSBdID0gaWQgPSArK2pRdWVyeS51dWlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZCA9IGludGVybmFsS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggIWNhY2hlWyBpZCBdICkge1xuICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSB7fTtcbiAgICAgICAgICAgIGlmICggIWlzTm9kZSApIHtcbiAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXS50b0pTT04gPSBqUXVlcnkubm9vcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIHR5cGVvZiBuYW1lID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgKSB7XG4gICAgICAgICAgICBpZiAoIHB2dCApIHtcbiAgICAgICAgICAgICAgICBjYWNoZVsgaWQgXSA9IGpRdWVyeS5leHRlbmQoIGNhY2hlWyBpZCBdLCBuYW1lICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhY2hlWyBpZCBdLmRhdGEgPSBqUXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQgXS5kYXRhLCBuYW1lICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJpdmF0ZUNhY2hlID0gdGhpc0NhY2hlID0gY2FjaGVbIGlkIF07XG4gICAgICAgIGlmICggIXB2dCApIHtcbiAgICAgICAgICAgIGlmICggIXRoaXNDYWNoZS5kYXRhICkge1xuICAgICAgICAgICAgICAgIHRoaXNDYWNoZS5kYXRhID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzQ2FjaGUgPSB0aGlzQ2FjaGUuZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgIHRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF0gPSBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICggaXNFdmVudHMgJiYgIXRoaXNDYWNoZVsgbmFtZSBdICkge1xuICAgICAgICAgICAgcmV0dXJuIHByaXZhdGVDYWNoZS5ldmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBnZXRCeU5hbWUgKSB7XG4gICAgICAgICAgICByZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTtcbiAgICAgICAgICAgIGlmICggcmV0ID09IG51bGwgKSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldCA9IHRoaXNDYWNoZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHB2dCAgKSB7XG4gICAgICAgIGlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHRoaXNDYWNoZSwgaSwgbCxcbiAgICAgICAgICAgIGludGVybmFsS2V5ID0galF1ZXJ5LmV4cGFuZG8sXG4gICAgICAgICAgICBpc05vZGUgPSBlbGVtLm5vZGVUeXBlLFxuICAgICAgICAgICAgY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLFxuICAgICAgICAgICAgaWQgPSBpc05vZGUgPyBlbGVtWyBpbnRlcm5hbEtleSBdIDogaW50ZXJuYWxLZXk7XG4gICAgICAgIGlmICggIWNhY2hlWyBpZCBdICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICggbmFtZSApIHtcbiAgICAgICAgICAgIHRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBdIDogY2FjaGVbIGlkIF0uZGF0YTtcbiAgICAgICAgICAgIGlmICggdGhpc0NhY2hlICkge1xuICAgICAgICAgICAgICAgIGlmICggIWpRdWVyeS5pc0FycmF5KCBuYW1lICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gWyBuYW1lIF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBuYW1lIGluIHRoaXNDYWNoZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gWyBuYW1lIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lLnNwbGl0KCBcIiBcIiApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gbmFtZS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzQ2FjaGVbIG5hbWVbaV0gXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCAhKCBwdnQgPyBpc0VtcHR5RGF0YU9iamVjdCA6IGpRdWVyeS5pc0VtcHR5T2JqZWN0ICkoIHRoaXNDYWNoZSApICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggIXB2dCApIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjYWNoZVsgaWQgXS5kYXRhO1xuICAgICAgICAgICAgaWYgKCAhaXNFbXB0eURhdGFPYmplY3QoY2FjaGVbIGlkIF0pICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgIWNhY2hlLnNldEludGVydmFsICkge1xuICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVbIGlkIF0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICggaXNOb2RlICkge1xuICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvICkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBpbnRlcm5hbEtleSBdO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGludGVybmFsS2V5ICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1bIGludGVybmFsS2V5IF0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuZGF0YSggZWxlbSwgbmFtZSwgZGF0YSwgdHJ1ZSApO1xuICAgIH0sXG4gICAgYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIGlmICggZWxlbS5ub2RlTmFtZSApIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IGpRdWVyeS5ub0RhdGFbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuICAgICAgICAgICAgaWYgKCBtYXRjaCApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIShtYXRjaCA9PT0gdHJ1ZSB8fCBlbGVtLmdldEF0dHJpYnV0ZShcImNsYXNzaWRcIikgIT09IG1hdGNoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59KTtcbmpRdWVyeS5mbi5leHRlbmQoe1xuICAgIGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuICAgICAgICB2YXIgcGFydHMsIHBhcnQsIGF0dHIsIG5hbWUsIGwsXG4gICAgICAgICAgICBlbGVtID0gdGhpc1swXSxcbiAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgZGF0YSA9IG51bGw7XG4gICAgICAgIGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICBpZiAoIHRoaXMubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSApO1xuICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCBcInBhcnNlZEF0dHJzXCIgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0ciA9IGVsZW0uYXR0cmlidXRlcztcbiAgICAgICAgICAgICAgICAgICAgZm9yICggbCA9IGF0dHIubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGF0dHJbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZS5zdWJzdHJpbmcoNSkgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBcInBhcnNlZEF0dHJzXCIsIHRydWUgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCB0aGlzLCBrZXkgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBhcnRzID0ga2V5LnNwbGl0KCBcIi5cIiwgMiApO1xuICAgICAgICBwYXJ0c1sxXSA9IHBhcnRzWzFdID8gXCIuXCIgKyBwYXJ0c1sxXSA6IFwiXCI7XG4gICAgICAgIHBhcnQgPSBwYXJ0c1sxXSArIFwiIVwiO1xuICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCBcImdldERhdGFcIiArIHBhcnQsIFsgcGFydHNbMF0gXSApO1xuICAgICAgICAgICAgICAgIGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSwga2V5ICk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEoIHBhcnRzWzBdICkgOlxuICAgICAgICAgICAgICAgICAgICBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFydHNbMV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApO1xuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlckhhbmRsZXIoIFwic2V0RGF0YVwiICsgcGFydCwgcGFydHMgKTtcbiAgICAgICAgICAgICAgICBqUXVlcnkuZGF0YSggdGhpcywga2V5LCB2YWx1ZSApO1xuICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlckhhbmRsZXIoIFwiY2hhbmdlRGF0YVwiICsgcGFydCwgcGFydHMgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIGZhbHNlICk7XG4gICAgfSxcbiAgICByZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIHRoaXMsIGtleSApO1xuICAgICAgICB9KTtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG4gICAgaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgdmFyIG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJDFcIiApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuICAgICAgICBpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDpcbiAgICAgICAgICAgICAgICBkYXRhID09PSBcImZhbHNlXCIgPyBmYWxzZSA6XG4gICAgICAgICAgICAgICAgZGF0YSA9PT0gXCJudWxsXCIgPyBudWxsIDpcbiAgICAgICAgICAgICAgICBqUXVlcnkuaXNOdW1lcmljKCBkYXRhICkgPyArZGF0YSA6XG4gICAgICAgICAgICAgICAgICAgIHJicmFjZS50ZXN0KCBkYXRhICkgPyBqUXVlcnkucGFyc2VKU09OKCBkYXRhICkgOlxuICAgICAgICAgICAgICAgICAgICBkYXRhO1xuICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9XG4gICAgICAgICAgICBqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBkYXRhICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkge1xuICAgIGZvciAoIHZhciBuYW1lIGluIG9iaiApIHtcbiAgICAgICAgaWYgKCBuYW1lID09PSBcImRhdGFcIiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb2JqW25hbWVdICkgKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIG5hbWUgIT09IFwidG9KU09OXCIgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVF1ZXVlTWFya0RlZmVyKCBlbGVtLCB0eXBlLCBzcmMgKSB7XG4gICAgdmFyIGRlZmVyRGF0YUtleSA9IHR5cGUgKyBcImRlZmVyXCIsXG4gICAgICAgIHF1ZXVlRGF0YUtleSA9IHR5cGUgKyBcInF1ZXVlXCIsXG4gICAgICAgIG1hcmtEYXRhS2V5ID0gdHlwZSArIFwibWFya1wiLFxuICAgICAgICBkZWZlciA9IGpRdWVyeS5fZGF0YSggZWxlbSwgZGVmZXJEYXRhS2V5ICk7XG4gICAgaWYgKCBkZWZlciAmJlxuICAgICAgICAoIHNyYyA9PT0gXCJxdWV1ZVwiIHx8ICFqUXVlcnkuX2RhdGEoZWxlbSwgcXVldWVEYXRhS2V5KSApICYmXG4gICAgICAgICggc3JjID09PSBcIm1hcmtcIiB8fCAhalF1ZXJ5Ll9kYXRhKGVsZW0sIG1hcmtEYXRhS2V5KSApICkge1xuICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggIWpRdWVyeS5fZGF0YSggZWxlbSwgcXVldWVEYXRhS2V5ICkgJiZcbiAgICAgICAgICAgICAgICAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCBtYXJrRGF0YUtleSApICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBkZWZlckRhdGFLZXksIHRydWUgKTtcbiAgICAgICAgICAgICAgICBkZWZlci5maXJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDAgKTtcbiAgICB9XG59XG5cbmpRdWVyeS5leHRlbmQoe1xuICAgIF9tYXJrOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcbiAgICAgICAgaWYgKCBlbGVtICkge1xuICAgICAgICAgICAgdHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwibWFya1wiO1xuICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlLCAoalF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlICkgfHwgMCkgKyAxICk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIF91bm1hcms6IGZ1bmN0aW9uKCBmb3JjZSwgZWxlbSwgdHlwZSApIHtcbiAgICAgICAgaWYgKCBmb3JjZSAhPT0gdHJ1ZSApIHtcbiAgICAgICAgICAgIHR5cGUgPSBlbGVtO1xuICAgICAgICAgICAgZWxlbSA9IGZvcmNlO1xuICAgICAgICAgICAgZm9yY2UgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGVsZW0gKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG4gICAgICAgICAgICB2YXIga2V5ID0gdHlwZSArIFwibWFya1wiLFxuICAgICAgICAgICAgICAgIGNvdW50ID0gZm9yY2UgPyAwIDogKCAoalF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXkgKSB8fCAxKSAtIDEgKTtcbiAgICAgICAgICAgIGlmICggY291bnQgKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBlbGVtLCBrZXksIGNvdW50ICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBrZXksIHRydWUgKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVRdWV1ZU1hcmtEZWZlciggZWxlbSwgdHlwZSwgXCJtYXJrXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuICAgICAgICB2YXIgcTtcbiAgICAgICAgaWYgKCBlbGVtICkge1xuICAgICAgICAgICAgdHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcbiAgICAgICAgICAgIHEgPSBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKTtcbiAgICAgICAgICAgIGlmICggZGF0YSApIHtcbiAgICAgICAgICAgICAgICBpZiAoICFxIHx8IGpRdWVyeS5pc0FycmF5KGRhdGEpICkge1xuICAgICAgICAgICAgICAgICAgICBxID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcS5wdXNoKCBkYXRhICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHEgfHwgW107XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuICAgICAgICB0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG4gICAgICAgIHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuICAgICAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpLFxuICAgICAgICAgICAgaG9va3MgPSB7fTtcbiAgICAgICAgaWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG4gICAgICAgICAgICBmbiA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBmbiApIHtcbiAgICAgICAgICAgIGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuICAgICAgICAgICAgICAgIHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sIHR5cGUgKyBcIi5ydW5cIiwgaG9va3MgKTtcbiAgICAgICAgICAgIGZuLmNhbGwoIGVsZW0sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG4gICAgICAgICAgICB9LCBob29rcyApO1xuICAgICAgICB9XG4gICAgICAgIGlmICggIXF1ZXVlLmxlbmd0aCApIHtcbiAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgXCJxdWV1ZSBcIiArIHR5cGUgKyBcIi5ydW5cIiwgdHJ1ZSApO1xuICAgICAgICAgICAgaGFuZGxlUXVldWVNYXJrRGVmZXIoIGVsZW0sIHR5cGUsIFwicXVldWVcIiApO1xuICAgICAgICB9XG4gICAgfVxufSk7XG5qUXVlcnkuZm4uZXh0ZW5kKHtcbiAgICBxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG4gICAgICAgIHZhciBzZXR0ZXIgPSAyO1xuICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgZGF0YSA9IHR5cGU7XG4gICAgICAgICAgICB0eXBlID0gXCJmeFwiO1xuICAgICAgICAgICAgc2V0dGVyLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwgdHlwZSApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuICAgICAgICAgICAgdGhpcyA6XG4gICAgICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbMF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH0sXG4gICAgZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGRlbGF5OiBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcbiAgICAgICAgdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG4gICAgICAgICAgICBob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG4gICAgfSxcbiAgICBwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqZWN0ICkge1xuICAgICAgICBpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgb2JqZWN0ID0gdHlwZTtcbiAgICAgICAgICAgIHR5cGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuICAgICAgICB2YXIgZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcbiAgICAgICAgICAgIGVsZW1lbnRzID0gdGhpcyxcbiAgICAgICAgICAgIGkgPSBlbGVtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBjb3VudCA9IDEsXG4gICAgICAgICAgICBkZWZlckRhdGFLZXkgPSB0eXBlICsgXCJkZWZlclwiLFxuICAgICAgICAgICAgcXVldWVEYXRhS2V5ID0gdHlwZSArIFwicXVldWVcIixcbiAgICAgICAgICAgIG1hcmtEYXRhS2V5ID0gdHlwZSArIFwibWFya1wiLFxuICAgICAgICAgICAgdG1wO1xuICAgICAgICBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgICAgICAgICAgaWYgKCAhKCAtLWNvdW50ICkgKSB7XG4gICAgICAgICAgICAgICAgZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aGlsZSggaS0tICkge1xuICAgICAgICAgICAgaWYgKCggdG1wID0galF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIGRlZmVyRGF0YUtleSwgdW5kZWZpbmVkLCB0cnVlICkgfHxcbiAgICAgICAgICAgICAgICAgICAgKCBqUXVlcnkuZGF0YSggZWxlbWVudHNbIGkgXSwgcXVldWVEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmRhdGEoIGVsZW1lbnRzWyBpIF0sIG1hcmtEYXRhS2V5LCB1bmRlZmluZWQsIHRydWUgKSApICYmXG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5kYXRhKCBlbGVtZW50c1sgaSBdLCBkZWZlckRhdGFLZXksIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCB0cnVlICkgKSkge1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgdG1wLmFkZCggcmVzb2x2ZSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuIGRlZmVyLnByb21pc2UoIG9iamVjdCApO1xuICAgIH1cbn0pO1xudmFyIHJjbGFzcyA9IC9bXFxuXFx0XFxyXS9nLFxuICAgIHJzcGFjZSA9IC9cXHMrLyxcbiAgICBycmV0dXJuID0gL1xcci9nLFxuICAgIHJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLFxuICAgIHJmb2N1c2FibGUgPSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSxcbiAgICByY2xpY2thYmxlID0gL15hKD86cmVhKT8kL2ksXG4gICAgcmJvb2xlYW4gPSAvXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSxcbiAgICBnZXRTZXRBdHRyaWJ1dGUgPSBqUXVlcnkuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsXG4gICAgbm9kZUhvb2ssIGJvb2xIb29rLCBmaXhTcGVjaWZpZWQ7XG5qUXVlcnkuZm4uZXh0ZW5kKHtcbiAgICBhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG4gICAgfSxcbiAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuICAgICAgICByZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuICAgIH0sXG4gICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG4gICAgICAgIG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXNbIG5hbWUgXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpc1sgbmFtZSBdO1xuICAgICAgICAgICAgfSBjYXRjaCggZSApIHt9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgYWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcbiAgICAgICAgdmFyIGNsYXNzTmFtZXMsIGksIGwsIGVsZW0sXG4gICAgICAgICAgICBzZXRDbGFzcywgYywgY2w7XG4gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBqICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG4gICAgICAgICAgICBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIHJzcGFjZSApO1xuICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1sgaSBdO1xuICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhZWxlbS5jbGFzc05hbWUgJiYgY2xhc3NOYW1lcy5sZW5ndGggPT09IDEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgPSBcIiBcIiArIGVsZW0uY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBjID0gMCwgY2wgPSBjbGFzc05hbWVzLmxlbmd0aDsgYyA8IGNsOyBjKysgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhfnNldENsYXNzLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lc1sgYyBdICsgXCIgXCIgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgXCIgXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBqUXVlcnkudHJpbSggc2V0Q2xhc3MgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG4gICAgICAgIHZhciBjbGFzc05hbWVzLCBpLCBsLCBlbGVtLCBjbGFzc05hbWUsIGMsIGNsO1xuICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBqLCB0aGlzLmNsYXNzTmFtZSkgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICggKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMgPSAoIHZhbHVlIHx8IFwiXCIgKS5zcGxpdCggcnNwYWNlICk7XG4gICAgICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07XG4gICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVsZW0uY2xhc3NOYW1lICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gKFwiIFwiICsgZWxlbS5jbGFzc05hbWUgKyBcIiBcIikucmVwbGFjZSggcmNsYXNzLCBcIiBcIiApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggYyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKFwiIFwiICsgY2xhc3NOYW1lc1sgYyBdICsgXCIgXCIsIFwiIFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG4gICAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuICAgICAgICAgICAgaXNCb29sID0gdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIjtcbiAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoIHZhbHVlLmNhbGwodGhpcywgaSwgdGhpcy5jbGFzc05hbWUsIHN0YXRlVmFsKSwgc3RhdGVWYWwgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZVZhbCxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCByc3BhY2UgKTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoIChjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGZbIHN0YXRlID8gXCJhZGRDbGFzc1wiIDogXCJyZW1vdmVDbGFzc1wiIF0oIGNsYXNzTmFtZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLmNsYXNzTmFtZSApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgdGhpcy5jbGFzc05hbWUgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSB0aGlzLmNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgPyBcIlwiIDogalF1ZXJ5Ll9kYXRhKCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgaGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIixcbiAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgbCA9IHRoaXMubGVuZ3RoO1xuICAgICAgICBmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG4gICAgICAgICAgICBpZiAoIHRoaXNbaV0ubm9kZVR5cGUgPT09IDEgJiYgKFwiIFwiICsgdGhpc1tpXS5jbGFzc05hbWUgKyBcIiBcIikucmVwbGFjZShyY2xhc3MsIFwiIFwiKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuICAgICAgICB2YXIgaG9va3MsIHJldCwgaXNGdW5jdGlvbixcbiAgICAgICAgICAgIGVsZW0gPSB0aGlzWzBdO1xuICAgICAgICBpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuICAgICAgICAgICAgaWYgKCBlbGVtICkge1xuICAgICAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuICAgICAgICAgICAgICAgIGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSkgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiA/XG4gICAgICAgICAgICAgICAgICAgIHJldC5yZXBsYWNlKHJyZXR1cm4sIFwiXCIpIDpcbiAgICAgICAgICAgICAgICAgICAgcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlzRnVuY3Rpb24gPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaSApIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCB2YWw7XG4gICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBpc0Z1bmN0aW9uICkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIHNlbGYudmFsKCkgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIHZhbCA9IFwiXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuICAgICAgICAgICAgICAgIHZhbCArPSBcIlwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkge1xuICAgICAgICAgICAgICAgIHZhbCA9IGpRdWVyeS5tYXAodmFsLCBmdW5jdGlvbiAoIHZhbHVlICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcbiAgICAgICAgICAgIGlmICggIWhvb2tzIHx8ICEoXCJzZXRcIiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5qUXVlcnkuZXh0ZW5kKHtcbiAgICB2YWxIb29rczoge1xuICAgICAgICBvcHRpb246IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0uYXR0cmlidXRlcy52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXZhbCB8fCB2YWwuc3BlY2lmaWVkID8gZWxlbS52YWx1ZSA6IGVsZW0udGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0OiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSwgaSwgbWF4LCBvcHRpb24sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgb25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIjtcbiAgICAgICAgICAgICAgICBpZiAoIGluZGV4IDwgMCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkgPSBvbmUgPyBpbmRleCA6IDA7XG4gICAgICAgICAgICAgICAgbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBvcHRpb24uc2VsZWN0ZWQgJiYgKGpRdWVyeS5zdXBwb3J0Lm9wdERpc2FibGVkID8gIW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSA9PT0gbnVsbCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8ICFqUXVlcnkubm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG9uZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCggdmFsdWUgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIG9uZSAmJiAhdmFsdWVzLmxlbmd0aCAmJiBvcHRpb25zLmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggb3B0aW9uc1sgaW5kZXggXSApLnZhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApO1xuICAgICAgICAgICAgICAgIGpRdWVyeShlbGVtKS5maW5kKFwib3B0aW9uXCIpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICggIXZhbHVlcy5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBhdHRyRm46IHtcbiAgICAgICAgdmFsOiB0cnVlLFxuICAgICAgICBjc3M6IHRydWUsXG4gICAgICAgIGh0bWw6IHRydWUsXG4gICAgICAgIHRleHQ6IHRydWUsXG4gICAgICAgIGRhdGE6IHRydWUsXG4gICAgICAgIHdpZHRoOiB0cnVlLFxuICAgICAgICBoZWlnaHQ6IHRydWUsXG4gICAgICAgIG9mZnNldDogdHJ1ZVxuICAgIH0sXG4gICAgYXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBwYXNzICkge1xuICAgICAgICB2YXIgcmV0LCBob29rcywgbm90eG1sLFxuICAgICAgICAgICAgblR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuICAgICAgICBpZiAoICFlbGVtIHx8IG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICggcGFzcyAmJiBuYW1lIGluIGpRdWVyeS5hdHRyRm4gKSB7XG4gICAgICAgICAgICByZXR1cm4galF1ZXJ5KCBlbGVtIClbIG5hbWUgXSggdmFsdWUgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcbiAgICAgICAgICAgIHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcbiAgICAgICAgfVxuICAgICAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7XG4gICAgICAgIGlmICggbm90eG1sICkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8ICggcmJvb2xlYW4udGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiBub2RlSG9vayApO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgIGlmICggdmFsdWUgPT09IG51bGwgKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmIG5vdHhtbCAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBcIlwiICsgdmFsdWUgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgbm90eG1sICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcbiAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgP1xuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCA6XG4gICAgICAgICAgICAgICAgcmV0O1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG4gICAgICAgIHZhciBwcm9wTmFtZSwgYXR0ck5hbWVzLCBuYW1lLCBsLCBpc0Jvb2wsXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgaWYgKCB2YWx1ZSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgYXR0ck5hbWVzID0gdmFsdWUudG9Mb3dlckNhc2UoKS5zcGxpdCggcnNwYWNlICk7XG4gICAgICAgICAgICBsID0gYXR0ck5hbWVzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICBuYW1lID0gYXR0ck5hbWVzWyBpIF07XG4gICAgICAgICAgICAgICAgaWYgKCBuYW1lICkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaXNCb29sID0gcmJvb2xlYW4udGVzdCggbmFtZSApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Jvb2wgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXR0ciggZWxlbSwgbmFtZSwgXCJcIiApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBnZXRTZXRBdHRyaWJ1dGUgPyBuYW1lIDogcHJvcE5hbWUgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBpc0Jvb2wgJiYgcHJvcE5hbWUgaW4gZWxlbSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgYXR0ckhvb2tzOiB7XG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuICAgICAgICAgICAgICAgIGlmICggcnR5cGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0ucGFyZW50Tm9kZSApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBcInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZFwiICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggIWpRdWVyeS5zdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJiBqUXVlcnkubm9kZU5hbWUoZWxlbSwgXCJpbnB1dFwiKSApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVsZW0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWwgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuICAgICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcImJ1dHRvblwiICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSG9vay5nZXQoIGVsZW0sIG5hbWUgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgaW4gZWxlbSA/XG4gICAgICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgOlxuICAgICAgICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuICAgICAgICAgICAgICAgIGlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcImJ1dHRvblwiICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW0udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJvcEZpeDoge1xuICAgICAgICB0YWJpbmRleDogXCJ0YWJJbmRleFwiLFxuICAgICAgICByZWFkb25seTogXCJyZWFkT25seVwiLFxuICAgICAgICBcImZvclwiOiBcImh0bWxGb3JcIixcbiAgICAgICAgXCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiLFxuICAgICAgICBtYXhsZW5ndGg6IFwibWF4TGVuZ3RoXCIsXG4gICAgICAgIGNlbGxzcGFjaW5nOiBcImNlbGxTcGFjaW5nXCIsXG4gICAgICAgIGNlbGxwYWRkaW5nOiBcImNlbGxQYWRkaW5nXCIsXG4gICAgICAgIHJvd3NwYW46IFwicm93U3BhblwiLFxuICAgICAgICBjb2xzcGFuOiBcImNvbFNwYW5cIixcbiAgICAgICAgdXNlbWFwOiBcInVzZU1hcFwiLFxuICAgICAgICBmcmFtZWJvcmRlcjogXCJmcmFtZUJvcmRlclwiLFxuICAgICAgICBjb250ZW50ZWRpdGFibGU6IFwiY29udGVudEVkaXRhYmxlXCJcbiAgICB9LFxuICAgIHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcbiAgICAgICAgdmFyIHJldCwgaG9va3MsIG5vdHhtbCxcbiAgICAgICAgICAgIG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcbiAgICAgICAgaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7XG4gICAgICAgIGlmICggbm90eG1sICkge1xuICAgICAgICAgICAgbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcbiAgICAgICAgICAgIGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgIGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApKSAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbVsgbmFtZSBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBwcm9wSG9va3M6IHtcbiAgICAgICAgdGFiSW5kZXg6IHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZU5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoXCJ0YWJpbmRleFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlTm9kZSAmJiBhdHRyaWJ1dGVOb2RlLnNwZWNpZmllZCA/XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDpcbiAgICAgICAgICAgICAgICAgICAgcmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHwgcmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgZWxlbS5ocmVmID9cbiAgICAgICAgICAgICAgICAgICAgICAgIDAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG5qUXVlcnkuYXR0ckhvb2tzLnRhYmluZGV4ID0galF1ZXJ5LnByb3BIb29rcy50YWJJbmRleDtcbmJvb2xIb29rID0ge1xuICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG4gICAgICAgIHZhciBhdHRyTm9kZSxcbiAgICAgICAgICAgIHByb3BlcnR5ID0galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUgKTtcbiAgICAgICAgcmV0dXJuIHByb3BlcnR5ID09PSB0cnVlIHx8IHR5cGVvZiBwcm9wZXJ0eSAhPT0gXCJib29sZWFuXCIgJiYgKCBhdHRyTm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSApICYmIGF0dHJOb2RlLm5vZGVWYWx1ZSAhPT0gZmFsc2UgP1xuICAgICAgICAgICAgbmFtZS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuICAgICAgICB2YXIgcHJvcE5hbWU7XG4gICAgICAgIGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3BOYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuICAgICAgICAgICAgaWYgKCBwcm9wTmFtZSBpbiBlbGVtICkge1xuICAgICAgICAgICAgICAgIGVsZW1bIHByb3BOYW1lIF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbn07XG5pZiAoICFnZXRTZXRBdHRyaWJ1dGUgKSB7XG4gICAgZml4U3BlY2lmaWVkID0ge1xuICAgICAgICBuYW1lOiB0cnVlLFxuICAgICAgICBpZDogdHJ1ZSxcbiAgICAgICAgY29vcmRzOiB0cnVlXG4gICAgfTtcbiAgICBub2RlSG9vayA9IGpRdWVyeS52YWxIb29rcy5idXR0b24gPSB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG4gICAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgICAgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICk7XG4gICAgICAgICAgICByZXR1cm4gcmV0ICYmICggZml4U3BlY2lmaWVkWyBuYW1lIF0gPyByZXQubm9kZVZhbHVlICE9PSBcIlwiIDogcmV0LnNwZWNpZmllZCApID9cbiAgICAgICAgICAgICAgICByZXQubm9kZVZhbHVlIDpcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuICAgICAgICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApO1xuICAgICAgICAgICAgaWYgKCAhcmV0ICkge1xuICAgICAgICAgICAgICAgIHJldCA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSggbmFtZSApO1xuICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlTm9kZSggcmV0ICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKCByZXQubm9kZVZhbHVlID0gdmFsdWUgKyBcIlwiICk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGpRdWVyeS5hdHRySG9va3MudGFiaW5kZXguc2V0ID0gbm9kZUhvb2suc2V0O1xuICAgIGpRdWVyeS5lYWNoKFsgXCJ3aWR0aFwiLCBcImhlaWdodFwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuICAgICAgICBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHtcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuICAgICAgICAgICAgICAgIGlmICggdmFsdWUgPT09IFwiXCIgKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBcImF1dG9cIiApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBqUXVlcnkuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZSA9IHtcbiAgICAgICAgZ2V0OiBub2RlSG9vay5nZXQsXG4gICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuICAgICAgICAgICAgaWYgKCB2YWx1ZSA9PT0gXCJcIiApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiZmFsc2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVIb29rLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmlmICggIWpRdWVyeS5zdXBwb3J0LmhyZWZOb3JtYWxpemVkICkge1xuICAgIGpRdWVyeS5lYWNoKFsgXCJocmVmXCIsIFwic3JjXCIsIFwid2lkdGhcIiwgXCJoZWlnaHRcIiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHtcbiAgICAgICAgalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgICAgIHZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgMiApO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5pZiAoICFqUXVlcnkuc3VwcG9ydC5zdHlsZSApIHtcbiAgICBqUXVlcnkuYXR0ckhvb2tzLnN0eWxlID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG4gICAgICAgICAgICByZXR1cm4gKCBlbGVtLnN0eWxlLmNzc1RleHQgPSBcIlwiICsgdmFsdWUgKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmlmICggIWpRdWVyeS5zdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuICAgIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYgKCBwYXJlbnQgKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LnNlbGVjdGVkSW5kZXg7XG4gICAgICAgICAgICAgICAgaWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5pZiAoICFqUXVlcnkuc3VwcG9ydC5lbmN0eXBlICkge1xuICAgIGpRdWVyeS5wcm9wRml4LmVuY3R5cGUgPSBcImVuY29kaW5nXCI7XG59XG5cbmlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrT24gKSB7XG4gICAgalF1ZXJ5LmVhY2goWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcbiAgICAgICAgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxualF1ZXJ5LmVhY2goWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcbiAgICBqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggdmFsdWUgKSApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG52YXIgcmZvcm1FbGVtcyA9IC9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxcbiAgICBydHlwZW5hbWVzcGFjZSA9IC9eKFteXFwuXSopPyg/OlxcLiguKykpPyQvLFxuICAgIHJob3ZlckhhY2sgPSAvKD86XnxcXHMpaG92ZXIoXFwuXFxTKyk/XFxiLyxcbiAgICBya2V5RXZlbnQgPSAvXmtleS8sXG4gICAgcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sXG4gICAgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG4gICAgcnF1aWNrSXMgPSAvXihcXHcqKSg/OiMoW1xcd1xcLV0rKSk/KD86XFwuKFtcXHdcXC1dKykpPyQvLFxuICAgIHF1aWNrUGFyc2UgPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG4gICAgICAgIHZhciBxdWljayA9IHJxdWlja0lzLmV4ZWMoIHNlbGVjdG9yICk7XG4gICAgICAgIGlmICggcXVpY2sgKSB7XG4gICAgICAgICAgICBxdWlja1sxXSA9ICggcXVpY2tbMV0gfHwgXCJcIiApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBxdWlja1szXSA9IHF1aWNrWzNdICYmIG5ldyBSZWdFeHAoIFwiKD86XnxcXFxccylcIiArIHF1aWNrWzNdICsgXCIoPzpcXFxcc3wkKVwiICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1aWNrO1xuICAgIH0sXG4gICAgcXVpY2tJcyA9IGZ1bmN0aW9uKCBlbGVtLCBtICkge1xuICAgICAgICB2YXIgYXR0cnMgPSBlbGVtLmF0dHJpYnV0ZXMgfHwge307XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoIW1bMV0gfHwgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBtWzFdKSAmJlxuICAgICAgICAgICAgKCFtWzJdIHx8IChhdHRycy5pZCB8fCB7fSkudmFsdWUgPT09IG1bMl0pICYmXG4gICAgICAgICAgICAoIW1bM10gfHwgbVszXS50ZXN0KCAoYXR0cnNbIFwiY2xhc3NcIiBdIHx8IHt9KS52YWx1ZSApKVxuICAgICAgICApO1xuICAgIH0sXG4gICAgaG92ZXJIYWNrID0gZnVuY3Rpb24oIGV2ZW50cyApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC5zcGVjaWFsLmhvdmVyID8gZXZlbnRzIDogZXZlbnRzLnJlcGxhY2UoIHJob3ZlckhhY2ssIFwibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMVwiICk7XG4gICAgfTtcbmpRdWVyeS5ldmVudCA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG4gICAgICAgIHZhciBlbGVtRGF0YSwgZXZlbnRIYW5kbGUsIGV2ZW50cyxcbiAgICAgICAgICAgIHQsIHRucywgdHlwZSwgbmFtZXNwYWNlcywgaGFuZGxlT2JqLFxuICAgICAgICAgICAgaGFuZGxlT2JqSW4sIHF1aWNrLCBoYW5kbGVycywgc3BlY2lhbDtcbiAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIXR5cGVzIHx8ICFoYW5kbGVyIHx8ICEoZWxlbURhdGEgPSBqUXVlcnkuX2RhdGEoIGVsZW0gKSkgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG4gICAgICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG4gICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcbiAgICAgICAgICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAhaGFuZGxlci5ndWlkICkge1xuICAgICAgICAgICAgaGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcbiAgICAgICAgfVxuICAgICAgICBldmVudHMgPSBlbGVtRGF0YS5ldmVudHM7XG4gICAgICAgIGlmICggIWV2ZW50cyApIHtcbiAgICAgICAgICAgIGVsZW1EYXRhLmV2ZW50cyA9IGV2ZW50cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlO1xuICAgICAgICBpZiAoICFldmVudEhhbmRsZSApIHtcbiAgICAgICAgICAgIGVsZW1EYXRhLmhhbmRsZSA9IGV2ZW50SGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgKCFlIHx8IGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSkgP1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGV2ZW50SGFuZGxlLmVsZW0sIGFyZ3VtZW50cyApIDpcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGV2ZW50SGFuZGxlLmVsZW0gPSBlbGVtO1xuICAgICAgICB9XG4gICAgICAgIHR5cGVzID0galF1ZXJ5LnRyaW0oIGhvdmVySGFjayh0eXBlcykgKS5zcGxpdCggXCIgXCIgKTtcbiAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHtcbiAgICAgICAgICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107XG4gICAgICAgICAgICB0eXBlID0gdG5zWzFdO1xuICAgICAgICAgICAgbmFtZXNwYWNlcyA9ICggdG5zWzJdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG4gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcbiAgICAgICAgICAgIHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcbiAgICAgICAgICAgIHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuICAgICAgICAgICAgaGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCh7XG4gICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICBvcmlnVHlwZTogdG5zWzFdLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICBndWlkOiBoYW5kbGVyLmd1aWQsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgICAgICAgICAgICAgIHF1aWNrOiBzZWxlY3RvciAmJiBxdWlja1BhcnNlKCBzZWxlY3RvciApLFxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKFwiLlwiKVxuICAgICAgICAgICAgfSwgaGFuZGxlT2JqSW4gKTtcbiAgICAgICAgICAgIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF07XG4gICAgICAgICAgICBpZiAoICFoYW5kbGVycyApIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKCAhc3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZlbnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmF0dGFjaEV2ZW50KCBcIm9uXCIgKyB0eXBlLCBldmVudEhhbmRsZSApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBzcGVjaWFsLmFkZCApIHtcbiAgICAgICAgICAgICAgICBzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcbiAgICAgICAgICAgICAgICBpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggc2VsZWN0b3IgKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbSA9IG51bGw7XG4gICAgfSxcbiAgICBnbG9iYWw6IHt9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG4gICAgICAgIHZhciBlbGVtRGF0YSA9IGpRdWVyeS5oYXNEYXRhKCBlbGVtICkgJiYgalF1ZXJ5Ll9kYXRhKCBlbGVtICksXG4gICAgICAgICAgICB0LCB0bnMsIHR5cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBvcmlnQ291bnQsXG4gICAgICAgICAgICBqLCBldmVudHMsIHNwZWNpYWwsIGhhbmRsZSwgZXZlbnRUeXBlLCBoYW5kbGVPYmo7XG4gICAgICAgIGlmICggIWVsZW1EYXRhIHx8ICEoZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzKSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0eXBlcyA9IGpRdWVyeS50cmltKCBob3ZlckhhY2soIHR5cGVzIHx8IFwiXCIgKSApLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHtcbiAgICAgICAgICAgIHRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107XG4gICAgICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bnNbMV07XG4gICAgICAgICAgICBuYW1lc3BhY2VzID0gdG5zWzJdO1xuICAgICAgICAgICAgaWYgKCAhdHlwZSApIHtcbiAgICAgICAgICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG4gICAgICAgICAgICB0eXBlID0gKCBzZWxlY3Rvcj8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcbiAgICAgICAgICAgIGV2ZW50VHlwZSA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuICAgICAgICAgICAgb3JpZ0NvdW50ID0gZXZlbnRUeXBlLmxlbmd0aDtcbiAgICAgICAgICAgIG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cChcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5zcGxpdChcIi5cIikuc29ydCgpLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC4pP1wiKSArIFwiKFxcXFwufCQpXCIpIDogbnVsbDtcbiAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZXZlbnRUeXBlLmxlbmd0aDsgaisrICkge1xuICAgICAgICAgICAgICAgIGhhbmRsZU9iaiA9IGV2ZW50VHlwZVsgaiBdO1xuICAgICAgICAgICAgICAgIGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG4gICAgICAgICAgICAgICAgICAgICAoICFuYW1lc3BhY2VzIHx8IG5hbWVzcGFjZXMudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcbiAgICAgICAgICAgICAgICAgICAgICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlLnNwbGljZSggai0tLCAxICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlLmRlbGVnYXRlQ291bnQtLTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIGV2ZW50VHlwZS5sZW5ndGggPT09IDAgJiYgb3JpZ0NvdW50ICE9PSBldmVudFR5cGUubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgIGlmICggIXNwZWNpYWwudGVhcmRvd24gfHwgc3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzICkgPT09IGZhbHNlICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgZXZlbnRzWyB0eXBlIF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG4gICAgICAgICAgICBoYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGU7XG4gICAgICAgICAgICBpZiAoIGhhbmRsZSApIHtcbiAgICAgICAgICAgICAgICBoYW5kbGUuZWxlbSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgWyBcImV2ZW50c1wiLCBcImhhbmRsZVwiIF0sIHRydWUgKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY3VzdG9tRXZlbnQ6IHtcbiAgICAgICAgXCJnZXREYXRhXCI6IHRydWUsXG4gICAgICAgIFwic2V0RGF0YVwiOiB0cnVlLFxuICAgICAgICBcImNoYW5nZURhdGFcIjogdHJ1ZVxuICAgIH0sXG4gICAgdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG4gICAgICAgIGlmICggZWxlbSAmJiAoZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4KSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdHlwZSA9IGV2ZW50LnR5cGUgfHwgZXZlbnQsXG4gICAgICAgICAgICBuYW1lc3BhY2VzID0gW10sXG4gICAgICAgICAgICBjYWNoZSwgZXhjbHVzaXZlLCBpLCBjdXIsIG9sZCwgb250eXBlLCBzcGVjaWFsLCBoYW5kbGUsIGV2ZW50UGF0aCwgYnViYmxlVHlwZTtcbiAgICAgICAgaWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdHlwZS5pbmRleE9mKCBcIiFcIiApID49IDAgKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICBleGNsdXNpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID49IDAgKSB7XG4gICAgICAgICAgICBuYW1lc3BhY2VzID0gdHlwZS5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuICAgICAgICAgICAgbmFtZXNwYWNlcy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAoIWVsZW0gfHwgalF1ZXJ5LmV2ZW50LmN1c3RvbUV2ZW50WyB0eXBlIF0pICYmICFqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQgPSB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgP1xuICAgICAgICAgICAgZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gPyBldmVudCA6XG4gICAgICAgICAgICBuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCBldmVudCApIDpcbiAgICAgICAgICAgIG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUgKTtcbiAgICAgICAgZXZlbnQudHlwZSA9IHR5cGU7XG4gICAgICAgIGV2ZW50LmlzVHJpZ2dlciA9IHRydWU7XG4gICAgICAgIGV2ZW50LmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZTtcbiAgICAgICAgZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuICAgICAgICBldmVudC5uYW1lc3BhY2VfcmUgPSBldmVudC5uYW1lc3BhY2U/IG5ldyBSZWdFeHAoXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbihcIlxcXFwuKD86LipcXFxcLik/XCIpICsgXCIoXFxcXC58JClcIikgOiBudWxsO1xuICAgICAgICBvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwID8gXCJvblwiICsgdHlwZSA6IFwiXCI7XG4gICAgICAgIGlmICggIWVsZW0gKSB7XG4gICAgICAgICAgICBjYWNoZSA9IGpRdWVyeS5jYWNoZTtcbiAgICAgICAgICAgIGZvciAoIGkgaW4gY2FjaGUgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBjYWNoZVsgaSBdLmV2ZW50cyAmJiBjYWNoZVsgaSBdLmV2ZW50c1sgdHlwZSBdICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZXZlbnQsIGRhdGEsIGNhY2hlWyBpIF0uaGFuZGxlLmVsZW0sIHRydWUgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoICFldmVudC50YXJnZXQgKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQgPSBlbGVtO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgOiBbXTtcbiAgICAgICAgZGF0YS51bnNoaWZ0KCBldmVudCApO1xuICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcbiAgICAgICAgaWYgKCBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50UGF0aCA9IFtbIGVsZW0sIHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZSBdXTtcbiAgICAgICAgaWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcbiAgICAgICAgICAgIGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuICAgICAgICAgICAgY3VyID0gcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSA/IGVsZW0gOiBlbGVtLnBhcmVudE5vZGU7XG4gICAgICAgICAgICBvbGQgPSBudWxsO1xuICAgICAgICAgICAgZm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKFsgY3VyLCBidWJibGVUeXBlIF0pO1xuICAgICAgICAgICAgICAgIG9sZCA9IGN1cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggb2xkICYmIG9sZCA9PT0gZWxlbS5vd25lckRvY3VtZW50ICkge1xuICAgICAgICAgICAgICAgIGV2ZW50UGF0aC5wdXNoKFsgb2xkLmRlZmF1bHRWaWV3IHx8IG9sZC5wYXJlbnRXaW5kb3cgfHwgd2luZG93LCBidWJibGVUeXBlIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZXZlbnRQYXRoLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTsgaSsrICkge1xuICAgICAgICAgICAgY3VyID0gZXZlbnRQYXRoW2ldWzBdO1xuICAgICAgICAgICAgZXZlbnQudHlwZSA9IGV2ZW50UGF0aFtpXVsxXTtcbiAgICAgICAgICAgIGhhbmRsZSA9ICggalF1ZXJ5Ll9kYXRhKCBjdXIsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsIFwiaGFuZGxlXCIgKTtcbiAgICAgICAgICAgIGlmICggaGFuZGxlICkge1xuICAgICAgICAgICAgICAgIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcbiAgICAgICAgICAgIGlmICggaGFuZGxlICYmIGpRdWVyeS5hY2NlcHREYXRhKCBjdXIgKSAmJiBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApID09PSBmYWxzZSApIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnR5cGUgPSB0eXBlO1xuICAgICAgICBpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuICAgICAgICAgICAgaWYgKCAoIXNwZWNpYWwuX2RlZmF1bHQgfHwgc3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZWxlbS5vd25lckRvY3VtZW50LCBkYXRhICkgPT09IGZhbHNlKSAmJlxuICAgICAgICAgICAgICAgICEodHlwZSA9PT0gXCJjbGlja1wiICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgXCJhXCIgKSkgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIG9udHlwZSAmJiBlbGVtWyB0eXBlIF0gJiYgKCh0eXBlICE9PSBcImZvY3VzXCIgJiYgdHlwZSAhPT0gXCJibHVyXCIpIHx8IGV2ZW50LnRhcmdldC5vZmZzZXRXaWR0aCAhPT0gMCkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkge1xuICAgICAgICAgICAgICAgICAgICBvbGQgPSBlbGVtWyBvbnR5cGUgXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBvbGQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1bIHR5cGUgXSgpO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIG9sZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIG9udHlwZSBdID0gb2xkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5yZXN1bHQ7XG4gICAgfSxcbiAgICBkaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuICAgICAgICBldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIGV2ZW50IHx8IHdpbmRvdy5ldmVudCApO1xuICAgICAgICB2YXIgaGFuZGxlcnMgPSAoIChqUXVlcnkuX2RhdGEoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10pLFxuICAgICAgICAgICAgZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG4gICAgICAgICAgICBhcmdzID0gW10uc2xpY2UuY2FsbCggYXJndW1lbnRzLCAwICksXG4gICAgICAgICAgICBydW5fYWxsID0gIWV2ZW50LmV4Y2x1c2l2ZSAmJiAhZXZlbnQubmFtZXNwYWNlLFxuICAgICAgICAgICAgc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge30sXG4gICAgICAgICAgICBoYW5kbGVyUXVldWUgPSBbXSxcbiAgICAgICAgICAgIGksIGosIGN1ciwganFjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNoZWQsIG1hdGNoZXMsIGhhbmRsZU9iaiwgc2VsLCByZWxhdGVkO1xuICAgICAgICBhcmdzWzBdID0gZXZlbnQ7XG4gICAgICAgIGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcbiAgICAgICAgaWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBkZWxlZ2F0ZUNvdW50ICYmICEoZXZlbnQuYnV0dG9uICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgKSB7XG4gICAgICAgICAgICBqcWN1ciA9IGpRdWVyeSh0aGlzKTtcbiAgICAgICAgICAgIGpxY3VyLmNvbnRleHQgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcztcbiAgICAgICAgICAgIGZvciAoIGN1ciA9IGV2ZW50LnRhcmdldDsgY3VyICE9IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBjdXIuZGlzYWJsZWQgIT09IHRydWUgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbE1hdGNoID0ge307XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAganFjdXJbMF0gPSBjdXI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsTWF0Y2hbIHNlbCBdID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPYmoucXVpY2sgPyBxdWlja0lzKCBjdXIsIGhhbmRsZU9iai5xdWljayApIDoganFjdXIuaXMoIHNlbCApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2VsTWF0Y2hbIHNlbCBdICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaCggaGFuZGxlT2JqICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaGVzLmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogY3VyLCBtYXRjaGVzOiBtYXRjaGVzIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggaGFuZGxlcnMubGVuZ3RoID4gZGVsZWdhdGVDb3VudCApIHtcbiAgICAgICAgICAgIGhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogdGhpcywgbWF0Y2hlczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGhhbmRsZXJRdWV1ZS5sZW5ndGggJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7IGkrKyApIHtcbiAgICAgICAgICAgIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkgXTtcbiAgICAgICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG4gICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG1hdGNoZWQubWF0Y2hlcy5sZW5ndGggJiYgIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7IGorKyApIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBtYXRjaGVkLm1hdGNoZXNbIGogXTtcbiAgICAgICAgICAgICAgICBpZiAoIHJ1bl9hbGwgfHwgKCFldmVudC5uYW1lc3BhY2UgJiYgIWhhbmRsZU9iai5uYW1lc3BhY2UpIHx8IGV2ZW50Lm5hbWVzcGFjZV9yZSAmJiBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gKCAoalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9KS5oYW5kbGUgfHwgaGFuZGxlT2JqLmhhbmRsZXIgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZXN1bHQgPSByZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldCA9PT0gZmFsc2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuICAgICAgICAgICAgc3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQucmVzdWx0O1xuICAgIH0sXG4gICAgcHJvcHM6IFwiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaFwiLnNwbGl0KFwiIFwiKSxcbiAgICBmaXhIb29rczoge30sXG4gICAga2V5SG9va3M6IHtcbiAgICAgICAgcHJvcHM6IFwiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZVwiLnNwbGl0KFwiIFwiKSxcbiAgICAgICAgZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkge1xuICAgICAgICAgICAgaWYgKCBldmVudC53aGljaCA9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGV2ZW50LndoaWNoID0gb3JpZ2luYWwuY2hhckNvZGUgIT0gbnVsbCA/IG9yaWdpbmFsLmNoYXJDb2RlIDogb3JpZ2luYWwua2V5Q29kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91c2VIb29rczoge1xuICAgICAgICBwcm9wczogXCJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnRcIi5zcGxpdChcIiBcIiksXG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24oIGV2ZW50LCBvcmlnaW5hbCApIHtcbiAgICAgICAgICAgIHZhciBldmVudERvYywgZG9jLCBib2R5LFxuICAgICAgICAgICAgICAgIGJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbixcbiAgICAgICAgICAgICAgICBmcm9tRWxlbWVudCA9IG9yaWdpbmFsLmZyb21FbGVtZW50O1xuICAgICAgICAgICAgaWYgKCBldmVudC5wYWdlWCA9PSBudWxsICYmIG9yaWdpbmFsLmNsaWVudFggIT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICBldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICAgICAgICAgICAgICAgIGRvYyA9IGV2ZW50RG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBib2R5ID0gZXZlbnREb2MuYm9keTtcbiAgICAgICAgICAgICAgICBldmVudC5wYWdlWCA9IG9yaWdpbmFsLmNsaWVudFggKyAoIGRvYyAmJiBkb2Muc2Nyb2xsTGVmdCB8fCBib2R5ICYmIGJvZHkuc2Nyb2xsTGVmdCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50TGVmdCB8fCBib2R5ICYmIGJvZHkuY2xpZW50TGVmdCB8fCAwICk7XG4gICAgICAgICAgICAgICAgZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5jbGllbnRZICsgKCBkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCAhZXZlbnQucmVsYXRlZFRhcmdldCAmJiBmcm9tRWxlbWVudCApIHtcbiAgICAgICAgICAgICAgICBldmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/IG9yaWdpbmFsLnRvRWxlbWVudCA6IGZyb21FbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCAhZXZlbnQud2hpY2ggJiYgYnV0dG9uICE9PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBmaXg6IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgICAgICAgaWYgKCBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSApIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaSwgcHJvcCxcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQgPSBldmVudCxcbiAgICAgICAgICAgIGZpeEhvb2sgPSBqUXVlcnkuZXZlbnQuZml4SG9va3NbIGV2ZW50LnR5cGUgXSB8fCB7fSxcbiAgICAgICAgICAgIGNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7XG4gICAgICAgIGV2ZW50ID0galF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG4gICAgICAgIGZvciAoIGkgPSBjb3B5Lmxlbmd0aDsgaTsgKSB7XG4gICAgICAgICAgICBwcm9wID0gY29weVsgLS1pIF07XG4gICAgICAgICAgICBldmVudFsgcHJvcCBdID0gb3JpZ2luYWxFdmVudFsgcHJvcCBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICggIWV2ZW50LnRhcmdldCApIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IG9yaWdpbmFsRXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1bWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGV2ZW50LnRhcmdldC5ub2RlVHlwZSA9PT0gMyApIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmICggZXZlbnQubWV0YUtleSA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgZXZlbnQubWV0YUtleSA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpeEhvb2suZmlsdGVyPyBmaXhIb29rLmZpbHRlciggZXZlbnQsIG9yaWdpbmFsRXZlbnQgKSA6IGV2ZW50O1xuICAgIH0sXG4gICAgc3BlY2lhbDoge1xuICAgICAgICByZWFkeToge1xuICAgICAgICAgICAgc2V0dXA6IGpRdWVyeS5iaW5kUmVhZHlcbiAgICAgICAgfSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgICAgbm9CdWJibGU6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgZm9jdXM6IHtcbiAgICAgICAgICAgIGRlbGVnYXRlVHlwZTogXCJmb2N1c2luXCJcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjoge1xuICAgICAgICAgICAgZGVsZWdhdGVUeXBlOiBcImZvY3Vzb3V0XCJcbiAgICAgICAgfSxcbiAgICAgICAgYmVmb3JldW5sb2FkOiB7XG4gICAgICAgICAgICBzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkge1xuICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzV2luZG93KCB0aGlzICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25iZWZvcmV1bmxvYWQgPSBldmVudEhhbmRsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMub25iZWZvcmV1bmxvYWQgPT09IGV2ZW50SGFuZGxlICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uYmVmb3JldW5sb2FkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHtcbiAgICAgICAgdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuICAgICAgICAgICAgbmV3IGpRdWVyeS5FdmVudCgpLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICB7IHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgaXNTaW11bGF0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudDoge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCBidWJibGUgKSB7XG4gICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmNhbGwoIGVsZW0sIGUgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGUuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxufTtcbmpRdWVyeS5ldmVudC5oYW5kbGUgPSBqUXVlcnkuZXZlbnQuZGlzcGF0Y2g7XG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyID9cbiAgICBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuICAgICAgICBpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlLCBmYWxzZSApO1xuICAgICAgICB9XG4gICAgfSA6XG4gICAgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcbiAgICAgICAgaWYgKCBlbGVtLmRldGFjaEV2ZW50ICkge1xuICAgICAgICAgICAgZWxlbS5kZXRhY2hFdmVudCggXCJvblwiICsgdHlwZSwgaGFuZGxlICk7XG4gICAgICAgIH1cbiAgICB9O1xualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG4gICAgaWYgKCAhKHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQpICkge1xuICAgICAgICByZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuICAgIH1cbiAgICBpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuICAgICAgICB0aGlzLnR5cGUgPSBzcmMudHlwZTtcbiAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSAoIHNyYy5kZWZhdWx0UHJldmVudGVkIHx8IHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgICAgIHNyYy5nZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSApID8gcmV0dXJuVHJ1ZSA6IHJldHVybkZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHlwZSA9IHNyYztcbiAgICB9XG4gICAgaWYgKCBwcm9wcyApIHtcbiAgICAgICAgalF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcbiAgICB9XG4gICAgdGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBqUXVlcnkubm93KCk7XG4gICAgdGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcbiAgICAgICAgaWYgKCAhZSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGUucHJldmVudERlZmF1bHQgKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuICAgICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcbiAgICAgICAgaWYgKCAhZSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgfSxcbiAgICBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LFxuICAgIGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG4gICAgaXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZVxufTtcbmpRdWVyeS5lYWNoKHtcbiAgICBtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuICAgIG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcbiAgICBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuICAgICAgICBkZWxlZ2F0ZVR5cGU6IGZpeCxcbiAgICAgICAgYmluZFR5cGU6IGZpeCxcbiAgICAgICAgaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcyxcbiAgICAgICAgICAgICAgICByZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcbiAgICAgICAgICAgICAgICBoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmosXG4gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBoYW5kbGVPYmouc2VsZWN0b3IsXG4gICAgICAgICAgICAgICAgcmV0O1xuICAgICAgICAgICAgaWYgKCAhcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApKSApIHtcbiAgICAgICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuICAgICAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcbiAgICAgICAgICAgICAgICBldmVudC50eXBlID0gZml4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmlmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgKSB7XG4gICAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwuc3VibWl0ID0ge1xuICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoIGpRdWVyeS5ub2RlTmFtZSggdGhpcywgXCJmb3JtXCIgKSApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCBcImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdFwiLCBmdW5jdGlvbiggZSApIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBmb3JtID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSB8fCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sIFwiYnV0dG9uXCIgKSA/IGVsZW0uZm9ybSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoIGZvcm0gJiYgIWZvcm0uX3N1Ym1pdF9hdHRhY2hlZCApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggZm9ybSwgXCJzdWJtaXQuX3N1Ym1pdFwiLCBmdW5jdGlvbiggZXZlbnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5fc3VibWl0X2J1YmJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmb3JtLl9zdWJtaXRfYXR0YWNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcbiAgICAgICAgICAgIGlmICggZXZlbnQuX3N1Ym1pdF9idWJibGUgKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGV2ZW50Ll9zdWJtaXRfYnViYmxlO1xuICAgICAgICAgICAgICAgIGlmICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1RyaWdnZXIgKSB7XG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggXCJzdWJtaXRcIiwgdGhpcy5wYXJlbnROb2RlLCBldmVudCwgdHJ1ZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsIFwiZm9ybVwiICkgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgXCIuX3N1Ym1pdFwiICk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5pZiAoICFqUXVlcnkuc3VwcG9ydC5jaGFuZ2VCdWJibGVzICkge1xuICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsLmNoYW5nZSA9IHtcbiAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCByZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMudHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IHRoaXMudHlwZSA9PT0gXCJyYWRpb1wiICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCBcInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2VcIiwgZnVuY3Rpb24oIGV2ZW50ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBldmVudC5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZSA9PT0gXCJjaGVja2VkXCIgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fanVzdF9jaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIFwiY2xpY2suX2NoYW5nZVwiLCBmdW5jdGlvbiggZXZlbnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMuX2p1c3RfY2hhbmdlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2p1c3RfY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggXCJjaGFuZ2VcIiwgdGhpcywgZXZlbnQsIHRydWUgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIFwiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZVwiLCBmdW5jdGlvbiggZSApIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbSA9IGUudGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICggcmZvcm1FbGVtcy50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiYgIWVsZW0uX2NoYW5nZV9hdHRhY2hlZCApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LmFkZCggZWxlbSwgXCJjaGFuZ2UuX2NoYW5nZVwiLCBmdW5jdGlvbiggZXZlbnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNTaW11bGF0ZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIFwiY2hhbmdlXCIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uX2NoYW5nZV9hdHRhY2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuICAgICAgICAgICAgdmFyIGVsZW0gPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAoIHRoaXMgIT09IGVsZW0gfHwgZXZlbnQuaXNTaW11bGF0ZWQgfHwgZXZlbnQuaXNUcmlnZ2VyIHx8IChlbGVtLnR5cGUgIT09IFwicmFkaW9cIiAmJiBlbGVtLnR5cGUgIT09IFwiY2hlY2tib3hcIikgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgXCIuX2NoYW5nZVwiICk7XG4gICAgICAgICAgICByZXR1cm4gcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5pZiAoICFqUXVlcnkuc3VwcG9ydC5mb2N1c2luQnViYmxlcyApIHtcbiAgICBqUXVlcnkuZWFjaCh7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG4gICAgICAgIHZhciBhdHRhY2hlcyA9IDAsXG4gICAgICAgICAgICBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICksIHRydWUgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcbiAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIGF0dGFjaGVzKysgPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmICggLS1hdHRhY2hlcyA9PT0gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCh7XG4gICAgb246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAgb25lICkge1xuICAgICAgICB2YXIgb3JpZ0ZuLCB0eXBlO1xuICAgICAgICBpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICggdHlwZSBpbiB0eXBlcyApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uKCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuICAgICAgICAgICAgZm4gPSBzZWxlY3RvcjtcbiAgICAgICAgICAgIGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgICAgIGZuID0gZGF0YTtcbiAgICAgICAgICAgICAgICBkYXRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbiA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGVjdG9yO1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggZm4gPT09IGZhbHNlICkge1xuICAgICAgICAgICAgZm4gPSByZXR1cm5GYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICggIWZuICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBvbmUgPT09IDEgKSB7XG4gICAgICAgICAgICBvcmlnRm4gPSBmbjtcbiAgICAgICAgICAgIGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuICAgIH0sXG4gICAgb2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcbiAgICAgICAgaWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuICAgICAgICAgICAgalF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcbiAgICAgICAgICAgICAgICBoYW5kbGVPYmoubmFtZXNwYWNlID8gaGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDogaGFuZGxlT2JqLm9yaWdUeXBlLFxuICAgICAgICAgICAgICAgIGhhbmRsZU9iai5zZWxlY3RvcixcbiAgICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuICAgICAgICAgICAgZm9yICggdmFyIHR5cGUgaW4gdHlwZXMgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcbiAgICAgICAgICAgIGZuID0gc2VsZWN0b3I7XG4gICAgICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGZuID09PSBmYWxzZSApIHtcbiAgICAgICAgICAgIGZuID0gcmV0dXJuRmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG4gICAgfSxcbiAgICB1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG4gICAgfSxcbiAgICBsaXZlOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuICAgICAgICBqUXVlcnkoIHRoaXMuY29udGV4dCApLm9uKCB0eXBlcywgdGhpcy5zZWxlY3RvciwgZGF0YSwgZm4gKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBkaWU6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG4gICAgICAgIGpRdWVyeSggdGhpcy5jb250ZXh0ICkub2ZmKCB0eXBlcywgdGhpcy5zZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuICAgIH0sXG4gICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09IDE/IHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOiB0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yLCBmbiApO1xuICAgIH0sXG4gICAgdHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcbiAgICAgICAgaWYgKCB0aGlzWzBdICkge1xuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzWzBdLCB0cnVlICk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHRvZ2dsZTogZnVuY3Rpb24oIGZuICkge1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgICAgIGd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKyssXG4gICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgIHRvZ2dsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RUb2dnbGUgPSAoIGpRdWVyeS5fZGF0YSggdGhpcywgXCJsYXN0VG9nZ2xlXCIgKyBmbi5ndWlkICkgfHwgMCApICUgaTtcbiAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIHRoaXMsIFwibGFzdFRvZ2dsZVwiICsgZm4uZ3VpZCwgbGFzdFRvZ2dsZSArIDEgKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWyBsYXN0VG9nZ2xlIF0uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIHx8IGZhbHNlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgdG9nZ2xlci5ndWlkID0gZ3VpZDtcbiAgICAgICAgd2hpbGUgKCBpIDwgYXJncy5sZW5ndGggKSB7XG4gICAgICAgICAgICBhcmdzWyBpKysgXS5ndWlkID0gZ3VpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jbGljayggdG9nZ2xlciApO1xuICAgIH0sXG4gICAgaG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcbiAgICB9XG59KTtcbmpRdWVyeS5lYWNoKCAoXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBcIiArXG4gICAgXCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG4gICAgXCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51XCIpLnNwbGl0KFwiIFwiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7XG4gICAgalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG4gICAgICAgIGlmICggZm4gPT0gbnVsbCApIHtcbiAgICAgICAgICAgIGZuID0gZGF0YTtcbiAgICAgICAgICAgIGRhdGEgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICB0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlciggbmFtZSApO1xuICAgIH07XG4gICAgaWYgKCBqUXVlcnkuYXR0ckZuICkge1xuICAgICAgICBqUXVlcnkuYXR0ckZuWyBuYW1lIF0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIHJrZXlFdmVudC50ZXN0KCBuYW1lICkgKSB7XG4gICAgICAgIGpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50LmtleUhvb2tzO1xuICAgIH1cbiAgICBpZiAoIHJtb3VzZUV2ZW50LnRlc3QoIG5hbWUgKSApIHtcbiAgICAgICAgalF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXZlbnQubW91c2VIb29rcztcbiAgICB9XG59KTtcbihmdW5jdGlvbigpe1xudmFyIGNodW5rZXIgPSAvKCg/OlxcKCg/OlxcKFteKCldK1xcKXxbXigpXSspK1xcKXxcXFsoPzpcXFtbXlxcW1xcXV0qXFxdfFsnXCJdW14nXCJdKlsnXCJdfFteXFxbXFxdJ1wiXSspK1xcXXxcXFxcLnxbXiA+K34sKFxcW1xcXFxdKykrfFs+K35dKShcXHMqLFxccyopPygoPzoufFxccnxcXG4pKikvZyxcbiAgICBleHBhbmRvID0gXCJzaXpjYWNoZVwiICsgKE1hdGgucmFuZG9tKCkgKyAnJykucmVwbGFjZSgnLicsICcnKSxcbiAgICBkb25lID0gMCxcbiAgICB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsXG4gICAgaGFzRHVwbGljYXRlID0gZmFsc2UsXG4gICAgYmFzZUhhc0R1cGxpY2F0ZSA9IHRydWUsXG4gICAgckJhY2tzbGFzaCA9IC9cXFxcL2csXG4gICAgclJldHVybiA9IC9cXHJcXG4vZyxcbiAgICByTm9uV29yZCA9IC9cXFcvO1xuWzAsIDBdLnNvcnQoZnVuY3Rpb24oKSB7XG4gICAgYmFzZUhhc0R1cGxpY2F0ZSA9IGZhbHNlO1xuICAgIHJldHVybiAwO1xufSk7XG52YXIgU2l6emxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuICAgIHZhciBvcmlnQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgaWYgKCBjb250ZXh0Lm5vZGVUeXBlICE9PSAxICYmIGNvbnRleHQubm9kZVR5cGUgIT09IDkgKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgdmFyIG0sIHNldCwgY2hlY2tTZXQsIGV4dHJhLCByZXQsIGN1ciwgcG9wLCBpLFxuICAgICAgICBwcnVuZSA9IHRydWUsXG4gICAgICAgIGNvbnRleHRYTUwgPSBTaXp6bGUuaXNYTUwoIGNvbnRleHQgKSxcbiAgICAgICAgcGFydHMgPSBbXSxcbiAgICAgICAgc29GYXIgPSBzZWxlY3RvcjtcbiAgICBkbyB7XG4gICAgICAgIGNodW5rZXIuZXhlYyggXCJcIiApO1xuICAgICAgICBtID0gY2h1bmtlci5leGVjKCBzb0ZhciApO1xuICAgICAgICBpZiAoIG0gKSB7XG4gICAgICAgICAgICBzb0ZhciA9IG1bM107XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKCBtWzFdICk7XG4gICAgICAgICAgICBpZiAoIG1bMl0gKSB7XG4gICAgICAgICAgICAgICAgZXh0cmEgPSBtWzNdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSB3aGlsZSAoIG0gKTtcbiAgICBpZiAoIHBhcnRzLmxlbmd0aCA+IDEgJiYgb3JpZ1BPUy5leGVjKCBzZWxlY3RvciApICkge1xuICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA9PT0gMiAmJiBFeHByLnJlbGF0aXZlWyBwYXJ0c1swXSBdICkge1xuICAgICAgICAgICAgc2V0ID0gcG9zUHJvY2VzcyggcGFydHNbMF0gKyBwYXJ0c1sxXSwgY29udGV4dCwgc2VlZCApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0ID0gRXhwci5yZWxhdGl2ZVsgcGFydHNbMF0gXSA/XG4gICAgICAgICAgICAgICAgWyBjb250ZXh0IF0gOlxuICAgICAgICAgICAgICAgIFNpenpsZSggcGFydHMuc2hpZnQoKSwgY29udGV4dCApO1xuICAgICAgICAgICAgd2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBwYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGlmICggRXhwci5yZWxhdGl2ZVsgc2VsZWN0b3IgXSApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgKz0gcGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0ID0gcG9zUHJvY2Vzcyggc2VsZWN0b3IsIHNldCwgc2VlZCApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCAhc2VlZCAmJiBwYXJ0cy5sZW5ndGggPiAxICYmIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIWNvbnRleHRYTUwgJiZcbiAgICAgICAgICAgICAgICBFeHByLm1hdGNoLklELnRlc3QocGFydHNbMF0pICYmICFFeHByLm1hdGNoLklELnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pICkge1xuICAgICAgICAgICAgcmV0ID0gU2l6emxlLmZpbmQoIHBhcnRzLnNoaWZ0KCksIGNvbnRleHQsIGNvbnRleHRYTUwgKTtcbiAgICAgICAgICAgIGNvbnRleHQgPSByZXQuZXhwciA/XG4gICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcmV0LmV4cHIsIHJldC5zZXQgKVswXSA6XG4gICAgICAgICAgICAgICAgcmV0LnNldFswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGNvbnRleHQgKSB7XG4gICAgICAgICAgICByZXQgPSBzZWVkID9cbiAgICAgICAgICAgICAgICB7IGV4cHI6IHBhcnRzLnBvcCgpLCBzZXQ6IG1ha2VBcnJheShzZWVkKSB9IDpcbiAgICAgICAgICAgICAgICBTaXp6bGUuZmluZCggcGFydHMucG9wKCksIHBhcnRzLmxlbmd0aCA9PT0gMSAmJiAocGFydHNbMF0gPT09IFwiflwiIHx8IHBhcnRzWzBdID09PSBcIitcIikgJiYgY29udGV4dC5wYXJlbnROb2RlID8gY29udGV4dC5wYXJlbnROb2RlIDogY29udGV4dCwgY29udGV4dFhNTCApO1xuICAgICAgICAgICAgc2V0ID0gcmV0LmV4cHIgP1xuICAgICAgICAgICAgICAgIFNpenpsZS5maWx0ZXIoIHJldC5leHByLCByZXQuc2V0ICkgOlxuICAgICAgICAgICAgICAgIHJldC5zZXQ7XG4gICAgICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tTZXQgPSBtYWtlQXJyYXkoIHNldCApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcnVuZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKCBwYXJ0cy5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgY3VyID0gcGFydHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcG9wID0gY3VyO1xuICAgICAgICAgICAgICAgIGlmICggIUV4cHIucmVsYXRpdmVbIGN1ciBdICkge1xuICAgICAgICAgICAgICAgICAgICBjdXIgPSBcIlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcCA9IHBhcnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIHBvcCA9PSBudWxsICkge1xuICAgICAgICAgICAgICAgICAgICBwb3AgPSBjb250ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBFeHByLnJlbGF0aXZlWyBjdXIgXSggY2hlY2tTZXQsIHBvcCwgY29udGV4dFhNTCApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tTZXQgPSBwYXJ0cyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICggIWNoZWNrU2V0ICkge1xuICAgICAgICBjaGVja1NldCA9IHNldDtcbiAgICB9XG4gICAgaWYgKCAhY2hlY2tTZXQgKSB7XG4gICAgICAgIFNpenpsZS5lcnJvciggY3VyIHx8IHNlbGVjdG9yICk7XG4gICAgfVxuICAgIGlmICggdG9TdHJpbmcuY2FsbChjaGVja1NldCkgPT09IFwiW29iamVjdCBBcnJheV1cIiApIHtcbiAgICAgICAgaWYgKCAhcHJ1bmUgKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2guYXBwbHkoIHJlc3VsdHMsIGNoZWNrU2V0ICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgICAgIGZvciAoIGkgPSAwOyBjaGVja1NldFtpXSAhPSBudWxsOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBjaGVja1NldFtpXSAmJiAoY2hlY2tTZXRbaV0gPT09IHRydWUgfHwgY2hlY2tTZXRbaV0ubm9kZVR5cGUgPT09IDEgJiYgU2l6emxlLmNvbnRhaW5zKGNvbnRleHQsIGNoZWNrU2V0W2ldKSkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaCggc2V0W2ldICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yICggaSA9IDA7IGNoZWNrU2V0W2ldICE9IG51bGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGNoZWNrU2V0W2ldICYmIGNoZWNrU2V0W2ldLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goIHNldFtpXSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIG1ha2VBcnJheSggY2hlY2tTZXQsIHJlc3VsdHMgKTtcbiAgICB9XG4gICAgaWYgKCBleHRyYSApIHtcbiAgICAgICAgU2l6emxlKCBleHRyYSwgb3JpZ0NvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbiAgICAgICAgU2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdHM7XG59O1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcbiAgICBpZiAoIHNvcnRPcmRlciApIHtcbiAgICAgICAgaGFzRHVwbGljYXRlID0gYmFzZUhhc0R1cGxpY2F0ZTtcbiAgICAgICAgcmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcbiAgICAgICAgaWYgKCBoYXNEdXBsaWNhdGUgKSB7XG4gICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDE7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c1tpXSA9PT0gcmVzdWx0c1sgaSAtIDEgXSApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zcGxpY2UoIGktLSwgMSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBzZXQgKSB7XG4gICAgcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgc2V0ICk7XG59O1xuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBub2RlLCBleHByICkge1xuICAgIHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIFtub2RlXSApLmxlbmd0aCA+IDA7XG59O1xuU2l6emxlLmZpbmQgPSBmdW5jdGlvbiggZXhwciwgY29udGV4dCwgaXNYTUwgKSB7XG4gICAgdmFyIHNldCwgaSwgbGVuLCBtYXRjaCwgdHlwZSwgbGVmdDtcbiAgICBpZiAoICFleHByICkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGZvciAoIGkgPSAwLCBsZW4gPSBFeHByLm9yZGVyLmxlbmd0aDsgaSA8IGxlbjsgaSsrICkge1xuICAgICAgICB0eXBlID0gRXhwci5vcmRlcltpXTtcbiAgICAgICAgaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgKSB7XG4gICAgICAgICAgICBsZWZ0ID0gbWF0Y2hbMV07XG4gICAgICAgICAgICBtYXRjaC5zcGxpY2UoIDEsIDEgKTtcbiAgICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQubGVuZ3RoIC0gMSApICE9PSBcIlxcXFxcIiApIHtcbiAgICAgICAgICAgICAgICBtYXRjaFsxXSA9IChtYXRjaFsxXSB8fCBcIlwiKS5yZXBsYWNlKCByQmFja3NsYXNoLCBcIlwiICk7XG4gICAgICAgICAgICAgICAgc2V0ID0gRXhwci5maW5kWyB0eXBlIF0oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApO1xuICAgICAgICAgICAgICAgIGlmICggc2V0ICE9IG51bGwgKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoIEV4cHIubWF0Y2hbIHR5cGUgXSwgXCJcIiApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCAhc2V0ICkge1xuICAgICAgICBzZXQgPSB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiA/XG4gICAgICAgICAgICBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcIipcIiApIDpcbiAgICAgICAgICAgIFtdO1xuICAgIH1cbiAgICByZXR1cm4geyBzZXQ6IHNldCwgZXhwcjogZXhwciB9O1xufTtcblNpenpsZS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgc2V0LCBpbnBsYWNlLCBub3QgKSB7XG4gICAgdmFyIG1hdGNoLCBhbnlGb3VuZCxcbiAgICAgICAgdHlwZSwgZm91bmQsIGl0ZW0sIGZpbHRlciwgbGVmdCxcbiAgICAgICAgaSwgcGFzcyxcbiAgICAgICAgb2xkID0gZXhwcixcbiAgICAgICAgcmVzdWx0ID0gW10sXG4gICAgICAgIGN1ckxvb3AgPSBzZXQsXG4gICAgICAgIGlzWE1MRmlsdGVyID0gc2V0ICYmIHNldFswXSAmJiBTaXp6bGUuaXNYTUwoIHNldFswXSApO1xuICAgIHdoaWxlICggZXhwciAmJiBzZXQubGVuZ3RoICkge1xuICAgICAgICBmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuICAgICAgICAgICAgaWYgKCAobWF0Y2ggPSBFeHByLmxlZnRNYXRjaFsgdHlwZSBdLmV4ZWMoIGV4cHIgKSkgIT0gbnVsbCAmJiBtYXRjaFsyXSApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIgPSBFeHByLmZpbHRlclsgdHlwZSBdO1xuICAgICAgICAgICAgICAgIGxlZnQgPSBtYXRjaFsxXTtcbiAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIG1hdGNoLnNwbGljZSgxLDEpO1xuICAgICAgICAgICAgICAgIGlmICggbGVmdC5zdWJzdHIoIGxlZnQubGVuZ3RoIC0gMSApID09PSBcIlxcXFxcIiApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICggY3VyTG9vcCA9PT0gcmVzdWx0ICkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBFeHByLnByZUZpbHRlclsgdHlwZSBdICkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IEV4cHIucHJlRmlsdGVyWyB0eXBlIF0oIG1hdGNoLCBjdXJMb29wLCBpbnBsYWNlLCByZXN1bHQsIG5vdCwgaXNYTUxGaWx0ZXIgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhbWF0Y2ggKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggbWF0Y2ggPT09IHRydWUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIG1hdGNoICkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgKGl0ZW0gPSBjdXJMb29wW2ldKSAhPSBudWxsOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGl0ZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBmaWx0ZXIoIGl0ZW0sIG1hdGNoLCBpLCBjdXJMb29wICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcyA9IG5vdCBeIGZvdW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaW5wbGFjZSAmJiBmb3VuZCAhPSBudWxsICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhc3MgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJMb29wW2ldID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwYXNzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCggaXRlbSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICggZm91bmQgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhaW5wbGFjZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3AgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSggRXhwci5tYXRjaFsgdHlwZSBdLCBcIlwiICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggIWFueUZvdW5kICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIGV4cHIgPT09IG9sZCApIHtcbiAgICAgICAgICAgIGlmICggYW55Rm91bmQgPT0gbnVsbCApIHtcbiAgICAgICAgICAgICAgICBTaXp6bGUuZXJyb3IoIGV4cHIgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb2xkID0gZXhwcjtcbiAgICB9XG4gICAgcmV0dXJuIGN1ckxvb3A7XG59O1xuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG52YXIgZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgdmFyIGksIG5vZGUsXG4gICAgICAgIG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZSxcbiAgICAgICAgcmV0ID0gXCJcIjtcbiAgICBpZiAoIG5vZGVUeXBlICkge1xuICAgICAgICBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09ICdzdHJpbmcnICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIGVsZW0uaW5uZXJUZXh0ID09PSAnc3RyaW5nJyApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5pbm5lclRleHQucmVwbGFjZSggclJldHVybiwgJycgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ICs9IGdldFRleHQoIGVsZW0gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICggaSA9IDA7IChub2RlID0gZWxlbVtpXSk7IGkrKyApIHtcbiAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSAhPT0gOCApIHtcbiAgICAgICAgICAgICAgICByZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xudmFyIEV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuICAgIG9yZGVyOiBbIFwiSURcIiwgXCJOQU1FXCIsIFwiVEFHXCIgXSxcbiAgICBtYXRjaDoge1xuICAgICAgICBJRDogLyMoKD86W1xcd1xcdTAwYzAtXFx1RkZGRlxcLV18XFxcXC4pKykvLFxuICAgICAgICBDTEFTUzogL1xcLigoPzpbXFx3XFx1MDBjMC1cXHVGRkZGXFwtXXxcXFxcLikrKS8sXG4gICAgICAgIE5BTUU6IC9cXFtuYW1lPVsnXCJdKigoPzpbXFx3XFx1MDBjMC1cXHVGRkZGXFwtXXxcXFxcLikrKVsnXCJdKlxcXS8sXG4gICAgICAgIEFUVFI6IC9cXFtcXHMqKCg/OltcXHdcXHUwMGMwLVxcdUZGRkZcXC1dfFxcXFwuKSspXFxzKig/OihcXFM/PSlcXHMqKD86KFsnXCJdKSguKj8pXFwzfCgjPyg/OltcXHdcXHUwMGMwLVxcdUZGRkZcXC1dfFxcXFwuKSopfCl8KVxccypcXF0vLFxuICAgICAgICBUQUc6IC9eKCg/OltcXHdcXHUwMGMwLVxcdUZGRkZcXCpcXC1dfFxcXFwuKSspLyxcbiAgICAgICAgQ0hJTEQ6IC86KG9ubHl8bnRofGxhc3R8Zmlyc3QpLWNoaWxkKD86XFwoXFxzKihldmVufG9kZHwoPzpbK1xcLV0/XFxkK3woPzpbK1xcLV0/XFxkKik/blxccyooPzpbK1xcLV1cXHMqXFxkKyk/KSlcXHMqXFwpKT8vLFxuICAgICAgICBQT1M6IC86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlxcKChcXGQqKVxcKSk/KD89W15cXC1dfCQpLyxcbiAgICAgICAgUFNFVURPOiAvOigoPzpbXFx3XFx1MDBjMC1cXHVGRkZGXFwtXXxcXFxcLikrKSg/OlxcKChbJ1wiXT8pKCg/OlxcKFteXFwpXStcXCl8W15cXChcXCldKikrKVxcMlxcKSk/L1xuICAgIH0sXG4gICAgbGVmdE1hdGNoOiB7fSxcbiAgICBhdHRyTWFwOiB7XG4gICAgICAgIFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIixcbiAgICAgICAgXCJmb3JcIjogXCJodG1sRm9yXCJcbiAgICB9LFxuICAgIGF0dHJIYW5kbGU6IHtcbiAgICAgICAgaHJlZjogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwiaHJlZlwiICk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZWxhdGl2ZToge1xuICAgICAgICBcIitcIjogZnVuY3Rpb24oY2hlY2tTZXQsIHBhcnQpe1xuICAgICAgICAgICAgdmFyIGlzUGFydFN0ciA9IHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGlzVGFnID0gaXNQYXJ0U3RyICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICksXG4gICAgICAgICAgICAgICAgaXNQYXJ0U3RyTm90VGFnID0gaXNQYXJ0U3RyICYmICFpc1RhZztcbiAgICAgICAgICAgIGlmICggaXNUYWcgKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aCwgZWxlbTsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICBpZiAoIChlbGVtID0gY2hlY2tTZXRbaV0pICkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5wcmV2aW91c1NpYmxpbmcpICYmIGVsZW0ubm9kZVR5cGUgIT09IDEgKSB7fVxuICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IGlzUGFydFN0ck5vdFRhZyB8fCBlbGVtICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gcGFydCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtIHx8IGZhbHNlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPT09IHBhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBpc1BhcnRTdHJOb3RUYWcgKSB7XG4gICAgICAgICAgICAgICAgU2l6emxlLmZpbHRlciggcGFydCwgY2hlY2tTZXQsIHRydWUgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCI+XCI6IGZ1bmN0aW9uKCBjaGVja1NldCwgcGFydCApIHtcbiAgICAgICAgICAgIHZhciBlbGVtLFxuICAgICAgICAgICAgICAgIGlzUGFydFN0ciA9IHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgIGwgPSBjaGVja1NldC5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIGlzUGFydFN0ciAmJiAhck5vbldvcmQudGVzdCggcGFydCApICkge1xuICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgZm9yICggOyBpIDwgbDsgaSsrICkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtID0gY2hlY2tTZXRbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBwYXJ0ID8gcGFyZW50IDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoIDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGNoZWNrU2V0W2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NldFtpXSA9IGlzUGFydFN0ciA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUgPT09IHBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBpc1BhcnRTdHIgKSB7XG4gICAgICAgICAgICAgICAgICAgIFNpenpsZS5maWx0ZXIoIHBhcnQsIGNoZWNrU2V0LCB0cnVlICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIlwiOiBmdW5jdGlvbihjaGVja1NldCwgcGFydCwgaXNYTUwpe1xuICAgICAgICAgICAgdmFyIG5vZGVDaGVjayxcbiAgICAgICAgICAgICAgICBkb25lTmFtZSA9IGRvbmUrKyxcbiAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyQ2hlY2s7XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBub2RlQ2hlY2sgPSBwYXJ0O1xuICAgICAgICAgICAgICAgIGNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVja0ZuKCBcInBhcmVudE5vZGVcIiwgcGFydCwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICk7XG4gICAgICAgIH0sXG4gICAgICAgIFwiflwiOiBmdW5jdGlvbiggY2hlY2tTZXQsIHBhcnQsIGlzWE1MICkge1xuICAgICAgICAgICAgdmFyIG5vZGVDaGVjayxcbiAgICAgICAgICAgICAgICBkb25lTmFtZSA9IGRvbmUrKyxcbiAgICAgICAgICAgICAgICBjaGVja0ZuID0gZGlyQ2hlY2s7XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiICYmICFyTm9uV29yZC50ZXN0KCBwYXJ0ICkgKSB7XG4gICAgICAgICAgICAgICAgcGFydCA9IHBhcnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBub2RlQ2hlY2sgPSBwYXJ0O1xuICAgICAgICAgICAgICAgIGNoZWNrRm4gPSBkaXJOb2RlQ2hlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVja0ZuKCBcInByZXZpb3VzU2libGluZ1wiLCBwYXJ0LCBkb25lTmFtZSwgY2hlY2tTZXQsIG5vZGVDaGVjaywgaXNYTUwgKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZmluZDoge1xuICAgICAgICBJRDogZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0LCBpc1hNTCApIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgIWlzWE1MICkge1xuICAgICAgICAgICAgICAgIHZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChtYXRjaFsxXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG0gJiYgbS5wYXJlbnROb2RlID8gW21dIDogW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIE5BTUU6IGZ1bmN0aW9uKCBtYXRjaCwgY29udGV4dCApIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJldCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggbWF0Y2hbMV0gKTtcbiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSByZXN1bHRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCByZXN1bHRzW2ldLmdldEF0dHJpYnV0ZShcIm5hbWVcIikgPT09IG1hdGNoWzFdICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIHJlc3VsdHNbaV0gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0Lmxlbmd0aCA9PT0gMCA/IG51bGwgOiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFRBRzogZnVuY3Rpb24oIG1hdGNoLCBjb250ZXh0ICkge1xuICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggbWF0Y2hbMV0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcHJlRmlsdGVyOiB7XG4gICAgICAgIENMQVNTOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCApIHtcbiAgICAgICAgICAgIG1hdGNoID0gXCIgXCIgKyBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCBcIlwiICkgKyBcIiBcIjtcbiAgICAgICAgICAgIGlmICggaXNYTUwgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGN1ckxvb3BbaV0pICE9IG51bGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggbm90IF4gKGVsZW0uY2xhc3NOYW1lICYmIChcIiBcIiArIGVsZW0uY2xhc3NOYW1lICsgXCIgXCIpLnJlcGxhY2UoL1tcXHRcXG5cXHJdL2csIFwiIFwiKS5pbmRleE9mKG1hdGNoKSA+PSAwKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goIGVsZW0gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggaW5wbGFjZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1ckxvb3BbaV0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgSUQ6IGZ1bmN0aW9uKCBtYXRjaCApIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCBcIlwiICk7XG4gICAgICAgIH0sXG4gICAgICAgIFRBRzogZnVuY3Rpb24oIG1hdGNoLCBjdXJMb29wICkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdLnJlcGxhY2UoIHJCYWNrc2xhc2gsIFwiXCIgKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9LFxuICAgICAgICBDSElMRDogZnVuY3Rpb24oIG1hdGNoICkge1xuICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gXCJudGhcIiApIHtcbiAgICAgICAgICAgICAgICBpZiAoICFtYXRjaFsyXSApIHtcbiAgICAgICAgICAgICAgICAgICAgU2l6emxlLmVycm9yKCBtYXRjaFswXSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IG1hdGNoWzJdLnJlcGxhY2UoL15cXCt8XFxzKi9nLCAnJyk7XG4gICAgICAgICAgICAgICAgdmFyIHRlc3QgPSAvKC0/KShcXGQqKSg/Om4oWytcXC1dP1xcZCopKT8vLmV4ZWMoXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID09PSBcImV2ZW5cIiAmJiBcIjJuXCIgfHwgbWF0Y2hbMl0gPT09IFwib2RkXCIgJiYgXCIybisxXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgIS9cXEQvLnRlc3QoIG1hdGNoWzJdICkgJiYgXCIwbitcIiArIG1hdGNoWzJdIHx8IG1hdGNoWzJdKTtcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSA9ICh0ZXN0WzFdICsgKHRlc3RbMl0gfHwgMSkpIC0gMDtcbiAgICAgICAgICAgICAgICBtYXRjaFszXSA9IHRlc3RbM10gLSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIG1hdGNoWzJdICkge1xuICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hdGNoWzBdID0gZG9uZSsrO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9LFxuICAgICAgICBBVFRSOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90LCBpc1hNTCApIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hbMV0gPSBtYXRjaFsxXS5yZXBsYWNlKCByQmFja3NsYXNoLCBcIlwiICk7XG4gICAgICAgICAgICBpZiAoICFpc1hNTCAmJiBFeHByLmF0dHJNYXBbbmFtZV0gKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hbMV0gPSBFeHByLmF0dHJNYXBbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYXRjaFs0XSA9ICggbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgXCJcIiApLnJlcGxhY2UoIHJCYWNrc2xhc2gsIFwiXCIgKTtcbiAgICAgICAgICAgIGlmICggbWF0Y2hbMl0gPT09IFwifj1cIiApIHtcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSA9IFwiIFwiICsgbWF0Y2hbNF0gKyBcIiBcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfSxcbiAgICAgICAgUFNFVURPOiBmdW5jdGlvbiggbWF0Y2gsIGN1ckxvb3AsIGlucGxhY2UsIHJlc3VsdCwgbm90ICkge1xuICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSA9PT0gXCJub3RcIiApIHtcbiAgICAgICAgICAgICAgICBpZiAoICggY2h1bmtlci5leGVjKG1hdGNoWzNdKSB8fCBcIlwiICkubGVuZ3RoID4gMSB8fCAvXlxcdy8udGVzdChtYXRjaFszXSkgKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzNdID0gU2l6emxlKG1hdGNoWzNdLCBudWxsLCBudWxsLCBjdXJMb29wKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gU2l6emxlLmZpbHRlcihtYXRjaFszXSwgY3VyTG9vcCwgaW5wbGFjZSwgdHJ1ZSBeIG5vdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggIWlucGxhY2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaC5hcHBseSggcmVzdWx0LCByZXQgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICggRXhwci5tYXRjaC5QT1MudGVzdCggbWF0Y2hbMF0gKSB8fCBFeHByLm1hdGNoLkNISUxELnRlc3QoIG1hdGNoWzBdICkgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH0sXG4gICAgICAgIFBPUzogZnVuY3Rpb24oIG1hdGNoICkge1xuICAgICAgICAgICAgbWF0Y2gudW5zaGlmdCggdHJ1ZSApO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBmaWx0ZXJzOiB7XG4gICAgICAgIGVuYWJsZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICYmIGVsZW0udHlwZSAhPT0gXCJoaWRkZW5cIjtcbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0uY2hlY2tlZCA9PT0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHJldHVybiAhIWVsZW0uZmlyc3RDaGlsZDtcbiAgICAgICAgfSxcbiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuICFlbGVtLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0sXG4gICAgICAgIGhhczogZnVuY3Rpb24oIGVsZW0sIGksIG1hdGNoICkge1xuICAgICAgICAgICAgcmV0dXJuICEhU2l6emxlKCBtYXRjaFszXSwgZWxlbSApLmxlbmd0aDtcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyOiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHJldHVybiAoL2hcXGQvaSkudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHZhciBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICksIHR5cGUgPSBlbGVtLnR5cGU7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiYgXCJ0ZXh0XCIgPT09IHR5cGUgJiYgKCBhdHRyID09PSB0eXBlIHx8IGF0dHIgPT09IG51bGwgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmFkaW86IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmIFwicmFkaW9cIiA9PT0gZWxlbS50eXBlO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja2JveDogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiYgXCJjaGVja2JveFwiID09PSBlbGVtLnR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbGU6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmIFwiZmlsZVwiID09PSBlbGVtLnR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIHBhc3N3b3JkOiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJiBcInBhc3N3b3JkXCIgPT09IGVsZW0udHlwZTtcbiAgICAgICAgfSxcbiAgICAgICAgc3VibWl0OiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgXCJzdWJtaXRcIiA9PT0gZWxlbS50eXBlO1xuICAgICAgICB9LFxuICAgICAgICBpbWFnZTogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiYgXCJpbWFnZVwiID09PSBlbGVtLnR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0OiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIChuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIikgJiYgXCJyZXNldFwiID09PSBlbGVtLnR5cGU7XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbjogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgXCJidXR0b25cIiA9PT0gZWxlbS50eXBlIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHJldHVybiAoL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaSkudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuICAgICAgICB9LFxuICAgICAgICBmb2N1czogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbSA9PT0gZWxlbS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNldEZpbHRlcnM6IHtcbiAgICAgICAgZmlyc3Q6IGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuICAgICAgICAgICAgcmV0dXJuIGkgPT09IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3Q6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKSB7XG4gICAgICAgICAgICByZXR1cm4gaSA9PT0gYXJyYXkubGVuZ3RoIC0gMTtcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbjogZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG4gICAgICAgICAgICByZXR1cm4gaSAlIDIgPT09IDA7XG4gICAgICAgIH0sXG4gICAgICAgIG9kZDogZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG4gICAgICAgICAgICByZXR1cm4gaSAlIDIgPT09IDE7XG4gICAgICAgIH0sXG4gICAgICAgIGx0OiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7XG4gICAgICAgICAgICByZXR1cm4gaSA8IG1hdGNoWzNdIC0gMDtcbiAgICAgICAgfSxcbiAgICAgICAgZ3Q6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHtcbiAgICAgICAgICAgIHJldHVybiBpID4gbWF0Y2hbM10gLSAwO1xuICAgICAgICB9LFxuICAgICAgICBudGg6IGZ1bmN0aW9uKCBlbGVtLCBpLCBtYXRjaCApIHtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaFszXSAtIDAgPT09IGk7XG4gICAgICAgIH0sXG4gICAgICAgIGVxOiBmdW5jdGlvbiggZWxlbSwgaSwgbWF0Y2ggKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hbM10gLSAwID09PSBpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBmaWx0ZXI6IHtcbiAgICAgICAgUFNFVURPOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2gsIGksIGFycmF5ICkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIgPSBFeHByLmZpbHRlcnNbIG5hbWUgXTtcbiAgICAgICAgICAgIGlmICggZmlsdGVyICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIoIGVsZW0sIGksIG1hdGNoLCBhcnJheSApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggbmFtZSA9PT0gXCJjb250YWluc1wiICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KFsgZWxlbSBdKSB8fCBcIlwiKS5pbmRleE9mKG1hdGNoWzNdKSA+PSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggbmFtZSA9PT0gXCJub3RcIiApIHtcbiAgICAgICAgICAgICAgICB2YXIgbm90ID0gbWF0Y2hbM107XG4gICAgICAgICAgICAgICAgZm9yICggdmFyIGogPSAwLCBsID0gbm90Lmxlbmd0aDsgaiA8IGw7IGorKyApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBub3Rbal0gPT09IGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFNpenpsZS5lcnJvciggbmFtZSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBDSElMRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkge1xuICAgICAgICAgICAgdmFyIGZpcnN0LCBsYXN0LFxuICAgICAgICAgICAgICAgIGRvbmVOYW1lLCBwYXJlbnQsIGNhY2hlLFxuICAgICAgICAgICAgICAgIGNvdW50LCBkaWZmLFxuICAgICAgICAgICAgICAgIHR5cGUgPSBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICBub2RlID0gZWxlbTtcbiAgICAgICAgICAgIHN3aXRjaCAoIHR5cGUgKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9ubHlcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiZmlyc3RcIjpcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCAobm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSBcImZpcnN0XCIgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbTtcbiAgICAgICAgICAgICAgICBjYXNlIFwibGFzdFwiOlxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIChub2RlID0gbm9kZS5uZXh0U2libGluZykgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJudGhcIjpcbiAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG1hdGNoWzNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkb25lTmFtZSA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICggcGFyZW50ICYmIChwYXJlbnRbIGV4cGFuZG8gXSAhPT0gZG9uZU5hbWUgfHwgIWVsZW0ubm9kZUluZGV4KSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIG5vZGUgPSBwYXJlbnQuZmlyc3RDaGlsZDsgbm9kZTsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLm5vZGVJbmRleCA9ICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50WyBleHBhbmRvIF0gPSBkb25lTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkaWZmID0gZWxlbS5ub2RlSW5kZXggLSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGZpcnN0ID09PSAwICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpZmYgPT09IDA7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBJRDogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSA9PT0gbWF0Y2g7XG4gICAgICAgIH0sXG4gICAgICAgIFRBRzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkge1xuICAgICAgICAgICAgcmV0dXJuIChtYXRjaCA9PT0gXCIqXCIgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSkgfHwgISFlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbWF0Y2g7XG4gICAgICAgIH0sXG4gICAgICAgIENMQVNTOiBmdW5jdGlvbiggZWxlbSwgbWF0Y2ggKSB7XG4gICAgICAgICAgICByZXR1cm4gKFwiIFwiICsgKGVsZW0uY2xhc3NOYW1lIHx8IGVsZW0uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikpICsgXCIgXCIpXG4gICAgICAgICAgICAgICAgLmluZGV4T2YoIG1hdGNoICkgPiAtMTtcbiAgICAgICAgfSxcbiAgICAgICAgQVRUUjogZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBTaXp6bGUuYXR0ciA/XG4gICAgICAgICAgICAgICAgICAgIFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICkgOlxuICAgICAgICAgICAgICAgICAgICBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSA/XG4gICAgICAgICAgICAgICAgICAgIEV4cHIuYXR0ckhhbmRsZVsgbmFtZSBdKCBlbGVtICkgOlxuICAgICAgICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gIT0gbnVsbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtWyBuYW1lIF0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdCArIFwiXCIsXG4gICAgICAgICAgICAgICAgdHlwZSA9IG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIGNoZWNrID0gbWF0Y2hbNF07XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgP1xuICAgICAgICAgICAgICAgIHR5cGUgPT09IFwiIT1cIiA6XG4gICAgICAgICAgICAgICAgIXR5cGUgJiYgU2l6emxlLmF0dHIgP1xuICAgICAgICAgICAgICAgIHJlc3VsdCAhPSBudWxsIDpcbiAgICAgICAgICAgICAgICB0eXBlID09PSBcIj1cIiA/XG4gICAgICAgICAgICAgICAgdmFsdWUgPT09IGNoZWNrIDpcbiAgICAgICAgICAgICAgICB0eXBlID09PSBcIio9XCIgP1xuICAgICAgICAgICAgICAgIHZhbHVlLmluZGV4T2YoY2hlY2spID49IDAgOlxuICAgICAgICAgICAgICAgIHR5cGUgPT09IFwifj1cIiA/XG4gICAgICAgICAgICAgICAgKFwiIFwiICsgdmFsdWUgKyBcIiBcIikuaW5kZXhPZihjaGVjaykgPj0gMCA6XG4gICAgICAgICAgICAgICAgIWNoZWNrID9cbiAgICAgICAgICAgICAgICB2YWx1ZSAmJiByZXN1bHQgIT09IGZhbHNlIDpcbiAgICAgICAgICAgICAgICB0eXBlID09PSBcIiE9XCIgP1xuICAgICAgICAgICAgICAgIHZhbHVlICE9PSBjaGVjayA6XG4gICAgICAgICAgICAgICAgdHlwZSA9PT0gXCJePVwiID9cbiAgICAgICAgICAgICAgICB2YWx1ZS5pbmRleE9mKGNoZWNrKSA9PT0gMCA6XG4gICAgICAgICAgICAgICAgdHlwZSA9PT0gXCIkPVwiID9cbiAgICAgICAgICAgICAgICB2YWx1ZS5zdWJzdHIodmFsdWUubGVuZ3RoIC0gY2hlY2subGVuZ3RoKSA9PT0gY2hlY2sgOlxuICAgICAgICAgICAgICAgIHR5cGUgPT09IFwifD1cIiA/XG4gICAgICAgICAgICAgICAgdmFsdWUgPT09IGNoZWNrIHx8IHZhbHVlLnN1YnN0cigwLCBjaGVjay5sZW5ndGggKyAxKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG4gICAgICAgICAgICAgICAgZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIFBPUzogZnVuY3Rpb24oIGVsZW0sIG1hdGNoLCBpLCBhcnJheSApIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgZmlsdGVyID0gRXhwci5zZXRGaWx0ZXJzWyBuYW1lIF07XG4gICAgICAgICAgICBpZiAoIGZpbHRlciApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyKCBlbGVtLCBpLCBtYXRjaCwgYXJyYXkgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG52YXIgb3JpZ1BPUyA9IEV4cHIubWF0Y2guUE9TLFxuICAgIGZlc2NhcGUgPSBmdW5jdGlvbihhbGwsIG51bSl7XG4gICAgICAgIHJldHVybiBcIlxcXFxcIiArIChudW0gLSAwICsgMSk7XG4gICAgfTtcbmZvciAoIHZhciB0eXBlIGluIEV4cHIubWF0Y2ggKSB7XG4gICAgRXhwci5tYXRjaFsgdHlwZSBdID0gbmV3IFJlZ0V4cCggRXhwci5tYXRjaFsgdHlwZSBdLnNvdXJjZSArICgvKD8hW15cXFtdKlxcXSkoPyFbXlxcKF0qXFwpKS8uc291cmNlKSApO1xuICAgIEV4cHIubGVmdE1hdGNoWyB0eXBlIF0gPSBuZXcgUmVnRXhwKCAvKF4oPzoufFxccnxcXG4pKj8pLy5zb3VyY2UgKyBFeHByLm1hdGNoWyB0eXBlIF0uc291cmNlLnJlcGxhY2UoL1xcXFwoXFxkKykvZywgZmVzY2FwZSkgKTtcbn1cblxuRXhwci5tYXRjaC5nbG9iYWxQT1MgPSBvcmlnUE9TO1xudmFyIG1ha2VBcnJheSA9IGZ1bmN0aW9uKCBhcnJheSwgcmVzdWx0cyApIHtcbiAgICBhcnJheSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhcnJheSwgMCApO1xuICAgIGlmICggcmVzdWx0cyApIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoLmFwcGx5KCByZXN1bHRzLCBhcnJheSApO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5O1xufTtcbnRyeSB7XG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLCAwIClbMF0ubm9kZVR5cGU7XG59IGNhdGNoKCBlICkge1xuICAgIG1ha2VBcnJheSA9IGZ1bmN0aW9uKCBhcnJheSwgcmVzdWx0cyApIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgcmV0ID0gcmVzdWx0cyB8fCBbXTtcbiAgICAgICAgaWYgKCB0b1N0cmluZy5jYWxsKGFycmF5KSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiICkge1xuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoIHJldCwgYXJyYXkgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIGFycmF5Lmxlbmd0aCA9PT0gXCJudW1iZXJcIiApIHtcbiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0LnB1c2goIGFycmF5W2ldICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKCA7IGFycmF5W2ldOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKCBhcnJheVtpXSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH07XG59XG5cbnZhciBzb3J0T3JkZXIsIHNpYmxpbmdDaGVjaztcbmlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkge1xuICAgIHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuICAgICAgICBpZiAoIGEgPT09IGIgKSB7XG4gICAgICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiB8fCAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApIHtcbiAgICAgICAgICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8gLTEgOiAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgNCA/IC0xIDogMTtcbiAgICB9O1xufSBlbHNlIHtcbiAgICBzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcbiAgICAgICAgaWYgKCBhID09PSBiICkge1xuICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2UgaWYgKCBhLnNvdXJjZUluZGV4ICYmIGIuc291cmNlSW5kZXggKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsLCBibCxcbiAgICAgICAgICAgIGFwID0gW10sXG4gICAgICAgICAgICBicCA9IFtdLFxuICAgICAgICAgICAgYXVwID0gYS5wYXJlbnROb2RlLFxuICAgICAgICAgICAgYnVwID0gYi5wYXJlbnROb2RlLFxuICAgICAgICAgICAgY3VyID0gYXVwO1xuICAgICAgICBpZiAoIGF1cCA9PT0gYnVwICkge1xuICAgICAgICAgICAgcmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuICAgICAgICB9IGVsc2UgaWYgKCAhYXVwICkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKCAhYnVwICkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKCBjdXIgKSB7XG4gICAgICAgICAgICBhcC51bnNoaWZ0KCBjdXIgKTtcbiAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGN1ciA9IGJ1cDtcbiAgICAgICAgd2hpbGUgKCBjdXIgKSB7XG4gICAgICAgICAgICBicC51bnNoaWZ0KCBjdXIgKTtcbiAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGFsID0gYXAubGVuZ3RoO1xuICAgICAgICBibCA9IGJwLmxlbmd0aDtcbiAgICAgICAgZm9yICggdmFyIGkgPSAwOyBpIDwgYWwgJiYgaSA8IGJsOyBpKysgKSB7XG4gICAgICAgICAgICBpZiAoIGFwW2ldICE9PSBicFtpXSApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaSA9PT0gYWwgP1xuICAgICAgICAgICAgc2libGluZ0NoZWNrKCBhLCBicFtpXSwgLTEgKSA6XG4gICAgICAgICAgICBzaWJsaW5nQ2hlY2soIGFwW2ldLCBiLCAxICk7XG4gICAgfTtcbiAgICBzaWJsaW5nQ2hlY2sgPSBmdW5jdGlvbiggYSwgYiwgcmV0ICkge1xuICAgICAgICBpZiAoIGEgPT09IGIgKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBjdXIgPSBhLm5leHRTaWJsaW5nO1xuICAgICAgICB3aGlsZSAoIGN1ciApIHtcbiAgICAgICAgICAgIGlmICggY3VyID09PSBiICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1ciA9IGN1ci5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9O1xufVxuXG4oZnVuY3Rpb24oKXtcbiAgICB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICAgIGlkID0gXCJzY3JpcHRcIiArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCksXG4gICAgICAgIHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgZm9ybS5pbm5lckhUTUwgPSBcIjxhIG5hbWU9J1wiICsgaWQgKyBcIicvPlwiO1xuICAgIHJvb3QuaW5zZXJ0QmVmb3JlKCBmb3JtLCByb290LmZpcnN0Q2hpbGQgKTtcbiAgICBpZiAoIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBpZCApICkge1xuICAgICAgICBFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkge1xuICAgICAgICAgICAgaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhaXNYTUwgKSB7XG4gICAgICAgICAgICAgICAgdmFyIG0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKG1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbSA/XG4gICAgICAgICAgICAgICAgICAgIG0uaWQgPT09IG1hdGNoWzFdIHx8IHR5cGVvZiBtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiYgbS5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIikubm9kZVZhbHVlID09PSBtYXRjaFsxXSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBbbV0gOlxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIDpcbiAgICAgICAgICAgICAgICAgICAgW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIEV4cHIuZmlsdGVyLklEID0gZnVuY3Rpb24oIGVsZW0sIG1hdGNoICkge1xuICAgICAgICAgICAgdmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmIGVsZW0uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgbm9kZSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gbWF0Y2g7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJvb3QucmVtb3ZlQ2hpbGQoIGZvcm0gKTtcbiAgICByb290ID0gZm9ybSA9IG51bGw7XG59KSgpO1xuKGZ1bmN0aW9uKCl7XG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgZGl2LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpICk7XG4gICAgaWYgKCBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aCA+IDAgKSB7XG4gICAgICAgIEV4cHIuZmluZC5UQUcgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQgKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIG1hdGNoWzFdICk7XG4gICAgICAgICAgICBpZiAoIG1hdGNoWzFdID09PSBcIipcIiApIHtcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0gW107XG4gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwOyByZXN1bHRzW2ldOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggcmVzdWx0c1tpXS5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5wdXNoKCByZXN1bHRzW2ldICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9IHRtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBkaXYuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG4gICAgaWYgKCBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICBkaXYuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpICE9PSBcIiNcIiApIHtcbiAgICAgICAgRXhwci5hdHRySGFuZGxlLmhyZWYgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJocmVmXCIsIDIgKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZGl2ID0gbnVsbDtcbn0pKCk7XG5pZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSB7XG4gICAgKGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBvbGRTaXp6bGUgPSBTaXp6bGUsXG4gICAgICAgICAgICBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgaWQgPSBcIl9fc2l6emxlX19cIjtcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IFwiPHAgY2xhc3M9J1RFU1QnPjwvcD5cIjtcbiAgICAgICAgaWYgKCBkaXYucXVlcnlTZWxlY3RvckFsbCAmJiBkaXYucXVlcnlTZWxlY3RvckFsbChcIi5URVNUXCIpLmxlbmd0aCA9PT0gMCApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBTaXp6bGUgPSBmdW5jdGlvbiggcXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkICkge1xuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG4gICAgICAgICAgICBpZiAoICFzZWVkICYmICFTaXp6bGUuaXNYTUwoY29udGV4dCkgKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oXFx3KyQpfF5cXC4oW1xcd1xcLV0rJCl8XiMoW1xcd1xcLV0rJCkvLmV4ZWMoIHF1ZXJ5ICk7XG4gICAgICAgICAgICAgICAgaWYgKCBtYXRjaCAmJiAoY29udGV4dC5ub2RlVHlwZSA9PT0gMSB8fCBjb250ZXh0Lm5vZGVUeXBlID09PSA5KSApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRjaFsxXSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlQXJyYXkoIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHF1ZXJ5ICksIGV4dHJhICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIG1hdGNoWzJdICYmIEV4cHIuZmluZC5DTEFTUyAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG1hdGNoWzJdICksIGV4dHJhICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHF1ZXJ5ID09PSBcImJvZHlcIiAmJiBjb250ZXh0LmJvZHkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBbIGNvbnRleHQuYm9keSBdLCBleHRyYSApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBtYXRjaCAmJiBtYXRjaFszXSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbM10gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSAmJiBlbGVtLnBhcmVudE5vZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLmlkID09PSBtYXRjaFszXSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggWyBlbGVtIF0sIGV4dHJhICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZUFycmF5KCBbXSwgZXh0cmEgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KSwgZXh0cmEgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChxc2FFcnJvcikge31cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjb250ZXh0Lm5vZGVUeXBlID09PSAxICYmIGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9sZENvbnRleHQgPSBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gb2xkIHx8IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzUGFyZW50ID0gY29udGV4dC5wYXJlbnROb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciA9IC9eXFxzKlsrfl0vLnRlc3QoIHF1ZXJ5ICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggIW9sZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsIG5pZCApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmlkID0gbmlkLnJlcGxhY2UoIC8nL2csIFwiXFxcXCQmXCIgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIHJlbGF0aXZlSGllcmFyY2h5U2VsZWN0b3IgJiYgaGFzUGFyZW50ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVsYXRpdmVIaWVyYXJjaHlTZWxlY3RvciB8fCBoYXNQYXJlbnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VBcnJheSggY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZD0nXCIgKyBuaWQgKyBcIiddIFwiICsgcXVlcnkgKSwgZXh0cmEgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChwc2V1ZG9FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhb2xkICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZENvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvbGRTaXp6bGUocXVlcnksIGNvbnRleHQsIGV4dHJhLCBzZWVkKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICggdmFyIHByb3AgaW4gb2xkU2l6emxlICkge1xuICAgICAgICAgICAgU2l6emxlWyBwcm9wIF0gPSBvbGRTaXp6bGVbIHByb3AgXTtcbiAgICAgICAgfVxuICAgICAgICBkaXYgPSBudWxsO1xuICAgIH0pKCk7XG59XG5cbihmdW5jdGlvbigpe1xuICAgIHZhciBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuICAgICAgICBtYXRjaGVzID0gaHRtbC5tYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgaHRtbC5tc01hdGNoZXNTZWxlY3RvcjtcbiAgICBpZiAoIG1hdGNoZXMgKSB7XG4gICAgICAgIHZhciBkaXNjb25uZWN0ZWRNYXRjaCA9ICFtYXRjaGVzLmNhbGwoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSwgXCJkaXZcIiApLFxuICAgICAgICAgICAgcHNldWRvV29ya3MgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG1hdGNoZXMuY2FsbCggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcIlt0ZXN0IT0nJ106c2l6emxlXCIgKTtcbiAgICAgICAgfSBjYXRjaCggcHNldWRvRXJyb3IgKSB7XG4gICAgICAgICAgICBwc2V1ZG9Xb3JrcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBub2RlLCBleHByICkge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXFw9XFxzKihbXidcIlxcXV0qKVxccypcXF0vZywgXCI9JyQxJ11cIik7XG4gICAgICAgICAgICBpZiAoICFTaXp6bGUuaXNYTUwoIG5vZGUgKSApIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHBzZXVkb1dvcmtzIHx8ICFFeHByLm1hdGNoLlBTRVVETy50ZXN0KCBleHByICkgJiYgIS8hPS8udGVzdCggZXhwciApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IG1hdGNoZXMuY2FsbCggbm9kZSwgZXhwciApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCByZXQgfHwgIWRpc2Nvbm5lY3RlZE1hdGNoIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZG9jdW1lbnQgJiYgbm9kZS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBTaXp6bGUoZXhwciwgbnVsbCwgbnVsbCwgW25vZGVdKS5sZW5ndGggPiAwO1xuICAgICAgICB9O1xuICAgIH1cbn0pKCk7XG4oZnVuY3Rpb24oKXtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkaXYuaW5uZXJIVE1MID0gXCI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PlwiO1xuICAgIGlmICggIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIHx8IGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZVwiKS5sZW5ndGggPT09IDAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGl2Lmxhc3RDaGlsZC5jbGFzc05hbWUgPSBcImVcIjtcbiAgICBpZiAoIGRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZVwiKS5sZW5ndGggPT09IDEgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgRXhwci5vcmRlci5zcGxpY2UoMSwgMCwgXCJDTEFTU1wiKTtcbiAgICBFeHByLmZpbmQuQ0xBU1MgPSBmdW5jdGlvbiggbWF0Y2gsIGNvbnRleHQsIGlzWE1MICkge1xuICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgIWlzWE1MICkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShtYXRjaFsxXSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGRpdiA9IG51bGw7XG59KSgpO1xuZnVuY3Rpb24gZGlyTm9kZUNoZWNrKCBkaXIsIGN1ciwgZG9uZU5hbWUsIGNoZWNrU2V0LCBub2RlQ2hlY2ssIGlzWE1MICkge1xuICAgIGZvciAoIHZhciBpID0gMCwgbCA9IGNoZWNrU2V0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgdmFyIGVsZW0gPSBjaGVja1NldFtpXTtcbiAgICAgICAgaWYgKCBlbGVtICkge1xuICAgICAgICAgICAgdmFyIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICBlbGVtID0gZWxlbVtkaXJdO1xuICAgICAgICAgICAgd2hpbGUgKCBlbGVtICkge1xuICAgICAgICAgICAgICAgIGlmICggZWxlbVsgZXhwYW5kbyBdID09PSBkb25lTmFtZSApIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjaGVja1NldFtlbGVtLnNpenNldF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWlzWE1MICl7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1bIGV4cGFuZG8gXSA9IGRvbmVOYW1lO1xuICAgICAgICAgICAgICAgICAgICBlbGVtLnNpenNldCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXIgKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gZWxlbTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjaGVja1NldFtpXSA9IG1hdGNoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkaXJDaGVjayggZGlyLCBjdXIsIGRvbmVOYW1lLCBjaGVja1NldCwgbm9kZUNoZWNrLCBpc1hNTCApIHtcbiAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGVja1NldC5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG4gICAgICAgIHZhciBlbGVtID0gY2hlY2tTZXRbaV07XG4gICAgICAgIGlmICggZWxlbSApIHtcbiAgICAgICAgICAgIHZhciBtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgZWxlbSA9IGVsZW1bZGlyXTtcbiAgICAgICAgICAgIHdoaWxlICggZWxlbSApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGVsZW1bIGV4cGFuZG8gXSA9PT0gZG9uZU5hbWUgKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gY2hlY2tTZXRbZWxlbS5zaXpzZXRdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoICFpc1hNTCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bIGV4cGFuZG8gXSA9IGRvbmVOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5zaXpzZXQgPSBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGN1ciAhPT0gXCJzdHJpbmdcIiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbSA9PT0gY3VyICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggU2l6emxlLmZpbHRlciggY3VyLCBbZWxlbV0gKS5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBlbGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxlbSA9IGVsZW1bZGlyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoZWNrU2V0W2ldID0gbWF0Y2g7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zICkge1xuICAgIFNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkge1xuICAgICAgICByZXR1cm4gYSAhPT0gYiAmJiAoYS5jb250YWlucyA/IGEuY29udGFpbnMoYikgOiB0cnVlKTtcbiAgICB9O1xufSBlbHNlIGlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICkge1xuICAgIFNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBhLCBiICkge1xuICAgICAgICByZXR1cm4gISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDE2KTtcbiAgICB9O1xufSBlbHNlIHtcbiAgICBTaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG5cblNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgIHZhciBkb2N1bWVudEVsZW1lbnQgPSAoZWxlbSA/IGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtIDogMCkuZG9jdW1lbnRFbGVtZW50O1xuICAgIHJldHVybiBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQubm9kZU5hbWUgIT09IFwiSFRNTFwiIDogZmFsc2U7XG59O1xudmFyIHBvc1Byb2Nlc3MgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHNlZWQgKSB7XG4gICAgdmFyIG1hdGNoLFxuICAgICAgICB0bXBTZXQgPSBbXSxcbiAgICAgICAgbGF0ZXIgPSBcIlwiLFxuICAgICAgICByb290ID0gY29udGV4dC5ub2RlVHlwZSA/IFtjb250ZXh0XSA6IGNvbnRleHQ7XG4gICAgd2hpbGUgKCAobWF0Y2ggPSBFeHByLm1hdGNoLlBTRVVETy5leGVjKCBzZWxlY3RvciApKSApIHtcbiAgICAgICAgbGF0ZXIgKz0gbWF0Y2hbMF07XG4gICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IucmVwbGFjZSggRXhwci5tYXRjaC5QU0VVRE8sIFwiXCIgKTtcbiAgICB9XG4gICAgc2VsZWN0b3IgPSBFeHByLnJlbGF0aXZlW3NlbGVjdG9yXSA/IHNlbGVjdG9yICsgXCIqXCIgOiBzZWxlY3RvcjtcbiAgICBmb3IgKCB2YXIgaSA9IDAsIGwgPSByb290Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgU2l6emxlKCBzZWxlY3Rvciwgcm9vdFtpXSwgdG1wU2V0LCBzZWVkICk7XG4gICAgfVxuICAgIHJldHVybiBTaXp6bGUuZmlsdGVyKCBsYXRlciwgdG1wU2V0ICk7XG59O1xuU2l6emxlLmF0dHIgPSBqUXVlcnkuYXR0cjtcblNpenpsZS5zZWxlY3RvcnMuYXR0ck1hcCA9IHt9O1xualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5qUXVlcnkuZXhwcltcIjpcIl0gPSBqUXVlcnkuZXhwci5maWx0ZXJzO1xualF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcbn0pKCk7XG52YXIgcnVudGlsID0gL1VudGlsJC8sXG4gICAgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sXG4gICAgcm11bHRpc2VsZWN0b3IgPSAvLC8sXG4gICAgaXNTaW1wbGUgPSAvXi5bXjojXFxbXFwuLF0qJC8sXG4gICAgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgUE9TID0galF1ZXJ5LmV4cHIubWF0Y2guZ2xvYmFsUE9TLFxuICAgIGd1YXJhbnRlZWRVbmlxdWUgPSB7XG4gICAgICAgIGNoaWxkcmVuOiB0cnVlLFxuICAgICAgICBjb250ZW50czogdHJ1ZSxcbiAgICAgICAgbmV4dDogdHJ1ZSxcbiAgICAgICAgcHJldjogdHJ1ZVxuICAgIH07XG5qUXVlcnkuZm4uZXh0ZW5kKHtcbiAgICBmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgIGksIGw7XG4gICAgICAgIGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgZm9yICggaSA9IDAsIGwgPSBzZWxmLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmV0ID0gdGhpcy5wdXNoU3RhY2soIFwiXCIsIFwiZmluZFwiLCBzZWxlY3RvciApLFxuICAgICAgICAgICAgbGVuZ3RoLCBuLCByO1xuICAgICAgICBmb3IgKCBpID0gMCwgbCA9IHRoaXMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuICAgICAgICAgICAgbGVuZ3RoID0gcmV0Lmxlbmd0aDtcbiAgICAgICAgICAgIGpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7XG4gICAgICAgICAgICBpZiAoIGkgPiAwICkge1xuICAgICAgICAgICAgICAgIGZvciAoIG4gPSBsZW5ndGg7IG4gPCByZXQubGVuZ3RoOyBuKysgKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoIHIgPSAwOyByIDwgbGVuZ3RoOyByKysgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJldFtyXSA9PT0gcmV0W25dICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5zcGxpY2Uobi0tLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuICAgICAgICB2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0ICk7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgbCA9IHRhcmdldHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzW2ldICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3codGhpcywgc2VsZWN0b3IsIGZhbHNlKSwgXCJub3RcIiwgc2VsZWN0b3IpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwgXCJmaWx0ZXJcIiwgc2VsZWN0b3IgKTtcbiAgICB9LFxuICAgIGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG4gICAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmIChcbiAgICAgICAgICAgIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiA/XG4gICAgICAgICAgICAgICAgUE9TLnRlc3QoIHNlbGVjdG9yICkgP1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yLCB0aGlzLmNvbnRleHQgKS5pbmRleCggdGhpc1swXSApID49IDAgOlxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyApLmxlbmd0aCA+IDAgOlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyKCBzZWxlY3RvciApLmxlbmd0aCA+IDAgKTtcbiAgICB9LFxuICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG4gICAgICAgIHZhciByZXQgPSBbXSwgaSwgbCwgY3VyID0gdGhpc1swXTtcbiAgICAgICAgaWYgKCBqUXVlcnkuaXNBcnJheSggc2VsZWN0b3JzICkgKSB7XG4gICAgICAgICAgICB2YXIgbGV2ZWwgPSAxO1xuICAgICAgICAgICAgd2hpbGUgKCBjdXIgJiYgY3VyLm93bmVyRG9jdW1lbnQgJiYgY3VyICE9PSBjb250ZXh0ICkge1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeSggY3VyICkuaXMoIHNlbGVjdG9yc1sgaSBdICkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQucHVzaCh7IHNlbGVjdG9yOiBzZWxlY3RvcnNbIGkgXSwgZWxlbTogY3VyLCBsZXZlbDogbGV2ZWwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3VyID0gY3VyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgbGV2ZWwrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHBvcyA9IFBPUy50ZXN0KCBzZWxlY3RvcnMgKSB8fCB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiID9cbiAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9ycywgY29udGV4dCB8fCB0aGlzLmNvbnRleHQgKSA6XG4gICAgICAgICAgICAgICAgMDtcbiAgICAgICAgZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgIGN1ciA9IHRoaXNbaV07XG4gICAgICAgICAgICB3aGlsZSAoIGN1ciApIHtcbiAgICAgICAgICAgICAgICBpZiAoIHBvcyA/IHBvcy5pbmRleChjdXIpID4gLTEgOiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoY3VyLCBzZWxlY3RvcnMpICkge1xuICAgICAgICAgICAgICAgICAgICByZXQucHVzaCggY3VyICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoICFjdXIgfHwgIWN1ci5vd25lckRvY3VtZW50IHx8IGN1ciA9PT0gY29udGV4dCB8fCBjdXIubm9kZVR5cGUgPT09IDExICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gcmV0Lmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldDtcbiAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIFwiY2xvc2VzdFwiLCBzZWxlY3RvcnMgKTtcbiAgICB9LFxuICAgIGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgaWYgKCAhZWxlbSApIHtcbiAgICAgICAgICAgIHJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgPyB0aGlzLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pbkFycmF5KCB0aGlzWzBdLCBqUXVlcnkoIGVsZW0gKSApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqUXVlcnkuaW5BcnJheShcbiAgICAgICAgICAgIGVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTtcbiAgICB9LFxuICAgIGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuICAgICAgICB2YXIgc2V0ID0gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiID9cbiAgICAgICAgICAgICAgICBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgOlxuICAgICAgICAgICAgICAgIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3IgKSxcbiAgICAgICAgICAgIGFsbCA9IGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgc2V0ICk7XG4gICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayggaXNEaXNjb25uZWN0ZWQoIHNldFswXSApIHx8IGlzRGlzY29ubmVjdGVkKCBhbGxbMF0gKSA/XG4gICAgICAgICAgICBhbGwgOlxuICAgICAgICAgICAgalF1ZXJ5LnVuaXF1ZSggYWxsICkgKTtcbiAgICB9LFxuICAgIGFuZFNlbGY6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGQoIHRoaXMucHJldk9iamVjdCApO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gaXNEaXNjb25uZWN0ZWQoIG5vZGUgKSB7XG4gICAgcmV0dXJuICFub2RlIHx8ICFub2RlLnBhcmVudE5vZGUgfHwgbm9kZS5wYXJlbnROb2RlLm5vZGVUeXBlID09PSAxMTtcbn1cblxualF1ZXJ5LmVhY2goe1xuICAgIHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG4gICAgICAgIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG4gICAgfSxcbiAgICBwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG4gICAgfSxcbiAgICBwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuICAgIH0sXG4gICAgbmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkubnRoKCBlbGVtLCAyLCBcIm5leHRTaWJsaW5nXCIgKTtcbiAgICB9LFxuICAgIHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICByZXR1cm4galF1ZXJ5Lm50aCggZWxlbSwgMiwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuICAgIH0sXG4gICAgbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcbiAgICB9LFxuICAgIHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICByZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuICAgIH0sXG4gICAgbmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgaSwgdW50aWwgKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG4gICAgfSxcbiAgICBwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG4gICAgfSxcbiAgICBzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuc2libGluZyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG4gICAgfSxcbiAgICBjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJzdENoaWxkICk7XG4gICAgfSxcbiAgICBjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sIFwiaWZyYW1lXCIgKSA/XG4gICAgICAgICAgICBlbGVtLmNvbnRlbnREb2N1bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOlxuICAgICAgICAgICAgalF1ZXJ5Lm1ha2VBcnJheSggZWxlbS5jaGlsZE5vZGVzICk7XG4gICAgfVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcbiAgICAgICAgdmFyIHJldCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuICAgICAgICBpZiAoICFydW50aWwudGVzdCggbmFtZSApICkge1xuICAgICAgICAgICAgc2VsZWN0b3IgPSB1bnRpbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcbiAgICAgICAgICAgIHJldCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCByZXQgKTtcbiAgICAgICAgfVxuICAgICAgICByZXQgPSB0aGlzLmxlbmd0aCA+IDEgJiYgIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSA/IGpRdWVyeS51bmlxdWUoIHJldCApIDogcmV0O1xuICAgICAgICBpZiAoICh0aGlzLmxlbmd0aCA+IDEgfHwgcm11bHRpc2VsZWN0b3IudGVzdCggc2VsZWN0b3IgKSkgJiYgcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcbiAgICAgICAgICAgIHJldCA9IHJldC5yZXZlcnNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsIG5hbWUsIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLmpvaW4oXCIsXCIpICk7XG4gICAgfTtcbn0pO1xualF1ZXJ5LmV4dGVuZCh7XG4gICAgZmlsdGVyOiBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcbiAgICAgICAgaWYgKCBub3QgKSB7XG4gICAgICAgICAgICBleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtcy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGVsZW1zWzBdLCBleHByKSA/IFsgZWxlbXNbMF0gXSA6IFtdIDpcbiAgICAgICAgICAgIGpRdWVyeS5maW5kLm1hdGNoZXMoZXhwciwgZWxlbXMpO1xuICAgIH0sXG4gICAgZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBbXSxcbiAgICAgICAgICAgIGN1ciA9IGVsZW1bIGRpciBdO1xuICAgICAgICB3aGlsZSAoIGN1ciAmJiBjdXIubm9kZVR5cGUgIT09IDkgJiYgKHVudGlsID09PSB1bmRlZmluZWQgfHwgY3VyLm5vZGVUeXBlICE9PSAxIHx8ICFqUXVlcnkoIGN1ciApLmlzKCB1bnRpbCApKSApIHtcbiAgICAgICAgICAgIGlmICggY3VyLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWQucHVzaCggY3VyICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXIgPSBjdXJbZGlyXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF0Y2hlZDtcbiAgICB9LFxuICAgIG50aDogZnVuY3Rpb24oIGN1ciwgcmVzdWx0LCBkaXIsIGVsZW0gKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCB8fCAxO1xuICAgICAgICB2YXIgbnVtID0gMDtcbiAgICAgICAgZm9yICggOyBjdXI7IGN1ciA9IGN1cltkaXJdICkge1xuICAgICAgICAgICAgaWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgKytudW0gPT09IHJlc3VsdCApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VyO1xuICAgIH0sXG4gICAgc2libGluZzogZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG4gICAgICAgIHZhciByID0gW107XG4gICAgICAgIGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG4gICAgICAgICAgICBpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcbiAgICAgICAgICAgICAgICByLnB1c2goIG4gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG59KTtcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHtcbiAgICBxdWFsaWZpZXIgPSBxdWFsaWZpZXIgfHwgMDtcbiAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcbiAgICAgICAgICAgIHZhciByZXRWYWwgPSAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG4gICAgICAgICAgICByZXR1cm4gcmV0VmFsID09PSBrZWVwO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG4gICAgICAgICAgICByZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSA9PT0ga2VlcDtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gXCJzdHJpbmdcIiApIHtcbiAgICAgICAgdmFyIGZpbHRlcmVkID0galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIGlzU2ltcGxlLnRlc3QoIHF1YWxpZmllciApICkge1xuICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5maWx0ZXIocXVhbGlmaWVyLCBmaWx0ZXJlZCwgIWtlZXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVhbGlmaWVyID0galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBmaWx0ZXJlZCApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBqUXVlcnkuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG4gICAgICAgIHJldHVybiAoIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBxdWFsaWZpZXIgKSA+PSAwICkgPT09IGtlZXA7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQgKSB7XG4gICAgdmFyIGxpc3QgPSBub2RlTmFtZXMuc3BsaXQoIFwifFwiICksXG4gICAgc2FmZUZyYWcgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgaWYgKCBzYWZlRnJhZy5jcmVhdGVFbGVtZW50ICkge1xuICAgICAgICB3aGlsZSAoIGxpc3QubGVuZ3RoICkge1xuICAgICAgICAgICAgc2FmZUZyYWcuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgICBsaXN0LnBvcCgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYWZlRnJhZztcbn1cblxudmFyIG5vZGVOYW1lcyA9IFwiYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxcIiArXG4gICAgICAgIFwiaGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW9cIixcbiAgICByaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcXGQrPVwiKD86XFxkK3xudWxsKVwiL2csXG4gICAgcmxlYWRpbmdXaGl0ZXNwYWNlID0gL15cXHMrLyxcbiAgICByeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXFx3Ol0rKVtePl0qKVxcLz4vaWcsXG4gICAgcnRhZ05hbWUgPSAvPChbXFx3Ol0rKS8sXG4gICAgcnRib2R5ID0gLzx0Ym9keS9pLFxuICAgIHJodG1sID0gLzx8JiM/XFx3KzsvLFxuICAgIHJub0lubmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlKS9pLFxuICAgIHJub2NhY2hlID0gLzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxcbiAgICBybm9zaGltY2FjaGUgPSBuZXcgUmVnRXhwKFwiPCg/OlwiICsgbm9kZU5hbWVzICsgXCIpW1xcXFxzLz5dXCIsIFwiaVwiKSxcbiAgICByY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG4gICAgcnNjcmlwdFR5cGUgPSAvXFwvKGphdmF8ZWNtYSlzY3JpcHQvaSxcbiAgICByY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfFxcLVxcLSkvLFxuICAgIHdyYXBNYXAgPSB7XG4gICAgICAgIG9wdGlvbjogWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdLFxuICAgICAgICBsZWdlbmQ6IFsgMSwgXCI8ZmllbGRzZXQ+XCIsIFwiPC9maWVsZHNldD5cIiBdLFxuICAgICAgICB0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG4gICAgICAgIHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcbiAgICAgICAgdGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuICAgICAgICBjb2w6IFsgMiwgXCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuICAgICAgICBhcmVhOiBbIDEsIFwiPG1hcD5cIiwgXCI8L21hcD5cIiBdLFxuICAgICAgICBfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbiAgICB9LFxuICAgIHNhZmVGcmFnbWVudCA9IGNyZWF0ZVNhZmVGcmFnbWVudCggZG9jdW1lbnQgKTtcbndyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbjtcbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcbmlmICggIWpRdWVyeS5zdXBwb3J0Lmh0bWxTZXJpYWxpemUgKSB7XG4gICAgd3JhcE1hcC5fZGVmYXVsdCA9IFsgMSwgXCJkaXY8ZGl2PlwiLCBcIjwvZGl2PlwiIF07XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoe1xuICAgIHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICBqUXVlcnkudGV4dCggdGhpcyApIDpcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKCAoIHRoaXNbMF0gJiYgdGhpc1swXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkuY3JlYXRlVGV4dE5vZGUoIHZhbHVlICkgKTtcbiAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcbiAgICB9LFxuICAgIHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBodG1sICkgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHRoaXNbMF0gKSB7XG4gICAgICAgICAgICB2YXIgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEoMCkuY2xvbmUodHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHtcbiAgICAgICAgICAgICAgICB3cmFwLmluc2VydEJlZm9yZSggdGhpc1swXSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd3JhcC5tYXAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZW0gPSB0aGlzO1xuICAgICAgICAgICAgICAgIHdoaWxlICggZWxlbS5maXJzdENoaWxkICYmIGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgICAgICB9KS5hcHBlbmQoIHRoaXMgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG4gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS53cmFwSW5uZXIoIGh0bWwuY2FsbCh0aGlzLCBpKSApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG4gICAgICAgICAgICAgICAgY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG4gICAgICAgICAgICBpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgICBjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCBodG1sICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgd3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG4gICAgICAgIHZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7XG4gICAgICAgICAgICBqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBpc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMsIGkpIDogaHRtbCApO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHVud3JhcDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoICFqUXVlcnkubm9kZU5hbWUoIHRoaXMsIFwiYm9keVwiICkgKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5lbmQoKTtcbiAgICB9LFxuICAgIGFwcGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICBpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZCggZWxlbSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLmZpcnN0Q2hpbGQgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBiZWZvcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG4gICAgICAgICAgICB2YXIgc2V0ID0galF1ZXJ5LmNsZWFuKCBhcmd1bWVudHMgKTtcbiAgICAgICAgICAgIHNldC5wdXNoLmFwcGx5KCBzZXQsIHRoaXMudG9BcnJheSgpICk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNldCwgXCJiZWZvcmVcIiwgYXJndW1lbnRzICk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCB0aGlzWzBdICYmIHRoaXNbMF0ucGFyZW50Tm9kZSApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgZmFsc2UsIGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuICAgICAgICAgICAgdmFyIHNldCA9IHRoaXMucHVzaFN0YWNrKCB0aGlzLCBcImFmdGVyXCIsIGFyZ3VtZW50cyApO1xuICAgICAgICAgICAgc2V0LnB1c2guYXBwbHkoIHNldCwgalF1ZXJ5LmNsZWFuKGFyZ3VtZW50cykgKTtcbiAgICAgICAgICAgIHJldHVybiBzZXQ7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcbiAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHtcbiAgICAgICAgICAgIGlmICggIXNlbGVjdG9yIHx8IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBbIGVsZW0gXSApLmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgICBpZiAoICFrZWVwRGF0YSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSApO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKCB2YXIgaSA9IDAsIGVsZW07IChlbGVtID0gdGhpc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCApIHtcbiAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNoaWxkKCBlbGVtLmZpcnN0Q2hpbGQgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG4gICAgICAgIGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG4gICAgICAgIGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcbiAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1swXSB8fCB7fSxcbiAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICBsID0gdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDEgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCBcIlwiICkgOlxuICAgICAgICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG4gICAgICAgICAgICAgICAgKCBqUXVlcnkuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSB8fCAhcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIHZhbHVlICkgKSAmJlxuICAgICAgICAgICAgICAgICF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgW1wiXCIsIFwiXCJdIClbMV0udG9Mb3dlckNhc2UoKSBdICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSggcnhodG1sVGFnLCBcIjwkMT48LyQyPlwiICk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1tpXSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcIipcIiApICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbGVtID0gMDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHt9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIGVsZW0gKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcbiAgICB9LFxuICAgIHJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7XG4gICAgICAgIGlmICggdGhpc1swXSAmJiB0aGlzWzBdLnBhcmVudE5vZGUgKSB7XG4gICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKSwgb2xkID0gc2VsZi5odG1sKCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVwbGFjZVdpdGgoIHZhbHVlLmNhbGwoIHRoaXMsIGksIG9sZCApICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIiApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGpRdWVyeSggdmFsdWUgKS5kZXRhY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KCB0aGlzICkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCBuZXh0ICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkobmV4dCkuYmVmb3JlKCB2YWx1ZSApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeShwYXJlbnQpLmFwcGVuZCggdmFsdWUgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA/XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoU3RhY2soIGpRdWVyeShqUXVlcnkuaXNGdW5jdGlvbih2YWx1ZSkgPyB2YWx1ZSgpIDogdmFsdWUpLCBcInJlcGxhY2VXaXRoXCIsIHZhbHVlICkgOlxuICAgICAgICAgICAgICAgIHRoaXM7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmUoIHNlbGVjdG9yLCB0cnVlICk7XG4gICAgfSxcbiAgICBkb21NYW5pcDogZnVuY3Rpb24oIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApIHtcbiAgICAgICAgdmFyIHJlc3VsdHMsIGZpcnN0LCBmcmFnbWVudCwgcGFyZW50LFxuICAgICAgICAgICAgdmFsdWUgPSBhcmdzWzBdLFxuICAgICAgICAgICAgc2NyaXB0cyA9IFtdO1xuICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKS5kb21NYW5pcCggYXJncywgdGFibGUsIGNhbGxiYWNrLCB0cnVlICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgICAgICAgIHZhciBzZWxmID0galF1ZXJ5KHRoaXMpO1xuICAgICAgICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKHRoaXMsIGksIHRhYmxlID8gc2VsZi5odG1sKCkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHNlbGYuZG9tTWFuaXAoIGFyZ3MsIHRhYmxlLCBjYWxsYmFjayApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCB0aGlzWzBdICkge1xuICAgICAgICAgICAgcGFyZW50ID0gdmFsdWUgJiYgdmFsdWUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQucGFyZW50Tm9kZSAmJiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlID09PSAxMSAmJiBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IHRoaXMubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB7IGZyYWdtZW50OiBwYXJlbnQgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cyA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBhcmdzLCB0aGlzLCBzY3JpcHRzICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21lbnQ7XG4gICAgICAgICAgICBpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuICAgICAgICAgICAgICAgIGZpcnN0ID0gZnJhZ21lbnQgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIGZpcnN0ICkge1xuICAgICAgICAgICAgICAgIHRhYmxlID0gdGFibGUgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBmaXJzdCwgXCJ0clwiICk7XG4gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gdGhpcy5sZW5ndGgsIGxhc3RJbmRleCA9IGwgLSAxOyBpIDwgbDsgaSsrICkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QodGhpc1tpXSwgZmlyc3QpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5jYWNoZWFibGUgfHwgKCBsID4gMSAmJiBpIDwgbGFzdEluZGV4ICkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5jbG9uZSggZnJhZ21lbnQsIHRydWUsIHRydWUgKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIHNjcmlwdHMubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKCBzY3JpcHRzLCBmdW5jdGlvbiggaSwgZWxlbSApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnNyYyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBlbGVtLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwic2NyaXB0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoICggZWxlbS50ZXh0IHx8IGVsZW0udGV4dENvbnRlbnQgfHwgZWxlbS5pbm5lckhUTUwgfHwgXCJcIiApLnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCIvKiQwKi9cIiApICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsZW0gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gcm9vdCggZWxlbSwgY3VyICkge1xuICAgIHJldHVybiBqUXVlcnkubm9kZU5hbWUoZWxlbSwgXCJ0YWJsZVwiKSA/XG4gICAgICAgIChlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGJvZHlcIilbMF0gfHxcbiAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChlbGVtLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRib2R5XCIpKSkgOlxuICAgICAgICBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0eXBlLCBpLCBsLFxuICAgICAgICBvbGREYXRhID0galF1ZXJ5Ll9kYXRhKCBzcmMgKSxcbiAgICAgICAgY3VyRGF0YSA9IGpRdWVyeS5fZGF0YSggZGVzdCwgb2xkRGF0YSApLFxuICAgICAgICBldmVudHMgPSBvbGREYXRhLmV2ZW50cztcbiAgICBpZiAoIGV2ZW50cyApIHtcbiAgICAgICAgZGVsZXRlIGN1ckRhdGEuaGFuZGxlO1xuICAgICAgICBjdXJEYXRhLmV2ZW50cyA9IHt9O1xuICAgICAgICBmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcbiAgICAgICAgICAgIGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIGN1ckRhdGEuZGF0YSApIHtcbiAgICAgICAgY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVuZCgge30sIGN1ckRhdGEuZGF0YSApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xvbmVGaXhBdHRyaWJ1dGVzKCBzcmMsIGRlc3QgKSB7XG4gICAgdmFyIG5vZGVOYW1lO1xuICAgIGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIGRlc3QuY2xlYXJBdHRyaWJ1dGVzICkge1xuICAgICAgICBkZXN0LmNsZWFyQXR0cmlidXRlcygpO1xuICAgIH1cbiAgICBpZiAoIGRlc3QubWVyZ2VBdHRyaWJ1dGVzICkge1xuICAgICAgICBkZXN0Lm1lcmdlQXR0cmlidXRlcyggc3JjICk7XG4gICAgfVxuICAgIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICggbm9kZU5hbWUgPT09IFwib2JqZWN0XCIgKSB7XG4gICAgICAgIGRlc3Qub3V0ZXJIVE1MID0gc3JjLm91dGVySFRNTDtcbiAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIChzcmMudHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IHNyYy50eXBlID09PSBcInJhZGlvXCIpICkge1xuICAgICAgICBpZiAoIHNyYy5jaGVja2VkICkge1xuICAgICAgICAgICAgZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuICAgICAgICB9XG4gICAgICAgIGlmICggZGVzdC52YWx1ZSAhPT0gc3JjLnZhbHVlICkge1xuICAgICAgICAgICAgZGVzdC52YWx1ZSA9IHNyYy52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcIm9wdGlvblwiICkge1xuICAgICAgICBkZXN0LnNlbGVjdGVkID0gc3JjLmRlZmF1bHRTZWxlY3RlZDtcbiAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG4gICAgICAgIGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJzY3JpcHRcIiAmJiBkZXN0LnRleHQgIT09IHNyYy50ZXh0ICkge1xuICAgICAgICBkZXN0LnRleHQgPSBzcmMudGV4dDtcbiAgICB9XG4gICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIGpRdWVyeS5leHBhbmRvICk7XG4gICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIFwiX3N1Ym1pdF9hdHRhY2hlZFwiICk7XG4gICAgZGVzdC5yZW1vdmVBdHRyaWJ1dGUoIFwiX2NoYW5nZV9hdHRhY2hlZFwiICk7XG59XG5cbmpRdWVyeS5idWlsZEZyYWdtZW50ID0gZnVuY3Rpb24oIGFyZ3MsIG5vZGVzLCBzY3JpcHRzICkge1xuICAgIHZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZXJlc3VsdHMsIGRvYyxcbiAgICBmaXJzdCA9IGFyZ3NbIDAgXTtcbiAgICBpZiAoIG5vZGVzICYmIG5vZGVzWzBdICkge1xuICAgICAgICBkb2MgPSBub2Rlc1swXS5vd25lckRvY3VtZW50IHx8IG5vZGVzWzBdO1xuICAgIH1cbiAgICBpZiAoICFkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCApIHtcbiAgICAgICAgZG9jID0gZG9jdW1lbnQ7XG4gICAgfVxuICAgIGlmICggYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiICYmIGZpcnN0Lmxlbmd0aCA8IDUxMiAmJiBkb2MgPT09IGRvY3VtZW50ICYmXG4gICAgICAgIGZpcnN0LmNoYXJBdCgwKSA9PT0gXCI8XCIgJiYgIXJub2NhY2hlLnRlc3QoIGZpcnN0ICkgJiZcbiAgICAgICAgKGpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgfHwgIXJjaGVja2VkLnRlc3QoIGZpcnN0ICkpICYmXG4gICAgICAgIChqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUudGVzdCggZmlyc3QgKSkgKSB7XG4gICAgICAgIGNhY2hlYWJsZSA9IHRydWU7XG4gICAgICAgIGNhY2hlcmVzdWx0cyA9IGpRdWVyeS5mcmFnbWVudHNbIGZpcnN0IF07XG4gICAgICAgIGlmICggY2FjaGVyZXN1bHRzICYmIGNhY2hlcmVzdWx0cyAhPT0gMSApIHtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gY2FjaGVyZXN1bHRzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICggIWZyYWdtZW50ICkge1xuICAgICAgICBmcmFnbWVudCA9IGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIGpRdWVyeS5jbGVhbiggYXJncywgZG9jLCBmcmFnbWVudCwgc2NyaXB0cyApO1xuICAgIH1cbiAgICBpZiAoIGNhY2hlYWJsZSApIHtcbiAgICAgICAgalF1ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXSA9IGNhY2hlcmVzdWx0cyA/IGZyYWdtZW50IDogMTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZnJhZ21lbnQ6IGZyYWdtZW50LCBjYWNoZWFibGU6IGNhY2hlYWJsZSB9O1xufTtcbmpRdWVyeS5mcmFnbWVudHMgPSB7fTtcbmpRdWVyeS5lYWNoKHtcbiAgICBhcHBlbmRUbzogXCJhcHBlbmRcIixcbiAgICBwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuICAgIGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcbiAgICBpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuICAgIHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuICAgICAgICB2YXIgcmV0ID0gW10sXG4gICAgICAgICAgICBpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG4gICAgICAgICAgICBwYXJlbnQgPSB0aGlzLmxlbmd0aCA9PT0gMSAmJiB0aGlzWzBdLnBhcmVudE5vZGU7XG4gICAgICAgIGlmICggcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGluc2VydC5sZW5ndGggPT09IDEgKSB7XG4gICAgICAgICAgICBpbnNlcnRbIG9yaWdpbmFsIF0oIHRoaXNbMF0gKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yICggdmFyIGkgPSAwLCBsID0gaW5zZXJ0Lmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcbiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSAoIGkgPiAwID8gdGhpcy5jbG9uZSh0cnVlKSA6IHRoaXMgKS5nZXQoKTtcbiAgICAgICAgICAgICAgICBqUXVlcnkoIGluc2VydFtpXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuICAgICAgICAgICAgICAgIHJldCA9IHJldC5jb25jYXQoIGVsZW1zICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwgaW5zZXJ0LnNlbGVjdG9yICk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5mdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7XG4gICAgaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcbiAgICAgICAgcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICk7XG4gICAgfSBlbHNlIGlmICggdHlwZW9mIGVsZW0ucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcbiAgICAgICAgcmV0dXJuIGVsZW0ucXVlcnlTZWxlY3RvckFsbCggXCIqXCIgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApIHtcbiAgICBpZiAoIGVsZW0udHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IGVsZW0udHlwZSA9PT0gXCJyYWRpb1wiICkge1xuICAgICAgICBlbGVtLmRlZmF1bHRDaGVja2VkID0gZWxlbS5jaGVja2VkO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZmluZElucHV0cyggZWxlbSApIHtcbiAgICB2YXIgbm9kZU5hbWUgPSAoIGVsZW0ubm9kZU5hbWUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICkge1xuICAgICAgICBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApO1xuICAgIH0gZWxzZSBpZiAoIG5vZGVOYW1lICE9PSBcInNjcmlwdFwiICYmIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuICAgICAgICBqUXVlcnkuZ3JlcCggZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpLCBmaXhEZWZhdWx0Q2hlY2tlZCApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hpbUNsb25lTm9kZSggZWxlbSApIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuICAgIHNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2ICk7XG4gICAgZGl2LmlubmVySFRNTCA9IGVsZW0ub3V0ZXJIVE1MO1xuICAgIHJldHVybiBkaXYuZmlyc3RDaGlsZDtcbn1cblxualF1ZXJ5LmV4dGVuZCh7XG4gICAgY2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcbiAgICAgICAgdmFyIHNyY0VsZW1lbnRzLFxuICAgICAgICAgICAgZGVzdEVsZW1lbnRzLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGNsb25lID0galF1ZXJ5LnN1cHBvcnQuaHRtbDVDbG9uZSB8fCBqUXVlcnkuaXNYTUxEb2MoZWxlbSkgfHwgIXJub3NoaW1jYWNoZS50ZXN0KCBcIjxcIiArIGVsZW0ubm9kZU5hbWUgKyBcIj5cIiApID9cbiAgICAgICAgICAgICAgICBlbGVtLmNsb25lTm9kZSggdHJ1ZSApIDpcbiAgICAgICAgICAgICAgICBzaGltQ2xvbmVOb2RlKCBlbGVtICk7XG4gICAgICAgIGlmICggKCFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lRXZlbnQgfHwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJlxuICAgICAgICAgICAgICAgIChlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExKSAmJiAhalF1ZXJ5LmlzWE1MRG9jKGVsZW0pICkge1xuICAgICAgICAgICAgY2xvbmVGaXhBdHRyaWJ1dGVzKCBlbGVtLCBjbG9uZSApO1xuICAgICAgICAgICAgc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcbiAgICAgICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcbiAgICAgICAgICAgIGZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkge1xuICAgICAgICAgICAgICAgIGlmICggZGVzdEVsZW1lbnRzW2ldICkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBkYXRhQW5kRXZlbnRzICkge1xuICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG4gICAgICAgICAgICBpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuICAgICAgICAgICAgICAgIHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG4gICAgICAgICAgICAgICAgZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzcmNFbGVtZW50cyA9IGRlc3RFbGVtZW50cyA9IG51bGw7XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9LFxuICAgIGNsZWFuOiBmdW5jdGlvbiggZWxlbXMsIGNvbnRleHQsIGZyYWdtZW50LCBzY3JpcHRzICkge1xuICAgICAgICB2YXIgY2hlY2tTY3JpcHRUeXBlLCBzY3JpcHQsIGosXG4gICAgICAgICAgICAgICAgcmV0ID0gW107XG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuICAgICAgICBpZiAoIHR5cGVvZiBjb250ZXh0LmNyZWF0ZUVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgKSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHRbMF0gJiYgY29udGV4dFswXS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIGZvciAoIHZhciBpID0gMCwgZWxlbTsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkge1xuICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJudW1iZXJcIiApIHtcbiAgICAgICAgICAgICAgICBlbGVtICs9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoICFlbGVtICkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcbiAgICAgICAgICAgICAgICBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0gPSBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsIFwiPCQxPjwvJDI+XCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgW1wiXCIsIFwiXCJdIClbMV0udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB3cmFwWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gY29udGV4dC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2FmZUNoaWxkTm9kZXMgPSBzYWZlRnJhZ21lbnQuY2hpbGROb2RlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBjb250ZXh0ID09PSBkb2N1bWVudCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVGcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2ICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTYWZlRnJhZ21lbnQoIGNvbnRleHQgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtICsgd3JhcFsyXTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBkZXB0aC0tICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGl2ID0gZGl2Lmxhc3RDaGlsZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC50Ym9keSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNCb2R5ID0gcnRib2R5LnRlc3QoZWxlbSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJvZHkgPSB0YWcgPT09IFwidGFibGVcIiAmJiAhaGFzQm9keSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5maXJzdENoaWxkICYmIGRpdi5maXJzdENoaWxkLmNoaWxkTm9kZXMgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwWzFdID09PSBcIjx0YWJsZT5cIiAmJiAhaGFzQm9keSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuY2hpbGROb2RlcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSB0Ym9keS5sZW5ndGggLSAxOyBqID49IDAgOyAtLWogKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0sIFwidGJvZHlcIiApICYmICF0Ym9keVsgaiBdLmNoaWxkTm9kZXMubGVuZ3RoICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ym9keVsgaiBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRib2R5WyBqIF0gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhalF1ZXJ5LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UgJiYgcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIGVsZW0gKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5pbnNlcnRCZWZvcmUoIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0pWzBdICksIGRpdi5maXJzdENoaWxkICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxlbSA9IGRpdi5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGRpdiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBkaXYgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc2FmZUNoaWxkTm9kZXMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBzYWZlQ2hpbGROb2Rlc1sgc2FmZUNoaWxkTm9kZXMubGVuZ3RoIC0gMSBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcmVtb3ZlICYmIHJlbW92ZS5wYXJlbnROb2RlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggcmVtb3ZlICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGxlbjtcbiAgICAgICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LmFwcGVuZENoZWNrZWQgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBlbGVtWzBdICYmIHR5cGVvZiAobGVuID0gZWxlbS5sZW5ndGgpID09PSBcIm51bWJlclwiICkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IGxlbjsgaisrICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluZElucHV0cyggZWxlbVtqXSApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmluZElucHV0cyggZWxlbSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggZWxlbS5ub2RlVHlwZSApIHtcbiAgICAgICAgICAgICAgICByZXQucHVzaCggZWxlbSApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXQgPSBqUXVlcnkubWVyZ2UoIHJldCwgZWxlbSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggZnJhZ21lbnQgKSB7XG4gICAgICAgICAgICBjaGVja1NjcmlwdFR5cGUgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWVsZW0udHlwZSB8fCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKCBpID0gMDsgcmV0W2ldOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gcmV0W2ldO1xuICAgICAgICAgICAgICAgIGlmICggc2NyaXB0cyAmJiBqUXVlcnkubm9kZU5hbWUoIHNjcmlwdCwgXCJzY3JpcHRcIiApICYmICghc2NyaXB0LnR5cGUgfHwgcnNjcmlwdFR5cGUudGVzdCggc2NyaXB0LnR5cGUgKSkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjcmlwdHMucHVzaCggc2NyaXB0LnBhcmVudE5vZGUgPyBzY3JpcHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICkgOiBzY3JpcHQgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHNjcmlwdC5ub2RlVHlwZSA9PT0gMSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc1RhZ3MgPSBqUXVlcnkuZ3JlcCggc2NyaXB0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInNjcmlwdFwiICksIGNoZWNrU2NyaXB0VHlwZSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgganNUYWdzICkgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCggc2NyaXB0ICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcbiAgICAgICAgdmFyIGRhdGEsIGlkLFxuICAgICAgICAgICAgY2FjaGUgPSBqUXVlcnkuY2FjaGUsXG4gICAgICAgICAgICBzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG4gICAgICAgICAgICBkZWxldGVFeHBhbmRvID0galF1ZXJ5LnN1cHBvcnQuZGVsZXRlRXhwYW5kbztcbiAgICAgICAgZm9yICggdmFyIGkgPSAwLCBlbGVtOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7XG4gICAgICAgICAgICBpZiAoIGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5Lm5vRGF0YVtlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldICkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWQgPSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdO1xuICAgICAgICAgICAgaWYgKCBpZCApIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gY2FjaGVbIGlkIF07XG4gICAgICAgICAgICAgICAgaWYgKCBkYXRhICYmIGRhdGEuZXZlbnRzICkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKCB2YXIgdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICggZGF0YS5oYW5kbGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmhhbmRsZS5lbGVtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIGRlbGV0ZUV4cGFuZG8gKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBlbGVtWyBqUXVlcnkuZXhwYW5kbyBdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGVsZW0ucmVtb3ZlQXR0cmlidXRlICkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlWyBpZCBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG52YXIgcmFscGhhID0gL2FscGhhXFwoW14pXSpcXCkvaSxcbiAgICByb3BhY2l0eSA9IC9vcGFjaXR5PShbXildKikvLFxuICAgIHJ1cHBlciA9IC8oW0EtWl18Xm1zKS9nLFxuICAgIHJudW0gPSAvXltcXC0rXT8oPzpcXGQqXFwuKT9cXGQrJC9pLFxuICAgIHJudW1ub25weCA9IC9eLT8oPzpcXGQqXFwuKT9cXGQrKD8hcHgpW15cXGRcXHNdKyQvaSxcbiAgICBycmVsTnVtID0gL14oW1xcLStdKT0oW1xcLSsuXFxkZV0rKS8sXG4gICAgcm1hcmdpbiA9IC9ebWFyZ2luLyxcbiAgICBjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcbiAgICBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXSxcbiAgICBjdXJDU1MsXG4gICAgZ2V0Q29tcHV0ZWRTdHlsZSxcbiAgICBjdXJyZW50U3R5bGU7XG5qUXVlcnkuZm4uY3NzID0gZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG4gICAgICAgICAgICBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG4gICAgfSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG59O1xualF1ZXJ5LmV4dGVuZCh7XG4gICAgY3NzSG9va3M6IHtcbiAgICAgICAgb3BhY2l0eToge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBjb21wdXRlZCApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnN0eWxlLm9wYWNpdHk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBjc3NOdW1iZXI6IHtcbiAgICAgICAgXCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuICAgICAgICBcImZvbnRXZWlnaHRcIjogdHJ1ZSxcbiAgICAgICAgXCJsaW5lSGVpZ2h0XCI6IHRydWUsXG4gICAgICAgIFwib3BhY2l0eVwiOiB0cnVlLFxuICAgICAgICBcIm9ycGhhbnNcIjogdHJ1ZSxcbiAgICAgICAgXCJ3aWRvd3NcIjogdHJ1ZSxcbiAgICAgICAgXCJ6SW5kZXhcIjogdHJ1ZSxcbiAgICAgICAgXCJ6b29tXCI6IHRydWVcbiAgICB9LFxuICAgIGNzc1Byb3BzOiB7XG4gICAgICAgIFwiZmxvYXRcIjogalF1ZXJ5LnN1cHBvcnQuY3NzRmxvYXQgPyBcImNzc0Zsb2F0XCIgOiBcInN0eWxlRmxvYXRcIlxuICAgIH0sXG4gICAgc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG4gICAgICAgIGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXQsIHR5cGUsIG9yaWdOYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApLFxuICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlLCBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcbiAgICAgICAgbmFtZSA9IGpRdWVyeS5jc3NQcm9wc1sgb3JpZ05hbWUgXSB8fCBvcmlnTmFtZTtcbiAgICAgICAgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgICAgICAgICAgIGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAocmV0ID0gcnJlbE51bS5leGVjKCB2YWx1ZSApKSApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICggKyggcmV0WzFdICsgMSkgKiArcmV0WzJdICkgKyBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICkgKTtcbiAgICAgICAgICAgICAgICB0eXBlID0gXCJudW1iZXJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggdmFsdWUgPT0gbnVsbCB8fCB0eXBlID09PSBcIm51bWJlclwiICYmIGlzTmFOKCB2YWx1ZSApICkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSArPSBcInB4XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoICFob29rcyB8fCAhKFwic2V0XCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUgKSkgIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVbIG5hbWUgXTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEgKSB7XG4gICAgICAgIHZhciByZXQsIGhvb2tzO1xuICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApO1xuICAgICAgICBob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuICAgICAgICBuYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgbmFtZTtcbiAgICAgICAgaWYgKCBuYW1lID09PSBcImNzc0Zsb2F0XCIgKSB7XG4gICAgICAgICAgICBuYW1lID0gXCJmbG9hdFwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApKSAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSBlbHNlIGlmICggY3VyQ1NTICkge1xuICAgICAgICAgICAgcmV0dXJuIGN1ckNTUyggZWxlbSwgbmFtZSApO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBzd2FwOiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG4gICAgICAgIHZhciBvbGQgPSB7fSxcbiAgICAgICAgICAgIHJldCwgbmFtZTtcbiAgICAgICAgZm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuICAgICAgICAgICAgb2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG4gICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuICAgICAgICBmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG4gICAgICAgICAgICBlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbn0pO1xualF1ZXJ5LmN1ckNTUyA9IGpRdWVyeS5jc3M7XG5pZiAoIGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUgKSB7XG4gICAgZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuICAgICAgICB2YXIgcmV0LCBkZWZhdWx0VmlldywgY29tcHV0ZWRTdHlsZSwgd2lkdGgsXG4gICAgICAgICAgICBzdHlsZSA9IGVsZW0uc3R5bGU7XG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoIHJ1cHBlciwgXCItJDFcIiApLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICggKGRlZmF1bHRWaWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJlxuICAgICAgICAgICAgICAgIChjb21wdXRlZFN0eWxlID0gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSwgbnVsbCApKSApIHtcbiAgICAgICAgICAgIHJldCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApO1xuICAgICAgICAgICAgaWYgKCByZXQgPT09IFwiXCIgJiYgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgZWxlbSApICkge1xuICAgICAgICAgICAgICAgIHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggIWpRdWVyeS5zdXBwb3J0LnBpeGVsTWFyZ2luICYmIGNvbXB1dGVkU3R5bGUgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICkge1xuICAgICAgICAgICAgd2lkdGggPSBzdHlsZS53aWR0aDtcbiAgICAgICAgICAgIHN0eWxlLndpZHRoID0gcmV0O1xuICAgICAgICAgICAgcmV0ID0gY29tcHV0ZWRTdHlsZS53aWR0aDtcbiAgICAgICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xufVxuXG5pZiAoIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUgKSB7XG4gICAgY3VycmVudFN0eWxlID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG4gICAgICAgIHZhciBsZWZ0LCByc0xlZnQsIHVuY29tcHV0ZWQsXG4gICAgICAgICAgICByZXQgPSBlbGVtLmN1cnJlbnRTdHlsZSAmJiBlbGVtLmN1cnJlbnRTdHlsZVsgbmFtZSBdLFxuICAgICAgICAgICAgc3R5bGUgPSBlbGVtLnN0eWxlO1xuICAgICAgICBpZiAoIHJldCA9PSBudWxsICYmIHN0eWxlICYmICh1bmNvbXB1dGVkID0gc3R5bGVbIG5hbWUgXSkgKSB7XG4gICAgICAgICAgICByZXQgPSB1bmNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICAgIGlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICkge1xuICAgICAgICAgICAgbGVmdCA9IHN0eWxlLmxlZnQ7XG4gICAgICAgICAgICByc0xlZnQgPSBlbGVtLnJ1bnRpbWVTdHlsZSAmJiBlbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0O1xuICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IGVsZW0uY3VycmVudFN0eWxlLmxlZnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZS5sZWZ0ID0gbmFtZSA9PT0gXCJmb250U2l6ZVwiID8gXCIxZW1cIiA6IHJldDtcbiAgICAgICAgICAgIHJldCA9IHN0eWxlLnBpeGVsTGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgIHN0eWxlLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgaWYgKCByc0xlZnQgKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5ydW50aW1lU3R5bGUubGVmdCA9IHJzTGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0ID09PSBcIlwiID8gXCJhdXRvXCIgOiByZXQ7XG4gICAgfTtcbn1cblxuY3VyQ1NTID0gZ2V0Q29tcHV0ZWRTdHlsZSB8fCBjdXJyZW50U3R5bGU7XG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApIHtcbiAgICB2YXIgdmFsID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gZWxlbS5vZmZzZXRXaWR0aCA6IGVsZW0ub2Zmc2V0SGVpZ2h0LFxuICAgICAgICBpID0gbmFtZSA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG4gICAgICAgIGxlbiA9IDQ7XG4gICAgaWYgKCB2YWwgPiAwICkge1xuICAgICAgICBpZiAoIGV4dHJhICE9PSBcImJvcmRlclwiICkge1xuICAgICAgICAgICAgZm9yICggOyBpIDwgbGVuOyBpICs9IDIgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCAhZXh0cmEgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCAtPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdICkgKSB8fCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIGV4dHJhID09PSBcIm1hcmdpblwiICkge1xuICAgICAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSApICkgfHwgMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YWwgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiICkgKSB8fCAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsICsgXCJweFwiO1xuICAgIH1cbiAgICB2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUgKTtcbiAgICBpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7XG4gICAgICAgIHZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcbiAgICB9XG4gICAgaWYgKCBybnVtbm9ucHgudGVzdCh2YWwpICkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICB2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuICAgIGlmICggZXh0cmEgKSB7XG4gICAgICAgIGZvciAoIDsgaSA8IGxlbjsgaSArPSAyICkge1xuICAgICAgICAgICAgdmFsICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7XG4gICAgICAgICAgICBpZiAoIGV4dHJhICE9PSBcInBhZGRpbmdcIiApIHtcbiAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiICkgKSB8fCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBleHRyYSA9PT0gXCJtYXJnaW5cIiApIHtcbiAgICAgICAgICAgICAgICB2YWwgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSkgKSB8fCAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWwgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5lYWNoKFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkge1xuICAgIGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdID0ge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG4gICAgICAgICAgICBpZiAoIGNvbXB1dGVkICkge1xuICAgICAgICAgICAgICAgIGlmICggZWxlbS5vZmZzZXRXaWR0aCAhPT0gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBuYW1lLCBleHRyYSApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuICAgICAgICAgICAgcmV0dXJuIHJudW0udGVzdCggdmFsdWUgKSA/XG4gICAgICAgICAgICAgICAgdmFsdWUgKyBcInB4XCIgOlxuICAgICAgICAgICAgICAgIHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3BhY2l0eSApIHtcbiAgICBqUXVlcnkuY3NzSG9va3Mub3BhY2l0eSA9IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9wYWNpdHkudGVzdCggKGNvbXB1dGVkICYmIGVsZW0uY3VycmVudFN0eWxlID8gZWxlbS5jdXJyZW50U3R5bGUuZmlsdGVyIDogZWxlbS5zdHlsZS5maWx0ZXIpIHx8IFwiXCIgKSA/XG4gICAgICAgICAgICAgICAgKCBwYXJzZUZsb2F0KCBSZWdFeHAuJDEgKSAvIDEwMCApICsgXCJcIiA6XG4gICAgICAgICAgICAgICAgY29tcHV0ZWQgPyBcIjFcIiA6IFwiXCI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuICAgICAgICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGUgPSBlbGVtLmN1cnJlbnRTdHlsZSxcbiAgICAgICAgICAgICAgICBvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/IFwiYWxwaGEob3BhY2l0eT1cIiArIHZhbHVlICogMTAwICsgXCIpXCIgOiBcIlwiLFxuICAgICAgICAgICAgICAgIGZpbHRlciA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUuZmlsdGVyIHx8IHN0eWxlLmZpbHRlciB8fCBcIlwiO1xuICAgICAgICAgICAgc3R5bGUuem9vbSA9IDE7XG4gICAgICAgICAgICBpZiAoIHZhbHVlID49IDEgJiYgalF1ZXJ5LnRyaW0oIGZpbHRlci5yZXBsYWNlKCByYWxwaGEsIFwiXCIgKSApID09PSBcIlwiICkge1xuICAgICAgICAgICAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSggXCJmaWx0ZXJcIiApO1xuICAgICAgICAgICAgICAgIGlmICggY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3R5bGUuZmlsdGVyID0gcmFscGhhLnRlc3QoIGZpbHRlciApID9cbiAgICAgICAgICAgICAgICBmaWx0ZXIucmVwbGFjZSggcmFscGhhLCBvcGFjaXR5ICkgOlxuICAgICAgICAgICAgICAgIGZpbHRlciArIFwiIFwiICsgb3BhY2l0eTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmpRdWVyeShmdW5jdGlvbigpIHtcbiAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkge1xuICAgICAgICBqUXVlcnkuY3NzSG9va3MubWFyZ2luUmlnaHQgPSB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIHsgXCJkaXNwbGF5XCI6IFwiaW5saW5lLWJsb2NrXCIgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY29tcHV0ZWQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbi1yaWdodFwiICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5zdHlsZS5tYXJnaW5SaWdodDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn0pO1xuaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkge1xuICAgIGpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG4gICAgICAgIHZhciB3aWR0aCA9IGVsZW0ub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSBlbGVtLm9mZnNldEhlaWdodDtcbiAgICAgICAgcmV0dXJuICggd2lkdGggPT09IDAgJiYgaGVpZ2h0ID09PSAwICkgfHwgKCFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgJiYgKChlbGVtLnN0eWxlICYmIGVsZW0uc3R5bGUuZGlzcGxheSkgfHwgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSkgPT09IFwibm9uZVwiKTtcbiAgICB9O1xuICAgIGpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuICAgICAgICByZXR1cm4gIWpRdWVyeS5leHByLmZpbHRlcnMuaGlkZGVuKCBlbGVtICk7XG4gICAgfTtcbn1cblxualF1ZXJ5LmVhY2goe1xuICAgIG1hcmdpbjogXCJcIixcbiAgICBwYWRkaW5nOiBcIlwiLFxuICAgIGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG4gICAgalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcbiAgICAgICAgZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KFwiIFwiKSA6IFsgdmFsdWUgXSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZCA9IHt9O1xuICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCA0OyBpKysgKSB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuICAgICAgICAgICAgICAgICAgICBwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG52YXIgcjIwID0gLyUyMC9nLFxuICAgIHJicmFja2V0ID0gL1xcW1xcXSQvLFxuICAgIHJDUkxGID0gL1xccj9cXG4vZyxcbiAgICByaGFzaCA9IC8jLiokLyxcbiAgICByaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKVxccj8kL21nLFxuICAgIHJpbnB1dCA9IC9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSxcbiAgICBybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcFxcLXN0b3JhZ2V8LitcXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcbiAgICBybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcbiAgICBycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG4gICAgcnF1ZXJ5ID0gL1xcPy8sXG4gICAgcnNjcmlwdCA9IC88c2NyaXB0XFxiW148XSooPzooPyE8XFwvc2NyaXB0Pik8W148XSopKjxcXC9zY3JpcHQ+L2dpLFxuICAgIHJzZWxlY3RUZXh0YXJlYSA9IC9eKD86c2VsZWN0fHRleHRhcmVhKS9pLFxuICAgIHJzcGFjZXNBamF4ID0gL1xccysvLFxuICAgIHJ0cyA9IC8oWz8mXSlfPVteJl0qLyxcbiAgICBydXJsID0gL14oW1xcd1xcK1xcLlxcLV0rOikoPzpcXC9cXC8oW15cXC8/IzpdKikoPzo6KFxcZCspKT8pPy8sXG4gICAgX2xvYWQgPSBqUXVlcnkuZm4ubG9hZCxcbiAgICBwcmVmaWx0ZXJzID0ge30sXG4gICAgdHJhbnNwb3J0cyA9IHt9LFxuICAgIGFqYXhMb2NhdGlvbixcbiAgICBhamF4TG9jUGFydHMsXG4gICAgYWxsVHlwZXMgPSBbXCIqL1wiXSArIFtcIipcIl07XG50cnkge1xuICAgIGFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhyZWY7XG59IGNhdGNoKCBlICkge1xuICAgIGFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG4gICAgYWpheExvY2F0aW9uLmhyZWYgPSBcIlwiO1xuICAgIGFqYXhMb2NhdGlvbiA9IGFqYXhMb2NhdGlvbi5ocmVmO1xufVxuXG5hamF4TG9jUGFydHMgPSBydXJsLmV4ZWMoIGFqYXhMb2NhdGlvbi50b0xvd2VyQ2FzZSgpICkgfHwgW107XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcbiAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcbiAgICAgICAgICAgIHZhciBkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5zcGxpdCggcnNwYWNlc0FqYXggKSxcbiAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBkYXRhVHlwZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIGxpc3QsXG4gICAgICAgICAgICAgICAgcGxhY2VCZWZvcmU7XG4gICAgICAgICAgICBmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcbiAgICAgICAgICAgICAgICBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSBdO1xuICAgICAgICAgICAgICAgIHBsYWNlQmVmb3JlID0gL15cXCsvLnRlc3QoIGRhdGFUeXBlICk7XG4gICAgICAgICAgICAgICAgaWYgKCBwbGFjZUJlZm9yZSApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSBkYXRhVHlwZS5zdWJzdHIoIDEgKSB8fCBcIipcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXTtcbiAgICAgICAgICAgICAgICBsaXN0WyBwbGFjZUJlZm9yZSA/IFwidW5zaGlmdFwiIDogXCJwdXNoXCIgXSggZnVuYyApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUixcbiAgICAgICAgZGF0YVR5cGUgLCBpbnNwZWN0ZWQgICkge1xuICAgIGRhdGFUeXBlID0gZGF0YVR5cGUgfHwgb3B0aW9ucy5kYXRhVHlwZXNbIDAgXTtcbiAgICBpbnNwZWN0ZWQgPSBpbnNwZWN0ZWQgfHwge307XG4gICAgaW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcbiAgICB2YXIgbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGxlbmd0aCA9IGxpc3QgPyBsaXN0Lmxlbmd0aCA6IDAsXG4gICAgICAgIGV4ZWN1dGVPbmx5ID0gKCBzdHJ1Y3R1cmUgPT09IHByZWZpbHRlcnMgKSxcbiAgICAgICAgc2VsZWN0aW9uO1xuICAgIGZvciAoIDsgaSA8IGxlbmd0aCAmJiAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKTsgaSsrICkge1xuICAgICAgICBzZWxlY3Rpb24gPSBsaXN0WyBpIF0oIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcbiAgICAgICAgaWYgKCB0eXBlb2Ygc2VsZWN0aW9uID09PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgaWYgKCAhZXhlY3V0ZU9ubHkgfHwgaW5zcGVjdGVkWyBzZWxlY3Rpb24gXSApIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIHNlbGVjdGlvbiApO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICggKCBleGVjdXRlT25seSB8fCAhc2VsZWN0aW9uICkgJiYgIWluc3BlY3RlZFsgXCIqXCIgXSApIHtcbiAgICAgICAgc2VsZWN0aW9uID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoXG4gICAgICAgICAgICAgICAgc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBcIipcIiwgaW5zcGVjdGVkICk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuICAgIHZhciBrZXksIGRlZXAsXG4gICAgICAgIGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcbiAgICBmb3IgKCBrZXkgaW4gc3JjICkge1xuICAgICAgICBpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgICggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCBkZWVwICkge1xuICAgICAgICBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcbiAgICB9XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoe1xuICAgIGxvYWQ6IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG4gICAgICAgIGlmICggdHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIiAmJiBfbG9hZCApIHtcbiAgICAgICAgICAgIHJldHVybiBfbG9hZC5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG4gICAgICAgIH0gZWxzZSBpZiAoICF0aGlzLmxlbmd0aCApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcbiAgICAgICAgaWYgKCBvZmYgPj0gMCApIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RvciA9IHVybC5zbGljZSggb2ZmLCB1cmwubGVuZ3RoICk7XG4gICAgICAgICAgICB1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0eXBlID0gXCJHRVRcIjtcbiAgICAgICAgaWYgKCBwYXJhbXMgKSB7XG4gICAgICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IGpRdWVyeS5wYXJhbSggcGFyYW1zLCBqUXVlcnkuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsICk7XG4gICAgICAgICAgICAgICAgdHlwZSA9IFwiUE9TVFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgalF1ZXJ5LmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwiaHRtbFwiLFxuICAgICAgICAgICAgZGF0YTogcGFyYW1zLFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzLCByZXNwb25zZVRleHQgKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ID0ganFYSFIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgIGlmICgganFYSFIuaXNSZXNvbHZlZCgpICkge1xuICAgICAgICAgICAgICAgICAgICBqcVhIUi5kb25lKGZ1bmN0aW9uKCByICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0ID0gcjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KFwiPGRpdj5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKHJlc3BvbnNlVGV4dC5yZXBsYWNlKHJzY3JpcHQsIFwiXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKHNlbGVjdG9yKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVRleHQgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBjYWxsYmFjayApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lYWNoKCBjYWxsYmFjaywgWyByZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG4gICAgfSxcbiAgICBzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCB0aGlzLmVsZW1lbnRzICkgOiB0aGlzO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lICYmICF0aGlzLmRpc2FibGVkICYmXG4gICAgICAgICAgICAgICAgKCB0aGlzLmNoZWNrZWQgfHwgcnNlbGVjdFRleHRhcmVhLnRlc3QoIHRoaXMubm9kZU5hbWUgKSB8fFxuICAgICAgICAgICAgICAgICAgICByaW5wdXQudGVzdCggdGhpcy50eXBlICkgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcChmdW5jdGlvbiggaSwgZWxlbSApe1xuICAgICAgICAgICAgdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbCA9PSBudWxsID9cbiAgICAgICAgICAgICAgICBudWxsIDpcbiAgICAgICAgICAgICAgICBqUXVlcnkuaXNBcnJheSggdmFsICkgP1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwsIGkgKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG4gICAgICAgICAgICAgICAgICAgIH0pIDpcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuICAgICAgICB9KS5nZXQoKTtcbiAgICB9XG59KTtcbmpRdWVyeS5lYWNoKCBcImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kXCIuc3BsaXQoIFwiIFwiICksIGZ1bmN0aW9uKCBpLCBvICl7XG4gICAgalF1ZXJ5LmZuWyBvIF0gPSBmdW5jdGlvbiggZiApe1xuICAgICAgICByZXR1cm4gdGhpcy5vbiggbywgZiApO1xuICAgIH07XG59KTtcbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBpLCBtZXRob2QgKSB7XG4gICAgalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuICAgICAgICBpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcbiAgICAgICAgICAgIGNhbGxiYWNrID0gZGF0YTtcbiAgICAgICAgICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpRdWVyeS5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6IG1ldGhvZCxcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGNhbGxiYWNrLFxuICAgICAgICAgICAgZGF0YVR5cGU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xualF1ZXJ5LmV4dGVuZCh7XG4gICAgZ2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuICAgIH0sXG4gICAgZ2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuICAgIH0sXG4gICAgYWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcbiAgICAgICAgaWYgKCBzZXR0aW5ncyApIHtcbiAgICAgICAgICAgIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0dGluZ3MgPSB0YXJnZXQ7XG4gICAgICAgICAgICB0YXJnZXQgPSBqUXVlcnkuYWpheFNldHRpbmdzO1xuICAgICAgICB9XG4gICAgICAgIGFqYXhFeHRlbmQoIHRhcmdldCwgc2V0dGluZ3MgKTtcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9LFxuICAgIGFqYXhTZXR0aW5nczoge1xuICAgICAgICB1cmw6IGFqYXhMb2NhdGlvbixcbiAgICAgICAgaXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggYWpheExvY1BhcnRzWyAxIF0gKSxcbiAgICAgICAgZ2xvYmFsOiB0cnVlLFxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICBjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcbiAgICAgICAgcHJvY2Vzc0RhdGE6IHRydWUsXG4gICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICBhY2NlcHRzOiB7XG4gICAgICAgICAgICB4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuICAgICAgICAgICAgaHRtbDogXCJ0ZXh0L2h0bWxcIixcbiAgICAgICAgICAgIHRleHQ6IFwidGV4dC9wbGFpblwiLFxuICAgICAgICAgICAganNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIixcbiAgICAgICAgICAgIFwiKlwiOiBhbGxUeXBlc1xuICAgICAgICB9LFxuICAgICAgICBjb250ZW50czoge1xuICAgICAgICAgICAgeG1sOiAveG1sLyxcbiAgICAgICAgICAgIGh0bWw6IC9odG1sLyxcbiAgICAgICAgICAgIGpzb246IC9qc29uL1xuICAgICAgICB9LFxuICAgICAgICByZXNwb25zZUZpZWxkczoge1xuICAgICAgICAgICAgeG1sOiBcInJlc3BvbnNlWE1MXCIsXG4gICAgICAgICAgICB0ZXh0OiBcInJlc3BvbnNlVGV4dFwiXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnZlcnRlcnM6IHtcbiAgICAgICAgICAgIFwiKiB0ZXh0XCI6IHdpbmRvdy5TdHJpbmcsXG4gICAgICAgICAgICBcInRleHQgaHRtbFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJ0ZXh0IGpzb25cIjogalF1ZXJ5LnBhcnNlSlNPTixcbiAgICAgICAgICAgIFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG4gICAgICAgIH0sXG4gICAgICAgIGZsYXRPcHRpb25zOiB7XG4gICAgICAgICAgICBjb250ZXh0OiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB0cnVlXG4gICAgICAgIH1cbiAgICB9LFxuICAgIGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuICAgIGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuICAgIGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG4gICAgICAgIGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB1cmw7XG4gICAgICAgICAgICB1cmwgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICAgIHZhclxuICAgICAgICAgICAgcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG4gICAgICAgICAgICBjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcbiAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dCA9IGNhbGxiYWNrQ29udGV4dCAhPT0gcyAmJlxuICAgICAgICAgICAgICAgICggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID9cbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOiBqUXVlcnkuZXZlbnQsXG4gICAgICAgICAgICBkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuICAgICAgICAgICAgY29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcbiAgICAgICAgICAgIGlmTW9kaWZpZWRLZXksXG4gICAgICAgICAgICByZXF1ZXN0SGVhZGVycyA9IHt9LFxuICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgICAgdHJhbnNwb3J0LFxuICAgICAgICAgICAgdGltZW91dFRpbWVyLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBzdGF0ZSA9IDAsXG4gICAgICAgICAgICBmaXJlR2xvYmFscyxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBqcVhIUiA9IHtcbiAgICAgICAgICAgICAgICByZWFkeVN0YXRlOiAwLFxuICAgICAgICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCAhc3RhdGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIGxuYW1lIF0gfHwgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXRlID09PSAyICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpIF0gPSBtYXRjaFsgMiBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG1hdGNoO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXRlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcy5taW1lVHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBzdGF0dXNUZXh0IHx8IFwiYWJvcnRcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0cmFuc3BvcnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuYWJvcnQoIHN0YXR1c1RleHQgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkb25lKCAwLCBzdGF0dXNUZXh0ICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuICAgICAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZSA9IDI7XG4gICAgICAgICAgICBpZiAoIHRpbWVvdXRUaW1lciApIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuICAgICAgICAgICAganFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcbiAgICAgICAgICAgIHZhciBpc1N1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgc3VjY2VzcyxcbiAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dCxcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlcyA/IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICAgICAgZXRhZztcbiAgICAgICAgICAgIGlmICggc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBzLmlmTW9kaWZpZWQgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggKCBsYXN0TW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKSApICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgaWZNb2RpZmllZEtleSBdID0gbGFzdE1vZGlmaWVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICggKCBldGFnID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiRXRhZ1wiICkgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gPSBldGFnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG4gICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQgPSBcInN1Y2Nlc3NcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IFwicGFyc2VyZXJyb3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBzdGF0dXNUZXh0O1xuICAgICAgICAgICAgICAgIGlmICggIXN0YXR1c1RleHQgfHwgc3RhdHVzICkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXR1cyA8IDAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAganFYSFIuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAganFYSFIuc3RhdHVzVGV4dCA9IFwiXCIgKyAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApO1xuICAgICAgICAgICAgaWYgKCBpc1N1Y2Nlc3MgKSB7XG4gICAgICAgICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAganFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuICAgICAgICAgICAgc3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmICggZmlyZUdsb2JhbHMgKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFwiICsgKCBpc1N1Y2Nlc3MgPyBcIlN1Y2Nlc3NcIiA6IFwiRXJyb3JcIiApLFxuICAgICAgICAgICAgICAgICAgICAgICAgWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG4gICAgICAgICAgICBpZiAoIGZpcmVHbG9iYWxzICkge1xuICAgICAgICAgICAgICAgIGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcbiAgICAgICAgICAgICAgICBpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG4gICAgICAgIGpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lO1xuICAgICAgICBqcVhIUi5lcnJvciA9IGpxWEhSLmZhaWw7XG4gICAgICAgIGpxWEhSLmNvbXBsZXRlID0gY29tcGxldGVEZWZlcnJlZC5hZGQ7XG4gICAgICAgIGpxWEhSLnN0YXR1c0NvZGUgPSBmdW5jdGlvbiggbWFwICkge1xuICAgICAgICAgICAgaWYgKCBtYXAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRtcDtcbiAgICAgICAgICAgICAgICBpZiAoIHN0YXRlIDwgMiApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICggdG1wIGluIG1hcCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0NvZGVbIHRtcCBdID0gWyBzdGF0dXNDb2RlW3RtcF0sIG1hcFt0bXBdIF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSBtYXBbIGpxWEhSLnN0YXR1cyBdO1xuICAgICAgICAgICAgICAgICAgICBqcVhIUi50aGVuKCB0bXAsIHRtcCApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgICAgICBzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgKSArIFwiXCIgKS5yZXBsYWNlKCByaGFzaCwgXCJcIiApLnJlcGxhY2UoIHJwcm90b2NvbCwgYWpheExvY1BhcnRzWyAxIF0gKyBcIi8vXCIgKTtcbiAgICAgICAgcy5kYXRhVHlwZXMgPSBqUXVlcnkudHJpbSggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkuc3BsaXQoIHJzcGFjZXNBamF4ICk7XG4gICAgICAgIGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuICAgICAgICAgICAgcGFydHMgPSBydXJsLmV4ZWMoIHMudXJsLnRvTG93ZXJDYXNlKCkgKTtcbiAgICAgICAgICAgIHMuY3Jvc3NEb21haW4gPSAhISggcGFydHMgJiZcbiAgICAgICAgICAgICAgICAoIHBhcnRzWyAxIF0gIT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIgXSAhPSBhamF4TG9jUGFydHNbIDIgXSB8fFxuICAgICAgICAgICAgICAgICAgICAoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSBcImh0dHA6XCIgPyA4MCA6IDQ0MyApICkgIT1cbiAgICAgICAgICAgICAgICAgICAgICAgICggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gXCJodHRwOlwiID8gODAgOiA0NDMgKSApIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuICAgICAgICAgICAgcy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcbiAgICAgICAgaWYgKCBzdGF0ZSA9PT0gMiApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmaXJlR2xvYmFscyA9IHMuZ2xvYmFsO1xuICAgICAgICBzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG4gICAgICAgIGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuICAgICAgICAgICAgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG4gICAgICAgICAgICBpZiAoIHMuZGF0YSApIHtcbiAgICAgICAgICAgICAgICBzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZk1vZGlmaWVkS2V5ID0gcy51cmw7XG4gICAgICAgICAgICBpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuICAgICAgICAgICAgICAgIHZhciB0cyA9IGpRdWVyeS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gcy51cmwucmVwbGFjZSggcnRzLCBcIiQxXz1cIiArIHRzICk7XG4gICAgICAgICAgICAgICAgcy51cmwgPSByZXQgKyAoICggcmV0ID09PSBzLnVybCApID8gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArIHRzIDogXCJcIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuICAgICAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuICAgICAgICB9XG4gICAgICAgIGlmICggcy5pZk1vZGlmaWVkICkge1xuICAgICAgICAgICAgaWZNb2RpZmllZEtleSA9IGlmTW9kaWZpZWRLZXkgfHwgcy51cmw7XG4gICAgICAgICAgICBpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApIHtcbiAgICAgICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICkge1xuICAgICAgICAgICAgICAgIGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgaWZNb2RpZmllZEtleSBdICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAganFYSFIuc2V0UmVxdWVzdEhlYWRlcihcbiAgICAgICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgICAgICBzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSA/XG4gICAgICAgICAgICAgICAgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1swXSBdICsgKCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcbiAgICAgICAgICAgICAgICBzLmFjY2VwdHNbIFwiKlwiIF1cbiAgICAgICAgKTtcbiAgICAgICAgZm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG4gICAgICAgICAgICBqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuICAgICAgICB9XG4gICAgICAgIGlmICggcy5iZWZvcmVTZW5kICYmICggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgc3RhdGUgPT09IDIgKSApIHtcbiAgICAgICAgICAgICAgICBqcVhIUi5hYm9ydCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKCBpIGluIHsgc3VjY2VzczogMSwgZXJyb3I6IDEsIGNvbXBsZXRlOiAxIH0gKSB7XG4gICAgICAgICAgICBqcVhIUlsgaSBdKCBzWyBpIF0gKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcbiAgICAgICAgaWYgKCAhdHJhbnNwb3J0ICkge1xuICAgICAgICAgICAgZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuICAgICAgICAgICAgaWYgKCBmaXJlR2xvYmFscyApIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuICAgICAgICAgICAgICAgIHRpbWVvdXRUaW1lciA9IHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgIGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuICAgICAgICAgICAgICAgIH0sIHMudGltZW91dCApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IDE7XG4gICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBzdGF0ZSA8IDIgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoIC0xLCBlICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpxWEhSO1xuICAgIH0sXG4gICAgcGFyYW06IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcbiAgICAgICAgdmFyIHMgPSBbXSxcbiAgICAgICAgICAgIGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0galF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgPyB2YWx1ZSgpIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgc1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIGlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgIHRyYWRpdGlvbmFsID0galF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGpRdWVyeS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuICAgICAgICAgICAgalF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoIHZhciBwcmVmaXggaW4gYSApIHtcbiAgICAgICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzLmpvaW4oIFwiJlwiICkucmVwbGFjZSggcjIwLCBcIitcIiApO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIG9iaiApICkge1xuICAgICAgICBqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcbiAgICAgICAgICAgIGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG4gICAgICAgICAgICAgICAgYWRkKCBwcmVmaXgsIHYgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiA/IGkgOiBcIlwiICkgKyBcIl1cIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgalF1ZXJ5LnR5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuICAgICAgICBmb3IgKCB2YXIgbmFtZSBpbiBvYmogKSB7XG4gICAgICAgICAgICBidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBhZGQoIHByZWZpeCwgb2JqICk7XG4gICAgfVxufVxuXG5qUXVlcnkuZXh0ZW5kKHtcbiAgICBhY3RpdmU6IDAsXG4gICAgbGFzdE1vZGlmaWVkOiB7fSxcbiAgICBldGFnOiB7fVxufSk7XG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuICAgIHZhciBjb250ZW50cyA9IHMuY29udGVudHMsXG4gICAgICAgIGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLFxuICAgICAgICByZXNwb25zZUZpZWxkcyA9IHMucmVzcG9uc2VGaWVsZHMsXG4gICAgICAgIGN0LFxuICAgICAgICB0eXBlLFxuICAgICAgICBmaW5hbERhdGFUeXBlLFxuICAgICAgICBmaXJzdERhdGFUeXBlO1xuICAgIGZvciAoIHR5cGUgaW4gcmVzcG9uc2VGaWVsZHMgKSB7XG4gICAgICAgIGlmICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG4gICAgICAgICAgICBqcVhIUlsgcmVzcG9uc2VGaWVsZHNbdHlwZV0gXSA9IHJlc3BvbnNlc1sgdHlwZSBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdoaWxlKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG4gICAgICAgIGRhdGFUeXBlcy5zaGlmdCgpO1xuICAgICAgICBpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICBjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiY29udGVudC10eXBlXCIgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIGN0ICkge1xuICAgICAgICBmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuICAgICAgICAgICAgaWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcbiAgICAgICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuICAgICAgICBmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG4gICAgICAgICAgICBpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1swXSBdICkge1xuICAgICAgICAgICAgICAgIGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCAhZmlyc3REYXRhVHlwZSApIHtcbiAgICAgICAgICAgICAgICBmaXJzdERhdGFUeXBlID0gdHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuICAgIH1cbiAgICBpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG4gICAgICAgIGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG4gICAgICAgICAgICBkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHtcbiAgICBpZiAoIHMuZGF0YUZpbHRlciApIHtcbiAgICAgICAgcmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG4gICAgfVxuICAgIHZhciBkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcyxcbiAgICAgICAgY29udmVydGVycyA9IHt9LFxuICAgICAgICBpLFxuICAgICAgICBrZXksXG4gICAgICAgIGxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGgsXG4gICAgICAgIHRtcCxcbiAgICAgICAgY3VycmVudCA9IGRhdGFUeXBlc1sgMCBdLFxuICAgICAgICBwcmV2LFxuICAgICAgICBjb252ZXJzaW9uLFxuICAgICAgICBjb252LFxuICAgICAgICBjb252MSxcbiAgICAgICAgY29udjI7XG4gICAgZm9yICggaSA9IDE7IGkgPCBsZW5ndGg7IGkrKyApIHtcbiAgICAgICAgaWYgKCBpID09PSAxICkge1xuICAgICAgICAgICAgZm9yICgga2V5IGluIHMuY29udmVydGVycyApIHtcbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGtleSBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcmV2ID0gY3VycmVudDtcbiAgICAgICAgY3VycmVudCA9IGRhdGFUeXBlc1sgaSBdO1xuICAgICAgICBpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuICAgICAgICAgICAgY3VycmVudCA9IHByZXY7XG4gICAgICAgIH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG4gICAgICAgICAgICBjb252ZXJzaW9uID0gcHJldiArIFwiIFwiICsgY3VycmVudDtcbiAgICAgICAgICAgIGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252ZXJzaW9uIF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuICAgICAgICAgICAgaWYgKCAhY29udiApIHtcbiAgICAgICAgICAgICAgICBjb252MiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3IgKCBjb252MSBpbiBjb252ZXJ0ZXJzICkge1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSBjb252MS5zcGxpdCggXCIgXCIgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0bXBbIDAgXSA9PT0gcHJldiB8fCB0bXBbIDAgXSA9PT0gXCIqXCIgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252MiA9IGNvbnZlcnRlcnNbIHRtcFsxXSArIFwiIFwiICsgY3VycmVudCBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252MiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252MSA9IGNvbnZlcnRlcnNbIGNvbnYxIF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBjb252MSA9PT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udiA9IGNvbnYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIGNvbnYyID09PSB0cnVlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ID0gY29udjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCAhKCBjb252IHx8IGNvbnYyICkgKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5LmVycm9yKCBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIGNvbnZlcnNpb24ucmVwbGFjZShcIiBcIixcIiB0byBcIikgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggY29udiAhPT0gdHJ1ZSApIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGNvbnYgPyBjb252KCByZXNwb25zZSApIDogY29udjIoIGNvbnYxKHJlc3BvbnNlKSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbn1cblxudmFyIGpzYyA9IGpRdWVyeS5ub3coKSxcbiAgICBqc3JlID0gLyhcXD0pXFw/KCZ8JCl8XFw/XFw/L2k7XG5qUXVlcnkuYWpheFNldHVwKHtcbiAgICBqc29ucDogXCJjYWxsYmFja1wiLFxuICAgIGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4galF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICgganNjKysgKTtcbiAgICB9XG59KTtcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuICAgIHZhciBpbnNwZWN0RGF0YSA9ICggdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICYmIC9eYXBwbGljYXRpb25cXC94XFwtd3d3XFwtZm9ybVxcLXVybGVuY29kZWQvLnRlc3QoIHMuY29udGVudFR5cGUgKTtcbiAgICBpZiAoIHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiB8fFxuICAgICAgICBzLmpzb25wICE9PSBmYWxzZSAmJiAoIGpzcmUudGVzdCggcy51cmwgKSB8fFxuICAgICAgICAgICAgICAgIGluc3BlY3REYXRhICYmIGpzcmUudGVzdCggcy5kYXRhICkgKSApIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlQ29udGFpbmVyLFxuICAgICAgICAgICAganNvbnBDYWxsYmFjayA9IHMuanNvbnBDYWxsYmFjayA9XG4gICAgICAgICAgICAgICAgalF1ZXJ5LmlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID8gcy5qc29ucENhbGxiYWNrKCkgOiBzLmpzb25wQ2FsbGJhY2ssXG4gICAgICAgICAgICBwcmV2aW91cyA9IHdpbmRvd1sganNvbnBDYWxsYmFjayBdLFxuICAgICAgICAgICAgdXJsID0gcy51cmwsXG4gICAgICAgICAgICBkYXRhID0gcy5kYXRhLFxuICAgICAgICAgICAgcmVwbGFjZSA9IFwiJDFcIiArIGpzb25wQ2FsbGJhY2sgKyBcIiQyXCI7XG4gICAgICAgIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgganNyZSwgcmVwbGFjZSApO1xuICAgICAgICAgICAgaWYgKCBzLnVybCA9PT0gdXJsICkge1xuICAgICAgICAgICAgICAgIGlmICggaW5zcGVjdERhdGEgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoIGpzcmUsIHJlcGxhY2UgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBzLmRhdGEgPT09IGRhdGEgKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCArPSAoL1xcPy8udGVzdCggdXJsICkgPyBcIiZcIiA6IFwiP1wiKSArIHMuanNvbnAgKyBcIj1cIiArIGpzb25wQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHMudXJsID0gdXJsO1xuICAgICAgICBzLmRhdGEgPSBkYXRhO1xuICAgICAgICB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSA9IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcbiAgICAgICAgICAgIHJlc3BvbnNlQ29udGFpbmVyID0gWyByZXNwb25zZSBdO1xuICAgICAgICB9O1xuICAgICAgICBqcVhIUi5hbHdheXMoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSA9IHByZXZpb3VzO1xuICAgICAgICAgICAgaWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcHJldmlvdXMgKSApIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dbIGpzb25wQ2FsbGJhY2sgXSggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcy5jb252ZXJ0ZXJzW1wic2NyaXB0IGpzb25cIl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5lcnJvcigganNvbnBDYWxsYmFjayArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuICAgICAgICB9O1xuICAgICAgICBzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG4gICAgICAgIHJldHVybiBcInNjcmlwdFwiO1xuICAgIH1cbn0pO1xualF1ZXJ5LmFqYXhTZXR1cCh7XG4gICAgYWNjZXB0czoge1xuICAgICAgICBzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuICAgIH0sXG4gICAgY29udGVudHM6IHtcbiAgICAgICAgc2NyaXB0OiAvamF2YXNjcmlwdHxlY21hc2NyaXB0L1xuICAgIH0sXG4gICAgY29udmVydGVyczoge1xuICAgICAgICBcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuICAgICAgICAgICAgalF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgfVxufSk7XG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG4gICAgaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgIHMuY2FjaGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCBzLmNyb3NzRG9tYWluICkge1xuICAgICAgICBzLnR5cGUgPSBcIkdFVFwiO1xuICAgICAgICBzLmdsb2JhbCA9IGZhbHNlO1xuICAgIH1cbn0pO1xualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG4gICAgICAgIHZhciBzY3JpcHQsXG4gICAgICAgICAgICBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJoZWFkXCIgKVswXSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZW5kOiBmdW5jdGlvbiggXywgY2FsbGJhY2sgKSB7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9IFwiYXN5bmNcIjtcbiAgICAgICAgICAgICAgICBpZiAoIHMuc2NyaXB0Q2hhcnNldCApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzLnVybDtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoIHNjcmlwdC5yZWFkeVN0YXRlICkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhlYWQgJiYgc2NyaXB0LnBhcmVudE5vZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCAyMDAsIFwic3VjY2Vzc1wiICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQuZmlyc3RDaGlsZCApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFib3J0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoIHNjcmlwdCApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCggMCwgMSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59KTtcbnZhclxuICAgIHhock9uVW5sb2FkQWJvcnQgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/IGZ1bmN0aW9uKCkge1xuICAgICAgICBmb3IgKCB2YXIga2V5IGluIHhockNhbGxiYWNrcyApIHtcbiAgICAgICAgICAgIHhockNhbGxiYWNrc1sga2V5IF0oIDAsIDEgKTtcbiAgICAgICAgfVxuICAgIH0gOiBmYWxzZSxcbiAgICB4aHJJZCA9IDAsXG4gICAgeGhyQ2FsbGJhY2tzO1xuZnVuY3Rpb24gY3JlYXRlU3RhbmRhcmRYSFIoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB9IGNhdGNoKCBlICkge31cbn1cblxuZnVuY3Rpb24gY3JlYXRlQWN0aXZlWEhSKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoIFwiTWljcm9zb2Z0LlhNTEhUVFBcIiApO1xuICAgIH0gY2F0Y2goIGUgKSB7fVxufVxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID9cbiAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzTG9jYWwgJiYgY3JlYXRlU3RhbmRhcmRYSFIoKSB8fCBjcmVhdGVBY3RpdmVYSFIoKTtcbiAgICB9IDpcbiAgICBjcmVhdGVTdGFuZGFyZFhIUjtcbihmdW5jdGlvbiggeGhyICkge1xuICAgIGpRdWVyeS5leHRlbmQoIGpRdWVyeS5zdXBwb3J0LCB7XG4gICAgICAgIGFqYXg6ICEheGhyLFxuICAgICAgICBjb3JzOiAhIXhociAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyIClcbiAgICB9KTtcbn0pKCBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpICk7XG5pZiAoIGpRdWVyeS5zdXBwb3J0LmFqYXggKSB7XG4gICAgalF1ZXJ5LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oIHMgKSB7XG4gICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gfHwgalF1ZXJ5LnN1cHBvcnQuY29ycyApIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjaztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgeGhyID0gcy54aHIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggcy51c2VybmFtZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKCBzLnR5cGUsIHMudXJsLCBzLmFzeW5jLCBzLnVzZXJuYW1lLCBzLnBhc3N3b3JkICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIub3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3luYyApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICggcy54aHJGaWVsZHMgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCBpIGluIHMueGhyRmllbGRzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoclsgaSBdID0gcy54aHJGaWVsZHNbIGkgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIHMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSggcy5taW1lVHlwZSApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggaSBpbiBoZWFkZXJzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggXyApIHt9XG4gICAgICAgICAgICAgICAgICAgIHhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24oIF8sIGlzQWJvcnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgJiYgKCBpc0Fib3J0IHx8IHhoci5yZWFkeVN0YXRlID09PSA0ICkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGhhbmRsZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBqUXVlcnkubm9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggeGhyT25VbmxvYWRBYm9ydCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlzQWJvcnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhoci5yZWFkeVN0YXRlICE9PSA0ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0geGhyLnN0YXR1cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSGVhZGVycyA9IHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sID0geGhyLnJlc3BvbnNlWE1MO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB4bWwgJiYgeG1sLmRvY3VtZW50RWxlbWVudCAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLnhtbCA9IHhtbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggXyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIXN0YXR1cyAmJiBzLmlzTG9jYWwgJiYgIXMuY3Jvc3NEb21haW4gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmVzcG9uc2VzLnRleHQgPyAyMDAgOiA0MDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEyMjMgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMjA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCggZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFpc0Fib3J0ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggLTEsIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHJlc3BvbnNlcyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSggc3RhdHVzLCBzdGF0dXNUZXh0LCByZXNwb25zZXMsIHJlc3BvbnNlSGVhZGVycyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoICFzLmFzeW5jIHx8IHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZSA9ICsreGhySWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAheGhyQ2FsbGJhY2tzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJDYWxsYmFja3MgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCB3aW5kb3cgKS51bmxvYWQoIHhock9uVW5sb2FkQWJvcnQgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyQ2FsbGJhY2tzWyBoYW5kbGUgXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhYm9ydDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY2FsbGJhY2sgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygwLDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG52YXIgZWxlbWRpc3BsYXkgPSB7fSxcbiAgICBpZnJhbWUsIGlmcmFtZURvYyxcbiAgICByZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcbiAgICByZnhudW0gPSAvXihbK1xcLV09KT8oW1xcZCsuXFwtXSspKFthLXolXSopJC9pLFxuICAgIHRpbWVySWQsXG4gICAgZnhBdHRycyA9IFtcbiAgICAgICAgWyBcImhlaWdodFwiLCBcIm1hcmdpblRvcFwiLCBcIm1hcmdpbkJvdHRvbVwiLCBcInBhZGRpbmdUb3BcIiwgXCJwYWRkaW5nQm90dG9tXCIgXSxcbiAgICAgICAgWyBcIndpZHRoXCIsIFwibWFyZ2luTGVmdFwiLCBcIm1hcmdpblJpZ2h0XCIsIFwicGFkZGluZ0xlZnRcIiwgXCJwYWRkaW5nUmlnaHRcIiBdLFxuICAgICAgICBbIFwib3BhY2l0eVwiIF1cbiAgICBdLFxuICAgIGZ4Tm93O1xualF1ZXJ5LmZuLmV4dGVuZCh7XG4gICAgc2hvdzogZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuICAgICAgICB2YXIgZWxlbSwgZGlzcGxheTtcbiAgICAgICAgaWYgKCBzcGVlZCB8fCBzcGVlZCA9PT0gMCApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KFwic2hvd1wiLCAzKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoIHZhciBpID0gMCwgaiA9IHRoaXMubGVuZ3RoOyBpIDwgajsgaSsrICkge1xuICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzWyBpIF07XG4gICAgICAgICAgICAgICAgaWYgKCBlbGVtLnN0eWxlICkge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuX2RhdGEoZWxlbSwgXCJvbGRkaXNwbGF5XCIpICYmIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCAoZGlzcGxheSA9PT0gXCJcIiAmJiBqUXVlcnkuY3NzKGVsZW0sIFwiZGlzcGxheVwiKSA9PT0gXCJub25lXCIpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhalF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBlbGVtICkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuX2RhdGEoIGVsZW0sIFwib2xkZGlzcGxheVwiLCBkZWZhdWx0RGlzcGxheShlbGVtLm5vZGVOYW1lKSApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBqOyBpKysgKSB7XG4gICAgICAgICAgICAgICAgZWxlbSA9IHRoaXNbIGkgXTtcbiAgICAgICAgICAgICAgICBpZiAoIGVsZW0uc3R5bGUgKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSA9PT0gXCJcIiB8fCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgXCJvbGRkaXNwbGF5XCIgKSB8fCBcIlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGhpZGU6IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcbiAgICAgICAgaWYgKCBzcGVlZCB8fCBzcGVlZCA9PT0gMCApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGUoIGdlbkZ4KFwiaGlkZVwiLCAzKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGVsZW0sIGRpc3BsYXksXG4gICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgaiA9IHRoaXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICggOyBpIDwgajsgaSsrICkge1xuICAgICAgICAgICAgICAgIGVsZW0gPSB0aGlzW2ldO1xuICAgICAgICAgICAgICAgIGlmICggZWxlbS5zdHlsZSApIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgJiYgIWpRdWVyeS5fZGF0YSggZWxlbSwgXCJvbGRkaXNwbGF5XCIgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggZWxlbSwgXCJvbGRkaXNwbGF5XCIsIGRpc3BsYXkgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgajsgaSsrICkge1xuICAgICAgICAgICAgICAgIGlmICggdGhpc1tpXS5zdHlsZSApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIF90b2dnbGU6IGpRdWVyeS5mbi50b2dnbGUsXG4gICAgdG9nZ2xlOiBmdW5jdGlvbiggZm4sIGZuMiwgY2FsbGJhY2sgKSB7XG4gICAgICAgIHZhciBib29sID0gdHlwZW9mIGZuID09PSBcImJvb2xlYW5cIjtcbiAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbihmbikgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oZm4yKSApIHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG4gICAgICAgIH0gZWxzZSBpZiAoIGZuID09IG51bGwgfHwgYm9vbCApIHtcbiAgICAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBib29sID8gZm4gOiBqUXVlcnkodGhpcykuaXMoXCI6aGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgIGpRdWVyeSh0aGlzKVsgc3RhdGUgPyBcInNob3dcIiA6IFwiaGlkZVwiIF0oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbmltYXRlKGdlbkZ4KFwidG9nZ2xlXCIsIDMpLCBmbiwgZm4yLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcihcIjpoaWRkZW5cIikuY3NzKFwib3BhY2l0eVwiLCAwKS5zaG93KCkuZW5kKClcbiAgICAgICAgICAgICAgICAgICAgLmFuaW1hdGUoe29wYWNpdHk6IHRvfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2spO1xuICAgIH0sXG4gICAgYW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuICAgICAgICB2YXIgb3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuICAgICAgICBpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICkgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCBvcHRhbGwuY29tcGxldGUsIFsgZmFsc2UgXSApO1xuICAgICAgICB9XG4gICAgICAgIHByb3AgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApO1xuICAgICAgICBmdW5jdGlvbiBkb0FuaW1hdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggb3B0YWxsLnF1ZXVlID09PSBmYWxzZSApIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkuX21hcmsoIHRoaXMgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBvcHQgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0YWxsICksXG4gICAgICAgICAgICAgICAgaXNFbGVtZW50ID0gdGhpcy5ub2RlVHlwZSA9PT0gMSxcbiAgICAgICAgICAgICAgICBoaWRkZW4gPSBpc0VsZW1lbnQgJiYgalF1ZXJ5KHRoaXMpLmlzKFwiOmhpZGRlblwiKSxcbiAgICAgICAgICAgICAgICBuYW1lLCB2YWwsIHAsIGUsIGhvb2tzLCByZXBsYWNlLFxuICAgICAgICAgICAgICAgIHBhcnRzLCBzdGFydCwgZW5kLCB1bml0LFxuICAgICAgICAgICAgICAgIG1ldGhvZDtcbiAgICAgICAgICAgIG9wdC5hbmltYXRlZFByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgIGZvciAoIHAgaW4gcHJvcCApIHtcbiAgICAgICAgICAgICAgICBuYW1lID0galF1ZXJ5LmNhbWVsQ2FzZSggcCApO1xuICAgICAgICAgICAgICAgIGlmICggcCAhPT0gbmFtZSApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcFsgbmFtZSBdID0gcHJvcFsgcCBdO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcFsgcCBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoICggaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSApICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgPSBob29rcy5leHBhbmQoIHByb3BbIG5hbWUgXSApO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcHJvcFsgbmFtZSBdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKCBwIGluIHJlcGxhY2UgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEgKCBwIGluIHByb3AgKSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wWyBwIF0gPSByZXBsYWNlWyBwIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKCBuYW1lIGluIHByb3AgKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gcHJvcFsgbmFtZSBdO1xuICAgICAgICAgICAgICAgIGlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbCApICkge1xuICAgICAgICAgICAgICAgICAgICBvcHQuYW5pbWF0ZWRQcm9wZXJ0aWVzWyBuYW1lIF0gPSB2YWxbIDEgXTtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gcHJvcFsgbmFtZSBdID0gdmFsWyAwIF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0LmFuaW1hdGVkUHJvcGVydGllc1sgbmFtZSBdID0gb3B0LnNwZWNpYWxFYXNpbmcgJiYgb3B0LnNwZWNpYWxFYXNpbmdbIG5hbWUgXSB8fCBvcHQuZWFzaW5nIHx8ICdzd2luZyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICggdmFsID09PSBcImhpZGVcIiAmJiBoaWRkZW4gfHwgdmFsID09PSBcInNob3dcIiAmJiAhaGlkZGVuICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0LmNvbXBsZXRlLmNhbGwoIHRoaXMgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBpc0VsZW1lbnQgJiYgKCBuYW1lID09PSBcImhlaWdodFwiIHx8IG5hbWUgPT09IFwid2lkdGhcIiApICkge1xuICAgICAgICAgICAgICAgICAgICBvcHQub3ZlcmZsb3cgPSBbIHRoaXMuc3R5bGUub3ZlcmZsb3csIHRoaXMuc3R5bGUub3ZlcmZsb3dYLCB0aGlzLnN0eWxlLm92ZXJmbG93WSBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGpRdWVyeS5jc3MoIHRoaXMsIFwiZGlzcGxheVwiICkgPT09IFwiaW5saW5lXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuY3NzKCB0aGlzLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFqUXVlcnkuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0IHx8IGRlZmF1bHREaXNwbGF5KCB0aGlzLm5vZGVOYW1lICkgPT09IFwiaW5saW5lXCIgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZS56b29tID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggb3B0Lm92ZXJmbG93ICE9IG51bGwgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKCBwIGluIHByb3AgKSB7XG4gICAgICAgICAgICAgICAgZSA9IG5ldyBqUXVlcnkuZngoIHRoaXMsIG9wdCwgcCApO1xuICAgICAgICAgICAgICAgIHZhbCA9IHByb3BbIHAgXTtcbiAgICAgICAgICAgICAgICBpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbCApICkge1xuICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBqUXVlcnkuX2RhdGEoIHRoaXMsIFwidG9nZ2xlXCIgKyBwICkgfHwgKCB2YWwgPT09IFwidG9nZ2xlXCIgPyBoaWRkZW4gPyBcInNob3dcIiA6IFwiaGlkZVwiIDogMCApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIG1ldGhvZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5fZGF0YSggdGhpcywgXCJ0b2dnbGVcIiArIHAsIG1ldGhvZCA9PT0gXCJzaG93XCIgPyBcImhpZGVcIiA6IFwic2hvd1wiICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlWyBtZXRob2QgXSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZVsgdmFsIF0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcmZ4bnVtLmV4ZWMoIHZhbCApO1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IGUuY3VyKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggcGFydHMgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBwYXJzZUZsb2F0KCBwYXJ0c1syXSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCA9IHBhcnRzWzNdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcCBdID8gXCJcIiA6IFwicHhcIiApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB1bml0ICE9PSBcInB4XCIgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCB0aGlzLCBwLCAoZW5kIHx8IDEpICsgdW5pdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAoIChlbmQgfHwgMSkgLyBlLmN1cigpICkgKiBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3R5bGUoIHRoaXMsIHAsIHN0YXJ0ICsgdW5pdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHBhcnRzWzFdICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9ICggKHBhcnRzWyAxIF0gPT09IFwiLT1cIiA/IC0xIDogMSkgKiBlbmQgKSArIHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5jdXN0b20oIHN0YXJ0LCBlbmQsIHVuaXQgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuY3VzdG9tKCBzdGFydCwgdmFsLCBcIlwiICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG4gICAgICAgICAgICB0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuICAgICAgICAgICAgdGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG4gICAgICAgIGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG4gICAgICAgICAgICBnb3RvRW5kID0gY2xlYXJRdWV1ZTtcbiAgICAgICAgICAgIGNsZWFyUXVldWUgPSB0eXBlO1xuICAgICAgICAgICAgdHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGNsZWFyUXVldWUgJiYgdHlwZSAhPT0gZmFsc2UgKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGluZGV4LFxuICAgICAgICAgICAgICAgIGhhZFRpbWVycyA9IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG4gICAgICAgICAgICAgICAgZGF0YSA9IGpRdWVyeS5fZGF0YSggdGhpcyApO1xuICAgICAgICAgICAgaWYgKCAhZ290b0VuZCApIHtcbiAgICAgICAgICAgICAgICBqUXVlcnkuX3VubWFyayggdHJ1ZSwgdGhpcyApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gc3RvcFF1ZXVlKCBlbGVtLCBkYXRhLCBpbmRleCApIHtcbiAgICAgICAgICAgICAgICB2YXIgaG9va3MgPSBkYXRhWyBpbmRleCBdO1xuICAgICAgICAgICAgICAgIGpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCBpbmRleCwgdHJ1ZSApO1xuICAgICAgICAgICAgICAgIGhvb2tzLnN0b3AoIGdvdG9FbmQgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICggdHlwZSA9PSBudWxsICkge1xuICAgICAgICAgICAgICAgIGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgaW5kZXguaW5kZXhPZihcIi5ydW5cIikgPT09IGluZGV4Lmxlbmd0aCAtIDQgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wUXVldWUoIHRoaXMsIGRhdGEsIGluZGV4ICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBkYXRhWyBpbmRleCA9IHR5cGUgKyBcIi5ydW5cIiBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApe1xuICAgICAgICAgICAgICAgIHN0b3BRdWV1ZSggdGhpcywgZGF0YSwgaW5kZXggKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiAodHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggZ290b0VuZCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyc1sgaW5kZXggXSggdHJ1ZSApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJzWyBpbmRleCBdLnNhdmVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhhZFRpbWVycyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCAhKCBnb3RvRW5kICYmIGhhZFRpbWVycyApICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG4gICAgc2V0VGltZW91dCggY2xlYXJGeE5vdywgMCApO1xuICAgIHJldHVybiAoIGZ4Tm93ID0galF1ZXJ5Lm5vdygpICk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyRnhOb3coKSB7XG4gICAgZnhOb3cgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBudW0gKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuICAgIGpRdWVyeS5lYWNoKCBmeEF0dHJzLmNvbmNhdC5hcHBseShbXSwgZnhBdHRycy5zbGljZSggMCwgbnVtICkpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgb2JqWyB0aGlzIF0gPSB0eXBlO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG59XG5cbmpRdWVyeS5lYWNoKHtcbiAgICBzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiwgMSApLFxuICAgIHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiwgMSApLFxuICAgIHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiwgMSApLFxuICAgIGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuICAgIGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcbiAgICBmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuICAgIGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcbiAgICB9O1xufSk7XG5qUXVlcnkuZXh0ZW5kKHtcbiAgICBzcGVlZDogZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuICAgICAgICB2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG4gICAgICAgICAgICBjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuICAgICAgICAgICAgICAgIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuICAgICAgICAgICAgZHVyYXRpb246IHNwZWVkLFxuICAgICAgICAgICAgZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFqUXVlcnkuaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG4gICAgICAgIH07XG4gICAgICAgIG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5vZmYgPyAwIDogdHlwZW9mIG9wdC5kdXJhdGlvbiA9PT0gXCJudW1iZXJcIiA/IG9wdC5kdXJhdGlvbiA6XG4gICAgICAgICAgICBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyA/IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdIDogalF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcbiAgICAgICAgaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG4gICAgICAgICAgICBvcHQucXVldWUgPSBcImZ4XCI7XG4gICAgICAgIH1cbiAgICAgICAgb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcbiAgICAgICAgb3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oIG5vVW5tYXJrICkge1xuICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuICAgICAgICAgICAgICAgIG9wdC5vbGQuY2FsbCggdGhpcyApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBvcHQucXVldWUgKSB7XG4gICAgICAgICAgICAgICAgalF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggbm9Vbm1hcmsgIT09IGZhbHNlICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5fdW5tYXJrKCB0aGlzICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvcHQ7XG4gICAgfSxcbiAgICBlYXNpbmc6IHtcbiAgICAgICAgbGluZWFyOiBmdW5jdGlvbiggcCApIHtcbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9LFxuICAgICAgICBzd2luZzogZnVuY3Rpb24oIHAgKSB7XG4gICAgICAgICAgICByZXR1cm4gKCAtTWF0aC5jb3MoIHAqTWF0aC5QSSApIC8gMiApICsgMC41O1xuICAgICAgICB9XG4gICAgfSxcbiAgICB0aW1lcnM6IFtdLFxuICAgIGZ4OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCApIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgdGhpcy5lbGVtID0gZWxlbTtcbiAgICAgICAgdGhpcy5wcm9wID0gcHJvcDtcbiAgICAgICAgb3B0aW9ucy5vcmlnID0gb3B0aW9ucy5vcmlnIHx8IHt9O1xuICAgIH1cbn0pO1xualF1ZXJ5LmZ4LnByb3RvdHlwZSA9IHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuICAgICAgICB9XG4gICAgICAgICggalF1ZXJ5LmZ4LnN0ZXBbIHRoaXMucHJvcCBdIHx8IGpRdWVyeS5meC5zdGVwLl9kZWZhdWx0ICkoIHRoaXMgKTtcbiAgICB9LFxuICAgIGN1cjogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICggdGhpcy5lbGVtWyB0aGlzLnByb3AgXSAhPSBudWxsICYmICghdGhpcy5lbGVtLnN0eWxlIHx8IHRoaXMuZWxlbS5zdHlsZVsgdGhpcy5wcm9wIF0gPT0gbnVsbCkgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtWyB0aGlzLnByb3AgXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyc2VkLFxuICAgICAgICAgICAgciA9IGpRdWVyeS5jc3MoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7XG4gICAgICAgIHJldHVybiBpc05hTiggcGFyc2VkID0gcGFyc2VGbG9hdCggciApICkgPyAhciB8fCByID09PSBcImF1dG9cIiA/IDAgOiByIDogcGFyc2VkO1xuICAgIH0sXG4gICAgY3VzdG9tOiBmdW5jdGlvbiggZnJvbSwgdG8sIHVuaXQgKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgIGZ4ID0galF1ZXJ5LmZ4O1xuICAgICAgICB0aGlzLnN0YXJ0VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCk7XG4gICAgICAgIHRoaXMuZW5kID0gdG87XG4gICAgICAgIHRoaXMubm93ID0gdGhpcy5zdGFydCA9IGZyb207XG4gICAgICAgIHRoaXMucG9zID0gdGhpcy5zdGF0ZSA9IDA7XG4gICAgICAgIHRoaXMudW5pdCA9IHVuaXQgfHwgdGhpcy51bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgdGhpcy5wcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG4gICAgICAgIGZ1bmN0aW9uIHQoIGdvdG9FbmQgKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5zdGVwKCBnb3RvRW5kICk7XG4gICAgICAgIH1cbiAgICAgICAgdC5xdWV1ZSA9IHRoaXMub3B0aW9ucy5xdWV1ZTtcbiAgICAgICAgdC5lbGVtID0gdGhpcy5lbGVtO1xuICAgICAgICB0LnNhdmVTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCBqUXVlcnkuX2RhdGEoIHNlbGYuZWxlbSwgXCJmeHNob3dcIiArIHNlbGYucHJvcCApID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBzZWxmLm9wdGlvbnMuaGlkZSApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBzZWxmLmVsZW0sIFwiZnhzaG93XCIgKyBzZWxmLnByb3AsIHNlbGYuc3RhcnQgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBzZWxmLm9wdGlvbnMuc2hvdyApIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5Ll9kYXRhKCBzZWxmLmVsZW0sIFwiZnhzaG93XCIgKyBzZWxmLnByb3AsIHNlbGYuZW5kICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIHQoKSAmJiBqUXVlcnkudGltZXJzLnB1c2godCkgJiYgIXRpbWVySWQgKSB7XG4gICAgICAgICAgICB0aW1lcklkID0gc2V0SW50ZXJ2YWwoIGZ4LnRpY2ssIGZ4LmludGVydmFsICk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNob3c6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZGF0YVNob3cgPSBqUXVlcnkuX2RhdGEoIHRoaXMuZWxlbSwgXCJmeHNob3dcIiArIHRoaXMucHJvcCApO1xuICAgICAgICB0aGlzLm9wdGlvbnMub3JpZ1sgdGhpcy5wcm9wIF0gPSBkYXRhU2hvdyB8fCBqUXVlcnkuc3R5bGUoIHRoaXMuZWxlbSwgdGhpcy5wcm9wICk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCBkYXRhU2hvdyAhPT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgdGhpcy5jdXN0b20oIHRoaXMuY3VyKCksIGRhdGFTaG93ICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbSggdGhpcy5wcm9wID09PSBcIndpZHRoXCIgfHwgdGhpcy5wcm9wID09PSBcImhlaWdodFwiID8gMSA6IDAsIHRoaXMuY3VyKCkgKTtcbiAgICAgICAgfVxuICAgICAgICBqUXVlcnkoIHRoaXMuZWxlbSApLnNob3coKTtcbiAgICB9LFxuICAgIGhpZGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMub3JpZ1sgdGhpcy5wcm9wIF0gPSBqUXVlcnkuX2RhdGEoIHRoaXMuZWxlbSwgXCJmeHNob3dcIiArIHRoaXMucHJvcCApIHx8IGpRdWVyeS5zdHlsZSggdGhpcy5lbGVtLCB0aGlzLnByb3AgKTtcbiAgICAgICAgdGhpcy5vcHRpb25zLmhpZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmN1c3RvbSggdGhpcy5jdXIoKSwgMCApO1xuICAgIH0sXG4gICAgc3RlcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG4gICAgICAgIHZhciBwLCBuLCBjb21wbGV0ZSxcbiAgICAgICAgICAgIHQgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuICAgICAgICAgICAgZG9uZSA9IHRydWUsXG4gICAgICAgICAgICBlbGVtID0gdGhpcy5lbGVtLFxuICAgICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgaWYgKCBnb3RvRW5kIHx8IHQgPj0gb3B0aW9ucy5kdXJhdGlvbiArIHRoaXMuc3RhcnRUaW1lICkge1xuICAgICAgICAgICAgdGhpcy5ub3cgPSB0aGlzLmVuZDtcbiAgICAgICAgICAgIHRoaXMucG9zID0gdGhpcy5zdGF0ZSA9IDE7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgICAgICAgb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXNbIHRoaXMucHJvcCBdID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoIHAgaW4gb3B0aW9ucy5hbmltYXRlZFByb3BlcnRpZXMgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllc1sgcCBdICE9PSB0cnVlICkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBkb25lICkge1xuICAgICAgICAgICAgICAgIGlmICggb3B0aW9ucy5vdmVyZmxvdyAhPSBudWxsICYmICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkge1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuZWFjaCggWyBcIlwiLCBcIlhcIiwgXCJZXCIgXSwgZnVuY3Rpb24oIGluZGV4LCB2YWx1ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uc3R5bGVbIFwib3ZlcmZsb3dcIiArIHZhbHVlIF0gPSBvcHRpb25zLm92ZXJmbG93WyBpbmRleCBdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmhpZGUgKSB7XG4gICAgICAgICAgICAgICAgICAgIGpRdWVyeSggZWxlbSApLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBvcHRpb25zLmhpZGUgfHwgb3B0aW9ucy5zaG93ICkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKCBwIGluIG9wdGlvbnMuYW5pbWF0ZWRQcm9wZXJ0aWVzICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwLCBvcHRpb25zLm9yaWdbIHAgXSApO1xuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIFwiZnhzaG93XCIgKyBwLCB0cnVlICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkucmVtb3ZlRGF0YSggZWxlbSwgXCJ0b2dnbGVcIiArIHAsIHRydWUgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21wbGV0ZSA9IG9wdGlvbnMuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgaWYgKCBjb21wbGV0ZSApIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZS5jYWxsKCBlbGVtICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCBvcHRpb25zLmR1cmF0aW9uID09IEluZmluaXR5ICkge1xuICAgICAgICAgICAgICAgIHRoaXMubm93ID0gdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbiA9IHQgLSB0aGlzLnN0YXJ0VGltZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbiAvIG9wdGlvbnMuZHVyYXRpb247XG4gICAgICAgICAgICAgICAgdGhpcy5wb3MgPSBqUXVlcnkuZWFzaW5nWyBvcHRpb25zLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdIF0oIHRoaXMuc3RhdGUsIG4sIDAsIDEsIG9wdGlvbnMuZHVyYXRpb24gKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdyA9IHRoaXMuc3RhcnQgKyAoICh0aGlzLmVuZCAtIHRoaXMuc3RhcnQpICogdGhpcy5wb3MgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufTtcbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5meCwge1xuICAgIHRpY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdGltZXIsXG4gICAgICAgICAgICB0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgIGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgICAgIHRpbWVyID0gdGltZXJzWyBpIF07XG4gICAgICAgICAgICBpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcbiAgICAgICAgICAgICAgICB0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuICAgICAgICAgICAgalF1ZXJ5LmZ4LnN0b3AoKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW50ZXJ2YWw6IDEzLFxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhckludGVydmFsKCB0aW1lcklkICk7XG4gICAgICAgIHRpbWVySWQgPSBudWxsO1xuICAgIH0sXG4gICAgc3BlZWRzOiB7XG4gICAgICAgIHNsb3c6IDYwMCxcbiAgICAgICAgZmFzdDogMjAwLFxuICAgICAgICBfZGVmYXVsdDogNDAwXG4gICAgfSxcbiAgICBzdGVwOiB7XG4gICAgICAgIG9wYWNpdHk6IGZ1bmN0aW9uKCBmeCApIHtcbiAgICAgICAgICAgIGpRdWVyeS5zdHlsZSggZnguZWxlbSwgXCJvcGFjaXR5XCIsIGZ4Lm5vdyApO1xuICAgICAgICB9LFxuICAgICAgICBfZGVmYXVsdDogZnVuY3Rpb24oIGZ4ICkge1xuICAgICAgICAgICAgaWYgKCBmeC5lbGVtLnN0eWxlICYmIGZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSAhPSBudWxsICkge1xuICAgICAgICAgICAgICAgIGZ4LmVsZW0uc3R5bGVbIGZ4LnByb3AgXSA9IGZ4Lm5vdyArIGZ4LnVuaXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZ4LmVsZW1bIGZ4LnByb3AgXSA9IGZ4Lm5vdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xualF1ZXJ5LmVhY2goIGZ4QXR0cnMuY29uY2F0LmFwcGx5KCBbXSwgZnhBdHRycyApLCBmdW5jdGlvbiggaSwgcHJvcCApIHtcbiAgICBpZiAoIHByb3AuaW5kZXhPZiggXCJtYXJnaW5cIiApICkge1xuICAgICAgICBqUXVlcnkuZnguc3RlcFsgcHJvcCBdID0gZnVuY3Rpb24oIGZ4ICkge1xuICAgICAgICAgICAgalF1ZXJ5LnN0eWxlKCBmeC5lbGVtLCBwcm9wLCBNYXRoLm1heCgwLCBmeC5ub3cpICsgZngudW5pdCApO1xuICAgICAgICB9O1xuICAgIH1cbn0pO1xuaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkge1xuICAgIGpRdWVyeS5leHByLmZpbHRlcnMuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeS5ncmVwKGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuICAgICAgICB9KS5sZW5ndGg7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdERpc3BsYXkoIG5vZGVOYW1lICkge1xuICAgIGlmICggIWVsZW1kaXNwbGF5WyBub2RlTmFtZSBdICkge1xuICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICBlbGVtID0galF1ZXJ5KCBcIjxcIiArIG5vZGVOYW1lICsgXCI+XCIgKS5hcHBlbmRUbyggYm9keSApLFxuICAgICAgICAgICAgZGlzcGxheSA9IGVsZW0uY3NzKCBcImRpc3BsYXlcIiApO1xuICAgICAgICBlbGVtLnJlbW92ZSgpO1xuICAgICAgICBpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiIHx8IGRpc3BsYXkgPT09IFwiXCIgKSB7XG4gICAgICAgICAgICBpZiAoICFpZnJhbWUgKSB7XG4gICAgICAgICAgICAgICAgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpZnJhbWVcIiApO1xuICAgICAgICAgICAgICAgIGlmcmFtZS5mcmFtZUJvcmRlciA9IGlmcmFtZS53aWR0aCA9IGlmcmFtZS5oZWlnaHQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keS5hcHBlbmRDaGlsZCggaWZyYW1lICk7XG4gICAgICAgICAgICBpZiAoICFpZnJhbWVEb2MgfHwgIWlmcmFtZS5jcmVhdGVFbGVtZW50ICkge1xuICAgICAgICAgICAgICAgIGlmcmFtZURvYyA9ICggaWZyYW1lLmNvbnRlbnRXaW5kb3cgfHwgaWZyYW1lLmNvbnRlbnREb2N1bWVudCApLmRvY3VtZW50O1xuICAgICAgICAgICAgICAgIGlmcmFtZURvYy53cml0ZSggKCBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCA/IFwiPCFkb2N0eXBlIGh0bWw+XCIgOiBcIlwiICkgKyBcIjxodG1sPjxib2R5PlwiICk7XG4gICAgICAgICAgICAgICAgaWZyYW1lRG9jLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtID0gaWZyYW1lRG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICk7XG4gICAgICAgICAgICBpZnJhbWVEb2MuYm9keS5hcHBlbmRDaGlsZCggZWxlbSApO1xuICAgICAgICAgICAgZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG4gICAgICAgICAgICBib2R5LnJlbW92ZUNoaWxkKCBpZnJhbWUgKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZGlzcGxheVsgbm9kZU5hbWUgXTtcbn1cblxudmFyIGdldE9mZnNldCxcbiAgICBydGFibGUgPSAvXnQoPzphYmxlfGR8aCkkL2ksXG4gICAgcnJvb3QgPSAvXig/OmJvZHl8aHRtbCkkL2k7XG5pZiAoIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICkge1xuICAgIGdldE9mZnNldCA9IGZ1bmN0aW9uKCBlbGVtLCBkb2MsIGRvY0VsZW0sIGJveCApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIH0gY2F0Y2goZSkge31cbiAgICAgICAgaWYgKCAhYm94IHx8ICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHtcbiAgICAgICAgICAgIHJldHVybiBib3ggPyB7IHRvcDogYm94LnRvcCwgbGVmdDogYm94LmxlZnQgfSA6IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keSxcbiAgICAgICAgICAgIHdpbiA9IGdldFdpbmRvdyggZG9jICksXG4gICAgICAgICAgICBjbGllbnRUb3AgID0gZG9jRWxlbS5jbGllbnRUb3AgIHx8IGJvZHkuY2xpZW50VG9wICB8fCAwLFxuICAgICAgICAgICAgY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCAgPSB3aW4ucGFnZVlPZmZzZXQgfHwgalF1ZXJ5LnN1cHBvcnQuYm94TW9kZWwgJiYgZG9jRWxlbS5zY3JvbGxUb3AgIHx8IGJvZHkuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldCB8fCBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtLnNjcm9sbExlZnQgfHwgYm9keS5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgdG9wICA9IGJveC50b3AgICsgc2Nyb2xsVG9wICAtIGNsaWVudFRvcCxcbiAgICAgICAgICAgIGxlZnQgPSBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0O1xuICAgICAgICByZXR1cm4geyB0b3A6IHRvcCwgbGVmdDogbGVmdCB9O1xuICAgIH07XG59IGVsc2Uge1xuICAgIGdldE9mZnNldCA9IGZ1bmN0aW9uKCBlbGVtLCBkb2MsIGRvY0VsZW0gKSB7XG4gICAgICAgIHZhciBjb21wdXRlZFN0eWxlLFxuICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQsXG4gICAgICAgICAgICBwcmV2T2Zmc2V0UGFyZW50ID0gZWxlbSxcbiAgICAgICAgICAgIGJvZHkgPSBkb2MuYm9keSxcbiAgICAgICAgICAgIGRlZmF1bHRWaWV3ID0gZG9jLmRlZmF1bHRWaWV3LFxuICAgICAgICAgICAgcHJldkNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKSA6IGVsZW0uY3VycmVudFN0eWxlLFxuICAgICAgICAgICAgdG9wID0gZWxlbS5vZmZzZXRUb3AsXG4gICAgICAgICAgICBsZWZ0ID0gZWxlbS5vZmZzZXRMZWZ0O1xuICAgICAgICB3aGlsZSAoIChlbGVtID0gZWxlbS5wYXJlbnROb2RlKSAmJiBlbGVtICE9PSBib2R5ICYmIGVsZW0gIT09IGRvY0VsZW0gKSB7XG4gICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LmZpeGVkUG9zaXRpb24gJiYgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09IFwiZml4ZWRcIiApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXB1dGVkU3R5bGUgPSBkZWZhdWx0VmlldyA/IGRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkgOiBlbGVtLmN1cnJlbnRTdHlsZTtcbiAgICAgICAgICAgIHRvcCAgLT0gZWxlbS5zY3JvbGxUb3A7XG4gICAgICAgICAgICBsZWZ0IC09IGVsZW0uc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIGlmICggZWxlbSA9PT0gb2Zmc2V0UGFyZW50ICkge1xuICAgICAgICAgICAgICAgIHRvcCAgKz0gZWxlbS5vZmZzZXRUb3A7XG4gICAgICAgICAgICAgICAgbGVmdCArPSBlbGVtLm9mZnNldExlZnQ7XG4gICAgICAgICAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5kb2VzTm90QWRkQm9yZGVyICYmICEoalF1ZXJ5LnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHMgJiYgcnRhYmxlLnRlc3QoZWxlbS5ub2RlTmFtZSkpICkge1xuICAgICAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGggICkgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0KCBjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCApIHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXZPZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG4gICAgICAgICAgICAgICAgb2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIGpRdWVyeS5zdXBwb3J0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSAmJiBjb21wdXRlZFN0eWxlLm92ZXJmbG93ICE9PSBcInZpc2libGVcIiApIHtcbiAgICAgICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyVG9wV2lkdGggICkgfHwgMDtcbiAgICAgICAgICAgICAgICBsZWZ0ICs9IHBhcnNlRmxvYXQoIGNvbXB1dGVkU3R5bGUuYm9yZGVyTGVmdFdpZHRoICkgfHwgMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSBcInJlbGF0aXZlXCIgfHwgcHJldkNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG4gICAgICAgICAgICB0b3AgICs9IGJvZHkub2Zmc2V0VG9wO1xuICAgICAgICAgICAgbGVmdCArPSBib2R5Lm9mZnNldExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBqUXVlcnkuc3VwcG9ydC5maXhlZFBvc2l0aW9uICYmIHByZXZDb21wdXRlZFN0eWxlLnBvc2l0aW9uID09PSBcImZpeGVkXCIgKSB7XG4gICAgICAgICAgICB0b3AgICs9IE1hdGgubWF4KCBkb2NFbGVtLnNjcm9sbFRvcCwgYm9keS5zY3JvbGxUb3AgKTtcbiAgICAgICAgICAgIGxlZnQgKz0gTWF0aC5tYXgoIGRvY0VsZW0uc2Nyb2xsTGVmdCwgYm9keS5zY3JvbGxMZWZ0ICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTtcbiAgICB9O1xufVxuXG5qUXVlcnkuZm4ub2Zmc2V0ID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG4gICAgaWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgIHRoaXMgOlxuICAgICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkge1xuICAgICAgICAgICAgICAgIGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIGVsZW0gPSB0aGlzWzBdLFxuICAgICAgICBkb2MgPSBlbGVtICYmIGVsZW0ub3duZXJEb2N1bWVudDtcbiAgICBpZiAoICFkb2MgKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoIGVsZW0gPT09IGRvYy5ib2R5ICkge1xuICAgICAgICByZXR1cm4galF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVtICk7XG4gICAgfVxuICAgIHJldHVybiBnZXRPZmZzZXQoIGVsZW0sIGRvYywgZG9jLmRvY3VtZW50RWxlbWVudCApO1xufTtcbmpRdWVyeS5vZmZzZXQgPSB7XG4gICAgYm9keU9mZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7XG4gICAgICAgIHZhciB0b3AgPSBib2R5Lm9mZnNldFRvcCxcbiAgICAgICAgICAgIGxlZnQgPSBib2R5Lm9mZnNldExlZnQ7XG4gICAgICAgIGlmICggalF1ZXJ5LnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgKSB7XG4gICAgICAgICAgICB0b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgXCJtYXJnaW5Ub3BcIikgKSB8fCAwO1xuICAgICAgICAgICAgbGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksIFwibWFyZ2luTGVmdFwiKSApIHx8IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTtcbiAgICB9LFxuICAgIHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApO1xuICAgICAgICBpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuICAgICAgICAgICAgZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuICAgICAgICAgICAgY3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKSxcbiAgICAgICAgICAgIGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKSxcbiAgICAgICAgICAgIGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApLFxuICAgICAgICAgICAgY2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmIGpRdWVyeS5pbkFycmF5KFwiYXV0b1wiLCBbY3VyQ1NTVG9wLCBjdXJDU1NMZWZ0XSkgPiAtMSxcbiAgICAgICAgICAgIHByb3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDtcbiAgICAgICAgaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcbiAgICAgICAgICAgIGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuICAgICAgICAgICAgY3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuICAgICAgICAgICAgY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuICAgICAgICAgICAgY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGN1ck9mZnNldCApO1xuICAgICAgICB9XG4gICAgICAgIGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcbiAgICAgICAgICAgIHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcbiAgICAgICAgICAgIHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuICAgICAgICB9XG4gICAgICAgIGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG4gICAgICAgICAgICBvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJFbGVtLmNzcyggcHJvcHMgKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5qUXVlcnkuZm4uZXh0ZW5kKHtcbiAgICBwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICggIXRoaXNbMF0gKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZWxlbSA9IHRoaXNbMF0sXG4gICAgICAgIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCksXG4gICAgICAgIG9mZnNldCAgICAgICA9IHRoaXMub2Zmc2V0KCksXG4gICAgICAgIHBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFyZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7XG4gICAgICAgIG9mZnNldC50b3AgIC09IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoZWxlbSwgXCJtYXJnaW5Ub3BcIikgKSB8fCAwO1xuICAgICAgICBvZmZzZXQubGVmdCAtPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sIFwibWFyZ2luTGVmdFwiKSApIHx8IDA7XG4gICAgICAgIHBhcmVudE9mZnNldC50b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3Mob2Zmc2V0UGFyZW50WzBdLCBcImJvcmRlclRvcFdpZHRoXCIpICkgfHwgMDtcbiAgICAgICAgcGFyZW50T2Zmc2V0LmxlZnQgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sIFwiYm9yZGVyTGVmdFdpZHRoXCIpICkgfHwgMDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcDogIG9mZnNldC50b3AgIC0gcGFyZW50T2Zmc2V0LnRvcCxcbiAgICAgICAgICAgIGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgd2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgKCFycm9vdC50ZXN0KG9mZnNldFBhcmVudC5ub2RlTmFtZSkgJiYgalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIikgPT09IFwic3RhdGljXCIpICkge1xuICAgICAgICAgICAgICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50O1xuICAgICAgICB9KTtcbiAgICB9XG59KTtcbmpRdWVyeS5lYWNoKCB7c2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIn0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG4gICAgdmFyIHRvcCA9IC9ZLy50ZXN0KCBwcm9wICk7XG4gICAgalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG4gICAgICAgICAgICB2YXIgd2luID0gZ2V0V2luZG93KCBlbGVtICk7XG4gICAgICAgICAgICBpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW4gPyAocHJvcCBpbiB3aW4pID8gd2luWyBwcm9wIF0gOlxuICAgICAgICAgICAgICAgICAgICBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBtZXRob2QgXSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgd2luLmRvY3VtZW50LmJvZHlbIG1ldGhvZCBdIDpcbiAgICAgICAgICAgICAgICAgICAgZWxlbVsgbWV0aG9kIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIHdpbiApIHtcbiAgICAgICAgICAgICAgICB3aW4uc2Nyb2xsVG8oXG4gICAgICAgICAgICAgICAgICAgICF0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbExlZnQoKSxcbiAgICAgICAgICAgICAgICAgICAgIHRvcCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsVG9wKClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtWyBtZXRob2QgXSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGgsIG51bGwgKTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBnZXRXaW5kb3coIGVsZW0gKSB7XG4gICAgcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID9cbiAgICAgICAgZWxlbSA6XG4gICAgICAgIGVsZW0ubm9kZVR5cGUgPT09IDkgP1xuICAgICAgICAgICAgZWxlbS5kZWZhdWx0VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6XG4gICAgICAgICAgICBmYWxzZTtcbn1cblxualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuICAgIHZhciBjbGllbnRQcm9wID0gXCJjbGllbnRcIiArIG5hbWUsXG4gICAgICAgIHNjcm9sbFByb3AgPSBcInNjcm9sbFwiICsgbmFtZSxcbiAgICAgICAgb2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBuYW1lO1xuICAgIGpRdWVyeS5mblsgXCJpbm5lclwiICsgbmFtZSBdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbGVtID0gdGhpc1swXTtcbiAgICAgICAgcmV0dXJuIGVsZW0gP1xuICAgICAgICAgICAgZWxlbS5zdHlsZSA/XG4gICAgICAgICAgICBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBcInBhZGRpbmdcIiApICkgOlxuICAgICAgICAgICAgdGhpc1sgdHlwZSBdKCkgOlxuICAgICAgICAgICAgbnVsbDtcbiAgICB9O1xuICAgIGpRdWVyeS5mblsgXCJvdXRlclwiICsgbmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiApIHtcbiAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdO1xuICAgICAgICByZXR1cm4gZWxlbSA/XG4gICAgICAgICAgICBlbGVtLnN0eWxlID9cbiAgICAgICAgICAgIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIG1hcmdpbiA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICkgKSA6XG4gICAgICAgICAgICB0aGlzWyB0eXBlIF0oKSA6XG4gICAgICAgICAgICBudWxsO1xuICAgIH07XG4gICAgalF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggdmFsdWUgKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG4gICAgICAgICAgICB2YXIgZG9jLCBkb2NFbGVtUHJvcCwgb3JpZywgcmV0O1xuICAgICAgICAgICAgaWYgKCBqUXVlcnkuaXNXaW5kb3coIGVsZW0gKSApIHtcbiAgICAgICAgICAgICAgICBkb2MgPSBlbGVtLmRvY3VtZW50O1xuICAgICAgICAgICAgICAgIGRvY0VsZW1Qcm9wID0gZG9jLmRvY3VtZW50RWxlbWVudFsgY2xpZW50UHJvcCBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCAmJiBkb2NFbGVtUHJvcCB8fFxuICAgICAgICAgICAgICAgICAgICBkb2MuYm9keSAmJiBkb2MuYm9keVsgY2xpZW50UHJvcCBdIHx8IGRvY0VsZW1Qcm9wO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuICAgICAgICAgICAgICAgIGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICggZG9jWyBjbGllbnRQcm9wIF0gPj0gZG9jWyBzY3JvbGxQcm9wIF0gKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2NbIGNsaWVudFByb3AgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICBlbGVtLmJvZHlbIHNjcm9sbFByb3AgXSwgZG9jWyBzY3JvbGxQcm9wIF0sXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsgb2Zmc2V0UHJvcCBdLCBkb2NbIG9mZnNldFByb3AgXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICAgICAgb3JpZyA9IGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUgKTtcbiAgICAgICAgICAgICAgICByZXQgPSBwYXJzZUZsb2F0KCBvcmlnICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpRdWVyeS5pc051bWVyaWMoIHJldCApID8gcmV0IDogb3JpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGpRdWVyeSggZWxlbSApLmNzcyggdHlwZSwgdmFsdWUgKTtcbiAgICAgICAgfSwgdHlwZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGgsIG51bGwgKTtcbiAgICB9O1xufSk7XG53aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICYmIGRlZmluZS5hbWQualF1ZXJ5ICkge1xuICAgIGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApO1xufVxuXG59KSggd2luZG93ICk7XG4oZnVuY3Rpb24oJCkge1xudmFyIGludGVydmFsID0gbnVsbDtcbnZhciBjaGVja2xpc3QgPSBbXTtcbiQuZWxlbWVudFJlYWR5ID0gZnVuY3Rpb24oaWQsIGZuKSB7XG4gICAgY2hlY2tsaXN0LnB1c2goe2lkOiBpZCwgZm46IGZufSk7XG4gICAgaWYgKCFpbnRlcnZhbCkge1xuICAgICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKGNoZWNrLCAkLmVsZW1lbnRSZWFkeS5pbnRlcnZhbF9tcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufTtcbiQuZWxlbWVudFJlYWR5LmludGVydmFsX21zID0gMjM7XG5mdW5jdGlvbiBjaGVjaygpIHtcbiAgICB2YXIgZG9jUmVhZHkgPSAkLmlzUmVhZHk7XG4gICAgZm9yICh2YXIgaSA9IGNoZWNrbGlzdC5sZW5ndGggLSAxOyAwIDw9IGk7IC0taSkge1xuICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjaGVja2xpc3RbaV0uaWQpO1xuICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIHZhciBmbiA9IGNoZWNrbGlzdFtpXS5mbjtcbiAgICAgICAgICAgIGNoZWNrbGlzdFtpXSA9IGNoZWNrbGlzdFtjaGVja2xpc3QubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjaGVja2xpc3QucG9wKCk7XG4gICAgICAgICAgICBmbi5hcHBseShlbCwgWyRdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZG9jUmVhZHkpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgIGludGVydmFsID0gbnVsbDtcbiAgICB9XG59O1xufSkoalF1ZXJ5KTtcbihmdW5jdGlvbigkKSB7XG4kLnVhID0ge2Jyb3dzZXI6IHtuYW1lOiAnJywgdmVyc2lvbjogMH0sIG9zOiB7bmFtZTogJycsIHZlcnNpb246ICcnfX07XG52YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksIGluZm8gPSB7fSwgbmFtZSwgdmVyc2lvbiwgZW5naW5lLCBvcywgb3N2ZXJzaW9uO1xudWEucmVwbGFjZSgvW1xcKFxcKV0vZywgJzsnKS5yZXBsYWNlKC9cXHMqKFxcdyo/XFwgP1xcdytbXFw6XFxzXFw7XT9bXlxcZFxcc10qPylbXFwvXFwgXShbXFxkXFwuXSopL2csIGZ1bmN0aW9uKGYsIGtleSwgdmFsdWUpIHsgaW5mb1trZXldPWluZm9ba2V5XSB8fCB2YWx1ZSB8fCB0cnVlOyB9KTtcbiQuZWFjaChbJ21zaWUnLCAnb3BlcmEnLCAnZmlyZWZveCcsICdzZWFtb25rZXknLCAnYXJvcmEnLCAnaXJvbicsICdjaHJvbWUnLCAnc2FmYXJpJ10sIGZ1bmN0aW9uKCkge1xuICAgIGlmICghbmFtZSAmJiBpbmZvW3RoaXNdKSB7IG5hbWU9dGhpczsgfVxufSk7XG52ZXJzaW9uID0gaW5mby52ZXJzaW9uIHx8IGluZm9bbmFtZV0gfHwgJyc7XG4kLmVhY2goWyd0cmlkZW50JywgJ2dlY2tvJywgJ3dlYmtpdCcsICdwcmVzdG8nXSwgZnVuY3Rpb24oKSB7IGlmICghZW5naW5lICYmIGluZm9bdGhpc10pIHsgZW5naW5lPXRoaXM7IH0gfSk7XG4kLmV4dGVuZCgkLnVhLmJyb3dzZXIsIHtuYW1lOiBuYW1lLCB2ZXJzaW9uOiBwYXJzZUZsb2F0KHZlcnNpb24pLCB2ZXJzaW9uRGV0YWlsOiB2ZXJzaW9uLnNwbGl0KCcuJyksIGVuZ2luZTogeyBuYW1lOiBlbmdpbmUsIHZlcnNpb246IGluZm9bZW5naW5lXSB9IH0pO1xuJC5lYWNoKFsnd2luZG93cyBudCcsICd3aW5kb3dzJywgJ2ludGVsIG1hYycsICdwcGMgbWFjJywgJ2xpbnV4J10sIGZ1bmN0aW9uKCkge1xuICAgIGlmICghb3MgJiYgaW5mb1t0aGlzXSkgeyBvcz10aGlzOyB9XG59KTtcbmlmIChvcz09J3dpbmRvd3MgbnQnKSB7IG9zdmVyc2lvbj0oeyAnNC4wJzogJ250JywgJzUuMCc6ICcyMDAwJywgJzUuMSc6ICd4cCcsICc1LjInOiAnMjAwMycsICc2LjAnOiAndmlzdGEnLCAnNi4xJzogJzcnIH0pW2luZm9bb3NdXTsgb3M9J3dpbmRvd3MnOyB9XG5lbHNlIGlmIChvcz09J2ludGVsIG1hYycpIHsgb3M9J21hYyBvcyc7IG9zdmVyc2lvbj0naW50ZWwnOyB9XG5lbHNlIGlmIChvcz09J3BwYyBtYWMnKSB7IG9zPSdtYWMgb3MnOyBvc3ZlcnNpb249J3BwYyc7IH1cbiQuZXh0ZW5kKCQudWEub3MsIHtuYW1lOiBvcywgdmVyc2lvbjogb3N2ZXJzaW9uLCAnNjRiaXQnOiAvXFwgKHdvdzY0fHdpbjY0fHg2NCkvLnRlc3QodWEpLCBvc3BhdGNobGV2ZWw6ICgvd2luZG93c1xcIG50XFwgNVxcLjEuKnN2MS8udGVzdCh1YSkgPyAnc3AyJyA6IG51bGwpfSk7XG5pZiAoL21zaWVcXCAoXFxkKykuKnRyaWRlbnRbIFxcL10oXFxkKykvLnRlc3QodWEpKSB7ICQuZXh0ZW5kKCQudWEuYnJvd3Nlciwge3ZlcnNpb246IFJlZ0V4cC4kMioxKzQsIHJlbmRlck1vZGU6IFJlZ0V4cC4kMSoxfSk7IH1cbiQudWEuYnJvd3NlcltuYW1lXSA9ICQudWEuYnJvd3Nlci52ZXJzaW9uO1xuJC51YS5icm93c2VyW2VuZ2luZV0gPSBpbmZvW2VuZ2luZV07XG59KShqUXVlcnkpO1xuXG5mdW5jdGlvbiBpc0xvZ2luUGFnZSgpIHtcbiAgICByZXR1cm4gJCgnZm9ybVtuYW1lPWxvZ2luRm9ybV0nKS5oYXNDbGFzcygnZm9ybS1sb2dpbicpO1xufVxuZnVuY3Rpb24gcHJlcGFyZUxvZ2luKCkge1xuICAgIHZhciBjb29raWVzQWxsb3dlZCA9IGZhbHNlO1xuICAgIHRyeSB7Ly8gcG9zc2libGUgZXhjZXB0aW9uIGluIHJhcmUgY2FzZXMgaW4gSUVcbiAgICAgICAgY29va2llc0FsbG93ZWQgPSAoJ2Nvb2tpZUVuYWJsZWQnIGluIG5hdmlnYXRvcikgJiYgbmF2aWdhdG9yLmNvb2tpZUVuYWJsZWQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgIH1cbiAgICBpZiAoIWNvb2tpZXNBbGxvd2VkKSB7XG4gICAgICAgICQoJyNwYWdlLWNvbnRlbnQ+LmhpbnQnKS5yZW1vdmVDbGFzcygnaGludC10ZXN0LXBlbmRpbmcnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgc29vbiA9IG5ldyBEYXRlKCk7XG4gICAgc29vbi5zZXRUaW1lKHNvb24uZ2V0VGltZSgpICsgMTAwMDApOy8vIDEwIHNlY29uZHMgZnJvbSBub3dcbiAgICBkb2N1bWVudC5jb29raWUgPSAnY29va2llRW5hYmxlZFRlc3Q9dHJ1ZTsgZXhwaXJlcz0nICsgc29vbi50b0dNVFN0cmluZygpICsgJzsgcGF0aD0vJztcbiAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHN0aWxsSGFzQ29va2llID0gISEoKCcnK2RvY3VtZW50LmNvb2tpZSkuaW5kZXhPZignY29va2llRW5hYmxlZFRlc3Q9dHJ1ZScpKzEpO1xuICAgICAgICBpZiAoc3RpbGxIYXNDb29raWUpIHtcbiAgICAgICAgICAgICQoJyNwYWdlLWNvbnRlbnQ+LmhpbnQnKS5yZW1vdmVDbGFzcygnaGludC10ZXN0LXBlbmRpbmcnKS5hZGRDbGFzcygnaGludC1qc0Rpc2FibGVkJyk7XG4gICAgICAgICAgICAkKCdmb3JtW25hbWU9bG9naW5Gb3JtXSAuYnRuLXdyYXBwZXInKS5yZW1vdmVDbGFzcygnYnRuLWRpc2FibGVkJykuZmluZCgnaW5wdXRbdHlwZT1zdWJtaXRdJykucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoJyNwYWdlLWNvbnRlbnQ+LmhpbnQnKS5yZW1vdmVDbGFzcygnaGludC10ZXN0LXBlbmRpbmcnKTtcbiAgICAgICAgfVxuICAgIH0sIDEwMCk7XG59XG5cbmZ1bmN0aW9uIGluaXRUcmFja2luZygpIHtcbiAgICB2YXIgdz13aW5kb3csZD1kb2N1bWVudCxkYXQ9ZnVuY3Rpb24obil7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChkYXQuYy5kYXRhKCd0cmFjay0nK24pKTt9LGU9ZC5kb2N1bWVudEVsZW1lbnQsZz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0seD13LmlubmVyV2lkdGh8fGUuY2xpZW50V2lkdGh8fGcuY2xpZW50V2lkdGgseT13LmlubmVySGVpZ2h0fHxlLmNsaWVudEhlaWdodHx8Zy5jbGllbnRIZWlnaHQ7XG4gICAgZGF0LmM9JCgnI3RyYWNraW5nLWRhdGEtY29udGFpbmVyJyk7XG4gICAgdmFyIGdsb2JhbHMgPSAnJnZpZXdyZXM9Jyt4Kyd4Jyt5Kycmdmlld3BvcnRfdz0nK3grJyZ2aWV3cG9ydF9oPScreSsnJnRpdGxlPScrZXNjYXBlKGQudGl0bGUpKycmcGFnZXVybD0nK2VzY2FwZShsb2NhdGlvbi5ocmVmKSsnJnJlZmVycmVyPScrZXNjYXBlKGQucmVmZXJyZXIpO1xuICAgIGZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gZGF0KCd0ZW1wbGF0ZScpO1xuICAgIH1cbiAgICB3LnRyYWNrRXZlbnQgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHZhciBpc1BpID0gIW5hbWU7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5hbWUgPSAkKG5hbWV8fGRhdC5jKS5kYXRhKCd0cmFjay1ldmVudG5hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2l0ZSA9IGRhdCgnc2l0ZScpLnJlcGxhY2UoLyUyW2ZGXS9nLCAnLycpO1xuICAgICAgICBpZiAoc2l0ZS5pbmRleE9mKCcvJykgPT09IC0xKSB7XG4gICAgICAgICAgICBzaXRlID0gc2l0ZSArICcvJyArIHNpdGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhpZCA9IGRhdCgnaGlkJyksXG4gICAgICAgICAgICBjb3VudHJ5ID0gZGF0KCdjb3VudHJ5JyksXG4gICAgICAgICAgICBob3N0ID0gZGF0KCdob3N0JykgfHwgJ3dhLnVpLXBvcnRhbC5kZScsXG4gICAgICAgICAgICB0ZW1wbGF0ZSA9IGdldFRlbXBsYXRlKCksXG4gICAgICAgICAgICBtZXRob2QgPSBkYXQoJ21ldGhvZCcpIHx8ICdhamF4JyxcbiAgICAgICAgICAgIHRpbWVvdXQgPSBkYXQoJ3RpbWVvdXQnKSB8fCAnbm8nLFxuICAgICAgICAgICAgdXJsID0gJydcbiAgICAgICAgICAgICAgICArICcvLycraG9zdCsnLycrc2l0ZSsnL3MnXG4gICAgICAgICAgICAgICAgKyAnP25hbWU9JytuYW1lXG4gICAgICAgICAgICAgICAgKyAoY291bnRyeSA/ICcmY291bnRyeT0nK2NvdW50cnkgOiAnJylcbiAgICAgICAgICAgICAgICArIChoaWQgPyAnJmhpZD0nK2hpZCA6ICcnKVxuICAgICAgICAgICAgICAgICsgKGlzUGkgPyAnJyA6ICh0ZW1wbGF0ZSA/ICcmdGVtcGxhdGU9Jyt0ZW1wbGF0ZSA6ICcnKSlcbiAgICAgICAgICAgICAgICArICcmdHM9JysobmV3IERhdGUoKSoxKVxuICAgICAgICAgICAgICAgICsgKGlzUGkgPyAnJyA6ICcmcmFuZD0nK3BhcnNlSW50KE1hdGgucmFuZG9tKCkqMTAwMDAwLCAxMCkpXG4gICAgICAgICAgICAgICAgKyAoaXNQaSA/IGdsb2JhbHMgOiAnJyksXG4gICAgICAgIF87XG4gICAgICAgIHRpbWVvdXQgPSB0aW1lb3V0PT09J25vJyA/IHVuZGVmaW5lZCA6IHBhcnNlSW50KHRpbWVvdXQsIDEwKTtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ2ltZycpIHtcbiAgICAgICAgICAgIG5ldyBJbWFnZSgxLCAxKS5zcmMgPSB1cmw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdHRVQnLFxuICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5mdW5jdGlvbiBwYWdlQmVnaW4oKSB7XG4gICAgd2luZG93LmJvZHlFbGVtZW50ID0gJCgnYm9keScpO1xuICAgIHdpbmRvdy5ib2R5RWxlbWVudC5yZW1vdmVDbGFzcygnanNEaXNhYmxlZCcpLmFkZENsYXNzKCdqc0VuYWJsZWQnKTtcbn1cblxuZnVuY3Rpb24gcGFnZUVuZCgpIHtcbiAgICBpZiAoaXNMb2dpblBhZ2UoKSkge1xuICAgICAgICBwcmVwYXJlTG9naW4oKTtcbiAgICB9XG4gICAgaW5pdFRyYWNraW5nKCk7XG4gICAgdHJhY2tFdmVudCgpO1xufVxuXG5pbml0QnV0dG9ucyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgoICEkLnVhLmJyb3dzZXIubXNpZSAgIHx8ICgkLnVhLmJyb3dzZXIubXNpZSA+PSAxMCAmJiAodHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PSAndW5kZWZpbmVkJyB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPT0gMCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPj0gMTApKSkgJiZcbiAgICAgICAgKCAhJC51YS5icm93c2VyLm9wZXJhICB8fCAgJC51YS5icm93c2VyLm9wZXJhID49IDEyICkgJiZcbiAgICAgICAgKCAhJC51YS5icm93c2VyLnNhZmFyaSB8fCAgJC51YS5icm93c2VyLnNhZmFyaSA+PSA1LjEgKSkge1xuICAgICAgICAgICAgJCgnLmJ0bi1maXgnKS5yZW1vdmVDbGFzcygnYnRuLWZpeCcpO1xuICAgIH1cbiAgICAkKCcuYnRuLXdyYXBwZXInKVxuICAgICAgICAub24oJ21vdXNlZW50ZXInLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5hZGRDbGFzcygnYnRuLW92ZXInKTsgfSlcbiAgICAgICAgLm9uKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24oKSB7ICQodGhpcykucmVtb3ZlQ2xhc3MoJ2J0bi1vdmVyIGJ0bi1wcmVzc2VkJyk7IH0pXG4gICAgICAgIC5vbignbW91c2V1cCcsICAgIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLnJlbW92ZUNsYXNzKCdidG4tcHJlc3NlZCcpOyB9KVxuICAgICAgICAub24oJ21vdXNlZG93bicsICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmKCEkKHRoaXMpLmhhc0NsYXNzKCdidG4tZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2J0bi1wcmVzc2VkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maW5kKCdhLCBpbnB1dCwgYnV0dG9uJylcbiAgICAgICAgLmFuZFNlbGYoKVxuICAgICAgICAub24oJ2ZvY3VzJywgICAgICBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghJCh0aGlzKS5oYXNDbGFzcygnYnRuLWRpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5idG4td3JhcHBlcicpLmFkZENsYXNzKCdidG4tb3ZlcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2JsdXInLCAgICAgICBmdW5jdGlvbigpIHsgJCh0aGlzKS5jbG9zZXN0KCcuYnRuLXdyYXBwZXInKS5yZW1vdmVDbGFzcygnYnRuLW92ZXInKTsgfSk7XG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5idG4tZGlzYWJsZWQgaW5wdXQsIC5idG4tZGlzYWJsZWQgYScsIGZ1bmN0aW9uKGUpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9KTtcbn1cblxuJChmdW5jdGlvbigpIHtcbiAgICBpbml0QnV0dG9ucygpO1xuICAgICQoJ3NwYW4uYnRuLWZpeCwgc3Bhbi5idG4td3JhcHBlci5oYXNJY29uJykub24oJ2NsaWNrIG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBtb3VzZXVwIG1vdXNlZG93biBmb2N1cyBibHVyJywgZnVuY3Rpb24oZSkge1xuICAgICAgICBpZiAoICQoZS50YXJnZXQpLmlzKCdhLCBpbnB1dCwgZW0nKSApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgJCgnYSwgaW5wdXQnLCAkKHRoaXMpKS50cmlnZ2VyKGUudHlwZSk7XG4gICAgICAgICAgICBpZiAoZS50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jaGlsZHJlbignYScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMuaHJlZiwgdGhpcy50YXJnZXR8fCdfc2VsZicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICQodGhpcykuY2hpbGRyZW4oJ2lucHV0JykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zdWJtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG5mdW5jdGlvbiBGb3JtVmFsaWRhdGlvbihmb3JtLCBjb25mKSB7XG4gICAgdGhpcy5mb3JtID0gJChmb3JtKTtcbiAgICB0aGlzLmNvbmYgPSAkLmV4dGVuZCh3aW5kb3cuZm9ybVZhbGlkYXRpb25Db25maWcsIGNvbmZ8fHt9KTtcbiAgICBpZiAodGhpcy5mb3JtLmRhdGEoJ3ZhbGlkYXRpb25PYmplY3QnKSkgICB7IHJldHVybjsgfVxuICAgIGlmICh0aGlzLmZvcm0uZGF0YSgnZm9ybWNoZWNrLWRpc2FibGVkJykpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5pbml0KCk7XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmZvcm0uZGF0YSgndmFsaWRhdGlvbk9iamVjdCcsIHRoaXMpO1xuICAgIHRoaXMuY2hlY2tzID0gdGhpcy5jb25mLmNoZWNrcztcbiAgICBpZiAoIXRoaXMuY2hlY2tzWydfcmVxdWlyZWQnXSkge1xuICAgICAgICB0aGlzLmNoZWNrc1snX3JlcXVpcmVkJ10gPSBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX19jaGVja19ub3RFbXB0eTtcbiAgICB9XG4gICAgdGhpcy5faW5pdEZvcm0oKTtcbiAgICB0aGlzLl9pbml0Rm9ybWZpZWxkcygpO1xuICAgIHRoaXMuX2luaXRTdWJtaXRidXR0b25zKCk7XG4gICAgdGhpcy5faW5pdENoZWNrcygpO1xuICAgIHRoaXMuX2luaXRXYXJuaW5ncygpO1xuICAgIHZhciBmaXJzdEVycm9yID0gJCgnaW5wdXQuJyt0aGlzLmNvbmYuc0ludmFsaWRDbGFzcysnLCBzZWxlY3QuJyt0aGlzLmNvbmYuc0ludmFsaWRDbGFzcysnLCB0ZXh0YXJlYS4nK3RoaXMuY29uZi5zSW52YWxpZENsYXNzLCB0aGlzLmZvcm0pLmZpcnN0KCk7XG4gICAgaWYgKGZpcnN0RXJyb3IubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbEludG9WaWV3KGZpcnN0RXJyb3IpO1xuICAgICAgICBmaXJzdEVycm9yLnRyaWdnZXIoJ2Zvcm12YWxpZGF0aW9uLnNob3dlcnJvcicpO1xuICAgIH1cbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2luaXRGb3JtID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNoZWNrcyA9IHRoaXMuZm9ybS5hdHRyKCdkYXRhLWZvcm1lcnJvci1jaGVjaycpO1xuICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgJCgnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnLCB0aGlzLmZvcm0pLmZpbHRlcignLicrdGhpcy5jb25mLmludmFsaWRDbGFzcysnLCAuJyt0aGlzLmNvbmYuc0ludmFsaWRDbGFzcykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1mb3JtZXJyb3ItY2hlY2snLCAkKHRoaXMpLmF0dHIoJ2RhdGEtZm9ybWVycm9yLWNoZWNrJykrJyAnK2NoZWNrcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgbm9jaGVjayA9IHRoaXMuZm9ybS5hdHRyKCdkYXRhLWZvcm1jaGVjay1ub2NoZWNrJyk7XG4gICAgaWYgKG5vY2hlY2spIHtcbiAgICAgICAgJCgnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnLCB0aGlzLmZvcm0pLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtZm9ybWNoZWNrLW5vY2hlY2snLCBub2NoZWNrKTtcbiAgICAgICAgfSk7XG4gICAgfVxufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5faW5pdEZvcm1maWVsZHMgPSBmdW5jdGlvbigpIHtcbiAgICAkKCdbcmVxdWlyZWRdLCBbZGF0YS1mb3JtZXJyb3ItY2hlY2tdJywgdGhpcy5mb3JtKS5maWx0ZXIoJzpub3QoaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QpJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgJHRoaXMuZmluZCgnaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdyZXF1aXJlZCcsICAgICAgICAgICAgICR0aGlzLmF0dHIoJ3JlcXVpcmVkJykpXG4gICAgICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtZm9ybWVycm9yLWNoZWNrJywgJHRoaXMuYXR0cignZGF0YS1mb3JtZXJyb3ItY2hlY2snKSk7XG4gICAgICAgIH0pO1xuICAgICAgICAkdGhpcy5yZW1vdmVBdHRyKCdyZXF1aXJlZCcpLnJlbW92ZUF0dHIoJ2RhdGEtZm9ybWVycm9yLWNoZWNrJyk7XG4gICAgfSk7XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9pbml0U3VibWl0YnV0dG9ucyA9IGZ1bmN0aW9uKCkge1xuICAgICQoJ1tkYXRhLWZvcm1zdWJtaXQ9XCJvbmx5b25jZVwiXScsIHRoaXMuZm9ybSkub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICQodGhpcykucGFyZW50KCcuYnRuLXdyYXBwZXInKS5hZGRDbGFzcygnYnRuLWRpc2FibGVkJyk7XG4gICAgICAgICQodGhpcykudW5iaW5kKCdjbGljaycpO1xuICAgICAgICAkKHRoaXMuZm9ybSkudW5iaW5kKCdzdWJtaXQnKTtcbiAgICB9KTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2luaXRDaGVja3MgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb2JqID0gdGhpcztcbiAgICAkKCdbcmVxdWlyZWRdLCBbZGF0YS1mb3JtZXJyb3ItY2hlY2tdJywgdGhpcy5mb3JtKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAkdGhpcy5maW5kKCdpbnB1dDpub3QoW3R5cGU9aGlkZGVuXSksIHNlbGVjdCwgdGV4dGFyZWEnKS5kYXRhKCdmb3JtZXJyb3ItY2hlY2snLCAkdGhpcy5kYXRhKCdmb3JtZXJyb3ItY2hlY2snKSkuYXR0cigncmVxdWlyZWQnLCAkdGhpcy5hdHRyKCdyZXF1aXJlZCcpKTtcbiAgICB9KTtcbiAgICAkKCdpbnB1dDpyYWRpb1tyZXF1aXJlZF0nLCB0aGlzLmZvcm0pLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICQoJ2lucHV0W25hbWU9XCInK3RoaXMubmFtZSsnXCJdJywgdGhpcy5mb3JtKS5hdHRyKCdyZXF1aXJlZCcsIHRydWUpO1xuICAgIH0pO1xuICAgICQoJ1tyZXF1aXJlZF0sIFtkYXRhLWZvcm1lcnJvci1jaGVja10nLCB0aGlzLmZvcm0pLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAgICB9KS5vbignZm9jdXMnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICRpbnAgPSAkKHRoaXMpO1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KCRpbnAuZGF0YSgnZm9ybXZhbGlkYXRpb24tZGVzZWxlY3RmaWVsZCcpKTtcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChvYmouZm9ybS5kYXRhKCdmb3JtdmFsaWRhdGlvbi1maWVsZGxvc3QnKSk7XG4gICAgICAgIGlmICghJGlucC5pcygnLicrb2JqLmNvbmYuaW52YWxpZENsYXNzKycsIC4nK29iai5jb25mLnNJbnZhbGlkQ2xhc3MpICYmICRpbnAgIT0gb2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tbGFzdGZvY3VzZWQnKSkge1xuICAgICAgICAgICAgb2JqLl9oaWRlRXJyb3JNZXNzYWdlcygpO1xuICAgICAgICB9XG4gICAgICAgIG9iai5mb3JtLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLWxhc3Rmb2N1c2VkJywgJGlucCk7XG4gICAgICAgIGlmICgkaW5wLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLXN0b3BldmVudHMnKSkgeyByZXR1cm4gJGlucC5kYXRhKCdmb3JtdmFsaWRhdGlvbi1zdG9wZXZlbnRzJywgZmFsc2UpOyB9XG4gICAgICAgICRpbnAudHJpZ2dlcignZm9ybXZhbGlkYXRpb24uc2VsZWN0ZmllbGQnKTtcbiAgICB9KS5vbignYmx1cicsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGlucCA9ICQodGhpcyk7XG4gICAgICAgIGlmICgkaW5wLmRhdGEoJ3N0b3Bmb3JtdmFsaWRhdGlvbi1zdG9wZXZlbnRzJykpIHsgcmV0dXJuICRpbnAuZGF0YSgnZm9ybXZhbGlkYXRpb24tc3RvcGV2ZW50cycsIGZhbHNlKTsgfVxuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICRpbnAuZGF0YSgnZm9ybXZhbGlkYXRpb24tZGVzZWxlY3RmaWVsZCcsICRpbnAudHJpZ2dlcignZm9ybXZhbGlkYXRpb24uZGVzZWxlY3RmaWVsZCcpKTtcbiAgICAgICAgfSwgMTApO1xuICAgICAgICBvYmouZm9ybS5kYXRhKCdmb3JtdmFsaWRhdGlvbi1maWVsZGxvc3QnLCB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgJGlucC50cmlnZ2VyKCdmb3JtdmFsaWRhdGlvbi5maWVsZGxvc3QnKTsgfSwgMTUwKSk7XG4gICAgfSkub24oJ2tleWRvd24gbW91c2V1cCcsIGZ1bmN0aW9uKCkge1xuICAgIH0pLm9uKCdmb3JtdmFsaWRhdGlvbi5zZWxlY3RmaWVsZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpLmF0dHIoJ3RpdGxlJywgJycpO1xuICAgICAgICBpZiAoJHRoaXMuaGFzQ2xhc3Mob2JqLmNvbmYuaW52YWxpZENsYXNzKSB8fCAkdGhpcy5oYXNDbGFzcyhvYmouY29uZi5zSW52YWxpZENsYXNzKSkge1xuICAgICAgICAgICAgb2JqLl9zaG93RXJyb3JNZXNzYWdlKCR0aGlzKTtcbiAgICAgICAgfVxuICAgIH0pLm9uKCdmb3JtdmFsaWRhdGlvbi5kZXNlbGVjdGZpZWxkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcykuYXR0cigndGl0bGUnLCAnJyk7XG4gICAgICAgIG9iai5fdmFsaWRhdGUoJHRoaXMpO1xuICAgICAgICBvYmouX2hpZGVFcnJvck1lc3NhZ2VzKG9iai5mb3JtLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLWN1cnJlbnRtZXNzYWdlJykpO1xuICAgIH0pLm9uKCdmb3JtdmFsaWRhdGlvbi5maWVsZGxvc3QnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgaWYoISR0aGlzLmlzKCc6Zm9jdXMnKSkge1xuICAgICAgICAgICAgJHRoaXMuYXR0cigndGl0bGUnLCAnJyk7XG4gICAgICAgICAgICBvYmouX2hpZGVFcnJvck1lc3NhZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9KS5vbignZm9ybXZhbGlkYXRpb24uc2hvd2Vycm9yJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcykuYXR0cigndGl0bGUnLCAnJyk7XG4gICAgICAgIG9iai5fc2hvd0Vycm9yTWVzc2FnZSgkdGhpcy5mb2N1cygpKTtcbiAgICAgICAgb2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tY3VycmVudG1lc3NhZ2UnLCAkdGhpcyk7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQob2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tZmllbGRsb3N0JykpO1xuICAgIH0pLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBpZiAoJHRoaXMuaXMoJzpyYWRpbywgOmNoZWNrYm94JykpIHtcbiAgICAgICAgICAgIG9iai5faGlkZUVycm9yTWVzc2FnZXMoKTtcbiAgICAgICAgICAgIG9iai5fdmFsaWRhdGUoJHRoaXMpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9pbml0V2FybmluZ3MgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgb2JqID0gdGhpcztcbiAgICAkKHRoaXMuY29uZi5lcnJvck1zZ1RvZ2dsZVNlbGVjLCB0aGlzLmZvcm0pLm9uKCdtb3VzZWRvd24nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICR3cm4gPSAkKHRoaXMpO1xuICAgICAgICB2YXIgJGxmYyA9IG9iai5mb3JtLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLWxhc3Rmb2N1c2VkJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAkbGZjXG4gICAgICAgICAgICAmJiAgJHdybi5jbG9zZXN0KG9iai5jb25mLmlucHV0U2V0Q29udGFpbmVyKS5maW5kKCRsZmMpLmxlbmd0aFxuICAgICAgICAgICAgJiYgICRsZmMuaXMoJy4nK29iai5jb25mLmludmFsaWRDbGFzcysnLCAuJytvYmouY29uZi5zSW52YWxpZENsYXNzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciAkaW5wID0gb2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tbGFzdGZvY3VzZWQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciAkaW5wID0gJCgnLicrb2JqLmNvbmYuaW52YWxpZENsYXNzKycsIC4nK29iai5jb25mLnNJbnZhbGlkQ2xhc3MsICR3cm4uY2xvc2VzdChvYmouY29uZi5pbnB1dFNldENvbnRhaW5lcikpLmZpbHRlcignaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QnKS5maXJzdCgpLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLXN0b3BldmVudHMnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJG1zZyA9IG9iai5fZ2V0RXJyb3JNZXNzYWdlKCRpbnApO1xuICAgICAgICBpZiAoJG1zZy5maWx0ZXIoJzp2aXNpYmxlJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAkbXNnLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRpbnAudHJpZ2dlcignZm9ybXZhbGlkYXRpb24uc2hvd2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCQudWEuYnJvd3Nlci5tc2llKSB7XG4gICAgICAgICAgICAkaW5wLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLXN0b3BldmVudHMnLCB0cnVlKS5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ICRpbnAuZGF0YSgnZm9ybXZhbGlkYXRpb24tc3RvcGV2ZW50cycsIHRydWUpLmZvY3VzKCk7IH0sIDEwKTtcbiAgICAgICAgfVxuICAgIH0pLmNzcygnY3Vyc29yJywgJ3BvaW50ZXInKTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICBpZiAoJGlucC5pcygnOnJhZGlvJykpIHsgcmV0dXJuICcnOyB9XG4gICAgaWYgKCRpbnAuaXMoJzpjaGVja2JveCcpKSB7IHJldHVybiAnJzsgfVxuICAgIGlmICgkaW5wLmRhdGEoJ2Zvcm1lcnJvci1kZWZhdWx0VmFsdWUnKSkgeyByZXR1cm4gJGlucC5kYXRhKCdmb3JtZXJyb3ItZGVmYXVsdFZhbHVlJyk7IH1cbiAgICBpZiAoJGlucC5pcygnc2VsZWN0JykpIHsgJGlucC5kYXRhKCdmb3JtZXJyb3ItZGVmYXVsdFZhbHVlJywgJCgnb3B0aW9uW3NlbGVjdGVkXSwgb3B0aW9uOmZpcnN0JywgJGlucCkuZmlyc3QoKS52YWwoKSk7IH1cbiAgICBlbHNlIHsgJGlucC5kYXRhKCdmb3JtZXJyb3ItZGVmYXVsdFZhbHVlJywgJGlucC5nZXQoMCkuZGVmYXVsdFZhbHVlKTsgfVxuICAgIHJldHVybiAkaW5wLmRhdGEoJ2Zvcm1lcnJvci1kZWZhdWx0VmFsdWUnKTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldFZhbHVlID0gZnVuY3Rpb24oJGlucCkge1xuICAgIGlmICgkaW5wLmlzKCc6Y2hlY2tib3gnKSkgeyByZXR1cm4gJGlucC5pcygnOmNoZWNrZWQnKSA/ICRpbnAudmFsKCkgOiAnJzsgfVxuICAgIGlmICgkaW5wLmlzKCc6cmFkaW8nKSkgICAgeyByZXR1cm4gJGlucC5jbG9zZXN0KCdmb3JtJykuZmluZCgnaW5wdXRbbmFtZT1cIicrJGlucC5hdHRyKCduYW1lJykrJ1wiXTpjaGVja2VkJykudmFsKCkgfHwgJyc7IH1cbiAgICByZXR1cm4gJGlucC52YWwoKTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX3ZhbGlkYXRlID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciAkZWxzID0gdGhpcy5fZ2V0RmllbGRFbGVtZW50cygkaW5wKTtcbiAgICB2YXIgJGNudCA9IHRoaXMuX2dldEZpZWxkQ29udGFpbmVyKCRlbHMpO1xuICAgIHZhciAkc3RyID0gdGhpcy5fZ2V0RWxlbWVudFN0cnVjdHVyZSgkZWxzLCAkY250KTtcbiAgICB2YXIgb2JqID0gdGhpcztcbiAgICB2YXIgaXNWYWxpZCA9IHRydWU7XG4gICAgaWYgKCRpbnAuYXR0cignZGF0YS1mb3JtY2hlY2stbm9jaGVjaycpKSB7XG4gICAgICAgIGlzVmFsaWQgPSAhJGlucC5oYXNDbGFzcyh0aGlzLmNvbmYuc0ludmFsaWRDbGFzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCRpbnAuYXR0cigncmVxdWlyZWQnKSkge1xuICAgICAgICAgICAgaXNWYWxpZCAmPSB0aGlzLmNoZWNrc1snX3JlcXVpcmVkJ10oJGlucCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNoZWNrcyA9ICgkaW5wLmF0dHIoJ2RhdGEtZm9ybWVycm9yLWNoZWNrJyl8fCcnKS5zcGxpdCgnICcpO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y2hlY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mKHRoaXMuY2hlY2tzW2NoZWNrc1tpXV0pPT09J2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgJj0gdGhpcy5jaGVja3NbY2hlY2tzW2ldXSgkaW5wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAkaW5wLmRhdGEoJ2lzVmFsaWQnLCBpc1ZhbGlkKTtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAkc3RyLnJlbW92ZUNsYXNzKHRoaXMuY29uZi5pbnZhbGlkQ2xhc3MrJyAnK3RoaXMuY29uZi5zSW52YWxpZENsYXNzKVxuICAgICAgICAgICAgLmFkZENsYXNzICAgKHRoaXMuY29uZi52YWxpZENsYXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkc3RyLnJlbW92ZUNsYXNzKHRoaXMuY29uZi52YWxpZENsYXNzICArJyAnK3RoaXMuY29uZi5zVmFsaWRDbGFzcylcbiAgICAgICAgICAgIC5hZGRDbGFzcyAgICh0aGlzLmNvbmYuaW52YWxpZENsYXNzKTtcbiAgICB9XG4gICAgJCgnW3JlcXVpcmVkXSwgW2RhdGEtZm9ybWVycm9yLWNoZWNrXScsICRjbnQpLmZpbHRlcignLicrb2JqLmNvbmYuaW52YWxpZENsYXNzKycsIC4nK29iai5jb25mLnNJbnZhbGlkQ2xhc3MpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkc3RyID0gb2JqLl9nZXRFbGVtZW50U3RydWN0dXJlKCQodGhpcyksICRjbnQpO1xuICAgICAgICAkc3RyLnJlbW92ZUNsYXNzKG9iai5jb25mLnZhbGlkQ2xhc3MgICsnICcrb2JqLmNvbmYuc1ZhbGlkQ2xhc3MpXG4gICAgICAgICAgICAuYWRkQ2xhc3MgICAob2JqLmNvbmYuaW52YWxpZENsYXNzKTtcbiAgICB9KTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2J1aWxkRXJyb3JNZXNzYWdlID0gZnVuY3Rpb24oJGlucCwgJHJvb3QsICRodG1sKSB7XG4gICAgaWYgKCQoJz4qJywgJHJvb3QpLmZpbHRlcigkaW5wKS5sZW5ndGgpIHtcbiAgICAgICAgJGlucC5hZnRlcigkaHRtbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJvb3QuYXBwZW5kKCRodG1sKTtcbiAgICB9XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9nZXRFcnJvck1lc3NhZ2UgPSBmdW5jdGlvbigkaW5wKSB7XG4gICAgaWYgKCRpbnAuYXR0cignZGF0YS1mb3JtZXJyb3ItdGV4dCcpPT09JycpIHsgcmV0dXJuICQoJzxzcGFuLz4nKTsgfVxuICAgIHZhciAkcGFyID0gJGlucC5wYXJlbnRzKHRoaXMuY29uZi5pbnB1dENvbnRhaW5lcikuZmlyc3QoKTtcbiAgICBpZiAoJCh0aGlzLmNvbmYuZXJyb3JNc2dTZWxlYysnI2Vycm9ybXNnLWZvci0nKyRpbnAuYXR0cignaWQnKS5yZXBsYWNlKC9cXC4vZywgJ1xcXFwuJyksICRwYXIpLmxlbmd0aD09PTApIHtcbiAgICAgICAgdmFyICRtc2cgPSAkKHRoaXMuY29uZi5lcnJvck1zZ0VsZW1cbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHt0ZXh0XFx9L2csICAkaW5wLmF0dHIoJ2RhdGEtZm9ybWVycm9yLXRleHQnKXx8dGhpcy5jb25mLmRlZmF1bHRFcnJvck1zZylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHtpZFxcfS9nLCAgICAkaW5wLmF0dHIoJ2lkJyl8fCcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xce2NsYXNzXFx9L2csICRpbnAuYXR0cignZGF0YS1mb3JtZXJyb3ItY2xhc3MnKXx8JycpXG4gICAgICAgICkuYXR0cignaWQnLCAnZXJyb3Jtc2ctZm9yLScrJGlucC5hdHRyKCdpZCcpKS5oaWRlKCk7XG4gICAgICAgIHRoaXMuY29uZi5lcnJvck1zZ0J1aWxkZXIoJGlucCwgJHBhciwgJG1zZyk7XG4gICAgfVxuICAgIHJldHVybiAkKHRoaXMuY29uZi5lcnJvck1zZ1NlbGVjKycjZXJyb3Jtc2ctZm9yLScrJGlucC5hdHRyKCdpZCcpLnJlcGxhY2UoL1xcLi9nLCAnXFxcXC4nKSwgJHBhcik7XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9zaG93RXJyb3JNZXNzYWdlID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tY3VycmVudG1lc3NhZ2UnLCAkaW5wKTtcbiAgICB0aGlzLl9oaWRlRXJyb3JNZXNzYWdlcygpO1xuICAgICRpbnAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fZ2V0RXJyb3JNZXNzYWdlKCQodGhpcykpLnNob3coKTtcbiAgICB9KTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2hpZGVFcnJvck1lc3NhZ2VzID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciAkbXNnID0gKCRpbnAgJiYgJGlucC5sZW5ndGgpID8gdGhpcy5fZ2V0RXJyb3JNZXNzYWdlKCRpbnApIDogJyc7XG4gICAgdmFyICRlcnJNc2dzID0gJCh0aGlzLmNvbmYuZXJyb3JNc2dTZWxlYywgdGhpcy5mb3JtKS5maWx0ZXIoJzpub3QoLmZvcmNlZE1lc3NhZ2UpJyk7XG4gICAgaWYgKCRtc2cubGVuZ3RoKSB7XG4gICAgICAgICRlcnJNc2dzLmZpbHRlcihmdW5jdGlvbigpIHsgcmV0dXJuICEkKHRoaXMpLmlzKCRtc2cpOyB9KS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJGVyck1zZ3MuaGlkZSgpO1xuICAgIH1cbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX3Njcm9sbEludG9WaWV3ID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciB0b3BQb3MgPSAoJGlucC5vZmZzZXQoKXx8e3RvcDowfSkudG9wO1xuICAgIHZhciAkd2luID0gJCh3aW5kb3cpO1xuICAgIGlmICgkd2luLmhlaWdodCgpIDw9IHRvcFBvcyArIDEwMCkge1xuICAgICAgICAkd2luLnNjcm9sbFRvcCh0b3BQb3MgLSBwYXJzZUludCgkd2luLmhlaWdodCgpLzMsIDEwKSk7XG4gICAgfVxufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fZ2V0RmllbGRFbGVtZW50cyA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICB2YXIgb2JqID0gdGhpcztcbiAgICBpZiAoJGlucC5pcygnOnJhZGlvLCA6Y2hlY2tib3gnKSkge1xuICAgICAgICAkaW5wID0gJGlucC5hZGQoJCgnaW5wdXRbbmFtZT1cIicrJGlucC5hdHRyKCduYW1lJykrJ1wiXScsIHRoaXMuZm9ybSkpO1xuICAgIH1cbiAgICAkaW5wLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICRpbnAgPSAkaW5wLmFkZCgkKCdsYWJlbFtmb3I9XCInKyQodGhpcykuYXR0cignaWQnKSsnXCJdJykpLmFkZCgkaW5wLmNsb3Nlc3Qob2JqLmNvbmYuaW5wdXRXcmFwcGVyU2VsZWMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJGlucDtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldEZpZWxkQ29udGFpbmVyID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciBvYmogPSB0aGlzO1xuICAgIHZhciAkZWxzID0gJGlucC5jbG9zZXN0KG9iai5jb25mLmlucHV0U2V0Q29udGFpbmVyKTtcbiAgICByZXR1cm4gJGVscztcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldEVsZW1lbnRTdHJ1Y3R1cmUgPSBmdW5jdGlvbigkZnJvbSwgJHRvKSB7XG4gICAgdmFyICRyZXN1bHQgPSAkKCRmcm9tKTtcbiAgICAkZnJvbS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAkcmVzdWx0ID0gJHJlc3VsdC5hZGQoJCh0aGlzKS5wYXJlbnRzVW50aWwoJCh0aGlzKS5jbG9zZXN0KCR0bykpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJHJlc3VsdC5hZGQoJHRvKTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX19jaGVja19ub3RFbXB0eSA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICByZXR1cm4gISFGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldFZhbHVlKCRpbnApO1xufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fX2NoZWNrX3ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICByZXR1cm4gRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9nZXRWYWx1ZSgkaW5wKSAhPSBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldERlZmF1bHRWYWx1ZSgkaW5wKTtcbn07XG4kKGZ1bmN0aW9uKCkge1xuICAgIGlmICgkLmZuLmh0bWw1cGxhY2Vob2xkZXIpIHtcbiAgICAgICAgJCgnaW5wdXRbdHlwZT10ZXh0XVtwbGFjZWhvbGRlcl0nKS5odG1sNXBsYWNlaG9sZGVyKCk7XG4gICAgfVxuICAgIHZhciBuc1ByZWZpeCA9ICQudWEuYnJvd3Nlci5uYW1lID09PSAnbXNpZScgJiYgJC51YS5icm93c2VyLm1zaWUgPCA4ID8gJycgOiAnaFxcXFw6JztcbiAgICB3aW5kb3cuZm9ybVZhbGlkYXRpb25Db25maWcgPSAkLmV4dGVuZCh0cnVlLCB7XG4gICAgICAgIGNoZWNrczoge1xuICAgICAgICAgICAgX3JlcXVpcmVkOiAgICAgRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9fY2hlY2tfbm90RW1wdHksXG4gICAgICAgICAgICBzZXJ2ZXJlcnJvcjogICBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX19jaGVja192YWx1ZUNoYW5nZWQsXG4gICAgICAgICAgICBzZXJ2ZXJjaGVja2VkOiBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX19jaGVja192YWx1ZUNoYW5nZWQsXG4gICAgICAgICAgICBtaW5MZW5ndGg6ICAgICBmdW5jdGlvbigkaW5wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC9eLns4LDQwfSQvLnRlc3QoJGlucC52YWwoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXF1YWxzOiAgICAgZnVuY3Rpb24oJGlucCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkaW5wLnZhbCgpID09PSAkKCRpbnAuYXR0cignZGF0YS1mb3JtZXJyb3ItZXF1YWxzJykpLnZhbCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgJ18nOicnfSxcbiAgICAgICAgaW52YWxpZENsYXNzOiAgICAgICAgJ2hhc0Vycm9yJyxcbiAgICAgICAgdmFsaWRDbGFzczogICAgICAgICAgJ2pzVmFsaWQnLFxuICAgICAgICBzSW52YWxpZENsYXNzOiAgICAgICAnaGFzRXJyb3InLFxuICAgICAgICBzVmFsaWRDbGFzczogICAgICAgICAnaXNWYWxpZCcsXG4gICAgICAgIGVycm9yTXNnRWxlbTogICAgICAgICc8aDpvdXRwdXQgY2xhc3M9XCJmZWVkYmFjayBmZWVkYmFjay17aWR9IGZlZWRiYWNrLXtjbGFzc31cIiBkYXRhLWZvcj1cIntpZH1cIj48cCBkYXRhLXdlYmRyaXZlci1pZD1cImZlZWRiYWNrXCI+e3RleHR9PC9wPjxzcGFuIGNsYXNzPVwibm9zZVwiPjwvc3Bhbj48L2g6b3V0cHV0PicsXG4gICAgICAgIGVycm9yTXNnU2VsZWM6ICAgICAgIG5zUHJlZml4KydvdXRwdXQuZmVlZGJhY2snLFxuICAgICAgICBlcnJvck1zZ1RvZ2dsZVNlbGVjOiBuc1ByZWZpeCsnb3V0cHV0LnN0YXR1cycsXG4gICAgICAgIGRlZmF1bHRFcnJvck1zZzogICAgICdCaXR0ZSBFaW5nYWJlZmVsZCBhdXNmP2xsZW4gb2RlciBFaW5nYWJlIGtvcnJpZ2llcmVuJyxcbiAgICAgICAgZXJyb3JNc2dCdWlsZGVyOiAgICAgRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9idWlsZEVycm9yTWVzc2FnZSxcbiAgICAgICAgaW5wdXRXcmFwcGVyU2VsZWM6ICAgJy5zZWxlY3Qtd3JhcHBlcicsXG4gICAgICAgIGlucHV0Q29udGFpbmVyOiAgICAgICd0ZCwgLml0ZW0tZGF0YSwgZmllbGRzZXQsIGZvcm0sIGZvcm0uZm9ybS1sb2dpbiAuZm9ybS1pdGVtJyxcbiAgICAgICAgaW5wdXRTZXRDb250YWluZXI6ICAgJ3RyLCAuZm9ybS1pdGVtLCBmaWVsZHNldCwgZm9ybScsXG4gICAgJ18nOicnfSwgd2luZG93LmZvcm1WYWxpZGF0aW9uQ29uZmlnfHx7fSk7XG4gICAgJCgnZm9ybScpLmVhY2goZnVuY3Rpb24oKSB7IG5ldyBGb3JtVmFsaWRhdGlvbih0aGlzLCB3aW5kb3cuZm9ybVZhbGlkYXRpb25Db25maWcpOyB9KTtcbiAgICBpZiAoJCgnLnRyaWdnZXJzLWFjdGlvbjpub3QoLmJ0bi1kaXNhYmxlZCknKS5sZW5ndGggPjApIHtcbiAgICAgICAgJCgnLnRyaWdnZXJzLWFjdGlvbjpub3QoLmJ0bi1kaXNhYmxlZCknKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAkKCcudHJpZ2dlcnMtYWN0aW9uOm5vdCguYnRuLWRpc2FibGVkKScpLmhpZGUoKTtcbiAgICAgICAgICAgICQoJy5idXR0b25BY3Rpb25JblByb2dyZXNzJykuc2hvdygpO1xuICAgICAgICAgICAgLy8gQnVnZml4IGZvciBQUUFCLTcxOTIgKGJ1ZyBkZXNjcmlwdGlvbjogYWZ0ZXIgZmFpbGVkIGxvZ2luIGFuZCBjb21pbmcgYmFjayB0byB0aGUgbG9naW4gcGFnZSB3aXRoIGJhY2stYnV0dG9uLCBzdWJtaXQgYnV0dG9uIG50IGRpc3BsYXllZClcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCQoJy50cmlnZ2Vycy1hY3Rpb246bm90KC5idG4tZGlzYWJsZWQpJykuc2hvdygpLCAxMDAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5mdW5jdGlvbiBzaG93Q2xpY2t0aXBwKG9wZW5lciwgY2xpY2t0aXBwSUQpIHtcbiAgICB2YXIgcG9zaXRpb25MZWZ0ID0gKG9wZW5lci5wb3NpdGlvbigpIHx8IHtsZWZ0OjB9KS5sZWZ0ICsgJChvcGVuZXIpLndpZHRoKCkgKyAxMztcbiAgICAkKGNsaWNrdGlwcElEKS5jc3MoJ2xlZnQnLHBvc2l0aW9uTGVmdCk7XG4gICAgJChjbGlja3RpcHBJRCkudG9nZ2xlKCk7XG59XG5mdW5jdGlvbiBwYXNzd29yZENyaXRlcmlhKGZpZWxkKSB7XG4gICAgaWYoJC51YS5icm93c2VyLm5hbWUgIT09ICdtc2llJyAmJiAoJC51YS5icm93c2VyLm1zaWUgPD0gOCkpIHtcbiAgICAgICAgJChmaWVsZCkuc2libGluZ3MoJy5jbGlja3RpcC1jb250ZW50JykuZmFkZVRvKDEwLCAxKTtcbiAgICB9XG4gICAgaWYodGhpcy5kb250TG9hZE1lQWdhaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBvcHRzID0ge1xuICAgICAgICBcIi5taW4tY2hhcnNcIjogL14uezgsNDB9JC8sXG4gICAgICAgIFwiLmxldHRlcnMtYW5kLW51bWJlcnNcIjogL1thLXo/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P11bXmEtej8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/MC05XSpbMC05XXxbMC05XVteYS16Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8wLTldKlthLXo/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P10vaSxcbiAgICAgICAgXCIudXBwZXJjYXNlLWxvd2VyY2FzZVwiOiAvW2Etej8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/XVteYS16Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9BLVo/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P10qW0EtWj8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/XXxbQS1aPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9dW15hLXo/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P0EtWj8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/XSpbYS16Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz9dLyxcbiAgICAgICAgXCIuc3BlY2lhbC1jaGFyc1wiOiAvW0A/IT8/Pz8kJSZcXC8oKT1cXCpcXCsjXFwtX1xcLjosO10vXG4gICAgfTtcbiAgICAkKGZpZWxkKS5vbigna2V5dXAgY2hhbmdlJywgZnVuY3Rpb24oZSkge1xuICAgICAgICB2YXIgc2VjdXJpdHlMZXZlbCA9IDE7XG4gICAgICAgIGlmIChmaWVsZC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVtIGluIG9wdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdHMuaGFzT3duUHJvcGVydHkoaXRlbSkpIHsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0gJChpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24gPSBvdXRwdXQuZmluZCgnLmljb24tc21hbGwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gb3B0c1tpdGVtXS50ZXN0KGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWQgJiYgKGl0ZW0gPT09IFwiLm1pbi1jaGFyc1wiIHx8IHNlY3VyaXR5TGV2ZWwgPj0gMikpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VjdXJpdHlMZXZlbCArKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0cHV0LnRvZ2dsZUNsYXNzKCd2YWxpZCcsIHZhbGlkKTtcbiAgICAgICAgICAgICAgICBpY29uLnByb3AoJ3RpdGxlJywgaWNvbi5kYXRhKHZhbGlkID8gJ3ZhbGlkLXRleHQnIDogJ25vdC12YWxpZC10ZXh0JykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyBcbiAgICAgICAgICAgIHNlY3VyaXR5TGV2ZWwgPSAwO1xuICAgICAgICB9XG4gICAgICAgICQoJy5zZWN1cml0eV9sZXZlbCcpLnJlbW92ZUNsYXNzKCdsZXZlbDAnKTtcbiAgICAgICAgJCgnLnNlY3VyaXR5X2xldmVsJykucmVtb3ZlQ2xhc3MoJ2xldmVsMScpO1xuICAgICAgICAkKCcuc2VjdXJpdHlfbGV2ZWwnKS5yZW1vdmVDbGFzcygnbGV2ZWwyJyk7XG4gICAgICAgICQoJy5zZWN1cml0eV9sZXZlbCcpLnJlbW92ZUNsYXNzKCdsZXZlbDMnKTtcbiAgICAgICAgJCgnLnNlY3VyaXR5X2xldmVsJykucmVtb3ZlQ2xhc3MoJ2xldmVsNCcpO1xuICAgICAgICAkKCcuc2VjdXJpdHlfbGV2ZWwnKS5hZGRDbGFzcygnbGV2ZWwnICsgc2VjdXJpdHlMZXZlbCk7XG4gICAgfSk7XG4gICAgdGhpcy5kb250TG9hZE1lQWdhaW4gPSAndHJ1ZSc7XG59XG5cbmZ1bmN0aW9uIGhpZGVQYXNzd29yZENyaXRlcmlhKGZpZWxkKSB7XG4gICAgaWYgKCQoJy5zZWN1cml0eV9sZXZlbCcpLmhhc0NsYXNzKCdsZXZlbDAnKSB8fCAkKCcuc2VjdXJpdHlfbGV2ZWwnKS5oYXNDbGFzcygnbGV2ZWwxJykpIHtcbiAgICAgICAgXG4gICAgfVxufVxuXG4kKGZ1bmN0aW9uKGV2dCkge1xuICAgICQoJyNpbnBQYXNzd29yZE5ldycpLmF0dHIoJ2RhdGEtZm9ybWVycm9yLWNoZWNrJywgJ21pbkxlbmd0aCcpO1xuICAgICQoJyNpbnBQYXNzd29yZE5ldycpLmF0dHIoJ2RhdGEtZm9ybWNoZWNrLW5vY2hlY2snLCAnJyk7XG4gICAgJCgnI2lucFBhc3N3b3JkTmV3JykuYXR0cignZGF0YS1mb3JtZXJyb3ItdGV4dCcsICdCaXR0ZSBnZWJlbiBTaWUgbWluZGVzdGVucyA4IFplaWNoZW4gZWluJyk7XG5cbiAgICAkKCcjaW5wUGFzc3dvcmRSZXBlYXQnKS5hdHRyKCdkYXRhLWZvcm1lcnJvci1jaGVjaycsICdlcXVhbHMnKTtcbiAgICAkKCcjaW5wUGFzc3dvcmRSZXBlYXQnKS5hdHRyKCdkYXRhLWZvcm1lcnJvci1lcXVhbHMnLCAnI2lucFBhc3N3b3JkTmV3Jyk7XG4gICAgJCgnI2lucFBhc3N3b3JkUmVwZWF0JykuYXR0cignZGF0YS1mb3JtY2hlY2stbm9jaGVjaycsICcnKTtcbiAgICAkKCcjaW5wUGFzc3dvcmRSZXBlYXQnKS5hdHRyKCdkYXRhLWZvcm1lcnJvci10ZXh0JywgJ1ZlcnRpcHB0PyBCaXR0ZSBQYXNzd29ydCBlcm5ldXQgZWluZ2ViZW4nKTtcblxuICAgICQoJyNpbnBQYXNzd29yZE5ldycpLm9uKCdmb2N1cycsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgIHBhc3N3b3JkQ3JpdGVyaWEodGhpcyk7XG4gICAgfSk7XG4gICAgJCgnI2lucFBhc3N3b3JkTmV3Jykub24oJ2JsdXInLCBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICBoaWRlUGFzc3dvcmRDcml0ZXJpYSh0aGlzKTtcbiAgICB9KTtcbn0pO1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIE1lbGR1bmdlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cblxuLy8gZ2xvYmFsZXMgRm9ybVZhbGlkYXRpb24tT2JqZWt0IChpbnN0YW56aWllcmJhcik6XG5mdW5jdGlvbiBGb3JtVmFsaWRhdGlvbihmb3JtLCBjb25mKSB7XG4gICAgdGhpcy5mb3JtID0gJChmb3JtKTtcbiAgICB0aGlzLmNvbmYgPSAkLmV4dGVuZCh3aW5kb3cuZm9ybVZhbGlkYXRpb25Db25maWcsIGNvbmZ8fHt9KTtcblxuICAgIGlmICh0aGlzLmZvcm0uZGF0YSgndmFsaWRhdGlvbk9iamVjdCcpKSAgIHsgcmV0dXJuOyB9Ly8gRm9ybXVsYXIgd3VyZGUgYmVyZWl0cyBiZWFyYmVpdGV0XG4gICAgaWYgKHRoaXMuZm9ybS5kYXRhKCdmb3JtY2hlY2stZGlzYWJsZWQnKSkgeyByZXR1cm47IH0vLyBGb3JtdWxhciBzb2xsIG5pY2h0IGJlYXJiZWl0ZXQgd2VyZGVuIChJY29ua2xpY2sgZ2VodCBoaWVyIG5pY2h0KVxuICAgIC8vIGRhdGEtZm9ybWNoZWNrLW5vY2hlY2s9XCJub2NoZWNrXCIgPT4gVmFsaWRpZXJ1bmcgYXVzZ2VzY2hhbHRldCAtIEljb25rbGljayBnZWh0IGhpZXIgYWJlciAoUGFyYW1ldGVyICBkYXRhLWZvcm1jaGVjay1ub2NoZWNrPVwibm9jaGVja1wiICB3aXJkIGluIGRpZSBGZWxkZXIgP2Jlcm5vbW1lbilcbiAgICB0aGlzLmluaXQoKTtcbn07XG4vKlxudmFyIHRlbXBwcCA9IHdpbmRvdy5zY3JvbGxUbztcbndpbmRvdy5zY3JvbGxUbyA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICBjb25zb2xlLmxvZygnc2Nyb2xsJywgeCwgeSk7XG4gICAgdGVtcHBwKHgsIHkpO1xufVxuLy8kKGZ1bmN0aW9uKCkgeyB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgd2luZG93LnNjcm9sbFRvKDAsIDEwNzgpOyB9LCAxMDAwKTsgfSk7XG4vKiovXG5cblxuLy8gSW5pdGlhbGlzaWVydW5ncy1NZXRob2RlbjpcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5mb3JtLmRhdGEoJ3ZhbGlkYXRpb25PYmplY3QnLCB0aGlzKTtcbiAgICB0aGlzLmNoZWNrcyA9IHRoaXMuY29uZi5jaGVja3M7XG4gICAgaWYgKCF0aGlzLmNoZWNrc1snX3JlcXVpcmVkJ10pIHtcbiAgICAgICAgdGhpcy5jaGVja3NbJ19yZXF1aXJlZCddID0gRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9fY2hlY2tfbm90RW1wdHk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdEZvcm0oKTtcbiAgICB0aGlzLl9pbml0Rm9ybWZpZWxkcygpO1xuICAgIHRoaXMuX2luaXRTdWJtaXRidXR0b25zKCk7XG4gICAgdGhpcy5faW5pdENoZWNrcygpO1xuICAgIHRoaXMuX2luaXRXYXJuaW5ncygpO1xuXG4gICAgLy92YXIgZmlyc3RFcnJvciA9ICQoJ2lucHV0LicrdGhpcy5jb25mLnNJbnZhbGlkQ2xhc3MrJywgc2VsZWN0LicrdGhpcy5jb25mLnNJbnZhbGlkQ2xhc3MsIHRoaXMuZm9ybSkuZmlyc3QoKTtcbiAgICAvLyBUZXh0YXJlYSBlcmc/bnp0ID0+IGFsbGVyZGluZ3MgU3BydW5nIHp1bSBGZWhsZXJmZWxkIGlzdCBuaWNodCBrb3JyZWt0ID8hXG4gICAgdmFyIGZpcnN0RXJyb3IgPSAkKCdpbnB1dC4nK3RoaXMuY29uZi5zSW52YWxpZENsYXNzKycsIHNlbGVjdC4nK3RoaXMuY29uZi5zSW52YWxpZENsYXNzKycsIHRleHRhcmVhLicrdGhpcy5jb25mLnNJbnZhbGlkQ2xhc3MsIHRoaXMuZm9ybSkuZmlyc3QoKTtcbiAgICBpZiAoZmlyc3RFcnJvci5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXcoZmlyc3RFcnJvcik7XG4gICAgICAgIGZpcnN0RXJyb3IudHJpZ2dlcignZm9ybXZhbGlkYXRpb24uc2hvd2Vycm9yJyk7XG4gICAgfVxufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5faW5pdEZvcm0gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgY2hlY2tzID0gdGhpcy5mb3JtLmF0dHIoJ2RhdGEtZm9ybWVycm9yLWNoZWNrJyk7XG4gICAgaWYgKGNoZWNrcykge1xuICAgICAgICAkKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcsIHRoaXMuZm9ybSkuZmlsdGVyKCcuJyt0aGlzLmNvbmYuaW52YWxpZENsYXNzKycsIC4nK3RoaXMuY29uZi5zSW52YWxpZENsYXNzKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLWZvcm1lcnJvci1jaGVjaycsICQodGhpcykuYXR0cignZGF0YS1mb3JtZXJyb3ItY2hlY2snKSsnICcrY2hlY2tzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBub2NoZWNrID0gdGhpcy5mb3JtLmF0dHIoJ2RhdGEtZm9ybWNoZWNrLW5vY2hlY2snKTtcbiAgICBpZiAobm9jaGVjaykge1xuICAgICAgICAkKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcsIHRoaXMuZm9ybSkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1mb3JtY2hlY2stbm9jaGVjaycsIG5vY2hlY2spO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9pbml0Rm9ybWZpZWxkcyA9IGZ1bmN0aW9uKCkge1xuICAgICQoJ1tyZXF1aXJlZF0sIFtkYXRhLWZvcm1lcnJvci1jaGVja10nLCB0aGlzLmZvcm0pLmZpbHRlcignOm5vdChpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAkdGhpcy5maW5kKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ3JlcXVpcmVkJywgICAgICAgICAgICAgJHRoaXMuYXR0cigncmVxdWlyZWQnKSlcbiAgICAgICAgICAgICAgICAgICAuYXR0cignZGF0YS1mb3JtZXJyb3ItY2hlY2snLCAkdGhpcy5hdHRyKCdkYXRhLWZvcm1lcnJvci1jaGVjaycpKTtcbiAgICAgICAgfSk7XG4gICAgICAgICR0aGlzLnJlbW92ZUF0dHIoJ3JlcXVpcmVkJykucmVtb3ZlQXR0cignZGF0YS1mb3JtZXJyb3ItY2hlY2snKTtcbiAgICB9KTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2luaXRTdWJtaXRidXR0b25zID0gZnVuY3Rpb24oKSB7XG4gICAgJCgnW2RhdGEtZm9ybXN1Ym1pdD1cIm9ubHlvbmNlXCJdJywgdGhpcy5mb3JtKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoJy5idG4td3JhcHBlcicpLmFkZENsYXNzKCdidG4tZGlzYWJsZWQnKTtcbiAgICAgICAgJCh0aGlzKS51bmJpbmQoJ2NsaWNrJyk7XG4gICAgICAgICQodGhpcy5mb3JtKS51bmJpbmQoJ3N1Ym1pdCcpO1xuICAgIH0pO1xufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5faW5pdENoZWNrcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSB0aGlzO1xuICAgICQoJ1tyZXF1aXJlZF0sIFtkYXRhLWZvcm1lcnJvci1jaGVja10nLCB0aGlzLmZvcm0pLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgICR0aGlzLmZpbmQoJ2lucHV0Om5vdChbdHlwZT1oaWRkZW5dKSwgc2VsZWN0LCB0ZXh0YXJlYScpLmRhdGEoJ2Zvcm1lcnJvci1jaGVjaycsICR0aGlzLmRhdGEoJ2Zvcm1lcnJvci1jaGVjaycpKS5hdHRyKCdyZXF1aXJlZCcsICR0aGlzLmF0dHIoJ3JlcXVpcmVkJykpO1xuICAgIH0pO1xuICAgICQoJ2lucHV0OnJhZGlvW3JlcXVpcmVkXScsIHRoaXMuZm9ybSkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1cIicrdGhpcy5uYW1lKydcIl0nLCB0aGlzLmZvcm0pLmF0dHIoJ3JlcXVpcmVkJywgdHJ1ZSk7XG4gICAgfSk7XG4gICAgJCgnW3JlcXVpcmVkXSwgW2RhdGEtZm9ybWVycm9yLWNoZWNrXScsIHRoaXMuZm9ybSkub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyQodGhpcykudHJpZ2dlcignYmx1cicpO1xuICAgIH0pLm9uKCdmb2N1cycsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGlucCA9ICQodGhpcyk7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoJGlucC5kYXRhKCdmb3JtdmFsaWRhdGlvbi1kZXNlbGVjdGZpZWxkJykpO1xuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KG9iai5mb3JtLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLWZpZWxkbG9zdCcpKTtcbiAgICAgICAgaWYgKCEkaW5wLmlzKCcuJytvYmouY29uZi5pbnZhbGlkQ2xhc3MrJywgLicrb2JqLmNvbmYuc0ludmFsaWRDbGFzcykgJiYgJGlucCAhPSBvYmouZm9ybS5kYXRhKCdmb3JtdmFsaWRhdGlvbi1sYXN0Zm9jdXNlZCcpKSB7XG4gICAgICAgICAgICBvYmouX2hpZGVFcnJvck1lc3NhZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgb2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tbGFzdGZvY3VzZWQnLCAkaW5wKTtcbiAgICAgICAgaWYgKCRpbnAuZGF0YSgnZm9ybXZhbGlkYXRpb24tc3RvcGV2ZW50cycpKSB7IHJldHVybiAkaW5wLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLXN0b3BldmVudHMnLCBmYWxzZSk7IH1cbiAgICAgICAgJGlucC50cmlnZ2VyKCdmb3JtdmFsaWRhdGlvbi5zZWxlY3RmaWVsZCcpO1xuICAgIH0pLm9uKCdibHVyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkaW5wID0gJCh0aGlzKTtcbiAgICAgICAgaWYgKCRpbnAuZGF0YSgnc3RvcGZvcm12YWxpZGF0aW9uLXN0b3BldmVudHMnKSkgeyByZXR1cm4gJGlucC5kYXRhKCdmb3JtdmFsaWRhdGlvbi1zdG9wZXZlbnRzJywgZmFsc2UpOyB9XG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgJGlucC5kYXRhKCdmb3JtdmFsaWRhdGlvbi1kZXNlbGVjdGZpZWxkJywgJGlucC50cmlnZ2VyKCdmb3JtdmFsaWRhdGlvbi5kZXNlbGVjdGZpZWxkJykpO1xuICAgICAgICB9LCAxMCk7XG4gICAgICAgIG9iai5mb3JtLmRhdGEoJ2Zvcm12YWxpZGF0aW9uLWZpZWxkbG9zdCcsIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyAkaW5wLnRyaWdnZXIoJ2Zvcm12YWxpZGF0aW9uLmZpZWxkbG9zdCcpOyB9LCAxNTApKTtcbiAgICB9KS5vbigna2V5ZG93biBtb3VzZXVwJywgZnVuY3Rpb24oKSB7XG4gICAgfSkub24oJ2Zvcm12YWxpZGF0aW9uLnNlbGVjdGZpZWxkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIC8vIHRyaWdnZXJlZCB3aGVuIHRoZSBmb3JtZmllbGQgaGFzIGJlZW4gc2VsZWN0ZWQgKHNpbWlsYXIgdG8gZm9jdXMpXG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcykuYXR0cigndGl0bGUnLCAnJyk7XG4gICAgICAgIGlmICgkdGhpcy5oYXNDbGFzcyhvYmouY29uZi5pbnZhbGlkQ2xhc3MpIHx8ICR0aGlzLmhhc0NsYXNzKG9iai5jb25mLnNJbnZhbGlkQ2xhc3MpKSB7XG4gICAgICAgICAgICBvYmouX3Nob3dFcnJvck1lc3NhZ2UoJHRoaXMpO1xuICAgICAgICB9XG5cbiAgICB9KS5vbignZm9ybXZhbGlkYXRpb24uZGVzZWxlY3RmaWVsZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyB0cmlnZ2VyZWQgd2hlbiB0aGUgZm9ybWZpZWxkIGhhcyBiZWVuIGRlc2VsZWN0ZWQgKHNpbWlsYXIgdG8gYmx1cilcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKS5hdHRyKCd0aXRsZScsICcnKTtcbiAgICAgICAgb2JqLl92YWxpZGF0ZSgkdGhpcyk7XG4gICAgICAgIG9iai5faGlkZUVycm9yTWVzc2FnZXMob2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tY3VycmVudG1lc3NhZ2UnKSk7XG5cbiAgICB9KS5vbignZm9ybXZhbGlkYXRpb24uZmllbGRsb3N0JywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIC8vIHRyaWdnZXJlZCB3aGVuIHRoZSBmb3JtZmllbGQgaGFzIGJlZW4gZGVzZWxlY3RlZCB0byBhbiB1bmtub3duIHJlYXNvbiAoZS5nLiBhIGRpZmZlcmVudCBmb3JtIGhhcyBiZWVuIGZvY3VzZWQsIG9yIHRoZSBicm93c2VyIG1vdmVkIHRvIHRoZSBiYWNrZ3JvdW5kKVxuICAgICAgICBpZighJHRoaXMuaXMoJzpmb2N1cycpKSB7IC8vIGZpeCBmb3IgTk9LSUEgTHVtaWEgOTIwXG4gICAgICAgICAgICAkdGhpcy5hdHRyKCd0aXRsZScsICcnKTtcbiAgICAgICAgICAgIG9iai5faGlkZUVycm9yTWVzc2FnZXMoKTtcbiAgICAgICAgfVxuICAgIH0pLm9uKCdmb3JtdmFsaWRhdGlvbi5zaG93ZXJyb3InLCBmdW5jdGlvbigpIHtcbiAgICAgICAgLy8gdHJpZ2dlcmVkIHdoZW4gdGhlIGZvcm1maWVsZCdzIGVycm9yIG1lc3NhZ2UgaXMgZGlzcGxheWVkXG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcykuYXR0cigndGl0bGUnLCAnJyk7XG4gICAgICAgIG9iai5fc2hvd0Vycm9yTWVzc2FnZSgkdGhpcy5mb2N1cygpKTtcbiAgICAgICAgb2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tY3VycmVudG1lc3NhZ2UnLCAkdGhpcyk7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQob2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tZmllbGRsb3N0JykpO1xuXG4gICAgfSkub24oJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGlmICgkdGhpcy5pcygnOnJhZGlvLCA6Y2hlY2tib3gnKSkge1xuICAgICAgICAgICAgb2JqLl9oaWRlRXJyb3JNZXNzYWdlcygpO1xuICAgICAgICAgICAgb2JqLl92YWxpZGF0ZSgkdGhpcyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2luaXRXYXJuaW5ncyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvYmogPSB0aGlzO1xuICAgICQodGhpcy5jb25mLmVycm9yTXNnVG9nZ2xlU2VsZWMsIHRoaXMuZm9ybSkub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHdybiA9ICQodGhpcyk7XG4gICAgICAgIHZhciAkbGZjID0gb2JqLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tbGFzdGZvY3VzZWQnKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICRsZmNcbiAgICAgICAgICAgICYmICAkd3JuLmNsb3Nlc3Qob2JqLmNvbmYuaW5wdXRTZXRDb250YWluZXIpLmZpbmQoJGxmYykubGVuZ3RoXG4gICAgICAgICAgICAmJiAgJGxmYy5pcygnLicrb2JqLmNvbmYuaW52YWxpZENsYXNzKycsIC4nK29iai5jb25mLnNJbnZhbGlkQ2xhc3MpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdmFyICRpbnAgPSBvYmouZm9ybS5kYXRhKCdmb3JtdmFsaWRhdGlvbi1sYXN0Zm9jdXNlZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICRpbnAgPSAkKCcuJytvYmouY29uZi5pbnZhbGlkQ2xhc3MrJywgLicrb2JqLmNvbmYuc0ludmFsaWRDbGFzcywgJHdybi5jbG9zZXN0KG9iai5jb25mLmlucHV0U2V0Q29udGFpbmVyKSkuZmlsdGVyKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcpLmZpcnN0KCkuZGF0YSgnZm9ybXZhbGlkYXRpb24tc3RvcGV2ZW50cycsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkbXNnID0gb2JqLl9nZXRFcnJvck1lc3NhZ2UoJGlucCk7XG4gICAgICAgIGlmICgkbXNnLmZpbHRlcignOnZpc2libGUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICRtc2cuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGlucC50cmlnZ2VyKCdmb3JtdmFsaWRhdGlvbi5zaG93ZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJC51YS5icm93c2VyLm1zaWUpIHtcbiAgICAgICAgICAgICRpbnAuZGF0YSgnZm9ybXZhbGlkYXRpb24tc3RvcGV2ZW50cycsIHRydWUpLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgJGlucC5kYXRhKCdmb3JtdmFsaWRhdGlvbi1zdG9wZXZlbnRzJywgdHJ1ZSkuZm9jdXMoKTsgfSwgMTApO1xuICAgICAgICB9XG4gICAgfSkuY3NzKCdjdXJzb3InLCAncG9pbnRlcicpO1xufTtcblxuXG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldERlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICAvL2NvbnNvbGUubG9nKCRpbnAsICRpbnAuaXMoJzpjaGVja2JveCcpKVxuICAgIGlmICgkaW5wLmlzKCc6cmFkaW8nKSkgeyByZXR1cm4gJyc7IH1cbiAgICBpZiAoJGlucC5pcygnOmNoZWNrYm94JykpIHsgcmV0dXJuICcnOyB9XG4gICAgaWYgKCRpbnAuZGF0YSgnZm9ybWVycm9yLWRlZmF1bHRWYWx1ZScpKSB7IHJldHVybiAkaW5wLmRhdGEoJ2Zvcm1lcnJvci1kZWZhdWx0VmFsdWUnKTsgfVxuICAgIGlmICgkaW5wLmlzKCdzZWxlY3QnKSkgeyAkaW5wLmRhdGEoJ2Zvcm1lcnJvci1kZWZhdWx0VmFsdWUnLCAkKCdvcHRpb25bc2VsZWN0ZWRdLCBvcHRpb246Zmlyc3QnLCAkaW5wKS5maXJzdCgpLnZhbCgpKTsgfVxuICAgIGVsc2UgeyAkaW5wLmRhdGEoJ2Zvcm1lcnJvci1kZWZhdWx0VmFsdWUnLCAkaW5wLmdldCgwKS5kZWZhdWx0VmFsdWUpOyB9XG4gICAgcmV0dXJuICRpbnAuZGF0YSgnZm9ybWVycm9yLWRlZmF1bHRWYWx1ZScpO1xufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fZ2V0VmFsdWUgPSBmdW5jdGlvbigkaW5wKSB7XG4gICAgLy9jb25zb2xlLmxvZygnZ2V0VmFsdWUnLCAkaW5wLCAkaW5wLmlzKCc6Y2hlY2tib3gnKSwgJGlucC5pcygnOmNoZWNrZWQnKSk7XG4gICAgaWYgKCRpbnAuaXMoJzpjaGVja2JveCcpKSB7IHJldHVybiAkaW5wLmlzKCc6Y2hlY2tlZCcpID8gJGlucC52YWwoKSA6ICcnOyB9XG4gICAgaWYgKCRpbnAuaXMoJzpyYWRpbycpKSAgICB7IHJldHVybiAkaW5wLmNsb3Nlc3QoJ2Zvcm0nKS5maW5kKCdpbnB1dFtuYW1lPVwiJyskaW5wLmF0dHIoJ25hbWUnKSsnXCJdOmNoZWNrZWQnKS52YWwoKSB8fCAnJzsgfVxuICAgIHJldHVybiAkaW5wLnZhbCgpO1xufTtcblxuXG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX3ZhbGlkYXRlID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciAkZWxzID0gdGhpcy5fZ2V0RmllbGRFbGVtZW50cygkaW5wKTtcbiAgICB2YXIgJGNudCA9IHRoaXMuX2dldEZpZWxkQ29udGFpbmVyKCRlbHMpO1xuICAgIHZhciAkc3RyID0gdGhpcy5fZ2V0RWxlbWVudFN0cnVjdHVyZSgkZWxzLCAkY250KTtcbiAgICAvKlxuICAgIGNvbnNvbGUubG9nKCdpbnAnLCAkaW5wKTtcbiAgICBjb25zb2xlLmxvZygnZWxzJywgJGVscyk7XG4gICAgY29uc29sZS5sb2coJ2NudCcsICRjbnQpO1xuICAgIGNvbnNvbGUubG9nKCdzdHInLCAkc3RyKTtcbiAgICAvKiovXG4gICAgdmFyIG9iaiA9IHRoaXM7XG4gICAgdmFyIGlzVmFsaWQgPSB0cnVlO1xuICAgIGlmICgkaW5wLmF0dHIoJ2RhdGEtZm9ybWNoZWNrLW5vY2hlY2snKSkge1xuICAgICAgICBpc1ZhbGlkID0gISRpbnAuaGFzQ2xhc3ModGhpcy5jb25mLnNJbnZhbGlkQ2xhc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkaW5wLmF0dHIoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgJj0gdGhpcy5jaGVja3NbJ19yZXF1aXJlZCddKCRpbnApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjaGVja3MgPSAoJGlucC5hdHRyKCdkYXRhLWZvcm1lcnJvci1jaGVjaycpfHwnJykuc3BsaXQoJyAnKTtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNoZWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZih0aGlzLmNoZWNrc1tjaGVja3NbaV1dKT09PSdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkICY9IHRoaXMuY2hlY2tzW2NoZWNrc1tpXV0oJGlucCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgJGlucC5kYXRhKCdpc1ZhbGlkJywgaXNWYWxpZCk7XG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgJHN0ci5yZW1vdmVDbGFzcyh0aGlzLmNvbmYuaW52YWxpZENsYXNzKycgJyt0aGlzLmNvbmYuc0ludmFsaWRDbGFzcylcbiAgICAgICAgICAgIC5hZGRDbGFzcyAgICh0aGlzLmNvbmYudmFsaWRDbGFzcyk7XG4gICAgICAgIC8vIHdhciBkYXMgZj9yIGRpZSBLbGFzc2UgJ2hhc0Vycm9yJyBpbSBGaWVsZHNldD8gZHJpbmxhc3NlbiBvZGVyIHJhdXM/IExvZ2ludmVyaGFsdGVuIGhhdCBzaWNoIGdlP25kZXJ0IDotKFxuICAgICAgICAvL3ZhciAkdGVtcCA9ICRzdHIuY2xvc2VzdCgnZmllbGRzZXQuJyt0aGlzLmNvbmYuaW52YWxpZENsYXNzKycsIGZpZWxkc2V0LicrdGhpcy5jb25mLnNJbnZhbGlkQ2xhc3MpO1xuICAgICAgICAvL2lmICgkdGVtcC5sZW5ndGggJiYgJHRlbXAuZmluZCgnLicrdGhpcy5jb25mLmludmFsaWRDbGFzcysnLCAuJyt0aGlzLmNvbmYuc0ludmFsaWRDbGFzcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vICAgICRzdHIuY2xvc2VzdCgnZmllbGRzZXQnKS5yZW1vdmVDbGFzcyh0aGlzLmNvbmYuaW52YWxpZENsYXNzKycgJyt0aGlzLmNvbmYuc0ludmFsaWRDbGFzcykuYXR0cignc2VydmVyY2hlY2stY29udGFpbmVyJywgdHJ1ZSk7XG4gICAgICAgIC8vfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRzdHIucmVtb3ZlQ2xhc3ModGhpcy5jb25mLnZhbGlkQ2xhc3MgICsnICcrdGhpcy5jb25mLnNWYWxpZENsYXNzKVxuICAgICAgICAgICAgLmFkZENsYXNzICAgKHRoaXMuY29uZi5pbnZhbGlkQ2xhc3MpO1xuICAgICAgICAvL2lmICgkc3RyLmNsb3Nlc3QoJ2ZpZWxkc2V0W3NlcnZlcmNoZWNrLWNvbnRhaW5lcl0nKS5maW5kKCcuJyt0aGlzLmNvbmYuaW52YWxpZENsYXNzKycsIC4nK3RoaXMuY29uZi5zSW52YWxpZENsYXNzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgICRzdHIuY2xvc2VzdCgnZmllbGRzZXQnKS5hZGRDbGFzcyh0aGlzLmNvbmYuaW52YWxpZENsYXNzKycgJyt0aGlzLmNvbmYuc0ludmFsaWRDbGFzcyk7XG4gICAgICAgIC8vfVxuICAgIH1cbiAgICAkKCdbcmVxdWlyZWRdLCBbZGF0YS1mb3JtZXJyb3ItY2hlY2tdJywgJGNudCkuZmlsdGVyKCcuJytvYmouY29uZi5pbnZhbGlkQ2xhc3MrJywgLicrb2JqLmNvbmYuc0ludmFsaWRDbGFzcykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICRzdHIgPSBvYmouX2dldEVsZW1lbnRTdHJ1Y3R1cmUoJCh0aGlzKSwgJGNudCk7XG4gICAgICAgICRzdHIucmVtb3ZlQ2xhc3Mob2JqLmNvbmYudmFsaWRDbGFzcyAgKycgJytvYmouY29uZi5zVmFsaWRDbGFzcylcbiAgICAgICAgICAgIC5hZGRDbGFzcyAgIChvYmouY29uZi5pbnZhbGlkQ2xhc3MpO1xuICAgIH0pO1xufTtcblxuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9idWlsZEVycm9yTWVzc2FnZSA9IGZ1bmN0aW9uKCRpbnAsICRyb290LCAkaHRtbCkge1xuICAgIGlmICgkKCc+KicsICRyb290KS5maWx0ZXIoJGlucCkubGVuZ3RoKSB7XG4gICAgICAgICRpbnAuYWZ0ZXIoJGh0bWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRyb290LmFwcGVuZCgkaHRtbCk7XG4gICAgfVxufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fZ2V0RXJyb3JNZXNzYWdlID0gZnVuY3Rpb24oJGlucCkge1xuICAgIGlmICgkaW5wLmF0dHIoJ2RhdGEtZm9ybWVycm9yLXRleHQnKT09PScnKSB7IHJldHVybiAkKCc8c3Bhbi8+Jyk7IH1cbiAgICB2YXIgJHBhciA9ICRpbnAucGFyZW50cyh0aGlzLmNvbmYuaW5wdXRDb250YWluZXIpLmZpcnN0KCk7XG4gICAgaWYgKCQodGhpcy5jb25mLmVycm9yTXNnU2VsZWMrJyNlcnJvcm1zZy1mb3ItJyskaW5wLmF0dHIoJ2lkJykucmVwbGFjZSgvXFwuL2csICdcXFxcLicpLnJlcGxhY2UoL1xcOi9nLCAnXFxcXDonKSwgJHBhcikubGVuZ3RoPT09MCkge1xuICAgICAgICB2YXIgJG1zZyA9ICQodGhpcy5jb25mLmVycm9yTXNnRWxlbVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xce3RleHRcXH0vZywgICRpbnAuYXR0cignZGF0YS1mb3JtZXJyb3ItdGV4dCcpfHx0aGlzLmNvbmYuZGVmYXVsdEVycm9yTXNnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xce2lkXFx9L2csICAgICRpbnAuYXR0cignaWQnKXx8JycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFx7Y2xhc3NcXH0vZywgJGlucC5hdHRyKCdkYXRhLWZvcm1lcnJvci1jbGFzcycpfHwnJylcbiAgICAgICAgKS5hdHRyKCdpZCcsICdlcnJvcm1zZy1mb3ItJyskaW5wLmF0dHIoJ2lkJykpLmhpZGUoKTtcbiAgICAgICAgdGhpcy5jb25mLmVycm9yTXNnQnVpbGRlcigkaW5wLCAkcGFyLCAkbXNnKTtcbiAgICB9XG4gICAgcmV0dXJuICQodGhpcy5jb25mLmVycm9yTXNnU2VsZWMrJyNlcnJvcm1zZy1mb3ItJyskaW5wLmF0dHIoJ2lkJykucmVwbGFjZSgvXFwuL2csICdcXFxcLicpLnJlcGxhY2UoL1xcOi9nLCAnXFxcXDonKSwgJHBhcik7XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9zaG93RXJyb3JNZXNzYWdlID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmZvcm0uZGF0YSgnZm9ybXZhbGlkYXRpb24tY3VycmVudG1lc3NhZ2UnLCAkaW5wKTtcbiAgICB0aGlzLl9oaWRlRXJyb3JNZXNzYWdlcygpO1xuICAgICRpbnAuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgc2VsZi5fZ2V0RXJyb3JNZXNzYWdlKCQodGhpcykpLnNob3coKTtcbiAgICB9KTtcbn07XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2hpZGVFcnJvck1lc3NhZ2VzID0gZnVuY3Rpb24oJGlucCkge1xuICAgIHZhciAkbXNnID0gKCRpbnAgJiYgJGlucC5sZW5ndGgpID8gdGhpcy5fZ2V0RXJyb3JNZXNzYWdlKCRpbnApIDogJyc7XG4gICAgdmFyICRlcnJNc2dzID0gJCh0aGlzLmNvbmYuZXJyb3JNc2dTZWxlYywgdGhpcy5mb3JtKS5maWx0ZXIoJzpub3QoLmZvcmNlZE1lc3NhZ2UpJyk7XG4gICAgLy9jb25zb2xlLmxvZygkZXJyTXNncyk7XG4gICAgaWYgKCRtc2cubGVuZ3RoKSB7XG4gICAgICAgICRlcnJNc2dzLmZpbHRlcihmdW5jdGlvbigpIHsgcmV0dXJuICEkKHRoaXMpLmlzKCRtc2cpOyB9KS5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJGVyck1zZ3MuaGlkZSgpO1xuICAgIH1cbn07XG5cblxuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9zY3JvbGxJbnRvVmlldyA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICB2YXIgdG9wUG9zID0gKCRpbnAub2Zmc2V0KCl8fHt0b3A6MH0pLnRvcDtcbiAgICB2YXIgJHdpbiA9ICQod2luZG93KTtcbiAgICAvLyBUT0RPOiBQb3NpdGlvbmllcnVuZyB3aXJkIG5vY2ggbmljaHQgc2lubnZvbGwgYmVyZWNobmV0XG4gICAgLy8gPT4gVmlld3BvcnQgbXVzcyBhdXNnZXdlcnRldCB3ZXJkZW4sIEg/aGUgZGVzIEVpbmdhYmVmZWxkZXMgKFRleHRhcmVhKSBtdXNzIGJlYWNodGV0IHdlcmRlbixcbiAgICAvLyAgICB2ZXJzY2hpZWRlbmUgTT9nbGljaGtlaXRlbiBkZXIgc2lubnZvbGxlbiBFcmdlYm5pc3Bvc2l0aW9uIG0/c3NlbiBiZWFjaHRldCB3ZXJkZW5cbiAgICAvL2NvbnNvbGUubG9nKCR3aW4uaGVpZ2h0KCksIHRvcFBvcywgJHdpbi5oZWlnaHQoKTw9dG9wUG9zKzEwMCwgdG9wUG9zLXBhcnNlSW50KCR3aW4uaGVpZ2h0KCkvMywxMCkpO1xuICAgIGlmICgkd2luLmhlaWdodCgpIDw9IHRvcFBvcyArIDEwMCkge1xuICAgICAgICAkd2luLnNjcm9sbFRvcCh0b3BQb3MgLSBwYXJzZUludCgkd2luLmhlaWdodCgpLzMsIDEwKSk7XG4gICAgfVxufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fZ2V0RmllbGRFbGVtZW50cyA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICAvL3JldHVybiAkKCdpbnB1dFtjbGFzcyo9YmlydGhdJywgdGhpcy5mb3JtKTsvLyBURVNUSU5HXG4gICAgdmFyIG9iaiA9IHRoaXM7XG4gICAgaWYgKCRpbnAuaXMoJzpyYWRpbywgOmNoZWNrYm94JykpIHtcbiAgICAgICAgJGlucCA9ICRpbnAuYWRkKCQoJ2lucHV0W25hbWU9XCInKyRpbnAuYXR0cignbmFtZScpKydcIl0nLCB0aGlzLmZvcm0pKTtcbiAgICB9XG4gICAgJGlucC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAkaW5wID0gJGlucC5hZGQoJCgnbGFiZWxbZm9yPVwiJyskKHRoaXMpLmF0dHIoJ2lkJykrJ1wiXScpKS5hZGQoJGlucC5jbG9zZXN0KG9iai5jb25mLmlucHV0V3JhcHBlclNlbGVjKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICRpbnA7XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9nZXRGaWVsZENvbnRhaW5lciA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICB2YXIgb2JqID0gdGhpcztcbiAgICB2YXIgJGVscyA9ICRpbnAuY2xvc2VzdChvYmouY29uZi5pbnB1dFNldENvbnRhaW5lcik7XG4gICAgLyokaW5wLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICRlbHMuYWRkKCQodGhpcykuY2xvc2VzdChvYmouY29uZi5pbnB1dFNldENvbnRhaW5lcikpO1xuICAgIH0pOyovXG4gICAgcmV0dXJuICRlbHM7XG59O1xuRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9nZXRFbGVtZW50U3RydWN0dXJlID0gZnVuY3Rpb24oJGZyb20sICR0bykge1xuICAgIHZhciAkcmVzdWx0ID0gJCgkZnJvbSk7XG4gICAgJGZyb20uZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgJHJlc3VsdCA9ICRyZXN1bHQuYWRkKCQodGhpcykucGFyZW50c1VudGlsKCQodGhpcykuY2xvc2VzdCgkdG8pKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuICRyZXN1bHQuYWRkKCR0byk7XG59O1xuXG5cbi8vIFN0YW5kYXJkLVByP2YtTWV0aG9kZW46XG5Gb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX19jaGVja19ub3RFbXB0eSA9IGZ1bmN0aW9uKCRpbnApIHtcbiAgICByZXR1cm4gISFGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldFZhbHVlKCRpbnApO1xufTtcbkZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fX2NoZWNrX3ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uKCRpbnApIHtcbi8vY29uc29sZS5sb2coJ3ZhbHVlQ2hhbmdlZD8gdmFsdWU6JywgRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9nZXRWYWx1ZSgkaW5wKSwgJ2RlZmF1bHR2YWx1ZTonLCBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldERlZmF1bHRWYWx1ZSgkaW5wKSwgJ25vdGVxdWFsOicsIEZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fZ2V0VmFsdWUoJGlucCkgIT0gRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9nZXREZWZhdWx0VmFsdWUoJGlucCkpO1xuICAgIHJldHVybiBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldFZhbHVlKCRpbnApICE9IEZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fZ2V0RGVmYXVsdFZhbHVlKCRpbnApO1xufTtcblxuXG4vLyBhdXRvbWF0aXNjaGUgSW5pdGlhbGlzaWVydW5nOlxuJChmdW5jdGlvbigpIHtcblx0XG4gICAgLy8gcGxhY2Vob2xkZXItQXR0cmlidXQgZj9yIGFsbGUgQnJvd3NlciB2ZXJmP2diYXIgbWFjaGVuOlxuICAgIGlmICgkLmZuLmh0bWw1cGxhY2Vob2xkZXIpIHtcbiAgICAgICAgJCgnaW5wdXRbdHlwZT10ZXh0XVtwbGFjZWhvbGRlcl0nKS5odG1sNXBsYWNlaG9sZGVyKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdC1Lb25maWd1cmF0aW9uOlxuICAgIHZhciBuc1ByZWZpeCA9ICQudWEuYnJvd3Nlci5uYW1lID09PSAnbXNpZScgJiYgJC51YS5icm93c2VyLm1zaWUgPCA4ID8gJycgOiAnaFxcXFw6JztcbiAgICB3aW5kb3cuZm9ybVZhbGlkYXRpb25Db25maWcgPSAkLmV4dGVuZCh0cnVlLCB7XG4gICAgICAgIGNoZWNrczoge1xuICAgICAgICAgICAgX3JlcXVpcmVkOiAgICAgRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9fY2hlY2tfbm90RW1wdHksXG4gICAgICAgICAgICBzZXJ2ZXJlcnJvcjogICBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX19jaGVja192YWx1ZUNoYW5nZWQsXG4gICAgICAgICAgICBzZXJ2ZXJjaGVja2VkOiBGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX19jaGVja192YWx1ZUNoYW5nZWQsXG4gICAgICAgICAgICAvL25hbWU6ICAgICAgICAgIGZ1bmN0aW9uKCRpbnApIHsgcmV0dXJuICFGb3JtVmFsaWRhdGlvbi5wcm90b3R5cGUuX2dldFZhbHVlKCRpbnApIHx8IEZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fZ2V0VmFsdWUoJGlucCkgPT0gJ2Zvbyc7IH0sXG4gICAgICAgICAgICAvL25hbWU6ICAgICAgICAgIEZvcm1WYWxpZGF0aW9uLnByb3RvdHlwZS5fX2NoZWNrX25hbWUsXG4gICAgICAgICAgICAvL25hbWU6ICAgICAgICAgIG15TmFtZUNoZWNrRnVuY3Rpb24sXG4gICAgICAgICdfJzonJ30sXG4gICAgICAgIGludmFsaWRDbGFzczogICAgICAgICdoYXNFcnJvcicsXG4gICAgICAgIHZhbGlkQ2xhc3M6ICAgICAgICAgICdqc1ZhbGlkJyxcbiAgICAgICAgc0ludmFsaWRDbGFzczogICAgICAgJ2hhc0Vycm9yJyxcbiAgICAgICAgc1ZhbGlkQ2xhc3M6ICAgICAgICAgJ2lzVmFsaWQnLFxuICAgICAgICBlcnJvck1zZ0VsZW06ICAgICAgICAnPGg6b3V0cHV0IGNsYXNzPVwiZmVlZGJhY2sgZmVlZGJhY2ste2lkfSBmZWVkYmFjay17Y2xhc3N9XCIgZGF0YS1mb3I9XCJ7aWR9XCI+PHA+e3RleHR9PC9wPjxzcGFuIGNsYXNzPVwibm9zZVwiPjwvc3Bhbj48L2g6b3V0cHV0PicsXG4gICAgICAgIGVycm9yTXNnU2VsZWM6ICAgICAgIG5zUHJlZml4KydvdXRwdXQuZmVlZGJhY2snLFxuICAgICAgICBlcnJvck1zZ1RvZ2dsZVNlbGVjOiBuc1ByZWZpeCsnb3V0cHV0LnN0YXR1cycsXG4gICAgICAgIGRlZmF1bHRFcnJvck1zZzogICAgICdCaXR0ZSBFaW5nYWJlZmVsZCBhdXNmP2xsZW4gb2RlciBFaW5nYWJlIGtvcnJpZ2llcmVuJyxcbiAgICAgICAgZXJyb3JNc2dCdWlsZGVyOiAgICAgRm9ybVZhbGlkYXRpb24ucHJvdG90eXBlLl9idWlsZEVycm9yTWVzc2FnZSxcbiAgICAgICAgaW5wdXRXcmFwcGVyU2VsZWM6ICAgJy5zZWxlY3Qtd3JhcHBlcicsXG4gICAgICAgIGlucHV0Q29udGFpbmVyOiAgICAgICd0ZCwgLml0ZW0tZGF0YSwgZmllbGRzZXQsIGZvcm0sIGZvcm0uZm9ybS1sb2dpbiAuZm9ybS1pdGVtJywvLyBoaWVyaW4gd2lyZCBkaWUgSW5saW5lLUZlaGxlcm1lbGR1bmcgZWluZ2VmP2d0XG4gICAgICAgIGlucHV0U2V0Q29udGFpbmVyOiAgICd0ciwgLmZvcm0taXRlbSwgZmllbGRzZXQsIGZvcm0nLC8vIGdydXBwaWVydCBhbGxlIEVpbmdhYmVmZWxkZXIsIGRpZSB6dSBlaW5lbSBGZWhsZXItSWNvbiBnZWg/cmVuXG4gICAgJ18nOicnfSwgd2luZG93LmZvcm1WYWxpZGF0aW9uQ29uZmlnfHx7fSk7XG5cbiAgICAvLyBJbml0aWFsaXNpZXJ1bmcgYWxsZXIgRm9ybXVsYXJlOlxuICAgICQoJ2Zvcm0nKS5lYWNoKGZ1bmN0aW9uKCkgeyBuZXcgRm9ybVZhbGlkYXRpb24odGhpcywgd2luZG93LmZvcm1WYWxpZGF0aW9uQ29uZmlnKTsgfSk7XG5cbn0pO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxufCBGdW5rdGlvbiBDYWxsIGFmdGVyIHdpY2tldCBBamF4IHJlcXVlc3QgY29tcGxldGUgIHxcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XG4gICAgd2luZG93LndpY2tldEFqYXhSZXF1ZXN0Q29tcGxldGUgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgJCgnZm9ybScpLmVhY2goZnVuY3Rpb24oKSB7IG5ldyBGb3JtVmFsaWRhdGlvbih0aGlzLCB3aW5kb3cuZm9ybVZhbGlkYXRpb25Db25maWcpOyB9KTsgICAgICBcbiAgICB9IFxufSk7In0sICJoZWFkZXJzU2l6ZSI6IDI3MiwgImJvZHlTaXplIjogMjgyNzE4LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyODI5OTB9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDAuMDA2LCAiY29ubmVjdCI6IDcuMDI3LCAic3NsIjogOS4wODUsICJzZW5kIjogMCwgIndhaXQiOiAxNC4yMjYsICJyZWNlaXZlIjogMjkuNzV9LCAicGFnZXJlZiI6ICJwYWdlQDZjZDhmNzlkZjJhOGFiMDBiZGFhMGRkNDlkN2I4ZGZlIiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjAwMTo4ZDg6MTAwZjpmMDAwOjoyZDNdIiwgIl9zZXJ2ZXJQb3J0IjogODAsICJfc2VjdXJpdHlEZXRhaWxzIjoge319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI2VDA1OjEwOjEyLjM2MFoiLCAidGltZSI6IDM2Ljg4Mjk5OTk5OTk5OTk5NiwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHA6Ly9qb3JhbWVkaWEuZGUvTW9iaWxlJTIwTG9naW5fZmlsZXMvbWFzLWFzcC5qcy5kb3dubG9hZCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJBY2NlcHQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJIb3N0IiwgInZhbHVlIjogImpvcmFtZWRpYS5kZSJ9LCB7Im5hbWUiOiAiUmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwOi8vam9yYW1lZGlhLmRlL2luZGV4Mi5odG1sIn0sIHsibmFtZSI6ICJVc2VyLUFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiAzMTYsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiT0siLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQWNjZXB0LVJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJDb250ZW50LUxlbmd0aCIsICJ2YWx1ZSI6ICIzNTQ4In0sIHsibmFtZSI6ICJDb250ZW50LVR5cGUiLCAidmFsdWUiOiAidGV4dC9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTIgR01UIn0sIHsibmFtZSI6ICJFVGFnIiwgInZhbHVlIjogIlwiZGRjLTU5OGNlZDNmMDllODBcIiJ9LCB7Im5hbWUiOiAiS2VlcC1BbGl2ZSIsICJ2YWx1ZSI6ICJ0aW1lb3V0PTE1In0sIHsibmFtZSI6ICJMYXN0LU1vZGlmaWVkIiwgInZhbHVlIjogIlR1ZSwgMDMgRGVjIDIwMTkgMTY6MDI6NTAgR01UIn0sIHsibmFtZSI6ICJTZXJ2ZXIiLCAidmFsdWUiOiAiQXBhY2hlIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IDM1NDgsICJtaW1lVHlwZSI6ICJ0ZXh0L2phdmFzY3JpcHQiLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJNQVMgPSB7XHJcbiAgICB1YTogZnVuY3Rpb24gKG8sIHgsIGksIHYsIHcsIGQpIHtcclxuICAgICAgICBvID0geyB1YTogbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLCBpbmZvOiB7fSB9LCB4ID0gJ2Jyb3dzZXInLCB2ID0gJ3ZlcnNpb24nLCB3ID0gd2luZG93LCBkID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgby51YS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnOycpLnJlcGxhY2UoL1xccyooXFx3Kj9cXCA/XFx3K1tcXDpcXHNdP1teXFxkXFxzO10qPylbXFwvXFwgO10oXFxkWy5cXHddKnwpL2csIGZ1bmN0aW9uKGYsIGssIHYpIHsgby5pbmZvW2tdID0gby5pbmZvW2tdIHx8IHYgfHwgITA7IH0pO1xyXG4gICAgICAgICdtc2llMW9wcjFmaXJlZm94MXNlYW1vbmtleTFhdXJvcmExaXJvbjFjaHJvbWUxbW9iaWxlIHNhZmFyaTFzYWZhcmkxb3BlcmExd2luZG93czB3aW5kb3dzIG50MHdpbmRvd3MgcGhvbmUwd2luZG93cyBydDBtYWMgb3Mwb3MgeDBhbmRyb2lkMGlwaG9uZTBpcGFkMGlwb2QwYmxhY2tiZXJyeTByaW0wbGludXgwJy5yZXBsYWNlKC8oXFxEKykoXFxkKS9nLCBmdW5jdGlvbihuLCBjLCBkKSB7IG4gPSArZCA/IHggOiAnb3MnOyBvLmluZm9bY10gJiYgKG9bbl0gPSBvW25dIHx8IHsgbmFtZTogYyA9PSAnb3ByJyA/ICdvcGVyYScgOiAoYyA9PSAnc2FmYXJpJyAmJiBvLmluZm8uYW5kcm9pZCB8fCBjID09ICdjaHJvbWUnICYmICtvLmluZm9bdl0gPT0gMSkgfHwgKG8uaW5mby5hbmRyb2lkICYmIGMgPT0gJ21vYmlsZSBzYWZhcmknKSA/ICduYXRpdmUnIDogYyA9PSAnb3MgeCcgPyAnbWFjIG9zJyA6IGMsIHZlcnNpb246ICgrZCA/IG8uaW5mb1t2XSA6IDApIHx8IG8uaW5mb1tjXSB9LCBvW25dW29bbl0ubmFtZV0gPSBwYXJzZUZsb2F0KG9bbl1bdl0pIHx8IG9bbl1bdl0pIH0pO1xyXG4gICAgICAgIChpID0gK28uaW5mby50cmlkZW50ICsgNCkgJiYgKG9beF0gPSB7IG5hbWU6ICdtc2llJywgbXNpZTogaSwgdmVyc2lvbjogaSB9KTtcclxuICAgICAgICBvW3hdID0gb1t4XSB8fCB7IG5hbWU6ICcnLCB2ZXJzaW9uOiAnJyB9O1xyXG4gICAgICAgIG8ub3MgPSBvLm9zIHx8IHsgbmFtZTogJycsIHZlcnNpb246ICcnIH07XHJcbiAgICAgICAgby5yZXRpbmEgPSAnbWF0Y2hNZWRpYScgaW4gdyAmJiAody5tYXRjaE1lZGlhKCcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKScpIHx8IDApLm1hdGNoZXM7XHJcbiAgICAgICAgby5jb25uZWN0aW9uID0gWyd1bmtub3duJywgJ2V0aCcsICd3aWZpJywgJzJnJywgJzNnJywgJzRnJ11bKG5hdmlnYXRvci5jb25uZWN0aW9uIHx8IDApLnR5cGUgfHwgMF0gfHwgJ3Vua25vd24nXHJcbiAgICAgICAgby5mb3JtYXQgPSAvYW5kcm9pZCg/IS4qbW9iaWxlKXxpcGFkfGtpbmRsZXxwbGF5Ym9va3xcXGJ0YWJ8c3VyZmFjZS8udGVzdChvLnVhKSA/ICd0YWInIDogL21vYml8d2luZG93cyBwaG9uZXxpcGhvbmV8YmxhY2tiZXJyeS8udGVzdChvLnVhKSA/ICdtb2JpbGUnIDogJ2Rlc2t0b3AnO1xyXG4gICAgICAgIHJldHVybiBvXHJcbiAgICB9KCksXHJcbiAgICB1cmw6ICcvL2FkMTEuYWRmYXJtMS5hZGl0aW9uLmNvbS9sdCcsXHJcbiAgICBhYzogMCxcclxuICAgIHdpOiAoTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnN1YnN0cigyLCA5KSksXHJcbiAgICBwYXJhbXM6IGZ1bmN0aW9uKG9wdHMpIHtcclxuICAgICAgICB2YXIgZCA9IHtcclxuICAgICAgICAgICAgbnc6IG9wdHMuYWR0ZXN0PyczMTI3JzonNDInLFxyXG4gICAgICAgICAgICBsdDogdHJ1ZSxcclxuICAgICAgICAgICAgd3B0OiAnaicsXHJcbiAgICAgICAgICAgIGFjOiArK01BUy5hYyxcclxuICAgICAgICAgICAgd2k6IE1BUy53aSxcclxuICAgICAgICAgICAgZXh0ZXJuYWxfdWlkOiAnJyxcclxuICAgICAgICAgICAgdWlkX3N0YWJsZTogJycsXHJcbiAgICAgICAgICAgIG9wdG91dDogMCxcclxuICAgICAgICAgICAgY2w6IHRoaXMudWEuYnJvd3Nlci5uYW1lLnNsaWNlKDAsMyksXHJcbiAgICAgICAgICAgIGNsdjogKDB8cGFyc2VGbG9hdCh0aGlzLnVhLmJyb3dzZXIudmVyc2lvbikpLFxyXG4gICAgICAgICAgICBzeXM6ICh0aGlzLnVhLm9zLm5hbWUpLnNsaWNlKDAsMyksXHJcbiAgICAgICAgICAgIHN5c3Y6IHRoaXMudWEub3MudmVyc2lvbnx8Jz8nLFxyXG4gICAgICAgICAgICB2cHc6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgICAgZGV2aWNlY2xhc3M6ICgoeyd0YWInOidtJywnbW9iaWxlJzoncyd9KVt0aGlzLnVhLmZvcm1hdF0gfHwgJ2InKSxcclxuICAgICAgICAgICAgZGV2aWNlY2xpZW50OiAnYnJvd3NlcicsXHJcbiAgICAgICAgICAgIGxheW91dGNsYXNzOiAncydcclxuICAgICAgICB9LCBwID0gW10sIG8sIGRwID0ge253OjEsbHQ6MSx3cHQ6MSxhYzoxLHdpOjEscmVmOjEsZXh0ZXJuYWxfdWlkOjIsdWlkX3N0YWJsZToxLG9wdG91dDoxfTtcclxuICAgICAgICBkb2N1bWVudC5yZWZlcmVyICYmIChkLnJlZiA9IGRvY3VtZW50LnJlZmVyZXIpO1xyXG4gICAgICAgIHRoaXMudWEucmV0aW5hICYmIChkLnI9MSk7XHJcbiAgICAgICAgZm9yIChvIGluIG9wdHMpIG9wdHMuaGFzT3duUHJvcGVydHkobykgJiYgb3B0c1tvXSAmJiAoZFtvXSA9IG9wdHNbb10pO1xyXG4gICAgICAgIGQubHQgPSAncG9ydGFsKCcrZC5wb3J0YWwrJyljYXRlZ29yeSgnK2QuY2F0ZWdvcnkrJylzZWN0aW9uKCcrZC5zZWN0aW9uKycpdGFnaWQoJytkLnRhZ2lkKycpbGF5b3V0Y2xhc3MoJytkLmxheW91dGNsYXNzKycpJztcclxuICAgICAgICAoKC8oPzpefFtcXHM7XSlOR1VzZXJJRD0oW147XSspLy50ZXN0KGRvY3VtZW50LmNvb2tpZSkgJiYgKGQudWlkX3N0YWJsZSA9IDAsIGQubmd1c2VyaWQgPSBSZWdFeHAuJDEsIGQuZXh0ZXJuYWxfdWlkID0gUmVnRXhwLiQxKSkgPT0gJ1RHUC1PUFQtT1VUJykgJiYgKGQub3B0b3V0ID0gMSk7XHJcbiAgICAgICAgZC5oaWQgJiYgKGQudWlkX3N0YWJsZSA9IDEsIGQuZXh0ZXJuYWxfdWlkID0gZC5oaWQpO1xyXG4gICAgICAgIGQudWlkcyA9IGQudWlkX3N0YWJsZTtcclxuICAgICAgICBmb3IgKG8gaW4gZCkge1xyXG4gICAgICAgICAgICBwLnB1c2goKGRwW29dP286J3ByZlsnK28rJ10nKSsnPScrZFtvXSk7XHJcbiAgICAgICAgICAgIGRwW29dPT09MiAmJiBwLnB1c2goJ3ByZlsnK28rJ10nKyc9JytkW29dKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChwLmxlbmd0aCA/IHAuam9pbignJicpIDogJycpO1xyXG4gICAgfSxcclxuICAgIGxpbms6IGZ1bmN0aW9uKG9wdHMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwrKC9cXD8vLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSt0aGlzLnBhcmFtcyhvcHRzKTtcclxuICAgIH0sXHJcbiAgICBodG1sTGluazogZnVuY3Rpb24ob3B0cykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmsob3B0cykucmVwbGFjZSgvJi9nLCAnJmFtcDsnKTtcclxuICAgIH0sXHJcbiAgICBjYWxsOiBmdW5jdGlvbihvcHRzKSB7IGRvY3VtZW50LndyaXRlKG9wdHMud3B0PT09J2gnID8gJzxpZnJhbWUgc3JjPVwiJyt0aGlzLmh0bWxMaW5rKG9wdHMpKydcIj48L2lmcmFtZT4nIDogJzxzY3JpcHQgc3JjPVwiJyt0aGlzLmh0bWxMaW5rKG9wdHMpKydcIj48XFwvc2NyaXB0PicpIH1cclxufVxyXG4ifSwgImhlYWRlcnNTaXplIjogMjY4LCAiYm9keVNpemUiOiAzNTQ4LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAzODE2fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAwLjAxMSwgImNvbm5lY3QiOiA4Ljc4MiwgInNzbCI6IDkuOTEzLCAic2VuZCI6IDAsICJ3YWl0IjogMTYuOTI5LCAicmVjZWl2ZSI6IDEuMjQ4fSwgInBhZ2VyZWYiOiAicGFnZUA2Y2Q4Zjc5ZGYyYThhYjAwYmRhYTBkZDQ5ZDdiOGRmZSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiWzIwMDE6OGQ4OjEwMGY6ZjAwMDo6MmQzXSIsICJfc2VydmVyUG9ydCI6IDgwLCAiX3NlY3VyaXR5RGV0YWlscyI6IHt9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNlQwNToxMDoxMi4zNjFaIiwgInRpbWUiOiAzMy44MDQsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwOi8vam9yYW1lZGlhLmRlL01vYmlsZSUyMExvZ2luX2ZpbGVzL2VpYy5qcy5kb3dubG9hZCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJBY2NlcHQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJIb3N0IiwgInZhbHVlIjogImpvcmFtZWRpYS5kZSJ9LCB7Im5hbWUiOiAiUmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwOi8vam9yYW1lZGlhLmRlL2luZGV4Mi5odG1sIn0sIHsibmFtZSI6ICJVc2VyLUFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiAzMTIsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiT0siLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQWNjZXB0LVJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJDb250ZW50LUxlbmd0aCIsICJ2YWx1ZSI6ICI5MDg4In0sIHsibmFtZSI6ICJDb250ZW50LVR5cGUiLCAidmFsdWUiOiAidGV4dC9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTIgR01UIn0sIHsibmFtZSI6ICJFVGFnIiwgInZhbHVlIjogIlwiMjM4MC01OThjZWQzZjA5ZTgwXCIifSwgeyJuYW1lIjogIktlZXAtQWxpdmUiLCAidmFsdWUiOiAidGltZW91dD0xNSJ9LCB7Im5hbWUiOiAiTGFzdC1Nb2RpZmllZCIsICJ2YWx1ZSI6ICJUdWUsIDAzIERlYyAyMDE5IDE2OjAyOjUwIEdNVCJ9LCB7Im5hbWUiOiAiU2VydmVyIiwgInZhbHVlIjogIkFwYWNoZSJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiA5MDg4LCAibWltZVR5cGUiOiAidGV4dC9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiLyoqXHJcbiAqIEBhdXRob3IgVW5pdGVkIEludGVybmV0IEFHXHJcbiAqIEBkYXRlIDE5LjAxLjIwMTFcclxuICogQHZlcnNpb24gMC4wLjJcclxuICogQHJldmlzaW9uICRJZCRcclxuICogQG9yaWdpbmF0b3IgYWxleFxyXG4gKiBAbWFpbnRhaW5lciBoYXBmLCBhbGV4XHJcbiAqIEV4dGVybmFsIElmcmFtZSBDb21tdW5pY2F0aW9uIChFSUMpXHJcbiAqIERvY3VtZW50YXRpb246IGh0dHA6Ly9seGR1czAyLmludC5jaW5ldGljLmRlOjgyMjAvcHJvZC90ZXN0L2VpYy5odG1sXHJcbiAqL1xyXG4oZnVuY3Rpb24oKXtcclxuICAgIGNvbSA9IHdpbmRvdy5jb20gfHwge307XHJcbiAgICBpZiAoIWNvbS51bml0ZWRpbnRlcm5ldCkgeyBjb20udW5pdGVkaW50ZXJuZXQgPSB7fTsgfVxyXG4gICAgaWYgKCFjb20udW5pdGVkaW50ZXJuZXQuZWljKSB7IGNvbS51bml0ZWRpbnRlcm5ldC5laWMgPSB7fTsgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy52ZXJzaW9uID0gJzAuMC4yJztcclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZmxhc2hGYWxsYmFjayA9ICcvL2pzLnVpLXBvcnRhbC5kZS9jL2VpYy9laWMtZmFsbGJhY2suc3dmJztcclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZnJhbWVzID0gW107XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmNvbW1hbmRzID0ge307XHJcbiAgICAvLyBzZXQgbGF0ZW5jeSBmb3IgbWVzc2FnZXMgKG9ubHkgaWYgcG9zdG1lc3NhZ2UgaXMgbm90IGF2YWlsYWJsZSlcclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMubGF0ZW5jeSA9IDUwMDtcclxuICAgIC8vIHZlcnNhdGlsZSBwYXJhbWV0ZXIgZnVuY3Rpb24gb2JqIDw9PT4gc3RyaW5nXHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcyA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIGlmICghdXJsIHx8IHR5cGVvZih1cmwpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgICAgICB1bmVzY2FwZSgodXJsIHx8IGxvY2F0aW9uLmhyZWYpLnJlcGxhY2UoL15bXiNdKiMvLCAnJykpLnJlcGxhY2UoLyhbXiM9XSspPT8oW14jPV0qKS9nLCBmdW5jdGlvbihmdWxsLCBrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5KSB7IHJlc3VsdFtrZXldID0gdmFsdWUgfHwgdHJ1ZTsgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZih1cmwpID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGlmIChjb20udW5pdGVkaW50ZXJuZXQuZWljLmxjaWQpIHsgdXJsLmxjaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLmxjaWQ7IH1cclxuICAgICAgICAgICAgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB1cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVzY2FwZShrZXkpKyc9Jytlc2NhcGUodXJsW2tleV0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5pZCA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMucGFyYW1zKCkuaWQ7XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmxjaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcygpLmxjaWQgfHwgKG5ldyBEYXRlKCkqMSkrJycrKE1hdGgucmFuZG9tKCkqMUU2KTtcclxuICAgIGlmICghd2luZG93LnBvc3RNZXNzYWdlICYmICghd2luZG93Lm9wZXJhICYmIGRvY3VtZW50LmFsbCkpIHtcclxuICAgICAgICAvLyB3ZSBuZWVkIGF0IGxlYXN0IEZsYXNoIDkgZm9yIHRoZSBmYWxsYmFja1xyXG4gICAgICAgIHZhciB2ciA9IC9eKFxcRCooXFxkK1xcLj9cXGQqKVxccypyPyhcXGQqKXxcXFMrXFxzKyhcXGQrKSw/KFxcZCopLD8oXFxkKiksP1xcZCopJC8sIG4sIGUsIG5vZmxhc2g5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIS9tc2llXFxXNy9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcclxuICAgICAgICAgICAgdHJ5IHsgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0ICYmIChuID0gbmV3IEFjdGl2ZVhPYmplY3QoJ1Nob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoJykpICYmIChlID0gdnIuZXhlYyhuLkdldFZhcmlhYmxlKCckdmVyc2lvbicpfHwnJykpICYmIHBhcnNlRmxvYXQoZVs0XSsnLicrZVs1XSkgPj0gOSkgeyBub2ZsYXNoOSA9IGZhbHNlOyB9IH0gY2F0Y2goZSkgeyB9XHJcbiAgICAgICAgICAgIGlmICgobiA9IChuYXZpZ2F0b3IucGx1Z2luc3x8e30pWydTaG9ja3dhdmUgRmxhc2gnXSkgJiYgKGUgPSB2ci5leGVjKChufHwwKS5kZXNjcmlwdGlvbnx8JycpKSAmJiBwYXJzZUZsb2F0KGVbMl0pID49IDkpIHsgbm9mbGFzaDkgPSBmYWxzZTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9mbGFzaDkpIHtcclxuICAgICAgICAgICAgdmFyIHNlbmRNZXNzYWdlID0gZnVuY3Rpb24oKSB7IHJldHVybjsgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgYm9keUludCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHZhciBib2R5O1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwge30pLmZpcnN0Q2hpbGQpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICB2YXIgZmxhc2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgIHZhciBmbGFzaHVybCA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZmxhc2hGYWxsYmFjayArICc/bGNpZD0nK2NvbS51bml0ZWRpbnRlcm5ldC5laWMubGNpZCsoY29tLnVuaXRlZGludGVybmV0LmVpYy5pZCA/ICcmaWQ9Jytjb20udW5pdGVkaW50ZXJuZXQuZWljLmlkIDogJycpO1xyXG4gICAgICAgICAgICAgICAgZmxhc2guaW5uZXJIVE1MID0gJzxvYmplY3QgaWQ9XCJlaWNGYWxsYmFja1wiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjFcIiBjbGFzc2lkPVwiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwXCIgbmFtZT1cImVpY0ZhbGxiYWNrXCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDt0b3A6LTEwMDBweDtsZWZ0Oi0xMDAwcHg7XCI+PHBhcmFtIG5hbWU9XCJfY3hcIiB2YWx1ZT1cIjExOTA2XCI+PHBhcmFtIG5hbWU9XCJfY3lcIiB2YWx1ZT1cIjExOTA2XCI+PHBhcmFtIG5hbWU9XCJGbGFzaFZhcnNcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiTW92aWVcIiB2YWx1ZT1cIicrZmxhc2h1cmwrJ1wiPjxwYXJhbSBuYW1lPVwiU3JjXCIgdmFsdWU9XCInK2ZsYXNodXJsKydcIj48cGFyYW0gbmFtZT1cIldNb2RlXCIgdmFsdWU9XCJ3aW5kb3dcIj48cGFyYW0gbmFtZT1cIlBsYXlcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkxvb3BcIiB2YWx1ZT1cIi0xXCI+PHBhcmFtIG5hbWU9XCJRdWFsaXR5XCIgdmFsdWU9XCJIaWdoXCI+PHBhcmFtIG5hbWU9XCJTQWxpZ25cIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiTWVudVwiIHZhbHVlPVwiLTFcIj48cGFyYW0gbmFtZT1cIkJhc2VcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiQWxsb3dTY3JpcHRBY2Nlc3NcIiB2YWx1ZT1cImFsd2F5c1wiPjxwYXJhbSBuYW1lPVwiU2NhbGVcIiB2YWx1ZT1cIlNob3dBbGxcIj48cGFyYW0gbmFtZT1cIkRldmljZUZvbnRcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkVtYmVkTW92aWVcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkJHQ29sb3JcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiU1dSZW1vdGVcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiTW92aWVEYXRhXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIlNlYW1sZXNzVGFiYmluZ1wiIHZhbHVlPVwiMVwiPjxwYXJhbSBuYW1lPVwiUHJvZmlsZVwiIHZhbHVlPVwiMFwiPjxwYXJhbSBuYW1lPVwiUHJvZmlsZUFkZHJlc3NcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiUHJvZmlsZVBvcnRcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkFsbG93TmV0d29ya2luZ1wiIHZhbHVlPVwiYWxsXCI+PHBhcmFtIG5hbWU9XCJBbGxvd0Z1bGxTY3JlZW5cIiB2YWx1ZT1cImZhbHNlXCI+PC9vYmplY3Q+JztcclxuICAgICAgICAgICAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKGZsYXNoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXSwgYm9keS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZmFsbGJhY2tMaXN0ZW4gPSBmdW5jdGlvbihtc2csIHVybCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9ERUJVRzogYWxlcnQoJ21lc3NhZ2UgcmVjZWl2ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHdpbmRvdy5vbm1lc3NhZ2UpID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25tZXNzYWdlKHsgZGF0YTogbXNnLCBvcmlnaW46IHVybCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL0RFQlVHOiBhbGVydChsb2NhdGlvbi5ocmVmKyc6ICcrdHlwZW9mKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpLmVpY0ZhbGxiYWNrTWVzc2FnZSkrJyAnK3R5cGVvZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWljRmFsbGJhY2snKS5laWNGYWxsYmFja0xpc3RlbikrXCJcXG5zd2YtdXJsOiBcIitkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnUGFyYW0nKVszXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb20udW5pdGVkaW50ZXJuZXQuZWljLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpLmVpY0ZhbGxiYWNrTGlzdGVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoYm9keUludCk7XHJcbiAgICAgICAgICAgIH0sIDE1KTtcclxuICAgICAgICAgICAgdmFyIHNlbmRNZXNzYWdlID0gZnVuY3Rpb24odGFyZ2V0LCBtc2csIHVybCl7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpIHx8ICF0eXBlb2YoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpY0ZhbGxiYWNrJykuZWljRmFsbGJhY2tNZXNzYWdlKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbmRNZXNzYWdlKHRhcmdldCwgbXNnLCB1cmwpOyB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9ERUJVRzogYWxlcnQoJ21lc3NhZ2Ugc2VudCcpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpY0ZhbGxiYWNrJykuZWljRmFsbGJhY2tNZXNzYWdlKG1zZywgdXJsKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBzZW5kTWVzc2FnZSA9IGZ1bmN0aW9uKHRhcmdldCwgbXNnLCB1cmwpIHsgdGFyZ2V0LnBvc3RNZXNzYWdlKG1zZywgdXJsKTsgfVxyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5zZW5kID0gZnVuY3Rpb24obXNnLCB1cmwsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHNlbmRNZXNzYWdlKCh0YXJnZXQgfHwgcGFyZW50KSwgJyNsY2lkPScrcGFyYW1zLmxjaWQrJyNpZD0nKyhwYXJhbXMuaWQgfHwgJzk5OScpKycjJyttc2csICh1cmwgfHwgcGFyYW1zLnVybCB8fCAnJykpO1xyXG4gICAgICAgIH0gY2F0Y2goZSkgeyB9XHJcbiAgICB9XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLnRvT3JpZ2luID0gZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9eKFxcdys6fCkoXFwvXFwvfCkoW146L10rKSg6XFxkK3wpLiokLywgZnVuY3Rpb24obGluaywgcHJvdG9jb2wsIGRlbGltaXRlciwgaG9zdCwgcG9ydCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHByb3RvY29sIHx8IGxvY2F0aW9uLnByb3RvY29sKSArICcvLycgKyBob3N0ICsgKHBvcnQgfHwgJycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5saXN0ZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZSwgbGlzdGVuZXIgPSBmdW5jdGlvbihldnQpIHtcclxuICAgICAgICAgICAgaWYgKCFldnQpIHsgZXZ0ID0gd2luZG93LmV2ZW50OyB9XHJcbiAgICAgICAgICAgIC8vIHN0b3AgSUFDIG1lc3NhZ2VzIGZyb20gYmVpbmcgcGFyc2VkIHdpdGggRUlDXHJcbiAgICAgICAgICAgIGlmICghZXZ0IHx8ICFldnQuZGF0YSB8fCAvXklBQ1xcZC8udGVzdChldnQuZGF0YSkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcyhldnQuZGF0YSksXHJcbiAgICAgICAgICAgICAgICBmcmFtZSA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZnJhbWVzW3BhcmFtcy5pZCoxXSB8fCB7fSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZyYW1lLnNyYyB8fCBmcmFtZS5xeHNyY3ZhbHVlO1xyXG4gICAgICAgICAgICAvLyBpZTcgcmVtb3ZlcyBwcm90b2NvbDsgdGFrZSBjYXJlIG9mIG1haWwgZGVyZWZlcnJlciBpbiBuZXdlciBjbGllbnRzXHJcbiAgICAgICAgICAgIGlmICgoIXNvdXJjZSB8fCBjb20udW5pdGVkaW50ZXJuZXQuZWljLnRvT3JpZ2luKHNvdXJjZSkgIT09IGNvbS51bml0ZWRpbnRlcm5ldC5laWMudG9PcmlnaW4oZXZ0Lm9yaWdpbiB8fCBldnQuZG9tYWluKSkgJiZcclxuICAgICAgICAgICAgICAgICEoL14oaHR0cHM/OlxcL1xcL3wpKG1hZHwpbWFpbGRlcmVmXFwuKGdteFxcLm5ldHxnbXhcXC5jb218MXVuZDFcXC5kZXxzZXJ2ZXJcXC5sYW58d2ViXFwuZGV8bWFpbFxcLmNvbSlcXC8vLnRlc3Qoc291cmNlKSAmJlxyXG4gICAgICAgICAgICAgICAgL14oaHR0cHM/OlxcL1xcL3wpKG0/YWQoY2xpZW50fGltZylcXC51aW1zZXJ2XFwubmV0fGltZy51aS1wb3J0YWwuZGV8c2VydmVyXFwubGFuKShcXC98JCkvLnRlc3QoZXZ0Lm9yaWdpbiB8fCBldnQuZG9tYWluKSkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBjb20udW5pdGVkaW50ZXJuZXQuZWljLmNvbW1hbmRzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmNvbW1hbmRzW2tleV0uY2FsbChmcmFtZSwgcGFyYW1zW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBzbWFsbCBjb25zdHJ1Y3QgdG8gc2V0IERPTSBldmVudHMgaW4gRkYvSUU6XHJcbiAgICAgICAgaWYgKHdpbmRvdy5wb3N0TWVzc2FnZSkge1xyXG4gICAgICAgICAgICAoKGU9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHx8IHdpbmRvdy5hdHRhY2hFdmVudCkoKGU/Jyc6J29uJykrJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmRvbUZyYW1lID0gZnVuY3Rpb24odXJsLCBhdHRyaWJ1dGVzLCBzdHlsZSkge1xyXG4gICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKSxcclxuICAgICAgICAgICAgaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZyYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgaWZyYW1lLnNyYyA9IHVybCArICcjJyArIGNvbS51bml0ZWRpbnRlcm5ldC5laWMucGFyYW1zKHsgaWQ6IGlkLCB1cmw6IGxvY2F0aW9uLmhyZWYgfSk7XHJcbiAgICAgICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5mcmFtZXNbaWRdID0gaWZyYW1lO1xyXG4gICAgICAgIGlmICghc3R5bGUgJiYgKGF0dHJpYnV0ZXMgfHwge30pLnN0eWxlKSB7XHJcbiAgICAgICAgICAgIHN0eWxlID0gYXR0cmlidXRlcy5zdHlsZTtcclxuICAgICAgICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gKGF0dHJpYnV0ZXMgfHwge30pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShpdGVtKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoaXRlbSwgYXR0cmlidXRlc1tpdGVtXSk7XHJcbiAgICAgICAgICAgIGlmcmFtZVtpdGVtXSA9IGF0dHJpYnV0ZXNbaXRlbV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gKHN0eWxlIHx8IHt9KSkge1xyXG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoaXRlbSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZnJhbWUuc3R5bGVbaXRlbV0gPSBhdHRyaWJ1dGVzW2l0ZW1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWZyYW1lO1xyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy53cml0ZUZyYW1lID0gZnVuY3Rpb24odXJsLCBhdHRyaWJ1dGVzLCBzdHlsZSkge1xyXG4gICAgICAgIHZhciBpZCA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZnJhbWVzLmxlbmd0aCxcclxuICAgICAgICAgICAgaWZyYW1lID0gY29tLnVuaXRlZGludGVybmV0LmVpYy5kb21GcmFtZSh1cmwsIGF0dHJpYnV0ZXMsIHN0eWxlKTtcclxuICAgICAgICBkb2N1bWVudC53cml0ZSgnPGRpdiBpZD1cImVpY2ZyYW1lJytpZCsnXCI+PC9kaXY+Jyk7XHJcbiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNmcmFtZScraWQpO1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChpZnJhbWUsIGRpdik7XHJcbiAgICAgICAgcmV0dXJuIGlmcmFtZTtcclxuICAgIH1cclxufSkoKTtcclxuIn0sICJoZWFkZXJzU2l6ZSI6IDI2OSwgImJvZHlTaXplIjogOTA4OCwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogOTM1N30sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogMC4wMDcsICJjb25uZWN0IjogOC40NDgsICJzc2wiOiAxMC4wNDEsICJzZW5kIjogMCwgIndhaXQiOiAxMy45ODcsICJyZWNlaXZlIjogMS4zMjF9LCAicGFnZXJlZiI6ICJwYWdlQDZjZDhmNzlkZjJhOGFiMDBiZGFhMGRkNDlkN2I4ZGZlIiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjAwMTo4ZDg6MTAwZjpmMDAwOjoyZDNdIiwgIl9zZXJ2ZXJQb3J0IjogODAsICJfc2VjdXJpdHlEZXRhaWxzIjoge319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI2VDA1OjEwOjEyLjM2MVoiLCAidGltZSI6IDM0Ljk0MDk5OTk5OTk5OTk5NSwgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHA6Ly9qb3JhbWVkaWEuZGUvTW9iaWxlJTIwTG9naW5fZmlsZXMvbW9iaWxlLWFwcHMuanMuZG93bmxvYWQiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiQWNjZXB0LUVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiSG9zdCIsICJ2YWx1ZSI6ICJqb3JhbWVkaWEuZGUifSwgeyJuYW1lIjogIlJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS9pbmRleDIuaHRtbCJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogMzIwLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2VwdC1SYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiQ29udGVudC1MZW5ndGgiLCAidmFsdWUiOiAiMTk5MCJ9LCB7Im5hbWUiOiAiQ29udGVudC1UeXBlIiwgInZhbHVlIjogInRleHQvamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiRGF0ZSIsICJ2YWx1ZSI6ICJGcmksIDI2IE1heSAyMDIzIDA1OjEwOjEyIEdNVCJ9LCB7Im5hbWUiOiAiRVRhZyIsICJ2YWx1ZSI6ICJcIjdjNi01OThjZWQzZjA5ZTgwXCIifSwgeyJuYW1lIjogIktlZXAtQWxpdmUiLCAidmFsdWUiOiAidGltZW91dD0xNSJ9LCB7Im5hbWUiOiAiTGFzdC1Nb2RpZmllZCIsICJ2YWx1ZSI6ICJUdWUsIDAzIERlYyAyMDE5IDE2OjAyOjUwIEdNVCJ9LCB7Im5hbWUiOiAiU2VydmVyIiwgInZhbHVlIjogIkFwYWNoZSJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAxOTkwLCAibWltZVR5cGUiOiAidGV4dC9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogMCwgInRleHQiOiAiKGZ1bmN0aW9uKGVpYywgdnApIHtcclxuXHRlaWMuY29tbWFuZHMgPSB7XHJcblx0XHRyZXNpemU6IGZ1bmN0aW9uKHNpemUpIHtcclxuXHRcdFx0aWYgKHNpemUgPT09ICdmdWxsJykge1xyXG5cdFx0XHRcdHRoaXMuc3R5bGUuaGVpZ2h0ID0gdGhpcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG5cdFx0XHRcdHRoaXMuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xyXG5cdFx0XHRcdHRoaXMuc3R5bGUudG9wID0gdGhpcy5zdHlsZS5sZWZ0ID0gJzBweCc7XHJcblx0XHRcdFx0dnAuc2V0QXR0cmlidXRlKCdjb250ZW50JywgJ3dpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAnKTtcclxuXHRcdFx0fSBlbHNlIGlmICgvXlxcZCskLy50ZXN0KHNpemUpKSB7XHJcblx0XHRcdFx0dGhpcy5zdHlsZS5oZWlnaHQgPSBzaXplICsgJ3B4JztcclxuXHRcdFx0XHR0aGlzLnN0eWxlLnBvc2l0aW9uID0gJyc7XHJcblx0XHRcdFx0dGhpcy5zdHlsZS50b3AgPSB0aGlzLnN0eWxlLmxlZnQgPSAnJztcclxuXHRcdFx0fSBlbHNlIGlmICgvKFxcZCspXFxEKyhcXGQrKS8udGVzdChzaXplKSkge1xyXG5cdFx0XHRcdHRoaXMuc3R5bGUud2lkdGggPSBSZWdFeHAuJDEgKyAncHgnO1xyXG5cdFx0XHRcdHRoaXMuc3R5bGUuaGVpZ2h0ID0gUmVnRXhwLiQyICsgJ3B4JztcclxuXHRcdFx0XHR0aGlzLnN0eWxlLnBvc2l0aW9uID0gJyc7XHJcblx0XHRcdFx0dGhpcy5zdHlsZS50b3AgPSB0aGlzLnN0eWxlLmxlZnQgPSAnJztcclxuXHRcdFx0XHQvLyBhdm9pZCB0aGUgaWZyYW1lIGJlaW5nIGNyb3BwZWQgYnkgcmVzaXppbmcgdGhlIHZpZXdwb3J0XHJcblx0XHRcdFx0aWYgKGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLSBSZWdFeHAuJDEgPCA1MCkge1xyXG5cdFx0XHRcdFx0dmFyIHNjYWxlID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAvICgrUmVnRXhwLiQxICsgNTApO1xyXG5cdFx0XHRcdFx0dnAuc2V0QXR0cmlidXRlKCdjb250ZW50JywgJ3dpZHRoPScgKyAoK1JlZ0V4cC4kMSArIDUwKSArICcsIGluaXRpYWwtc2NhbGU9JyArIHNjYWxlKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHZwLmdldEF0dHJpYnV0ZSgnY29udGVudCcpICE9PSAnd2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCcpIHtcclxuXHRcdFx0XHRcdHZwLnNldEF0dHJpYnV0ZSgnY29udGVudCcsICd3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0aW50ZXJzdGl0aWFsOiBmdW5jdGlvbihjb21tYW5kKSB7XHJcblx0XHRcdGlmIChjb21tYW5kID09PSAnY2xvc2UnKSB7XHJcblx0XHRcdFx0dGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0aW9zYmFubmVyOiBmdW5jdGlvbihjb250ZW50KSB7XHJcblx0XHRcdHZhciBtZXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lPVwiYXBwbGUtaXR1bmVzLWFwcFwiXScpIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTtcclxuXHRcdFx0bWV0YS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnYXBwbGUtaXR1bmVzLWFwcCcpO1xyXG5cdFx0XHRtZXRhLnNldEF0dHJpYnV0ZSgnY29udGVudCcsIGNvbnRlbnQpO1xyXG5cdFx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJykuYXBwZW5kQ2hpbGQobWV0YSk7XHJcblx0XHR9XHJcblx0fTtcclxuXHRlaWMubGlzdGVuKCk7XHJcblx0dmFyIG9yaWVudGF0aW9uID0gd2luZG93LmlubmVyV2lkdGggLyB3aW5kb3cuaW5uZXJIZWlnaHQgPiAxID8gJ2wnIDogJ3AnO1xyXG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZEJsb2NrJykuYXBwZW5kQ2hpbGQoZWljLmRvbUZyYW1lKCcvL2FkaW1nLnVpbXNlcnYubmV0L3RhbS9sb2dpbi9wbC1tLWZyYW1lLWFzcC5odG1sP2JyYW5kPWdteG5ldCZvcmllbnQ9JyArIG9yaWVudGF0aW9uLCB7XHJcblx0XHRcImZyYW1lYm9yZGVyXCI6IFwiMFwiLFxyXG5cdFx0XCJzY3JvbGxpbmdcIjogXCJub1wiLFxyXG5cdFx0XCJhbGxvd3RyYW5zcGFyZW5jeVwiOiBcInRydWVcIixcclxuXHRcdFwid2lkdGhcIjogXCIzMDBcIixcclxuXHRcdFwiaGVpZ2h0XCI6IFwiMFwiXHJcblx0fSkpO1xyXG59KSgoKHdpbmRvdy5jb20gfHwge30pLnVuaXRlZGludGVybmV0IHx8IHt9KS5laWMsIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCd2aWV3cG9ydCcpWzBdKTsifSwgImhlYWRlcnNTaXplIjogMjY4LCAiYm9keVNpemUiOiAxOTkwLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyMjU4fSwgImNhY2hlIjoge30sICJ0aW1pbmdzIjogeyJkbnMiOiAwLjAwNSwgImNvbm5lY3QiOiA4LjU1OSwgInNzbCI6IDkuODcsICJzZW5kIjogMCwgIndhaXQiOiAxNS4wOTEsICJyZWNlaXZlIjogMS40MTZ9LCAicGFnZXJlZiI6ICJwYWdlQDZjZDhmNzlkZjJhOGFiMDBiZGFhMGRkNDlkN2I4ZGZlIiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjAwMTo4ZDg6MTAwZjpmMDAwOjoyZDNdIiwgIl9zZXJ2ZXJQb3J0IjogODAsICJfc2VjdXJpdHlEZXRhaWxzIjoge319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI2VDA1OjEwOjEyLjQyMFoiLCAidGltZSI6IDExNjYuMTMyLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cDovL2FkaW1nLnVpbXNlcnYubmV0L3RhbS9sb2dpbi9wbC1tLWZyYW1lLWFzcC5odG1sP2JyYW5kPWdteG5ldCZvcmllbnQ9bCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQiLCAidmFsdWUiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43In0sIHsibmFtZSI6ICJBY2NlcHQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJIb3N0IiwgInZhbHVlIjogImFkaW1nLnVpbXNlcnYubmV0In0sIHsibmFtZSI6ICJSZWZlcmVyIiwgInZhbHVlIjogImh0dHA6Ly9qb3JhbWVkaWEuZGUvIn0sIHsibmFtZSI6ICJVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogIlVzZXItQWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW3sibmFtZSI6ICJicmFuZCIsICJ2YWx1ZSI6ICJnbXhuZXQifSwgeyJuYW1lIjogIm9yaWVudCIsICJ2YWx1ZSI6ICJsIn1dLCAiaGVhZGVyc1NpemUiOiA0NjEsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDMwMSwgInN0YXR1c1RleHQiOiAiTW92ZWQgUGVybWFuZW50bHkiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJDb250ZW50LUxlbmd0aCIsICJ2YWx1ZSI6ICIwIn0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTMgR01UIn0sIHsibmFtZSI6ICJMb2NhdGlvbiIsICJ2YWx1ZSI6ICJodHRwczovL2FkaW1nLnVpbXNlcnYubmV0L3RhbS9sb2dpbi9wbC1tLWZyYW1lLWFzcC5odG1sP2JyYW5kPWdteG5ldCZvcmllbnQ9bCJ9LCB7Im5hbWUiOiAiU2VydmVyIiwgInZhbHVlIjogIkJpZ0lQIn1dLCAiY29udGVudCI6IHsic2l6ZSI6IC0xLCAibWltZVR5cGUiOiAieC11bmtub3duIiwgImNvbXByZXNzaW9uIjogMH0sICJoZWFkZXJzU2l6ZSI6IDIxOCwgImJvZHlTaXplIjogMCwgInJlZGlyZWN0VVJMIjogImh0dHBzOi8vYWRpbWcudWltc2Vydi5uZXQvdGFtL2xvZ2luL3BsLW0tZnJhbWUtYXNwLmh0bWw/YnJhbmQ9Z214bmV0Jm9yaWVudD1sIiwgIl90cmFuc2ZlclNpemUiOiAyMTh9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDQxMC44NTksICJjb25uZWN0IjogMTAxLjE4NiwgInNzbCI6IDUxMy4yNzUsICJzZW5kIjogMCwgIndhaXQiOiAxMzkuMTAzLCAicmVjZWl2ZSI6IDEuNzA5fSwgInBhZ2VyZWYiOiAicGFnZUA2Y2Q4Zjc5ZGYyYThhYjAwYmRhYTBkZDQ5ZDdiOGRmZSIsICJzZXJ2ZXJJUEFkZHJlc3MiOiAiMi4yMS4xNi4xODMiLCAiX3NlcnZlclBvcnQiOiA4MCwgIl9zZWN1cml0eURldGFpbHMiOiB7fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTIuNDIxWiIsICJ0aW1lIjogMTQuOTI3OTk5OTk5OTk5OTk5LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS9Nb2JpbGUlMjBMb2dpbl9maWxlcy9wbC1tLWZyYW1lLWFzcC5odG1sIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkFjY2VwdCIsICJ2YWx1ZSI6ICJ0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSxpbWFnZS9hdmlmLGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjcifSwgeyJuYW1lIjogIkFjY2VwdC1FbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkhvc3QiLCAidmFsdWUiOiAiam9yYW1lZGlhLmRlIn0sIHsibmFtZSI6ICJSZWZlcmVyIiwgInZhbHVlIjogImh0dHA6Ly9qb3JhbWVkaWEuZGUvaW5kZXgyLmh0bWwifSwgeyJuYW1lIjogIlVwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogNDc4LCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiQ29udGVudC1FbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwIn0sIHsibmFtZSI6ICJDb250ZW50LVR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sIn0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTIgR01UIn0sIHsibmFtZSI6ICJFVGFnIiwgInZhbHVlIjogIlcvXCI0YzMtNTk4Y2VkM2YwOWU4MFwiIn0sIHsibmFtZSI6ICJLZWVwLUFsaXZlIiwgInZhbHVlIjogInRpbWVvdXQ9MTUifSwgeyJuYW1lIjogIkxhc3QtTW9kaWZpZWQiLCAidmFsdWUiOiAiVHVlLCAwMyBEZWMgMjAxOSAxNjowMjo1MCBHTVQifSwgeyJuYW1lIjogIlNlcnZlciIsICJ2YWx1ZSI6ICJBcGFjaGUifSwgeyJuYW1lIjogIlRyYW5zZmVyLUVuY29kaW5nIiwgInZhbHVlIjogImNodW5rZWQifV0sICJjb250ZW50IjogeyJzaXplIjogMTIxOSwgIm1pbWVUeXBlIjogInRleHQvaHRtbCIsICJjb21wcmVzc2lvbiI6IDQ5NSwgInRleHQiOiAiPCFET0NUWVBFIGh0bWw+XG48IS0tIHNhdmVkIGZyb20gdXJsPSgwMTc2KWh0dHBzOi8vYWRpbWcudWltc2Vydi5uZXQvdGFtL2xvZ2luL3BsLW0tZnJhbWUtYXNwLmh0bWw/YnJhbmQ9Z214bmV0Jm9yaWVudD1sI2lkPTAjdXJsPWh0dHBzJTNBLy93d3cuZ214Lm5ldC9sb2dpbi8lM0ZzdGF0dXMlM0Rsb2dpbi1mYWlsZWQjbGNpZD0xNTc1MzkyNTU5OTYyMzc0MDkuMjU2NjY1Mzk0MDc0IC0tPlxuPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyXCI+PHRpdGxlPmFkIGZyYW1lPC90aXRsZT5cbjwvaGVhZD48Ym9keT5cbjxzdHlsZT5cbmh0bWwsIGJvZHkgeyBtYXJnaW46IDBweDsgcGFkZGluZzogMHB4OyB9XG48L3N0eWxlPlxuPHNjcmlwdCBzcmM9XCIuL2VpYy5qcy5kb3dubG9hZFwiPjwvc2NyaXB0PlxuPHNjcmlwdCBzcmM9XCIuL21hcy1hc3AuanMuZG93bmxvYWRcIj48L3NjcmlwdD5cbjxzY3JpcHQ+XG4oZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJyYW5kID0gL2JyYW5kPSh3ZWJkZXxnbXgpLy50ZXN0KGxvY2F0aW9uLnNlYXJjaCkgJiYgUmVnRXhwLiQxLFxuICAgICAgICBvcmllbnQgPSAvb3JpZW50PShbXiZdKykvLnRlc3QobG9jYXRpb24uc2VhcmNoKSAmJiBSZWdFeHAuJDEgfHwgJ3AnO1xuICAgIE1BUy5jYWxsKHtwb3J0YWw6YnJhbmQsIGNhdGVnb3J5OidtYWlsJywgc2VjdGlvbjonbG9naW4nLCBsYXlvdXRjbGFzczoncycsIHRhZ2lkOidib3R0b20nLCBvcmllbnQ6b3JpZW50fSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgfHwgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24obmFtZSwgZm4pIHsgd2luZG93LmF0dGFjaEV2ZW50KCdvbicgKyBuYW1lLCBmbik7IH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJIZWlnaHQgPD0gNTApIHtcbiAgICAgICAgICAgIHZhciBhZHNpemUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbYWRzaXplXScpO1xuICAgICAgICAgICAgYWRzaXplICYmIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuc2VuZCgncmVzaXplPScgKyBhZHNpemUuZ2V0QXR0cmlidXRlKCdhZHNpemUnKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pKCk7XG48L3NjcmlwdD48c2NyaXB0IHNyYz1cIi4vbHRcIj48L3NjcmlwdD5cblxuPC9ib2R5PjwvaHRtbD4ifSwgImhlYWRlcnNTaXplIjogMjcyLCAiYm9keVNpemUiOiA3MjQsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDk5Nn0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDEzLjIyOSwgInJlY2VpdmUiOiAxLjY5OX0sICJwYWdlcmVmIjogInBhZ2VANmNkOGY3OWRmMmE4YWIwMGJkYWEwZGQ0OWQ3YjhkZmUiLCAic2VydmVySVBBZGRyZXNzIjogIlsyMDAxOjhkODoxMDBmOmYwMDA6OjJkM10iLCAiX3NlcnZlclBvcnQiOiA4MCwgIl9zZWN1cml0eURldGFpbHMiOiB7fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTIuNDU4WiIsICJ0aW1lIjogMS4xMDksICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwOi8vam9yYW1lZGlhLmRlL01vYmlsZSUyMExvZ2luX2ZpbGVzL2VpYy5qcy5kb3dubG9hZCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJSZWZlcmVyIiwgInZhbHVlIjogImh0dHA6Ly9qb3JhbWVkaWEuZGUvTW9iaWxlJTIwTG9naW5fZmlsZXMvcGwtbS1mcmFtZS1hc3AuaHRtbCJ9LCB7Im5hbWUiOiAiVXNlci1BZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbXSwgImhlYWRlcnNTaXplIjogMjUyLCAiYm9keVNpemUiOiAwfSwgInJlc3BvbnNlIjogeyJzdGF0dXMiOiAyMDAsICJzdGF0dXNUZXh0IjogIk9LIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMS4xIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIkRhdGUiLCAidmFsdWUiOiAiRnJpLCAyNiBNYXkgMjAyMyAwNToxMDoxMiBHTVQifSwgeyJuYW1lIjogIkxhc3QtTW9kaWZpZWQiLCAidmFsdWUiOiAiVHVlLCAwMyBEZWMgMjAxOSAxNjowMjo1MCBHTVQifSwgeyJuYW1lIjogIlNlcnZlciIsICJ2YWx1ZSI6ICJBcGFjaGUifSwgeyJuYW1lIjogIkVUYWciLCAidmFsdWUiOiAiXCIyMzgwLTU5OGNlZDNmMDllODBcIiJ9LCB7Im5hbWUiOiAiQ29udGVudC1UeXBlIiwgInZhbHVlIjogInRleHQvamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJBY2NlcHQtUmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJLZWVwLUFsaXZlIiwgInZhbHVlIjogInRpbWVvdXQ9MTUifSwgeyJuYW1lIjogIkNvbnRlbnQtTGVuZ3RoIiwgInZhbHVlIjogIjkwODgifV0sICJjb250ZW50IjogeyJzaXplIjogOTA4OCwgIm1pbWVUeXBlIjogInRleHQvamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDkzNTcsICJ0ZXh0IjogIi8qKlxyXG4gKiBAYXV0aG9yIFVuaXRlZCBJbnRlcm5ldCBBR1xyXG4gKiBAZGF0ZSAxOS4wMS4yMDExXHJcbiAqIEB2ZXJzaW9uIDAuMC4yXHJcbiAqIEByZXZpc2lvbiAkSWQkXHJcbiAqIEBvcmlnaW5hdG9yIGFsZXhcclxuICogQG1haW50YWluZXIgaGFwZiwgYWxleFxyXG4gKiBFeHRlcm5hbCBJZnJhbWUgQ29tbXVuaWNhdGlvbiAoRUlDKVxyXG4gKiBEb2N1bWVudGF0aW9uOiBodHRwOi8vbHhkdXMwMi5pbnQuY2luZXRpYy5kZTo4MjIwL3Byb2QvdGVzdC9laWMuaHRtbFxyXG4gKi9cclxuKGZ1bmN0aW9uKCl7XHJcbiAgICBjb20gPSB3aW5kb3cuY29tIHx8IHt9O1xyXG4gICAgaWYgKCFjb20udW5pdGVkaW50ZXJuZXQpIHsgY29tLnVuaXRlZGludGVybmV0ID0ge307IH1cclxuICAgIGlmICghY29tLnVuaXRlZGludGVybmV0LmVpYykgeyBjb20udW5pdGVkaW50ZXJuZXQuZWljID0ge307IH1cclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMudmVyc2lvbiA9ICcwLjAuMic7XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZsYXNoRmFsbGJhY2sgPSAnLy9qcy51aS1wb3J0YWwuZGUvYy9laWMvZWljLWZhbGxiYWNrLnN3Zic7XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZyYW1lcyA9IFtdO1xyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5jb21tYW5kcyA9IHt9O1xyXG4gICAgLy8gc2V0IGxhdGVuY3kgZm9yIG1lc3NhZ2VzIChvbmx5IGlmIHBvc3RtZXNzYWdlIGlzIG5vdCBhdmFpbGFibGUpXHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmxhdGVuY3kgPSA1MDA7XHJcbiAgICAvLyB2ZXJzYXRpbGUgcGFyYW1ldGVyIGZ1bmN0aW9uIG9iaiA8PT0+IHN0cmluZ1xyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5wYXJhbXMgPSBmdW5jdGlvbiAodXJsKSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICBpZiAoIXVybCB8fCB0eXBlb2YodXJsKSA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB7fTtcclxuICAgICAgICAgICAgdW5lc2NhcGUoKHVybCB8fCBsb2NhdGlvbi5ocmVmKS5yZXBsYWNlKC9eW14jXSojLywgJycpKS5yZXBsYWNlKC8oW14jPV0rKT0/KFteIz1dKikvZywgZnVuY3Rpb24oZnVsbCwga2V5LCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSkgeyByZXN1bHRba2V5XSA9IHZhbHVlIHx8IHRydWU7IH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YodXJsKSA9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBpZiAoY29tLnVuaXRlZGludGVybmV0LmVpYy5sY2lkKSB7IHVybC5sY2lkID0gY29tLnVuaXRlZGludGVybmV0LmVpYy5sY2lkOyB9XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXJsLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChlc2NhcGUoa2V5KSsnPScrZXNjYXBlKHVybFtrZXldKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCcjJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcygpLmlkO1xyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5sY2lkID0gY29tLnVuaXRlZGludGVybmV0LmVpYy5wYXJhbXMoKS5sY2lkIHx8IChuZXcgRGF0ZSgpKjEpKycnKyhNYXRoLnJhbmRvbSgpKjFFNik7XHJcbiAgICBpZiAoIXdpbmRvdy5wb3N0TWVzc2FnZSAmJiAoIXdpbmRvdy5vcGVyYSAmJiBkb2N1bWVudC5hbGwpKSB7XHJcbiAgICAgICAgLy8gd2UgbmVlZCBhdCBsZWFzdCBGbGFzaCA5IGZvciB0aGUgZmFsbGJhY2tcclxuICAgICAgICB2YXIgdnIgPSAvXihcXEQqKFxcZCtcXC4/XFxkKilcXHMqcj8oXFxkKil8XFxTK1xccysoXFxkKyksPyhcXGQqKSw/KFxcZCopLD9cXGQqKSQvLCBuLCBlLCBub2ZsYXNoOSA9IHRydWU7XHJcbiAgICAgICAgaWYgKCEvbXNpZVxcVzcvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7IGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCAmJiAobiA9IG5ldyBBY3RpdmVYT2JqZWN0KCdTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCcpKSAmJiAoZSA9IHZyLmV4ZWMobi5HZXRWYXJpYWJsZSgnJHZlcnNpb24nKXx8JycpKSAmJiBwYXJzZUZsb2F0KGVbNF0rJy4nK2VbNV0pID49IDkpIHsgbm9mbGFzaDkgPSBmYWxzZTsgfSB9IGNhdGNoKGUpIHsgfVxyXG4gICAgICAgICAgICBpZiAoKG4gPSAobmF2aWdhdG9yLnBsdWdpbnN8fHt9KVsnU2hvY2t3YXZlIEZsYXNoJ10pICYmIChlID0gdnIuZXhlYygobnx8MCkuZGVzY3JpcHRpb258fCcnKSkgJiYgcGFyc2VGbG9hdChlWzJdKSA+PSA5KSB7IG5vZmxhc2g5ID0gZmFsc2U7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vZmxhc2g5KSB7XHJcbiAgICAgICAgICAgIHZhciBzZW5kTWVzc2FnZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm47IH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGJvZHlJbnQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYm9keTtcclxuICAgICAgICAgICAgICAgIGlmICghKGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdIHx8IHt9KS5maXJzdENoaWxkKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICAgICAgdmFyIGZsYXNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZmxhc2h1cmwgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZsYXNoRmFsbGJhY2sgKyAnP2xjaWQ9Jytjb20udW5pdGVkaW50ZXJuZXQuZWljLmxjaWQrKGNvbS51bml0ZWRpbnRlcm5ldC5laWMuaWQgPyAnJmlkPScrY29tLnVuaXRlZGludGVybmV0LmVpYy5pZCA6ICcnKTtcclxuICAgICAgICAgICAgICAgIGZsYXNoLmlubmVySFRNTCA9ICc8b2JqZWN0IGlkPVwiZWljRmFsbGJhY2tcIiBoZWlnaHQ9XCIxXCIgd2lkdGg9XCIxXCIgY2xhc3NpZD1cImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMFwiIG5hbWU9XCJlaWNGYWxsYmFja1wiIHN0eWxlPVwicG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7dG9wOi0xMDAwcHg7bGVmdDotMTAwMHB4O1wiPjxwYXJhbSBuYW1lPVwiX2N4XCIgdmFsdWU9XCIxMTkwNlwiPjxwYXJhbSBuYW1lPVwiX2N5XCIgdmFsdWU9XCIxMTkwNlwiPjxwYXJhbSBuYW1lPVwiRmxhc2hWYXJzXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIk1vdmllXCIgdmFsdWU9XCInK2ZsYXNodXJsKydcIj48cGFyYW0gbmFtZT1cIlNyY1wiIHZhbHVlPVwiJytmbGFzaHVybCsnXCI+PHBhcmFtIG5hbWU9XCJXTW9kZVwiIHZhbHVlPVwid2luZG93XCI+PHBhcmFtIG5hbWU9XCJQbGF5XCIgdmFsdWU9XCIwXCI+PHBhcmFtIG5hbWU9XCJMb29wXCIgdmFsdWU9XCItMVwiPjxwYXJhbSBuYW1lPVwiUXVhbGl0eVwiIHZhbHVlPVwiSGlnaFwiPjxwYXJhbSBuYW1lPVwiU0FsaWduXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIk1lbnVcIiB2YWx1ZT1cIi0xXCI+PHBhcmFtIG5hbWU9XCJCYXNlXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIkFsbG93U2NyaXB0QWNjZXNzXCIgdmFsdWU9XCJhbHdheXNcIj48cGFyYW0gbmFtZT1cIlNjYWxlXCIgdmFsdWU9XCJTaG93QWxsXCI+PHBhcmFtIG5hbWU9XCJEZXZpY2VGb250XCIgdmFsdWU9XCIwXCI+PHBhcmFtIG5hbWU9XCJFbWJlZE1vdmllXCIgdmFsdWU9XCIwXCI+PHBhcmFtIG5hbWU9XCJCR0NvbG9yXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIlNXUmVtb3RlXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIk1vdmllRGF0YVwiIHZhbHVlPVwiXCI+PHBhcmFtIG5hbWU9XCJTZWFtbGVzc1RhYmJpbmdcIiB2YWx1ZT1cIjFcIj48cGFyYW0gbmFtZT1cIlByb2ZpbGVcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIlByb2ZpbGVBZGRyZXNzXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIlByb2ZpbGVQb3J0XCIgdmFsdWU9XCIwXCI+PHBhcmFtIG5hbWU9XCJBbGxvd05ldHdvcmtpbmdcIiB2YWx1ZT1cImFsbFwiPjxwYXJhbSBuYW1lPVwiQWxsb3dGdWxsU2NyZWVuXCIgdmFsdWU9XCJmYWxzZVwiPjwvb2JqZWN0Pic7XHJcbiAgICAgICAgICAgICAgICBib2R5Lmluc2VydEJlZm9yZShmbGFzaC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnb2JqZWN0JylbMF0sIGJvZHkuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZhbGxiYWNrTGlzdGVuID0gZnVuY3Rpb24obXNnLCB1cmwpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vREVCVUc6IGFsZXJ0KCdtZXNzYWdlIHJlY2VpdmVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZih3aW5kb3cub25tZXNzYWdlKSA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9ubWVzc2FnZSh7IGRhdGE6IG1zZywgb3JpZ2luOiB1cmwgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9ERUJVRzogYWxlcnQobG9jYXRpb24uaHJlZisnOiAnK3R5cGVvZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWljRmFsbGJhY2snKS5laWNGYWxsYmFja01lc3NhZ2UpKycgJyt0eXBlb2YoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpY0ZhbGxiYWNrJykuZWljRmFsbGJhY2tMaXN0ZW4pK1wiXFxuc3dmLXVybDogXCIrZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ1BhcmFtJylbM10udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29tLnVuaXRlZGludGVybmV0LmVpYy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWljRmFsbGJhY2snKS5laWNGYWxsYmFja0xpc3RlbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGJvZHlJbnQpO1xyXG4gICAgICAgICAgICB9LCAxNSk7XHJcbiAgICAgICAgICAgIHZhciBzZW5kTWVzc2FnZSA9IGZ1bmN0aW9uKHRhcmdldCwgbXNnLCB1cmwpe1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWljRmFsbGJhY2snKSB8fCAhdHlwZW9mKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpLmVpY0ZhbGxiYWNrTWVzc2FnZSkgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZW5kTWVzc2FnZSh0YXJnZXQsIG1zZywgdXJsKTsgfSwgNTApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vREVCVUc6IGFsZXJ0KCdtZXNzYWdlIHNlbnQnKTtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpLmVpY0ZhbGxiYWNrTWVzc2FnZShtc2csIHVybCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgc2VuZE1lc3NhZ2UgPSBmdW5jdGlvbih0YXJnZXQsIG1zZywgdXJsKSB7IHRhcmdldC5wb3N0TWVzc2FnZShtc2csIHVybCk7IH1cclxuICAgIH1cclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuc2VuZCA9IGZ1bmN0aW9uKG1zZywgdXJsLCB0YXJnZXQpIHtcclxuICAgICAgICB2YXIgcGFyYW1zID0gY29tLnVuaXRlZGludGVybmV0LmVpYy5wYXJhbXMoKTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzZW5kTWVzc2FnZSgodGFyZ2V0IHx8IHBhcmVudCksICcjbGNpZD0nK3BhcmFtcy5sY2lkKycjaWQ9JysocGFyYW1zLmlkIHx8ICc5OTknKSsnIycrbXNnLCAodXJsIHx8IHBhcmFtcy51cmwgfHwgJycpKTtcclxuICAgICAgICB9IGNhdGNoKGUpIHsgfVxyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy50b09yaWdpbiA9IGZ1bmN0aW9uKHVybCkge1xyXG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgvXihcXHcrOnwpKFxcL1xcL3wpKFteOi9dKykoOlxcZCt8KS4qJC8sIGZ1bmN0aW9uKGxpbmssIHByb3RvY29sLCBkZWxpbWl0ZXIsIGhvc3QsIHBvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChwcm90b2NvbCB8fCBsb2NhdGlvbi5wcm90b2NvbCkgKyAnLy8nICsgaG9zdCArIChwb3J0IHx8ICcnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMubGlzdGVuID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGUsIGxpc3RlbmVyID0gZnVuY3Rpb24oZXZ0KSB7XHJcbiAgICAgICAgICAgIGlmICghZXZ0KSB7IGV2dCA9IHdpbmRvdy5ldmVudDsgfVxyXG4gICAgICAgICAgICAvLyBzdG9wIElBQyBtZXNzYWdlcyBmcm9tIGJlaW5nIHBhcnNlZCB3aXRoIEVJQ1xyXG4gICAgICAgICAgICBpZiAoIWV2dCB8fCAhZXZ0LmRhdGEgfHwgL15JQUNcXGQvLnRlc3QoZXZ0LmRhdGEpKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0gY29tLnVuaXRlZGludGVybmV0LmVpYy5wYXJhbXMoZXZ0LmRhdGEpLFxyXG4gICAgICAgICAgICAgICAgZnJhbWUgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZyYW1lc1twYXJhbXMuaWQqMV0gfHwge30sXHJcbiAgICAgICAgICAgICAgICBzb3VyY2UgPSBmcmFtZS5zcmMgfHwgZnJhbWUucXhzcmN2YWx1ZTtcclxuICAgICAgICAgICAgLy8gaWU3IHJlbW92ZXMgcHJvdG9jb2w7IHRha2UgY2FyZSBvZiBtYWlsIGRlcmVmZXJyZXIgaW4gbmV3ZXIgY2xpZW50c1xyXG4gICAgICAgICAgICBpZiAoKCFzb3VyY2UgfHwgY29tLnVuaXRlZGludGVybmV0LmVpYy50b09yaWdpbihzb3VyY2UpICE9PSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnRvT3JpZ2luKGV2dC5vcmlnaW4gfHwgZXZ0LmRvbWFpbikpICYmXHJcbiAgICAgICAgICAgICAgICAhKC9eKGh0dHBzPzpcXC9cXC98KShtYWR8KW1haWxkZXJlZlxcLihnbXhcXC5uZXR8Z214XFwuY29tfDF1bmQxXFwuZGV8c2VydmVyXFwubGFufHdlYlxcLmRlfG1haWxcXC5jb20pXFwvLy50ZXN0KHNvdXJjZSkgJiZcclxuICAgICAgICAgICAgICAgIC9eKGh0dHBzPzpcXC9cXC98KShtP2FkKGNsaWVudHxpbWcpXFwudWltc2VydlxcLm5ldHxpbWcudWktcG9ydGFsLmRlfHNlcnZlclxcLmxhbikoXFwvfCQpLy50ZXN0KGV2dC5vcmlnaW4gfHwgZXZ0LmRvbWFpbikpKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkgJiYgY29tLnVuaXRlZGludGVybmV0LmVpYy5jb21tYW5kc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5jb21tYW5kc1trZXldLmNhbGwoZnJhbWUsIHBhcmFtc1trZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgLy8gc21hbGwgY29uc3RydWN0IHRvIHNldCBET00gZXZlbnRzIGluIEZGL0lFOlxyXG4gICAgICAgIGlmICh3aW5kb3cucG9zdE1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgKChlPXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB8fCB3aW5kb3cuYXR0YWNoRXZlbnQpKChlPycnOidvbicpKydtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gbGlzdGVuZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5kb21GcmFtZSA9IGZ1bmN0aW9uKHVybCwgYXR0cmlidXRlcywgc3R5bGUpIHtcclxuICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyksXHJcbiAgICAgICAgICAgIGlkID0gY29tLnVuaXRlZGludGVybmV0LmVpYy5mcmFtZXMubGVuZ3RoO1xyXG4gICAgICAgIGlmcmFtZS5zcmMgPSB1cmwgKyAnIycgKyBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcyh7IGlkOiBpZCwgdXJsOiBsb2NhdGlvbi5ocmVmIH0pO1xyXG4gICAgICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZnJhbWVzW2lkXSA9IGlmcmFtZTtcclxuICAgICAgICBpZiAoIXN0eWxlICYmIChhdHRyaWJ1dGVzIHx8IHt9KS5zdHlsZSkge1xyXG4gICAgICAgICAgICBzdHlsZSA9IGF0dHJpYnV0ZXMuc3R5bGU7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMuc3R5bGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpdGVtIGluIChhdHRyaWJ1dGVzIHx8IHt9KSkge1xyXG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoaXRlbSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKGl0ZW0sIGF0dHJpYnV0ZXNbaXRlbV0pO1xyXG4gICAgICAgICAgICBpZnJhbWVbaXRlbV0gPSBhdHRyaWJ1dGVzW2l0ZW1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKHZhciBpdGVtIGluIChzdHlsZSB8fCB7fSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGl0ZW0pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWZyYW1lLnN0eWxlW2l0ZW1dID0gYXR0cmlidXRlc1tpdGVtXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlmcmFtZTtcclxuICAgIH1cclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMud3JpdGVGcmFtZSA9IGZ1bmN0aW9uKHVybCwgYXR0cmlidXRlcywgc3R5bGUpIHtcclxuICAgICAgICB2YXIgaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZyYW1lcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIGlmcmFtZSA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZG9tRnJhbWUodXJsLCBhdHRyaWJ1dGVzLCBzdHlsZSk7XHJcbiAgICAgICAgZG9jdW1lbnQud3JpdGUoJzxkaXYgaWQ9XCJlaWNmcmFtZScraWQrJ1wiPjwvZGl2PicpO1xyXG4gICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWljZnJhbWUnK2lkKTtcclxuICAgICAgICBkaXYucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoaWZyYW1lLCBkaXYpO1xyXG4gICAgICAgIHJldHVybiBpZnJhbWU7XHJcbiAgICB9XHJcbn0pKCk7XHJcbiJ9LCAiaGVhZGVyc1NpemUiOiAyNjksICJib2R5U2l6ZSI6IC0yNjksICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDB9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAtMSwgInJlY2VpdmUiOiAxLjEwOX0sICJwYWdlcmVmIjogInBhZ2VANmNkOGY3OWRmMmE4YWIwMGJkYWEwZGQ0OWQ3YjhkZmUiLCAic2VydmVySVBBZGRyZXNzIjogIlsyMDAxOjhkODoxMDBmOmYwMDA6OjJkM10iLCAiX3NlcnZlclBvcnQiOiA4MCwgIl9zZWN1cml0eURldGFpbHMiOiB7fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTIuNDU4WiIsICJ0aW1lIjogMS4wNTUsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwOi8vam9yYW1lZGlhLmRlL01vYmlsZSUyMExvZ2luX2ZpbGVzL21hcy1hc3AuanMuZG93bmxvYWQiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiUmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwOi8vam9yYW1lZGlhLmRlL01vYmlsZSUyMExvZ2luX2ZpbGVzL3BsLW0tZnJhbWUtYXNwLmh0bWwifSwgeyJuYW1lIjogIlVzZXItQWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDI1NiwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICJPSyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTIgR01UIn0sIHsibmFtZSI6ICJMYXN0LU1vZGlmaWVkIiwgInZhbHVlIjogIlR1ZSwgMDMgRGVjIDIwMTkgMTY6MDI6NTAgR01UIn0sIHsibmFtZSI6ICJTZXJ2ZXIiLCAidmFsdWUiOiAiQXBhY2hlIn0sIHsibmFtZSI6ICJFVGFnIiwgInZhbHVlIjogIlwiZGRjLTU5OGNlZDNmMDllODBcIiJ9LCB7Im5hbWUiOiAiQ29udGVudC1UeXBlIiwgInZhbHVlIjogInRleHQvamF2YXNjcmlwdCJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJBY2NlcHQtUmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJLZWVwLUFsaXZlIiwgInZhbHVlIjogInRpbWVvdXQ9MTUifSwgeyJuYW1lIjogIkNvbnRlbnQtTGVuZ3RoIiwgInZhbHVlIjogIjM1NDgifV0sICJjb250ZW50IjogeyJzaXplIjogMzU0OCwgIm1pbWVUeXBlIjogInRleHQvamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDM4MTYsICJ0ZXh0IjogIk1BUyA9IHtcclxuICAgIHVhOiBmdW5jdGlvbiAobywgeCwgaSwgdiwgdywgZCkge1xyXG4gICAgICAgIG8gPSB7IHVhOiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksIGluZm86IHt9IH0sIHggPSAnYnJvd3NlcicsIHYgPSAndmVyc2lvbicsIHcgPSB3aW5kb3csIGQgPSBkb2N1bWVudDtcclxuICAgICAgICBvLnVhLnJlcGxhY2UoL1tcXChcXCldL2csICc7JykucmVwbGFjZSgvXFxzKihcXHcqP1xcID9cXHcrW1xcOlxcc10/W15cXGRcXHM7XSo/KVtcXC9cXCA7XShcXGRbLlxcd10qfCkvZywgZnVuY3Rpb24oZiwgaywgdikgeyBvLmluZm9ba10gPSBvLmluZm9ba10gfHwgdiB8fCAhMDsgfSk7XHJcbiAgICAgICAgJ21zaWUxb3ByMWZpcmVmb3gxc2VhbW9ua2V5MWF1cm9yYTFpcm9uMWNocm9tZTFtb2JpbGUgc2FmYXJpMXNhZmFyaTFvcGVyYTF3aW5kb3dzMHdpbmRvd3MgbnQwd2luZG93cyBwaG9uZTB3aW5kb3dzIHJ0MG1hYyBvczBvcyB4MGFuZHJvaWQwaXBob25lMGlwYWQwaXBvZDBibGFja2JlcnJ5MHJpbTBsaW51eDAnLnJlcGxhY2UoLyhcXEQrKShcXGQpL2csIGZ1bmN0aW9uKG4sIGMsIGQpIHsgbiA9ICtkID8geCA6ICdvcyc7IG8uaW5mb1tjXSAmJiAob1tuXSA9IG9bbl0gfHwgeyBuYW1lOiBjID09ICdvcHInID8gJ29wZXJhJyA6IChjID09ICdzYWZhcmknICYmIG8uaW5mby5hbmRyb2lkIHx8IGMgPT0gJ2Nocm9tZScgJiYgK28uaW5mb1t2XSA9PSAxKSB8fCAoby5pbmZvLmFuZHJvaWQgJiYgYyA9PSAnbW9iaWxlIHNhZmFyaScpID8gJ25hdGl2ZScgOiBjID09ICdvcyB4JyA/ICdtYWMgb3MnIDogYywgdmVyc2lvbjogKCtkID8gby5pbmZvW3ZdIDogMCkgfHwgby5pbmZvW2NdIH0sIG9bbl1bb1tuXS5uYW1lXSA9IHBhcnNlRmxvYXQob1tuXVt2XSkgfHwgb1tuXVt2XSkgfSk7XHJcbiAgICAgICAgKGkgPSArby5pbmZvLnRyaWRlbnQgKyA0KSAmJiAob1t4XSA9IHsgbmFtZTogJ21zaWUnLCBtc2llOiBpLCB2ZXJzaW9uOiBpIH0pO1xyXG4gICAgICAgIG9beF0gPSBvW3hdIHx8IHsgbmFtZTogJycsIHZlcnNpb246ICcnIH07XHJcbiAgICAgICAgby5vcyA9IG8ub3MgfHwgeyBuYW1lOiAnJywgdmVyc2lvbjogJycgfTtcclxuICAgICAgICBvLnJldGluYSA9ICdtYXRjaE1lZGlhJyBpbiB3ICYmICh3Lm1hdGNoTWVkaWEoJygtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpJykgfHwgMCkubWF0Y2hlcztcclxuICAgICAgICBvLmNvbm5lY3Rpb24gPSBbJ3Vua25vd24nLCAnZXRoJywgJ3dpZmknLCAnMmcnLCAnM2cnLCAnNGcnXVsobmF2aWdhdG9yLmNvbm5lY3Rpb24gfHwgMCkudHlwZSB8fCAwXSB8fCAndW5rbm93bidcclxuICAgICAgICBvLmZvcm1hdCA9IC9hbmRyb2lkKD8hLiptb2JpbGUpfGlwYWR8a2luZGxlfHBsYXlib29rfFxcYnRhYnxzdXJmYWNlLy50ZXN0KG8udWEpID8gJ3RhYicgOiAvbW9iaXx3aW5kb3dzIHBob25lfGlwaG9uZXxibGFja2JlcnJ5Ly50ZXN0KG8udWEpID8gJ21vYmlsZScgOiAnZGVza3RvcCc7XHJcbiAgICAgICAgcmV0dXJuIG9cclxuICAgIH0oKSxcclxuICAgIHVybDogJy8vYWQxMS5hZGZhcm0xLmFkaXRpb24uY29tL2x0JyxcclxuICAgIGFjOiAwLFxyXG4gICAgd2k6IChNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCkuc3Vic3RyKDIsIDkpKSxcclxuICAgIHBhcmFtczogZnVuY3Rpb24ob3B0cykge1xyXG4gICAgICAgIHZhciBkID0ge1xyXG4gICAgICAgICAgICBudzogb3B0cy5hZHRlc3Q/JzMxMjcnOic0MicsXHJcbiAgICAgICAgICAgIGx0OiB0cnVlLFxyXG4gICAgICAgICAgICB3cHQ6ICdqJyxcclxuICAgICAgICAgICAgYWM6ICsrTUFTLmFjLFxyXG4gICAgICAgICAgICB3aTogTUFTLndpLFxyXG4gICAgICAgICAgICBleHRlcm5hbF91aWQ6ICcnLFxyXG4gICAgICAgICAgICB1aWRfc3RhYmxlOiAnJyxcclxuICAgICAgICAgICAgb3B0b3V0OiAwLFxyXG4gICAgICAgICAgICBjbDogdGhpcy51YS5icm93c2VyLm5hbWUuc2xpY2UoMCwzKSxcclxuICAgICAgICAgICAgY2x2OiAoMHxwYXJzZUZsb2F0KHRoaXMudWEuYnJvd3Nlci52ZXJzaW9uKSksXHJcbiAgICAgICAgICAgIHN5czogKHRoaXMudWEub3MubmFtZSkuc2xpY2UoMCwzKSxcclxuICAgICAgICAgICAgc3lzdjogdGhpcy51YS5vcy52ZXJzaW9ufHwnPycsXHJcbiAgICAgICAgICAgIHZwdzogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICBkZXZpY2VjbGFzczogKCh7J3RhYic6J20nLCdtb2JpbGUnOidzJ30pW3RoaXMudWEuZm9ybWF0XSB8fCAnYicpLFxyXG4gICAgICAgICAgICBkZXZpY2VjbGllbnQ6ICdicm93c2VyJyxcclxuICAgICAgICAgICAgbGF5b3V0Y2xhc3M6ICdzJ1xyXG4gICAgICAgIH0sIHAgPSBbXSwgbywgZHAgPSB7bnc6MSxsdDoxLHdwdDoxLGFjOjEsd2k6MSxyZWY6MSxleHRlcm5hbF91aWQ6Mix1aWRfc3RhYmxlOjEsb3B0b3V0OjF9O1xyXG4gICAgICAgIGRvY3VtZW50LnJlZmVyZXIgJiYgKGQucmVmID0gZG9jdW1lbnQucmVmZXJlcik7XHJcbiAgICAgICAgdGhpcy51YS5yZXRpbmEgJiYgKGQucj0xKTtcclxuICAgICAgICBmb3IgKG8gaW4gb3B0cykgb3B0cy5oYXNPd25Qcm9wZXJ0eShvKSAmJiBvcHRzW29dICYmIChkW29dID0gb3B0c1tvXSk7XHJcbiAgICAgICAgZC5sdCA9ICdwb3J0YWwoJytkLnBvcnRhbCsnKWNhdGVnb3J5KCcrZC5jYXRlZ29yeSsnKXNlY3Rpb24oJytkLnNlY3Rpb24rJyl0YWdpZCgnK2QudGFnaWQrJylsYXlvdXRjbGFzcygnK2QubGF5b3V0Y2xhc3MrJyknO1xyXG4gICAgICAgICgoLyg/Ol58W1xccztdKU5HVXNlcklEPShbXjtdKykvLnRlc3QoZG9jdW1lbnQuY29va2llKSAmJiAoZC51aWRfc3RhYmxlID0gMCwgZC5uZ3VzZXJpZCA9IFJlZ0V4cC4kMSwgZC5leHRlcm5hbF91aWQgPSBSZWdFeHAuJDEpKSA9PSAnVEdQLU9QVC1PVVQnKSAmJiAoZC5vcHRvdXQgPSAxKTtcclxuICAgICAgICBkLmhpZCAmJiAoZC51aWRfc3RhYmxlID0gMSwgZC5leHRlcm5hbF91aWQgPSBkLmhpZCk7XHJcbiAgICAgICAgZC51aWRzID0gZC51aWRfc3RhYmxlO1xyXG4gICAgICAgIGZvciAobyBpbiBkKSB7XHJcbiAgICAgICAgICAgIHAucHVzaCgoZHBbb10/bzoncHJmWycrbysnXScpKyc9JytkW29dKTtcclxuICAgICAgICAgICAgZHBbb109PT0yICYmIHAucHVzaCgncHJmWycrbysnXScrJz0nK2Rbb10pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHAubGVuZ3RoID8gcC5qb2luKCcmJykgOiAnJyk7XHJcbiAgICB9LFxyXG4gICAgbGluazogZnVuY3Rpb24ob3B0cykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVybCsoL1xcPy8udGVzdCh0aGlzLnVybCkgPyAnJicgOiAnPycpK3RoaXMucGFyYW1zKG9wdHMpO1xyXG4gICAgfSxcclxuICAgIGh0bWxMaW5rOiBmdW5jdGlvbihvcHRzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGluayhvcHRzKS5yZXBsYWNlKC8mL2csICcmYW1wOycpO1xyXG4gICAgfSxcclxuICAgIGNhbGw6IGZ1bmN0aW9uKG9wdHMpIHsgZG9jdW1lbnQud3JpdGUob3B0cy53cHQ9PT0naCcgPyAnPGlmcmFtZSBzcmM9XCInK3RoaXMuaHRtbExpbmsob3B0cykrJ1wiPjwvaWZyYW1lPicgOiAnPHNjcmlwdCBzcmM9XCInK3RoaXMuaHRtbExpbmsob3B0cykrJ1wiPjxcXC9zY3JpcHQ+JykgfVxyXG59XHJcbiJ9LCAiaGVhZGVyc1NpemUiOiAyNjgsICJib2R5U2l6ZSI6IC0yNjgsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDB9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAtMSwgInJlY2VpdmUiOiAxLjA1NX0sICJwYWdlcmVmIjogInBhZ2VANmNkOGY3OWRmMmE4YWIwMGJkYWEwZGQ0OWQ3YjhkZmUiLCAic2VydmVySVBBZGRyZXNzIjogIlsyMDAxOjhkODoxMDBmOmYwMDA6OjJkM10iLCAiX3NlcnZlclBvcnQiOiA4MCwgIl9zZWN1cml0eURldGFpbHMiOiB7fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTIuNDY3WiIsICJ0aW1lIjogMTIuNDEyLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS9Nb2JpbGUlMjBMb2dpbl9maWxlcy9sdCIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQiLCAidmFsdWUiOiAiKi8qIn0sIHsibmFtZSI6ICJBY2NlcHQtRW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSJ9LCB7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJIb3N0IiwgInZhbHVlIjogImpvcmFtZWRpYS5kZSJ9LCB7Im5hbWUiOiAiUmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwOi8vam9yYW1lZGlhLmRlL01vYmlsZSUyMExvZ2luX2ZpbGVzL3BsLW0tZnJhbWUtYXNwLmh0bWwifSwgeyJuYW1lIjogIlVzZXItQWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDMyOCwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICJPSyIsICJodHRwVmVyc2lvbiI6ICJIVFRQLzEuMSIsICJjb29raWVzIjogW10sICJoZWFkZXJzIjogW3sibmFtZSI6ICJBY2NlcHQtUmFuZ2VzIiwgInZhbHVlIjogImJ5dGVzIn0sIHsibmFtZSI6ICJDb25uZWN0aW9uIiwgInZhbHVlIjogImtlZXAtYWxpdmUifSwgeyJuYW1lIjogIkNvbnRlbnQtTGVuZ3RoIiwgInZhbHVlIjogIjE5In0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTIgR01UIn0sIHsibmFtZSI6ICJFVGFnIiwgInZhbHVlIjogIlwiMTMtNTk4Y2VkM2YwOWU4MFwiIn0sIHsibmFtZSI6ICJLZWVwLUFsaXZlIiwgInZhbHVlIjogInRpbWVvdXQ9MTUifSwgeyJuYW1lIjogIkxhc3QtTW9kaWZpZWQiLCAidmFsdWUiOiAiVHVlLCAwMyBEZWMgMjAxOSAxNjowMjo1MCBHTVQifSwgeyJuYW1lIjogIlNlcnZlciIsICJ2YWx1ZSI6ICJBcGFjaGUifV0sICJjb250ZW50IjogeyJzaXplIjogMTksICJtaW1lVHlwZSI6ICJ4LXVua25vd24iLCAiY29tcHJlc3Npb24iOiAwLCAidGV4dCI6ICJaRzlqZFcxbGJuUXVkM0pwZEdVb0p5Y3BPdz09IiwgImVuY29kaW5nIjogImJhc2U2NCJ9LCAiaGVhZGVyc1NpemUiOiAyMzQsICJib2R5U2l6ZSI6IDE5LCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAyNTN9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAxMS4wMjEsICJyZWNlaXZlIjogMS4zOTF9LCAicGFnZXJlZiI6ICJwYWdlQDZjZDhmNzlkZjJhOGFiMDBiZGFhMGRkNDlkN2I4ZGZlIiwgInNlcnZlcklQQWRkcmVzcyI6ICJbMjAwMTo4ZDg6MTAwZjpmMDAwOjoyZDNdIiwgIl9zZXJ2ZXJQb3J0IjogODAsICJfc2VjdXJpdHlEZXRhaWxzIjoge319LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI2VDA1OjEwOjEyLjQ2OVoiLCAidGltZSI6IDE2NC45NjUsICJyZXF1ZXN0IjogeyJtZXRob2QiOiAiR0VUIiwgInVybCI6ICJodHRwOi8vYWQxMS5hZGZhcm0xLmFkaXRpb24uY29tL2x0P253PTQyJmx0PXBvcnRhbCh1bmRlZmluZWQpY2F0ZWdvcnkobWFpbClzZWN0aW9uKGxvZ2luKXRhZ2lkKGJvdHRvbSlsYXlvdXRjbGFzcyhzKSZ3cHQ9aiZhYz0xJndpPTgzODgxMTM1MyZleHRlcm5hbF91aWQ9JnByZltleHRlcm5hbF91aWRdPSZ1aWRfc3RhYmxlPSZvcHRvdXQ9MCZwcmZbY2xdPWNociZwcmZbY2x2XT0xMTMmcHJmW3N5c109d2luJnByZltzeXN2XT0xMC4wJnByZlt2cHddPTMwMCZwcmZbZGV2aWNlY2xhc3NdPWImcHJmW2RldmljZWNsaWVudF09YnJvd3NlciZwcmZbbGF5b3V0Y2xhc3NdPXMmcHJmW2NhdGVnb3J5XT1tYWlsJnByZltzZWN0aW9uXT1sb2dpbiZwcmZbdGFnaWRdPWJvdHRvbSZwcmZbb3JpZW50XT1wJnByZlt1aWRzXT0iLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiQWNjZXB0LUVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUifSwgeyJuYW1lIjogIkNvbm5lY3Rpb24iLCAidmFsdWUiOiAia2VlcC1hbGl2ZSJ9LCB7Im5hbWUiOiAiSG9zdCIsICJ2YWx1ZSI6ICJhZDExLmFkZmFybTEuYWRpdGlvbi5jb20ifSwgeyJuYW1lIjogIlJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS8ifSwgeyJuYW1lIjogIlVzZXItQWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW3sibmFtZSI6ICJudyIsICJ2YWx1ZSI6ICI0MiJ9LCB7Im5hbWUiOiAibHQiLCAidmFsdWUiOiAicG9ydGFsKHVuZGVmaW5lZCljYXRlZ29yeShtYWlsKXNlY3Rpb24obG9naW4pdGFnaWQoYm90dG9tKWxheW91dGNsYXNzKHMpIn0sIHsibmFtZSI6ICJ3cHQiLCAidmFsdWUiOiAiaiJ9LCB7Im5hbWUiOiAiYWMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAid2kiLCAidmFsdWUiOiAiODM4ODExMzUzIn0sIHsibmFtZSI6ICJleHRlcm5hbF91aWQiLCAidmFsdWUiOiAiIn0sIHsibmFtZSI6ICJwcmZbZXh0ZXJuYWxfdWlkXSIsICJ2YWx1ZSI6ICIifSwgeyJuYW1lIjogInVpZF9zdGFibGUiLCAidmFsdWUiOiAiIn0sIHsibmFtZSI6ICJvcHRvdXQiLCAidmFsdWUiOiAiMCJ9LCB7Im5hbWUiOiAicHJmW2NsXSIsICJ2YWx1ZSI6ICJjaHIifSwgeyJuYW1lIjogInByZltjbHZdIiwgInZhbHVlIjogIjExMyJ9LCB7Im5hbWUiOiAicHJmW3N5c10iLCAidmFsdWUiOiAid2luIn0sIHsibmFtZSI6ICJwcmZbc3lzdl0iLCAidmFsdWUiOiAiMTAuMCJ9LCB7Im5hbWUiOiAicHJmW3Zwd10iLCAidmFsdWUiOiAiMzAwIn0sIHsibmFtZSI6ICJwcmZbZGV2aWNlY2xhc3NdIiwgInZhbHVlIjogImIifSwgeyJuYW1lIjogInByZltkZXZpY2VjbGllbnRdIiwgInZhbHVlIjogImJyb3dzZXIifSwgeyJuYW1lIjogInByZltsYXlvdXRjbGFzc10iLCAidmFsdWUiOiAicyJ9LCB7Im5hbWUiOiAicHJmW2NhdGVnb3J5XSIsICJ2YWx1ZSI6ICJtYWlsIn0sIHsibmFtZSI6ICJwcmZbc2VjdGlvbl0iLCAidmFsdWUiOiAibG9naW4ifSwgeyJuYW1lIjogInByZlt0YWdpZF0iLCAidmFsdWUiOiAiYm90dG9tIn0sIHsibmFtZSI6ICJwcmZbb3JpZW50XSIsICJ2YWx1ZSI6ICJwIn0sIHsibmFtZSI6ICJwcmZbdWlkc10iLCAidmFsdWUiOiAiIn1dLCAiaGVhZGVyc1NpemUiOiAtMSwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogNDA0LCAic3RhdHVzVGV4dCI6ICJOb3QgRm91bmQiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8xLjEiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiQ29ubmVjdGlvbiIsICJ2YWx1ZSI6ICJrZWVwLWFsaXZlIn0sIHsibmFtZSI6ICJDb250ZW50LUVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogIkNvbnRlbnQtVHlwZSIsICJ2YWx1ZSI6ICJ0ZXh0L3BsYWluIn0sIHsibmFtZSI6ICJEYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDc6MTA6MTIgKzAyMDAifSwgeyJuYW1lIjogIlNlcnZlciIsICJ2YWx1ZSI6ICJBRElUSU9OU0VSVkVSIHYxLjAifSwgeyJuYW1lIjogIlRyYW5zZmVyLUVuY29kaW5nIiwgInZhbHVlIjogImNodW5rZWQifV0sICJjb250ZW50IjogeyJzaXplIjogLTEsICJtaW1lVHlwZSI6ICJ0ZXh0L3BsYWluIn0sICJoZWFkZXJzU2l6ZSI6IC0xLCAiYm9keVNpemUiOiAtMSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogLTEsICJfZmFpbHVyZVRleHQiOiAibmV0OjpFUlJfQUJPUlRFRCJ9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDY2LjY3LCAiY29ubmVjdCI6IDkuNzE2LCAic3NsIjogNzcuNjAyLCAic2VuZCI6IDAsICJ3YWl0IjogMTAuOTc3LCAicmVjZWl2ZSI6IC0xfSwgInBhZ2VyZWYiOiAicGFnZUA2Y2Q4Zjc5ZGYyYThhYjAwYmRhYTBkZDQ5ZDdiOGRmZSJ9LCB7InN0YXJ0ZWREYXRlVGltZSI6ICIyMDIzLTA1LTI2VDA1OjEwOjEzLjA3MVoiLCAidGltZSI6IDQ2OS4yMDMwMDAwMDAwMDAwMywgInJlcXVlc3QiOiB7Im1ldGhvZCI6ICJHRVQiLCAidXJsIjogImh0dHBzOi8vYWRpbWcudWltc2Vydi5uZXQvdGFtL2xvZ2luL3BsLW0tZnJhbWUtYXNwLmh0bWw/YnJhbmQ9Z214bmV0Jm9yaWVudD1sIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAiYWRpbWcudWltc2Vydi5uZXQifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvdGFtL2xvZ2luL3BsLW0tZnJhbWUtYXNwLmh0bWw/YnJhbmQ9Z214bmV0Jm9yaWVudD1sIn0sIHsibmFtZSI6ICI6c2NoZW1lIiwgInZhbHVlIjogImh0dHBzIn0sIHsibmFtZSI6ICJhY2NlcHQiLCAidmFsdWUiOiAidGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC43In0sIHsibmFtZSI6ICJhY2NlcHQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCwgZGVmbGF0ZSwgYnIifSwgeyJuYW1lIjogInJlZmVyZXIiLCAidmFsdWUiOiAiaHR0cDovL2pvcmFtZWRpYS5kZS8ifSwgeyJuYW1lIjogInNlYy1mZXRjaC1kZXN0IiwgInZhbHVlIjogImlmcmFtZSJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLW1vZGUiLCAidmFsdWUiOiAibmF2aWdhdGUifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogImNyb3NzLXNpdGUifSwgeyJuYW1lIjogInVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMiLCAidmFsdWUiOiAiMSJ9LCB7Im5hbWUiOiAidXNlci1hZ2VudCIsICJ2YWx1ZSI6ICJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTEzLjAuNTY3Mi41MyBTYWZhcmkvNTM3LjM2In1dLCAicXVlcnlTdHJpbmciOiBbeyJuYW1lIjogImJyYW5kIiwgInZhbHVlIjogImdteG5ldCJ9LCB7Im5hbWUiOiAib3JpZW50IiwgInZhbHVlIjogImwifV0sICJoZWFkZXJzU2l6ZSI6IDYxNiwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXB0LXJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJtYXgtYWdlPTMxNTM2MDAwLCBwdWJsaWMifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiNTAzIn0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9odG1sIn0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTMgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiM2E5LTU5ZGZmODQyOGJkZmEtZ3ppcFwiIn0sIHsibmFtZSI6ICJleHBpcmVzIiwgInZhbHVlIjogIlRodSwgMjMgTWF5IDIwMjQgMTk6MzI6MzggR01UIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIkZyaSwgMDcgRmViIDIwMjAgMTc6MTQ6MDMgR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiQXBhY2hlIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9LCB7Im5hbWUiOiAieC1yb2JvdHMtdGFnIiwgInZhbHVlIjogIm5vaW5kZXgifV0sICJjb250ZW50IjogeyJzaXplIjogOTM3LCAibWltZVR5cGUiOiAidGV4dC9odG1sIiwgImNvbXByZXNzaW9uIjogMjE2LCAidGV4dCI6ICI8IURPQ1RZUEUgaHRtbD5cclxuPHRpdGxlPmFkIGZyYW1lPC90aXRsZT5cclxuPGJvZHk+XHJcbjxzdHlsZT5cclxuaHRtbCwgYm9keSB7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7IH1cclxuPC9zdHlsZT5cclxuPHNjcmlwdCBzcmM9XCIvL2pzLnVpLXBvcnRhbC5kZS9jL2VpYy9laWMuanNcIj48L3NjcmlwdD5cclxuPHNjcmlwdCBzcmM9XCIvL2pzLnVpLXBvcnRhbC5kZS9jL2Fkcy9tYXMvbWFzLWFzcC5qc1wiPjwvc2NyaXB0PlxyXG48c2NyaXB0PlxyXG4oZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgYnJhbmQgPSAvYnJhbmQ9KHdlYmRlfGdteCkvLnRlc3QobG9jYXRpb24uc2VhcmNoKSAmJiBSZWdFeHAuJDEsXHJcbiAgICAgICAgb3JpZW50ID0gL29yaWVudD0oW14mXSspLy50ZXN0KGxvY2F0aW9uLnNlYXJjaCkgJiYgUmVnRXhwLiQxIHx8ICdwJztcclxuICAgIE1BUy5jYWxsKHtwb3J0YWw6YnJhbmQsIGNhdGVnb3J5OidtYWlsJywgc2VjdGlvbjonbG9naW4nLCBsYXlvdXRjbGFzczoncycsIHRhZ2lkOidib3R0b20nLCBvcmllbnQ6b3JpZW50fSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbihuYW1lLCBmbikgeyB3aW5kb3cuYXR0YWNoRXZlbnQoJ29uJyArIG5hbWUsIGZuKTsgfSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJIZWlnaHQgPD0gNTApIHtcclxuICAgICAgICAgICAgdmFyIGFkc2l6ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1thZHNpemVdJyk7XHJcbiAgICAgICAgICAgIGFkc2l6ZSAmJiBjb20udW5pdGVkaW50ZXJuZXQuZWljLnNlbmQoJ3Jlc2l6ZT0nICsgYWRzaXplLmdldEF0dHJpYnV0ZSgnYWRzaXplJykpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59KSgpO1xyXG48L3NjcmlwdD5cclxuPC9ib2R5PlxyXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogNzIxLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiA3MjF9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDEuMjkxLCAiY29ubmVjdCI6IDIxMi4wNTksICJzc2wiOiAxMTAuODA0LCAic2VuZCI6IDAsICJ3YWl0IjogMTQyLjIxNSwgInJlY2VpdmUiOiAyLjgzNH0sICJwYWdlcmVmIjogInBhZ2VANmNkOGY3OWRmMmE4YWIwMGJkYWEwZGQ0OWQ3YjhkZmUiLCAic2VydmVySVBBZGRyZXNzIjogIjIuMjEuMTYuMTgzIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMiIsICJzdWJqZWN0TmFtZSI6ICJpbWcudWktcG9ydGFsLmRlIiwgImlzc3VlciI6ICJHZW9UcnVzdCBSU0EgQ0EgMjAxOCIsICJ2YWxpZEZyb20iOiAxNjU4NzA3MjAwLCAidmFsaWRUbyI6IDE2OTAzMjk1OTl9fSwgeyJzdGFydGVkRGF0ZVRpbWUiOiAiMjAyMy0wNS0yNlQwNToxMDoxMy40NDRaIiwgInRpbWUiOiAxMzUuNDYxLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9qcy51aS1wb3J0YWwuZGUvYy9laWMvZWljLmpzIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogIjphdXRob3JpdHkiLCAidmFsdWUiOiAianMudWktcG9ydGFsLmRlIn0sIHsibmFtZSI6ICI6bWV0aG9kIiwgInZhbHVlIjogIkdFVCJ9LCB7Im5hbWUiOiAiOnBhdGgiLCAidmFsdWUiOiAiL2MvZWljL2VpYy5qcyJ9LCB7Im5hbWUiOiAiOnNjaGVtZSIsICJ2YWx1ZSI6ICJodHRwcyJ9LCB7Im5hbWUiOiAiYWNjZXB0IiwgInZhbHVlIjogIiovKiJ9LCB7Im5hbWUiOiAiYWNjZXB0LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAsIGRlZmxhdGUsIGJyIn0sIHsibmFtZSI6ICJyZWZlcmVyIiwgInZhbHVlIjogImh0dHBzOi8vYWRpbWcudWltc2Vydi5uZXQvIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtZGVzdCIsICJ2YWx1ZSI6ICJzY3JpcHQifSwgeyJuYW1lIjogInNlYy1mZXRjaC1tb2RlIiwgInZhbHVlIjogIm5vLWNvcnMifSwgeyJuYW1lIjogInNlYy1mZXRjaC1zaXRlIiwgInZhbHVlIjogImNyb3NzLXNpdGUifSwgeyJuYW1lIjogInVzZXItYWdlbnQiLCAidmFsdWUiOiAiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExMy4wLjU2NzIuNTMgU2FmYXJpLzUzNy4zNiJ9XSwgInF1ZXJ5U3RyaW5nIjogW10sICJoZWFkZXJzU2l6ZSI6IDQwMSwgImJvZHlTaXplIjogMH0sICJyZXNwb25zZSI6IHsic3RhdHVzIjogMjAwLCAic3RhdHVzVGV4dCI6ICIiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiYWNjZXB0LXJhbmdlcyIsICJ2YWx1ZSI6ICJieXRlcyJ9LCB7Im5hbWUiOiAiY2FjaGUtY29udHJvbCIsICJ2YWx1ZSI6ICJwdWJsaWMsIG1heC1hZ2U9MTcwMzYifSwgeyJuYW1lIjogImNvbnRlbnQtZW5jb2RpbmciLCAidmFsdWUiOiAiZ3ppcCJ9LCB7Im5hbWUiOiAiY29udGVudC1sZW5ndGgiLCAidmFsdWUiOiAiMjgyNSJ9LCB7Im5hbWUiOiAiY29udGVudC10eXBlIiwgInZhbHVlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQifSwgeyJuYW1lIjogImRhdGUiLCAidmFsdWUiOiAiRnJpLCAyNiBNYXkgMjAyMyAwNToxMDoxMyBHTVQifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiXCIyMzgwLTU1YTEzNTA5ZmU4MjZcIiJ9LCB7Im5hbWUiOiAibGFzdC1tb2RpZmllZCIsICJ2YWx1ZSI6ICJUdWUsIDI2IFNlcCAyMDE3IDA4OjE4OjA3IEdNVCJ9LCB7Im5hbWUiOiAic2VydmVyIiwgInZhbHVlIjogIkFwYWNoZSJ9LCB7Im5hbWUiOiAidW51c2VkNjIiLCAidmFsdWUiOiAiODA5NjI2NyJ9LCB7Im5hbWUiOiAidmFyeSIsICJ2YWx1ZSI6ICJBY2NlcHQtRW5jb2RpbmcifSwgeyJuYW1lIjogIngtcm9ib3RzLXRhZyIsICJ2YWx1ZSI6ICJub2luZGV4In1dLCAiY29udGVudCI6IHsic2l6ZSI6IDkwODgsICJtaW1lVHlwZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwgImNvbXByZXNzaW9uIjogNjA1MywgInRleHQiOiAiLyoqXHJcbiAqIEBhdXRob3IgVW5pdGVkIEludGVybmV0IEFHXHJcbiAqIEBkYXRlIDE5LjAxLjIwMTFcclxuICogQHZlcnNpb24gMC4wLjJcclxuICogQHJldmlzaW9uICRJZCRcclxuICogQG9yaWdpbmF0b3IgYWxleFxyXG4gKiBAbWFpbnRhaW5lciBoYXBmLCBhbGV4XHJcbiAqIEV4dGVybmFsIElmcmFtZSBDb21tdW5pY2F0aW9uIChFSUMpXHJcbiAqIERvY3VtZW50YXRpb246IGh0dHA6Ly9seGR1czAyLmludC5jaW5ldGljLmRlOjgyMjAvcHJvZC90ZXN0L2VpYy5odG1sXHJcbiAqL1xyXG4oZnVuY3Rpb24oKXtcclxuICAgIGNvbSA9IHdpbmRvdy5jb20gfHwge307XHJcbiAgICBpZiAoIWNvbS51bml0ZWRpbnRlcm5ldCkgeyBjb20udW5pdGVkaW50ZXJuZXQgPSB7fTsgfVxyXG4gICAgaWYgKCFjb20udW5pdGVkaW50ZXJuZXQuZWljKSB7IGNvbS51bml0ZWRpbnRlcm5ldC5laWMgPSB7fTsgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy52ZXJzaW9uID0gJzAuMC4yJztcclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZmxhc2hGYWxsYmFjayA9ICcvL2pzLnVpLXBvcnRhbC5kZS9jL2VpYy9laWMtZmFsbGJhY2suc3dmJztcclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZnJhbWVzID0gW107XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmNvbW1hbmRzID0ge307XHJcbiAgICAvLyBzZXQgbGF0ZW5jeSBmb3IgbWVzc2FnZXMgKG9ubHkgaWYgcG9zdG1lc3NhZ2UgaXMgbm90IGF2YWlsYWJsZSlcclxuICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMubGF0ZW5jeSA9IDUwMDtcclxuICAgIC8vIHZlcnNhdGlsZSBwYXJhbWV0ZXIgZnVuY3Rpb24gb2JqIDw9PT4gc3RyaW5nXHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcyA9IGZ1bmN0aW9uICh1cmwpIHtcclxuICAgICAgICB2YXIgcmVzdWx0O1xyXG4gICAgICAgIGlmICghdXJsIHx8IHR5cGVvZih1cmwpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHt9O1xyXG4gICAgICAgICAgICB1bmVzY2FwZSgodXJsIHx8IGxvY2F0aW9uLmhyZWYpLnJlcGxhY2UoL15bXiNdKiMvLCAnJykpLnJlcGxhY2UoLyhbXiM9XSspPT8oW14jPV0qKS9nLCBmdW5jdGlvbihmdWxsLCBrZXksIHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5KSB7IHJlc3VsdFtrZXldID0gdmFsdWUgfHwgdHJ1ZTsgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZih1cmwpID09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIGlmIChjb20udW5pdGVkaW50ZXJuZXQuZWljLmxjaWQpIHsgdXJsLmxjaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLmxjaWQ7IH1cclxuICAgICAgICAgICAgcmVzdWx0ID0gW107XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB1cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1cmwuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVzY2FwZShrZXkpKyc9Jytlc2NhcGUodXJsW2tleV0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmpvaW4oJyMnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5pZCA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMucGFyYW1zKCkuaWQ7XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmxjaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcygpLmxjaWQgfHwgKG5ldyBEYXRlKCkqMSkrJycrKE1hdGgucmFuZG9tKCkqMUU2KTtcclxuICAgIGlmICghd2luZG93LnBvc3RNZXNzYWdlICYmICghd2luZG93Lm9wZXJhICYmIGRvY3VtZW50LmFsbCkpIHtcclxuICAgICAgICAvLyB3ZSBuZWVkIGF0IGxlYXN0IEZsYXNoIDkgZm9yIHRoZSBmYWxsYmFja1xyXG4gICAgICAgIHZhciB2ciA9IC9eKFxcRCooXFxkK1xcLj9cXGQqKVxccypyPyhcXGQqKXxcXFMrXFxzKyhcXGQrKSw/KFxcZCopLD8oXFxkKiksP1xcZCopJC8sIG4sIGUsIG5vZmxhc2g5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIS9tc2llXFxXNy9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHtcclxuICAgICAgICAgICAgdHJ5IHsgaWYgKHdpbmRvdy5BY3RpdmVYT2JqZWN0ICYmIChuID0gbmV3IEFjdGl2ZVhPYmplY3QoJ1Nob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoJykpICYmIChlID0gdnIuZXhlYyhuLkdldFZhcmlhYmxlKCckdmVyc2lvbicpfHwnJykpICYmIHBhcnNlRmxvYXQoZVs0XSsnLicrZVs1XSkgPj0gOSkgeyBub2ZsYXNoOSA9IGZhbHNlOyB9IH0gY2F0Y2goZSkgeyB9XHJcbiAgICAgICAgICAgIGlmICgobiA9IChuYXZpZ2F0b3IucGx1Z2luc3x8e30pWydTaG9ja3dhdmUgRmxhc2gnXSkgJiYgKGUgPSB2ci5leGVjKChufHwwKS5kZXNjcmlwdGlvbnx8JycpKSAmJiBwYXJzZUZsb2F0KGVbMl0pID49IDkpIHsgbm9mbGFzaDkgPSBmYWxzZTsgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9mbGFzaDkpIHtcclxuICAgICAgICAgICAgdmFyIHNlbmRNZXNzYWdlID0gZnVuY3Rpb24oKSB7IHJldHVybjsgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgYm9keUludCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHZhciBib2R5O1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0gfHwge30pLmZpcnN0Q2hpbGQpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgICAgICB2YXIgZmxhc2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgIHZhciBmbGFzaHVybCA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZmxhc2hGYWxsYmFjayArICc/bGNpZD0nK2NvbS51bml0ZWRpbnRlcm5ldC5laWMubGNpZCsoY29tLnVuaXRlZGludGVybmV0LmVpYy5pZCA/ICcmaWQ9Jytjb20udW5pdGVkaW50ZXJuZXQuZWljLmlkIDogJycpO1xyXG4gICAgICAgICAgICAgICAgZmxhc2guaW5uZXJIVE1MID0gJzxvYmplY3QgaWQ9XCJlaWNGYWxsYmFja1wiIGhlaWdodD1cIjFcIiB3aWR0aD1cIjFcIiBjbGFzc2lkPVwiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwXCIgbmFtZT1cImVpY0ZhbGxiYWNrXCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDt0b3A6LTEwMDBweDtsZWZ0Oi0xMDAwcHg7XCI+PHBhcmFtIG5hbWU9XCJfY3hcIiB2YWx1ZT1cIjExOTA2XCI+PHBhcmFtIG5hbWU9XCJfY3lcIiB2YWx1ZT1cIjExOTA2XCI+PHBhcmFtIG5hbWU9XCJGbGFzaFZhcnNcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiTW92aWVcIiB2YWx1ZT1cIicrZmxhc2h1cmwrJ1wiPjxwYXJhbSBuYW1lPVwiU3JjXCIgdmFsdWU9XCInK2ZsYXNodXJsKydcIj48cGFyYW0gbmFtZT1cIldNb2RlXCIgdmFsdWU9XCJ3aW5kb3dcIj48cGFyYW0gbmFtZT1cIlBsYXlcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkxvb3BcIiB2YWx1ZT1cIi0xXCI+PHBhcmFtIG5hbWU9XCJRdWFsaXR5XCIgdmFsdWU9XCJIaWdoXCI+PHBhcmFtIG5hbWU9XCJTQWxpZ25cIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiTWVudVwiIHZhbHVlPVwiLTFcIj48cGFyYW0gbmFtZT1cIkJhc2VcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiQWxsb3dTY3JpcHRBY2Nlc3NcIiB2YWx1ZT1cImFsd2F5c1wiPjxwYXJhbSBuYW1lPVwiU2NhbGVcIiB2YWx1ZT1cIlNob3dBbGxcIj48cGFyYW0gbmFtZT1cIkRldmljZUZvbnRcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkVtYmVkTW92aWVcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkJHQ29sb3JcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiU1dSZW1vdGVcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiTW92aWVEYXRhXCIgdmFsdWU9XCJcIj48cGFyYW0gbmFtZT1cIlNlYW1sZXNzVGFiYmluZ1wiIHZhbHVlPVwiMVwiPjxwYXJhbSBuYW1lPVwiUHJvZmlsZVwiIHZhbHVlPVwiMFwiPjxwYXJhbSBuYW1lPVwiUHJvZmlsZUFkZHJlc3NcIiB2YWx1ZT1cIlwiPjxwYXJhbSBuYW1lPVwiUHJvZmlsZVBvcnRcIiB2YWx1ZT1cIjBcIj48cGFyYW0gbmFtZT1cIkFsbG93TmV0d29ya2luZ1wiIHZhbHVlPVwiYWxsXCI+PHBhcmFtIG5hbWU9XCJBbGxvd0Z1bGxTY3JlZW5cIiB2YWx1ZT1cImZhbHNlXCI+PC9vYmplY3Q+JztcclxuICAgICAgICAgICAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKGZsYXNoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvYmplY3QnKVswXSwgYm9keS5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZmFsbGJhY2tMaXN0ZW4gPSBmdW5jdGlvbihtc2csIHVybCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9ERUJVRzogYWxlcnQoJ21lc3NhZ2UgcmVjZWl2ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHdpbmRvdy5vbm1lc3NhZ2UpID09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25tZXNzYWdlKHsgZGF0YTogbXNnLCBvcmlnaW46IHVybCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL0RFQlVHOiBhbGVydChsb2NhdGlvbi5ocmVmKyc6ICcrdHlwZW9mKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpLmVpY0ZhbGxiYWNrTWVzc2FnZSkrJyAnK3R5cGVvZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWljRmFsbGJhY2snKS5laWNGYWxsYmFja0xpc3RlbikrXCJcXG5zd2YtdXJsOiBcIitkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnUGFyYW0nKVszXS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb20udW5pdGVkaW50ZXJuZXQuZWljLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpLmVpY0ZhbGxiYWNrTGlzdGVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoYm9keUludCk7XHJcbiAgICAgICAgICAgIH0sIDE1KTtcclxuICAgICAgICAgICAgdmFyIHNlbmRNZXNzYWdlID0gZnVuY3Rpb24odGFyZ2V0LCBtc2csIHVybCl7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNGYWxsYmFjaycpIHx8ICF0eXBlb2YoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpY0ZhbGxiYWNrJykuZWljRmFsbGJhY2tNZXNzYWdlKSA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbmRNZXNzYWdlKHRhcmdldCwgbXNnLCB1cmwpOyB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy9ERUJVRzogYWxlcnQoJ21lc3NhZ2Ugc2VudCcpO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VpY0ZhbGxiYWNrJykuZWljRmFsbGJhY2tNZXNzYWdlKG1zZywgdXJsKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciBzZW5kTWVzc2FnZSA9IGZ1bmN0aW9uKHRhcmdldCwgbXNnLCB1cmwpIHsgdGFyZ2V0LnBvc3RNZXNzYWdlKG1zZywgdXJsKTsgfVxyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5zZW5kID0gZnVuY3Rpb24obXNnLCB1cmwsIHRhcmdldCkge1xyXG4gICAgICAgIHZhciBwYXJhbXMgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcygpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHNlbmRNZXNzYWdlKCh0YXJnZXQgfHwgcGFyZW50KSwgJyNsY2lkPScrcGFyYW1zLmxjaWQrJyNpZD0nKyhwYXJhbXMuaWQgfHwgJzk5OScpKycjJyttc2csICh1cmwgfHwgcGFyYW1zLnVybCB8fCAnJykpO1xyXG4gICAgICAgIH0gY2F0Y2goZSkgeyB9XHJcbiAgICB9XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLnRvT3JpZ2luID0gZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKC9eKFxcdys6fCkoXFwvXFwvfCkoW146L10rKSg6XFxkK3wpLiokLywgZnVuY3Rpb24obGluaywgcHJvdG9jb2wsIGRlbGltaXRlciwgaG9zdCwgcG9ydCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKHByb3RvY29sIHx8IGxvY2F0aW9uLnByb3RvY29sKSArICcvLycgKyBob3N0ICsgKHBvcnQgfHwgJycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5saXN0ZW4gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgZSwgbGlzdGVuZXIgPSBmdW5jdGlvbihldnQpIHtcclxuICAgICAgICAgICAgaWYgKCFldnQpIHsgZXZ0ID0gd2luZG93LmV2ZW50OyB9XHJcbiAgICAgICAgICAgIC8vIHN0b3AgSUFDIG1lc3NhZ2VzIGZyb20gYmVpbmcgcGFyc2VkIHdpdGggRUlDXHJcbiAgICAgICAgICAgIGlmICghZXZ0IHx8ICFldnQuZGF0YSB8fCAvXklBQ1xcZC8udGVzdChldnQuZGF0YSkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLnBhcmFtcyhldnQuZGF0YSksXHJcbiAgICAgICAgICAgICAgICBmcmFtZSA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZnJhbWVzW3BhcmFtcy5pZCoxXSB8fCB7fSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZyYW1lLnNyYyB8fCBmcmFtZS5xeHNyY3ZhbHVlO1xyXG4gICAgICAgICAgICAvLyBpZTcgcmVtb3ZlcyBwcm90b2NvbDsgdGFrZSBjYXJlIG9mIG1haWwgZGVyZWZlcnJlciBpbiBuZXdlciBjbGllbnRzXHJcbiAgICAgICAgICAgIGlmICgoIXNvdXJjZSB8fCBjb20udW5pdGVkaW50ZXJuZXQuZWljLnRvT3JpZ2luKHNvdXJjZSkgIT09IGNvbS51bml0ZWRpbnRlcm5ldC5laWMudG9PcmlnaW4oZXZ0Lm9yaWdpbiB8fCBldnQuZG9tYWluKSkgJiZcclxuICAgICAgICAgICAgICAgICEoL14oaHR0cHM/OlxcL1xcL3wpKG1hZHwpbWFpbGRlcmVmXFwuKGdteFxcLm5ldHxnbXhcXC5jb218MXVuZDFcXC5kZXxzZXJ2ZXJcXC5sYW58d2ViXFwuZGV8bWFpbFxcLmNvbSlcXC8vLnRlc3Qoc291cmNlKSAmJlxyXG4gICAgICAgICAgICAgICAgL14oaHR0cHM/OlxcL1xcL3wpKG0/YWQoY2xpZW50fGltZylcXC51aW1zZXJ2XFwubmV0fGltZy51aS1wb3J0YWwuZGV8c2VydmVyXFwubGFuKShcXC98JCkvLnRlc3QoZXZ0Lm9yaWdpbiB8fCBldnQuZG9tYWluKSkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBjb20udW5pdGVkaW50ZXJuZXQuZWljLmNvbW1hbmRzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmNvbW1hbmRzW2tleV0uY2FsbChmcmFtZSwgcGFyYW1zW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICAvLyBzbWFsbCBjb25zdHJ1Y3QgdG8gc2V0IERPTSBldmVudHMgaW4gRkYvSUU6XHJcbiAgICAgICAgaWYgKHdpbmRvdy5wb3N0TWVzc2FnZSkge1xyXG4gICAgICAgICAgICAoKGU9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHx8IHdpbmRvdy5hdHRhY2hFdmVudCkoKGU/Jyc6J29uJykrJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjb20udW5pdGVkaW50ZXJuZXQuZWljLmRvbUZyYW1lID0gZnVuY3Rpb24odXJsLCBhdHRyaWJ1dGVzLCBzdHlsZSkge1xyXG4gICAgICAgIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKSxcclxuICAgICAgICAgICAgaWQgPSBjb20udW5pdGVkaW50ZXJuZXQuZWljLmZyYW1lcy5sZW5ndGg7XHJcbiAgICAgICAgaWZyYW1lLnNyYyA9IHVybCArICcjJyArIGNvbS51bml0ZWRpbnRlcm5ldC5laWMucGFyYW1zKHsgaWQ6IGlkLCB1cmw6IGxvY2F0aW9uLmhyZWYgfSk7XHJcbiAgICAgICAgY29tLnVuaXRlZGludGVybmV0LmVpYy5mcmFtZXNbaWRdID0gaWZyYW1lO1xyXG4gICAgICAgIGlmICghc3R5bGUgJiYgKGF0dHJpYnV0ZXMgfHwge30pLnN0eWxlKSB7XHJcbiAgICAgICAgICAgIHN0eWxlID0gYXR0cmlidXRlcy5zdHlsZTtcclxuICAgICAgICAgICAgYXR0cmlidXRlcy5zdHlsZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gKGF0dHJpYnV0ZXMgfHwge30pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShpdGVtKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoaXRlbSwgYXR0cmlidXRlc1tpdGVtXSk7XHJcbiAgICAgICAgICAgIGlmcmFtZVtpdGVtXSA9IGF0dHJpYnV0ZXNbaXRlbV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGl0ZW0gaW4gKHN0eWxlIHx8IHt9KSkge1xyXG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoaXRlbSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZnJhbWUuc3R5bGVbaXRlbV0gPSBhdHRyaWJ1dGVzW2l0ZW1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWZyYW1lO1xyXG4gICAgfVxyXG4gICAgY29tLnVuaXRlZGludGVybmV0LmVpYy53cml0ZUZyYW1lID0gZnVuY3Rpb24odXJsLCBhdHRyaWJ1dGVzLCBzdHlsZSkge1xyXG4gICAgICAgIHZhciBpZCA9IGNvbS51bml0ZWRpbnRlcm5ldC5laWMuZnJhbWVzLmxlbmd0aCxcclxuICAgICAgICAgICAgaWZyYW1lID0gY29tLnVuaXRlZGludGVybmV0LmVpYy5kb21GcmFtZSh1cmwsIGF0dHJpYnV0ZXMsIHN0eWxlKTtcclxuICAgICAgICBkb2N1bWVudC53cml0ZSgnPGRpdiBpZD1cImVpY2ZyYW1lJytpZCsnXCI+PC9kaXY+Jyk7XHJcbiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlaWNmcmFtZScraWQpO1xyXG4gICAgICAgIGRpdi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChpZnJhbWUsIGRpdik7XHJcbiAgICAgICAgcmV0dXJuIGlmcmFtZTtcclxuICAgIH1cclxufSkoKTtcclxuIn0sICJoZWFkZXJzU2l6ZSI6IDAsICJib2R5U2l6ZSI6IDMwMzUsICJyZWRpcmVjdFVSTCI6ICIiLCAiX3RyYW5zZmVyU2l6ZSI6IDMwMzV9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IC0xLCAiY29ubmVjdCI6IC0xLCAic3NsIjogLTEsICJzZW5kIjogMCwgIndhaXQiOiAxMzAuNTkxLCAicmVjZWl2ZSI6IDQuODd9LCAicGFnZXJlZiI6ICJwYWdlQDZjZDhmNzlkZjJhOGFiMDBiZGFhMGRkNDlkN2I4ZGZlIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyLjIxLjE2LjE4MyIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjIiLCAic3ViamVjdE5hbWUiOiAiaW1nLnVpLXBvcnRhbC5kZSIsICJpc3N1ZXIiOiAiR2VvVHJ1c3QgUlNBIENBIDIwMTgiLCAidmFsaWRGcm9tIjogMTY1ODcwNzIwMCwgInZhbGlkVG8iOiAxNjkwMzI5NTk5fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTMuNDQ1WiIsICJ0aW1lIjogMTA0LjkzNzAwMDAwMDAwMDAxLCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9qcy51aS1wb3J0YWwuZGUvYy9hZHMvbWFzL21hcy1hc3AuanMiLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJqcy51aS1wb3J0YWwuZGUifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvYy9hZHMvbWFzL21hcy1hc3AuanMifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL2FkaW1nLnVpbXNlcnYubmV0LyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJjcm9zcy1zaXRlIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFtdLCAiaGVhZGVyc1NpemUiOiA0MTcsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbXSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImFjY2VwdC1yYW5nZXMiLCAidmFsdWUiOiAiYnl0ZXMifSwgeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAicHVibGljLCBtYXgtYWdlPTUxNzcyIn0sIHsibmFtZSI6ICJjb250ZW50LWVuY29kaW5nIiwgInZhbHVlIjogImd6aXAifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjE1NzAifSwgeyJuYW1lIjogImNvbnRlbnQtdHlwZSIsICJ2YWx1ZSI6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDU6MTA6MTMgR01UIn0sIHsibmFtZSI6ICJldGFnIiwgInZhbHVlIjogIlwiZGRjLTUzYmMzMTFlN2EyZjgtZ3ppcFwiIn0sIHsibmFtZSI6ICJsYXN0LW1vZGlmaWVkIiwgInZhbHVlIjogIk1vbiwgMDUgU2VwIDIwMTYgMTM6NTg6MDggR01UIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiQXBhY2hlIn0sIHsibmFtZSI6ICJ2YXJ5IiwgInZhbHVlIjogIkFjY2VwdC1FbmNvZGluZyJ9LCB7Im5hbWUiOiAieC1yb2JvdHMtdGFnIiwgInZhbHVlIjogIm5vaW5kZXgifV0sICJjb250ZW50IjogeyJzaXplIjogMzU0OCwgIm1pbWVUeXBlIjogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLCAiY29tcHJlc3Npb24iOiAxNzc5LCAidGV4dCI6ICJNQVMgPSB7XHJcbiAgICB1YTogZnVuY3Rpb24gKG8sIHgsIGksIHYsIHcsIGQpIHtcclxuICAgICAgICBvID0geyB1YTogbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLCBpbmZvOiB7fSB9LCB4ID0gJ2Jyb3dzZXInLCB2ID0gJ3ZlcnNpb24nLCB3ID0gd2luZG93LCBkID0gZG9jdW1lbnQ7XHJcbiAgICAgICAgby51YS5yZXBsYWNlKC9bXFwoXFwpXS9nLCAnOycpLnJlcGxhY2UoL1xccyooXFx3Kj9cXCA/XFx3K1tcXDpcXHNdP1teXFxkXFxzO10qPylbXFwvXFwgO10oXFxkWy5cXHddKnwpL2csIGZ1bmN0aW9uKGYsIGssIHYpIHsgby5pbmZvW2tdID0gby5pbmZvW2tdIHx8IHYgfHwgITA7IH0pO1xyXG4gICAgICAgICdtc2llMW9wcjFmaXJlZm94MXNlYW1vbmtleTFhdXJvcmExaXJvbjFjaHJvbWUxbW9iaWxlIHNhZmFyaTFzYWZhcmkxb3BlcmExd2luZG93czB3aW5kb3dzIG50MHdpbmRvd3MgcGhvbmUwd2luZG93cyBydDBtYWMgb3Mwb3MgeDBhbmRyb2lkMGlwaG9uZTBpcGFkMGlwb2QwYmxhY2tiZXJyeTByaW0wbGludXgwJy5yZXBsYWNlKC8oXFxEKykoXFxkKS9nLCBmdW5jdGlvbihuLCBjLCBkKSB7IG4gPSArZCA/IHggOiAnb3MnOyBvLmluZm9bY10gJiYgKG9bbl0gPSBvW25dIHx8IHsgbmFtZTogYyA9PSAnb3ByJyA/ICdvcGVyYScgOiAoYyA9PSAnc2FmYXJpJyAmJiBvLmluZm8uYW5kcm9pZCB8fCBjID09ICdjaHJvbWUnICYmICtvLmluZm9bdl0gPT0gMSkgfHwgKG8uaW5mby5hbmRyb2lkICYmIGMgPT0gJ21vYmlsZSBzYWZhcmknKSA/ICduYXRpdmUnIDogYyA9PSAnb3MgeCcgPyAnbWFjIG9zJyA6IGMsIHZlcnNpb246ICgrZCA/IG8uaW5mb1t2XSA6IDApIHx8IG8uaW5mb1tjXSB9LCBvW25dW29bbl0ubmFtZV0gPSBwYXJzZUZsb2F0KG9bbl1bdl0pIHx8IG9bbl1bdl0pIH0pO1xyXG4gICAgICAgIChpID0gK28uaW5mby50cmlkZW50ICsgNCkgJiYgKG9beF0gPSB7IG5hbWU6ICdtc2llJywgbXNpZTogaSwgdmVyc2lvbjogaSB9KTtcclxuICAgICAgICBvW3hdID0gb1t4XSB8fCB7IG5hbWU6ICcnLCB2ZXJzaW9uOiAnJyB9O1xyXG4gICAgICAgIG8ub3MgPSBvLm9zIHx8IHsgbmFtZTogJycsIHZlcnNpb246ICcnIH07XHJcbiAgICAgICAgby5yZXRpbmEgPSAnbWF0Y2hNZWRpYScgaW4gdyAmJiAody5tYXRjaE1lZGlhKCcoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAyKScpIHx8IDApLm1hdGNoZXM7XHJcbiAgICAgICAgby5jb25uZWN0aW9uID0gWyd1bmtub3duJywgJ2V0aCcsICd3aWZpJywgJzJnJywgJzNnJywgJzRnJ11bKG5hdmlnYXRvci5jb25uZWN0aW9uIHx8IDApLnR5cGUgfHwgMF0gfHwgJ3Vua25vd24nXHJcbiAgICAgICAgby5mb3JtYXQgPSAvYW5kcm9pZCg/IS4qbW9iaWxlKXxpcGFkfGtpbmRsZXxwbGF5Ym9va3xcXGJ0YWJ8c3VyZmFjZS8udGVzdChvLnVhKSA/ICd0YWInIDogL21vYml8d2luZG93cyBwaG9uZXxpcGhvbmV8YmxhY2tiZXJyeS8udGVzdChvLnVhKSA/ICdtb2JpbGUnIDogJ2Rlc2t0b3AnO1xyXG4gICAgICAgIHJldHVybiBvXHJcbiAgICB9KCksXHJcbiAgICB1cmw6ICcvL2FkMTEuYWRmYXJtMS5hZGl0aW9uLmNvbS9sdCcsXHJcbiAgICBhYzogMCxcclxuICAgIHdpOiAoTWF0aC5yYW5kb20oKS50b1N0cmluZygpLnN1YnN0cigyLCA5KSksXHJcbiAgICBwYXJhbXM6IGZ1bmN0aW9uKG9wdHMpIHtcclxuICAgICAgICB2YXIgZCA9IHtcclxuICAgICAgICAgICAgbnc6IG9wdHMuYWR0ZXN0PyczMTI3JzonNDInLFxyXG4gICAgICAgICAgICBsdDogdHJ1ZSxcclxuICAgICAgICAgICAgd3B0OiAnaicsXHJcbiAgICAgICAgICAgIGFjOiArK01BUy5hYyxcclxuICAgICAgICAgICAgd2k6IE1BUy53aSxcclxuICAgICAgICAgICAgZXh0ZXJuYWxfdWlkOiAnJyxcclxuICAgICAgICAgICAgdWlkX3N0YWJsZTogJycsXHJcbiAgICAgICAgICAgIG9wdG91dDogMCxcclxuICAgICAgICAgICAgY2w6IHRoaXMudWEuYnJvd3Nlci5uYW1lLnNsaWNlKDAsMyksXHJcbiAgICAgICAgICAgIGNsdjogKDB8cGFyc2VGbG9hdCh0aGlzLnVhLmJyb3dzZXIudmVyc2lvbikpLFxyXG4gICAgICAgICAgICBzeXM6ICh0aGlzLnVhLm9zLm5hbWUpLnNsaWNlKDAsMyksXHJcbiAgICAgICAgICAgIHN5c3Y6IHRoaXMudWEub3MudmVyc2lvbnx8Jz8nLFxyXG4gICAgICAgICAgICB2cHc6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgICAgZGV2aWNlY2xhc3M6ICgoeyd0YWInOidtJywnbW9iaWxlJzoncyd9KVt0aGlzLnVhLmZvcm1hdF0gfHwgJ2InKSxcclxuICAgICAgICAgICAgZGV2aWNlY2xpZW50OiAnYnJvd3NlcicsXHJcbiAgICAgICAgICAgIGxheW91dGNsYXNzOiAncydcclxuICAgICAgICB9LCBwID0gW10sIG8sIGRwID0ge253OjEsbHQ6MSx3cHQ6MSxhYzoxLHdpOjEscmVmOjEsZXh0ZXJuYWxfdWlkOjIsdWlkX3N0YWJsZToxLG9wdG91dDoxfTtcclxuICAgICAgICBkb2N1bWVudC5yZWZlcmVyICYmIChkLnJlZiA9IGRvY3VtZW50LnJlZmVyZXIpO1xyXG4gICAgICAgIHRoaXMudWEucmV0aW5hICYmIChkLnI9MSk7XHJcbiAgICAgICAgZm9yIChvIGluIG9wdHMpIG9wdHMuaGFzT3duUHJvcGVydHkobykgJiYgb3B0c1tvXSAmJiAoZFtvXSA9IG9wdHNbb10pO1xyXG4gICAgICAgIGQubHQgPSAncG9ydGFsKCcrZC5wb3J0YWwrJyljYXRlZ29yeSgnK2QuY2F0ZWdvcnkrJylzZWN0aW9uKCcrZC5zZWN0aW9uKycpdGFnaWQoJytkLnRhZ2lkKycpbGF5b3V0Y2xhc3MoJytkLmxheW91dGNsYXNzKycpJztcclxuICAgICAgICAoKC8oPzpefFtcXHM7XSlOR1VzZXJJRD0oW147XSspLy50ZXN0KGRvY3VtZW50LmNvb2tpZSkgJiYgKGQudWlkX3N0YWJsZSA9IDAsIGQubmd1c2VyaWQgPSBSZWdFeHAuJDEsIGQuZXh0ZXJuYWxfdWlkID0gUmVnRXhwLiQxKSkgPT0gJ1RHUC1PUFQtT1VUJykgJiYgKGQub3B0b3V0ID0gMSk7XHJcbiAgICAgICAgZC5oaWQgJiYgKGQudWlkX3N0YWJsZSA9IDEsIGQuZXh0ZXJuYWxfdWlkID0gZC5oaWQpO1xyXG4gICAgICAgIGQudWlkcyA9IGQudWlkX3N0YWJsZTtcclxuICAgICAgICBmb3IgKG8gaW4gZCkge1xyXG4gICAgICAgICAgICBwLnB1c2goKGRwW29dP286J3ByZlsnK28rJ10nKSsnPScrZFtvXSk7XHJcbiAgICAgICAgICAgIGRwW29dPT09MiAmJiBwLnB1c2goJ3ByZlsnK28rJ10nKyc9JytkW29dKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChwLmxlbmd0aCA/IHAuam9pbignJicpIDogJycpO1xyXG4gICAgfSxcclxuICAgIGxpbms6IGZ1bmN0aW9uKG9wdHMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51cmwrKC9cXD8vLnRlc3QodGhpcy51cmwpID8gJyYnIDogJz8nKSt0aGlzLnBhcmFtcyhvcHRzKTtcclxuICAgIH0sXHJcbiAgICBodG1sTGluazogZnVuY3Rpb24ob3B0cykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmsob3B0cykucmVwbGFjZSgvJi9nLCAnJmFtcDsnKTtcclxuICAgIH0sXHJcbiAgICBjYWxsOiBmdW5jdGlvbihvcHRzKSB7IGRvY3VtZW50LndyaXRlKG9wdHMud3B0PT09J2gnID8gJzxpZnJhbWUgc3JjPVwiJyt0aGlzLmh0bWxMaW5rKG9wdHMpKydcIj48L2lmcmFtZT4nIDogJzxzY3JpcHQgc3JjPVwiJyt0aGlzLmh0bWxMaW5rKG9wdHMpKydcIj48XFwvc2NyaXB0PicpIH1cclxufVxyXG4ifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMTc2OSwgInJlZGlyZWN0VVJMIjogIiIsICJfdHJhbnNmZXJTaXplIjogMTc2OX0sICJjYWNoZSI6IHt9LCAidGltaW5ncyI6IHsiZG5zIjogLTEsICJjb25uZWN0IjogLTEsICJzc2wiOiAtMSwgInNlbmQiOiAwLCAid2FpdCI6IDEwMi43NzIsICJyZWNlaXZlIjogMi4xNjV9LCAicGFnZXJlZiI6ICJwYWdlQDZjZDhmNzlkZjJhOGFiMDBiZGFhMGRkNDlkN2I4ZGZlIiwgInNlcnZlcklQQWRkcmVzcyI6ICIyLjIxLjE2LjE4MyIsICJfc2VydmVyUG9ydCI6IDQ0MywgIl9zZWN1cml0eURldGFpbHMiOiB7InByb3RvY29sIjogIlRMUyAxLjIiLCAic3ViamVjdE5hbWUiOiAiaW1nLnVpLXBvcnRhbC5kZSIsICJpc3N1ZXIiOiAiR2VvVHJ1c3QgUlNBIENBIDIwMTgiLCAidmFsaWRGcm9tIjogMTY1ODcwNzIwMCwgInZhbGlkVG8iOiAxNjkwMzI5NTk5fX0sIHsic3RhcnRlZERhdGVUaW1lIjogIjIwMjMtMDUtMjZUMDU6MTA6MTMuNjgyWiIsICJ0aW1lIjogNTguMzM1LCAicmVxdWVzdCI6IHsibWV0aG9kIjogIkdFVCIsICJ1cmwiOiAiaHR0cHM6Ly9hZDExLmFkZmFybTEuYWRpdGlvbi5jb20vbHQ/bnc9NDImbHQ9cG9ydGFsKGdteCljYXRlZ29yeShtYWlsKXNlY3Rpb24obG9naW4pdGFnaWQoYm90dG9tKWxheW91dGNsYXNzKHMpJndwdD1qJmFjPTEmd2k9MDE4NzUyNTI1JmV4dGVybmFsX3VpZD0mcHJmW2V4dGVybmFsX3VpZF09JnVpZF9zdGFibGU9Jm9wdG91dD0wJnByZltjbF09Y2hyJnByZltjbHZdPTExMyZwcmZbc3lzXT13aW4mcHJmW3N5c3ZdPTEwLjAmcHJmW3Zwd109MzAwJnByZltkZXZpY2VjbGFzc109YiZwcmZbZGV2aWNlY2xpZW50XT1icm93c2VyJnByZltsYXlvdXRjbGFzc109cyZwcmZbcG9ydGFsXT1nbXgmcHJmW2NhdGVnb3J5XT1tYWlsJnByZltzZWN0aW9uXT1sb2dpbiZwcmZbdGFnaWRdPWJvdHRvbSZwcmZbb3JpZW50XT1sJnByZlt1aWRzXT0iLCAiaHR0cFZlcnNpb24iOiAiSFRUUC8yLjAiLCAiY29va2llcyI6IFtdLCAiaGVhZGVycyI6IFt7Im5hbWUiOiAiOmF1dGhvcml0eSIsICJ2YWx1ZSI6ICJhZDExLmFkZmFybTEuYWRpdGlvbi5jb20ifSwgeyJuYW1lIjogIjptZXRob2QiLCAidmFsdWUiOiAiR0VUIn0sIHsibmFtZSI6ICI6cGF0aCIsICJ2YWx1ZSI6ICIvbHQ/bnc9NDImbHQ9cG9ydGFsKGdteCljYXRlZ29yeShtYWlsKXNlY3Rpb24obG9naW4pdGFnaWQoYm90dG9tKWxheW91dGNsYXNzKHMpJndwdD1qJmFjPTEmd2k9MDE4NzUyNTI1JmV4dGVybmFsX3VpZD0mcHJmW2V4dGVybmFsX3VpZF09JnVpZF9zdGFibGU9Jm9wdG91dD0wJnByZltjbF09Y2hyJnByZltjbHZdPTExMyZwcmZbc3lzXT13aW4mcHJmW3N5c3ZdPTEwLjAmcHJmW3Zwd109MzAwJnByZltkZXZpY2VjbGFzc109YiZwcmZbZGV2aWNlY2xpZW50XT1icm93c2VyJnByZltsYXlvdXRjbGFzc109cyZwcmZbcG9ydGFsXT1nbXgmcHJmW2NhdGVnb3J5XT1tYWlsJnByZltzZWN0aW9uXT1sb2dpbiZwcmZbdGFnaWRdPWJvdHRvbSZwcmZbb3JpZW50XT1sJnByZlt1aWRzXT0ifSwgeyJuYW1lIjogIjpzY2hlbWUiLCAidmFsdWUiOiAiaHR0cHMifSwgeyJuYW1lIjogImFjY2VwdCIsICJ2YWx1ZSI6ICIqLyoifSwgeyJuYW1lIjogImFjY2VwdC1lbmNvZGluZyIsICJ2YWx1ZSI6ICJnemlwLCBkZWZsYXRlLCBiciJ9LCB7Im5hbWUiOiAicmVmZXJlciIsICJ2YWx1ZSI6ICJodHRwczovL2FkaW1nLnVpbXNlcnYubmV0LyJ9LCB7Im5hbWUiOiAic2VjLWZldGNoLWRlc3QiLCAidmFsdWUiOiAic2NyaXB0In0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtbW9kZSIsICJ2YWx1ZSI6ICJuby1jb3JzIn0sIHsibmFtZSI6ICJzZWMtZmV0Y2gtc2l0ZSIsICJ2YWx1ZSI6ICJjcm9zcy1zaXRlIn0sIHsibmFtZSI6ICJ1c2VyLWFnZW50IiwgInZhbHVlIjogIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjUzIFNhZmFyaS81MzcuMzYifV0sICJxdWVyeVN0cmluZyI6IFt7Im5hbWUiOiAibnciLCAidmFsdWUiOiAiNDIifSwgeyJuYW1lIjogImx0IiwgInZhbHVlIjogInBvcnRhbChnbXgpY2F0ZWdvcnkobWFpbClzZWN0aW9uKGxvZ2luKXRhZ2lkKGJvdHRvbSlsYXlvdXRjbGFzcyhzKSJ9LCB7Im5hbWUiOiAid3B0IiwgInZhbHVlIjogImoifSwgeyJuYW1lIjogImFjIiwgInZhbHVlIjogIjEifSwgeyJuYW1lIjogIndpIiwgInZhbHVlIjogIjAxODc1MjUyNSJ9LCB7Im5hbWUiOiAiZXh0ZXJuYWxfdWlkIiwgInZhbHVlIjogIiJ9LCB7Im5hbWUiOiAicHJmW2V4dGVybmFsX3VpZF0iLCAidmFsdWUiOiAiIn0sIHsibmFtZSI6ICJ1aWRfc3RhYmxlIiwgInZhbHVlIjogIiJ9LCB7Im5hbWUiOiAib3B0b3V0IiwgInZhbHVlIjogIjAifSwgeyJuYW1lIjogInByZltjbF0iLCAidmFsdWUiOiAiY2hyIn0sIHsibmFtZSI6ICJwcmZbY2x2XSIsICJ2YWx1ZSI6ICIxMTMifSwgeyJuYW1lIjogInByZltzeXNdIiwgInZhbHVlIjogIndpbiJ9LCB7Im5hbWUiOiAicHJmW3N5c3ZdIiwgInZhbHVlIjogIjEwLjAifSwgeyJuYW1lIjogInByZlt2cHddIiwgInZhbHVlIjogIjMwMCJ9LCB7Im5hbWUiOiAicHJmW2RldmljZWNsYXNzXSIsICJ2YWx1ZSI6ICJiIn0sIHsibmFtZSI6ICJwcmZbZGV2aWNlY2xpZW50XSIsICJ2YWx1ZSI6ICJicm93c2VyIn0sIHsibmFtZSI6ICJwcmZbbGF5b3V0Y2xhc3NdIiwgInZhbHVlIjogInMifSwgeyJuYW1lIjogInByZltwb3J0YWxdIiwgInZhbHVlIjogImdteCJ9LCB7Im5hbWUiOiAicHJmW2NhdGVnb3J5XSIsICJ2YWx1ZSI6ICJtYWlsIn0sIHsibmFtZSI6ICJwcmZbc2VjdGlvbl0iLCAidmFsdWUiOiAibG9naW4ifSwgeyJuYW1lIjogInByZlt0YWdpZF0iLCAidmFsdWUiOiAiYm90dG9tIn0sIHsibmFtZSI6ICJwcmZbb3JpZW50XSIsICJ2YWx1ZSI6ICJsIn0sIHsibmFtZSI6ICJwcmZbdWlkc10iLCAidmFsdWUiOiAiIn1dLCAiaGVhZGVyc1NpemUiOiA3NzEsICJib2R5U2l6ZSI6IDB9LCAicmVzcG9uc2UiOiB7InN0YXR1cyI6IDIwMCwgInN0YXR1c1RleHQiOiAiIiwgImh0dHBWZXJzaW9uIjogIkhUVFAvMi4wIiwgImNvb2tpZXMiOiBbeyJuYW1lIjogIlVzZXJJRDEiLCAidmFsdWUiOiAiNzIzNzM1NDA5ODE0NTAzNzMyNiIsICJzYW1lU2l0ZSI6ICJOb25lIiwgInNlY3VyZSI6IHRydWV9XSwgImhlYWRlcnMiOiBbeyJuYW1lIjogImNhY2hlLWNvbnRyb2wiLCAidmFsdWUiOiAibm8tY2FjaGUifSwgeyJuYW1lIjogImNvbnRlbnQtbGVuZ3RoIiwgInZhbHVlIjogIjE5In0sIHsibmFtZSI6ICJjb250ZW50LXR5cGUiLCAidmFsdWUiOiAidGV4dC9qYXZhc2NyaXB0In0sIHsibmFtZSI6ICJkYXRlIiwgInZhbHVlIjogIkZyaSwgMjYgTWF5IDIwMjMgMDc6MTA6MTMgKzAyMDAifSwgeyJuYW1lIjogImV0YWciLCAidmFsdWUiOiAiNzIzNzM1NDA5ODE0NTE2ODM5OCJ9LCB7Im5hbWUiOiAiZXhwaXJlcyIsICJ2YWx1ZSI6ICJTYXQsIDAxIEphbiAyMDAwIDAwOjAwOjAwIEdNVCJ9LCB7Im5hbWUiOiAicDNwIiwgInZhbHVlIjogInBvbGljeXJlZj1cImh0dHBzOi8vaW1hZ2VzcnYuYWRpdGlvbi5jb20vdzNjL3AzcC1zc2wueG1sXCIsQ1A9XCJOT04gRFNQIEFETSBERVYgUFNEIElWRG8gT1RQaSBPVVIgSU5EIFNUUCBQSFkgUFJFIE5BViBVTklcIiJ9LCB7Im5hbWUiOiAicHJhZ21hIiwgInZhbHVlIjogIm5vLWNhY2hlIn0sIHsibmFtZSI6ICJzZXJ2ZXIiLCAidmFsdWUiOiAiQURJVElPTlNFUlZFUiB2MS4wIn0sIHsibmFtZSI6ICJzZXQtY29va2llIiwgInZhbHVlIjogIlVzZXJJRDE9NzIzNzM1NDA5ODE0NTAzNzMyNjsgZXhwaXJlcz1UaHUsIDI0LUF1Zy0yMDIzIDA1OjEwOjEzIEdNVDsgcGF0aD0vOyBkb21haW49LmFkZmFybTEuYWRpdGlvbi5jb207IFNhbWVTaXRlPU5vbmU7IFNlY3VyZSJ9XSwgImNvbnRlbnQiOiB7InNpemUiOiAxOSwgIm1pbWVUeXBlIjogInRleHQvamF2YXNjcmlwdCIsICJjb21wcmVzc2lvbiI6IDAsICJ0ZXh0IjogImRvY3VtZW50LndyaXRlKCcnKTsifSwgImhlYWRlcnNTaXplIjogMCwgImJvZHlTaXplIjogMzkzLCAicmVkaXJlY3RVUkwiOiAiIiwgIl90cmFuc2ZlclNpemUiOiAzOTN9LCAiY2FjaGUiOiB7fSwgInRpbWluZ3MiOiB7ImRucyI6IDEuMzYzLCAiY29ubmVjdCI6IDI2LjAxOCwgInNzbCI6IDE2LjM1MywgInNlbmQiOiAwLCAid2FpdCI6IDEyLjExNywgInJlY2VpdmUiOiAyLjQ4NH0sICJwYWdlcmVmIjogInBhZ2VANmNkOGY3OWRmMmE4YWIwMGJkYWEwZGQ0OWQ3YjhkZmUiLCAic2VydmVySVBBZGRyZXNzIjogIjg1LjExNC4xNTkuMTEyIiwgIl9zZXJ2ZXJQb3J0IjogNDQzLCAiX3NlY3VyaXR5RGV0YWlscyI6IHsicHJvdG9jb2wiOiAiVExTIDEuMiIsICJzdWJqZWN0TmFtZSI6ICIqLmFkZmFybTEuYWRpdGlvbi5jb20iLCAiaXNzdWVyIjogIkFscGhhU1NMIENBIC0gU0hBMjU2IC0gRzQiLCAidmFsaWRGcm9tIjogMTY4MzUzMzI1NCwgInZhbGlkVG8iOiAxNzE3ODM0MDUzfX1dfX0=","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"07a3360b-1758-46fb-a758-0e7010a6f527","value":"har.json"},{"category":"External analysis","comment":"The rendered page at the end of the capture","data":"PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZGUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpoPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvanF1ZXJ5LTIuMi40LXZlci0yRjZCMTFBN0U5MTQ3MThFMDI5MDQxMEU4NTM2NkZFOS5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+CgogICAgPHRpdGxlPkxvZ2luPC90aXRsZT4KICAgIAogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik1vYmlsZXIgR01YIExvZ2luOiBBdWYgZGllc2VyIFNlaXRlIGvDtm5uZW4gU2llIHNpY2ggbWl0IGRlbSBTbWFydHBob25lIG9kZXIgVGFibGV0IGVpbmZhY2ggdW5kIHNpY2hlciB1bnRlcndlZ3MgaW4gSWhyIEdNWCBQb3N0ZmFjaCBlaW5sb2dnZW4uIj4KICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCI+CiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9pbWcudWktcG9ydGFsLmRlL2NkL2NpL2dteC5uZXQvZmF2aWNvbi5pY28iPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvYmFzZS12ZXItQ0QzNTk1MEIyNEFDQUNEQTZGNUQzMzhCREQ3NEJGNTYuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuL01vYmlsZSBMb2dpbl9maWxlcy9sb2dpbi1hZGFwdGl2ZS5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvbWFzLWFzcC5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+CjwvaGVhZD4KCjxib2R5IGlkPSJ0b3AiIGNsYXNzPSJzaXRlLWdteCBqc0VuYWJsZWQiPgo8ZGl2IGNsYXNzPSJzdGF0aXN0aWNzIj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAvKiA8IVtDREFUQVsgKi8KICAgICAgICBwYWdlQmVnaW4oKTsKICAgICAgICAvKiBdXT4gKi8KICAgIDwvc2NyaXB0Pgo8L2Rpdj4KCjxkaXYgaWQ9IndyYXBwZXIiPgogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KCiAgICAgICAgPGg6aGVhZGVyIGlkPSJwYWdlLWhlYWRlciIgY2xhc3M9ImhlYWRlci1zaW1wbGUiPgogICAgICAgICAgICA8YSBpZD0iaGVhZGVyLWJyYW5kIiBocmVmPSIjIj5HTVguTkVUPC9hPgogICAgICAgICAgICA8c3BhbiBpZD0iaGVhZGVyLXNlcnZpY2UiPkxvZ2luPC9zcGFuPgogICAgICAgIDwvaDpoZWFkZXI+CgogICAgICAgIDxoOnNlY3Rpb24gaWQ9InBhZ2UtY29udGVudCI+CgogICAgICAgICAgICA8aDpzZWN0aW9uIGlkPSJtYWluIj4KICAgICAgICAgICAgICAgIDxoOnNlY3Rpb24gY2xhc3M9ImhpbnQgaGludC1lcnJvciBoaW50LXNpbmdsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVlZGJhY2tQYW5lbEVSUk9SIj48c3BhbiBjbGFzcz0iaGludC1oZWFkbGluZSI+RGVyIExvZ2luIHdhciBuaWNodCBlcmZvbGdyZWljaDwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvaDpzZWN0aW9uPgogICAgICAgICAgICAgICAgPGg6c2VjdGlvbiBjbGFzcz0iY29udGVudC1wYXJ0IGNvbnRlbnQtcGFydC1jb2w0IGxvZ2luLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgPGgxPkxvZ2luPC9oMT4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InN1YmxpbmUiPkJpdHRlIG1lbGRlbiBTaWUgc2ljaCBoaWVyIG1pdCBJaHJlciBHTVggRS1NYWlsLUFkcmVzc2UgdW5kIElocmVtIFBhc3N3b3J0IGFuLjwvaDI+CgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJmb3JtLWwgZm9ybS1sb2dpbiIgbmFtZT0ibG9naW5Gb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iMi5waHAiIGFjY2VwdC1jaGFyc2V0PSJVVEYtOCIgZGF0YS1mb3JtZXJyb3ItY2hlY2s9InNlcnZlcmNoZWNrZWQiPgogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPkxvZ2luRm9ybTwvbGVnZW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIGxvZ2luLXVzZXJuYW1lIGpzVmFsaWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IjA6bG9naW5Gb3JtOmFjY291bnRJZGVudGlmaWVyIiBjbGFzcz0ianNWYWxpZCI+CiAgICA8ZGl2IGNsYXNzPSJpdGVtLWxhYmVsIGpzVmFsaWQiPgogICAgICAgIDxsYWJlbCBjbGFzcz0ibGFiZWwgbGFiZWwtLWJsb2NrIG1hcmdpbi1ib3R0b20tLTQganNWYWxpZCIgZm9yPSJpZDEiPkdNWCBFLU1haWwtQWRyZXNzZTwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Iml0ZW0tZGF0YSByZWxhdGl2ZSBqc1ZhbGlkIj4KICAgICAgICAKICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQganNWYWxpZCIgdmFsdWU9IiIgbmFtZT0idXNlcm5hbWUiIGlkPSJpZDEiIHR5cGU9ImVtYWlsIiB0YWJpbmRleD0iMSIgZGF0YS13ZWJkcml2ZXItaWQ9IjMzMWU5NDNlNTJhNTY2OWEyMmI1YmYwZGZjZjQxN2VjMzA1ODIwNGYiIGRhdGEtZm9ybWVycm9yLXRleHQ9IkJpdHRlIEUtTWFpbC1BZHJlc3NlIGVpbmdlYmVuLiIgZGF0YS1mb3JtZXJyb3ItY2hlY2s9IiBzZXJ2ZXJjaGVja2VkIiB0aXRsZT0iIj48aDpvdXRwdXQgY2xhc3M9ImZlZWRiYWNrIGZlZWRiYWNrLWlkMSBmZWVkYmFjay0iIGRhdGEtZm9yPSJpZDEiIGlkPSJlcnJvcm1zZy1mb3ItaWQxIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxwIGRhdGEtd2ViZHJpdmVyLWlkPSJmZWVkYmFjayI+Qml0dGUgRS1NYWlsLUFkcmVzc2UgZWluZ2ViZW4uPC9wPjxzcGFuIGNsYXNzPSJub3NlIj48L3NwYW4+PC9oOm91dHB1dD4KCiAgICAgICAgPGg6b3V0cHV0IGNsYXNzPSJzdGF0dXMiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij48L2g6b3V0cHV0PgogICAgPC9kaXY+CjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxhIGhyZWY9IiMiPkpldHp0IGtvc3RlbmxvcyByZWdpc3RyaWVyZW4hPC9hPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIGxvZ2luLXBhc3N3b3JkIGpzVmFsaWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IjA6bG9naW5Gb3JtOnBhc3N3b3JkSW5wdXQiIGNsYXNzPSJqc1ZhbGlkIj4KICAgIDxkaXYgY2xhc3M9Iml0ZW0tbGFiZWwganNWYWxpZCI+CiAgICAgICAgPGxhYmVsIGNsYXNzPSJsYWJlbCBsYWJlbC0tYmxvY2sgbWFyZ2luLWJvdHRvbS0tNCBqc1ZhbGlkIiBmb3I9ImlkMiI+UGFzc3dvcnQ8L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJpdGVtLWRhdGEgcmVsYXRpdmUganNWYWxpZCI+CiAgICAgICAgCiAgICA8aW5wdXQgY2xhc3M9ImlucHV0IGpzVmFsaWQiIHZhbHVlPSIiIG5hbWU9InBhc3N3b3JkIiBpZD0iaWQyIiB0eXBlPSJwYXNzd29yZCIgdGFiaW5kZXg9IjIiIGRhdGEtd2ViZHJpdmVyLWlkPSI3ZTE0M2VmN2ZlZjc1MDY5NTExNTBlYjk5MDFhOWRmY2QwOTgxOGQzIiBkYXRhLWZvcm1lcnJvci10ZXh0PSJCaXR0ZSBQYXNzd29ydCBlaW5nZWJlbi4iIGRhdGEtZm9ybWVycm9yLWNoZWNrPSIgc2VydmVyY2hlY2tlZCIgdGl0bGU9IiI+PGg6b3V0cHV0IGNsYXNzPSJmZWVkYmFjayBmZWVkYmFjay1pZDIgZmVlZGJhY2stIiBkYXRhLWZvcj0iaWQyIiBpZD0iZXJyb3Jtc2ctZm9yLWlkMiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBkYXRhLXdlYmRyaXZlci1pZD0iZmVlZGJhY2siPkJpdHRlIFBhc3N3b3J0IGVpbmdlYmVuLjwvcD48c3BhbiBjbGFzcz0ibm9zZSI+PC9zcGFuPjwvaDpvdXRwdXQ+CgogICAgICAgIDxoOm91dHB1dCBjbGFzcz0ic3RhdHVzIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+PC9oOm91dHB1dD4KICAgIDwvZGl2Pgo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YSBocmVmPSIjIj5QYXNzd29ydCB2ZXJnZXNzZW4/PC9hPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1zdWJtaXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJ0bi13cmFwcGVyIGJ0bi1tIGJ0bi1rZXkgdHJpZ2dlcnMtYWN0aW9uIj48aW5wdXQgaWQ9ImNvbnRpbnVlQnV0dG9uIiBuYW1lPSJsb2dpbiIgdHlwZT0ic3VibWl0IiB0YWJpbmRleD0iMyIgdmFsdWU9IkxvZ2luIiBkYXRhLXdlYmRyaXZlci1pZD0iMTQyZGQ2MWM3MjVhZTE5ZjNmYTVjZDIxMzExYTQwOGU5NzUzZTI4YSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uQWN0aW9uSW5Qcm9ncmVzcyI+Jm5ic3A7PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvaDpzZWN0aW9uPgogICAgICAgICAgICA8L2g6c2VjdGlvbj4KICAgICAgICAgICAgPGg6c2VjdGlvbiBpZD0iYWRCbG9jayI+CiAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvZWljLmpzLmRvd25sb2FkIj48L3NjcmlwdD4KICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSIuL01vYmlsZSBMb2dpbl9maWxlcy9tb2JpbGUtYXBwcy5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+PGlmcmFtZSBzcmM9Ii8vYWRpbWcudWltc2Vydi5uZXQvdGFtL2xvZ2luL3BsLW0tZnJhbWUtYXNwLmh0bWw/YnJhbmQ9Z214bmV0JmFtcDtvcmllbnQ9bCNpZD0wI3VybD1odHRwJTNBLy9qb3JhbWVkaWEuZGUvaW5kZXgyLmh0bWwjbGNpZD0xNjg1MDc3ODEyNDE0NTU4NTcxLjYyMzkyMDQ4NSIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iIGFsbG93dHJhbnNwYXJlbmN5PSJ0cnVlIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjAiPjwvaWZyYW1lPjxpZnJhbWUgc3JjPSIuL01vYmlsZSBMb2dpbl9maWxlcy9wbC1tLWZyYW1lLWFzcC5odG1sIiBmcmFtZWJvcmRlcj0iMCIgc2Nyb2xsaW5nPSJubyIgYWxsb3d0cmFuc3BhcmVuY3k9InRydWUiIHdpZHRoPSIzMDAiIGhlaWdodD0iMCI+PC9pZnJhbWU+CiAgICAgICAgICAgIDwvaDpzZWN0aW9uPgogICAgICAgIDwvaDpzZWN0aW9uPgoKICAgICAgICAKICAgIDxsb2dpbmFwcC1mb290ZXIgaWQ9InBhZ2UtZm9vdGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbmFwcC1mb290ZXIiIGlkPSJmb290ZXJNYWluIj4KICAgICAgICAgICAgPGRpdiBpZD0iZm9vdGVyTWFpbmxpbmtzIj4KICAgICAgICAgICAgPHVsIGNsYXNzPSJsb2dpbmFwcC1mb290ZXJfX2xpc3QgbC1ob3Jpem9udGFsIGwtY2VudGVyLWp1c3RpZmllZCBsLWNlbnRlci1hbGlnbmVkIGwtd3JhcCI+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImxvZ2luYXBwLWZvb3Rlcl9fbGlzdC1pdGVtIGZpcnN0Ij4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibG9naW5hcHAtZm9vdGVyX19saW5rIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iIyI+SW1wcmVzc3VtPC9hPgogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibG9naW5hcHAtZm9vdGVyX19saXN0LWl0ZW0iPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsb2dpbmFwcC1mb290ZXJfX2xpbmsiIHRhcmdldD0iX2JsYW5rIiBocmVmPSIjIj5BR0I8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsb2dpbmFwcC1mb290ZXJfX2xpc3QtaXRlbSBsYXN0Ij4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibG9naW5hcHAtZm9vdGVyX19saW5rIiB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iIyI+RGF0ZW5zY2h1dHo8L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvbG9naW5hcHAtZm9vdGVyPgoKCiAgICA8L2Rpdj4KPC9kaXY+CgoKCjwvYm9keT48L2h0bWw+","disable_correlation":true,"to_ids":false,"type":"attachment","uuid":"ecc2c37c-bc6c-44af-a24c-08e35a4b4757","value":"rendered_page.html"},{"category":"Network activity","comment":"The address in the browser address bar at the end of the capture.","disable_correlation":false,"to_ids":true,"type":"url","uuid":"c9869e18-e141-4dd9-a1cb-d5579ec2a2ba","value":"http://joramedia.de/index2.html"}],"Object":[{"Attribute":[{"category":"Network activity","disable_correlation":false,"object_relation":"url","to_ids":true,"type":"url","uuid":"3a4efaff-2343-42de-8896-3d18cf29b9bf","value":"http://joramedia.de/index2.html"},{"category":"Network activity","disable_correlation":false,"object_relation":"host","to_ids":true,"type":"hostname","uuid":"2dc67b89-b252-4223-9dba-deaf97458e4e","value":"joramedia.de"},{"category":"Network activity","disable_correlation":false,"object_relation":"domain","to_ids":true,"type":"domain","uuid":"157d335c-9882-410e-ba63-4f7797f0177e","value":"joramedia.de"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"20f07e94-ff06-4e0b-ac4e-b1c91935a5d2","value":"91.216.248.23"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"8a590280-2f81-4165-ba9e-aa8cd5862552","value":"91.216.248.22"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"86722304-0ea6-4c38-a474-492819873623","value":"91.216.248.20"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"0e67eb93-a286-4f7a-9a00-d709d4745711","value":"217.160.0.226"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"d3fa9968-b9cc-4f5f-af78-570bc94bb9ed","value":"2001:8d8:100f:f000::2d3"},{"category":"Network activity","disable_correlation":false,"object_relation":"ip","to_ids":true,"type":"ip-dst","uuid":"f8bc4e4f-e198-4fe4-b49f-8aa11b54e18b","value":"2a00:f48:2000:affe::50"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"7952da15-f75f-485e-ae7e-7e7416b23fb2","value":"06787787b2e9d961ecb427d3a6438a13"}],"ObjectReference":[{"comment":"Capture on lookyloo","object_uuid":"1e112467-fb41-4af8-bf18-54d91b1e2632","referenced_uuid":"80c9adce-d2bc-4e14-9cb9-d65071cd6a6d","relationship_type":"captured-by","uuid":"9cfce9ba-faaf-4b3b-8721-ee83c5929134"}],"comment":"Submitted URL","description":"url object describes an url along with its normalized field (like extracted using faup parsing library) and its metadata.","distribution":"5","first_seen":"2023-05-26T05:10:12.319000+00:00","meta-category":"network","name":"url","parsed_url":null,"sharing_group_id":"0","template_uuid":"60efb77b-40b5-4c46-871b-ed1ed999fce5","template_version":"10","uuid":"1e112467-fb41-4af8-bf18-54d91b1e2632"},{"Attribute":[{"category":"Payload delivery","disable_correlation":true,"object_relation":"filename","to_ids":true,"type":"filename","uuid":"fb8edd11-d32c-4c79-927e-ff91a9200bad","value":"index2.html"},{"category":"Other","disable_correlation":true,"object_relation":"size-in-bytes","to_ids":false,"type":"size-in-bytes","uuid":"59f0983e-e3de-46bc-bb0e-03b2344c2aed","value":"6173"},{"category":"Other","disable_correlation":true,"object_relation":"entropy","to_ids":false,"type":"float","uuid":"590aff76-2d31-4212-863f-9f55367587ce","value":4.756659273056201},{"category":"Payload delivery","disable_correlation":false,"object_relation":"md5","to_ids":true,"type":"md5","uuid":"1ea842a5-bcba-4463-887d-e152cd6b9a7e","value":"33ec34fcdffd77bf8a60d10129e79e93"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha1","to_ids":true,"type":"sha1","uuid":"03e007ad-ea07-4aff-8aae-be5320927683","value":"21b4a5935e32d5649e237efc845801e9e8a60ab9"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha256","to_ids":true,"type":"sha256","uuid":"ae33ed6f-292c-46dc-9491-521fa01c8590","value":"368ff73588ccba19b9feb9c9331dcd34c49b361728dd1c292fd5fb7a286e6d79"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"sha512","to_ids":true,"type":"sha512","uuid":"f8ab1648-58d1-4b8c-9782-eeda3576dc93","value":"aa4d43398a9fcd07e81439ba74b83bb35eb9a7ad57cbbfab6f812df98c31653458a6a7447f8fbb41a454c3ebf9d728ed0c94edfab72b36c2d29657d281ba7f52"},{"category":"Payload delivery","data":"PCFET0NUWVBFIGh0bWw+CjwhLS0gc2F2ZWQgZnJvbSB1cmw9KDAwNDYpaHR0cHM6Ly93d3cuZ214Lm5ldC9sb2dpbi8/c3RhdHVzPWxvZ2luLWZhaWxlZCAtLT4KPGh0bWwgbGFuZz0iZGUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWxuczpoPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvanF1ZXJ5LTIuMi40LXZlci0yRjZCMTFBN0U5MTQ3MThFMDI5MDQxMEU4NTM2NkZFOS5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+CgogICAgPHRpdGxlPkxvZ2luPC90aXRsZT4KICAgIAogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Ik1vYmlsZXIgR01YIExvZ2luOiBBdWYgZGllc2VyIFNlaXRlIGvDtm5uZW4gU2llIHNpY2ggbWl0IGRlbSBTbWFydHBob25lIG9kZXIgVGFibGV0IGVpbmZhY2ggdW5kIHNpY2hlciB1bnRlcndlZ3MgaW4gSWhyIEdNWCBQb3N0ZmFjaCBlaW5sb2dnZW4uIj4KICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCI+CiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaHR0cHM6Ly9pbWcudWktcG9ydGFsLmRlL2NkL2NpL2dteC5uZXQvZmF2aWNvbi5pY28iPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgogICAgPGxpbmsgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvYmFzZS12ZXItQ0QzNTk1MEIyNEFDQUNEQTZGNUQzMzhCREQ3NEJGNTYuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuL01vYmlsZSBMb2dpbl9maWxlcy9sb2dpbi1hZGFwdGl2ZS5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvbWFzLWFzcC5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+CjwvaGVhZD4KCjxib2R5IGlkPSJ0b3AiIGNsYXNzPSJzaXRlLWdteCBqc0VuYWJsZWQiPgo8ZGl2IGNsYXNzPSJzdGF0aXN0aWNzIj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAvKiA8IVtDREFUQVsgKi8KICAgICAgICBwYWdlQmVnaW4oKTsKICAgICAgICAvKiBdXT4gKi8KICAgIDwvc2NyaXB0Pgo8L2Rpdj4KCjxkaXYgaWQ9IndyYXBwZXIiPgogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KCiAgICAgICAgPGg6aGVhZGVyIGlkPSJwYWdlLWhlYWRlciIgY2xhc3M9ImhlYWRlci1zaW1wbGUiPgogICAgICAgICAgICA8YSBpZD0iaGVhZGVyLWJyYW5kIiBocmVmPSIjIj5HTVguTkVUPC9hPgogICAgICAgICAgICA8c3BhbiBpZD0iaGVhZGVyLXNlcnZpY2UiPkxvZ2luPC9zcGFuPgogICAgICAgIDwvaDpoZWFkZXI+CgogICAgICAgIDxoOnNlY3Rpb24gaWQ9InBhZ2UtY29udGVudCI+CgogICAgICAgICAgICA8aDpzZWN0aW9uIGlkPSJtYWluIj4KICAgICAgICAgICAgICAgIDxoOnNlY3Rpb24gY2xhc3M9ImhpbnQgaGludC1lcnJvciBoaW50LXNpbmdsZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmVlZGJhY2tQYW5lbEVSUk9SIj48c3BhbiBjbGFzcz0iaGludC1oZWFkbGluZSI+RGVyIExvZ2luIHdhciBuaWNodCBlcmZvbGdyZWljaDwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgIDwvaDpzZWN0aW9uPgogICAgICAgICAgICAgICAgPGg6c2VjdGlvbiBjbGFzcz0iY29udGVudC1wYXJ0IGNvbnRlbnQtcGFydC1jb2w0IGxvZ2luLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgPGgxPkxvZ2luPC9oMT4KICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9InN1YmxpbmUiPkJpdHRlIG1lbGRlbiBTaWUgc2ljaCBoaWVyIG1pdCBJaHJlciBHTVggRS1NYWlsLUFkcmVzc2UgdW5kIElocmVtIFBhc3N3b3J0IGFuLjwvaDI+CgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJmb3JtLWwgZm9ybS1sb2dpbiIgbmFtZT0ibG9naW5Gb3JtIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iMi5waHAiIGFjY2VwdC1jaGFyc2V0PSJVVEYtOCIgZGF0YS1mb3JtZXJyb3ItY2hlY2s9InNlcnZlcmNoZWNrZWQiPgogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPkxvZ2luRm9ybTwvbGVnZW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIGxvZ2luLXVzZXJuYW1lIGpzVmFsaWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IjA6bG9naW5Gb3JtOmFjY291bnRJZGVudGlmaWVyIiBjbGFzcz0ianNWYWxpZCI+CiAgICA8ZGl2IGNsYXNzPSJpdGVtLWxhYmVsIGpzVmFsaWQiPgogICAgICAgIDxsYWJlbCBjbGFzcz0ibGFiZWwgbGFiZWwtLWJsb2NrIG1hcmdpbi1ib3R0b20tLTQganNWYWxpZCIgZm9yPSJpZDEiPkdNWCBFLU1haWwtQWRyZXNzZTwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9Iml0ZW0tZGF0YSByZWxhdGl2ZSBqc1ZhbGlkIj4KICAgICAgICAKICAgIDxpbnB1dCBjbGFzcz0iaW5wdXQganNWYWxpZCIgdmFsdWU9IiIgbmFtZT0idXNlcm5hbWUiIGlkPSJpZDEiIHR5cGU9ImVtYWlsIiB0YWJpbmRleD0iMSIgZGF0YS13ZWJkcml2ZXItaWQ9IjMzMWU5NDNlNTJhNTY2OWEyMmI1YmYwZGZjZjQxN2VjMzA1ODIwNGYiIGRhdGEtZm9ybWVycm9yLXRleHQ9IkJpdHRlIEUtTWFpbC1BZHJlc3NlIGVpbmdlYmVuLiIgZGF0YS1mb3JtZXJyb3ItY2hlY2s9IiBzZXJ2ZXJjaGVja2VkIiB0aXRsZT0iIj48aDpvdXRwdXQgY2xhc3M9ImZlZWRiYWNrIGZlZWRiYWNrLWlkMSBmZWVkYmFjay0iIGRhdGEtZm9yPSJpZDEiIGlkPSJlcnJvcm1zZy1mb3ItaWQxIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPjxwIGRhdGEtd2ViZHJpdmVyLWlkPSJmZWVkYmFjayI+Qml0dGUgRS1NYWlsLUFkcmVzc2UgZWluZ2ViZW4uPC9wPjxzcGFuIGNsYXNzPSJub3NlIj48L3NwYW4+PC9oOm91dHB1dD4KCiAgICAgICAgPGg6b3V0cHV0IGNsYXNzPSJzdGF0dXMiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij48L2g6b3V0cHV0PgogICAgPC9kaXY+CjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxhIGhyZWY9IiMiPkpldHp0IGtvc3RlbmxvcyByZWdpc3RyaWVyZW4hPC9hPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1pdGVtIGxvZ2luLXBhc3N3b3JkIGpzVmFsaWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IjA6bG9naW5Gb3JtOnBhc3N3b3JkSW5wdXQiIGNsYXNzPSJqc1ZhbGlkIj4KICAgIDxkaXYgY2xhc3M9Iml0ZW0tbGFiZWwganNWYWxpZCI+CiAgICAgICAgPGxhYmVsIGNsYXNzPSJsYWJlbCBsYWJlbC0tYmxvY2sgbWFyZ2luLWJvdHRvbS0tNCBqc1ZhbGlkIiBmb3I9ImlkMiI+UGFzc3dvcnQ8L2xhYmVsPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJpdGVtLWRhdGEgcmVsYXRpdmUganNWYWxpZCI+CiAgICAgICAgCiAgICA8aW5wdXQgY2xhc3M9ImlucHV0IGpzVmFsaWQiIHZhbHVlPSIiIG5hbWU9InBhc3N3b3JkIiBpZD0iaWQyIiB0eXBlPSJwYXNzd29yZCIgdGFiaW5kZXg9IjIiIGRhdGEtd2ViZHJpdmVyLWlkPSI3ZTE0M2VmN2ZlZjc1MDY5NTExNTBlYjk5MDFhOWRmY2QwOTgxOGQzIiBkYXRhLWZvcm1lcnJvci10ZXh0PSJCaXR0ZSBQYXNzd29ydCBlaW5nZWJlbi4iIGRhdGEtZm9ybWVycm9yLWNoZWNrPSIgc2VydmVyY2hlY2tlZCIgdGl0bGU9IiI+PGg6b3V0cHV0IGNsYXNzPSJmZWVkYmFjayBmZWVkYmFjay1pZDIgZmVlZGJhY2stIiBkYXRhLWZvcj0iaWQyIiBpZD0iZXJyb3Jtc2ctZm9yLWlkMiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48cCBkYXRhLXdlYmRyaXZlci1pZD0iZmVlZGJhY2siPkJpdHRlIFBhc3N3b3J0IGVpbmdlYmVuLjwvcD48c3BhbiBjbGFzcz0ibm9zZSI+PC9zcGFuPjwvaDpvdXRwdXQ+CgogICAgICAgIDxoOm91dHB1dCBjbGFzcz0ic3RhdHVzIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+PC9oOm91dHB1dD4KICAgIDwvZGl2Pgo8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YSBocmVmPSIjIj5QYXNzd29ydCB2ZXJnZXNzZW4/PC9hPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1zdWJtaXQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJ0bi13cmFwcGVyIGJ0bi1tIGJ0bi1rZXkgdHJpZ2dlcnMtYWN0aW9uIj48aW5wdXQgaWQ9ImNvbnRpbnVlQnV0dG9uIiBuYW1lPSJsb2dpbiIgdHlwZT0ic3VibWl0IiB0YWJpbmRleD0iMyIgdmFsdWU9IkxvZ2luIiBkYXRhLXdlYmRyaXZlci1pZD0iMTQyZGQ2MWM3MjVhZTE5ZjNmYTVjZDIxMzExYTQwOGU5NzUzZTI4YSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uQWN0aW9uSW5Qcm9ncmVzcyI+Jm5ic3A7PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvaDpzZWN0aW9uPgogICAgICAgICAgICA8L2g6c2VjdGlvbj4KICAgICAgICAgICAgPGg6c2VjdGlvbiBpZD0iYWRCbG9jayI+CiAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz0iLi9Nb2JpbGUgTG9naW5fZmlsZXMvZWljLmpzLmRvd25sb2FkIj48L3NjcmlwdD4KICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSIuL01vYmlsZSBMb2dpbl9maWxlcy9tb2JpbGUtYXBwcy5qcy5kb3dubG9hZCI+PC9zY3JpcHQ+PGlmcmFtZSBzcmM9Ii4vTW9iaWxlIExvZ2luX2ZpbGVzL3BsLW0tZnJhbWUtYXNwLmh0bWwiIGZyYW1lYm9yZGVyPSIwIiBzY3JvbGxpbmc9Im5vIiBhbGxvd3RyYW5zcGFyZW5jeT0idHJ1ZSIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIwIj48L2lmcmFtZT4KICAgICAgICAgICAgPC9oOnNlY3Rpb24+CiAgICAgICAgPC9oOnNlY3Rpb24+CgogICAgICAgIAogICAgPGxvZ2luYXBwLWZvb3RlciBpZD0icGFnZS1mb290ZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImxvZ2luYXBwLWZvb3RlciIgaWQ9ImZvb3Rlck1haW4iPgogICAgICAgICAgICA8ZGl2IGlkPSJmb290ZXJNYWlubGlua3MiPgogICAgICAgICAgICA8dWwgY2xhc3M9ImxvZ2luYXBwLWZvb3Rlcl9fbGlzdCBsLWhvcml6b250YWwgbC1jZW50ZXItanVzdGlmaWVkIGwtY2VudGVyLWFsaWduZWQgbC13cmFwIj4KICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibG9naW5hcHAtZm9vdGVyX19saXN0LWl0ZW0gZmlyc3QiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsb2dpbmFwcC1mb290ZXJfX2xpbmsiIHRhcmdldD0iX2JsYW5rIiBocmVmPSIjIj5JbXByZXNzdW08L2E+CiAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJsb2dpbmFwcC1mb290ZXJfX2xpc3QtaXRlbSI+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImxvZ2luYXBwLWZvb3Rlcl9fbGluayIgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IiMiPkFHQjwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImxvZ2luYXBwLWZvb3Rlcl9fbGlzdC1pdGVtIGxhc3QiPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsb2dpbmFwcC1mb290ZXJfX2xpbmsiIHRhcmdldD0iX2JsYW5rIiBocmVmPSIjIj5EYXRlbnNjaHV0ejwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9sb2dpbmFwcC1mb290ZXI+CgoKICAgIDwvZGl2Pgo8L2Rpdj4KCgoKPC9ib2R5PjwvaHRtbD4=","disable_correlation":true,"encrypt":true,"malware_filename":"index2.html","object_relation":"malware-sample","to_ids":true,"type":"malware-sample","uuid":"d97a7454-8e50-47ec-8aba-189eed06e662","value":"index2.html"},{"category":"Artifacts dropped","disable_correlation":true,"object_relation":"mimetype","to_ids":false,"type":"mime-type","uuid":"634c6445-1795-4168-8204-1e5e1c83ff17","value":"text/html"},{"category":"Payload delivery","disable_correlation":false,"object_relation":"ssdeep","to_ids":true,"type":"ssdeep","uuid":"545e120e-ee5d-48b7-9b4f-90fdbfa53052","value":"96:OL/Hb3LqLzZLaXUoBt8xtWGU4+5UU4TzLeLNLbVM:O/3azNKCxthSITehS"},{"category":"Network activity","disable_correlation":false,"object_relation":"dom-hash","to_ids":true,"type":"dom-hash","uuid":"aad1426f-11b1-40f3-b869-d8fcfa476205","value":"06787787b2e9d961ecb427d3a6438a13"}],"ObjectReference":[{"comment":"URL loading that content","object_uuid":"31b915ac-8064-42bd-b2ac-1438378f2f84","referenced_uuid":"1e112467-fb41-4af8-bf18-54d91b1e2632","relationship_type":"loaded-by","uuid":"e00bc27a-d057-4e33-ae49-db8ac4c15865"},{"comment":"Screenshot of the page","object_uuid":"31b915ac-8064-42bd-b2ac-1438378f2f84","referenced_uuid":"005cf4a9-6a04-4fcf-a0b4-51c5f034c6c0","relationship_type":"rendered-as","uuid":"2cfc901f-dc5c-42e6-9f87-867f977eb545"},{"comment":"Rendered HTML at the end of the capture","object_uuid":"31b915ac-8064-42bd-b2ac-1438378f2f84","referenced_uuid":"ecc2c37c-bc6c-44af-a24c-08e35a4b4757","relationship_type":"rendered-as","uuid":"c227e8e6-52d6-4915-b972-9617129fa0d5"}],"comment":"Content received for the final redirect (before rendering)","description":"File object describing a file with meta-information","distribution":"5","first_seen":"2023-05-26T05:10:12.319000+00:00","magic_db":null,"meta-category":"file","name":"file","sharing_group_id":"0","template_uuid":"688c46fb-5edb-40a3-8273-1af7923e2215","template_version":"25","uuid":"31b915ac-8064-42bd-b2ac-1438378f2f84"}],"info":"Lookyloo Capture (http://joramedia.de/index2.html)","uuid":"1d25e919-3baf-4e7c-a580-6543113c06b6"}]
