diff --git a/index.html b/index.html new file mode 100644 index 0000000..c6a6bd0 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgo8dGl0bGU+VG93ZXIgRGVmZW5zZSAtIEhhcmQgTW9kZTwvdGl0bGU+CjwhLS0gTUFSS0VSOnRkLWdhbWUtdjMtYm9zcy0yMDI2LTA0LTI4IC0tPgo8c3R5bGU+CiAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQogIGJvZHkgeyBiYWNrZ3JvdW5kOiMxYTFhMmU7IGNvbG9yOiNlZWU7IGZvbnQtZmFtaWx5OidTZWdvZSBVSScsc2Fucy1zZXJpZjsgZGlzcGxheTpmbGV4OyBmbGV4LWRpcmVjdGlvbjpjb2x1bW47IGFsaWduLWl0ZW1zOmNlbnRlcjsgbWluLWhlaWdodDoxMDB2aDsgcGFkZGluZzoyMHB4OyB9CiAgaDEgeyBtYXJnaW4tYm90dG9tOjZweDsgY29sb3I6I2U5NDU2MDsgfQogICNib3NzLWJhbm5lciB7IGRpc3BsYXk6bm9uZTsgYmFja2dyb3VuZDojN2MyZmEwOyBjb2xvcjojZmZmOyBwYWRkaW5nOjVweCAyMHB4OyBib3JkZXItcmFkaXVzOjhweDsgZm9udC1zaXplOjEzcHg7IGZvbnQtd2VpZ2h0OmJvbGQ7IGxldHRlci1zcGFjaW5nOjJweDsgbWFyZ2luLWJvdHRvbTo2cHg7IGFuaW1hdGlvbjpwdWxzZSAwLjhzIGluZmluaXRlOyB9CiAgQGtleWZyYW1lcyBwdWxzZSB7IDAlLDEwMCV7b3BhY2l0eToxfSA1MCV7b3BhY2l0eTowLjV9IH0KICAjdWkgeyBkaXNwbGF5OmZsZXg7IGdhcDoxNnB4OyBtYXJnaW4tYm90dG9tOjhweDsgZm9udC1zaXplOjE3cHg7IGZsZXgtd3JhcDp3cmFwOyBqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOyB9CiAgI3VpIHNwYW4geyBiYWNrZ3JvdW5kOiMxNjIxM2U7IHBhZGRpbmc6N3B4IDE0cHg7IGJvcmRlci1yYWRpdXM6OHB4OyB9CiAgI2NhbnZhcyB7IGJvcmRlcjoycHggc29saWQgIzBmMzQ2MDsgYm9yZGVyLXJhZGl1czo4cHg7IGN1cnNvcjpjcm9zc2hhaXI7IH0KICAjdG93ZXItc2VsZWN0IHsgZGlzcGxheTpmbGV4OyBnYXA6MTBweDsgbWFyZ2luLXRvcDoxMHB4OyBmbGV4LXdyYXA6d3JhcDsganVzdGlmeS1jb250ZW50OmNlbnRlcjsgfQogIC50b3dlci1idG4geyBwYWRkaW5nOjlweCAxOHB4OyBib3JkZXI6MnB4IHNvbGlkICMwZjM0NjA7IGJvcmRlci1yYWRpdXM6OHB4OyBiYWNrZ3JvdW5kOiMxNjIxM2U7IGNvbG9yOiNlZWU7IGN1cnNvcjpwb2ludGVyOyBmb250LXNpemU6MTNweDsgdHJhbnNpdGlvbjphbGwgMC4yczsgfQogIC50b3dlci1idG46aG92ZXIgeyBiYWNrZ3JvdW5kOiMwZjM0NjA7IH0KICAudG93ZXItYnRuLnNlbGVjdGVkIHsgYm9yZGVyLWNvbG9yOiNlOTQ1NjA7IGJhY2tncm91bmQ6I2U5NDU2MDsgfQogICNnYW1lLW92ZXIgeyBkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NTAlOyBsZWZ0OjUwJTsgdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpOyBiYWNrZ3JvdW5kOiMxNjIxM2U7IHBhZGRpbmc6NDBweDsgYm9yZGVyLXJhZGl1czoxNnB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyOjNweCBzb2xpZCAjZTk0NTYwOyB6LWluZGV4OjEwOyB9CiAgI2dhbWUtb3ZlciBoMiB7IGNvbG9yOiNlOTQ1NjA7IG1hcmdpbi1ib3R0b206MjBweDsgfQogICNnYW1lLW92ZXIgYnV0dG9uIHsgcGFkZGluZzoxMnB4IDMwcHg7IGZvbnQtc2l6ZToxOHB4OyBiYWNrZ3JvdW5kOiNlOTQ1NjA7IGNvbG9yOndoaXRlOyBib3JkZXI6bm9uZTsgYm9yZGVyLXJhZGl1czo4cHg7IGN1cnNvcjpwb2ludGVyOyB9Cjwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CjxoMT5Ub3dlciBEZWZlbnNlIC0gSGFyZCBNb2RlPC9oMT4KPGRpdiBpZD0iYm9zcy1iYW5uZXIiPiEhIEJPU1MgV0FWRSAhITwvZGl2Pgo8ZGl2IGlkPSJ1aSI+CiAgPHNwYW4+R29sZDogPGIgaWQ9ImdvbGQiPjEwMDwvYj48L3NwYW4+CiAgPHNwYW4+TGl2ZXM6IDxiIGlkPSJsaXZlcyI+MjA8L2I+PC9zcGFuPgogIDxzcGFuPldhdmU6IDxiIGlkPSJ3YXZlIj4xPC9iPjwvc3Bhbj4KICA8c3Bhbj5TY29yZTogPGIgaWQ9InNjb3JlIj4wPC9iPjwvc3Bhbj4KPC9kaXY+CjxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvY2FudmFzPgo8ZGl2IGlkPSJ0b3dlci1zZWxlY3QiPgogIDxidXR0b24gY2xhc3M9InRvd2VyLWJ0biBzZWxlY3RlZCIgZGF0YS10eXBlPSJiYXNpYyI+QmFzaWMgKDYwZyk8L2J1dHRvbj4KICA8YnV0dG9uIGNsYXNzPSJ0b3dlci1idG4iIGRhdGEtdHlwZT0ic25pcGVyIj5TbmlwZXIgKDExMGcpPC9idXR0b24+CiAgPGJ1dHRvbiBjbGFzcz0idG93ZXItYnRuIiBkYXRhLXR5cGU9InJhcGlkIj5SYXBpZCAoODBnKTwvYnV0dG9uPgogIDxidXR0b24gY2xhc3M9InRvd2VyLWJ0biIgZGF0YS10eXBlPSJzbG93Ij5TbG93ICg2NWcpPC9idXR0b24+CjwvZGl2Pgo8ZGl2IGlkPSJnYW1lLW92ZXIiPjxoMj5HYW1lIE92ZXIhPC9oMj48cD5TdXJ2aXZlZCA8YiBpZD0iZmluYWwtd2F2ZSI+MTwvYj4gd2F2ZXMgJm5ic3A7fCZuYnNwOyBTY29yZTogPGIgaWQ9ImZpbmFsLXNjb3JlIj4wPC9iPjwvcD48YnI+PGJ1dHRvbiBvbmNsaWNrPSJsb2NhdGlvbi5yZWxvYWQoKSI+VHJ5IEFnYWluPC9idXR0b24+PC9kaXY+CjxzY3JpcHQ+CmNvbnN0IGNhbnZhcz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJyksY3R4PWNhbnZhcy5nZXRDb250ZXh0KCcyZCcpOwpjb25zdCBDRUxMPTQwLENPTFM9Y2FudmFzLndpZHRoL0NFTEwsUk9XUz1jYW52YXMuaGVpZ2h0L0NFTEw7CmxldCBnb2xkPTEwMCxsaXZlcz0yMCx3YXZlPTEsc2NvcmU9MCxzZWxlY3RlZFRvd2VyPSdiYXNpYycsZ2FtZU92ZXI9ZmFsc2U7CmxldCBlbmVtaWVzPVtdLHRvd2Vycz1bXSxwcm9qZWN0aWxlcz1bXSxwYXJ0aWNsZXM9W107CmxldCB3YXZlVGltZXI9MCx3YXZlUXVldWU9W10sZW5lbWllc1NwYXduZWQ9MCxzcGF3blRpbWVyPTAsYW5ub3VuY2U9bnVsbDsKY29uc3QgcGF0aD1be3g6MCx5OjJ9LHt4OjUseToyfSx7eDo1LHk6N30se3g6MTAseTo3fSx7eDoxMCx5OjN9LHt4OjE1LHk6M30se3g6MTUseToxMH0se3g6MTkseToxMH1dOwpjb25zdCBURD17CiAgYmFzaWM6ICB7Y29zdDo2MCwgcmFuZ2U6MTAwLGRhbWFnZToxNSxmaXJlUmF0ZToxMDAwLGNvbG9yOicjNGVjY2EzJyxwYzonIzRlY2NhMycscHM6NX0sCiAgc25pcGVyOiB7Y29zdDoxMTAscmFuZ2U6MjIwLGRhbWFnZTo1NSxmaXJlUmF0ZToyNjAwLGNvbG9yOicjZTk0NTYwJyxwYzonI2U5NDU2MCcscHM6OX0sCiAgcmFwaWQ6ICB7Y29zdDo4MCwgcmFuZ2U6ODUsIGRhbWFnZTo3LCBmaXJlUmF0ZToyNDAsIGNvbG9yOicjZjdiNzMxJyxwYzonI2Y3YjczMScscHM6Nn0sCiAgc2xvdzogICB7Y29zdDo2NSwgcmFuZ2U6OTUsIGRhbWFnZTo5LCBmaXJlUmF0ZToxNzAwLGNvbG9yOicjNDVhYWYyJyxwYzonIzQ1YWFmMicscHM6NCxzbG93OjAuNH0KfTsKLy8gaG09aHAgbXVsdCwgc209c3BlZWQgbXVsdCwgbGQ9bGl2ZXMgbG9zdCBvbiBsZWFrCmNvbnN0IEVEPXsKICBiYXNpYzogICB7aG06MS4wLHNtOjEuMCwgcjoxMixjOicjZmY2YjZiJywgICAgICAgICAgICAgbGQ6MX0sCiAgZmFzdDogICAge2htOjAuNixzbToxLjc1LHI6OSwgYzonIzAwZTVmZicsICAgICAgICAgICAgIGxkOjF9LAogIGFybW9yZWQ6IHtobToyLjAsc206MC44LCByOjE2LGM6JyNjZDg1M2YnLG86JyM4YjQ1MTMnLCBsZDoxfSwKICBib3NzOiAgICB7aG06NywgIHNtOjAuNiwgcjoyNCxjOicjYzY3OGRkJyxvOicjN2MyZmEwJywgbGQ6MyxyZWdlbjp0cnVlfQp9OwpmdW5jdGlvbiBpc0Jvc3Modyl7cmV0dXJuIHclNT09PTA7fQpmdW5jdGlvbiBidWlsZFEodyl7CiAgLy8gd2F2ZSBjb3VudDogZ3Jvd3MgbGluZWFybHkgd2l0aCBnZW50bGUgcXVhZHJhdGljIGJ1bXAKICBjb25zdCBjb3VudD0xMCt3KjMrTWF0aC5mbG9vcih3KncqMC4xMik7CiAgY29uc3QgcT1bXTsKICBmb3IobGV0IGk9MDtpPGNvdW50O2krKyl7CiAgICBjb25zdCByPU1hdGgucmFuZG9tKCk7CiAgICBpZih3Pj00JiZyPDAuMTgpICAgICAgICAgICAgICAgICAgICAgICAgICBxLnB1c2goJ2Zhc3QnKTsKICAgIGVsc2UgaWYodz49MyYmcjwwLjE4K01hdGgubWluKDAuMjUsdyowLjAyKSkgcS5wdXNoKCdhcm1vcmVkJyk7CiAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcS5wdXNoKCdiYXNpYycpOwogIH0KICBpZihpc0Jvc3ModykpewogICAgcS5zcGxpY2UoTWF0aC5mbG9vcihxLmxlbmd0aCowLjYpLDAsJ2Jvc3MnKTsKICAgIGNvbnN0IGV4dHJhcz1NYXRoLm1pbihNYXRoLmZsb29yKHcvNSksNCk7CiAgICBmb3IobGV0IGk9MDtpPGV4dHJhcztpKyspIHEucHVzaCgnZmFzdCcpOwogIH0KICByZXR1cm4gcTsKfQpmdW5jdGlvbiBzcGF3bih0eXBlKXsKICBjb25zdCBkPUVEW3R5cGVdfHxFRC5iYXNpYzsKICBjb25zdCBocD0oNTArd2F2ZSoyOCkqZC5obTsKICBjb25zdCBzcGQ9KDEuMyt3YXZlKjAuMTApKmQuc207CiAgY29uc3Qgcnc9dHlwZT09PSdib3NzJz8xMjArd2F2ZSoxNTp0eXBlPT09J2FybW9yZWQnPzE4K3dhdmUqMjp0eXBlPT09J2Zhc3QnPzcrd2F2ZSoyOjkrd2F2ZSoyOwogIGNvbnN0IHJlZ2VuPWQucmVnZW4/TWF0aC5taW4oMS41K3dhdmUqMC4xMiw0KTowOwogIGVuZW1pZXMucHVzaCh7dHlwZSxwcm9ncmVzczowLGhwLG1heEhwOmhwLHNwZWVkOnNwZCxyYWRpdXM6ZC5yLHNsb3dUaW1lcjowLHJld2FyZDpydyxjb2xvcjpkLmMsb3V0ZXI6ZC5vfHxudWxsLHJlZ2VuLGxkOmQubGR9KTsKfQpmdW5jdGlvbiBzdGFydFdhdmUoKXsKICB3YXZlUXVldWU9YnVpbGRRKHdhdmUpO2VuZW1pZXNTcGF3bmVkPTA7c3Bhd25UaW1lcj0wOwogIGNvbnN0IGI9aXNCb3NzKHdhdmUpOwogIGFubm91bmNlPXt0ZXh0OmI/YFdBVkUgJHt3YXZlfSDigJQgQk9TUyBJTkNPTUlOR2A6YFdBVkUgJHt3YXZlfWAsdGltZXI6MjIwMCxjb2xvcjpiPycjYzY3OGRkJzonIzRlY2NhMyd9OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3NzLWJhbm5lcicpLnN0eWxlLmRpc3BsYXk9Yj8nYmxvY2snOidub25lJzsKfQpmdW5jdGlvbiBQUCgpe3JldHVybiBwYXRoLm1hcChwPT4oe3g6cC54KkNFTEwrQ0VMTC8yLHk6cC55KkNFTEwrQ0VMTC8yfSkpO30KZnVuY3Rpb24gZ1Bvcyhwcil7CiAgY29uc3QgcHA9UFAoKTtsZXQgZD0wOwogIGZvcihsZXQgaT0xO2k8cHAubGVuZ3RoO2krKyl7CiAgICBjb25zdCBkeD1wcFtpXS54LXBwW2ktMV0ueCxkeT1wcFtpXS55LXBwW2ktMV0ueSxzPU1hdGguc3FydChkeCpkeCtkeSpkeSk7CiAgICBpZihwcjw9ZCtzKXtjb25zdCB0PShwci1kKS9zO3JldHVybnt4OnBwW2ktMV0ueCtkeCp0LHk6cHBbaS0xXS55K2R5KnR9O30KICAgIGQrPXM7CiAgfQogIHJldHVybnt4OnBwW3BwLmxlbmd0aC0xXS54LHk6cHBbcHAubGVuZ3RoLTFdLnl9Owp9CmZ1bmN0aW9uIHBMZW4oKXsKICBjb25zdCBwcD1QUCgpO2xldCBsPTA7CiAgZm9yKGxldCBpPTE7aTxwcC5sZW5ndGg7aSsrKXtjb25zdCBkeD1wcFtpXS54LXBwW2ktMV0ueCxkeT1wcFtpXS55LXBwW2ktMV0ueTtsKz1NYXRoLnNxcnQoZHgqZHgrZHkqZHkpO30KICByZXR1cm4gbDsKfQpmdW5jdGlvbiBvblBhdGgoZ3gsZ3kpewogIGZvcihsZXQgaT0wO2k8cGF0aC5sZW5ndGgtMTtpKyspewogICAgY29uc3QgYT1wYXRoW2ldLGI9cGF0aFtpKzFdOwogICAgaWYoZ3g+PU1hdGgubWluKGEueCxiLngpJiZneDw9TWF0aC5tYXgoYS54LGIueCkmJmd5Pj1NYXRoLm1pbihhLnksYi55KSYmZ3k8PU1hdGgubWF4KGEueSxiLnkpKXJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gdXBkYXRlKGR0KXsKICBpZihnYW1lT3ZlcilyZXR1cm47CiAgY29uc3Qgc2k9TWF0aC5tYXgoMzIwLDkwMC13YXZlKjMwKTsKICBpZihlbmVtaWVzU3Bhd25lZDx3YXZlUXVldWUubGVuZ3RoKXsKICAgIHNwYXduVGltZXIrPWR0OwogICAgaWYoc3Bhd25UaW1lcj49c2kpe3NwYXduKHdhdmVRdWV1ZVtlbmVtaWVzU3Bhd25lZCsrXSk7c3Bhd25UaW1lcj0wO30KICB9IGVsc2UgaWYoZW5lbWllcy5sZW5ndGg9PT0wKXsKICAgIHdhdmVUaW1lcis9ZHQ7CiAgICBpZih3YXZlVGltZXI+PTIyMDApe3dhdmUrKzt3YXZlVGltZXI9MDtzdGFydFdhdmUoKTt1VUkoKTt9CiAgfQogIGlmKGFubm91bmNlKXthbm5vdW5jZS50aW1lci09ZHQ7aWYoYW5ub3VuY2UudGltZXI8PTApYW5ub3VuY2U9bnVsbDt9CiAgY29uc3QgcGw9cExlbigpOwogIGZvcihsZXQgaT1lbmVtaWVzLmxlbmd0aC0xO2k+PTA7aS0tKXsKICAgIGNvbnN0IGU9ZW5lbWllc1tpXTsKICAgIGUucHJvZ3Jlc3MrPWUuc3BlZWQqKGUuc2xvd1RpbWVyPjA/MC41OjEpKmR0LzE2OwogICAgaWYoZS5zbG93VGltZXI+MCllLnNsb3dUaW1lci09ZHQ7CiAgICBpZihlLnJlZ2VuPjAmJmUuaHA8ZS5tYXhIcCllLmhwPU1hdGgubWluKGUubWF4SHAsZS5ocCtlLnJlZ2VuKmR0LzE2KTsKICAgIGlmKGUucHJvZ3Jlc3M+PXBsKXtsaXZlcy09ZS5sZDtlbmVtaWVzLnNwbGljZShpLDEpO3VVSSgpO2lmKGxpdmVzPD0wKWVuZEdhbWUoKTt9CiAgfQogIHRvd2Vycy5mb3JFYWNoKHQ9PnsKICAgIHQuY2QtPWR0OwogICAgaWYodC5jZDw9MCl7CiAgICAgIGNvbnN0IGQ9VERbdC50eXBlXTtsZXQgdGd0PW51bGwsYmVzdD0tMTsKICAgICAgLy8gdGFyZ2V0IGZ1cnRoZXN0LWFsb25nIGVuZW15IGluIHJhbmdlIChtb3N0IGRhbmdlcm91cykKICAgICAgZW5lbWllcy5mb3JFYWNoKGU9PnsKICAgICAgICBjb25zdCBwPWdQb3MoZS5wcm9ncmVzcyksZGQ9TWF0aC5oeXBvdChwLngtdC54LHAueS10LnkpOwogICAgICAgIGlmKGRkPD1kLnJhbmdlJiZlLnByb2dyZXNzPmJlc3Qpe2Jlc3Q9ZS5wcm9ncmVzczt0Z3Q9ZTt9CiAgICAgIH0pOwogICAgICBpZih0Z3QpewogICAgICAgIGNvbnN0IHA9Z1Bvcyh0Z3QucHJvZ3Jlc3MpOwogICAgICAgIHByb2plY3RpbGVzLnB1c2goe3g6dC54LHk6dC55LHRndCx0eDpwLngsdHk6cC55LGRtZzpkLmRhbWFnZSxzcDpkLnBzLGNvbG9yOmQucGMsc2xvdzpkLnNsb3d8fDB9KTsKICAgICAgICB0LmNkPWQuZmlyZVJhdGU7CiAgICAgIH0KICAgIH0KICB9KTsKICBmb3IobGV0IGk9cHJvamVjdGlsZXMubGVuZ3RoLTE7aT49MDtpLS0pewogICAgY29uc3QgcD1wcm9qZWN0aWxlc1tpXTsKICAgIGlmKHAudGd0JiZlbmVtaWVzLmluY2x1ZGVzKHAudGd0KSl7Y29uc3QgcG9zPWdQb3MocC50Z3QucHJvZ3Jlc3MpO3AudHg9cG9zLng7cC50eT1wb3MueTt9CiAgICBjb25zdCBkeD1wLnR4LXAueCxkeT1wLnR5LXAueSxkaXN0PU1hdGguaHlwb3QoZHgsZHkpOwogICAgaWYoZGlzdDxwLnNwKjIpewogICAgICBpZihwLnRndCYmZW5lbWllcy5pbmNsdWRlcyhwLnRndCkpewogICAgICAgIHAudGd0LmhwLT1wLmRtZzsKICAgICAgICBpZihwLnNsb3c+MClwLnRndC5zbG93VGltZXI9MjAwMDsKICAgICAgICBpZihwLnRndC5ocDw9MCl7CiAgICAgICAgICBnb2xkKz1wLnRndC5yZXdhcmQ7c2NvcmUrPXAudGd0LnJld2FyZCoyOwogICAgICAgICAgY29uc3Qga3A9Z1BvcyhwLnRndC5wcm9ncmVzcyksbj1wLnRndC50eXBlPT09J2Jvc3MnPzIwOjY7CiAgICAgICAgICBmb3IobGV0IGo9MDtqPG47aisrKXBhcnRpY2xlcy5wdXNoKHt4OmtwLngseTprcC55LHZ4OihNYXRoLnJhbmRvbSgpLTAuNSkqNSx2eTooTWF0aC5yYW5kb20oKS0wLjUpKjUsbGlmZToxLHNpemU6MytNYXRoLnJhbmRvbSgpKjQsY29sb3I6cC50Z3QudHlwZT09PSdib3NzJz8nI2M2NzhkZCc6JyNmZjZiNmInfSk7CiAgICAgICAgICBlbmVtaWVzLnNwbGljZShlbmVtaWVzLmluZGV4T2YocC50Z3QpLDEpO3VVSSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBwcm9qZWN0aWxlcy5zcGxpY2UoaSwxKTsKICAgIH0gZWxzZSB7cC54Kz0oZHgvZGlzdCkqcC5zcDtwLnkrPShkeS9kaXN0KSpwLnNwO30KICB9CiAgZm9yKGxldCBpPXBhcnRpY2xlcy5sZW5ndGgtMTtpPj0wO2ktLSl7Y29uc3QgcD1wYXJ0aWNsZXNbaV07cC54Kz1wLnZ4O3AueSs9cC52eTtwLmxpZmUtPTAuMDM7aWYocC5saWZlPD0wKXBhcnRpY2xlcy5zcGxpY2UoaSwxKTt9Cn0KZnVuY3Rpb24gZHJhdygpewogIGN0eC5maWxsU3R5bGU9JyMxYTFhMmUnO2N0eC5maWxsUmVjdCgwLDAsY2FudmFzLndpZHRoLGNhbnZhcy5oZWlnaHQpOwogIGN0eC5zdHJva2VTdHlsZT0nIzFlMWUzYSc7Y3R4LmxpbmVXaWR0aD0wLjU7CiAgZm9yKGxldCB4PTA7eDw9Y2FudmFzLndpZHRoO3grPUNFTEwpe2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHgsMCk7Y3R4LmxpbmVUbyh4LGNhbnZhcy5oZWlnaHQpO2N0eC5zdHJva2UoKTt9CiAgZm9yKGxldCB5PTA7eTw9Y2FudmFzLmhlaWdodDt5Kz1DRUxMKXtjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbygwLHkpO2N0eC5saW5lVG8oY2FudmFzLndpZHRoLHkpO2N0eC5zdHJva2UoKTt9CiAgY3R4LnN0cm9rZVN0eWxlPScjMmEyYTRhJztjdHgubGluZVdpZHRoPUNFTEwqMC43O2N0eC5saW5lQ2FwPSdyb3VuZCc7Y3R4LmxpbmVKb2luPSdyb3VuZCc7CiAgY29uc3QgcHA9UFAoKTtjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyhwcFswXS54LHBwWzBdLnkpO2ZvcihsZXQgaT0xO2k8cHAubGVuZ3RoO2krKyljdHgubGluZVRvKHBwW2ldLngscHBbaV0ueSk7Y3R4LnN0cm9rZSgpOwogIHRvd2Vycy5mb3JFYWNoKHQ9PnsKICAgIGNvbnN0IGQ9VERbdC50eXBlXTsKICAgIGN0eC5maWxsU3R5bGU9ZC5jb2xvcjtjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyh0LngsdC55LDE1LDAsTWF0aC5QSSoyKTtjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZT0nI2ZmZic7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmModC54LHQueSw4LDAsTWF0aC5QSSoyKTtjdHguZmlsbCgpOwogIH0pOwogIGNvbnN0IG5vdz1wZXJmb3JtYW5jZS5ub3coKTsKICBlbmVtaWVzLmZvckVhY2goZT0+ewogICAgY29uc3QgcG9zPWdQb3MoZS5wcm9ncmVzcyk7CiAgICBpZihlLnR5cGU9PT0nYm9zcycpewogICAgICBjb25zdCBwdWxzZT0wLjUrMC41Kk1hdGguc2luKG5vdyowLjAwNSk7CiAgICAgIGN0eC5zYXZlKCk7Y3R4Lmdsb2JhbEFscGhhPTAuMitwdWxzZSowLjM7Y3R4LmZpbGxTdHlsZT0nI2M2NzhkZCc7CiAgICAgIGN0eC5iZWdpblBhdGgoKTtjdHguYXJjKHBvcy54LHBvcy55LGUucmFkaXVzKzgrcHVsc2UqNiwwLE1hdGguUEkqMik7Y3R4LmZpbGwoKTtjdHgucmVzdG9yZSgpOwogICAgfQogICAgaWYoZS5vdXRlcil7Y3R4LmZpbGxTdHlsZT1lLm91dGVyO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKHBvcy54LHBvcy55LGUucmFkaXVzKzMsMCxNYXRoLlBJKjIpO2N0eC5maWxsKCk7fQogICAgY3R4LmZpbGxTdHlsZT1lLnNsb3dUaW1lcj4wPycjNDVhYWYyJzplLmNvbG9yO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKHBvcy54LHBvcy55LGUucmFkaXVzLDAsTWF0aC5QSSoyKTtjdHguZmlsbCgpOwogICAgY29uc3QgYnc9ZS5yYWRpdXMqMis4LGJoPWUudHlwZT09PSdib3NzJz82OjQ7CiAgICBjdHguZmlsbFN0eWxlPScjMzMzJztjdHguZmlsbFJlY3QocG9zLngtYncvMixwb3MueS1lLnJhZGl1cy0xMixidyxiaCk7CiAgICBjdHguZmlsbFN0eWxlPWUudHlwZT09PSdib3NzJz8nI2M2NzhkZCc6JyM0ZWNjYTMnO2N0eC5maWxsUmVjdChwb3MueC1idy8yLHBvcy55LWUucmFkaXVzLTEyLGJ3KihlLmhwL2UubWF4SHApLGJoKTsKICAgIGlmKGUudHlwZT09PSdib3NzJyl7Y3R4LmZpbGxTdHlsZT0nI2ZmZic7Y3R4LmZvbnQ9J2JvbGQgMTBweCBzYW5zLXNlcmlmJztjdHgudGV4dEFsaWduPSdjZW50ZXInO2N0eC5maWxsVGV4dCgnQk9TUycscG9zLngscG9zLnktZS5yYWRpdXMtMTYpO30KICB9KTsKICBwcm9qZWN0aWxlcy5mb3JFYWNoKHA9PntjdHguZmlsbFN0eWxlPXAuY29sb3I7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMocC54LHAueSw0LDAsTWF0aC5QSSoyKTtjdHguZmlsbCgpO30pOwogIHBhcnRpY2xlcy5mb3JFYWNoKHA9PntjdHguZ2xvYmFsQWxwaGE9cC5saWZlO2N0eC5maWxsU3R5bGU9cC5jb2xvcjtjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyhwLngscC55LHAuc2l6ZSwwLE1hdGguUEkqMik7Y3R4LmZpbGwoKTt9KTtjdHguZ2xvYmFsQWxwaGE9MTsKICBpZihhbm5vdW5jZSl7CiAgICBjdHguc2F2ZSgpO2N0eC5nbG9iYWxBbHBoYT1NYXRoLm1pbigxLGFubm91bmNlLnRpbWVyLzQwMCk7Y3R4LmZpbGxTdHlsZT1hbm5vdW5jZS5jb2xvcjsKICAgIGN0eC5mb250PSdib2xkIDM2cHggc2Fucy1zZXJpZic7Y3R4LnRleHRBbGlnbj0nY2VudGVyJztjdHguc2hhZG93Q29sb3I9YW5ub3VuY2UuY29sb3I7Y3R4LnNoYWRvd0JsdXI9MjA7CiAgICBjdHguZmlsbFRleHQoYW5ub3VuY2UudGV4dCxjYW52YXMud2lkdGgvMixjYW52YXMuaGVpZ2h0LzIpO2N0eC5yZXN0b3JlKCk7CiAgfQp9CmZ1bmN0aW9uIHVVSSgpe2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnb2xkJykudGV4dENvbnRlbnQ9Z29sZDtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGl2ZXMnKS50ZXh0Q29udGVudD1saXZlcztkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2F2ZScpLnRleHRDb250ZW50PXdhdmU7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Njb3JlJykudGV4dENvbnRlbnQ9c2NvcmU7fQpmdW5jdGlvbiBlbmRHYW1lKCl7Z2FtZU92ZXI9dHJ1ZTtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWwtd2F2ZScpLnRleHRDb250ZW50PXdhdmU7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbmFsLXNjb3JlJykudGV4dENvbnRlbnQ9c2NvcmU7ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dhbWUtb3ZlcicpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt9CmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZT0+ewogIGlmKGdhbWVPdmVyKXJldHVybjsKICBjb25zdCByZWN0PWNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICBjb25zdCBteD0oZS5jbGllbnRYLXJlY3QubGVmdCkqKGNhbnZhcy53aWR0aC9yZWN0LndpZHRoKSxteT0oZS5jbGllbnRZLXJlY3QudG9wKSooY2FudmFzLmhlaWdodC9yZWN0LmhlaWdodCk7CiAgY29uc3QgZ3g9TWF0aC5mbG9vcihteC9DRUxMKSxneT1NYXRoLmZsb29yKG15L0NFTEwpOwogIGlmKGd4PDB8fGd4Pj1DT0xTfHxneTwwfHxneT49Uk9XU3x8b25QYXRoKGd4LGd5KSlyZXR1cm47CiAgY29uc3QgZD1URFtzZWxlY3RlZFRvd2VyXTsKICBpZihnb2xkPGQuY29zdHx8dG93ZXJzLnNvbWUodD0+dC5neD09PWd4JiZ0Lmd5PT09Z3kpKXJldHVybjsKICBnb2xkLT1kLmNvc3Q7dG93ZXJzLnB1c2goe3g6Z3gqQ0VMTCtDRUxMLzIseTpneSpDRUxMK0NFTEwvMixneCxneSx0eXBlOnNlbGVjdGVkVG93ZXIsY2Q6MH0pO3VVSSgpOwp9KTsKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvd2VyLWJ0bicpLmZvckVhY2goYnRuPT57CiAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKT0+e2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50b3dlci1idG4nKS5mb3JFYWNoKGI9PmIuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7YnRuLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7c2VsZWN0ZWRUb3dlcj1idG4uZGF0YXNldC50eXBlO30pOwp9KTsKbGV0IGx0PTA7CmZ1bmN0aW9uIGxvb3AodCl7Y29uc3QgZHQ9dC1sdDtsdD10O3VwZGF0ZShkdCk7ZHJhdygpO3JlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTt9CnN0YXJ0V2F2ZSgpO3VVSSgpO3JlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTsKPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo= \ No newline at end of file