dsh-plugin-patrol
DiscoveredDSH Internal Watchdog · 6 Health Checks (plugin/session/memory/tool/watchdog/daemon) + Settings Page Panel + 2 Tools. Three values don't collapse: unknown doesn't count as ok. Zero external dependencies, MIT.
IyDlt6Hmo4Dlj7ggwrcgZHNoLXBsdWdpbi1jaHVkYWktcGF0cm9sCgo+ICoqRFNIIOWGhemDqOeahOeci+mXqOeLlyoqIMK3IDYg6aG55YGl5bq35beh5qOAICsg6K6+572u6aG16Z2i5p2/ICsgMiDkuKrlt6XlhbcKClshW0xpY2Vuc2U6IE1JVF0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9MaWNlbnNlLU1JVC15ZWxsb3cuc3ZnKV0oTElDRU5TRSkKWyFbRFNIXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL0RTSC0lRTIlODklQTUwLjIuMS0tcmMuNS1ibHVlKV0oaHR0cHM6Ly9naXRodWIuY29tL2RlZXBzZWVrLWFpKQoKLS0tCgojIyDkuIDlj6Xor50KCioqZGFlbW9uLWd1YXJkaWFuIOeuoeOAjOi/m+eoi+a0u+edgOWQl+OAje+8jOW3oeajgOWPuOeuoeOAjERTSCDlhoXpg6jlgaXlurflkJfjgI3jgIIqKgoKLS0tCgojIyDkuLrku4DkuYjpnIDopoHlroMKCueci+mXqOeLl++8iGRhZW1vbi1ndWFyZGlhbu+8ieacieS4gOS4quaYjuehrueahOebsuWMuu+8mioq5a6D5Y+q6IO955yL44CM6L+b56iL5Zyo5LiN5Zyo44CN77yM55yL5LiN5Ye644CM6L+b56iL5rS7552A5L2G5Yqf6IO95Z2P5LqG44CN44CCKioKCuecn+WunuS8mumBh+WIsOeahOaDheWGte+8mgoKfCDmg4XlhrUgfCDnnIvpl6jni5fnnIvlvpfop4HlkJcgfCDlt6Hmo4Dlj7jnnIvlvpfop4HlkJcgfAp8LS0tfC0tLXwtLS18Cnwg5Li76L+b56iL5q275LqGIHwg4pyFIOeri+WIu+aLiei1tyB8IOKAlCB8Cnwg5Li76L+b56iL5rS7552A77yM5L2G5p+Q5Liq5o+S5Lu25Yqg6L295aSx6LSlIHwg4p2MIHwg4pyFIHwKfCDorrDlv4bmlofku7bkuInlpKnmsqHmm7TmlrAgfCDinYwgfCDinIUgfAp8IOW3peWFt+mTvuWFqOaMgu+8jOS9huS4u+i/m+eoi+i/mOWcqOWTjeW6lCB8IOKdjCB8IOKchSB8Cnwg5a6I5oqk6L+b56iL5b+D6Lez5YGc5LqGIHwg4p2MIHwg4pyFIHwKCioq5LqS6KGl77yM5LiN5pu/5Luj44CCKioKCi0tLQoKIyMgNiDpobnlt6Hmo4AKCnwgIyB8IOajgOafpSB8IOWIpOaNriB8CnwtLS18LS0tfC0tLXwKfCDikaAgfCAqKuaPkuS7tuWKoOi9vSoqIHwgcHJvZmlsZSDlo7DmmI7nmoTmj5Lku7bmmK/lkKbpg73lnKggYG5vZGVfbW9kdWxlc2AgfAp8IOKRoSB8ICoq5Lya6K+d5YGl5bq3KiogfCBzZXNzaW9ucyDnm67lvZXmnInmsqHmnIkgMCDlrZfoioLnmoTmnIDov5Hmlofku7YgfAp8IOKRoiB8ICoq6K6w5b+G5paw6bKc5bqmKiogfCBSRVNVTUUubWQg5aSa5LmF5rKh5pu05paw77yIPjI0aCBmYWls77yMPjRoIHdhcm7vvIkgfAp8IOKRoyB8ICoq5bel5YW35Y+v55So5oCnKiogfCBgY2hlY2stYWxsIC0tYnJpZWZgIOiDveS4jeiDvei/hyB8Cnwg4pGkIHwgKirnnIvpl6jni5fnirbmgIEqKiB8IGd1YXJkaWFuIOi/m+eoi+a0u+edgOWQlyArIOaXpeW/l+acq+ihjCB8Cnwg4pGlIHwgKipkYWVtb24g54q25oCBKiogfCBkYWVtb24g5rS7552A5ZCXICsg6Led5LiK5qyh5omn6KGMIHZzIOWjsOaYjuWRqOacnyB8CgotLS0KCiMjIOKYhSDkuInlgLzkuI3loYznvKnvvJo0IOenjeeKtuaAge+8jOS4jeaYryAyIOenjQoK6L+Z5piv6K6+6K6h6YeM5pyA6YeN6KaB55qE5LiA5p2h77yaCgp8IOeKtuaAgSB8IOWQq+S5iSB8CnwtLS18LS0tfAp8IOKchSBgb2tgIHwg5qOA5p+l5LqG77yM5rKh6Zeu6aKYIHwKfCDimqDvuI8gYHdhcm5gIHwg5qOA5p+l5LqG77yM5pyJ6ZqQ5oKjIHwKfCDinYwgYGZhaWxgIHwg5qOA5p+l5LqG77yM5pyJ6Zeu6aKYIHwKfCAqKuKdlCBgdW5rbm93bmAqKiB8ICoq5p+l5LiN5LqG77yI5LiN5piv6YCa6L+H77yB77yJKiogfAoKKipgdW5rbm93bmAg57ud5LiN5re36L+bIGBva2DjgIIqKgoK5b6I5aSa55uR5o6n5bel5YW35Y+q5pyJ44CM57u/IC8g57qi44CN5Lik5oCB77yM5LqO5piv44CM5p+l5LiN5LqG44CN6KKr5oKE5oKE566X5oiQ44CM57u/44CN44CC6L+Z5piv6Ieq5qy644CCCgotLS0KCiMjIOKYhSBmYWlsdXJlVGhyZXNob2xk77ya6L+e57utIDMg5qyh5aSx6LSl5omN5YikIGZhaWwKCioq5a2m6IeqIEt1YmVybmV0ZXMg5YGl5bq35qOA5p+l5o6i6ZKI44CCKioKCiMjIyDkuLrku4DkuYjpnIDopoEKCioq6Zeu6aKYKirvvJrkuIDmrKHmo4Dmn6XlpLHotKXlsLHmiqUgZmFpbOOAggoKKirlkI7mnpwqKu+8mue9kee7nOaKluWKqCAvIOeerOaXtiBHQyAvIOejgeebmCBJTyDls7DlgLwg4oaSIOWNleasoeivr+aKpSDihpIg5YGH6K2m5oqlIOKGkiDlmarpn7Mg4oaSIOacgOe7iOiiq+aXoOinhuOAggoKKipLOHMg55qE5YGa5rOVKirvvJrov57nu63lpLHotKUgTiDmrKHmiY3liKTlpLHotKXvvIhgZmFpbHVyZVRocmVzaG9sZGDvvIzpu5jorqQgM++8ieOAggoKIyMjIOacrOmhueebrueahOWBmuazlQoKYGBgCuesrCAxIOasoeWksei0pSDihpIg4pqg77iPIHdhcm4gICDvvIjlvoXnoa7orqQgMS8z77yJCuesrCAyIOasoeWksei0pSDihpIg4pqg77iPIHdhcm4gICDvvIjlvoXnoa7orqQgMi8z77yJCuesrCAzIOasoeWksei0pSDihpIg4p2MIGZhaWwgICDvvIjimIXov57nu63lpLHotKUgMyDmrKHvvIkK56ysIDQg5qyh5aSx6LSlIOKGkiDinYwgZmFpbCAgIO+8iOKYhei/nue7reWksei0pSA0IOasoe+8iQrmgaLlpI3miJDlip8gICDihpIg4pyFIG9rICAgICDvvIjimIXliJrmgaLlpI3vvIkKYGBgCgoqKueKtuaAgeiQveebmCoq77yaYEc6L2NodWRhaS1kYXRhL3BhdHJvbC1zdGF0ZS5qc29uYAoKIyMjIOi+ueeVjAoKLSDlj6rlr7kgYGZhaWxgIOWBmumYsuaKlu+8jGB1bmtub3duYCAvIGB3YXJuYCDkuI3pmLLmipbvvIjlroPku6zmnKzouqvlsLHmmK/lvLHkv6Hlj7fvvIkKLSBzdGF0ZSDmlofku7blnY/kuoYg4oeSIOW9k+mmluasoeajgOafpe+8iOWFqOmDqOS7jumbtueul++8iQotIOmYsuaKlueKtuaAgeaWh+S7tuWGmeWksei0peS4jeW9seWTjeW3oeajgOe7k+aenAoKLS0tCgojIyDimIUg6ICX5pe257uf6K6h77yIU1JFIOW7tui/n+S/oeWPt++8iQoKKirlraboh6ogU1JFIOWbm+Wkp+m7hOmHkeS/oeWPt++8iOW7tui/nyAvIOa1gemHjyAvIOmUmeivryAvIOmlseWSjOW6pu+8ieOAgioqCgrmr4/pobnmo4Dmn6Xpg73orrDlvZXogJfml7YgYG1zYO+8jOi+k+WHuumHjOW4piBgdG90YWxNc2DvvJoKCmBgYGpzb24KewogICJ2ZXJkaWN0IjogIlBBU1MiLAogICJ0b3RhbE1zIjogMTc0MjMsCiAgImNoZWNrcyI6IFsKICAgIHsgImlkIjogInBsdWdpbnMiLCAgIm1zIjogMyB9LAogICAgeyAiaWQiOiAic2Vzc2lvbnMiLCAibXMiOiAxIH0sCiAgICB7ICJpZCI6ICJtZW1vcnkiLCAgICJtcyI6IDAgfSwKICAgIHsgImlkIjogInRvb2xzIiwgICAgIm1zIjogMTczNjcgfSwgICDihpAg5Y2gIDk5LjclCiAgICB7ICJpZCI6ICJndWFyZGlhbiIsICJtcyI6IDIgfSwKICAgIHsgImlkIjogImRhZW1vbiIsICAgIm1zIjogNTAgfQogIF0KfQpgYGAKCioq4piF5a6e5rWL5rSe5a+fKirvvJrlt6Hmo4Dlj7ggOTkuNyUg55qE5pe26Ze06Iqx5ZyoIGBjaGVjay1hbGxg77yI5bel5YW35Y+v55So5oCn77yJ5LiK44CCCgrmsqHmnInogJfml7bmlbDmja7ml7bvvIzmiJHku6XkuLogNiDpobnmo4Dmn6XjgIzlt67kuI3lpJrlv6vjgI3vvJvmnInkuobmlbDmja7miY3nn6XpgZPnk7bpoojlnKjlk6rjgIIKCi0tLQojIyDimIUg5oCn6IO95LyY5YyW77ya5aSN55SoIGNoZWNrLWFsbCDnmoTljoblj7LvvIg2MDAg5YCN5o+Q6YCf77yJCgojIyMg6Zeu6aKYCgoqKuWKoOiAl+aXtue7n+iuoeWQjuWPkeeOsO+8muW3oeajgOWPuCA5OS43JSDnmoTml7bpl7ToirHlnKggYGNoZWNrLWFsbGDvvIgxNy0yMiDnp5LvvInkuIrjgIIqKgoKYGBganNvbgp7CiAgInRvdGFsTXMiOiAxNzQyMywKICAiY2hlY2tzIjogWwogICAgeyAiaWQiOiAidG9vbHMiLCAibXMiOiAxNzM2NyB9LCAgIOKGkCA5OS43JQogICAgeyAiaWQiOiAiZGFlbW9uIiwgIm1zIjogNTAgfSwKICAgIHsgImlkIjogInBsdWdpbnMiLCAibXMiOiAzIH0sCiAgICB7ICJpZCI6ICJndWFyZGlhbiIsICJtcyI6IDIgfSwKICAgIHsgImlkIjogInNlc3Npb25zIiwgIm1zIjogMSB9LAogICAgeyAiaWQiOiAibWVtb3J5IiwgIm1zIjogMCB9CiAgXQp9CmBgYAoKIyMjIOS/ruazle+8muivuyBjaGVjay1hbGwg6Ieq5bex55qE5Y6G5Y+y6LSm5pysCgpgY2hlY2stYWxsYCDmr4/mrKHot5Hpg73kvJrov73liqDliLAgYC5oYXJuZXNzL2NoZWNrLXRyZW5kLmpzb25sYO+8iOW3suenr+e0ryAyMjkg5p2h77yJ44CCCgoqKuW3oeajgOWPuOS8mOWFiOivu+i/meS4qui0puacrO+8mioqCgpgYGAK5pyA6L+RIDMwIOWIhumSn+WGhei3kei/hyAg4oaSICDlpI3nlKjnu5PmnpzvvIgwbXPvvIkK5aSq5penIC8g5rKh5pyJ6K6w5b2VICAgIOKGkiAg5omN55yf6LeR5LiA5qyh77yIMThz77yJCmBgYAoKIyMjIOaViOaenAoKfCDlnLrmma8gfCDogJfml7YgfAp8LS0tfC0tLXwKfCDmlLnliY3vvIjmr4/mrKHpg73nnJ/ot5HvvIkgfCAqKjE3NDIzbXMqKiB8Cnwg5pS55ZCO77yI5Y6G5Y+yIDEg5YiG6ZKf5YmN77yJIHwgKioyOW1zKiogfAp8IOaUueWQju+8iOWOhuWPsiAxIOWwj+aXtuWJje+8jOi/h+acn++8iSB8IDE4NTQ0bXPvvIjnnJ/ot5HvvIkgfAoKKirmj5DpgJ8gNjAwIOWAje+8jOS4lOS4jeeJuueJsuecn+WunuaAp+OAgioqCgojIyMg4piFIOS4uuS7gOS5iOi/meS4jeaYr+OAjOWBh+e8k+WtmOOAjQoKMS4gKirotKbmnKzmmK8gY2hlY2stYWxsIOiHquW3see7tOaKpOeahCoq77yM5LiN5piv5oiR5Y+m6YCg55qE57yT5a2YIOKHkiDkuI3kvJrlh7rnjrDjgIznvJPlrZjkuI7nnJ/lrp7kuI3kuIDoh7TjgI0KMi4gKirovpPlh7rmmI7noa7moIfms6jmnaXmupAqKu+8mgogICBgYGAKICAgIjU5LzU5IOmAmui/h++8iDE3OTEybXPvvIl8IOWkjeeUqCAxIOWIhumSn+WJjeeahOe7k+aenCIKICAgIjU5LzU5IOmAmui/h++8jDE4LjQg56eSIHwg5Yia6LeR55qEIgogICBgYGAKMy4gKirotoXov4cgMzAg5YiG6ZKf5bCx55yf6LeRKirvvIzkuI3kvJrmi7/lh6DlsI/ml7bliY3nmoTmlbDmja7lhpLlhYXnjrDlnKgKCiMjIyDor5rlrp7ovrnnlYwKCi0g5aSN55So5pe255yL5Yiw55qE5piv44CMTiDliIbpkp/liY3nmoTnirbmgIHjgI3vvIzkuI3mmK/mraTliLsKLSDlpoLmnpwgY2hlY2stYWxsIOWcqOi/mSBOIOWIhumSn+WGheWdj+S6hu+8jOW3oeajgOWPuOeci+S4jeWHuuadpe+8iOimgeetieS4i+asoeecn+i3ke+8iQotIDMwIOWIhumSn+aYr+WPr+iwg+WPguaVsO+8iGBNQVhfQUdFX01JTmDvvIkKCi0tLQojIyDimIUg56ysIDcg6aG55qOA5p+l77ya6aWx5ZKM5bqm77yIU1JFIOWbm+Wkp+m7hOmHkeS/oeWPt++8iQoKKirlraboh6ogU1JFIOeahOWbm+Wkp+m7hOmHkeS/oeWPt++8muW7tui/nyAvIOa1gemHjyAvIOmUmeivryAvIOmlseWSjOW6puOAgioqCgrljp/mnaUgNiDpobnmo4Dmn6Xlj6ropobnm5bkuobjgIzplJnor6/jgI3vvIznvLrjgIzppbHlkozluqbjgI3jgIIKCiMjIyDmn6Xku4DkuYgKCnwg5oyH5qCHIHwg5Yik5o2uIHwKfC0tLXwtLS18Cnwg56OB55uY5Y2g55So546H77yIQzogLyBHOu+8iSB8IOKJpTkwJSBmYWls77yM4omlODUlIHdhcm4gfAp8IOS8muivneebruW9leWkp+WwjyB8ID4yR0Igd2FybiB8CgojIyMg5a6e5rWL6L6T5Ye6CgpgYGBqc29uCnsKICAiaWQiOiAic2F0dXJhdGlvbiIsCiAgIm5hbWUiOiAi6aWx5ZKM5bqmIiwKICAibGV2ZWwiOiAib2siLAogICJkZXRhaWwiOiAiQzogNzguNCUgfCBHOiAyOC4zJSB8IHNlc3Npb25zIDI0ME1CIgp9CmBgYAoKKirimIXnnJ/mnLrlj5HnjrAqKu+8mkMg55uY5bey55SoIDc4LjQl77yM56a7IDg1JSDlkYrorabnur/kuI3ov5zjgIIKCiMjIyDimIUg5oCn6IO95pWZ6K6t77ya55O26aKI5Yik5pat6ZSZ5LqG5Lik5qyhCgp8IOeJiOacrCB8IOWBmuazlSB8IOiAl+aXtiB8IOmXrumimCB8CnwtLS18LS0tfC0tLXwtLS18CnwgdjEgfCBwb3dlcnNoZWxsIOafpeejgeebmCArIOmAkuW9kiB3YWxrIHwgKiozMjA2bXMqKiB8IOaFoiB8CnwgdjIgfCDku6XkuLrpgJLlvZLmhaLvvIzmlLnmiJDkuI3pgJLlvZIgfCAqKjMyMDZtcyoqIHwg5rKh55So77yI6K+05piO54yc6ZSZ5LqG77yJfAp8ICoqdjMqKiB8ICoqYGZzLnN0YXRmc1N5bmNgICsg6YCS5b2SIHdhbGsqKiB8ICoqMjZtcyoqIHwg4pyFIOW/q+S6hiAxMjMg5YCNIHwKCioq4piF5YWz6ZSu5pWZ6K6tKirvvJoKCj4g5oiR5LiA5byA5aeL5Lul5Li644CM6YCS5b2S6YGN5Y6GIDE4MiDkuKrmlofku7bjgI3mmK/nk7bpoojvvIzmlLnkuobmsqHlj5jlv6vjgIIKPiDlrp7mtYvmiY3lj5HnjrDvvJrpgJLlvZLlj6ropoEgKioyN21zKirvvIzogIwgYHBvd2Vyc2hlbGxgIOavj+asoeWQr+WKqOimgSAqKjEuNSDnp5IqKuOAggo+ICoq55O26aKI5pivIHBvd2Vyc2hlbGwg5a2Q6L+b56iL77yM5LiN5piv6YCS5b2S44CCKioKCioq4oeSIOS8mOWMluWJjeWFiOa1i+mHj++8jOWIq+eMnOOAgioqCgotLS0KCiMjIOKYhSDmgLvmj5DpgJ/vvJozMTEg5YCNCgp8IOeJiOacrCB8IOaAu+iAl+aXtiB8IOivtOaYjiB8CnwtLS18LS0tfC0tLXwKfCB2Me+8iOWOn+Wni++8iSB8ICoqMTc0MjNtcyoqIHwg5q+P5qyh6YO96LeRIGNoZWNrLWFsbCB8CnwgdjLvvIjljoblj7LlpI3nlKjvvIkgfCAyOW1zIHwg5aSN55SoIGNoZWNrLWFsbCDljoblj7IgfAp8IHYz77yIKyDppbHlkozluqbkvJjljJbvvIkgfCAqKjU2bXMqKiB8IDcg6aG55qOA5p+lIHwKCioq5LuOIDE3LjQg56eS5YiwIDU2IOavq+enku+8jOW/q+S6hiAzMTEg5YCN77yM5qOA5p+l6aG55LuOIDYg6aG55aKe5Yqg5YiwIDcg6aG544CCKioKCi0tLQojIyDimIUg54eD5bC9546H77ya5o+Q5YmNIE4g5aSp6aKE6K2m56OB55uY5ruhCgoqKuWtpuiHqiBHb29nbGUgU1JFIFdvcmtib29r44CKU0xPIOitpuaKpeetlueVpeOAi+OAgioqCgojIyMg5Zu65a6a6ZiI5YC855qE57y66Zm3CgpgYGBqcwppZiAod29yc3RQY3QgPj0gODUpIG91dC5sZXZlbCA9ICd3YXJuJzsgICAvLyDlj6rnnIvlvZPliY3ljaDnlKjnjocKYGBgCgoqKumXrumimCoq77yaCi0g44CMODUlIOavj+Wkqea2qCAxJeOAjeWSjOOAjDg1JSDljYHlubTmtqggMSXjgI3ntKfov6vluqblrozlhajkuI3lkIzvvIzkvYbmiqXlkIzkuIDkuKogd2FybgotIOWNoOeUqCA3OCUg5L2GIDEwIOWkqeWwsea7oSDih5Ig5LiN5oql77yM562J55yf5YiwIDg1JSDml7blj6/og73mnaXkuI3lj4oKCiMjIyDnh4PlsL3njofnmoTlgZrms5UKCioq6K6w5b2V5q+P5qyh55qE56OB55uY5Y2g55So546H5Yiw5Y6G5Y+y77yM566X5aKe6ZW/546H77yM5aSW5o6o44CM5aSa5bCR5aSp5Lya5ruh44CN77yaKioKCmBgYGpzCi8vIOacgOi/kSBOIOasoeeahOWPmOWMlueOh++8iCUv5aSp77yJCmNvbnN0IHJhdGVQZXJEYXkgPSAobGFzdC5wY3QgLSBmaXJzdC5wY3QpIC8gZHREYXlzOwovLyDlpJbmjqgKY29uc3QgZGF5cyA9ICgxMDAgLSBjdXJyZW50UGN0KSAvIHJhdGVQZXJEYXk7CmBgYAoKKirliKTmja7vvJoqKgoKfCDmnaHku7YgfCDnuqfliKsgfCDor7TmmI4gfAp8LS0tfC0tLXwtLS18Cnwg5Y2g55SoIOKJpTkwJSB8IGZhaWwgfCDmjqXov5Hmu6HvvIzkuI3nrqHlop7pgJ8gfAp8IOWNoOeUqCDiiaU4NSUgfCB3YXJuIHwg5YGP6auYIHwKfCAqKuWNoOeUqCA8ODUlIOS9hiAzMCDlpKnlhoXkvJrmu6EqKiB8ICoqd2FybioqIHwgKirimIXnh4PlsL3njofnmoTku7flgLwqKiB8Cnwg5pyJ6aKE5rWL5L2G5LiN57Sn5oClIHwgb2sgfCDlj6rlnKggZGV0YWlsIOmHjOiusOOAjOe6piBYIOWkqea7oeOAjXwKCiMjIyDimIUgU3BhbiBLaW5k77ya5q+P5LiqIHNwYW4g6YO95pyJ57G75Z6LCgoqKuWtpuiHqiBPcGVuSW5mZXJlbmNlIGBzZW1hbnRpY19jb252ZW50aW9ucy5tZGDvvJoqKgoKPiDjgIxUaGUgYG9wZW5pbmZlcmVuY2Uuc3Bhbi5raW5kYCBhdHRyaWJ1dGUgaXMgKipyZXF1aXJlZCoqIGZvciBhbGwgT3BlbkluZmVyZW5jZSBzcGFuc+OAjQoKKioxMCDnp40ga2luZO+8mioqCgp8IEtpbmQgfCDlkKvkuYkgfCDmiJHnlKjlnKjlk6ogfAp8LS0tfC0tLXwtLS18CnwgYENIQUlOYCB8IOa1geeoi+i1t+eCuS/ov57mjqUgfCBgcGF0cm9sYO+8iHJvb3TvvIl8CnwgYFRPT0xgIHwg6LCD55So5aSW6YOo5bel5YW3IHwg5q+P6aG55qOA5p+lIHwKfCBgUkVUUklFVkVSYCB8IOaVsOaNruajgOe0oiB8IOivu+WOhuWPsui0puacrCB8CnwgYEVWQUxVQVRPUmAgfCDor4TkvLAgfCDnh4PlsL3njofkvLDnrpcgfAp8IGBHVUFSRFJBSUxgIHwg5a6J5YWo5oqk5qCPIHwg6Ziy5oqW5Yik5patIHwKfCBgTExNYCAvIGBFTUJFRERJTkdgIC8gYFJFUkFOS0VSYCAvIGBBR0VOVGAgLyBgUFJPTVBUYCB8IOWFtuS7luWcuuaZryB8IOacqueUqCB8CgojIyMg5a6e5rWL5pWI5p6cCgoqKuS4ieWxgiBzcGFuIOagke+8jOavj+WxgumDveaciSBraW5k77yaKioKCmBgYArinJMgW0NIQUlOICAgICBdIHBhdHJvbCAoNDltcykKICDinJMgW1RPT0wgICAgICBdIGNoZWNrUGx1Z2lucyAoNG1zKQogICAg4pyTIFtHVUFSRFJBSUwgXSDpmLLmipbliKTmlq0gKDBtcykKICDinJMgW1RPT0wgICAgICBdIGNoZWNrVG9vbHMgKDFtcykKICAgIOKckyBbUkVUUklFVkVSIF0g6K+75Y6G5Y+y6LSm5pysICgxbXMpCiAgICDinJMgW1RPT0wgICAgICBdIOecn+i3kSBjaGVjay1hbGwgKDFtcykKICAgIOKckyBbR1VBUkRSQUlMIF0g6Ziy5oqW5Yik5patICgwbXMpCiAg4pyTIFtUT09MICAgICAgXSBjaGVja1NhdHVyYXRpb24gKDI4bXMpCiAgICDinJMgW0VWQUxVQVRPUiBdIOeHg+WwveeOh+S8sOeulyAoMG1zKQogICAg4pyTIFtHVUFSRFJBSUwgXSDpmLLmipbliKTmlq0gKDBtcykKYGBgCgoqKmtpbmQg5YiG5biD77yaYFRPT0w6IDggwrcgR1VBUkRSQUlMOiA3IMK3IFJFVFJJRVZFUjogMSDCtyBFVkFMVUFUT1I6IDFgKioKCioq4oeSIOWKoOS4iiBraW5kIOWQju+8jOiDveeci+WHuuOAjOi/meS4qiBzcGFuIOaYr+S7gOS5iOexu+Wei+eahOaTjeS9nOOAje+8jOS4jeWPquaYr+S4gOS4quiAl+aXtueahOWQjeWtl+OAgioqCgojIyMg6K+a5a6e6L6555WMCgotICoq57q/5oCn5aSW5o6oKirvvIzkuI3pooTmtYvnqoHlj5jvvIjkuIvkuobkuKrlpKfmlofku7bjgIHmuIXkuobnvJPlrZjvvIkKLSDoh7PlsJHopoEgMiDmrKHljoblj7LmiY3og73nrpcKLSDljoblj7LmnIDlpJrnlZkgMjAg5p2h77yI6ZiyIHN0YXRlIOaWh+S7tuiGqOiDgO+8iQotIOWinumVv+eOh+S4uui0n++8iOWcqOWHj+Wwke+8ieKHkiDkuI3pooTmtYvvvIjkuI3miqXjgIzmsLjov5zkuI3mu6HjgI3ov5nnp43lup/or53vvIkKCiMjIyDimIUg6Lip6L+H55qE5Z2RCgp8IOmXrumimCB8IOWOn+WboCB8IOS/ruazlSB8CnwtLS18LS0tfC0tLXwKfCBgZGlza0hpc3RvcnlgIOWni+e7iCAwIOadoSB8IGBzYXZlU3RhdGUoKWAg5q+P5qyh6YeN5YaZ5pW05Liq5paH5Lu277yM5oqK5a6D5Yay5o6JIHwgc2F2ZVN0YXRlIOWFiOivu+aXpyBzdGF0ZSDkv53nlZkgZGlza0hpc3RvcnkgfAp8IOeHg+WwveeOh+eul+WHuuadpeS9huayoeeUn+aViCB8IOmYiOWAvOWumiA3IOWkqeWkquS4pe+8jDEwLjgg5aSp5LiN6Kem5Y+RIHwg5pS5IDMwIOWkqSB8CgotLS0KIyMg4piFIOWRiuitpumZjeWZquS4ieS7tuWll++8iOWtpuiHquOAiuayu+eQhuWRiuitpumjjuaatOOAi++8iQoKKirljp/mlofnmoQgNSDnp43pmY3lmarmiYvmrrXvvIzmnKzmj5Lku7blrp7njrDkuoYgMyDnp43vvJoqKgoKfCDmiYvmrrUgfCDlrp7njrAgfAp8LS0tfC0tLXwKfCAqKuWOu+mHjSoqIHwgYGZhaWx1cmVUaHJlc2hvbGRgIOi/nue7rSAzIOasoeWksei0peaJjeaKpSB8CnwgKirliIbnuqcqKiB8IGBzZXZlcml0eWAgUDEvUDIvUDMgKyDmjInkuKXph43luqbmjpLluo8gfAp8ICoq5Y6L57ypKiogfCBgZGlnZXN0YCDkuIDlj6Xor53mkZjopoHvvIjlpJrkuKrpl67popjml7blkIjlubbvvIl8CgojIyMg4pGgIOWIhue6p++8iHNldmVyaXR577yJCgoqKuS4uuS7gOS5iCoq77yaYGxldmVsYCDor7TnmoTmmK/jgIzlpJrkuKXph43jgI3vvIzkuI3mmK/jgIzopoHkuI3opoHnjrDlnKjlpITnkIbjgI3jgIIKCioq5Y6f5paHKirvvJoKPiDjgIzlkYrorablj5Hlh7rmnaXvvIzlj6rmmK/otbfliLDpgJrnn6XkvZznlKjvvIzmjqXmlLbogIXml6DpnIDliqjkvZzvvIzpgqPov5nkuKrlkYrorabnrZbnlaXmmK/lkKblkIjnkIblsLHlvojlgLzlvpfmt7HnqbbjgILjgI0KCioq5YiG57qn6KeE5YiZ77yaKioKCnwg5qOA5p+l6aG5IHwgc2V2ZXJpdHkgfCDnkIbnlLEgfAp8LS0tfC0tLXwtLS18Cnwg5o+S5Lu25Yqg6L29IHwgKipQMSoqIHwg5o+S5Lu257y65LqG5Yqf6IO95bCx5bqf5LqGIHwKfCDlt6Xlhbflj6/nlKjmgKcgfCAqKlAxKiogfCDlt6Xlhbfpk77mmK/moLjlv4MgfAp8IOS8muivneWBpeW6tyB8IFAyIHwg5b2x5ZON6ZW/5pyfIHwKfCDorrDlv4bmlrDpspzluqYgfCBQMiB8IOW9seWTjemVv+acnyB8Cnwg55yL6Zeo54uX54q25oCBIHwgUDIgfCDln7rnoYDorr7mlr0gfAp8IGRhZW1vbiDnirbmgIEgfCBQMiB8IOWfuuehgOiuvuaWvSB8Cnwg6aWx5ZKM5bqmIHwgKipQMyoqIHwg6LWE5rqQ57G777yM5LiN5oClIHwKCioq5o6S5bqP5pWI5p6cKirvvJpQMSDnmoTpl67popjmsLjov5zmjpLlnKjmnIDliY3vvIzkuI3kvJrooqsgUDMg55qE56OB55uY5ZGK6K2m5re55rKh44CCCgojIyMg4pGhIOWOi+e8qe+8iGRpZ2VzdO+8iQoKKirkuLrku4DkuYgqKu+8mjcg6aG56YeMIDUg6aG56YO9IGZhaWwg4oeSIOi+k+WHuiA1IOadoe+8jOS6uueci+W+l+e0r+OAggoKKirlgZrms5UqKu+8mueUn+aIkOS4gOWPpeivnee7k+iuuu+8mgoKYGBgCuWFqOmDqCA3IOmhuemAmui/hwpQMSDmj5Lku7bliqDovb3vvJrnvLogMiDkuKoKMyDpobnlvILluLjvvIzmnIDntKfmgKUgUDHvvJrmj5Lku7bliqDovb0v5bel5YW35Y+v55So5oCnCmBgYAoKIyMjIOKRoiBSdW5ib29r77yI5oCO5LmI5L+u77yJCgoqKuWOn+aWhyoq77yaCj4g44CM5ZGK6K2m6KeE5YiZ6YeM5bu66K6u6YWN572uIFJ1bmJvb2vvvIjpooTmoYggU09Q77yJ44CCUnVuYm9vayDpooTnva7njoflj6/kvZzkuLrlhbPplK7mjIfmoIfvvIzpooTnva7njoflpKrkvY7kuIDlrprmnInpl67popjjgILjgI0KCioq5Y6f5p2lKirvvJrlj6ror7TjgIxYWCDlpLHotKXkuobjgI3ih5Ig562J5LqO5oqK6Zeu6aKY5Lii57uZ5Lq644CCCgoqKueOsOWcqCoq77ya5aSx6LSl5pe25bim5YW35L2T5oyH5byV77yaCgpgYGBqc29uCnsKICAiaWQiOiAibWVtb3J5IiwKICAibGV2ZWwiOiAid2FybiIsCiAgInNldmVyaXR5IjogIlAyIiwKICAiZGV0YWlsIjogIlJFU1VNRSA2IOWwj+aXtuWJjeabtOaWsCIsCiAgInJ1bmJvb2siOiAi5pu05pawIEc6L2NodWRhaS1kYXRhL21lbW9yeS9SRVNVTUUubWTvvIjmiormnIDov5HlgZrnmoTlhpnov5vljrvvvIkiCn0KYGBgCgoqKumdouadv+S5n+S8muaYvuekuioq77yaCgpgYGAK4pqg77iPIFtQMl0g6K6w5b+G5paw6bKc5bqmICBSRVNVTUUgNiDlsI/ml7bliY3mm7TmlrAKICAgICAgICAg4oaSIOabtOaWsCBHOi9jaHVkYWktZGF0YS9tZW1vcnkvUkVTVU1FLm1k77yI5oqK5pyA6L+R5YGa55qE5YaZ6L+b5Y6777yJCmBgYAoKIyMjIOivmuWunui+ueeVjAoKLSBgc2V2ZXJpdHlgIOaYr+aIkeaMieOAjOW9seWTjemdouOAjeaLjeeahO+8jOS4jeaYr+Wunua1i+aVsOaNrgotIGBydW5ib29rYCDmmK/nroDnn63nmoTjgIzljrvlk6rnnIvjgI3vvIzkuI3mmK/lrozmlbQgU09QCi0g5rKh5a6e546w44CM5bGP6JS944CN77yI5bey55+l5peg5a6z55qE6Z2Z6Z+z77yJ5ZKM44CM5oqR5Yi244CN77yI6auY5L2O57qn5ZCM5pe26Kem5Y+R5Y+q5Y+R6auY57qn77yJCgotLS0KIyMg4piFIFRyYWNlL1NwYW4g5qih5Z6L77ya55yL5Ye655O26aKI5Zyo5ZOq5LiA5bGCCgoqKuWtpuiHqiBPcGVuSW5mZXJlbmNl77yIQXJpemUgUGhvZW5peO+8ieeahCBgc3BlYy90cmFjZXMubWRg44CCKioKCiMjIyDpl67popgKCioq5Y6f5p2l5Y+q5pyJ5q+P6aG55qOA5p+l55qE5oC76ICX5pe277yaKioKCmBgYGpzb24KeyAiaWQiOiAidG9vbHMiLCAibXMiOiAyMDE2MSB9CmBgYAoKKirih5Ig55+l6YGTIHRvb2xzIOiKseS6hiAyMCDnp5LvvIzkvYbkuI3nn6XpgZPph4zpnaLlk6rkuIDmraXmhaLjgIIqKgoKIyMjIFRyYWNlL1NwYW4g5qih5Z6LCgpgYGAKVHJhY2XvvIjkuIDmrKHlrozmlbTmk43kvZzvvIzlhbHkuqsgdHJhY2VfaWTvvIkKICDilJTilIAgU3Bhbu+8iOS4gOS4quW3peS9nOWNleWFg++8iQogICAgICAg4pSc4pSAIHRyYWNlX2lkICAgIOWQjOS4gOasoeaTjeS9nOWFseS6qwogICAgICAg4pSc4pSAIHNwYW5faWQgICAgIOiHquW3seeahOWUr+S4gCBpZAogICAgICAg4pSc4pSAIHBhcmVudF9pZCAgIOeItiBzcGFu77yIcm9vdCDkuLogbnVsbO+8iQogICAgICAg4pSc4pSAIHN0YXJ0X3RpbWUgLyBlbmRfdGltZQogICAgICAg4pSc4pSAIHN0YXR1c19jb2RlIE9LIC8gRVJST1IgLyBVTlNFVAogICAgICAg4pSU4pSAIGF0dHJpYnV0ZXMgIOmUruWAvOWvuQpgYGAKCioq5Y6f5paHKirvvJoKPiDjgIxTcGFuIOeci+i1t+adpeWDj+e7k+aehOWMluaXpeW/l+OAgui/meaYr+WboOS4uuKAlOKAlOWug+ehruWunuWwseaYr++8gQo+ICDlj6/ku6XmioogVHJhY2Ug55CG6Kej5Li644CM5bim5LiK5LiL5paH44CB5YWz6IGU44CB5bGC57qn55qE57uT5p6E5YyW5pel5b+X6ZuG5ZCI44CN44CC44CNCgojIyMg5a6e5rWL5pWI5p6cCgoqKuecn+i3keWcuuaZr++8iOWOhuWPsui/h+acn++8ie+8mioqCgpgYGAK4pyTIHBhdHJvbCAgICAgICAgICAgICAgICAyMDIzOW1zCiAg4pyTIGNoZWNrUGx1Z2lucyAgICAgICAgICAgICAgNG1zCiAg4pyTIGNoZWNrU2Vzc2lvbnMgICAgICAgICAgICAgMW1zCiAg4pyTIGNoZWNrTWVtb3J5ICAgICAgICAgICAgICAgMG1zCiAg4pyTIGNoZWNrVG9vbHMgICAgICAgICAgICAyMDE2MW1zCiAgICDinJMg6K+75Y6G5Y+y6LSm5pysICAgICAgICAgICAgICAgICAwbXMgICAgICDihpAg6K+75Y6G5Y+y5LiN6Iqx5pe26Ze0CiAgICDinJMg55yf6LeRIGNoZWNrLWFsbCAgICAgICAgICAyMDE2MW1zICAgIOKGkCAxMDAlIOaXtumXtOWcqOi/mQogIOKckyBjaGVja0d1YXJkaWFuICAgICAgICAgICAgIDJtcwogIOKckyBjaGVja0RhZW1vbiAgICAgICAgICAgICAgMTdtcwogIOKckyBjaGVja1NhdHVyYXRpb24gICAgICAgICAgNTRtcwpgYGAKCioq5aSN55So5Zy65pmv77yI5Y6G5Y+y5paw6bKc77yJ77yaKioKCmBgYArinJMgcGF0cm9sICAgICAgICAgICAgICAgICAgIDY2bXMKICDinJMgY2hlY2tUb29scyAgICAgICAgICAgICAgIDFtcwogICAg4pyTIOivu+WOhuWPsui0puacrCAgICAgICAgICAgICAgICAxbXMKICAgIOKckyDnnJ/ot5EgY2hlY2stYWxsICAgICAgICAgICAxbXMgICAgICDihpAg5rKh55yf6LeR77yM5Yeg5LmO5LiN6Iqx5pe26Ze0CmBgYAoKIyMjIOKYhSDov5nkuKrmqKHlnovluK7miJHmipPliLDnmoQgMyDkuKogYnVnCgp8IGJ1ZyB8IOeOsOixoSB8IOagueWboCB8CnwtLS18LS0tfC0tLXwKfCDlrZAgc3BhbiDnirbmgIEgVU5TRVQgfCBgPyDor7vljoblj7LotKbmnKxgIHwg5o+Q5YmNIHJldHVybiDot7Pov4fkuoYgZW5kIHwKfCDlrZAgc3BhbiDogJfml7YgPSDniLYgc3BhbiB8IGDor7vljoblj7LotKbmnKwgMTkwMzRtc2AgfCBzcGFuIOWcqOWHveaVsOW8gOWktOWIm+W7uuOAgWZpbmFsbHkg5omN57uT5p2fIHwKfCDorqHml7bojIPlm7TplJkgfCDlkIzkuIogfCDlupTor6XjgIzlsLHlnLDliJvlu7rjgIHlsLHlnLDnu5PmnZ/jgI0gfAoKKirih5Ig5rKh5pyJIHNwYW4g5qih5Z6L5pe277yM6L+Z5LqbIGJ1ZyDmiJHmoLnmnKzlj5HnjrDkuI3kuobjgIIqKgoKIyMjIOivmuWunui+ueeVjAoKLSAqKuS4jeWBmuWujOaVtCBPVGVsKirvvIjpgqPmmK/liIbluIPlvI/ns7vnu5/nlKjnmoTvvIzmiJHmmK/ljZXmnLrvvIkKLSDkuI3lgZrot6jov5vnqIvkvKDmkq0KLSDkuI3lgZrph4fmoLfvvIjmlbDmja7ph4/lsI/vvIzlhajorrDvvIkKLSBzcGFuIOWPquWtmOWGheWtmO+8jOS4jeiQveebmO+8iOiQveebmOS8muaSkeeIhiBzdGF0ZSDmlofku7bvvIkKCi0tLQojIyDimIUg57uT5p6E5YyW5Yaz562W77ya5LiN5Y+q5Yik44CM5pivL+WQpuOAje+8jOi/mOWIpOOAjOacieWkmuehruWumuOAjQoKKirlraboh6ogT3BlbkluZmVyZW5jZSDnmoQgYGRlY2lzaW9uX3NwYW5zLm1kYOOAgioqCgojIyMg5Y6f5paH5a6a5LmJCgo+IOOAjEEgZGVjaXNpb24gbW9kZWwgdGFrZXMgdW5zdHJ1Y3R1cmVkIG9yIHN0cnVjdHVyZWQgc3RhdGUgcGx1cyBhIHNldCBvZgo+ICB0eXBlZCBxdWVzdGlvbnMgYW5kIHJldHVybnMgYSB0eXBlZCwgcHJvYmFiaWxpc3RpYyBhbnN3ZXIgZm9yIGVhY2ggcXVlc3Rpb24uCj4gIFRoZSBzZXQgb2YgcG9zc2libGUgYW5zd2VycyBpcyBmaXhlZCBpbiBhZHZhbmNlIGJ5IHRoZSBjYWxsZXIsCj4gIHNvIHRoZSBtb2RlbCBjYW5ub3QgcHJvZHVjZSBtYWxmb3JtZWQgb3V0cHV0LCBhbmQgZXZlcnkgYW5zd2VyIGNhcnJpZXMKPiAgYSBjYWxpYnJhdGVkIHByb2JhYmlsaXR5IG9yIGNvbmZpZGVuY2Ugc2NvcmUgdGhhdCBzb2Z0d2FyZSBjYW4gYWN0IG9uIGRpcmVjdGx5LuOAjQoKKirljp/mlofnp7DlroPkuLoqKu+8mioq44CMc21hcnQgaWYtc3RhdGVtZW50c+OAjSoq77yI6IGq5piO55qEIGlmIOivreWPpe+8iQoKIyMjIOS4ieenjemXrumimOexu+WeiwoKfCDnsbvlnosgfCDlkKvkuYkgfCDmiJHnlKjlnKjlk6ogfAp8LS0tfC0tLXwtLS18CnwgKipOb3VsKiogfCDmmK8v5ZCm5p2h5Lu2IHwg44CM5bqU6K+l5oqlIGZhaWwg5ZCX77yf44CNfAp8ICoqQ2hvaWNlKiogfCDku47pgInpobnph4zmjJEgfCDmnKrnlKggfAp8ICoqU2NvcmUqKiB8IOaMieivhOWIhuagh+WHhuaJk+WIhiB8IOacqueUqCB8CgojIyMg5pS56YCg5YmN5ZCOCgpgYGBqcwovLyDinYwg5pS56YCg5YmN77ya56Gs57yW56CBIGlmLWVsc2XvvIzmsqHmnInnva7kv6HluqYKaWYgKG5vd0ZhaWxzIDwgRkFJTFVSRV9USFJFU0hPTEQpIHsKICBjaGVjay5sZXZlbCA9ICd3YXJuJzsKfSBlbHNlIHsKICBjaGVjay5sZXZlbCA9ICdmYWlsJzsKfQoKLy8g4pyFIOaUuemAoOWQju+8mue7k+aehOWMluWGs+etliArIOe9ruS/oeW6pgpmdW5jdGlvbiBkZWNpZGVGYWlsKGNvbnNlY3V0aXZlRmFpbHMsIHRocmVzaG9sZCkgewogIGNvbnN0IHNob3VsZEZhaWwgPSBjb25zZWN1dGl2ZUZhaWxzID49IHRocmVzaG9sZDsKICBjb25zdCBjb25maWRlbmNlID0gTWF0aC5taW4oMSwgY29uc2VjdXRpdmVGYWlscyAvIHRocmVzaG9sZCk7CiAgcmV0dXJuIHsKICAgIHF1ZXN0aW9uOiAnc2hvdWxkRmFpbCcsCiAgICB0eXBlOiAnTm91bCcsCiAgICB2YWx1ZTogc2hvdWxkRmFpbCA/ICd5ZXMnIDogJ25vJywKICAgIGNvbmZpZGVuY2U6IE1hdGgucm91bmQoY29uZmlkZW5jZSAqIDEwMCkgLyAxMDAsCiAgICBzdGF0ZTogeyBjb25zZWN1dGl2ZUZhaWxzLCB0aHJlc2hvbGQgfSwKICB9Owp9CmBgYAoKIyMjIOWunua1i+aViOaenAoKfCDov57nu63lpLHotKUgfCDlhrPnrZYgfCDnva7kv6HluqYgfCDnu5PmnpwgfAp8LS0tfC0tLXwtLS18LS0tfAp8IDEvMyB8IGBub2AgfCAqKjAuMzMqKiB8IHdhcm7vvIjlvoXnoa7orqQgMS8z77yM572u5L+h5bqmIDAuMzPvvIl8CnwgMi8zIHwgYG5vYCB8ICoqMC42NyoqIHwgd2Fybu+8iOW+heehruiupCAyLzPvvIznva7kv6HluqYgMC42N++8iXwKfCAzLzMgfCBgeWVzYCB8ICoqMS4wKiogfCBmYWls77yI4piF6L+e57ut5aSx6LSlIDMg5qyh77yM572u5L+h5bqmIDHvvIl8CnwgNC8zIHwgYHllc2AgfCAxLjAgfCBmYWls77yI4piF6L+e57ut5aSx6LSlIDQg5qyh77yM572u5L+h5bqmIDHvvIl8CgoqKuKHkiDkuI3lj6rmmK/jgIzmiqUgd2FybiDov5jmmK8gZmFpbOOAje+8jOiAjOaYr+OAjOacieWkmuehruWumuOAjeOAgioqCgojIyMg4piFIOS4uuS7gOS5iOe9ruS/oeW6puacieeUqAoKKirnva7kv6HluqYgMC4zM++8iDEvM++8ieWSjCAxLjDvvIgzLzPvvInpg73lj6/og73lr7zoh7TlkIzkuIDkuKrnu5PmnpzvvIzkvYbntKfov6vluqblrozlhajkuI3lkIzvvJoqKgoKLSAwLjMzIOKHkiDlj6/og73mmK/lmarpn7PvvIzlho3op4Llr58KLSAxLjAg4oeSIOehruWumuaciemXrumimO+8jOivpeWkhOeQhuS6hgoKKirmnInkuobnva7kv6HluqbvvIzkuIrlsYLlj6/ku6XlhrPlrprjgIzopoHkuI3opoHnq4vliLvpgJrnn6XjgI3jgIIqKgoKIyMjIOivmuWunui+ueeVjAoKLSAqKuaIkeayoeacieecn+ato+eahOWGs+etluaooeWeiyoq77yISmV2IC8gT3BlbkFJIERlY2lzaW9ucyBBUEkg6ZyA5aSW6YOo5pyN5Yqh77yJCi0g572u5L+h5bqm5piv6KeE5YiZ566X55qE77yIYGNvbnNlY3V0aXZlRmFpbHMgLyB0aHJlc2hvbGRg77yJ77yM5LiN5piv5qaC546H5o6o55CGCi0g5Y+q55So5LqGIGBOb3VsYO+8iOaYry/lkKbvvInvvIxgQ2hvaWNlYCDlkowgYFNjb3JlYCDmnKrnlKgKCi0tLQojIyDimIUgQW5ub3RhdGlvbnPvvJrmr4/kuKrliKTmlq3pg73mnInjgIzkvp3mja7jgI3lkozjgIzosIHliKTnmoTjgI0KCioq5a2m6IeqIE9wZW5JbmZlcmVuY2Ug55qEIGBhbm5vdGF0aW9ucy5tZGDjgIIqKgoKIyMjIOinhOiMg+imgeaxggoKPiDjgIxFYWNoIG9iamVjdCBNVVNUIGhhdmUgYG5hbWVgIGFuZCBhdCBsZWFzdCBvbmUgb2YgYHNjb3JlYCwgYGxhYmVsYCwgb3IgYGV4cGxhbmF0aW9uYC4KPiAgTWlzc2luZyBmaWVsZHMgTVVTVCBiZSBvbWl0dGVkLuOAjQoKKirih5Ig5LiA5Liq5Yik5pat5b+F6aG76Iez5bCR5pyJ44CM5YiG5pWwIC8g5qCH562+IC8g6Kej6YeK44CN5LmL5LiA77yM5Y+q5pyJ5ZCN5a2X5LiN566X44CCKioKCiMjIyDkuInnp43or4TliKTogIUKCnwg5YC8IHwg5ZCr5LmJIHwKfC0tLXwtLS18CnwgYEhVTUFOYCB8IOS6uuWIpOeahCB8CnwgYExMTWAgfCDor63oqIDmqKHlnovliKTnmoQgfAp8IGBDT0RFYCB8IOehruWumuaAp+S7o+eggeWIpOeahCB8CgoqKuacrOaPkuS7tuWFqOaYryBgQ09ERWAqKiDigJTigJQg6K+a5a6e5qCH5rOo77yM5LiN5YGH6KOF5piv5Lq65oiWIExMTSDliKTnmoTjgIIKCiMjIyDmlLnpgKDliY3lkI4KCmBgYGpzCi8vIOKdjCDmlLnpgKDliY3vvJrlj6rmnIkgbGV2ZWzvvIzmsqHmnInkvp3mja4KeyBpZDogJ21lbW9yeScsIGxldmVsOiAnd2FybicsIGRldGFpbDogJ1JFU1VNRSA2IOWwj+aXtuWJjeabtOaWsCcgfQoKLy8g4pyFIOaUuemAoOWQju+8muespuWQiOinhOiMgwp7CiAgaWQ6ICdtZW1vcnknLAogIGxldmVsOiAnd2FybicsCiAgYW5ub3RhdGlvbjogewogICAgbmFtZTogJ21lbW9yeScsCiAgICBsYWJlbDogJ3dhcm4nLAogICAgc2NvcmU6IDAuNSwgICAgICAgICAgICAgICAgICAgIC8vIOS4pemHjeW6pu+8iDA95q2j5bi477yMMT3lrozlhajlnY/vvIkKICAgIGV4cGxhbmF0aW9uOiAnUkVTVU1FIDYg5bCP5pe25YmN5pu05pawJywKICAgIGFubm90YXRvcl9raW5kOiAnQ09ERScsCiAgfQp9CmBgYAoKIyMjIOKYhSDkuInnuqfkvZznlKjln58KCnwg5L2c55So5Z+fIHwg5Zue562U5LuA5LmIIHwg5oiR55qE5a6e546wIHwKfC0tLXwtLS18LS0tfAp8ICoqU3BhbioqIHwg6L+Z5LiA6aG55qOA5p+l5oCO5LmI5qC3IHwg5q+P6aG55qOA5p+l55qEIGBhbm5vdGF0aW9uYCB8CnwgKipUcmFjZSoqIHwg5pW05qyh5beh5qOA5Y+v5LiN5Y+v5L+hIHwgYHRyYWNlLmFubm90YXRpb25gIHwKfCAqKlNlc3Npb24qKiB8IOmVv+acn+i2i+WKvyB8IOacquWunueOsCB8CgojIyMgVHJhY2Ug57qn5qCH5rOo77ya5pys5qyh5beh5qOA5Y+v5L+h5bqmCgpgYGBqc29uCnsKICAibmFtZSI6ICJwYXRyb2xfdHJ1c3R3b3J0aGluZXNzIiwKICAibGFiZWwiOiAiaGlnaCIsCiAgInNjb3JlIjogMSwKICAiZXhwbGFuYXRpb24iOiAiNy83IOmhueecn+ajgOafpeS6hu+8jDYvNyDpobnmmK/liJrot5HnmoTvvIjlhbbkvZnlpI3nlKjljoblj7LvvIkiLAogICJhbm5vdGF0b3Jfa2luZCI6ICJDT0RFIgp9CmBgYAoKKirimIXlhbPplK7mtJ7lr58qKu+8mmB1bmtub3duYCDpobnlpJog4oeSIOW3oeajgOe7k+aenOS4jeWPr+S/oe+8jOWNs+S9vyBgdmVyZGljdD1QQVNTYOOAggoKYGBganMKLy8g5Y+v5L+h5bqmID0g55yf5qOA5p+l5LqG55qE6aG5IC8g5oC76aG55pWwCmNvbnN0IGNvbmZpZGVuY2UgPSBjaGVja2VkQ291bnQgLyBjaGVja3MubGVuZ3RoOwovLyB1bmtub3duIOS4jeeul+i/m+WIhuWtkO+8iOafpeS4jeS6huS4jeetieS6jumAmui/h++8iQpgYGAKCioq5a6e5rWL77yaNyDpobnph4wgMSDpobkgdW5rbm93biDih5Ig5Y+v5L+h5bqmIDAuODbvvIhtZWRpdW3vvIkqKgoKIyMjIOivmuWunui+ueeVjAoKLSAqKuayoeaciSBTZXNzaW9uIOe6p+agh+azqCoq77yI6Leo5aSa5qyh5beh5qOA55qE6ZW/5pyf6LaL5Yq/77yJCi0gKirmsqHmnIkgSFVNQU4gLyBMTE0g6K+E5Yik6ICFKirvvIjlhajmmK/op4TliJnliKTnmoTvvIkKLSBgc2NvcmVgIOaYr+eugOWNleaYoOWwhO+8iG9rPTAgLyB3YXJuPTAuNSAvIGZhaWw9Me+8ie+8jOS4jeaYr+ecn+WunuS4pemHjeW6puivhOWIhgoKLS0tCiMjIOKYhSB0cnVuY2F0Ze+8muaIquaWreW/hemhu+WPr+ingQoKKirlraboh6ogT3BlbkluZmVyZW5jZSDnmoQgYGNvbmZpZ3VyYXRpb24ubWRg44CCKioKCiMjIyDljp/mlofmtJ7lr58KCj4g44CMV2hlbiBjb250ZW50IGlzIGhpZGRlbiBkdWUgdG8gcHJpdmFjeSBjb25maWd1cmF0aW9uIHNldHRpbmdzLAo+ICB0aGUgdmFsdWUgYF9fUkVEQUNURURfX2AgaXMgdXNlZCBhcyBhIHBsYWNlaG9sZGVyLgo+ICBUaGlzIGNvbnN0YW50IHZhbHVlIGFsbG93cyBjb25zdW1lcnMgb2YgdGhlIHRyYWNlIGRhdGEgdG8gaWRlbnRpZnkgdGhhdAo+ICBjb250ZW50IHdhcyBpbnRlbnRpb25hbGx5IGhpZGRlbiByYXRoZXIgdGhhbiBtaXNzaW5nIG9yIGVtcHR5LuOAjQoKKirnv7vor5EqKu+8mgo+IOWGheWuueWboOmakOengemFjee9ruiiq+makOiXj+aXtu+8jOeUqCBgX19SRURBQ1RFRF9fYCDkvZzljaDkvY3nrKbjgIIKPiDov5nkuKrlm7rlrprlgLzorqnmtojotLnmlrnog73ljLrliIbjgIzmlYXmhI/pmpDol4/jgI3lkozjgIznvLrlpLEv5Li656m644CN44CCCgojIyMg5oiR55qE6Zeu6aKYCgoqKuWOn+adpeWIsOWkhOeUqCBgc2xpY2UoMCwgMTIwKWAg5oiq5pat77yM5L2G5oiq5pat5ZCO55yL5LiN5Ye65piv5oiq5pat5LqG77yaKioKCnwg5oOF5Ya1IHwg57uT5p6cIHwg6IO95Yy65YiG5ZCXIHwKfC0tLXwtLS18LS0tfAp8IDEyMCDlrZfnrKbku6XlhoUgfCDlrozmlbQgfCDigJQgfAp8IOi2hei/hyAxMjAgfCDmiKrmlq0gfCDinYwg55yL5LiN5Ye65p2lIHwKfCDmnKzmnaXlsLHmsqHlhoXlrrkgfCDnqbogfCDinYwg5ZKM5oiq5pat5ZCO55qE56m65LiA5qC3IHwKCioq4oeSIOS4ieenjeeKtuaAgeWhjOe8qeaIkOS4pOenjeOAgioqCgojIyMg5L+u5rOVCgpgYGBqcwpmdW5jdGlvbiB0cnVuY2F0ZShzLCBtYXgpIHsKICBjb25zdCBzdHIgPSBTdHJpbmcocyA9PT0gbnVsbCB8fCBzID09PSB1bmRlZmluZWQgPyAnJyA6IHMpOwogIGlmIChzdHIubGVuZ3RoIDw9IG1heCkgcmV0dXJuIHN0cjsKICByZXR1cm4gc3RyLnNsaWNlKDAsIG1heCkgKyAn4oCmW1RSVU5DQVRFRCAnICsgKHN0ci5sZW5ndGggLSBtYXgpICsgJyBjaGFyc10nOwp9CmBgYAoKIyMjIOWunua1iwoKfCDovpPlhaUgfCDovpPlh7ogfCDmoIforrAgfAp8LS0tfC0tLXwtLS18CnwgYOefreaWh+acrGAgfCAzIOWtl+espiB8IOaXoO+8iOWujOaVtO+8iXwKfCBgeMOXMjAwYCB8ICoqMTQxIOWtl+espioq77yIMTIwICsgMjEg5a2X56ym5qCH6K6w77yJfCDinIUg5pyJIHwKfCBgJydgIC8gYG51bGxgIC8gYHVuZGVmaW5lZGAgfCAwIOWtl+espiB8IOaXoO+8iOepuu+8iXwKCioq4oeSIOeOsOWcqOiDveWMuuWIhuOAjOWujOaVtOOAjeOAjOaIquaWreOAjeOAjOepuuOAjeS4ieenjeeKtuaAgeOAgioqCgojIyMg56ys5LqM5Liq5rSe5a+f77ya6buY6K6k5YWo6K6wCgoqKk9wZW5JbmZlcmVuY2Ug55qEIDE2IOS4qiBgSElERV8qYCDlj5jph4/pu5jorqTlhajmmK8gYEZhbHNlYO+8iOWFqOiusO+8ieOAgioqCgoqKuS4uuS7gOS5iCoq77ya5Y+v6KeC5rWL5oCn55qE5Lu35YC85Zyo5LqO44CM5pyJ5pWw5o2u44CN77yM6buY6K6k6ZqQ6JeP562J5LqO6buY6K6k556O44CCCgoqKuKHkiDpu5jorqTor6XlhajorrDvvIzlj6rlnKjmmI7noa7nn6XpgZPmnInmlY/mhJ/kv6Hmga/ml7bmiY3oo4HliarjgIIqKgoKLS0tCiMjIOKYhSDkuIrkuIvmloflsZ7mgKfvvJpzZXNzaW9uSWQgKyB0YWdzCgoqKuWtpuiHqiBPcGVuSW5mZXJlbmNlIOeahCBgbGxtX3NwYW5zLm1kYOOAgioqCgojIyMg5Y6f5paHCgo+IOOAjEFsbCBMTE0gc3BhbnMgYXV0b21hdGljYWxseSBpbmhlcml0IGNvbnRleHQgYXR0cmlidXRlcyB3aGVuIHRoZXkgYXJlIHNldAo+ICB2aWEgdGhlIGluc3RydW1lbnRhdGlvbiBjb250ZXh0IEFQSS4gVGhlc2UgYXR0cmlidXRlcyBhcmUgcHJvcGFnYXRlZCB0bwo+ICBldmVyeSBzcGFuIGluIHRoZSB0cmFjZSB3aXRob3V0IG5lZWRpbmcgdG8gYmUgZXhwbGljaXRseSBzZXQgb24gZWFjaCBzcGFuLuOAjQoKKirih5Ig6K6+5LiA5qyh77yM5YWoIHRyYWNlIOWFseS6q++8jOS4jeeUqOavj+S4qiBzcGFuIOmHjeWkjeiuvuOAgioqCgojIyMg5LiJ57qn5qCH6K+GCgp8IOe6p+WIqyB8IOagh+ivhiB8IOWbnuetlOS7gOS5iCB8CnwtLS18LS0tfC0tLXwKfCBTcGFuIHwgYHNwYW5JZGAgfCDov5nkuKrmraXpqqTmmK/ku4DkuYggfAp8IFRyYWNlIHwgYHRyYWNlSWRgIHwg6L+Z5qyh5pON5L2c5piv5LuA5LmIIHwKfCAqKlNlc3Npb24qKiB8ICoqYHNlc3Npb25JZGAqKiB8ICoq6L+Z5Y+w5py65Zmo6ZW/5pyf5oCO5LmI5qC3KiogfAoKKirmnKzmj5Lku7blrp7mtYsqKu+8mgoKYGBgCnNlc3Npb24uaWQ6IExBUFRPUC1RREIzR0hBMC11ZGFpZGF0YQpgYGAKCioq4oeSIOeUqOacuuWZqOagh+ivhu+8iGhvc3RuYW1lICsg5pWw5o2u55uu5b2V77yJ566X77yM5LiN5piv6ZqP5py6IOKHkiDph43lkK/lkI7ov5jmmK/lkIzkuIDkuKogc2Vzc2lvbu+8jOiDveeci+mVv+acn+i2i+WKv+OAgioqCgojIyMgdGFnc++8muWkmuagh+etvuWIhuexuwoKKipraW5kIOaYr+WNlemAie+8iFRPT0wvUkVUUklFVkVSLy4uLu+8ie+8jHRhZ3Mg5piv5aSa6YCJ77yaKioKCmBgYApjaGVja1BsdWdpbnMgICAgdGFnczogWyJoZWFsdGgtY2hlY2siLCAicDEiXQpjaGVja01lbW9yeSAgICAgdGFnczogWyJoZWFsdGgtY2hlY2siLCAicDIiXQpjaGVja1NhdHVyYXRpb24gdGFnczogWyJoZWFsdGgtY2hlY2siLCAicDMiXQpgYGAKCioq4oeSIOWPr+aMieOAjOexu+WeiyArIOS4pemHjeW6puOAjeWkmue7tOetm+mAieOAgioqCgojIyMg6K+a5a6e6L6555WMCgotIGBzZXNzaW9uSWRgIOWPquWcqOWGheWtmOmHjO+8jOayoeaMgeS5heWMlu+8iOmHjeWQr+WQjiBzZXNzaW9uIOagh+ivhuS8muWPmO+8iQotIGB0YWdzYCDlj6rmnInkuKTnuqfvvIhoZWFsdGgtY2hlY2sgKyBzZXZlcml0ee+8ie+8jOayoeacieS4u+mimOagh+etvgoKLS0tCiMjIOKYhSBQZXJpb2QgKyBHcmFjZe+8muWuvemZkOacn+aMieWRqOacn+eul++8jOS4jeehrOe8lueggQoKKirlraboh6ogaGVhbHRoY2hlY2tz77yIY3JvbiBqb2Ig55uR5o6n5qCH5p2G77yMMjBLKyBzdGFy77yJ44CCKioKCiMjIyDljp/mlocKCj4g44CMRWFjaCBjaGVjayBoYXMgY29uZmlndXJhYmxlIFBlcmlvZCBhbmQgR3JhY2UgVGltZSBwYXJhbWV0ZXJzLgo+ICAqKlBlcmlvZCoqIGlzIHRoZSBleHBlY3RlZCB0aW1lIGJldHdlZW4gcGluZ3MuCj4gICoqR3JhY2UgVGltZSoqIHNwZWNpZmllcyBob3cgbG9uZyB0byB3YWl0IGJlZm9yZSBzZW5kaW5nIG91dCBhbGVydHMKPiAgd2hlbiBhIGpvYiBpcyBydW5uaW5nIGxhdGUu44CNCgoqKuWIpOWumumAu+i+ke+8mioqCgpgYGAK5bqU6K+l6LeR55qE5pe26Ze0ID0g5LiK5qyh6LeRICsgUGVyaW9kCuaKpeitpuaXtumXtCAgICAgPSDlupTor6Xot5HnmoTml7bpl7QgKyBHcmFjZQrih5Ig6LaF6L+H44CM5LiK5qyhICsgUGVyaW9kICsgR3JhY2XjgI3miY3miqXoraYKYGBgCgojIyMg5oiR55qE6Zeu6aKYCgoqKuWOn+adpeehrOe8lueggSAzMCDliIbpkp/vvJoqKgoKYGBganMKY29uc3QgaW50ZXJ2YWxNcyA9IDYgKiAzNjAwICogMTAwMDsKY29uc3Qgb3ZlcmR1ZU1zID0gKERhdGUubm93KCkgLSBsYXN0UnVuQXQpIC0gaW50ZXJ2YWxNczsKaWYgKG92ZXJkdWVNcyA+IDMwICogNjAwMDApIG91dC5sZXZlbCA9ICd3YXJuJzsgICAvLyDihpAgMzAg5YiG6ZKf5piv5ouN6ISR6KKL55qECmBgYAoKKirnvLrpmbfvvJoqKgoxLiAzMCDliIbpkp/msqHmnInkvp3mja4KMi4gUGVyaW9kIOWSjCBHcmFjZSDmt7flnKjkuIDotbcKMy4g5o2i5ZGo5pyf5pe2IDMwIOWIhumSn+WwseiNkuiwrOS6hu+8iDEg5YiG6ZKf5ZGo5pyfICsgMzAg5YiG6ZKf5a696ZmQID0g5rC45LiN5oql6K2m77yJCgojIyMg5L+u5rOVCgpgYGBqcwpmdW5jdGlvbiBncmFjZUZvcihwZXJpb2RNcykgewogIGNvbnN0IHBjdCA9IHBlcmlvZE1zICogMC4wODsgICAgICAvLyDimIXnm67moIfvvJrlkajmnJ/nmoQgOCUKICBjb25zdCBoYXJkTWluID0gMzAwMDA7ICAgICAgICAgICAgLy8g57ud5a+55LiL6ZmQIDMwIOenkgogIGNvbnN0IGhhcmRNYXggPSAzNjAwMDAwOyAgICAgICAgICAvLyDnu53lr7nkuIrpmZAgMSDlsI/ml7YKICBsZXQgZ3JhY2UgPSBNYXRoLm1heChwY3QsIGhhcmRNaW4pOwogIGdyYWNlID0gTWF0aC5taW4oZ3JhY2UsIHBlcmlvZE1zICogMC41KTsgICAvLyDimIXkuI3og73otoXov4flkajmnJ/nmoTkuIDljYoKICBncmFjZSA9IE1hdGgubWluKGdyYWNlLCBoYXJkTWF4KTsKICByZXR1cm4gTWF0aC5yb3VuZChncmFjZSk7Cn0KYGBgCgojIyMg5a6e5rWLCgp8IFBlcmlvZCB8IEdyYWNlIHwg5Y2g5q+UIHwg6K+05piOIHwKfC0tLXwtLS18LS0tfC0tLXwKfCAxIOWIhumSnyB8ICoqMzAg56eSKiogfCA1MCUgfCDnn63lkajmnJ/lj5bkuIDljYogfAp8IDUg5YiG6ZKfIHwgMSDliIbpkp8gfCAyMCUgfCDooqsgMzBzIOS4i+mZkOaLiemrmCB8CnwgMSDlsI/ml7YgfCA1IOWIhumSnyB8ICoqOCUqKiB8IOagh+WHhiB8CnwgNiDlsI/ml7YgfCAyOSDliIbpkp8gfCAqKjglKiogfCDmoIflh4YgfAp8IDI0IOWwj+aXtiB8IDYwIOWIhumSnyB8IDQuMiUgfCDooqsgMWgg5LiK6ZmQ5oiq5patIHwKCiMjIyDimIUg5oiR5L+u6ZSZ5LqG5Lik5qyhCgp8IOeJiOacrCB8IOWBmuazlSB8IOmXrumimCB8CnwtLS18LS0tfC0tLXwKfCB2MSB8IGBNYXRoLm1pbihNYXRoLm1heChwY3QsIDYwMDAwKSwgMzYwMDAwMClgIHwgUGVyaW9kIDFtaW4g5pe2IEdyYWNlPTFtaW49KioxMDAlKiog4oeSIOawuOS4jeaKpeitpiB8CnwgdjIgfCDliqAgZmxvb3IgPSAyMCUgfCAxaCDlkajmnJ/nu5kgMTJtaW7vvIgyMCXvvInvvIwqKuavlCA4JSDlrr3kuoYqKiB8CnwgKip2MyoqIHwgKio4JSArIDUwJSDnoazkuIrpmZAqKiB8IOKchSDnn63lkajmnJ8gNTAl77yM6ZW/5ZGo5pyfIDglIHwKCioq4oeSIOe7j+mqjOazleWImeOAjDgl44CN5pys6Lqr5a+577yM5L2G6L6555WM5aSE55CG6ZSZ5LqG5Lik5qyh44CCKioKCi0tLQojIyDimIUgNiDnp43nirbmgIHvvJrpppbmrKHmo4Dmn6XkuI3miqXjgIzmraPluLjjgI0KCioq5a2m6IeqIGhlYWx0aGNoZWNrcyDnmoQgYFNUQVRVU0VTYOOAgioqCgojIyMg5Y6f5paHCgpgYGBweXRob24KU1RBVFVTRVMgPSAoKCJ1cCIsIlVwIiksICgiZG93biIsIkRvd24iKSwgKCJuZXciLCJOZXciKSwgKCJwYXVzZWQiLCJQYXVzZWQiKSkKUkVBU09OUyAgPSAoKCIiLCJVbmtub3duIiksICgidGltZW91dCIsIlRpbWVvdXQiKSwgKCJmYWlsIiwiRmFpbCBzaWduYWwiKSkKYGBgCgoqKjQg56eN54q25oCB77yM5LiN5pivIDIg56eN44CCKioKCiMjIyDmiJHnmoQgNiDnp43nirbmgIEKCnwg54q25oCBIHwg5ZCr5LmJIHwg5p2l5rqQIHwKfC0tLXwtLS18LS0tfAp8IGBva2AgfCDmo4Dmn6XkuobvvIzmsqHpl67popggfCDljp/mnIkgfAp8IGB3YXJuYCB8IOajgOafpeS6hu+8jOaciemakOaCoyB8IOWOn+aciSB8CnwgYGZhaWxgIHwg5qOA5p+l5LqG77yM5pyJ6Zeu6aKYIHwg5Y6f5pyJIHwKfCBgdW5rbm93bmAgfCDmn6XkuI3kuoYgfCDljp/mnInvvIjkuInlgLzkuI3loYznvKnvvIl8CnwgKipgbmV3YCoqIHwgKirpppbmrKHmo4Dmn6XvvIzov5jmsqHlu7rnq4vln7rnur8qKiB8ICoq4piF5a2m6IeqIGhlYWx0aGNoZWNrcyoqIHwKfCAqKmBwYXVzZWRgKiogfCAqKuS4u+WKqOaaguWBnO+8iOS4jeaYr+aVhemanO+8iSoqIHwgKirimIXlraboh6ogaGVhbHRoY2hlY2tzKiogfAoKIyMjIOKYhSDkuLrku4DkuYjpnIDopoEgYG5ld2AKCioq5Zy65pmvKirvvJrnrKzkuIDmrKHot5Hlt6Hmo4DvvIzmsqHmnInljoblj7LmlbDmja7jgIIKCnwg5aaC5p6c55SoIHwg5ZCO5p6cIHwKfC0tLXwtLS18CnwgYG9rYCB8ICoq5YGH57u/Kiog4oCU4oCUIOi/mOayoemqjOivgeWwseivtOato+W4uCB8CnwgYGZhaWxgIHwgKirlgYfnuqIqKiDigJTigJQg6L+Y5rKh5Yiw5pe26Ze05bCx6K+05pWF6ZqcIHwKfCAqKmBuZXdgKiogfCDinIUg5aaC5a6e6K+044CM6L+Y5rKh5bu656uL5Z+657q/44CNfAoKIyMjIOWunua1iwoKKirnrKzkuIDmrKHlt6Hmo4DvvIjkuLTml7bnm67lvZXvvIzml6Dljoblj7LvvInvvJoqKgoKYGBgCuKchSBbb2sgIF0g5o+S5Lu25Yqg6L29ICAgICAgMzMg5Liq5o+S5Lu25aOw5piO77yMMCDkuKrnvLrlpLEK8J+GlSBbbmV3IF0g5bel5YW35Y+v55So5oCnICAgIDYwLzYwIOmAmui/hyB8IOKYhemmluasoeajgOafpe+8jOi/mOayoeW7uueri+Wfuue6v++8iOS4jeaYr+OAjOato+W4uOOAje+8iQrwn4aVIFtuZXcgXSDppbHlkozluqYgICAgICAgQzogNzguNSUgfCDimIXpppbmrKHmo4Dmn6XvvIzov5jmsqHlu7rnq4vln7rnur/vvIjkuI3mmK/jgIzmraPluLjjgI3vvIkKYGBgCgoqKuesrOS6jOasoeW3oeajgO+8iOacieWOhuWPsu+8ie+8mioqCgpgYGAK5qCHIG5ldyDnmoTpobnmlbA6IDAgIOKchQpgYGAKCiMjIyDlk6rkupvmo4Dmn6XpnIDopoEgYG5ld2AKCioq5Y+q5a+544CM5L6d6LWW5Y6G5Y+y44CN55qE5qOA5p+l55Sf5pWI77yaKioKCnwg5qOA5p+lIHwg6ZyA6KaB5Y6G5Y+y5ZCXIHwg6aaW5qyh5qCHIG5ldyB8CnwtLS18LS0tfC0tLXwKfCDmj5Lku7bliqDovb0gfCDinYwg6Z2Z5oCBIHwg5LiN5qCHIHwKfCDkvJror53lgaXlurcgfCDinYwg6Z2Z5oCBIHwg5LiN5qCHIHwKfCDlt6Xlhbflj6/nlKjmgKcgfCDinIUg6KaB6Ziy5oqW5Z+657q/IHwgKirmoIcgbmV3KiogfAp8IGRhZW1vbiDnirbmgIEgfCDinIUg6KaB5ZGo5pyf5Z+657q/IHwgKirmoIcgbmV3KiogfAp8IOmlseWSjOW6piB8IOKchSDopoHnh4PlsL3njofln7rnur8gfCAqKuaghyBuZXcqKiB8CgoqKuKHkiDpnZnmgIHmo4Dmn6XmsqHljoblj7LkuZ/og73liKTvvIzkuI3or6XmoIcgbmV377yI5ZCm5YiZ5rC46L+cIG5ld++8ieOAgioqCgojIyMgYHJlYXNvbmDvvJrljLrliIYgdGltZW91dCDlkowgZmFpbAoKYGBgcHl0aG9uClJFQVNPTlMgPSAoKCIiLCJVbmtub3duIiksICgidGltZW91dCIsIlRpbWVvdXQiKSwgKCJmYWlsIiwiRmFpbCBzaWduYWwiKSkKYGBgCgp8IHJlYXNvbiB8IOWQq+S5iSB8IOS/ruazlSB8CnwtLS18LS0tfC0tLXwKfCBgdGltZW91dGAgfCDor6Xot5HmsqHot5EgfCDmn6XosIPluqblmagv6L+b56iLIHwKfCBgZmFpbGAgfCDot5HkuobkvYblpLHotKUgfCDmn6Xku7vliqHmnKzouqvnmoTplJkgfAoKKirih5Ig5ZCM5qC35piv44CM5Z2P5LqG44CN77yM5Y6f5Zug5LiN5ZCM77yM5L+u5rOV5a6M5YWo5LiN5ZCM44CCKioKCiMjIyDimIUg6Lip6L+H55qE5Z2RCgoqKuWKoCBgbmV3YCDnirbmgIHlkI7oh6rmo4DmjILkuobvvIgyMC8yMu+8ie+8mioqCgpgYGAKRkFJTCBzdW1tYXJ5IOWKoOaAuyA9IHRvdGFsICBbNT03XQpGQUlMIHVua25vd24g5LiN566XIG9rICAgICBbb2s9MiB1bmtub3duPTFdCmBgYAoKKirljp/lm6AqKu+8mmBzdW1tYXJ5YCDlj6rnu5/orqEgYG9rL3dhcm4vZmFpbC91bmtub3duYO+8jOayoeeulyBgbmV3L3BhdXNlZGDjgIIKCioq4oeSIOWKoOaWsOeKtuaAgeaXtu+8jOaJgOacieOAjOaemuS4vuaJgOacieeKtuaAgeOAjeeahOWcsOaWuemDveimgeWQjOatpeaUueOAgioqCgotLS0KIyMg4piFIGFsZXJ0QWZ0ZXLvvJrpooTorqHnrpfjgIzku4DkuYjml7blgJnor6XmiqXorabjgI0KCioq5a2m6IeqIGhlYWx0aGNoZWNrcyDnmoQgYGFsZXJ0X2FmdGVyYCDlrZfmrrXjgIIqKgoKIyMjIOWOn+aWhwoKYGBgcHl0aG9uCmFsZXJ0X2FmdGVyID0gbW9kZWxzLkRhdGVUaW1lRmllbGQobnVsbD1UcnVlLCBibGFuaz1UcnVlLCBlZGl0YWJsZT1GYWxzZSkKIyBJbmRleCBmb3IgdGhlIGFsZXJ0X2FmdGVyIGZpZWxkLiBFeGNsdWRlIHJvd3Mgd2l0aCBzdGF0dXM9ZG93bi4KCmRlZiBnb2luZ19kb3duX2FmdGVyKHNlbGYpOgogICAgZ3JhY2Vfc3RhcnQgPSBzZWxmLmdldF9ncmFjZV9zdGFydCgpCiAgICBpZiBncmFjZV9zdGFydCBpcyBub3QgTm9uZToKICAgICAgICByZXR1cm4gZ3JhY2Vfc3RhcnQgKyBzZWxmLmdyYWNlCiAgICByZXR1cm4gTm9uZQpgYGAKCiMjIyDimIUg5qC45b+D5oCd5oOz77ya6aKE6K6h566X77yM5LiN5piv5q+P5qyh5Yik5patCgp8IOaooeW8jyB8IOWBmuazlSB8IOe8uueCuSB8CnwtLS18LS0tfC0tLXwKfCAqKuaLieWPlioq77yI5oiR5Y6f5p2l77yJfCDmr4/mrKHlt6Hmo4DnrpcgYG5vdyAtIGxhc3RSdW5BdCAtIGludGVydmFsYCB8IOavj+asoeeul++8jOaXoOazlemihOefpSB8CnwgKirmjqjpgIEqKu+8iGhlYWx0aGNoZWNrc++8iXwg54q25oCB5Y+Y5YyW5pe2566X5aW9IGBhbGVydF9hZnRlcmAg5a2Y5bqTIHwg4pyFIOWPr+e0ouW8leOAgeafpeivouW/q+OAgeWPr+mihOa1iyB8CgojIyMg54q25oCB5py66amx5YqoCgpgYGBqcwpmdW5jdGlvbiBjb21wdXRlQWxlcnRBZnRlcihjaGVjaywgcGVyaW9kTXMsIGdyYWNlTXMpIHsKICBpZiAoY2hlY2subGV2ZWwgPT09ICduZXcnKSByZXR1cm4gTkVWRVI7ICAgICAvLyDov5jmsqHln7rnur8KICBpZiAoY2hlY2subGV2ZWwgPT09ICdwYXVzZWQnKSByZXR1cm4gTkVWRVI7ICAvLyDkuLvliqjmmoLlgZwKICBpZiAoY2hlY2subGV2ZWwgPT09ICdmYWlsJykgcmV0dXJuIE5FVkVSOyAgICAvLyDimIXlt7IgZmFpbCDih5Ig5LiN6YeN5aSN5oqlCiAgaWYgKCFwZXJpb2RNcykgcmV0dXJuIE5FVkVSOyAgICAgICAgICAgICAgICAgLy8g6Z2Z5oCB5qOA5p+l5LiN5Li75Yqo5oqlCiAgcmV0dXJuIERhdGUubm93KCkgKyBwZXJpb2RNcyArIGdyYWNlTXM7ICAgICAgLy8gb2sgKyDmnInlkajmnJ8g4oeSIOeul+S4i+asoQp9CmBgYAoKIyMjIOKYhSBORVZFUiDlk6jlhbXlgLwKCioqaGVhbHRoY2hlY2tzIOeahOazqOmHiu+8mioqCgpgYGBweXRob24KIyBORVZFUiBpcyBhIGNvbnN0YW50IHNlbnRpbmVsIHZhbHVlICh5ZWFyIDMwMDApLgojIFVzaW5nIE5vbmUgaW5zdGVhZCB3b3VsZCBtYWtlIHRoZSBtaW4oKSBsb2dpYyBjbHVua3kuCk5FVkVSID0gZGF0ZXRpbWUoMzAwMCwgMSwgMSwgdHppbmZvPXRpbWV6b25lLnV0YykKYGBgCgoqKuS4uuS7gOS5iOeUqOWFt+S9k+WAvOiAjOS4jeaYryBgbnVsbGDvvJoqKgotIGBtaW4oYSwgYilgIOmBh+WIsCBgbnVsbGAg5Lya5oql6ZSZCi0g55So5YW35L2T5YC85Y+v5Lul5Y+C5LiO5q+U6L6DCi0gMzAwMCDlubTotrPlpJ/ov5zvvIzlrp7pmYXkuI3kvJrovr7liLAKCioq5pys5o+S5Lu2KirvvJpgTkVWRVIgPSA0MTAyNDQ0ODAwMDAwYO+8iDIxMDAtMDEtMDHvvIkKCiMjIyDlrp7mtYsKCmBgYApkYWVtb24g54q25oCBICBbb2tdIGFsZXJ0QWZ0ZXI6IDM4OSDliIbpkp/lkI4gICAg4oaQIOacieWRqOacn+eahOaJjeaciQrmj5Lku7bliqDovb0gICAgIFtva10gYWxlcnRBZnRlcjogTkVWRVLvvIjmsLjkuI3vvIkgIOKGkCDpnZnmgIHmo4Dmn6XkuI3kuLvliqjmiqUK6aWx5ZKM5bqmICAgICAgIFtva10gYWxlcnRBZnRlcjogTkVWRVLvvIjmsLjkuI3vvIkKYGBgCgoqKuKHkiDnjrDlnKjog73pooTnn6XjgIxkYWVtb24g5LiL5qyh6K+l5ZyoIDM4OSDliIbpkp/lkI7mo4Dmn6XjgI3jgIIqKgoKIyMjIOivmuWunui+ueeVjAoKLSBgYWxlcnRBZnRlcmAg5Y+q5Zyo5YaF5a2Y6YeM566X77yM5rKh6JC955uY77yI6YeN5ZCv5bCx5Lii77yJCi0g5rKh5a6e546w44CM5a6a5pe25omr5o+PIGFsZXJ0QWZ0ZXLjgI3nmoTosIPluqblmajvvIjlj6rnrpfkuI3nlKjvvIkKLSDmsqHmnInnnJ/mraPnmoTjgIzkuI3ph43lpI3miqXorabjgI3mnLrliLbvvIjpnaAgYGZhaWxgIOeKtuaAgei/lOWbniBORVZFUiDmqKHmi5/vvIkKCi0tLQojIyDimIUgRmxpcO+8muWPquWcqOOAjOeKtuaAgeWPmOWMluOAjeaXtumAmuefpQoKKirlraboh6ogaGVhbHRoY2hlY2tzIOeahCBgRmxpcGAg5qih5Z6L44CCKioKCiMjIyDljp/mlocKCmBgYHB5dGhvbgpjbGFzcyBGbGlwKG1vZGVscy5Nb2RlbCk6CiAgICBvbGRfc3RhdHVzID0gbW9kZWxzLkNoYXJGaWVsZCguLi4pCiAgICBuZXdfc3RhdHVzID0gbW9kZWxzLkNoYXJGaWVsZCguLi4pCiAgICByZWFzb24gICAgID0gbW9kZWxzLkNoYXJGaWVsZCguLi4pCiAgICBwcm9jZXNzZWQgID0gbW9kZWxzLkRhdGVUaW1lRmllbGQoLi4uKQpgYGAKCioq4oeSIOiusOW9leeahOaYr+OAjOeKtuaAgeWPmOWMluOAjeacrOi6q++8jOS4jeaYr+OAjOW9k+WJjeeKtuaAgeOAjeOAgioqCgojIyMg5Li65LuA5LmICgp8IOWBmuazlSB8IOWQjuaenCB8CnwtLS18LS0tfAp8IOavj+asoei+k+WHuuWujOaVtOeKtuaAgSB8IOmHjeWkjemqmuaJsO+8iOeKtuaAgeayoeWPmOS5n+WcqOaKpe+8iXwKfCAqKuWPquWcqOWPmOWMluaXtui+k+WHuioqIHwg4pyFIOacieaEj+S5ieeahOS6i+S7tiB8CgojIyMg4piFIOWFs+mUruinhOWIme+8mmBuZXfihpJ1cGAg5ZKMIGBwYXVzZWTihpJ1cGAg5LiN6YCa55+lCgoqKuWOn+aWh++8mioqCgpgYGBweXRob24KIyBEb24ndCBzZW5kIGFsZXJ0cyBvbiBuZXctPnVwIGFuZCBwYXVzZWQtPnVwIHRyYW5zaXRpb25zCmlmIHNlbGYubmV3X3N0YXR1cyA9PSAndXAnIGFuZCBzZWxmLm9sZF9zdGF0dXMgaW4gKCduZXcnLCAncGF1c2VkJyk6CiAgICByZXR1cm4gW10KYGBgCgoqKuS4uuS7gOS5iO+8mioqCgp8IOe/u+i9rCB8IOWQq+S5iSB8IOivpemAmuefpeWQlyB8CnwtLS18LS0tfC0tLXwKfCBgbmV3IOKGkiBva2AgfCDpppbmrKHlu7rnq4vln7rnur8gfCDinYwgKirkuI3mmK/jgIzmlYXpmpzmgaLlpI3jgI0qKiB8CnwgYHBhdXNlZCDihpIgb2tgIHwg5LuO5pqC5YGc5oGi5aSNIHwg4p2MICoq5LiN5piv44CM5pWF6Zqc5oGi5aSN44CNKiogfAp8IGBmYWlsIOKGkiBva2AgfCAqKuecn+aVhemanOaBouWkjeS6hioqIHwg4pyFIHwKfCBgb2sg4oaSIGZhaWxgIHwg55yf5Ye65pWF6Zqc5LqGIHwg4pyFIHwKCioq4oeSIOOAjOWPmOaIkOato+W4uOOAjeS4jeetieS6juOAjOaVhemanOaBouWkjeOAje+8jOimgeeci+S7juWTquadpeeahOOAgioqCgojIyMg5a6e5rWLCgpgYGAK57+76L2sICAgICAgICAgICAgfCDor6XpgJrnn6UgfCDnkIbnlLEKLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0KbmV3IOKGkiBvayAgICAgICAgfCDinYwgICAgIHwg6aaW5qyh5bu656uL5Z+657q/77yI5LiN5piv5pWF6Zqc5oGi5aSN77yJCnBhdXNlZCDihpIgb2sgICAgIHwg4p2MICAgICB8IOS7juaaguWBnOaBouWkje+8iOS4jeaYr+aVhemanOaBouWkje+8iQpmYWlsIOKGkiBvayAgICAgICB8IOKchSAgICAgfCDnirbmgIHlj5jljJYKd2FybiDihpIgb2sgICAgICAgfCDinIUgICAgIHwg54q25oCB5Y+Y5YyWCm9rIOKGkiBmYWlsICAgICAgIHwg4pyFICAgICB8IOeKtuaAgeWPmOWMlgpvayDihpIgb2sgICAgICAgICB8IOKAlCAgICAgIHwg5rKh5Y+Y5YyW77yI5LiN6YCa55+l77yJCmZhaWwg4oaSIGZhaWwgICAgIHwg4oCUICAgICAgfCDmsqHlj5jljJbvvIjkuI3pgJrnn6XvvIkKYGBgCgojIyMg4piFIOW3suaOpeWFpeW3oeajgOa1geeoi++8iOS4jeWGjeaYr+e6r+WHveaVsO+8iQoKKirmr4/mrKHlt6Hmo4Dov5Tlm54gYGZsaXBzYCDlrZfmrrXvvJoqKgoKYGBganNvbgp7CiAgImZsaXBzIjogewogICAgIm5vdGlmeSI6IFtdLAogICAgInNpbGVudCI6IFsKICAgICAgeyAiaWQiOiAidG9vbHMiLCAibmFtZSI6ICLlt6Xlhbflj6/nlKjmgKciLCAib2xkIjogIm5ldyIsICJuZXciOiAib2siLAogICAgICAgICJyZWFzb24iOiAi6aaW5qyh5bu656uL5Z+657q/77yI5LiN5piv5pWF6Zqc5oGi5aSN77yJIiB9CiAgICBdCiAgfQp9CmBgYAoKKirlrp7mtYvvvJoqKgoKfCDlnLrmma8gfCBub3RpZnkgfCBzaWxlbnQgfAp8LS0tfC0tLXwtLS18Cnwg56ys5LiA5qyh5beh5qOA77yI5peg5Y6G5Y+y77yJfCAwIHwgMCB8Cnwg56ys5LqM5qyh77yI54q25oCB5rKh5Y+Y77yJfCAqKjAqKiB8IDLvvIhuZXfihpJva++8iXwKCioq4oeSIOeKtuaAgeayoeWPmOWwseS4jemAmuefpe+8jG5ld+KGkm9rIOmdmem7mOOAgioqCgojIyMg4piFIOi4qei/h+eahOWdkQoKKipmbGlwIOeul+WcqOmYsuaKluS5i+WJjSDih5Ig6K6w5b2V6ZSZ55qE54q25oCB77yaKioKCmBgYArnrKzkuIDmrKE6IG1lbW9yeT13YXJuCuesrOS6jOasoTogbWVtb3J5IOWOn+WniyBmYWlsIOiiq+mYsuaKlumZjeS4uiB3YXJuCiAg4oeSIOS9hiBmbGlwIOiusOW9lSB3YXJuIOKGkiBmYWls77yI6ZSZ77yJCmBgYAoKKirkv67ms5UqKu+8muWFiCBgYXBwbHlUaHJlc2hvbGRg77yM5YaN566XIGBmbGlwYOOAggoKYGBganMKLy8g4p2MIOmUme+8muWFiOeulyBmbGlwIOWGjemYsuaKlgpyZXN1bHQuZmxpcCA9IGNvbXB1dGVGbGlwKHByZXZMZXZlbCwgcmVzdWx0LmxldmVsKTsKYXBwbHlUaHJlc2hvbGQocmVzdWx0LCBwcmV2U3RhdGVbcmVzdWx0LmlkXSk7CgovLyDinIUg5a+577ya5YWI6Ziy5oqW5YaN566XIGZsaXAKYXBwbHlUaHJlc2hvbGQocmVzdWx0LCBwcmV2U3RhdGVbcmVzdWx0LmlkXSk7CnJlc3VsdC5mbGlwID0gY29tcHV0ZUZsaXAocHJldkxldmVsLCByZXN1bHQubGV2ZWwpOwpgYGAKCiMjIyDliankvZnor5rlrp7ovrnnlYwKCi0g5rKh5pyJ5oyB5LmF5YyW57+76L2s5Y6G5Y+y77yI5Y+q566X5LiN5a2Y77yJCi0g5rKh5pyJ44CM6YCa55+l5rig6YGT44CN55qE5qaC5b+177yI5LiN55+l6YGT6YCa55+l6LCB77yJCgotLS0KIyMg4piFIGR3ZWxsVGltZe+8mumXrumimOWBnOeVmeaXtumVvwoKKirlraboh6ogaGVhbHRoY2hlY2tzIOeahCBgc2VuZGFsZXJ0cy5weWDjgIIqKgoKIyMjIOWOn+aWhwoKYGBgcHl0aG9uCnN0YXRzZC50aW1pbmcoJ2hjLnNlbmRhbGVydHMuZHdlbGxUaW1lJywgc2VuZF9zdGFydCAtIGZsaXAuY3JlYXRlZCkKc3RhdHNkLnRpbWluZygnaGMuc2VuZGFsZXJ0cy5zZW5kVGltZScsIG5vdygpIC0gc2VuZF9zdGFydCkKYGBgCgp8IOaMh+aghyB8IOWQq+S5iSB8IOihoemHj+S7gOS5iCB8CnwtLS18LS0tfC0tLXwKfCAqKmR3ZWxsVGltZSoqIHwg5LuO44CM5LqL5Lu25Y+R55Sf44CN5Yiw44CM5byA5aeL5aSE55CG44CNfCDimIXpmJ/liJflgaXlurfluqYgfAp8ICoqc2VuZFRpbWUqKiB8IOWunumZheWPkemAgeiAl+aXtiB8IOa4oOmBk+aAp+iDvSB8CgojIyMg4piFIOS4uuS7gOS5iCBkd2VsbFRpbWUg6YeN6KaBCgotIGBkd2VsbFRpbWVgIOeos+WumiDih5Ig5aSE55CG5b6X6L+H5p2lCi0gYGR3ZWxsVGltZWAg5LiA55u05raoIOKHkiDnp6/ljovkuobvvIzlpITnkIbkuI3ov4fmnaUKCioq4oeSIOi/meaYr+mYn+WIl+ezu+e7n+acgOmHjeimgeeahOaMh+agh+S5i+S4gOOAgioqCgojIyMg5pys5o+S5Lu255qE5a+55bqUCgoqKuWcuuaZryoq77ya5beh5qOA5Y+R546w6Zeu6aKY77yIZmFpbO+8ieKGkiDku4DkuYjml7blgJnlpITnkIbvvJ8KCmBgYGpzCmR3ZWxsVGltZSA9IOeOsOWcqCAtIOmmluasoeWPkeeOsOaXtumXtApgYGAKCioq5aaC5p6c5LiA6aG5IGZhaWwg5LqGIDMg5aSp6L+Y5rKh5L+uIOKHkiBkd2VsbFRpbWUgPSA3MiDlsI/ml7bvvIjor6XmiqXorabkuobvvInjgIIqKgoKIyMjIOWunua1iwoKfCDlgZznlZnml7bplb8gfCDnrYnnuqcgfCDlkKvkuYkgfAp8LS0tfC0tLXwtLS18CnwgMSDlsI/ml7YgfCBvayB8IOato+W4uCB8CnwgMTIg5bCP5pe2IHwgb2sgfCDmraPluLggfAp8ICoqMzAg5bCP5pe2KiogfCAqKndhcm4qKiB8IOitpuWRiu+8iOaLluWkquS5heS6hu+8iXwKfCAqKjgwIOWwj+aXtioqIHwgKipmYWlsKiogfCDkuKXph43vvIjor6Xnq4vliLvlpITnkIbvvIl8CnwgMjAwIOWwj+aXtiB8IGZhaWwgfCDkuKXph40gfAoKKirovrnnlYwqKu+8mmBudWxsYCDlkozjgIzmnKrmnaXml7bpl7TjgI3pg73ov5Tlm54gYG51bGxg77yI5LiN556O5Yik77yJ44CCCgojIyMg6K+a5a6e6L6555WMCgotIGBjb21wdXRlRHdlbGxgIOaYr+e6r+WHveaVsO+8jCoq5rKh5o6l5YWl5a6e6ZmF5beh5qOA5rWB56iLKirvvIjmsqHmnInjgIzpppbmrKHlj5HnjrDml7bpl7TjgI3nmoTmjIHkuYXljJbvvIkKLSDmsqHmnIkgYHNlbmRUaW1lYCDnmoTlr7nlupTlrp7njrAKCi0tLQojIyDimIUg5Y+Y5byC5rWL6K+V77ya6K+B5piO5Yik5o2u55yf55qE5pyJ5pWICgoqKuiHquajgCAzMi8zMiDlhajnu78g4omgIOWIpOaNruecn+eahOWcqOi1t+S9nOeUqOOAgioqCgojIyMg5Li65LuA5LmI6ZyA6KaBCgoqKuWtpuiHqiB0cmFpbG9mYml0cy9tZXd077yaKioKCj4g44CMSWYgeW91ciB0ZXN0cyBzdGlsbCBwYXNzIGFmdGVyIGEgbXV0YXRpb24sIHRoYXQncyBhIGdhcDoKPiAgdGhlIG11dGFudCBzdXJ2aXZlZCwgbWVhbmluZyB5b3VyIHRlc3RzIGRpZG4ndCBjYXRjaCB0aGUgY2hhbmdlLuOAjQoKKirih5Ig5Y+Y5byC5rWL6K+V5piv5ZSv5LiA6IO96K+B5piO44CM5Yik5o2u5LiN5piv5pGG6K6+44CN55qE5omL5q6144CCKioKCiMjIyDnu5PmnpzvvJoxMC8xMCBLSUxMRUQKCnwg5Y+Y5byCIHwg5pS55LuA5LmIIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfAp8IHBhdHJvbC10aHJlc2hvbGQgfCDpmLLmipbpmIjlgLwgMyDihpIgMSB8IOKchSBLSUxMRUQgfAp8IHBhdHJvbC1sZXZlbC1zY29yZSB8IGZhaWwg5YiG5pWwIDEg4oaSIDAgfCDinIUgS0lMTEVEIHwKfCBwYXRyb2wtYnVybi1taW5zcGFuIHwg54eD5bC9546H5Lik6YGT6Ze46YO95ouGIHwg4pyFIEtJTExFRCB8CnwgcGF0cm9sLWdyYWNlLXBjdCB8IOWuvemZkCA4JSDihpIgNTAlIHwg4pyFIEtJTExFRCB8CnwgcGF0cm9sLWZsaXAtc2lsZW50IHwg5Y675o6JIG5ld+KGknVwIOmdmem7mCB8IOKchSBLSUxMRUQgfAp8IHBhdHJvbC1kZWNpc2lvbi1jb25mIHwg572u5L+h5bqm5oGSIDEgfCDinIUgS0lMTEVEIHwKfCBwYXRyb2wtYWxlcnRhZnRlci1mYWlsIHwgZmFpbCDkuZ/orqHnrpfmiqXoraYgfCDinIUgS0lMTEVEIHwKfCBwYXRyb2wtZHdlbGwtNzIgfCA3Mmgg4oaSIDcyMGggfCDinIUgS0lMTEVEIHwKfCBwYXRyb2wtdHJ1bmNhdGUgfCDkuI3moIfmiKrmlq0gfCDinIUgS0lMTEVEIHwKfCBwYXRyb2wtdmVyZGljdCB8IOW/veeVpSBmYWlsIHwg4pyFIEtJTExFRCB8CgojIyMg4piFIOesrOS4gOi9ruaYryA1IEtJTExFRCAvIDQgU1VSVklWRUQKCioqNCDkuKrliKTmja7ooqvmlLnlnY/kuobvvIzoh6rmo4Dlj5HnjrDkuI3kuoYg4oCU4oCUIOi/meaYr+ecn+mXrumimOOAgioqCgojIyMg5L+u5aSN6L+H56iL77yINCDkuKrmoLnlm6DvvIkKCioq4pGgIOehrOe8lueggeW4uOmHjyA9IOa1i+ivleebsuWMuioqCgpgYGBqcwovLyDinYwg6Ieq5qOA6YeM77yI5a2X6Z2i6YePIDPvvIkKY29uc3QgZDEgPSBwYXRyb2wuZGVjaWRlRmFpbCgxLCAzKTsKCi8vIOKchSDnlKjooqvmtYvku6PnoIHnmoTluLjph48KY29uc3QgVCA9IHBhdHJvbC5GQUlMVVJFX1RIUkVTSE9MRDsKY29uc3QgZDEgPSBwYXRyb2wuZGVjaWRlRmFpbCgxLCBUKTsKYGBgCgoqKuKRoSDmlq3oqIDlpKrlrr3vvIjlj6rpqozlrZjlnKjvvIzkuI3pqozlgLzvvIkqKgoKYGBganMKLy8g4p2MIOWPqumqjCBzY29yZSDlrZjlnKgKeC5hbm5vdGF0aW9uLnNjb3JlICE9PSB1bmRlZmluZWQKCi8vIOKchSDnm7TmjqXmtYvmmKDlsITooagKY29uc3QgTFMgPSBwYXRyb2wuTEVWRUxfU0NPUkU7CkxTLm9rID09PSAwICYmIExTLndhcm4gPT09IDAuNSAmJiBMUy5mYWlsID09PSAxCmBgYAoKKirikaIg6YC76L6R5Z+L5Zyo5rWB56iL6YeMID0g5rWL5LiN5YiwKioKCmBgYGpzCi8vIOKdjCDln4vlnKggcGF0cm9sKCkg6YeMCmZ1bmN0aW9uIHBhdHJvbCgpIHsKICBjb25zdCB2ZXJkaWN0ID0gZmFpbCA+IDAgPyAnRkFJTCcgOiAuLi47ICAgLy8g6KaB5rWL5b+F6aG76YCgIGZhaWwg5Zy65pmvCn0KCi8vIOKchSDmir3miJDnuq/lh73mlbAKZnVuY3Rpb24gY29tcHV0ZVZlcmRpY3Qoc3VtbWFyeSkgeyAuLi4gfSAgICAgLy8g55u05o6l5Lyg5Y+C5bCx6IO95rWLCmBgYAoKKirikaMg5Y+Y5byC5pys6Lqr5Y+v6IO95LiN5b275bqVKioKCmBgYArnh4PlsL3njofmnInkuKTpgZPpl7jvvJoKICBNSU5fU1BBTl9EQVlTID0gMSAgICDvvIjot6jluqboh7PlsJEgMSDlpKnvvIkKICBNSU5fREVMVEFfUENUID0gMC41ICDvvIjmtqjluYXoh7PlsJEgMC41Je+8iQoK5Y+q5pS556ys5LiA6YGTIOKHkiDnrKzkuozpgZPov5jlnKjmi6Yg4oeSIOihjOS4uuayoeWPmCDih5Ig5Y+Y5byC5peg5pWICmBgYAoKKirkv67ms5XvvJrkuKTpgZPpl7jlkIzml7bmi4bvvIjnlKggYG11dGF0aW9uc2Ag5pWw57uE77yJ44CCKioKCiMjIyDimIUg5LiJ5Liq5pWZ6K6tCgoxLiAqKuOAjOiHquajgOWFqOe7v+OAjeKJoOOAjOWIpOaNruacieaViOOAjSoqIOKAlOKAlCAzMSDmnaHmlq3oqIDlhajov4fvvIzkvYYgNCDkuKrliKTmja7ooqvmlLnlnY/kuobmtYvkuI3lh7rmnaUKMi4gKirnoaznvJbnoIHluLjph48gPSDmtYvor5Xnm7LljLoqKiDigJTigJQg5rWL6K+V5b+F6aG755So6KKr5rWL5Luj56CB55qE5bi46YeP77yM5LiN6IO955So5a2X6Z2i6YePCjMuICoq5Y+v5rWL6K+V5oCnID0g5oqK6YC76L6R5LuO5rWB56iL6YeM5oq95oiQ57qv5Ye95pWwKioKCiMjIyDmgI7kuYjot5EKCmBgYGJhc2gKbm9kZSB0b29scy90b29sLW11dGF0aW9uLmNqcyAtLW9ubHk9cGF0cm9sLXRocmVzaG9sZApub2RlIHRvb2xzL3Rvb2wtbXV0YXRpb24uY2pzIC0tZHJ5LXJ1biAgICMg5Y+q5qOA5p+l5Y+Y5byC54K56IO95ZCm5ZG95LitCmBgYAoKIyMjIOivmuWunui+ueeVjAoKLSDlj6rmtYvnmbvorrDlnKjlhoznmoQgMTAg5Liq5Y+Y5byC77yM5rKh5oOz5Yiw55qE5Yik5o2u5rWL5LiN5YiwCi0g5rOo5YWl5piv5paH5pys5pu/5o2i77yM5aSN5p2C5aSa6KGM5Y+Y5byC5LiN5pSv5oyBCi0g5L6d6LWW6Ieq5qOA5pyJ5aSx6LSl6YCA5Ye656CB77yIZXhpdCAx77yJCgotLS0KIyMg4piFIOWPmOW8gua1i+ivleWPkeeOsOOAjOWBh+iHquajgOOAje+8iDIwMjYtMTEtMDHvvIkKCiMjIyDlj5HnjrAKCioq57uZIGBib20tZ3VhcmRg77yIQk9NIOawuOS5hemXuO+8ieWKoOS6hiA0IOS4quWPmOW8gu+8jOe7k+aenCA0LzQgU1VSVklWRUTjgIIqKgoKKirih5Ig5pS55Z2P5a6D55qEIEJPTSDmo4DmtYvpgLvovpHvvIzoh6rmo4DnhafmoLcgYGV4aXQgMGAg5YWo57u/44CCKioKCiMjIyDmoLnlm6DvvJroh6rmo4Dph4zlpI3liLbkuobkuIDku73pgLvovpEKCmBgYGpzCi8vIGJvbS1ndWFyZC5zZWxmdGVzdC5janMg5Y6f5p2l6L+Z5qC35YaZ77yaCi8vIOKUgOKUgCDooqvmtYvlrp7njrDvvJrku44gYm9tLWd1YXJkLmNqcyDph4zlpI3liLYgZml4RmlsZe+8iOS/neaMgeS4gOiHtO+8ieKUgOKUgAovLyDimIXkuLrku4DkuYjkuI3nm7TmjqUgcmVxdWlyZe+8n+KYhQovLyAgIOWug+S4gCByZXF1aXJlIOWwseaJp+ihjOS4u+a1geeoi++8jOiAjOS4lCBmaXhGaWxlIOS4jeaYr+WvvOWHuueahOOAggpmdW5jdGlvbiBnb29kRml4RmlsZShwKSB7IC4uLiB9ICAgLy8g4oaQIOiHquajgOmHjOWPiOWGmeS6huS4gOS7ve+8gQpgYGAKCioq4oeSIOiHquajgOa1i+eahOaYr+OAjOWug+iHquW3seWkjeWItueahOmCo+S7veOAje+8jOS4jeaYr+ecn+WunueOsOOAgioqCgojIyMg5L+u5aSN77yIMyDmraXvvIkKCioq4pGgIOiuqea6kOaWh+S7tuWPryByZXF1aXJlKioKCmBgYGpzCi8vIOWOn+adpe+8muS4gCByZXF1aXJlIOWwseaJp+ihjOS4u+a1geeoiwpjb25zb2xlLmxvZygn4pWQ4pWQ4pWQ4pWQIEJPTSDmsLjkuYXpl7gg4pWQ4pWQ4pWQ4pWQJyk7CmZvciAoY29uc3QgcCBvZiBsaXN0KSB7IC4uLiB9CnByb2Nlc3MuZXhpdChiYWQgPT09IDAgPyAwIDogMSk7CgovLyDmlLnmiJDvvJrljIXov5sgbWFpbigpCmZ1bmN0aW9uIG1haW4oKSB7IC4uLiB9CmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkgeyBtYWluKCk7IH0KbW9kdWxlLmV4cG9ydHMgPSB7IGNoZWNrRmlsZSwgZml4RmlsZSwgVEFSR0VUUywgQk9NIH07CmBgYAoKKirikaEg6Ieq5qOA5pS55oiQIHJlcXVpcmUg55yf5a6e546wKioKCmBgYGpzCmNvbnN0IGJvbUd1YXJkID0gcmVxdWlyZSgnLi9ib20tZ3VhcmQuY2pzJyk7CmNvbnN0IGdvb2RGaXhGaWxlID0gYm9tR3VhcmQuZml4RmlsZTsgICAvLyDimIXnnJ/lrp7njrAKCi8vIOWKoOaWreiogOmYsumAgOWMlgpjaGVjaygnUDAgZ29vZEZpeEZpbGUg5p2l6Ieq5a+85Ye677yI5LiN5piv5aSN5Yi25ZOB77yJJywKICBnb29kRml4RmlsZSA9PT0gYm9tR3VhcmQuZml4RmlsZSk7CmBgYAoKKirikaIg5YqgIENMSSDlsYLmtYvor5XvvIjkuLvmtYHnqIvkuZ/opoHmtYvvvIkqKgoKYGBganMKLy8g5Y+q5rWLIGZpeEZpbGUg5oqT5LiN5Yiw44CM5qOA5rWLL+iuoeaVsC9leGl044CN55qE5Y+Y5byCCi8vIOmAoOW4piBCT00g55qE5Li05pe25paH5Lu277yM6LeR55yfIENMSe+8mgpjaGVjaygnUDMg5pyJIEJPTSDih5IgZXhpdCAxJywgY29kZTEgPT09IDEpOwpjaGVjaygnUDMg5pyJIEJPTSDih5Ig6L6T5Ye65ZCrIOKdjCcsIG91dDEuaW5jbHVkZXMoJ+KdjCcpKTsKY2hlY2soJ1AzIOW5suWHgOaWh+S7tiDih5IgZXhpdCAwJywgY29kZTIgPT09IDApOwpgYGAKCiMjIyDnu5PmnpwKCnwg6Zi25q61IHwg57uT5p6cIHwKfC0tLXwtLS18Cnwg5L+u5aSN5YmNIHwgNC80IFNVUlZJVkVE77yI5YGH6Ieq5qOA77yJfAp8IOS/ruWkjeWQjiB8ICoqNC80IEtJTExFRCoqIHwKCiMjIyDimIUg5Zub5Liq5pWZ6K6tCgp8ICMgfCDmlZnorq0gfAp8LS0tfC0tLXwKfCAxIHwgKirjgIzlpI3liLbpgLvovpHliLDoh6rmo4Dph4zjgI09IOWBh+iHquajgCoqIOKAlOKAlCDlv4XpobsgcmVxdWlyZSDnnJ/lrp7njrAgfAp8IDIgfCAqKuWPqua1i+WHveaVsOWxguS4jea1iyBDTEkg5bGCID0g5ryP5o6J5Li75rWB56iLKiogfAp8IDMgfCAqKuWPmOW8guiuvuiuoeimgeimhuebluOAjOWQjOS4gOmAu+i+keeahOaJgOaciemYsuaKpOOAjSoqIHwKfCA0IHwgKirlj5jlvIIgc3Vydml2ZWQg4omgIOWIpOaNruS4gOWumuaciemXrumimCoq77yI5Y+v6IO95piv5Y+Y5byC5LiN5b275bqV5oiW5pat6KiA6KaG55uW5LiN5Yiw77yJfAoKIyMjIOWFqOmHj+e7k+aenAoKYGBgCuWPmOW8gua1i+ivlTogMzYgS0lMTEVEIC8gMCBTVVJWSVZFRApjaGVjay1hbGw6IDYwLzYwIOmAmui/hwpgYGAKCi0tLQojIyDimIUg5LiD56eN44CM5YGH57u/44CN5qih5byP77yI5Y+Y5byC5rWL6K+V5Y+R546w77yJCgoqKuOAjOiHquajgOWFqOe7v+OAjeacieS4g+enjeWBh+azle+8jOS7iuWkqeWFqOmBh+WIsOS6huOAgioqCgp8ICMgfCDmqKHlvI8gfCDooajnjrAgfCDkv67ms5UgfAp8LS0tfC0tLXwtLS18LS0tfAp8IDEgfCAqKua1i+WkjeWItuWTgSoqIHwg6Ieq5qOA6YeM5Y+I5YaZ5LiA5Lu96YC76L6RIHwgYHJlcXVpcmVgIOecn+WunueOsCB8CnwgMiB8ICoq5Y+q5rWL5Ye95pWw5bGCKiogfCDkuLvmtYHnqIvvvIhDTEkvZXhpdO+8ieayoea1iyB8IOi3keecnyBDTEkg5pat6KiA6L6T5Ye6IHwKfCAzIHwgKirmlq3oqIDlpKrlrr0qKiB8IGAvQVx8Qi9gIOWPquWMuemFjeWIsCBCIHwg6YCg5Zy65pmv5YiG5Yir6KaG55uWIEEg5ZKMIEIgfAp8IDQgfCAqKuS+nei1luecn+WunueOr+WigyoqIHwg5rWL44CM55yf5a6e5LuT5bqT6YeM56Kw5ben5a2Y5Zyo55qE5paH5Lu244CNfCAqKumAoOaWh+S7tiArIGBvcHRzLmRpcnNgIOazqOWFpSoqIHwKfCA1IHwgKirmrbvlj4LmlbAqKiB8IGBvcHRzYCDmlLbkuobkvYbku47kuI3or7sgfCDorqnlj4LmlbDnnJ/nmoTnlJ/mlYggfAp8IDYgfCAqKuaWreiogOmUmeS9jSoqIHwg5rWL5pWw5o2u5LiN5rWL5Yik5o2uIHwg6LCD55yf5Ye95pWw5pat6KiA6L+U5Zue5YC8IHwKfCA3IHwgKirmsqHmnInoh6rmo4AqKiB8IOW3peWFtyAxNjUg6KGM5L2G6Zu25pat6KiAIHwgKirooaXoh6rmo4AgKyDliqDlj5jlvIIqKiB8CgojIyMg5qGI5L6L77yac2tpbGwtbWQtbGludCDku47jgIzmsqHoh6rmo4DjgI3liLAgMy8zCgoqKmBza2lsbC1tZC1saW50LmNqc2Ag5pyJIDE2NSDooYzjgIEzIOadoeWIpOaNru+8jOS9huWujOWFqOayoeacieiHquajgOaWh+S7tuOAgioqCgoqKmNoZWNrLWFsbCDph4zlj6rmnInvvJoqKgoKYGBganMKeyBuYW1lOiAnc2tpbGwtbWQtbGludCcsIGFyZ3M6IFsndG9vbHMvc2tpbGwtbWQtbGludC5janMnXSwgYnVkZ2V0OiAyMDAwIH0sCmBgYAoKKirih5Ig5Y+q6LeR5bel5YW35pys6Lqr77yI55yL5a6DIGV4aXQgMO+8ie+8jOS4jemqjOivgeWIpOaNruWvueS4jeWvueOAgioqCgoqKuihpeeahCA4IOadoeaWreiogO+8mioqCgp8ICMgfCDpqozku4DkuYggfAp8LS0tfC0tLXwKfCAxIHwg5ZCI6KeE55qEIFNLSUxMLm1kIOS4jeivpeiiq+aKpSB8CnwgMiB8IOe8uuOAjCMjIOeUqOmAlOOAjeW/hemhu+iiq+aKpSB8CnwgMyB8IOe8uuOAjCMjIOeUqOazleOAjeW/hemhu+iiq+aKpSB8CnwgNCB8IOe8uuOAjCMjIOi+ueeVjOOAjeW/hemhu+iiq+aKpSB8CnwgNSB8IOayoeaciSBTS0lMTC5tZCDlv4XpobvooqvmiqUgfAp8IDYgfCBgX2Ag5YmN57yA55uu5b2V6KKr6Lez6L+HIHwKfCA3IHwgcm9vdCDkuI3lrZjlnKjml7Ygcm9vdE1pc3Npbmc9dHJ1Ze+8iOS4jeW0qe+8iXwKfCA4IHwg4piF5YWD6aqM6K+B77ya5oGS5LiN5oql55qE5YGH5a6e546w5b+F6aG76K6p5pat6KiA5aSx6LSlIHwKCioq5YWz6ZSu77ya55SoIGBvcHRzLnJvb3RgIOazqOWFpemAoOS4tOaXtuebruW9lSoqCgpgYGBqcwpmdW5jdGlvbiBtYWtlU2tpbGxzUm9vdChza2lsbHMpIHsKICBjb25zdCByb290ID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnc2tpbGxsaW50LScpKTsKICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoc2tpbGxzKSkgewogICAgY29uc3QgZCA9IHBhdGguam9pbihyb290LCBuYW1lKTsKICAgIGZzLm1rZGlyU3luYyhkLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgIGlmIChza2lsbHNbbmFtZV0gIT09IG51bGwpIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGQsICdTS0lMTC5tZCcpLCBza2lsbHNbbmFtZV0sICd1dGY4Jyk7CiAgfQogIHJldHVybiByb290Owp9Cgpjb25zdCByb290ID0gbWFrZVNraWxsc1Jvb3QoeyAnYmFkLXNraWxsJzogbm9QdXJwb3NlIH0pOwpjb25zdCByID0gbGludC5zY2FuU2tpbGxzKHsgcm9vdCB9KTsKb2soci5wcm9ibGVtcy5sZW5ndGggPT09IDEsICflupTmiqUgMSDkuKonKTsKYGBgCgoqKuKHkiBgc2NhblNraWxscyhvcHRzKWAg5pys5p2l5bCx5pSv5oyBIGBvcHRzLnJvb3RgIOazqOWFpSDigJTigJQg6L+Z5piv5aW96K6+6K6h77yM5Y+q5piv5rKh5Lq655So44CCKioKCiMjIyDimIUg5LiA5Liq6KeE5b6LCgo+ICoq6KKr5Y+Y5byC5rWL6K+V6aqM6K+B6L+H55qE5bel5YW377yM5ZCO57ut5Yqg5Y+Y5byC5a655piT5YWoIEtJTExFRO+8mwo+IOayoeiiq+mqjOivgei/h+eahO+8jOesrOS4gOasoei3keWwseaatOmcsuS4gOWghumXrumimOOAgioqCgoqKuivgeaNru+8mioqCi0gYHRvb2wtZ3JvdXBzYCDms6jph4rph4zlhpnnnYDjgIwyMDI2LTEwLTI0IOWPmOW8gua1i+ivleS/ruOAjeKHkiDov5nmrKEgNC80IOWFqCBLSUxMRUQKLSBgYm9tLWd1YXJkYCAvIGBhcmNoaXZlLWd1YXJkYCAvIGBiYXNlbGluZS1jaGVja2Ag5LuO5rKh6KKr6aqM6K+BIOKHkiDnrKzkuIDmrKHot5HlhajmmrTpnLIKCiMjIyDntK/orqHopobnm5bvvIg2NyDkuKrlj5jlvILvvIkKCnwg5bel5YW3IHwg5Y+Y5byC5pWwIHwKfC0tLXwtLS18Cnwg5beh5qOA5Y+4IHwgMTAgfAp8IGNhdGNoLWRpc2NpcGxpbmUgfCA0IHwKfCBib20tZ3VhcmQgfCA0IHwKfCBjaGVjay10cmVuZCB8IDIgfAp8IGFyY2hpdmUtZ3VhcmQgfCA0IHwKfCBiYXNlbGluZS1jaGVjayB8IDQgfAp8IHRvb2wtZ3JvdXBzIHwgNSB8Cnwgc2tpbGwtbWQtbGludCB8IDMgfAp8IGtub3duLWlzc3VlcyB8IDQgfAp8IGNoZWNrLWNvbW1pdC1tc2cgfCAzIHwKfCBidW5kbGUtaG1yLWNoZWNrIHwgMyB8CnwgcGVyLWFnZW50LXJ1bnRpbWUtY2hlY2sgfCA0IHwKfCDljp/mnIkgfCAxOCB8CgojIyMg4piFIOesrCAxMiDnp43lgYfnu7/vvJrmtYvor5Xln7rnoYDorr7mlr3mnKzouqvmsqHooqvmtYsKCioqYHBlci1hZ2VudC1ydW50aW1lLWNoZWNrLmNqc2Ag55qE5p625p6E77yaKioKCmBgYGpzCmZ1bmN0aW9uIG1ha2VGYWtlSG9zdCgpIHsKICAvLyDmqKHmi5/nnJ/lrr/kuLvnmoTmnIDlsI/lpZHnuqYKICAvLyBjdHgudG9vbHMucmVnaXN0ZXIgLyBjdHgubG9nZ2VyIC8gY3R4Lm9uIC8gY3R4LmVmZmVjdCAvIGN0eC5hZ2VudHMKICByZXR1cm4geyBjdHgsIG1ha2VBZ2VudCwgZ2xvYmFsVG9vbHMsIHBlckFnZW50LCBhZ2VudHMsIGxvZ3MsIGVycm9ycyB9Owp9CgovLyDnhLblkI7nlKjlroPpqozor4Hlm5vkuKrmj5Lku7bjgIznnJ/ot5HotbfmnaXkuI3ltKnjgI0KZm9yIChjb25zdCBwIG9mIFBMVUdJTlMpIHsKICBjb25zdCBtb2QgPSBhd2FpdCBpbXBvcnQoLi4uKTsKICBtb2QuYXBwbHkoZmFrZUhvc3QuY3R4KTsKfQpgYGAKCioq6Zeu6aKYKirvvJrlgYflrr/kuLvmnKzouqvku47msqHooqvmtYvov4fjgIIKCioq5aaC5p6cIGBtYWtlRmFrZUhvc3RgIOaooeaLn+mUmeS6hioq77yIYHJlZ2lzdGVyYCDkuI3mo4Dmn6Xph43lkI3jgIFgZWZmZWN0YCDkuI3miafooYzvvInvvJoKCj4gKirih5Ig5omA5pyJ55So5a6D5YGa55qE5rWL6K+V6YO95piv5YGH57u/44CCKioKCiMjIyDkuLrku4DkuYjmnIDpmpDolL0KCioq5Zug5Li65a6D44CM55yL6LW35p2l5Zyo5rWL44CN77yaKioKLSDmnIkgMTYg5p2h5pat6KiAIOKchQotIOecn+WKoOi9veaPkuS7tiDinIUKLSDnnJ/ot5EgYXBwbHkg4pyFCi0g5YWo57u/IOKchQoKKirkvYblpoLmnpzlgYflrr/kuLvmqKHmi5/plJnkuobvvIzov5kgMTYg5p2h5pat6KiA5Y+v6IO95YWo5piv5YGH55qE44CCKioKCiMjIyDooaXnmoQgMTAg5p2h5pat6KiA77yI5rWL5YGH5a6/5Li75aWR57qm77yJCgp8ICMgfCDpqozku4DkuYggfAp8LS0tfC0tLXwKfCAxIHwgYGN0eC50b29scy5yZWdpc3RlcmAg6IO95rOo5YaM5bel5YW3IHwKfCAyIHwgKirph43lpI3ms6jlhozlv4XpobvmipvplJnvvIjnnJ/lrr/kuLvkuZ/ov5nmoLfvvIkqKiB8CnwgMyB8ICoq5rKhIG5hbWUg5b+F6aG75oqb6ZSZKiogfAp8IDQgfCBgcmVnaXN0ZXJgIOi/lOWbnueahCBkaXNwb3NlciDog73liKDmjonlt6XlhbcgfAp8IDUgfCAqKnBlci1hZ2VudCDlsYLlkowgZ2xvYmFsIOWxgumalOemuyoq77yI5ZCM5ZCN5Y+v5YWx5a2Y77yJfAp8IDYgfCBgY3R4LmxvZ2dlcmAg5pS26ZuG5pel5b+XIHwKfCA3IHwgKipgY3R4Lm9uYCArIGBtYWtlQWdlbnRgIOinpuWPkSBgYWdlbnQvY3JlYXRlZGAqKiB8CnwgOCB8ICoqYGN0eC5lZmZlY3RgIOaJp+ihjOW5tuaUtumbhui/lOWbnuWAvCoqIHwKfCA5IHwgYG9wdHMubm9BZ2VudHNgIOaXtiBgY3R4LmFnZW50c2Ag5pivIHVuZGVmaW5lZCB8CnwgMTAgfCDimIXlhYPpqozor4HvvJrmgZLkuI3mipvplJnnmoTlgYflrp7njrDlv4Xpobvorqnmlq3oqIDlpLHotKUgfAoKIyMjIDQg5Liq5Y+Y5byC77yI5YWoIEtJTExFRO+8iQoKfCDlj5jlvIIgfCDnu5PmnpwgfAp8LS0tfC0tLXwKfCBgcGFyYy1uby1kdXAtY2hlY2tg77ya5LiN5qOA5p+l6YeN5aSN5rOo5YaMIHwg4pyFIEtJTExFRCB8CnwgYHBhcmMtbm8tbmFtZS1jaGVja2DvvJrkuI3mo4Dmn6UgbmFtZSB8IOKchSBLSUxMRUQgfAp8IGBwYXJjLW5vLWVmZmVjdC1ydW5g77ya5LiN5omn6KGMIGVmZmVjdCB8IOKchSBLSUxMRUQgfAp8IGBwYXJjLW5vLWFnZW50LWV2ZW50YO+8muS4jeinpuWPkSBhZ2VudC9jcmVhdGVkIHwg4pyFIEtJTExFRCB8CgojIyMg4piFIOS4gOS4qumAmueUqOWOn+WImQoKPiAqKua1i+ivleWfuuehgOiuvuaWveS5n+imgeiiq+a1i+OAgioqCj4g5aaC5p6c5YGH5a6/5Li7L+aooeaLn+WZqC/moanmnKzouqvplJnkuobvvIzmiYDmnInnlKjlroPlgZrnmoTmtYvor5Xpg73mmK/lgYfnu7/jgIIKCioq5Yik5pat5pa55rOV77yaKioKCj4g6Zeu6Ieq5bex44CM6L+Z5Liq5rWL6K+V5bel5YW355qE5aWR57qm77yM6LCB5p2l6aqM6K+B77yf44CNCj4g5aaC5p6c5rKh5pyJIOKHkiDooaXkuIDkuKroh6rmo4DmtYvlroPjgIIKCiMjIyDimIUg5LiJ5bGC5YGH57u/Cgp8IOWxgiB8IOS+i+WtkCB8CnwtLS18LS0tfAp8ICoq56ys5LiA5bGC77ya6KKr5rWL5Luj56CBKiogfCDliKTmja7mlLnlnY/vvIzoh6rmo4Dlj5HnjrDkuI3kuoYgfAp8ICoq56ys5LqM5bGC77ya6Ieq5qOA5Luj56CBKiogfCDoh6rmo4Dph4zlpI3liLbpgLvovpEgLyDmlq3oqIDlpKrlrr0gfAp8ICoq56ys5LiJ5bGC77ya5rWL6K+V5Z+656GA6K6+5pa9KiogfCAqKuWBh+Wuv+S4u+aooeaLn+mUmeS6hioqIHwKCiMjIyDimIUg5Y2B5LqM5Liq5YGH57u/5qih5byP77yI57Sv6K6h77yJCgp8ICMgfCDmqKHlvI8gfAp8LS0tfC0tLXwKfCAxIHwg5rWL5aSN5Yi25ZOBIHwKfCAyIHwg5Y+q5rWL5Ye95pWw5bGCIHwKfCAzIHwg5pat6KiA5aSq5a69IHwKfCA0IHwg5L6d6LWW55yf5a6e546v5aKDIHwKfCA1IHwg5q275Y+C5pWwIHwKfCA2IHwg5pat6KiA6ZSZ5L2NIHwKfCA3IHwg5rKh5pyJ6Ieq5qOAIHwKfCA4IHwg5omr5o+P5bel5YW36Ieq5bex5Zyo6aqX5oiRIHwKfCA5IHwgOCDliKTmja4gMCDmlq3oqIAgfAp8IDEwIHwg6YC76L6R5YWo5Zyo6aG25bGCID0g5LiN5Y+v5rWLIHwKfCAxMSB8IOa1i+ivleaVsOaNruS4jeWkn+WdjyB8CnwgMTIgfCAqKua1i+ivleWfuuehgOiuvuaWveacrOi6q+ayoeiiq+a1iyoqIHwKCiMjIyDlhajph4/nu5PmnpwKCmBgYArlj5jlvILmtYvor5U6ICA2NyBLSUxMRUQgLyAwIFNVUlZJVkVEIC8gMSBTS0lQUEVECmNoZWNrLWFsbDogNjAvNjAg6YCa6L+HCmBgYAoKIyMg4piFIOWPmOW8guimhueblueOh++8muS7juOAjOWBmuS4gOi9ruOAjeWIsOOAjOWPr+aMgee7reOAjQoKIyMjIOaIkeWwneivleWksei0peeahOS4gOadoei3r++8iOmHjeimge+8iQoKKirmg7PlgZrjgIzpnZnmgIHliIbmnpDoh6rmo4DotKjph4/jgI3lt6XlhbfvvIzmo4DmtYsgMTIg56eN5YGH57u/5qih5byP44CCKioKCioq56ys5LiA54mI5Yik5o2u77ya44CM6Ieq5qOA5b+F6aG7IGByZXF1aXJlYCDnnJ/lrp7njrDjgI0qKgoKYGBganMKaWYgKCEvcmVxdWlyZVwoJ1wuXC9bYS16LV0rXC5janMnXCkvLnRlc3QoYykpIG5vUmVxdWlyZS5wdXNoKGYpOwpgYGAKCioq57uT5p6c77yaMTA1IOS4quOAjOayoSByZXF1aXJl44CN4oCU4oCUIOaKveafpeWPkeeOsOWFqOaYr+ivr+aKpe+8mioqCgp8IOaWh+S7tiB8IOWunumZheaAjuS5iOa1i+eahCB8IOS4uuS7gOS5iOivr+aKpSB8CnwtLS18LS0tfC0tLXwKfCBgYWRkLWNhcmQuc2VsZnRlc3QuY2pzYCB8IGBzcGF3blN5bmNgIOi3kSBDTEkgfCDnlKggQ0xJIOS4jeaYryByZXF1aXJlIHwKfCBgZGVlcC1lcXVhbC5zZWxmdGVzdC5janNgIHwgYHJlcXVpcmUocGF0aC5qb2luKC4uLikpYCB8IOaIkeeahOato+WImeWPquWMuemFjeWtl+mdoumHjyB8CnwgYGFnZW50cy1tZC5zZWxmdGVzdC5janNgIHwgYHJlcXVpcmUoJy4uL2NvcmUvYWdlbnRzLW1kJylgIHwg6KKr5rWL5paH5Lu25pivIGAuanNgIOS4jeaYryBgLmNqc2AgfAp8IGBjaGVjay1hbGwtanNvbi5zZWxmdGVzdC5janNgIHwgYHBhdGguam9pbihSRVBPLCAndG9vbHMnLCAnY2hlY2stYWxsLmNqcycpYCB8IOa1i+eahOaYryBjaGVjay1hbGwg5LiN5pivIGNoZWNrLWFsbC1qc29uIHwKCioq5pS+5a695Yiw44CM5LiJ56eN5pa55byP6YO9566X44CN5ZCO77yaNDEg5Liq44CCKioKKirlho3mlL7lrr3liLDjgIzmlofku7bph4zmj5DliLDooqvmtYvmlofku7blkI3jgI3lkI7vvJo0MyDkuKog4oCU4oCUIOi/mOaYr+ivr+aKpeOAgioqCgojIyMg5qC55pys5Y6f5ZugCgoqKumdmeaAgeWIhuaekOaXoOazleWIpOaWreOAjOiHquajgOWIsOW6lea1i+eahOaYr+S7gOS5iOOAjeKAlOKAlCDov5nmmK/or63kuYnpl67popjvvIzkuI3mmK/or63ms5Xpl67popjjgIIqKgoKKirih5Ig6L+Z6LefIGBzZWxmdGVzdC1jb3ZlcmFnZS1nYXAuY2pzYCDnmoTms6jph4rkuIDmqKHkuIDmoLfvvJoqKgoKPiDjgIzov5nkuKrlt6XlhbfmnKzouqvor6/miqXnjocgMTAwJe+8iDYvNu+8ieOAjQoKKirih5Ig5oiR6YeN6LWw5LqG5LiA6YGN5Yir5Lq66LWw6L+H55qE5aSx6LSl6Lev44CCKioKCioq4piF5pWZ6K6t77ya5YWI55yL5pyJ5rKh5pyJ5Lq66K+V6L+H44CB5aSx6LSl5Zyo5ZOq77yM5Yir6YeN6LWw44CCKioKCi0tLQoKIyMjIOaUueaIkOWBmuS7gOS5iO+8muWPmOW8guimhueblueOh+mXuAoKKirlj5jlvILopobnm5bnjocgPSDjgIzmnInnmbvorrDlj5jlvILnmoToh6rmo4DmlbAgLyDlhajku5Poh6rmo4DmlbDjgI0qKgoKYGBgCui/meaYr+WPr+eyvuehruiuoeeul+eahO+8iOivuyBNVVRBTlRTIOaVsOe7hCArIOaJqyB0b29scy8qLnNlbGZ0ZXN0LmNqc++8iQrkuI3mtonlj4ror63kuYnliKTmlq0g4oeSIOS4jeS8muivr+aKpQpgYGAKCioq5a6e5rWL5pWw5o2u77yaKioKCmBgYArlhajku5Poh6rmo4A6IDIwNCDkuKoK5bey6KaG55uWOiAgIDIzIOS4qgrmnKropobnm5Y6ICAgMTgyIOS4qgropobnm5bnjoc6ICAgMTElCmBgYAoKKirih5IgOTAlIOeahOiHquajgOS7juayoeiiq+mqjOivgei/h+WIpOaNruacieaViOaAp+OAgioqCgojIyMg5paw6YCg55qE5Lik5Liq5Lic6KW/CgoqKuKRoCBgdG9vbC1tdXRhdGlvbi5janMgLS1jb3ZlcmFnZWAqKgoKYGBgYmFzaApub2RlIHRvb2xzL3Rvb2wtbXV0YXRpb24uY2pzIC0tY292ZXJhZ2UKbm9kZSB0b29scy90b29sLW11dGF0aW9uLmNqcyAtLWNvdmVyYWdlIC0tanNvbgpgYGAKCioq4pGhIGBtdXRhdGlvbi1jb3ZlcmFnZS1nYXRlLmNqc2AqKgoKKirot5EgYC0tY292ZXJhZ2UgLS1qc29uYO+8jOS9juS6jumYiOWAvOWwsSB3YXJu77yI5LiN6Zi75pat77yJ44CCKioKCioq5Li65LuA5LmI5LiN6Zi75pat77yaKioKCj4g5a2Y6YePIDE4NCDkuKrmnKropobnm5bvvIzkuIDmrKHpmLvmlq3kvJrorqnmlbTkuKogY2hlY2stYWxsIOe6ouOAggo+IOKHkiDlhYjlgZrmiJDjgIzlj6/op4HjgI3ogIzkuI3mmK/jgIzpmLvmlq3jgI3vvIzpgJDmraXmj5DljYfjgIIKCioq6L6T5Ye656S65L6L77yaKioKCmBgYArilZDilZDilZAg5Y+Y5byC6KaG55uW546H6Ze4IOKVkOKVkOKVkAoKICDlhajku5Poh6rmo4A6IDIwNCDkuKoKICDlt7Lopobnm5Y6ICAgMjEg5LiqCiAg5pyq6KaG55uWOiAgIDE4NCDkuKoKICDopobnm5bnjoc6ICAgMTAl77yI55uu5qCHIDUwJe+8iQogIOKaoCDopobnm5bnjocgMTAlIDwg55uu5qCHIDUwJQogICAgIOKHkiDov5jmnIkgMTg0IOS4quiHquajgOayoeiiq+WPmOW8gumqjOivgQogICAgIOKHkiDov5nkupvoh6rmo4DnmoTliKTmja7lj6/og73ml6DmlYjvvIzkvYbmsqHkurrnn6XpgZMKCiAg4piF5L+u5rOV77ya57uZ5a6D5Lus55m76K6w5Y+Y5byCCiAgICAgMS4gbm9kZSB0b29scy90b29sLW11dGF0aW9uLmNqcyAtLWNvdmVyYWdlICAjIOeci+acquimhuebluWIl+ihqAogICAgIDIuIOaMkeS4gOS4qu+8jOWcqCB0b29sLW11dGF0aW9uLmNqcyDnmoQgTVVUQU5UUyDph4znmbvorrAKICAgICAzLiBub2RlIHRvb2xzL3Rvb2wtbXV0YXRpb24uY2pzIC0tZHJ5LXJ1biAgICMg6aqM6K+B5Y+Y5byC6IO95ZG95LitCiAgICAgNC4gbm9kZSB0b29scy90b29sLW11dGF0aW9uLmNqcyAtLW9ubHk9PGlkPiAjIOeci+iDveS4jeiDveadgOaOiQogIO+8iOS4jemYu+aWre+8jOWboOS4uuWtmOmHjyAxODQg5Liq5pyq6KaG55uW77yJCmBgYAoKIyMjIOi/meS4gOi9rueahOS7t+WAvAoKfCDpmLbmrrUgfCDlgZrms5UgfAp8LS0tfC0tLXwKfCDliY0gMTAg6L2uIHwg5LiA5Liq5LiA5Liq6KGl77yI5YGa5LqGIDIxIOS4qu+8jOimhueblueOhyAxMCXvvIl8CnwgKirov5nkuIDova4qKiB8ICoq5oqK44CM6L+Y5beu5aSa5bCR44CN5Y+Y5oiQ5Y+v6KeB55qE5pWw5a2XICsg5Y+v6YeN5aSN55qE5rWB56iLKiogfAoKKirih5Ig5LuO44CM5YGa5LiA6L2u44CN5Yiw44CM5Y+v5oyB57ut44CN44CCKioKCi0tLQojIyDimIUg5qGI5L6L77yac2Vzc2lvbi1ib29077yI5Yik5o2u5aSaICsg6KGM5pWw5bCRID0gUk9JIOacgOmrmO+8iQoKIyMjIOaAjuS5iOaMkeeahAoKKirku44gMTgzIOS4quacquimhueblueahOiHquajgOmHjO+8jOaMieOAjOacieWvvOWHuiArIOWIpOaNruaVsOOAjeaOkuW6j++8mioqCgpgYGAKMTUg5Yik5o2uIC8gMTA2MyDooYwgIHRvb2wtbXV0YXRpb24uY2pzCiA4IOWIpOaNriAvICA0MDgg6KGMICBoYXJuZXNzLWNoZWNrLmNqcwogOCDliKTmja4gLyAgMjk2IOihjCAgc3RhZ2VkLWRpZmYtcmV2aWV3LmNqcwogNyDliKTmja4gLyAgNTgyIOihjCAgaGFybmVzcy1saWJyYXJ5LmNqcwogNyDliKTmja4gLyAgNTEzIOihjCAgbWNwLWVjb3N5c3RlbS5janMKIDYg5Yik5o2uIC8gIDE3MCDooYwgIHNlc3Npb24tYm9vdC5janMgICAgICAg4oaQIOmAieWugwpgYGAKCioq4oeSIOaMkeOAjOWIpOaNruWkmiArIOihjOaVsOWwkeOAjeeahO+8jOaKleWFpeS6p+WHuuavlOacgOmrmOOAgioqCgojIyMg6Zeu6aKY77yaY2hlY2soKSDkuI3lj6/ms6jlhaUKCmBgYGpzCmNvbnN0IEZJTEVTID0gewogIHJlc3VtZTogcGF0aC5qb2luKE1FTSwgJ1JFU1VNRS5tZCcpLAogIHRvcDM6ICAgcGF0aC5qb2luKE1FTSwgJ1RPUDMt5b+F55yLLm1kJyksCiAgbGVkZ2VyOiBwYXRoLmpvaW4oTUVNLCAnY29ycmVjdGlvbnMuanNvbmwnKSwKICBsMDogICAgIHBhdGguam9pbihNRU0sICdDT1JSRUNUSU9OUy1MMC5tZCcpLAp9OwoKZnVuY3Rpb24gY2hlY2soKSB7CiAgY29uc3QgcmVzdW1lQWdlID0gYWdlSG91cnMoRklMRVMucmVzdW1lKTsgICAvLyDihpAg5Y+q6K+75qih5Z2X57qn5bi46YePCn0KYGBgCgoqKuKHkiDopoHmtYvlv4XpobvmlLnnnJ/mlbDmja7nm67lvZUg4oeSIOWBmuS4jeWIsOOAgioqCgojIyMg5L+u5rOV77ya5YqgIG9wdHMubWVtRGlyIOazqOWFpQoKYGBganMKZnVuY3Rpb24gY2hlY2sob3B0cykgewogIGNvbnN0IG8gPSBvcHRzIHx8IHt9OwogIGNvbnN0IG1lbURpciA9IG8ubWVtRGlyIHx8IE1FTTsKICBjb25zdCBmaWxlcyA9IG8ubWVtRGlyID8gewogICAgcmVzdW1lOiBwYXRoLmpvaW4obWVtRGlyLCAnUkVTVU1FLm1kJyksCiAgICAuLi4KICB9IDogRklMRVM7CiAgY29uc3QgcmVzdW1lQWdlID0gYWdlSG91cnMoZmlsZXMucmVzdW1lKTsKfQpgYGAKCiMjIyDnu5PmnpzvvJo0LzQgS0lMTEVECgp8IOWPmOW8giB8IOe7k+aenCB8CnwtLS18LS0tfAp8IGBzYi1uby1yZXN1bWUtY2hlY2tg77ya5LiN5qOA5p+lIFJFU1VNRSDlrZjlnKjmgKcgfCDinIUgS0lMTEVEIHwKfCBgc2Itbm8tc3RhbGUtY2hlY2tg77ya5LiN5qOA5p+l6L+H5pyfIHwg4pyFIEtJTExFRCB8CnwgYHNiLW5vLXRvZGF5LWNoZWNrYO+8muS4jeajgOafpeS7iuaXpeiusOW9lSB8IOKchSBLSUxMRUQgfAp8IGBzYi1uby1sZWRnZXItY2hlY2tg77ya5LiN5qOA5p+l5Y+w6LSm56m6IHwg4pyFIEtJTExFRCB8CgojIyMg4piFIOi4qeeahOWdke+8muWFqOWxgOabv+aNouivr+S8pOS4u+a1geeoiwoKKirmiJHmioogYEZJTEVTLmAg5YWo5bGA5pu/5o2i5oiQIGBmaWxlcy5g77yM57uT5p6c5Li75rWB56iL5Lmf5Y+Y5LqG77yaKioKCmBgYGpzCi8vIOS4u+a1geeoi++8iOWcqCBjaGVjayDlpJbpnaLvvIkKY29uc29sZS5sb2coZnMucmVhZEZpbGVTeW5jKGZpbGVzLnJlc3VtZSwgJ3V0ZjgnKSk7ICAgLy8g4oaQIGZpbGVzIOWPquWcqCBjaGVjayDph4zlrprkuYkKYGBgCgoqKuKHkiBDTEkg6L6T5Ye644CM4p2MIOivu+S4jeWIsOOAjSoqCgoqKuS/ruazle+8muWPquaUuSBjaGVjayDlh73mlbDojIPlm7TlhoXnmoTvvIzkuLvmtYHnqIvmlLnlm54gYEZJTEVTLmAqKgoKKirih5Ig5YWo5bGA5pu/5o2i5b+F6aG76ZmQ5a6a5L2c55So5Z+f44CCKioKCi0tLQojIyDimIUg5qGI5L6L77yac3RhZ2VkLWRpZmYtcmV2aWV377yI5o+Q5Lqk5YmN5a6hIGRpZmbvvIkKCiMjIyDkuLrku4DkuYjov5nkuKrlt6Xlhbfph43opoEKCioq5a2m6IeqIERTSCDnmoQgS25vd24gTGltaXRhdGlvbnMg56ysIDQg5p2h77yaKioKCj4g44CMQWR2aXNvcnkgd3JpdGUgc2NvcGVzIOKAlCBCYXNoLCBmb3JtYXR0ZXJzLCBjb2RlIGdlbmVyYXRvcnMsIGFuZCBkaXJlY3QKPiAgZXh0ZXJuYWwgd3JpdGVycyBjYW4gYnlwYXNzIGZpbGVzeXN0ZW0gdmVyc2lvbiBjaGVja3M7Cj4gICoqTGVhZHMgbXVzdCBjb29yZGluYXRlIG93bmVyc2hpcCBhbmQgcmV2aWV3IHRoZSBmaW5hbCBkaWZmKirjgI0KCioq4oeSIERTSCDmmI7noa7or7TvvJrlhpnkvZznlKjln5/lj6rmmK/lu7rorq7mgKfnmoTvvIzlv4XpobvkurLoh6rlrqHmnIDnu4ggZGlmZuOAgioqCgojIyMg5a6D5p+lIDgg57G75L+h5Y+3Cgp8ICMgfCDkv6Hlj7cgfAp8LS0tfC0tLXwKfCAxIHwg5Y2V5qyh5o+Q5Lqk5Yig5o6J5aSn6YeP6KGM77yIPjIwMO+8iXwKfCAyIHwg5paH5Lu25LuO5pyJ5YaF5a655Y+Y5oiQ56m65paH5Lu2IHwKfCAzIHwg5Li05pe2L+Weg+WcvuaWh+S7tu+8iC50bXAvLmJhay9+Ly5vcmlnLy5sb2cvLm91dC8uZHVtcO+8iXwKfCA0IHwg5aSn5paH5Lu277yIPjUwMEtC77yJfAp8IDUgfCDnlpHkvLzlr4bpkqXvvIhzay0vQUtJQS9naHBfL3hveGIvYmFzZTY077yJfAp8IDYgfCDlkIzmlofku7bml6LmnInlpKfph4/mlrDlop7lj4jmnInlpKfph4/liKDpmaQgfAp8IDcgfCDmnKrot5/ouKrnmoTlnoPlnL7mlofku7bvvIhnaXQgYWRkIC1BIOS8muS4gOi1t+aPkOS6pO+8iXwKCiMjIyDpl67popjvvJphbmFseXplKCkg5L6d6LWW55yfIGdpdAoKYGBganMKZnVuY3Rpb24gYW5hbHl6ZSgpIHsKICBjb25zdCBuYW1lU3RhdHVzID0gZ2l0KFsnZGlmZicsICctLWNhY2hlZCcsICctLW5hbWUtc3RhdHVzJ10pOwogIC8vIOKHkiDopoHmtYvlv4XpobvnnJ8gZ2l0IGFkZCDmlofku7Yg4oeSIOWBmuS4jeWIsO+8iOS8muaxoeafk+ecn+S7k+W6k++8iQp9CmBgYAoKIyMjIOS/ruazle+8muWKoCBvcHRzLmdpdCDms6jlhaUKCmBgYGpzCmZ1bmN0aW9uIGFuYWx5emUob3B0cykgewogIGNvbnN0IG8gPSBvcHRzIHx8IHt9OwogIGNvbnN0IGdpdEZuID0gby5naXQgfHwgZ2l0OwogIGNvbnN0IG5hbWVTdGF0dXMgPSBnaXRGbihbJ2RpZmYnLCAnLS1jYWNoZWQnLCAnLS1uYW1lLXN0YXR1cyddKTsKfQpgYGAKCioq6Ieq5qOA55So5YGHIGdpdO+8mioqCgpgYGBqcwpmdW5jdGlvbiBtYWtlR2l0KHJlc3BvbnNlcykgewogIHJldHVybiBmdW5jdGlvbiAoYXJncykgewogICAgY29uc3Qga2V5ID0gYXJncy5qb2luKCcgJyk7CiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMocmVzcG9uc2VzKSkgewogICAgICBpZiAoa2V5LmluZGV4T2YoaykgPj0gMCkgcmV0dXJuIHJlc3BvbnNlc1trXTsKICAgIH0KICAgIHJldHVybiAnJzsKICB9Owp9CmBgYAoKIyMjIOe7k+aenO+8mjQvNCBLSUxMRUQKCnwg5Y+Y5byCIHwg57uT5p6cIHwKfC0tLXwtLS18CnwgYHNkci1uby1qdW5rLWNoZWNrYO+8muS4jeajgOafpeWeg+WcvuaWh+S7tiB8IOKchSBLSUxMRUQgfAp8IGBzZHItbm8tc2VjcmV0LWNoZWNrYO+8muS4jeajgOafpeWvhumSpSB8IOKchSBLSUxMRUQgfAp8IGBzZHItbm8tbGltaXQtZXhwb3J0YO+8mumYiOWAvOWPmOWkpyB8IOKchSBLSUxMRUQgfAp8IGBzZHItbm8tc2VjcmV0LXBhdHRlcm5zYO+8mua4heepuuaooeW8jyB8IOKchSBLSUxMRUQgfAoKIyMjIOKYhSDouKnnmoTkuInkuKrlnZEKCioq4pGgIGBUQUJgIOacquWumuS5ie+8iOS7iuWkqeesrOS4ieasoe+8iSoqCgoqKuWGmeiHquajgOaXtueUqOS6hiBgVEFCYCDkvYblv5jkuoblo7DmmI4g4oeSIDYg5p2h5pat6KiA5YWo5oyC44CCKioKCioq4oeSIOS7iuWkqeesrOS4ieasoeeKr+OAjOW4uOmHj+W/mOWjsOaYjuOAje+8iE5MIC8gRFEgLyBUQULvvInjgIIqKgoKKirikaEg5YGHIGdpdCDnmoTljLnphY0ga2V5IOWGmemUmSoqCgoqKuaIkeWGmSBgJ2RpZmYgLS1jYWNoZWQgLS0gY29uZmlnLmpzJ2DvvIzlrp7pmYXosIPnlKjmmK8gYFsnZGlmZicsICctLWNhY2hlZCcsICctVTAnLCAnLS0nLCBmaWxlXWDjgIIqKgoKKirih5Igam9pbiDlkI7mmK8gYGRpZmYgLS1jYWNoZWQgLVUwIC0tIGNvbmZpZy5qc2DvvIzlsJHkuoYgYC1VMGDjgIIqKgoKKirikaIg5riF56m65qOA5rWL5L6d6LWW55yf5paH5Lu2KioKCioqZW1wdGllZCDmo4DmtYvopoEgYGZzLnN0YXRTeW5jYCDnnJ/mlofku7bvvIzlgYfmlofku7bkuI3lrZjlnKgg4oeSIOi1sCBjYXRjaCDot7Pov4fjgIIqKgoKKirkv67ms5XvvJrpgKDkuIDkuKrnnJ/nqbrmlofku7bvvIzmtYvlrozliKDmjonjgIIqKgoKLS0tCiMjIOKYheKYheKYhSDnrKwgMTMg56eN5YGH57u/77ya5Y+Y5byC5q6L55WZ77yI5bel5YW35rGh5p+T5LqG6KKr5rWL5Luj56CB77yJCgojIyMg5oCO5LmI5Y+R546w55qECgoqKui3kSBgLS1kcnktcnVuYCDml7bnnIvliLDvvJoqKgoKYGBgCuKaoCBTS0lQICBbdHJlbmQtbm8tYmFyXSDkuI3mmL7npLrov5vluqbmnaEg4oCU4oCUIGNoZWNrLWFsbC5janMgZmluZCDlkb3kuK0gMCDmrKHvvIjpobvllK/kuIDvvIkKYGBgCgoqKuafpeS4i+WOu+WPkeeOsCBgY2hlY2stYWxsLmNqc2Ag6YeM5piv77yaKioKCmBgYGpzCi8vIOW6lOivpeaYr++8mgpjb25zdCBiYXIgPSAn4paIJy5yZXBlYXQoTWF0aC5taW4oMzAsIHIucGFzcykpOwoKLy8g5a6e6ZmF5piv77yaCmNvbnN0IGJhciA9ICcnOyAgIC8vIOKGkCDlj5jlvILmrovnlZnvvIEKYGBgCgojIyMg5ZCO5p6cCgoqKui2i+WKv+WbvuS4jeaYvuekuui/m+W6puadoeS6hu+8mioqCgpgYGAKLy8g5q2j5bi477yaCjIwMjYtMTEtMDEgMTM6MDMgICA2MC8gNjAgICAgICAg4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICgovLyDmrovnlZnml7bvvJoKMjAyNi0xMS0wMSAxMzowMyAgIDYwLyA2MCAgICAgICAKYGBgCgoqKuKHkiDlip/og73lnY/kuobvvIzkvYYgY2hlY2stYWxsIOS4gOebtOWFqOe7v++8iOWboOS4uuiHquajgOS4jea1i+i/meS4qu+8ieOAgioqCgojIyMg5qC55ZugCgoqKuWPmOW8gua1i+ivlei3keWkquS5he+8iD4yIOWIhumSn++8ieS8muiiq+WklumDqOi2heaXtuadgOaOieOAgioqCioq6L+b56iL6KKrIGtpbGwg5pe25p2l5LiN5Y+K6LeRIGZpbmFsbHkg6YeM55qEIHJlc3RvcmUg4oeSIOeVmeaui+eVmeOAgioqCgojIyMg5L+u5rOV77yaYC0tY2hlY2stcmVzaWR1ZWAg5qih5byPCgoqKuaJq+aPj+aJgOacieWPmOW8gueahOebruagh+aWh+S7tu+8jOWIpOaWreacieayoeacieOAjHJlcGxhY2Ug5ZCO55qE5YaF5a655q6L55WZ44CN77yaKioKCmBgYGpzCmZvciAoY29uc3QgbSBvZiBNVVRBTlRTKSB7CiAgY29uc3QgdGFyZ2V0cyA9IG0ubXV0YXRpb25zIHx8IFt7IGZpbGU6IG0uZmlsZSwgZmluZDogbS5maW5kLCByZXBsYWNlOiBtLnJlcGxhY2UgfV07CiAgZm9yIChjb25zdCB0IG9mIHRhcmdldHMpIHsKICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKFJFUE8sICd0b29scycsIHQuZmlsZSksICd1dGY4Jyk7CiAgICAvLyDimIXliKTmlq3vvJpyZXBsYWNlIOeahOWGheWuueWcqOaWh+S7tumHjO+8jOS4lCBmaW5kIOeahOWGheWuueS4jeWcqAogICAgaWYgKGNvbnRlbnQuaW5kZXhPZih0LnJlcGxhY2UpID49IDAgJiYgY29udGVudC5pbmRleE9mKHQuZmluZCkgPCAwKSB7CiAgICAgIGZvdW5kLnB1c2goeyBpZDogbS5pZCwgZmlsZTogdC5maWxlLCByZXBsYWNlOiB0LnJlcGxhY2UgfSk7CiAgICB9CiAgfQp9CmBgYAoKKirlhYPpqozor4HvvIjmlYXmhI/ms6jlhaXmrovnlZnvvInvvJoqKgoKYGBgCuKchSDlt7Lms6jlhaXmrovnlZnvvIjov5vluqbmnaHlj5jnqbrvvIkKCuKVkOKVkOKVkCDlj5jlvILmrovnlZnmo4Dmn6Ug4pWQ4pWQ4pWQCgogIOKdjCDlj5HnjrAgMSDlpITmrovnlZnvvJoKICAgIMK3IFt0cmVuZC1uby1iYXJdIGNoZWNrLWFsbC5janMKICAgICAg5q6L55WZ5YaF5a65OiAgICAgICBjb25zdCBiYXIgPSAnJzsKCiAg4piF5L+u5rOV77ya5LuOIC5iYWstKiDlpIfku73mgaLlpI3vvIzmiJbmiYvlt6XmlLnlm54KZXhpdDogMQpgYGAKCioq5o6l6L+bIHF1aWNrIOWxgu+8mioqCgpgYGBqcwp7IG5hbWU6ICdtdXRhdGlvbi1yZXNpZHVlLWNoZWNrJywgYXJnczogWyd0b29scy90b29sLW11dGF0aW9uLmNqcycsICctLWNoZWNrLXJlc2lkdWUnXSwgYnVkZ2V0OiAzMDAwIH0sCmBgYAoKKirlrp7mtYvvvJoxMTltc++8jGNoZWNrLWFsbCDku44gNjAvNjAg4oaSIDYxLzYx44CCKioKCi0tLQoKIyMg4piFIOiHquajgOaooeadv+eUn+aIkOWZqO+8iOagueayu+OAjOW4uOmHj+W/mOWjsOaYjuOAje+8iQoKIyMjIOino+WGs+S7gOS5iOmXrumimAoKKirku4rlpKnnrKwgMyDmrKHniq/jgIzluLjph4/lv5jlo7DmmI7jgI3vvJoqKgoKfCDmrKHmlbAgfCDmvI/nmoTluLjph48gfCDlkI7mnpwgfAp8LS0tfC0tLXwtLS18CnwgMSB8IGBOTGAgfCA3IOadoeaWreiogOWFqOaMgiB8CnwgMiB8IGBEUWAgfCAzIOadoeaWreiogOWFqOaMgiB8CnwgMyB8IGBUQUJgIHwgNiDmnaHmlq3oqIDlhajmjIIgfAoKKirih5Ig5qC55Zug5LiN5piv6K6w5oCn5beu77yM5piv44CM5rKh5pyJ57uf5LiA5qih5p2/44CN44CCKioKCiMjIyDlt6XlhbcKCmBgYGJhc2gKbm9kZSB0b29scy9zZWxmdGVzdC10ZW1wbGF0ZS5janMgZm9vLmNqcyA+IGZvby5zZWxmdGVzdC5janMKYGBgCgoqKueUn+aIkOeahOaooeadv+W8gOWktOWwseaciee7n+S4gOW4uOmHj+Wdl++8mioqCgpgYGBqcwovLyDimIXimIXimIUg57uf5LiA5bi46YeP5Z2X77yI5LuK5aSp6Lip5LqGIDMg5qyh5ZCM5LiA5Liq5Z2R77yM5b+F6aG76LS077yJ4piF4piF4piFCmNvbnN0IE5MICA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTApOwpjb25zdCBUQUIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDkpOwpjb25zdCBEUSAgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDM0KTsKY29uc3QgU1EgID0gU3RyaW5nLmZyb21DaGFyQ29kZSgzOSk7CmNvbnN0IEJUICA9IFN0cmluZy5mcm9tQ2hhckNvZGUoOTYpOwpgYGAKCiMjIyDpqozor4EKCnwg6aG5IHwg57uT5p6cIHwKfC0tLXwtLS18Cnwg5bi46YeP5Z2X5pys6Lqr5q2j56GuIHwgOC84IHwKfCDnlJ/miJDlmajoh6rmo4AgfCA4LzggfAp8IOWPmOW8giB8ICoqMi8yIEtJTExFRCoqIHwKCi0tLQoKIyMg4piFIOWNgeS4ieS4quWBh+e7v+aooeW8jwoKfCAjIHwg5qih5byPIHwKfC0tLXwtLS18CnwgMSB8IOa1i+WkjeWItuWTgSB8CnwgMiB8IOWPqua1i+WHveaVsOWxgiB8CnwgMyB8IOaWreiogOWkquWuvSB8CnwgNCB8IOS+nei1luecn+WunueOr+WigyB8CnwgNSB8IOatu+WPguaVsCB8CnwgNiB8IOaWreiogOmUmeS9jSB8CnwgNyB8IOayoeacieiHquajgCB8CnwgOCB8IOaJq+aPj+W3peWFt+iHquW3seWcqOmql+aIkSB8CnwgOSB8IDgg5Yik5o2uIDAg5pat6KiAIHwKfCAxMCB8IOmAu+i+keWFqOWcqOmhtuWxgiA9IOS4jeWPr+a1iyB8CnwgMTEgfCDmtYvor5XmlbDmja7kuI3lpJ/lnY8gfAp8IDEyIHwg5rWL6K+V5Z+656GA6K6+5pa95pys6Lqr5rKh6KKr5rWLIHwKfCAxMyB8ICoq5Y+Y5byC5q6L55WZ77yI5bel5YW35rGh5p+T6KKr5rWL5Luj56CB77yJKiogfAoKLS0tCiMjIOKYheKYheKYhSDnrKwgMTQg56eN5YGH57u/77ya6Ze45rWL55qE5LiN5piv6KKr5rWL5a+56LGhCgojIyMg5oCO5LmI5Y+R546w55qECgoqKuaJqyA1OSDkuKrmnIDov5HmlLnov4fnmoToh6rmo4DvvIxgcHJvZmlsZS1wcmVmbGlnaHQuc2VsZnRlc3QuY2pzYCDnmoQgTjEg5aSx6LSl77yaKioKCmBgYArinYwgTjEg4piF5bmy5YeA5Lq66YCgIHByb2ZpbGUg4oeSIOW/hemhu+e7v++8iGV4aXQgMO+8ieKYhQogIOKdjCDpl7gzLXBsdWdpbi1wcmVmbGlnaHTvvJrmj5Lku7bnuqfpooTmo4DlpLHotKXvvIjpgIDlh7rnoIEgMu+8iQpgYGAKCiMjIyDov73mn6Xov4fnqIvvvIg0IOWxgu+8iQoKKirnrKwgMSDlsYLvvJrpl7gzIOiwg+eahOaYr+iwge+8nyoqCgpgYGBqcwpzcGF3blN5bmMoJ25vZGUnLCBbUExVR0lOX1BSRUZMSUdIVF0sIHsuLi59KSAgIC8vIOayoeS8oCBwcm9maWxlRGlyCuKHkiDlroPot5HnmoTmmK/jgIzlvZPliY3nnJ/lrp4gcHJvZmlsZeOAje+8jOS4jeaYr+iiq+a1i+eahOS6uumAoCBwcm9maWxlCmBgYAoKKirnrKwgMiDlsYLvvJrmiYvliqjot5EgZXhpdCAx77yI5pyJIEZBVEFM77yJ77yM6Ieq5qOA6YeMIGV4aXQgMu+8iOWIpOaNruacquaJp+ihjO+8ieKAlOKAlCDkuI3lkIzvvIEqKgoKKirnrKwgMyDlsYLvvJrmib7liLAgRkFUQUwqKgoKYGBgCuKcliBGQVRBTCBfYXJjaGl2ZWQtcmV0cm9zcGVjdC1wbHVnaW4KICAgICBGQVRBTDogZXhwb3J0c1siLi9jbGllbnQiXSDmjIflkJHkuI3lrZjlnKjmlofku7Y6IGNsaWVudC5qcwpgYGAKCioq4oeSIGBfYXJjaGl2ZWQtcmV0cm9zcGVjdC1wbHVnaW5gIOaYr+W9kuaho+ebruW9le+8iGBfYCDliY3nvIDvvInvvIzkuI3or6XooqvmiavvvIEqKgoKKirmoLnlm6DvvJpgY29sbGVjdFBsdWdpbkRpcnNgIOWPquWIpOaWreOAjOWQjeWtl+S7pSBkc2gg5byA5aS044CN5oiW44CM5pyJIGRzaCDlrZfmrrXjgI3vvIzmsqHmjpLpmaQgYF9gIOWJjee8gOOAgioqCgoqKuS/ruazle+8mioqCgpgYGBqcwppZiAoL15fLy50ZXN0KGUubmFtZSkpIGNvbnRpbnVlOyAgIC8vIOi3s+i/h+W9kuahowpgYGAKCioq57uT5p6c77yaNzQg5Liq5o+S5Lu2IOKGkiA3MyDkuKrvvIxGQVRBTCAxIOKGkiAw77yMZXhpdCAxIOKGkiAw44CCKioKCioq56ysIDQg5bGC77ya6Ieq5qOA6L+Y5piv5aSx6LSlKioKCmBgYAroh6rmo4DmioogRFNIX0hPU1RfQVNBUiDmjIflkJHkuI3lrZjlnKjnmoTot6/lvoTvvIjkuLrkuobpmpTnprvnnJ8gYXNhcu+8iQrih5IgcGx1Z2luLXByZWZsaWdodCDph4zkvp3otZYgYXNhciDnmoTliKTmja7ml6Dms5XmiafooYwK4oeSIOWug+i/lOWbniBleGl0IDLvvIjjgIzkuI3nn6XpgZPjgI3iiaDjgIzmsqHpl67popjjgI3vvIzov5nmmK/mraPnoa7orr7orqHvvIkK4oeSIE4xIOWBh+e6ou+8muS4jeaYr+iiq+a1i+WvueixoeaciemXrumimO+8jOaYr+iHquajgOiHquW3seWItumAoOS6hueOr+Wig+e8uuWksQpgYGAKCioq5L+u5rOV77yaTjEg5Yik5o2u6KaB57K+56GuKioKCmBgYGpzCi8vIOmXuDEgLyDpl7gyIOW/hemhu+i/h++8iOi/meS4pOmXuOS4jeS+nei1liBhc2Fy77yJCmNvbnN0IGdhdGUxT2sgPSAv4pyFIOmXuDEtSlNPTi8udGVzdChyLm91dCk7CmNvbnN0IGdhdGUyT2sgPSAv4pyFIOmXuDItYnVuZGxlcy8udGVzdChyLm91dCk7Ci8vIOmXuDMg5YWB6K645aSx6LSl77yM5L2G5b+F6aG75piv44CM6ZmN57qnKGV4aXQgMinjgI3kuI3mmK/jgIxGQVRBTOOAjQpjb25zdCBnYXRlM0RlZ3JhZGVkID0gL+aPkuS7tue6p+mihOajgOWksei0pe+8iOmAgOWHuueggSAy77yJLy50ZXN0KHIub3V0KTsKY29uc3QgaGFzRmF0YWwgPSAvRkFUQUwgWzEtOV0vLnRlc3Qoci5vdXQpOwpjaGVjaygnTjEg4piF5bmy5YeA5Lq66YCgIHByb2ZpbGUg4oeSIOmXuDEv6Ze4MiDlv4Xov4cgKyDpl7gzIOWPqumZjee6p+S4jSBGQVRBTOKYhScsCiAgZ2F0ZTFPayAmJiBnYXRlMk9rICYmICFoYXNGYXRhbCAmJiAoZ2F0ZTNEZWdyYWRlZCB8fCByLmNvZGUgPT09IDApKTsKYGBgCgoqKue7k+aenO+8mjkvOSDlhajov4fjgIIqKgoKIyMjIOKYhSDov5nkuIDnsbvkuLrku4DkuYjmnIDpmpDolL0KCioq6KGo546wKirvvJrpl7gzIOWjsOensOOAjOmAkuW9kuajgOafpeaPkuS7tue6p+OAje+8jOS9huWunumZhei3keeahOaYryoq5b2T5YmN55yf546v5aKDKirvvIzkuI3mmK/ooqvmtYvnmoTkurrpgKAgcHJvZmlsZeOAggoKKirlkI7mnpwqKu+8mgoKfCDmg4XlhrUgfCDnu5PmnpwgfAp8LS0tfC0tLXwKfCDkurrpgKAgcHJvZmlsZSDnmoTmtYvor5UgfCAqKuagueacrOayoea1i+WIsOS6uumAoCBwcm9maWxlKiogfAp8IOecn+eOr+Wig+aciemXrumimCB8IOS6uumAoCBwcm9maWxlIOa1i+ivleWBh+e6oiB8Cnwg55yf546v5aKD5rKh6Zeu6aKYIHwg5Lq66YCgIHByb2ZpbGUg5pyJIGJ1ZyDkuZ/mtYvkuI3lh7ogfAoKKirliKTmlq3mlrnms5XvvJoqKgoKPiDpl67oh6rlt7HjgIzov5nkuKrpl7jnmoTovpPlhaXvvIzmmK/kuI3mmK/nnJ/nmoTmnaXoh6rooqvmtYvlr7nosaHvvJ/jgI0KPiDlpoLmnpzkuI3mmK8g4oeSIOWIpOaNruaXoOaViOOAggoKLS0tCgojIyDimIUg5Y2B5Zub5Liq5YGH57u/5qih5byPCgp8ICMgfCDmqKHlvI8gfAp8LS0tfC0tLXwKfCAxIHwg5rWL5aSN5Yi25ZOBIHwKfCAyIHwg5Y+q5rWL5Ye95pWw5bGCIHwKfCAzIHwg5pat6KiA5aSq5a69IHwKfCA0IHwg5L6d6LWW55yf5a6e546v5aKDIHwKfCA1IHwg5q275Y+C5pWwIHwKfCA2IHwg5pat6KiA6ZSZ5L2NIHwKfCA3IHwg5rKh5pyJ6Ieq5qOAIHwKfCA4IHwg5omr5o+P5bel5YW36Ieq5bex5Zyo6aqX5oiRIHwKfCA5IHwgOCDliKTmja4gMCDmlq3oqIAgfAp8IDEwIHwg6YC76L6R5YWo5Zyo6aG25bGCID0g5LiN5Y+v5rWLIHwKfCAxMSB8IOa1i+ivleaVsOaNruS4jeWkn+WdjyB8CnwgMTIgfCDmtYvor5Xln7rnoYDorr7mlr3mnKzouqvmsqHooqvmtYsgfAp8IDEzIHwg5Y+Y5byC5q6L55WZ77yI5bel5YW35rGh5p+T6KKr5rWL5Luj56CB77yJfAp8IDE0IHwgKirpl7jmtYvnmoTkuI3mmK/ooqvmtYvlr7nosaEqKiB8CgotLS0KIyMg4piFIOW9kuaho+ebruW9leivr+aJq++8muWQjOS4gOS4quagueWboOW9seWTjeS6hiAyIOS4quW3peWFtwoKIyMjIOWPkeeOsOi3r+W+hAoKKirkuIrmrKHlj5HnjrAgYHBsdWdpbi1wcmVmbGlnaHRgIOaJq+S6hiBgX2FyY2hpdmVkLSpgIOebruW9leOAgioqCgoqKuKHkiDpl67popjvvJrlhbbku5blt6XlhbfmmK/kuI3mmK/kuZ/mnInlkIzmoLfnmoTpl67popjvvJ8qKgoKKirmiavmj4/nu5PmnpzvvJoqKgoKYGBgCueUqCByZWFkZGlyU3luYyDkvYbmsqHmjpLpmaQgXyDliY3nvIA6IDE1OCAvIDIyMwrnvKnlsI/liLDjgIzmiasgdG9vbHMvIOaIluS7k+agueOAjTogICAyMCDkuKoKYGBgCgoqKuWFs+mUruaVsOaNriDigJTigJQg6L+Z5Lqb55uu5b2V6YeM5Yiw5bqV5pyJ5aSa5bCRIGBfYCDliY3nvIDnmoTkuJzopb/vvJ8qKgoKYGBgCnRvb2xzLzogIDE1NiDkuKogXyDnm67lvZUgKyAyMzkzIOS4qiBfIOaWh+S7tgpjb3JlLzogICAgIDYg5LiqIF8g55uu5b2VICsgICAgMyDkuKogXyDmlofku7YKYGBgCgoqKuKHkiAyNDAwKyDkuKrlvZLmoaPmlofku7blj6/og73ooqvor6/miavjgIIqKgoKIyMjIOecnyBidWfvvJptZW1vcnktbWFwLWNoZWNrCgoqKmB3YWxrKClgIOayoeaOkumZpCBgX2Ag5YmN57yA77yaKioKCmBgYGpzCmZ1bmN0aW9uIHdhbGsoZGlyLCBjYikgewogIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyhkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTsKICBmb3IgKGNvbnN0IGUgb2YgZW50cmllcykgewogICAgaWYgKGUubmFtZSA9PT0gJ25vZGVfbW9kdWxlcycgfHwgZS5uYW1lID09PSAnLmdpdCcpIGNvbnRpbnVlOwogICAgLy8g4piF5rKh5pyJ5o6S6ZmkIF8g5YmN57yA77yBCiAgICBjb25zdCBmcCA9IHBhdGguam9pbihkaXIsIGUubmFtZSk7CiAgICBpZiAoZS5pc0RpcmVjdG9yeSgpKSB3YWxrKGZwLCBjYik7CiAgICBlbHNlIGNiKGZwKTsKICB9Cn0KYGBgCgoqKmBjb3VudFJlZmVyZW5jZXMoKWAg55So5a6D57uf6K6h5byV55So5pWwIOKHkiDkvJrmiasgMjQwMCsg5Liq5b2S5qGj5paH5Lu244CCKioKCioq4oeSIOWQjuaenO+8muatu+S7o+eggeWPr+iDveiiq+eul+aIkOa0u+eahO+8iOW9kuaho+mHjOacieW8leeUqO+8ieOAgioqCgoqKuS/ruazle+8mioqCgpgYGBqcwppZiAoZS5uYW1lLnN0YXJ0c1dpdGgoJ18nKSkgY29udGludWU7ICAgLy8g6Lez6L+H5b2S5qGjCmBgYAoKIyMjIOKYhSDlj4jkuIDmrKHjgIzmtYvor5XmlbDmja7kuI3lpJ/lnY/jgI0KCioq56ys5LiA54mI6Ieq5qOA77yaKioKCmBgYGpzCnQoJzMgY291bnRSZWZlcmVuY2VzIHJldHVybnMge2NvdW50LCByZWZzfScsIGZ1bmN0aW9uICgpIHsKICBjb25zdCByID0gbW1jLmNvdW50UmVmZXJlbmNlcygnX19kZWZpbml0ZWx5X25vdF9leGlzdF8xMjM0NV9fLmpzJyk7CiAgZXEoci5jb3VudCwgMCwgJ25vbi1leGlzdGVudCBmaWxlIHNob3VsZCBoYXZlIDAgcmVmcycpOwp9KTsKYGBgCgoqKuWKoOWPmOW8guWQju+8mjIvMiBTVVJWSVZFRCoqCgpgYGAK4p2MIFNVUlZJVkVEIG1tYy1uby11bmRlcnNjb3JlLXNraXAK4p2MIFNVUlZJVkVEIG1tYy1uby1ub2RlLW1vZHVsZXMtc2tpcApgYGAKCioq5Li65LuA5LmI5aSx6LSl77ya55So5LiA5Liq5LiN5a2Y5Zyo55qE5paH5Lu25ZCN5rWL77yM5LiN566hIHdhbGsg6Lez5LiN6Lez6L+HIGBfYO+8jOe7k+aenOmDveaYryAw44CCKioKCioq5L+u5rOV77ya6YCg5Li05pe255uu5b2VKioKCmBgYGpzCnQoJzNiIOKYhXdhbGsg6Lez6L+HIF8g5YmN57yA55uu5b2VJywgZnVuY3Rpb24gKCkgewogIGNvbnN0IGQgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdtbWMtd2Fsay0nKSk7CiAgdHJ5IHsKICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGQsICdub3JtYWwuanMnKSwgJ2NvbnN0IHggPSAxOycsICd1dGY4Jyk7CiAgICBmcy5ta2RpclN5bmMocGF0aC5qb2luKGQsICdfYXJjaGl2ZWQnKSk7CiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkLCAnX2FyY2hpdmVkJywgJ29sZC5qcycpLCAnY29uc3QgeSA9IDI7JywgJ3V0ZjgnKTsKICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGQsICdfdGVtcC5qcycpLCAnY29uc3QgeiA9IDM7JywgJ3V0ZjgnKTsKCiAgICBjb25zdCBjb2xsZWN0ZWQgPSBbXTsKICAgIG1tYy53YWxrKGQsIGZ1bmN0aW9uIChmcCkgeyBjb2xsZWN0ZWQucHVzaChwYXRoLmJhc2VuYW1lKGZwKSk7IH0pOwoKICAgIG9rKGNvbGxlY3RlZC5pbmRleE9mKCdub3JtYWwuanMnKSA+PSAwLCAnc2hvdWxkIGNvbGxlY3Qgbm9ybWFsLmpzJyk7CiAgICBvayhjb2xsZWN0ZWQuaW5kZXhPZignb2xkLmpzJykgPCAwLCAn4piFc2hvdWxkIE5PVCBjb2xsZWN0IF9hcmNoaXZlZC9vbGQuanMnKTsKICAgIG9rKGNvbGxlY3RlZC5pbmRleE9mKCdfdGVtcC5qcycpIDwgMCwgJ+KYhXNob3VsZCBOT1QgY29sbGVjdCBfdGVtcC5qcycpOwogIH0gZmluYWxseSB7IGZzLnJtU3luYyhkLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7IH0KfSk7CmBgYAoKKirnu5PmnpzvvJoyLzIgS0lMTEVEKioKCiMjIyDimIUg44CM5rWL6K+V5pWw5o2u5LiN5aSf5Z2P44CN5LuK5aSp56ysIDQg5qyhCgp8IOi9riB8IOWPmOW8giB8IOS4uuS7gOS5iOaVsOaNruS4jeWkn+WdjyB8IOS/ruazlSB8CnwtLS18LS0tfC0tLXwtLS18CnwgNCB8IGBhcmNoaXZlLW5vLXNraXAtY29tbWVudGAgfCDmtYvnmoTmmK/nnJ/ku5PlupPmlofku7bvvIzms6jph4rooYzmsqEgcmVxdWlyZSB8IOmAoCA1IOenjeaWh+S7tiB8CnwgNSB8IGBiYXNlbGluZS1uby1zY29wZS1jaGVja2AgfCDku6PnoIHmnInkuKTpgZPpl7jvvIzlj6rmi4bkuIDpgZMgfCBtdXRhdGlvbnMg5pWw57uEIHwKfCA5IHwgYGJoYy1jcm9zcy1lbnRyaWVzYCB8IGhtciDoh6rlt7HmnIkgcm9vdO+8jOS4jemcgOimgei3s+i/h+i+ueeVjCB8IOaUueaIkCBobXIg5rKhIHJvb3QgfAp8IDE3IHwgKipgbW1jLW5vLXVuZGVyc2NvcmUtc2tpcGAqKiB8ICoq5rWL5LiN5a2Y5Zyo55qE5paH5Lu277yM5oGS6L+U5ZueIDAqKiB8ICoq6YCg5Li05pe255uu5b2VKiogfAoKKirliKTmlq3mlrnms5XvvJoqKgoKPiDpl67oh6rlt7HjgIzlpoLmnpzliKTmja7ooqvmlLnlnY/kuobvvIzov5nmnaHmlbDmja7ov5jog73pgJrov4flkJfvvJ/jgI0KPiDog70g4oeSIOaVsOaNruS4jeWkn+WdjyDih5Ig6KaB5Yqg5Lil44CCCgojIyMg5YWo6YeP57uT5p6cCgpgYGAK5Y+Y5byC5rWL6K+VOiAgNzkgS0lMTEVEIC8gMCBTVVJWSVZFRArmrovnlZnmo4Dmn6U6ICDinIUg5rKh5Y+R546w5q6L55WZCuimhueblueOhzogICAgMTIl77yIMjUvMjA177yJCmNoZWNrLWFsbDogNjEvNjEg6YCa6L+HCmBgYAoKLS0tCiMjIOKYheKYheKYhSDnn6XpgZPku4DkuYjml7blgJnor6XlgZzvvIjmnIDlkI7kuIDova7mnIDph43opoHnmoTliKTmlq3vvIkKCiMjIyDmiJHlsJ3or5XlgZrku4DkuYgKCioq5YGaIGBhcmNoaXZlLXNjYW4tY2hlY2suY2pzYCDigJTigJQg6Ieq5Yqo5qOA5p+l44CM5ZOq5Lqb5bel5YW35Lya6K+v5omrIGBfYCDliY3nvIDjgI3jgIIqKgoKIyMjIOS4uuS7gOS5iOWksei0pe+8iOS4ieasoei/reS7o++8iQoKKirnrKzkuIDniYjvvJrliKTmja7jgIzmnInmsqHmnIkgYF5fYOOAjSoqCgpgYGAK57uT5p6c77yaMjAg5Liq5YCZ6YCJCuS9hiA0IOS4qumrmOmjjumZqeeahOmDveaciSBmaWx0ZXIoL15kc2gtcGx1Z2luLykg5L+d5oqkIOKHkiDor6/miqUKYGBgCgoqKuesrOS6jOeJiO+8muWKoOeZveWQjeWNleWIpOaNrioqCgpgYGAK57uT5p6c77yaMSDkuKrlgJnpgInvvIhjaGVjay1hbGwtY292ZXJhZ2XvvIkK5L2G5a6D55qE55m95ZCN5Y2V5pivIC9cLnNlbGZ0ZXN0XC4v77yI5rqQ56CB6YeM5Y+M5Y+N5pac5p2g77yJCuaIkeeahOato+WImSAvXC5zZWxmdGVzdFwuLyDljLnphY3kuI3liLAg4oeSIOivr+aKpQpgYGAKCioq56ys5LiJ54mI77ya5Yy56YWN5rqQ56CB6L2s5LmJ5b2i5byPKioKCmBgYArnu5PmnpzvvJoyIOS4quWAmemAie+8iOWPjeiAjOWPmOWkmu+8iQrih5Ig5Yik5o2u6LaK5pS56LaK5LmxCmBgYAoKIyMjIOKYhSDlhrPlrprvvJrliKDmjonov5nkuKrlt6XlhbcKCioq55CG55Sx77yI5LiJ5p2h77yJ77yaKioKCjEuICoq6Z2Z5oCB5YiG5p6Q44CM5Lya5LiN5Lya6K+v5omrIGBfYOOAjeacrOi0qOWBmuS4jeWIsOWHhuehrioqIOKAlOKAlCDku4rlpKnnrKwgMyDmrKHouKnlkIzkuIDkuKrlnZEKMi4gKio0IOS4quecnyBidWcg5bey57uP5L+u5a6MKioKMy4gKirnlZnkuIDkuKrjgIzor6/miqXnjocgMTAwJeOAjeeahOW3peWFtyA9IOWZqumfsyA9IOavlOayoeacieabtOeznyoqCgoqKuKHkiBBR0VOVFMubWQg55qE5Yik5o2u5Y6f5YiZ5Y6f6K+d77yaKioKCj4g44CM5YGa5LiN57K+56Gu55qE6KeE5YiZID0g5Zmq6Z+zID0g5q+U5rKh5pyJ5pu057Of44CC44CNCgoqKuKHkiDmiYDku6XmiJHliKDkuoblroPjgIIqKgoKIyMjIOKYhSDku4rlpKnnrKwgMyDmrKHouKnjgIzpnZnmgIHliIbmnpDlgZrkuI3liLDlh4bnoa7jgI0KCnwg5qyhIHwg5oOz5YGa5LuA5LmIIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfAp8IDEgfCDpnZnmgIHliIbmnpDjgIzoh6rmo4DotKjph4/jgI3vvIjnrKwgMTEg6L2u77yJfCDor6/miqUgMTA1IOS4qiDihpIg5pS+5byDIHwKfCAyIHwg6Z2Z5oCB5qOA5rWL44CM5pyq5aOw5piO5bi46YeP44CN77yI56ysIDE1IOi9ru+8iXwg5YWo5piv5rOo6YeKL3JlcXVpcmUv5a2X56ym5LiyIOKGkiDmlL7lvIMgfAp8IDMgfCAqKumdmeaAgeajgOafpeOAjOW9kuaho+ivr+aJq+OAje+8iOacrOi9ru+8iSoqIHwgKirliKTmja7otormlLnotorkubEg4oaSIOWIoOaOiSoqIHwKCioq4oeSIOinhOW+i++8muiDvemdmeaAgeWIhuaekOeahOaYr+OAjOivreazleOAje+8jOS4jeiDvemdmeaAgeWIhuaekOeahOaYr+OAjOivreS5ieOAjeOAgioqCgoqKuKHkiDliKTmlq3kuIDkuKrpnZnmgIHlt6XlhbflgLzkuI3lgLzlvpflgZrvvJrpl67jgIzov5nkuKrpl67popjog73kuI3og73lj6rnnIvor63ms5XlsLHliKTmlq3vvJ/jgI0qKgoKLS0tCgojIyDimIUg5b2S5qGj6K+v5omr77ya5ZCM5LiA5Liq5qC55Zug5b2x5ZON5LqGIDQg5Liq5bel5YW3CgoqKuiDjOaZr+aVsOaNru+8mioqCgpgYGAKdG9vbHMvOiAgMTU2IOS4qiBfIOebruW9lSArIDIzOTMg5LiqIF8g5paH5Lu2CmNvcmUvOiAgICAgNiDkuKogXyDnm67lvZUgKyAgICAzIOS4qiBfIOaWh+S7tgrku5PmoLk6ICAgIDE4MSDkuKogXyDliY3nvIAKYGBgCgoqKuS/rueahCA0IOS4qu+8mioqCgp8IOW3peWFtyB8IGJ1ZyB8IOW9seWTjSB8IOS/ruazlSB8CnwtLS18LS0tfC0tLXwtLS18CnwgYHBsdWdpbi1wcmVmbGlnaHRgIHwg5omrIGBfYXJjaGl2ZWQtKmAg55uu5b2VIHwgNzQg4oaSIDczIOS4quaPkuS7tu+8jEZBVEFMIDEg4oaSIDAgfCBgaWYgKC9eXy8udGVzdChuYW1lKSkgY29udGludWU7YCB8CnwgYG1lbW9yeS1tYXAtY2hlY2tgIHwgd2FsayDkuI3ot7Pov4cgYF9gIHwg5omrIDI0MDArIOW9kuaho+aWh+S7tu+8jOW8leeUqOe7n+iuoeiiq+axoeafkyB8IGBpZiAoZS5uYW1lLnN0YXJ0c1dpdGgoJ18nKSkgY29udGludWU7YCB8CnwgYGF1ZGl0b3Itc2VsZnRlc3QubXV0YXRpb25gIHwg5aSN5Yi25omA5pyJIGAuY2pzYCB8IOWkjeWItiAyMzkzIOS4quW9kuaho+i/m+W3peS9nOebruW9lSB8IGBpZiAoZi5zdGFydHNXaXRoKCdfJykpIGNvbnRpbnVlO2AgfAp8IGBlZGl0LXZlcmlmeS1jaGVja2AgfCBFWENMVURFIOS4jeWFqCB8IOW9kuaho+iiq+W9k+a0u+S7o+eggeaJqyB8IGBpZiAoZi5zdGFydHNXaXRoKCdfJykpIGNvbnRpbnVlO2AgfAoKKirih5Ig6L+Z5piv44CM5qih5byP57qn44CN55qEIGJ1Z++8jOS4jeaYr+S4quS+i+OAgioqCgojIyMg4piFIOWIpOaNruS7jueyl+WIsOe7hueahOi/h+eoiwoKfCDliKTmja4gfCDlgJnpgInmlbAgfAp8LS0tfC0tLXwKfCDjgIzmnInmsqHmnIkgYF5fYOOAjSB8IDIwIHwKfCDjgIzmiasgdG9vbHMvIOaIluS7k+agueOAjSB8IDEzIHwKfCAqKuOAjOaXoOaOkumZpCArIOaXoOeZveWQjeWNleOAjSoqIHwgKioyKiogfAoKKirih5Ig5Yik5o2u6LaK57K+56Gu77yM5Zmq6Z+z6LaK5bCR44CCKioKCi0tLQoKIyMg5LuK5pma5oC75oiQ5p6c77yIMTgg6L2u77yJCgpgYGAK5Y+Y5byC5rWL6K+VOiAgIDc5IEtJTExFRCAvIDAgU1VSVklWRUQK5YGH57u/5qih5byPOiAgIDE0IOenjQrkv67nmoTnnJ8gYnVnOiA4IOS4qgrmlrDpgKDlt6Xlhbc6ICAgNiDkuKrvvIjliKDkuoYgMSDkuKrlgZrkuI3lh4bnmoTvvIkKY2hlY2stYWxsOiAgNjEvNjEg6YCa6L+HCmBgYAoKIyMjIOKYhSDmnIDlkI7kuIDmnaHmlZnorq0KCj4gKirnn6XpgZPku4DkuYjml7blgJnor6XlgZzvvIzmr5Tnn6XpgZPmgI7kuYjlgZrmm7Tph43opoHjgIIqKgo+Cj4g5LiA5Liq44CM6K+v5oql546HIDEwMCXjgI3nmoTlt6XlhbfkuI3mmK/otYTkuqfvvIzmmK/otJ/lgLog4oCU4oCUCj4g5a6D5raI6ICX5rOo5oSP5Yqb44CB5Yi26YCg5Zmq6Z+z44CB6K6p5Lq65a+55bel5YW35aSx5Y675L+h5Lu744CCCj4KPiAqKuWIoOaOieWug++8jOaYr+i/meS4gOi9ruacgOacieS7t+WAvOeahOWIpOaWreOAgioqCgotLS0KIyMg4piFIDIwMjYtMTEtMDIg5YeM5pmo77ya5LqU5Liq5qC45b+D5bel5YW36KGl6Ieq5qOA77yIMjgg5Liq5Y+Y5byC5YWoIEtJTExFRO+8iQoKIyMjIOaIkOaenAoKfCAjIHwg5bel5YW3IHwg6KGM5pWwIHwg6Ieq5qOA5pat6KiAIHwg5Y+Y5byCIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfAp8IDEgfCBgaGFybmVzcy1jaGVja2DvvIjmsrvnkIblp7/mgIHoh6ror4HlmajvvIl8IDQwOCB8IDE4IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKfCAyIHwgYHNpZ25lZC1tYW5pZmVzdGDvvIjnrb7lkI3muIXljZXvvIl8IDI5MSB8IDIxIHwgNSB8ICoqNS81IEtJTExFRCoqIHwKfCAzIHwgYG1jcC1lY29zeXN0ZW1g77yITUNQIOeUn+aAgei9rOaNou+8iXwgNTEzIHwgMjMgfCA0IHwgKio0LzQgS0lMTEVEKiogfAp8IDQgfCBgaGFybmVzcy1saWJyYXJ5YO+8iOaMieWfn+e7j+mqjOW6k++8iXwgNTgyIHwgMjYgfCA1IHwgKio1LzUgS0lMTEVEKiogfAp8IDUgfCBgY29ycmVjdGlvbi1sZWRnZXJg77yI57qg5q2j5Y+w6LSm77yJfCA0OTkgfCAxOCB8IDUgfCAqKjUvNSBLSUxMRUQqKiB8CnwgNiB8IGB3b3JrZXItY2FwLWxvY2tg77yI5ZGY5bel6IO95Yqb6ZSB77yJfCA0MjkgfCAyNCB8IDUgfCAqKjUvNSBLSUxMRUQqKiB8CgoqKuWQiOiuoe+8mjEzMCDmnaHmlq3oqIAgLyAyOCDkuKrlj5jlvIIgLyDlhajpg6ggS0lMTEVEKioKCioq6KaG55uW546H77yaMTIlIOKGkiAxNyUqKgoKIyMjIOKYhSDkuInmrKHjgIzph43mnoTmiY3og73mtYvjgI0KCioq4pGgIGhhcm5lc3MtbGlicmFyee+8muWvvOWHuiB0b2tlbml6ZSoqCgoqKuKRoSBjb3JyZWN0aW9uLWxlZGdlcu+8muaKiiBidWlsZC9wcmlvcml0eSDmj5DliLDmqKHlnZfnuqcqKgoKYGBganMKLy8g5Y6f5p2l77ya5ZyoIHdyaXRlTDAg5YaF6YOo77yM5peg5rOV5rWL6K+VCmZ1bmN0aW9uIHdyaXRlTDAoYWN0aXZlKSB7CiAgY29uc3QgQlVER0VUID0gMTYzODQ7CiAgZnVuY3Rpb24gYnVpbGQoZW50cmllcywgd2l0aFZlcmlmeSwgdG90YWwpIHsgLi4uIH0KICBmdW5jdGlvbiBwcmlvcml0eShlKSB7IC4uLiB9Cn0KCi8vIOaUueaIkO+8muaooeWdl+e6pyArIOWvvOWHugpmdW5jdGlvbiBidWlsZChlbnRyaWVzLCB3aXRoVmVyaWZ5LCB0b3RhbCkgeyAuLi4gfQpmdW5jdGlvbiBwcmlvcml0eShlKSB7IC4uLiB9Cm1vZHVsZS5leHBvcnRzID0geyAuLi4sIGJ1aWxkLCBwcmlvcml0eSwgLi4uIH07CmBgYAoKKirikaIgd29ya2VyLWNhcC1sb2Nr77ya5a+85Ye6IHJpc2tTY29yZSoqCgoqKuKHkiDov5nmmK/nrKwgNCDmrKHjgIzpgLvovpHln4vlnKjkuI3or6Xln4vnmoTlnLDmlrnjgI0qKu+8iOWJjSAzIOasoe+8mmJvbS1ndWFyZCAvIGNoZWNrLWNvbW1pdC1tc2cgLyBidW5kbGUtaG1yLWNoZWNr77yJ44CCCgojIyMg4piFIOS/ruWkjeS6huS4gOS4quecnyBidWfvvJrlj5jlvILmrovnlZnoh6rliqjkv67lpI0KCioq6Zeu6aKYKirvvJrku4rlpKnlj5HnjrAgMiDmrKHmrovnlZnvvIjpg73mmK8gYGNoZWNrLWFsbC5janNgIOeahOi/m+W6puadoe+8ieOAggoKKirmoLnlm6AqKu+8muWFqOmHj+a1i+ivlei3keWkquS5heiiq+WklumDqOi2heaXtuadgOaOiSDih5Ig5p2l5LiN5Y+K6LeRIGZpbmFsbHkg55qEIHJlc3RvcmXjgIIKCioq5L+u5rOV77yaYHRvb2wtbXV0YXRpb24uY2pzYCDlkK/liqjml7boh6rliqjmo4Dmn6Xlubbkv67lpI0qKgoKYGBganMKLy8g5ZyoIG1haW4oKSDlvIDlpLQKaWYgKCFhcmd2LmluY2x1ZGVzKCctLWNoZWNrLXJlc2lkdWUnKSAmJiAuLi4pIHsKICBmb3IgKGNvbnN0IG0gb2YgTVVUQU5UUykgewogICAgZm9yIChjb25zdCB0IG9mIHRhcmdldHMpIHsKICAgICAgaWYgKGNvbnRlbnQuaW5kZXhPZih0LnJlcGxhY2UpID49IDAgJiYgY29udGVudC5pbmRleE9mKHQuZmluZCkgPCAwKSB7CiAgICAgICAgLy8g4piF5Y+R546w5q6L55WZIOKHkiDmioogcmVwbGFjZSDmlLnlm54gZmluZAogICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZnAsIGNvbnRlbnQucmVwbGFjZSh0LnJlcGxhY2UsIHQuZmluZCkpOwogICAgICAgIGNvbnNvbGUubG9nKCcgIPCflKcg6Ieq5Yqo5L+u5aSN5q6L55WZOiBbJyArIG0uaWQgKyAnXSAnICsgdC5maWxlKTsKICAgICAgfQogICAgfQogIH0KfQpgYGAKCioq6aqM6K+BKirvvJrms6jlhaXmrovnlZkg4oaSIOi3kSBgLS1oZWxwYCDihpIg6L6T5Ye6IGDwn5SnIOiHquWKqOS/ruWkjeaui+eVmTogW3RyZW5kLW5vLWJhcl0gY2hlY2stYWxsLmNqc2Ag4oaSIOaui+eVmea4hembtuOAggoKKirih5Ig6L+Z5piv44CM5bel5YW36Ieq5bex5L+u6Ieq5bex44CN4oCU4oCUIOS7juOAjOWPkeeOsOmXrumimOOAjeWIsOOAjOiHquWKqOS/ruWkjeOAjeOAgioqCgojIyMg4piFIOOAjOa1i+ivleaVsOaNruS4jeWkn+Wdj+OAjeWFreasoeiusOW9lQoKfCDova4gfCDlj5jlvIIgfCDkuLrku4DkuYjmlbDmja7kuI3lpJ/lnY8gfCDkv67ms5UgfAp8LS0tfC0tLXwtLS18LS0tfAp8IDQgfCBgYXJjaGl2ZS1uby1za2lwLWNvbW1lbnRgIHwg5rWL55yf5LuT5bqT5paH5Lu277yM5rOo6YeK6KGM5rKhIHJlcXVpcmUgfCDpgKAgNSDnp43mlofku7YgfAp8IDUgfCBgYmFzZWxpbmUtbm8tc2NvcGUtY2hlY2tgIHwg5Luj56CB5pyJ5Lik6YGT6Ze477yM5Y+q5ouG5LiA6YGTIHwgbXV0YXRpb25zIOaVsOe7hCB8CnwgOSB8IGBiaGMtY3Jvc3MtZW50cmllc2AgfCBobXIg6Ieq5bex5pyJIHJvb3QgfCDmlLnmiJAgaG1yIOayoSByb290IHwKfCAxNyB8IGBtbWMtbm8tdW5kZXJzY29yZS1za2lwYCB8IOa1i+S4jeWtmOWcqOeahOaWh+S7tu+8jOaBkui/lOWbniAwIHwg6YCg5Li05pe255uu5b2VIHwKfCAxOSB8IGBtY3Atbm8tc3RkaW8tZmlsdGVyYCB8IOWPquaciSBzdGRpbyDljIXvvIzmsqHmnInpnZ4gc3RkaW8g5qC35pysIHwg6KGl6Z2eIHN0ZGlvIOa1i+ivlSB8CgoqKuWIpOaWreaWueazle+8iOesrCA2IOasoeW8uuiwg++8ie+8mioqCgo+IOmXruiHquW3seOAjOWmguaenOWIpOaNruiiq+aUueWdj+S6hu+8jOi/meadoeaVsOaNrui/mOiDvemAmui/h+WQl++8n+OAjQo+IOiDvSDih5Ig5pWw5o2u5LiN5aSf5Z2PIOKHkiDopoHliqDkuKXjgIIKCiMjIyDimIUg5Y+m5LiA5Liq5pWZ6K6t77ya5YaZ5pat6KiA5YmN6KaB5YWI55yL5a6e546wCgoqKndvcmtlci1jYXAtbG9jayDoh6rmo4DnrKzkuIDmrKEgMjIvMjTvvJoqKgoKfCAjIHwg5aSx6LSl5Y6f5ZugIHwg5L+u5rOVIHwKfC0tLXwtLS18LS0tfAp8IDYgfCDku6XkuLogMjAg5LiqIHNoZWxsIOiDveWIsCAxMDAg5YiGIHwg5a6e6ZmF5ZCM57G75LiN57Sv5Yqg5aSq5aSa77yIMzArMTA9NDDvvInvvIzmlLnmiJDmt7flkIjog73lipsgfAp8IDggfCDku6XkuLogc2hlbGwg5Y+v5LulIHNjb3BlZCDpmY3mnYMgfCDlrp7pmYUgYFNDT1BFRF9DQVBTYCDph4zmsqHmnIkgc2hlbGzvvIzmlLnnlKggZGVsZXRlIHwKCioq4oeSIOWHreaDs+W9k+eEtuWGmeaWreiogCA9IOa1i+ivleiHquW3seWksei0peOAgioqCgotLS0KIyMg4piFIDIwMjYtMTEtMDIg5YeM5pmo56ys5LqM6L2u77ya5Y+I5Zub5Liq5bel5YW3ICsg5L+u5LqGIDEg5Liq55yfIGJ1ZwoKIyMjIOaIkOaenAoKfCAjIHwg5bel5YW3IHwg6KGM5pWwIHwg6Ieq5qOA5pat6KiAIHwg5Y+Y5byCIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfAp8IDEgfCBgZXZvbHZlLXByb3Bvc2Vg77yI6L+b5YyW5o+Q6K6u6YCC6YWN5Zmo77yJfCAyNTkgfCAxMCB8IDQgfCAqKjQvNCBLSUxMRUQqKiB8CnwgMiB8IGBicmFpbi1vdmVyLWJvZHlg77yI5bel5YW354m15byV5qOA5rWL77yJfCAzNDQgfCAxOCB8IDQgfCAqKjQvNCBLSUxMRUQqKiB8CnwgMyB8IGBza2lsbC10cmlnZ2VyLWV2YWxg77yIc2tpbGwg6Kem5Y+R6K+E5Lyw77yJfCA0MzQgfCAxNyB8IDUgfCAqKjUvNSBLSUxMRUQqKiB8CnwgNCB8IGBtYXJrZXQtaW5kZXgtcG9ydC1maXhg77yI56uv5Y+j5L+u5q2j77yJfCAxNDYgfCAxNCB8IDQgfCAqKjQvNCBLSUxMRUQqKiB8CnwgNSB8IGBoYXJuZXNzLXJlY3Vyc2lvbmDvvIjpgJLlvZLkuLvmtYHnqIvvvIl8IDUxNSB8IDE4IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKCioq5ZCI6K6h77yaNzcg5p2h5pat6KiAIC8gMjEg5Liq5Y+Y5byCIC8g5YWo6YOoIEtJTExFRCoqCgojIyMg4piF4piF4piFIOWPkeeOsOW5tuS/ruWkjSAxIOS4quecnyBidWfvvJrkuK3mlofljLnphY3lrozlhajlpLHmlYgKCioqYHNraWxsLXRyaWdnZXItZXZhbGAg6Ieq5qOA56ysIDEwIOadoeWksei0pe+8mioqCgpgYGAKRkFJTCAxMCBrZXl3b3JkIGp1ZGdlIG1hdGNoZXMgQ2hpbmVzZSB3b3JkCiAgLT4gc2hvdWxkIG1hdGNoIOWIhuaekCAoZXhwZWN0IHRydWUsIGFjdHVhbCBmYWxzZSkKYGBgCgoqKuWunumZhea1i+ivle+8mioqCgpgYGAK5biu5oiR5YiG5p6Q5LiA5LiL6L+Z5LiqID0+IGZhbHNlICAgIOKGkCDlupTor6UgdHJ1Ze+8iOWQq+OAjOWIhuaekOOAje+8iQrnlKjkuo7liIbmnpDmlbDmja4gICAgID0+IHRydWUgICAgIOKGkCDlj6rmmK/mlbTmrrXljLnphY0K5YiG5p6QICAgICAgICAgICAgID0+IGZhbHNlICAgIOKGkCDlupTor6UgdHJ1ZQpgYGAKCioq5qC55Zug77yaKioKCmBgYGpzCi8vIOWOn+WunueOsApjb25zdCBjamtXb3JkcyA9IChkZXNjLm1hdGNoKC9bXHU0ZTAwLVx1OWZhNV17Mix9L2cpIHx8IFtdKTsKLy8g6L+Z5o+Q5Y+W55qE5piv44CM5pW05q616L+e57ut5Lit5paH44CN77yM5q+U5aaCIGRlc2M9J+eUqOS6juWIhuaekOaVsOaNricKLy8g4oeSIGNqa1dvcmRzID0gWyfnlKjkuo7liIbmnpDmlbDmja4nXQovLyDnhLblkI7liKTmlq0gcXVlcnkuaW5jbHVkZXMoJ+eUqOS6juWIhuaekOaVsOaNricpIOKHkiDlh6DkuY7msLjov5zkuI3ljLnphY0KYGBgCgoqKuS/ruazle+8muaUueaIkCAyLWdyYW0g5YiH5YiGKioKCmBgYGpzCmNvbnN0IGNqa1dvcmRzID0gW107CmZvciAoY29uc3Qgc2VnIG9mIChkZXNjLm1hdGNoKC9bXHU0ZTAwLVx1OWZhNV17Mix9L2cpIHx8IFtdKSkgewogIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnLmxlbmd0aCAtIDE7IGkrKykgY2prV29yZHMucHVzaChzZWcuc2xpY2UoaSwgaSArIDIpKTsKfQovLyBkZXNjPSfnlKjkuo7liIbmnpDmlbDmja4nIOKHkiBbJ+eUqOS6jicsJ+S6juWIhicsJ+WIhuaekCcsJ+aekOaVsCcsJ+aVsOaNriddCmBgYAoKKirih5Ig6L+Z5piv44CMa2V5d29yZCBqdWRnZSDlr7nkuK3mlofln7rmnKzlpLHmlYjjgI3nmoTnnJ8gYnVn77yM6KKr6Ieq5qOA5oqT5Yiw44CCKioKCiMjIyDimIUg44CM5rWL6K+V5pWw5o2u5LiN5aSf5Z2P44CN56ysIDfjgIE4IOasoQoKKipgc2tpbGwtdHJpZ2dlci1ldmFsYCDnrKzkuIDmrKEgMy8177yaKioKCnwg5Y+Y5byCIHwg5Li65LuA5LmI5rKh5oqT5YiwIHwg5L+u5rOVIHwKfC0tLXwtLS18LS0tfAp8IGBzdGUtbm8tbWludGVzdGAgfCDmtYvor5XmlbDmja7mnIkgMTAg5Liq5q2j5L6L77yMYGZsb29yKDEwKjAuNCk9NGAg5pys6Lqr5bCxIOKJpTEgfCDooaXlsI/moLfmnKzvvIgyIOatoyAyIOi0n++8jGhvbGRvdXQ9MC4x77yJfAp8IGBzdGUtbWV0cmljcy13cm9uZy10aHJlc2hvbGRgIHwg5Y+q5pyJIDAuMC8wLjUvMS4wIOS4ieS4quinpuWPkeeOhyB8IOihpSAwLjMg5ZKMIDAuNDkg6L6555WM5qC35pysIHwKCioq4oeSIOihpeWujOWQjiA1LzUg5YWoIEtJTExFROOAgioqCgojIyMg5YWr5qyh6K6w5b2VCgp8IOi9riB8IOWPmOW8giB8IOS4uuS7gOS5iOaVsOaNruS4jeWkn+WdjyB8CnwtLS18LS0tfC0tLXwKfCA0IHwgYGFyY2hpdmUtbm8tc2tpcC1jb21tZW50YCB8IOa1i+ecn+S7k+W6k+aWh+S7tu+8jOazqOmHiuihjOayoSByZXF1aXJlIHwKfCA1IHwgYGJhc2VsaW5lLW5vLXNjb3BlLWNoZWNrYCB8IOS7o+eggeacieS4pOmBk+mXuO+8jOWPquaLhuS4gOmBkyB8CnwgOSB8IGBiaGMtY3Jvc3MtZW50cmllc2AgfCBobXIg6Ieq5bex5pyJIHJvb3QgfAp8IDE3IHwgYG1tYy1uby11bmRlcnNjb3JlLXNraXBgIHwg5rWL5LiN5a2Y5Zyo55qE5paH5Lu277yM5oGS6L+U5ZueIDAgfAp8IDE5IHwgYG1jcC1uby1zdGRpby1maWx0ZXJgIHwg5Y+q5pyJIHN0ZGlvIOWMhe+8jOayoeaciemdniBzdGRpbyDmoLfmnKwgfAp8IDI2IHwgYHN0ZS1uby1taW50ZXN0YCB8IOagt+acrOWkquWkp++8jOS4jeS+nei1liBtaW4oMSkgfAp8IDI2IHwgYHN0ZS1tZXRyaWNzLXdyb25nLXRocmVzaG9sZGAgfCDlj6rmnIkgMC4wLzAuNS8xLjDvvIzmsqHmnIkgMC4zIHwKCioq5Yik5pat5pa55rOV77yaKioKCj4g6Zeu6Ieq5bex44CM5aaC5p6c5Yik5o2u6KKr5pS55Z2P5LqG77yM6L+Z5p2h5pWw5o2u6L+Y6IO96YCa6L+H5ZCX77yf44CNCj4g6IO9IOKHkiDmlbDmja7kuI3lpJ/lnY8g4oeSIOimgeWKoOS4peOAggoKLS0tCiMjIOKYhSAyMDI2LTExLTAyIOWHjOaZqOesrOS4iei9ru+8muaJuemHj+ihpSA0IOS4quW3peWFtwoKIyMjIOaIkOaenAoKfCAjIHwg5bel5YW3IHwg6KGM5pWwIHwg6Ieq5qOA5pat6KiAIHwg5Y+Y5byCIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfC0tLXwtLS18LS0tfAp8IDEgfCBgbWVtb3J5LXRydXN0YO+8iOiusOW/huS/oeS7u+S7suijgeWZqO+8iXwgMjE1IHwgMjEgfCA0IHwgKio0LzQgS0lMTEVEKiogfAp8IDIgfCBgZGVhZC1maWVsZC1jaGVja2DvvIjmrbvlrZfmrrXmo4DmtYvvvIl8IDE5MyB8IDEwIHwgMyB8ICoqMy8zIEtJTExFRCoqIHwKfCAzIHwgYGR1cGxpY2F0aW9uLWNoZWNrYO+8iOmHjeWkjeaooeW8j+ajgOa1i++8iXwgMTQ3IHwgMTEgfCAzIHwgKiozLzMgS0lMTEVEKiogfAp8IDQgfCBgbWVtb3J5LXRvZGF5LWNoZWNrYO+8iOS7iuaXpeiusOW/huajgOafpe+8iXwgMjE2IHwgMTYgfCA0IHwgKio0LzQgS0lMTEVEKiogfAoKKirlkIjorqHvvJo1OCDmnaHmlq3oqIAgLyAxNCDkuKrlj5jlvIIgLyDlhajpg6ggS0lMTEVEKioKCiMjIyDimIUg57uZIDIg5Liq5bel5YW35Yqg5rOo5YWl6IO95Yqb77yI56ysIDXjgIE2IOasoe+8iQoKKirikaAgZGVhZC1maWVsZC1jaGVja++8mnNjYW5GaWxlIOWKoCBiYXNlRGlyKioKCmBgYGpzCi8vIOWOn+adpe+8muehrOe8lueggeS7k+W6k+aguQpmdW5jdGlvbiBzY2FuRmlsZShyZWxQYXRoKSB7CiAgY29uc3QgcCA9IHBhdGguam9pbihSRVBPLCByZWxQYXRoKTsKfQoKLy8g5pS55oiQ77ya5pSv5oyB5rOo5YWlCmZ1bmN0aW9uIHNjYW5GaWxlKHJlbFBhdGgsIG9wdHMpIHsKICBjb25zdCBiYXNlID0gKG9wdHMgfHwge30pLmJhc2VEaXIgfHwgUkVQTzsKICBjb25zdCBwID0gcGF0aC5qb2luKGJhc2UsIHJlbFBhdGgpOwp9CmBgYAoKKirikaEgZHVwbGljYXRpb24tY2hlY2vvvJpzY2FuIOWKoCBkaXIqKgoKYGBganMKLy8g5Y6f5p2l77ya56Gs57yW56CBIHRvb2xzLwpmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKFRPT0xTKS5maWx0ZXIoLi4uKTsKCi8vIOaUueaIkO+8muaUr+aMgeazqOWFpQpjb25zdCBkaXIgPSAob3B0cyB8fCB7fSkuZGlyIHx8IFRPT0xTOwpmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGRpcikuZmlsdGVyKC4uLik7CmBgYAoKIyMjIOKYhSDjgIzlpJrpgZPpl7jjgI3nrKwgNCDmrKEKCioqYG10Yy1uby1zY2hlZHVsZWQtZmlsdGVyYCDnrKzkuIDmrKEgU1VSVklWRUTvvJoqKgoKYGBganMKY29uc3Qgc2NoZWR1bGVkID0gdG9kYXlGaWxlcy5maWx0ZXIoKGYpID0+IC/mr4/ml6Xoh6rnnIEvLnRlc3QoZikpOyAgIC8vIOesrOS4gOmBkwpjb25zdCByZWFsV29yayA9IHRvZGF5RmlsZXMuZmlsdGVyKChmKSA9PiAhL+avj+aXpeiHquecgS8udGVzdChmKSk7ICAgLy8g56ys5LqM6YGTCmBgYAoKKirlj6rmi4bnrKzkuIDpgZMg4oeSIOesrOS6jOmBk+i/mOWcqOaLpiDih5Ig5Y+Y5byC5peg5pWI44CCKioKCioq5L+u5rOV77ya5Lik6YGT6Ze45ZCM5pe25ouG77yIYG11dGF0aW9uc2Ag5pWw57uE77yJKioKCioq4oeSIOesrCA0IOasoemBh+WIsOOAjOWkmumBk+mXuOOAje+8mioqCgp8IOi9riB8IOWPmOW8giB8IOesrOS4gOmBk+mXuCB8IOesrOS6jOmBk+mXuCB8CnwtLS18LS0tfC0tLXwtLS18CnwgNSB8IGBwYXRyb2wtYnVybi1taW5zcGFuYCB8IGBNSU5fU1BBTl9EQVlTYCB8IGBNSU5fREVMVEFfUENUYCB8CnwgNSB8IGBib20tZXhpdC1hbHdheXMtemVyb2AgfCBgY29uc29sZS5sb2dgIHwgYHByb2Nlc3MuZXhpdGAgfAp8IDUgfCBgYmFzZWxpbmUtbm8tc2NvcGUtY2hlY2tgIHwgYGlmICghYi5zY29wZSlgIHwgYHR5cGVvZmAg5qOA5p+lIHwKfCAzMSB8IGBtdGMtbm8tc2NoZWR1bGVkLWZpbHRlcmAgfCBgc2NoZWR1bGVkYCDov4fmu6QgfCBgcmVhbFdvcmtgIOi/h+a7pCB8CgojIyMg4piFIOS4pOS4quW3peWFt+eahOiuvuiuoeS7t+WAvAoKKipgbWVtb3J5LXRydXN0YO+8iOWtpuiHqiBhclhpdiAyNjA5LjA1NTEwIOWOn+WImSA077yJ77yaKioKCj4g44CMTWVtb3J5IGZhaWxzIHRvd2FyZCByZWRpc2NvdmVyeSBhbmQgdG93YXJkIGRlY2F5LiBUaGUgbWl0aWdhdGlvbnMgcHVsbCBpbgo+ICBvcHBvc2l0ZSBkaXJlY3Rpb25zIGFuZCBtdXN0IGJlIGhlbGQgaW4gdGVuc2lvbiBieSBhbiBFWFBMSUNJVCBBUkJJVFJBVElPTgo+ICBSVUxFLCBub3QgYXZlcmFnZWQgaW50byBtdXNoLuOAjQoKKirkuInlsYLkv6Hku7vnrYnnuqfvvJoqKgoKfCDnrYnnuqcgfCDlkKvkuYkgfCDop4TliJnmlbAgfAp8LS0tfC0tLXwtLS18CnwgYHJlcnVuYCB8IOW/hemhu+mHjei3ke+8jOiusOW/huS4jeWPr+S/oSB8IDIgfAp8IGB2ZXJpZnlgIHwg5b+F6aG75YWI6aqM6K+B5YaN55SoIHwgNSB8CnwgYHRydXN0YCB8IOebtOaOpeS/oe+8jOS4jeeUqOmHjeafpSB8IDMgfAoKKioxMSDmnaHop4TliJnvvIzmnIDkuKXnmoTkvJjlhYjvvIhSRVJVTiA+IFZFUklGWSA+IERJUkVDVO+8ieOAgioqCgoqKmBtZW1vcnktdG9kYXktY2hlY2tg77yI5a2m6Ieq5Y6f5YiZIDLvvInvvJoqKgoKPiDjgIxJbnN0cnVtZW50IHRoZSBkZW5vbWluYXRvciwgbm90IGp1c3QgdGhlIGhpdHMu44CNCgoqKuaguOW/g+iuvuiuoe+8muWFiOWGmeS4gOihjOWGjeW5sua0uyoqCgpgYGBqcwpmdW5jdGlvbiBjaGVjayhtZW1EaXIsIGRhdGVTdHIpIHsKICBjb25zdCBsb2dnZWQgPSBhcHBlbmRMb2coZGlyLCB7IHRzLCBkYXksIHRvb2w6ICdtZW1vcnktdG9kYXktY2hlY2snIH0pOyAgLy8g4oaQIOWFiOWGmQogIC8vIC4uLiDnhLblkI7miY3mo4Dmn6UKfQpgYGAKCioq4oeSIOWNs+S9vyBjaGVjayDkuK3pgJTltKnkuobvvIzkuZ/mnInorrDlvZUg4oeSIOiDveWbnuetlOOAjOi/meS4quajgOafpeaYr+S4jeaYr+W3sue7j+S4jei3keS6huOAjeOAgioqCgotLS0KIyMg4piFIDIwMjYtMTEtMDIg5YeM5pmo56ys5Zub6L2u77ya5Lik5Liq44CM5a6h6K6h44CN5bel5YW3CgojIyMg5oiQ5p6cCgp8IOW3peWFtyB8IOihjOaVsCB8IOaWreiogCB8IOWPmOW8giB8IOe7k+aenCB8CnwtLS18LS0tfC0tLXwtLS18LS0tfAp8IGBmYWxzZS1wb3NpdGl2ZS1hdWRpdGDvvIjlgYfpmLPmgKflrqHorqHvvIl8IDE4OSB8IDE5IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKfCBgbm90Y292ZXJlZC1hdWRpdGDvvIjopobnm5bovrnnlYzlrqHorqHvvIl8IDIyMCB8IDE0IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKCioq5ZCI6K6h77yaMzMg5p2h5pat6KiAIC8gOCDkuKrlj5jlvIIgLyDlhajpg6ggS0lMTEVEKioKCiMjIyDimIUg5YWz6ZSu5bel5L2cIDHvvJrmir3lh7ogZmluZEZhbHNlUG9zaXRpdmVzIOe6r+WHveaVsAoKKirpl67popgqKu+8muWIpOWumumAu+i+keWfi+WcqCBgYW5hbHl6ZSgpYCDph4zvvIzogIwgYGFuYWx5emVgIOimgei3keecn+mXuO+8iGBleGVjRmlsZVN5bmNg77yJCgpgYGBqcwpmdW5jdGlvbiBhbmFseXplKCkgewogIGZvciAoY29uc3QgZyBvZiBHQVRFUykgewogICAgY29uc3QgciA9IHJ1bkdhdGUoZyk7ICAgLy8g4oaQIOecn+i3kemXuO+8jOimgSAzIOWIhumSnwogICAgLy8g5Yik5a6a6YC76L6R5Z+L5Zyo6L+Z6YeMCiAgfQp9CmBgYAoKKirih5Ig5peg5rOV55So6YCg55qE5pWw5o2u5rWL44CCKioKCioq5L+u5rOV77ya5oq95Ye657qv5Ye95pWwIGBmaW5kRmFsc2VQb3NpdGl2ZXMob3V0LCBrbm93bkdvb2QpYCoqCgoqKuKHkiDnjrDlnKjlj6/ku6XnlKjpgKDnmoTovpPlh7rmtYvkuobjgIIqKgoKIyMjIOKYhSDlhbPplK7lt6XkvZwgMu+8mm5vdGNvdmVyZWQtYXVkaXQg5YqgIGJhc2VEaXIg5rOo5YWlCgoqKumXrumimCoq77yaYGF1ZGl0RmlsZWAg55SoIGBwYXRoLmpvaW4oVE9PTFMsIGZpbGVuYW1lKWAg56Gs57yW56CBCioq5L+u5rOVKirvvJrliqAgYG9wdHMuYmFzZURpcmAg5rOo5YWlCgoqKuKHkiDov5nmmK/nrKwgN+OAgTgg5qyh44CM5Yqg5rOo5YWl5omN6IO95rWL44CN44CCKioKCiMjIyDimIUgZmFsc2UtcG9zaXRpdmUtYXVkaXQg55qE5qC45b+D5Yik5o2uCgoqKuWug+WuoeOAjOmXuOS8muS4jeS8muivr+S8pOato+ehruS7o+eggeOAjeOAgioqCgoqKuWFs+mUruWIpOaNru+8iOiHquajgOesrCA3IOadoe+8ie+8muiiq+eCueWQjSDiiaAg6KKr5Yik6Zeu6aKYKioKCmBgYGpzCmNvbnN0IG91dCA9ICcgIEFDVElWRSAgdG9vbHMvYS5janMgICh1c2VkIDUgdGltZXMpJzsKY29uc3QgciA9IGZwYS5maW5kRmFsc2VQb3NpdGl2ZXMob3V0LCBbJ3Rvb2xzL2EuY2pzJ10pOwplcShyLmxlbmd0aCwgMCwgJ21lbnRpb24gd2l0aG91dCBtYXJrZXIgc2hvdWxkIE5PVCBiZSBhIGhpdCcpOwpgYGAKCioq5aS05rOo6YeK6K6w5b2V55qE56ys5LiA54mIIGJ1Z++8mioqCgo+IOOAjOeXhe+8mnRvb2wtdXNhZ2UtYXVkaXQg5YiXIEFDVElWRSDlt6Xlhbfml7bkuZ/kvJrngrnlkI0g4oeSIOiiq+ivr+WIpOaIkOWBh+mYs+aApwo+ICB3cml0ZS1yaXNrLWF1ZGl0IOWcqCBVTktOT1dOIOaho+WIl+aWh+S7tiDih5Ig5Lmf6K+v5Yik44CNCgoqKuS/ruazle+8muWPque7n+iuoeOAjOiiq+eCueWQjSDkuJQg6K+l6KGM5ZCr6Zeu6aKY5qCH6K6w44CN55qE44CCKioKCiMjIyDimIUgbm90Y292ZXJlZC1hdWRpdCDnmoTku7flgLwKCioqQUdFTlRTLm1kIOWOn+ivne+8mioqCgo+IOOAjCoqIuWFqOe7vyLkuI3nrYnkuo4i5YWo6aqM6L+H5LqGIioq44CC5Lu75L2V6Ieq5qOA6YO96K+l5YaZ5riFIuimhuebluS4jeWIsOS7gOS5iCLjgILjgI0KCioq5aS05rOo6YeK6K6w5b2V77yaKioKCj4g44CM5L2G6L+Z5Y+l6K+dKirku47mnaXmsqHooqvmiafooYzov4cqKiDigJTigJQg5rKh5pyJ5Lu75L2V6Ze45qOA5p+l6Ieq5qOA5pyJ5rKh5pyJ5YaZIE5PVF9DT1ZFUkVE44CCCj4gIOWunua1i++8mjQyIOS4quiHquajgOmHjCAqKjUg5Liq5a6M5YWo5rKh5pyJKirjgI0KCioq5Li65LuA5LmI6YeN6KaB77yaKioKCj4g44CM5LiA5Liq5LiN5YaZ44CM6KaG55uW5LiN5Yiw5LuA5LmI44CN55qE6Ieq5qOA77yM6K+76ICF5LyaKirpu5jorqTlroPlhajopobnm5YqKuOAggo+ICDogIzku4rmmZrlj43lpI3or4HmmI7vvJoqKuWFqOe7v+e7j+W4uOaYr+WBh+e7vyoq44CCCj4gIOKHkiDkuI3lhpnovrnnlYznmoToh6rmo4AgPSAqKuS4u+WKqOWItumAoOWBh+WuieWFqOaEnyoq44CC44CNCgojIyMg4piFIOWPiOS4gOS4quWdke+8mlNRIOW/mOWjsOaYju+8iOesrCA0IOasoe+8iQoKKirku4rlpKnnrKwgNCDmrKHjgIzluLjph4/lv5jlo7DmmI7jgI3vvJoqKgoKfCDmrKEgfCDmvI/nmoTluLjph48gfCDlkI7mnpwgfAp8LS0tfC0tLXwtLS18CnwgMSB8IGBOTGAgfCBzZXNzaW9uLWJvb3QgNyDmnaHmlq3oqIDlhajmjIIgfAp8IDIgfCBgRFFgIHwgYnVuZGxlLWhtci1jaGVjayAzIOadoeaWreiogOWFqOaMgiB8CnwgMyB8IGBUQUJgIHwgc3RhZ2VkLWRpZmYtcmV2aWV3IDYg5p2h5pat6KiA5YWo5oyCIHwKfCA0IHwgYFNRYCB8IG5vdGNvdmVyZWQtYXVkaXQgNyDmnaHmlq3oqIDlhajmjIIgfAoKKirih5Ig5bey57uP5pyJ5qih5p2/55Sf5oiQ5Zmo77yIYHNlbGZ0ZXN0LXRlbXBsYXRlLmNqc2DvvInvvIzkvYbov5nmrKHmiJHmsqHnlKjlroPjgIIqKgoKKirmlZnorq3vvJrlhpnmlrDoh6rmo4Dml7bvvIzlhYjot5HmqKHmnb/nlJ/miJDlmajmi7/pqqjmnrbvvIzlho3mlLnlhoXlrrnjgIIqKgoKLS0tCiMjIOKYhSAyMDI2LTExLTAyIOWHjOaZqOesrOS6lOi9ru+8muS4ieS4quW3peWFtyArIOesrCAyIOS4quS4reaWhyBidWcKCiMjIyDmiJDmnpwKCnwg5bel5YW3IHwg6KGM5pWwIHwg5pat6KiAIHwg5Y+Y5byCIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfC0tLXwtLS18CnwgYHRva2VuLWRhaWx5YO+8iHRva2VuIOaXpee7n+iuoe+8iXwgMjc3IHwgMTIgfCA0IHwgKio0LzQgS0lMTEVEKiogfAp8IGByZXNlYXJjaC1maXJzdGDvvIjlhajnkIPmn6XotYTmlpnvvIl8IDQ1MiB8IDIyIHwgNCB8ICoqNC80IEtJTExFRCoqIHwKfCBgc3RhbGUtY29tbWVudC1jaGVja2DvvIjov4fml7bms6jph4rvvIl8IDI3NSB8IDE1IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKCioq5ZCI6K6h77yaNDkg5p2h5pat6KiAIC8gMTIg5Liq5Y+Y5byCIC8g5YWo6YOoIEtJTExFRCoqCgojIyMg4piF4piF4piFIOecnyBidWcgM++8mnN0YWxlLWNvbW1lbnQtY2hlY2sg5Lit5paH5Yy56YWN5aSx5pWICgoqKuiHquajgOesrCA5IOadoeWksei0pe+8mioqCgpgYGAKRkFJTCA5IGdhcCArIGZpeCBzYW1lIGtleXdvcmQgPT4gcmVwb3J0CiAgLT4gc2hvdWxkIHJlcG9ydCAxIGNvbnRyYWRpY3Rpb24gKGV4cGVjdCAxLCBhY3R1YWwgMCkKYGBgCgoqKuWunua1i++8mioqCgpgYGAKZ2FwIGtleXdvcmRzOiBbIuWHgOWdm+WKn+iDvei/mOayoSJdCmZpeCBrZXl3b3JkczogWyLlh4DlnZvlip/og73lt7Lkv64iXQpjb21tb246IFtdCmBgYAoKKirmoLnlm6AqKu+8muWOn+WunueOsOeUqCBgL1vkuIAt6b6lXXsyLDZ9L2dgIOi0quWpquWPliAyLTYg5a2XCgpgYGBqcwovLyDnvLrlj6PooYzjgIzlh4DlnZvlip/og73ov5jmsqHlgZrjgI09PiDlj5bliLDjgIzlh4DlnZvlip/og73ov5jmsqHjgI0KLy8g5L+u5aSN6KGM44CM5YeA5Z2b5Yqf6IO95bey5L+u44CNICA9PiDlj5bliLDjgIzlh4DlnZvlip/og73lt7Lkv67jgI0KLy8gPT4g5Lik5Liq54mH5q615LiN5ZCMID0+IOS6pOmbhuS4uuepuiA9PiDmsLjov5zmo4DmtYvkuI3liLDnn5vnm74KYGBgCgoqKuS/ruazlSoq77ya5pS55oiQIDItZ3JhbSDliIfliIYKCioq5L+u5a6M5Y+I5Ye65paw6Zeu6aKY77yI6YeN6KaB77yB77yJKirvvJoyLWdyYW0g6K6p44CM5YeA5Z2b5Yqf6IO944CN5ZKM44CM5rWP6KeI5Zmo5Yqf6IO944CN5YWx5Lqr5LqG44CM5Yqf6IO944CN4oeSIOivr+aKpeOAggoKKirlho3kv64qKu+8mui/h+a7pOmAmueUqOivjQoKYGBganMKY29uc3QgR0VORVJJQyA9IG5ldyBTZXQoWwogICflip/og70nLCAn6L+Z5LiqJywgJ+mCo+S4qicsICflt7Lnu48nLCAn5bCx5pivJywgJ+S4jeaYrycsICflj6/ku6UnLCAn6ZyA6KaBJywKICAn5LiA5LiqJywgJ+S7gOS5iCcsICfml7blgJknLCAn6Zeu6aKYJywgJ+eOsOWcqCcsICfkuYvliY0nLCAn5LmL5ZCOJywgJ+i/mOaciScsCiAgJ+WmguaenCcsICfkvYbmmK8nLCAn5omA5LulJywgJ+WboOS4uicsICfov5nmoLcnLCAn6YKj5qC3JywgJ+i/memHjCcsICfpgqPph4wnLApdKTsKYGBgCgojIyMg4piFIOi/meaYr+WQjOS4gOaooeW8j+eahOesrCAyIOasoQoKfCDmrKEgfCDlt6XlhbcgfCDpl67popggfCDkv67ms5UgfAp8LS0tfC0tLXwtLS18LS0tfAp8IDEgfCBgc2tpbGwtdHJpZ2dlci1ldmFsYCB8IOS4reaWh+aVtOauteWMuemFjSB8IDItZ3JhbSDliIfliIYgfAp8IDIgfCBgc3RhbGUtY29tbWVudC1jaGVja2AgfCDkuK3mlofotKrlqaogMi02IOWtlyB8IDItZ3JhbSDliIfliIYgKyDpgJrnlKjor43ov4fmu6QgfAoKKirih5Ig5pWZ6K6t77ya5Lit5paH5YiG6K+N5b+F6aG755SoIDItZ3Jhbe+8jOS4jeiDveaVtOauteWMuemFjeS5n+S4jeiDvei0quWpquWPluOAgioqCgoqKuKHkiDogIzkuJQgMi1ncmFtIOW/hemhu+mFjemAmueUqOivjei/h+a7pO+8jOWQpuWImeS8muWboOOAjOWKn+iDveOAjei/meexu+ivjeivr+aKpeOAgioqCgojIyMg4piFIOOAjOa1i+ivleaVsOaNruS4jeWkn+Wdj+OAjeesrCA5IOasoe+8iOacgOmavueahOS4gOasoe+8iQoKKipgc2NjLW5vLW1ldGEtZXhjbHVkZWAg6K+V5LqGIDMg5qyh5omNIEtJTExFRO+8mioqCgoqKuesrCAxIOasoSoq77ya5YWD6K+05piO5Zyo57y65Y+j6KGM5LiK5pa5IOKHkiBsb29rYmFjayDkuZ/kvJrmjpLpmaQKCioq56ysIDIg5qyhKirvvJrlhYPor7TmmI7lkoznvLrlj6PlkIzkuIDooYwg4oeSIOS/ruWkjeihjOeahCBsb29rYmFjayDkvJrnnIvliLDnvLrlj6PooYznmoTjgIzljp/ms6jph4rjgI3ih5Ig5L+u5aSN6KGM5Lmf6KKr5o6S6ZmkCgoqKuesrCAzIOasoSoq77ya5L+u5aSN6KGM5pS+5pyA5LiK6Z2i77yIbG9va2JhY2sg56m677yJ77yM57y65Y+j6KGM5pS+5LiL5pa55ZCr5YWD6K+05piOCgpgYGBqcwonLy8g5YeA5Z2b5Yqf6IO95bey5L+uJywgICAgICAgICAgICAgIC8vIEwxOiBmaXjvvIhsb29rYmFjayDnqbrvvIkKJ2NvbnN0IHggPSAxOycsICAgICAgICAgICAgICAgICAgLy8gTDI6IOS7o+eggQonLy8g5YeA5Z2b5Yqf6IO96L+Y5rKh5YGa77yI5Y6f5rOo6YeK77yJJywgICAgLy8gTDM6IGdhcCArIOWFg+ivtOaYju+8iOWPquaciSBNRVRBIOaOkumZpO+8iQpgYGAKCioq4oeSIOi/meaYr+OAjOS4pOmBk+mXuOWPoOWKoOOAjeeahOacgOmakOiUveahiOS+i++8muS4jeaYr+eugOWNleeahOS4pOmBk+mXuO+8jOiAjOaYr+OAjEEg55qE5o6S6Zmk5b2x5ZON5LqGIEIg55qE5Yik5a6a44CN44CCKioKCiMjIyDimIUgdG9rZW4tZGFpbHkg55qE5rWL6K+V5oqA5benCgoqKumXrumimCoq77yaYGFnZ3JlZ2F0ZSh6c3RkLCBvcHRzKWAg6ZyA6KaBIHpzdGQg6Kej56CB5Zmo77yI546v5aKD5rKh5pyJ77yJCgoqKuino+azlSoq77ya6YCg5YGH55qEIHpzdGQg5a+56LGhCgpgYGBqcwpmdW5jdGlvbiBtYWtlWnN0ZChyZWNzKSB7CiAgcmV0dXJuIHsgcmVhZFNlc3Npb25SZWNvcmRzOiBmdW5jdGlvbiAoKSB7IHJldHVybiByZWNzOyB9IH07Cn0KYGBgCgoqKuKHkiDkuI3pnIDopoHnnJ/nmoQgenN0ZO+8jOWPquimgeaOpeWPo+WvueWwseihjOOAgioqCgoqKuKHkiDov5nlsLHmmK/jgIzlj6/ms6jlhaXjgI3nmoTku7flgLzvvJphZ2dyZWdhdGUg5pS25LqGIHpzdGQg5Y+C5pWw77yM5omA5Lul6IO96YCg5YGH44CCKioKCi0tLQojIyDimIUgMjAyNi0xMS0wMiDlh4zmmajnrKzlha3ova7vvJrkuInkuKrjgIzmo4Dmn6XlmajjgI3lt6XlhbcKCiMjIyDmiJDmnpwKCnwg5bel5YW3IHwg6KGM5pWwIHwg5pat6KiAIHwg5Y+Y5byCIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfC0tLXwtLS18CnwgYHNlbGZ0ZXN0LWxpdmVuZXNzYO+8iOiHquajgOa0u+aAp++8iXwgMjY2IHwgMTcgfCA0IHwgKio0LzQgS0lMTEVEKiogfAp8IGBzdWl0ZS1idWRnZXRg77yI6ICX5pe26aKE566X77yJfCAyNzMgfCAxMyB8IDQgfCAqKjQvNCBLSUxMRUQqKiB8CnwgYGNsaS11c2FiaWxpdHktY2hlY2tg77yIQ0xJIOWPr+eUqOaAp++8iXwgMjc5IHwgMTggfCA0IHwgKio0LzQgS0lMTEVEKiogfAoKKirlkIjorqHvvJo0OCDmnaHmlq3oqIAgLyAxMiDkuKrlj5jlvIIgLyDlhajpg6ggS0lMTEVEKioKCiMjIyDimIUg5YWz6ZSu5bel5L2cIDHvvJrmir3lh7ogZmluZE92ZXJCdWRnZXQKCioq6Zeu6aKYKirvvJrliKTlrprpgLvovpHln4vlnKggYGFuYWx5emUoKWAg6YeM77yM6ICMIGBhbmFseXplYCDopoHot5EgY2hlY2stYWxs77yIYGV4ZWNGaWxlU3luY2DvvIkKCioq5L+u5rOVKirvvJrmir3lh7rnuq/lh73mlbAgYGZpbmRPdmVyQnVkZ2V0KGl0ZW1zLCBidWRnZXRzKWAKCiMjIyDimIUg5YWz6ZSu5bel5L2cIDLvvJrlr7zlh7ogc3RyaXBTdHJpbmdzCgoqKumXrumimCoq77yaYHN0cmlwU3RyaW5nc2Ag5piv5YaF6YOo5Ye95pWw77yM6Ieq5qOA5oqlIGBzbC5zdHJpcFN0cmluZ3MgaXMgbm90IGEgZnVuY3Rpb25gCgoqKuS/ruazlSoq77ya5Yqg6L+bIGBtb2R1bGUuZXhwb3J0c2AKCioq4oeSIOi/meaYr+esrCA5IOasoeOAjOmAu+i+keWfi+WcqOS4jeivpeWfi+eahOWcsOaWueOAjS/jgIzlv5jkuoblr7zlh7rjgI3jgIIqKgoKIyMjIOKYhSDkuInkuKrlt6XlhbfnmoTku7flgLwKCioqYHNlbGZ0ZXN0LWxpdmVuZXNzYO+8iOWtpuiHquS4gOasoeecn+WunuS6i+aVhe+8ie+8mioqCgo+IOOAjOe7mSBwYXRjaC5zZWxmdGVzdC5janMg5YqgIDcg5p2h5rWL6K+V77yM57uT5p6c5o+S6ZSZ5LqG5L2N572u4oCU4oCUCj4gIOaPkui/m+S6hiBgZWxzZSB7IGNvbnNvbGUubG9nKCflhajnu7/jgIInKSB9YCDlnZfph4zpnaLvvIzlnKjmsYfmgLvmiZPljbDkuYvlkI7jgIIKPiAg5LqO5piv77ya5rWL6K+V5Luj56CB5a2Y5Zyo44CB6K+t5rOV5q2j56Gu44CB5L2GKirkuIDooYzpg73msqHmiafooYwqKu+8jAo+ICDogIzoh6rmo4DmiqXlkYoi6YCa6L+HIDM4LzM4IOWFqOe7vyLjgILjgI0KCioq5Li65LuA5LmI5Y2x6Zmp77yaKioKCj4g44CM5YGH6Ziz5oCnID0g5oql5LqG5LiN6K+l5oql55qEIOKHkiDlmarpn7PvvIzog73ooqvlj5HnjrAKPiAg5rWL6K+V5rKh6LeRID0gKirmsqHmiqXor6XmiqXnmoQqKiDih5Ig6Z2Z6buY5aSx5pWI77yM5Y+R546w5LiN5LqGCj4gIOiAjOS4lOWug+WSjCLnnJ/nmoTlhajnu78i5Zyo6L6T5Ye65LiKKirlrozlhajkuIDmoLcqKuOAjQoKKipgc3VpdGUtYnVkZ2V0YO+8iOWtpuiHqiBHb29nbGUgcHJlc3VibWl0IOWunui3te+8ie+8mioqCgo+IOOAjOW8gOWPkeiAheaEv+S4jeaEv+aEj+i3ke+8jOWPluWGs+S6juWPjemmiOacieWkmuW/q+OAggo+ICDkuIDkuKogMzVzIOeahOWll+S7tu+8jOS6uuS8muW8gOWni+OAjOWFiOi3s+i/h+WQp++8jOaUueWujOWGjei3keOAjeKAlOKAlAo+ICDnhLblkI7lsLHmmK/jgIzmlLnlrozkuZ/kuI3ot5HjgI3jgIIKPiAg4oeSICoq5oWi55qE5aWX5Lu2562J5LqO5rKh5Lq66LeR55qE5aWX5Lu2KirjgI0KCioqYGNsaS11c2FiaWxpdHktY2hlY2tg77yI5a2m6IeqIGNsaS1ndWlkZWxpbmVz77yJ77yaKioKCj4g44CM5LuK5pma6YCg5LqGIDMzIOS4quW3peWFt+OAgTMwMiDmnaHmlq3oqIDlhajnu7/jgILkvYYqKuaJgOacieiHquajgOmDveWcqOa1i+OAjOWKn+iDveWvueS4jeWvueOAje+8jAo+ICDku47msqHmtYvov4fjgIzlpb3kuI3lpb3nlKjjgI0qKuOAggo+Cj4gIOWunua1i+ebmOeCue+8iDIyIOS4quS7iuaZmueahOW3peWFt++8ie+8mgo+ICAgIGAtLWhlbHBgOiAgICAxMS8yMiAgIOKGkCDimIXkuIDljYrnmoTlt6XlhbfnlKjmiLfkuI3nn6XpgZPor6XmgI7kuYjnlKgKPiAgICBgLS1kcnktcnVuYDogIDMvMjIKPiAgICBgLS1qc29uYDogICAgIDkvMjIKPiAgICBgLS1zdHJpY3RgOiAgIDUvMjIKPgo+ICDih5Ig44CM5Yqf6IO95a+544CN5ZKM44CM6IO955So44CN5piv5Lik5Lu25LqL44CC44CNCgotLS0KIyMg4piFIDIwMjYtMTEtMDIg5YeM5pmo56ys5LiD6L2u77yadG9vbC11c2FnZS1hdWRpdCArIFNVUlZJVkVEIOiHquWKqOmHjei3keacuuWItgoKIyMjIOaIkOaenAoKfCDlt6XlhbcgfCDooYzmlbAgfCDmlq3oqIAgfCDlj5jlvIIgfCDnu5PmnpwgfAp8LS0tfC0tLXwtLS18LS0tfC0tLXwKfCBgdG9vbC11c2FnZS1hdWRpdGDvvIjlt6Xlhbfkvb/nlKjnjoflrqHorqHvvIl8IDMwNiB8IDE5IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKCiMjIyDimIUg5paw5py65Yi277yaU1VSVklWRUQg6Ieq5Yqo6YeN6LeRCgoqKumXrumimCoq77ya5YWo6YeP6LeR5oqlIGBwYXRyb2wtZGVjaXNpb24tY29uZmAgU1VSVklWRUTvvIzkvYbljZXni6zot5EgNS81IOWFqCBLSUxMRUTjgIIKCioq5L+u5rOVKirvvJrlr7kgU1VSVklWRUQg55qE5Y+Y5byC6Ieq5Yqo6YeN6LeR5LiA5qyhCgpgYGBqcwppZiAoIWRyeVJ1biAmJiBzdXJ2aXZlZCA+IDApIHsKICBmb3IgKGNvbnN0IHIgb2Ygc3Vydml2ZWRMaXN0KSB7CiAgICBjb25zdCBtID0gTVVUQU5UUy5maW5kKCh4KSA9PiB4LmlkID09PSByLmlkKTsKICAgIGNvbnN0IGFwcGxpZWQgPSBhcHBseU11dGFudChtKTsKICAgIGNvbnN0IHJlcyA9IHJ1blNlbGZ0ZXN0KG0uc2VsZnRlc3QpOwogICAgcmVzdG9yZShhcHBsaWVkLmJhY2t1cHMpOwogICAgaWYgKHJlcy5jb2RlICE9PSAwKSB7CiAgICAgIC8vIOmHjei3kSBLSUxMRUQg4oeSIOagh+iusCBGTEFLWe+8iOWBtuWPke+8jOS4jeaYr+WIpOaNrumXrumimO+8iQogICAgICByLnN0YXR1cyA9ICdmbGFreSc7CiAgICB9IGVsc2UgewogICAgICAvLyDph43ot5Hku40gU1VSVklWRUQg4oeSIOehruiupOWIpOaNruaXoOaViAogICAgICBzdGlsbFN1cnZpdmVkKys7CiAgICB9CiAgfQogIHN1cnZpdmVkID0gc3RpbGxTdXJ2aXZlZDsKfQpgYGAKCioq6L6T5Ye65Y+Y5YyW77yaKioKCmBgYArilZDilZDilZAg5rGH5oC7IOKVkOKVkOKVkAogIEtJTExFRO+8iOWIpOaNruacieaViO+8iTogICAxODYKICBTVVJWSVZFRO+8iOWIpOaNruaXoOaViO+8iTogMAogIEZMQUtZ77yI5YG25Y+R77yM6YeN6LeR5q2j5bi477yJOiAxICAgICDihpAg5paw5aKeCiAgU0tJUFBFRO+8iOi3s+i/h++8iTogICAgICAxCmBgYAoKKirih5Ig6L+Z5qC35bCx5LiN5Lya5Zug5Li65YG25Y+R6Zeu6aKY6K+v5Yik44CM5Yik5o2u5peg5pWI44CN44CCKioKCiMjIyDimIUgdG9vbC11c2FnZS1hdWRpdCDnmoTku7flgLwKCioq5aS05rOo6YeK6K6w5b2V77yaKioKCj4g44CM5LuK5pma6YCg5LqGIDYyIOS4quW3peWFt+OAguS9huacieS4qumXrumimOS7juayoeetlOi/h++8mgo+ICAqKui/meS6m+W3peWFt+ecn+eahOS8muiiq+eUqOWIsOWQl++8nyoqCj4KPiAg5a6e5rWL5YiG57G777yINDUg5Liq5LuK5pma5pS5L+aWsOWinueahOW3peWFt++8ie+8mgo+ICAgIOKRoCDlt6XlhbfmnKzkvZPov5sgY2hlY2stYWxs77yI5pel5bi45Lya6LeR77yJICAgICAgKioxNyDkuKoqKgo+ICAgIOKRoSDlj6rmnInoh6rmo4Dov5vlpZfku7bvvIjlt6XlhbfmnKzouqvmmK/miYvliqjlhaXlj6PvvIkgICoqMTgg5LiqKioKPiAgICDikaIg5bel5YW35ZKM6Ieq5qOA6YO95LiN5Zyo5aWX5Lu26YeMICAgICAgICAgICAgICAgICoqMTAg5LiqKiog4oaQIOmXrumimOWcqOi/mQo+Cj4gIOKRoiDph4zmnIDliLrnnLznmoTkuKTkuKrvvJoKPiAgICBgc2VsZi1jaGVjay1maWxsZXItZGV0ZWN0LmNqc2AgLyBgc2VsZi1jaGVjay1oYWxsdWMtZGV0ZWN0LmNqc2AKPiAgICDigJTigJQgKirku4rmmZrliJrkv67ov4flroPku6znmoQgVERaIOW0qea6gyoq77yM5L2G5L+u5a6M5a6D5LusKirov5jmmK/kuI3lnKjku7vkvZXlpZfku7bph4wqKuOAggo+ICAgIOKHkiDkv67kuoYgYnVn77yM5L2G6YKj5Liq5bel5YW35rC46L+c5LiN5Lya6KKr6LeR44CCCj4KPiAg6L+Z5piv44CM5YGH57u/55qE56ys5LqU5bGC44CN55qE5Y+Y5L2T77yaCj4gICAg5LiN5piv44CM6Ze45YGa6ZSZ5LqG44CN77yM5Lmf5LiN5piv44CM6Ze45rKh6KKr6LCD55So44CN4oCU4oCUCj4gICAg6ICM5pivKirjgIzkv67lpb3nmoTlt6XlhbfmsqHooqvosIPnlKjjgI0qKuOAguOAjQoKKirkupTnp43liIbnsbvvvJoqKgoKfCDnirbmgIEgfCDlkKvkuYkgfAp8LS0tfC0tLXwKfCBgQUNUSVZFYCB8IOW3peWFt+acrOS9k+i/m+Wll+S7tu+8jOaXpeW4uOS8mui3kSB8CnwgYE1BTlVBTF9PS2AgfCDlkIjnkIbnmoTmiYvliqjlhaXlj6MgfAp8IGBMSUJSQVJZYCB8IOiiq+WIq+eahOW3peWFtyByZXF1aXJlIHwKfCBgU0VMRlRFU1RfT05MWWAgfCDlj6rmnInoh6rmo4Dov5vlpZfku7YgfAp8IGBPUlBIQU5gIHwg6YO95LiN5ZyoIHwKCioq5a6e5rWL57uT5p6c77yaKioKCmBgYArmiavmj4/lt6Xlhbc6IDQyMwpjaGVjay1hbGwg55m76K6wOiAyNjcKCuKchSBBQ1RJVkUgICAgICAgIDE0Nwril4sgIE1BTlVBTF9PSyAgICAgMjkK4pqqIExJQlJBUlkgICAgICAgMzgKYGBgCgojIyMg4piFIGRhdGFTb3VyY2Vz77ya5bel5YW36Ieq5oql5pWw5o2u5p2l5rqQCgoqKuWktOazqOmHiuiusOW9leeahOeXhe+8iDIwMjYtMTAtMjUg5pma5a6e6Lip77yJ77yaKioKCj4g44CM5oiR5oqK5LiA5Liq5bel5YW35pS55ZCN5ZCO77yMT1JQSEFOIOWIl+ihqOmHjOS7jeWIl+WHuuaXp+WQjeOAggo+ICDmiJHku6XkuLoi5paH5Lu26KKr5oGi5aSN5LqGIu+8jOWOu+S/ruS4gOS4quS4jeWtmOWcqOeahOmXrumimOOAggo+ICDnnJ/nm7jvvJpgcmVhZFJlZ2lzdGVyZWQoKWAg6K+755qE5pivIGNoZWNrLWFsbC5janMg55qEKirmupDnoIHmlofmnKwqKuOAggo+ICDih5Ig4piFIuaWh+S7tuWcqOWTqiLlkowi5riF5Y2V6K+05a6D5Zyo5ZOqIuaYr+S4pOS4quadpea6kO+8jOS8muS6kuebuOefm+ebvuKYhQo+ICDpooTpmLLvvJrku7vkvZUi5YiX6KGo5Z6LIuW3peWFt+i+k+WHuuW/hemhu+iHquaKpeaVsOaNruadpea6kOOAguOAjQoKKirlrp7njrDvvJoqKgoKYGBganMKZnVuY3Rpb24gZGF0YVNvdXJjZXMoKSB7CiAgcmV0dXJuIHsKICAgIHJlZ2lzdGVyZWQ6ICdjaGVjay1hbGwuY2pzIOeahOa6kOeggeaWh+acrO+8iOS4jeaYr+ejgeebmOaJq+aPj++8iScsCiAgICBvbkRpc2s6ICd0b29scy8g55uu5b2V5a6e6ZmF5omr5o+P77yI5o6S6ZmkIF8g5YmN57yAIC8gLnNlbGZ0ZXN0LiAvIC5uZWd0ZXN0LiAvIC5tdXRhdGlvbi7vvIknLAogICAgb3JwaGFuTWVhbmluZzogJ+aXouS4jeWcqCBjaGVjay1hbGwuY2pzIOeZu+iusOmHjOOAgeS5n+ayoeiiq+WIq+eahOW3peWFtyByZXF1aXJlIOKAlOKAlCDkuI3ku6Pooajmlofku7bkuI3lrZjlnKgnLAogIH07Cn0KYGBgCgoqKuKHkiDov5nmmK/jgIzlt6Xlhbfoh6rlt7Hor7TmuIXoh6rlt7HmlbDmja7nmoTovrnnlYzjgI3igJTigJQg6YG/5YWN6K+v5L+h6L6T5Ye644CCKioKCi0tLQojIyDimIUgMjAyNi0xMS0wMiDlh4zmmajnrKzlhavova7vvJpyZXBvLXJ1bGVzLW1ldGEKCiMjIyDmiJDmnpwKCnwg5bel5YW3IHwg6KGM5pWwIHwg5pat6KiAIHwg5Y+Y5byCIHwg57uT5p6cIHwKfC0tLXwtLS18LS0tfC0tLXwtLS18CnwgYHJlcG8tcnVsZXMtbWV0YWDvvIhSOC9SOSDlhYPpqozor4HvvIl8IDI1OSB8IDE5IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKCioq5YWo6YeP6aqM6K+B77yaMTkwIEtJTExFRCAvIDAgU1VSVklWRUQgLyDopobnm5bnjocgMjUlIC8gY2hlY2stYWxsIDYxLzYxKioKCiMjIyDimIUg5YWz6ZSu5bel5L2c77ya5oq95Ye6IHBhcnNlUnVsZVN0YXR1cwoKKirpl67popgqKu+8muino+aekOmAu+i+keWfi+WcqCBgcnVuUnVsZXMoKWAg5YaF6YOo77yM6ICMIGBydW5SdWxlc2Ag6KaBIGBleGVjRmlsZVN5bmNgIOi3kSByZXBvLXJ1bGVz44CCCgoqKuS/ruazlSoq77ya5oq95Ye6IGBwYXJzZVJ1bGVTdGF0dXMob3V0KWAg57qv5Ye95pWw44CCCgpgYGBqcwpmdW5jdGlvbiBwYXJzZVJ1bGVTdGF0dXMob3V0KSB7CiAgY29uc3Qgc3RhdHVzID0ge307CiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKTsKICBmb3IgKGNvbnN0IGxpbmUgb2YgU3RyaW5nKG91dCB8fCAnJykuc3BsaXQoJ1xuJykpIHsKICAgIGlmICgv5bey5YWD6aqM6K+BLy50ZXN0KGxpbmUpKSBjb250aW51ZTsgICAgICAvLyDmjpLpmaTnmbvorrDooYwKICAgIGNvbnN0IG0gPSBsaW5lLm1hdGNoKC9eXHMqKOKchXzinYx84pqgfPCfkqEpXHMrKFJcZClcYi8pOwogICAgaWYgKG0gJiYgIXNlZW4uaGFzKG1bMl0pKSB7ICAgICAgICAgICAgICAgLy8g5Y+q6K6k56ys5LiA5p2hCiAgICAgIHN0YXR1c1ttWzJdXSA9IG1bMV07CiAgICAgIHNlZW4uYWRkKG1bMl0pOwogICAgfQogIH0KICByZXR1cm4gc3RhdHVzOwp9CmBgYAoKIyMjIOKYhSByZXBvLXJ1bGVzLW1ldGEg6K6w5b2V5LqG6Ieq5bex55qEIDIg5LiqIGJ1ZwoKKipidWcgMe+8muino+aekOWZqOWPquiupOmDqOWIhuespuWPtyoqCgo+IOOAjOeXhe+8muino+aekOWZqOWPquiupCDinIUv4p2ML+KaoO+8jOS9hiByZXBvLXJ1bGVzIOi/neinhOaXtui+k+WHuueahOaYryAqKvCfkqEgUjggW09wdGlvbmFsXSoq44CCCj4gIOKHkiDlhYPpqozor4Hor6/liKTjgIzop4TliJnku43nu7/vvIjml6DmlYjvvInjgI3igJTigJQg5a6e6ZmF6KeE5YiZKirmmK/lt6XkvZznmoQqKu+8jOWPquaYr+aIkeayoeiupOmCo+S4quespuWPt+OAggo+ICDimIXov5nmmK/jgIzlhYPpqozor4Hlt6Xlhbfoh6rlt7Hlh7rplJnvvIzlhqTmnonkuobooqvmtYvop4TliJnjgI3nmoTlhbjlnovmoYjkvovjgIIKPiAg5aaC5p6c5LiN5piv5omL5Yqo6LeR5LiA6YGN55yL5Y6f5aeL6L6T5Ye677yM5oiR5Lya5b6X5Ye644CMUjgvUjkg5LuO5p2l5rKh5bel5L2c44CN55qE6ZSZ6K+v57uT6K6644CC44CNCgoqKmJ1ZyAy77ya6Kej5p6Q5Zmo44CM5ZCO5YaZ6KaG55uW44CNKioKCj4g44CM44CQ55eF44CR5a6e5rWL77ya6YCgIFI4IOi/neinhOagt+acrOWQju+8jHJlcG8tcnVsZXMg6L6T5Ye65Lik6KGM77yaCj4gICBMMTog8J+SoSBSOCBbT3B0aW9uYWxdICDmiavmj4/ot6/lvoTph4zkuI3orrjmnInmlY/mhJ/mlofku7YgICDihpAg55yf6L+d6KeECj4gICBMMjogICDinIUgUjgg5bey5YWD6aqM6K+B77ya6YCgIHp6X21ldGFfY3JlZGVudGlhbC5qc29uIOetiSAzIOS4quagt+acrCAg4oaQIOWFg+mqjOivgeeZu+iusOihjAo+ICDliJ3niYjop6PmnpDlmajlvqrnjq/pgY3ljobmiYDmnInooYzjgIEqKuWQjuWGmeimhueblioq77yaCj4gICBzdGF0dXNbJ1I4J10gPSAn8J+SoSfvvIhMMe+8ieKGkiDlj4jooqsgc3RhdHVzWydSOCddID0gJ+KchSfvvIhMMu+8ieimhueblgo+ICDih5Ig5YWD6aqM6K+B6K+v5Yik44CM6KeE5YiZ5LuN57u/77yI5peg5pWI77yJ44CN77yM5Yak5p6J5LqG5a6M5YWo5q2j5bi455qEIFI444CCCj4KPiAg44CQ5qC55Zug44CR5oqK44CM5YWD6aqM6K+B55m76K6w6KGM44CN5b2T5oiQ5LqG44CM6KeE5YiZ5Yik5a6a6KGM44CN44CCCj4gIOKYhei/meaYr+OAjOWIpOaNruivu+WvueS6huWGheWuue+8jOS9huivu+mUmeS6hioq5ZOq5LiA6KGM5omN5piv5Yik5o2uKirjgI3imIUKPgo+ICDjgJDkv67ms5XjgJHikaAg5o6S6Zmk44CM5bey5YWD6aqM6K+B44CN55m76K6w6KGM77yb4pGhIOWPquiupOesrOS4gOadoeWHuueOsOeahOeKtuaAgeOAguOAjQoKKirih5Ig6L+Z5Lik5LiqIGJ1ZyDmraPlpb3mmK/miJHnmoToh6rmo4DopoHmtYvnmoTvvJoqKgotIOiHquajgCAxM++8muiupCDwn5KhCi0g6Ieq5qOAIDE077ya5o6S6Zmk55m76K6w6KGMCi0g6Ieq5qOAIDE177ya5Y+q6K6k56ys5LiA5p2hCgojIyMg4piFIOaIkeiHquW3sei4qeeahOWdke+8mlN0cmluZy5mcm9tQ2hhckNvZGUgdnMgZnJvbUNvZGVQb2ludAoKKirpl67popgqKu+8muiHquajgOesrCAxMy8xNCDmnaHlpLHotKXvvIzwn5KhIOWMuemFjeS4jeS4iuOAggoKKirlrp7mtYvvvJoqKgoKYGBgClN0cmluZy5mcm9tQ2hhckNvZGUoMHgxRjRBMSkgID0+IGxlbj0xICDvvIjljYrkuKrku6PnkIblr7nvvIzmmL7npLrkuLrnqbrvvIkKU3RyaW5nLmZyb21Db2RlUG9pbnQoMHgxRjRBMSkgPT4gbGVuPTIgIO+8iOato+ehru+8iQpgYGAKCioq5qC55ZugKirvvJrwn5KhIOaYryBVKzFGNEEx77yM5ZyoIEJNUO+8iOWfuuacrOWkmuaWh+enjeW5s+mdou+8ieS5i+Wklu+8jOmcgOimgSAyIOS4qiBVVEYtMTYg5Y2V5YWD44CCCgoqKuKHkiDmlZnorq3vvJpCTVAg5LmL5aSW55qE5a2X56ym5b+F6aG755SoIGBTdHJpbmcuZnJvbUNvZGVQb2ludGDjgIIqKgoKKirih5Ig6L+Z5piv44CM6Ieq5qOA6Ieq5bex55qEIGJ1Z+OAje+8jOS4jeaYr+W3peWFt+eahCBidWfjgIIqKgoKIyMjIOKYhSDjgIzmtYvor5XmlbDmja7kuI3lpJ/lnY/jgI3nrKwgMTEg5qyhCgoqKmBycm0tbm8tbWV0YS1leGNsdWRlYCDnrKzkuIDmrKEgU1VSVklWRUTvvJoqKgoKKirmtYvor5UgMTQg5Y6f5qC35pys77yaKioKCmBgYGpzCmNvbnN0IG91dCA9IFsKICBCVUxCICsgJyBSOCBbT3B0aW9uYWxdIHNlbnNpdGl2ZSBmaWxlJywgICAgICAvLyDnnJ/liKTlrprlnKjliY0KICAnICAnICsgQ0hFQ0sgKyAnIFI4IOW3suWFg+mqjOivge+8mumAoOagt+acrCAzIOS4qicsICAgLy8g55m76K6w6KGM5Zyo5ZCOCl07CmBgYAoKKirkuLrku4DkuYjmsqHmipPliLAqKu+8mueZu+iusOihjOWcqOWQjumdoiDih5Ig44CM5Y+q6K6k56ys5LiA5p2h44CN6YC76L6R5YWI5oum5L2P5LqGIOKHkiDmtYvkuI3lh7rjgIzmjpLpmaTnmbvorrDooYzjgI0KCioq5L+u5rOVKirvvJrnmbvorrDooYzmlL7liY3pnaIKCmBgYGpzCmNvbnN0IG91dCA9IFsKICAnICAnICsgQ0hFQ0sgKyAnIFI4IOW3suWFg+mqjOivge+8mumAoOagt+acrCAzIOS4qicsICAgLy8g55m76K6w6KGM5Zyo5YmNCiAgQlVMQiArICcgUjggW09wdGlvbmFsXSBzZW5zaXRpdmUgZmlsZScsICAgICAgIC8vIOecn+WIpOWumuWcqOWQjgpdOwpgYGAKCioq4oeSIOihpeWujOWQjiA0LzQg5YWoIEtJTExFROOAgioqCgotLS0KIyMg4piFIDIwMjYtMTEtMDIg5YeM5pmo56ys5Lmd6L2u77ya5LiJ5Liq5bel5YW3ICsgRkxBS1kg5py65Yi26aaW5qyh55Sf5pWICgojIyMg5oiQ5p6cCgp8IOW3peWFtyB8IOihjOaVsCB8IOaWreiogCB8IOWPmOW8giB8IOe7k+aenCB8CnwtLS18LS0tfC0tLXwtLS18LS0tfAp8IGBkc2gtbWFya2V0LXNob3Bg77yIc2hvcCDovazmjaLvvIl8IDMwNiB8IDIzIHwgNCB8ICoqNC80IEtJTExFRCoqIHwKfCBgY29yZS1tYXBg77yIY29yZSDmjqXnur/lm77vvIl8IDMzOCB8IDE5IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKfCBgd3JpdGUtcmlzay1hdWRpdGDvvIjlhpnpo47pmanlrqHorqHvvIl8IDM3MiB8IDI1IHwgNCB8ICoqNC80IEtJTExFRCoqIHwKCioq5ZCI6K6h77yaNjcg5p2h5pat6KiAIC8gMTIg5Liq5Y+Y5byCIC8g5YWo6YOoIEtJTExFRCoqCgoqKuWFqOmHj+mqjOivge+8mjIwNiBLSUxMRUQgLyAwIFNVUlZJVkVEIC8g6KaG55uW546HIDI3JSAvIGNoZWNrLWFsbCA2MS82MSoqCgojIyMg4piF4piF4piFIEZMQUtZIOacuuWItummluasoeeUn+aViAoKKirlhajph4/ot5Hnu5PmnpzvvJoqKgoKYGBgCvCflIEgRkxBS1kgICAgZnBhLW5vLWJhc2VuYW1lCvCflIEgRkxBS1kgICAgc2tpbGwtbm8tdW5kZXJzY29yZS1za2lwCvCflIEgRkxBS1kgICAgYmhjLXJvb3QtZW1wdHktYWx3YXlzLXRydWUK8J+UgSBGTEFLWSAgICBuY2Etd3JvbmctbWlzc2luZy1jbGFzc2lmeQrwn5SBIEZMQUtZICAgIHJmLW5vLXdvcmQtYm91bmRhcnkK8J+UgSBGTEFLWSAgICBzY2Mtbm8tZ2VuZXJpYy1maWx0ZXIKCktJTExFRO+8iOWIpOaNruacieaViO+8iTogICAxOTMKU1VSVklWRUTvvIjliKTmja7ml6DmlYjvvIk6IDAKRkxBS1nvvIjlgbblj5HvvIzph43ot5HmraPluLjvvIk6IDUKYGBgCgoqKuWmguaenOayoeaciSBGTEFLWSDmnLrliLbvvJoqKgoKYGBgClNVUlZJVkVEOiA1ICAgIOKGkCDkvJror6/liKTmiJDjgIw1IOS4quWIpOaNruaXoOaViOOAjQrih5Ig5Lya5rWq6LS55aSn6YeP5pe26Ze05Y6744CM5L+u44CN5pys5p2l5rKh6Zeu6aKY55qE5Yik5o2uCmBgYAoKKirmnInkuoYgRkxBS1kg5py65Yi277yaKioKCmBgYApTVVJWSVZFRDogMApGTEFLWTogNSAgICAgICDihpAg5piO56Gu5qCH5rOo44CM5YG25Y+R77yM5LiN5piv5Yik5o2u6Zeu6aKY44CNCuKHkiDnn6XpgZPopoHmn6XnmoTmmK/lt6Xlhbfnjq/looPvvIzkuI3mmK/liKTmja4KYGBgCgoqKuKHkiDov5nmmK/jgIzlhYjliIbmuIXpl67popjmgKfotKjvvIzlho3liqjmiYvjgI3nmoTmnLrliLbkv53pmpzjgIIqKgoKIyMjIOKYhSBGTEFLWSDnmoTmoLnlm6DliIbmnpAKCioq5a6e5rWL77ya5Y2V54us6LeRIDMvMyDlhaggS0lMTEVEKioKCmBgYApza2lsbC1uby11bmRlcnNjb3JlLXNraXA6CiAg56ysMeasoTogS0lMTEVECiAg56ysMuasoTogS0lMTEVECiAg56ysM+asoTogS0lMTEVECgpiaGMtcm9vdC1lbXB0eS1hbHdheXMtdHJ1ZToKICDnrKwx5qyhOiBLSUxMRUQKICDnrKwy5qyhOiBLSUxMRUQKICDnrKwz5qyhOiBLSUxMRUQKYGBgCgoqKuKHkiDkuI3mmK/oh6rmo4DmnKzouqvkuI3nqLPlrprvvIzmmK/jgIzlhajph4/ot5HjgI3ml7bnmoTnjq/looPpl67popjjgIIqKgoKKirlj6/og73ljp/lm6DvvJoqKgoxLiDlhajph4/ot5HogJfml7YgNS0xMCDliIbpkp/vvIzkuK3pl7TmnInmlofku7bns7vnu5/nvJPlrZgv6ZSBCjIuIOi/nue7reazqOWFpS/mgaLlpI0gMjAwKyDmrKHvvIzlgbblsJTlhpnlhaXmnKrlrozmiJAKMy4g6Ieq5qOA5YaF6YOo5pyJ5a2Q6L+b56iL77yM5YG25bCU6LaF5pe2CgoqKuKHkiDov5nmmK/lt6Xlhbfnjq/looPpl67popjvvIzkuI3mmK/liKTmja7pl67popjjgIJGTEFLWSDmnLrliLbmraPnoa7lnLDo
Comments
Loading…
Similar plugins
by omdsh-dev
DSH 插件健康检查工具:扫描插件仓库的清单协议 / patch 格式 / 构建陷阱 / hub 收录状态,零依赖只读,注册 plugin_check 工具
★ 26
MIT
TypeScript
Aug 21, 2026
dsh plugin --profile agent add @omdsh-dev/dsh-plugin-checkby liujianqiao701
DSH(DeepSeek Harness)插件兼容性体检:预警下次启动会被拒绝加载的插件,并在页面上按键一键隔离/卸载修掉它(改前自动备份、失败自动回滚)。Plugin compatibility vet for DeepSeek Harness.
★ 0
MIT
JavaScript
Sep 30, 2026
dsh plugin --profile web add dsh-compat-vetby darkmagic-ai
DSH (DeepSeek Harness) security guard plugin: blocks/asks on dangerous commands & sensitive paths, redacts secrets in tool output, local JSONL audit log + guard_report. DSH 安全护栏插件。
★ 0
MIT
JavaScript
Nov 5, 2026
dsh plugin --profile web add dsh-guardrailby d86e
dsh-doctor: self-healing watchdog for the DeepSeek Harness web profile. Recovers from plugin-induced boot failures within 60s, runs an unbounded CLI doctor, captures every tool error, and watches all
★ 4
MIT
TypeScript
Sep 8, 2026
dsh plugin --profile web add @d86e/dsh-doctorby kira905
DSH plugin: self-maintained task board for the DSH web GUI (fork of upstream 0.3.4, detached). A card is a real DSH session, and a human confirms completion rather than the runner. | DSH 插件:自维护任务看板——一
★ 0
Apache-2.0
TypeScript
Oct 20, 2026
dsh plugin --profile web add dsh-task-board-localby zqh260619
DSH(DeepSeek Harness)实时重复输出守卫:模型复读时立即停止生成(默认同一字符串连续重复 ≥10 次;阈值、单元长度、检测窗口、白名单等全部参数可在设置页动态调整)。已生成内容正常提交,不丢消息、不污染会话日志。Real-time repetition guard plugin for DSH, with a graphical settings page and npm one-command install.
★ 4
↓ 1.5k/wk
MIT
JavaScript
Nov 11, 2026
dsh plugin --profile web add dsh-dupguard