Asteroids Gxme

javascript:eval(atob('KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQXN0ZXJvaWRzKCl7aWYoIXdpbmRvdy5BU1RFUk9JRFMpe3dpbmRvdy5BU1RFUk9JRFM9e2VuZW1pZXNLaWxsZWQ6MH19ZnVuY3Rpb24gVmVjdG9yKHgseSl7aWYodHlwZW9mIHg9PSdPYmplY3QnKXt0aGlzLng9eC54O3RoaXMueT14Lnl9ZWxzZXt0aGlzLng9eDt0aGlzLnk9eX19O1ZlY3Rvci5wcm90b3R5cGU9e2NwOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBWZWN0b3IodGhpcy54LHRoaXMueSl9LG11bDpmdW5jdGlvbihmYWN0b3Ipe3RoaXMueCo9ZmFjdG9yO3RoaXMueSo9ZmFjdG9yO3JldHVybiB0aGlzfSxtdWxOZXc6ZnVuY3Rpb24oZmFjdG9yKXtyZXR1cm4gbmV3IFZlY3Rvcih0aGlzLngqZmFjdG9yLHRoaXMueSpmYWN0b3IpfSxhZGQ6ZnVuY3Rpb24odmVjKXt0aGlzLngrPXZlYy54O3RoaXMueSs9dmVjLnk7cmV0dXJuIHRoaXN9LGFkZE5ldzpmdW5jdGlvbih2ZWMpe3JldHVybiBuZXcgVmVjdG9yKHRoaXMueCt2ZWMueCx0aGlzLnkrdmVjLnkpfSxzdWI6ZnVuY3Rpb24odmVjKXt0aGlzLngtPXZlYy54O3RoaXMueS09dmVjLnk7cmV0dXJuIHRoaXN9LHN1Yk5ldzpmdW5jdGlvbih2ZWMpe3JldHVybiBuZXcgVmVjdG9yKHRoaXMueC12ZWMueCx0aGlzLnktdmVjLnkpfSxyb3RhdGU6ZnVuY3Rpb24oYW5nbGUpe3ZhciB4PXRoaXMueCx5PXRoaXMueTt0aGlzLng9eCpNYXRoLmNvcyhhbmdsZSktTWF0aC5zaW4oYW5nbGUpKnk7dGhpcy55PXgqTWF0aC5zaW4oYW5nbGUpK01hdGguY29zKGFuZ2xlKSp5O3JldHVybiB0aGlzfSxyb3RhdGVOZXc6ZnVuY3Rpb24oYW5nbGUpe3JldHVybiB0aGlzLmNwKCkucm90YXRlKGFuZ2xlKX0sc2V0QW5nbGU6ZnVuY3Rpb24oYW5nbGUpe3ZhciBsPXRoaXMubGVuKCk7dGhpcy54PU1hdGguY29zKGFuZ2xlKSpsO3RoaXMueT1NYXRoLnNpbihhbmdsZSkqbDtyZXR1cm4gdGhpc30sc2V0QW5nbGVOZXc6ZnVuY3Rpb24oYW5nbGUpe3JldHVybiB0aGlzLmNwKCkuc2V0QW5nbGUoYW5nbGUpfSxzZXRMZW5ndGg6ZnVuY3Rpb24obGVuZ3RoKXt2YXIgbD10aGlzLmxlbigpO2lmKGwpe3RoaXMubXVsKGxlbmd0aC9sKX1lbHNle3RoaXMueD10aGlzLnk9bGVuZ3RofXJldHVybiB0aGlzfSxzZXRMZW5ndGhOZXc6ZnVuY3Rpb24obGVuZ3RoKXtyZXR1cm4gdGhpcy5jcCgpLnNldExlbmd0aChsZW5ndGgpfSxub3JtYWxpemU6ZnVuY3Rpb24oKXt2YXIgbD10aGlzLmxlbigpO3RoaXMueC89bDt0aGlzLnkvPWw7cmV0dXJuIHRoaXN9LG5vcm1hbGl6ZU5ldzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNwKCkubm9ybWFsaXplKCl9LGFuZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYXRhbjIodGhpcy55LHRoaXMueCl9LGNvbGxpZGVzV2l0aDpmdW5jdGlvbihyZWN0KXtyZXR1cm4gdGhpcy54PnJlY3QueCYmdGhpcy55PnJlY3QueSYmdGhpcy54PHJlY3QueCtyZWN0LndpZHRoJiZ0aGlzLnk8cmVjdC55K3JlY3QuaGVpZ2h0fSxsZW46ZnVuY3Rpb24oKXt2YXIgbD1NYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KTtpZihsPDAuMDA1JiZsPi0wLjAwNSl7cmV0dXJuIDB9cmV0dXJuIGx9LGlzOmZ1bmN0aW9uKHRlc3Qpe3JldHVybiB0eXBlb2YgdGVzdD09J29iamVjdCcmJnRoaXMueD09dGVzdC54JiZ0aGlzLnk9PXRlc3QueX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gJ1tWZWN0b3IoJyt0aGlzLngrJywgJyt0aGlzLnkrJykgYW5nbGU6ICcrdGhpcy5hbmdsZSgpKycsIGxlbmd0aDogJyt0aGlzLmxlbigpKyddJ319O2Z1bmN0aW9uIExpbmUocDEscDIpe3RoaXMucDE9cDE7dGhpcy5wMj1wMn07TGluZS5wcm90b3R5cGU9e3NoaWZ0OmZ1bmN0aW9uKHBvcyl7dGhpcy5wMS5hZGQocG9zKTt0aGlzLnAyLmFkZChwb3MpfSxpbnRlcnNlY3RzV2l0aFJlY3Q6ZnVuY3Rpb24ocmVjdCl7dmFyIExMPW5ldyBWZWN0b3IocmVjdC54LHJlY3QueStyZWN0LmhlaWdodCk7dmFyIFVMPW5ldyBWZWN0b3IocmVjdC54LHJlY3QueSk7dmFyIExSPW5ldyBWZWN0b3IocmVjdC54K3JlY3Qud2lkdGgscmVjdC55K3JlY3QuaGVpZ2h0KTt2YXIgVVI9bmV3IFZlY3RvcihyZWN0LngrcmVjdC53aWR0aCxyZWN0LnkpO2lmKHRoaXMucDEueD5MTC54JiZ0aGlzLnAxLng8VVIueCYmdGhpcy5wMS55PExMLnkmJnRoaXMucDEueT5VUi55JiZ0aGlzLnAyLng+TEwueCYmdGhpcy5wMi54PFVSLngmJnRoaXMucDIueTxMTC55JiZ0aGlzLnAyLnk+VVIueSl7cmV0dXJuIHRydWV9aWYodGhpcy5pbnRlcnNlY3RzTGluZShuZXcgTGluZShVTCxMTCkpKXtyZXR1cm4gdHJ1ZX1pZih0aGlzLmludGVyc2VjdHNMaW5lKG5ldyBMaW5lKExMLExSKSkpe3JldHVybiB0cnVlfWlmKHRoaXMuaW50ZXJzZWN0c0xpbmUobmV3IExpbmUoVUwsVVIpKSl7cmV0dXJuIHRydWV9aWYodGhpcy5pbnRlcnNlY3RzTGluZShuZXcgTGluZShVUixMUikpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9LGludGVyc2VjdHNMaW5lOmZ1bmN0aW9uKGxpbmUyKXt2YXIgdjE9dGhpcy5wMSx2Mj10aGlzLnAyO3ZhciB2Mz1saW5lMi5wMSx2ND1saW5lMi5wMjt2YXIgZGVub209KCh2NC55LXYzLnkpKih2Mi54LXYxLngpKS0oKHY0LngtdjMueCkqKHYyLnktdjEueSkpO3ZhciBudW1lcmF0b3I9KCh2NC54LXYzLngpKih2MS55LXYzLnkpKS0oKHY0LnktdjMueSkqKHYxLngtdjMueCkpO3ZhciBudW1lcmF0b3IyPSgodjIueC12MS54KSoodjEueS12My55KSktKCh2Mi55LXYxLnkpKih2MS54LXYzLngpKTtpZihkZW5vbT09MC4wKXtyZXR1cm4gZmFsc2V9dmFyIHVhPW51bWVyYXRvci9kZW5vbTt2YXIgdWI9bnVtZXJhdG9yMi9kZW5vbTtyZXR1cm4odWE+PTAuMCYmdWE8PTEuMCYmdWI+PTAuMCYmdWI8PTEuMCl9fTt2YXIgdGhhdD10aGlzO3ZhciBpc0lFPSEhd2luZG93LkFjdGl2ZVhPYmplY3Q7dmFyIHc9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDt2YXIgcGxheWVyV2lkdGg9MjAscGxheWVySGVpZ2h0PTMwO3ZhciBwbGF5ZXJWZXJ0cz1bWy0xKnBsYXllckhlaWdodC8yLC0xKnBsYXllcldpZHRoLzJdLFstMSpwbGF5ZXJIZWlnaHQvMixwbGF5ZXJXaWR0aC8yXSxbcGxheWVySGVpZ2h0LzIsMF1dO3ZhciBpZ25vcmVkVHlwZXM9WydIVE1MJywnSEVBRCcsJ0JPRFknLCdTQ1JJUFQnLCdUSVRMRScsJ01FVEEnLCdTVFlMRScsJ0xJTksnLCdTSEFQRScsJ0xJTkUnLCdHUk9VUCcsJ0lNQUdFJywnU1RST0tFJywnRklMTCcsJ1NLRVcnLCdQQVRIJywnVEVYVFBBVEgnXTt2YXIgaGlkZGVuVHlwZXM9WydCUicsJ0hSJ107dmFyIEZQUz01MDt2YXIgYWNjPTMwMDt2YXIgbWF4U3BlZWQ9NjAwO3ZhciByb3RTcGVlZD0zNjA7dmFyIGJ1bGxldFNwZWVkPTcwMDt2YXIgcGFydGljbGVTcGVlZD00MDA7dmFyIHRpbWVCZXR3ZWVuRmlyZT0xNTA7dmFyIHRpbWVCZXR3ZWVuQmxpbms9MjUwO3ZhciB0aW1lQmV0d2VlbkVuZW15VXBkYXRlPWlzSUU/MTAwMDA6MjAwMDt2YXIgYnVsbGV0UmFkaXVzPTI7dmFyIG1heFBhcnRpY2xlcz1pc0lFPzIwOjQwO3ZhciBtYXhCdWxsZXRzPWlzSUU/MTA6MjA7dGhpcy5mbGFtZT17cjpbXSx5OltdfTt0aGlzLnRvZ2dsZUJsaW5rU3R5bGU9ZnVuY3Rpb24oKXtpZih0aGlzLnVwZGF0ZWQuYmxpbmsuaXNBY3RpdmUpe3JlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksJ0FTVEVST0lEU0JMSU5LJyl9ZWxzZXthZGRDbGFzcyhkb2N1bWVudC5ib2R5LCdBU1RFUk9JRFNCTElOSycpfXRoaXMudXBkYXRlZC5ibGluay5pc0FjdGl2ZT0hdGhpcy51cGRhdGVkLmJsaW5rLmlzQWN0aXZlfTthZGRTdHlsZXNoZWV0KCIuQVNURVJPSURTQkxJTksgLkFTVEVST0lEU1lFQUhFTkVNWSIsIm91dGxpbmU6IDJweCBkb3R0ZWQgcmVkOyIpO3RoaXMucG9zPW5ldyBWZWN0b3IoMTAwLDEwMCk7dGhpcy5sYXN0UG9zPWZhbHNlO3RoaXMudmVsPW5ldyBWZWN0b3IoMCwwKTt0aGlzLmRpcj1uZXcgVmVjdG9yKDAsMSk7dGhpcy5rZXlzUHJlc3NlZD17fTt0aGlzLmZpcmVkQXQ9ZmFsc2U7dGhpcy51cGRhdGVkPXtlbmVtaWVzOmZhbHNlLGZsYW1lOm5ldyBEYXRlKCkuZ2V0VGltZSgpLGJsaW5rOnt0aW1lOjAsaXNBY3RpdmU6ZmFsc2V9fTt0aGlzLnNjcm9sbFBvcz1uZXcgVmVjdG9yKDAsMCk7dGhpcy5idWxsZXRzPVtdO3RoaXMuZW5lbWllcz1bXTt0aGlzLmR5aW5nPVtdO3RoaXMudG90YWxFbmVtaWVzPTA7dGhpcy5wYXJ0aWNsZXM9W107ZnVuY3Rpb24gdXBkYXRlRW5lbXlJbmRleCgpe2Zvcih2YXIgaT0wLGVuZW15O2VuZW15PXRoYXQuZW5lbWllc1tpXTtpKz0xKXtyZW1vdmVDbGFzcyhlbmVteSwiQVNURVJPSURTWUVBSEVORU1ZIil9dmFyIGFsbD1kb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJyk7dGhhdC5lbmVtaWVzPVtdO2Zvcih2YXIgaT0wLGVsO2VsPWFsbFtpXTtpKz0xKXtpZihpbmRleE9mKGlnbm9yZWRUeXBlcyxlbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkpPT0tMSYmZWwucHJlZml4IT0nZ192bWxfJyYmaGFzT25seVRleHR1YWxDaGlsZHJlbihlbCkmJmVsLmNsYXNzTmFtZSE9IkFTVEVST0lEU1lFQUgiJiZlbC5vZmZzZXRIZWlnaHQ+MCl7ZWwuYVNpemU9c2l6ZShlbCk7dGhhdC5lbmVtaWVzLnB1c2goZWwpO2FkZENsYXNzKGVsLCJBU1RFUk9JRFNZRUFIRU5FTVkiKTtpZighZWwuYUFkZGVkKXtlbC5hQWRkZWQ9dHJ1ZTt0aGF0LnRvdGFsRW5lbWllcys9MX19fX07dXBkYXRlRW5lbXlJbmRleCgpO3ZhciBjcmVhdGVGbGFtZXM7KGZ1bmN0aW9uKCl7dmFyIHJXaWR0aD1wbGF5ZXJXaWR0aCxySW5jcmVhc2U9cGxheWVyV2lkdGgqMC4xLHlXaWR0aD1wbGF5ZXJXaWR0aCowLjYseUluY3JlYXNlPXlXaWR0aCowLjIsaGFsZlI9cldpZHRoLzIsaGFsZlk9eVdpZHRoLzIsaGFsZlBsYXllckhlaWdodD1wbGF5ZXJIZWlnaHQvMjtjcmVhdGVGbGFtZXM9ZnVuY3Rpb24oKXt0aGF0LmZsYW1lLnI9W1stMSpoYWxmUGxheWVySGVpZ2h0LC0xKmhhbGZSXV07dGhhdC5mbGFtZS55PVtbLTEqaGFsZlBsYXllckhlaWdodCwtMSpoYWxmWV1dO2Zvcih2YXIgeD0wO3g8cldpZHRoO3grPXJJbmNyZWFzZSl7dGhhdC5mbGFtZS5yLnB1c2goWy1yYW5kb20oMiw3KS1oYWxmUGxheWVySGVpZ2h0LHgtaGFsZlJdKX10aGF0LmZsYW1lLnIucHVzaChbLTEqaGFsZlBsYXllckhlaWdodCxoYWxmUl0pO2Zvcih2YXIgeD0wO3g8eVdpZHRoO3grPXlJbmNyZWFzZSl7dGhhdC5mbGFtZS55LnB1c2goWy1yYW5kb20oMiw3KS1oYWxmUGxheWVySGVpZ2h0LHgtaGFsZlldKX10aGF0LmZsYW1lLnkucHVzaChbLTEqaGFsZlBsYXllckhlaWdodCxoYWxmWV0pfX0pKCk7Y3JlYXRlRmxhbWVzKCk7ZnVuY3Rpb24gcmFkaWFucyhkZWcpe3JldHVybiBkZWcqMC4wMTc0NTMyOTI1fTtmdW5jdGlvbiBkZWdyZWVzKHJhZCl7cmV0dXJuIHJhZCo1Ny4yOTU3Nzk1fTtmdW5jdGlvbiByYW5kb20oZnJvbSx0byl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoodG8rMSkrZnJvbSl9O2Z1bmN0aW9uIGNvZGUobmFtZSl7dmFyIHRhYmxlPXsndXAnOjM4LCdkb3duJzo0MCwnbGVmdCc6MzcsJ3JpZ2h0JzozOSwnZXNjJzoyN307aWYodGFibGVbbmFtZV0pe3JldHVybiB0YWJsZVtuYW1lXX1yZXR1cm4gbmFtZS5jaGFyQ29kZUF0KDApfTtmdW5jdGlvbiBib3VuZHNDaGVjayh2ZWMpe2lmKHZlYy54Pncpe3ZlYy54PTB9ZWxzZSBpZih2ZWMueDwwKXt2ZWMueD13fWlmKHZlYy55Pmgpe3ZlYy55PTB9ZWxzZSBpZih2ZWMueTwwKXt2ZWMueT1ofX1mdW5jdGlvbiBzaXplKGVsZW1lbnQpe3ZhciBlbD1lbGVtZW50LGxlZnQ9MCx0b3A9MDtkb3tsZWZ0Kz1lbC5vZmZzZXRMZWZ0fHwwO3RvcCs9ZWwub2Zmc2V0VG9wfHwwO2VsPWVsLm9mZnNldFBhcmVudH13aGlsZShlbCk7cmV0dXJue3g6bGVmdCx5OnRvcCx3aWR0aDplbGVtZW50Lm9mZnNldFdpZHRofHwxMCxoZWlnaHQ6ZWxlbWVudC5vZmZzZXRIZWlnaHR8fDEwfX07ZnVuY3Rpb24gYWRkRXZlbnQob2JqLHR5cGUsZm4pe2lmKG9iai5hZGRFdmVudExpc3RlbmVyKXtvYmouYWRkRXZlbnRMaXN0ZW5lcih0eXBlLGZuLGZhbHNlKX1lbHNlIGlmKG9iai5hdHRhY2hFdmVudCl7b2JqWyJlIit0eXBlK2ZuXT1mbjtvYmpbdHlwZStmbl09ZnVuY3Rpb24oKXtvYmpbImUiK3R5cGUrZm5dKHdpbmRvdy5ldmVudCl9O29iai5hdHRhY2hFdmVudCgib24iK3R5cGUsb2JqW3R5cGUrZm5dKX19ZnVuY3Rpb24gcmVtb3ZlRXZlbnQob2JqLHR5cGUsZm4pe2lmKG9iai5yZW1vdmVFdmVudExpc3RlbmVyKXtvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLGZuLGZhbHNlKX1lbHNlIGlmKG9iai5kZXRhY2hFdmVudCl7b2JqLmRldGFjaEV2ZW50KCJvbiIrdHlwZSxvYmpbdHlwZStmbl0pO29ialt0eXBlK2ZuXT1udWxsO29ialsiZSIrdHlwZStmbl09bnVsbH19ZnVuY3Rpb24gYXJyYXlSZW1vdmUoYXJyYXksZnJvbSx0byl7dmFyIHJlc3Q9YXJyYXkuc2xpY2UoKHRvfHxmcm9tKSsxfHxhcnJheS5sZW5ndGgpO2FycmF5Lmxlbmd0aD1mcm9tPDA/YXJyYXkubGVuZ3RoK2Zyb206ZnJvbTtyZXR1cm4gYXJyYXkucHVzaC5hcHBseShhcnJheSxyZXN0KX07ZnVuY3Rpb24gYXBwbHlWaXNpYmlsaXR5KHZpcyl7Zm9yKHZhciBpPTAscDtwPXdpbmRvdy5BU1RFUk9JRFNQTEFZRVJTW2ldO2krPTEpe3AuZ2FtZUNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5PXZpc319ZnVuY3Rpb24gZ2V0RWxlbWVudEZyb21Qb2ludCh4LHkpe2FwcGx5VmlzaWJpbGl0eSgnaGlkZGVuJyk7dmFyIGVsZW1lbnQ9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LHkpO2lmKCFlbGVtZW50KXthcHBseVZpc2liaWxpdHkoJ3Zpc2libGUnKTtyZXR1cm4gZmFsc2V9aWYoZWxlbWVudC5ub2RlVHlwZT09Myl7ZWxlbWVudD1lbGVtZW50LnBhcmVudE5vZGV9YXBwbHlWaXNpYmlsaXR5KCd2aXNpYmxlJyk7cmV0dXJuIGVsZW1lbnR9O2Z1bmN0aW9uIGFkZFBhcnRpY2xlcyhzdGFydFBvcyl7dmFyIHRpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCk7dmFyIGFtb3VudD1tYXhQYXJ0aWNsZXM7Zm9yKHZhciBpPTA7aTxhbW91bnQ7aSs9MSl7dGhhdC5wYXJ0aWNsZXMucHVzaCh7ZGlyOihuZXcgVmVjdG9yKE1hdGgucmFuZG9tKCkqMjAtMTAsTWF0aC5yYW5kb20oKSoyMC0xMCkpLm5vcm1hbGl6ZSgpLHBvczpzdGFydFBvcy5jcCgpLGNhbWVBbGl2ZTp0aW1lfSl9fTtmdW5jdGlvbiBzZXRTY29yZSgpe3RoYXQucG9pbnRzLmlubmVySFRNTD13aW5kb3cuQVNURVJPSURTLmVuZW1pZXNLaWxsZWQqMTB9O2Z1bmN0aW9uIGhhc09ubHlUZXh0dWFsQ2hpbGRyZW4oZWxlbWVudCl7aWYoZWxlbWVudC5vZmZzZXRMZWZ0PC0xMDAmJmVsZW1lbnQub2Zmc2V0V2lkdGg+MCYmZWxlbWVudC5vZmZzZXRIZWlnaHQ+MCl7cmV0dXJuIGZhbHNlfWlmKGluZGV4T2YoaGlkZGVuVHlwZXMsZWxlbWVudC50YWdOYW1lKSE9LTEpe3JldHVybiB0cnVlfWlmKGVsZW1lbnQub2Zmc2V0V2lkdGg9PTAmJmVsZW1lbnQub2Zmc2V0SGVpZ2h0PT0wKXtyZXR1cm4gZmFsc2V9Zm9yKHZhciBpPTA7aTxlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoO2krPTEpe2lmKGluZGV4T2YoaGlkZGVuVHlwZXMsZWxlbWVudC5jaGlsZE5vZGVzW2ldLnRhZ05hbWUpPT0tMSYmZWxlbWVudC5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXMubGVuZ3RoIT0wKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfTtmdW5jdGlvbiBpbmRleE9mKGFycixpdGVtLGZyb20pe2lmKGFyci5pbmRleE9mKXtyZXR1cm4gYXJyLmluZGV4T2YoaXRlbSxmcm9tKX12YXIgbGVuPWFyci5sZW5ndGg7Zm9yKHZhciBpPShmcm9tPDApP01hdGgubWF4KDAsbGVuK2Zyb20pOmZyb218fDA7aTxsZW47aSs9MSl7aWYoYXJyW2ldPT09aXRlbSl7cmV0dXJuIGl9fXJldHVybi0xfTtmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LGNsYXNzTmFtZSl7aWYoZWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZihjbGFzc05hbWUpPT0tMSl7ZWxlbWVudC5jbGFzc05hbWU9KGVsZW1lbnQuY2xhc3NOYW1lKycgJytjbGFzc05hbWUpLnJlcGxhY2UoL1xzKy9nLCcgJykucmVwbGFjZSgvXlxzK3xccyskL2csJycpfX1mdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LGNsYXNzTmFtZSl7ZWxlbWVudC5jbGFzc05hbWU9ZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShuZXcgUmVnRXhwKCcoXnxcXHMpJytjbGFzc05hbWUrJyg/Olxcc3wkKScpLCckMScpfTtmdW5jdGlvbiBhZGRTdHlsZXNoZWV0KHNlbGVjdG9yLHJ1bGVzKXt2YXIgc3R5bGVzaGVldD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO3N0eWxlc2hlZXQudHlwZT0ndGV4dC9jc3MnO3N0eWxlc2hlZXQucmVsPSdzdHlsZXNoZWV0JztzdHlsZXNoZWV0LmlkPSdBU1RFUk9JRFNZRUFIU1RZTEVTJzt0cnl7c3R5bGVzaGVldC5pbm5lckhUTUw9c2VsZWN0b3IrInsiK3J1bGVzKyJ9In1jYXRjaChlKXtzdHlsZXNoZWV0LnN0eWxlU2hlZXQuYWRkUnVsZShzZWxlY3RvcixydWxlcyl9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZChzdHlsZXNoZWV0KX07ZnVuY3Rpb24gcmVtb3ZlU3R5bGVzaGVldChuYW1lKXt2YXIgc3R5bGVzaGVldD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKTtpZihzdHlsZXNoZWV0KXtzdHlsZXNoZWV0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVzaGVldCl9fTt0aGlzLmdhbWVDb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7dGhpcy5nYW1lQ29udGFpbmVyLmNsYXNzTmFtZT0nQVNURVJPSURTWUVBSCc7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmdhbWVDb250YWluZXIpO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO3RoaXMuY2FudmFzLnNldEF0dHJpYnV0ZSgnd2lkdGgnLHcpO3RoaXMuY2FudmFzLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JyxoKTt0aGlzLmNhbnZhcy5jbGFzc05hbWU9J0FTVEVST0lEU1lFQUgnO3dpdGgodGhpcy5jYW52YXMuc3R5bGUpe3dpZHRoPXcrInB4IjtoZWlnaHQ9aCsicHgiO3Bvc2l0aW9uPSJmaXhlZCI7dG9wPSIwcHgiO2xlZnQ9IjBweCI7Ym90dG9tPSIwcHgiO3JpZ2h0PSIwcHgiO3pJbmRleD0iMTAwMDAifWlmKHR5cGVvZiBHX3ZtbENhbnZhc01hbmFnZXIhPSd1bmRlZmluZWQnKXt0aGlzLmNhbnZhcz1HX3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQodGhpcy5jYW52YXMpO2lmKCF0aGlzLmNhbnZhcy5nZXRDb250ZXh0KXthbGVydCgiU28uLi4geW91IGFyZSB1c2luZyBJRT8gIFNvcnJ5IGJ1dCBhdCB0aGUgbW9tZW50IFdlYnNpdGVBc3Rlcm9pZHMgb25seSBzdXBwb3J0cyBGaXJlZm94Iil9fWVsc2V7aWYoIXRoaXMuY2FudmFzLmdldENvbnRleHQpe2FsZXJ0KCdUaGlzIHByb2dyYW0gZG9lcyBub3QgeWV0IHN1cHBvcnQgeW91ciBicm93c2VyLiBQbGVhc2Ugam9pbiBtZSBhdCBodHRwOi8vZ2l0aHViLmNvbS9lcmtpZS9lcmtpZS5naXRodWIuY29tIGlmIHlvdSB0aGluayB5b3UgY2FuIGhlbHAnKX19YWRkRXZlbnQodGhpcy5jYW52YXMsJ21vdXNlZG93bicsZnVuY3Rpb24oZSl7ZT1lfHx3aW5kb3cuZXZlbnQ7dmFyIG1lc3NhZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO21lc3NhZ2Uuc3R5bGUucG9zaXRpb249J2Fic29sdXRlJzttZXNzYWdlLnN0eWxlLmJvcmRlcj0nMXB4IHNvbGlkICM5OTknO21lc3NhZ2Uuc3R5bGUuYmFja2dyb3VuZD0nd2hpdGUnO21lc3NhZ2Uuc3R5bGUuY29sb3I9ImJsYWNrIjttZXNzYWdlLmlubmVySFRNTD0nUHJlc3MgRXNjIHRvIHF1aXQnO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWVzc2FnZSk7dmFyIHg9ZS5wYWdlWHx8KGUuY2xpZW50WCtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCk7dmFyIHk9ZS5wYWdlWXx8KGUuY2xpZW50WStkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKTttZXNzYWdlLnN0eWxlLmxlZnQ9eC1tZXNzYWdlLm9mZnNldFdpZHRoLzIrJ3B4JzttZXNzYWdlLnN0eWxlLnRvcD15LW1lc3NhZ2Uub2Zmc2V0SGVpZ2h0LzIrJ3B4JztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e21lc3NhZ2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtZXNzYWdlKX1jYXRjaChlKXt9fSwxMDAwKX0pO3ZhciBldmVudFJlc2l6ZT1mdW5jdGlvbigpe3RoYXQuY2FudmFzLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3c9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2g9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDt0aGF0LmNhbnZhcy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyx3KTt0aGF0LmNhbnZhcy5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsaCk7d2l0aCh0aGF0LmNhbnZhcy5zdHlsZSl7ZGlzcGxheT0iYmxvY2siO3dpZHRoPXcrInB4IjtoZWlnaHQ9aCsicHgifX07YWRkRXZlbnQod2luZG93LCdyZXNpemUnLGV2ZW50UmVzaXplKTt0aGlzLmdhbWVDb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpO3RoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIik7dGhpcy5jdHguZmlsbFN0eWxlPSJibGFjayI7dGhpcy5jdHguc3Ryb2tlU3R5bGU9ImJsYWNrIjtpZighZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FTVEVST0lEUy1OQVZJR0FUSU9OJykpe3RoaXMubmF2aWdhdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTt0aGlzLm5hdmlnYXRpb24uaWQ9IkFTVEVST0lEUy1OQVZJR0FUSU9OIjt0aGlzLm5hdmlnYXRpb24uY2xhc3NOYW1lPSJBU1RFUk9JRFNZRUFIIjt3aXRoKHRoaXMubmF2aWdhdGlvbi5zdHlsZSl7Zm9udEZhbWlseT0iQXJpYWwsc2Fucy1zZXJpZiI7cG9zaXRpb249ImZpeGVkIjt6SW5kZXg9IjEwMDAxIjtib3R0b209IjEwcHgiO3JpZ2h0PSIxMHB4Ijt0ZXh0QWxpZ249InJpZ2h0In10aGlzLm5hdmlnYXRpb24uaW5uZXJIVE1MPSIocHJlc3MgZXNjIHRvIHF1aXQpICI7dGhpcy5nYW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMubmF2aWdhdGlvbik7dGhpcy5wb2ludHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3RoaXMucG9pbnRzLmlkPSdBU1RFUk9JRFMtUE9JTlRTJzt0aGlzLnBvaW50cy5zdHlsZS5mb250PSIyOHB0IEFyaWFsLCBzYW5zLXNlcmlmIjt0aGlzLnBvaW50cy5zdHlsZS5mb250V2VpZ2h0PSJib2xkIjt0aGlzLnBvaW50cy5jbGFzc05hbWU9IkFTVEVST0lEU1lFQUgiO3RoaXMubmF2aWdhdGlvbi5hcHBlbmRDaGlsZCh0aGlzLnBvaW50cyl9ZWxzZXt0aGlzLm5hdmlnYXRpb249ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FTVEVST0lEUy1OQVZJR0FUSU9OJyk7dGhpcy5wb2ludHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0FTVEVST0lEUy1QT0lOVFMnKX1zZXRTY29yZSgpO2lmKHR5cGVvZiBHX3ZtbENhbnZhc01hbmFnZXIhPSd1bmRlZmluZWQnKXt2YXIgY2hpbGRyZW49dGhpcy5jYW52YXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKTtmb3IodmFyIGk9MCxjO2M9Y2hpbGRyZW5baV07aSs9MSl7YWRkQ2xhc3MoYywnQVNURVJPSURTWUVBSCcpfX12YXIgZXZlbnRLZXlkb3duPWZ1bmN0aW9uKGV2ZW50KXtldmVudD1ldmVudHx8d2luZG93LmV2ZW50O3RoYXQua2V5c1ByZXNzZWRbZXZlbnQua2V5Q29kZV09dHJ1ZTtzd2l0Y2goZXZlbnQua2V5Q29kZSl7Y2FzZSBjb2RlKCcgJyk6dGhhdC5maXJlZEF0PTE7YnJlYWt9aWYoaW5kZXhPZihbY29kZSgndXAnKSxjb2RlKCdkb3duJyksY29kZSgncmlnaHQnKSxjb2RlKCdsZWZ0JyksY29kZSgnICcpLGNvZGUoJ0InKSxjb2RlKCdXJyksY29kZSgnQScpLGNvZGUoJ1MnKSxjb2RlKCdEJyldLGV2ZW50LmtleUNvZGUpIT0tMSl7aWYoZXZlbnQucHJldmVudERlZmF1bHQpe2V2ZW50LnByZXZlbnREZWZhdWx0KCl9aWYoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKXtldmVudC5zdG9wUHJvcGFnYXRpb24oKX1ldmVudC5yZXR1cm5WYWx1ZT1mYWxzZTtldmVudC5jYW5jZWxCdWJibGU9dHJ1ZTtyZXR1cm4gZmFsc2V9fTthZGRFdmVudChkb2N1bWVudCwna2V5ZG93bicsZXZlbnRLZXlkb3duKTt2YXIgZXZlbnRLZXlwcmVzcz1mdW5jdGlvbihldmVudCl7ZXZlbnQ9ZXZlbnR8fHdpbmRvdy5ldmVudDtpZihpbmRleE9mKFtjb2RlKCd1cCcpLGNvZGUoJ2Rvd24nKSxjb2RlKCdyaWdodCcpLGNvZGUoJ2xlZnQnKSxjb2RlKCcgJyksY29kZSgnVycpLGNvZGUoJ0EnKSxjb2RlKCdTJyksY29kZSgnRCcpXSxldmVudC5rZXlDb2RlfHxldmVudC53aGljaCkhPS0xKXtpZihldmVudC5wcmV2ZW50RGVmYXVsdCl7ZXZlbnQucHJldmVudERlZmF1bHQoKX1pZihldmVudC5zdG9wUHJvcGFnYXRpb24pe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpfWV2ZW50LnJldHVyblZhbHVlPWZhbHNlO2V2ZW50LmNhbmNlbEJ1YmJsZT10cnVlO3JldHVybiBmYWxzZX19O2FkZEV2ZW50KGRvY3VtZW50LCdrZXlwcmVzcycsZXZlbnRLZXlwcmVzcyk7dmFyIGV2ZW50S2V5dXA9ZnVuY3Rpb24oZXZlbnQpe2V2ZW50PWV2ZW50fHx3aW5kb3cuZXZlbnQ7dGhhdC5rZXlzUHJlc3NlZFtldmVudC5rZXlDb2RlXT1mYWxzZTtpZihpbmRleE9mKFtjb2RlKCd1cCcpLGNvZGUoJ2Rvd24nKSxjb2RlKCdyaWdodCcpLGNvZGUoJ2xlZnQnKSxjb2RlKCcgJyksY29kZSgnQicpLGNvZGUoJ1cnKSxjb2RlKCdBJyksY29kZSgnUycpLGNvZGUoJ0QnKV0sZXZlbnQua2V5Q29kZSkhPS0xKXtpZihldmVudC5wcmV2ZW50RGVmYXVsdCl7ZXZlbnQucHJldmVudERlZmF1bHQoKX1pZihldmVudC5zdG9wUHJvcGFnYXRpb24pe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpfWV2ZW50LnJldHVyblZhbHVlPWZhbHNlO2V2ZW50LmNhbmNlbEJ1YmJsZT10cnVlO3JldHVybiBmYWxzZX19O2FkZEV2ZW50KGRvY3VtZW50LCdrZXl1cCcsZXZlbnRLZXl1cCk7dGhpcy5jdHguY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyUmVjdCgwLDAsdyxoKX07dGhpcy5jdHguY2xlYXIoKTt0aGlzLmN0eC5kcmF3TGluZT1mdW5jdGlvbih4RnJvbSx5RnJvbSx4VG8seVRvKXt0aGlzLmJlZ2luUGF0aCgpO3RoaXMubW92ZVRvKHhGcm9tLHlGcm9tKTt0aGlzLmxpbmVUbyh4VG8seVRvKTt0aGlzLmxpbmVUbyh4VG8rMSx5VG8rMSk7dGhpcy5jbG9zZVBhdGgoKTt0aGlzLmZpbGwoKX07dGhpcy5jdHgudHJhY2VQb2x5PWZ1bmN0aW9uKHZlcnRzKXt0aGlzLmJlZ2luUGF0aCgpO3RoaXMubW92ZVRvKHZlcnRzWzBdWzBdLHZlcnRzWzBdWzFdKTtmb3IodmFyIGk9MTtpPHZlcnRzLmxlbmd0aDtpKz0xKXt0aGlzLmxpbmVUbyh2ZXJ0c1tpXVswXSx2ZXJ0c1tpXVsxXSl9dGhpcy5jbG9zZVBhdGgoKX07dGhpcy5jdHguZHJhd1BsYXllcj1mdW5jdGlvbigpe3RoaXMuc2F2ZSgpO3RoaXMudHJhbnNsYXRlKHRoYXQucG9zLngsdGhhdC5wb3MueSk7dGhpcy5yb3RhdGUodGhhdC5kaXIuYW5nbGUoKSk7dGhpcy50cmFjZVBvbHkocGxheWVyVmVydHMpO3RoaXMuZmlsbFN0eWxlPSJ3aGl0ZSI7dGhpcy5maWxsKCk7dGhpcy50cmFjZVBvbHkocGxheWVyVmVydHMpO3RoaXMuc3Ryb2tlKCk7dGhpcy5yZXN0b3JlKCl9O3ZhciBQSV9TUT1NYXRoLlBJKjI7dGhpcy5jdHguZHJhd0J1bGxldHM9ZnVuY3Rpb24oYnVsbGV0cyl7Zm9yKHZhciBpPTA7aTxidWxsZXRzLmxlbmd0aDtpKz0xKXt0aGlzLmJlZ2luUGF0aCgpO3RoaXMuYXJjKGJ1bGxldHNbaV0ucG9zLngsYnVsbGV0c1tpXS5wb3MueSxidWxsZXRSYWRpdXMsMCxQSV9TUSx0cnVlKTt0aGlzLmNsb3NlUGF0aCgpO3RoaXMuZmlsbCgpfX07dmFyIHJhbmRvbVBhcnRpY2xlQ29sb3I9ZnVuY3Rpb24oKXtyZXR1cm4oWydyZWQnLCd5ZWxsb3cnXSlbcmFuZG9tKDAsMSldfTt0aGlzLmN0eC5kcmF3UGFydGljbGVzPWZ1bmN0aW9uKHBhcnRpY2xlcyl7dmFyIG9sZENvbG9yPXRoaXMuZmlsbFN0eWxlO2Zvcih2YXIgaT0wO2k8cGFydGljbGVzLmxlbmd0aDtpKz0xKXt0aGlzLmZpbGxTdHlsZT1yYW5kb21QYXJ0aWNsZUNvbG9yKCk7dGhpcy5kcmF3TGluZShwYXJ0aWNsZXNbaV0ucG9zLngscGFydGljbGVzW2ldLnBvcy55LHBhcnRpY2xlc1tpXS5wb3MueC1wYXJ0aWNsZXNbaV0uZGlyLngqMTAscGFydGljbGVzW2ldLnBvcy55LXBhcnRpY2xlc1tpXS5kaXIueSoxMCl9dGhpcy5maWxsU3R5bGU9b2xkQ29sb3J9O3RoaXMuY3R4LmRyYXdGbGFtZXM9ZnVuY3Rpb24oZmxhbWUpe3RoaXMuc2F2ZSgpO3RoaXMudHJhbnNsYXRlKHRoYXQucG9zLngsdGhhdC5wb3MueSk7dGhpcy5yb3RhdGUodGhhdC5kaXIuYW5nbGUoKSk7dmFyIG9sZENvbG9yPXRoaXMuc3Ryb2tlU3R5bGU7dGhpcy5zdHJva2VTdHlsZT0icmVkIjt0aGlzLnRyYWNlUG9seShmbGFtZS5yKTt0aGlzLnN0cm9rZSgpO3RoaXMuc3Ryb2tlU3R5bGU9InllbGxvdyI7dGhpcy50cmFjZVBvbHkoZmxhbWUueSk7dGhpcy5zdHJva2UoKTt0aGlzLnN0cm9rZVN0eWxlPW9sZENvbG9yO3RoaXMucmVzdG9yZSgpfTthZGRQYXJ0aWNsZXModGhpcy5wb3MpO2FkZENsYXNzKGRvY3VtZW50LmJvZHksJ0FTVEVST0lEU1lFQUgnKTt2YXIgaXNSdW5uaW5nPXRydWU7dmFyIGxhc3RVcGRhdGU9bmV3IERhdGUoKS5nZXRUaW1lKCk7dGhpcy51cGRhdGU9ZnVuY3Rpb24oKXt2YXIgZm9yY2VDaGFuZ2U9ZmFsc2U7dmFyIG5vd1RpbWU9bmV3IERhdGUoKS5nZXRUaW1lKCk7dmFyIHREZWx0YT0obm93VGltZS1sYXN0VXBkYXRlKS8xMDAwO2xhc3RVcGRhdGU9bm93VGltZTt2YXIgZHJhd0ZsYW1lPWZhbHNlO2lmKG5vd1RpbWUtdGhpcy51cGRhdGVkLmZsYW1lPjUwKXtjcmVhdGVGbGFtZXMoKTt0aGlzLnVwZGF0ZWQuZmxhbWU9bm93VGltZX10aGlzLnNjcm9sbFBvcy54PXdpbmRvdy5wYWdlWE9mZnNldHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ7dGhpcy5zY3JvbGxQb3MueT13aW5kb3cucGFnZVlPZmZzZXR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7aWYoKHRoaXMua2V5c1ByZXNzZWRbY29kZSgndXAnKV0pfHwodGhpcy5rZXlzUHJlc3NlZFtjb2RlKCdXJyldKSl7dGhpcy52ZWwuYWRkKHRoaXMuZGlyLm11bE5ldyhhY2MqdERlbHRhKSk7ZHJhd0ZsYW1lPXRydWV9ZWxzZXt0aGlzLnZlbC5tdWwoMC45Nil9aWYoKHRoaXMua2V5c1ByZXNzZWRbY29kZSgnbGVmdCcpXSl8fCh0aGlzLmtleXNQcmVzc2VkW2NvZGUoJ0EnKV0pKXtmb3JjZUNoYW5nZT10cnVlO3RoaXMuZGlyLnJvdGF0ZShyYWRpYW5zKHJvdFNwZWVkKnREZWx0YSotMSkpfWlmKCh0aGlzLmtleXNQcmVzc2VkW2NvZGUoJ3JpZ2h0JyldKXx8KHRoaXMua2V5c1ByZXNzZWRbY29kZSgnRCcpXSkpe2ZvcmNlQ2hhbmdlPXRydWU7dGhpcy5kaXIucm90YXRlKHJhZGlhbnMocm90U3BlZWQqdERlbHRhKSl9aWYodGhpcy5rZXlzUHJlc3NlZFtjb2RlKCcgJyldJiZub3dUaW1lLXRoaXMuZmlyZWRBdD50aW1lQmV0d2VlbkZpcmUpe3RoaXMuYnVsbGV0cy51bnNoaWZ0KHsnZGlyJzp0aGlzLmRpci5jcCgpLCdwb3MnOnRoaXMucG9zLmNwKCksJ3N0YXJ0VmVsJzp0aGlzLnZlbC5jcCgpLCdjYW1lQWxpdmUnOm5vd1RpbWV9KTt0aGlzLmZpcmVkQXQ9bm93VGltZTtpZih0aGlzLmJ1bGxldHMubGVuZ3RoPm1heEJ1bGxldHMpe3RoaXMuYnVsbGV0cy5wb3AoKX19aWYodGhpcy5rZXlzUHJlc3NlZFtjb2RlKCdCJyldKXtpZighdGhpcy51cGRhdGVkLmVuZW1pZXMpe3VwZGF0ZUVuZW15SW5kZXgoKTt0aGlzLnVwZGF0ZWQuZW5lbWllcz10cnVlfWZvcmNlQ2hhbmdlPXRydWU7dGhpcy51cGRhdGVkLmJsaW5rLnRpbWUrPXREZWx0YSoxMDAwO2lmKHRoaXMudXBkYXRlZC5ibGluay50aW1lPnRpbWVCZXR3ZWVuQmxpbmspe3RoaXMudG9nZ2xlQmxpbmtTdHlsZSgpO3RoaXMudXBkYXRlZC5ibGluay50aW1lPTB9fWVsc2V7dGhpcy51cGRhdGVkLmVuZW1pZXM9ZmFsc2V9aWYodGhpcy5rZXlzUHJlc3NlZFtjb2RlKCdlc2MnKV0pe2Rlc3Ryb3kuYXBwbHkodGhpcyk7cmV0dXJufWlmKHRoaXMudmVsLmxlbigpPm1heFNwZWVkKXt0aGlzLnZlbC5zZXRMZW5ndGgobWF4U3BlZWQpfXRoaXMucG9zLmFkZCh0aGlzLnZlbC5tdWxOZXcodERlbHRhKSk7aWYodGhpcy5wb3MueD53KXt3aW5kb3cuc2Nyb2xsVG8odGhpcy5zY3JvbGxQb3MueCs1MCx0aGlzLnNjcm9sbFBvcy55KTt0aGlzLnBvcy54PTB9ZWxzZSBpZih0aGlzLnBvcy54PDApe3dpbmRvdy5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvcy54LTUwLHRoaXMuc2Nyb2xsUG9zLnkpO3RoaXMucG9zLng9d31pZih0aGlzLnBvcy55Pmgpe3dpbmRvdy5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvcy54LHRoaXMuc2Nyb2xsUG9zLnkraCowLjc1KTt0aGlzLnBvcy55PTB9ZWxzZSBpZih0aGlzLnBvcy55PDApe3dpbmRvdy5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvcy54LHRoaXMuc2Nyb2xsUG9zLnktaCowLjc1KTt0aGlzLnBvcy55PWh9Zm9yKHZhciBpPXRoaXMuYnVsbGV0cy5sZW5ndGgtMTtpPj0wO2ktPTEpe2lmKG5vd1RpbWUtdGhpcy5idWxsZXRzW2ldLmNhbWVBbGl2ZT4yMDAwKXt0aGlzLmJ1bGxldHMuc3BsaWNlKGksMSk7Zm9yY2VDaGFuZ2U9dHJ1ZTtjb250aW51ZX12YXIgYnVsbGV0VmVsPXRoaXMuYnVsbGV0c1tpXS5kaXIuc2V0TGVuZ3RoTmV3KGJ1bGxldFNwZWVkKnREZWx0YSkuYWRkKHRoaXMuYnVsbGV0c1tpXS5zdGFydFZlbC5tdWxOZXcodERlbHRhKSk7dGhpcy5idWxsZXRzW2ldLnBvcy5hZGQoYnVsbGV0VmVsKTtib3VuZHNDaGVjayh0aGlzLmJ1bGxldHNbaV0ucG9zKTt2YXIgbXVyZGVyZWQ9Z2V0RWxlbWVudEZyb21Qb2ludCh0aGlzLmJ1bGxldHNbaV0ucG9zLngsdGhpcy5idWxsZXRzW2ldLnBvcy55KTtpZihtdXJkZXJlZCYmbXVyZGVyZWQudGFnTmFtZSYmaW5kZXhPZihpZ25vcmVkVHlwZXMsbXVyZGVyZWQudGFnTmFtZS50b1VwcGVyQ2FzZSgpKT09LTEmJmhhc09ubHlUZXh0dWFsQ2hpbGRyZW4obXVyZGVyZWQpJiZtdXJkZXJlZC5jbGFzc05hbWUhPSJBU1RFUk9JRFNZRUFIIil7ZGlkS2lsbD10cnVlO2FkZFBhcnRpY2xlcyh0aGlzLmJ1bGxldHNbaV0ucG9zKTt0aGlzLmR5aW5nLnB1c2gobXVyZGVyZWQpO3RoaXMuYnVsbGV0cy5zcGxpY2UoaSwxKTtjb250aW51ZX19aWYodGhpcy5keWluZy5sZW5ndGgpe2Zvcih2YXIgaT10aGlzLmR5aW5nLmxlbmd0aC0xO2k+PTA7aS09MSl7dHJ5e2lmKHRoaXMuZHlpbmdbaV0ucGFyZW50Tm9kZSl7d2luZG93LkFTVEVST0lEUy5lbmVtaWVzS2lsbGVkKz0xfXRoaXMuZHlpbmdbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmR5aW5nW2ldKX1jYXRjaChlKXt9fXNldFNjb3JlKCk7dGhpcy5keWluZz1bXX1mb3IodmFyIGk9dGhpcy5wYXJ0aWNsZXMubGVuZ3RoLTE7aT49MDtpLT0xKXt0aGlzLnBhcnRpY2xlc1tpXS5wb3MuYWRkKHRoaXMucGFydGljbGVzW2ldLmRpci5tdWxOZXcocGFydGljbGVTcGVlZCp0RGVsdGEqTWF0aC5yYW5kb20oKSkpO2lmKG5vd1RpbWUtdGhpcy5wYXJ0aWNsZXNbaV0uY2FtZUFsaXZlPjEwMDApe3RoaXMucGFydGljbGVzLnNwbGljZShpLDEpO2ZvcmNlQ2hhbmdlPXRydWU7Y29udGludWV9fWlmKGZvcmNlQ2hhbmdlfHx0aGlzLmJ1bGxldHMubGVuZ3RoIT0wfHx0aGlzLnBhcnRpY2xlcy5sZW5ndGghPTB8fCF0aGlzLnBvcy5pcyh0aGlzLmxhc3RQb3MpfHx0aGlzLnZlbC5sZW4oKT4wKXt0aGlzLmN0eC5jbGVhcigpO3RoaXMuY3R4LmRyYXdQbGF5ZXIoKTtpZihkcmF3RmxhbWUpe3RoaXMuY3R4LmRyYXdGbGFtZXModGhhdC5mbGFtZSl9aWYodGhpcy5idWxsZXRzLmxlbmd0aCl7dGhpcy5jdHguZHJhd0J1bGxldHModGhpcy5idWxsZXRzKX1pZih0aGlzLnBhcnRpY2xlcy5sZW5ndGgpe3RoaXMuY3R4LmRyYXdQYXJ0aWNsZXModGhpcy5wYXJ0aWNsZXMpfX10aGlzLmxhc3RQb3M9dGhpcy5wb3M7c2V0VGltZW91dCh1cGRhdGVGdW5jLDEwMDAvRlBTKX07dmFyIHVwZGF0ZUZ1bmM9ZnVuY3Rpb24oKXt0aGF0LnVwZGF0ZS5jYWxsKHRoYXQpfTtzZXRUaW1lb3V0KHVwZGF0ZUZ1bmMsMTAwMC9GUFMpO2Z1bmN0aW9uIGRlc3Ryb3koKXtyZW1vdmVFdmVudChkb2N1bWVudCwna2V5ZG93bicsZXZlbnRLZXlkb3duKTtyZW1vdmVFdmVudChkb2N1bWVudCwna2V5cHJlc3MnLGV2ZW50S2V5cHJlc3MpO3JlbW92ZUV2ZW50KGRvY3VtZW50LCdrZXl1cCcsZXZlbnRLZXl1cCk7cmVtb3ZlRXZlbnQod2luZG93LCdyZXNpemUnLGV2ZW50UmVzaXplKTtpc1J1bm5pbmc9ZmFsc2U7cmVtb3ZlU3R5bGVzaGVldCgiQVNURVJPSURTWUVBSFNUWUxFUyIpO3JlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksJ0FTVEVST0lEU1lFQUgnKTt0aGlzLmdhbWVDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmdhbWVDb250YWluZXIpfX1pZighd2luZG93LkFTVEVST0lEU1BMQVlFUlMpe3dpbmRvdy5BU1RFUk9JRFNQTEFZRVJTPVtdfWlmKHdpbmRvdy5BY3RpdmVYT2JqZWN0KXt0cnl7dmFyIHhhbWxTY3JpcHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7eGFtbFNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCd0ZXh0L3hhbWwnKTt4YW1sU2NyaXB0LnRleHRDb250ZW50PSc8P3htbCB2ZXJzaW9uPSIxLjAiPz48Q2FudmFzIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2NsaWVudC8yMDA3Ij48L0NhbnZhcz4nO2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoeGFtbFNjcmlwdCl9Y2F0Y2goZSl7fXZhciBzY3JpcHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7c2NyaXB0LnNldEF0dHJpYnV0ZSgndHlwZScsJ3RleHQvamF2YXNjcmlwdCcpO3NjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZihzY3JpcHQucmVhZHlTdGF0ZT09J2xvYWRlZCd8fHNjcmlwdC5yZWFkeVN0YXRlPT0nY29tcGxldGUnKXtpZih0eXBlb2YgR192bWxDYW52YXNNYW5hZ2VyIT0idW5kZWZpbmVkIil7d2luZG93LkFTVEVST0lEU1BMQVlFUlNbd2luZG93LkFTVEVST0lEU1BMQVlFUlMubGVuZ3RoXT1uZXcgQXN0ZXJvaWRzKCl9fX07c2NyaXB0LnNyYz0iaHR0cDovL2Vya2llLmdpdGh1Yi5jb20vZXhjYW52YXMuanMiO2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KX1lbHNle3dpbmRvdy5BU1RFUk9JRFNQTEFZRVJTW3dpbmRvdy5BU1RFUk9JRFNQTEFZRVJTLmxlbmd0aF09bmV3IEFzdGVyb2lkcygpfX0pKCk7'))Â