SB3D Engine Payload (do not delete)
Internal engine payload for the Sauna Builder 3D preview. Do not edit or delete — the 3D Lab page reads it. Contact: built by Claude for Aydan, Sept 2026.
IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzYjNkIik7aWYoZSl7dmFyIHQsYSxuLG8saSxyPTEvMTIscz0iIzdBNEEyNiIsbD1lLnF1ZXJ5U2VsZWN0b3IoIi5zM2Qtc3RhZ2UiKSxkPWUucXVlcnlTZWxlY3RvcigiI3MzZENoZWNrIiksaD1lLnF1ZXJ5U2VsZWN0b3IoIiNzM2RIaW50IikscD1lLnF1ZXJ5U2VsZWN0b3IoIiNzM2RDaGlwcyIpLGM9ZS5xdWVyeVNlbGVjdG9yKCIjczNkRW1wdHkiKSx1PXtkb29yOnt3YWxsOjIsdDouNzh9LGhlYXRlcjp7d2FsbDoyLHQ6LjI1fSx3aW5zOltdLGJlbmNoU2lkZTozLGZlYXQ6MCx2ZW50czpbbnVsbCxudWxsLG51bGxdLHNhbHQ6bnVsbCxzYWx0V2FsbDowfSx3PSIiLG09e2NlZGFyOntiYXNlOlsxOTYsMTI4LDc4XSx2YXJ5OjMwLGRhcms6Ljh9LHRoZXJtbzp7YmFzZTpbOTksNjIsMzldLHZhcnk6MTgsZGFyazouNzh9LGJsYWNrOntiYXNlOls0MywzNSwzMF0sdmFyeToxMCxkYXJrOi43NX0sYXNwZW46e2Jhc2U6WzIyNCwyMDAsMTY0XSx2YXJ5OjE4LGRhcms6Ljg1fSxmbG9vcjp7YmFzZTpbMTY4LDExNiw3OF0sdmFyeToyMixkYXJrOi44fX0sZj17fSx2PSEwLEU9W10sZz0hMSxiPVtdLHk9bnVsbCxNPXthejouNjIscG9sOjEuMTgscjoxNCx0eTozLjJ9LFQ9W10sUj1bXSxIPW51bGwseD1udWxsLFM9e30sej1udWxsLGs9W10sRD1udWxsLFA9bnVsbCxDPW51bGwsRz1udWxsLEw9W10sST1udWxsLHE9W10sQj1bXSxXPVt7bGFiZWw6IlN1cHBseSB2ZW50Iix5Oi41fSx7bGFiZWw6IkV4aGF1c3QgdmVudCIseTouNjJ9LHtsYWJlbDoiRHJ5aW5nIHZlbnQiLHk6bnVsbH1dLEY9bnVsbCxBPWUucXVlcnlTZWxlY3RvcigiI3MzZFBhcnRzIik7cC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQuY2xvc2VzdCgiLnMzZC1jaGlwIik7aWYodCl7dmFyIGE9dC5kYXRhc2V0LmE7InJlc2V0Ij09PWE/dz0iIjoibWVhcyI9PT1hP2c9IWc6ImZsaXAiPT09YT91LmJlbmNoU2lkZT0zPT09dS5iZW5jaFNpZGU/MTozOiJzYWx0dyI9PT1hP3Uuc2FsdFdhbGw9K3QuZGF0YXNldC53OiJmZWF0Ij09PWEmJih1LmZlYXQ9K3QuZGF0YXNldC53KSx2ZSghMCl9fSk7dmFyIGo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNiTmF2Iik7aWYoaiYmIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWM9InMzZCJdJykpe3ZhciBPPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtPLmNsYXNzTmFtZT0ic2ItY2hpcCIsTy5zZXRBdHRyaWJ1dGUoImRhdGEtYyIsInMzZCIpLE8uaHJlZj0iI3Nicy0zZCIsTy50ZXh0Q29udGVudD0iMTYuIFNlZSBpdCBpbiAzRCIsai5hcHBlbmRDaGlsZChPKX0hZnVuY3Rpb24oZSl7aWYod2luZG93LlRIUkVFKXJldHVybiBlKCk7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7dC5zcmM9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3RocmVlLmpzL3IxMjgvdGhyZWUubWluLmpzIix0Lm9ubG9hZD1lLHQub25lcnJvcj1mdW5jdGlvbigpe2wuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJzM2QtZmFpbCI+VGhlIDNEIHZpZXdlciBjb3VsZCBub3QgbG9hZC4gQ2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCByZWZyZXNoIHRoZSBwYWdlLjwvZGl2Pid9LGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodCl9KGZ1bmN0aW9uKCl7ZWUoKSx2ZSghMCksd2luZG93LlNCJiZ3aW5kb3cuU0Iub25QYWludCYmd2luZG93LlNCLm9uUGFpbnQucHVzaChmdW5jdGlvbigpe3ZlKCl9KX0pfWZ1bmN0aW9uIFkoZSl7dmFyIHQ9LyhcZCspXHMqW3hcdTAwZDddXHMqKFxkKykvLmV4ZWMoZXx8IiIpO3JldHVybiB0P3t3Oit0WzFdLGg6K3RbMl19Om51bGx9ZnVuY3Rpb24gXyhlLHQpe3JldHVybiAwPT09dHx8Mj09PXQ/ZS53OmUuZH1mdW5jdGlvbiBYKGUsdCxhLG4pe249bnx8MDt2YXIgbz1lLncvMixpPWUuZC8yLHI9KGEtLjUpKl8oZSx0KTtyZXR1cm4gMD09PXQ/e3g6LXIsejotaStuLG54OjAsbno6LTEscm90OjB9OjI9PT10P3t4OnIsejppLW4sbng6MCxuejoxLHJvdDpNYXRoLlBJfToxPT09dD97eDpvLW4sejotcixueDoxLG56OjAscm90Oi1NYXRoLlBJLzJ9Ont4Oi1vK24sejpyLG54Oi0xLG56OjAscm90Ok1hdGguUEkvMn19ZnVuY3Rpb24gTihlLHQpe3JldHVybiBNYXRoLm1pbihlWzFdLHRbMV0pLU1hdGgubWF4KGVbMF0sdFswXSl9ZnVuY3Rpb24gVihlLHQsYSxuKXt2YXIgbz1lK3QrKGE/InYiOiJoIikrKG58fDApO2lmKGZbb10pcmV0dXJuIGZbb107dmFyIGk9bVtlXSxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3Iud2lkdGg9ci5oZWlnaHQ9bnx8NTEyO2Zvcih2YXIgcz1yLmdldENvbnRleHQoIjJkIiksbD10fHw4LGQ9ci53aWR0aC9sLGg9MDtoPGw7aCsrKXt2YXIgcD00Mzc1OC41NDUzKk1hdGguc2luKDEyLjk4OTgqaCklMTtwPXA8MD8tcDpwO3ZhciBjPTEtaS52YXJ5LzI1NSoocC0uNSk7cy5maWxsU3R5bGU9InJnYigiK01hdGgucm91bmQoaS5iYXNlWzBdKmMpKyIsIitNYXRoLnJvdW5kKGkuYmFzZVsxXSpjKSsiLCIrTWF0aC5yb3VuZChpLmJhc2VbMl0qYykrIikiLGE/cy5maWxsUmVjdChoKmQsMCxkLHIuaGVpZ2h0KTpzLmZpbGxSZWN0KDAsaCpkLHIud2lkdGgsZCkscy5nbG9iYWxBbHBoYT0uMTtmb3IodmFyIHU9MDt1PDU7dSsrKXt2YXIgdz0oNDM3NTguNTQ1MypNYXRoLnNpbig3OC4yMzMqKDcqaCt1KSklMSsxKSUxO3MuZmlsbFN0eWxlPXUlMj8iI2ZmZiI6IiMwMDAiLGE/cy5maWxsUmVjdChoKmQrdypkLDAsMS4zLHIuaGVpZ2h0KTpzLmZpbGxSZWN0KDAsaCpkK3cqZCxyLndpZHRoLDEuMyl9cy5nbG9iYWxBbHBoYT0xLHMuZmlsbFN0eWxlPSJyZ2JhKDAsMCwwLCIrKDEtaS5kYXJrKSsiKSIsYT9zLmZpbGxSZWN0KGgqZCwwLDIsci5oZWlnaHQpOnMuZmlsbFJlY3QoMCxoKmQsci53aWR0aCwyKX12YXIgdj1uZXcgVEhSRUUuQ2FudmFzVGV4dHVyZShyKTtyZXR1cm4gdi5lbmNvZGluZz1USFJFRS5zUkdCRW5jb2Rpbmcsdi53cmFwUz12LndyYXBUPVRIUkVFLlJlcGVhdFdyYXBwaW5nLGZbb109dix2fWZ1bmN0aW9uIFUoZSl7dmFyIHQ9ImZlYXQiK2UucGF0K2UudG9uZTtpZihmW3RdKXJldHVybiBmW3RdO3ZhciBhPW1bImFzcGVuIj09PWUudG9uZT8iYXNwZW4iOmUudG9uZV0sbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLndpZHRoPW4uaGVpZ2h0PTUxMjt2YXIgbz1uLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gaShlKXtyZXR1cm4icmdiKCIrTWF0aC5yb3VuZChhLmJhc2VbMF0qZSkrIiwiK01hdGgucm91bmQoYS5iYXNlWzFdKmUpKyIsIitNYXRoLnJvdW5kKGEuYmFzZVsyXSplKSsiKSJ9aWYoby5maWxsU3R5bGU9InJnYigiK2EuYmFzZS5qb2luKCIsIikrIikiLG8uZmlsbFJlY3QoMCwwLDUxMiw1MTIpLCJzcSI9PT1lLnBhdClmb3IodmFyIHI9MDtyPDg7cisrKWZvcih2YXIgcz0wO3M8ODtzKyspe3ZhciBsPSg0Mzc1OC41Kk1hdGguc2luKDMxKnMrNTcqciklMSsxKSUxO28uZmlsbFN0eWxlPWkoLjgyKy4zKmwpLG8uZmlsbFJlY3QoNjQqcysyLDY0KnIrMiw2MCw2MCl9ZWxzZSBmb3IodmFyIGQ9NDQsaD1kKk1hdGguc3FydCgzKS8yLHA9MCxjPS1kO2M8NTYwO2MrPWgscCsrKWZvcih2YXIgdT0ocCUyPzY2OjApLWQ7dTw1NjA7dSs9MTMyKXt2YXIgdz0oNDM3NTguNSpNYXRoLnNpbigzLjEqdSs3LjcqYyklMSsxKSUxLHY9ImloZXgiPT09ZS5wYXQ/ZCooLjYyKy41KncpOjM5LjY7by5maWxsU3R5bGU9aSguNzgrLjM2KncpLG8uYmVnaW5QYXRoKCk7Zm9yKHZhciBFPTA7RTw2O0UrKyl7dmFyIGc9TWF0aC5QSS8zKkUrTWF0aC5QSS82LGI9dSt2Kk1hdGguY29zKGcpLHk9Yyt2Kk1hdGguc2luKGcpO0U/by5saW5lVG8oYix5KTpvLm1vdmVUbyhiLHkpfW8uY2xvc2VQYXRoKCksby5maWxsKCksby5zdHJva2VTdHlsZT0icmdiYSgwLDAsMCwuMjgpIixvLmxpbmVXaWR0aD0yLjQsby5zdHJva2UoKX12YXIgTT1uZXcgVEhSRUUuQ2FudmFzVGV4dHVyZShuKTtyZXR1cm4gTS5lbmNvZGluZz1USFJFRS5zUkdCRW5jb2RpbmcsTS53cmFwUz1NLndyYXBUPVRIUkVFLlJlcGVhdFdyYXBwaW5nLGZbdF09TSxNfWZ1bmN0aW9uIEsoZSx0LGEpe2Zvcih2YXIgbj1uZXcgVEhSRUUuR3JvdXAsbz1aKHtjb2xvcjoiIzU2NTI1MCIscm91Z2huZXNzOi45NX0pLGk9TWF0aC5tYXgoNyxNYXRoLnJvdW5kKGUqdCoxNCkpLHI9MDtyPGk7cisrKXt2YXIgcz0oNDM3NTguNSpNYXRoLnNpbigxMjcuMSpyKSUxKzEpJTEsbD0oNDM3NTguNSpNYXRoLnNpbigzMTEuNypyKSUxKzEpJTEsZD0oNDM3NTguNSpNYXRoLnNpbig3NC43KnIpJTErMSklMSxoPS4wOSsuMDcqZCxwPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkRvZGVjYWhlZHJvbkdlb21ldHJ5KGgsMCkpLG8pO3AucG9zaXRpb24uc2V0KChzLS41KSooZS0yKmgpLGErLjgqaCsuMSpkLChsLS41KSoodC0yKmgpKSxwLnJvdGF0aW9uLnNldCg2KnMsNipsLDYqZCkscC5jYXN0U2hhZG93PSEwLG4uYWRkKHApfXJldHVybiBufWZ1bmN0aW9uIEooZSl7dmFyIHQ9InBpbGUiKyhlfHwwKTtpZihmW3RdKXJldHVybiBmW3RdO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Eud2lkdGg9YS5oZWlnaHQ9ZXx8MjU2O3ZhciBuPWEuZ2V0Q29udGV4dCgiMmQiKTtuLmZpbGxTdHlsZT0iIzJjMmEyOCIsbi5maWxsUmVjdCgwLDAsYS53aWR0aCxhLmhlaWdodCk7Zm9yKHZhciBvPTA7bzw5MDtvKyspe3ZhciBpPSg0Mzc1OC41Kk1hdGguc2luKDEyNy4xKm8pJTErMSklMSxyPSg0Mzc1OC41Kk1hdGguc2luKDMxMS43Km8pJTErMSklMSxzPSg0Mzc1OC41Kk1hdGguc2luKDc0LjcqbyklMSsxKSUxLGw9aSphLndpZHRoLGQ9ciphLmhlaWdodCxoPWEud2lkdGgqKC4wNTUrLjA1KnMpLHA9MTAwK01hdGgucm91bmQoNjAqKDQzNzU4LjUqTWF0aC5zaW4oMTcuMypvKSUxKzEpJTEqLjUrMzAqcyksYz1uLmNyZWF0ZVJhZGlhbEdyYWRpZW50KGwtLjMqaCxkLS4zNSpoLC4xNSpoLGwsZCxoKTtjLmFkZENvbG9yU3RvcCgwLCJyZ2IoIisocCszOCkrIiwiKyhwKzM0KSsiLCIrKHArMzApKyIpIiksYy5hZGRDb2xvclN0b3AoMSwicmdiKCIrKHAtMjYpKyIsIisocC0yOCkrIiwiKyhwLTMwKSsiKSIpLG4uZmlsbFN0eWxlPWMsbi5iZWdpblBhdGgoKSxuLmVsbGlwc2UobCxkLGgsaCooLjc1Ky4zNSpzKSwzKnMsMCw3KSxuLmZpbGwoKX12YXIgdT1uZXcgVEhSRUUuQ2FudmFzVGV4dHVyZShhKTtyZXR1cm4gdS5lbmNvZGluZz1USFJFRS5zUkdCRW5jb2RpbmcsdS53cmFwUz11LndyYXBUPVRIUkVFLlJlcGVhdFdyYXBwaW5nLGZbdF09dSx1fWZ1bmN0aW9uIFEoZSl7dmFyIHQ9InNhbHQiKyhlPyJnIjoiIik7aWYoZlt0XSlyZXR1cm4gZlt0XTt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTthLndpZHRoPTI1NixhLmhlaWdodD0yNTY7dmFyIG49YS5nZXRDb250ZXh0KCIyZCIpO24uZmlsbFN0eWxlPWU/IiM3YTJjMDgiOiIjNWEyYTEyIixuLmZpbGxSZWN0KDAsMCwyNTYsMjU2KTtmb3IodmFyIG89MDtvPDg7bysrKWZvcih2YXIgaT1vJTI/MzI6MCxyPS0xO3I8NTtyKyspe3ZhciBzPTY0KnIraSxsPTMyKm8sZD0oNDM3NTguNSpNYXRoLnNpbig3OC4yMzMqKDcqbytyKSklMSsxKSUxLGg9ZT9bMjU1LDEyMCs1MCpkLDQwKzMwKmRdOlsyMTQsMTIwKzMwKmQsNzArMjAqZF0scD1uLmNyZWF0ZUxpbmVhckdyYWRpZW50KHMsbCxzKzY0LGwrMzIpO3AuYWRkQ29sb3JTdG9wKDAsInJnYigiK2guam9pbigiLCIpKyIpIikscC5hZGRDb2xvclN0b3AoMSwicmdiKCIrTWF0aC5yb3VuZCguNzUqaFswXSkrIiwiK01hdGgucm91bmQoLjcqaFsxXSkrIiwiK01hdGgucm91bmQoLjcqaFsyXSkrIikiKSxuLmZpbGxTdHlsZT1wLG4uZmlsbFJlY3QocysyLGwrMiw2MCwyOCksbi5nbG9iYWxBbHBoYT0uMTgsbi5maWxsU3R5bGU9IiNmZmYiLG4uYmVnaW5QYXRoKCksbi5lbGxpcHNlKHMrMTkuMisxMCpkLGwrMTIuOCw5LDUsMCwwLDcpLG4uZmlsbCgpLG4uZ2xvYmFsQWxwaGE9MX12YXIgYz1uZXcgVEhSRUUuQ2FudmFzVGV4dHVyZShhKTtyZXR1cm4gYy5lbmNvZGluZz1USFJFRS5zUkdCRW5jb2RpbmcsYy53cmFwUz1jLndyYXBUPVRIUkVFLlJlcGVhdFdyYXBwaW5nLGZbdF09YyxjfWZ1bmN0aW9uIFooZSl7cmV0dXJuIG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbChlKX1mdW5jdGlvbiAkKGUpe3JldHVybiBFLnB1c2goZSksZX1mdW5jdGlvbiBlZSgpe3ZhciBlPWwuY2xpZW50V2lkdGgsbz1sLmNsaWVudEhlaWdodDsodD1uZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7YW50aWFsaWFzOiEwLGFscGhhOiExfSkpLnNldFBpeGVsUmF0aW8oTWF0aC5taW4od2luZG93LmRldmljZVBpeGVsUmF0aW98fDEsMikpLHQuc2V0U2l6ZShlLG8pLHQuc2hhZG93TWFwLmVuYWJsZWQ9ITAsdC5zaGFkb3dNYXAudHlwZT1USFJFRS5QQ0ZTb2Z0U2hhZG93TWFwLHQub3V0cHV0RW5jb2Rpbmc9VEhSRUUuc1JHQkVuY29kaW5nLHQudG9uZU1hcHBpbmc9VEhSRUUuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nLHQudG9uZU1hcHBpbmdFeHBvc3VyZT0uOTUsbC5hcHBlbmRDaGlsZCh0LmRvbUVsZW1lbnQpLChhPW5ldyBUSFJFRS5TY2VuZSkuYmFja2dyb3VuZD1uZXcgVEhSRUUuQ29sb3IoIiNlZmU1ZDQiKSxhLmZvZz1uZXcgVEhSRUUuRm9nKCIjZWZlNWQ0IiwzMCw2MCksbj1uZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoNDIsZS9vLC4xLDEyMCksaT1uZXcgVEhSRUUuUmF5Y2FzdGVyO3ZhciBzPW5ldyBUSFJFRS5IZW1pc3BoZXJlTGlnaHQoMTY3NzMzNDEsNjA0Njc3MSwuNjIpO2EuYWRkKHMpO3ZhciBkPW5ldyBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0KDE2NzcxMDIwLC44NSk7ZC5wb3NpdGlvbi5zZXQoOSwxNCw3KSxkLmNhc3RTaGFkb3c9ITAsZC5zaGFkb3cubWFwU2l6ZS5zZXQoMjA0OCwyMDQ4KSxkLnNoYWRvdy5jYW1lcmEubGVmdD0tMTAsZC5zaGFkb3cuY2FtZXJhLnJpZ2h0PTEwLGQuc2hhZG93LmNhbWVyYS50b3A9MTIsZC5zaGFkb3cuY2FtZXJhLmJvdHRvbT0tMTAsZC5zaGFkb3cuYmlhcz0tNGUtNCxhLmFkZChkKTt2YXIgcD1uZXcgVEhSRUUuRGlyZWN0aW9uYWxMaWdodCgxNDY3NDE3NSwuMjUpO3AucG9zaXRpb24uc2V0KC04LDYsLTYpLGEuYWRkKHApO3ZhciBjPW5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KDExLDExLC4yOCw2NCksWih7Y29sb3I6IiNlN2RjYzkiLHJvdWdobmVzczouOTV9KSk7aWYoYy5wb3NpdGlvbi55PS0uMTUsYy5yZWNlaXZlU2hhZG93PSEwLGEuYWRkKGMpLGZ1bmN0aW9uKCl7dmFyIGU9dC5kb21FbGVtZW50LGE9MCxvPTAscz1udWxsLGw9MCxkPTA7ZnVuY3Rpb24gcCh0KXt2YXIgYT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4Oih0LmNsaWVudFgtYS5sZWZ0KS9hLndpZHRoKjItMSx5Oi0odC5jbGllbnRZLWEudG9wKS9hLmhlaWdodCoyKzF9fWZ1bmN0aW9uIGMoZSl7dmFyIHQ9cChlKTtpLnNldEZyb21DYW1lcmEodCxuKTt2YXIgYT1bXTtSLmZvckVhY2goZnVuY3Rpb24oZSl7ZS50cmF2ZXJzZShmdW5jdGlvbihlKXsoZS5pc01lc2h8fGUudXNlckRhdGEuaXNIYW5kbGUpJiZhLnB1c2goZSl9KX0pO3ZhciBvPWkuaW50ZXJzZWN0T2JqZWN0cyhhLCExKVswXTtpZighbylyZXR1cm4gbnVsbDtmb3IodmFyIHI9by5vYmplY3Q7ciYmIXIudXNlckRhdGEua2luZDspcj1yLnBhcmVudDtyZXR1cm4gcn1lLnN0eWxlLnRvdWNoQWN0aW9uPSJub25lIixlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixmdW5jdGlvbih0KXt0cnl7ZS5zZXRQb2ludGVyQ2FwdHVyZSh0LnBvaW50ZXJJZCl9Y2F0Y2goZSl7fWE9dC5jbGllbnRYLG89dC5jbGllbnRZO3ZhciBuPWModCk7bj8ocz0iZHJhZyIseD1uLGUuc3R5bGUuY3Vyc29yPSJncmFiYmluZyIpOnM9Im9yYml0In0pLGUuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLGZ1bmN0aW9uKGwpe2lmKCJvcmJpdCI9PT1zKU0uYXotPS4wMDU1KihsLmNsaWVudFgtYSksTS5wb2w9TWF0aC5tYXgoLjI4LE1hdGgubWluKDEuNDIsTS5wb2wtLjAwNCoobC5jbGllbnRZLW8pKSksYT1sLmNsaWVudFgsbz1sLmNsaWVudFksdj0hMDtlbHNlIGlmKCJkcmFnIj09PXMmJngpIWZ1bmN0aW9uKGUpe3ZhciBhPXosbz10LmRvbUVsZW1lbnQscz1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9e3g6KGUuY2xpZW50WC1zLmxlZnQpL3Mud2lkdGgqMi0xLHk6LShlLmNsaWVudFktcy50b3ApL3MuaGVpZ2h0KjIrMX07aS5zZXRGcm9tQ2FtZXJhKGwsbik7dmFyIGQ9KDItaS5yYXkub3JpZ2luLnkpL2kucmF5LmRpcmVjdGlvbi55O2lmKGQ8MClyZXR1cm47dmFyIHA9aS5yYXkub3JpZ2luLmNsb25lKCkuYWRkKGkucmF5LmRpcmVjdGlvbi5jbG9uZSgpLm11bHRpcGx5U2NhbGFyKGQpKSxjPVtbMCxhLmQvMitwLnpdLFsyLGEuZC8yLXAuel0sWzEsYS53LzItcC54XSxbMyxhLncvMitwLnhdXTtjLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVsxXS10WzFdfSk7dmFyIHcsbT1jWzBdWzBdLGY9XyhhLG0pO3c9MD09PW0/KC1wLngrYS53LzIpL2EudzoyPT09bT8ocC54K2Eudy8yKS9hLnc6MT09PW0/KC1wLnorYS5kLzIpL2EuZDoocC56K2EuZC8yKS9hLmQ7dmFyIEUsZz14LnVzZXJEYXRhLmtpbmQ7RT0iaGVhdGVyIj09PWc/KFAudy8yKy4xNSkvZjoiZG9vciI9PT1nPyhhLmRvb3IuZGltLncqci8yKy4yKS9mOiJzYWx0Ij09PWc/Mi4xL2Y6MD09PWcuaW5kZXhPZigidmVudCIpPy4zNS9mOigoYS53aW5zWytnLnNsaWNlKDMpXXx8e2RpbTp7dzoxNn19KS5kaW0udypyLzIrLjIpL2Y7dz1NYXRoLm1heChFLE1hdGgubWluKDEtRSx3KSksImhlYXRlciI9PT1nP3UuaGVhdGVyPXt3YWxsOm0sdDp3fToiZG9vciI9PT1nP3UuZG9vcj17d2FsbDptLHQ6d306InNhbHQiPT09Zz91LnNhbHQ9e3dhbGw6bSx0Ond9OjA9PT1nLmluZGV4T2YoInZlbnQiKT91LnZlbnRzWytnLnNsaWNlKDQpXT17d2FsbDptLHQ6d306dS53aW5zWytnLnNsaWNlKDMpXT17d2FsbDptLHQ6d307KGZ1bmN0aW9uKGUsdCxhKXt2YXIgbj16LG89ZnVuY3Rpb24oZSl7cmV0dXJuImhlYXRlciI9PT1lP0Q6ImRvb3IiPT09ZT9DOiJzYWx0Ij09PWU/STowPT09ZS5pbmRleE9mKCJ2ZW50Iik/cVsrZS5zbGljZSg0KV06TFsrZS5zbGljZSgzKV19KGUpO2lmKCFvKXJldHVybjt2YXIgaT1YKG4sdCxhLGZ1bmN0aW9uKGUpe3JldHVybiJoZWF0ZXIiPT09ZT9QP1AuZC8yOi43OiJkb29yIj09PWU/LjEzOiJzYWx0Ij09PWU/LjEyOjA9PT1lLmluZGV4T2YoInZlbnQiKT8uMDY6LjE0fShlKSk7by5wb3NpdGlvbi5zZXQoaS54LDAsaS56KSxvLnJvdGF0aW9uLnk9aS5yb3QsImRvb3IiPT09ZSYmRyYmKEcucG9zaXRpb24uY29weShvLnBvc2l0aW9uKSxHLnJvdGF0aW9uLmNvcHkoby5yb3RhdGlvbikpOyJoZWF0ZXIiPT09ZSYmUCYmKFAud2FsbD10LFAudD1hKTswPT09ZS5pbmRleE9mKCJ2ZW50IikmJkJbK2Uuc2xpY2UoNCldJiYoQlsrZS5zbGljZSg0KV0ud2FsbD10LEJbK2Uuc2xpY2UoNCldLnQ9YSl9KShnLG0sdyksZnVuY3Rpb24oZSl7aWYoIWh8fCF6KXJldHVybjt2YXIgdD16LGE9IiI7dHJ5e2lmKCJoZWF0ZXIiPT09ZSYmUCl7dmFyIG49cGUoUC53YWxsLFAudCxQLncsUC5kLHQpLG89MWU5O2suZm9yRWFjaChmdW5jdGlvbihlKXtvPU1hdGgubWluKG8sdWUodCxuLGUpKX0pO3ZhciBpPXBlKHUuZG9vci53YWxsLHUuZG9vci50LHQuZG9vci5kaW0udypyKy4yLC40LHQpO2E9IjxiPkhlYXRlcjwvYj4gJm1pZGRvdDsgIittZShvKSsiIGZyb20gdGhlIGJlbmNoICZtaWRkb3Q7ICIrbWUodWUodCxuLGkpKSsiIGZyb20gdGhlIGRvb3IifWVsc2UgaWYoImRvb3IiPT09ZSYmUCl7dmFyIHM9cGUodS5kb29yLndhbGwsdS5kb29yLnQsdC5kb29yLmRpbS53KnIrLjIsLjQsdCksbD1wZShQLndhbGwsUC50LFAudyxQLmQsdCk7YT0iPGI+RG9vcjwvYj4gJm1pZGRvdDsgIittZSh1ZSh0LHMsbCkpKyIgZnJvbSB0aGUgaGVhdGVyICZtaWRkb3Q7IHN3aW5ncyBvdXR3YXJkIn1lbHNlIGlmKCJ2ZW50MCI9PT1lJiZQKXt2YXIgZD1CWzBdLHA9cGUoZC53YWxsLGQudCxkLncsLjMsdCksYz1wZShQLndhbGwsUC50LFAudyxQLmQsdCk7YT0iPGI+U3VwcGx5IHZlbnQ8L2I+ICZtaWRkb3Q7ICIrbWUodWUodCxwLGMpKSsiIGZyb20gdGhlIGhlYXRlciAmbWRhc2g7IGl0IGJlbG9uZ3MgdW5kZXIgb3IgYmVzaWRlIGl0In1lbHNlIGlmKCJ2ZW50MSI9PT1lJiZQKXt2YXIgdz1CWzFdLG09cGUody53YWxsLHcudCx3LncsLjMsdCksZj1wZShQLndhbGwsUC50LFAudyxQLmQsdCk7YT0iPGI+RXhoYXVzdCB2ZW50PC9iPiAmbWlkZG90OyAiK21lKHVlKHQsbSxmKSkrIiBmcm9tIHRoZSBoZWF0ZXIgJm1kYXNoOyBmYXJ0aGVyIGlzIGJldHRlciwgbG93IHVuZGVyIHRoZSBiZW5jaGVzIn1lbHNlIGE9InZlbnQyIj09PWU/IjxiPkRyeWluZyB2ZW50PC9iPiAmbWlkZG90OyBzdGF5cyBoaWdoIG5lYXIgdGhlIGNlaWxpbmc7IG9wZW4gaXQgYWZ0ZXIgYmF0aGluZywgY2xvc2VkIGR1cmluZyI6InNhbHQiPT09ZT96LmxpZ2h0JiYic2FsdHdhbGwiPT09ei5saWdodC5rPyI8Yj5TYWx0IHdhbGw8L2I+ICZtaWRkb3Q7IHJlYWwgdW5pdDogNDgmbmJzcDtpbiB3aWRlICZtaWRkb3Q7IHNsaWRlcyBhbG9uZyBhbnkgd2FsbCI6IjxiPlNhbHQgcGFuZWw8L2I+ICZtaWRkb3Q7IDI0ICZ0aW1lczsgNDggaW4sIGNlbnRyZWQgYXQgNTQgaW4iOiI8Yj5XaW5kb3c8L2I+ICZtaWRkb3Q7IGtlZXAgY2xlYXIgb2YgdGhlIGRvb3IgZnJhbWUgYW5kIGNvcm5lcnMifWNhdGNoKGUpe31oLmlubmVySFRNTD1hfShnKSx2PSEwfShsKTtlbHNle3ZhciBkPWMobCk7ZS5zdHlsZS5jdXJzb3I9ZD8iZ3JhYiI6IiIsZCE9PUgmJihIJiZILnVzZXJEYXRhLnJpbmcmJihILnVzZXJEYXRhLnJpbmcubWF0ZXJpYWwub3BhY2l0eT0uNTUpLEg9ZCxkJiZkLnVzZXJEYXRhLnJpbmcmJihkLnVzZXJEYXRhLnJpbmcubWF0ZXJpYWwub3BhY2l0eT0uOTUpLHY9ITApfX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixmdW5jdGlvbih0KXsiZHJhZyI9PT1zJiYobmUoeiksd2UoeiksaCYmKGguaW5uZXJIVE1MPSJEcmFnJm5ic3A7dG8mbmJzcDtvcmJpdCAmbWlkZG90OyBzY3JvbGwmbmJzcDt0byZuYnNwO3pvb20gJm1pZGRvdDsgZHJhZyZuYnNwO2EmbmJzcDtyaW5nZWQmbmJzcDtwYXJ0Jm5ic3A7dG8mbmJzcDttb3ZlJm5ic3A7aXQiKSkscz1udWxsLHg9bnVsbCxlLnN0eWxlLmN1cnNvcj0iIn0pLGUuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxNLnI9TWF0aC5tYXgoNixNYXRoLm1pbig0MCxNLnIqKDErKGUuZGVsdGFZPjA/LjA4Oi0uMDgpKSkpLHY9ITB9LHtwYXNzaXZlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihlKXsyPT09ZS50b3VjaGVzLmxlbmd0aCYmKGw9TWF0aC5oeXBvdChlLnRvdWNoZXNbMF0uY2xpZW50WC1lLnRvdWNoZXNbMV0uY2xpZW50WCxlLnRvdWNoZXNbMF0uY2xpZW50WS1lLnRvdWNoZXNbMV0uY2xpZW50WSksZD1NLnIscz0icGluY2giKX0se3Bhc3NpdmU6ITB9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7aWYoInBpbmNoIj09PXMmJjI9PT1lLnRvdWNoZXMubGVuZ3RoKXt2YXIgdD1NYXRoLmh5cG90KGUudG91Y2hlc1swXS5jbGllbnRYLWUudG91Y2hlc1sxXS5jbGllbnRYLGUudG91Y2hlc1swXS5jbGllbnRZLWUudG91Y2hlc1sxXS5jbGllbnRZKTtNLnI9TWF0aC5tYXgoNixNYXRoLm1pbig0MCxkKmwvdCkpLHY9ITB9fSx7cGFzc2l2ZTohMH0pfSgpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRlKSx3aW5kb3cuUmVzaXplT2JzZXJ2ZXImJm5ldyBSZXNpemVPYnNlcnZlcih0ZSkub2JzZXJ2ZShsKSwwPT09ZSl2YXIgdz0wLG09c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXt3KyssKGwuY2xpZW50V2lkdGg+MHx8dz40MCkmJih0ZSgpLGNsZWFySW50ZXJ2YWwobSkpfSwyNTApO3JlcXVlc3RBbmltYXRpb25GcmFtZShmZSl9ZnVuY3Rpb24gdGUoKXtpZih0KXt2YXIgZT1sLmNsaWVudFdpZHRoLGE9bC5jbGllbnRIZWlnaHQ7dC5zZXRTaXplKGUsYSksbi5hc3BlY3Q9ZS9hLG4udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHY9ITB9fWZ1bmN0aW9uIGFlKGUsdCxhLG4sbyl7dmFyIGk9bmV3IFRIUkVFLk1lc2goJChuZXcgVEhSRUUuQm94R2VvbWV0cnkoZSx0LGEpKSxuKTtyZXR1cm4gaS5jYXN0U2hhZG93PSExIT09byxpLnJlY2VpdmVTaGFkb3c9ITAsaX1mdW5jdGlvbiBuZShlKXtvJiZhLnJlbW92ZShvKSxFLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5nZW9tZXRyeSYmZS5nZW9tZXRyeS5kaXNwb3NlKCksZS5tYXRlcmlhbCYmZS5tYXRlcmlhbC5kaXNwb3NlJiZlLm1hdGVyaWFsLmRpc3Bvc2UoKX0pLEU9W10sVD1bXSxSPVtdLG89bmV3IFRIUkVFLkdyb3VwLGEuYWRkKG8pLGZ1bmN0aW9uKGUpe3ZhciB0PWUudysieCIrZS5kKyJ4IitlLmgrIjoiK2UubGF5b3V0O2Zvcih0IT09dyYmKHc9dCx1LmRvb3I9e3dhbGw6Mix0Oi43OH0sdS5oZWF0ZXI9e3dhbGw6Mix0Oi4yNX0sdS53aW5zPVtdLHUuYmVuY2hTaWRlPTMsdS5mZWF0PTAsdS52ZW50cz1bbnVsbCxudWxsLG51bGxdLHUuc2FsdD1udWxsLHUuc2FsdFdhbGw9MCk7dS53aW5zLmxlbmd0aDxlLndpbnMubGVuZ3RoOyl7dmFyIGE9dS53aW5zLmxlbmd0aDt1LndpbnMucHVzaCh7d2FsbDpbMSwzLDIsMF1bYSU0XSx0Oi41fSl9dS53aW5zLmxlbmd0aD1lLndpbnMubGVuZ3RofShlKTt2YXIgdD1lLncsbj1lLmQsaT1lLmgscz0uMjk7TS5yPTEuNzUqTWF0aC5tYXgodCxuKSs0LjUsTS50eT0uNDIqaTt2YXIgbD1hZSh0Ky41OCwuMTIsbisuNTgsWih7Y29sb3I6IiM5MzY4M2YiLHJvdWdobmVzczouOX0pLCExKTtsLnBvc2l0aW9uLnk9LjA2LG8uYWRkKGwpO3ZhciBkPVooe21hcDpWKCJmbG9vciIsTWF0aC5tYXgoNixNYXRoLnJvdW5kKDIqdCkpLCExKSxyb3VnaG5lc3M6Ljg1fSk7ZC5tYXAucmVwZWF0LnNldCgxLDEpO3ZhciBoPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkodCxuKSksZCk7aC5yb3RhdGlvbi54PS1NYXRoLlBJLzIsaC5wb3NpdGlvbi55PS4xMjUsaC5yZWNlaXZlU2hhZG93PSEwLG8uYWRkKGgpO2Zvcih2YXIgcD0wO3A8NDtwKyspe3ZhciBjPV8oZSxwKSxtPW5ldyBUSFJFRS5Hcm91cCxmPWUuZmVhdCYmdS5mZWF0PT09cCxiPVooZj97bWFwOlUoZS5mZWF0KSxyb3VnaG5lc3M6Ljh9OnttYXA6VigiY2VkYXIiLE1hdGgubWF4KDgsTWF0aC5yb3VuZCgyLjIqYykpLCEwKSxyb3VnaG5lc3M6Ljg1fSk7Yi5tYXAmJihiLm1hcD1iLm1hcC5jbG9uZSgpLGIubWFwLm5lZWRzVXBkYXRlPSEwLGIubWFwLnJlcGVhdC5zZXQoZj9jLzQ6MSxmP2kvNDoxKSksYi50cmFuc3BhcmVudD0hMDt2YXIgeT1hZShjKy41OCxpLHMsYiwhMSk7eS5wb3NpdGlvbi55PWkvMix5LnBvc2l0aW9uLno9LS4wMDEsbS5hZGQoeSk7dmFyIEg9WChlLHAsLjUsLXMvMik7bS5wb3NpdGlvbi5zZXQoSC54KzAqSC5ueCwwLEgueiksMSE9PXAmJjMhPT1wfHxtLnBvc2l0aW9uLnNldChILngsMCxILnopLG0ucm90YXRpb24ueT1ILnJvdCxtLnBvc2l0aW9uLnNldChILngsMCxILnopLG8uYWRkKG0pLFQucHVzaCh7Z3JvdXA6bSxzbGFiOnksbWF0OmIsdzpwfSl9dmFyIHg9Wih7bWFwOlYoImNlZGFyIixNYXRoLm1heCg4LE1hdGgucm91bmQoMip0KSksITEpLHJvdWdobmVzczouOX0pO3gudHJhbnNwYXJlbnQ9ITA7dmFyIFM9bmV3IFRIUkVFLk1lc2goJChuZXcgVEhSRUUuQm94R2VvbWV0cnkodCsuNTgscyxuKy41OCkpLHgpO1MucG9zaXRpb24ueT1pK3MvMixTLmNhc3RTaGFkb3c9ITEsUy5yZWNlaXZlU2hhZG93PSExLG8uYWRkKFMpLFQucHVzaCh7c2xhYjpTLG1hdDp4LHc6ImNlaWwifSksZnVuY3Rpb24oZSl7az1bXTt2YXIgdD1zZShlKSxhPWUudG9uZSxuPWUudyxpPWUuZCxyPVooe21hcDpWKGEsNSwhMSkscm91Z2huZXNzOi43fSkscz1aKHttYXA6VihhLDMsITEpLHJvdWdobmVzczouNzV9KSxsPXUuYmVuY2hTaWRlO2Z1bmN0aW9uIGQodCxhLG4saSxsLGQpe3ZhciBoPW5ldyBUSFJFRS5Hcm91cCxwPWFlKGEsLjE0LGkscik7cC5wb3NpdGlvbi55PWwtLjA3LGguYWRkKHApO3ZhciBjPWFlKGEsLjM0LC4wOCxzKTtjLnBvc2l0aW9uLnk9bC0uMjYsYy5wb3NpdGlvbi56PWkvMi0uMDQsaC5hZGQoYyk7Zm9yKHZhciB1PVooe2NvbG9yOiIjOGE2ODRhIixyb3VnaG5lc3M6Ljh9KSx3PU1hdGgubWF4KDIsTWF0aC5yb3VuZChhLzIuMikrMSksbT0wO208dzttKyspe3ZhciBmPS1hLzIrLjI1KyhhLS41KSooMT09PXc/LjU6bS8ody0xKSksdj1hZSguMjIsbC0uMSwuMjIsdSk7di5wb3NpdGlvbi5zZXQoZiwobC0uMSkvMixpLzItLjI1KSxoLmFkZCh2KX1YKGUsdCwwLDApO3ZhciBFPV8oZSx0KSxnPVgoZSx0LChuK2EvMikvRSxpLzIpO2gucG9zaXRpb24uc2V0KGcueCwwLGcueiksaC5yb3RhdGlvbi55PWcucm90LG8uYWRkKGgpO3ZhciBiPW4seT1uK2E7cmV0dXJuIGsucHVzaCh7d2FsbDp0LGE6YixiOnksZGVlcDppfSksaH1pZihkKDAsbiwwLHQudXBEZWVwLHQudXBUb3ApLGQoMCxuLDAsdC51cERlZXArdC5sb0RlZXAsdC5sb1RvcCksZS5sYXlvdXQ+MCl7dmFyIGg9TWF0aC5tYXgoMixpLTIpO2QobCxoLDM9PT1sPzA6aS1oLHQudXBEZWVwLHQudXBUb3ApLDI9PT1lLmxheW91dCYmZChsLGgsMz09PWw/MDppLWgsdC51cERlZXArdC5sb0RlZXAsdC5sb1RvcCl9aWYoZS5yZXN0KXt2YXIgcD1hZSguOTQqbiwuNSwuMDgsWih7bWFwOlYoYSwyLCExKSxyb3VnaG5lc3M6Ljd9KSksYz1YKGUsMCwuNSwtLjA2KTtwLnBvc2l0aW9uLnNldChjLngsdC51cFRvcCsxLjEsYy56Ky4xKSxvLmFkZChwKX19KGUpLGUuaGVhdGVyJiZmdW5jdGlvbihlKXt2YXIgdCxhLG49ZS5oZWF0ZXIsaT1uZXcgVEhSRUUuR3JvdXAscz1aKHtjb2xvcjoiI2QzZDZkOCIsbWV0YWxuZXNzOi4xOCxyb3VnaG5lc3M6LjMyfSksbD1aKHtjb2xvcjoiIzNhM2IzZCIsbWV0YWxuZXNzOi4xNSxyb3VnaG5lc3M6LjV9KSxkPVooe2NvbG9yOiIjMWUxZjIxIixtZXRhbG5lc3M6LjEyLHJvdWdobmVzczouNTV9KSxoPWZ1bmN0aW9uKGUsdCl7dmFyIGE9Wih7bWFwOkooKSxyb3VnaG5lc3M6Ljk1fSk7cmV0dXJuIGEubWFwJiYoYS5tYXA9YS5tYXAuY2xvbmUoKSxhLm1hcC5uZWVkc1VwZGF0ZT0hMCxhLm1hcC5yZXBlYXQuc2V0KGV8fDEsdHx8MSkpLGF9LHA9MCxjPW4ubmFtZTtmdW5jdGlvbiB3KGUpe3JldHVybiBlKnJ9aWYoL0NpbGluZHJvL2kudGVzdChjKSl7dD1hPXcoMTUpO3ZhciBtPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkodyg2LjUpLHcoNi41KSx3KDM0KSwyNCkpLGgoMiwzKSk7bS5wb3NpdGlvbi55PXcoMjApLG0uY2FzdFNoYWRvdz0hMCxpLmFkZChtKTtmb3IodmFyIGY9MDtmPDY7ZisrKXt2YXIgdj1hZSguMDI1LHcoMzQpLC4wMjUscyksRT1mLzYqTWF0aC5QSSoyO3YucG9zaXRpb24uc2V0KE1hdGguY29zKEUpKncoNi43KSx3KDIwKSxNYXRoLnNpbihFKSp3KDYuNykpLGkuYWRkKHYpfXZhciBnPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkodyg2LjgpLHcoNi44KSx3KDIuNSksMjQpKSxzKTtnLnBvc2l0aW9uLnk9dygyLjIpLGkuYWRkKGcpLGkuYWRkKEsodygxMSksdygxMSksdygzNi41KSkpfWVsc2UgaWYoL0RST1AvaS50ZXN0KGMpKXt0PXcoMjIpLGE9dygxMykscD13KDE3KTtmb3IodmFyIGI9W10seT0wO3k8PTE0O3krKyl7dmFyIE09eS8xNCxUPXcoMTEpKk1hdGgucG93KE1hdGguc2luKE0qTWF0aC5QSSouNTgpLC43Mik7Yi5wdXNoKG5ldyBUSFJFRS5WZWN0b3IyKE1hdGgubWF4KFQsLjAxNSksTSp3KDMxKSkpfXZhciBSPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkxhdGhlR2VvbWV0cnkoYiwzMCkpLGgoMywyKSk7Ui5zY2FsZS56PS41NSxSLnBvc2l0aW9uLnk9cCxSLmNhc3RTaGFkb3c9ITAsaS5hZGQoUik7dmFyIEg9bmV3IFRIUkVFLk1lc2goJChuZXcgVEhSRUUuVG9ydXNHZW9tZXRyeSh3KDExKSwuMDI4LDEwLDM0KSkscyk7SC5yb3RhdGlvbi54PU1hdGguUEkvMixILnNjYWxlLnk9LjU1LEgucG9zaXRpb24ueT1wK3coMzAuMiksaS5hZGQoSCksaS5hZGQoSyh3KDE2KSx3KDkpLHArdygyOSkpKX1lbHNlIGlmKC9DTElGRi9pLnRlc3QoYykpe3Q9YT13KDE0KTt2YXIgeD1hZSh3KDEyKSx3KDM4KSx3KDEyKSxoKDEuNiw0KSk7eC5wb3NpdGlvbi55PXcoMjAuNSksaS5hZGQoeCksW1stMSwtMV0sWzEsLTFdLFstMSwxXSxbMSwxXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1hZSguMDMsdygzOCksLjAzLGwpO3QucG9zaXRpb24uc2V0KGVbMF0qdyg2LjEpLHcoMjAuNSksZVsxXSp3KDYuMSkpLGkuYWRkKHQpfSksaS5hZGQoSyh3KDEwLjUpLHcoMTAuNSksdyg0MCkpKX1lbHNlIGlmKC9TVEVFTC9pLnRlc3QoYykpe3Q9YT13KDE3KTt2YXIgUz1hZSh3KDE0KSx3KDMzKSx3KDE0KSxoKDEuOCwzLjQpKTtTLnBvc2l0aW9uLnk9dygxOCksaS5hZGQoUyk7Zm9yKHZhciB6PTA7ejw5O3orKyl7dmFyIGs9YWUodygxNSksLjAyMix3KDE1KSxzKTtrLnBvc2l0aW9uLnk9dygzLjUrMy43KnopLGkuYWRkKGspfWkuYWRkKEsodygxMiksdygxMiksdygzNS4yKSkpfWVsc2UgaWYoL0hJVkUgRmxvdy9pLnRlc3QoYykpe3ZhciBDPS9NaW5pL2kudGVzdChjKTt0PWE9dyhDPzIxOjI0KTt2YXIgRz13KEM/OS41OjExKSxMPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KEcsMjIsMTgpKSxoKDIuNiwyLjIpKTtMLnNjYWxlLnk9MS41LEwucG9zaXRpb24ueT0xLjUqRyt3KDIpLEwuY2FzdFNoYWRvdz0hMCxpLmFkZChMKTt2YXIgST1uZXcgVEhSRUUuTWVzaCgkKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KHcoNiksdyg3KSx3KDIuNSksMTgpKSxkKTtJLnBvc2l0aW9uLnk9dygxLjQpLGkuYWRkKEkpO3ZhciBxPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkodyg1KSx3KDUpLC4wNiwxOCwxLCExLDAsTWF0aC5QSSkpLGQpO3Eucm90YXRpb24uej1NYXRoLlBJLzIscS5yb3RhdGlvbi55PU1hdGguUEkvMixxLnBvc2l0aW9uLnNldCgwLHcoMTEpLC45MipHKSxpLmFkZChxKTt2YXIgQj1uZXcgVEhSRUUuTWVzaCgkKG5ldyBUSFJFRS5DaXJjbGVHZW9tZXRyeSh3KDMuNCksMTYpKSxaKHtjb2xvcjoiI2ZmOGMyZSIsZW1pc3NpdmU6IiNmZjVmMGEiLGVtaXNzaXZlSW50ZW5zaXR5OjEuNn0pKTtCLnBvc2l0aW9uLnNldCgwLHcoMTApLC45MipHKy4wMzUpLGkuYWRkKEIpO3ZhciBXPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkodygyLjYpLHcoMi42KSxlLmgtKDMqRyt3KDIpKSwxNCkpLGQpO1cucG9zaXRpb24ueT0oZS5oKygzKkcrdygyKSkpLzIsaS5hZGQoVyk7dmFyIEY9bmV3IFRIUkVFLlBvaW50TGlnaHQoMTY3Mzg4NDIsLjksNCk7Ri5wb3NpdGlvbi5zZXQoMCx3KDEyKSxHKy4zKSxpLmFkZChGKX1lbHNlIGlmKC9LSVB8VGhlIFdhbGwvaS50ZXN0KGMpKXt2YXIgQT0vVGhlIFdhbGwvaS50ZXN0KGMpO3Q9dyhBPzE4OjE2KSxhPXcoQT8xMjoxMSkscD13KDgpO3ZhciBqPXcoQT8yNjoyNSksTz1hZSh0LS4wNCxqLGEtLjA0LGQpO08ucG9zaXRpb24ueT1wK2ovMixpLmFkZChPKTt2YXIgWT1hZSh0LXcoMyksdyg1KSxhLXcoMyksaCgxLjIsLjYpKTtZLnBvc2l0aW9uLnk9cCtqLXcoMSksaS5hZGQoWSksaS5hZGQoSyh0LXcoMy41KSxhLXcoMy41KSxwK2ordygxKSkpO3ZhciBfPWFlKHQrLjAzLC4wMjUsLjAyNSxzKTtpZihfLnBvc2l0aW9uLnNldCgwLHArait3KDIuNSksYS8yKSxpLmFkZChfKSwhQSYmL2J1aWx0LWluL2kudGVzdChjKSl7dmFyIE49YWUodyg2KSx3KDEuNiksLjAyLFooe2NvbG9yOiIjYzljOWM2Iixyb3VnaG5lc3M6LjR9KSk7Ti5wb3NpdGlvbi5zZXQoLXQvNCxwK3coMyksYS8yKSxpLmFkZChOKX19ZWxzZXt0PXcoMTcpLGE9dygxNCk7dmFyIFU9YWUodygxNiksdygyNyksdygxMyksbCk7VS5wb3NpdGlvbi55PXcoMTQuNSksaS5hZGQoVSk7dmFyIFE9YWUodygxMiksdygzKSx3KDkpLGgoMSwuNSkpO1EucG9zaXRpb24ueT13KDI3LjQpLGkuYWRkKFEpLGkuYWRkKEsodygxMSksdyg4KSx3KDI5LjUpKSl9dmFyIGVlPVooe21hcDpWKCJjZWRhciIsMSwhMSkscm91Z2huZXNzOi44fSksdGU9cD9wK3coMjgpOncoMzApLG5lPXQrLjU1LG9lPWErLjQ1LGllPWFlKG5lLC4xMiwuMDgsZWUpO2llLnBvc2l0aW9uLnNldCgwLHRlLG9lLzIpLGkuYWRkKGllKSxbLW5lLzIsbmUvMl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1hZSguMDgsLjEyLG9lLGVlKTt0LnBvc2l0aW9uLnNldChlLHRlLDApLGkuYWRkKHQpO3ZhciBhPWFlKC4wOCx0ZSwuMDgsZWUpO2EucG9zaXRpb24uc2V0KGUsdGUvMixvZS8yLS4wNCksaS5hZGQoYSl9KTt2YXIgcmU9dS5oZWF0ZXIsc2U9WChlLHJlLndhbGwscmUudCxhLzIrLjEyKTtpLnBvc2l0aW9uLnNldChzZS54LDAsc2UueiksaS5yb3RhdGlvbi55PXNlLnJvdCxpLnRyYXZlcnNlKGZ1bmN0aW9uKGUpe2UuaXNNZXNoJiYoZS5jYXN0U2hhZG93PSEwKX0pLG8uYWRkKGkpLEQ9aSxQPXt3YWxsOnJlLndhbGwsdDpyZS50LHc6dCxkOmErLjI0LGtpbmQ6bn0saGUoaSwiaGVhdGVyIiwiSGVhdGVyIixNYXRoLm1heCh0LGEpKTt2YXIgbGU9bmV3IFRIUkVFLlBvaW50TGlnaHQoMTY3NTE2OTYsLjY1LDEuMipNYXRoLm1heChlLncsZS5kKSk7bGUucG9zaXRpb24uc2V0KC44KnNlLngsMi4yLC44KnNlLnopLG8uYWRkKGxlKTt2YXIgZGU9YWUoLjEyLC4xOCwuMDUsWih7Y29sb3I6IiNkZGQiLHJvdWdobmVzczouNX0pKSxwZT1YKGUscmUud2FsbCxyZS50LC4wMyk7ZGUucG9zaXRpb24uc2V0KHBlLngsZS5oLS4zNSxwZS56KSxkZS5yb3RhdGlvbi55PXBlLnJvdCxvLmFkZChkZSl9KGUpLGZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9vcixhPXQuZGltLncsbj10LmRpbS5oLGk9YSpyLHM9bipyLGw9bmV3IFRIUkVFLkdyb3VwLGQ9Wih7bWFwOlYoImNlZGFyIiwxLCEwKSxyb3VnaG5lc3M6Ljd9KSxoPS4xO1tbLWkvMi1oLzIscy8yLGhdLFtpLzIraC8yLHMvMixoXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1hZShoLHMraCwuMzIsZCk7dC5wb3NpdGlvbi5zZXQoZVswXSxlWzFdLDApLGwuYWRkKHQpfSk7dmFyIHAsYz1hZShpKzIqaCxoLC4zMixkKTtjLnBvc2l0aW9uLnk9cytoLzIsbC5hZGQoYykscD10LmdsYXNzP25ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkJveEdlb21ldHJ5KGktLjA0LHMtLjA0LC4wNSkpLG5ldyBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCh7Y29sb3I6dC50aW50PzQwMTA1MzU6MTI1NzI4OTMsdHJhbnNwYXJlbnQ6ITAsb3BhY2l0eTp0LnRpbnQ/LjU6LjE2LHJvdWdobmVzczouMDUsbWV0YWxuZXNzOjAsZGVwdGhXcml0ZTohMX0pKTphZShpLS4wNCxzLS4wNCwuMTQsWih7bWFwOlYoImNlZGFyIiwzLCEwKSxyb3VnaG5lc3M6Ljd9KSk7cC5wb3NpdGlvbi55PXMvMixsLmFkZChwKTt2YXIgdz1uZXcgVEhSRUUuTWVzaCgkKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4wMzUsLjAzNSwuOSwxMCkpLFooe2NvbG9yOiIjOGE2YTQ4Iixyb3VnaG5lc3M6LjV9KSk7dy5yb3RhdGlvbi54PU1hdGguUEkvMix3LnBvc2l0aW9uLnNldChpLzItLjE4LC41KnMsLjEpLGwuYWRkKHcpO3ZhciBtPVgoZSx1LmRvb3Iud2FsbCx1LmRvb3IudCwuMTMpO2wucG9zaXRpb24uc2V0KG0ueCwuMDUsbS56KSxsLnJvdGF0aW9uLnk9bS5yb3Qsby5hZGQobCksQz1sLGhlKGwsImRvb3IiLCJEb29yIik7Zm9yKHZhciBmPVtdLHY9MDt2PD0xNjt2Kyspe3ZhciBFPU1hdGguUEkvMip2LzE2O2YucHVzaChuZXcgVEhSRUUuVmVjdG9yMyhpLzItTWF0aC5jb3MoRSkqaSwuMDIsLU1hdGguc2luKEUpKmkpKX12YXIgZz1uZXcgVEhSRUUuTGluZSgkKChuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkpLnNldEZyb21Qb2ludHMoZikpLG5ldyBUSFJFRS5MaW5lRGFzaGVkTWF0ZXJpYWwoe2NvbG9yOjEwMTI2NDQwLGRhc2hTaXplOi4xNSxnYXBTaXplOi4xfSkpO2cuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSxnLnBvc2l0aW9uLmNvcHkobC5wb3NpdGlvbiksZy5yb3RhdGlvbi5jb3B5KGwucm90YXRpb24pLG8uYWRkKGcpLEc9Z30oZSksZS53aW5zLmZvckVhY2goZnVuY3Rpb24odCxhKXshZnVuY3Rpb24oZSx0LGEpe3ZhciBuPXQuZGltLncqcixpPXQuZGltLmgqcixzPSh0LmRpbS5oPj01ND8yMDp0LmRpbS5oPj0zNj8zNDo0MikqcioxO3M9dC5kaW0uaD49NTQ/MjAvMTI6dC5kaW0uaD49MzY/MzQvMTI6My41O3ZhciBsPW5ldyBUSFJFRS5Hcm91cCxkPVooe21hcDpWKCJjZWRhciIsMSwhMCkscm91Z2huZXNzOi43fSksaD0uMTIscD1zK2kvMjtbWy1uLzItaC8yLHAsaCxpKzIqaF0sW24vMitoLzIscCxoLGkrMipoXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1hZShlWzJdLGVbM10sLjMsZCk7dC5wb3NpdGlvbi5zZXQoZVswXSxlWzFdLDApLGwuYWRkKHQpfSksW1swLHMtaC8yXSxbMCxzK2kraC8yXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1hZShuLGgsLjMsZCk7dC5wb3NpdGlvbi5zZXQoZVswXSxlWzFdLDApLGwuYWRkKHQpfSk7dmFyIGM9bmV3IFRIUkVFLk1lc2goJChuZXcgVEhSRUUuQm94R2VvbWV0cnkobixpLC4wNikpLG5ldyBUSFJFRS5NZXNoUGh5c2ljYWxNYXRlcmlhbCh7Y29sb3I6dC50aW50PzQwMTA1MzU6MTI1NzI4OTMsdHJhbnNwYXJlbnQ6ITAsb3BhY2l0eTp0LnRpbnQ/LjU6LjE4LHJvdWdobmVzczouMDUsbWV0YWxuZXNzOjAsZGVwdGhXcml0ZTohMX0pKTtjLnBvc2l0aW9uLnk9cCxsLmFkZChjKTt2YXIgdz11LndpbnNbYV0sbT1YKGUsdy53YWxsLHcudCwuMTQpO2wucG9zaXRpb24uc2V0KG0ueCwwLG0ueiksbC5yb3RhdGlvbi55PW0ucm90LG8uYWRkKGwpLExbYV09bCxoZShsLCJ3aW4iK2EsIldpbmRvdyIpfShlLHQsYSl9KSxlLmxpZ2h0JiZmdW5jdGlvbihlKXt2YXIgdD1zZShlKSxhPWUubGlnaHQsbj1uZXcgVEhSRUUuTWVzaFN0YW5kYXJkTWF0ZXJpYWwoe2NvbG9yOiIjZmZlMmIwIixlbWlzc2l2ZToiI2ZmYjM1YyIsZW1pc3NpdmVJbnRlbnNpdHk6Mi40fSk7ZnVuY3Rpb24gaSh0LGEpe3ZhciBpPVgoZSwwLC41LGEpLHI9bGUoLjk2KmUudyxuKTtyLnBvc2l0aW9uLnNldChpLngsdCxpLnopLG8uYWRkKHIpO3ZhciBzPW5ldyBUSFJFRS5Qb2ludExpZ2h0KDE2NzU3NTk2LC41NSwxLjEqZS53KTtpZihzLnBvc2l0aW9uLnNldCgwLHQtLjE1LGkueisuMiksby5hZGQocyksZS5sYXlvdXQ+MCl7dmFyIGw9dS5iZW5jaFNpZGUsZD1fKGUsbCksaD1YKGUsbCwuNSxhKSxwPWxlKC44KmQsbik7cC5yb3RhdGlvbi56PU1hdGguUEkvMixwLnJvdGF0aW9uLnk9aC5yb3QscC5wb3NpdGlvbi5zZXQoaC54LHQsaC56KSxvLmFkZChwKX19aWYoImxlZCI9PT1hLmspe2lmKGkodC5sb1RvcC0uMTQsdC51cERlZXArdC5sb0RlZXArLjAyKSxhLnpvbmVzPjEmJmkodC51cFRvcC0uMTQsdC51cERlZXArLjAyKSxhLnpvbmVzPjIpe3ZhciBzPVgoZSwwLC41LC4wOCksbD1sZSguOTIqZS53LG4pO2wucG9zaXRpb24uc2V0KHMueCx0LnVwVG9wKzEuNSxzLnopLG8uYWRkKGwpO3ZhciBkPW5ldyBUSFJFRS5Qb2ludExpZ2h0KDE2NzU3NTk2LC40LGUudyk7ZC5wb3NpdGlvbi5zZXQoMCx0LnVwVG9wKzEuNCxzLnorLjIpLG8uYWRkKGQpfX1lbHNlIGlmKCJzYWx0d2FsbCI9PT1hLmspe2Zvcih2YXIgaD1bWzYwLDYxLjc1XSxbNzIsNzQuMTI1XSxbODQsODYuNV0sWzk2LDk4Ljg3NV1dLHA9aFswXSxjPTA7YzxoLmxlbmd0aDtjKyspaFtjXVsxXTw9MTIqZS5oLTYmJihwPWhbY10pO3dpbmRvdy5fX3MzZFNhbHRNb2RlbD1wO3ZhciB3PW5ldyBUSFJFRS5Hcm91cCxtPTQsZj1wWzFdKnIsdj0uMzQzNzUsRT1hZShtLGYsdixaKHttYXA6USghMCksZW1pc3NpdmU6IiNmZjdhMWUiLGVtaXNzaXZlSW50ZW5zaXR5Oi41NSxlbWlzc2l2ZU1hcDpRKCEwKSxyb3VnaG5lc3M6Ljl9KSk7RS5tYXRlcmlhbC5tYXAmJihFLm1hdGVyaWFsLm1hcD1FLm1hdGVyaWFsLm1hcC5jbG9uZSgpLEUubWF0ZXJpYWwubWFwLm5lZWRzVXBkYXRlPSEwLEUubWF0ZXJpYWwubWFwLnJlcGVhdC5zZXQoMS41LHBbMV0vMzIpLEUubWF0ZXJpYWwuZW1pc3NpdmVNYXA9RS5tYXRlcmlhbC5tYXApLEUucG9zaXRpb24ueT1mLzIsRS5wb3NpdGlvbi56PTAsdy5hZGQoRSk7dmFyIGc9Wih7Y29sb3I6IiNjOWNjY2UiLG1ldGFsbmVzczouMixyb3VnaG5lc3M6LjM1fSk7W1tmKy4wMl0sWy4wNF1dLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9YWUobSwuMDUsdisuMDIsZywhMSk7dC5wb3NpdGlvbi55PWVbMF0sdy5hZGQodCl9KSx1LnNhbHR8fCh1LnNhbHQ9e3dhbGw6MCx0Oi41fSk7dmFyIGI9WChlLHUuc2FsdC53YWxsLHUuc2FsdC50LHYvMisuMDIpO3cucG9zaXRpb24uc2V0KGIueCwwLGIueiksdy5yb3RhdGlvbi55PWIucm90LG8uYWRkKHcpLEk9dyxoZSh3LCJzYWx0IiwiU2FsdCB3YWxsIixtKTt2YXIgeT1uZXcgVEhSRUUuUG9pbnRMaWdodCgxNjc0Mjk1NCwxLDEuMypNYXRoLm1heChlLncsZS5kKSk7eS5wb3NpdGlvbi5zZXQoLjYqYi54LC41NSpmLC42KmIueiksby5hZGQoeSl9ZWxzZSBpZigic2FsdEwiPT09YS5rKXt2YXIgTT1uZXcgVEhSRUUuR3JvdXAsVD00LFI9MixIPTU4KnIseD1hZShUKy4xNixSKy4xNiwuMTIsWih7Y29sb3I6IiNkOGQ4ZDQiLG1ldGFsbmVzczouMixyb3VnaG5lc3M6LjR9KSk7eC5wb3NpdGlvbi55PUgsTS5hZGQoeCk7dmFyIFM9YWUoVCxSLC4yLFooe21hcDpRKCEwKSxlbWlzc2l2ZToiI2ZmN2ExZSIsZW1pc3NpdmVJbnRlbnNpdHk6LjYsZW1pc3NpdmVNYXA6USghMCkscm91Z2huZXNzOi45fSkpO1MubWF0ZXJpYWwubWFwJiYoUy5tYXRlcmlhbC5tYXA9Uy5tYXRlcmlhbC5tYXAuY2xvbmUoKSxTLm1hdGVyaWFsLm1hcC5uZWVkc1VwZGF0ZT0hMCxTLm1hdGVyaWFsLm1hcC5yZXBlYXQuc2V0KDEuNSwuNzUpLFMubWF0ZXJpYWwuZW1pc3NpdmVNYXA9Uy5tYXRlcmlhbC5tYXApLFMucG9zaXRpb24ueT1ILFMucG9zaXRpb24uej0uMDYsTS5hZGQoUyksdS5zYWx0fHwodS5zYWx0PXt3YWxsOjAsdDouNX0pO3ZhciB6PVgoZSx1LnNhbHQud2FsbCx1LnNhbHQudCwuMTIpO00ucG9zaXRpb24uc2V0KHoueCwwLHoueiksTS5yb3RhdGlvbi55PXoucm90LG8uYWRkKE0pLEk9TSxoZShNLCJzYWx0IiwiU2FsdCBwYW5lbCIsVCk7dmFyIGs9bmV3IFRIUkVFLlBvaW50TGlnaHQoMTY3NDI5NTQsLjgsZS53KTtrLnBvc2l0aW9uLnNldCguNyp6LngsSCwuNyp6LnopLG8uYWRkKGspfWVsc2UgaWYoInNhbHRTIj09PWEuayl7dmFyIEQ9NTAqcixQPWFlKDQsNCpyLDIuNCpyLFooe21hcDpRKCEwKSxlbWlzc2l2ZToiI2ZmN2ExZSIsZW1pc3NpdmVJbnRlbnNpdHk6LjcsZW1pc3NpdmVNYXA6USghMCkscm91Z2huZXNzOi45fSksITEpO1AubWF0ZXJpYWwubWFwJiYoUC5tYXRlcmlhbC5tYXA9UC5tYXRlcmlhbC5tYXAuY2xvbmUoKSxQLm1hdGVyaWFsLm1hcC5uZWVkc1VwZGF0ZT0hMCxQLm1hdGVyaWFsLm1hcC5yZXBlYXQuc2V0KDEuNSw0LzMyKSxQLm1hdGVyaWFsLmVtaXNzaXZlTWFwPVAubWF0ZXJpYWwubWFwKTt2YXIgQz1YKGUsMCwuNSwuMTQpO1AucG9zaXRpb24uc2V0KEMueCxELEMueiksby5hZGQoUCk7dmFyIEc9bmV3IFRIUkVFLlBvaW50TGlnaHQoMTY3NDI5NTQsLjYsZS53KTtHLnBvc2l0aW9uLnNldCgwLEQsQy56Ky4zKSxvLmFkZChHKX19KGUpLGZ1bmN0aW9uKGUpe3E9W10sQj1bXTtmb3IodmFyIHQ9ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuU0IsdD1bXTtpZihlJiZlLnN0ZXApe2Uuc3RlcCgidmVudCIpLm9wdHMuZm9yRWFjaChmdW5jdGlvbihhLG4pe2Zvcih2YXIgbz1lLnF0eVsidmVudCIrbl18fDAsaT0wO2k8bztpKyspe3ZhciByPWEubnx8IiIscz0vSGF0Y2gvaS50ZXN0KHIpPyJoYXRjaCI6L1JvdW5kL2kudGVzdChyKT8icm91bmQiOiJncmlsbGUiLGw9L0JsYWNrL2kudGVzdChyKT8iYmxhY2siOi9UaGVybW8vaS50ZXN0KHIpPyJ0aGVybW8iOi9BbGRlcnxBc3Blbi9pLnRlc3Qocik/ImFzcGVuIjoiY2VkYXIiO3QucHVzaCh7a2luZDpzLHRvbmU6bCxuYW1lOnJ9KX19KX1yZXR1cm4gdH0oKSxhPTA7YTwzO2ErKyl7dmFyIG49dS52ZW50c1thXTtufHwobj0wPT09YT97d2FsbDp1LmhlYXRlci53YWxsLHQ6dS5oZWF0ZXIudCxhdXRvOjF9OjE9PT1hP3t3YWxsOjAsdDouMTIsYXV0bzoxfTp7d2FsbDowLHQ6Ljg4LGF1dG86MX0pO3ZhciBpPW51bGw9PT1XW2FdLnk/ZS5oLS43OldbYV0ueSxyPW5ldyBUSFJFRS5Hcm91cCxzPWRlKHRbYV18fG51bGwpO3MucG9zaXRpb24ueT1pLHIuYWRkKHMpO3ZhciBsPVgoZSxuLndhbGwsbi50LC4wNik7ci5wb3NpdGlvbi5zZXQobC54LDAsbC56KSxyLnJvdGF0aW9uLnk9bC5yb3Qsby5hZGQocikscVthXT1yLEJbYV09e3dhbGw6bi53YWxsLHQ6bi50LHc6cy51c2VyRGF0YS53fHwuNX0saGUociwidmVudCIrYSxXW2FdLmxhYmVsLC41NSk7dmFyIGQ9ci51c2VyRGF0YS5yaW5nO2Qucm90YXRpb24ueD0wLGQucG9zaXRpb24ueT1pLGQucG9zaXRpb24uej0uMDl9fShlKSxnP2Z1bmN0aW9uKGUpe29lKCk7dmFyIHQ9c2UoZSksYT1lLncvMixuPWUuZC8yLG89ZnVuY3Rpb24oZSx0LGEpe3JldHVybiBuZXcgVEhSRUUuVmVjdG9yMyhlLHQsYSl9O2llKG8oLWEsLjA4LG4rLjcpLG8oYSwuMDgsbisuNykscmUoZS53KSsiIHdpZGUiLCEwKSxpZShvKGErLjcsLjA4LC1uKSxvKGErLjcsLjA4LG4pLHJlKGUuZCkrIiBkZWVwIiwhMCksaWUobyhhKy40NSwwLG4rLjQ1KSxvKGErLjQ1LGUuaCxuKy40NSkscmUoZS5oKSsiIGNlaWxpbmciLCEwKTt2YXIgaT0tbit0LnVwRGVlcCt0LmxvRGVlcDtpZShvKDAsMCxpKy4zNSksbygwLHQubG9Ub3AsaSsuMzUpLE1hdGgucm91bmQoMTIqdC5sb1RvcCkrIiZuYnNwO2luIGJlbmNoIiwhMCksaWUobyguOSwwLC1uK3QudXBEZWVwKy4zKSxvKC45LHQudXBUb3AsLW4rdC51cERlZXArLjMpLE1hdGgucm91bmQoMTIqdC51cFRvcCkrIiZuYnNwO2luIHRvcCBiZW5jaCIsITApO3ZhciByPWUuZC0odC51cERlZXArdC5sb0RlZXApO2llKG8oLjU1Ki1hLC4wOCxpKSxvKC41NSotYSwuMDgsbikscmUocikrIiBjbGVhciBmbG9vciIsITApfShlKTpvZSgpLHY9ITB9ZnVuY3Rpb24gb2UoKXtiLmZvckVhY2goZnVuY3Rpb24oZSl7ZS5lbCYmZS5lbC5wYXJlbnROb2RlJiZlLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZS5lbCl9KSxiPVtdfWZ1bmN0aW9uIGllKHQsYSxuLGkpe3ZhciByPW5ldyBUSFJFRS5MaW5lQmFzaWNNYXRlcmlhbCh7Y29sb3I6ODAxNDM3NH0pLHM9W3QsYV0sbD1uZXcgVEhSRUUuTGluZSgkKChuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkpLnNldEZyb21Qb2ludHMocykpLHIpO2lmKG8uYWRkKGwpLGkpe3ZhciBkPWEuY2xvbmUoKS5zdWIodCkubm9ybWFsaXplKCksaD1NYXRoLmFicyhkLnkpPi45P25ldyBUSFJFRS5WZWN0b3IzKDEsMCwwKTpuZXcgVEhSRUUuVmVjdG9yMygwLDEsMCkscD1kLmNsb25lKCkuY3Jvc3MoaCkubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIoLjEyKTtbW3RdLFthXV0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lWzBdLmNsb25lKCkuYWRkKHApLGE9ZVswXS5jbG9uZSgpLnN1YihwKSxuPW5ldyBUSFJFRS5MaW5lKCQoKG5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeSkuc2V0RnJvbVBvaW50cyhbdCxhXSkpLHIpO28uYWRkKG4pfSl9aWYoeXx8KHk9ZS5xdWVyeVNlbGVjdG9yKCIuczNkLWxhYmVscyIpKSx5KXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Yy5jbGFzc05hbWU9InMzZC1kaW0iLGMuaW5uZXJIVE1MPW4seS5hcHBlbmRDaGlsZChjKSxiLnB1c2goe2VsOmMscDp0LmNsb25lKCkuYWRkKGEpLm11bHRpcGx5U2NhbGFyKC41KX0pfX1mdW5jdGlvbiByZShlKXt2YXIgdD1NYXRoLnJvdW5kKDEyKmUpO3JldHVybiB0Pj0yND9NYXRoLmZsb29yKHQvMTIpKyImbmJzcDtmdCIrKHQlMTI/IiAiK3QlMTIrIiZuYnNwO2luIjoiIik6dCsiJm5ic3A7aW4ifWZ1bmN0aW9uIHNlKGUpe3ZhciB0PU1hdGgubWluKDQxLDEyKmUuaC00NCkqcixhPU1hdGgubWluKGUudyxlLmQpPDYuNTtyZXR1cm57dXBUb3A6dCx1cERlZXA6KGE/MjA6MjQpKnIsbG9Ub3A6Mixsb0RlZXA6KGE/MTg6MjApKnJ9fWZ1bmN0aW9uIGxlKGUsdCl7dmFyIGE9bmV3IFRIUkVFLk1lc2goJChuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSguMDM1LC4wMzUsZSwxMCkpLHQpO3JldHVybiBhLnJvdGF0aW9uLno9TWF0aC5QSS8yLGF9ZnVuY3Rpb24gZGUoZSl7dmFyIHQ9bmV3IFRIUkVFLkdyb3VwLGE9ZT9lLnRvbmU6bnVsbDtpZighZSl7dmFyIG49YWUoLjUsLjMzLC4wNSxaKHtjb2xvcjoiIzlhOWE5NiIsbWV0YWxuZXNzOi4zLHJvdWdobmVzczouNn0pLCExKTtyZXR1cm4gdC5hZGQobiksdC51c2VyRGF0YS53PS41LHR9dmFyIG89Wih7bWFwOlYoImJsYWNrIj09PWE/ImJsYWNrIjoidGhlcm1vIj09PWE/InRoZXJtbyI6ImFzcGVuIiwyLCExKSxyb3VnaG5lc3M6Ljh9KTtpZigicm91bmQiPT09ZS5raW5kKXt2YXIgaT0zLjUqcixzPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoaSxpLC4wNSwyMikpLG8pO3Mucm90YXRpb24ueD1NYXRoLlBJLzIsdC5hZGQocyk7Zm9yKHZhciBsPVooe2NvbG9yOiIjMTQxMjEwIixyb3VnaG5lc3M6MX0pLGQ9MDtkPDg7ZCsrKXt2YXIgaD1uZXcgVEhSRUUuTWVzaCgkKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KC4zNSpyLC4zNSpyLC4wNiw4KSksbCk7aC5yb3RhdGlvbi54PU1hdGguUEkvMixoLnBvc2l0aW9uLnNldChNYXRoLmNvcyhkLzgqTWF0aC5QSSoyKSppKi41NSxNYXRoLnNpbihkLzgqTWF0aC5QSSoyKSppKi41NSwuMDA2KSx0LmFkZChoKX10LnVzZXJEYXRhLnc9MippfWVsc2UgaWYoImhhdGNoIj09PWUua2luZCl7dmFyIHA9MTEqcixjPTUuMipyLHU9YWUocCxjLC4wNCxaKHtjb2xvcjoiIzE3MTMxMCIscm91Z2huZXNzOjF9KSwhMSk7dC5hZGQodSk7dmFyIHc9YWUocCsuMDgsYysuMDgsLjAzLG8pO3cucG9zaXRpb24uej0tLjAxNSx0LmFkZCh3KTt2YXIgbT1hZSguNTUqcCwuOCpjLC4wMzUsbyk7bS5wb3NpdGlvbi5zZXQoLjE2KnAsMCwuMDMpLHQuYWRkKG0pO3ZhciBmPW5ldyBUSFJFRS5NZXNoKCQobmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoLjM1KnIsLjM1KnIsLjA1LDEwKSksbyk7Zi5yb3RhdGlvbi54PU1hdGguUEkvMixmLnBvc2l0aW9uLnNldCguMTYqcCwwLC4wNiksdC5hZGQoZiksdC51c2VyRGF0YS53PXB9ZWxzZXt2YXIgdj01LjkqcixFPS42MjUsZz1hZSh2LEUsLjA0LFooe2NvbG9yOiIjMTcxMzEwIixyb3VnaG5lc3M6MX0pLCExKTt0LmFkZChnKTt2YXIgYj1hZSh2Ky4wOSwuNzE1LC4wMjgsbyk7Yi5wb3NpdGlvbi56PS0uMDE0LHQuYWRkKGIpO2Zvcih2YXIgeT0wO3k8NTt5Kyspe3ZhciBNPWFlKHYsLjA3NSwuMDMsbyk7TS5yb3RhdGlvbi54PS41LE0ucG9zaXRpb24uc2V0KDAsLUUvMisoeSsuNSkqKEUvNSksLjAyOCksdC5hZGQoTSl9dC51c2VyRGF0YS53PXZ9cmV0dXJuIHR9ZnVuY3Rpb24gaGUoZSx0LGEsbil7dmFyIG89TWF0aC5tYXgoLjQyLC40Mioobnx8MSkpLGk9bmV3IFRIUkVFLk1lc2goJChuZXcgVEhSRUUuUmluZ0dlb21ldHJ5KG8sbysuMTYsMzYpKSxuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe2NvbG9yOnMsdHJhbnNwYXJlbnQ6ITAsb3BhY2l0eTouNTUsc2lkZTpUSFJFRS5Eb3VibGVTaWRlfSkpO2kucm90YXRpb24ueD0tTWF0aC5QSS8yLGkucG9zaXRpb24ueT0uMTQsaS51c2VyRGF0YS5pc0hhbmRsZT0hMCxlLmFkZChpKTt2YXIgcj1uZXcgVEhSRUUuTWVzaCgkKG5ldyBUSFJFRS5DeWxpbmRlckdlb21ldHJ5KG8rLjM1LG8rLjM1LDYsMTApKSxuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe3Zpc2libGU6ITF9KSk7ci5wb3NpdGlvbi55PTMsci51c2VyRGF0YS5pc0hhbmRsZT0hMCxlLmFkZChyKSxlLnVzZXJEYXRhLmtpbmQ9dCxlLnVzZXJEYXRhLmxhYmVsPWEsZS51c2VyRGF0YS5yaW5nPWksUi5wdXNoKGUpfWZ1bmN0aW9uIHBlKGUsdCxhLG4sbyl7dmFyIGk9dCpfKG8sZSk7cmV0dXJue3dhbGw6ZSxhOmktYS8yLGI6aSthLzIsZGVlcDpufX1mdW5jdGlvbiBjZShlLHQpe3ZhciBhPVgoZSx0LndhbGwsdC5hL18oZSx0LndhbGwpLDApLG49WChlLHQud2FsbCx0LmIvXyhlLHQud2FsbCksMCksbz1YKGUsdC53YWxsLCh0LmErdC5iKS8yL18oZSx0LndhbGwpLHQuZGVlcCksaT1bYS54LG4ueCxvLnhdLHI9W2EueixuLnosby56XTtyZXR1cm57eDA6TWF0aC5taW4uYXBwbHkoMCxpKSx4MTpNYXRoLm1heC5hcHBseSgwLGkpLHowOk1hdGgubWluLmFwcGx5KDAsciksejE6TWF0aC5tYXguYXBwbHkoMCxyKX19ZnVuY3Rpb24gdWUoZSx0LGEpe3ZhciBuPWNlKGUsdCksbz1jZShlLGEpLGk9TWF0aC5tYXgobi54MC1vLngxLG8ueDAtbi54MSwwKSxyPU1hdGgubWF4KG4uejAtby56MSxvLnowLW4uejEsMCk7cmV0dXJuIDEyKk1hdGguc3FydChpKmkrcipyKX1mdW5jdGlvbiB3ZShlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1bXSxhPVtdLG49W10sbz1mdW5jdGlvbihlKXt0LmluZGV4T2YoZSk8MCYmdC5wdXNoKGUpfSxpPWZ1bmN0aW9uKGUpe2EuaW5kZXhPZihlKTwwJiZhLnB1c2goZSl9O1M9e307dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIF8oZSx0KX0sbD1wZSh1LmRvb3Iud2FsbCx1LmRvb3IudCxlLmRvb3IuZGltLncqcisuMiwuNCxlKSxkPXBlKHUuZG9vci53YWxsLHUuZG9vci50LGUuZG9vci5kaW0udypyKy4yLDEsZSk7aWYoay5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qud2FsbD09PWwud2FsbCYmTihbbC5hLGwuYl0sW3QuYSx0LmJdKT4uMDU/KG8oIlRoZSBiZW5jaGVzIHJ1biBhbG9uZyB0aGlzIHdhbGwgJm1kYXNoOyB0aGUgZG9vciBjYW4mcnNxdW87dCBvcGVuIGludG8gdGhlbS4gU2xpZGUgdGhlIGRvb3IgdG8gYSBjbGVhciB3YWxsLiIpLFMuZG9vcj0xKTp0LndhbGwhPT1sLndhbGwmJnVlKGUsZCx0KTw9LjUmJihvKCJUaGUgZG9vcndheSB3YWxrcyBzdHJhaWdodCBpbnRvIHRoZSBlbmQgb2YgYSBiZW5jaC4gU2xpZGUgdGhlIGRvb3IgY2xlYXIgb2YgdGhlIGJlbmNoIHJ1bi4iKSxTLmRvb3I9MSl9KSxQKXt2YXIgaD1wZShQLndhbGwsUC50LFAudyxQLmQsZSk7MTIqTWF0aC5taW4oaC5hLHMoaC53YWxsKS1oLmIpPDYmJihvKCJUaGUgaGVhdGVyIG5lZWRzIGF0IGxlYXN0IDYmbmJzcDtpbiBvZiBzaWRlIGNsZWFyYW5jZSAmbWRhc2g7IHNsaWRlIGl0IG91dCBvZiB0aGUgY29ybmVyLiBTaWRlIGNsZWFyYW5jZXMgcnVuIDEmZnJhYzE0OyZuZGFzaDs2Jm5ic3A7aW4gZGVwZW5kaW5nIG9uIHRoZSBtb2RlbCZyc3F1bztzIHJhdGluZyBwbGF0ZS4iKSxTLmhlYXRlcj0xKTt2YXIgcD0xZTk7ay5mb3JFYWNoKGZ1bmN0aW9uKHQpe3A9TWF0aC5taW4ocCx1ZShlLGgsdCkpfSkscDw9Mz8obygiVGhlIGhlYXRlciBpcyBhZ2FpbnN0IHRoZSBiZW5jaCAmbWRhc2g7IHRoZSBndWFyZCByYWlsIGFsb25lIGlzIG5vdCBjbGVhcmFuY2UuIFNsaWRlIGl0IGNsZWFyOyBldmVyeSBtYW51ZmFjdHVyZXIgc2V0cyBhIG1pbmltdW0gb2ZmIHRoZSByYXRpbmcgcGxhdGUuIiksUy5oZWF0ZXI9MSk6cDwyMD9pKE1hdGgucm91bmQocCkrIiZuYnNwO2luIGJldHdlZW4gdGhlIGhlYXRlciBhbmQgdGhlIGJlbmNoLiBXaGVyZSB0aGUgcm9vbSBhbGxvd3MgaXQsIHRoZSBtYW51YWxzIGtlZXAgYWJvdXQgPGI+MjAmbmJzcDtpbjwvYj4gaGVyZSAmbWRhc2g7IHlvdXIgbW9kZWwmcnNxdW87cyByYXRpbmcgcGxhdGUgaGFzIHRoZSBleGFjdCBmaWd1cmUuIik6ZS5oZWF0ZXImJmUuaGVhdGVyLndvb2QmJnA8MzYmJmkoIkEgd29vZC1idXJuaW5nIHN0b3ZlIHdhbnRzIG1vcmUgcm9vbSB0aGFuIGFuIGVsZWN0cmljIGhlYXRlciAmbWRhc2g7IE5GUEEmbmJzcDsyMTEmcnNxdW87cyB1bnNoaWVsZGVkIGZpZ3VyZSBpcyAzNiZuYnNwO2luIHRvIGNvbWJ1c3RpYmxlczsgdGhlIHN0b3ZlJnJzcXVvO3Mgb3duIHJhdGluZyBwbGF0ZSBnb3Zlcm5zLiIpO3ZhciBjPXVlKGUsaCxsKTtjPDY/KG8oIlRoZSBkb29yd2F5IG9wZW5zIHN0cmFpZ2h0IG9udG8gdGhlIGhlYXRlci4gS2VlcCB0aGUgb3BlbmluZyBjbGVhciBvZiB0aGUgZ3VhcmQuIiksUy5oZWF0ZXI9MSxTLmRvb3I9MSk6YzwyMCYmaSgiVGlnaHQgd2Fsay1pbiBwYXN0IHRoZSBoZWF0ZXIgKCIrTWF0aC5yb3VuZChjKSsiJm5ic3A7aW4pLiBNb3N0IGxheW91dHMga2VlcCBhYm91dCAyNCZuYnNwO2luIGhlcmUuIiksZS53aW5zLmZvckVhY2goZnVuY3Rpb24odCxhKXt2YXIgbj1wZSh1LndpbnNbYV0ud2FsbCx1LndpbnNbYV0udCx0LmRpbS53KnIrLjE1LC4zLGUpO3VlKGUsaCxuKTw4JiYoaSgiV2luZG93ICIrKGErMSkrIiBzaXRzIHJpZ2h0IGF0IHRoZSBoZWF0ZXIuIFRlbXBlcmVkIGdsYXNzIHRha2VzIHRoZSBoZWF0LCBidXQgbW9zdCBidWlsZHMga2VlcCBhIGJvYXJkJnJzcXVvO3Mgd2lkdGggYmV0d2VlbiB0aGVtLiIpLFNbIndpbiIrYV09MSl9KX1pZihlLndpbnMuZm9yRWFjaChmdW5jdGlvbih0LGEpe3ZhciBuPXBlKHUud2luc1thXS53YWxsLHUud2luc1thXS50LHQuZGltLncqcisuMTUsLjMsZSk7bi53YWxsPT09bC53YWxsJiZOKFtuLmEsbi5iXSxbbC5hLGwuYl0pPjAmJihvKCJXaW5kb3cgIisoYSsxKSsiIG92ZXJsYXBzIHRoZSBkb29yIGZyYW1lICZtZGFzaDsgc2xpZGUgb25lIG9mIHRoZW0gb3Zlci4iKSxTWyJ3aW4iK2FdPTEsUy5kb29yPTEpLDEyKk1hdGgubWluKG4uYSxzKG4ud2FsbCktbi5iKTw0JiYobygiV2luZG93ICIrKGErMSkrIiBydW5zIGludG8gdGhlIGNvcm5lciBmcmFtaW5nICZtZGFzaDsgZ2l2ZSBpdCBhdCBsZWFzdCA0Jm5ic3A7aW4uIiksU1sid2luIithXT0xKSxlLndpbnMuZm9yRWFjaChmdW5jdGlvbih0LGkpe2lmKCEoaTw9YSkpe3ZhciBzPXBlKHUud2luc1tpXS53YWxsLHUud2luc1tpXS50LHQuZGltLncqcisuMTUsLjMsZSk7bi53YWxsPT09cy53YWxsJiZOKFtuLmEsbi5iXSxbcy5hLHMuYl0pPi0uMTUmJihvKCJXaW5kb3dzICIrKGErMSkrIiBhbmQgIisoaSsxKSsiIG92ZXJsYXAgJm1kYXNoOyBsZWF2ZSBhIHN0dWQmcnNxdW87cyB3aWR0aCBiZXR3ZWVuIHRoZW0uIiksU1sid2luIithXT0xLFNbIndpbiIraV09MSl9fSl9KSxlLmxpZ2h0JiYoInNhbHR3YWxsIj09PWUubGlnaHQua3x8InNhbHRMIj09PWUubGlnaHQuaykmJnUuc2FsdCl7dmFyIHc9InNhbHR3YWxsIj09PWUubGlnaHQuaz80LjE6NC4yLG09cGUodS5zYWx0LndhbGwsdS5zYWx0LnQsdywuNDUsZSk7aWYobS53YWxsPT09bC53YWxsJiZOKFttLmEsbS5iXSxbbC5hLGwuYl0pPjAmJihvKCJUaGUgc2FsdCBmZWF0dXJlIG92ZXJsYXBzIHRoZSBkb29yIGZyYW1lICZtZGFzaDsgc2xpZGUgb25lIG9mIHRoZW0gb3Zlci4iKSxTLnNhbHQ9MSksUCl7dmFyIGY9cGUoUC53YWxsLFAudCxQLncsUC5kLGUpO3VlKGUsbSxmKTw2JiZpKCJUaGUgc2FsdCBmZWF0dXJlIGlzIHRpZ2h0IGFnYWluc3QgdGhlIGhlYXRlci4gVGhlIHNhbHQgdGFrZXMgdGhlIGhlYXQsIGJ1dCBrZWVwIHRoZSBoZWF0ZXImcnNxdW87cyBvd24gY2xlYXJhbmNlIG9mZiBpdHMgcmF0aW5nIHBsYXRlLiIpfX1pZihlLmZlYXQmJlAmJnUuZmVhdD09PVAud2FsbCYmaSgiVGhlIGQmZWFjdXRlO2NvciBwYW5lbHMgc2l0IG9uIHRoZSBoZWF0ZXImcnNxdW87cyB3YWxsLiBLZWVwIHRoZSBoZWF0ZXImcnNxdW87cyBsaXN0ZWQgY2xlYXJhbmNlIHRvIGNvbWJ1c3RpYmxlcyAmbWRhc2g7IG9yIG1vdmUgdGhlIGZlYXR1cmUgdG8gYW5vdGhlciB3YWxsIGJlbG93LiIpLFAmJkIubGVuZ3RoKXt2YXIgdj1wZShQLndhbGwsUC50LFAudyxQLmQsZSksRT1CWzBdLGc9QlsxXTtpZihFKXt2YXIgYj1wZShFLndhbGwsRS50LE1hdGgubWF4KEUudywuNCksLjMsZSkseT11ZShlLGIsdik7eT4yNCYmKGkoIlRoZSBzdXBwbHkgdmVudCBpcyAiK01hdGgucm91bmQoeSkrIiZuYnNwO2luIGZyb20gdGhlIGhlYXRlci4gSGFydmlhIHB1dHMgaXQgPGI+dW5kZXIgb3IgYmVzaWRlIHRoZSBoZWF0ZXI8L2I+ICZtZGFzaDsgc2xpZGUgaXQgYmFjay4iKSxTLnZlbnQwPTEpfWlmKGcpe3ZhciBNPXBlKGcud2FsbCxnLnQsTWF0aC5tYXgoZy53LC40KSwuMyxlKSxUPXVlKGUsTSx2KTtUPDM2JiZpKCJUaGUgZXhoYXVzdCB2ZW50IGlzIG9ubHkgIitNYXRoLnJvdW5kKFQpKyImbmJzcDtpbiBmcm9tIHRoZSBoZWF0ZXIuIEl0IHB1bGxzIGJlc3QgPGI+YXMgZmFyIGZyb20gdGhlIGhlYXRlciBhcyBwb3NzaWJsZTwvYj4sIGxvdyB1bmRlciB0aGUgYmVuY2hlcy4iKSxFJiZnLndhbGw9PT1FLndhbGwmJk1hdGguYWJzKGcudC1FLnQpKl8oZSxnLndhbGwpPDImJmkoIlN1cHBseSBhbmQgZXhoYXVzdCBhcmUgYWxtb3N0IG9uIHRvcCBvZiBlYWNoIG90aGVyICZtZGFzaDsgdGhlIGFpciB3aWxsIHNob3J0LWNpcmN1aXQgaW5zdGVhZCBvZiBzd2VlcGluZyB0aGUgcm9vbS4iKX1CLmZvckVhY2goZnVuY3Rpb24odCxhKXtpZih0KXt2YXIgbj1wZSh0LndhbGwsdC50LE1hdGgubWF4KHQudywuNCksLjIsZSksaT1wZSh1LmRvb3Iud2FsbCx1LmRvb3IudCxlLmRvb3IuZGltLncqcisuMiwuMixlKTtuLndhbGw9PT1pLndhbGwmJk4oW24uYSxuLmJdLFtpLmEsaS5iXSk+MCYmKG8oIlRoZSAiK1sic3VwcGx5IiwiZXhoYXVzdCIsImRyeWluZyJdW2FdKyIgdmVudCBsYW5kcyBvbiB0aGUgZG9vciBmcmFtZSAmbWRhc2g7IHNsaWRlIGl0IG9mZiB0aGUgb3BlbmluZy4iKSxTWyJ2ZW50IithXT0xKX19KX1pZihuLnB1c2goIlRoZSBkb29yIGlzIGRyYXduIHN3aW5naW5nIDxiPm91dHdhcmQ8L2I+IHdpdGggbm8gbGF0Y2ggJm1kYXNoOyBldmVyeSBzYXVuYSBkb29yIG1hbnVmYWN0dXJlciByZXF1aXJlcyBpdC4iKSxuLnB1c2goIlRoZSB0aHJlZSB2ZW50IG9wZW5pbmdzIGFyZSB5b3VycyB0byBwbGFjZSAmbWRhc2g7IGRyYWcgdGhlbS4gSGVpZ2h0cyBhcmUgaGVsZCBmb3IgeW91OiBzdXBwbHkgYW5kIGV4aGF1c3QgbG93LCBkcnlpbmcgdmVudCBoaWdoLCBwZXIgSGFydmlhJnJzcXVvO3MgZ3Jhdml0eSBsYXlvdXQuIFRoZSBkb29yJnJzcXVvO3MgdW5kZXJjdXQgaXMgdGhlIHNlY29uZCBzdXBwbHkuIiksbi5wdXNoKCJUaGUgaGlnaC1saW1pdCBzZW5zb3IgaXMgZHJhd24gYWJvdmUgdGhlIGhlYXRlciB3aXRoaW4gNiZuYnNwO2luIG9mIHRoZSBjZWlsaW5nIChJUkMgTTE5MDIuMyksIGFuZCB0aGUgaGVhdGVyIGd1YXJkIGlzIGluY2x1ZGVkIGluIHlvdXIgY2VkYXIgcGFja2FnZS4iKSxlLmxpZ2h0JiYic2FsdHdhbGwiPT09ZS5saWdodC5rJiZ3aW5kb3cuX19zM2RTYWx0TW9kZWwpe3ZhciBSPXdpbmRvdy5fX3MzZFNhbHRNb2RlbDtuLnB1c2goIlRoZSBzYWx0IHdhbGwgaXMgZHJhd24gYXQgaXRzIHJlYWwgc2l6ZSAmbWRhc2g7IHRoZSA8Yj4iK1JbMF0rIiZQcmltZTsgJnRpbWVzOyA0OCZQcmltZTsgdW5pdDwvYj4gKCIrKCIiK1JbMV0pLnJlcGxhY2UoIi43NSIsIiZmcmFjMzQ7IikucmVwbGFjZSgiLjEyNSIsIiYjODUzOTsiKS5yZXBsYWNlKCIuNSIsIiZmcmFjMTI7IikrIiZuYnNwO2luIG92ZXJhbGwsIDQmIzg1Mzk7Jm5ic3A7aW4gZGVlcCwgNCZ0aW1lczs4Jm5ic3A7aW4gYnJpY2tzKSwgdGhlIHRhbGxlc3QgdGhhdCBjbGVhcnMgeW91ciBjZWlsaW5nLiBJdCB3ZWlnaHMgNDc2Jm5kYXNoOzY2NiZuYnNwO2xiICZtZGFzaDsgaXQgc3RhbmRzIG9uIHRoZSBmbG9vciBhZ2FpbnN0IHRoZSB3YWxsLiIpfXJldHVybiA4PT09ZS5oJiZuLnB1c2goIldpdGggdGhlIDgmbmJzcDtmdCBjZWlsaW5nIHRoZSB0b3AgYmVuY2ggaXMgZHJhd24gYXQgNDEmbmJzcDtpbiAmbWRhc2g7IGluc2lkZSBIYXJ2aWEmcnNxdW87cyA0MyZuZGFzaDs0NyZuYnNwO2luLWJlbG93LXRoZS1jZWlsaW5nIGJhbmQgaXMgd2FybWVyOyBhc2sgdXMgYWJvdXQgYSB0aGlyZCB0aWVyLiIpLHtzdG9wOnQsd2FybjphLGRyYXduOm59fShlKSxhPSIiO3Quc3RvcC5sZW5ndGgmJihhKz0nPGRpdiBjbGFzcz0ic2ItaXNzdWUgc2ItaXNzdWUtLXN0b3AiPjxiPlRoaXMgbGF5b3V0IGJyZWFrcyBhIGJ1aWxkIHJ1bGU8L2I+PHVsPicrdC5zdG9wLm1hcChmdW5jdGlvbihlKXtyZXR1cm4iPGxpPiIrZSsiPC9saT4ifSkuam9pbigiIikrIjwvdWw+PC9kaXY+IiksdC53YXJuLmxlbmd0aCYmKGErPSc8ZGl2IGNsYXNzPSJzYi1pc3N1ZSI+PGI+V29ydGggYSBsb29rPC9iPjx1bD4nK3Qud2Fybi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+In0pLmpvaW4oIiIpKyI8L3VsPjwvZGl2PiIpLGErPSc8ZGl2IGNsYXNzPSJzYi1pc3N1ZSBzM2QtZHJhd24iPjxiPkRyYXduIGZvciB5b3U8L2I+PHVsPicrdC5kcmF3bi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIjxsaT4iK2UrIjwvbGk+In0pLmpvaW4oIiIpKyI8L3VsPjwvZGl2PiIsYSs9JzxwIGNsYXNzPSJzYi1saWFiIj5UaGlzIHByZXZpZXcgaXMgYSBwbGFubmluZyBza2V0Y2gsIG5vdCBhbiBlbmdpbmVlcmVkIGRyYXdpbmcuIFlvdXIgcm9vbSwgeW91ciBpbnN0YWxsZXIgYW5kIHlvdXIgaW5zcGVjdG9yIGhhdmUgdGhlIGZpbmFsIHNheSAmbWRhc2g7IGNsZWFyYW5jZXMgY29tZSBvZmYgZWFjaCBwcm9kdWN0JnJzcXVvO3MgcmF0aW5nIHBsYXRlLjwvcD4nLGQuaW5uZXJIVE1MPWEsUi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PVNbZS51c2VyRGF0YS5raW5kXTtlLnVzZXJEYXRhLnJpbmcubWF0ZXJpYWwuY29sb3Iuc2V0KHQ/IiM5QjNCMzMiOnMpLGUudXNlckRhdGEucmluZy5tYXRlcmlhbC5vcGFjaXR5PXQ/Ljg1Oi41fSksdj0hMH1mdW5jdGlvbiBtZShlKXtyZXR1cm4gTWF0aC5yb3VuZChlKSsiJm5ic3A7aW4ifWZ1bmN0aW9uIGZlKCl7aWYocmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZlKSx0JiYwPT09dC5kb21FbGVtZW50LndpZHRoJiZsLmNsaWVudFdpZHRoPjAmJnRlKCksdnx8eCl7dmFyIGU9ejtpZihlKXtuLnBvc2l0aW9uLnNldChNYXRoLnNpbihNLmF6KSpNYXRoLnNpbihNLnBvbCkqTS5yLE1hdGguY29zKE0ucG9sKSpNLnIrTS50eSxNYXRoLmNvcyhNLmF6KSpNYXRoLnNpbihNLnBvbCkqTS5yKSxuLmxvb2tBdCgwLE0udHksMCksVC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBhPTE7aWYoImNlaWwiPT09dC53KWE9bi5wb3NpdGlvbi55PmUuaC0uND8wOjE7ZWxzZXt2YXIgbz1YKGUsdC53LC41LDApO2E9KG4ucG9zaXRpb24ueC1vLngpKm8ubngrKG4ucG9zaXRpb24uei1vLnopKm8ubno+MD8wOjF9dC5tYXQub3BhY2l0eSs9LjMqKGEtdC5tYXQub3BhY2l0eSksdC5fc2V0dGxpbmc9TWF0aC5hYnModC5tYXQub3BhY2l0eS1hKT4uMDEyLHQuX3NldHRsaW5nJiYodj0hMCksdC5tYXQuZGVwdGhXcml0ZT10Lm1hdC5vcGFjaXR5Pi41LHQuc2xhYi52aXNpYmxlPXQubWF0Lm9wYWNpdHk+LjAzfSk7dmFyIG89ITE7aWYoVC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UuX3NldHRsaW5nJiYobz0hMCl9KSx0LnJlbmRlcihhLG4pLGIubGVuZ3RoKXt2YXIgaT1sLmNsaWVudFdpZHRoLHI9bC5jbGllbnRIZWlnaHQ7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PWUucC5jbG9uZSgpLnByb2plY3Qobik7ZS5lbC5zdHlsZS5sZWZ0PSguNSp0LngrLjUpKmkrInB4IixlLmVsLnN0eWxlLnRvcD0oLjUqLXQueSsuNSkqcisicHgiLGUuZWwuc3R5bGUuZGlzcGxheT10Lno8MT8iIjoibm9uZSJ9KX14fHxvfHwodj0hMSl9ZWxzZSB2PSExfX1mdW5jdGlvbiB2ZShlKXtjbGVhclRpbWVvdXQoRiksRj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7KHo9ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuU0IsdD17bGl2ZTohIWV9LGE9ZSYmZS5zaXplJiZlLnNpemUoKTt0LnBsYWNlaG9sZGVyPSFhLHQudz1hP2Eudzo2LHQuZD1hP2EuZDo2LHQuaD1lJiZlLmhlaWdodD9lLmhlaWdodCgpOjc7dmFyIG49ZSYmZS5jaG9zZW4oImxheW91dCIpO3QubGF5b3V0PW4/L2JvdGgvaS50ZXN0KG4ubik/Mjovb25lL2kudGVzdChuLm4pPzE6MDowLHQudG9uZT1mdW5jdGlvbihlKXtpZighZXx8ZS5ub25lKXJldHVybiJjZWRhciI7dmFyIHQ9ZS5ufHwiIjtyZXR1cm4vTWlkbmlnaHQvaS50ZXN0KHQpPyJibGFjayI6L1RoZXJtby9pLnRlc3QodCk/InRoZXJtbyI6ImNlZGFyIn0oZSYmZS5jaG9zZW4oImJlbmNoIikpLHQuZmVhdD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD1lLm58fCIiO3JldHVybi9IaXZlIEFzcGVuL2kudGVzdCh0KT97cGF0OiJoZXgiLHRvbmU6ImFzcGVuIn06L0hpdmUgVGhlcm1vL2kudGVzdCh0KT97cGF0OiJoZXgiLHRvbmU6InRoZXJtbyJ9Oi9Nb2Rlcm4gVGhlcm1vL2kudGVzdCh0KT97cGF0OiJpaGV4Iix0b25lOiJ0aGVybW8ifTovTW9kZXJuIEJsYWNrL2kudGVzdCh0KT97cGF0OiJpaGV4Iix0b25lOiJibGFjayJ9Oi9DdWJpc3QvaS50ZXN0KHQpP3twYXQ6InNxIix0b25lOiJibGFjayJ9Om51bGx9KGUmJmUuY2hvc2VuKCJ3YWxsIikpO3ZhciBvPWUmJmUuY2hvc2VuKCJkb29yIik7cmV0dXJuIHQuZG9vcj1vP3tkaW06WShvLm4pfHx7dzoyNCxoOjczfSxnbGFzczohL0Zpci9pLnRlc3Qoby5uKSx0aW50Oi9UaW50ZWQvaS50ZXN0KG8ubil9OntkaW06e3c6MjQsaDo3M30sZ2xhc3M6ITAsdGludDohMSxhc3N1bWVkOiEwfSx0LndpbnM9W10sZSYmZS5zdGVwKCJ3aW5kb3ciKS5vcHRzLmZvckVhY2goZnVuY3Rpb24oYSxuKXtmb3IodmFyIG89ZS5xdHlbIndpbmRvdyIrbl18fDAsaT0wO2k8byYmdC53aW5zLmxlbmd0aDw0O2krKyl0LndpbnMucHVzaCh7ZGltOlkoYS5uKXx8e3c6MTYsaDozMH0sdGludDovVGludGVkL2kudGVzdChhLm4pfSl9KSx0LmhlYXRlcj1mdW5jdGlvbihlKXtpZighZXx8ZS5ub25lKXJldHVybiBudWxsO3ZhciB0PWUubnx8IiIsYT17bmFtZTp0LGt3OmUua3d8fDYsd29vZDohIWUud29vZCxtb3VudDoiZmxvb3IiLHNoYXBlOiJib3gifTtyZXR1cm4vQ2lsaW5kcm8vaS50ZXN0KHQpP2Euc2hhcGU9ImN5bCI6L0tJUHxUaGUgV2FsbC9pLnRlc3QodCk/KGEubW91bnQ9IndhbGwiLGEuc2hhcGU9ImJveCIpOi9EUk9QL2kudGVzdCh0KT8oYS5tb3VudD0id2FsbCIsYS5zaGFwZT0iZHJvcCIpOi9DTElGRi9pLnRlc3QodCk/YS5zaGFwZT0idG93ZXIiOi9TVEVFTC9pLnRlc3QodCk/YS5zaGFwZT0iY3lsIjovVmlydGEvaS50ZXN0KHQpP2Euc2hhcGU9ImJveCI6L0hJVkUgRmxvdy9pLnRlc3QodCkmJihhLnNoYXBlPSJzdG92ZSIsYS53b29kPSEwKSxhfShlJiZlLmNob3NlbigiaGVhdGVyIikpLHQubGlnaHQ9ZnVuY3Rpb24oZSl7aWYoIWV8fGUubm9uZSlyZXR1cm4gbnVsbDt2YXIgdD1lLm58fCIiO3JldHVybi9MRUQvaS50ZXN0KHQpP3trOiJsZWQiLHpvbmVzOi9kdWFsL2kudGVzdCh0KT8yOjF9Oi9OZW9uL2kudGVzdCh0KT97azoibGVkIix6b25lczovdGhyZWUvaS50ZXN0KHQpPzM6L2R1YWwvaS50ZXN0KHQpPzI6MX06L1NhbHQgV2FsbC9pLnRlc3QodCk/e2s6InNhbHR3YWxsIn06L1NhbHQvaS50ZXN0KHQpP3trOi9MYXJnZS9pLnRlc3QodCk/InNhbHRMIjoic2FsdFMifTp7azoibGVkIix6b25lczoxfX0oZSYmZS5jaG9zZW4oImxpZ2h0IikpLHQucmVzdD0hKCFlfHwhZS5jaG9zZW4oInJlc3QiKSksdH0oKSkucGxhY2Vob2xkZXI/Yy5zdHlsZS5kaXNwbGF5PSIiOmMuc3R5bGUuZGlzcGxheT0ibm9uZSIsbmUoeiksZnVuY3Rpb24oZSl7dmFyIHQ9JzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iczNkLWNoaXAiIGRhdGEtYT0icmVzZXQiPlJlc2V0IGxheW91dDwvYnV0dG9uPic7dCs9JzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iczNkLWNoaXAnKyhnPyIgaXMtb24iOiIiKSsnIiBkYXRhLWE9Im1lYXMiPk1lYXN1cmVtZW50czwvYnV0dG9uPicsZS5sYXlvdXQ+MCYmKHQrPSc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InMzZC1jaGlwIiBkYXRhLWE9ImZsaXAiPkZsaXAgYmVuY2ggY29ybmVyPC9idXR0b24+Jyk7ZS5mZWF0JiYodCs9JzxzcGFuIGNsYXNzPSJzM2QtY2hzZXAiPkZlYXR1cmUgd2FsbDo8L3NwYW4+JyxbIkJhY2siLCJSaWdodCIsIkZyb250IiwiTGVmdCJdLmZvckVhY2goZnVuY3Rpb24oZSxhKXt0Kz0nPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJzM2QtY2hpcCcrKHUuZmVhdD09PWE/IiBpcy1vbiI6IiIpKyciIGRhdGEtYT0iZmVhdCIgZGF0YS13PSInK2ErJyI+JytlKyI8L2J1dHRvbj4ifSkpO3AuaW5uZXJIVE1MPXR9KHopLGZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LlNCO2lmKCFlfHwhQSlyZXR1cm47dmFyIHQ9W107aWYoW1sic2l6ZSIsIlJvb20gcGFja2FnZSJdLFsiYmVuY2giLCJCZW5jaCBtYXRlcmlhbCJdLFsid2FsbCIsIkZlYXR1cmUgd2FsbCJdLFsiZG9vciIsIkRvb3IiXSxbImhlYXRlciIsIkhlYXRlciJdLFsiY29udHJvbCIsIkNvbnRyb2wiXSxbImxpZ2h0IiwiTGlnaHRpbmciXV0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgbj1lLmNob3NlbihhWzBdKTtuJiYhbi5ub25lJiZuLm4mJnQucHVzaChbYVsxXSxuXSl9KSxlLnN0ZXApe2Uuc3RlcCgid2luZG93Iikub3B0cy5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7dmFyIG89ZS5xdHlbIndpbmRvdyIrbl18fDA7bz4wJiZ0LnB1c2goWyJXaW5kb3ciKyhvPjE/IiDDlyIrbzoiIiksYV0pfSl9QS5pbm5lckhUTUw9dC5tYXAoZnVuY3Rpb24odCl7dmFyIGE9dFsxXSxuPWUuY2FjaGUmJmUuY2FjaGVbYS5oXSxvPW4mJihuLmZlYXR1cmVkX2ltYWdlfHxuLmltYWdlcyYmbi5pbWFnZXNbMF0pfHxhLml8fCIiO3JldHVybic8c3BhbiBjbGFzcz0iczNkLXBhcnQiPicrKG8/JzxpbWcgc3JjPSInK28rJyIgYWx0PSIiIGxvYWRpbmc9ImxhenkiIG9uZXJyb3I9InRoaXMuc3R5bGUuZGlzcGxheT1cJ25vbmVcJyI+JzoiIikrIjxzcGFuPjxlbT4iK3RbMF0rIjwvZW0+IithLm4rIjwvc3Bhbj48L3NwYW4+In0pLmpvaW4oIiIpLEEucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PXQubGVuZ3RoPyIiOiJub25lIn0oKSx3ZSh6KX0sZT8wOjEyMCl9fSgpOw==