{"id":2769,"date":"2026-11-04T22:02:09","date_gmt":"2026-11-04T22:02:09","guid":{"rendered":"https:\/\/rakbeauty.com\/?page_id=2769"},"modified":"2026-11-04T22:07:38","modified_gmt":"2026-11-04T22:07:38","slug":"beauty-safe","status":"publish","type":"page","link":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/","title":{"rendered":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0439\u0444\u0430 \u0441 \u043a\u043e\u0441\u043c\u0435\u0442\u0438\u043a\u043e\u0439"},"content":{"rendered":"\n<div id=\"bs-v3-host\" style=\"min-height:100vh;background:#05080f\"><\/div>\n<script>(function(){var b64=\"PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9InJ1Ij4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsdmlld3BvcnQtZml0PWNvdmVyIj4KPHRpdGxlPtCe0LPRgNCw0LHQu9C10L3QuNC1INCx0YzRjtGC0Lgt0YHQtdC50YTQsDwvdGl0bGU+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbSI+CjxsaW5rIHJlbD0icHJlY29ubmVjdCIgaHJlZj0iaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbSIgY3Jvc3NvcmlnaW4+CjxsaW5rIGhyZWY9Imh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9R2Vpc3Q6d2dodEAzMDA7NDAwOzUwMDs2MDAmZGlzcGxheT1zd2FwIiByZWw9InN0eWxlc2hlZXQiPgo8c3R5bGU+CkBmb250LWZhY2V7Zm9udC1mYW1pbHk6IklncmEgU2FucyI7c3JjOnVybCgiaHR0cHM6Ly9yYWtiZWF1dHkuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAyL0lncmFTYW5zLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpLHVybCgiaHR0cHM6Ly9yYWtiZWF1dHkuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzAyL0lncmFTYW5zLndvZmYiKSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo0MDA7Zm9udC1kaXNwbGF5OnN3YXB9Cjpyb290ewogIC0tYmx1ZTojMDMxMEFEOy0tcGFwZXI6I0Y3RjZGMjsKICAtLWluazojZjZlZmU0Oy0taW5rLTI6cmdiYSgyNDYsMjM5LDIyOCwuNzIpOy0taW5rLTM6cmdiYSgyNDYsMjM5LDIyOCwuNSk7CiAgLS1iZzojMDUwODBmOy0tZ2xhc3M6cmdiYSg4LDEyLDI0LC44OCk7LS1saW5lOnJnYmEoMjA1LDIxMSwyNTUsLjI4KTsKICAtLWdvbGQ6I2NkZDNmZjstLWdvbGQtMjojOWFhNmZmOy0tcmVkOiNmZjJiMmI7LS13aW5lOiM1ZTBmMTQ7LS1vazojN2ZlMGEwOwogIC0tc2VyaWY6IklncmEgU2FucyIsR2Vpc3QsIkhlbHZldGljYSBOZXVlIixBcmlhbCxzYW5zLXNlcmlmOwogIC0tZGlzcGxheToiSWdyYSBTYW5zIixHZWlzdCwiSGVsdmV0aWNhIE5ldWUiLEFyaWFsLHNhbnMtc2VyaWY7CiAgLS1zYW5zOkdlaXN0LCJIZWx2ZXRpY2EgTmV1ZSIsQXJpYWwsc2Fucy1zZXJpZjsKICAtLW5hdnk6IzBiMTIyMjstLW5hdnktMjojMTIxYzMzOwp9CkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OnJvb3Q6bm90KFtkYXRhLXRoZW1lPSJsaWdodCJdKXstLWJnOiMwYjA2MDd9fQo6cm9vdFtkYXRhLXRoZW1lPSJkYXJrIl17LS1iZzojMGIwNjA3fQoqe2JveC1zaXppbmc6Ym9yZGVyLWJveH0KaHRtbCxib2R5e21hcmdpbjowO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6IzA1MDgwZjtjb2xvcjp2YXIoLS1pbmspO2ZvbnQtZmFtaWx5OnZhcigtLXNhbnMpOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9CmJvZHl7b3ZlcmZsb3c6aGlkZGVuO292ZXJzY3JvbGwtYmVoYXZpb3I6bm9uZX0KI2Joe3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7b3ZlcmZsb3c6aGlkZGVuO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb259CiNiaCBjYW52YXMuZ2x7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Cjp3aGVyZSgjYmgpIGJ1dHRvbntmb250OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fQojYmggLnZpcy1oaWRle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDtoZWlnaHQ6MXB4O292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCAwIDAgMCl9CgovKiB0b3AgYmFyICovCi50b3B7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7dG9wOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOmNhbGMoMTBweCArIGVudihzYWZlLWFyZWEtaW5zZXQtdG9wKSkgMTZweCAxMHB4O3otaW5kZXg6NTtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHJnYmEoNSw4LDE1LC43KSxyZ2JhKDUsOCwxNSwwKSl9Ci5icmFuZHtmb250LWZhbWlseTp2YXIoLS1kaXNwbGF5KTtmb250LXdlaWdodDo0MDA7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2ZvbnQtc2l6ZToxNXB4fQouYnJhbmQgaXtmb250LXN0eWxlOm5vcm1hbDtmb250LWZhbWlseTp2YXIoLS1zYW5zKTt0ZXh0LXRyYW5zZm9ybTpub25lO2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjp2YXIoLS1pbmstMil9Ci50b3AgLnJ7ZGlzcGxheTpmbGV4O2dhcDo2cHg7cG9pbnRlci1ldmVudHM6YXV0b30KLmljb257d2lkdGg6NDRweDtoZWlnaHQ6NDRweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDpyZ2JhKDE4LDgsOSwuNSk7YmFja2Ryb3AtZmlsdGVyOmJsdXIoNnB4KX0KLmljb24gc3Zne3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHh9Ci50ZXN0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDpjYWxjKDU4cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpO2xlZnQ6MTZweDtmb250LXNpemU6MTFweDtjb2xvcjp2YXIoLS1pbmstMyk7ei1pbmRleDo1fQoKLyogc3RhdHVzIGRvY2sgKi8KLmRvY2t7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7Ym90dG9tOmNhbGMoMTRweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7ei1pbmRleDo1O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjE0cHg7cGFkZGluZzoxMHB4IDE0cHggMTBweCAxNnB4O2JvcmRlci1yYWRpdXM6OTk5cHg7YmFja2dyb3VuZDp2YXIoLS1nbGFzcyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZHJvcC1maWx0ZXI6Ymx1cigxMHB4KTt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDI0cHgpfQouZG9jayAubXNne2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay0yKTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30KLmJlYW1ze2Rpc3BsYXk6ZmxleDtnYXA6NXB4fQouYmVhbXMgc3Bhbnt3aWR0aDoxOHB4O2hlaWdodDozcHg7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZDp2YXIoLS1yZWQpO2JveC1zaGFkb3c6MCAwIDhweCB2YXIoLS1yZWQpO3RyYW5zaXRpb246LjRzfQouYmVhbXMgc3Bhbi5vZmZ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xOCk7Ym94LXNoYWRvdzpub25lfQouc2xvdHN7ZGlzcGxheTpmbGV4O2dhcDo0cHh9Ci5zbG90cyBie3dpZHRoOjMycHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo4cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojZmZmfQoKLyogaG90c3BvdHMgKi8KLmhvdHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7ei1pbmRleDo0O3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7bWFyZ2luOi0yOHB4IDAgMCAtMjhweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9Ci5ob3QgLnJpbmd7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6OHB4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxLjVweCBzb2xpZCByZ2JhKDI0NiwyMzksMjI4LC44NSk7YmFja2dyb3VuZDpyZ2JhKDE4LDgsOSwuMzUpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDJweCl9Ci5ob3QgLnJpbmc6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6LTdweDtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjQ2LDIzOSwyMjgsLjUpO2FuaW1hdGlvbjpwdWxzZSAyLjJzIGluZmluaXRlfQouaG90IC5ue3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxfQouaG90IC5sYntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTJweDtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDA7d2hpdGUtc3BhY2U6bm93cmFwO2NvbG9yOnZhcigtLWluayk7dGV4dC1zaGFkb3c6MCAxcHggNnB4ICMwMDA7cGFkZGluZzoycHggOHB4O2JvcmRlci1yYWRpdXM6OTlweDtiYWNrZ3JvdW5kOnJnYmEoMTEsNiw3LC41NSl9Ci5ob3QuZG9uZSAucmluZ3tib3JkZXItY29sb3I6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWJsdWUpfQouaG90LmRvbmUgLnJpbmc6OmFmdGVye2Rpc3BsYXk6bm9uZX0KLmhvdC5kb25lIC5ue2NvbG9yOnZhcigtLWdvbGQpfQouaG90LmxvY2sgLnJpbmd7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDgwLDgwLC44KX0KLmhvdC5sb2NrIC5yaW5nOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgyNTUsNjAsNjAsLjQ1KX0KLmhvdC5oaWRle29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfQpAa2V5ZnJhbWVzIHB1bHNlezAle3RyYW5zZm9ybTpzY2FsZSguODUpO29wYWNpdHk6Ljl9MTAwJXt0cmFuc2Zvcm06c2NhbGUoMS4zNSk7b3BhY2l0eTowfX0KCi8qIGN1cnRhaW4gKi8KLmN1cnRhaW57cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt6LWluZGV4OjIwO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7cG9pbnRlci1ldmVudHM6YXV0b30KLmN1cnRhaW4gLmhhbGZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0yJTtib3R0b206LTIlO3dpZHRoOjUyJTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAxLjFzIGN1YmljLWJlemllciguNjUsMCwuMiwxKTt3aWxsLWNoYW5nZTp0cmFuc2Zvcm07CiAgYmFja2dyb3VuZDoKICAgcmFkaWFsLWdyYWRpZW50KDEyMCUgNjAlIGF0IDUwJSAwJSxyZ2JhKDAsMCwwLC40NSkscmdiYSgwLDAsMCwwKSA2MCUpLAogICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDkwZGVnLCMwNTBiMWMgMCwjMGUxZDQ3IDMuMiUsIzIyNDA4ZiA1LjYlLCMwZTFkNDcgOCUsIzA1MGIxYyAxMSUpOwogIGJveC1zaGFkb3c6aW5zZXQgMCAtNjBweCA4MHB4IHJnYmEoMCwwLDAsLjUpfQouY3VydGFpbiAuaGFsZi5se2xlZnQ6MDt0cmFuc2Zvcm0tb3JpZ2luOmxlZnQ7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC40KX0KLmN1cnRhaW4gLmhhbGYucntyaWdodDowO3RyYW5zZm9ybS1vcmlnaW46cmlnaHR9Ci5jdXJ0YWluIC5oYWxmOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO2hlaWdodDoxOHB4O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KCMxYzM0NzQsIzA4MTIzMyk7b3BhY2l0eTouOX0KLmN1cnRhaW4ub3BlbiAuaGFsZi5se3RyYW5zZm9ybTp0cmFuc2xhdGVYKC05NiUpIHNjYWxlWCguNil9Ci5jdXJ0YWluLm9wZW4gLmhhbGYucnt0cmFuc2Zvcm06dHJhbnNsYXRlWCg5NiUpIHNjYWxlWCguNil9Ci5jdXJ0YWluLm9wZW57cG9pbnRlci1ldmVudHM6bm9uZX0KLmN1cnRhaW4gLmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MCAyNHB4O3RyYW5zaXRpb246b3BhY2l0eSAuNHN9Ci5jdXJ0YWluLm9wZW4gLmNhcmQsLmN1cnRhaW4ubWFnaWMgLmNhcmR7b3BhY2l0eTowfQouY3VydGFpbiAuZXllYnJvd3tmb250LXNpemU6MTNweDtjb2xvcjpyZ2JhKDI0NiwyMzksMjI4LC44KTttYXJnaW46MCAwIDE0cHh9Ci5jdXJ0YWluIGgxe2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2ZvbnQtd2VpZ2h0OjQwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC1zaXplOmNsYW1wKDM2cHgsOC40dncsODRweCk7bGluZS1oZWlnaHQ6Ljk1O21hcmdpbjowO3RleHQtc2hhZG93OjAgNHB4IDMwcHggcmdiYSgwLDAsMCwuNSl9Ci5jdXJ0YWluIGgxIGVte2NvbG9yOiNmZmY7Zm9udC1zdHlsZTpub3JtYWx9Ci5jdXJ0YWluIC5zdWJ7Zm9udC1mYW1pbHk6dmFyKC0tc2Fucyk7Zm9udC13ZWlnaHQ6MzAwO2ZvbnQtc2l6ZTpjbGFtcCgxNXB4LDR2dywxOXB4KTtjb2xvcjpyZ2JhKDI0NiwyMzksMjI4LC44NSk7bWFyZ2luOjE0cHggMCAzMHB4fQouYnRue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjEwcHg7bWluLWhlaWdodDo1MnB4O3BhZGRpbmc6MTRweCAyNnB4O2JvcmRlci1yYWRpdXM6MjRweDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYmx1ZSkgIWltcG9ydGFudDtib3JkZXI6MXB4IHNvbGlkICNmZmY7Zm9udC1mYW1pbHk6dmFyKC0tc2Fucyk7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxNnB4O2JveC1zaGFkb3c6MCAxMHB4IDMwcHggcmdiYSgwLDAsMCwuMyk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4ycyxjb2xvciAuMnMsdHJhbnNmb3JtIC4xNXN9Ci5idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1ibHVlKTtjb2xvcjojZmZmICFpbXBvcnRhbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWJsdWUpfQouYnRuOmFjdGl2ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpIHNjYWxlKC45OCl9Ci5idG4ubGluZXtiYWNrZ3JvdW5kOm5vbmU7Y29sb3I6I2ZmZiAhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuOCk7Ym94LXNoYWRvdzpub25lO2ZvbnQtd2VpZ2h0OjMwMH0uYnRuLmxpbmU6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOnZhcigtLWJsdWUpICFpbXBvcnRhbnR9Ci5idG5bZGlzYWJsZWRde29wYWNpdHk6LjQ1O3BvaW50ZXItZXZlbnRzOm5vbmV9CmNhbnZhcy5zcGFya3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTtwb2ludGVyLWV2ZW50czpub25lfQoKLyogc2hlZXQgKi8KLnZlaWx7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt6LWluZGV4OjEwO2JhY2tncm91bmQ6cmdiYSg1LDIsMywuMjUpO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSAuMjVzfQoudmVpbC5vbntvcGFjaXR5OjE7cG9pbnRlci1ldmVudHM6YXV0b30KLnNoZWV0e3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjUyMHB4O21heC1oZWlnaHQ6bWluKDg4ZHZoLDc2MHB4KTtvdmVyZmxvdzphdXRvO2JhY2tncm91bmQ6dmFyKC0tZ2xhc3MpO2JhY2tkcm9wLWZpbHRlcjpibHVyKDE2cHgpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci1yYWRpdXM6MjJweCAyMnB4IDAgMDtwYWRkaW5nOjIycHggMjBweCBjYWxjKDIycHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDI0cHgpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIsLjgsLjIsMSl9Ci52ZWlsLm9uIC5zaGVldHt0cmFuc2Zvcm06bm9uZX0KQG1lZGlhIChtaW4td2lkdGg6NzYwcHgpIGFuZCAobWluLWhlaWdodDo1NjBweCl7LnZlaWx7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nLXJpZ2h0OjV2d30uc2hlZXR7Ym9yZGVyLXJhZGl1czoyMnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpO3BhZGRpbmctYm90dG9tOjI0cHh9fQouY2xvc2V7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6MTBweDt3aWR0aDo0NHB4O2hlaWdodDo0NHB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXJ9Ci5jYXB7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOnZhcigtLWluay0yKX0KLnNoZWV0IGgye2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2ZvbnQtd2VpZ2h0OjQwMDt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7Zm9udC1zaXplOjI4cHg7bGluZS1oZWlnaHQ6MS4wNTttYXJnaW46NnB4IDQ0cHggOHB4IDB9Ci5zaGVldCBwe21hcmdpbjowIDAgMTRweDtmb250LXNpemU6MTVweDtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6MS41O2NvbG9yOnZhcigtLWluay0yKX0KLnNoZWV0IC5yb3d7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi10b3A6MTBweH0KLnNoZWV0IC5yb3cgLmJ0bntmbGV4OjF9Ci50b2FzdHttaW4taGVpZ2h0OjIycHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rKTttYXJnaW46MTBweCAwIDB9Ci50b2FzdC5lcnJ7Y29sb3I6I2ZmOGE4YX0udG9hc3Qub2t7Y29sb3I6dmFyKC0tb2spfQoudGltZXJ7aGVpZ2h0OjNweDtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKTtvdmVyZmxvdzpoaWRkZW47bWFyZ2luOjRweCAwIDE0cHh9Ci50aW1lciBpe2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCg5MGRlZyx2YXIoLS1yZWQpLCNmZjhhNWEpO3RyYW5zZm9ybS1vcmlnaW46bGVmdH0KCi8qIGZpbmdlcnByaW50ICovCi5mcHtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjExMHB4IDFmcjtnYXA6MTRweDthbGlnbi1pdGVtczpzdGFydH0KLmZwIC50YXJnZXR7Ym9yZGVyLXJhZGl1czoxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDojZWZlNmQ2O3dpZHRoOjExMHB4O2hlaWdodDoxNDBweDtwb3NpdGlvbjpyZWxhdGl2ZTtvdmVyZmxvdzpoaWRkZW59Ci5mcCAudGFyZ2V0IGNhbnZhc3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlfQouZnAgLnRhcmdldCAuc2Nhbntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDtoZWlnaHQ6MnB4O2JhY2tncm91bmQ6dmFyKC0tb2spO2JveC1zaGFkb3c6MCAwIDEycHggdmFyKC0tb2spO3RvcDowO2FuaW1hdGlvbjpzY2FuIDEuNnMgbGluZWFyIGluZmluaXRlO29wYWNpdHk6Ljh9CkBrZXlmcmFtZXMgc2Nhbnt0b3t0b3A6MTAwJX19Ci50aWxlc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7Z2FwOjhweH0KLnRpbGV7YXNwZWN0LXJhdGlvOjE7Ym9yZGVyLXJhZGl1czoxMHB4O2JvcmRlcjoxLjVweCBzb2xpZCB0cmFuc3BhcmVudDtiYWNrZ3JvdW5kOiNlZmU2ZDY7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjUycHh9Ci50aWxlIGNhbnZhc3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Ci50aWxlLnNlbHtib3JkZXItY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDIwNSwyMTEsMjU1LC40KX0KLnRpbGUuZ29vZHtib3JkZXItY29sb3I6dmFyKC0tb2spO2JveC1zaGFkb3c6MCAwIDAgM3B4IHJnYmEoMTI3LDIyNCwxNjAsLjMpfQoudGlsZS5zaGFrZXthbmltYXRpb246c2hha2UgLjM1c30KQGtleWZyYW1lcyBzaGFrZXsyNSV7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTRweCl9NzUle3RyYW5zZm9ybTp0cmFuc2xhdGVYKDRweCl9fQpAbWVkaWEgKG1heC13aWR0aDozODBweCl7LmZwe2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnJ9LmZwIC50YXJnZXR7d2lkdGg6OTZweDtoZWlnaHQ6MTIwcHg7bWFyZ2luOjAgYXV0b319CgovKiBjb2RlIGJyZWFrZXIgKi8KLmd1ZXNze2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjZweCAwIDEycHh9Ci5ndWVzcyBie3dpZHRoOjU2cHg7aGVpZ2h0OjY0cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtmb250LWZhbWlseTp2YXIoLS1zZXJpZik7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTozNHB4O2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDMpfQouZ3Vlc3MgYi5jdXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWdvbGQpfQouaGlzdHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo2cHg7bWFyZ2luOjAgMCAxMnB4O21heC1oZWlnaHQ6MTYwcHg7b3ZlcmZsb3c6YXV0b30KLmhpc3QgZGl2e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLTIpO3BhZGRpbmc6NnB4IDEwcHg7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfQouaGlzdCAuZHtmb250LWZhbWlseTp2YXIoLS1zZXJpZik7Zm9udC1zaXplOjIycHg7Y29sb3I6dmFyKC0taW5rKTtsZXR0ZXItc3BhY2luZzouMmVtfQoucGVnc3tkaXNwbGF5OmZsZXg7Z2FwOjRweH0ucGVncyBpe3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWdvbGQpfS5wZWdzIGkuZntiYWNrZ3JvdW5kOnZhcigtLWdvbGQpfS5wZWdzIGkueHtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTgpfQoua2V5c3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LDFmcik7Z2FwOjhweH0KLmtleXttaW4taGVpZ2h0OjUycHg7Ym9yZGVyLXJhZGl1czoxMnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6NTAwO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfQoua2V5OmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjA1LDIxMSwyNTUsLjIpfQoubGVnZW5ke2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay0zKTtkaXNwbGF5OmZsZXg7Z2FwOjE0cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luOjAgMCAxMHB4fQoubGVnZW5kIHNwYW57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH0KCi8qIGRpYWwgKi8KLmRpYWx3cmFwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxMHB4fQouZGlhbHt3aWR0aDptaW4oMjQwcHgsNjJ2dyk7YXNwZWN0LXJhdGlvOjE7cG9zaXRpb246cmVsYXRpdmU7dG91Y2gtYWN0aW9uOm5vbmU7dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmV9Ci5kaWFsIHN2Z3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Ci5kaWFsIC5tYXJre3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDotOHB4O3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWxlZnQ6N3B4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDoxMHB4IHNvbGlkICNmZmY7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9Ci5yZWFkb3V0e2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MzZweDtsaW5lLWhlaWdodDoxfQoudHVtYmxlcnN7ZGlzcGxheTpmbGV4O2dhcDoxMHB4fQoudHVtYmxlcnMgaXt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxLjVweCBzb2xpZCB2YXIoLS1saW5lKX0KLnR1bWJsZXJzIGkub257YmFja2dyb3VuZDojZmZmO2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6MCAwIDEwcHggI2NkZDNmZn0KLnNpZ25hbHt3aWR0aDoyMDBweDtoZWlnaHQ6NnB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMSk7b3ZlcmZsb3c6aGlkZGVufQouc2lnbmFsIGl7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDowO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDkwZGVnLCMzYTRmZDAsI2NkZDNmZik7dHJhbnNpdGlvbjp3aWR0aCAuMDhzfQouc2lnbmFsLmhpdCBpe2JhY2tncm91bmQ6dmFyKC0tb2spfQoubnVkZ2V7ZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0KLm51ZGdlIC5pY29ue3dpZHRoOjUycHg7aGVpZ2h0OjUycHh9CgovKiBzYWZlIGtleXBhZCAoZ29sZCBpbnRlcmNvbSkgKi8KLnBhZHttYXJnaW46NnB4IGF1dG8gMDttYXgtd2lkdGg6MjgwcHg7cGFkZGluZzoxNnB4O2JvcmRlci1yYWRpdXM6MjRweDtiYWNrZ3JvdW5kOnZhcigtLXBhcGVyKTtib3gtc2hhZG93OjAgMTZweCA0MHB4IHJnYmEoMCwwLDAsLjQpfQoubGNke2hlaWdodDo1NnB4O2JvcmRlci1yYWRpdXM6MTZweDtiYWNrZ3JvdW5kOiMwYjEyMjI7Ym94LXNoYWRvdzppbnNldCAwIDJweCA2cHggIzAwMDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Z2FwOjE2cHg7Zm9udC1mYW1pbHk6IkdlaXN0IE1vbm8iLHVpLW1vbm9zcGFjZSxNZW5sbyxtb25vc3BhY2U7Zm9udC1zaXplOjMwcHg7Y29sb3I6IzllZjViNjttYXJnaW4tYm90dG9tOjE0cHg7bGV0dGVyLXNwYWNpbmc6LjFlbX0KLmxjZC5lcnJ7Y29sb3I6I2ZmN2E3YX0ubGNkLm9re2NvbG9yOiM1ZGZmYTB9Ci5wYWQgLmtleXN7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCgzLDFmcil9Ci5wYWQgLmtleXtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYmx1ZSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ibHVlKTtib3JkZXItcmFkaXVzOjI0cHg7Ym94LXNoYWRvdzowIDJweCAwIHJnYmEoMywxNiwxNzMsLjI1KTtmb250LXdlaWdodDo1MDB9Ci5wYWQgLmtleTphY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoMnB4KTtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDp2YXIoLS1ibHVlKTtjb2xvcjojZmZmfQoKLyogY2F0YWxvZyAqLwoudGFic3tkaXNwbGF5OmZsZXg7Z2FwOjZweDtvdmVyZmxvdzphdXRvO21hcmdpbjo0cHggLTRweCAxNHB4O3BhZGRpbmc6MCA0cHg7c2Nyb2xsYmFyLXdpZHRoOm5vbmV9Ci50YWJ7d2hpdGUtc3BhY2U6bm93cmFwO21pbi1oZWlnaHQ6NDRweDtwYWRkaW5nOjAgMTRweDtib3JkZXItcmFkaXVzOjk5OXB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLTIpfQoudGFiLnNlbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYmx1ZSk7Ym9yZGVyLWNvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6NTAwfQoub2ZmZXJ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjAzKX0KLm9mZmVyIGgze2ZvbnQtZmFtaWx5OnZhcigtLXNhbnMpO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MTZweDttYXJnaW46MCAwIDRweDtsaW5lLWhlaWdodDoxLjI1fQoub2ZmZXIgdWx7bWFyZ2luOjAgMCAxMHB4O3BhZGRpbmctbGVmdDoxOHB4O2NvbG9yOnZhcigtLWluay0yKTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjV9Ci5wcmljZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Z2FwOjEwcHg7bWFyZ2luLWJvdHRvbToxMnB4fQoub2ZmZXJ7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0bztnYXA6NnB4IDEycHg7YWxpZ24taXRlbXM6c3RhcnQ7cGFkZGluZzoxNHB4fS5vZmZlciAuYnRuLnNte2dyaWQtY29sdW1uOjEvLTE7bWluLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxNXB4fS5vZGVzY3ttYXJnaW46MCAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxM3B4ICFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0taW5rLTMpICFpbXBvcnRhbnR9Lm9wcmljZXt0ZXh0LWFsaWduOnJpZ2h0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1lbmR9Lm9wcmljZSBze2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay0zKX0ub3ByaWNlIGJ7Zm9udC1mYW1pbHk6dmFyKC0tZGlzcGxheSk7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiNmZmY7d2hpdGUtc3BhY2U6bm93cmFwfS5vcHJpY2UgLnNhdmV7Zm9udC1zaXplOjEycHg7Y29sb3I6I2ZmYjNiM30KLnNlZ3tkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbjowIDAgMTBweH0uc2VnIGJ1dHRvbntmbGV4OjE7bWluLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6OTk5cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLTIpfS5zZWcgYnV0dG9uLnNlbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYmx1ZSk7Zm9udC13ZWlnaHQ6NTAwfQoudGFibm90ZXtmb250LXNpemU6MTNweCAhaW1wb3J0YW50O2NvbG9yOnZhcigtLWluay0zKSAhaW1wb3J0YW50O21hcmdpbjowIDAgMTJweCAhaW1wb3J0YW50fS5maW5le2ZvbnQtc2l6ZToxMnB4ICFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0taW5rLTMpICFpbXBvcnRhbnR9Ci5mcDJ7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgMWZyO2dhcDoxNHB4O2FsaWduLWl0ZW1zOnN0YXJ0fS5mcDIgLnRhcmdldHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YXNwZWN0LXJhdGlvOjF9LmZwMiAudGFyZ2V0IGNhbnZhc3t3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9LmZwMiAudGFyZ2V0IC5zY2Fue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2hlaWdodDoycHg7YmFja2dyb3VuZDp2YXIoLS1vayk7Ym94LXNoYWRvdzowIDAgMTJweCB2YXIoLS1vayk7dG9wOjA7YW5pbWF0aW9uOnNjYW4gMS42cyBsaW5lYXIgaW5maW5pdGU7b3BhY2l0eTouOH0uZnBzdGVwe2ZvbnQtc2l6ZToxNHB4ICFpbXBvcnRhbnQ7Y29sb3I6dmFyKC0taW5rKSAhaW1wb3J0YW50O21hcmdpbjowIDAgOHB4ICFpbXBvcnRhbnQ7Zm9udC13ZWlnaHQ6NjAwfS5vcHRze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmciAxZnI7Z2FwOjhweH0uZnAyIC50aWxle21pbi1oZWlnaHQ6NTJweH1AbWVkaWEgKG1heC13aWR0aDo0MjBweCl7LmZwMntncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfS5mcDIgLnRhcmdldHt3aWR0aDo2MiU7bWFyZ2luOjAgYXV0b319Ci5yb3VuZHN7ZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luOjAgMCA2cHh9LnJvdW5kcyBpe3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjEuNXB4IHNvbGlkIHZhcigtLWdvbGQpfS5yb3VuZHMgaS5vbntiYWNrZ3JvdW5kOiNmZmZ9LnNheXtmb250LXdlaWdodDo2MDA7Y29sb3I6dmFyKC0taW5rKSAhaW1wb3J0YW50O21hcmdpbjowIDAgMTBweCAhaW1wb3J0YW50fQouc2ltb257ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpO2dhcDoxMHB4O21heC13aWR0aDozMDBweDttYXJnaW46MCBhdXRvfS5zYnthc3BlY3QtcmF0aW86MTttaW4taGVpZ2h0OjU2cHg7Ym9yZGVyLXJhZGl1czoxNnB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4xMnMsYm94LXNoYWRvdyAuMTJzLHRyYW5zZm9ybSAuMXN9LnNiOmFjdGl2ZXt0cmFuc2Zvcm06c2NhbGUoLjk2KX0uc2IubGl0e2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMCAyOHB4IHJnYmEoMjA1LDIxMSwyNTUsLjgpO2JvcmRlci1jb2xvcjojZmZmfS5zaW1vbi53YXRjaCAuc2J7cG9pbnRlci1ldmVudHM6bm9uZX0KCi5jb2RlY2FyZHN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMywxZnIpO2dhcDoxMHB4O21hcmdpbjowIDAgMTRweH0uY29kZWNhcmRzIGRpdntib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjUpO2JvcmRlci1yYWRpdXM6MThweDtwYWRkaW5nOjEwcHggMCAxMnB4O3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6cmdiYSgzLDE2LDE3MywuMzUpfS5jb2RlY2FyZHMgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjMwMDtjb2xvcjp2YXIoLS1pbmstMil9LmNvZGVjYXJkcyBie2Rpc3BsYXk6YmxvY2s7Zm9udC1mYW1pbHk6dmFyKC0tZGlzcGxheSk7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTo1MnB4O2xpbmUtaGVpZ2h0OjEuMDU7Y29sb3I6I2ZmZn0KLnJhZmZsZXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjUpO2JvcmRlci1yYWRpdXM6MjBweDtwYWRkaW5nOjE2cHg7bWFyZ2luOjE0cHggMCA2cHg7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoMTYwZGVnLHJnYmEoMywxNiwxNzMsLjU1KSxyZ2JhKDMsMTYsMTczLC4xNSkpfS5yYWZmbGUgaDN7Zm9udC1mYW1pbHk6dmFyKC0tZGlzcGxheSk7Zm9udC13ZWlnaHQ6NDAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cHggMCA4cHh9LnJhZmZsZSAuYnRue3dpZHRoOjEwMCV9LmNudHtmb250LXNpemU6MTRweCAhaW1wb3J0YW50fS5jbnQgYntjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjUwMH0KLmxmb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEycHh9Lmxmb3JtIGxhYmVse2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjZweDtmb250LXNpemU6MTRweDtjb2xvcjp2YXIoLS1pbmstMil9Lmxmb3JtIC5vcHR7Y29sb3I6dmFyKC0taW5rLTMpfS5sZm9ybSBpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKXttaW4taGVpZ2h0OjQ4cHg7Ym9yZGVyLXJhZGl1czoxNHB4O2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMzUpO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDYpO2NvbG9yOiNmZmY7cGFkZGluZzowIDE0cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxNnB4fS5sZm9ybSBpbnB1dDpmb2N1c3tvdXRsaW5lOjJweCBzb2xpZCAjZmZmO291dGxpbmUtb2Zmc2V0OjFweH0ubGZvcm0gLmNoa3tmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtnYXA6MTBweDtmb250LXNpemU6MTNweH0ubGZvcm0gLmNoayBpbnB1dHt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O21hcmdpbjowO2ZsZXg6bm9uZTthY2NlbnQtY29sb3I6I2ZmZn0ucGlja2Vke2NvbG9yOiNmZmYgIWltcG9ydGFudDtmb250LXdlaWdodDo1MDA7Ym9yZGVyLWxlZnQ6MnB4IHNvbGlkICNmZmY7cGFkZGluZy1sZWZ0OjEwcHh9Ci5ib251c3tib3JkZXI6MXB4IGRhc2hlZCByZ2JhKDI1NSwyNTUsMjU1LC42KTtib3JkZXItcmFkaXVzOjE4cHg7cGFkZGluZzoxNHB4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowIDAgMTRweH0uYm9udXMgc3BhbntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay0yKX0uYm9udXMgYntkaXNwbGF5OmJsb2NrO2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MzRweDttYXJnaW46NHB4IDB9LmJvbnVzIHNtYWxse2NvbG9yOnZhcigtLWluay0zKX0KLmJhZGdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6M3B4IDlweDtib3JkZXItcmFkaXVzOjk5cHg7YmFja2dyb3VuZDp2YXIoLS1ibHVlKTtjb2xvcjojZmZmO21hcmdpbi1ib3R0b206OHB4fQoubG9hZGluZ3twb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLTMpfQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246cmVkdWNlKXsuaG90IC5yaW5nOjphZnRlcnthbmltYXRpb246bm9uZX0uY3VydGFpbiAuaGFsZnt0cmFuc2l0aW9uLWR1cmF0aW9uOi4wMXN9fQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8ZGl2IGlkPSJiaCI+CiAgPGRpdiBjbGFzcz0ibG9hZGluZyIgaWQ9ImxvYWRpbmciPtCX0LDQs9GA0YPQttCw0LXQvCDQt9Cw0LvigKY8L2Rpdj4KICA8Y2FudmFzIGNsYXNzPSJnbCIgaWQ9ImdsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9jYW52YXM+CiAgPGRpdiBpZD0iaG90cyI+PC9kaXY+CgogIDxkaXYgY2xhc3M9InRvcCI+CiAgICA8ZGl2IGNsYXNzPSJicmFuZCI+UkFLIGJlYXV0eSA8aT5CbGFjayBGcmlkYXk8L2k+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iaWNvbiIgaWQ9Im11dGUiIHR5cGU9ImJ1dHRvbiIgYXJpYS1sYWJlbD0i0JLRi9C60LvRjtGH0LjRgtGMINC30LLRg9C6Ij48c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42Ij48cGF0aCBkPSJNNCA5aDRsNS00djE0bC01LTRINHoiLz48cGF0aCBpZD0ibXV0ZXdhdmUiIGQ9Ik0xNiA5YTQgNCAwIDAgMSAwIDZNMTguNSA2LjVhOCA4IDAgMCAxIDAgMTEiLz48L3N2Zz48L2J1dHRvbj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iaWNvbiIgaWQ9ImluZm8iIHR5cGU9ImJ1dHRvbiIgYXJpYS1sYWJlbD0i0J\/RgNCw0LLQuNC70LAiPjxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjkiLz48cGF0aCBkPSJNMTIgMTF2Nk0xMiA3LjV2LjUiLz48L3N2Zz48L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJkb2NrIiBpZD0iZG9jayI+CiAgICA8ZGl2IGNsYXNzPSJiZWFtcyIgYXJpYS1oaWRkZW49InRydWUiPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+PC9zcGFuPjwvZGl2PgogICAgPGRpdiBjbGFzcz0ibXNnIiBpZD0ibXNnIj7QntGC0LrQu9GO0YfQuCDRgtGA0Lgg0LvRg9GH0LAg0YHRg9C10YLRizwvZGl2PgogICAgPGRpdiBjbGFzcz0ic2xvdHMiIGFyaWEtbGFiZWw9ItCh0L7QsdGA0LDQvdC90YvQtSDRhtC40YTRgNGLIj48YiBpZD0iZDAiPjwvYj48YiBpZD0iZDEiPjwvYj48YiBpZD0iZDIiPjwvYj48L2Rpdj4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0idmVpbCIgaWQ9InZlaWwiPjxkaXYgY2xhc3M9InNoZWV0IiBpZD0ic2hlZXQiIHJvbGU9ImRpYWxvZyIgYXJpYS1tb2RhbD0idHJ1ZSI+PC9kaXY+PC9kaXY+CgogIDxkaXYgY2xhc3M9ImN1cnRhaW4iIGlkPSJjdXJ0YWluIj4KICAgIDxkaXYgY2xhc3M9ImhhbGYgbCI+PC9kaXY+PGRpdiBjbGFzcz0iaGFsZiByIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8cCBjbGFzcz0iZXllYnJvdyI+UkFLIGJlYXV0eSDCtyBCbGFjayBGcmlkYXk8L3A+CiAgICAgIDxoMT7QntCz0YDQsNCx0LvQtdC90LjQtTxicj48ZW0+0LHRjNGO0YLQuC3RgdC10LnRhNCwPC9lbT48L2gxPgogICAgICA8cCBjbGFzcz0ic3ViIj7QrdC\/0LjQt9C+0LQgMDEgwrcg0J7Qv9C10YDQsNGG0LjRjyDCq9CS0YDQtdC80Y8g0LTQu9GPJm5ic3A70YHQtdCx0Y\/CuzwvcD4KICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic3RhcnQiIHR5cGU9ImJ1dHRvbiI+0J3QsNGH0LDRgtGMINC+0LPRgNCw0LHQu9C10L3QuNC1PC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8Y2FudmFzIGNsYXNzPSJzcGFyayIgaWQ9InNwYXJrIj48L2NhbnZhcz4KPC9kaXY+Cgo8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvdGhyZWUuanMvcjEyOC90aHJlZS5taW4uanMiPjwvc2NyaXB0Pgo8c2NyaXB0PgooZnVuY3Rpb24oKXsKInVzZSBzdHJpY3QiOwp2YXIgQ09ORklHPXtwcmV2aWV3OmZhbHNlLGdvYWw6NTAsZm9ybToiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vZm9ybXMvZC9lLzFGQUlwUUxTZXdDVGxRenhJaGRKWm9sNTlVUDlKNmdHTlFrX19PdUJJZUVuSjdab1N4eUoxMnBBL2Zvcm1SZXNwb25zZSIsZmllbGRzOntuYW1lOiJlbnRyeS45MDUwNzAxMDYiLGVtYWlsOiJlbnRyeS4xODAwMDkzMjUzIixwaG9uZToiZW50cnkuNjUzNjIzNjEwIixvZmZlcjoiZW50cnkuMTk2OTI1NDQ2MyIsc291cmNlOiJlbnRyeS4xMTYxMjM1MDA0In19OyAvLyDQt9Cw0Y\/QstC60Lgg0LjQtNGD0YIg0LIgR29vZ2xlLdGE0L7RgNC80YMg4oaSINGC0LDQsdC70LjRhtGDCnZhciBDT0RFPVsiNCIsIjciLCIyIl07CnZhciAkPWZ1bmN0aW9uKHMpe3JldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpfTsKdmFyIHJlZHVjZT13aW5kb3cubWF0Y2hNZWRpYSYmbWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzOwoKLyogLS0tLS0tLS0tLSBzdGF0ZSAtLS0tLS0tLS0tICovCnZhciBTPXtkb25lOltmYWxzZSxmYWxzZSxmYWxzZV0saW50cm86ZmFsc2Usb3BlbmVkOmZhbHNlLG11dGVkOmZhbHNlfTsKdHJ5e3ZhciBzYXZlZD1KU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oImJoMyIpfHwibnVsbCIpO2lmKHNhdmVkKVM9Q09ORklHLnByZXZpZXc\/T2JqZWN0LmFzc2lnbihTLHttdXRlZDohIXNhdmVkLm11dGVkfSk6T2JqZWN0LmFzc2lnbihTLHNhdmVkKX1jYXRjaChlKXt9CmZ1bmN0aW9uIHNhdmUoKXt0cnl7c2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgiYmgzIixKU09OLnN0cmluZ2lmeShTKSl9Y2F0Y2goZSl7fX0KCi8qIC0tLS0tLS0tLS0gc291bmQgLS0tLS0tLS0tLSAqLwp2YXIgQUM9bnVsbDtmdW5jdGlvbiBhYygpe2lmKCFBQyl7dHJ5e0FDPW5ldyh3aW5kb3cuQXVkaW9Db250ZXh0fHx3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0KSgpfWNhdGNoKGUpe319aWYoQUMmJkFDLnN0YXRlPT09InN1c3BlbmRlZCIpQUMucmVzdW1lKCk7cmV0dXJuIEFDfQpmdW5jdGlvbiB0b25lKGYsZCx0LHYsdyxmMil7aWYoUy5tdXRlZClyZXR1cm47dmFyIGM9YWMoKTtpZighYylyZXR1cm47dmFyIHM9Yy5jdXJyZW50VGltZSsod3x8MCksbz1jLmNyZWF0ZU9zY2lsbGF0b3IoKSxnPWMuY3JlYXRlR2FpbigpO28udHlwZT10fHwic2luZSI7by5mcmVxdWVuY3kuc2V0VmFsdWVBdFRpbWUoZixzKTtpZihmMilvLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGYyLHMrZCk7Zy5nYWluLnNldFZhbHVlQXRUaW1lKHZ8fC4xLHMpO2cuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKC4wMDAxLHMrZCk7by5jb25uZWN0KGcpLmNvbm5lY3QoYy5kZXN0aW5hdGlvbik7by5zdGFydChzKTtvLnN0b3AocytkKy4wMil9CmZ1bmN0aW9uIG5vaXNlKGQsdixocCl7aWYoUy5tdXRlZClyZXR1cm47dmFyIGM9YWMoKTtpZighYylyZXR1cm47dmFyIG49TWF0aC5tYXgoMSxjLnNhbXBsZVJhdGUqZHwwKSxiPWMuY3JlYXRlQnVmZmVyKDEsbixjLnNhbXBsZVJhdGUpLGE9Yi5nZXRDaGFubmVsRGF0YSgwKTtmb3IodmFyIGk9MDtpPG47aSsrKWFbaV09KE1hdGgucmFuZG9tKCkqMi0xKSpNYXRoLnBvdygxLWkvbiwyKTt2YXIgcz1jLmNyZWF0ZUJ1ZmZlclNvdXJjZSgpLGc9Yy5jcmVhdGVHYWluKCksZj1jLmNyZWF0ZUJpcXVhZEZpbHRlcigpO2YudHlwZT0iaGlnaHBhc3MiO2YuZnJlcXVlbmN5LnZhbHVlPWhwfHw4MDA7cy5idWZmZXI9YjtnLmdhaW4udmFsdWU9dnx8LjI7cy5jb25uZWN0KGYpLmNvbm5lY3QoZykuY29ubmVjdChjLmRlc3RpbmF0aW9uKTtzLnN0YXJ0KCl9CnZhciBzbmQ9ewogIHRhcDpmdW5jdGlvbigpe3RvbmUoMTQwMCwuMDUsInNpbmUiLC4wNSl9LAogIHRpY2s6ZnVuY3Rpb24oKXtub2lzZSguMDE1LC4yNSwyNTAwKX0sCiAgY2xpY2s6ZnVuY3Rpb24oKXtub2lzZSguMDQsLjYsNjAwKTt0b25lKDE4MCwuMDgsInNpbmUiLC4yNSl9LAogIG9rOmZ1bmN0aW9uKCl7WzY2MCw4ODAsMTMyMF0uZm9yRWFjaChmdW5jdGlvbihmLGkpe3RvbmUoZiwuMzUsInNpbmUiLC4wNyxpKi4wNyl9KX0sCiAgZXJyOmZ1bmN0aW9uKCl7dG9uZSgyMjAsLjEyLCJzcXVhcmUiLC4wNSk7dG9uZSgxOTYsLjE2LCJzcXVhcmUiLC4wNSwuMTQpfSwKICBvZmY6ZnVuY3Rpb24oKXt0b25lKDkwMCwuNiwic2F3dG9vdGgiLC4wNSwwLDYwKTtub2lzZSguMjUsLjE1LDMwMCl9LAogIGNsdW5rOmZ1bmN0aW9uKCl7bm9pc2UoLjIsLjcsMTIwKTt0b25lKDcwLC40LCJzaW5lIiwuNSl9LAogIG9wZW46ZnVuY3Rpb24oKXtbNTIzLDY1OSw3ODQsMTA0NywxMzE5XS5mb3JFYWNoKGZ1bmN0aW9uKGYsaSl7dG9uZShmLDEuNiwic2luZSIsLjA2LC4yNStpKi4wOSl9KTtub2lzZSgxLjIsLjA2LDQwMDApfSwKICBtYWdpYzpmdW5jdGlvbigpe2Zvcih2YXIgaT0wO2k8MTQ7aSsrKXRvbmUoMTIwMCtNYXRoLnJhbmRvbSgpKjI0MDAsLjI1LCJzaW5lIiwuMDI1LGkqLjA1KX0KfTsKZnVuY3Rpb24gdmliKG1zKXt0cnl7bmF2aWdhdG9yLnZpYnJhdGUmJm5hdmlnYXRvci52aWJyYXRlKG1zKX1jYXRjaChlKXt9fQovKiBiYWNrZ3JvdW5kIG11c2ljOiBzbG93IHBhZHMgKyBtdXNpYy1ib3ggbm90ZXMsIGdlbmVyYXRlZCBsaXZlICovCnZhciBNVVM9bnVsbDsKZnVuY3Rpb24gbXVzaWMoKXt2YXIgYz1hYygpO2lmKCFjfHxNVVMpcmV0dXJuO01VUz17ZzpjLmNyZWF0ZUdhaW4oKSx0OmMuY3VycmVudFRpbWUrLjEsc3RlcDowfTtNVVMuZy5nYWluLnZhbHVlPTA7TVVTLmcuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShTLm11dGVkPzA6MSxjLmN1cnJlbnRUaW1lKzMpOwogIHZhciBscD1jLmNyZWF0ZUJpcXVhZEZpbHRlcigpO2xwLnR5cGU9Imxvd3Bhc3MiO2xwLmZyZXF1ZW5jeS52YWx1ZT0yNjAwO3ZhciBkbD1jLmNyZWF0ZURlbGF5KDEpO2RsLmRlbGF5VGltZS52YWx1ZT0uNDI7dmFyIGZiPWMuY3JlYXRlR2FpbigpO2ZiLmdhaW4udmFsdWU9LjMyO3ZhciB3ZXQ9Yy5jcmVhdGVHYWluKCk7d2V0LmdhaW4udmFsdWU9LjM1OwogIE1VUy5nLmNvbm5lY3QobHApO2xwLmNvbm5lY3QoYy5kZXN0aW5hdGlvbik7bHAuY29ubmVjdChkbCk7ZGwuY29ubmVjdChmYik7ZmIuY29ubmVjdChkbCk7ZGwuY29ubmVjdCh3ZXQpO3dldC5jb25uZWN0KGMuZGVzdGluYXRpb24pOwogIHZhciBDSD1bWzUzLDU3LDYwLDY0XSxbNTIsNTUsNTksNjJdLFs1MCw1Myw1Nyw2MCw2NF0sWzQ4LDUyLDU1LDU5XV0sQk9YPVs3Miw3NCw3Niw3OSw4MSw4NCw4Niw4OF0sYmFyPTQuODsKICBmdW5jdGlvbiBoeihtKXtyZXR1cm4gNDQwKk1hdGgucG93KDIsKG0tNjkpLzEyKX0KICBmdW5jdGlvbiBwYWQobSx0MCxkKXt2YXIgbz1jLmNyZWF0ZU9zY2lsbGF0b3IoKSxvMj1jLmNyZWF0ZU9zY2lsbGF0b3IoKSxnPWMuY3JlYXRlR2FpbigpO28udHlwZT0idHJpYW5nbGUiO28yLnR5cGU9InNpbmUiO28uZnJlcXVlbmN5LnZhbHVlPWh6KG0pO28yLmZyZXF1ZW5jeS52YWx1ZT1oeihtKSoxLjAwNDtnLmdhaW4uc2V0VmFsdWVBdFRpbWUoMCx0MCk7Zy5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKC4wMTgsdDArMS42KTtnLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoLjAxNCx0MCtkLTEpO2cuZ2Fpbi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSgwLHQwK2QrLjYpO28uY29ubmVjdChnKTtvMi5jb25uZWN0KGcpO2cuY29ubmVjdChNVVMuZyk7by5zdGFydCh0MCk7bzIuc3RhcnQodDApO28uc3RvcCh0MCtkKy43KTtvMi5zdG9wKHQwK2QrLjcpfQogIGZ1bmN0aW9uIGJlbGwobSx0MCx2KXt2YXIgbz1jLmNyZWF0ZU9zY2lsbGF0b3IoKSxvMj1jLmNyZWF0ZU9zY2lsbGF0b3IoKSxnPWMuY3JlYXRlR2FpbigpO28udHlwZT0ic2luZSI7bzIudHlwZT0ic2luZSI7by5mcmVxdWVuY3kudmFsdWU9aHoobSk7bzIuZnJlcXVlbmN5LnZhbHVlPWh6KG0pKjMuMDE7dmFyIGcyPWMuY3JlYXRlR2FpbigpO2cyLmdhaW4udmFsdWU9LjI1O2cuZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLHQwKTtnLmdhaW4ubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodix0MCsuMDEpO2cuZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKC4wMDAxLHQwKzEuOCk7by5jb25uZWN0KGcpO28yLmNvbm5lY3QoZzIpLmNvbm5lY3QoZyk7Zy5jb25uZWN0KE1VUy5nKTtvLnN0YXJ0KHQwKTtvMi5zdGFydCh0MCk7by5zdG9wKHQwKzEuOSk7bzIuc3RvcCh0MCsxLjkpfQogIGZ1bmN0aW9uIHNjaGVkKCl7d2hpbGUoTVVTLnQ8Yy5jdXJyZW50VGltZStiYXIqMS41KXt2YXIgY2g9Q0hbTVVTLnN0ZXAlNF07Y2guZm9yRWFjaChmdW5jdGlvbihtKXtwYWQobSxNVVMudCxiYXIpfSk7cGFkKGNoWzBdLTEyLE1VUy50LGJhcik7CiAgICAgIHZhciBuPTMrTWF0aC5yYW5kb20oKSozfDA7Zm9yKHZhciBrPTA7azxuO2srKyl7dmFyIHR0PU1VUy50Ky4zK01hdGgucmFuZG9tKCkqKGJhci0uOCk7YmVsbChCT1hbTWF0aC5yYW5kb20oKSpCT1gubGVuZ3RofDBdLHR0LC4wMytNYXRoLnJhbmRvbSgpKi4wMil9TVVTLnQrPWJhcjtNVVMuc3RlcCsrfX0KICBzY2hlZCgpO01VUy5pdj1zZXRJbnRlcnZhbChzY2hlZCwxMDAwKX0KZnVuY3Rpb24gbXVzaWNNdXRlKCl7aWYoTVVTJiZBQylNVVMuZy5nYWluLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKFMubXV0ZWQ\/MDoxLEFDLmN1cnJlbnRUaW1lKy40KX0Kc25kLndob29zaD1mdW5jdGlvbigpe2lmKFMubXV0ZWQpcmV0dXJuO3ZhciBjPWFjKCk7aWYoIWMpcmV0dXJuO3ZhciBuPWMuc2FtcGxlUmF0ZSouOXwwLGI9Yy5jcmVhdGVCdWZmZXIoMSxuLGMuc2FtcGxlUmF0ZSksYT1iLmdldENoYW5uZWxEYXRhKDApO2Zvcih2YXIgaT0wO2k8bjtpKyspYVtpXT0oTWF0aC5yYW5kb20oKSoyLTEpKk1hdGguc2luKE1hdGguUEkqaS9uKTt2YXIgc3JjPWMuY3JlYXRlQnVmZmVyU291cmNlKCksZj1jLmNyZWF0ZUJpcXVhZEZpbHRlcigpLGc9Yy5jcmVhdGVHYWluKCk7Zi50eXBlPSJiYW5kcGFzcyI7Zi5RLnZhbHVlPTEuMjtmLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZSgzMDAsYy5jdXJyZW50VGltZSk7Zi5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgxODAwLGMuY3VycmVudFRpbWUrLjgpO2cuZ2Fpbi52YWx1ZT0uMDg7c3JjLmJ1ZmZlcj1iO3NyYy5jb25uZWN0KGYpLmNvbm5lY3QoZykuY29ubmVjdChjLmRlc3RpbmF0aW9uKTtzcmMuc3RhcnQoKX07CnNuZC53aW49ZnVuY3Rpb24oKXtbNzg0LDk4OCwxMTc1LDE1NjhdLmZvckVhY2goZnVuY3Rpb24oZixpKXt0b25lKGYsLjUsInNpbmUiLC4wNixpKi4wOSl9KTtzbmQubWFnaWMoKX07CiQoIiNtdXRlIikub25jbGljaz1mdW5jdGlvbigpe1MubXV0ZWQ9IVMubXV0ZWQ7c2F2ZSgpO211c2ljTXV0ZSgpOyQoIiNtdXRld2F2ZSIpLnN0eWxlLm9wYWNpdHk9Uy5tdXRlZD8wOjE7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLFMubXV0ZWQ\/ItCS0LrQu9GO0YfQuNGC0Ywg0LfQstGD0LoiOiLQktGL0LrQu9GO0YfQuNGC0Ywg0LfQstGD0LoiKX07CiQoIiNtdXRld2F2ZSIpLnN0eWxlLm9wYWNpdHk9Uy5tdXRlZD8wOjE7CgovKiAtLS0tLS0tLS0tIHRocmVlLmpzIC0tLS0tLS0tLS0gKi8KaWYoIXdpbmRvdy5USFJFRSl7JCgiI2xvYWRpbmciKS50ZXh0Q29udGVudD0i0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LPRgNGD0LfQuNGC0YwgM0QuINCe0LHQvdC+0LLQuCDRgdGC0YDQsNC90LjRhtGDLiI7cmV0dXJufQp2YXIgY2FudmFzPSQoIiNnbCIpLHJlbmRlcmVyOwp0cnl7cmVuZGVyZXI9bmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoe2NhbnZhczpjYW52YXMsYW50aWFsaWFzOnRydWUscG93ZXJQcmVmZXJlbmNlOiJoaWdoLXBlcmZvcm1hbmNlIn0pfWNhdGNoKGUpeyQoIiNsb2FkaW5nIikudGV4dENvbnRlbnQ9ItCR0YDQsNGD0LfQtdGAINC90LUg0L\/QvtC00LTQtdGA0LbQuNCy0LDQtdGCIDNELiDQntGC0LrRgNC+0Lkg0YHRgtGA0LDQvdC40YbRgyDQsiBDaHJvbWUg0LjQu9C4IFNhZmFyaS4iO3JldHVybn0KJCgiI2xvYWRpbmciKS5yZW1vdmUoKTsKcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyhNYXRoLm1pbih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSwxLjc1KSk7CnJlbmRlcmVyLm91dHB1dEVuY29kaW5nPVRIUkVFLnNSR0JFbmNvZGluZztyZW5kZXJlci50b25lTWFwcGluZz1USFJFRS5BQ0VTRmlsbWljVG9uZU1hcHBpbmc7cmVuZGVyZXIudG9uZU1hcHBpbmdFeHBvc3VyZT0uOTg7CnJlbmRlcmVyLnNoYWRvd01hcC5lbmFibGVkPXRydWU7cmVuZGVyZXIuc2hhZG93TWFwLnR5cGU9VEhSRUUuUENGU29mdFNoYWRvd01hcDsKdmFyIHNjZW5lPW5ldyBUSFJFRS5TY2VuZSgpO3NjZW5lLmJhY2tncm91bmQ9bmV3IFRIUkVFLkNvbG9yKDB4MDUwODBmKTtzY2VuZS5mb2c9bmV3IFRIUkVFLkZvZygweDA1MDgwZiwxNiwzMik7CnZhciBjYW1lcmE9bmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKDUwLDEsLjA1LDgwKTsKCihmdW5jdGlvbigpe3ZhciBlcz1uZXcgVEhSRUUuU2NlbmUoKTtlcy5iYWNrZ3JvdW5kPW5ldyBUSFJFRS5Db2xvcigweDA3MGIxNik7CiAgW1swLDgsMCwweGRmZThmZiwzXSxbLTUsMywzLDB4ZmZkMmEwLDEuNF0sWzUsMywtMywweDJhM2Y4YSwxLjJdLFswLDEsOCwweDNhMWExMiwxXV0uZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgbT1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkoMywzLDMpLG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7Y29sb3I6bmV3IFRIUkVFLkNvbG9yKGxbM10pLm11bHRpcGx5U2NhbGFyKGxbNF0pfSkpO20ucG9zaXRpb24uc2V0KGxbMF0sbFsxXSxsWzJdKTtlcy5hZGQobSl9KTsKICB2YXIgcG09bmV3IFRIUkVFLlBNUkVNR2VuZXJhdG9yKHJlbmRlcmVyKTtzY2VuZS5lbnZpcm9ubWVudD1wbS5mcm9tU2NlbmUoZXMsLjA0KS50ZXh0dXJlfSkoKTsKCmZ1bmN0aW9uIGNhbnZhc1RleCh3LGgsZHJhdyxsaW5lYXIpe3ZhciBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Mud2lkdGg9dztjLmhlaWdodD1oO3ZhciB4PWMuZ2V0Q29udGV4dCgiMmQiKTtkcmF3KHgsdyxoKTt2YXIgdD1uZXcgVEhSRUUuQ2FudmFzVGV4dHVyZShjKTtpZighbGluZWFyKXQuZW5jb2Rpbmc9VEhSRUUuc1JHQkVuY29kaW5nO3QuYW5pc290cm9weT1yZW5kZXJlci5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weT9NYXRoLm1pbig4LHJlbmRlcmVyLmNhcGFiaWxpdGllcy5nZXRNYXhBbmlzb3Ryb3B5KCkpOjQ7cmV0dXJuIHR9CmZ1bmN0aW9uIHJuZChzZWVkKXtyZXR1cm4gZnVuY3Rpb24oKXtzZWVkPShzZWVkKjE2ODA3KSUyMTQ3NDgzNjQ3O3JldHVybihzZWVkLTEpLzIxNDc0ODM2NDZ9fQoKdmFyIEdPTEQ9bmV3IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsKHtjb2xvcjoweGQ4YjA2YSxtZXRhbG5lc3M6MSxyb3VnaG5lc3M6LjI4fSk7CnZhciBHT0xEX0RLPW5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHg4ZjZhMzMsbWV0YWxuZXNzOjEscm91Z2huZXNzOi40fSk7CnZhciBDUkVBTT1uZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOjB4ZWZlNmQ2LHJvdWdobmVzczouNTV9KTsKCi8qIGxpZ2h0cyAqLwpzY2VuZS5hZGQobmV3IFRIUkVFLkhlbWlzcGhlcmVMaWdodCgweGU4ZWNmZiwweDA1MDcwZCwuMikpOwp2YXIgc2t5PW5ldyBUSFJFRS5TcG90TGlnaHQoMHhkZmU5ZmYsNC4yLDI2LC4zOCwuNiwxLjIpO3NreS5wb3NpdGlvbi5zZXQoMCw5LjUsLTcuNSk7c2t5LnRhcmdldC5wb3NpdGlvbi5zZXQoMCwwLC04LjYpO3NreS5jYXN0U2hhZG93PXRydWU7c2t5LnNoYWRvdy5tYXBTaXplLnNldCgxMDI0LDEwMjQpO3NreS5zaGFkb3cuYmlhcz0tLjAwMDY7c2NlbmUuYWRkKHNreSxza3kudGFyZ2V0KTsKdmFyIHdhcm1MPW5ldyBUSFJFRS5Qb2ludExpZ2h0KDB4ZmZjNThhLC45LDE0LDEuNik7d2FybUwucG9zaXRpb24uc2V0KC0zLDQuNSwzKTtzY2VuZS5hZGQod2FybUwpOwp2YXIgd2FybVI9bmV3IFRIUkVFLlBvaW50TGlnaHQoMHhmZmM1OGEsLjksMTQsMS42KTt3YXJtUi5wb3NpdGlvbi5zZXQoMyw0LjUsLTEpO3NjZW5lLmFkZCh3YXJtUik7CnZhciBmcm9udD1uZXcgVEhSRUUuU3BvdExpZ2h0KDB4ZmZlNmM4LDEuNiwyMCwuNiwuOCwxLjMpO2Zyb250LnBvc2l0aW9uLnNldCgwLDYsOSk7ZnJvbnQudGFyZ2V0LnBvc2l0aW9uLnNldCgwLDEsMCk7c2NlbmUuYWRkKGZyb250LGZyb250LnRhcmdldCk7CgovKiBoYWxsOiBoZXJyaW5nYm9uZSBmbG9vciwgcmVkIHNpbGsgd2FsbHMsIGdvbGQgY29ybmljZSwgc2t5bGlnaHQgKi8KdmFyIEhXPTEyLEhMPTI0LEhIPTcuNixaMD05LFpCPVowLUhMOyAvLyBiYWNrIHdhbGwgej0tMTUKdmFyIGZsb29yVGV4PWNhbnZhc1RleCgxMDI0LDEwMjQsZnVuY3Rpb24oeCx3LGgpe3guZmlsbFN0eWxlPSIjMmExNjBkIjt4LmZpbGxSZWN0KDAsMCx3LGgpO3ZhciByPXJuZCg3KSxwdz0xMjgscGg9MzI7CiAgZm9yKHZhciB5eT0tMjt5eTxoL3BoKzI7eXkrKylmb3IodmFyIHh4PS0yO3h4PHcvcHcrMjt4eCsrKXt2YXIgbD00MCtyKCkqMzB8MDt4LnNhdmUoKTt4LnRyYW5zbGF0ZSh4eCpwdysoeXklMikqcHcvMix5eSpwaCk7eC5maWxsU3R5bGU9ImhzbCgyNiwiKygxOCtyKCkqMTB8MCkrIiUsIisobC81LjZ8MCkrIiUpIjt4LmZpbGxSZWN0KDAsMCxwdy0yLHBoLTIpOwogICAgeC5nbG9iYWxBbHBoYT0uMDg7Zm9yKHZhciBrPTA7azw2O2srKyl7eC5maWxsU3R5bGU9cigpPC41PyIjMDAwIjoiI2ZmZiI7eC5maWxsUmVjdCgwLHIoKSpwaCxwdywxKX14LnJlc3RvcmUoKX19KTsKZmxvb3JUZXgud3JhcFM9Zmxvb3JUZXgud3JhcFQ9VEhSRUUuUmVwZWF0V3JhcHBpbmc7Zmxvb3JUZXgucmVwZWF0LnNldCgzLDYpOwp2YXIgZmxvb3I9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoSFcsSEwpLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7bWFwOmZsb29yVGV4LGNvbG9yOjB4N2E2NjU4LHJvdWdobmVzczouMzYsbWV0YWxuZXNzOi4xfSkpO2Zsb29yLnJvdGF0aW9uLng9LU1hdGguUEkvMjtmbG9vci5wb3NpdGlvbi56PVowLUhMLzI7Zmxvb3IucmVjZWl2ZVNoYWRvdz10cnVlO3NjZW5lLmFkZChmbG9vcik7CnZhciBzaWxrPWNhbnZhc1RleCg1MTIsNTEyLGZ1bmN0aW9uKHgsdyxoKXt4LmZpbGxTdHlsZT0iIzBjMTQyNiI7eC5maWxsUmVjdCgwLDAsdyxoKTt4Lmdsb2JhbEFscGhhPS4xO3guc3Ryb2tlU3R5bGU9IiM1YTZmYWUiO3gubGluZVdpZHRoPTI7CiAgZm9yKHZhciBqPTA7ajw0O2orKylmb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgY3g9aSoxMjgrKGolMikqNjQsY3k9aioxMjg7eC5iZWdpblBhdGgoKTt4Lm1vdmVUbyhjeCxjeS00Nik7eC5iZXppZXJDdXJ2ZVRvKGN4KzM4LGN5LTIwLGN4KzM4LGN5KzIwLGN4LGN5KzQ2KTt4LmJlemllckN1cnZlVG8oY3gtMzgsY3krMjAsY3gtMzgsY3ktMjAsY3gsY3ktNDYpO3guc3Ryb2tlKCk7eC5iZWdpblBhdGgoKTt4LmFyYyhjeCxjeSw5LDAsNyk7eC5zdHJva2UoKX0KICB4Lmdsb2JhbEFscGhhPS4wNjtmb3IodmFyIGs9MDtrPDMwMDA7aysrKXt4LmZpbGxTdHlsZT1NYXRoLnJhbmRvbSgpPC41PyIjMDAwIjoiIzhhYTBlMCI7eC5maWxsUmVjdChNYXRoLnJhbmRvbSgpKncsTWF0aC5yYW5kb20oKSpoLDEsMyl9fSk7CnNpbGsud3JhcFM9c2lsay53cmFwVD1USFJFRS5SZXBlYXRXcmFwcGluZztzaWxrLnJlcGVhdC5zZXQoMTAsMyk7CnZhciB3YWxsTWF0PW5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7bWFwOnNpbGsscm91Z2huZXNzOi43OCxtZXRhbG5lc3M6LjA1fSk7CnZhciB3YWluTWF0PW5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgwNzBiMTYscm91Z2huZXNzOi40LG1ldGFsbmVzczouMTV9KTsKZnVuY3Rpb24gd2FsbFBsYW5lKHcscG9zLHJvdFkpe3ZhciBnPW5ldyBUSFJFRS5Hcm91cCgpO3ZhciBtPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHcsSEgpLHdhbGxNYXQpO20ucG9zaXRpb24ueT1ISC8yO20ucmVjZWl2ZVNoYWRvdz10cnVlO2cuYWRkKG0pOwogIHZhciB3bj1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkodywxLjAsLjA2KSx3YWluTWF0KTt3bi5wb3NpdGlvbi5zZXQoMCwuNSwuMDMpO2cuYWRkKHduKTsKICB2YXIgcmFpbD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkodywuMDYsLjEpLEdPTERfREspO3JhaWwucG9zaXRpb24uc2V0KDAsMS4wMiwuMDUpO2cuYWRkKHJhaWwpOwogIHZhciBjb3JuPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSh3LC4zMiwuMzIpLEdPTERfREspO2Nvcm4ucG9zaXRpb24uc2V0KDAsSEgtLjE2LC4xNik7Zy5hZGQoY29ybik7CiAgdmFyIGNvcm4yPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSh3LC4wOCwuNDQpLEdPTEQpO2Nvcm4yLnBvc2l0aW9uLnNldCgwLEhILS4zNiwuMik7Zy5hZGQoY29ybjIpOwogIGcucG9zaXRpb24uY29weShwb3MpO2cucm90YXRpb24ueT1yb3RZO3NjZW5lLmFkZChnKTtyZXR1cm4gZ30Kd2FsbFBsYW5lKEhMLG5ldyBUSFJFRS5WZWN0b3IzKC1IVy8yLDAsWjAtSEwvMiksTWF0aC5QSS8yKTsKd2FsbFBsYW5lKEhMLG5ldyBUSFJFRS5WZWN0b3IzKEhXLzIsMCxaMC1ITC8yKSwtTWF0aC5QSS8yKTsKdmFyIGJhY2s9d2FsbFBsYW5lKEhXLG5ldyBUSFJFRS5WZWN0b3IzKDAsMCxaQiksMCk7Ci8qIGNlaWxpbmcgd2l0aCBjb2ZmZXJzICsgc2t5bGlnaHQgKi8KdmFyIGNlaWxUZXg9Y2FudmFzVGV4KDUxMiwxMDI0LGZ1bmN0aW9uKHgsdyxoKXt4LmZpbGxTdHlsZT0iIzA3MGIxNSI7eC5maWxsUmVjdCgwLDAsdyxoKTt4LnN0cm9rZVN0eWxlPSJyZ2JhKDIxNCwxNzgsMTEyLC4yOCkiO3gubGluZVdpZHRoPTM7Zm9yKHZhciB5PTA7eTxoO3krPTY0KWZvcih2YXIgeHg9MDt4eDx3O3h4Kz02NCl4LnN0cm9rZVJlY3QoeHgrNix5KzYsNTIsNTIpfSk7CnZhciBjZWlsPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KEhXLEhMKSxuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe21hcDpjZWlsVGV4LHJvdWdobmVzczouOX0pKTtjZWlsLnJvdGF0aW9uLng9TWF0aC5QSS8yO2NlaWwucG9zaXRpb24uc2V0KDAsSEgsWjAtSEwvMik7c2NlbmUuYWRkKGNlaWwpOwp2YXIgc2t5VGV4PWNhbnZhc1RleCgyNTYsNTEyLGZ1bmN0aW9uKHgsdyxoKXt2YXIgZz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsMCwwLGgpO2cuYWRkQ29sb3JTdG9wKDAsIiNiOWQ0ZmYiKTtnLmFkZENvbG9yU3RvcCgxLCIjZTlmMWZmIik7eC5maWxsU3R5bGU9Zzt4LmZpbGxSZWN0KDAsMCx3LGgpO3guc3Ryb2tlU3R5bGU9IiMyMDI4M2EiO3gubGluZVdpZHRoPTY7Zm9yKHZhciBpPTA7aTw9dztpKz13LzQpe3guYmVnaW5QYXRoKCk7eC5tb3ZlVG8oaSwwKTt4LmxpbmVUbyhpLGgpO3guc3Ryb2tlKCl9Zm9yKHZhciBqPTA7ajw9aDtqKz1oLzEwKXt4LmJlZ2luUGF0aCgpO3gubW92ZVRvKDAsaik7eC5saW5lVG8odyxqKTt4LnN0cm9rZSgpfX0pOwp2YXIgc2t5bD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeSgzLjIsOSksbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHttYXA6c2t5VGV4LGNvbG9yOjB4ODA5MGE4fSkpO3NreWwucm90YXRpb24ueD1NYXRoLlBJLzI7c2t5bC5wb3NpdGlvbi5zZXQoMCxISC0uMDEsLTcpO3NjZW5lLmFkZChza3lsKTsKLyogbGlnaHQgc2hhZnQgKi8KdmFyIHNoYWZ0TWF0PW5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7dHJhbnNwYXJlbnQ6dHJ1ZSxkZXB0aFdyaXRlOmZhbHNlLGJsZW5kaW5nOlRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsc2lkZTpUSFJFRS5Eb3VibGVTaWRlLHVuaWZvcm1zOntvcDp7dmFsdWU6LjExfX0sCiAgdmVydGV4U2hhZGVyOiJ2YXJ5aW5nIHZlYzIgdlV2O3ZvaWQgbWFpbigpe3ZVdj11djtnbF9Qb3NpdGlvbj1wcm9qZWN0aW9uTWF0cml4Km1vZGVsVmlld01hdHJpeCp2ZWM0KHBvc2l0aW9uLDEuKTt9IiwKICBmcmFnbWVudFNoYWRlcjoidW5pZm9ybSBmbG9hdCBvcDt2YXJ5aW5nIHZlYzIgdlV2O3ZvaWQgbWFpbigpe2Zsb2F0IGE9KDEuLXBvdyhhYnModlV2LngtLjUpKjIuLDIuKSkqcG93KHZVdi55LC44KSpvcDtnbF9GcmFnQ29sb3I9dmVjNCguOCwuODgsMS4sYSk7fSJ9KTsKdmFyIHNoYWZ0PW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KDEuNSwyLjYsSEgsMzIsMSx0cnVlKSxzaGFmdE1hdCk7c2hhZnQucG9zaXRpb24uc2V0KDAsSEgvMiwtOCk7c2NlbmUuYWRkKHNoYWZ0KTsKCi8qIHBpbGFzdGVycyBiZXR3ZWVuIHBhaW50aW5ncyAqLwpmdW5jdGlvbiBwaWxhc3Rlcih4LHope3ZhciBwPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSguMTgsSEgtLjYsLjUpLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgwYTEwMjAscm91Z2huZXNzOi41NX0pKTtwLnBvc2l0aW9uLnNldCh4LChISC0uNikvMix6KTtwLmNhc3RTaGFkb3c9dHJ1ZTtzY2VuZS5hZGQocCk7CiAgdmFyIGNhcD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkoLjI2LC4yLC42MiksR09MRF9ESyk7Y2FwLnBvc2l0aW9uLnNldCh4LEhILS43LHopO3NjZW5lLmFkZChjYXApfQpbNi42LDIuNiwtMS40LC01LjQsLTkuNCwtMTMuMl0uZm9yRWFjaChmdW5jdGlvbih6KXtwaWxhc3RlcigtSFcvMisuMDkseik7cGlsYXN0ZXIoSFcvMi0uMDkseil9KTsKCi8qIC0tLS0tLS0tLS0gcGFpbnRpbmdzIChwcm9jZWR1cmFsIHBsYWNlaG9sZGVyczsgcmVhbCBwdWJsaWMtZG9tYWluIHdvcmtzIGluIHByb2R1Y3Rpb24pIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gcGFpbnRpbmcoa2luZCxzZWVkKXtyZXR1cm4gY2FudmFzVGV4KDUxMiw2NDAsZnVuY3Rpb24oeCx3LGgpe3ZhciByPXJuZChzZWVkKSxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Mud2lkdGg9NDg7cy5oZWlnaHQ9NjA7dmFyIGM9cy5nZXRDb250ZXh0KCIyZCIpOwogIGlmKGtpbmQ9PT0icG9ydHJhaXQiKXt2YXIgYmc9Yy5jcmVhdGVSYWRpYWxHcmFkaWVudCgyNCwyMiw0LDI0LDMwLDQwKTtiZy5hZGRDb2xvclN0b3AoMCwiIzVhNDYzMCIpO2JnLmFkZENvbG9yU3RvcCgxLCIjMTIwYzA4Iik7Yy5maWxsU3R5bGU9Ymc7Yy5maWxsUmVjdCgwLDAsNDgsNjApOwogICAgYy5maWxsU3R5bGU9WyIjMWYyZjVhIiwiIzZiMWEyMCIsIiMyYzNhMjgiXVtzZWVkJTNdO2MuYmVnaW5QYXRoKCk7Yy5lbGxpcHNlKDI0LDU4LDIwLDE4LDAsMCw3KTtjLmZpbGwoKTsKICAgIGMuZmlsbFN0eWxlPSIjMmExYTEwIjtjLmJlZ2luUGF0aCgpO2MuZWxsaXBzZSgyNCwyNCwxMSwxMywwLDAsNyk7Yy5maWxsKCk7CiAgICBjLmZpbGxTdHlsZT0iI2UyYmI5OCI7Yy5iZWdpblBhdGgoKTtjLmVsbGlwc2UoMjQrKHIoKS0uNSkqMiwyNyw3LjUsOS41LDAsMCw3KTtjLmZpbGwoKTsKICAgIGMuZmlsbFN0eWxlPSIjZThjN2E4IjtjLmZpbGxSZWN0KDIxLDM1LDYsNik7aWYoc2VlZCUyKXtjLmZpbGxTdHlsZT0iI2U5ZTJkMCI7Yy5iZWdpblBhdGgoKTtjLmFyYygzMCwzMSwxLjIsMCw3KTtjLmZpbGwoKX19CiAgZWxzZSBpZihraW5kPT09ImxhbmQiKXt2YXIgZz1jLmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsMCwwLDYwKTtnLmFkZENvbG9yU3RvcCgwLCIjN2Y5ZWMyIik7Zy5hZGRDb2xvclN0b3AoLjU1LCIjZWZkM2E4Iik7Zy5hZGRDb2xvclN0b3AoLjYsIiM1YjdhNTIiKTtnLmFkZENvbG9yU3RvcCgxLCIjMmY0NjMwIik7Yy5maWxsU3R5bGU9ZztjLmZpbGxSZWN0KDAsMCw0OCw2MCk7CiAgICBmb3IodmFyIGk9MDtpPDE0O2krKyl7Yy5maWxsU3R5bGU9InJnYmEoMjU1LDI1MCwyNDAsLjUpIjtjLmJlZ2luUGF0aCgpO2MuZWxsaXBzZShyKCkqNDgscigpKjI0LDQrcigpKjYsMiwwLDAsNyk7Yy5maWxsKCl9CiAgICBmb3IoaT0wO2k8MTA7aSsrKXtjLmZpbGxTdHlsZT0icmdiYSgzMCw1MCwzMCwuNzUpIjtjLmJlZ2luUGF0aCgpO2MuZWxsaXBzZShyKCkqNDgsMzArcigpKjgsMytyKCkqNCw2K3IoKSo1LDAsMCw3KTtjLmZpbGwoKX0KICAgIGMuZmlsbFN0eWxlPSJyZ2JhKDEyMCwxNjAsMjAwLC42KSI7Yy5maWxsUmVjdCgwLDQ0LDQ4LDgpfQogIGVsc2UgaWYoa2luZD09PSJsaWxpZXMiKXtjLmZpbGxTdHlsZT0iIzI4NGE1YyI7Yy5maWxsUmVjdCgwLDAsNDgsNjApO2Zvcih2YXIgaTI9MDtpMjw2MDtpMisrKXtjLmZpbGxTdHlsZT1bIiMzZDZlN2EiLCIjNWM4YTZhIiwiIzFkMzM0NiIsIiM4ZmIwYTYiXVtpMiU0XTtjLmJlZ2luUGF0aCgpO2MuZWxsaXBzZShyKCkqNDgscigpKjYwLDMrcigpKjUsMS41LDAsMCw3KTtjLmZpbGwoKX0KICAgIGZvcihpMj0wO2kyPDEwO2kyKyspe2MuZmlsbFN0eWxlPVsiI2YyYzZkMCIsIiNmZmYxZTgiLCIjZTg5YWIwIl1baTIlM107Yy5iZWdpblBhdGgoKTtjLmFyYyhyKCkqNDgscigpKjYwLDEuNiwwLDcpO2MuZmlsbCgpfX0KICBlbHNlIGlmKGtpbmQ9PT0iZ29sZCIpe2MuZmlsbFN0eWxlPSIjNmU1MzIwIjtjLmZpbGxSZWN0KDAsMCw0OCw2MCk7Zm9yKHZhciBpMz0wO2kzPDIyMDtpMysrKXtjLmZpbGxTdHlsZT1bIiNjOWEyNGEiLCIjZTRjODczIiwiIzhhNmEyYSIsIiNmNGUzYTAiXVtpMyU0XTtjLmZpbGxSZWN0KHIoKSo0OCxyKCkqNjAsMStyKCkqMi41LDErcigpKjIuNSl9CiAgICBjLmZpbGxTdHlsZT0iI2Q5YjI1YSI7Yy5iZWdpblBhdGgoKTtjLmVsbGlwc2UoMjQsMzAsMTMsMjQsLjE1LDAsNyk7Yy5maWxsKCk7Yy5maWxsU3R5bGU9IiNlZmM5YTYiO2MuYmVnaW5QYXRoKCk7Yy5lbGxpcHNlKDIxLDEzLDQsNSwwLDAsNyk7Yy5maWxsKCk7Yy5iZWdpblBhdGgoKTtjLmVsbGlwc2UoMjcsMTUsMy41LDQuNSwwLDAsNyk7Yy5maWxsKCk7CiAgICBmb3IoaTM9MDtpMzw0MDtpMysrKXtjLmZpbGxTdHlsZT1bIiMxYjFiMWIiLCIjZjVmMGUwIiwiI2I1NDYyZSIsIiMyZTVhOGEiXVtpMyU0XTtjLmZpbGxSZWN0KDE0K3IoKSoyMCwyMityKCkqMjgsMS41LDEuNSl9fQogIGVsc2V7Yy5maWxsU3R5bGU9IiMxYTEyMGMiO2MuZmlsbFJlY3QoMCwwLDQ4LDYwKTtjLmZpbGxTdHlsZT0iIzZhNGEyYSI7Yy5maWxsUmVjdCgwLDQ0LDQ4LDE2KTtjLmZpbGxTdHlsZT0iI2Q5ZDBjMCI7Yy5iZWdpblBhdGgoKTtjLmVsbGlwc2UoMjQsNDAsNyw5LDAsMCw3KTtjLmZpbGwoKTsKICAgIGZvcih2YXIgaTQ9MDtpNDwyNjtpNCsrKXtjLmZpbGxTdHlsZT1bIiNmM2Q2ZGQiLCIjZTZhM2IzIiwiI2ZmZjZlYSIsIiNjMjQ4NjAiLCIjN2E5YTVhIl1baTQlNV07Yy5iZWdpblBhdGgoKTtjLmFyYygxNCtyKCkqMjAsMTQrcigpKjIwLDIrcigpKjIuNiwwLDcpO2MuZmlsbCgpfX0KICB4LmltYWdlU21vb3RoaW5nRW5hYmxlZD10cnVlO3guaW1hZ2VTbW9vdGhpbmdRdWFsaXR5PSJoaWdoIjt4LmRyYXdJbWFnZShzLDAsMCx3LGgpOwogIC8qIGJydXNoIHN0cm9rZXMgKi8KICB2YXIgaW1nPXguZ2V0SW1hZ2VEYXRhKDAsMCx3LGgpLmRhdGE7Zm9yKHZhciBrPTA7azw1MjAwO2srKyl7dmFyIHB4PXIoKSp3fDAscHk9cigpKmh8MCxvPShweSp3K3B4KSo0O3guc3Ryb2tlU3R5bGU9InJnYmEoIisoaW1nW29dKyhyKCktLjUpKjQwfDApKyIsIisoaW1nW28rMV0rKHIoKS0uNSkqNDB8MCkrIiwiKyhpbWdbbysyXSsocigpLS41KSo0MHwwKSsiLC41NSkiO3gubGluZVdpZHRoPTIrcigpKjU7eC5saW5lQ2FwPSJyb3VuZCI7dmFyIGE9cigpKk1hdGguUEk7eC5iZWdpblBhdGgoKTt4Lm1vdmVUbyhweCxweSk7eC5saW5lVG8ocHgrTWF0aC5jb3MoYSkqKDYrcigpKjE0KSxweStNYXRoLnNpbihhKSooNityKCkqMTQpKTt4LnN0cm9rZSgpfQogIC8qIHZhcm5pc2ggKyB2aWduZXR0ZSAqLwogIHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJtdWx0aXBseSI7eC5maWxsU3R5bGU9InJnYmEoMjM1LDIwNSwxNTAsLjM1KSI7eC5maWxsUmVjdCgwLDAsdyxoKTt4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLW92ZXIiOwogIHZhciB2PXguY3JlYXRlUmFkaWFsR3JhZGllbnQody8yLGgvMix3Ki4zLHcvMixoLzIsdyouOCk7di5hZGRDb2xvclN0b3AoMCwicmdiYSgwLDAsMCwwKSIpO3YuYWRkQ29sb3JTdG9wKDEsInJnYmEoMCwwLDAsLjQ1KSIpO3guZmlsbFN0eWxlPXY7eC5maWxsUmVjdCgwLDAsdyxoKX0pfQpmdW5jdGlvbiBwbGFxdWVUZXgodDEsdDIpe3JldHVybiBjYW52YXNUZXgoNTEyLDE2MCxmdW5jdGlvbih4LHcsaCl7eC5maWxsU3R5bGU9IiNlZmU2ZDYiO3guZmlsbFJlY3QoMCwwLHcsaCk7eC5maWxsU3R5bGU9IiMyYTFhMTAiO3gudGV4dEFsaWduPSJjZW50ZXIiO3guZm9udD0iNjAwIDQ0cHggR2Vpc3QsIEFyaWFsLCBzYW5zLXNlcmlmIjt4LmZpbGxUZXh0KHQxLHcvMiw3NCk7eC5mb250PSI1MDAgMjhweCBHZWlzdCwgQXJpYWwsIHNhbnMtc2VyaWYiO3guZmlsbFN0eWxlPSIjN2E2NDUwIjt4LmZpbGxUZXh0KHQyLHcvMiwxMjIpfSl9CmZ1bmN0aW9uIGZyYW1lMyh3LGgpe3ZhciBnPW5ldyBUSFJFRS5Hcm91cCgpLHQ9LjEyO1tbMCxoLzIrdC8yLHcrMip0LHRdLFswLC1oLzItdC8yLHcrMip0LHRdLFstdy8yLXQvMiwwLHQsaF0sW3cvMit0LzIsMCx0LGhdXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBtPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShiWzJdLGJbM10sLjEyKSxHT0xEKTttLnBvc2l0aW9uLnNldChiWzBdLGJbMV0sLjA2KTttLmNhc3RTaGFkb3c9dHJ1ZTtnLmFkZChtKTsKICB2YXIgaW5uPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShiWzJdKi45OCxiWzNdKi40LC4xNiksR09MRF9ESyk7aW5uLnBvc2l0aW9uLnNldChiWzBdLGJbMV0sLjA0KTtnLmFkZChpbm4pfSk7cmV0dXJuIGd9CnZhciBQQUlOVD1bCiAge2s6InBvcnRyYWl0IixzOjMsdzoxLjUsaDoxLjksc2lkZTotMSx6OjQuNix0OiLQlNCw0LzQsCDQsiDRgdC40L3QtdC8Iix5OiIxODc0IMK3INGF0L7Qu9GB0YIsINC80LDRgdC70L4ifSwKICB7azoibGlsaWVzIixzOjExLHc6Mi40LGg6MS42LHNpZGU6LTEsejouNix0OiLQmtGD0LLRiNC40L3QutC4Iix5OiIxOTA2IMK3INGF0L7Qu9GB0YIsINC80LDRgdC70L4ifSwKICB7azoiZ29sZCIsczo1LHc6MS42LGg6Mi4xLHNpZGU6LTEsejotMy40LHQ6ItCX0L7Qu9C+0YLQvtC5INGH0LDRgS4g0JLQtdC90LAiLHk6IjE5MDggwrcg0YXQvtC70YHRgiwg0YHRg9GB0LDQu9GM0L3QvtC1INC30L7Qu9C+0YLQviJ9LAogIHtrOiJsYW5kIixzOjIxLHc6Mi40LGg6MS42LHNpZGU6MSx6OjQuNix0OiLQo9GC0YDQviDQsiDRgdCw0LTRgyIseToiMTg4MSDCtyDRhdC+0LvRgdGCLCDQvNCw0YHQu9C+In0sCiAge2s6ImZsb3dlcnMiLHM6OSx3OjEuNixoOjIuMCxzaWRlOjEsejouNix0OiLQndCw0YLRjtGA0LzQvtGA0YIg0YEg0L\/QuNC+0L3QsNC80LgiLHk6IjE4NjQgwrcg0YXQvtC70YHRgiwg0LzQsNGB0LvQviJ9LAogIHtrOiJwb3J0cmFpdCIsczo4LHc6MS41LGg6MS45LHNpZGU6MSx6Oi0zLjQsdDoi0JTQtdCy0YPRiNC60LAg0YEg0LbQtdC80YfRg9Cz0L7QvCIseToiMTY2NSDCtyDRhdC+0LvRgdGCLCDQvNCw0YHQu9C+In0sCiAge2s6ImxhbmQiLHM6NDQsdzoyLjAsaDoxLjQsc2lkZTotMSx6Oi03LjYsdDoi0KHRg9C80LXRgNC60LgiLHk6IjE4ODkgwrcg0YXQvtC70YHRgiwg0LzQsNGB0LvQviJ9LAogIHtrOiJsaWxpZXMiLHM6Nyx3OjIuMCxoOjEuNCxzaWRlOjEsejotNy42LHQ6ItCe0YLRgNCw0LbQtdC90LjRjyIseToiMTkxNCDCtyDRhdC+0LvRgdGCLCDQvNCw0YHQu9C+In0sCiAge2s6InBvcnRyYWl0IixzOjE1LHc6Mi4yLGg6Mi45LGJhY2s6LTQuMCx0OiLQktGA0LXQvNGPINC00LvRjyDRgdC10LHRjyIseToiMTg3NiDCtyDRhdC+0LvRgdGCLCDQvNCw0YHQu9C+In0sCiAge2s6ImZsb3dlcnMiLHM6MzEsdzoyLjIsaDoyLjksYmFjazo0LjAsdDoi0KLQuNGI0LjQvdCwIix5OiIxODkwIMK3INGF0L7Qu9GB0YIsINC80LDRgdC70L4ifQpdOwpQQUlOVC5mb3JFYWNoKGZ1bmN0aW9uKHApe3ZhciBnPW5ldyBUSFJFRS5Hcm91cCgpO3ZhciB0ZXg9cGFpbnRpbmcocC5rLHAucyk7CiAgdmFyIGN2PW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHAudyxwLmgpLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7bWFwOnRleCxyb3VnaG5lc3M6LjU1LGVtaXNzaXZlOjB4ZmZmZmZmLGVtaXNzaXZlTWFwOnRleCxlbWlzc2l2ZUludGVuc2l0eTouMzJ9KSk7Y3YucG9zaXRpb24uej0uMDc7Zy5hZGQoY3YpOwogIGcuYWRkKGZyYW1lMyhwLncscC5oKSk7CiAgdmFyIHBsPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KC40MiwuMTMpLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7bWFwOnBsYXF1ZVRleChwLnQscC55KSxyb3VnaG5lc3M6LjZ9KSk7cGwucG9zaXRpb24uc2V0KDAsLXAuaC8yLS41LC4wMyk7Zy5hZGQocGwpOwogIHZhciBsYW1wPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4wMywuMDMscC53Ki42LDEyKSxHT0xEKTtsYW1wLnJvdGF0aW9uLno9TWF0aC5QSS8yO2xhbXAucG9zaXRpb24uc2V0KDAscC5oLzIrLjI4LC4zMik7Zy5hZGQobGFtcCk7CiAgdmFyIGFybT1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMDEyLC4wMTIsLjMyLDgpLEdPTEQpO2FybS5yb3RhdGlvbi54PU1hdGguUEkvMjthcm0ucG9zaXRpb24uc2V0KDAscC5oLzIrLjI4LC4xNik7Zy5hZGQoYXJtKTsKICB2YXIgd2FzaD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeShwLncqMS4yNSxwLmgqMS4yKSxuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe21hcDp3YXNoVGV4KCksdHJhbnNwYXJlbnQ6dHJ1ZSxkZXB0aFdyaXRlOmZhbHNlLGJsZW5kaW5nOlRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsb3BhY2l0eTouMzV9KSk7d2FzaC5wb3NpdGlvbi5zZXQoMCwuMSwuMDIpO2cuYWRkKHdhc2gpOwogIGlmKHAuYmFjayE9PXVuZGVmaW5lZCl7Zy5wb3NpdGlvbi5zZXQocC5iYWNrLDIuOSxaQisuMDIpfWVsc2V7Zy5wb3NpdGlvbi5zZXQocC5zaWRlKihIVy8yLS4wMiksMi41NSxwLnopO2cucm90YXRpb24ueT0tcC5zaWRlKk1hdGguUEkvMn1zY2VuZS5hZGQoZyl9KTsKZnVuY3Rpb24gd2FzaFRleCgpe2lmKHdhc2hUZXgudClyZXR1cm4gd2FzaFRleC50O3dhc2hUZXgudD1jYW52YXNUZXgoMTI4LDEyOCxmdW5jdGlvbih4LHcsaCl7dmFyIGc9eC5jcmVhdGVSYWRpYWxHcmFkaWVudCh3LzIsMCw0LHcvMixoKi4yLGgqLjk1KTtnLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyMjAsMTcwLC45KSIpO2cuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDIyMCwxNzAsMCkiKTt4LmZpbGxTdHlsZT1nO3guZmlsbFJlY3QoMCwwLHcsaCl9KTtyZXR1cm4gd2FzaFRleC50fQoKLyogYmFjayB3YWxsOiBhcmNoIG5pY2hlIGJlaGluZCB0aGUgc2FmZSAqLwooZnVuY3Rpb24oKXt2YXIgYXJjaD1uZXcgVEhSRUUuU2hhcGUoKTthcmNoLm1vdmVUbygtMS45LDApO2FyY2gubGluZVRvKC0xLjksMy42KTthcmNoLmFic2FyYygwLDMuNiwxLjksTWF0aC5QSSwwLHRydWUpO2FyY2gubGluZVRvKDEuOSwwKTthcmNoLmNsb3NlUGF0aCgpOwogIHZhciBuaWNoZT1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuU2hhcGVHZW9tZXRyeShhcmNoLDQ4KSxuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOjB4MWEyYTVjLHJvdWdobmVzczouODV9KSk7bmljaGUucG9zaXRpb24uc2V0KDAsMCxaQisuMDIpO3NjZW5lLmFkZChuaWNoZSk7CiAgdmFyIHRyaW09bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlRvcnVzR2VvbWV0cnkoMS45NSwuMDYsMTAsNjQsTWF0aC5QSSksR09MRCk7dHJpbS5wb3NpdGlvbi5zZXQoMCwzLjYsWkIrLjA2KTtzY2VuZS5hZGQodHJpbSk7CiAgWy0xLjk1LDEuOTVdLmZvckVhY2goZnVuY3Rpb24oeCl7dmFyIGI9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkJveEdlb21ldHJ5KC4xMiwzLjYsLjEyKSxHT0xEKTtiLnBvc2l0aW9uLnNldCh4LDEuOCxaQisuMDYpO3NjZW5lLmFkZChiKX0pO30pKCk7CgovKiBDQ1RWIGNhbWVyYXMgKi8KdmFyIGNhbXM9W107W1stMSxaQisxLjJdLFsxLFpCKzEuMl0sWy0xLDFdLFsxLDFdXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciBnPW5ldyBUSFJFRS5Hcm91cCgpO3ZhciBib2R5PW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSguMTgsLjE2LC40MiksbmV3IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsKHtjb2xvcjoweDFjMWMxZSxtZXRhbG5lc3M6LjYscm91Z2huZXNzOi4zNX0pKTtib2R5LnBvc2l0aW9uLno9LjIyO2cuYWRkKGJvZHkpOwogIHZhciBsZW5zPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4wNiwuMDYsLjA0LDE2KSxuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOjB4MDUwNTA1LG1ldGFsbmVzczoxLHJvdWdobmVzczouMX0pKTtsZW5zLnJvdGF0aW9uLng9TWF0aC5QSS8yO2xlbnMucG9zaXRpb24uej0uNDQ7Zy5hZGQobGVucyk7CiAgdmFyIGxlZD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuU3BoZXJlR2VvbWV0cnkoLjAyNSwxMCwxMCksbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjoweGZmMjAyMH0pKTtsZWQucG9zaXRpb24uc2V0KC4wNiwuMDYsLjQyKTtnLmFkZChsZWQpOwogIGcucG9zaXRpb24uc2V0KGNbMF0qKEhXLzItLjM1KSxISC0uOSxjWzFdKTtnLnJvdGF0aW9uLm9yZGVyPSJZWFoiO2cucm90YXRpb24ueT1jWzBdPjA\/LTIuMzoyLjM7aWYoY1sxXT4wKWcucm90YXRpb24ueT1jWzBdPjA\/LS45Oi45O2cucm90YXRpb24ueD0tLjQ1O3NjZW5lLmFkZChnKTtjYW1zLnB1c2goe2c6ZyxsZWQ6bGVkLGJhc2U6Zy5yb3RhdGlvbi55fSl9KTsKCi8qIHN0YW5jaGlvbnMgKyB2ZWx2ZXQgcm9wZSAqLwp2YXIgcm9wZT1uZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOjB4OGEwZjFhLHJvdWdobmVzczouNTUsbWV0YWxuZXNzOi4xfSk7CnZhciBwb3N0UHRzPVstMy4yLC0xLjYsMS42LDMuMl07CnBvc3RQdHMuZm9yRWFjaChmdW5jdGlvbih4KXt2YXIgcD1uZXcgVEhSRUUuR3JvdXAoKTt2YXIgYmFzZT1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMTgsLjIsLjA1LDI0KSxHT0xEKTtiYXNlLnBvc2l0aW9uLnk9LjAyNTt2YXIgcG9sZT1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMDMsLjAzLC45NSwxNiksR09MRCk7cG9sZS5wb3NpdGlvbi55PS41O3ZhciB0b3A9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KC4wNiwxNiwxMiksR09MRCk7dG9wLnBvc2l0aW9uLnk9MTtwLmFkZChiYXNlLHBvbGUsdG9wKTtwLnBvc2l0aW9uLnNldCh4LDAsLTQuNCk7cC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKG0pe20uY2FzdFNoYWRvdz10cnVlfSk7c2NlbmUuYWRkKHApfSk7CltbLTMuMiwtMS42XSxbMS42LDMuMl1dLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGM9bmV3IFRIUkVFLkNhdG11bGxSb21DdXJ2ZTMoW25ldyBUSFJFRS5WZWN0b3IzKGFbMF0sLjk1LC00LjQpLG5ldyBUSFJFRS5WZWN0b3IzKChhWzBdK2FbMV0pLzIsLjYyLC00LjQpLG5ldyBUSFJFRS5WZWN0b3IzKGFbMV0sLjk1LC00LjQpXSk7dmFyIG09bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlR1YmVHZW9tZXRyeShjLDI0LC4wMjgsOCxmYWxzZSkscm9wZSk7bS5jYXN0U2hhZG93PXRydWU7c2NlbmUuYWRkKG0pfSk7CgovKiAtLS0tLS0tLS0tIHNhZmUgb24gcGVkZXN0YWwgLS0tLS0tLS0tLSAqLwp2YXIgc2FmZVo9LTkuMjsKdmFyIHNhZmU9bmV3IFRIUkVFLkdyb3VwKCk7c2FmZS5wb3NpdGlvbi5zZXQoMCwwLHNhZmVaKTtzY2VuZS5hZGQoc2FmZSk7CnZhciBzdG9uZVRleD1jYW52YXNUZXgoNTEyLDUxMixmdW5jdGlvbih4LHcsaCl7eC5maWxsU3R5bGU9IiMxNDEwMTIiO3guZmlsbFJlY3QoMCwwLHcsaCk7dmFyIHI9cm5kKDMpO3guZ2xvYmFsQWxwaGE9LjI1O3guc3Ryb2tlU3R5bGU9IiNkOGNmYzQiO2Zvcih2YXIgaT0wO2k8MjI7aSsrKXt4LmxpbmVXaWR0aD1yKCkqMS42O3guYmVnaW5QYXRoKCk7dmFyIHB4PXIoKSp3LHB5PXIoKSpoO3gubW92ZVRvKHB4LHB5KTtmb3IodmFyIGo9MDtqPDg7aisrKXtweCs9KHIoKS0uMykqNzA7cHkrPShyKCktLjUpKjQwO3gubGluZVRvKHB4LHB5KX14LnN0cm9rZSgpfQogIHguZ2xvYmFsQWxwaGE9MTt4LmZpbGxTdHlsZT0icmdiYSgyMTQsMTc4LDExMiwuNzUpIjt4LmZvbnQ9IjYwMCAzMHB4IEdlaXN0LCBBcmlhbCwgc2Fucy1zZXJpZiI7eC50ZXh0QWxpZ249ImNlbnRlciI7eC5maWxsVGV4dCgi0J3QlSDQotCg0J7Qk9CQ0KLQrCIsdy8yLGgqLjU1KX0pOwp2YXIgcGVkPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5Cb3hHZW9tZXRyeSgxLjksMS4wLDEuNSksW25ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgxNTExMTMscm91Z2huZXNzOi4zNX0pLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgxNTExMTMscm91Z2huZXNzOi4zNX0pLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgxNTExMTMscm91Z2huZXNzOi4zNX0pLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgxNTExMTMscm91Z2huZXNzOi4zNX0pLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7bWFwOnN0b25lVGV4LHJvdWdobmVzczouMyxtZXRhbG5lc3M6LjF9KSxuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOjB4MTUxMTEzLHJvdWdobmVzczouMzV9KV0pO3BlZC5wb3NpdGlvbi55PS41O3BlZC5jYXN0U2hhZG93PXBlZC5yZWNlaXZlU2hhZG93PXRydWU7c2FmZS5hZGQocGVkKTsKdmFyIHBlZFRvcD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkoMi4wMiwuMDYsMS42MiksR09MRF9ESyk7cGVkVG9wLnBvc2l0aW9uLnk9MS4wMztzYWZlLmFkZChwZWRUb3ApOwp2YXIgYnJ1c2hlZD1jYW52YXNUZXgoMjU2LDI1NixmdW5jdGlvbih4LHcsaCl7eC5maWxsU3R5bGU9IiNlMmNmYTYiO3guZmlsbFJlY3QoMCwwLHcsaCk7Zm9yKHZhciBpPTA7aTw3MDA7aSsrKXt2YXIgdj0yMDArTWF0aC5yYW5kb20oKSo1NXwwO3guZmlsbFN0eWxlPSJyZ2JhKCIrdisiLCIrKHYqLjl8MCkrIiwiKyh2Ki43MnwwKSsiLC4xOCkiO3guZmlsbFJlY3QoMCxNYXRoLnJhbmRvbSgpKmgsdywxKX19KTsKdmFyIENIQU1QPW5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7bWFwOmJydXNoZWQsY29sb3I6MHhmNGU2YzgsbWV0YWxuZXNzOi44NSxyb3VnaG5lc3M6LjN9KTsKdmFyIHNoZWxsPW5ldyBUSFJFRS5Hcm91cCgpO3NoZWxsLnBvc2l0aW9uLnk9MS4wNisuNjI7c2FmZS5hZGQoc2hlbGwpOwp2YXIgVz0xLjM1LEg9MS4yNCxEPTEuMDUsVD0uMDc7CltbMCxILzItVC8yLDAsVyxULERdLFswLC1ILzIrVC8yLDAsVyxULERdLFstVy8yK1QvMiwwLDAsVCxILERdLFtXLzItVC8yLDAsMCxULEgsRF0sWzAsMCwtRC8yK1QvMixXLEgsVF1dLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIG09bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkJveEdlb21ldHJ5KGJbM10sYls0XSxiWzVdKSxDSEFNUCk7bS5wb3NpdGlvbi5zZXQoYlswXSxiWzFdLGJbMl0pO20uY2FzdFNoYWRvdz10cnVlO3NoZWxsLmFkZChtKX0pOwp2YXIgaW5uZXJNYXQ9bmV3IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsKHtjb2xvcjoweDJhMGEwZCxlbWlzc2l2ZToweGZmYjI0YSxlbWlzc2l2ZUludGVuc2l0eTowLHJvdWdobmVzczouOH0pOwp2YXIgaW5uZXI9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkJveEdlb21ldHJ5KFctMipULEgtMipULC4wMiksaW5uZXJNYXQpO2lubmVyLnBvc2l0aW9uLno9LUQvMitUKy4wMTtzaGVsbC5hZGQoaW5uZXIpOwp2YXIgdHJlYXN1cmU9bmV3IFRIUkVFLkdyb3VwKCk7dHJlYXN1cmUucG9zaXRpb24uc2V0KDAsLUgvMitULC0uMSk7c2hlbGwuYWRkKHRyZWFzdXJlKTsKW1stLjMyLC4xNiwweGY2ZWZlNF0sWzAsLjI0LDB4ZDZiMjcwXSxbLjMyLC4xMywweDhhMGYxYV1dLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIG09bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkJveEdlb21ldHJ5KC4yNCxiWzFdKjIsLjI0KSxuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOmJbMl0scm91Z2huZXNzOi40LG1ldGFsbmVzczouMn0pKTttLnBvc2l0aW9uLnNldChiWzBdLGJbMV0sMCk7dHJlYXN1cmUuYWRkKG0pO3ZhciByYj1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkoLjI1LGJbMV0qMisuMDA1LC4wNCksR09MRCk7cmIucG9zaXRpb24uY29weShtLnBvc2l0aW9uKTt0cmVhc3VyZS5hZGQocmIpfSk7CnZhciBzYWZlR2xvdz1uZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmYzc3YSwwLDUsMS41KTtzYWZlR2xvdy5wb3NpdGlvbi5zZXQoMCwwLC40KTtzaGVsbC5hZGQoc2FmZUdsb3cpOwp2YXIgaGluZ2U9bmV3IFRIUkVFLkdyb3VwKCk7aGluZ2UucG9zaXRpb24uc2V0KC1XLzIsMCxELzIpO3NoZWxsLmFkZChoaW5nZSk7CnZhciBkb29yRz1uZXcgVEhSRUUuR3JvdXAoKTtkb29yRy5wb3NpdGlvbi5zZXQoVy8yLDAsLjA1KTtoaW5nZS5hZGQoZG9vckcpOwp2YXIgZG9vcj1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkoVy0uMDQsSC0uMDQsLjEpLENIQU1QKTtkb29yLmNhc3RTaGFkb3c9dHJ1ZTtkb29yRy5hZGQoZG9vcik7CnZhciBiZXY9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkJveEdlb21ldHJ5KFctLjIyLEgtLjIyLC4wMiksbmV3IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsKHttYXA6YnJ1c2hlZCxjb2xvcjoweGVlZGNiNCxtZXRhbG5lc3M6Ljkscm91Z2huZXNzOi4yMn0pKTtiZXYucG9zaXRpb24uej0uMDY7ZG9vckcuYWRkKGJldik7ClstLjQyLC40Ml0uZm9yRWFjaChmdW5jdGlvbih5KXt2YXIgaD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMDQsLjA0LC4yLDE2KSxHT0xEX0RLKTtoLnBvc2l0aW9uLnNldCgtVy8yKy4wMSx5LC4wMik7aGluZ2UuYWRkKGgpfSk7CnZhciBkaWFsPW5ldyBUSFJFRS5Hcm91cCgpO2RpYWwucG9zaXRpb24uc2V0KC4xMiwuMTIsLjA4KTtkb29yRy5hZGQoZGlhbCk7CnZhciBkaWFsVGV4PWNhbnZhc1RleCgyNTYsMjU2LGZ1bmN0aW9uKHgsdyxoKXt4LmZpbGxTdHlsZT0iIzFkMTcxMiI7eC5iZWdpblBhdGgoKTt4LmFyYyh3LzIsaC8yLHcvMiwwLDcpO3guZmlsbCgpO3guc3Ryb2tlU3R5bGU9IiNlOWQzYTMiO3guZmlsbFN0eWxlPSIjZTlkM2EzIjt4LnRleHRBbGlnbj0iY2VudGVyIjt4LnRleHRCYXNlbGluZT0ibWlkZGxlIjt4LmZvbnQ9IjUwMCAxOHB4IEdlaXN0LCBBcmlhbCI7CiAgZm9yKHZhciBpPTA7aTw0MDtpKyspe3ZhciBhPWkvNDAqTWF0aC5QSSoyLU1hdGguUEkvMjt4LmxpbmVXaWR0aD1pJTU\/MS41OjM7eC5iZWdpblBhdGgoKTt4Lm1vdmVUbyh3LzIrTWF0aC5jb3MoYSkqMTEyLGgvMitNYXRoLnNpbihhKSoxMTIpO3gubGluZVRvKHcvMitNYXRoLmNvcyhhKSooaSU1PzEwMjo5NiksaC8yK01hdGguc2luKGEpKihpJTU\/MTAyOjk2KSk7eC5zdHJva2UoKTtpZihpJTU9PT0wKXguZmlsbFRleHQoaSx3LzIrTWF0aC5jb3MoYSkqODAsaC8yK01hdGguc2luKGEpKjgwKX19KTsKdmFyIGRpYWxGYWNlPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4yNiwuMjcsLjA1LDQ4KSxbR09MRCxuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe21hcDpkaWFsVGV4LG1ldGFsbmVzczouNCxyb3VnaG5lc3M6LjM1fSksR09MRF0pO2RpYWxGYWNlLnJvdGF0aW9uLng9TWF0aC5QSS8yO2RpYWwuYWRkKGRpYWxGYWNlKTsKdmFyIGtub2JDPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4wOCwuMDksLjA4LDI0KSxHT0xEKTtrbm9iQy5yb3RhdGlvbi54PU1hdGguUEkvMjtrbm9iQy5wb3NpdGlvbi56PS4wNTtkaWFsLmFkZChrbm9iQyk7CnZhciB3aGVlbD1uZXcgVEhSRUUuR3JvdXAoKTt3aGVlbC5wb3NpdGlvbi5zZXQoLjEyLC0uMzIsLjA4KTtkb29yRy5hZGQod2hlZWwpOwp2YXIgaHViPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4wNiwuMDYsLjA2LDIwKSxHT0xEKTtodWIucm90YXRpb24ueD1NYXRoLlBJLzI7d2hlZWwuYWRkKGh1Yik7CmZvcih2YXIgc3A9MDtzcDwzO3NwKyspe3ZhciBzcGs9bmV3IFRIUkVFLkdyb3VwKCk7c3BrLnJvdGF0aW9uLno9c3AqTWF0aC5QSSoyLzM7dmFyIGJhcj1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMDE4LC4wMTgsLjI2LDEwKSxHT0xEKTtiYXIucG9zaXRpb24ueT0uMTM7dmFyIGJhbGw9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KC4wMzUsMTIsMTApLEdPTEQpO2JhbGwucG9zaXRpb24ueT0uMjc7c3BrLmFkZChiYXIsYmFsbCk7c3BrLnBvc2l0aW9uLno9LjAzO3doZWVsLmFkZChzcGspfQp2YXIgcGxhdGU9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoLjQyLC4xKSxuZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe21hcDpjYW52YXNUZXgoMjU2LDY0LGZ1bmN0aW9uKHgsdyxoKXt4LmZpbGxTdHlsZT0iIzFkMTcxMiI7eC5maWxsUmVjdCgwLDAsdyxoKTt4LmZpbGxTdHlsZT0iI2U5ZDNhMyI7eC5mb250PSI3MDAgMzBweCBHZWlzdCwgQXJpYWwsIHNhbnMtc2VyaWYiO3gudGV4dEFsaWduPSJjZW50ZXIiO3gudGV4dEJhc2VsaW5lPSJtaWRkbGUiO3guZmlsbFRleHQoIlJBSyBiZWF1dHkiLHcvMixoLzIrMil9KSxtZXRhbG5lc3M6LjUscm91Z2huZXNzOi40fSkpO3BsYXRlLnBvc2l0aW9uLnNldCgtLjMsLjQyLC4wNzUpO2Rvb3JHLmFkZChwbGF0ZSk7CgovKiAtLS0tLS0tLS0tIGxhc2VycyAtLS0tLS0tLS0tICovCnZhciBnbG93VGV4PWNhbnZhc1RleCg2NCw4LGZ1bmN0aW9uKHgsdyxoKXt2YXIgZz14LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsMCwwLGgpO2cuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDQwLDQwLDApIik7Zy5hZGRDb2xvclN0b3AoLjUsInJnYmEoMjU1LDYwLDUwLDEpIik7Zy5hZGRDb2xvclN0b3AoMSwicmdiYSgyNTUsNDAsNDAsMCkiKTt4LmZpbGxTdHlsZT1nO3guZmlsbFJlY3QoMCwwLHcsaCl9KTsKdmFyIEJFQU1TPVsgLy8gW3gxLHkxLHoxLHgyLHkyLHoyLGdyb3VwXQogIFstMy42LC4zNSwtNS4wLCAzLjYsMS41LC03LjgsMF0sWzMuNiwuMzUsLTUuMCwtMy42LDEuNSwtNy44LDBdLFstMy42LC42LC02LjYsMy42LC42LC02LjYsMF0sCiAgWy0zLjYsMS4xLC01LjQsIDMuNiwxLjEsLTUuNCwxXSxbLTMuNiwxLjksLTYuMCwzLjYsMS45LC02LjAsMV0sWy0zLjYsMi42LC03LjIsMy42LDEuNCwtNS4yLDFdLAogIFstMy42LDMuMiwtNS42LCAzLjYsLjksLTguMiwyXSxbMy42LDMuMiwtNS42LC0zLjYsLjksLTguMiwyXSxbLTMuNiwyLjQsLTguMCwzLjYsMi40LC04LjAsMl0KXTsKdmFyIGJlYW1Hcm91cHM9W1tdLFtdLFtdXTsKQkVBTVMuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgYT1uZXcgVEhSRUUuVmVjdG9yMyhiWzBdLGJbMV0sYlsyXSksYz1uZXcgVEhSRUUuVmVjdG9yMyhiWzNdLGJbNF0sYls1XSksbGVuPWEuZGlzdGFuY2VUbyhjKSxtaWQ9YS5jbG9uZSgpLmFkZChjKS5tdWx0aXBseVNjYWxhciguNSk7CiAgdmFyIGNvcmU9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoLjAwNywuMDA3LGxlbiw2LDEsdHJ1ZSksbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjoweGZmZDBjOCx0cmFuc3BhcmVudDp0cnVlfSkpOwogIHZhciBnbG93TT1uZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe2NvbG9yOjB4ZmYyYTJhLHRyYW5zcGFyZW50OnRydWUsb3BhY2l0eTouMjIsYmxlbmRpbmc6VEhSRUUuQWRkaXRpdmVCbGVuZGluZyxkZXB0aFdyaXRlOmZhbHNlfSk7CiAgdmFyIGdsb3c9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoLjAzNSwuMDM1LGxlbiw4LDEsdHJ1ZSksZ2xvd00pOwogIHZhciBnbG93Mk09bmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjoweGZmMTAxMCx0cmFuc3BhcmVudDp0cnVlLG9wYWNpdHk6LjA3LGJsZW5kaW5nOlRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsZGVwdGhXcml0ZTpmYWxzZX0pOwogIHZhciBnbG93Mj1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMTEsLjExLGxlbiw4LDEsdHJ1ZSksZ2xvdzJNKTsKICB2YXIgZz1uZXcgVEhSRUUuR3JvdXAoKTtnLmFkZChjb3JlLGdsb3csZ2xvdzIpO2cucG9zaXRpb24uY29weShtaWQpO2cucXVhdGVybmlvbi5zZXRGcm9tVW5pdFZlY3RvcnMobmV3IFRIUkVFLlZlY3RvcjMoMCwxLDApLGMuY2xvbmUoKS5zdWIoYSkubm9ybWFsaXplKCkpO3NjZW5lLmFkZChnKTsKICBbYSxjXS5mb3JFYWNoKGZ1bmN0aW9uKHApe3ZhciBlbT1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkoLjEsLjEsLjEpLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgxMTExMTEsbWV0YWxuZXNzOi43LHJvdWdobmVzczouM30pKTtlbS5wb3NpdGlvbi5jb3B5KHApO2VtLnBvc2l0aW9uLngrPXAueD4wPy4wNTotLjA1O3NjZW5lLmFkZChlbSk7CiAgICB2YXIgbGVkPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5TcGhlcmVHZW9tZXRyeSguMDIyLDgsOCksbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKHtjb2xvcjoweGZmMjAyMH0pKTtsZWQucG9zaXRpb24uY29weShwKTtzY2VuZS5hZGQobGVkKTtiLmxlZHM9KGIubGVkc3x8W10pLmNvbmNhdChsZWQpfSk7CiAgYmVhbUdyb3Vwc1tiWzZdXS5wdXNoKHtnOmcsbWF0czpbY29yZS5tYXRlcmlhbCxnbG93TSxnbG93Mk1dLGJhc2U6WzEsLjIyLC4wN10sbGVkczpiLmxlZHMsazoxfSl9KTsKLyogbGFzZXIgZW1pdHRlciBwb3N0cyAqLwpbLTMuNjUsMy42NV0uZm9yRWFjaChmdW5jdGlvbih4KXt2YXIgcD1uZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuQm94R2VvbWV0cnkoLjEyLDMuNSwuMTIpLG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7Y29sb3I6MHgxNTE1MTUsbWV0YWxuZXNzOi42LHJvdWdobmVzczouM30pKTtwLnBvc2l0aW9uLnNldCh4LDEuNzUsLTYuNSk7c2NlbmUuYWRkKHApOwogIFstNS4wLC04LjJdLmZvckVhY2goZnVuY3Rpb24oeil7dmFyIHE9cC5jbG9uZSgpO3EucG9zaXRpb24uej16O3NjZW5lLmFkZChxKX0pfSk7CnZhciByZWRMaWdodD1uZXcgVEhSRUUuUG9pbnRMaWdodCgweGZmMjAyMCwuNyw2LDIpO3JlZExpZ2h0LnBvc2l0aW9uLnNldCgwLDEuNiwtNi40KTtzY2VuZS5hZGQocmVkTGlnaHQpOwoKLyogLS0tLS0tLS0tLSBzdGFycyAoaXZvcnkgZmFjYWRlIHN0YXIgd2l0aCBhbWJlciBtZWRhbGxpb24pIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gc3RhclNoYXBlKFIscil7dmFyIHM9bmV3IFRIUkVFLlNoYXBlKCk7Zm9yKHZhciBpPTA7aTwxMDtpKyspe3ZhciBhPU1hdGguUEkvMitpKk1hdGguUEkvNSxyYWQ9aSUyP3I6Ujt2YXIgeD1NYXRoLmNvcyhhKSpyYWQseT1NYXRoLnNpbihhKSpyYWQ7aT9zLmxpbmVUbyh4LHkpOnMubW92ZVRvKHgseSl9cy5jbG9zZVBhdGgoKTtyZXR1cm4gc30KZnVuY3Rpb24gZmFjYWRlKHgsdyxoLGluayl7eC5zdHJva2VTdHlsZT1pbms7eC5saW5lV2lkdGg9Mzt2YXIgcm93cz03LHJoPWgvcm93cztmb3IodmFyIHI9MDtyPHJvd3M7cisrKXt2YXIgeT1yKnJoO3guYmVnaW5QYXRoKCk7eC5tb3ZlVG8oMCx5K3JoLTYpO3gubGluZVRvKHcseStyaC02KTt4LnN0cm9rZSgpOwogIGZvcih2YXIgYz0wO2M8ODtjKyspe3ZhciBjdz13Lzgsd3g9YypjdytjdyouMjgsd3c9Y3cqLjQ0LHd5PXkrcmgqLjE4LHdoPXJoKi42O3guc3Ryb2tlUmVjdCh3eCx3eSx3dyx3aCk7eC5iZWdpblBhdGgoKTt4Lm1vdmVUbyh3eCt3dy8yLHd5KTt4LmxpbmVUbyh3eCt3dy8yLHd5K3doKTt4Lm1vdmVUbyh3eCx3eSt3aCouNDUpO3gubGluZVRvKHd4K3d3LHd5K3doKi40NSk7eC5zdHJva2UoKTt4LmJlZ2luUGF0aCgpO3guYXJjKHd4K3d3LzIsd3ksd3cvMixNYXRoLlBJLDApO3guc3Ryb2tlKCl9fX0KdmFyIGZhY2VCdW1wPWNhbnZhc1RleCgxMDI0LDEwMjQsZnVuY3Rpb24oeCx3LGgpe3guZmlsbFN0eWxlPSIjZmZmIjt4LmZpbGxSZWN0KDAsMCx3LGgpO2ZhY2FkZSh4LHcsaCwiIzAwMCIpfSx0cnVlKTsKdmFyIGZhY2VDb2w9Y2FudmFzVGV4KDEwMjQsMTAyNCxmdW5jdGlvbih4LHcsaCl7eC5maWxsU3R5bGU9IiNmNGViZGQiO3guZmlsbFJlY3QoMCwwLHcsaCk7ZmFjYWRlKHgsdyxoLCJyZ2JhKDE1MCwxMjAsOTAsLjE4KSIpO2Zvcih2YXIgaT0wO2k8OTAwMDtpKyspe3guZmlsbFN0eWxlPVsicmdiYSgyNTUsMjM2LDE5MCwuOSkiLCJyZ2JhKDIxNCwxNzgsMTEyLC44KSIsIiNmZmYiXVtpJTNdO3guZmlsbFJlY3QoTWF0aC5yYW5kb20oKSp3LE1hdGgucmFuZG9tKCkqaCwxLjQsMS40KX19KTsKW2ZhY2VCdW1wLGZhY2VDb2xdLmZvckVhY2goZnVuY3Rpb24odCl7dC53cmFwUz10LndyYXBUPVRIUkVFLlJlcGVhdFdyYXBwaW5nO3QucmVwZWF0LnNldCguNSwuNSk7dC5vZmZzZXQuc2V0KC41LC41KX0pOwp2YXIgSVZPUlk9bmV3IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsKHttYXA6ZmFjZUNvbCxidW1wTWFwOmZhY2VCdW1wLGJ1bXBTY2FsZTouMDEyLHJvdWdobmVzczouNDIsbWV0YWxuZXNzOi4yNX0pOwp2YXIgSVZPUllfU0lERT1uZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOjB4ZTlkY2M2LHJvdWdobmVzczouNCxtZXRhbG5lc3M6LjN9KTsKZnVuY3Rpb24gbWVkVGV4KHR4dCxkb25lKXtyZXR1cm4gY2FudmFzVGV4KDI1NiwzMjAsZnVuY3Rpb24oeCx3LGgpe3ZhciBnPXguY3JlYXRlUmFkaWFsR3JhZGllbnQodyouNDUsaCouMzUsMTAsdy8yLGgvMix3Ki43KTtnLmFkZENvbG9yU3RvcCgwLGRvbmU\/IiNmMGQ5YTYiOiIjZDlhMjRlIik7Zy5hZGRDb2xvclN0b3AoMSxkb25lPyIjOWM3YTQ1IjoiIzZlNDMxOCIpO3guZmlsbFN0eWxlPWc7eC5maWxsUmVjdCgwLDAsdyxoKTsKICBmb3IodmFyIGk9MDtpPDI1MDA7aSsrKXt4LmZpbGxTdHlsZT1bIiNmZmUyYTgiLCIjYTg2OTJhIiwiI2ZmZjZkYyJdW2klM107eC5maWxsUmVjdChNYXRoLnJhbmRvbSgpKncsTWF0aC5yYW5kb20oKSpoLDEuOCwxLjgpfQogIHguZmlsbFN0eWxlPSIjZmZmNGUwIjt4LmZvbnQ9IjcwMCAxNDBweCBHZWlzdCwgQXJpYWwsIHNhbnMtc2VyaWYiO3gudGV4dEFsaWduPSJjZW50ZXIiO3gudGV4dEJhc2VsaW5lPSJtaWRkbGUiO3guZmlsbFRleHQodHh0LHcvMixoLzIrOCl9KX0KdmFyIFNUQVJTPVsKICB7cG9zOm5ldyBUSFJFRS5WZWN0b3IzKC0xLjI1LDAsMy40KSxuYW1lOiLQotCy0L7QuSDQvtGC0L\/QtdGH0LDRgtC+0LoiLHRhc2s6ImZwIixiZWFtOiLQlNC10LvQsCJ9LAogIHtwb3M6bmV3IFRIUkVFLlZlY3RvcjMoMS42LDAsLjkpLG5hbWU6ItCh0LjQs9C90LDQuyIsdGFzazoiY29kZSIsYmVhbToi0KPQstC10LTQvtC80LvQtdC90LjRjyJ9LAogIHtwb3M6bmV3IFRIUkVFLlZlY3RvcjMoLTEuNSwwLC0xLjkpLG5hbWU6ItCi0LjRiNC40L3QsCIsdGFzazoiZGlhbCIsYmVhbToi0KfRg9C20LjQtSDQv9GA0L7RgdGM0LHRiyJ9Cl07CnZhciBzdGFyT2Jqcz1bXTsKU1RBUlMuZm9yRWFjaChmdW5jdGlvbihzdCxpKXt2YXIgZz1uZXcgVEhSRUUuR3JvdXAoKTsKICB2YXIgcGxpbnRoPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4zNCwuMzgsMS4wLDQwKSxDUkVBTSk7cGxpbnRoLnBvc2l0aW9uLnk9LjU7cGxpbnRoLmNhc3RTaGFkb3c9cGxpbnRoLnJlY2VpdmVTaGFkb3c9dHJ1ZTsKICB2YXIgY2FwPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC40LC40LC4wNSw0MCksR09MRF9ESyk7Y2FwLnBvc2l0aW9uLnk9MS4wMjsKICB2YXIgc3Rhcj1uZXcgVEhSRUUuR3JvdXAoKTtzdGFyLnBvc2l0aW9uLnk9MS42MjtzdGFyLnNjYWxlLnNldFNjYWxhciguNDIpOwogIHZhciBib2R5PW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5FeHRydWRlR2VvbWV0cnkoc3RhclNoYXBlKDEuMTUsLjUpLHtkZXB0aDouMzYsYmV2ZWxFbmFibGVkOnRydWUsYmV2ZWxUaGlja25lc3M6LjAzLGJldmVsU2l6ZTouMDMsYmV2ZWxTZWdtZW50czozfSksW0lWT1JZLElWT1JZX1NJREVdKTtib2R5LnBvc2l0aW9uLno9LS4xODtib2R5LmNhc3RTaGFkb3c9dHJ1ZTsKICB2YXIgbWVkTT1uZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe21hcDptZWRUZXgoU3RyaW5nKGkrMSkpLHJvdWdobmVzczouMjUsbWV0YWxuZXNzOi40NSxlbWlzc2l2ZToweDJhMTQwMH0pOwogIHZhciBtZWQ9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLkNpcmNsZUdlb21ldHJ5KC4yNiw0OCksbWVkTSk7bWVkLnNjYWxlLnNldCguODIsMSwxKTttZWQucG9zaXRpb24uej0uMjM7CiAgdmFyIHJpbmc9bmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlRvcnVzR2VvbWV0cnkoLjI3LC4wMjgsMTAsNjQpLEdPTEQpO3Jpbmcuc2NhbGUuc2V0KC44MiwxLDEpO3JpbmcucG9zaXRpb24uej0uMjM7CiAgc3Rhci5hZGQoYm9keSxtZWQscmluZyk7CiAgdmFyIGdsb3c9bmV3IFRIUkVFLlBvaW50TGlnaHQoMHhmZmQ5YTAsLjU1LDIuNCwyKTtnbG93LnBvc2l0aW9uLnNldCgwLDEuNywuNik7CiAgZy5hZGQocGxpbnRoLGNhcCxzdGFyLGdsb3cpO2cucG9zaXRpb24uY29weShzdC5wb3MpO2cucm90YXRpb24ueT1zdC5wb3MueDwwPy41Oi0uNTtzY2VuZS5hZGQoZyk7CiAgc3Rhck9ianMucHVzaCh7ZzpnLHN0YXI6c3RhcixtZWRNOm1lZE0sZ2xvdzpnbG93fSl9KTsKCi8qIGdsaXR0ZXIgLyBkdXN0ICovCnZhciBnTj01MDAsZ1Bvcz1uZXcgRmxvYXQzMkFycmF5KGdOKjMpLGdQaD1uZXcgRmxvYXQzMkFycmF5KGdOKSxnU3o9bmV3IEZsb2F0MzJBcnJheShnTik7CmZvcih2YXIgaT0wO2k8Z047aSsrKXt2YXIgaW5TaGFmdD1pPDIyMDtnUG9zW2kqM109aW5TaGFmdD8oTWF0aC5yYW5kb20oKS0uNSkqNDooTWF0aC5yYW5kb20oKS0uNSkqMTE7Z1Bvc1tpKjMrMV09TWF0aC5yYW5kb20oKSpISDtnUG9zW2kqMysyXT1pblNoYWZ0Py04KyhNYXRoLnJhbmRvbSgpLS41KSo1OjUtTWF0aC5yYW5kb20oKSooSEwtNCk7Z1BoW2ldPU1hdGgucmFuZG9tKCkqNi4yODtnU3pbaV09LjUrTWF0aC5yYW5kb20oKSoxLjF9CnZhciBnR2VvPW5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeSgpO2dHZW8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZShnUG9zLDMpKTtnR2VvLnNldEF0dHJpYnV0ZSgicGhhc2UiLG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoZ1BoLDEpKTtnR2VvLnNldEF0dHJpYnV0ZSgic3oiLG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUoZ1N6LDEpKTsKdmFyIGdNYXQ9bmV3IFRIUkVFLlNoYWRlck1hdGVyaWFsKHt0cmFuc3BhcmVudDp0cnVlLGRlcHRoV3JpdGU6ZmFsc2UsYmxlbmRpbmc6VEhSRUUuQWRkaXRpdmVCbGVuZGluZyx1bmlmb3Jtczp7dGltZTp7dmFsdWU6MH0scHI6e3ZhbHVlOnJlbmRlcmVyLmdldFBpeGVsUmF0aW8oKX0sYm9vc3Q6e3ZhbHVlOjB9fSwKICB2ZXJ0ZXhTaGFkZXI6ImF0dHJpYnV0ZSBmbG9hdCBwaGFzZTthdHRyaWJ1dGUgZmxvYXQgc3o7dW5pZm9ybSBmbG9hdCB0aW1lO3VuaWZvcm0gZmxvYXQgcHI7dW5pZm9ybSBmbG9hdCBib29zdDt2YXJ5aW5nIGZsb2F0IHZBO3ZvaWQgbWFpbigpe3ZlYzMgcD1wb3NpdGlvbjtwLnk9bW9kKHAueS10aW1lKi4wNSw3LjYpO3ZlYzQgbXY9bW9kZWxWaWV3TWF0cml4KnZlYzQocCwxLik7Z2xfUG9zaXRpb249cHJvamVjdGlvbk1hdHJpeCptdjtmbG9hdCB0dz1wb3coLjUrLjUqc2luKHRpbWUqKDEuMStwaGFzZSouMykrcGhhc2UqNy4pLDEwLik7dkE9LjEyK3R3Ki44K2Jvb3N0O2dsX1BvaW50U2l6ZT1taW4oc3oqcHIqKDguK3R3KjIyLitib29zdCozMC4pLy1tdi56LDkuKnByKTt9IiwKICBmcmFnbWVudFNoYWRlcjoidmFyeWluZyBmbG9hdCB2QTt2b2lkIG1haW4oKXt2ZWMyIGM9Z2xfUG9pbnRDb29yZC0uNTtmbG9hdCBkPWxlbmd0aChjKTtmbG9hdCBzPW1heCgwLiwxLi1kKjIuKSttYXgoMC4sLjYtYWJzKGMueCkqMTQuKSptYXgoMC4sMS4tYWJzKGMueSkqMi4pKi42K21heCgwLiwuNi1hYnMoYy55KSoxNC4pKm1heCgwLiwxLi1hYnMoYy54KSoyLikqLjY7Z2xfRnJhZ0NvbG9yPXZlYzQoMS4sLjksLjcyLHMqbWluKHZBLDEuKSk7fSJ9KTsKc2NlbmUuYWRkKG5ldyBUSFJFRS5Qb2ludHMoZ0dlbyxnTWF0KSk7CgovKiAtLS0tLS0tLS0tIGNhbWVyYSAtLS0tLS0tLS0tICovCnZhciBIT01FPXtwb3M6bmV3IFRIUkVFLlZlY3RvcjMoMCw0LjEsOC42KSxsb29rOm5ldyBUSFJFRS5WZWN0b3IzKDAsLjYsLTUuNSl9Owp2YXIgY2FtPXtwb3M6SE9NRS5wb3MuY2xvbmUoKSxsb29rOkhPTUUubG9vay5jbG9uZSgpfSx0dz1udWxsLHBvaW50ZXI9e3g6MCx5OjB9OwpmdW5jdGlvbiBob21lRm9yKCl7dmFyIGE9Y2FtZXJhLmFzcGVjdDtpZihhPC42MilyZXR1cm57cG9zOm5ldyBUSFJFRS5WZWN0b3IzKDAsNC42LDEwLjgpLGxvb2s6bmV3IFRIUkVFLlZlY3RvcjMoMCwuMywtNC42KX07aWYoYTwxKXJldHVybntwb3M6bmV3IFRIUkVFLlZlY3RvcjMoMCw0LjMsOS44KSxsb29rOm5ldyBUSFJFRS5WZWN0b3IzKDAsLjQ1LC01KX07cmV0dXJue3BvczpIT01FLnBvcy5jbG9uZSgpLGxvb2s6SE9NRS5sb29rLmNsb25lKCl9fQpmdW5jdGlvbiBzdGFyVmlldyhpKXt2YXIgcD1TVEFSU1tpXS5wb3Msc2lkZT1wLng8MD8xOi0xLGE9Y2FtZXJhLmFzcGVjdDt2YXIgYmFjaz1hPDE\/My4wOjIuNDtyZXR1cm4gYTwxP3twb3M6bmV3IFRIUkVFLlZlY3RvcjMocC54K3NpZGUqMS4xLDIuMSxwLnorYmFjayksbG9vazpuZXcgVEhSRUUuVmVjdG9yMyhwLngsLjc1LHAueil9Ontwb3M6bmV3IFRIUkVFLlZlY3RvcjMocC54Ky41LDEuOCxwLnorYmFjayksbG9vazpuZXcgVEhSRUUuVmVjdG9yMyhwLngrMS4xNSwxLjUscC56KX19CmZ1bmN0aW9uIHNhZmVWaWV3KCl7dmFyIGE9Y2FtZXJhLmFzcGVjdDtyZXR1cm57cG9zOm5ldyBUSFJFRS5WZWN0b3IzKDAsMi4wLHNhZmVaKyhhPDE\/NC40OjMuNCkpLGxvb2s6bmV3IFRIUkVFLlZlY3RvcjMoMCwxLjYsc2FmZVopfX0KZnVuY3Rpb24gZWFzZSh0KXtyZXR1cm4gdDwuNT80KnQqdCp0OjEtTWF0aC5wb3coLTIqdCsyLDMpLzJ9CmZ1bmN0aW9uIG1vdmVUbyh0LGR1cixjYil7aWYoZHVyPi41KXNuZC53aG9vc2goKTt0dz17dDowLGR1cjpyZWR1Y2U\/LjAxOmR1cixmcDpjYW0ucG9zLmNsb25lKCksZmw6Y2FtLmxvb2suY2xvbmUoKSx0cDp0LnBvcyx0bDp0Lmxvb2ssY2I6Y2J9fQpmdW5jdGlvbiByZXNpemUoKXt2YXIgdz13aW5kb3cuaW5uZXJXaWR0aCxoPXdpbmRvdy5pbm5lckhlaWdodDtyZW5kZXJlci5zZXRTaXplKHcsaCxmYWxzZSk7Y2FtZXJhLmFzcGVjdD13L2g7Y2FtZXJhLmZvdj13PGg\/NjQ6NTA7Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtpZighdHcmJnZpZXc9PT0iaG9tZSIpe3ZhciBobT1ob21lRm9yKCk7Y2FtLnBvcy5jb3B5KGhtLnBvcyk7Y2FtLmxvb2suY29weShobS5sb29rKX19CnZhciB2aWV3PSJob21lIjsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIscmVzaXplKTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixmdW5jdGlvbihlKXtwb2ludGVyLng9ZS5jbGllbnRYL3dpbmRvdy5pbm5lcldpZHRoLS41O3BvaW50ZXIueT1lLmNsaWVudFkvd2luZG93LmlubmVySGVpZ2h0LS41fSx7cGFzc2l2ZTp0cnVlfSk7CgovKiBhbmltYXRpb25zICovCnZhciBhbmltcz1bXTtmdW5jdGlvbiBhbmltYXRlKGR1cixmbixkb25lKXt2YXIgdD0wO2lmKHJlZHVjZSlkdXI9TWF0aC5taW4oZHVyLC4xNSk7YW5pbXMucHVzaChmdW5jdGlvbihkdCl7dCs9ZHQvZHVyO3ZhciBrPU1hdGgubWluKHQsMSk7Zm4oayk7aWYoaz49MSl7ZG9uZSYmZG9uZSgpO3JldHVybiBmYWxzZX19KX0KCi8qIGJlYW1zIHN0YXRlICovCmZ1bmN0aW9uIHNldEJlYW1zKCl7Uy5kb25lLmZvckVhY2goZnVuY3Rpb24oZCxpKXtiZWFtR3JvdXBzW2ldLmZvckVhY2goZnVuY3Rpb24oYil7Yi5rPWQ\/MDoxO2IuZy52aXNpYmxlPSFkO2IubGVkcy5mb3JFYWNoKGZ1bmN0aW9uKGwpe2wubWF0ZXJpYWwuY29sb3Iuc2V0KGQ\/MHgyYmQ0NmE6MHhmZjIwMjApfSl9KX0pO3VwZGF0ZUh1ZCgpfQpmdW5jdGlvbiBraWxsQmVhbXMoaSl7dmFyIGxpc3Q9YmVhbUdyb3Vwc1tpXTtzbmQub2ZmKCk7dmliKFsyMCw0MCwyMF0pOwogIGFuaW1hdGUoLjksZnVuY3Rpb24oayl7bGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBmPWs8LjY\/KE1hdGgucmFuZG9tKCk8LjU\/LjE1OjEpKigxLWsqLjQpOigxLShrLS42KS8uNCkqLjY7Yi5tYXRzLmZvckVhY2goZnVuY3Rpb24obSxqKXttLm9wYWNpdHk9Yi5iYXNlW2pdKmZ9KX0pfSxmdW5jdGlvbigpe2xpc3QuZm9yRWFjaChmdW5jdGlvbihiKXtiLmcudmlzaWJsZT1mYWxzZTtiLmxlZHMuZm9yRWFjaChmdW5jdGlvbihsKXtsLm1hdGVyaWFsLmNvbG9yLnNldCgweDJiZDQ2YSl9KX0pfSk7CiAgcmVkTGlnaHQuaW50ZW5zaXR5PS43KihTLmRvbmUuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiFkfSkubGVuZ3RoLzMpfQoKLyogLS0tLS0tLS0tLSBIVUQgKyBob3RzcG90cyAtLS0tLS0tLS0tICovCnZhciBob3RzPVtdOwpmdW5jdGlvbiBta0hvdChsYWJlbCxuLG9uVGFwKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtiLnR5cGU9ImJ1dHRvbiI7Yi5jbGFzc05hbWU9ImhvdCI7Yi5pbm5lckhUTUw9JzxzcGFuIGNsYXNzPSJyaW5nIj48L3NwYW4+PHNwYW4gY2xhc3M9Im4iPicrbisnPC9zcGFuPjxzcGFuIGNsYXNzPSJsYiI+JytsYWJlbCsnPC9zcGFuPic7Yi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGxhYmVsKTtiLm9uY2xpY2s9b25UYXA7JCgiI2hvdHMiKS5hcHBlbmRDaGlsZChiKTtyZXR1cm4gYn0KU1RBUlMuZm9yRWFjaChmdW5jdGlvbihzdCxpKXtob3RzLnB1c2goe2VsOm1rSG90KHN0Lm5hbWUsaSsxLGZ1bmN0aW9uKCl7b3BlblN0YXIoaSl9KSxwOnN0LnBvcy5jbG9uZSgpLnNldFkoMS42Mil9KX0pOwp2YXIgc2FmZUhvdD17ZWw6bWtIb3QoItCh0LXQudGEIiwnPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44Ij48cmVjdCB4PSI1IiB5PSIxMCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIvPjxwYXRoIGQ9Ik04IDEwVjdhNCA0IDAgMCAxIDggMHYzIi8+PC9zdmc+JyxmdW5jdGlvbigpe3RhcFNhZmUoKX0pLHA6bmV3IFRIUkVFLlZlY3RvcjMoMCwyLjU1LHNhZmVaKy41KX07aG90cy5wdXNoKHNhZmVIb3QpOwpmdW5jdGlvbiByZW1haW5pbmcoKXtyZXR1cm4gUy5kb25lLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4hZH0pLmxlbmd0aH0KZnVuY3Rpb24gdXBkYXRlSHVkKCl7dmFyIHI9cmVtYWluaW5nKCk7ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmJlYW1zIHNwYW4iKS5mb3JFYWNoKGZ1bmN0aW9uKHMsaSl7cy5jbGFzc0xpc3QudG9nZ2xlKCJvZmYiLFMuZG9uZVtpXSl9KTsKICBmb3IodmFyIGk9MDtpPDM7aSsrKXskKCIjZCIraSkudGV4dENvbnRlbnQ9Uy5kb25lW2ldP0NPREVbaV06IiI7aG90c1tpXS5lbC5jbGFzc0xpc3QudG9nZ2xlKCJkb25lIixTLmRvbmVbaV0pfQogIHNhZmVIb3QuZWwuY2xhc3NMaXN0LnRvZ2dsZSgibG9jayIscj4wKTsKICAkKCIjbXNnIikudGV4dENvbnRlbnQ9Uy5vcGVuZWQ\/ItCS0YDQtdC80Y8g0LTQu9GPINGB0LXQsdGPIOKAlCDRgtCy0L7RkSI6cj09PTA\/ItCh0YPQtdGC0LAg0L7RgtC60LvRjtGH0LXQvdCwLiDQntGC0LrRgNC+0Lkg0YHQtdC50YQiOnI9PT0zPyLQntGC0LrQu9GO0YfQuCDRgtGA0Lgg0LvRg9GH0LAg0YHRg9C10YLRiyI6ItCe0YHRgtCw0LvQvtGB0Ywg0LvRg9GH0LXQuTogIityfQp2YXIgdjM9bmV3IFRIUkVFLlZlY3RvcjMoKTsKZnVuY3Rpb24gcGxhY2VIb3RzKCl7dmFyIHc9d2luZG93LmlubmVyV2lkdGgsaD13aW5kb3cuaW5uZXJIZWlnaHQsaGlkZT12aWV3IT09ImhvbWUifHwhUy5pbnRybztob3RzLmZvckVhY2goZnVuY3Rpb24obyl7djMuY29weShvLnApLnByb2plY3QoY2FtZXJhKTt2YXIgeD0odjMueCouNSsuNSkqdyx5PSgtdjMueSouNSsuNSkqaDsKICB4PU1hdGgubWF4KDY0LE1hdGgubWluKHctNjQseCkpO3k9TWF0aC5tYXgoOTAsTWF0aC5taW4oaC0xMTAseSkpO28uZWwuc3R5bGUudHJhbnNmb3JtPSJ0cmFuc2xhdGUoIit4KyJweCwiK3krInB4KSI7by5lbC5jbGFzc0xpc3QudG9nZ2xlKCJoaWRlIixoaWRlfHx2My56PjF8fChvPT09c2FmZUhvdCYmUy5vcGVuZWQpKX0pfQoKLyogLS0tLS0tLS0tLSByZW5kZXIgbG9vcCAtLS0tLS0tLS0tICovCnZhciBjbG9jaz1uZXcgVEhSRUUuQ2xvY2soKSxsb29rVj1uZXcgVEhSRUUuVmVjdG9yMygpOwpmdW5jdGlvbiBsb29wKCl7dmFyIGR0PU1hdGgubWluKGNsb2NrLmdldERlbHRhKCksLjA1KSx0PWNsb2NrLmVsYXBzZWRUaW1lOwogIGlmKHR3KXt0dy50Kz1kdC90dy5kdXI7dmFyIGs9ZWFzZShNYXRoLm1pbih0dy50LDEpKTtjYW0ucG9zLmxlcnBWZWN0b3JzKHR3LmZwLHR3LnRwLGspO2NhbS5sb29rLmxlcnBWZWN0b3JzKHR3LmZsLHR3LnRsLGspO2lmKHR3LnQ+PTEpe3ZhciBjYj10dy5jYjt0dz1udWxsO2NiJiZjYigpfX0KICB2YXIgcGFyPXJlZHVjZXx8dmlldyE9PSJob21lIj8wOjE7CiAgY2FtZXJhLnBvc2l0aW9uLnNldChjYW0ucG9zLngrcG9pbnRlci54Ki4zNSpwYXIrTWF0aC5zaW4odCouMykqLjAzLGNhbS5wb3MueS1wb2ludGVyLnkqLjE1KnBhcitNYXRoLnNpbih0Ki41KSouMDE1LGNhbS5wb3Mueik7bG9va1YuY29weShjYW0ubG9vayk7Y2FtZXJhLmxvb2tBdChsb29rVik7CiAgc3Rhck9ianMuZm9yRWFjaChmdW5jdGlvbihzLGkpe3Muc3Rhci5yb3RhdGlvbi55PU1hdGguc2luKHQqLjYraSkqLjM1O3Muc3Rhci5wb3NpdGlvbi55PTEuNjIrTWF0aC5zaW4odCoxLjEraSkqLjAzO3MuZ2xvdy5pbnRlbnNpdHk9LjQ1K01hdGguc2luKHQqMitpKSouMTJ9KTsKICBjYW1zLmZvckVhY2goZnVuY3Rpb24oYyxpKXtjLmcucm90YXRpb24ueT1jLmJhc2UrTWF0aC5zaW4odCouMzUraSoxLjcpKi4zNTtjLmxlZC52aXNpYmxlPSh0KjEuMitpKi4zKSUxPC41NX0pOwogIGJlYW1Hcm91cHMuZm9yRWFjaChmdW5jdGlvbihncil7Z3IuZm9yRWFjaChmdW5jdGlvbihiLGope2lmKGIuZy52aXNpYmxlJiZiLmspYi5tYXRzWzFdLm9wYWNpdHk9Yi5iYXNlWzFdKiguOCsuMipNYXRoLnNpbih0KjkraioyKSl9KX0pOwogIGdNYXQudW5pZm9ybXMudGltZS52YWx1ZT10OwogIGZvcih2YXIgaT1hbmltcy5sZW5ndGgtMTtpPj0wO2ktLSlpZihhbmltc1tpXShkdCk9PT1mYWxzZSlhbmltcy5zcGxpY2UoaSwxKTsKICByZW5kZXJlci5yZW5kZXIoc2NlbmUsY2FtZXJhKTtwbGFjZUhvdHMoKTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCl9CnJlc2l6ZSgpO3NldEJlYW1zKCk7bG9vcCgpOwoKLyogLS0tLS0tLS0tLSBzaGVldCAtLS0tLS0tLS0tICovCnZhciBvbkNsb3NlPW51bGw7CmZ1bmN0aW9uIHNoZWV0KGh0bWwsb3B0cyl7b3B0cz1vcHRzfHx7fTt2YXIgcz0kKCIjc2hlZXQiKTtzLmlubmVySFRNTD0ob3B0cy5ub0Nsb3NlPycnOic8YnV0dG9uIGNsYXNzPSJjbG9zZSIgdHlwZT0iYnV0dG9uIiBhcmlhLWxhYmVsPSLQl9Cw0LrRgNGL0YLRjCI+PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS44Ij48cGF0aCBkPSJNNiA2bDEyIDEyTTE4IDZMNiAxOCIvPjwvc3ZnPjwvYnV0dG9uPicpK2h0bWw7CiAgJCgiI3ZlaWwiKS5jbGFzc0xpc3QuYWRkKCJvbiIpO29uQ2xvc2U9b3B0cy5vbkNsb3NlfHxudWxsO3ZhciBjPXMucXVlcnlTZWxlY3RvcigiLmNsb3NlIik7aWYoYyljLm9uY2xpY2s9Y2xvc2VTaGVldDtzLnNjcm9sbFRvcD0wO3JldHVybiBzfQpmdW5jdGlvbiBjbG9zZVNoZWV0KCl7JCgiI3ZlaWwiKS5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpO3N0b3BUaW1lcigpO3ZhciBjYj1vbkNsb3NlO29uQ2xvc2U9bnVsbDtjYiYmY2IoKTtnb0hvbWUoKX0KZnVuY3Rpb24gZ29Ib21lKCl7aWYodmlldz09PSJob21lIilyZXR1cm47dmlldz0ibW92aW5nIjttb3ZlVG8oaG9tZUZvcigpLDEuMSxmdW5jdGlvbigpe3ZpZXc9ImhvbWUifSl9CiQoIiN2ZWlsIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09dGhpcyYmJCgiI3NoZWV0IC5jbG9zZSIpKWNsb3NlU2hlZXQoKX0pOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixmdW5jdGlvbihlKXtpZihlLmtleT09PSJFc2NhcGUiJiYkKCIjdmVpbCIpLmNsYXNzTGlzdC5jb250YWlucygib24iKSYmJCgiI3NoZWV0IC5jbG9zZSIpKWNsb3NlU2hlZXQoKX0pOwpmdW5jdGlvbiB0b2FzdCh0LGNscyl7dmFyIGVsPSQoIiNzaGVldCAudG9hc3QiKTtpZihlbCl7ZWwudGV4dENvbnRlbnQ9dDtlbC5jbGFzc05hbWU9InRvYXN0ICIrKGNsc3x8IiIpfX0KdmFyIHRpbWVyUkFGPW51bGw7ZnVuY3Rpb24gc3RvcFRpbWVyKCl7aWYodGltZXJSQUYpY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZXJSQUYpO3RpbWVyUkFGPW51bGx9CmZ1bmN0aW9uIHJ1blRpbWVyKHNlYyxvbkVuZCl7c3RvcFRpbWVyKCk7dmFyIHQwPXBlcmZvcm1hbmNlLm5vdygpLGJhcj0kKCIjc2hlZXQgLnRpbWVyIGkiKTsoZnVuY3Rpb24gZigpe3ZhciBrPShwZXJmb3JtYW5jZS5ub3coKS10MCkvMTAwMC9zZWM7aWYoYmFyKWJhci5zdHlsZS50cmFuc2Zvcm09InNjYWxlWCgiK01hdGgubWF4KDAsMS1rKSsiKSI7aWYoaz49MSl7dGltZXJSQUY9bnVsbDtvbkVuZCYmb25FbmQoKTtyZXR1cm59dGltZXJSQUY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGYpfSkoKX0KCmZ1bmN0aW9uIG9wZW5TdGFyKGkpe2lmKHZpZXchPT0iaG9tZSIpcmV0dXJuO3NuZC50YXAoKTtpZihTLmRvbmVbaV0pe3NoZWV0KCc8c3BhbiBjbGFzcz0iY2FwIj7Ql9Cy0LXQt9C00LAgJysoaSsxKSsnIMK3INC\/0YDQvtC50LTQtdC90L48L3NwYW4+PGgyPtCb0YPRhyDCqycrU1RBUlNbaV0uYmVhbSsnwrsg0L\/QvtCz0LDRgTwvaDI+PHA+0KLQstC+0Y8g0YbQuNGE0YDQsDogPGIgc3R5bGU9ImNvbG9yOiNmZmY7Zm9udC1mYW1pbHk6dmFyKC0tZGlzcGxheSk7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToyNHB4Ij4nK0NPREVbaV0rJzwvYj4uINCe0L3QsCDRg9C20LUg0L3QsCDQv9Cw0L3QtdC70Lgg0LLQvdC40LfRgy48L3A+Jyk7cmV0dXJufQogIHZpZXc9Im1vdmluZyI7bW92ZVRvKHN0YXJWaWV3KGkpLDEuMCxmdW5jdGlvbigpe3ZpZXc9InN0YXIiO1RBU0tbU1RBUlNbaV0udGFza10oaSl9KX0KZnVuY3Rpb24gd2luKGksdGV4dCl7Uy5kb25lW2ldPXRydWU7c2F2ZSgpO3NuZC53aW4oKTt2aWIoMzApOwogIHZhciBzbz1zdGFyT2Jqc1tpXTtzby5tZWRNLm1hcD1tZWRUZXgoQ09ERVtpXSx0cnVlKTtzby5tZWRNLm5lZWRzVXBkYXRlPXRydWU7c28ubWVkTS5lbWlzc2l2ZS5zZXQoMHg1YTNhMTApOwogIHNoZWV0KCc8c3BhbiBjbGFzcz0iY2FwIj7Ql9Cy0LXQt9C00LAgJysoaSsxKSsnIMK3INCy0LfQu9C+0LzQsNC90L48L3NwYW4+PGgyPicrdGV4dCsnPC9oMj48cD7Qm9GD0YcgwqsnK1NUQVJTW2ldLmJlYW0rJ8K7INC\/0L7Qs9Cw0YEuINCm0LjRhNGA0LAg0LrQvtC00LA6IDxiIHN0eWxlPSJjb2xvcjojZmZmO2ZvbnQtZmFtaWx5OnZhcigtLWRpc3BsYXkpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6MjRweCI+JytDT0RFW2ldKyc8L2I+PC9wPjxkaXYgY2xhc3M9InJvdyI+PGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iIGlkPSJjb250Ij4nKyhyZW1haW5pbmcoKT8i0JTQsNC70YzRiNC1Ijoi0Jog0YHQtdC50YTRgyIpKyc8L2J1dHRvbj48L2Rpdj4nLHtvbkNsb3NlOmZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe2tpbGxCZWFtcyhpKTt1cGRhdGVIdWQoKX0sNTAwKX19KTsKICAkKCIjY29udCIpLm9uY2xpY2s9Y2xvc2VTaGVldH0KCnZhciBUQVNLPXt9OwovKiAxLiBmaW5nZXJwcmludDogZmlsbCB0aGUgcHJpbnQgcGllY2UgYnkgcGllY2UgKi8KZnVuY3Rpb24gZHJhd1ByaW50KHgscyx0eXBlLHNlZWQpe3ZhciByPXJuZChzZWVkKTt4LmZpbGxTdHlsZT0iI2VmZTZkNiI7eC5maWxsUmVjdCgwLDAscyxzKTt4LnNhdmUoKTt4LnN0cm9rZVN0eWxlPSIjM2EyNDE4Ijt4LmxpbmVXaWR0aD1zLzcwO3gubGluZUNhcD0icm91bmQiOwogIHZhciBjeD1zKiguNSsocigpLS41KSouMDgpLGN5PXMqKC41KyhyKCktLjUpKi4wOCk7CiAgaWYodHlwZT09PTApe2Zvcih2YXIgaz0xO2s8MTY7aysrKXt4LmJlZ2luUGF0aCgpO2Zvcih2YXIgYT0wO2E8PTY0O2ErKyl7dmFyIHQ9YS82NCpNYXRoLlBJKjIscnI9aypzLzMyKigxKy4wNipNYXRoLnNpbih0KjMrayouNytzZWVkKSsuMDMqTWF0aC5zaW4odCo3K3NlZWQpKTt2YXIgcHg9Y3grTWF0aC5jb3ModCkqcnIqLjgyLHB5PWN5K01hdGguc2luKHQpKnJyO2E\/eC5saW5lVG8ocHgscHkpOngubW92ZVRvKHB4LHB5KX14LnN0cm9rZSgpfQogICAgeC5maWxsU3R5bGU9IiMzYTI0MTgiO3guYmVnaW5QYXRoKCk7eC5hcmMoY3grcyouMixjeS1zKi4xOCxzLzM2LDAsNyk7eC5maWxsKCk7eC5saW5lV2lkdGg9cy80MDt4LnN0cm9rZVN0eWxlPSIjZWZlNmQ2Ijt4LmJlZ2luUGF0aCgpO3gubW92ZVRvKGN4LXMqLjMyLGN5K3MqLjA4KTt4LmxpbmVUbyhjeC1zKi4xLGN5K3MqLjI0KTt4LnN0cm9rZSgpfQogIGVsc2V7Zm9yKHZhciBrMj0tODtrMjwyMDtrMisrKXt4LmJlZ2luUGF0aCgpO2Zvcih2YXIgYTI9MDthMjw9NDA7YTIrKyl7dmFyIHB4Mj1hMi80MCpzLHB5Mj1rMipzLzI0K01hdGguc2luKGEyLzQwKk1hdGguUEkpKi1zKi4yKigxLU1hdGguYWJzKGsyLTYpLzE2KStNYXRoLnNpbihhMi82K3NlZWQpKnMqLjAxO2EyP3gubGluZVRvKHB4MixweTIpOngubW92ZVRvKHB4MixweTIpfXguc3Ryb2tlKCl9fQogIHgucmVzdG9yZSgpfQpUQVNLLmZwPWZ1bmN0aW9uKGkpe3ZhciBzZWVkPShNYXRoLnJhbmRvbSgpKjFlNnwwKSsxLFMyPTI0MCxzdGVwPTAsZnVsbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtmdWxsLndpZHRoPWZ1bGwuaGVpZ2h0PVMyO2RyYXdQcmludChmdWxsLmdldENvbnRleHQoIjJkIiksUzIsMCxzZWVkKTsKICB2YXIgZEE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZEEud2lkdGg9ZEEuaGVpZ2h0PVMyO2RyYXdQcmludChkQS5nZXRDb250ZXh0KCIyZCIpLFMyLDEsc2VlZCsxMSk7CiAgdmFyIGRCPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2RCLndpZHRoPWRCLmhlaWdodD1TMjtkcmF3UHJpbnQoZEIuZ2V0Q29udGV4dCgiMmQiKSxTMiwwLHNlZWQrNTAwKTsKICB2YXIgcz1zaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+0JfQstC10LfQtNCwIDEgwrcg0KLQstC+0Lkg0L7RgtC\/0LXRh9Cw0YLQvtC6PC9zcGFuPjxoMj7QlNC+0LrQsNC20LgsINGH0YLQviDQstGA0LXQvNGPINGC0LLQvtGRPC9oMj48cD7QodC60LDQvdC10YAg0L\/RgNC+0L\/Rg9GB0LrQsNC10YIg0YLQvtC70YzQutC+INGF0L7Qt9GP0LnQutGDINCy0YDQtdC80LXQvdC4LiDQodC+0LHQtdGA0Lgg0YHQstC+0Lkg0L7RgtC\/0LXRh9Cw0YLQvtC6OiDQstGL0LHQtdGA0Lgg0LrRg9GB0L7Rh9C10LosINC60L7RgtC+0YDRi9C5INC\/0L7QtNGF0L7QtNC40YIg0LIg0YHQstC10YLRj9GJ0LjQudGB0Y8g0LrQstCw0LTRgNCw0YIuPC9wPjxkaXYgY2xhc3M9InRpbWVyIj48aT48L2k+PC9kaXY+PGRpdiBjbGFzcz0iZnAyIj48ZGl2IGNsYXNzPSJ0YXJnZXQiPjxjYW52YXMgd2lkdGg9IjI0MCIgaGVpZ2h0PSIyNDAiPjwvY2FudmFzPjxzcGFuIGNsYXNzPSJzY2FuIj48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iZnByaWdodCI+PHAgY2xhc3M9ImZwc3RlcCI+0JrRg9GB0L7Rh9C10LogMSDQuNC3IDQ8L3A+PGRpdiBjbGFzcz0ib3B0cyI+PC9kaXY+PC9kaXY+PC9kaXY+PHAgY2xhc3M9InRvYXN0IiBhcmlhLWxpdmU9InBvbGl0ZSI+PC9wPicpOwogIHZhciB0Yz1zLnF1ZXJ5U2VsZWN0b3IoIi50YXJnZXQgY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKSxvcHRzPXMucXVlcnlTZWxlY3RvcigiLm9wdHMiKTsKICBmdW5jdGlvbiBxdWFkKHNyYyxxLHJvdCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Yy53aWR0aD1jLmhlaWdodD0xMjA7dmFyIHg9Yy5nZXRDb250ZXh0KCIyZCIpO2lmKHJvdCl7eC50cmFuc2xhdGUoNjAsNjApO3gucm90YXRlKHJvdCk7eC50cmFuc2xhdGUoLTYwLC02MCl9eC5kcmF3SW1hZ2Uoc3JjLChxJTIpKlMyLzIsTWF0aC5mbG9vcihxLzIpKlMyLzIsUzIvMixTMi8yLDAsMCwxMjAsMTIwKTtyZXR1cm4gY30KICBmdW5jdGlvbiBkcmF3VGFyZ2V0KCl7dGMuY2xlYXJSZWN0KDAsMCxTMixTMik7dGMuZmlsbFN0eWxlPSIjZWZlNmQ2Ijt0Yy5maWxsUmVjdCgwLDAsUzIsUzIpO3RjLmdsb2JhbEFscGhhPS4yMjt0Yy5kcmF3SW1hZ2UoZnVsbCwwLDApO3RjLmdsb2JhbEFscGhhPTE7CiAgICBmb3IodmFyIHE9MDtxPHN0ZXA7cSsrKXRjLmRyYXdJbWFnZShmdWxsLChxJTIpKlMyLzIsTWF0aC5mbG9vcihxLzIpKlMyLzIsUzIvMixTMi8yLChxJTIpKlMyLzIsTWF0aC5mbG9vcihxLzIpKlMyLzIsUzIvMixTMi8yKTsKICAgIGlmKHN0ZXA8NCl7dGMuc3Ryb2tlU3R5bGU9IiMwMzEwQUQiO3RjLmxpbmVXaWR0aD02O3RjLnN0cm9rZVJlY3QoKHN0ZXAlMikqUzIvMiszLE1hdGguZmxvb3Ioc3RlcC8yKSpTMi8yKzMsUzIvMi02LFMyLzItNil9fQogIGZ1bmN0aW9uIHJlbmRlcigpe2RyYXdUYXJnZXQoKTtpZihzdGVwPj00KXJldHVybjtzLnF1ZXJ5U2VsZWN0b3IoIi5mcHN0ZXAiKS50ZXh0Q29udGVudD0i0JrRg9GB0L7Rh9C10LogIisoc3RlcCsxKSsiINC40LcgNCI7b3B0cy5pbm5lckhUTUw9IiI7CiAgICB2YXIgbGlzdD1be2M6cXVhZChmdWxsLHN0ZXApLG9rOnRydWV9LHtjOnF1YWQoZEEsc3RlcCksb2s6ZmFsc2V9LHtjOnF1YWQoZEIsc3RlcCxNYXRoLlBJLzIpLG9rOmZhbHNlfV0uc29ydChmdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpLS41fSk7CiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24obyxqKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtiLnR5cGU9ImJ1dHRvbiI7Yi5jbGFzc05hbWU9InRpbGUiO2Iuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwi0JLQsNGA0LjQsNC90YIgIisoaisxKSk7Yi5hcHBlbmRDaGlsZChvLmMpOwogICAgICBiLm9uY2xpY2s9ZnVuY3Rpb24oKXtpZihvLm9rKXtzbmQudGljaygpO3ZpYigxMCk7c3RlcCsrO2lmKHN0ZXA9PT00KXtkcmF3VGFyZ2V0KCk7c3RvcFRpbWVyKCk7dG9hc3QoItCe0YLQv9C10YfQsNGC0L7QuiDRgdC+0LHRgNCw0L0iLCJvayIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW4oaSwi0KHQutCw0L3QtdGAINGD0LfQvdCw0Lsg0YXQvtC30Y\/QudC60YMiKX0sNjAwKX1lbHNle3RvYXN0KCIiKTtyZW5kZXIoKX19CiAgICAgICAgZWxzZXtzbmQuZXJyKCk7dmliKFszMCwzMCwzMF0pO2IuY2xhc3NMaXN0LmFkZCgic2hha2UiKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yi5jbGFzc0xpc3QucmVtb3ZlKCJzaGFrZSIpfSw0MDApO3RvYXN0KCLQndC1INGC0L7RgiDQutGD0YHQvtGH0LXQui4g0KHRgNCw0LLQvdC4INC70LjQvdC40Lgg0YHQviDRgdCy0LXRgtGP0YnQuNC80YHRjyDQutCy0LDQtNGA0LDRgtC+0LwuIiwiZXJyIil9fTtvcHRzLmFwcGVuZENoaWxkKGIpfSl9CiAgcmVuZGVyKCk7CiAgZnVuY3Rpb24gZXhwaXJlKCl7dG9hc3QoItCh0LrQsNC90LXRgCDQv9C10YDQtdC30LDQv9GD0YnQtdC9LiDQodC+0LHRgNCw0L3QvdC+0LUg0YHQvtGF0YDQsNC90LXQvdC+LCDQv9GA0L7QtNC+0LvQttCw0LkuIiwiZXJyIik7cnVuVGltZXIoNDAsZXhwaXJlKX1ydW5UaW1lcig0MCxleHBpcmUpfTsKCi8qIDIuIHNpZ25hbDogd2F0Y2ggdGhlIGZsYXNoZXMsIHJlcGVhdCB0aGVtICovClRBU0suY29kZT1mdW5jdGlvbihpKXt2YXIgcm91bmQ9MCxMRU5TPVszLDQsNV0sc2VxPVtdLHBvcz0wLGJ1c3k9dHJ1ZTsKICB2YXIgcz1zaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+0JfQstC10LfQtNCwIDIgwrcg0KPQstC10LTQvtC80LvQtdC90LjRjzwvc3Bhbj48aDI+0J\/QtdGA0LXRhdCy0LDRgtC4INGB0LjQs9C90LDQuzwvaDI+PHA+0KPQstC10LTQvtC80LvQtdC90LjRjyDQvNC40LPQsNGO0YIg0Lgg0YHQsdC40LLQsNGO0YIg0YEg0LzRi9GB0LvQuC4g0KHQvNC+0YLRgNC4LCDQsiDQutCw0LrQvtC8INC\/0L7RgNGP0LTQutC1INC30LDQs9C+0YDQsNGO0YLRgdGPINC60L3QvtC\/0LrQuCwg0Lgg0L\/QvtCy0YLQvtGA0Lgg0LXQs9C+LiDQotGA0Lgg0YDQsNGD0L3QtNCwIOKAlCDQuCDQu9GD0Ycg0L\/QvtCz0LDRgdC90LXRgi48L3A+PGRpdiBjbGFzcz0icm91bmRzIj48aT48L2k+PGk+PC9pPjxpPjwvaT48L2Rpdj48cCBjbGFzcz0ic2F5IiBhcmlhLWxpdmU9InBvbGl0ZSI+0KHQvNC+0YLRgNC44oCmPC9wPjxkaXYgY2xhc3M9InNpbW9uIj48L2Rpdj48cCBjbGFzcz0idG9hc3QiIGFyaWEtbGl2ZT0icG9saXRlIj48L3A+Jyk7CiAgdmFyIGdyaWQ9cy5xdWVyeVNlbGVjdG9yKCIuc2ltb24iKSxidG5zPVtdLEZSRVE9WzUyMyw1ODcsNjU5LDY5OCw3ODQsODgwLDk4OCwxMDQ3LDExNzVdOwogIGZvcih2YXIgaz0wO2s8OTtrKyspeyhmdW5jdGlvbihrKXt2YXIgYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtiLnR5cGU9ImJ1dHRvbiI7Yi5jbGFzc05hbWU9InNiIjtiLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsItCa0L3QvtC\/0LrQsCAiKyhrKzEpKTtiLm9uY2xpY2s9ZnVuY3Rpb24oKXtwcmVzcyhrKX07Z3JpZC5hcHBlbmRDaGlsZChiKTtidG5zLnB1c2goYil9KShrKX0KICBmdW5jdGlvbiBmbGFzaChrLG1zKXtidG5zW2tdLmNsYXNzTGlzdC5hZGQoImxpdCIpO3RvbmUoRlJFUVtrXSxtcy8xMDAwLCJzaW5lIiwuMDcpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtidG5zW2tdLmNsYXNzTGlzdC5yZW1vdmUoImxpdCIpfSxtcyl9CiAgZnVuY3Rpb24gbmV3Um91bmQoKXtzZXE9W107dmFyIGxhc3Q9LTE7Zm9yKHZhciBqPTA7ajxMRU5TW3JvdW5kXTtqKyspe3ZhciBuO2Rve249TWF0aC5yYW5kb20oKSo5fDB9d2hpbGUobj09PWxhc3QpO3NlcS5wdXNoKG4pO2xhc3Q9bn1wbGF5KCl9CiAgZnVuY3Rpb24gcGxheSgpe2J1c3k9dHJ1ZTtwb3M9MDtncmlkLmNsYXNzTGlzdC5hZGQoIndhdGNoIik7cy5xdWVyeVNlbGVjdG9yKCIuc2F5IikudGV4dENvbnRlbnQ9ItCh0LzQvtGC0YDQuOKApiI7dmFyIGo9MDsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gc3RlcCgpe2lmKCEkKCIjdmVpbCIpLmNsYXNzTGlzdC5jb250YWlucygib24iKSlyZXR1cm47aWYoajxzZXEubGVuZ3RoKXtmbGFzaChzZXFbal0sNDIwKTtqKys7c2V0VGltZW91dChzdGVwLDYyMCl9ZWxzZXtidXN5PWZhbHNlO2dyaWQuY2xhc3NMaXN0LnJlbW92ZSgid2F0Y2giKTtzLnF1ZXJ5U2VsZWN0b3IoIi5zYXkiKS50ZXh0Q29udGVudD0i0KLQtdC\/0LXRgNGMINC\/0L7QstGC0L7RgNC4In19LDcwMCl9CiAgZnVuY3Rpb24gcHJlc3Moayl7aWYoYnVzeSlyZXR1cm47Zmxhc2goaywyMjApO3ZpYig4KTtpZihrIT09c2VxW3Bvc10pe2J1c3k9dHJ1ZTtzbmQuZXJyKCk7dmliKFs0MCw0MCw0MF0pO3RvYXN0KCLQodCx0LjQu9Cw0YHRjC4g0KHQvNC+0YLRgNC4INC10YnRkSDRgNCw0LcuIiwiZXJyIik7c2V0VGltZW91dChmdW5jdGlvbigpe3RvYXN0KCIiKTtwbGF5KCl9LDkwMCk7cmV0dXJufQogICAgcG9zKys7aWYocG9zPT09c2VxLmxlbmd0aCl7YnVzeT10cnVlO3MucXVlcnlTZWxlY3RvckFsbCgiLnJvdW5kcyBpIilbcm91bmRdLmNsYXNzTGlzdC5hZGQoIm9uIik7cm91bmQrKzsKICAgICAgaWYocm91bmQ9PT0zKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luKGksItCh0LjQs9C90LDQuyDQv9C10YDQtdGF0LLQsNGH0LXQvSIpfSw1MDApO3JldHVybn0KICAgICAgc25kLm9rKCk7dG9hc3QoItCg0LDRg9C90LQgIityb3VuZCsiINC40LcgMyDQv9GA0L7QudC00LXQvSIsIm9rIik7c2V0VGltZW91dChmdW5jdGlvbigpe3RvYXN0KCIiKTtuZXdSb3VuZCgpfSw5MDApfX0KICBpZihDT05GSUcucHJldmlldyl3aW5kb3cuX2JoU2VxPWZ1bmN0aW9uKCl7cmV0dXJue3NlcTpzZXEsYnVzeTpidXN5fX07CiAgbmV3Um91bmQoKX07CgovKiAzLiBkaWFsICovClRBU0suZGlhbD1mdW5jdGlvbihpKXt2YXIgdGFyZ2V0cz1bNStNYXRoLnJhbmRvbSgpKjMwfDBdLHRnO3doaWxlKHRhcmdldHMubGVuZ3RoPDMpe3RnPU1hdGgucmFuZG9tKCkqNDB8MDtpZih0YXJnZXRzLmV2ZXJ5KGZ1bmN0aW9uKHgpe3JldHVybiBNYXRoLm1pbihNYXRoLmFicyh4LXRnKSw0MC1NYXRoLmFicyh4LXRnKSk+Nn0pKXRhcmdldHMucHVzaCh0Zyl9CiAgdmFyIHN0YWdlPTAsYW5nPTAsbGFzdE49MDsKICB2YXIgdGlja3M9IiI7Zm9yKHZhciBxPTA7cTw0MDtxKyspe3ZhciBhPXEvNDAqTWF0aC5QSSoyLGJpZz1xJTU9PT0wO3RpY2tzKz0nPGxpbmUgeDE9IicrKDEwMCtNYXRoLnNpbihhKSo5MikrJyIgeTE9IicrKDEwMC1NYXRoLmNvcyhhKSo5MikrJyIgeDI9IicrKDEwMCtNYXRoLnNpbihhKSooYmlnPzgwOjg2KSkrJyIgeTI9IicrKDEwMC1NYXRoLmNvcyhhKSooYmlnPzgwOjg2KSkrJyIgc3Ryb2tlPSIjZGZlNGZmIiBzdHJva2Utd2lkdGg9IicrKGJpZz8yOjEpKyciLz4nO2lmKGJpZyl0aWNrcys9Jzx0ZXh0IHg9IicrKDEwMCtNYXRoLnNpbihhKSo2OCkrJyIgeT0iJysoMTAwLU1hdGguY29zKGEpKjY4KzUpKyciIGZpbGw9IiNkZmU0ZmYiIGZvbnQtc2l6ZT0iMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJHZWlzdCxBcmlhbCI+JytxKyc8L3RleHQ+J30KICB2YXIgcz1zaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+0JfQstC10LfQtNCwIDMgwrcg0KLQuNGI0LjQvdCwPC9zcGFuPjxoMj7Qo9GB0LvRi9GI0Ywg0YHQtdCx0Y88L2gyPjxwPtCS0YDQtdC80Y8g0LTQu9GPINGB0LXQsdGPINC90LDRh9C40L3QsNC10YLRgdGPINGBINGC0LjRiNC40L3Riy4g0JzQtdC00LvQtdC90L3QviDQutGA0YPRgtC4INC00LjRgdC6OiDQvdCwINGJ0LXQu9GH0LrQtSDRgtC10LvQtdGE0L7QvSDQstC30LTRgNC+0LPQvdC10YIsINCwINC\/0L7Qu9C+0YHQsCDRgdGC0LDQvdC10YIg0LfQtdC70ZHQvdC+0LkuINCi0L7Qs9C00LAg0L3QsNC20LzQuCDCq9CX0LDRhNC40LrRgdC40YDQvtCy0LDRgtGMwrsuPC9wPjxkaXYgY2xhc3M9ImRpYWx3cmFwIj48ZGl2IGNsYXNzPSJ0dW1ibGVycyI+PGk+PC9pPjxpPjwvaT48aT48L2k+PC9kaXY+PGRpdiBjbGFzcz0icmVhZG91dCIgYXJpYS1saXZlPSJvZmYiPjAwPC9kaXY+PGRpdiBjbGFzcz0iZGlhbCIgcm9sZT0ic2xpZGVyIiBhcmlhLWxhYmVsPSLQodC10LnRhNC+0LLRi9C5INC00LjRgdC6IiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSIzOSIgdGFiaW5kZXg9IjAiPjxzcGFuIGNsYXNzPSJtYXJrIj48L3NwYW4+PHN2ZyB2aWV3Qm94PSIwIDAgMjAwIDIwMCI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJkZyIgY3g9IjQwJSIgY3k9IjM1JSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWIyODUwIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDcwYzFjIi8+PC9yYWRpYWxHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImRyIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjOGY5YWI4Ii8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSBjeD0iMTAwIiBjeT0iMTAwIiByPSI5OSIgZmlsbD0idXJsKCNkcikiLz48ZyBpZD0icm90Ij48Y2lyY2xlIGN4PSIxMDAiIGN5PSIxMDAiIHI9Ijk1IiBmaWxsPSJ1cmwoI2RnKSIvPicrdGlja3MrJzxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMzAiIGZpbGw9InVybCgjZHIpIi8+PHJlY3QgeD0iOTYiIHk9IjcwIiB3aWR0aD0iOCIgaGVpZ2h0PSI2MCIgcng9IjQiIGZpbGw9IiMwMzEwQUQiLz48L2c+PC9zdmc+PC9kaXY+PGRpdiBjbGFzcz0ic2lnbmFsIj48aT48L2k+PC9kaXY+PGRpdiBjbGFzcz0ibnVkZ2UiPjxidXR0b24gY2xhc3M9Imljb24iIHR5cGU9ImJ1dHRvbiIgaWQ9ImRsIiBhcmlhLWxhYmVsPSLQndCw0LfQsNC0INC90LAg0L7QtNC90L4g0LTQtdC70LXQvdC40LUiPuKAuTwvYnV0dG9uPjxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIiBpZD0ibG9jayI+0JfQsNGE0LjQutGB0LjRgNC+0LLQsNGC0Yw8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJpY29uIiB0eXBlPSJidXR0b24iIGlkPSJkcjIiIGFyaWEtbGFiZWw9ItCS0L\/QtdGA0ZHQtCDQvdCwINC+0LTQvdC+INC00LXQu9C10L3QuNC1Ij7igLo8L2J1dHRvbj48L2Rpdj48L2Rpdj48cCBjbGFzcz0idG9hc3QiIGFyaWEtbGl2ZT0icG9saXRlIj48L3A+Jyk7CiAgdmFyIGRpYWxFbD1zLnF1ZXJ5U2VsZWN0b3IoIi5kaWFsIikscm90PXMucXVlcnlTZWxlY3RvcigiI3JvdCIpLHNpZz1zLnF1ZXJ5U2VsZWN0b3IoIi5zaWduYWwiKTsKICBmdW5jdGlvbiBudW0oKXtyZXR1cm4oKE1hdGgucm91bmQoLWFuZy85KSU0MCkrNDApJTQwfQogIGZ1bmN0aW9uIHVwZCgpe3JvdC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInJvdGF0ZSgiK2FuZysiIDEwMCAxMDApIik7dmFyIG49bnVtKCk7cy5xdWVyeVNlbGVjdG9yKCIucmVhZG91dCIpLnRleHRDb250ZW50PShuPDEwPyIwIjoiIikrbjtkaWFsRWwuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixuKTsKICAgIGlmKHN0YWdlPjIpcmV0dXJuO3ZhciBkPU1hdGgubWluKE1hdGguYWJzKG4tdGFyZ2V0c1tzdGFnZV0pLDQwLU1hdGguYWJzKG4tdGFyZ2V0c1tzdGFnZV0pKTtzaWcucXVlcnlTZWxlY3RvcigiaSIpLnN0eWxlLndpZHRoPU1hdGgubWF4KDAsMS1kLzcpKjEwMCsiJSI7c2lnLmNsYXNzTGlzdC50b2dnbGUoImhpdCIsZD09PTApOwogICAgaWYobiE9PWxhc3ROKXtsYXN0Tj1uO2lmKGQ9PT0wKXtzbmQuY2xpY2soKTt2aWIoMzUpfWVsc2Ugc25kLnRpY2soKX19CiAgdmFyIGRyYWc9bnVsbDsKICBkaWFsRWwuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLGZ1bmN0aW9uKGUpe3ZhciByPWRpYWxFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkcmFnPXtjeDpyLmxlZnQrci53aWR0aC8yLGN5OnIudG9wK3IuaGVpZ2h0LzIsYTpNYXRoLmF0YW4yKGUuY2xpZW50WS0oci50b3Arci5oZWlnaHQvMiksZS5jbGllbnRYLShyLmxlZnQrci53aWR0aC8yKSl9O2RpYWxFbC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7YWMoKX0pOwogIGRpYWxFbC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsZnVuY3Rpb24oZSl7aWYoIWRyYWcpcmV0dXJuO3ZhciBhPU1hdGguYXRhbjIoZS5jbGllbnRZLWRyYWcuY3ksZS5jbGllbnRYLWRyYWcuY3gpLGQ9YS1kcmFnLmE7aWYoZD5NYXRoLlBJKWQtPTIqTWF0aC5QSTtpZihkPC1NYXRoLlBJKWQrPTIqTWF0aC5QSTthbmcrPWQqMTgwL01hdGguUEkqLjY7ZHJhZy5hPWE7dXBkKCl9KTsKICBbInBvaW50ZXJ1cCIsInBvaW50ZXJjYW5jZWwiXS5mb3JFYWNoKGZ1bmN0aW9uKGV2KXtkaWFsRWwuYWRkRXZlbnRMaXN0ZW5lcihldixmdW5jdGlvbigpe2RyYWc9bnVsbDthbmc9TWF0aC5yb3VuZChhbmcvOSkqOTt1cGQoKX0pfSk7CiAgZGlhbEVsLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZ1bmN0aW9uKGUpe2lmKGUua2V5PT09IkFycm93UmlnaHQifHxlLmtleT09PSJBcnJvd1VwIil7YW5nLT05O3VwZCgpO2UucHJldmVudERlZmF1bHQoKX1pZihlLmtleT09PSJBcnJvd0xlZnQifHxlLmtleT09PSJBcnJvd0Rvd24iKXthbmcrPTk7dXBkKCk7ZS5wcmV2ZW50RGVmYXVsdCgpfWlmKGUua2V5PT09IkVudGVyIilsb2NrKCl9KTsKICBzLnF1ZXJ5U2VsZWN0b3IoIiNkbCIpLm9uY2xpY2s9ZnVuY3Rpb24oKXthbmcrPTk7dXBkKCl9O3MucXVlcnlTZWxlY3RvcigiI2RyMiIpLm9uY2xpY2s9ZnVuY3Rpb24oKXthbmctPTk7dXBkKCl9OwogIHMucXVlcnlTZWxlY3RvcigiI2xvY2siKS5vbmNsaWNrPWxvY2s7CiAgZnVuY3Rpb24gbG9jaygpe3ZhciBuPW51bSgpO2lmKG49PT10YXJnZXRzW3N0YWdlXSl7c25kLmNsdW5rKCk7dmliKFsyMCwzMCw2MF0pO3MucXVlcnlTZWxlY3RvckFsbCgiLnR1bWJsZXJzIGkiKVtzdGFnZV0uY2xhc3NMaXN0LmFkZCgib24iKTtzdGFnZSsrOwogICAgICBpZihzdGFnZT09PTMpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW4oaSwi0KLRiyDRg9GB0LvRi9GI0LDQu9CwINGC0LjRiNC40L3RgyIpfSw1MDApO3JldHVybn10b2FzdCgi0JXRgdGC0YwhINCo0YLQuNGE0YIgIitzdGFnZSsiINC40LcgMy4g0JjRidC4INGB0LvQtdC00YPRjtGJ0LjQuSDRidC10LvRh9C+0LouIiwib2siKTt1cGQoKX0KICAgIGVsc2V7c25kLmVycigpO3RvYXN0KCLQqdC10LvRh9C60LAg0L3QtSDQsdGL0LvQvi4g0JrRgNGD0YLQuCDQtNCw0LvRjNGI0LUg0Lgg0YHQu9C10LTQuCDQt9CwINC\/0L7Qu9C+0YHQvtC5LiIsImVyciIpfX0KICB1cGQoKX07CgovKiAtLS0tLS0tLS0tIHNhZmUgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiB0YXBTYWZlKCl7aWYodmlldyE9PSJob21lIilyZXR1cm47dmFyIHI9cmVtYWluaW5nKCk7aWYoUy5vcGVuZWQpe29wZW5DYXRhbG9nKCk7cmV0dXJufQogIGlmKHI+MCl7c25kLmVycigpO3ZpYihbNDAsNDAsNDBdKTtmbGFzaEJlYW1zKCk7dmFyIG09JCgiI21zZyIpO20udGV4dENvbnRlbnQ9ItCh0L3QsNGH0LDQu9CwINC+0YLQutC70Y7Rh9C4INGB0YPQtdGC0YM6INC+0YHRgtCw0LvQvtGB0Ywg0LvRg9GH0LXQuSAiK3I7cmV0dXJufQogIHZpZXc9Im1vdmluZyI7bW92ZVRvKHNhZmVWaWV3KCksMS4zLGZ1bmN0aW9uKCl7dmlldz0ic2FmZSI7a2V5cGFkKCl9KX0KZnVuY3Rpb24gZmxhc2hCZWFtcygpe2FuaW1zLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZnVuY3Rpb24oZHQpe3QrPWR0O2JlYW1Hcm91cHMuZm9yRWFjaChmdW5jdGlvbihnKXtnLmZvckVhY2goZnVuY3Rpb24oYil7aWYoYi5nLnZpc2libGUpYi5tYXRzWzFdLm9wYWNpdHk9Yi5iYXNlWzFdKigxLjYrTWF0aC5zaW4odCo0MCkpfSl9KTtyZWRMaWdodC5pbnRlbnNpdHk9LjcrLjUqTWF0aC5zaW4odCo0MCk7cmV0dXJuIHQ8LjZ9fSkoKSl9CmZ1bmN0aW9uIGtleXBhZCgpe3ZhciBlbnRyeT0iIjsKICB2YXIgcz1zaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+0KTQuNC90LDQuyDCtyDQodC10LnRhDwvc3Bhbj48aDI+0J7RgtC60YDQvtC5INGB0LLQvtGRINCy0YDQtdC80Y88L2gyPjxwPtCi0LLQvtC5INC60L7QtCDRgdC+0LHRgNCw0L0g0YHQviDQt9Cy0ZHQt9C0LiDQktCy0LXQtNC4INC10LPQviDQv9C+INC\/0L7RgNGP0LTQutGDLjwvcD48ZGl2IGNsYXNzPSJjb2RlY2FyZHMiPicrQ09ERS5tYXAoZnVuY3Rpb24oZCxqKXtyZXR1cm4gJzxkaXY+PHNwYW4+0JfQstC10LfQtNCwICcrKGorMSkrJzwvc3Bhbj48Yj4nKyhTLmRvbmVbal0\/ZDonPycpKyc8L2I+PC9kaXY+J30pLmpvaW4oJycpKyc8L2Rpdj48ZGl2IGNsYXNzPSJwYWQiPjxkaXYgY2xhc3M9ImxjZCIgYXJpYS1saXZlPSJwb2xpdGUiPl8gXyBfPC9kaXY+PGRpdiBjbGFzcz0ia2V5cyI+PC9kaXY+PC9kaXY+PHAgY2xhc3M9InRvYXN0IiBhcmlhLWxpdmU9InBvbGl0ZSI+PC9wPicpOwogIHZhciBrZXlzPXMucXVlcnlTZWxlY3RvcigiLmtleXMiKSxsY2Q9cy5xdWVyeVNlbGVjdG9yKCIubGNkIik7CiAgWyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCLijKsiLCIwIiwiT0siXS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO2IudHlwZT0iYnV0dG9uIjtiLmNsYXNzTmFtZT0ia2V5IjtiLnRleHRDb250ZW50PWs7aWYoaz09PSLijKsiKWIuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwi0KHRgtC10YDQtdGC0YwiKTsKICAgIGIub25jbGljaz1mdW5jdGlvbigpe3RvbmUoMTgwMCtNYXRoLnJhbmRvbSgpKjIwMCwuMDcsInNxdWFyZSIsLjAzKTt2aWIoOCk7aWYoaz09PSLijKsiKWVudHJ5PWVudHJ5LnNsaWNlKDAsLTEpO2Vsc2UgaWYoaz09PSJPSyIpZ28oKTtlbHNlIGlmKGVudHJ5Lmxlbmd0aDwzKWVudHJ5Kz1rO2RyYXcoKX07a2V5cy5hcHBlbmRDaGlsZChiKX0pOwogIGZ1bmN0aW9uIGRyYXcoKXtsY2QuY2xhc3NOYW1lPSJsY2QiO2xjZC50ZXh0Q29udGVudD0oZW50cnkrIl9fXyIpLnNsaWNlKDAsMykuc3BsaXQoIiIpLmpvaW4oIiAiKX0KICBmdW5jdGlvbiBnbygpe2lmKGVudHJ5PT09Q09ERS5qb2luKCIiKSl7bGNkLmNsYXNzTmFtZT0ibGNkIG9rIjtsY2QudGV4dENvbnRlbnQ9Ik8gUCBFIE4iO3NuZC5vaygpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXskKCIjdmVpbCIpLmNsYXNzTGlzdC5yZW1vdmUoIm9uIik7b3BlblNhZmUoKX0sNTAwKX0KICAgIGVsc2V7bGNkLmNsYXNzTmFtZT0ibGNkIGVyciI7bGNkLnRleHRDb250ZW50PSJFIFIgUiI7c25kLmVycigpO3ZpYihbNDAsNDAsNDBdKTtlbnRyeT0iIjtzZXRUaW1lb3V0KGRyYXcsNzAwKTt0b2FzdCgi0J3QtdCy0LXRgNC90L4uINCm0LjRhNGA0Ysg0L3QsCDQv9Cw0L3QtdC70Lgg0LLQvdC40LfRgyDRjdC60YDQsNC90LAuIiwiZXJyIil9fQogIGRyYXcoKX0KZnVuY3Rpb24gb3BlblNhZmUoKXtTLm9wZW5lZD10cnVlO3NhdmUoKTt1cGRhdGVIdWQoKTsKICBhbmltYXRlKC45LGZ1bmN0aW9uKGspe2RpYWwucm90YXRpb24uej1rKk1hdGguUEkqNH0sZnVuY3Rpb24oKXtzbmQuY2x1bmsoKTsKICAgIGFuaW1hdGUoLjYsZnVuY3Rpb24oayl7d2hlZWwucm90YXRpb24uej0tZWFzZShrKSpNYXRoLlBJKi43NX0sZnVuY3Rpb24oKXtzbmQub3BlbigpO3ZpYihbMzAsNjAsMTIwXSk7CiAgICAgIG1vdmVUbyh7cG9zOm5ldyBUSFJFRS5WZWN0b3IzKC45LDEuOSxzYWZlWisyLjYpLGxvb2s6bmV3IFRIUkVFLlZlY3RvcjMoMCwxLjYsc2FmZVopfSwyLjIpOwogICAgICBhbmltYXRlKDIuMCxmdW5jdGlvbihrKXt2YXIgZT1lYXNlKGspO2hpbmdlLnJvdGF0aW9uLnk9LWUqMS45NTtpbm5lck1hdC5lbWlzc2l2ZUludGVuc2l0eT1lKjEuNDtzYWZlR2xvdy5pbnRlbnNpdHk9ZSo2O2dNYXQudW5pZm9ybXMuYm9vc3QudmFsdWU9TWF0aC5zaW4oaypNYXRoLlBJKSouODtza3kuaW50ZW5zaXR5PTQuMitlKjJ9LGZ1bmN0aW9uKCl7YnVyc3QoKTtzZXRUaW1lb3V0KG9wZW5DYXRhbG9nLDkwMCl9KX0pfSl9CmZ1bmN0aW9uIGJ1cnN0KCl7dmFyIGM9JCgiI3NwYXJrIik7c3BhcmtsZShjLHt4Oi41LHk6LjQ1fSwxNjAwLDE2MCl9CgovKiAtLS0tLS0tLS0tIGNhdGFsb2c6IGFsbCBCbGFjayBGcmlkYXkgb2ZmZXJzIC0tLS0tLS0tLS0gKi8KdmFyIFpPTkVTPVsi0JPQu9GD0LHQvtC60L7QtSDQsdC40LrQuNC90LggKyDQvNC10LbRitGP0LPQvtC00LjRh9C90LDRjyDQt9C+0L3QsCIsItCT0LvRg9Cx0L7QutC+0LUg0LHQuNC60LjQvdC4ICsg0L\/QvtC00LzRi9GI0LrQuCArINC80LXQttGK0Y\/Qs9C+0LTQuNGH0L3QsNGPINC30L7QvdCwIiwi0JPQu9GD0LHQvtC60L7QtSDQsdC40LrQuNC90LggKyDQvNC10LbRitGP0LPQvtC00LjRh9C90LDRjyDQt9C+0L3QsCArINCz0L7Qu9C10L3QuCArINC\/0L7QtNC80YvRiNC60LgiLCLQk9C70YPQsdC+0LrQvtC1INCx0LjQutC40L3QuCArINC80LXQttGK0Y\/Qs9C+0LTQuNGH0L3QsNGPINC30L7QvdCwICsg0L\/QvtC00LzRi9GI0LrQuCArINC90L7Qs9C4INC4INGB0YLQvtC\/0YsiLCLQk9C70YPQsdC+0LrQvtC1INCx0LjQutC40L3QuCArINC80LXQttGK0Y\/Qs9C+0LTQuNGH0L3QsNGPINC30L7QvdCwICsg0L\/QvtC00LzRi9GI0LrQuCArINC90L7Qs9C4INC4INGA0YPQutC4INC\/0L7Qu9C90L7RgdGC0YzRjiIsItCS0YHRkSDRgtC10LvQviJdOwp2YXIgTEFTRVI9eyI0KzEiOls0ODAsNTk2LDk1NiwxMTk2LDE1OTYsMjY0MF0sIjcrMiI6Wzg0MCwxMDQzLDE2NzMsMjA5MywyNzkzLDQ2MjBdfTsKZnVuY3Rpb24gZXVyKG4pe3ZhciByPU1hdGgucm91bmQobioxMDApLzEwMDtyZXR1cm4ociUxP3IudG9GaXhlZCgyKS5yZXBsYWNlKCIuIiwiLCIpOlN0cmluZyhyKSkucmVwbGFjZSgvXEIoPz0oXGR7M30pKyg\/IVxkKSkvZywiICIpKyIg4oKsIn0KdmFyIFRBQlM9WwogIHt0OiLQm9Cw0LfQtdGAIixub3RlOiLQkNC70LXQutGB0LDQvdC00YDQuNGC0L7QstGL0Lkg0LvQsNC30LXRgC4g0KHQutC40LTQutCwIDEwJSDQvdCwINC60LDQttC00YvQuSDQsNCx0L7QvdC10LzQtdC90YIuIixzdWI6WyI0KzEiLCI3KzIiXSxpdGVtczpmdW5jdGlvbih2KXtyZXR1cm4gWk9ORVMubWFwKGZ1bmN0aW9uKHosail7dmFyIGI9TEFTRVJbdl1bal07cmV0dXJue246eixkOnY9PT0iNCsxIj8iNSDQv9GA0L7RhtC10LTRg9GAOiDQv9GP0YLQsNGPINCyINC\/0L7QtNCw0YDQvtC6IjoiOSDQv9GA0L7RhtC10LTRg9GAOiDQtNCy0LUg0LIg0L\/QvtC00LDRgNC+0LoiLG9sZDpiLHA6YiouOX19KX19LAogIHt0OiJaZW1pdHMiLG5vdGU6IlJGLdC70LjRhNGC0LjQvdCzLCDQstCw0LrRg9GD0LzQvdC+LdGA0L7Qu9C40LrQvtCy0YvQuSDQvNCw0YHRgdCw0LYsIExFRC3RgtC10YDQsNC\/0LjRjywg0LrQsNCy0LjRgtCw0YbQuNGPLiDQkNCx0L7QvdC10LzQtdC90YIg0L3QsCAxMCDQv9GA0L7RhtC10LTRg9GAINGB0L4g0YHQutC40LTQutC+0LkgMTUlLiIsaXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm5bWzQwLDY2NV0sWzYwLDg3NV0sWzgwLDEwNTBdXS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJue246IjEwINC\/0YDQvtGG0LXQtNGD0YAg0L\/QviAiK2FbMF0rIiDQvNC40L3Rg9GCIixkOiJaZW1pdHMgwrcg0YDQsNCx0L7RgtCwINGBINGC0LXQu9C+0LwiLG9sZDphWzFdLHA6YVsxXSouODV9fSl9fSwKICB7dDoi0J\/QvtC00L7Qu9C+0LPQuNGPIixub3RlOiLQndC+0LLQsNGPINCw0LrRhtC40Y8gQmxhY2sgRnJpZGF5LiIsaXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm5be246IjIg0LrQvtC90YHRg9C70YzRgtCw0YbQuNC4ICsgMiDQv9C+0LTQvtC70L7Qs9C40YfQtdGB0LrQuNGFINC\/0LXQtNC40LrRjtGA0LAiLGQ6ItCa0L7QvdGB0YPQu9GM0YLQsNGG0LjRjyDQv9C+0LTQvtC70L7Qs9CwIMK3IDIg0YDQsNC30LBcbtCf0L7QtNC+0LvQvtCz0LjRh9C10YHQutC40Lkg0L\/QtdC00LjQutGO0YAgwrcgMiDRgNCw0LfQsCIsb2xkOjIyMCxwOjE2MH1dfX0sCiAge3Q6ItCc0LDQvdC40LrRjtGAICsg0L\/QtdC00LjQutGO0YAiLG5vdGU6ItCU0LLQsCDQvNCw0YHRgtC10YDQsCDRgNCw0LHQvtGC0LDRjtGCINC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvjog0LIg0LTQstCwINGA0LDQt9CwINCx0YvRgdGC0YDQtdC1LiIsaXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm5be246ItCc0LDQvdC40LrRjtGAINC4INC\/0LXQtNC40LrRjtGAINCyIDQg0YDRg9C60LgiLGQ6ItCc0LDQvdC40LrRjtGALCDQv9C10LTQuNC60Y7RgCDQuCDQv9Cw0YDQsNC70LvQtdC70YzQvdCw0Y8g0YDQsNCx0L7RgtCwIixvbGQ6MTYwLHA6MTM2fV19fQpdOwpmdW5jdGlvbiBvcGVuQ2F0YWxvZyhzdCl7dmlldz0ic2FmZSI7dmFyIHRhYj1zdD9zdC50YWI6MCxzdWI9c3Q\/c3Quc3ViOiI0KzEiOwogIGZ1bmN0aW9uIHJlbmRlcigpe3ZhciBUPVRBQlNbdGFiXSxsaXN0PVQuaXRlbXMoc3ViKTsKICAgIHZhciBzPXNoZWV0KCc8c3BhbiBjbGFzcz0iY2FwIj7QodC10LnRhCDQvtGC0LrRgNGL0YI8L3NwYW4+PGgyPtCS0YDQtdC80Y8g0LTQu9GPINGB0LXQsdGPIOKAlCDRgtCy0L7RkTwvaDI+PHA+0KLRiyDQstC10YDQvdGD0LvQsCDRgdC10LHQtSDQstGA0LXQvNGPLiDQktC90YPRgtGA0Lgg0LfQsNC60YDRi9GC0YvQtSDQv9GA0LXQtNC70L7QttC10L3QuNGPIEJsYWNrIEZyaWRheSDQvdCwINGC0L4sINGH0YLQviDRgtGLINC+0YLQutC70LDQtNGL0LLQsNC70LAuPC9wPjxkaXYgY2xhc3M9InRhYnMiIHJvbGU9InRhYmxpc3QiPicrVEFCUy5tYXAoZnVuY3Rpb24obyxqKXtyZXR1cm4gJzxidXR0b24gY2xhc3M9InRhYicrKGo9PT10YWI\/IiBzZWwiOiIiKSsnIiByb2xlPSJ0YWIiIGFyaWEtc2VsZWN0ZWQ9IicrKGo9PT10YWIpKyciIHR5cGU9ImJ1dHRvbiIgZGF0YS10PSInK2orJyI+JytvLnQrJzwvYnV0dG9uPid9KS5qb2luKCIiKSsnPC9kaXY+JysKICAgICAgKFQuc3ViPyc8ZGl2IGNsYXNzPSJzZWciIHJvbGU9InJhZGlvZ3JvdXAiPicrVC5zdWIubWFwKGZ1bmN0aW9uKHYpe3JldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIHJvbGU9InJhZGlvIiBhcmlhLWNoZWNrZWQ9IicrKHY9PT1zdWIpKyciIGNsYXNzPSInKyh2PT09c3ViPyJzZWwiOiIiKSsnIiBkYXRhLXM9IicrdisnIj7QkNCx0L7QvdC10LzQtdC90YIgJyt2Kyc8L2J1dHRvbj4nfSkuam9pbigiIikrJzwvZGl2Pic6JycpKwogICAgICAnPHAgY2xhc3M9InRhYm5vdGUiPicrVC5ub3RlKyc8L3A+JysKICAgICAgbGlzdC5tYXAoZnVuY3Rpb24obyxqKXtyZXR1cm4gJzxkaXYgY2xhc3M9Im9mZmVyIj48ZGl2IGNsYXNzPSJvdGV4dCI+PGgzPicrby5uKyc8L2gzPjxwIGNsYXNzPSJvZGVzYyI+JytvLmQucmVwbGFjZSgvXG4vZywiPGJyPiIpKyc8L3A+PC9kaXY+PGRpdiBjbGFzcz0ib3ByaWNlIj48cz4nK2V1cihvLm9sZCkrJzwvcz48Yj4nK2V1cihvLnApKyc8L2I+PHNwYW4gY2xhc3M9InNhdmUiPuKIkicrZXVyKG8ub2xkLW8ucCkrJzwvc3Bhbj48L2Rpdj48YnV0dG9uIGNsYXNzPSJidG4gc20iIHR5cGU9ImJ1dHRvbiIgZGF0YS1waWNrPSInK2orJyI+0JfQsNC60YDQtdC\/0LjRgtGMPC9idXR0b24+PC9kaXY+J30pLmpvaW4oIiIpKwogICAgICAnPGRpdiBjbGFzcz0icmFmZmxlIj48c3BhbiBjbGFzcz0iYmFkZ2UiPtCg0L7Qt9GL0LPRgNGL0Yg8L3NwYW4+PGgzPtCa0L7Qs9C00LAg0YHQtdC50YQg0L7RgtC60YDQvtGO0YIgNTAg0YPRh9Cw0YHRgtC90LjRhiwg0LzRiyDRgNCw0LfRi9Cz0YDQsNC10Lwg0L\/RgNC40Lc8L2gzPjxwPtCe0YHRgtCw0LLRjCBlbWFpbCwg0YfRgtC+0LHRiyDQt9Cw0YTQuNC60YHQuNGA0L7QstCw0YLRjCDRg9GH0LDRgdGC0LjQtSDQuCDQv9C+0LvRg9GH0LjRgtGMINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0Lkg0LHQvtC90YPRgS48L3A+JysnPGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJidXR0b24iIGlkPSJqb2luUiI+0KPRh9Cw0YHRgtCy0L7QstCw0YLRjCDQsiDRgNC+0LfRi9Cz0YDRi9GI0LU8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPSJyb3ciPjxidXR0b24gY2xhc3M9ImJ0biBsaW5lIiB0eXBlPSJidXR0b24iIGlkPSJhZ2FpbiI+0J\/RgNC+0LnRgtC4INC30LDQvdC+0LLQvjwvYnV0dG9uPjwvZGl2PjxwIGNsYXNzPSJ0b2FzdCIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcD48cCBjbGFzcz0iZmluZSI+0KbQtdC90Ysg0LIg0LXQstGA0L4g0YEg0J3QlNChLjwvcD4nLHtvbkNsb3NlOmZ1bmN0aW9uKCl7dmlldz0iaG9tZSJ9fSk7CiAgICBzLnF1ZXJ5U2VsZWN0b3JBbGwoIi50YWIiKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2Iub25jbGljaz1mdW5jdGlvbigpe3RhYj0rYi5kYXRhc2V0LnQ7c25kLnRhcCgpO3JlbmRlcigpfX0pOwogICAgcy5xdWVyeVNlbGVjdG9yQWxsKCIuc2VnIGJ1dHRvbiIpLmZvckVhY2goZnVuY3Rpb24oYil7Yi5vbmNsaWNrPWZ1bmN0aW9uKCl7c3ViPWIuZGF0YXNldC5zO3NuZC50YXAoKTtyZW5kZXIoKX19KTsKICAgIHZhciBhZz1zLnF1ZXJ5U2VsZWN0b3IoIiNhZ2FpbiIpO2lmKGFnKWFnLm9uY2xpY2s9ZnVuY3Rpb24oKXt0cnl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgiYmgzIil9Y2F0Y2goZSl7fWxvY2F0aW9uLnJlbG9hZCgpfTtzLnF1ZXJ5U2VsZWN0b3IoIiNqb2luUiIpLm9uY2xpY2s9ZnVuY3Rpb24oKXtsZWFkRm9ybShudWxsLHt0YWI6dGFiLHN1YjpzdWJ9KX07cy5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1waWNrXSIpLmZvckVhY2goZnVuY3Rpb24oYil7Yi5vbmNsaWNrPWZ1bmN0aW9uKCl7dmFyIG89bGlzdFsrYi5kYXRhc2V0LnBpY2tdO2xlYWRGb3JtKG8ubisoVC5zdWI\/IiDCtyDQsNCx0L7QvdC10LzQtdC90YIgIitzdWI6IiIpKyIgwrcgIitldXIoby5wKSx7dGFiOnRhYixzdWI6c3VifSl9fSl9CiAgcmVuZGVyKCl9CgovKiAtLS0tLS0tLS0tIGxlYWQgZm9ybTogcmFmZmxlIGVudHJ5ICsgYm9udXMgKGZ1bm5lbCkgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBsZWFkRm9ybShvZmZlcixiYWNrKXt2YXIgcz1zaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+Jysob2ZmZXI\/J9CX0LDQutGA0LXQv9C40YLRjCDQv9GA0LXQtNC70L7QttC10L3QuNC1Jzon0KDQvtC30YvQs9GA0YvRiCcpKyc8L3NwYW4+PGgyPicrKG9mZmVyPyfQl9Cw0YTQuNC60YHQuNGA0YPQuSDQstGL0LjQs9GA0YvRiCc6J9Cj0YfQsNGB0YLQstGD0Lkg0LIg0YDQvtC30YvQs9GA0YvRiNC1JykrJzwvaDI+Jysob2ZmZXI\/JzxwIGNsYXNzPSJwaWNrZWQiPicrb2ZmZXIrJzwvcD4nOicnKSsnPHA+0J7RgdGC0LDQstGMINC60L7QvdGC0LDQutGC0Ys6INC80Ysg0LfQsNC60YDQtdC\/0LjQvCDQt9CwINGC0L7QsdC+0Lkg0YbQtdC90YMsINCy0L3QtdGB0ZHQvCDRgtC10LHRjyDQsiDRgNC+0LfRi9Cz0YDRi9GIINC4INC\/0YDQuNGI0LvRkdC8INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0Lkg0LHQvtC90YPRgS48L3A+JysKICAnPGZvcm0gY2xhc3M9Imxmb3JtIiBpZD0ibGZvcm0iIG5vdmFsaWRhdGU+PGxhYmVsPtCY0LzRjzxpbnB1dCBpZD0ibGYtbmFtZSIgYXV0b2NvbXBsZXRlPSJnaXZlbi1uYW1lIiByZXF1aXJlZD48L2xhYmVsPjxsYWJlbD5FbWFpbDxpbnB1dCBpZD0ibGYtZW1haWwiIHR5cGU9ImVtYWlsIiBpbnB1dG1vZGU9ImVtYWlsIiBhdXRvY29tcGxldGU9ImVtYWlsIiByZXF1aXJlZD48L2xhYmVsPjxsYWJlbD7QotC10LvQtdGE0L7QvSDQuNC70LggV2hhdHNBcHAgPHNwYW4gY2xhc3M9Im9wdCI+KNC90LXQvtCx0Y\/Qt9Cw0YLQtdC70YzQvdC+KTwvc3Bhbj48aW5wdXQgaWQ9ImxmLXBob25lIiB0eXBlPSJ0ZWwiIGlucHV0bW9kZT0idGVsIiBhdXRvY29tcGxldGU9InRlbCIgcGxhY2Vob2xkZXI9Iis0MyDigKYiPjwvbGFiZWw+JysKICAnPGxhYmVsIGNsYXNzPSJjaGsiPjxpbnB1dCBpZD0ibGYtb2siIHR5cGU9ImNoZWNrYm94Ij48c3Bhbj7QodC+0LPQu9Cw0YHQvdCwLCDRh9GC0L4gUkFLIGJlYXV0eSDRgdCy0Y\/QttC10YLRgdGPINGB0L4g0LzQvdC+0Lkg0L\/QviDRjdGC0L7QuSDQt9Cw0Y\/QstC60LUg0Lgg0L\/RgNC40YjQu9GR0YIg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YDQvtC30YvQs9GA0YvRiNC1Ljwvc3Bhbj48L2xhYmVsPjxwIGNsYXNzPSJ0b2FzdCIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcD48ZGl2IGNsYXNzPSJyb3ciPjxidXR0b24gY2xhc3M9ImJ0biBsaW5lIiB0eXBlPSJidXR0b24iIGlkPSJsZi1iYWNrIj7QndCw0LfQsNC0PC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIiB0eXBlPSJzdWJtaXQiPtCe0YLQv9GA0LDQstC40YLRjDwvYnV0dG9uPjwvZGl2PjwvZm9ybT4nLHtvbkNsb3NlOmZ1bmN0aW9uKCl7dmlldz0iaG9tZSJ9fSk7CiAgcy5xdWVyeVNlbGVjdG9yKCIjbGYtYmFjayIpLm9uY2xpY2s9ZnVuY3Rpb24oKXtvcGVuQ2F0YWxvZyhiYWNrKX07CiAgcy5xdWVyeVNlbGVjdG9yKCIjbGZvcm0iKS5vbnN1Ym1pdD1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIG49JCgiI2xmLW5hbWUiKS52YWx1ZS50cmltKCksbT0kKCIjbGYtZW1haWwiKS52YWx1ZS50cmltKCkscGg9JCgiI2xmLXBob25lIikudmFsdWUudHJpbSgpOwogICAgaWYoIW4pe3RvYXN0KCLQndCw0L\/QuNGI0LgsINC60LDQuiDQuiDRgtC10LHQtSDQvtCx0YDQsNGJ0LDRgtGM0YHRjyIsImVyciIpOyQoIiNsZi1uYW1lIikuZm9jdXMoKTtyZXR1cm59CiAgICBpZighL15bXlxzQF0rQFteXHNAXStcLlteXHNAXSskLy50ZXN0KG0pKXt0b2FzdCgi0J\/RgNC+0LLQtdGA0YwgZW1haWwiLCJlcnIiKTskKCIjbGYtZW1haWwiKS5mb2N1cygpO3JldHVybn0KICAgIGlmKCEkKCIjbGYtb2siKS5jaGVja2VkKXt0b2FzdCgi0J7RgtC80LXRgtGMINGB0L7Qs9C70LDRgdC40LUsINGH0YLQvtCx0Ysg0LzRiyDQvNC+0LPQu9C4INGB0LLRj9C30LDRgtGM0YHRjyIsImVyciIpO3JldHVybn0KICAgIHZhciBsZWFkPXtuYW1lOm4sZW1haWw6bSxwaG9uZTpwaCxvZmZlcjpvZmZlcnx8IiIscmFmZmxlOnRydWUsY29uc2VudDp0cnVlLGJvbnVzOiIiLGxhbmc6InJ1Iixzb3VyY2U6ImJlYXV0eS1zYWZlIix0czpuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9OwogICAgaWYoQ09ORklHLmZvcm0pe3ZhciBzYj1zLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvblt0eXBlPXN1Ym1pdF0nKTtzYi5kaXNhYmxlZD10cnVlO3RvYXN0KCLQntGC0L\/RgNCw0LLQu9GP0LXQvOKApiIsIiIpO3ZhciBGPUNPTkZJRy5maWVsZHMsYm9keT1uZXcgVVJMU2VhcmNoUGFyYW1zKCk7CiAgICAgIGJvZHkuYXBwZW5kKEYubmFtZSxuKTtib2R5LmFwcGVuZChGLmVtYWlsLG0pO2JvZHkuYXBwZW5kKEYucGhvbmUscGgpO2JvZHkuYXBwZW5kKEYub2ZmZXIsb2ZmZXJ8fCLQoNC+0LfRi9Cz0YDRi9GIIik7Ym9keS5hcHBlbmQoRi5zb3VyY2UsImJlYXV0eS1zYWZlIik7CiAgICAgIGZldGNoKENPTkZJRy5mb3JtLHttZXRob2Q6IlBPU1QiLG1vZGU6Im5vLWNvcnMiLGJvZHk6Ym9keX0pLnRoZW4oZnVuY3Rpb24oKXtkb25lKCl9KS5jYXRjaChmdW5jdGlvbigpe3NiLmRpc2FibGVkPWZhbHNlO3RvYXN0KCLQndC1INC\/0L7Qu9GD0YfQuNC70L7RgdGMINC+0YLQv9GA0LDQstC40YLRjC4g0J\/RgNC+0LLQtdGA0Ywg0LjQvdGC0LXRgNC90LXRgiDQuCDQvdCw0LbQvNC4INC10YnRkSDRgNCw0LcuIiwiZXJyIil9KTtyZXR1cm59CiAgICB0cnl7dmFyIEw9SlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYmgzX2xlYWRzIil8fCJbXSIpO0wucHVzaChsZWFkKTtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYmgzX2xlYWRzIixKU09OLnN0cmluZ2lmeShMKSl9Y2F0Y2goZXJyKXt9CiAgICBkb25lKCk7CiAgICBmdW5jdGlvbiBkb25lKCl7c25kLndpbigpO3ZpYigzMCk7CiAgICB2YXIgZD1zaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+0JPQvtGC0L7QstC+PC9zcGFuPjxoMj7QotGLINCyINC40LPRgNC1LCAnK24ucmVwbGFjZSgvPC9nLCIiKSsnPC9oMj48cD4nKyhvZmZlcj8n0JzRiyDQt9Cw0LrRgNC10L\/QuNC70Lgg0LfQsCDRgtC+0LHQvtC5OiA8YiBzdHlsZT0iY29sb3I6I2ZmZiI+JytvZmZlcisnPC9iPi4g0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAg0YHQstGP0LbQtdGC0YHRjywg0YfRgtC+0LHRiyDQv9C+0LTRgtCy0LXRgNC00LjRgtGMINC30LDQv9C40YHRjCDQuCDQvtC\/0LvQsNGC0YMuJzon0KLRiyDRg9GH0LDRgdGC0LLRg9C10YjRjCDQsiDRgNC+0LfRi9Cz0YDRi9GI0LUuJykrJzwvcD48ZGl2IGNsYXNzPSJib251cyI+PHNwYW4+0KLQstC+0Lkg0LTQvtC\/0L7Qu9C90LjRgtC10LvRjNC90YvQuSDQsdC+0L3Rg9GBPC9zcGFuPjxiPuKIkjEwJTwvYj48c21hbGw+0L3QsCDQvNCw0L3QuNC60Y7RgCDRgyDQvNCw0YHRgtC10YDQsCDQktC70LDQtNC40YHQu9Cw0LLRiyDQtNC+IDE1LjEyLjIwMjYsINGB0YPQvNC80LjRgNGD0LXRgtGB0Y8g0YEg0L\/RgNC10LTQu9C+0LbQtdC90LjRj9C80Lgg0YHQtdC50YTQsC4g0JTQtdGC0LDQu9C4INC\/0YDQuNC00YPRgiDQvdCwICcrbS5yZXBsYWNlKC88L2csIiIpKyc8L3NtYWxsPjwvZGl2PicrKENPTkZJRy5mb3JtPycnOic8cCBjbGFzcz0iZmluZSI+0KLQtdGB0YLQvtCy0LDRjyDQstC10YDRgdC40Y86INC00LDQvdC90YvQtSDQvdC40LrRg9C00LAg0L3QtSDQvtGC0L\/RgNCw0LLQu9C10L3Riy48L3A+JykrJzxkaXYgY2xhc3M9InJvdyI+PGJ1dHRvbiBjbGFzcz0iYnRuIGxpbmUiIHR5cGU9ImJ1dHRvbiIgaWQ9ImxmLW1vcmUiPtCaINC\/0YDQtdC00LvQvtC20LXQvdC40Y\/QvDwvYnV0dG9uPjwvZGl2Picse29uQ2xvc2U6ZnVuY3Rpb24oKXt2aWV3PSJob21lIn19KTsKICAgICQoIiNsZi1tb3JlIikub25jbGljaz1mdW5jdGlvbigpe29wZW5DYXRhbG9nKGJhY2spfX19fQovKiAtLS0tLS0tLS0tIGluZm8gLS0tLS0tLS0tLSAqLwokKCIjaW5mbyIpLm9uY2xpY2s9ZnVuY3Rpb24oKXtpZih2aWV3IT09ImhvbWUiJiZ2aWV3IT09InNhZmUiKXJldHVybjtzaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+0J\/RgNCw0LLQuNC70LA8L3NwYW4+PGgyPtCa0LDQuiDQv9GA0L7QudGC0Lg8L2gyPjxwPtCh0YPQtdGC0LAg0LfQsNC\/0LXRgNC70LAg0YLQstC+0ZEg0LLRgNC10LzRjyDQsiDRgdC10LnRhNC1INC4INC30LDQutGA0YvQu9CwINC10LPQviDRgtGA0LXQvNGPINC70YPRh9Cw0LzQuDog0LTQtdC70LAsINGD0LLQtdC00L7QvNC70LXQvdC40Y8g0Lgg0YfRg9C20LjQtSDQv9GA0L7RgdGM0LHRiy4g0KLRgNC4INC30LLQtdC30LTRiyDQsiDQt9Cw0LvQtSDigJQg0YLRgNC4INCy0LfQu9C+0LzQsDog0YLQstC+0Lkg0L7RgtC\/0LXRh9Cw0YLQvtC6LCDQv9C10YDQtdGF0LLQsNGCINGB0LjQs9C90LDQu9CwINC4INGC0LjRiNC40L3QsC4g0JrQsNC20LTRi9C5INCy0LfQu9C+0Lwg0LPQsNGB0LjRgiDQvtC00LjQvSDQu9GD0Ycg0Lgg0LTQsNGR0YIg0YbQuNGE0YDRgy4g0JrQvtCz0LTQsCDQu9GD0YfQuCDQv9C+0LPQsNGB0L3Rg9GCLCDQstCy0LXQtNC4INGC0YDQuCDRhtC40YTRgNGLINC90LAg0YHQtdC50YTQtS48L3A+PHA+0J7RiNC40LHQsNGC0YzRgdGPINC80L7QttC90L4sINC\/0L7QtNGB0LrQsNC30LrQuCDQv9C+0Y\/QstGP0YLRgdGPINGB0LDQvNC4LiDQn9GA0L7Qs9GA0LXRgdGBINGB0L7RhdGA0LDQvdGP0LXRgtGB0Y8sINC\/0L7QutCwINC+0YLQutGA0YvRgtCwINCy0LrQu9Cw0LTQutCwLjwvcD48ZGl2IGNsYXNzPSJyb3ciPjxidXR0b24gY2xhc3M9ImJ0biBsaW5lIiB0eXBlPSJidXR0b24iIGlkPSJyZXNldCI+0J3QsNGH0LDRgtGMINC30LDQvdC+0LLQvjwvYnV0dG9uPjwvZGl2PicpOwogICQoIiNyZXNldCIpLm9uY2xpY2s9ZnVuY3Rpb24oKXt0cnl7c2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgiYmgzIil9Y2F0Y2goZSl7fWxvY2F0aW9uLnJlbG9hZCgpfX07CgovKiAtLS0tLS0tLS0tIGludHJvOiBjdXJ0YWluIOKGkiBtYWdpYyDihpIgb3BlbiAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIHNwYXJrbGUoYyxvLGR1cixuKXt2YXIgeD1jLmdldENvbnRleHQoIjJkIiksdz1jLndpZHRoPWlubmVyV2lkdGgqKGRldmljZVBpeGVsUmF0aW8+MT8yOjEpLGg9Yy5oZWlnaHQ9aW5uZXJIZWlnaHQqKGRldmljZVBpeGVsUmF0aW8+MT8yOjEpLFA9W107CiAgZm9yKHZhciBpPTA7aTxuO2krKyl7dmFyIGE9TWF0aC5yYW5kb20oKSpNYXRoLlBJKjIsc3A9KC4yK01hdGgucmFuZG9tKCkpKk1hdGgubWluKHcsaCkqLjAwMDk7UC5wdXNoKHt4Om8ueCp3LHk6by55Kmgsdng6TWF0aC5jb3MoYSkqc3Asdnk6TWF0aC5zaW4oYSkqc3AtLjAwMDQqaCxzOjErTWF0aC5yYW5kb20oKSozLHBoOk1hdGgucmFuZG9tKCkqNn0pfQogIHZhciB0MD1wZXJmb3JtYW5jZS5ub3coKTsoZnVuY3Rpb24gZihub3cpe3ZhciB0PW5vdy10MDt4LmNsZWFyUmVjdCgwLDAsdyxoKTtpZih0PmR1cil7cmV0dXJufQogICAgUC5mb3JFYWNoKGZ1bmN0aW9uKHApe3AueCs9cC52eCoxNjtwLnkrPXAudnkqMTY7cC52eSs9LjAwMDAyKmg7dmFyIGFsPSgxLXQvZHVyKSooLjUrLjUqTWF0aC5zaW4odCouMDIrcC5waCkpO3guZmlsbFN0eWxlPSJyZ2JhKDI1NSwyMjYsMTcwLCIrYWwrIikiO3guYmVnaW5QYXRoKCk7eC5hcmMocC54LHAueSxwLnMqKGRldmljZVBpeGVsUmF0aW8+MT8yOjEpLDAsNyk7eC5maWxsKCk7CiAgICAgIGlmKHAucz4zKXt4LnN0cm9rZVN0eWxlPSJyZ2JhKDI1NSwyNDAsMjEwLCIrYWwqLjgrIikiO3gubGluZVdpZHRoPTE7eC5iZWdpblBhdGgoKTt4Lm1vdmVUbyhwLngtOCxwLnkpO3gubGluZVRvKHAueCs4LHAueSk7eC5tb3ZlVG8ocC54LHAueS04KTt4LmxpbmVUbyhwLngscC55KzgpO3guc3Ryb2tlKCl9fSk7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGYpfSkodDApfQpmdW5jdGlvbiBlbnRlcigpe3ZhciBmaXJzdD0hUy5pbnRybztTLmludHJvPXRydWU7c2F2ZSgpO3VwZGF0ZUh1ZCgpO2lmKGZpcnN0KXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzaGVldCgnPHNwYW4gY2xhc3M9ImNhcCI+0JzQuNGB0YHQuNGPPC9zcGFuPjxoMj7QktC10YDQvdC4INGB0LXQsdC1INCy0YDQtdC80Y88L2gyPjxwPtCh0YPQtdGC0LAg0LfQsNC\/0LXRgNC70LAg0YLQstC+0ZEg0LLRgNC10LzRjyDQsiBiZWF1dHkt0YHQtdC50YTQtSDQuCDQt9Cw0LrRgNGL0LvQsCDQtdCz0L4g0YLRgNC10LzRjyDQu9GD0YfQsNC80Lg6INC00LXQu9CwLCDRg9Cy0LXQtNC+0LzQu9C10L3QuNGPINC4INGH0YPQttC40LUg0L\/RgNC+0YHRjNCx0YsuPC9wPjxwPtCS0LfQu9C+0LzQsNC5INGC0YDQuCDQt9Cy0LXQt9C00YssINC\/0L7Qs9Cw0YHQuCDQu9GD0YfQuCDQuCDQt9Cw0LHQtdGA0Lgg0YLQviwg0YfRgtC+INGC0LLQvtGRLjwvcD48ZGl2IGNsYXNzPSJyb3ciPjxidXR0b24gY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIiBpZD0iZ28iPtCf0YDQuNC90Y\/RgtGMINC80LjRgdGB0LjRjjwvYnV0dG9uPjwvZGl2PicpOyQoIiNnbyIpLm9uY2xpY2s9Y2xvc2VTaGVldH0sNDAwKX0KaWYoUy5pbnRybyl7JCgiI2N1cnRhaW4iKS5yZW1vdmUoKTtlbnRlcigpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixmdW5jdGlvbiBmKCl7bXVzaWMoKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsZil9KX0KZWxzZXskKCIjc3RhcnQiKS5vbmNsaWNrPWZ1bmN0aW9uKCl7YWMoKTtzbmQubWFnaWMoKTttdXNpYygpO3ZhciBjdXI9JCgiI2N1cnRhaW4iKTtjdXIuY2xhc3NMaXN0LmFkZCgibWFnaWMiKTsKICBpZighcmVkdWNlKXNwYXJrbGUoJCgiI3NwYXJrIikse3g6LjUseTouNTV9LDEzMDAsMjIwKTsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y3VyLmNsYXNzTGlzdC5hZGQoIm9wZW4iKTtub2lzZSgxLjEsLjA1LDUwMCk7c2V0VGltZW91dChmdW5jdGlvbigpe2N1ci5yZW1vdmUoKTtlbnRlcigpfSwxMTUwKX0scmVkdWNlPzA6OTAwKX19CmlmKFMub3BlbmVkKXtoaW5nZS5yb3RhdGlvbi55PS0xLjk1O2lubmVyTWF0LmVtaXNzaXZlSW50ZW5zaXR5PTEuNDtzYWZlR2xvdy5pbnRlbnNpdHk9Nn0KaWYoQ09ORklHLnByZXZpZXcpd2luZG93Ll9iaD17Y2FtZXJhOmNhbWVyYSxTOlMsb3BlblN0YXI6b3BlblN0YXIsdGFwU2FmZTp0YXBTYWZlLENPREU6Q09ERX07Cn0pKCk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K\";var bin=atob(b64);var u=new Uint8Array(bin.length);for(var i=0;i<bin.length;i++){u[i]=bin.charCodeAt(i);}var html=new TextDecoder(\"utf-8\").decode(u);var url=URL.createObjectURL(new Blob([html],{type:\"text\/html\"}));var f=document.createElement(\"iframe\");f.src=url;f.title=\"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u0431\u044c\u044e\u0442\u0438-\u0441\u0435\u0439\u0444\u0430\";f.setAttribute(\"allow\",\"autoplay; fullscreen\");f.setAttribute(\"allowfullscreen\",\"\");f.style.cssText=\"position:fixed;top:0;left:0;width:100%;height:100%;border:0;z-index:2147483000;background:#05080f\";document.body.appendChild(f);document.documentElement.style.overflow=\"hidden\";})();<\/script>\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_joinchat":[],"footnotes":""},"class_list":["post-2769","page","type-page","status-publish","hentry"],"blocksy_meta":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/rakbeauty.com\/ru\/beauty-safe\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"ru_RU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"RAK beauty project |\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430 | RAK beauty project\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/rakbeauty.com\/ru\/beauty-safe\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/rakbeauty.com\/wp-content\/uploads\/2026\/03\/foto-sajt-rak.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/rakbeauty.com\/wp-content\/uploads\/2026\/03\/foto-sajt-rak.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"847\" \/>\n\t\t<meta property=\"og:image:height\" content=\"641\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-11-04T22:02:09+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-11-04T22:07:38+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/rakbeautyproject\/\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430 | RAK beauty project\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/rakbeauty.com\/wp-content\/uploads\/2026\/03\/foto-sajt-rak.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/#listItem\",\"name\":\"\\u041e\\u0433\\u0440\\u0430\\u0431\\u043b\\u0435\\u043d\\u0438\\u0435 beauty-\\u0441\\u0435\\u0439\\u0444\\u0430\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/#listItem\",\"position\":2,\"name\":\"\\u041e\\u0433\\u0440\\u0430\\u0431\\u043b\\u0435\\u043d\\u0438\\u0435 beauty-\\u0441\\u0435\\u0439\\u0444\\u0430\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/#organization\",\"name\":\"RAK beauty project\",\"description\":\"Professionelles Beauty Studio in Wien. Wir bieten Laser-Haarentfernung, Kosmetologie, Podologie sowie Manik\\u00fcre und Pedik\\u00fcre mit modernen Technologien und individueller Betreuung.\",\"url\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/\",\"telephone\":\"+4367763949710\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/rakbeauty.com\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/rak-beauty-project-logo.png\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/#organizationLogo\",\"width\":512,\"height\":512,\"caption\":\"RAK Beauty Project logo\"},\"image\":{\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/rakbeautyproject\\\/\",\"https:\\\/\\\/www.instagram.com\\\/rak_beauty_vienna\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/#webpage\",\"url\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/\",\"name\":\"\\u041e\\u0433\\u0440\\u0430\\u0431\\u043b\\u0435\\u043d\\u0438\\u0435 beauty-\\u0441\\u0435\\u0439\\u0444\\u0430 | RAK beauty project\",\"inLanguage\":\"ru-RU\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/beauty-safe\\\/#breadcrumblist\"},\"datePublished\":\"2026-11-04T22:02:09+00:00\",\"dateModified\":\"2026-11-04T22:07:38+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/#website\",\"url\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/\",\"name\":\"RAK beauty project\",\"inLanguage\":\"ru-RU\",\"publisher\":{\"@id\":\"https:\\\/\\\/rakbeauty.com\\\/ru\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430 | RAK beauty project","description":"","canonical_url":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/rakbeauty.com\/ru\/#listItem","position":1,"name":"Home","item":"https:\/\/rakbeauty.com\/ru\/","nextItem":{"@type":"ListItem","@id":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/#listItem","name":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430"}},{"@type":"ListItem","@id":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/#listItem","position":2,"name":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430","previousItem":{"@type":"ListItem","@id":"https:\/\/rakbeauty.com\/ru\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/rakbeauty.com\/ru\/#organization","name":"RAK beauty project","description":"Professionelles Beauty Studio in Wien. Wir bieten Laser-Haarentfernung, Kosmetologie, Podologie sowie Manik\u00fcre und Pedik\u00fcre mit modernen Technologien und individueller Betreuung.","url":"https:\/\/rakbeauty.com\/ru\/","telephone":"+4367763949710","logo":{"@type":"ImageObject","url":"https:\/\/rakbeauty.com\/wp-content\/uploads\/2026\/07\/rak-beauty-project-logo.png","@id":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/#organizationLogo","width":512,"height":512,"caption":"RAK Beauty Project logo"},"image":{"@id":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/rakbeautyproject\/","https:\/\/www.instagram.com\/rak_beauty_vienna"]},{"@type":"WebPage","@id":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/#webpage","url":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/","name":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430 | RAK beauty project","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/rakbeauty.com\/ru\/#website"},"breadcrumb":{"@id":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/#breadcrumblist"},"datePublished":"2026-11-04T22:02:09+00:00","dateModified":"2026-11-04T22:07:38+00:00"},{"@type":"WebSite","@id":"https:\/\/rakbeauty.com\/ru\/#website","url":"https:\/\/rakbeauty.com\/ru\/","name":"RAK beauty project","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/rakbeauty.com\/ru\/#organization"}}]},"og:locale":"ru_RU","og:site_name":"RAK beauty project |","og:type":"article","og:title":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430 | RAK beauty project","og:url":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/","og:image":"https:\/\/rakbeauty.com\/wp-content\/uploads\/2026\/03\/foto-sajt-rak.png","og:image:secure_url":"https:\/\/rakbeauty.com\/wp-content\/uploads\/2026\/03\/foto-sajt-rak.png","og:image:width":847,"og:image:height":641,"article:published_time":"2026-11-04T22:02:09+00:00","article:modified_time":"2026-11-04T22:07:38+00:00","article:publisher":"https:\/\/www.facebook.com\/rakbeautyproject\/","twitter:card":"summary_large_image","twitter:title":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430 | RAK beauty project","twitter:image":"https:\/\/rakbeauty.com\/wp-content\/uploads\/2026\/03\/foto-sajt-rak.png"},"aioseo_meta_data":{"post_id":"2769","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-10-27 18:51:46","updated":"2026-11-04 23:08:17","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/rakbeauty.com\/ru\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/rakbeauty.com\/ru\/"},{"label":"\u041e\u0433\u0440\u0430\u0431\u043b\u0435\u043d\u0438\u0435 beauty-\u0441\u0435\u0439\u0444\u0430","link":"https:\/\/rakbeauty.com\/ru\/beauty-safe\/"}],"_links":{"self":[{"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/pages\/2769","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/comments?post=2769"}],"version-history":[{"count":12,"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/pages\/2769\/revisions"}],"predecessor-version":[{"id":2811,"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/pages\/2769\/revisions\/2811"}],"wp:attachment":[{"href":"https:\/\/rakbeauty.com\/ru\/wp-json\/wp\/v2\/media?parent=2769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}