LS0gJElkOiBwbS5sdWEsdiAxLjUwIDIwMTgvMDMvMTIgMTQ6MTk6MzYgcm9iZXJ0byBFeHAgJAotLSBTZWUgQ29weXJpZ2h0IE5vdGljZSBpbiBmaWxlIGFsbC5sdWEKCnByaW50KCd0ZXN0aW5nIHBhdHRlcm4gbWF0Y2hpbmcnKQoKbG9jYWwgZnVuY3Rpb24gY2hlY2tlcnJvciAobXNnLCBmLCAuLi4pCiAgbG9jYWwgcywgZXJyID0gcGNhbGwoZiwgLi4uKQogIGFzc2VydChub3QgcyBhbmQgc3RyaW5nLmZpbmQoZXJyLCBtc2cpKQplbmQKCgpmdW5jdGlvbiBmKHMsIHApCiAgbG9jYWwgaSxlID0gc3RyaW5nLmZpbmQocywgcCkKICBpZiBpIHRoZW4gcmV0dXJuIHN0cmluZy5zdWIocywgaSwgZSkgZW5kCmVuZAoKYSxiID0gc3RyaW5nLmZpbmQoJycsICcnKSAgICAtLSBlbXB0eSBwYXR0ZXJucyBhcmUgdHJpY2t5CmFzc2VydChhID09IDEgYW5kIGIgPT0gMCk7CmEsYiA9IHN0cmluZy5maW5kKCdhbG8nLCAnJykKYXNzZXJ0KGEgPT0gMSBhbmQgYiA9PSAwKQphLGIgPSBzdHJpbmcuZmluZCgnYVwwbyBhXDBvIGFcMG8nLCAnYScsIDEpICAgLS0gZmlyc3QgcG9zaXRpb24KYXNzZXJ0KGEgPT0gMSBhbmQgYiA9PSAxKQphLGIgPSBzdHJpbmcuZmluZCgnYVwwbyBhXDBvIGFcMG8nLCAnYVwwbycsIDIpICAgLS0gc3RhcnRzIGluIHRoZSBtaWRsZQphc3NlcnQoYSA9PSA1IGFuZCBiID09IDcpCmEsYiA9IHN0cmluZy5maW5kKCdhXDBvIGFcMG8gYVwwbycsICdhXDBvJywgOSkgICAtLSBzdGFydHMgaW4gdGhlIG1pZGxlCmFzc2VydChhID09IDkgYW5kIGIgPT0gMTEpCmEsYiA9IHN0cmluZy5maW5kKCdhXDBhXDBhXDBhXDBcMGFiJywgJ1wwYWInLCAyKTsgIC0tIGZpbmRzIGF0IHRoZSBlbmQKYXNzZXJ0KGEgPT0gOSBhbmQgYiA9PSAxMSk7CmEsYiA9IHN0cmluZy5maW5kKCdhXDBhXDBhXDBhXDBcMGFiJywgJ2InKSAgICAtLSBsYXN0IHBvc2l0aW9uCmFzc2VydChhID09IDExIGFuZCBiID09IDExKQphc3NlcnQoc3RyaW5nLmZpbmQoJ2FcMGFcMGFcMGFcMFwwYWInLCAnYlwwJykgPT0gbmlsKSAgIC0tIGNoZWNrIGVuZGluZwphc3NlcnQoc3RyaW5nLmZpbmQoJycsICdcMCcpID09IG5pbCkKYXNzZXJ0KHN0cmluZy5maW5kKCdhbG8xMjNhbG8nLCAnMTInKSA9PSA0KQphc3NlcnQoc3RyaW5nLmZpbmQoJ2FsbzEyM2FsbycsICdeMTInKSA9PSBuaWwpCgphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYWFiIiwgIi4qYiIpID09ICJhYWFiIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWFhIiwgIi4qYSIpID09ICJhYWEiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJiIiwgIi4qYiIpID09ICJiIikKCmFzc2VydChzdHJpbmcubWF0Y2goImFhYWIiLCAiLitiIikgPT0gImFhYWIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYWEiLCAiLithIikgPT0gImFhYSIpCmFzc2VydChub3Qgc3RyaW5nLm1hdGNoKCJiIiwgIi4rYiIpKQoKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWFhYiIsICIuP2IiKSA9PSAiYWIiKQphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYWEiLCAiLj9hIikgPT0gImFhIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYiIsICIuP2IiKSA9PSAiYiIpCgphc3NlcnQoZignYWxvQUxPJywgJyVsKicpID09ICdhbG8nKQphc3NlcnQoZignYUxvX0FMTycsICclYSonKSA9PSAnYUxvJykKCmFzc2VydChmKCIgIFxuXHIqJlxuXHIgICB4dXh1ICBcblxuIiwgIiVnJWclZysiKSA9PSAieHV4dSIpCgphc3NlcnQoZignYWFhYicsICdhKicpID09ICdhYWEnKTsKYXNzZXJ0KGYoJ2FhYScsICdeLiokJykgPT0gJ2FhYScpOwphc3NlcnQoZignYWFhJywgJ2IqJykgPT0gJycpOwphc3NlcnQoZignYWFhJywgJ2FiKmEnKSA9PSAnYWEnKQphc3NlcnQoZignYWJhJywgJ2FiKmEnKSA9PSAnYWJhJykKYXNzZXJ0KGYoJ2FhYWInLCAnYSsnKSA9PSAnYWFhJykKYXNzZXJ0KGYoJ2FhYScsICdeLiskJykgPT0gJ2FhYScpCmFzc2VydChmKCdhYWEnLCAnYisnKSA9PSBuaWwpCmFzc2VydChmKCdhYWEnLCAnYWIrYScpID09IG5pbCkKYXNzZXJ0KGYoJ2FiYScsICdhYithJykgPT0gJ2FiYScpCmFzc2VydChmKCdhJGEnLCAnLiQnKSA9PSAnYScpCmFzc2VydChmKCdhJGEnLCAnLiUkJykgPT0gJ2EkJykKYXNzZXJ0KGYoJ2EkYScsICcuJC4nKSA9PSAnYSRhJykKYXNzZXJ0KGYoJ2EkYScsICckJCcpID09IG5pbCkKYXNzZXJ0KGYoJ2EkYicsICdhJCcpID09IG5pbCkKYXNzZXJ0KGYoJ2EkYScsICckJykgPT0gJycpCmFzc2VydChmKCcnLCAnYionKSA9PSAnJykKYXNzZXJ0KGYoJ2FhYScsICdiYionKSA9PSBuaWwpCmFzc2VydChmKCdhYWFiJywgJ2EtJykgPT0gJycpCmFzc2VydChmKCdhYWEnLCAnXi4tJCcpID09ICdhYWEnKQphc3NlcnQoZignYWFiYWFhYmFhYWJhYWFiYScsICdiLipiJykgPT0gJ2JhYWFiYWFhYmFhYWInKQphc3NlcnQoZignYWFiYWFhYmFhYWJhYWFiYScsICdiLi1iJykgPT0gJ2JhYWFiJykKYXNzZXJ0KGYoJ2FsbyB4bycsICcubyQnKSA9PSAneG8nKQphc3NlcnQoZignIFxuIGlzdG8g6SBhc3NpbScsICclUyVTKicpID09ICdpc3RvJykKYXNzZXJ0KGYoJyBcbiBpc3RvIOkgYXNzaW0nLCAnJVMqJCcpID09ICdhc3NpbScpCmFzc2VydChmKCcgXG4gaXN0byDpIGFzc2ltJywgJ1thLXpdKiQnKSA9PSAnYXNzaW0nKQphc3NlcnQoZigndW0gY2FyYWN0ZXIgPyBleHRyYScsICdbXiVzYS16XScpID09ICc/JykKYXNzZXJ0KGYoJycsICdhPycpID09ICcnKQphc3NlcnQoZign4ScsICfhPycpID09ICfhJykKYXNzZXJ0KGYoJ+FibCcsICfhP2I/bD8nKSA9PSAn4WJsJykKYXNzZXJ0KGYoJyAg4WJsJywgJ+E/Yj9sPycpID09ICcnKQphc3NlcnQoZignYWEnLCAnXmFhP2E/YScpID09ICdhYScpCmFzc2VydChmKCddXV3hYicsICdbXl1dJykgPT0gJ+EnKQphc3NlcnQoZigiMGFsbyBhbG8iLCAiJXgqIikgPT0gIjBhIikKYXNzZXJ0KGYoImFsbyBhbG8iLCAiJUMrIikgPT0gImFsbyBhbG8iKQpwcmludCgnKycpCgoKZnVuY3Rpb24gZjEocywgcCkKICBwID0gc3RyaW5nLmdzdWIocCwgIiUlKFswLTldKSIsIGZ1bmN0aW9uIChzKQogICAgICAgIHJldHVybiAiJSIgLi4gKHRvbnVtYmVyKHMpKzEpCiAgICAgICBlbmQpCiAgcCA9IHN0cmluZy5nc3ViKHAsICJeKF4/KSIsICIlMSgpIiwgMSkKICBwID0gc3RyaW5nLmdzdWIocCwgIigkPykkIiwgIigpJTEiLCAxKQogIGxvY2FsIHQgPSB7c3RyaW5nLm1hdGNoKHMsIHApfQogIHJldHVybiBzdHJpbmcuc3ViKHMsIHRbMV0sIHRbI3RdIC0gMSkKZW5kCgphc3NlcnQoZjEoJ2FsbyBhbHggMTIzIGJcMG8gYlwwbycsICcoLi4qKSAlMScpID09ICJiXDBvIGJcMG8iKQphc3NlcnQoZjEoJ2F4ejEyMz0gND0gNCAzNCcsICcoLispPSguKik9JTIgJTEnKSA9PSAnMz0gND0gNCAzJykKYXNzZXJ0KGYxKCc9PT09PT09JywgJ14oPSopPSUxJCcpID09ICc9PT09PT09JykKYXNzZXJ0KHN0cmluZy5tYXRjaCgnPT09PT09PT09PScsICdeKFs9XSopPSUxJCcpID09IG5pbCkKCmxvY2FsIGZ1bmN0aW9uIHJhbmdlIChpLCBqKQogIGlmIGkgPD0gaiB0aGVuCiAgICByZXR1cm4gaSwgcmFuZ2UoaSsxLCBqKQogIGVuZAplbmQKCmxvY2FsIGFiYyA9IHN0cmluZy5jaGFyKHJhbmdlKDAsIDEyNykpIC4uIHN0cmluZy5jaGFyKHJhbmdlKDEyOCwgMjU1KSk7Cgphc3NlcnQoc3RyaW5nLmxlbihhYmMpID09IDI1NikKCmZ1bmN0aW9uIHN0cnNldCAocCkKICBsb2NhbCByZXMgPSB7cz0nJ30KICBzdHJpbmcuZ3N1YihhYmMsIHAsIGZ1bmN0aW9uIChjKSByZXMucyA9IHJlcy5zIC4uIGMgZW5kKQogIHJldHVybiByZXMucwplbmQ7Cgphc3NlcnQoc3RyaW5nLmxlbihzdHJzZXQoJ1tcMjAwLVwyMTBdJykpID09IDExKQoKYXNzZXJ0KHN0cnNldCgnW2Etel0nKSA9PSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiKQphc3NlcnQoc3Ryc2V0KCdbYS16JWRdJykgPT0gc3Ryc2V0KCdbJWRhLXV1LXpdJykpCmFzc2VydChzdHJzZXQoJ1thLV0nKSA9PSAiLWEiKQphc3NlcnQoc3Ryc2V0KCdbXiVXXScpID09IHN0cnNldCgnWyV3XScpKQphc3NlcnQoc3Ryc2V0KCdbXSUlXScpID09ICclXScpCmFzc2VydChzdHJzZXQoJ1thJS16XScpID09ICctYXonKQphc3NlcnQoc3Ryc2V0KCdbJV4lWyUtYSVdJS1iXScpID09ICctW11eYWInKQphc3NlcnQoc3Ryc2V0KCclWicpID09IHN0cnNldCgnW1wxLVwyNTVdJykpCmFzc2VydChzdHJzZXQoJy4nKSA9PSBzdHJzZXQoJ1tcMS1cMjU1JXpdJykpCnByaW50KCcrJyk7Cgphc3NlcnQoc3RyaW5nLm1hdGNoKCJhbG8geHl6SyIsICIoJXcrKUsiKSA9PSAieHl6IikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiMjU0IEsiLCAiKCVkKilLIikgPT0gIiIpCmFzc2VydChzdHJpbmcubWF0Y2goImFsbyAiLCAiKCV3KikkIikgPT0gIiIpCmFzc2VydChzdHJpbmcubWF0Y2goImFsbyAiLCAiKCV3KykkIikgPT0gbmlsKQphc3NlcnQoc3RyaW5nLmZpbmQoIijhbG8pIiwgIiUo4SIpID09IDEpCmxvY2FsIGEsIGIsIGMsIGQsIGUgPSBzdHJpbmcubWF0Y2goIuJsbyBhbG8iLCAiXigoKC4pLikuKiAoJXcqKSkkIikKYXNzZXJ0KGEgPT0gJ+JsbyBhbG8nIGFuZCBiID09ICfibCcgYW5kIGMgPT0gJ+InIGFuZCBkID09ICdhbG8nIGFuZCBlID09IG5pbCkKYSwgYiwgYywgZCAgPSBzdHJpbmcubWF0Y2goJzAxMjM0NTY3ODknLCAnKC4rKC4/KSgpKScpCmFzc2VydChhID09ICcwMTIzNDU2Nzg5JyBhbmQgYiA9PSAnJyBhbmQgYyA9PSAxMSBhbmQgZCA9PSBuaWwpCnByaW50KCcrJykKCmFzc2VydChzdHJpbmcuZ3N1Yign/GxvIPxsbycsICf8JywgJ3gnKSA9PSAneGxvIHhsbycpCmFzc2VydChzdHJpbmcuZ3N1YignYWxvIPpsbyAgJywgJyArJCcsICcnKSA9PSAnYWxvIPpsbycpICAtLSB0cmltCmFzc2VydChzdHJpbmcuZ3N1YignICBhbG8gYWxvICAnLCAnXiVzKiguLSklcyokJywgJyUxJykgPT0gJ2FsbyBhbG8nKSAgLS0gZG91YmxlIHRyaW0KYXNzZXJ0KHN0cmluZy5nc3ViKCdhbG8gIGFsbyAgXG4gMTIzXG4gJywgJyVzKycsICcgJykgPT0gJ2FsbyBhbG8gMTIzICcpCnQgPSAiYWLnIGQiCmEsIGIgPSBzdHJpbmcuZ3N1Yih0LCAnKC4pJywgJyUxQCcpCmFzc2VydCgnQCcuLmEgPT0gc3RyaW5nLmdzdWIodCwgJycsICdAJykgYW5kIGIgPT0gNSkKYSwgYiA9IHN0cmluZy5nc3ViKCdhYudkJywgJyguKScsICclMEAnLCAyKQphc3NlcnQoYSA9PSAnYUBiQOdkJyBhbmQgYiA9PSAyKQphc3NlcnQoc3RyaW5nLmdzdWIoJ2FsbyBhbG8nLCAnKClbYWxdJywgJyUxJykgPT0gJzEybyA1Nm8nKQphc3NlcnQoc3RyaW5nLmdzdWIoImFiYz14eXoiLCAiKCV3KikoJXApKCV3KykiLCAiJTMlMiUxLSUwIikgPT0KICAgICAgICAgICAgICAieHl6PWFiYy1hYmM9eHl6IikKYXNzZXJ0KHN0cmluZy5nc3ViKCJhYmMiLCAiJXciLCAiJTElMCIpID09ICJhYWJiY2MiKQphc3NlcnQoc3RyaW5nLmdzdWIoImFiYyIsICIldysiLCAiJTAlMSIpID09ICJhYmNhYmMiKQphc3NlcnQoc3RyaW5nLmdzdWIoJ+Hp7ScsICckJywgJ1ww8/onKSA9PSAn4entXDDz+icpCmFzc2VydChzdHJpbmcuZ3N1YignJywgJ14nLCAncicpID09ICdyJykKYXNzZXJ0KHN0cmluZy5nc3ViKCcnLCAnJCcsICdyJykgPT0gJ3InKQpwcmludCgnKycpCgoKZG8gICAtLSBuZXcgKDUuMy4zKSBzZW1hbnRpY3MgZm9yIGVtcHR5IG1hdGNoZXMKICBhc3NlcnQoc3RyaW5nLmdzdWIoImEgYiBjZCIsICIgKiIsICItIikgPT0gIi1hLWItYy1kLSIpCgogIGxvY2FsIHJlcyA9ICIiCiAgbG9jYWwgc3ViID0gImEgIFxuYmNcdFx0ZCIKICBsb2NhbCBpID0gMQogIGZvciBwLCBlIGluIHN0cmluZy5nbWF0Y2goc3ViLCAiKCklcyooKSIpIGRvCiAgICByZXMgPSByZXMgLi4gc3RyaW5nLnN1YihzdWIsIGksIHAgLSAxKSAuLiAiLSIKICAgIGkgPSBlCiAgZW5kCiAgYXNzZXJ0KHJlcyA9PSAiLWEtYi1jLWQtIikKZW5kCgoKYXNzZXJ0KHN0cmluZy5nc3ViKCJ1bSAoZG9pcykgdHJlcyAocXVhdHJvKSIsICIoJSgldyslKSkiLCBzdHJpbmcudXBwZXIpID09CiAgICAgICAgICAgICJ1bSAoRE9JUykgdHJlcyAoUVVBVFJPKSIpCgpkbwogIGxvY2FsIGZ1bmN0aW9uIHNldGdsb2JhbCAobix2KSByYXdzZXQoX0csIG4sIHYpIGVuZAogIHN0cmluZy5nc3ViKCJhPXJvYmVydG8scm9iZXJ0bz1hIiwgIigldyspPSgldyV3KikiLCBzZXRnbG9iYWwpCiAgYXNzZXJ0KF9HLmE9PSJyb2JlcnRvIiBhbmQgX0cucm9iZXJ0bz09ImEiKQplbmQKCmZ1bmN0aW9uIGYoYSxiKSByZXR1cm4gc3RyaW5nLmdzdWIoYSwnLicsYikgZW5kCmFzc2VydChzdHJpbmcuZ3N1YigidHJvY2FyIHR1ZG8gZW0gfHRlc3RlfGJ8IOkgfGJlbGV6YXxhbHwiLCAifChbXnxdKil8KFtefF0qKXwiLCBmKSA9PQogICAgICAgICAgICAidHJvY2FyIHR1ZG8gZW0gYmJiYmIg6SBhbGFsYWxhbGFsYWwiKQoKbG9jYWwgZnVuY3Rpb24gZG9zdHJpbmcgKHMpIHJldHVybiBsb2FkKHMsICIiKSgpIG9yICIiIGVuZAphc3NlcnQoc3RyaW5nLmdzdWIoImFsbyAkYT0neCckIG5vdmFtZW50ZSAkcmV0dXJuIGEkIiwKICAgICAgICAgICAgICAgICAgICIkKFteJF0qKSUkIiwKICAgICAgICAgICAgICAgICAgIGRvc3RyaW5nKSA9PSAiYWxvICBub3ZhbWVudGUgeCIpCgp4ID0gc3RyaW5nLmdzdWIoIiR4PXN0cmluZy5nc3ViKCdhbG8nLCAnLicsIHN0cmluZy51cHBlcikkIGFzc2ltIHZhaSBwYXJhICRyZXR1cm4geCQiLAogICAgICAgICAiJChbXiRdKiklJCIsIGRvc3RyaW5nKQphc3NlcnQoeCA9PSAnIGFzc2ltIHZhaSBwYXJhIEFMTycpCgp0ID0ge30KcyA9ICdhIGFsbyBqb3NlICBqb2FvJwpyID0gc3RyaW5nLmdzdWIocywgJygpKCV3KykoKScsIGZ1bmN0aW9uIChhLHcsYikKICAgICAgYXNzZXJ0KHN0cmluZy5sZW4odykgPT0gYi1hKTsKICAgICAgdFthXSA9IGItYTsKICAgIGVuZCkKYXNzZXJ0KHMgPT0gciBhbmQgdFsxXSA9PSAxIGFuZCB0WzNdID09IDMgYW5kIHRbN10gPT0gNCBhbmQgdFsxM10gPT0gNCkKCgpmdW5jdGlvbiBpc2JhbGFuY2VkIChzKQogIHJldHVybiBzdHJpbmcuZmluZChzdHJpbmcuZ3N1YihzLCAiJWIoKSIsICIiKSwgIlsoKV0iKSA9PSBuaWwKZW5kCgphc3NlcnQoaXNiYWxhbmNlZCgiKDkgKCg4KSkoXDApIDcpIFwwXDAgYSBiICgpKGMpKCkgYSIpKQphc3NlcnQobm90IGlzYmFsYW5jZWQoIig5ICgoOCkgNykgYSBiIChcMCBjKSBhIikpCmFzc2VydChzdHJpbmcuZ3N1YigiYWxvICdvaScgYWxvIiwgIiViJyciLCAnIicpID09ICdhbG8gIiBhbG8nKQoKCmxvY2FsIHQgPSB7ImFwcGxlIiwgIm9yYW5nZSIsICJsaW1lIjsgbj0wfQphc3NlcnQoc3RyaW5nLmdzdWIoInggYW5kIHggYW5kIHgiLCAieCIsIGZ1bmN0aW9uICgpIHQubj10Lm4rMTsgcmV0dXJuIHRbdC5uXSBlbmQpCiAgICAgICAgPT0gImFwcGxlIGFuZCBvcmFuZ2UgYW5kIGxpbWUiKQoKdCA9IHtuPTB9CnN0cmluZy5nc3ViKCJmaXJzdCBzZWNvbmQgd29yZCIsICIldyV3KiIsIGZ1bmN0aW9uICh3KSB0Lm49dC5uKzE7IHRbdC5uXSA9IHcgZW5kKQphc3NlcnQodFsxXSA9PSAiZmlyc3QiIGFuZCB0WzJdID09ICJzZWNvbmQiIGFuZCB0WzNdID09ICJ3b3JkIiBhbmQgdC5uID09IDMpCgp0ID0ge249MH0KYXNzZXJ0KHN0cmluZy5nc3ViKCJmaXJzdCBzZWNvbmQgd29yZCIsICIldysiLAogICAgICAgICBmdW5jdGlvbiAodykgdC5uPXQubisxOyB0W3Qubl0gPSB3IGVuZCwgMikgPT0gImZpcnN0IHNlY29uZCB3b3JkIikKYXNzZXJ0KHRbMV0gPT0gImZpcnN0IiBhbmQgdFsyXSA9PSAic2Vjb25kIiBhbmQgdFszXSA9PSB1bmRlZikKCmNoZWNrZXJyb3IoImludmFsaWQgcmVwbGFjZW1lbnQgdmFsdWUgJShhIHRhYmxlJSkiLAogICAgICAgICAgICBzdHJpbmcuZ3N1YiwgImFsbyIsICIuIiwge2EgPSB7fX0pCmNoZWNrZXJyb3IoImludmFsaWQgY2FwdHVyZSBpbmRleCAlJTIiLCBzdHJpbmcuZ3N1YiwgImFsbyIsICIuIiwgIiUyIikKY2hlY2tlcnJvcigiaW52YWxpZCBjYXB0dXJlIGluZGV4ICUlMCIsIHN0cmluZy5nc3ViLCAiYWxvIiwgIiglMCkiLCAiYSIpCmNoZWNrZXJyb3IoImludmFsaWQgY2FwdHVyZSBpbmRleCAlJTEiLCBzdHJpbmcuZ3N1YiwgImFsbyIsICIoJTEpIiwgImEiKQpjaGVja2Vycm9yKCJpbnZhbGlkIHVzZSBvZiAnJSUnIiwgc3RyaW5nLmdzdWIsICJhbG8iLCAiLiIsICIleCIpCgotLSBidWcgc2luY2UgMi41IChDLXN0YWNrIG92ZXJmbG93KQpkbwogIGxvY2FsIGZ1bmN0aW9uIGYgKHNpemUpCiAgICBsb2NhbCBzID0gc3RyaW5nLnJlcCgiYSIsIHNpemUpCiAgICBsb2NhbCBwID0gc3RyaW5nLnJlcCgiLj8iLCBzaXplKQogICAgcmV0dXJuIHBjYWxsKHN0cmluZy5tYXRjaCwgcywgcCkKICBlbmQKICBsb2NhbCByLCBtID0gZig4MCkKICBhc3NlcnQociBhbmQgI20gPT0gODApCiAgciwgbSA9IGYoMjAwMDAwKQogIGFzc2VydChub3QgciBhbmQgc3RyaW5nLmZpbmQobSwgInRvbyBjb21wbGV4IikpCmVuZAoKaWYgbm90IF9zb2Z0IHRoZW4KICBwcmludCgiYmlnIHN0cmluZ3MiKQogIGxvY2FsIGEgPSBzdHJpbmcucmVwKCdhJywgMzAwMDAwKQogIGFzc2VydChzdHJpbmcuZmluZChhLCAnXmEqLj8kJykpCiAgYXNzZXJ0KG5vdCBzdHJpbmcuZmluZChhLCAnXmEqLj9iJCcpKQogIGFzc2VydChzdHJpbmcuZmluZChhLCAnXmEtLj8kJykpCgogIC0tIGJ1ZyBpbiA1LjEuMgogIGEgPSBzdHJpbmcucmVwKCdhJywgMTAwMDApIC4uIHN0cmluZy5yZXAoJ2InLCAxMDAwMCkKICBhc3NlcnQobm90IHBjYWxsKHN0cmluZy5nc3ViLCBhLCAnYicpKQplbmQKCi0tIHJlY3Vyc2l2ZSBuZXN0IG9mIGdzdWJzCmZ1bmN0aW9uIHJldiAocykKICByZXR1cm4gc3RyaW5nLmdzdWIocywgIiguKSguKykiLCBmdW5jdGlvbiAoYyxzMSkgcmV0dXJuIHJldihzMSkuLmMgZW5kKQplbmQKCmxvY2FsIHggPSAiYWJjZGVmIgphc3NlcnQocmV2KHJldih4KSkgPT0geCkKCgotLSBnc3ViIHdpdGggdGFibGVzCmFzc2VydChzdHJpbmcuZ3N1YigiYWxvIGFsbyIsICIuIiwge30pID09ICJhbG8gYWxvIikKYXNzZXJ0KHN0cmluZy5nc3ViKCJhbG8gYWxvIiwgIiguKSIsIHthPSJBQSIsIGw9IiJ9KSA9PSAiQUFvIEFBbyIpCmFzc2VydChzdHJpbmcuZ3N1YigiYWxvIGFsbyIsICIoLikuIiwge2E9IkFBIiwgbD0iSyJ9KSA9PSAiQUFvIEFBbyIpCmFzc2VydChzdHJpbmcuZ3N1YigiYWxvIGFsbyIsICIoKC4pKC4/KSkiLCB7YWw9IkFBIiwgbz1mYWxzZX0pID09ICJBQW8gQUFvIikKCmFzc2VydChzdHJpbmcuZ3N1YigiYWxvIGFsbyIsICIoKS4iLCB7J3gnLCd5eScsJ3p6eid9KSA9PSAieHl5enp6IGFsbyIpCgp0ID0ge307IHNldG1ldGF0YWJsZSh0LCB7X19pbmRleCA9IGZ1bmN0aW9uICh0LHMpIHJldHVybiBzdHJpbmcudXBwZXIocykgZW5kfSkKYXNzZXJ0KHN0cmluZy5nc3ViKCJhIGFsbyBiIGhpIiwgIiV3JXcrIiwgdCkgPT0gImEgQUxPIGIgSEkiKQoKCi0tIHRlc3RzIGZvciBnbWF0Y2gKbG9jYWwgYSA9IDAKZm9yIGkgaW4gc3RyaW5nLmdtYXRjaCgnYWJjZGUnLCAnKCknKSBkbyBhc3NlcnQoaSA9PSBhKzEpOyBhPWkgZW5kCmFzc2VydChhPT02KQoKdCA9IHtuPTB9CmZvciB3IGluIHN0cmluZy5nbWF0Y2goImZpcnN0IHNlY29uZCB3b3JkIiwgIiV3KyIpIGRvCiAgICAgIHQubj10Lm4rMTsgdFt0Lm5dID0gdwplbmQKYXNzZXJ0KHRbMV0gPT0gImZpcnN0IiBhbmQgdFsyXSA9PSAic2Vjb25kIiBhbmQgdFszXSA9PSAid29yZCIpCgp0ID0gezMsIDYsIDl9CmZvciBpIGluIHN0cmluZy5nbWF0Y2ggKCJ4dXh4IHV1IHBwYXIgciIsICIoKSguKSUyIikgZG8KICBhc3NlcnQoaSA9PSB0YWJsZS5yZW1vdmUodCwgMSkpCmVuZAphc3NlcnQoI3QgPT0gMCkKCnQgPSB7fQpmb3IgaSxqIGluIHN0cmluZy5nbWF0Y2goIjEzIDE0IDEwID0gMTEsIDE1PSAxNiwgMjI9MjMiLCAiKCVkKyklcyo9JXMqKCVkKykiKSBkbwogIHRbdG9udW1iZXIoaSldID0gdG9udW1iZXIoaikKZW5kCmEgPSAwCmZvciBrLHYgaW4gcGFpcnModCkgZG8gYXNzZXJ0KGsrMSA9PSB2KzApOyBhPWErMSBlbmQKYXNzZXJ0KGEgPT0gMykKCgotLSB0ZXN0cyBmb3IgYCVmJyAoYGZyb250aWVycycpCgphc3NlcnQoc3RyaW5nLmdzdWIoImFhYSBhYSBhIGFhYSBhIiwgIiVmWyV3XWEiLCAieCIpID09ICJ4YWEgeGEgeCB4YWEgeCIpCmFzc2VydChzdHJpbmcuZ3N1YigiW1tdXSBbXVtdIFtbW1siLCAiJWZbW10uIiwgIngiKSA9PSAieFtdXSB4XXhdIHhbW1siKQphc3NlcnQoc3RyaW5nLmdzdWIoIjAxYWJjNDVkZTMiLCAiJWZbJWRdIiwgIi4iKSA9PSAiLjAxYWJjLjQ1ZGUuMyIpCmFzc2VydChzdHJpbmcuZ3N1YigiMDFhYmM0NSBkZTN4IiwgIiVmWyVEXSV3IiwgIi4iKSA9PSAiMDEuYmM0NSBkZTMuIikKYXNzZXJ0KHN0cmluZy5nc3ViKCJmdW5jdGlvbiIsICIlZltcMS1cMjU1XSV3IiwgIi4iKSA9PSAiLnVuY3Rpb24iKQphc3NlcnQoc3RyaW5nLmdzdWIoImZ1bmN0aW9uIiwgIiVmW15cMS1cMjU1XSIsICIuIikgPT0gImZ1bmN0aW9uLiIpCgphc3NlcnQoc3RyaW5nLmZpbmQoImEiLCAiJWZbYV0iKSA9PSAxKQphc3NlcnQoc3RyaW5nLmZpbmQoImEiLCAiJWZbXiV6XSIpID09IDEpCmFzc2VydChzdHJpbmcuZmluZCgiYSIsICIlZlteJWxdIikgPT0gMikKYXNzZXJ0KHN0cmluZy5maW5kKCJhYmEiLCAiJWZbYSV6XSIpID09IDMpCmFzc2VydChzdHJpbmcuZmluZCgiYWJhIiwgIiVmWyV6XSIpID09IDQpCmFzc2VydChub3Qgc3RyaW5nLmZpbmQoImFiYSIsICIlZlslbCV6XSIpKQphc3NlcnQobm90IHN0cmluZy5maW5kKCJhYmEiLCAiJWZbXiVsJXpdIikpCgpsb2NhbCBpLCBlID0gc3RyaW5nLmZpbmQoIiBhbG8gYWFsbyBhbGxvIiwgIiVmWyVTXS4tJWZbJXNdLi0lZlslU10iKQphc3NlcnQoaSA9PSAyIGFuZCBlID09IDUpCmxvY2FsIGsgPSBzdHJpbmcubWF0Y2goIiBhbG8gYWFsbyBhbGxvIiwgIiVmWyVTXSguLSVmWyVzXS4tJWZbJVNdKSIpCmFzc2VydChrID09ICdhbG8gJykKCmxvY2FsIGEgPSB7MSwgNSwgOSwgMTQsIDE3LH0KZm9yIGsgaW4gc3RyaW5nLmdtYXRjaCgiYWxvIGFsbyB0aDAyIGlzIDFoYXQiLCAiKCklZlsldyVkXSIpIGRvCiAgYXNzZXJ0KHRhYmxlLnJlbW92ZShhLCAxKSA9PSBrKQplbmQKYXNzZXJ0KCNhID09IDApCgoKLS0gbWFsZm9ybWVkIHBhdHRlcm5zCmxvY2FsIGZ1bmN0aW9uIG1hbGZvcm0gKHAsIG0pCiAgbSA9IG0gb3IgIm1hbGZvcm1lZCIKICBsb2NhbCByLCBtc2cgPSBwY2FsbChzdHJpbmcuZmluZCwgImEiLCBwKQogIGFzc2VydChub3QgciBhbmQgc3RyaW5nLmZpbmQobXNnLCBtKSkKZW5kCgptYWxmb3JtKCIoLiIsICJ1bmZpbmlzaGVkIGNhcHR1cmUiKQptYWxmb3JtKCIuKSIsICJpbnZhbGlkIHBhdHRlcm4gY2FwdHVyZSIpCm1hbGZvcm0oIlthIikKbWFsZm9ybSgiW10iKQptYWxmb3JtKCJbXl0iKQptYWxmb3JtKCJbYSVdIikKbWFsZm9ybSgiW2ElIikKbWFsZm9ybSgiJWIiKQptYWxmb3JtKCIlYmEiKQptYWxmb3JtKCIlIikKbWFsZm9ybSgiJWYiLCAibWlzc2luZyIpCgotLSBcMCBpbiBwYXR0ZXJucwphc3NlcnQoc3RyaW5nLm1hdGNoKCJhYlwwXDFcMmMiLCAiW1wwLVwyXSsiKSA9PSAiXDBcMVwyIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJcMFwxXDJjIiwgIltcMC1cMF0rIikgPT0gIlwwIikKYXNzZXJ0KHN0cmluZy5maW5kKCJiJGEiLCAiJFwwPyIpID09IDIpCmFzc2VydChzdHJpbmcuZmluZCgiYWJjXDBlZmciLCAiJVwwIikgPT0gNCkKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJjXDBlZmdcMFwxZVwxZyIsICIlYlwwXDEiKSA9PSAiXDBlZmdcMFwxZVwxIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJjXDBcMFwwIiwgIiVcMCsiKSA9PSAiXDBcMFwwIikKYXNzZXJ0KHN0cmluZy5tYXRjaCgiYWJjXDBcMFwwIiwgIiVcMCVcMD8iKSA9PSAiXDBcMCIpCgotLSBtYWdpYyBjaGFyIGFmdGVyIFwwCmFzc2VydChzdHJpbmcuZmluZCgiYWJjXDBcMCIsIlwwLiIpID09IDQpCmFzc2VydChzdHJpbmcuZmluZCgiYWJjeFwwXDBhYmNcMGFiYyIsInhcMFwwYWJjXDBhLiIpID09IDQpCgpwcmludCgnT0snKQoK