Transaction

104fe7929eba70a0c60734bcd66a0eeca97bcd5aa00705d7af674d205e76c111

Summary

Block
778,890(123k)
Date / Time
2023-03-01(2.3y ago)
Fee Rate(sat/vB)
2
Total Fee
0.00165426BTC

Technical Details

Version
1
Size(vB)
82,713(330,606)
Raw Data(hex)
010000…00000
Weight(wu)
330,852

1 Input, 1 Output

Input Scripts

Input
0
witness
#0
utf8f"O�Y��8�9���dܐk��À8�ʟK�qi��t� �KF��8ӕ�G�g[�髉Y� �f"O�Y��8�9���dܐk��À8�ʟK�qi��t� �KF��8ӕ�G�g[�髉Y� �
#1
utf8 6g�����$jx,+��&y��m�o����v�cordtext/html;charset=utf-8M<!DOCTYPE html> <html> <head> <title>Tickle Beach Ordinals</title> <style> body { margin: 0; padding: 0; } iframe { border: none; width: 100%; height: 100vh; } </style> </head> <body> <!-- HTML code to display the button and iframe --> <button onclick="previousTokenID();">Prev</button> <input type="text" id="formValue" value="42" /> <button onclick="nextTokenID();">Next</button> <button onclick="renderIframe()">Render</button> <iframe id="html-iframe" style="display:none"></iframeM> <!-- Base64-encoded HTML template with a placeholder for the token ID --> <script id="html-template" type="text/plain"> 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3JpcHQgZGVmZXI9ImRlZmVyIj4oKCk9PnsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gcihuLHIsdCl7cmV0dXJue3g6bix5OnIsejp0fX1mdW5jdGlvbiB0KG4pe3JldHVybiByKG4oIngiKSxuKCJ5IiksbigieiIpKX1mdW5jdGlvbiB1KG4pe3JldHVybiBuLmhhc093blByb3BlcnR5KCJ4Iil9ZnVuY3Rpb24gZShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKX1mdW5jdGlvbiBpKG4scil7cmV0dXJuIHUocik/dCgodD0+blt0XS1yW3RdKSk6dCgodD0+blt0XS1yKSl9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gTWF0aC5zcXJ0KG4ueCpuLngrbi55Km4ueStuLnoqbi56KX1mdW5jdGlvbiBhKG4scil7cmV0dXJuIHUobik/dShyKT90KCh0PT5NYXRoLm1pbMihuW3RdLHJbdF0pKSk6dCgodD0+TWF0aC5taW4oblt0XSxyKSkpOk1hdGgubWluKG4scil9ZnVuY3Rpb24gYyhuLHIpe3JldHVybiB1KG4pP3Uocik/dCgodD0+TWF0aC5tYXgoblt0XSxyW3RdKSkpOnQoKHQ9Pk1hdGgubWF4KG5bdF0scikpKTpNYXRoLm1heChuLHIpfWZ1bmN0aW9uIGYobixyKXtyZXR1cm4gdCgodD0+blt0XS9yKSl9ZnVuY3Rpb24gbShuKXtyZXR1cm5bbi54LG4ueSxuLnpdfW4uZD0ocix0KT0+e2Zvcih2YXIgdSBpbiB0KW4ubyh0LHUpJiYhbi5vKHIsdSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHUse2VudW1lcmFibGU6ITAsZ2V0OnRbdV19KX0sbi5vPShuLHIpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKTtsZXQgeD13aW5kbM3c7eC52ZWM9cix4LnN1Yj1pLHguZGl2PWYseC5hZGQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gdShyKT90KCh0PT5uW3RdK3JbdF0pKTp0KCh0PT5uW3RdK3IpKX0seC5tdWw9ZnVuY3Rpb24obixpKXtpZihlKG4pKXtpZihlKGkpKXtsZXQ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9Im4iPT09aFtlXSYmMH0pKSwiYMXR0YWNoIj09PWM/dT17Li4udSxwYXJ0TmFtZTp0LGF0dGFjaDp7cGFydDpzW2EocildLHNpZGU6ZVthKHIpXX0scG9zaXRpb246cChyLDMpLHJvdGF0aW9uOlswLDAsMF0sc2l6ZTpbMSwxLDFdLGJsZW5kOmEociksbWF0ZXJpYWw6MH06KHU9ey4uLnUscGFydE5hbWU6dCxtb2RlOm5bYShyKV0scG9zaXRpb246cChyLDMpLHJvdGF0aW9uOnAociwzKSxzaXplOnAociwzKX0sbC5mb3JFYWNoKCgodCxlKT0+eyJfIiE9PWRbY11bZV0mJih1W3RdPSgibiI9PT1oW2VdP2E6bykocikpfSkpLHUubWF0ZXJpYWw8MCYmKHUubWF0ZXJpYWw9MWU0LXUubWF0ZXJpYWwpLHUubWF0ZXJpYWwrPTEpLHV9O2Z1bmN0aW9uIGYodCl7Y29uc3Qgbj17fTtyZXR1cm4gdC5zcGxpdCgiOyIpLmZvckVhY2goKMHQ9Pntjb25zdCByPXtzdHJpbmc6dCxpbmRleDowfSxvPXNbYShyKV0saT1lW2EocildLHA9YShyKSxsPVtbYShyKSxhKHIpLGEocildLFthKHIpLGEociksYShyKV1dLGQ9KGg9byxyLnN0cmluZy5zdWJzdHJpbmcoci5pbmRleCkuc3BsaXQoIiwiKS5tYXAoKHQ9Pntjb25zdCBlPXtzdHJpbmc6dCxpbmRleDowfSxzPVtdO2Zvcig7ZS5pbmRleDxlLnN0cmluZy5sZW5ndGg7KXMucHVzaChtKGgsZSkpO3JldHVybntzdWJwYXJ0czpzfX0pKSk7dmFyIGg7bltvXT1uW29dfHxbXSxuW29dW3BdPW5bb11bcF18fHt9LG5bb11bcF1baV09e3BhcnQ6byxzaWRlOmksaW5kZXg6cCxsYXllcnM6ZCxib3VuZHM6bH19KSksbn1mdW5jdGlvbiBiKHQpe2NvbnN0IGU9e3N0cmluZzp0LGluZGV4OjB9LMHM9W107Zm9yKDtlLmluZGV4PGUuc3RyaW5nLmxlbmd0aDspcy5wdXNoKHtyb3VnaG5lc3M6YShlKSxtZXRhbG5lc3M6YShlKX0pO3JldHVybiBzfWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQuc3BsaXQoIjsiKS5tYXAoKHQ9Pntjb25zdCBlPXtzdHJpbmc6dCxpbmRleDowfSxzPVtdO2Zvcig7ZS5pbmRleDxlLnN0cmluZy5sZW5ndGg7KXMucHVzaChbYShlKSxhKGUpLGEoZSldKTtyZXR1cm4gc30pKX1mdW5jdGlvbiB4KHQpe2NvbnN0IGU9KHQ9Pntjb25zdCBlPXQuc3BsaXQoIiIpLm1hcCgodD0+IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Kz0iLmluZGV4T2YodCkpKSxzPVtdO2xldCBuPTA7Zm9yKDs7KXtjb25zdCB0PMWVbTWF0aC5mbG9vcihuLzYpXTtpZihuJTY9PTApcy5wdXNoKDE1JnQpO2Vsc2UgaWYobiU2PT0yKXMucHVzaCgoNjAmdCk+PjIpO2Vsc2V7Y29uc3Qgcj1lW01hdGguZmxvb3IoKG4rNCkvNildO3MucHVzaCgoKDQ4JnQpPj40KSsoKDMmcik8PDIpKX1pZihuKz00LE1hdGguZmxvb3IoKG4rMikvNik+PWUubGVuZ3RoKWJyZWFrfXJldHVybiBzLm1hcCgodD0+IjAxMjM0NTY3ODkrLS4sOy8iW3RdKSkuam9pbigiIil9KSh0KSxbcyxuLHIsb109ZS5zcGxpdCgiLyIpO3JldHVybnttb2RlbHM6ZihzKSxtYXRzOmIobiksaGFyZGNvZGVkOl8ocilbMF0scmFuZG9taXplZDpfKG8pfX1jb25zdCBnPSgpPT57Yz10Lm1vZGVscz94KHQubW9kZWxzKTp7fSx0LnJlcG89Yyx1PWMubW9kZWxzfTtmdMW5jdGlvbiB5KHQpe2NvbnN0IGU9WzAsMCwxMDZdO3JldHVybiB0PSh0PVsodD10Lm1hcCgoKHQscyk9PnQtZVtzXSkpKVswXSx0WzJdLC10WzFdXSkubWFwKCh0PT50LzE1MCkpfWcoKTtsZXQgTT0odCxlKT0+dC5tYXAoKCh0LHMpPT50K2Vbc10pKTtjb25zdCBrPSJmbG9vciI7Y29uc3Qgdj1be3BhcnQ6InNob2VzIixzaWRlOiJ0aGUiLGluZGV4OjAsY29yZU1vZGVsczohMH0se3BhcnQ6ImJvZHkiLHNpZGU6InRoZSIsaW5kZXg6MyxzZXBhcmF0ZTohMCxtYXhEZXB0aDowLGNvcmVNb2RlbHM6ITB9LHtwYXJ0OiJnbGFzc2VzIixzaWRlOiJ0aGUiLGluZGV4OjAsc2VwYXJhdGU6ITEsbWF4RGVwdGg6MCxjb3JlTW9kZWxzOiEwfSx7cGFydDoiZ3JvdW5kIixzaWRlOiJ0aGUiLGluZGV4OMjAsc2VwYXJhdGU6ITEsbWF4RGVwdGg6MCxjb3JlTW9kZWxzOiEwfSx7cGFydDoiaGFuZCIsc2lkZToidGhlIixpbmRleDowfSx7cGFydDoiaGVhZHRvcCIsc2lkZToidGhlIixpbmRleDowfSx7cGFydDoibmVjayIsc2lkZToidGhlIixpbmRleDowfSx7cGFydDoic2hpcnQiLHNpZGU6InRoZSIsaW5kZXg6MH1dO3Quc2V0dXBSZXBvTW9kZWxzPWcsdC5idWlsZFJlcG89ZnVuY3Rpb24odCxlPSEwLHM9ITApe2NvbnN0IG49KCh0LGUpPT57aWYoZygpLCF0WyJmbG9vcjp0aGUiXSlyZXR1cm47Y29uc3Qgcz1be3BhcnQ6dS5mbG9vclt0WyJmbG9vcjp0aGUiXV0udGhlLHBvczp5KFswLDAsMF0pLF9wb3M6WzAsMCwwXSxtYXhEZXB0aDowfV07cmV0dXJuIHYuZm9yRWFjaCgoKHtwYXJ0Om4scM2lkZTpyLHNlcGFyYXRlOm8sbWF4RGVwdGg6YX0pPT57Y29uc3QgaT1gJHtufToke3J9YDtpZih0W2ldKXtsZXQgZD0hMTtmb3IobGV0IGg9MDtoPHMubGVuZ3RoO2grKyl7Y29uc3QgYz11W25dW3RbaV1dW3JdLG09c1toXS5wYXJ0O2xldCBmPTAsYj0wO3Q6Zm9yKDtmPG0ubGF5ZXJzLmxlbmd0aDtmKyspe2NvbnN0IHQ9bS5sYXllcnNbZl07Zm9yKGI9MDtiPHQuc3VicGFydHMubGVuZ3RoO2IrKyl7Y29uc3QgZT10LnN1YnBhcnRzW2JdO2lmKCJhdHRhY2giPT09ZS5wcmltaXRpdmUmJmUuYXR0YWNoLnBhcnQ9PT1uKWJyZWFrIHR9fWlmKGY8bS5sYXllcnMubGVuZ3RoKXtkPSEwO2NvbnN0IHQ9bS5sYXllcnNbZl0uc3VicGFydHNbYl0ucG9zaXRpb247aWYoZSYmbyl7Y29uc3QgZT1zWM2hdLl9wb3Msbj10Lm1hcCgoKHQscyk9PnQrZVtzXSkpO3MucHVzaCh7cGFydDpjLHBvczp5KG4pLF9wb3M6bixtYXhEZXB0aDphfSl9ZWxzZXtjb25zdCBlPWMubGF5ZXJzLm1hcCgoZT0+KHtsYXllcjp7Li4uZX0sc3VicGFydHM6ZS5zdWJwYXJ0cy5tYXAoKGU9Pih7Li4uZSxwb3NpdGlvbjpNKGUucG9zaXRpb24sdCl9KSkpfSkpKTttLmxheWVycy5zcGxpY2UoZiwwLC4uLmUpO2NvbnN0IHM9eSh0KTttLmJvdW5kcz0ocD1tLmJvdW5kcyxsPVtNKGMuYm91bmRzWzBdLHMpLE0oYy5ib3VuZHNbMV0scyldLFtbTWF0aC5taW4ocFswXVswXSxsWzBdWzBdKSxNYXRoLm1pbihwWzBdWzFdLGxbMF1bMV0pLE1hdGgubWluKHBbMF1bMl0sbFswXVsyXSldLFtNYXRoLm1heChwWzFdWzBdLGxbMMV1bMF0pLE1hdGgubWF4KHBbMV1bMV0sbFsxXVsxXSksTWF0aC5tYXgocFsxXVsyXSxsWzFdWzJdKV1dKX19fX12YXIgcCxsfSkpLHN9KSgoKHQsZSk9Pntjb25zdCBzPXt9O2xldCBuPVtdO249MT09ZT9be3BhcnQ6ayxzaWRlOiJ0aGUiLGNpOjB9LC4uLnZdOlt7cGFydDprLHNpZGU6InRoZSIsY2k6MH0sLi4udi5maWx0ZXIoKHQ9PjE9PXQuY29yZU1vZGVscykpXTtjb25zdCByPXQuc3BsaXQoIi0iKTtyZXR1cm4gbi5mb3JFYWNoKCgoe3BhcnQ6dCxzaWRlOmV9KT0+e2NvbnN0IG49ci5maW5kKChzPT5zLnN0YXJ0c1dpdGgoYCR7dH06JHtlfTpgKSkpO2lmKCFuKXJldHVybjtjb25zdFssLG9dPW4uc3BsaXQoIjoiKSxhPXBhcnNlSW50KG8pLGk9YCR7dH06JHtlfWAscD11W3RdO2lmKMHApe2NvbnN0IHQ9cFthXVtlXTtpZih0KXtjb25zdCBlPXQuaW5kZXg7c1tpXT1lfX19KSksc30pKHQscyksZSkscj1uLm1hcCgodD0+e3JldHVybntwYXJ0OihlPXQpLnBhcnQubGF5ZXJzLmZpbHRlcigodD0+dC5zdWJwYXJ0cy5sZW5ndGg+MCkpLm1hcCgoKHQsZSk9Pih7bGF5ZXJJbmRleDplLG9wOnQuc3VicGFydHNbMF0ubW9kZSxibGVuZDp0LnN1YnBhcnRzWzBdLmJsZW5kLHN0cm9rZXM6dC5zdWJwYXJ0c30pKSksYm91bmRzOmUucGFydC5ib3VuZHMscG9zOmUucG9zLG1heERlcHRoOmUubWF4RGVwdGh9O3ZhciBlfSkpO3JldHVybntyZXBvOmMsc3Ryb2tlczpyfX0sdC5zdHJva2VzVG9EYXRhPWZ1bmN0aW9uKHQpe2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheSgxZTYpO2xldCBzPMTAscj0xO3JldHVybiB0LmZvckVhY2goKHQ9Pnt0LnN0cm9rZXMuZm9yRWFjaCgoKG8sYSk9Pntjb25zdCBwPTMyKnI7ZVtwKzBdPWkuaW5kZXhPZihvLnByaW1pdGl2ZSksZVtwKzFdPW4uaW5kZXhPZihvLm1vZGUpLGVbcCsyXT1vLnBvc2l0aW9uWzBdLGVbcCszXT1vLnBvc2l0aW9uWzFdLGVbcCs0XT1vLnBvc2l0aW9uWzJdLGVbcCs1XT1vLnJvdGF0aW9uWzBdLGVbcCs2XT1vLnJvdGF0aW9uWzFdLGVbcCs3XT1vLnJvdGF0aW9uWzJdLGVbcCs4XT1vLnNpemVbMF0sZVtwKzldPW8uc2l6ZVsxXSxlW3ArMTBdPW8uc2l6ZVsyXSxsLmZvckVhY2goKCh0LHMpPT57ZVtwKzExK3NdPSJuIj09PWhbc10/b1t0XTpvW3RdPzE6MH0pKTthPT09dC5zdHJva2VzLmxlbmd0aC0xJiYoZVtwKzExKMzE1XT0xLGVbcCsxMSsxNl09bi5pbmRleE9mKHQuc3Ryb2tlc1swXS5tb2RlKSxlW3ArMTErMTddPXQuc3Ryb2tlc1swXS5ibGVuZCkscys9MSxyKz0xfSkpfSkpLGVbMF09cyxlfX0pKCk7PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiPndpbmRvdy5zaGFkZXJzPXtvY3RyZWVWZXJ0ZXg6IiN2ZXJzaW9uIDMwMCBlc1xucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O3ByZWNpc2lvbiBoaWdocCBpbnQ7dW5pZm9ybSBpbnQgaUZyYW1lO3VuaWZvcm0gaW50IHVEZXB0aDt1bmlmb3JtIHNhbXBsZXIyRCB1VHJlZVRleDt1bmlmb3JtIHNhbXBsZXIyRCB1U3Ryb2tlc1RleDt1bmlmb3JtIHZlYzMgdUJvdW5kc1NpemU7dW5pZm9ybSBpbnQgdU1heERlcHRoO3VuaWZvcm0gaW50IHVEb3VibGVNYMXhEZXB0aDtpbiBmbG9hdCBpTm9kZUluZGV4O1xuXG5mbGF0IG91dCB2ZWM0IG9Ob2RlO1xuZmxhdCBvdXQgdmVjNCBvUmVzdWx0O1xuZmxhdCBvdXQgdmVjNCBvQ29vcmQ7XG5mbGF0IG91dCB2ZWM0IG9Ob3JtYWw7XG5cbiNkZWZpbmUgUEkgMy4xNDE1OTI1MzU5O1xuI2RlZmluZSBNQVhfU1RFUFMgMTAwO1xuI2RlZmluZSBNQVhfRElTVCAyMDAuXG4jZGVmaW5lIFNVUkZfRElTVCAuMDAxXG4jZGVmaW5lIFpFUk8gKG1pbihpRnJhbWUsMCkpXG5zdHJ1Y3QgUmVzdWx0e2Zsb2F0IGQ7ZmxvYXQgbTE7ZmxvYXQgbTI7ZmxvYXQgYjtmbG9hdCBrO307ZmxvYXQgc2RFbGxpcHNvaWQoaW4gdmVjMyBwLGluIHZlYzMgcil7ZmxvYXQgazA9bGVuZ3RoKHAvcik7ZmxvYXQgazE9bGVuZ3RoKHAvKMHIqcikpO3JldHVybiAoazAqKGswLTEuMCkpL2sxO31mbG9hdCBzZFNwaGVyZSh2ZWMzIHAsZmxvYXQgcyl7cmV0dXJuIGxlbmd0aChwKS1zO31mbG9hdCBzZENhcHN1bGUodmVjMyBwLHZlYzMgYSx2ZWMzIGIsZmxvYXQgcil7dmVjMyBwYT1wLWEsYmE9Yi1hO2Zsb2F0IGg9Y2xhbXAoZG90KHBhLGJhKS9kb3QoYmEsYmEpLDAuMCwxLjApO3JldHVybiBsZW5ndGgocGEtKGJhKmgpKS1yO31mbG9hdCBzZFZlcnRpY2FsQ2Fwc3VsZSh2ZWMzIHAsZmxvYXQgaCxmbG9hdCByKXtwLnotPWNsYW1wKHAueiwtaCxoKTtyZXR1cm4gbGVuZ3RoKHApLXI7fWZsb2F0IHNkUm91bmRCb3godmVjMyBwLHZlYzMgYixmbG9hdCByKXt2ZWMzIHE9YWJzKHApLWI7cmV0dXJuIChsZW5ndGgobWF4KHEsMC4pKMSttaW4obWF4KHEueCxtYXgocS55LHEueikpLDAuKSktcjt9ZmxvYXQgc2RQbGFuZSh2ZWMzIHAsdmVjNCBuKXtyZXR1cm4gZG90KHAsbi54eXopK24udzt9ZmxvYXQgc2RMaW5rKHZlYzMgcCxmbG9hdCBsZSxmbG9hdCByMSxmbG9hdCByMil7dmVjMyBxPXZlYzMocC54LG1heChhYnMocC55KS1sZSwwLikscC56KTtyZXR1cm4gbGVuZ3RoKHZlYzIobGVuZ3RoKHEueHkpLXIxLHEueikpLXIyO31mbG9hdCBzZE9jdGFoZWRyb24odmVjMyBwLGZsb2F0IHMpe3A9YWJzKHApO2Zsb2F0IG09KChwLngrcC55KStwLnopLXM7dmVjMyBxO2lmKCgzLipwLngpPG0pcT1wLnh5ejtlbHNlIGlmKCgzLipwLnkpPG0pcT1wLnl6eDtlbHNlIGlmKCgzLipwLnopPG0pcT1wLnp4eTtlbHNlIHJldHVybiBtKMi41NzczNTAyNztmbG9hdCBrPWNsYW1wKC41KigocS56LXEueSkrcyksMC4scyk7cmV0dXJuIGxlbmd0aCh2ZWMzKHEueCwocS55LXMpK2sscS56LWspKTt9ZmxvYXQgc2RFbGxpcHNlKGluIHZlYzIgcCxpbiB2ZWMyIGFiKXtpZihhYnMoYWIueC1hYi55KTwxZS02KXJldHVybiBsZW5ndGgocCktYWIueDtwPWFicyhwKTtpZihwLng+cC55KXtwPXAueXg7YWI9YWIueXg7fWZsb2F0IGw9KGFiLnkqYWIueSktKGFiLngqYWIueCk7ZmxvYXQgbT0oYWIueCpwLngpL2w7ZmxvYXQgbTI9bSptO2Zsb2F0IG49KGFiLnkqcC55KS9sO2Zsb2F0IG4yPW4qbjtmbG9hdCBjPSgobTIrbjIpLTEuMCkvMy4wO2Zsb2F0IGMzPShjKmMpKmM7ZmxvYXQgcT1jMysoKG0yKm4yKSoyLjApO2Zsb2F0IGQ9YzMrKMG0yKm4yKTtmbG9hdCBnPW0rKG0qbjIpO2Zsb2F0IGNvO2lmKGQ8MC4wKXtmbG9hdCBoPWFjb3MocS9jMykvMy4wO2Zsb2F0IHM9Y29zKGgpO2Zsb2F0IHQ9c2luKGgpKnNxcnQoMy4wKTtmbG9hdCByeD1zcXJ0KCgtYyooKHMrdCkrMi4wKSkrbTIpO2Zsb2F0IHJ5PXNxcnQoKC1jKigocy10KSsyLjApKSttMik7Y289KCgocnkrKHNpZ24obCkqcngpKSsoYWJzKGcpLyhyeCpyeSkpKS1tKS8yLjA7fWVsc2V7ZmxvYXQgaD0oKDIuMCptKSpuKSpzcXJ0KGQpO2Zsb2F0IHM9c2lnbihxK2gpKnBvdyhhYnMocStoKSwxLjAvMy4wKTtmbG9hdCB1PXNpZ24ocS1oKSpwb3coYWJzKHEtaCksMS4wLzMuMCk7ZmxvYXQgcng9KCgtcy11KS0oYyo0LjApKSsoMi4wKm0yKTtmbG9hdCByeT0ocy11KSpzcMXJ0KDMuMCk7ZmxvYXQgcm09c3FydCgocngqcngpKyhyeSpyeSkpO2NvPSgoKHJ5L3NxcnQocm0tcngpKSsoKDIuMCpnKS9ybSkpLW0pLzIuMDt9dmVjMiByPWFiKnZlYzIoY28sc3FydCgxLjAtKGNvKmNvKSkpO3JldHVybiBsZW5ndGgoci1wKSpzaWduKHAueS1yLnkpO31mbG9hdCBzZENpcmNsZSh2ZWMyIHAsZmxvYXQgcil7cmV0dXJuIGxlbmd0aChwKS1yO31mbG9hdCBzZEJveChpbiB2ZWMyIHAsaW4gdmVjMiBiKXt2ZWMyIGQ9YWJzKHApLWI7cmV0dXJuIGxlbmd0aChtYXgoZCwwLjApKSttaW4obWF4KGQueCxkLnkpLDAuMCk7fWZsb2F0IHNkQm94KHZlYzMgcCx2ZWMzIGIpe3ZlYzMgcT1hYnMocCktYjtyZXR1cm4gbGVuZ3RoKG1heChxLDAuMCkpK21pbihtYXgocS54LG1heChxLMnkscS56KSksMC4wKTt9ZmxvYXQgc2RSb3VuZEJveChpbiB2ZWMyIHAsaW4gdmVjMiBiLGluIGZsb2F0IHIpe3ZlYzIgcT0oYWJzKHApLWIpK3I7cmV0dXJuIChtaW4obWF4KHEueCxxLnkpLDAuMCkrbGVuZ3RoKG1heChxLDAuMCkpKS1yO31mbG9hdCBzZEVxdWlsYXRlcmFsVHJpYW5nbGUoaW4gdmVjMiBwLGZsb2F0IHMpe3AvPXM7cC55Kz0wLjU7Y29uc3QgZmxvYXQgaz1zcXJ0KDMuMCk7cC54PWFicyhwLngpLTEuMDtwLnk9cC55KygxLjAvayk7aWYoKHAueCsoaypwLnkpKT4wLjApcD12ZWMyKHAueC0oaypwLnkpLCgtaypwLngpLXAueSkvMi4wO3AueC09Y2xhbXAocC54LC0yLjAsMC4wKTtyZXR1cm4gKC1sZW5ndGgocCkqc2lnbihwLnkpKSpzO31mbG9hdCBzZFJvdW5kVHJpKGluIMHZlYzIgcCxmbG9hdCBzLGZsb2F0IHIpe3M9cy1yO3AvPXM7Y29uc3QgZmxvYXQgaz1zcXJ0KDMuMCk7cC54PWFicyhwLngpLTEuMDtwLnk9cC55KygxLjAvayk7aWYoKHAueCsoaypwLnkpKT4wLjApcD12ZWMyKHAueC0oaypwLnkpLCgtaypwLngpLXAueSkvMi4wO3AueC09Y2xhbXAocC54LC0yLjAsMC4wKTtyZXR1cm4gKCgtbGVuZ3RoKHApKnNpZ24ocC55KSkqcyktcjt9ZmxvYXQgZG90MihpbiB2ZWMyIHYpe3JldHVybiBkb3Qodix2KTt9ZmxvYXQgc2RCZXppZXIoaW4gdmVjMiBwb3MsaW4gdmVjMiBBLGluIHZlYzIgQixpbiB2ZWMyIEMpe3ZlYzIgYT1CLUE7dmVjMiBiPShBLSgyLjAqQikpK0M7dmVjMiBjPWEqMi4wO3ZlYzIgZD1BLXBvcztmbG9hdCBraz0xLjAvZG90KGIsYik7ZMmxvYXQga3g9a2sqZG90KGEsYik7ZmxvYXQga3k9KGtrKigoMi4wKmRvdChhLGEpKStkb3QoZCxiKSkpLzMuMDtmbG9hdCBrej1raypkb3QoZCxhKTtmbG9hdCByZXM9MC4wO2Zsb2F0IHA9a3ktKGt4Kmt4KTtmbG9hdCBwMz0ocCpwKSpwO2Zsb2F0IHE9KGt4KigoKDIuMCpreCkqa3gpLSgzLjAqa3kpKSkra3o7ZmxvYXQgaD0ocSpxKSsoNC4wKnAzKTtpZihoPj0wLjApe2g9c3FydChoKTt2ZWMyIHg9KHZlYzIoaCwtaCktcSkvMi4wO3ZlYzIgdXY9c2lnbih4KSpwb3coYWJzKHgpLHZlYzIoMS4wLzMuMCkpO2Zsb2F0IHQ9Y2xhbXAoKHV2LngrdXYueSkta3gsMC4wLDEuMCk7cmVzPWRvdDIoZCsoKGMrKGIqdCkpKnQpKTt9ZWxzZXtmbG9hdCB6PXNxcnQoLXApO2Zsb2F0IHY9YWNvcyhxLMygocCp6KSoyLjApKS8zLjA7ZmxvYXQgbT1jb3Modik7ZmxvYXQgbj1zaW4odikqMS43MzIwNTA4MDg7dmVjMyB0PWNsYW1wKCh2ZWMzKG0rbSwtbi1tLG4tbSkqeikta3gsMC4wLDEuMCk7cmVzPW1pbihkb3QyKGQrKChjKyhiKnQueCkpKnQueCkpLGRvdDIoZCsoKGMrKGIqdC55KSkqdC55KSkpO31yZXR1cm4gc3FydChyZXMpO31mbG9hdCBzZFRyaVByaXNtKHZlYzMgcCxmbG9hdCBoLGZsb2F0IHIsZmxvYXQgcjIpe3ZlYzMgcT1hYnMocCk7cmV0dXJuIG1heChxLnotaCxtYXgoKHEueCpyMikrKHAueSowLjUpLC1wLnkpLShyKjAuNSkpO312ZWMzIG9wQ29uaWZ5KHZlYzMgcCxmbG9hdCB6aCl7ZmxvYXQgcz1taXgoLjUsMS41LGNsYW1wKHAuei96aCwwLiwxLikpO3JldHVybiB2ZWMzKMHAueCpzLHAueSpzLHAueik7fWZsb2F0IG9wRXh0cnVzc2lvbihpbiB2ZWMzIHAsaW4gZmxvYXQgc2RmLGluIGZsb2F0IGgpe3ZlYzIgdz12ZWMyKHNkZixhYnMocC56KS1oKTtyZXR1cm4gbWluKG1heCh3Lngsdy55KSwwLjApK2xlbmd0aChtYXgodywwLjApKTt9UmVzdWx0IG9wSW50ZXJzZWN0KFJlc3VsdCBhLFJlc3VsdCBiKXtyZXR1cm4gUmVzdWx0KG1heChiLmQsYS5kKSxiLm0xLGIubTIsYi5iLGIuayk7fVJlc3VsdCBvcFVuaW9uKFJlc3VsdCBhLFJlc3VsdCBiKXtpZihhLmQ8Yi5kKXJldHVybiBhO2Vsc2UgcmV0dXJuIGI7fVJlc3VsdCBvcFN1YnRyYWN0KFJlc3VsdCBiLFJlc3VsdCBhKXtpZihhLmQ+LWIuZClyZXR1cm4gYTtlbHNlIHJldHVybiBSZXN1bHQoLWIuZCxhLm0xLMGEubTIsYS5iLDAuKTt9XG4jZGVmaW5lIEJMRU5EX1NJWkUgMy5cbmZsb2F0IGdldEJsZW5kKGZsb2F0IGQxLGZsb2F0IGQyLGZsb2F0IGJsZW5kU2l6ZSl7ZmxvYXQgZGlmZj0tYWJzKGQxLWQyKTtmbG9hdCBibGVuZD1kaWZmL2JsZW5kU2l6ZTtibGVuZD1jbGFtcCgoYmxlbmQrMS4wKSowLjUsMC4sMS4pO3JldHVybiBibGVuZDt9ZmxvYXQgc21pbihmbG9hdCBhLGZsb2F0IGIsZmxvYXQgayl7ZmxvYXQgaD1tYXgoay1hYnMoYS1iKSwwLjApO2Zsb2F0IHQ9bWluKGEsYiktKCgoaCpoKSowLjI1KS9rKTtyZXR1cm4gdDt9UmVzdWx0IG9wU21vb3RoVW5pb24oUmVzdWx0IGYxLFJlc3VsdCBmMixmbG9hdCBrKXtrPWsvMi47UmVzdWx0IGNsb3Nlc3Q9ZjE7UmVzdWx0IGZ1cnRoZXN0PWYyOM2Zsb2F0IGRpZmY9ZmxvYXQoZjEuZD5mMi5kKTtjbG9zZXN0LmQ9bWl4KGYxLmQsZjIuZCxkaWZmKTtjbG9zZXN0Lm0xPW1peChmMS5tMSxmMi5tMSxkaWZmKTtjbG9zZXN0Lm0yPW1peChmMS5tMixmMi5tMixkaWZmKTtjbG9zZXN0LmI9bWl4KGYxLmIsZjIuYixkaWZmKTtmdXJ0aGVzdC5kPW1peChmMi5kLGYxLmQsZGlmZik7ZnVydGhlc3QubTE9bWl4KGYyLm0xLGYxLm0xLGRpZmYpO2Z1cnRoZXN0Lm0yPW1peChmMi5tMixmMS5tMixkaWZmKTtmdXJ0aGVzdC5iPW1peChmMi5iLGYxLmIsZGlmZik7ZmxvYXQgbWYxPW1peChjbG9zZXN0Lm0yLGNsb3Nlc3QubTEsZmxvYXQoY2xvc2VzdC5iPDAuNSkpO2Zsb2F0IG1mMj1taXgoZnVydGhlc3QubTIsZnVydGhlc3QubTEsZmxvYXQoZnVydMGhlc3QuYjwwLjUpKTtmbG9hdCB0PXNtaW4oZjEuZCxmMi5kLGspO2Zsb2F0IGJuZXc9Z2V0QmxlbmQoZjEuZCxmMi5kLGspO2Zsb2F0IGI9bWF4KGNsb3Nlc3QuYixibmV3KTtmbG9hdCBiaGlnaGVyPWZsb2F0KGI+Ym5ldyk7ZmxvYXQgbTE9bWl4KG1mMSxjbG9zZXN0Lm0xLGJoaWdoZXIpO2Zsb2F0IG0yPW1peChtZjIsY2xvc2VzdC5tMixiaGlnaGVyKTtyZXR1cm4gUmVzdWx0KHQsbTEsbTIsYiwwLik7fVJlc3VsdCBvcFNtb290aFVuaW9uKFJlc3VsdCBhLFJlc3VsdCBiKXtyZXR1cm4gb3BTbW9vdGhVbmlvbihhLGIsNS4pO31SZXN1bHQgb3BSZXBsYWNlKFJlc3VsdCBhLFJlc3VsdCBiKXtSZXN1bHQgcj1vcFNtb290aFVuaW9uKGEsYixhLmspO3JldHVybiBSZXN1bHQoYi5kLHIubMTEsci5tMixyLmIsci5rKTt9UmVzdWx0IG9wU21vb3RoU3VidHJhY3Rpb24oUmVzdWx0IGEsUmVzdWx0IGIsZmxvYXQgayl7ZmxvYXQgaD1tYXgoay1hYnMoLWEuZC1iLmQpLDAuMCk7ZmxvYXQgdD1tYXgoLWEuZCxiLmQpKygoKGgqaCkqMC4yNSkvayk7cmV0dXJuIFJlc3VsdCh0LGIubTEsYi5tMixiLmIsMC4pO31SZXN1bHQgb3BTbW9vdGhTdWJ0cmFjdGlvbihSZXN1bHQgYSxSZXN1bHQgYil7cmV0dXJuIG9wU21vb3RoU3VidHJhY3Rpb24oYSxiLDIuNSk7fXZlYzMgb3BTeW1YKHZlYzMgcCl7cmV0dXJuIHZlYzMoYWJzKHAueCkscC55eik7fXZlYzQgb3BFbG9uZ2F0ZSh2ZWMzIHAsdmVjMyBoKXt2ZWMzIHE9YWJzKHApLWg7cmV0dXJuIHZlYzQobWF4KHEsMC4wKSxtaW4obWF4KHEueMCxtYXgocS55LHEueikpLDAuMCkpO31mbG9hdCBvcFJvdW5kKGZsb2F0IGQsZmxvYXQgcmFkKXtyZXR1cm4gZC1yYWQ7fWZsb2F0IHNkQ2FwcGVkQ3lsaW5kZXIodmVjMyBwLGZsb2F0IGgsZmxvYXQgcil7dmVjMiBkPWFicyh2ZWMyKGxlbmd0aChwLnh5KSxwLnopKS12ZWMyKGgscik7cmV0dXJuIG1pbihtYXgoZC54LGQueSksMC4wKStsZW5ndGgobWF4KGQsMC4wKSk7fWZsb2F0IHNkRXh0cnVkZWRDeWxpbmRlcih2ZWMzIHAsZmxvYXQgaCx2ZWMyIHIpe3JldHVybiBvcEV4dHJ1c3Npb24ocCxzZEVsbGlwc2UocC54eSxyKSxoKTt9ZmxvYXQgc2RFeHRydWRlZENpcmNsZSh2ZWMzIHAsZmxvYXQgaCx2ZWMyIHIpe3JldHVybiBvcEV4dHJ1c3Npb24ocCxzZENpcmNsZShwLnh5LHIueCksaMCk7fWZsb2F0IHNkZk1vZEN1YmUodmVjMyBfcCx2ZWMzIHNpemUsZmxvYXQgcm91bmQsZmxvYXQgaG9sZSxmbG9hdCBiZXZlbCxmbG9hdCBjb25lKXtmbG9hdCBfZDt2ZWMzIHAxPV9wO3JvdW5kPW1pbigwLjk5LHJvdW5kKTtmbG9hdCByRGltPXJvdW5kKm1pbihzaXplLngsbWluKHNpemUueSxzaXplLnopKTtpZihob2xlPjAuKXtpZihiZXZlbD4wLil7ZmxvYXQgaG9sZVJhZGl1cz1tYXgoMC4sKDEuLWhvbGUpKm1pbihzaXplLngsc2l6ZS55KSk7cm91bmQ9cm91bmQqbWF4KDIuLG1pbihob2xlUmFkaXVzLHNpemUueikpO2Zsb2F0IGJldmVsPWJldmVsKm1pbihzaXplLngtcm91bmQsc2l6ZS55LXJvdW5kKTtmbG9hdCBjb25lU2NhbGFyPWNvbmU+MC4/KChjb25lKigocDEueitzaXplLMnopLXJvdW5kKSkvKHNpemUuei1yb3VuZCkpKjIuOjAuO2Zsb2F0IGJveFc9bWl4KHNpemUuei1yb3VuZCxyb3VuZCxjb25lU2NhbGFyKTtmbG9hdCBib3hIPW1peChzaXplLnktcm91bmQscm91bmQsY29uZVNjYWxhcik7ZmxvYXQgYUJldmVsPW1peChiZXZlbCwwLixjb25lU2NhbGFyKTtfZD1zZFJvdW5kQm94KHAxLnh5LHZlYzIoYm94Vyxib3hIKSxhQmV2ZWwpO19kPW9wRXh0cnVzc2lvbihwMSxfZCxzaXplLnotcm91bmQpO31lbHNle2Zsb2F0IHIyPTEuO19kPW9wRXh0cnVzc2lvbihwMSxhYnMoc2RCb3gocDEueHksc2l6ZS54eSkpLXIyLHNpemUueik7fX1lbHNle2lmKCgoYmV2ZWw+MC4pfHwocm91bmQ+MC4pKXx8KGNvbmU+MC4pKXtyb3VuZD1yb3VuZCptYXgoMi4sbWluKG1pbMihzaXplLngsc2l6ZS55KSxzaXplLnopKTtiZXZlbD1iZXZlbCptaW4oc2l6ZS54LXJvdW5kLHNpemUueS1yb3VuZCk7ZmxvYXQgY29uZVNjYWxhcj1jb25lPjAuP2FicyhzaXplLnotcm91bmQpPjFlLTY/Y29uZSpjbGFtcCgoKHAxLnorc2l6ZS56KS1yb3VuZCkvKChzaXplLnotcm91bmQpKjIuKSwwLiwxLik6MC46MC47ZmxvYXQgbWluVz1tYXgoMC4sc2l6ZS54LXNpemUueSk7ZmxvYXQgbWluSD1tYXgoMC4sc2l6ZS55LXNpemUueCk7ZmxvYXQgYm94Vz1taXgoc2l6ZS54LXJvdW5kLG1pblcsY29uZVNjYWxhcik7ZmxvYXQgYm94SD1taXgoc2l6ZS55LXJvdW5kLG1pbkgsY29uZVNjYWxhcik7ZmxvYXQgYUJldmVsPW1peChiZXZlbCwwLixjb25lU2NhbGFyKTtfZD1zZFJvdW5kQm94KMHAxLnh5LHZlYzIoYm94Vyxib3hIKSxhQmV2ZWwpO19kPW9wRXh0cnVzc2lvbihwMSxfZCxzaXplLnotcm91bmQpO31lbHNle19kPXNkUm91bmRCb3gocDEsc2l6ZS1yRGltLHJEaW0pO319X2Q9b3BSb3VuZChfZCxyb3VuZCk7cmV0dXJuIF9kO31mbG9hdCBzZGZNb2RDeWxpbmRlcih2ZWMzIF9wLHZlYzMgc2l6ZSxmbG9hdCBob2xlLGZsb2F0IGNvbmUsZmxvYXQgcm91bmQpe2Zsb2F0IF9kO3ZlYzMgcDE9X3A7ZmxvYXQgcmFkaXVzMD1hYnMoc2l6ZS56KT4xZS02P3NpemUueC0oKChjb25lKnNpemUueCkqKHAxLnorKHNpemUuei8yLikpKS9zaXplLnopOnNpemUueDtmbG9hdCByYWRpdXMxPWFicyhzaXplLnopPjFlLTY/c2l6ZS55LSgoKGNvbmUqc2l6ZS55KSoocDEueisoc2l6ZS56LMzIuKSkpL3NpemUueik6c2l6ZS55O2Jvb2wgaGFzUm91bmQ9cm91bmQ+MC4xO3JvdW5kPWhhc1JvdW5kP21pbigwLjk5LHJvdW5kKTowLjtyb3VuZD1yb3VuZCptaW4oc2l6ZS54LG1pbihzaXplLnksc2l6ZS56KSk7aWYoaG9sZT4wLil7ZmxvYXQgaG9sZVJhZGl1cz1tYXgoMC4sKDEuLWhvbGUpKm1pbihzaXplLngsbWluKHNpemUueSxzaXplLnopKSk7ZmxvYXQgckRlcHRoPW1heCgyLixzaXplLnotcm91bmQpO2lmKChhYnMoY29uZSk8MWUtNikmJihhYnMoc2l6ZS54LXNpemUueSk8MWUtNikpe19kPXNkQ2lyY2xlKHAxLnh5LG1heCgyLixyYWRpdXMwLXJvdW5kKSk7fWVsc2V7X2Q9c2RFbGxpcHNlKHAxLnh5LHZlYzIobWF4KDIuLHJhZGl1czAtcm91bmQpLG1heCgyLixyYWRpdXMxLMXJvdW5kKSkpO31fZD1hYnMoX2QtaG9sZVJhZGl1cyk7X2Q9b3BFeHRydXNzaW9uKHAxLF9kLHJEZXB0aCk7fWVsc2V7ZmxvYXQgckRlcHRoPW1heCgyLixzaXplLnotcm91bmQpO2lmKChhYnMoY29uZSk8MWUtNikmJihhYnMoc2l6ZS54LXNpemUueSk8MWUtNikpe19kPXNkRXh0cnVkZWRDaXJjbGUocDEsckRlcHRoLHZlYzIobWF4KDIuLHJhZGl1czAtcm91bmQpLG1heCgyLixyYWRpdXMxLXJvdW5kKSkpO31lbHNle19kPXNkRXh0cnVkZWRDeWxpbmRlcihwMSxyRGVwdGgsdmVjMihtYXgoMi4scmFkaXVzMC1yb3VuZCksbWF4KDIuLHJhZGl1czEtcm91bmQpKSk7fX1pZihoYXNSb3VuZCl7X2Q9b3BSb3VuZChfZCxyb3VuZCk7fXJldHVybiBfZDt9ZmxvYXQgc2RmTW9kQmV6aWVyKHZlYMzMgX3AsdmVjMyBzaXplLGludCBtb2RlLGZsb2F0IHJvdW5kLGZsb2F0IGxpbmVXaWR0aCxmbG9hdCB0b3J1cyl7dmVjMyBwMT1fcDtmbG9hdCBfZDtmbG9hdCBmPTEuNTt2ZWMyIHAwXz12ZWMyKC1zaXplLngsc2l6ZS55Ki0xLik7dmVjMiBwMV89dmVjMigwLiwoc2l6ZS55KjIuKSpmKTt2ZWMyIHAyXz12ZWMyKHNpemUueCxzaXplLnkqLTEuKTtyb3VuZD1taW4oMC45OSxyb3VuZCkqbWluKGxpbmVXaWR0aCxzaXplLnopO19kPXNkQmV6aWVyKHAxLnh5LHAwXyxwMV8scDJfKS0obGluZVdpZHRoLXJvdW5kKTtpZihtb2RlPT0xKXtmbG9hdCBleHQ9bWF4KDAuLHRvcnVzPjAuPzAuOnNpemUuei1saW5lV2lkdGgpO19kPW9wRXh0cnVzc2lvbihwMSxfZCxleHQpLWxpbmVXaWR0aDt9ZWxzZMSBpZih0b3J1cz4wLil7ZmxvYXQgcjE9bWF4KDAuLGxpbmVXaWR0aC0yLik7ZmxvYXQgZXh0PW1heCgwLixzaXplLnotbGluZVdpZHRoKTtfZD1vcEV4dHJ1c3Npb24ocDEsYWJzKF9kLXIxKSxleHQpLXNpemUuejt9ZWxzZXtmbG9hdCBleHQ9c2l6ZS56LXJvdW5kO19kPW9wRXh0cnVzc2lvbihwMSxfZCxleHQpO2Jvb2wgaGFzUm91bmQ9cm91bmQ+MC4xO2lmKGhhc1JvdW5kKXtfZD1vcFJvdW5kKF9kLHJvdW5kKTt9fXJldHVybiBfZDt9ZmxvYXQgc2RmTW9kSm9pbnQodmVjMyBfcCx2ZWMzIHNpemUsZmxvYXQgY29uZSxmbG9hdCByb3VuZCl7dmVjMyBwMT1fcDtmbG9hdCBfZDtmbG9hdCByYWRpdXM9Y29uZT4wLj9zaXplLngtKCgoY29uZSpzaXplLngpKihwMS56KyhzaXplLngqMi4pKMSkvKHNpemUueisoc2l6ZS54KjIuKSkpOnNpemUueDtfZD1zZFZlcnRpY2FsQ2Fwc3VsZShwMSxzaXplLnoscmFkaXVzKTtpZihyb3VuZD4wLjEpe19kPW9wUm91bmQoX2Qscm91bmQpO31yZXR1cm4gX2Q7fWZsb2F0IHNkZlN0cm9rZShpbnQgcHJpbSx2ZWMzIF9wLHZlYzMgc2l6ZSxpbnQgbW9kZSxmbG9hdCByb3VuZCxmbG9hdCBob2xlLGZsb2F0IGJldmVsLGZsb2F0IGNvbmUsZmxvYXQgbGluZVdpZHRoLGZsb2F0IHRvcnVzKXtpZihwcmltPT0xKXtyZXR1cm4gc2RmTW9kQ3ViZShfcCxzaXplLHJvdW5kLGhvbGUsYmV2ZWwsY29uZSk7fWVsc2UgaWYocHJpbT09Mil7cmV0dXJuIHNkZk1vZEN5bGluZGVyKF9wLHNpemUsaG9sZSxjb25lLHJvdW5kKTt9ZWxzZSBpZihwcmltPT0zKXtyZMXR1cm4gc2RmTW9kQmV6aWVyKF9wLHNpemUsbW9kZSxyb3VuZCxsaW5lV2lkdGgsdG9ydXMpO31lbHNlIGlmKHByaW09PTQpe3JldHVybiBzZGZNb2RKb2ludChfcCxzaXplLGNvbmUscm91bmQpO31lbHNlIGlmKHByaW09PTUpe3JldHVybiBzZEVsbGlwc29pZChfcCxzaXplKTt9ZWxzZXtyZXR1cm4gc2RFbGxpcHNvaWQoX3Asc2l6ZSk7fX1tYXQzIHJvdGF0aW9uTWF0cml4RnJvbUV1bGVycyh2ZWMzIHYpe3ZlYzMgcz12ZWMzKHNpbih2LngpLHNpbih2LnkpLHNpbih2LnopKTt2ZWMzIGM9dmVjMyhjb3Modi54KSxjb3Modi55KSxjb3Modi56KSk7cmV0dXJuIG1hdDMoYy55KmMueiwoYy54KnMueikrKChjLnoqcy54KSpzLnkpLChzLngqcy56KS0oKGMueCpjLnopKnMueSksLWMueSpzLMnosKGMueCpjLnopLSgocy54KnMueSkqcy56KSwoYy56KnMueCkrKChjLngqcy55KSpzLnopLHMueSwtYy55KnMueCxjLngqYy55KTt9aXZlYzIgdGV4dHVyZVBvcyhpbnQgZW50cnlJbmRleCxpbnQgc3RyaWRlKXtpbnQgd2lkdGg9MjA0ODtpbnQgcGVyUm93PXdpZHRoL3N0cmlkZTtpbnQgeD1pbnQobW9kKGZsb2F0KGVudHJ5SW5kZXgpLGZsb2F0KHBlclJvdykpKSpzdHJpZGU7aW50IHk9ZW50cnlJbmRleC9wZXJSb3c7cmV0dXJuIGl2ZWMyKHgseSk7fVJlc3VsdCBldmFsU2NlbmUodmVjMyBwKXtwPXAqMTUwLjtwPW1hdDMoMSwwLDAsMCwwLDEsMCwtMSwwKSpwO3A9cCt2ZWMzKDAsMCwyNTYtMTUwKTtSZXN1bHQgcmVzPVJlc3VsdCg5OTk5LiwwLiwwLiwwLiwwLik7dmVjNCBoZWFkZMXI9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCxpdmVjMigwLDApLDApO2ludCBzdHJva2VDb3VudD1pbnQoaGVhZGVyLngpO2ludCBzdHJpZGU9ODtpbnQgbGF5ZXJDb3VudD0wO1Jlc3VsdCBsYXllclJlcztpbnQgaT0xO3doaWxlKHRydWUpe2l2ZWMyIHRleFBvcz10ZXh0dXJlUG9zKGksc3RyaWRlKTt2ZWM0IGE9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoMCwwKSwwKTt2ZWM0IGI9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoMSwwKSwwKTt2ZWM0IGM9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoMiwwKSwwKTt2ZWM0IGQ9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoMywwKSwwKTt2ZWM0IGU9dGV4ZWxGZXRjaMCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoNCwwKSwwKTt2ZWM0IGY9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoNSwwKSwwKTt2ZWM0IGc9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoNiwwKSwwKTt2ZWM0IGg9dGV4ZWxGZXRjaCh1U3Ryb2tlc1RleCx0ZXhQb3MraXZlYzIoNywwKSwwKTtpbnQgcHJpbT1pbnQoYS54KTtpbnQgbW9kZT1pbnQoYS55KTt2ZWMzIHBvcz12ZWMzKGEueixhLncsYi54KTttYXQzIHJvdD1pbnZlcnNlKHJvdGF0aW9uTWF0cml4RnJvbUV1bGVycyh2ZWMzKGIueSxiLnosYi53KSkpO3ZlYzMgc2l6ZT12ZWMzKGMueCxjLnksYy56KTtmbG9hdCBibGVuZD1jLnc7ZmxvYXQgaG9sZT1kLnk7ZmxvYXQgYmV2ZWw9ZC56O2ZsbM2F0IHJvdW5kPWQudztmbG9hdCBjb25lPWUueDtmbG9hdCBsaW5lV2lkdGg9ZS55O2Zsb2F0IHRvcnVzPWUudztmbG9hdCBtaXJyb3I9Zi54O2Zsb2F0IG1hdGVyaWFsPWYueTtmbG9hdCBvZmZzWD1nLnk7UmVzdWx0IHI7ZmxvYXQgX2Q7dmVjMyBfcDtpZihtaXJyb3I9PTEuKXtfcD12ZWMzKGFicyhwLngtKHBvcy54LW9mZnNYKSktYWJzKG9mZnNYKSxwLnl6LXBvcy55eik7fWVsc2V7X3A9cC1wb3M7fV9wPXJvdCpfcDtfZD1zZGZTdHJva2UocHJpbSxfcCxzaXplLG1vZGUscm91bmQsaG9sZSxiZXZlbCxjb25lLGxpbmVXaWR0aCx0b3J1cyk7cj1SZXN1bHQoX2QsbWF0ZXJpYWwsMC4sMC4sYmxlbmQpO2lmKGxheWVyQ291bnQ9PTApe2xheWVyUmVzPVJlc3VsdCg5OTk5LiwwLiwwLiwwLMiwwLik7fWxheWVyQ291bnQrPTE7aWYobW9kZT09MCl7aWYoci5rPjAuKXtsYXllclJlcz1vcFNtb290aFVuaW9uKHIsbGF5ZXJSZXMsci5rKTt9ZWxzZXtsYXllclJlcz1vcFVuaW9uKHIsbGF5ZXJSZXMpO319ZWxzZSBpZihtb2RlPT0xKXtpZihyLms+MC4pe2xheWVyUmVzPW9wU21vb3RoU3VidHJhY3Rpb24ocixsYXllclJlcyxyLmspO31lbHNle2xheWVyUmVzPW9wU3VidHJhY3QocixsYXllclJlcyk7fX1lbHNlIGlmKG1vZGU9PTIpe2xheWVyUmVzPW9wSW50ZXJzZWN0KHIsbGF5ZXJSZXMpO31lbHNlIGlmKG1vZGU9PTMpe2xheWVyUmVzPW9wUmVwbGFjZShyLGxheWVyUmVzKTt9aWYoZy56PT0xLil7aWYobGF5ZXJDb3VudD4xKXtpbnQgbGF5ZXJNb2RlPWludChnLncpO2Zsb2F0IMGxheWVyQmxlbmQ9aC54O2lmKGxheWVyTW9kZT09MCl7aWYobGF5ZXJCbGVuZD4wLil7cmVzPW9wU21vb3RoVW5pb24obGF5ZXJSZXMscmVzLGxheWVyQmxlbmQpO31lbHNle3Jlcz1vcFVuaW9uKGxheWVyUmVzLHJlcyk7fX1lbHNlIGlmKG1vZGU9PTEpe2lmKHIuaz4wLil7cmVzPW9wU21vb3RoU3VidHJhY3Rpb24obGF5ZXJSZXMscmVzLGxheWVyQmxlbmQpO31lbHNle3Jlcz1vcFN1YnRyYWN0KGxheWVyUmVzLHJlcyk7fX1lbHNlIGlmKG1vZGU9PTMpe3Jlcz1vcFJlcGxhY2UobGF5ZXJSZXMscmVzKTt9fWxheWVyQ291bnQ9MDt9aSsrO2lmKGk+c3Ryb2tlQ291bnQpYnJlYWs7fXJlcy5kKj0oMS4vMTUwLik7cmV0dXJuIHJlczt9dmVjMyBHZXROb3JtYWwodmVjMyBwKXt2ZWMzIG49dMmVjMygwLjApO2ZvcihpbnQgaT1aRVJPO2k8NDtpKyspe3ZlYzMgZT0wLjU3NzMqKCgyLjAqdmVjMygoKGkrMyk+PjEpJjEsKGk+PjEpJjEsaSYxKSktMS4wKTtuKz0oZSpldmFsU2NlbmUocCsoZSowLjAwMSkpLmQpO31yZXR1cm4gbm9ybWFsaXplKG4pO31mbG9hdCBtYXAyKGluIHZlYzMgcG9zLHZlYzMgZGlyKXtyZXR1cm4gbWluKHBvcy55KzEuMCxldmFsU2NlbmUocG9zKS5kKTt9ZmxvYXQgY2FsY0FPKGluIHZlYzMgcG9zLGluIHZlYzMgbm9yKXtmbG9hdCBhbz0wLjA7Zm9yKGludCBpPVpFUk87aTw4O2krKyl7ZmxvYXQgaD0wLjAyKygoMC41KmZsb2F0KGkpKS83LjApO2Zsb2F0IGQ9bWFwMihwb3MrKGgqbm9yKSxub3IpO2FvKz0oaC1kKTt9cmV0dXJuIGNsYW1wKDEuNS0oYW8qMMC42KSwwLjAsMS4wKTt9ZmxvYXQgbWFwU2NhbGUoZmxvYXQgdixmbG9hdCBpbk1pbixmbG9hdCBpbk1heCxmbG9hdCBvdXRNaW4sZmxvYXQgb3V0TWF4KXtyZXR1cm4gKCgodi1pbk1pbikqKG91dE1heC1vdXRNaW4pKS8oaW5NYXgtaW5NaW4pKStvdXRNaW47fXZvaWQgbWFpbigpe2ludCB0cmVlSW5kZXg9aW50KGlOb2RlSW5kZXgvOC4pO2ludCBvY3RhbnQ9aW50KGlOb2RlSW5kZXgpJjc7aXZlYzIgdGV4UG9zPXRleHR1cmVQb3ModHJlZUluZGV4LDEpO3ZlYzMgY2VudGVyPXRleGVsRmV0Y2godVRyZWVUZXgsdGV4UG9zLDApLnh5ejt2ZWMzIGhhbGZTaXplO2lmKHVEb3VibGVNYXhEZXB0aD09MSl7aGFsZlNpemU9dUJvdW5kc1NpemUvZmxvYXQoMTw8KCh1RGVwdGgrMSkrKHVEZXB0aMD09dU1heERlcHRoPzA6MSkpKTt9ZWxzZXtoYWxmU2l6ZT11Qm91bmRzU2l6ZS9mbG9hdCgxPDwoKHVEZXB0aCsxKSsxKSk7fWludCBpPW9jdGFudDt2ZWMzIHBvcz12ZWMzKGJ2ZWMzKChpJjEpPjAsKGkmMik+MCwoaSY0KT4wKSk7dmVjMyBvZmZzPWhhbGZTaXplKigocG9zKjIuKS0xLik7dmVjMyBjb29yZD1jZW50ZXIrb2ZmcztSZXN1bHQgcmVzPWV2YWxTY2VuZShjb29yZCk7b1Jlc3VsdD12ZWM0KHJlcy5kLHJlcy5tMSxyZXMubTIscmVzLmIpO29Db29yZD12ZWM0KGNvb3JkLDAuKTtmbG9hdCBkaXN0VG9Db3JuZXI9bGVuZ3RoKGhhbGZTaXplKTtpZihhYnMocmVzLmQpPGRpc3RUb0Nvcm5lcil7aWYodURlcHRoPHVNYXhEZXB0aCl7b05vZGUueD0xLjt9ZWxzZXtvTm9kZS54PTAuOM3ZlYzMgbm9ybWFsPUdldE5vcm1hbChjb29yZCk7b05vcm1hbD12ZWM0KG5vcm1hbCxjYWxjQU8oY29vcmQsbm9ybWFsKSk7fX1lbHNle29Ob2RlLng9LTEuO2lmKCh1RG91YmxlTWF4RGVwdGg9PTEpJiYodURlcHRoPT11TWF4RGVwdGgpKXt2ZWMzIG5vcm1hbD1HZXROb3JtYWwoY29vcmQpO29Ob3JtYWw9dmVjNChub3JtYWwsY2FsY0FPKGNvb3JkLG5vcm1hbCkpO319fSIscmF5bWFyY2hlckZyYWdtZW50OiIjdmVyc2lvbiAzMDAgZXNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtwcmVjaXNpb24gaGlnaHAgaW50O3VuaWZvcm0gZmxvYXQgaVRpbWUsaURhdGUsaVRpbWVEZWx0YTt1bmlmb3JtIGludCBpRnJhbWU7b3V0IGxvd3AgdmVjNCBmcmFnQ29sb3I7XG51bmlmb3JtIHZlYzIgaVJlcM29sdXRpb247XG51bmlmb3JtIHZlYzQgaU1vdXNlLGlMYXN0Q2xpY2s7XG5pbiB2ZWMyIGZyYWdDb29yZDtcbnVuaWZvcm0gc2FtcGxlcjJEIGlUcmVlVGV4O3VuaWZvcm0gc2FtcGxlcjJEIHVSZXN1bHRUZXg7dW5pZm9ybSBzYW1wbGVyMkQgdU5vcm1hbFRleDt1bmlmb3JtIHZlYzMgdUNvbG9yc1s3NV07dW5pZm9ybSB2ZWM0IHVNYXRlcmlhbHNbMTBdO3VuaWZvcm0gdmVjMyB1Qm91bmRzTWluO3VuaWZvcm0gdmVjMyB1Qm91bmRzTWF4O3VuaWZvcm0gdmVjMyB1Q2FtZXJhUG9zO3VuaWZvcm0gdmVjMyB1Q2FtZXJhTG9va0F0O3VuaWZvcm0gZmxvYXQgdUNhbWVyYVpvb207dW5pZm9ybSB2ZWMzIHVCYWNrZ3JvdW5kQ29sb3IxO3VuaWZvcm0gdmVjMyB1QmFja2dyb3VuZENvbG9yMjtcbMiNkZWZpbmUgUEkgMy4xNDE1OTI1MzU5XG4jZGVmaW5lIE1BWF9TVEVQUyAxMDBcbiNkZWZpbmUgTUFYX0RJU1QgNjUuXG4jZGVmaW5lIFNVUkZfRElTVCAuMDFcbiNkZWZpbmUgWkVSTyAobWluKGlGcmFtZSwwKSlcbiNkZWZpbmUgQk9YX09GRlMgLjAyXG5zdHJ1Y3QgUmVzdWx0e2Zsb2F0IGQ7ZmxvYXQgbTE7ZmxvYXQgbTI7ZmxvYXQgYjtmbG9hdCBrO3ZlYzMgbm9ybWFsO2Zsb2F0IGFvO2Zsb2F0IGQyO307ZmxvYXQgc2RCb3godmVjMyBwLHZlYzMgYil7dmVjMyBxPWFicyhwKS1iO3JldHVybiBsZW5ndGgobWF4KHEsMC4wKSkrbWluKG1heChxLngsbWF4KHEueSxxLnopKSwwLjApO31mbG9hdCBhYWJiX3JheV9jYXN0KHZlYzMgYm94TWluLHZlYzMgYm94TWF4LHZlYzMgZnJvbSx2ZMWMzIGRpcil7ZmxvYXQgdE1pbjtmbG9hdCB0TWF4O3ZlYzMgaW52RD0xLjBmL2Rpcjt2ZWMzIHQxPShib3hNaW4ueHl6LWZyb20pKmludkQ7dmVjMyB0Mj0oYm94TWF4Lnh5ei1mcm9tKSppbnZEO3ZlYzMgbWluQ29tcHM9bWluKHQxLHQyKTt2ZWMzIG1heENvbXBzPW1heCh0MSx0Mik7dE1pbj1tYXgobWluQ29tcHMueCxtYXgobWluQ29tcHMueSxtaW5Db21wcy56KSk7dE1heD1taW4obWF4Q29tcHMueCxtaW4obWF4Q29tcHMueSxtYXhDb21wcy56KSk7cmV0dXJuIG1heCh0TWluLHRNYXgpO31pdmVjMiB0ZXh0dXJlUG9zKGludCBlbnRyeUluZGV4LGludCBzdHJpZGUpe2ludCB3aWR0aD0yMDQ4O2ludCBwZXJSb3c9d2lkdGgvc3RyaWRlO2ludCB4PWludChtb2QoZmxvYXQoZW50cnlJbMmRleCksZmxvYXQocGVyUm93KSkpKnN0cmlkZTtpbnQgeT1lbnRyeUluZGV4L3BlclJvdztyZXR1cm4gaXZlYzIoeCx5KTt9UmVzdWx0IGV2YWxEaXN0YW5jZUJvdW5kcyh2ZWMzIHAsb3V0IGJvb2wgaGl0cyl7dmVjMyBoYWxmU2l6ZT0odUJvdW5kc01heC11Qm91bmRzTWluKS8yLjt2ZWMzIGJveFBvcz11Qm91bmRzTWluK2hhbGZTaXplO2Zsb2F0IGJveEQ9c2RCb3gocC1ib3hQb3MsaGFsZlNpemUpO2hpdHM9Ym94RDxTVVJGX0RJU1Q7cmV0dXJuIFJlc3VsdChib3hEK0JPWF9PRkZTLDgxLiwwLiwwLiwwLix2ZWMzKDApLDAuLGJveEQrQk9YX09GRlMpO31SZXN1bHQgZXZhbERpc3RhbmNlKHZlYzMgcCx2ZWMzIGRpcil7dmVjMyBmdWxsU2l6ZT11Qm91bmRzTWF4LXVCb3VuZHNNaW47dMmVjMyBoYWxmU2l6ZT1mdWxsU2l6ZS8yLjt2ZWMzIGNlbnRlcj11Qm91bmRzTWluK2hhbGZTaXplO2ludCB0cmVlSW5kZXg9MDtpdmVjMiB0ZXhQb3M7dmVjNCBub2RlO2ludCBkZXB0aD0wO3doaWxlKHRydWUpe2hhbGZTaXplPWZ1bGxTaXplL2Zsb2F0KDE8PChkZXB0aCsxKSk7dGV4UG9zPXRleHR1cmVQb3ModHJlZUluZGV4LDEpO25vZGU9dGV4ZWxGZXRjaChpVHJlZVRleCx0ZXhQb3MsMCk7Ym9vbCByZWN1cnNlPW5vZGUueD4wLjU7aWYocmVjdXJzZSl7aXZlYzMgcG9zPWl2ZWMzKGdyZWF0ZXJUaGFuRXF1YWwocCxjZW50ZXIpKTtpbnQgb2N0YW50PShwb3MueCsoMipwb3MueSkpKyg0KnBvcy56KTt0cmVlSW5kZXg9aW50KG5vZGUueCkrb2N0YW50O2NlbnRlcis9KChoYWxmU2l6ZMS8yLikqKCh2ZWMzKHBvcykqMi4pLTEuKSk7fWVsc2V7YnJlYWs7fWRlcHRoKys7aWYoZGVwdGg9PTEwKWJyZWFrO312ZWM0IHJlc3VsdD10ZXhlbEZldGNoKHVSZXN1bHRUZXgsdGV4UG9zLDApO2Zsb2F0IGRpc3Q9cmVzdWx0Lng7aWYoZGVwdGg9PTEwKXtyZXR1cm4gUmVzdWx0KGRpc3QsMC4sMC4sMC4sMC4sdmVjMygwKSwwLixkaXN0KTt9ZWxzZXtib29sIGRlYWRFbmQ9bm9kZS54PC0wLjAxO2lmKGRlYWRFbmQpe3ZlYzMgbWluUG9zPWNlbnRlci1oYWxmU2l6ZTt2ZWMzIG1heFBvcz1jZW50ZXIraGFsZlNpemU7ZmxvYXQgdD1hYWJiX3JheV9jYXN0KG1pblBvcyxtYXhQb3MscCxkaXIpO2Zsb2F0IGQ9dDwwLj9kaXN0Om1pbih0K0JPWF9PRkZTLGRpc3QpO3JldHVybiBSZXN1bHQoZMCwwLixyZXN1bHQueixyZXN1bHQudywwLix2ZWMzKDApLDAuLGRpc3QpO31lbHNle3ZlYzQgbm9ybWFsQU89dGV4ZWxGZXRjaCh1Tm9ybWFsVGV4LHRleFBvcywwKTt2ZWMzIG5vcm1hbD1ub3JtYWxBTy54eXo7ZmxvYXQgYW89bm9ybWFsQU8udztyZXR1cm4gUmVzdWx0KC0uMSxyZXN1bHQueSxyZXN1bHQueixyZXN1bHQudywwLixub3JtYWwsYW8sZGlzdCk7fX19dm9pZCBldmFsTWF0ZXJpYWwoZmxvYXQgbSx2ZWMzIHAsb3V0IHZlYzMgY29sLG91dCB2ZWM0IG1hdCl7bS09MS47aW50IGNvbG9ySW5kZXg9aW50KG1vZChhYnMobSksMTAwMDAuKSkvMTA7aW50IG1hdGVyaWFsVHlwZUluZGV4PWludChtb2QoYWJzKG0pLDEwLikpO2NvbD11Q29sb3JzW2NvbG9ySW5kZXhdLzI1NS47Y29sPMXBvdyhjb2wsdmVjMygyLjIpKTttYXQ9dU1hdGVyaWFsc1ttYXRlcmlhbFR5cGVJbmRleF07fXZvaWQgWGZvcm1QKGlub3V0IHZlYzMgcCl7cCo9OTAwLjtwPShtYXQzKDEsMCwwLDAsMCwxLDAsLTEsMCkqbWF0MygwLDAsMSwwLDEsMCwtMSwwLDApKSpwO3ArPXZlYzMoMCwwLDI4MCk7fVJlc3VsdCBHZXREaXN0SWdub3JlQm94KHZlYzMgcCx2ZWMzIGRpcil7cmV0dXJuIGV2YWxEaXN0YW5jZShwLGRpcik7fVJlc3VsdCBHZXREaXN0KHZlYzMgcCx2ZWMzIGRpcixvdXQgYm9vbCBoaXRzKXtSZXN1bHQgcj1ldmFsRGlzdGFuY2VCb3VuZHMocCxoaXRzKTtpZihoaXRzKXtyZXR1cm4gZXZhbERpc3RhbmNlKHAsZGlyKTt9ZWxzZXtyZXR1cm4gcjt9fVJlc3VsdCBSYXlNYXJjaCh2ZWMzIHJvLMHZlYzMgcmQsb3V0IGludCBzdGVwcyl7ZmxvYXQgZE89MC47UmVzdWx0IHI9UmVzdWx0KGRPLDAuLDAuLDAuLDAuLHZlYzMoMCksMC4sZE8pO2ludCBpO2ZvcihpPVpFUk87aTxNQVhfU1RFUFM7aSsrKXtpZihkTz5NQVhfRElTVCl7YnJlYWs7fXZlYzMgcD1ybysocmQqZE8pO2Jvb2wgaGl0cztSZXN1bHQgZHM9R2V0RGlzdChwLHJkLGhpdHMpO2lmKGRzLmQ8U1VSRl9ESVNUKXtkTys9ZHMuZDtyPVJlc3VsdChkTyxkcy5tMSxkcy5tMixkcy5iLDAuLGRzLm5vcm1hbCxkcy5hbyxkTyk7YnJlYWs7fWRPKz1kcy5kO3N0ZXBzPWk7fXJldHVybiByO31mbG9hdCBzaGFkb3dzKGluIHZlYzMgcm8saW4gdmVjMyByZCxmbG9hdCBtaW50LGZsb2F0IGspe2Zsb2F0IHJlcz0xLjA7ZmxvYXQgdD1taMW50O2Zsb2F0IGg9MS4wO2Zsb2F0IG1heHQ9My47Zm9yKDt0PG1heHQ7KXtoPUdldERpc3RJZ25vcmVCb3gocm8rKHJkKnQpLHJkKS5kMjtpZihoPChTVVJGX0RJU1QqMi4pKXJldHVybiAwLjtyZXM9bWluKHJlcywoaypoKS90KTt0Kz1oO31yZXR1cm4gY2xhbXAocmVzLDAuMCwxLjApO31mbG9hdCBtYXBTY2FsZShmbG9hdCB2LGZsb2F0IGluTWluLGZsb2F0IGluTWF4LGZsb2F0IG91dE1pbixmbG9hdCBvdXRNYXgpe3JldHVybiAoKCh2LWluTWluKSoob3V0TWF4LW91dE1pbikpLyhpbk1heC1pbk1pbikpK291dE1pbjt9dmVjMyBHZXRMaWdodCh2ZWMzIHBvcyx2ZWMzIGNvbCx2ZWMzIHJkLHZlYzQgbWF0LHZlYzMgbm9yLGZsb2F0IG9jYyl7dmVjMyB2aWV3PS1yZDtmbG9hdCBhbmdsZMT0xLjt2ZWMzIGxpZ2h0UG9zPXZlYzMoNS4qc2luKGFuZ2xlKSw1Liw2LisoNS4qY29zKGFuZ2xlKSkpO3ZlYzMgbGlnPW5vcm1hbGl6ZSh2ZWMzKDAuOTYsMC44LC0wLjcpKTtmbG9hdCBzcG93PTUuO3ZlYzMgcmVmPXJlZmxlY3QocmQsbm9yKTtmbG9hdCBkaWY9bWFwU2NhbGUoZG90KG5vcixsaWcpLC0xLiwxLiwwLiwxLik7ZmxvYXQgYW1iPWNsYW1wKDEuNSsoMC41Km5vci55KSwwLjAsMS4wKTtmbG9hdCBzcGU9cG93KGNsYW1wKGRvdChyZWYsbGlnKSwwLjAsMS4wKSxzcG93KTtmbG9hdCBmcmU9cG93KGNsYW1wKDEuMCtkb3Qobm9yLHJkKSwwLjAsMS4wKSwyLjApO2Zsb2F0IGRvbT0wLjtmbG9hdCBzaGFkb3c9c2hhZG93cyhwb3MrKChub3IqU1VSRl9ESVNUKSoyLiksbGlnLDAuMMDUsMy4pO2RpZio9bWFwU2NhbGUoc21vb3Roc3RlcCgwLiwxLixzaGFkb3cpLDAuLDEuLDAuNSwxLik7dmVjMyBsaW49dmVjMygwLjApO2xpbis9ZGlmO2xpbis9KChhbWIqMC41KSpvY2MpO2NvbD1jb2wqbGluO3JldHVybiBjb2w7fXN0cnVjdCByYXl7dmVjMyBwb3M7dmVjMyBkaXI7fTtyYXkgY2FtZXJhUmF5KHZlYzIgdXYsdmVjMyBjYW1Qb3MsdmVjMyBsb29rQXQsZmxvYXQgem9vbSl7dmVjMyBmPW5vcm1hbGl6ZShsb29rQXQtY2FtUG9zKTt2ZWMzIHI9bm9ybWFsaXplKGNyb3NzKHZlYzMoMC4wLDEuMCwwLjApLGYpKTt2ZWMzIHU9bm9ybWFsaXplKGNyb3NzKGYscikpO3ZlYzMgYz1jYW1Qb3MrKGYqem9vbSk7dmVjMyBpPShjKyh1di54KnIpKSsodXYueSp1KTt2ZWMzIGRpcj1pLMWNhbVBvcztyZXR1cm4gcmF5KGNhbVBvcyxub3JtYWxpemUoZGlyKSk7fXN0cnVjdCBjYW17dmVjMyBwb3M7dmVjMyBsb29rQXQ7ZmxvYXQgem9vbTt9O1xuI2RlZmluZSBBQSAxXG52b2lkIG1haW4oKXt2ZWMzIHRvdD12ZWMzKDAuMCk7Zm9yKGludCBtPTA7bTxBQTttKyspZm9yKGludCBuPTA7bjxBQTtuKyspe3ZlYzIgbz0odmVjMihmbG9hdChtKSxmbG9hdChuKSkvZmxvYXQoQUEpKS0wLjU7dmVjMiB1dj1mcmFnQ29vcmQrKG8vaVJlc29sdXRpb24ueCk7dXYueCo9KGlSZXNvbHV0aW9uLngvaVJlc29sdXRpb24ueSk7cmF5IGNhbVJheT1jYW1lcmFSYXkodXYsdUNhbWVyYVBvcyx1Q2FtZXJhTG9va0F0LHVDYW1lcmFab29tKTt2ZWMzIHJvPWNhbVJheS5wb3M7dmVjMyByZD1jYW1SYMXkuZGlyO2ludCBzdGVwcztSZXN1bHQgZD1SYXlNYXJjaChybyxyZCxzdGVwcyk7dmVjMyBjb2xvcj1wb3cobWl4KHVCYWNrZ3JvdW5kQ29sb3IxLHVCYWNrZ3JvdW5kQ29sb3IyLHV2LnkpLHZlYzMoMi4yKSk7aWYoKGQuZDxNQVhfRElTVCkmJihkLm0xPjAuKSl7dmVjMyBkaWZmdXNlPXZlYzMoMSwxLDEpO3ZlYzQgbWF0O3ZlYzMgcHA9cm8rKHJkKmQuZCk7ZXZhbE1hdGVyaWFsKGQubTEscHAsZGlmZnVzZSxtYXQpO3ZlYzMgZGlmZnVzZTI9dmVjMygxLDEsMSk7dmVjNCBtYXQyXztldmFsTWF0ZXJpYWwoZC5tMixwcCxkaWZmdXNlMixtYXQyXyk7ZGlmZnVzZT1kLm0yPT0wLj9kaWZmdXNlOm1peChkaWZmdXNlLGRpZmZ1c2UyLGQuYik7bWF0PWQubTI9PTAuP21hdDptaXgobWF0LG1hdMDJfLGQuYik7Y29sb3I9R2V0TGlnaHQocHAsZGlmZnVzZSxyZCxtYXQsZC5ub3JtYWwsZC5hbyk7fXRvdCs9Y29sb3I7fXRvdC89ZmxvYXQoQUEqQUEpO3RvdD1wb3codG90LHZlYzMoMS4vMi4yKSk7ZnJhZ0NvbG9yPXZlYzQodG90LDEuKTt9In07PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiPigoKT0+e3ZhciBlPXs4MjU6KGUsdCk9PntsZXQgbz1bWzEwMDAxLDEwMDExLDEwMDIxXSxbMTAwMzEsMTAwNDEsMTAwNTFdLFsxMDA2MSwxMDA3MSwxMDA4MV0sWzEwMDkxLDEwMTAxLDEwMTExXSxbMTAxMjEsMTAxMzEsMTAxNDFdLFsxMDE1MSwxMDE2MSwxMDE3MV0sWzEwMTgxLDEwMTkxLDEwMjAxXSxbMTAyMTEsMTAyMjEsMTAyMzFdLFsxMDI0MSwxMDI1MSwxMDI2MV0sWzEwMjcxLMDEwMjgxLDEwMjkxXSxbMTAzMDEsMTAzMTEsMTAzMjFdLFsxMDMzMSwxMDM0MSwxMDM1MV0sWzEwMzkxLDEwNDAxLDEwNDExXV0sbj1bW1suNiwuODA1LDFdLFsuNiwuODA1LDFdXSxbWy44MjgsLjg0OCwuOTQyXSxbLjgyOCwuODQ4LC45NDJdXSxbWy42MTQsLjkyNiwuOTk4XSxbLjYxNCwuOTI2LC45OThdXSxbWy45NjEsLjkxNCwuOTc2XSxbLjk2MSwuOTE0LC45NzZdXV07Y29uc3Qgcj1bImJvZHkiLCJmbG9vciIsImdsYXNzZXMiLCJzaGlydCIsImdyb3VuZCIsImhhbmQiLCJoZWFkdG9wIiwibmVjayIsInNob2VzIl0sYT1bImZsb29yIiwiZ2xhc3NlcyIsImdyb3VuZCIsImhhbmQiLCJoZWFkdG9wIiwibmVjayIsInNoaXJ0Iiwic2hvZXMiXSxzPVsiaGFuZCIsImdsYXNzZXMiLCJncMm91bmQiLCJoZWFkdG9wIiwic2hpcnQiLCJuZWNrIl07dC5ybD1yLHQuUG89byx0LllzPW4sdC5nbj1lPT57bGV0IHQ9e307Zm9yKGxldCBvIG9mIHIpdFtvXT1lW29dLmZpbHRlcigoZT0+ISFlKSkubWFwKChlPT5lLnRoZS5pbmRleCkpLnNvcnQoKChlLHQpPT5lLXQpKTtyZXR1cm4gdH0sdC51OT0oZS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ZXtmb3IoZj1oPW1bZF0saT0xO2g+PTEwO2gvPTEwLGkrKyk7Zz0ocz0obyU9YyktYytpKTwwPzA6Zi95W2ktcy0xXSUxMHwwfWlmKG49bnx8ZTwwfHxudWxsIT1tW2QrMV18fChzPDA/ZjpmJXlbaS1zLTFdKSxuPXI8ND8oZ3x8bikmJigwPT1yfHxyPT0odC5zPDA/MzoyKSk6Zz41fHw1PT1nJiYoND09cnx8bnx8Nj09ciYmKG8+MD9zPjA/Zi95W2ktc106MDptW2QtMV0pJTEwJjF8fHI9PSh0LnM8MD84OjcpKSxlPDF8fCFtWzBdKXJldHVybiBtLmxlbmd0aD0wLG4/KGUtPXQuZSsxLG1bMF09eVsoYy1lJWMpJWNdLHQuZT0tZXx8MCk6bVswXT10LmU9MCx0O2lmKDA9PW8/KG0ubGVuZ3RoPWQsaD0xLGQtLSk6KG0ubGVuZ3RoPWQrMSxoPXlbYy1vXSxtW2RdPXM+MD91KGYveMVtpLXNdJXlbc10pKmg6MCksbilmb3IoOzspe2lmKDA9PWQpe2ZvcihvPTEscz1tWzBdO3M+PTEwO3MvPTEwLG8rKyk7Zm9yKHM9bVswXSs9aCxoPTE7cz49MTA7cy89MTAsaCsrKTtvIT1oJiYodC5lKyssbVswXT09bCYmKG1bMF09MSkpO2JyZWFrfWlmKG1bZF0rPWgsbVtkXSE9bClicmVhazttW2QtLV09MCxoPTF9Zm9yKG89bS5sZW5ndGg7MD09PW1bLS1vXTttLnBvcCgpKTt9dC5lPlA/dC5jPXQuZT1udWxsOnQuZTxVJiYodC5jPVt0LmU9MF0pfXJldHVybiB0fWZ1bmN0aW9uIFkodCl7dmFyIGUscj10LmU7cmV0dXJuIG51bGw9PT1yP3QudG9TdHJpbmcoKTooZT13KHQuYyksZT1yPD1JfHxyPj1DP18oZSxyKTpFKGUsciwiMCIpLHQuczwwPyItIitlOmUpfXJldHVybiAkLmNsb25lPMXQsJC5ST1VORF9VUD0wLCQuUk9VTkRfRE9XTj0xLCQuUk9VTkRfQ0VJTD0yLCQuUk9VTkRfRkxPT1I9MywkLlJPVU5EX0hBTEZfVVA9NCwkLlJPVU5EX0hBTEZfRE9XTj01LCQuUk9VTkRfSEFMRl9FVkVOPTYsJC5ST1VORF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cMiBmPXU+Pj4yNixsPTY3MTA4ODYzJnUsYz1NYXRoLm1pbihoLGUubGVuZ3RoLTEpLGQ9TWF0aC5tYXgoMCxoLXQubGVuZ3RoKzEpO2Q8PWM7ZCsrKXt2YXIgcD1oLWR8MDtmKz0ocz0oaT0wfHQud29yZHNbcF0pKihvPTB8ZS53b3Jkc1tkXSkrbCkvNjcxMDg4NjR8MCxsPTY3MTA4ODYzJnN9ci53b3Jkc1toXT0wfGwsdT0wfGZ9cmV0dXJuIDAhPT11P3Iud29yZHNbaF09MHx1OnIubGVuZ3RoLS0sci5fc3RyaXAoKX1vLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dGhpcy5fc3RyaXAoKTt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbihvPjAsIlJlcMXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYWxsb2NVbnNhZmU/dC5hbGxvY1Vuc2FmZShlKTpuZXcgdChlKX0odCxvKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PWU/IkxFIjoiQkUiKV0ocyxpKSxzfSxvLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPTAsbz0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgcz10aGlzLndvcmRzW2ldPDxvfG47dFtyKytdPTI1NSZzLHI8dC5sZW5ndGgmJih0W3IrK109cz4+OCYyNTUpLHI8dC5sZW5ndGgmJih0W3IrK109cz4+MTYmMjU1KSw2PT09bz8ocjx0Lmxlbmd0aCYmKHRbcisrXT1zPj4yNCYyNTUpLG49MCxvPTApOihuPMXM+Pj4yNCxvKz0yKX1pZihyPHQubGVuZ3RoKWZvcih0W3IrK109bjtyPHQubGVuZ3RoOyl0W3IrK109MH0sby5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZ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W9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbMih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dMGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54bM3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaX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SkrTWF0aC5pbXVsKE0sRil8MCxvPU1hdGguaW11bChNLHopLG49bitNYXRoLmltdWwoeSwkKXwwLGk9KGk9aStNYXRoLmltdWwoeSxIKXwwKStNYXRoLmltdWwodywkKXwwLG89bytNYXRoLmltdWwodyxIKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9KGk9aStNYXRoLmltdWwocCxWKXwwKStNYXRoLmltdWwoZyxaKXwwLG89bytNYXRoLmltdWwoZyxWKXwwO3ZhciB2dD0oaCsobj1uK01hdGguaMW11bChsLEspfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLFgpfDApK01hdGguaW11bChjLEspfDApKTw8MTMpfDA7aD0oKG89bytNYXRoLmltdWwoYyxYKXwwKSsoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoRSxGKSxpPShpPU1hdGguaW11bChFLHopKStNYXRoLmltdWwoUyxGKXwwLG89TWF0aC5pbXVsKFMseiksbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLEgpfDApK01hdGguaW11bChNLCQpfDAsbz1vK01hdGguaW11bChNLEgpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT0oaT1pK01hdGguaW11bCh5LFYpfDApK01hdGguaW11bCh3LFopfDAsbz1vK01hdGguaW11bCh3LFYpfDAsbj1uK01hdGguaW11bMChwLEspfDAsaT0oaT1pK01hdGguaW11bChwLFgpfDApK01hdGguaW11bChnLEspfDAsbz1vK01hdGguaW11bChnLFgpfDA7dmFyIGJ0PShoKyhuPW4rTWF0aC5pbXVsKGwsUSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGwsdHQpfDApK01hdGguaW11bChjLFEpfDApKTw8MTMpfDA7aD0oKG89bytNYXRoLmltdWwoYyx0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEEsRiksaT0oaT1NYXRoLmltdWwoQSx6KSkrTWF0aC5pbXVsKEIsRil8MCxvPU1hdGguaW11bChCLHopLG49bitNYXRoLmltdWwoRSwkKXwwLGk9KGk9aStNYXRoLmltdWwoRSxIKXwwKStNYXRoLmltdWwoUywkKXwwLG89bytNYXRoLmltdWwoUyxIKXwwLG49bMitNYXRoLmltdWwoYixaKXwwLGk9KGk9aStNYXRoLmltdWwoYixWKXwwKStNYXRoLmltdWwoTSxaKXwwLG89bytNYXRoLmltdWwoTSxWKXwwLG49bitNYXRoLmltdWwoeSxLKXwwLGk9KGk9aStNYXRoLmltdWwoeSxYKXwwKStNYXRoLmltdWwodyxLKXwwLG89bytNYXRoLmltdWwodyxYKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9KGk9aStNYXRoLmltdWwocCx0dCl8MCkrTWF0aC5pbXVsKGcsUSl8MCxvPW8rTWF0aC5pbXVsKGcsdHQpfDA7dmFyIE10PShoKyhuPW4rTWF0aC5pbXVsKGwscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLG50KXwwKStNYXRoLmltdWwoYyxydCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLG50KXwwKSsoaT4+PjEzKXwwKSsoTMXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxGKSxpPShpPU1hdGguaW11bChrLHopKStNYXRoLmltdWwoTyxGKXwwLG89TWF0aC5pbXVsKE8seiksbj1uK01hdGguaW11bChBLCQpfDAsaT0oaT1pK01hdGguaW11bChBLEgpfDApK01hdGguaW11bChCLCQpfDAsbz1vK01hdGguaW11bChCLEgpfDAsbj1uK01hdGguaW11bChFLFopfDAsaT0oaT1pK01hdGguaW11bChFLFYpfDApK01hdGguaW11bChTLFopfDAsbz1vK01hdGguaW11bChTLFYpfDAsbj1uK01hdGguaW11bChiLEspfDAsaT0oaT1pK01hdGguaW11bChiLFgpfDApK01hdGguaW11bChNLEspfDAsbz1vK01hdGguaW11bChNLFgpfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT0oaT1pK01hdGguaW11bCh5LHR0KMXwwKStNYXRoLmltdWwodyxRKXwwLG89bytNYXRoLmltdWwodyx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT0oaT1pK01hdGguaW11bChwLG50KXwwKStNYXRoLmltdWwoZyxydCl8MCxvPW8rTWF0aC5pbXVsKGcsbnQpfDA7dmFyIF90PShoKyhuPW4rTWF0aC5pbXVsKGwsb3QpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLHN0KXwwKStNYXRoLmltdWwoYyxvdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLHN0KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeCxGKSxpPShpPU1hdGguaW11bCh4LHopKStNYXRoLmltdWwoTixGKXwwLG89TWF0aC5pbXVsKE4seiksbj1uK01hdGguaW11bChrLCQpfDAsaT0oaMT1pK01hdGguaW11bChrLEgpfDApK01hdGguaW11bChPLCQpfDAsbz1vK01hdGguaW11bChPLEgpfDAsbj1uK01hdGguaW11bChBLFopfDAsaT0oaT1pK01hdGguaW11bChBLFYpfDApK01hdGguaW11bChCLFopfDAsbz1vK01hdGguaW11bChCLFYpfDAsbj1uK01hdGguaW11bChFLEspfDAsaT0oaT1pK01hdGguaW11bChFLFgpfDApK01hdGguaW11bChTLEspfDAsbz1vK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChiLFEpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoTSxRKXwwLG89bytNYXRoLmltdWwoTSx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT0oaT1pK01hdGguaW11bCh5LG50KXwwKStNYXRoLmltdWwodyxydCl8MCxvPW8rTWF0aC5pbMXVsKHcsbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9KGk9aStNYXRoLmltdWwocCxzdCl8MCkrTWF0aC5pbXVsKGcsb3QpfDAsbz1vK01hdGguaW11bChnLHN0KXwwO3ZhciBFdD0oaCsobj1uK01hdGguaW11bChsLHV0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwobCxodCl8MCkrTWF0aC5pbXVsKGMsdXQpfDApKTw8MTMpfDA7aD0oKG89bytNYXRoLmltdWwoYyxodCl8MCkrKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMsRiksaT0oaT1NYXRoLmltdWwoQyx6KSkrTWF0aC5pbXVsKFUsRil8MCxvPU1hdGguaW11bChVLHopLG49bitNYXRoLmltdWwoeCwkKXwwLGk9KGk9aStNYXRoLmltdWwoeCxIKXwwKStNYXRoLmltdWwoTMiwkKXwwLG89bytNYXRoLmltdWwoTixIKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9KGk9aStNYXRoLmltdWwoayxWKXwwKStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoQSxLKXwwLGk9KGk9aStNYXRoLmltdWwoQSxYKXwwKStNYXRoLmltdWwoQixLKXwwLG89bytNYXRoLmltdWwoQixYKXwwLG49bitNYXRoLmltdWwoRSxRKXwwLGk9KGk9aStNYXRoLmltdWwoRSx0dCl8MCkrTWF0aC5pbXVsKFMsUSl8MCxvPW8rTWF0aC5pbXVsKFMsdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKE0scnQpfDAsbz1vK01hdGguaW11bChNLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MMCxpPShpPWkrTWF0aC5pbXVsKHksc3QpfDApK01hdGguaW11bCh3LG90KXwwLG89bytNYXRoLmltdWwodyxzdCl8MCxuPW4rTWF0aC5pbXVsKHAsdXQpfDAsaT0oaT1pK01hdGguaW11bChwLGh0KXwwKStNYXRoLmltdWwoZyx1dCl8MCxvPW8rTWF0aC5pbXVsKGcsaHQpfDA7dmFyIFN0PShoKyhuPW4rTWF0aC5pbXVsKGwsbHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLGN0KXwwKStNYXRoLmltdWwoYyxsdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLGN0KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixGKSxpPShpPU1hdGguaW11bChqLHopKStNYXRoLmltdWwoRCxGKXwwLG89TWF0aC5pbXVsKEQseiksbMj1uK01hdGguaW11bChDLCQpfDAsaT0oaT1pK01hdGguaW11bChDLEgpfDApK01hdGguaW11bChVLCQpfDAsbz1vK01hdGguaW11bChVLEgpfDAsbj1uK01hdGguaW11bCh4LFopfDAsaT0oaT1pK01hdGguaW11bCh4LFYpfDApK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChrLEspfDAsaT0oaT1pK01hdGguaW11bChrLFgpfDApK01hdGguaW11bChPLEspfDAsbz1vK01hdGguaW11bChPLFgpfDAsbj1uK01hdGguaW11bChBLFEpfDAsaT0oaT1pK01hdGguaW11bChBLHR0KXwwKStNYXRoLmltdWwoQixRKXwwLG89bytNYXRoLmltdWwoQix0dCl8MCxuPW4rTWF0aC5pbXVsKEUscnQpfDAsaT0oaT1pK01hdGguaW11bChFLG50KXwwKStNYXRoLMmltdWwoUyxydCl8MCxvPW8rTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChiLG90KXwwLGk9KGk9aStNYXRoLmltdWwoYixzdCl8MCkrTWF0aC5pbXVsKE0sb3QpfDAsbz1vK01hdGguaW11bChNLHN0KXwwLG49bitNYXRoLmltdWwoeSx1dCl8MCxpPShpPWkrTWF0aC5pbXVsKHksaHQpfDApK01hdGguaW11bCh3LHV0KXwwLG89bytNYXRoLmltdWwodyxodCl8MCxuPW4rTWF0aC5pbXVsKHAsbHQpfDAsaT0oaT1pK01hdGguaW11bChwLGN0KXwwKStNYXRoLmltdWwoZyxsdCl8MCxvPW8rTWF0aC5pbXVsKGcsY3QpfDA7dmFyIFJ0PShoKyhuPW4rTWF0aC5pbXVsKGwscHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLGd0KXwwKStNYXRoLmltdWwoYyxwdCl8MCkpPMDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLGd0KXwwKSsoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaiwkKSxpPShpPU1hdGguaW11bChqLEgpKStNYXRoLmltdWwoRCwkKXwwLG89TWF0aC5pbXVsKEQsSCksbj1uK01hdGguaW11bChDLFopfDAsaT0oaT1pK01hdGguaW11bChDLFYpfDApK01hdGguaW11bChVLFopfDAsbz1vK01hdGguaW11bChVLFYpfDAsbj1uK01hdGguaW11bCh4LEspfDAsaT0oaT1pK01hdGguaW11bCh4LFgpfDApK01hdGguaW11bChOLEspfDAsbz1vK01hdGguaW11bChOLFgpfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT0oaT1pK01hdGguaW11bChrLHR0KXwwKStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTMyx0dCl8MCxuPW4rTWF0aC5pbXVsKEEscnQpfDAsaT0oaT1pK01hdGguaW11bChBLG50KXwwKStNYXRoLmltdWwoQixydCl8MCxvPW8rTWF0aC5pbXVsKEIsbnQpfDAsbj1uK01hdGguaW11bChFLG90KXwwLGk9KGk9aStNYXRoLmltdWwoRSxzdCl8MCkrTWF0aC5pbXVsKFMsb3QpfDAsbz1vK01hdGguaW11bChTLHN0KXwwLG49bitNYXRoLmltdWwoYix1dCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsaHQpfDApK01hdGguaW11bChNLHV0KXwwLG89bytNYXRoLmltdWwoTSxodCl8MCxuPW4rTWF0aC5pbXVsKHksbHQpfDAsaT0oaT1pK01hdGguaW11bCh5LGN0KXwwKStNYXRoLmltdWwodyxsdCl8MCxvPW8rTWF0aC5pbXVsKHcsY3QpfDA7dmFyIEF0PShoKyhuPW4rTWF0aC5pbXVsKHAscHQpfMDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChwLGd0KXwwKStNYXRoLmltdWwoZyxwdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChnLGd0KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixaKSxpPShpPU1hdGguaW11bChqLFYpKStNYXRoLmltdWwoRCxaKXwwLG89TWF0aC5pbXVsKEQsViksbj1uK01hdGguaW11bChDLEspfDAsaT0oaT1pK01hdGguaW11bChDLFgpfDApK01hdGguaW11bChVLEspfDAsbz1vK01hdGguaW11bChVLFgpfDAsbj1uK01hdGguaW11bCh4LFEpfDAsaT0oaT1pK01hdGguaW11bCh4LHR0KXwwKStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKGsscMnQpfDAsaT0oaT1pK01hdGguaW11bChrLG50KXwwKStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChBLG90KXwwLGk9KGk9aStNYXRoLmltdWwoQSxzdCl8MCkrTWF0aC5pbXVsKEIsb3QpfDAsbz1vK01hdGguaW11bChCLHN0KXwwLG49bitNYXRoLmltdWwoRSx1dCl8MCxpPShpPWkrTWF0aC5pbXVsKEUsaHQpfDApK01hdGguaW11bChTLHV0KXwwLG89bytNYXRoLmltdWwoUyxodCl8MCxuPW4rTWF0aC5pbXVsKGIsbHQpfDAsaT0oaT1pK01hdGguaW11bChiLGN0KXwwKStNYXRoLmltdWwoTSxsdCl8MCxvPW8rTWF0aC5pbXVsKE0sY3QpfDA7dmFyIEJ0PShoKyhuPW4rTWF0aC5pbXVsKHkscHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdMGguaW11bCh5LGd0KXwwKStNYXRoLmltdWwodyxwdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bCh3LGd0KXwwKSsoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixLKSxpPShpPU1hdGguaW11bChqLFgpKStNYXRoLmltdWwoRCxLKXwwLG89TWF0aC5pbXVsKEQsWCksbj1uK01hdGguaW11bChDLFEpfDAsaT0oaT1pK01hdGgua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5cGUuaXVzaHJuPMWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCksaT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixzPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxhPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byx1PXI7aWYoaS09cyxpPU1hdGgubWF4KDAsaSksdSl7Zm9yKHZhciBoPTA7aDxzO2grKyl1LndvcmRzW2hdPXRoaXMud29yZHNbaF07dS5sZW5ndGg9c31pZigwPT09cyk7ZWxzZSBpZih0aGlzLmxlbmd0aD5zKWZvcih0aGlzLmxlbmd0aC09cyxoPTA7aDx0aGlzLmxlbmd0aDtoKyspdGhpcy53b3Jkc1toXT10aGlzLndvcmRzW2grc107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZj0wO2ZvcihoPXRoaXMubGVuZ3RoLMTE7aD49MCYmKDAhPT1mfHxoPj1pKTtoLS0pe3ZhciBsPTB8dGhpcy53b3Jkc1toXTt0aGlzLndvcmRzW2hdPWY8PDI2LW98bD4+Pm8sZj1sJmF9cmV0dXJuIHUmJjAhPT1mJiYodS53b3Jkc1t1Lmxlbmd0aCsrXT1mKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LMG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUo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XNobG5zdWJtdWwoaSwxLGwpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTthJiYoYS53b3Jkc1tsXT1jKX1yZXR1cm4gYSYmYS5fc3RyaXAoKSxuLl9zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6YXx8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8oYT10aGlzLm5lZygpLmRpdm1vZCh0LGUpLCJtb2QiIT09ZSYmKMGk9YS5kaXYubmVnKCkpLCJkaXYiIT09ZSYmKHM9YS5tb2QubmVnKCksciYmMCE9PXMubmVnYXRpdmUmJnMuaWFkZCh0KSkse2RpdjppLG1vZDpzfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhhPXRoaXMuZGl2bW9kKHQubmVnKCksZSksIm1vZCIhPT1lJiYoaT1hLmRpdi5uZWcoKSkse2RpdjppLG1vZDphLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhhPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksImRpdiIhPT1lJiYocz1hLm1vZC5uZWcoKSxyJiYwIT09cy5uZWdhdGl2ZSYmcy5pc3ViKHQpKSx7ZGl2OmEuZGl2LG1vZDpzfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MMT09PXQubGVuZ3RoPyJkaXYiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2Rybih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZHJuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih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pLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZMWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LMG8ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZ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WNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPnImJih0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3QrIj4ifSxvJiYodS5wcm90b3R5cGVbb109dS5wcm90b3R5cGUuaW5zcGVjdCksdS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKFkodCxVaW50OEFycmF5KSYmKHQ9dS5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIXUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPMT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJmU+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2xldCBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKGU+Pj49MCk7Y29uc3QgYT1NYXRoLm1pbihvLHMpLGg9dGhpcy5zbGljZShuLGkpLGY9dC5zbGljZShlLHIpO2ZvcihsZXQgdD0wO3Q8YTsrK3QpaWYoaFt0XSE9PWZbdF0pe289aFt0XSxzPWZbdF07YnJlYWt9cmV0dXJuIG88cMz8tMTpzPG8/MTowfSx1LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlLHIpfSx1LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdyh0aGlzLHQsZSxyLCEwKX0sdS5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0IG9mIGJvdMW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSSh0LGUscixuLGkpe3ooZSxuLGksdCxyLDcpO2xldCBvPU51bWJlcihlJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7dFtyKytdPW8sbz4+PTgsdFtyKytdPW8sbz4+PTgsdFtyKytdPW8sbz4+PTgsdFtyKytdPW87bGV0IHM9TnVtYmVyKGU+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gdFtyKytdPXMscz4+PTgsdFtyKytdPXMscz4+PTgsdFtyKytdPXMscz4+PTgsdFtyKytdPXMscn1mdW5jdGlvbiBDKHQsZSxyLG4saSl7eihlLG4saSx0LHIsNyk7bGV0IG89TnVtYmVyKGUmQmlnSW50KDQyOTQ5NjcyOTUpKTt0W3IrN109byxvPj49OCx0WM3IrNl09byxvPj49OCx0W3IrNV09byxvPj49OCx0W3IrNF09bztsZXQgcz1OdW1iZXIoZT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiB0W3IrM109cyxzPj49OCx0W3IrMl09cyxzPj49OCx0W3IrMV09cyxzPj49OCx0W3JdPXMscis4fWZ1bmN0aW9uIFUodCxlLHIsbixpLG8pe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKHQsZSxyLG4sbyl7cmV0dXJuIGU9K2Uscj4+Pj0wLG98fFUodCwwLHIsNCksaS53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBqKHQsZSxyLG4sbyl7cmV0dXJuIMGU9K2Uscj4+Pj0wLG98fFUodCwwLHIsOCksaS53cml0ZSh0LGUscixuLDUyLDgpLHIrOH11LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe2NvbnN0IHI9dGhpcy5sZW5ndGg7KHQ9fn50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xyLG4tMSwtbil9bGV0IGk9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZStpXT0yNTUmdDstLWk+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2krMV0mJihzPTEpLHRoaXNbZStpXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSx1LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxOKHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LHUucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fE4odGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaMXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sdS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8Tih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSx1LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxOKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0sdS5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TMih0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LHUucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1K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VyKHQpJiYic3RyaW5nIiE9dMHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyIik7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KXx8KHQ9QnVmZmVyLmZyb20odCxlKSksdGhpcy5fc3RhdGUuYWJzb3JiKHQpLHRoaXN9ZGlnZXN0KHQpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMCx0aGlzLl9kZWxpbWl0ZWRTdWZmaXgmJnRoaXMuX3N0YXRlLmFic29yYkxhc3RGZXdCaXRzKHRoaXMuX2RlbGltaXRlZFN1ZmZpeCk7bGV0IGU9dGhpcy5fc3RhdGUuc3F1ZWV6ZMSh0aGlzLl9oYXNoQml0TGVuZ3RoLzgpO3JldHVybiB2b2lkIDAhPT10JiYoZT1lLnRvU3RyaW5nKHQpKSx0aGlzLl9yZXNldFN0YXRlKCksZX1fcmVzZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHRoaXMuX3JhdGUsdGhpcy5fY2FwYWNpdHkpLHRoaXN9X2Nsb25lKCl7Y29uc3QgdD1uZXcgZSh0aGlzLl9yYXRlLHRoaXMuX2NhcGFjaXR5LHRoaXMuX2RlbGltaXRlZFN1ZmZpeCx0aGlzLl9oYXNoQml0TGVuZ3RoLHRoaXMuX29wdGlvbnMpO3JldHVybiB0aGlzLl9zdGF0ZS5jb3B5KHQuX3N0YXRlKSx0Ll9maW5hbGl6ZWQ9dGhpcy5fZmluYWxpemVkLHR9fX0sNjc1Oih0LGUscik9Pntjb25zdHtUcmFuc2Zvcm06bn09cig5Mik7dC5leHBvcnRzPXQ9PmNsYXNzIMGUgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUscixuLGkpe3N1cGVyKGkpLHRoaXMuX3JhdGU9ZSx0aGlzLl9jYXBhY2l0eT1yLHRoaXMuX2RlbGltaXRlZFN1ZmZpeD1uLHRoaXM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0c1tlXV06dC5vbihlLHIpfSh0LCJlcnJvciIsYyksdC5vbmNlKCJjbG9zZSIsZCksdC5vbmNlKCJmaW5pc2giLHApLHQuZW1pdCgicGlwZSIsciksbi5mbG93aW5nfHwodSgicGlwZSByZXN1bWUiKSxyLnJlc3VtZSgpKSx0fSxTLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXtoYXNVbnBpcGVkOiExfTtpZigwPT09ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1lLnBpcGVzQ291bnQpcmV0dXJuIHQmJnQhPT1lLnBpcGVzfHwodHx8KHQ9ZS5waXBlcyksZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMSx0JiZ0LmVtaXQoInVucGlwZSIsdGhpcyxyKSksdGhpcztpZighdCl7dmFyIG49ZMS5waXBlcyxpPWUucGlwZXNDb3VudDtlLnBpcGVzPW51bGwsZS5waXBlc0NvdW50PTAsZS5mbG93aW5nPSExO2Zvcih2YXIgbz0wO288aTtvKyspbltvXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgcz1xKGUucGlwZXMsdCk7cmV0dXJuLTE9PT1zfHwoZS5waXBlcy5zcGxpY2UocywxKSxlLnBpcGVzQ291bnQtPTEsMT09PWUucGlwZXNDb3VudCYmKGUucGlwZXM9ZS5waXBlc1swXSksdC5lbWl0KCJ1bnBpcGUiLHRoaXMscikpLHRoaXN9LFMucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9by5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSksbj10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PXQ/KG4ucmVhZGFibMGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1uLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT10JiYobi5lbmRFbWl0dGVkfHxuLnJlYWRhYmxlTGlzdGVuaW5nfHwobi5yZWFkYWJsZUxpc3RlbmluZz1uLm5lZWRSZWFkYWJsZT0hMCxuLmZsb3dpbmc9ITEsbi5lbWl0dGVkUmVhZGFibGU9ITEsdSgib24gcmVhZGFibGUiLG4ubGVuZ3RoLG4ucmVhZGluZyksbi5sZW5ndGg/ayh0aGlzKTpuLnJlYWRpbmd8fHByb2Nlc3MubmV4dFRpY2soSSx0aGlzKSkpLHJ9LFMucHJvdG90eXBlLmFkZExpc3RlbmVyPVMucHJvdG90eXBlLm9uLFMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9by5wcm90b3R5cMGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLHQsZSk7cmV0dXJuInJlYWRhYmxlIj09PXQmJnByb2Nlc3MubmV4dFRpY2soTix0aGlzKSxyfSxTLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGU9by5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4icmVhZGFibGUiIT09dCYmdm9pZCAwIT09dHx8cHJvY2Vzcy5uZXh0VGljayhOLHRoaXMpLGV9LFMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHQuZmxvd2luZ3x8KHUoInJlc3VtZSIpLHQuZmxvd2luZz0hdC5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbih0LGUpe2UucmVzdW1lU2NoZMWR1bGVkfHwoZS5yZXN1bWVTY2hlZHVsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhDLHQsZSkpfSh0aGlzLHQpKSx0LnBhdXNlZD0hMSx0aGlzfSxTLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiB1KCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJih1KCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LFMucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXRoaXMuX3JlYWRhYmxlU3RhdGUsbj0hMTtmb3IodmFyIGkgaW4gdC5vbMigiZW5kIiwoZnVuY3Rpb24oKXtpZih1KCJ3cmFwcGVkIGVuZCIpLHIuZGVjb2RlciYmIXIuZW5kZWQpe3ZhciB0PXIuZGVjb2Rlci5lbmQoKTt0JiZ0Lmxlbmd0aCYmZS5wdXNoKHQpfWUucHVzaChudWxsKX0pKSx0Lm9uKCJkYXRhIiwoZnVuY3Rpb24oaSl7KHUoIndyYXBwZWQgZGF0YSIpLHIuZGVjb2RlciYmKGk9ci5kZWNvZGVyLndyaXRlKGkpKSxyLm9iamVjdE1vZGUmJm51bGw9PWkpfHwoci5vYmplY3RNb2RlfHxpJiZpLmxlbmd0aCkmJihlLnB1c2goaSl8fChuPSEwLHQucGF1c2UoKSkpfSkpLHQpdm9pZCAwPT09dGhpc1tpXSYmImZ1bmN0aW9uIj09dHlwZW9mIHRbaV0mJih0aGlzW2ldPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0W2VdLmFwcGx5KHQsYMXJndW1lbnRzKX19KGkpKTtmb3IodmFyIG89MDtvPF8ubGVuZ3RoO28rKyl0Lm9uKF9bb10sdGhpcy5lbWl0LmJpbmQodGhpcyxfW29dKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oZSl7dSgid3JhcHBlZCBfcmVhZCIsZSksbiYmKG49ITEsdC5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihTLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bCYmKGw9cig0NzEpKSxsKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZM2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz10KX19KSxTLl9mcm9tTGlzdD1QLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLnByb3RvdHlwZMSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoUy5mcm9tPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWMmJihjPXIoNDM1KSksYyhTLHQsZSl9KX0sMzExOih0LGUscik9PnsidXNlIHN0cmljdCI7dC5leHBvcnRzPWY7dmFyIG49cig2MzApLnEsaT1uLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELG89bi5FUlJfTVVMVElQTEVfQ0FMTEJBQ0sscz1uLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsYT1uLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCx1PXIoNzM1KTtmdW5jdGlvbiBoKHQsZSl7dmFyIHI9dMGhpcy5fdHJhbnNmb3JtU3RhdGU7ci50cmFuc2Zvcm1pbmc9ITE7dmFyIG49ci53cml0ZWNiO2lmKG51bGw9PT1uKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgbyk7ci53cml0ZWNodW5rPW51bGwsci53cml0ZWNiPW51bGwsbnVsbCE9ZSYmdGhpcy5wdXNoKGUpLG4odCk7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtpLnJlYWRpbmc9ITEsKGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gZih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBmKSlyZXR1cm4gbmV3IGYodCk7dS5jYWxsKHRoaXMsdCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOmguYmluZCh0aGlzKSxuZMWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09dC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmZsdXNoJiYodGhpcy5fZmx1c2g9dC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsbCl9ZnVuY3Rpb24gbCgpe3ZhciB0PXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9jKHRoaXMsbnVsbCxudWxsKTp0aMGlzLl9mbHVzaCgoZnVuY3Rpb24oZSxyKXtjKHQsZSxyKX0pKX1mdW5jdGlvbiBjKHQsZSxyKXtpZihlKXJldHVybiB0LmVtaXQoImVycm9yIixlKTtpZihudWxsIT1yJiZ0LnB1c2gociksdC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IGE7aWYodC5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93IG5ldyBzO3JldHVybiB0LnB1c2gobnVsbCl9cig3MTcpKGYsdSksZi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLHUucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLHQsZSl9LGYucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobmV3IGkoIl90cmFuc2Zvcm0oKMSIpKX0sZi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihuLndyaXRlY2I9cixuLndyaXRlY2h1bms9dCxuLndyaXRlZW5jb2Rpbmc9ZSwhbi50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KG4ubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LGYucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1lLndyaXRlY2h1bmt8fGUudHJhbnNmb3JtaW5nP2UubmVlZFRyYW5zZm9ybT0hMDooZS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbMnNmb3JtKGUud3JpdGVjaHVuayxlLndyaXRlZW5jb2RpbmcsZS5hZnRlclRyYW5zZm9ybSkpfSxmLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih0LGUpe3UucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyx0LChmdW5jdGlvbih0KXtlKHQpfSkpfX0sODQzOih0LGUscik9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0KXt2YXIgZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbih0LGUscil7dmFyIG49dC5lbnRyeTt0LmVudHJ5PW51bGw7Zm9yKDtuOyl7dmFyIGk9bi5jYWxsYmFjaztlLnBlbmRpbmdjYi0tLGkociksbj1uLm5leHR9ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD10fShlLHQpfX12YXIgaMTt0LmV4cG9ydHM9UyxTLldyaXRhYmxlU3RhdGU9RTt2YXIgbz17ZGVwcmVjYXRlOnIoOTI3KX0scz1yKDg2OCksYT1yKDc2NCkuQnVmZmVyLHU9ci5nLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgaCxmPXIoNTA1KSxsPXIoNDgyKS5nZXRIaWdoV2F0ZXJNYXJrLGM9cig2MzApLnEsZD1jLkVSUl9JTlZBTElEX0FSR19UWVBFLHA9Yy5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxnPWMuRVJSX01VTFRJUExFX0NBTExCQUNLLG09Yy5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHk9Yy5FUlJfU1RSRUFNX0RFU1RST1lFRCx3PWMuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyx2PWMuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsYj1jLkVSUl9VTktOT1dOX0VOQ09ESU5HLE09Zi5lcnJvcMk9yRGVzdHJveTtmdW5jdGlvbiBfKCl7fWZ1bmN0aW9uIEUodCxlLG8pe2k9aXx8cig3MzUpLHQ9dHx8e30sImJvb2xlYW4iIT10eXBlb2YgbyYmKG89ZSBpbnN0YW5jZW9mIGkpLHRoaXMub2JqZWN0TW9kZT0hIXQub2JqZWN0TW9kZSxvJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF0LndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPWwodGhpcyx0LCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLG8pLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBzPSExPT09dC5kZWNvZGVTdHJpbmdzO3RoaXMuZGVjb2RlUM3RyaW5ncz0hcyx0aGlzLmRlZmF1bHRFbmNvZGluZz10LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fd3JpdGFibGVTdGF0ZSxuPXIuc3luYyxpPXIud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgaSl0aHJvdyBuZXcgZztpZihmdW5jdGlvbih0KXt0LndyaXRpbmc9ITEsdC53cml0ZWNiPW51bGwsdC5sZW5ndGgtPXQud3JpdGVsZW4sdC53cml0ZWxlbj0wfShyKSxlKSFmdW5jdGlvbih0LGUscixuLGkpey0tZS5wZW5kaW5nY2Iscj8ocHJvY2Vzcy5uZMXh0VGljayhpLG4pLHByb2Nlc3MubmV4dFRpY2soTyx0LGUpLHQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLE0odCxuKSk6KGkobiksdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsTSh0LG4pLE8odCxlKSl9KHQscixuLGUsaSk7ZWxzZXt2YXIgbz1MKHIpfHx0LmRlc3Ryb3llZDtvfHxyLmNvcmtlZHx8ci5idWZmZXJQcm9jZXNzaW5nfHwhci5idWZmZXJlZFJlcXVlc3R8fEIodCxyKSxuP3Byb2Nlc3MubmV4dFRpY2soQSx0LHIsbyxpKTpBKHQscixvLGkpfX0oZSx0KX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aMGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09dC5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIXQuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBuKHRoaXMpfWZ1bmN0aW9uIFModCl7dmFyIGU9dGhpcyBpbnN0YW5jZW9mKGk9aXx8cig3MzUpKTtpZighZSYmIWguY2FsbChTLHRoaXMpKXJldHVybiBuZXcgUyh0KTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBFKHQsdGhpcyxlKSx0aGlzLndyaXRhYmxlPSEwLHQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC53cml0ZSYmKHRoaXMuX3dyaXRlPXQud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LndyaXRldMiYmKHRoaXMuX3dyaXRldj10LndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9dC5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgdC5maW5hbCYmKHRoaXMuX2ZpbmFsPXQuZmluYWwpKSxzLmNhbGwodGhpcyl9ZnVuY3Rpb24gUih0LGUscixuLGksbyxzKXtlLndyaXRlbGVuPW4sZS53cml0ZWNiPXMsZS53cml0aW5nPSEwLGUuc3luYz0hMCxlLmRlc3Ryb3llZD9lLm9ud3JpdGUobmV3IHkoIndyaXRlIikpOnI/dC5fd3JpdGV2KGksZS5vbndyaXRlKTp0Ll93cml0ZShpLG8sZS5vbndyaXRlKSxlLnN5bmM9ITF9ZnVuY3Rpb24gQSh0LGUscixuKXtyfHxmdW5jdGlvbih0LGUpezA9PT1lLmxlbmd0aCYmZS5uZWVkRHJhaW4mJihlLm5lZWREcMmFpbj0hMSx0LmVtaXQoImRyYWluIikpfSh0LGUpLGUucGVuZGluZ2NiLS0sbigpLE8odCxlKX1mdW5jdGlvbiBCKHQsZSl7ZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciByPWUuYnVmZmVyZWRSZXF1ZXN0O2lmKHQuX3dyaXRldiYmciYmci5uZXh0KXt2YXIgaT1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50LG89bmV3IEFycmF5KGkpLHM9ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7cy5lbnRyeT1yO2Zvcih2YXIgYT0wLHU9ITA7cjspb1thXT1yLHIuaXNCdWZ8fCh1PSExKSxyPXIubmV4dCxhKz0xO28uYWxsQnVmZmVycz11LFIodCxlLCEwLGUubGVuZ3RoLG8sIiIscy5maW5pc2gpLGUucGVuZGluZ2NiKyssZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwscy5uZXh0PyhlLmNvcmtlZFJlcXVlc3RzRMnJlZT1zLm5leHQscy5uZXh0PW51bGwpOmUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBuKGUpLGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7cjspe3ZhciBoPXIuY2h1bmssZj1yLmVuY29kaW5nLGw9ci5jYWxsYmFjaztpZihSKHQsZSwhMSxlLm9iamVjdE1vZGU/MTpoLmxlbmd0aCxoLGYsbCkscj1yLm5leHQsZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLGUud3JpdGluZylicmVha31udWxsPT09ciYmKGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1lLmJ1ZmZlcmVkUmVxdWVzdD1yLGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBMKHQpe3JldHVybiB0LmVuZGluZyYmMD09PXQubGVuZ3RoJiZudWxsPT09dC5idWZmZXJlZFJlcXVlc3QmJiF0LmZpbmlzaGVkJMiYhdC53cml0aW5nfWZ1bmN0aW9uIGsodCxlKXt0Ll9maW5hbCgoZnVuY3Rpb24ocil7ZS5wZW5kaW5nY2ItLSxyJiZNKHQsciksZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpLE8odCxlKX0pKX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9TChlKTtpZihyJiYoZnVuY3Rpb24odCxlKXtlLnByZWZpbmlzaGVkfHxlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIiE9dHlwZW9mIHQuX2ZpbmFsfHxlLmRlc3Ryb3llZD8oZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpKTooZS5wZW5kaW5nY2IrKyxlLmZpbmFsQ2FsbGVkPSEwLHByb2Nlc3MubmV4dFRpY2soayx0LGUpKSl9KHQsZSksMD09PWUucGVuZGluZ2NiJiYoZS5maW5pc2hlZD0hMCx0LmVtaXQoImZpbmlzaMCIpLGUuYXV0b0Rlc3Ryb3kpKSl7dmFyIG49dC5fcmVhZGFibGVTdGF0ZTsoIW58fG4uYXV0b0Rlc3Ryb3kmJm4uZW5kRW1pdHRlZCkmJnQuZGVzdHJveSgpfXJldHVybiByfXIoNzE3KShTLHMpLEUucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxlPVtdO3Q7KWUucHVzaCh0KSx0PXQubmV4dDtyZXR1cm4gZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEUucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6by5kZXByZWNhdGUoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9KSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZMXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaCh0KXt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhoPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuISFoLmNhbGwodGhpcyx0KXx8dGhpcz09PVMmJih0JiZ0Ll93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgRSl9fSkpOmg9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzfSxTLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7TMSh0aGlzLG5ldyBtKX0sUy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcy5fd3JpdGFibGVTdGF0ZSxvPSExLHM9IWkub2JqZWN0TW9kZSYmKG49dCxhLmlzQnVmZmVyKG4pfHxuIGluc3RhbmNlb2YgdSk7cmV0dXJuIHMmJiFhLmlzQnVmZmVyKHQpJiYodD1mdW5jdGlvbih0KXtyZXR1cm4gYS5mcm9tKHQpfSh0KSksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUsZT1udWxsKSxzP2U9ImJ1ZmZlciI6ZXx8KGU9aS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiByJiYocj1fKSxpLmVuZGluZz9mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB2O00odCxyKSxwcm9jZXNzLm5leHRUaWNrKGUscil9KHRoaXMscik6KHN8fGZ1bmN0aW9uKHQsZSxyLMG4pe3ZhciBpO3JldHVybiBudWxsPT09cj9pPW5ldyB3OiJzdHJpbmciPT10eXBlb2Ygcnx8ZS5vYmplY3RNb2RlfHwoaT1uZXcgZCgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0scikpLCFpfHwoTSh0LGkpLHByb2Nlc3MubmV4dFRpY2sobixpKSwhMSl9KHRoaXMsaSx0LHIpKSYmKGkucGVuZGluZ2NiKyssbz1mdW5jdGlvbih0LGUscixuLGksbyl7aWYoIXIpe3ZhciBzPWZ1bmN0aW9uKHQsZSxyKXt0Lm9iamVjdE1vZGV8fCExPT09dC5kZWNvZGVTdHJpbmdzfHwic3RyaW5nIiE9dHlwZW9mIGV8fChlPWEuZnJvbShlLHIpKTtyZXR1cm4gZX0oZSxuLGkpO24hPT1zJiYocj0hMCxpPSJidWZmZXIiLG49cyl9dmFyIHU9ZS5vYmplY3RNb2RlPzE6bi5sZW5ndGg7ZS5sZW5ndGgrPXU7dMmFyIGg9ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrO2h8fChlLm5lZWREcmFpbj0hMCk7aWYoZS53cml0aW5nfHxlLmNvcmtlZCl7dmFyIGY9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bixlbmNvZGluZzppLGlzQnVmOnIsY2FsbGJhY2s6byxuZXh0Om51bGx9LGY/Zi5uZXh0PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdDplLmJ1ZmZlcmVkUmVxdWVzdD1lLmxhc3RCdWZmZXJlZFJlcXVlc3QsZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIFIodCxlLCExLHUsbixpLG8pO3JldHVybiBofSh0aGlzLGkscyx0LGUscikpLG99LFMucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxTLnByb3RvdMHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93cml0YWJsZVN0YXRlO3QuY29ya2VkJiYodC5jb3JrZWQtLSx0LndyaXRpbmd8fHQuY29ya2VkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fCF0LmJ1ZmZlcmVkUmVxdWVzdHx8Qih0aGlzLHQpKX0sUy5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh0KyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IGIodCk7cmV0dXJuIHRoaXMuX3dyaXRhYMmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXQsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksUy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXtyKG5ldyBwKCJfd3JpdGUoKSIpKX0sUy5wcm90b3R5cGUuX3dyaXRldj1udWxsLMFMucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD8ocj10LHQ9bnVsbCxlPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksbnVsbCE9dCYmdGhpcy53cml0ZSh0LGUpLG4uY29ya2VkJiYobi5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuLmVuZGluZ3x8ZnVuY3Rpb24odCxlLHIpe2UuZW5kaW5nPSEwLE8odCxlKSxyJiYoZS5maW5pc2hlZD9wcm9jZXNzLm5leHRUaWNrKHIpOnQub25jZSgiZmluaXNoIixyKSk7ZS5lbmRlZD0hMCx0LndyaXRhYmxlPSExfSh0aGlzLG4sciksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFMucHJvdG90eXBlLCJ3cml0YWJsZUxlbMmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbih0KXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dCl9fSksUy5wcm90b3R5cGUuZGVzdHJveT1mLmRlc3Ryb3ksUy5wcm90b3R5cGUuX3VuZGVzdHJveT1mLnVuZGVzdHJveSxTLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih0LGUpeM2UodCl9fSw0NzE6KHQsZSxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbjtmdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm4gZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH12YXIgbz1yKDE4Nikscz1TeW1ib2woImxhc3RSZXNvbHZlIiksYT1TeW1ib2woImxhc3RSZWplY3QiKSx1PVN5bWJvbCgiZXJyb3IiKSxoPVN5bWJvbCgiZW5kZWQiKSxmPVN5bWJvbCgibGFzdFByb21pc2UiKSxsPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLGM9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBkKHQsZSl7cmV0dXJue3ZhbHVlOnQsZG9uZTplfX1mdW5jdGlvbiBwKHQpe3ZhciBlPXRbc107aMWYobnVsbCE9PWUpe3ZhciByPXRbY10ucmVhZCgpO251bGwhPT1yJiYodFtmXT1udWxsLHRbc109bnVsbCx0W2FdPW51bGwsZShkKHIsITEpKSl9fWZ1bmN0aW9uIGcodCl7cHJvY2Vzcy5uZXh0VGljayhwLHQpfXZhciBtPU9iamVjdC5nZXRQcm90b3R5cGVPZigoZnVuY3Rpb24oKXt9KSkseT1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGkobj17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2NdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXNbdV07aWYobnVsbCE9PWUpcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO2lmKHRoaXNbaF0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShkKHZvaWQgMCwhMCkpO2lmKHRoaXNbY10uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuYM3Rpb24oZSxyKXtwcm9jZXNzLm5leHRUaWNrKChmdW5jdGlvbigpe3RbdV0/cih0W3VdKTplKGQodm9pZCAwLCEwKSl9KSl9KSk7dmFyIHIsbj10aGlzW2ZdO2lmKG4pcj1uZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3QudGhlbigoZnVuY3Rpb24oKXtlW2hdP3IoZCh2b2lkIDAsITApKTplW2xdKHIsbil9KSxuKX19KG4sdGhpcykpO2Vsc2V7dmFyIGk9dGhpc1tjXS5yZWFkKCk7aWYobnVsbCE9PWkpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkKGksITEpKTtyPW5ldyBQcm9taXNlKHRoaXNbbF0pfXJldHVybiB0aGlzW2ZdPXIscn19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGkobiwicmV0dXJuIiwoZnVuYM3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXt0W2NdLmRlc3Ryb3kobnVsbCwoZnVuY3Rpb24odCl7dD9yKHQpOmUoZCh2b2lkIDAsITApKX0pKX0pKX0pKSxuKSxtKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1PYmplY3QuY3JlYXRlKHksKGkoZT17fSxjLHt2YWx1ZTp0LHdyaXRhYmxlOiEwfSksaShlLHMse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKGUsYSx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkoZSx1LHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaShlLGgse3ZhbHVlOnQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLGkoZSxsLHt2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBuPXJbY10ucMmVhZCgpO24/KHJbZl09bnVsbCxyW3NdPW51bGwsclthXT1udWxsLHQoZChuLCExKSkpOihyW3NdPXQsclthXT1lKX0sd3JpdGFibGU6ITB9KSxlKSk7cmV0dXJuIHJbZl09bnVsbCxvKHQsKGZ1bmN0aW9uKHQpe2lmKHQmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT10LmNvZGUpe3ZhciBlPXJbYV07cmV0dXJuIG51bGwhPT1lJiYocltmXT1udWxsLHJbc109bnVsbCxyW2FdPW51bGwsZSh0KSksdm9pZChyW3VdPXQpfXZhciBuPXJbc107bnVsbCE9PW4mJihyW2ZdPW51bGwscltzXT1udWxsLHJbYV09bnVsbCxuKGQodm9pZCAwLCEwKSkpLHJbaF09ITB9KSksdC5vbigicmVhZGFibGUiLGcuYmluZChudWxsLHIpKSxyfX0sOTgzOih0LGUscik9PnsidXNlIHN0cmljdCI7ZnVuYM3Rpb24gbih0LGUpe3ZhciByPU9iamVjdC5rZXlzKHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7ZSYmKG49bi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSkuZW51bWVyYWJsZX0pKSksci5wdXNoLmFwcGx5KHIsbil9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lWM3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXZhciBzPXIoNzY0KS5CdWZmZXIsYT1yKDEyMCkuaW5zcGVjdCx1PWEmJmEuY3VzdG9tfHwiaW5zcGVjdCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGUscixoO3JldHVybiBlPXQscj1be2tleToicHVzaMCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9e2RhdGE6dCxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9ZTp0aGlzLmhlYWQ9ZSx0aGlzLnRhaWw9ZSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9e2RhdGE6dCxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPWUpLHRoaXMuaGVhZD1lLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB0PXRoaXMuaGVhZC5kYXRhO3JldHVybiAxPT09dGhpcy5sZW5ndGg/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubMGVuZ3RoLHR9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBlPXRoaXMuaGVhZCxyPSIiK2UuZGF0YTtlPWUubmV4dDspcis9dCtlLmRhdGE7cmV0dXJuIHJ9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gcy5hbGxvYygwKTtmb3IodmFyIGUscixuLGk9cy5hbGxvY1Vuc2FmZSh0Pj4+MCksbz10aGlzLmhlYWQsYT0wO287KWU9by5kYXRhLHI9aSxuPWEscy5wcm90b3R5cGUuY29weS5jYWxsKGUscixuKSxhKz1vLmRhdGEubGVuZM3RoLG89by5uZXh0O3JldHVybiBpfX0se2tleToiY29uc3VtZSIsdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgcjtyZXR1cm4gdDx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KHI9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCx0KSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZSh0KSk6cj10PT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTplP3RoaXMuX2dldFN0cmluZyh0KTp0aGlzLl9nZXRCdWZmZXIodCkscn19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGVhZCxyPTEsbj1lLmRhdGE7Zm9yKHQtPW4ubGVuZ3RoO2U9ZS5uZMXh0Oyl7dmFyIGk9ZS5kYXRhLG89dD5pLmxlbmd0aD9pLmxlbmd0aDp0O2lmKG89PT1pLmxlbmd0aD9uKz1pOm4rPWkuc2xpY2UoMCx0KSwwPT0odC09bykpe289PT1pLmxlbmd0aD8oKytyLGUubmV4dD90aGlzLmhlYWQ9ZS5uZXh0OnRoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1lLGUuZGF0YT1pLnNsaWNlKG8pKTticmVha30rK3J9cmV0dXJuIHRoaXMubGVuZ3RoLT1yLG59fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1zLmFsbG9jVW5zYWZlKHQpLHI9dGhpcy5oZWFkLG49MTtmb3Ioci5kYXRhLmNvcHkoZSksdC09ci5kYXRhLmxlbmd0aDtyPXIubmV4dDspe3ZhciBpPXIuZGF0YSxvPXQ+aS5sZW5ndGg/aS5sZW5ndGg6dDtpZihpLMmNvcHkoZSxlLmxlbmd0aC10LDAsbyksMD09KHQtPW8pKXtvPT09aS5sZW5ndGg/KCsrbixyLm5leHQ/dGhpcy5oZWFkPXIubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cixyLmRhdGE9aS5zbGljZShvKSk7YnJlYWt9KytufXJldHVybiB0aGlzLmxlbmd0aC09bixlfX0se2tleTp1LHZhbHVlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodGhpcyxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9uKE9iamVjdChyKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aSh0LGUscltlXSl9KSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/TM2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyKSk6bihPYmplY3QocikpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGUpKX0pKX1yZXR1cm4gdH0oe30sZSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dLHImJm8oZS5wcm90b3R5cGUsciksaCYmbyhlLGgpLHR9KCl9LDUwNTp0PT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXtuKHQsZSkscih0KX1mdW5jdGlvbiByKHQpe3QuX3dyaXRhYmxlU3RhdGUmJiF0Ll93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8dC5fcmVhZGFibGVTdGF0ZSYmIXQuX3JlYWRhYmxlU3RhdMGUuZW1pdENsb3NlfHx0LmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gbih0LGUpe3QuZW1pdCgiZXJyb3IiLGUpfXQuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbih0LGkpe3ZhciBvPXRoaXMscz10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCxhPXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO3JldHVybiBzfHxhPyhpP2kodCk6dCYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKG4sdGhpcyx0KSk6cHJvY2Vzcy5uZXh0VGljayhuLHRoaXMsdCkpLHRoaXMpOMih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh0fHxudWxsLChmdW5jdGlvbih0KXshaSYmdD9vLl93cml0YWJsZVN0YXRlP28uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2socixvKTooby5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhlLG8sdCkpOnByb2Nlc3MubmV4dFRpY2soZSxvLHQpOmk/KHByb2Nlc3MubmV4dFRpY2socixvKSxpKHQpKTpwcm9jZXNzLm5leHRUaWNrKHIsbyl9KSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbigpeM3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJybM3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9yZWFkYWJsZVN0YXRlLG49dC5fd3JpdGFibGVTdGF0ZTtyJiZyLmF1dG9EZXN0cm95fHxuJiZuLmF1dG9EZXN0cm95P3QuZGVzdHJveShlKTp0LmVtaXQoImVycm9yIixlKX19fSwxODY6KHQsZSxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDYzMCkucS5FUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRTtmdW5jdGlvbiBpKCl7fXQuZXhwb3J0cz1mdW5jdGlvbiB0KGUscixvKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gdChlLG51bGwscik7cnx8KHI9e30pLG89ZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWUpe2U9ITA7Zm9yKHZhciByPWFyZ3VtZW50cMy5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjtpKyspbltpXT1hcmd1bWVudHNbaV07dC5hcHBseSh0aGlzLG4pfX19KG98fGkpO3ZhciBzPXIucmVhZGFibGV8fCExIT09ci5yZWFkYWJsZSYmZS5yZWFkYWJsZSxhPXIud3JpdGFibGV8fCExIT09ci53cml0YWJsZSYmZS53cml0YWJsZSx1PWZ1bmN0aW9uKCl7ZS53cml0YWJsZXx8ZigpfSxoPWUuX3dyaXRhYmxlU3RhdGUmJmUuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsZj1mdW5jdGlvbigpe2E9ITEsaD0hMCxzfHxvLmNhbGwoZSl9LGw9ZS5fcmVhZGFibGVTdGF0ZSYmZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLGM9ZnVuY3Rpb24oKXtzPSExLGw9ITAsYXx8by5jYWxsKGUpfSxkPWZ1bmN0aW9uKHQpe28uY2FsbChlLHQpfMSxwPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHMmJiFsPyhlLl9yZWFkYWJsZVN0YXRlJiZlLl9yZWFkYWJsZVN0YXRlLmVuZGVkfHwodD1uZXcgbiksby5jYWxsKGUsdCkpOmEmJiFoPyhlLl93cml0YWJsZVN0YXRlJiZlLl93cml0YWJsZVN0YXRlLmVuZGVkfHwodD1uZXcgbiksby5jYWxsKGUsdCkpOnZvaWQgMH0sZz1mdW5jdGlvbigpe2UucmVxLm9uKCJmaW5pc2giLGYpfTtyZXR1cm4hZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hYm9ydH0oZSk/YSYmIWUuX3dyaXRhYmxlU3RhdGUmJihlLm9uKCJlbmQiLHUpLGUub24oImNsb3NlIix1KSk6KGUub24oImNvbXBsZXRlIixmKSxlLm9uKCJhYm9ydCIscCksZS5yZXE/ZygpOmUub24oIMnJlcXVlc3QiLGcpKSxlLm9uKCJlbmQiLGMpLGUub24oImZpbmlzaCIsZiksITEhPT1yLmVycm9yJiZlLm9uKCJlcnJvciIsZCksZS5vbigiY2xvc2UiLHApLGZ1bmN0aW9uKCl7ZS5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLGYpLGUucmVtb3ZlTGlzdGVuZXIoImFib3J0IixwKSxlLnJlbW92ZUxpc3RlbmVyKCJyZXF1ZXN0IixnKSxlLnJlcSYmZS5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsZiksZS5yZW1vdmVMaXN0ZW5lcigiZW5kIix1KSxlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdSksZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixmKSxlLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGMpLGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixkKSxlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZMSIscCl9fX0sNDM1OnQ9Pnt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sNjE5Oih0LGUscik9PnsidXNlIHN0cmljdCI7dmFyIG47dmFyIGk9cig2MzApLnEsbz1pLkVSUl9NSVNTSU5HX0FSR1Mscz1pLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIGEodCl7aWYodCl0aHJvdyB0fWZ1bmN0aW9uIHUodCxlLGksbyl7bz1mdW5jdGlvbih0KXt2YXIgZT0hMTtyZXR1cm4gZnVuY3Rpb24oKXtlfHwoZT0hMCx0LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KG8pO3ZhciBhPSExO3Qub24oImNsb3NlIiwoZnVuY3Rpb24oKXthPSEwfSkpLHZvaWQgMD09PW4mJihuPXIoMTg2KMSksbih0LHtyZWFkYWJsZTplLHdyaXRhYmxlOml9LChmdW5jdGlvbih0KXtpZih0KXJldHVybiBvKHQpO2E9ITAsbygpfSkpO3ZhciB1PSExO3JldHVybiBmdW5jdGlvbihlKXtpZighYSYmIXUpcmV0dXJuIHU9ITAsZnVuY3Rpb24odCl7cmV0dXJuIHQuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5hYm9ydH0odCk/dC5hYm9ydCgpOiJmdW5jdGlvbiI9PXR5cGVvZiB0LmRlc3Ryb3k/dC5kZXN0cm95KCk6dm9pZCBvKGV8fG5ldyBzKCJwaXBlIikpfX1mdW5jdGlvbiBoKHQpe3QoKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQucGlwZShlKX1mdW5jdGlvbiBsKHQpe3JldHVybiB0Lmxlbmd0aD8iZnVuY3Rpb24iIT10eXBlb2YgdFt0Lmxlbmd0aC0xXT9hOnQucG9wKCk6YX10LMmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPWFyZ3VtZW50c1tyXTt2YXIgbixpPWwoZSk7aWYoQXJyYXkuaXNBcnJheShlWzBdKSYmKGU9ZVswXSksZS5sZW5ndGg8Mil0aHJvdyBuZXcgbygic3RyZWFtcyIpO3ZhciBzPWUubWFwKChmdW5jdGlvbih0LHIpe3ZhciBvPXI8ZS5sZW5ndGgtMTtyZXR1cm4gdSh0LG8scj4wLChmdW5jdGlvbih0KXtufHwobj10KSx0JiZzLmZvckVhY2goaCksb3x8KHMuZm9yRWFjaChoKSxpKG4pKX0pKX0pKTtyZXR1cm4gZS5yZWR1Y2UoZil9fSw0ODI6KHQsZSxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDYzMCkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7dC5leMHBvcnRzPXtnZXRIaWdoV2F0ZXJNYXJrOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbnVsbCE9dC5oaWdoV2F0ZXJNYXJrP3QuaGlnaFdhdGVyTWFyazplP3Rbcl06bnVsbH0oZSxpLHIpO2lmKG51bGwhPW8pe2lmKCFpc0Zpbml0ZShvKXx8TWF0aC5mbG9vcihvKSE9PW98fG88MCl0aHJvdyBuZXcgbihpP3I6ImhpZ2hXYXRlck1hcmsiLG8pO3JldHVybiBNYXRoLmZsb29yKG8pfXJldHVybiB0Lm9iamVjdE1vZGU/MTY6MTYzODR9fX0sODY4Oih0LGUscik9Pnt0LmV4cG9ydHM9cigxODcpLkV2ZW50RW1pdHRlcn0sOTI6KHQsZSxyKT0+eyhlPXQuZXhwb3J0cz1yKDg3NSkpLlN0cmVhbT1lLGUuUmVhZGFibGU9ZSxlLldyaXRhYmxlPXIoODQzKSxlLMkR1cGxleD1yKDczNSksZS5UcmFuc2Zvcm09cigzMTEpLGUuUGFzc1Rocm91Z2g9cig0ODUpLGUuZmluaXNoZWQ9cigxODYpLGUucGlwZWxpbmU9cig2MTkpfSw4MDk6KHQsZSxyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDUwOSkuQnVmZmVyLGk9bi5pc0VuY29kaW5nfHxmdW5jdGlvbih0KXtzd2l0Y2goKHQ9IiIrdCkmJnQudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBvKHQpe3ZhciBlO3N3aXRjaCh0aMGlzLmVuY29kaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJ1dGY4Ijtmb3IodmFyIGU7Oylzd2l0Y2godCl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIHQ7ZGVmYXVsdDppZihlKXJldHVybjt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLGU9ITB9fSh0KTtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihuLmlzRW5jb2Rpbmc9PT1pfHwhaSh0KSkpdGhyb3cgbmV3IEVycm9yKMCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3JldHVybiBlfHx0fSh0KSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD11LHRoaXMuZW5kPWgsZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1hLGU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PWYsdGhpcy5lbmQ9bCxlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1jLHZvaWQodGhpcy5lbmQ9ZCl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1uLmFsbG9jVW5zYWZlKGUpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQ8PTEyNz8wOnQ+PjU9PTY/Mjp0Pj40PT0xND8zOnQ+PjM9PTMwPzQ6dD4+Nj09Mj8tMTotMn1mdW5jdGlvbiBhKHQpe3ZhciBlPMXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj1mdW5jdGlvbih0LGUscil7aWYoMTI4IT0oMTkyJmVbMF0pKXJldHVybiB0Lmxhc3ROZWVkPTAsIu+/vSI7aWYodC5sYXN0TmVlZD4xJiZlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImZVsxXSkpcmV0dXJuIHQubGFzdE5lZWQ9MSwi77+9IjtpZih0Lmxhc3ROZWVkPjImJmUubGVuZ3RoPjImJjEyOCE9KDE5MiZlWzJdKSlyZXR1cm4gdC5sYXN0TmVlZD0yLCLvv70ifX0odGhpcyx0KTtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMubGFzdE5lZWQ8PXQubGVuZ3RoPyh0LmNvcHkodGhpcy5sYXN0Q2hhcixlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToodMC5jb3B5KHRoaXMubGFzdENoYXIsZSwwLHQubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPXQubGVuZ3RoKSl9ZnVuY3Rpb24gdSh0LGUpe2lmKCh0Lmxlbmd0aC1lKSUyPT0wKXt2YXIgcj10LnRvU3RyaW5nKCJ1dGYxNmxlIixlKTtpZihyKXt2YXIgbj1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXRbdC5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT10W3QubGVuZ3RoLTFdLHIuc2xpY2UoMCwtMSl9cmV0dXJuIHJ9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXSx0LMnRvU3RyaW5nKCJ1dGYxNmxlIixlLHQubGVuZ3RoLTEpfWZ1bmN0aW9uIGgodCl7dmFyIGU9dCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIjtpZih0aGlzLmxhc3ROZWVkKXt2YXIgcj10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiBlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAscil9cmV0dXJuIGV9ZnVuY3Rpb24gZih0LGUpe3ZhciByPSh0Lmxlbmd0aC1lKSUzO3JldHVybiAwPT09cj90LnRvU3RyaW5nKCJiYXNlNjQiLGUpOih0aGlzLmxhc3ROZWVkPTMtcix0aGlzLmxhc3RUb3RhbD0zLDE9PT1yP3RoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09dFt0LMmxlbmd0aC0xXSksdC50b1N0cmluZygiYmFzZTY0IixlLHQubGVuZ3RoLXIpKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTplfWZ1bmN0aW9uIGModCl7cmV0dXJuIHQudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIn1lLnM9byxvLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIiI7dmFyIGUscjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0oZT10aGlzLmZpbGxMYXN0KHQpKSlyZMXR1cm4iIjtyPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugcj0wO3JldHVybiByPHQubGVuZ3RoP2U/ZSt0aGlzLnRleHQodCxyKTp0aGlzLnRleHQodCxyKTplfHwiIn0sby5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSsi77+9IjplfSxvLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUubGVuZ3RoLTE7aWYobjxyKXJldHVybiAwO3ZhciBpPXMoZVtuXSk7aWYoaT49MClyZXR1cm4gaT4wJiYodC5sYXN0TmVlZD1pLTEpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1zKGVbbl0pKT49MClyZXR1cMm4gaT4wJiYodC5sYXN0TmVlZD1pLTIpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1zKGVbbl0pKT49MClyZXR1cm4gaT4wJiYoMj09PWk/aT0wOnQubGFzdE5lZWQ9aS0zKSxpO3JldHVybiAwfSh0aGlzLHQsZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIHQudG9TdHJpbmcoInV0ZjgiLGUpO3RoaXMubGFzdFRvdGFsPXI7dmFyIG49dC5sZW5ndGgtKHItdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLDAsbiksdC50b1N0cmluZygidXRmOCIsZSxuKX0sby5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24odCl7aWYodGhpcy5sYXN0TmVlZDw9dC5sZW5ndGgpcmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaMXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7dC5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHQubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT10Lmxlbmd0aH19LDY0ODpmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlP3Q6e2RlZmF1bHQ6dH19O2NvbnN0IGk9bihyKDU1MCkpLG89bihyKDc2NCkpLHM9bihyKDgxMSkpLGE9by5kZWZhdWx0LkJ1ZmZlcjtmdW5jdGlvbiB1KHQpe3JldHVybiB0PWZ1bmN0aW9uKHQpe2lmKCFhLMmlzQnVmZmVyKHQpKWlmKEFycmF5LmlzQXJyYXkodCkpdD1hLmZyb20odCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHQpdD1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdHx8IXQubWF0Y2goL14weFswLTlBLUZhLWZdKiQvKSlyZXR1cm4hMTtpZihlJiZ0Lmxlbmd0aCE9PTIrMiplKXJldHVybiExO3JldHVybiEwfSh0KT9hLmZyb20oaChmdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoInZhbHVlIG11c3QgYmUgdHlwZSAnc3RyaW5nJywgaXMgY3VycmVudGx5IHR5cGUgIit0eXBlb2YgdCsiLCB3aGlsZSBjaGVja2luZyBpc0hleFByZWZpeMGVkLiIpO3JldHVybiIweCI9PT10LnNsaWNlKDAsMil9KHQpP3Quc2xpY2UoMik6dH0odCkpLCJoZXgiKTphLmZyb20odCk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIHQpdD1mdW5jdGlvbih0KXtjb25zdCBlPWZ1bmN0aW9uKHQpe3JldHVybmAweCR7dC50b1N0cmluZygxNil9YH0odCk7cmV0dXJuIGEuZnJvbShoKGUuc2xpY2UoMikpLCJoZXgiKX0odCk7ZWxzZSBpZihudWxsPT10KXQ9YS5hbGxvY1Vuc2FmZSgwKTtlbHNlIGlmKGkuZGVmYXVsdC5pc0JOKHQpKXQ9dC50b0FycmF5TGlrZShhKTtlbHNle2lmKCF0LnRvQXJyYXkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUiKTt0PWEuZnJvbSh0LnRvQXJyYXkoKSl9cmV0dXJuIHR9KHQpLCgwLHMuZGVmYXVsdCkoImtlY2NhaMzI1NiIpLnVwZGF0ZSh0KS5kaWdlc3QoKX1mdW5jdGlvbiBoKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoYHdoaWxlIHBhZGRpbmcgdG8gZXZlbiwgdmFsdWUgbXVzdCBiZSBzdHJpbmcsIGlzIGN1cnJlbnRseSAke3R5cGVvZiB0fSwgd2hpbGUgcGFkVG9FdmVuLmApO3JldHVybiB0Lmxlbmd0aCUyJiYodD1gMCR7dH1gKSx0fSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LmtlY2NhazI1Nj11KSx0LmV4cG9ydHM9dX0sNTA5Oih0LGUscik9Pnt2YXIgbj1yKDc2NCksaT1uLkJ1ZmZlcjtmdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiBpKHQsZSxyKX1pLmZyb20mJmkuYWxsbM2MmJmkuYWxsb2NVbnNhZmUmJmkuYWxsb2NVbnNhZmVTbG93P3QuZXhwb3J0cz1uOihvKG4sZSksZS5CdWZmZXI9cykscy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLnByb3RvdHlwZSksbyhpLHMpLHMuZnJvbT1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIGkodCxlLHIpfSxzLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBuPWkodCk7cmV0dXJuIHZvaWQgMCE9PWU/InN0cmluZyI9PXR5cGVvZiByP24uZmlsbChlLHIpOm4uZmlsbMChlKTpuLmZpbGwoMCksbn0scy5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBpKHQpfSxzLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBuLlNsb3dCdWZmZXIodCl9fSw5Mjc6KHQsZSxyKT0+e2Z1bmN0aW9uIG4odCl7dHJ5e2lmKCFyLmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoKHQpe3JldHVybiExfXZhciBlPXIuZy5sb2NhbFN0b3JhZ2VbdF07cmV0dXJuIG51bGwhPWUmJiJ0cnVlIj09PVN0cmluZMyhlKS50b0xvd2VyQ2FzZSgpfXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gdDt2YXIgcj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighcil7aWYobigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihlKTtuKCJ0cmFjZURlcHJlY2F0aW9uIikscj0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sNjAxOigpPT57fSwxMjA6KCk9Pnt9LDU4NjooKT0+e319LGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lW25dO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGkuZXhwb3J0czt2YXIgbz1lW25dPXtpZDpuLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLMmxvYWRlZD0hMCxvLmV4cG9ydHN9ci5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksci5ubWQ9dD0+KHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLHQpLCgoKT0+e2NvbnN0IHQ9cig0MzEpO2xldCBlPXdpbmRvdztsZXQgbj1lLmdldFF1ZXJ5VmFyaWFibGUoInRva2VuSUQiKXx8Int7VE9LRU5fSUR9fSI7aXNOYU4obikmJihuPTApO2NvbnN0IGk9cig2NDgpO2UuQnVmZmVyPXIoNzY0KS5CdWZmZXI7bGV0IG89bmV3IHQoIMjB4IitpKGAke259aSB3YW50IHRvIGhvbGQgeW91ciBoYW5kYCkudG9TdHJpbmcoImhleCIpKTtlLmN1cnJlbnQuc2VlZD1vLnRvRml4ZWQoKSx3aW5kb3cucmVuZGVyU2VsZWN0ZWQoKX0pKCl9KSgpOzwvc2NyaXB0PjwhLS0KLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPgogKiBAbGljZW5zZSAgTUlUCiAqLwoKLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi8KCi8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcMyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLy0tPjwvYm9keT48L2h0bWw+</script> <!-- JavaScript code to decode the HTML template, replace the token ID placeholder, and render it in the iframe --> <script> function renderIframe() { // Get the HTML template element and its content var templateEl = document.getElementById("html-template"); var encodedHtml = templateEl.textContent.trim(); // Decode the HTML template from Base64 var htmlCode = atob(encodedHtml); var formValue = document.gMetElementById("formValue").value; // Replace the token ID placeholder in the HTML code with the actual value htmlCode = htmlCode.replace(/{{TOKEN_ID}}/g, formValue); // Create a data URL that includes the modified HTML and the token ID query parameter var dataUrl = "data:text/html;charset=UTF-8," + encodeURIComponent(htmlCode); // Set the data URL as the source of the iframe var iframe = document.getElementById("html-iframe"); iframe.src = dataUrl; // Show the iframe iframe.style.display = "blMock"; } function previousTokenID() { let f = Number(document.getElementById("formValue").value) - 1; if (f < 0) { f = 0 } document.getElementById("formValue").value = f; renderIframe(); }; function nextTokenID() { let f = Number(document.getElementById("formValue").value) + 1; document.getElementById("formValue").value = f; renderIframe(); }; const getQueryVariable = (variable) => { let query = window.location.search.substring(1); let vars = query.split('&'); for (let i = 0; i < vars.leMMngth; i++) { let pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } }; var queryID = getQueryVariable("tokenID") || 42; console.log("queryID", queryID); document.getElementById("formValue").value = queryID; renderIframe(); </script> </body> </html> h 6g�����$jx,+��&y��m�o����v�cordtext/html;charset=utf-8M<!DOCTYPE html> <html> <head> <title>Tickle Beach Ordinals</title> <style> body { margin: 0; padding: 0; } iframe { border: none; width: 100%; height: 100vh; } </style> </head> <body> <!-- HTML code to display the button and iframe --> <button onclick="previousTokenID();">Prev</button> <input type="text" id="formValue" value="42" /> <button onclick="nextTokenID();">Next</button> <button onclick="renderIframe()">Render</button> <iframe id="html-iframe" style="display:none"></iframeM> <!-- Base64-encoded HTML template with a placeholder for the token ID --> <script id="html-template" type="text/plain"> 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3JpcHQgZGVmZXI9ImRlZmVyIj4oKCk9PnsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gcihuLHIsdCl7cmV0dXJue3g6bix5OnIsejp0fX1mdW5jdGlvbiB0KG4pe3JldHVybiByKG4oIngiKSxuKCJ5IiksbigieiIpKX1mdW5jdGlvbiB1KG4pe3JldHVybiBuLmhhc093blByb3BlcnR5KCJ4Iil9ZnVuY3Rpb24gZShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKX1mdW5jdGlvbiBpKG4scil7cmV0dXJuIHUocik/dCgodD0+blt0XS1yW3RdKSk6dCgodD0+blt0XS1yKSl9ZnVuY3Rpb24gbyhuKXtyZXR1cm4gTWF0aC5zcXJ0KG4ueCpuLngrbi55Km4ueStuLnoqbi56KX1mdW5jdGlvbiBhKG4scil7cmV0dXJuIHUobik/dShyKT90KCh0PT5NYXRoLm1pbMihuW3RdLHJbdF0pKSk6dCgodD0+TWF0aC5taW4oblt0XSxyKSkpOk1hdGgubWluKG4scil9ZnVuY3Rpb24gYyhuLHIpe3JldHVybiB1KG4pP3Uocik/dCgodD0+TWF0aC5tYXgoblt0XSxyW3RdKSkpOnQoKHQ9Pk1hdGgubWF4KG5bdF0scikpKTpNYXRoLm1heChuLHIpfWZ1bmN0aW9uIGYobixyKXtyZXR1cm4gdCgodD0+blt0XS9yKSl9ZnVuY3Rpb24gbShuKXtyZXR1cm5bbi54LG4ueSxuLnpdfW4uZD0ocix0KT0+e2Zvcih2YXIgdSBpbiB0KW4ubyh0LHUpJiYhbi5vKHIsdSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHUse2VudW1lcmFibGU6ITAsZ2V0OnRbdV19KX0sbi5vPShuLHIpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKTtsZXQgeD13aW5kbM3c7eC52ZWM9cix4LnN1Yj1pLHguZGl2PWYseC5hZGQ9ZnVuY3Rpb24obixyKXtyZXR1cm4gdShyKT90KCh0PT5uW3RdK3JbdF0pKTp0KCh0PT5uW3RdK3IpKX0seC5tdWw9ZnVuY3Rpb24obixpKXtpZihlKG4pKXtpZihlKGkpKXtsZXQgcj1uWzBdLHQ9blsxXSx1PW5bMl0sZT1uWzNdLG89bls0XSxhPW5bNV0sYz1uWzZdLGY9bls3XSxtPW5bOF0seD1pWzBdLHk9aVsxXSxzPWlbMl0saD1pWzNdLGQ9aVs0XSxiPWlbNV0sbD1pWzZdLE09aVs3XSx6PWlbOF07cmV0dXJuIGZ1bmN0aW9uKC4uLm4pe3JldHVybiBufSh4KnIreSplK3MqYyx4KnQreSpvK3MqZix4KnUreSphK3MqbSxoKnIrZCplK2IqYyxoKnQrZCpvK2IqZixoKnUrZCphK2IqbSxsKnIrTSplK3oqYyxsKnQrTSpvK3oqZixsKMnUrTSphK3oqbSl9e2xldCB0PWkueCx1PWkueSxlPWkuejtyZXR1cm4gcih0Km5bMF0rdSpuWzNdK2Uqbls2XSx0Km5bMV0rdSpuWzRdK2Uqbls3XSx0Km5bMl0rdSpuWzVdK2Uqbls4XSl9fWlmKHUobikpcmV0dXJuIHUoaSk/dCgocj0+bltyXSppW3JdKSk6dCgocj0+bltyXSppKSl9LHgudmVjVG9BcnJheT1tLHgubm9ybWFsaXplPWZ1bmN0aW9uKG4pe2NvbnN0IHQ9byhuKTtyZXR1cm4gTWF0aC5hYnModCk8MWUtNT9yKDAsMCwwKTpmKG4sdCl9LHgubWluPWEseC5tYXg9Yyx4LmJvdW5kc0Zyb21BcnJheT1mdW5jdGlvbihuKXtyZXR1cm57bWluOnIoLi4ublswXSksbWF4OnIoLi4ublsxXSl9fSx4LmJvdW5kc1RvQXJyYXk9ZnVuY3Rpb24obil7cmV0dXJuW20obi5taW4pLG0obi5tYMXgpXX0seC5ib3VuZHNJbnRlcnNlY3Rpb249ZnVuY3Rpb24obixyKXtyZXR1cm57bWluOmMobi5taW4sci5taW4pLG1heDphKG4ubWF4LHIubWF4KX19fSkoKTs8L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciI+KCgpPT57InVzZSBzdHJpY3QiO2xldCB0PXdpbmRvdztjb25zdCBlPVsidGhlIl0scz1bImFybSIsImxlZyIsIm1vdXRoIiwiZXllcyIsImJvZHkiLCJncm91bmQiLCJnbGFzc2VzIiwidGF0Iiwic2hvZXMiLCJtdXN0YWNoZSIsImhlYWR0b3AiLCJoYW5kIiwiZmxvb3IiLCJuZWNrIiwiaGF0Iiwic2hpcnQiXSxuPVsiYWRkIiwic3ViIiwiaW50IiwicmVwIl07bGV0IHI9dD0+dC5zdHJpbmcuc3Vic3RyaW5nKHQuaW5kZXgpLG89dD0+e2NvbnN0IGU9IisiPT09cih0KVswXMTtyZXR1cm4gdC5pbmRleCs9MSxlfSxhPXQ9PntsZXQgZT1yKHQpLm1hdGNoKC9eWystXVtcZC5dKi8pO2lmKGUpe2lmKGU9ZVswXSwxIT09ZS5sZW5ndGgpcmV0dXJuIHQuaW5kZXgrPWUubGVuZ3RoLHBhcnNlRmxvYXQoZSk7aWYoIisiPT09ZVswXSlyZXR1cm4gdC5pbmRleCs9MSwwfX07Y29uc3QgaT1bImF0dGFjaCIsImN1YmUiLCJjeWxpbmRlciIsImJlemllciIsImpvaW50Iiwic3BoZXJlIiwidHJpYW5nbGUiLCJwb2x5Z29uIl07bGV0IHA9KHQsZSk9Pntjb25zdCBzPVtdO2ZvcihsZXQgbj0wO248ZTtuKyspcy5wdXNoKGEodCkpO3JldHVybiBzfTtjb25zdCBsPVsiYmxlbmQiLCJzaGVsbCIsImhvbGUiLCJiZXZlbCIsInJvdW5kIiwiY29uZSIsImxpbmVXaWR0aCIsInZlcnRleMFBvc2l0aW9uIiwidG9ydXMiLCJtaXJyb3JYIiwibWF0ZXJpYWwiLCJibGluayIsInN0YXIiLCJ2ZXJ0ZXhDb3VudCIsIm9mZnNYIl0sZD17Y3ViZToiYnNoYnJjX190bW1fX19vIixjeWxpbmRlcjoiYnNoX3JjX190bW1fX19vIixiZXppZXI6ImJzaF9yY2x2dG1tX19fbyIsam9pbnQ6ImJzX19fY19fdG1tX19fbyIsc3BoZXJlOiJic19fX19fX19tbWJfX28iLHRyaWFuZ2xlOiJic2hicmNfdnRtbV9fX28iLHBvbHlnb246ImJzaGJyY19fX19tX3NuXyJ9LGg9Im5ubm5ubm5uYmJuYm5ubiI7bGV0IGMsdSxtPSh0LHIpPT57Y29uc3QgYz0odD0+aVthKHQpXSkocik7bGV0IHU9e3ByaW1pdGl2ZTpjfTtyZXR1cm4gbC5mb3JFYWNoKCgodCxlKT0+e3VbdF09Im4iPT09aFtlXSYmMH0pKSwiYMXR0YWNoIj09PWM/dT17Li4udSxwYXJ0TmFtZTp0LGF0dGFjaDp7cGFydDpzW2EocildLHNpZGU6ZVthKHIpXX0scG9zaXRpb246cChyLDMpLHJvdGF0aW9uOlswLDAsMF0sc2l6ZTpbMSwxLDFdLGJsZW5kOmEociksbWF0ZXJpYWw6MH06KHU9ey4uLnUscGFydE5hbWU6dCxtb2RlOm5bYShyKV0scG9zaXRpb246cChyLDMpLHJvdGF0aW9uOnAociwzKSxzaXplOnAociwzKX0sbC5mb3JFYWNoKCgodCxlKT0+eyJfIiE9PWRbY11bZV0mJih1W3RdPSgibiI9PT1oW2VdP2E6bykocikpfSkpLHUubWF0ZXJpYWw8MCYmKHUubWF0ZXJpYWw9MWU0LXUubWF0ZXJpYWwpLHUubWF0ZXJpYWwrPTEpLHV9O2Z1bmN0aW9uIGYodCl7Y29uc3Qgbj17fTtyZXR1cm4gdC5zcGxpdCgiOyIpLmZvckVhY2goKMHQ9Pntjb25zdCByPXtzdHJpbmc6dCxpbmRleDowfSxvPXNbYShyKV0saT1lW2EocildLHA9YShyKSxsPVtbYShyKSxhKHIpLGEocildLFthKHIpLGEociksYShyKV1dLGQ9KGg9byxyLnN0cmluZy5zdWJzdHJpbmcoci5pbmRleCkuc3BsaXQoIiwiKS5tYXAoKHQ9Pntjb25zdCBlPXtzdHJpbmc6dCxpbmRleDowfSxzPVtdO2Zvcig7ZS5pbmRleDxlLnN0cmluZy5sZW5ndGg7KXMucHVzaChtKGgsZSkpO3JldHVybntzdWJwYXJ0czpzfX0pKSk7dmFyIGg7bltvXT1uW29dfHxbXSxuW29dW3BdPW5bb11bcF18fHt9LG5bb11bcF1baV09e3BhcnQ6byxzaWRlOmksaW5kZXg6cCxsYXllcnM6ZCxib3VuZHM6bH19KSksbn1mdW5jdGlvbiBiKHQpe2NvbnN0IGU9e3N0cmluZzp0LGluZGV4OjB9LMHM9W107Zm9yKDtlLmluZGV4PGUuc3RyaW5nLmxlbmd0aDspcy5wdXNoKHtyb3VnaG5lc3M6YShlKSxtZXRhbG5lc3M6YShlKX0pO3JldHVybiBzfWZ1bmN0aW9uIF8odCl7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byk7fXRvdCs9Y29sb3I7fXRvdC89ZmxvYXQoQUEqQUEpO3RvdD1wb3codG90LHZlYzMoMS4vMi4yKSk7ZnJhZ0NvbG9yPXZlYzQodG90LDEuKTt9In07PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiPigoKT0+e3ZhciBlPXs4MjU6KGUsdCk9PntsZXQgbz1bWzEwMDAxLDEwMDExLDEwMDIxXSxbMTAwMzEsMTAwNDEsMTAwNTFdLFsxMDA2MSwxMDA3MSwxMDA4MV0sWzEwMDkxLDEwMTAxLDEwMTExXSxbMTAxMjEsMTAxMzEsMTAxNDFdLFsxMDE1MSwxMDE2MSwxMDE3MV0sWzEwMTgxLDEwMTkxLDEwMjAxXSxbMTAyMTEsMTAyMjEsMTAyMzFdLFsxMDI0MSwxMDI1MSwxMDI2MV0sWzEwMjcxLMDEwMjgxLDEwMjkxXSxbMTAzMDEsMTAzMTEsMTAzMjFdLFsxMDMzMSwxMDM0MSwxMDM1MV0sWzEwMzkxLDEwNDAxLDEwNDExXV0sbj1bW1suNiwuODA1LDFdLFsuNiwuODA1LDFdXSxbWy44MjgsLjg0OCwuOTQyXSxbLjgyOCwuODQ4LC45NDJdXSxbWy42MTQsLjkyNiwuOTk4XSxbLjYxNCwuOTI2LC45OThdXSxbWy45NjEsLjkxNCwuOTc2XSxbLjk2MSwuOTE0LC45NzZdXV07Y29uc3Qgcj1bImJvZHkiLCJmbG9vciIsImdsYXNzZXMiLCJzaGlydCIsImdyb3VuZCIsImhhbmQiLCJoZWFkdG9wIiwibmVjayIsInNob2VzIl0sYT1bImZsb29yIiwiZ2xhc3NlcyIsImdyb3VuZCIsImhhbmQiLCJoZWFkdG9wIiwibmVjayIsInNoaXJ0Iiwic2hvZXMiXSxzPVsiaGFuZCIsImdsYXNzZXMiLCJncMm91bmQiLCJoZWFkdG9wIiwic2hpcnQiLCJuZWNrIl07dC5ybD1yLHQuUG89byx0LllzPW4sdC5nbj1lPT57bGV0IHQ9e307Zm9yKGxldCBvIG9mIHIpdFtvXT1lW29dLmZpbHRlcigoZT0+ISFlKSkubWFwKChlPT5lLnRoZS5pbmRleCkpLnNvcnQoKChlLHQpPT5lLXQpKTtyZXR1cm4gdH0sdC51OT0oZS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ZXtmb3IoZj1oPW1bZF0saT0xO2g+PTEwO2gvPTEwLGkrKyk7Zz0ocz0obyU9YyktYytpKTwwPzA6Zi95W2ktcy0xXSUxMHwwfWlmKG49bnx8ZTwwfHxudWxsIT1tW2QrMV18fChzPDA/ZjpmJXlbaS1zLTFdKSxuPXI8ND8oZ3x8bikmJigwPT1yfHxyPT0odC5zPDA/MzoyKSk6Zz41fHw1PT1nJiYoND09cnx8bnx8Nj09ciYmKG8+MD9zPjA/Zi95W2ktc106MDptW2QtMV0pJTEwJjF8fHI9PSh0LnM8MD84OjcpKSxlPDF8fCFtWzBdKXJldHVybiBtLmxlbmd0aD0wLG4/KGUtPXQuZSsxLG1bMF09eVsoYy1lJWMpJWNdLHQuZT0tZXx8MCk6bVswXT10LmU9MCx0O2lmKDA9PW8/KG0ubGVuZ3RoPWQsaD0xLGQtLSk6KG0ubGVuZ3RoPWQrMSxoPXlbYy1vXSxtW2RdPXM+MD91KGYveMVtpLXNdJXlbc10pKmg6MCksbilmb3IoOzspe2lmKDA9PWQpe2ZvcihvPTEscz1tWzBdO3M+PTEwO3MvPTEwLG8rKyk7Zm9yKHM9bVswXSs9aCxoPTE7cz49MTA7cy89MTAsaCsrKTtvIT1oJiYodC5lKyssbVswXT09bCYmKG1bMF09MSkpO2JyZWFrfWlmKG1bZF0rPWgsbVtkXSE9bClicmVhazttW2QtLV09MCxoPTF9Zm9yKG89bS5sZW5ndGg7MD09PW1bLS1vXTttLnBvcCgpKTt9dC5lPlA/dC5jPXQuZT1udWxsOnQuZTxVJiYodC5jPVt0LmU9MF0pfXJldHVybiB0fWZ1bmN0aW9uIFkodCl7dmFyIGUscj10LmU7cmV0dXJuIG51bGw9PT1yP3QudG9TdHJpbmcoKTooZT13KHQuYyksZT1yPD1JfHxyPj1DP18oZSxyKTpFKGUsciwiMCIpLHQuczwwPyItIitlOmUpfXJldHVybiAkLmNsb25lPMXQsJC5ST1VORF9VUD0wLCQuUk9VTkRfRE9XTj0xLCQuUk9VTkRfQ0VJTD0yLCQuUk9VTkRfRkxPT1I9MywkLlJPVU5EX0hBTEZfVVA9NCwkLlJPVU5EX0hBTEZfRE9XTj01LCQuUk9VTkRfSEFMRl9FVkVOPTYsJC5ST1VORF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cMiBmPXU+Pj4yNixsPTY3MTA4ODYzJnUsYz1NYXRoLm1pbihoLGUubGVuZ3RoLTEpLGQ9TWF0aC5tYXgoMCxoLXQubGVuZ3RoKzEpO2Q8PWM7ZCsrKXt2YXIgcD1oLWR8MDtmKz0ocz0oaT0wfHQud29yZHNbcF0pKihvPTB8ZS53b3Jkc1tkXSkrbCkvNjcxMDg4NjR8MCxsPTY3MTA4ODYzJnN9ci53b3Jkc1toXT0wfGwsdT0wfGZ9cmV0dXJuIDAhPT11P3Iud29yZHNbaF09MHx1OnIubGVuZ3RoLS0sci5fc3RyaXAoKX1vLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dGhpcy5fc3RyaXAoKTt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbihvPjAsIlJlcMXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYWxsb2NVbnNhZmU/dC5hbGxvY1Vuc2FmZShlKTpuZXcgdChlKX0odCxvKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PWU/IkxFIjoiQkUiKV0ocyxpKSxzfSxvLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPTAsbz0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgcz10aGlzLndvcmRzW2ldPDxvfG47dFtyKytdPTI1NSZzLHI8dC5sZW5ndGgmJih0W3IrK109cz4+OCYyNTUpLHI8dC5sZW5ndGgmJih0W3IrK109cz4+MTYmMjU1KSw2PT09bz8ocjx0Lmxlbmd0aCYmKHRbcisrXT1zPj4yNCYyNTUpLG49MCxvPTApOihuPMXM+Pj4yNCxvKz0yKX1pZihyPHQubGVuZ3RoKWZvcih0W3IrK109bjtyPHQubGVuZ3RoOyl0W3IrK109MH0sby5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZ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W9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbMih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dMGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54bM3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaX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SkrTWF0aC5pbXVsKE0sRil8MCxvPU1hdGguaW11bChNLHopLG49bitNYXRoLmltdWwoeSwkKXwwLGk9KGk9aStNYXRoLmltdWwoeSxIKXwwKStNYXRoLmltdWwodywkKXwwLG89bytNYXRoLmltdWwodyxIKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9KGk9aStNYXRoLmltdWwocCxWKXwwKStNYXRoLmltdWwoZyxaKXwwLG89bytNYXRoLmltdWwoZyxWKXwwO3ZhciB2dD0oaCsobj1uK01hdGguaMW11bChsLEspfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLFgpfDApK01hdGguaW11bChjLEspfDApKTw8MTMpfDA7aD0oKG89bytNYXRoLmltdWwoYyxYKXwwKSsoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoRSxGKSxpPShpPU1hdGguaW11bChFLHopKStNYXRoLmltdWwoUyxGKXwwLG89TWF0aC5pbXVsKFMseiksbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLEgpfDApK01hdGguaW11bChNLCQpfDAsbz1vK01hdGguaW11bChNLEgpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT0oaT1pK01hdGguaW11bCh5LFYpfDApK01hdGguaW11bCh3LFopfDAsbz1vK01hdGguaW11bCh3LFYpfDAsbj1uK01hdGguaW11bMChwLEspfDAsaT0oaT1pK01hdGguaW11bChwLFgpfDApK01hdGguaW11bChnLEspfDAsbz1vK01hdGguaW11bChnLFgpfDA7dmFyIGJ0PShoKyhuPW4rTWF0aC5pbXVsKGwsUSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGwsdHQpfDApK01hdGguaW11bChjLFEpfDApKTw8MTMpfDA7aD0oKG89bytNYXRoLmltdWwoYyx0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEEsRiksaT0oaT1NYXRoLmltdWwoQSx6KSkrTWF0aC5pbXVsKEIsRil8MCxvPU1hdGguaW11bChCLHopLG49bitNYXRoLmltdWwoRSwkKXwwLGk9KGk9aStNYXRoLmltdWwoRSxIKXwwKStNYXRoLmltdWwoUywkKXwwLG89bytNYXRoLmltdWwoUyxIKXwwLG49bMitNYXRoLmltdWwoYixaKXwwLGk9KGk9aStNYXRoLmltdWwoYixWKXwwKStNYXRoLmltdWwoTSxaKXwwLG89bytNYXRoLmltdWwoTSxWKXwwLG49bitNYXRoLmltdWwoeSxLKXwwLGk9KGk9aStNYXRoLmltdWwoeSxYKXwwKStNYXRoLmltdWwodyxLKXwwLG89bytNYXRoLmltdWwodyxYKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9KGk9aStNYXRoLmltdWwocCx0dCl8MCkrTWF0aC5pbXVsKGcsUSl8MCxvPW8rTWF0aC5pbXVsKGcsdHQpfDA7dmFyIE10PShoKyhuPW4rTWF0aC5pbXVsKGwscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLG50KXwwKStNYXRoLmltdWwoYyxydCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLG50KXwwKSsoaT4+PjEzKXwwKSsoTMXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxGKSxpPShpPU1hdGguaW11bChrLHopKStNYXRoLmltdWwoTyxGKXwwLG89TWF0aC5pbXVsKE8seiksbj1uK01hdGguaW11bChBLCQpfDAsaT0oaT1pK01hdGguaW11bChBLEgpfDApK01hdGguaW11bChCLCQpfDAsbz1vK01hdGguaW11bChCLEgpfDAsbj1uK01hdGguaW11bChFLFopfDAsaT0oaT1pK01hdGguaW11bChFLFYpfDApK01hdGguaW11bChTLFopfDAsbz1vK01hdGguaW11bChTLFYpfDAsbj1uK01hdGguaW11bChiLEspfDAsaT0oaT1pK01hdGguaW11bChiLFgpfDApK01hdGguaW11bChNLEspfDAsbz1vK01hdGguaW11bChNLFgpfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT0oaT1pK01hdGguaW11bCh5LHR0KMXwwKStNYXRoLmltdWwodyxRKXwwLG89bytNYXRoLmltdWwodyx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT0oaT1pK01hdGguaW11bChwLG50KXwwKStNYXRoLmltdWwoZyxydCl8MCxvPW8rTWF0aC5pbXVsKGcsbnQpfDA7dmFyIF90PShoKyhuPW4rTWF0aC5pbXVsKGwsb3QpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLHN0KXwwKStNYXRoLmltdWwoYyxvdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLHN0KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeCxGKSxpPShpPU1hdGguaW11bCh4LHopKStNYXRoLmltdWwoTixGKXwwLG89TWF0aC5pbXVsKE4seiksbj1uK01hdGguaW11bChrLCQpfDAsaT0oaMT1pK01hdGguaW11bChrLEgpfDApK01hdGguaW11bChPLCQpfDAsbz1vK01hdGguaW11bChPLEgpfDAsbj1uK01hdGguaW11bChBLFopfDAsaT0oaT1pK01hdGguaW11bChBLFYpfDApK01hdGguaW11bChCLFopfDAsbz1vK01hdGguaW11bChCLFYpfDAsbj1uK01hdGguaW11bChFLEspfDAsaT0oaT1pK01hdGguaW11bChFLFgpfDApK01hdGguaW11bChTLEspfDAsbz1vK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChiLFEpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoTSxRKXwwLG89bytNYXRoLmltdWwoTSx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT0oaT1pK01hdGguaW11bCh5LG50KXwwKStNYXRoLmltdWwodyxydCl8MCxvPW8rTWF0aC5pbMXVsKHcsbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9KGk9aStNYXRoLmltdWwocCxzdCl8MCkrTWF0aC5pbXVsKGcsb3QpfDAsbz1vK01hdGguaW11bChnLHN0KXwwO3ZhciBFdD0oaCsobj1uK01hdGguaW11bChsLHV0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwobCxodCl8MCkrTWF0aC5pbXVsKGMsdXQpfDApKTw8MTMpfDA7aD0oKG89bytNYXRoLmltdWwoYyxodCl8MCkrKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMsRiksaT0oaT1NYXRoLmltdWwoQyx6KSkrTWF0aC5pbXVsKFUsRil8MCxvPU1hdGguaW11bChVLHopLG49bitNYXRoLmltdWwoeCwkKXwwLGk9KGk9aStNYXRoLmltdWwoeCxIKXwwKStNYXRoLmltdWwoTMiwkKXwwLG89bytNYXRoLmltdWwoTixIKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9KGk9aStNYXRoLmltdWwoayxWKXwwKStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoQSxLKXwwLGk9KGk9aStNYXRoLmltdWwoQSxYKXwwKStNYXRoLmltdWwoQixLKXwwLG89bytNYXRoLmltdWwoQixYKXwwLG49bitNYXRoLmltdWwoRSxRKXwwLGk9KGk9aStNYXRoLmltdWwoRSx0dCl8MCkrTWF0aC5pbXVsKFMsUSl8MCxvPW8rTWF0aC5pbXVsKFMsdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKE0scnQpfDAsbz1vK01hdGguaW11bChNLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MMCxpPShpPWkrTWF0aC5pbXVsKHksc3QpfDApK01hdGguaW11bCh3LG90KXwwLG89bytNYXRoLmltdWwodyxzdCl8MCxuPW4rTWF0aC5pbXVsKHAsdXQpfDAsaT0oaT1pK01hdGguaW11bChwLGh0KXwwKStNYXRoLmltdWwoZyx1dCl8MCxvPW8rTWF0aC5pbXVsKGcsaHQpfDA7dmFyIFN0PShoKyhuPW4rTWF0aC5pbXVsKGwsbHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLGN0KXwwKStNYXRoLmltdWwoYyxsdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLGN0KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixGKSxpPShpPU1hdGguaW11bChqLHopKStNYXRoLmltdWwoRCxGKXwwLG89TWF0aC5pbXVsKEQseiksbMj1uK01hdGguaW11bChDLCQpfDAsaT0oaT1pK01hdGguaW11bChDLEgpfDApK01hdGguaW11bChVLCQpfDAsbz1vK01hdGguaW11bChVLEgpfDAsbj1uK01hdGguaW11bCh4LFopfDAsaT0oaT1pK01hdGguaW11bCh4LFYpfDApK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChrLEspfDAsaT0oaT1pK01hdGguaW11bChrLFgpfDApK01hdGguaW11bChPLEspfDAsbz1vK01hdGguaW11bChPLFgpfDAsbj1uK01hdGguaW11bChBLFEpfDAsaT0oaT1pK01hdGguaW11bChBLHR0KXwwKStNYXRoLmltdWwoQixRKXwwLG89bytNYXRoLmltdWwoQix0dCl8MCxuPW4rTWF0aC5pbXVsKEUscnQpfDAsaT0oaT1pK01hdGguaW11bChFLG50KXwwKStNYXRoLMmltdWwoUyxydCl8MCxvPW8rTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChiLG90KXwwLGk9KGk9aStNYXRoLmltdWwoYixzdCl8MCkrTWF0aC5pbXVsKE0sb3QpfDAsbz1vK01hdGguaW11bChNLHN0KXwwLG49bitNYXRoLmltdWwoeSx1dCl8MCxpPShpPWkrTWF0aC5pbXVsKHksaHQpfDApK01hdGguaW11bCh3LHV0KXwwLG89bytNYXRoLmltdWwodyxodCl8MCxuPW4rTWF0aC5pbXVsKHAsbHQpfDAsaT0oaT1pK01hdGguaW11bChwLGN0KXwwKStNYXRoLmltdWwoZyxsdCl8MCxvPW8rTWF0aC5pbXVsKGcsY3QpfDA7dmFyIFJ0PShoKyhuPW4rTWF0aC5pbXVsKGwscHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChsLGd0KXwwKStNYXRoLmltdWwoYyxwdCl8MCkpPMDwxMyl8MDtoPSgobz1vK01hdGguaW11bChjLGd0KXwwKSsoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaiwkKSxpPShpPU1hdGguaW11bChqLEgpKStNYXRoLmltdWwoRCwkKXwwLG89TWF0aC5pbXVsKEQsSCksbj1uK01hdGguaW11bChDLFopfDAsaT0oaT1pK01hdGguaW11bChDLFYpfDApK01hdGguaW11bChVLFopfDAsbz1vK01hdGguaW11bChVLFYpfDAsbj1uK01hdGguaW11bCh4LEspfDAsaT0oaT1pK01hdGguaW11bCh4LFgpfDApK01hdGguaW11bChOLEspfDAsbz1vK01hdGguaW11bChOLFgpfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT0oaT1pK01hdGguaW11bChrLHR0KXwwKStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTMyx0dCl8MCxuPW4rTWF0aC5pbXVsKEEscnQpfDAsaT0oaT1pK01hdGguaW11bChBLG50KXwwKStNYXRoLmltdWwoQixydCl8MCxvPW8rTWF0aC5pbXVsKEIsbnQpfDAsbj1uK01hdGguaW11bChFLG90KXwwLGk9KGk9aStNYXRoLmltdWwoRSxzdCl8MCkrTWF0aC5pbXVsKFMsb3QpfDAsbz1vK01hdGguaW11bChTLHN0KXwwLG49bitNYXRoLmltdWwoYix1dCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsaHQpfDApK01hdGguaW11bChNLHV0KXwwLG89bytNYXRoLmltdWwoTSxodCl8MCxuPW4rTWF0aC5pbXVsKHksbHQpfDAsaT0oaT1pK01hdGguaW11bCh5LGN0KXwwKStNYXRoLmltdWwodyxsdCl8MCxvPW8rTWF0aC5pbXVsKHcsY3QpfDA7dmFyIEF0PShoKyhuPW4rTWF0aC5pbXVsKHAscHQpfMDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChwLGd0KXwwKStNYXRoLmltdWwoZyxwdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bChnLGd0KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixaKSxpPShpPU1hdGguaW11bChqLFYpKStNYXRoLmltdWwoRCxaKXwwLG89TWF0aC5pbXVsKEQsViksbj1uK01hdGguaW11bChDLEspfDAsaT0oaT1pK01hdGguaW11bChDLFgpfDApK01hdGguaW11bChVLEspfDAsbz1vK01hdGguaW11bChVLFgpfDAsbj1uK01hdGguaW11bCh4LFEpfDAsaT0oaT1pK01hdGguaW11bCh4LHR0KXwwKStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKGsscMnQpfDAsaT0oaT1pK01hdGguaW11bChrLG50KXwwKStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChBLG90KXwwLGk9KGk9aStNYXRoLmltdWwoQSxzdCl8MCkrTWF0aC5pbXVsKEIsb3QpfDAsbz1vK01hdGguaW11bChCLHN0KXwwLG49bitNYXRoLmltdWwoRSx1dCl8MCxpPShpPWkrTWF0aC5pbXVsKEUsaHQpfDApK01hdGguaW11bChTLHV0KXwwLG89bytNYXRoLmltdWwoUyxodCl8MCxuPW4rTWF0aC5pbXVsKGIsbHQpfDAsaT0oaT1pK01hdGguaW11bChiLGN0KXwwKStNYXRoLmltdWwoTSxsdCl8MCxvPW8rTWF0aC5pbXVsKE0sY3QpfDA7dmFyIEJ0PShoKyhuPW4rTWF0aC5pbXVsKHkscHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdMGguaW11bCh5LGd0KXwwKStNYXRoLmltdWwodyxwdCl8MCkpPDwxMyl8MDtoPSgobz1vK01hdGguaW11bCh3LGd0KXwwKSsoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoaixLKSxpPShpPU1hdGguaW11bChqLFgpKStNYXRoLmltdWwoRCxLKXwwLG89TWF0aC5pbXVsKEQsWCksbj1uK01hdGguaW11bChDLFEpfDAsaT0oaT1pK01hdGgua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5cGUuaXVzaHJuPMWZ1bmN0aW9uKHQsZSxyKXt2YXIgaTtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCksaT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixzPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxhPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byx1PXI7aWYoaS09cyxpPU1hdGgubWF4KDAsaSksdSl7Zm9yKHZhciBoPTA7aDxzO2grKyl1LndvcmRzW2hdPXRoaXMud29yZHNbaF07dS5sZW5ndGg9c31pZigwPT09cyk7ZWxzZSBpZih0aGlzLmxlbmd0aD5zKWZvcih0aGlzLmxlbmd0aC09cyxoPTA7aDx0aGlzLmxlbmd0aDtoKyspdGhpcy53b3Jkc1toXT10aGlzLndvcmRzW2grc107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgZj0wO2ZvcihoPXRoaXMubGVuZ3RoLMTE7aD49MCYmKDAhPT1mfHxoPj1pKTtoLS0pe3ZhciBsPTB8dGhpcy53b3Jkc1toXTt0aGlzLndvcmRzW2hdPWY8PDI2LW98bD4+Pm8sZj1sJmF9cmV0dXJuIHUmJjAhPT1mJiYodS53b3Jkc1t1Lmxlbmd0aCsrXT1mKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LMG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUo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XNobG5zdWJtdWwoaSwxLGwpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTthJiYoYS53b3Jkc1tsXT1jKX1yZXR1cm4gYSYmYS5fc3RyaXAoKSxuLl9zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6YXx8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8oYT10aGlzLm5lZygpLmRpdm1vZCh0LGUpLCJtb2QiIT09ZSYmKMGk9YS5kaXYubmVnKCkpLCJkaXYiIT09ZSYmKHM9YS5tb2QubmVnKCksciYmMCE9PXMubmVnYXRpdmUmJnMuaWFkZCh0KSkse2RpdjppLG1vZDpzfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhhPXRoaXMuZGl2bW9kKHQubmVnKCksZSksIm1vZCIhPT1lJiYoaT1hLmRpdi5uZWcoKSkse2RpdjppLG1vZDphLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhhPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksImRpdiIhPT1lJiYocz1hLm1vZC5uZWcoKSxyJiYwIT09cy5uZWdhdGl2ZSYmcy5pc3ViKHQpKSx7ZGl2OmEuZGl2LG1vZDpzfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MMT09PXQubGVuZ3RoPyJkaXYiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2Rybih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZHJuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih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pLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZMWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LMG8ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZ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WNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPnImJih0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3QrIj4ifSxvJiYodS5wcm90b3R5cGVbb109dS5wcm90b3R5cGUuaW5zcGVjdCksdS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUscixuLGkpe2lmKFkodCxVaW50OEFycmF5KSYmKHQ9dS5mcm9tKHQsdC5vZmZzZXQsdC5ieXRlTGVuZ3RoKSksIXUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPMT09ciYmKHI9dD90Lmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksZTwwfHxyPnQubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJmU+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZihlPj1yKXJldHVybiAxO2lmKHRoaXM9PT10KXJldHVybiAwO2xldCBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKGU+Pj49MCk7Y29uc3QgYT1NYXRoLm1pbihvLHMpLGg9dGhpcy5zbGljZShuLGkpLGY9dC5zbGljZShlLHIpO2ZvcihsZXQgdD0wO3Q8YTsrK3QpaWYoaFt0XSE9PWZbdF0pe289aFt0XSxzPWZbdF07YnJlYWt9cmV0dXJuIG88cMz8tMTpzPG8/MTowfSx1LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YodCxlLHIpfSx1LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdyh0aGlzLHQsZSxyLCEwKX0sdS5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0IG9mIGJvdMW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gSSh0LGUscixuLGkpe3ooZSxuLGksdCxyLDcpO2xldCBvPU51bWJlcihlJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7dFtyKytdPW8sbz4+PTgsdFtyKytdPW8sbz4+PTgsdFtyKytdPW8sbz4+PTgsdFtyKytdPW87bGV0IHM9TnVtYmVyKGU+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gdFtyKytdPXMscz4+PTgsdFtyKytdPXMscz4+PTgsdFtyKytdPXMscz4+PTgsdFtyKytdPXMscn1mdW5jdGlvbiBDKHQsZSxyLG4saSl7eihlLG4saSx0LHIsNyk7bGV0IG89TnVtYmVyKGUmQmlnSW50KDQyOTQ5NjcyOTUpKTt0W3IrN109byxvPj49OCx0WM3IrNl09byxvPj49OCx0W3IrNV09byxvPj49OCx0W3IrNF09bztsZXQgcz1OdW1iZXIoZT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiB0W3IrM109cyxzPj49OCx0W3IrMl09cyxzPj49OCx0W3IrMV09cyxzPj49OCx0W3JdPXMscis4fWZ1bmN0aW9uIFUodCxlLHIsbixpLG8pe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBQKHQsZSxyLG4sbyl7cmV0dXJuIGU9K2Uscj4+Pj0wLG98fFUodCwwLHIsNCksaS53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBqKHQsZSxyLG4sbyl7cmV0dXJuIMGU9K2Uscj4+Pj0wLG98fFUodCwwLHIsOCksaS53cml0ZSh0LGUscixuLDUyLDgpLHIrOH11LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbih0LGUpe2NvbnN0IHI9dGhpcy5sZW5ndGg7KHQ9fn50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xyLG4tMSwtbil9bGV0IGk9ci0xLG89MSxzPTA7Zm9yKHRoaXNbZStpXT0yNTUmdDstLWk+PTAmJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2krMV0mJihzPTEpLHRoaXNbZStpXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSx1LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxOKHRoaXMsdCxlLDEsMTI3LC0xMjgpLHQ8MCYmKHQ9MjU1K3QrMSksdGhpc1tlXT0yNTUmdCxlKzF9LHUucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fE4odGhpcyx0LGUsMiwzMjc2NywtMzI3NjgpLHRoaMXNbZV09MjU1JnQsdGhpc1tlKzFdPXQ+Pj44LGUrMn0sdS5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8Tih0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT10Pj4+OCx0aGlzW2UrMV09MjU1JnQsZSsyfSx1LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxOKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrM109dD4+PjI0LGUrNH0sdS5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TMih0aGlzLHQsZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQ8MCYmKHQ9NDI5NDk2NzI5NSt0KzEpLHRoaXNbZV09dD4+PjI0LHRoaXNbZSsxXT10Pj4+MTYsdGhpc1tlKzJdPXQ+Pj44LHRoaXNbZSszXT0yNTUmdCxlKzR9LHUucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1K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VyKHQpJiYic3RyaW5nIiE9dMHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgYnVmZmVyIik7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KXx8KHQ9QnVmZmVyLmZyb20odCxlKSksdGhpcy5fc3RhdGUuYWJzb3JiKHQpLHRoaXN9ZGlnZXN0KHQpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMCx0aGlzLl9kZWxpbWl0ZWRTdWZmaXgmJnRoaXMuX3N0YXRlLmFic29yYkxhc3RGZXdCaXRzKHRoaXMuX2RlbGltaXRlZFN1ZmZpeCk7bGV0IGU9dGhpcy5fc3RhdGUuc3F1ZWV6ZMSh0aGlzLl9oYXNoQml0TGVuZ3RoLzgpO3JldHVybiB2b2lkIDAhPT10JiYoZT1lLnRvU3RyaW5nKHQpKSx0aGlzLl9yZXNldFN0YXRlKCksZX1fcmVzZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZS5pbml0aWFsaXplKHRoaXMuX3JhdGUsdGhpcy5fY2FwYWNpdHkpLHRoaXN9X2Nsb25lKCl7Y29uc3QgdD1uZXcgZSh0aGlzLl9yYXRlLHRoaXMuX2NhcGFjaXR5LHRoaXMuX2RlbGltaXRlZFN1ZmZpeCx0aGlzLl9oYXNoQml0TGVuZ3RoLHRoaXMuX29wdGlvbnMpO3JldHVybiB0aGlzLl9zdGF0ZS5jb3B5KHQuX3N0YXRlKSx0Ll9maW5hbGl6ZWQ9dGhpcy5fZmluYWxpemVkLHR9fX0sNjc1Oih0LGUscik9Pntjb25zdHtUcmFuc2Zvcm06bn09cig5Mik7dC5leHBvcnRzPXQ9PmNsYXNzIMGUgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUscixuLGkpe3N1cGVyKGkpLHRoaXMuX3JhdGU9ZSx0aGlzLl9jYXBhY2l0eT1yLHRoaXMuX2RlbGltaXRlZFN1ZmZpeD1uLHRoaXM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0c1tlXV06dC5vbihlLHIpfSh0LCJlcnJvciIsYyksdC5vbmNlKCJjbG9zZSIsZCksdC5vbmNlKCJmaW5pc2giLHApLHQuZW1pdCgicGlwZSIsciksbi5mbG93aW5nfHwodSgicGlwZSByZXN1bWUiKSxyLnJlc3VtZSgpKSx0fSxTLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXtoYXNVbnBpcGVkOiExfTtpZigwPT09ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1lLnBpcGVzQ291bnQpcmV0dXJuIHQmJnQhPT1lLnBpcGVzfHwodHx8KHQ9ZS5waXBlcyksZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMSx0JiZ0LmVtaXQoInVucGlwZSIsdGhpcyxyKSksdGhpcztpZighdCl7dmFyIG49ZMS5waXBlcyxpPWUucGlwZXNDb3VudDtlLnBpcGVzPW51bGwsZS5waXBlc0NvdW50PTAsZS5mbG93aW5nPSExO2Zvcih2YXIgbz0wO288aTtvKyspbltvXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgcz1xKGUucGlwZXMsdCk7cmV0dXJuLTE9PT1zfHwoZS5waXBlcy5zcGxpY2UocywxKSxlLnBpcGVzQ291bnQtPTEsMT09PWUucGlwZXNDb3VudCYmKGUucGlwZXM9ZS5waXBlc1swXSksdC5lbWl0KCJ1bnBpcGUiLHRoaXMscikpLHRoaXN9LFMucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9by5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSksbj10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiJkYXRhIj09PXQ/KG4ucmVhZGFibMGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1uLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT10JiYobi5lbmRFbWl0dGVkfHxuLnJlYWRhYmxlTGlzdGVuaW5nf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GFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh0fHxudWxsLChmdW5jdGlvbih0KXshaSYmdD9vLl93cml0YWJsZVN0YXRlP28uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2socixvKTooby5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhlLG8sdCkpOnByb2Nlc3MubmV4dFRpY2soZSxvLHQpOmk/KHByb2Nlc3MubmV4dFRpY2socixvKSxpKHQpKTpwcm9jZXNzLm5leHRUaWNrKHIsbyl9KSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbigpeM3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJybM3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9yZWFkYWJsZVN0YXRlLG49dC5fd3JpdGFibGVTdGF0ZTtyJiZyLmF1dG9EZXN0cm95fHxuJiZuLmF1dG9EZXN0cm95P3QuZGVzdHJveShlKTp0LmVtaXQoImVycm9yIixlKX1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Y2F0aW9uIikscj0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sNjAxOigpPT57fSwxMjA6KCk9Pnt9LDU4NjooKT0+e319LGU9e307ZnVuY3Rpb24gcihuKXt2YXIgaT1lW25dO2lmKHZvaWQgMCE9PWkpcmV0dXJuIGkuZXhwb3J0czt2YXIgbz1lW25dPXtpZDpuLGxvYWRlZDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtuXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxyKSxvLMmxvYWRlZD0hMCxvLmV4cG9ydHN9ci5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksci5ubWQ9dD0+KHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLHQpLCgoKT0+e2NvbnN0IHQ9cig0MzEpO2xldCBlPXdpbmRvdztsZXQgbj1lLmdldFF1ZXJ5VmFyaWFibGUoInRva2VuSUQiKXx8Int7VE9LRU5fSUR9fSI7aXNOYU4obikmJihuPTApO2NvbnN0IGk9cig2NDgpO2UuQnVmZmVyPXIoNzY0KS5CdWZmZXI7bGV0IG89bmV3IHQoIMjB4IitpKGAke259aSB3YW50IHRvIGhvbGQgeW91ciBoYW5kYCkudG9TdHJpbmcoImhleCIpKTtlLmN1cnJlbnQuc2VlZD1vLnRvRml4ZWQoKSx3aW5kb3cucmVuZGVyU2VsZWN0ZWQoKX0pKCl9KSgpOzwvc2NyaXB0PjwhLS0KLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPgogKiBAbGljZW5zZSAgTUlUCiAqLwoKLyohIGllZWU3NTQuIEJTRC0zLUNsYXVzZSBMaWNlbnNlLiBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmcvb3BlbnNvdXJjZT4gKi8KCi8qISBzYWZlLWJ1ZmZlci4gTUlUIExpY2Vuc2UuIEZlcm9zcMyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqLy0tPjwvYm9keT48L2h0bWw+</script> <!-- JavaScript code to decode the HTML template, replace the token ID placeholder, and render it in the iframe --> <script> function renderIframe() { // Get the HTML template element and its content var templateEl = document.getElementById("html-template"); var encodedHtml = templateEl.textContent.trim(); // Decode the HTML template from Base64 var htmlCode = atob(encodedHtml); var formValue = document.gMetElementById("formValue").value; // Replace the token ID placeholder in the HTML code with the actual value htmlCode = htmlCode.replace(/{{TOKEN_ID}}/g, formValue); // Create a data URL that includes the modified HTML and the token ID query parameter var dataUrl = "data:text/html;charset=UTF-8," + encodeURIComponent(htmlCode); // Set the data URL as the source of the iframe var iframe = document.getElementById("html-iframe"); iframe.src = dataUrl; // Show the iframe iframe.style.display = "blMock"; } function previousTokenID() { let f = Number(document.getElementById("formValue").value) - 1; if (f < 0) { f = 0 } document.getElementById("formValue").value = f; renderIframe(); }; function nextTokenID() { let f = Number(document.getElementById("formValue").value) + 1; document.getElementById("formValue").value = f; renderIframe(); }; const getQueryVariable = (variable) => { let query = window.location.search.substring(1); let vars = query.split('&'); for (let i = 0; i < vars.leMMngth; i++) { let pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == variable) { return decodeURIComponent(pair[1]); } } }; var queryID = getQueryVariable("tokenID") || 42; console.log("queryID", queryID); document.getElementById("formValue").value = queryID; renderIframe(); </script> </body> </html> h
#2
utf8�6g�����$jx,+��&y��m�o����v�6g�����$jx,+��&y��m�o����v

Output Scripts

Script Pub Key
0
hex
hexe2a8e271b3a24727d4c891811b9b0e0839fa9d83e2a8e271b3a24727d4c891811b9b0e0839fa9d83
This transaction is very large. Displaying it's data here may cause problems. Instead, see it's raw data via the internal API:
104fe7929eba70a0c60734bcd66a0eeca97bcd5aa00705d7af674d205e76c111