xiaomianao666

插件名:global_海角天涯-解锁海角社区资源

Jan 16th, 2025
1,409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_海角天涯-解锁海角社区资源@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICDmtbfop5LlpKnmtq8t6Kej6ZSB5rW36KeS56S+5Yy66LWE5rqQCi8vIEBuYW1lc3BhY2UgICAgdGlhbnlhMzY1LnRvcAovLyBAaG9tZXBhZ2UgICAgIGh0dHBzOi8vdmlwLnRpYW55YTM2NS50b3AKLy8gQHZlcnNpb24gICAgICAxLjQuMAovLyBAZGVzY3JpcHRpb24gIOaXoOmZkOWItuino+mUgeaUtui0uei1hOa6kO+8jOWMheaLrOmSu+efs+i0tOOAgemHkeW4gei0tO+8jOS4i+i9veinhumike+8jOWkjeWItuinhumikemTvuaOpe+8jOiHquWKqOWxleW8gOW4luWtkAovLyBAaWNvbiAgICAgICAgIGRhdGE6aW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRW9BQUFCS0NBWUFBQUFjME1KeEFBQUtTVWxFUVZSNFh1MmNDWlFVMVJWQTd4OEcyVkUyV1dVYk1TaUNCRFFxaUFZVlVBa0lvaEl3eUNhWW5BVFpIQVl3c2duSUNMTGxJTVFJUmlJU0VDVHNnc01TUkRHQXNndU1na1FXQ1dnaXF6b3cvWFBlL09sVWRYZE5keFhVQktIN25UTUhxdjUrNi8zLzMzdS91aFRSSkZXbm9HaXA0RDRVdGRCVVVZb1NVY3RjSm9sYWN3ckZJVFNmYVVVR0FaWXhWdTNMcS92S01TRlZweVFsTVVMREx4VWtYU1pqdjZodWFrMjJVc3dPQkJqbUJDd1NWSnArWE1IckNvcGVWTXVYYVdFTlozUTJuUmluRnRpSEVBcHFnTzZ2WUt4U09HdmFaVHA0cjkzV0VOQUJubVdzbWhBc2F3RVpvTnNveGZ4NG1XcXg0T1hBMHJUakpmVTN5V3RBcGVvVWxjUldCY1ZqVlJCUDZScE82U3pxTTBIdHp3R1ZsS1puQVIzakNZS0hzYzRNcEt2T2l2NjZta3BHaU1YRjd1WUJVRTVXMlExMUZ0Y3JVblh2cENRbWVxMGdudklIQWp5ajFBQzlWQ2tlaXFlQmV4MnIxaXhTS2szdlZsRGJhK0Y0eXE5aGo0QTZvYUJrUEEzYzYxZzFuRlJKYVZwN0xSaVArUk9nWEQ3MUJLZ0VLSmNFWEdaTGFGUUNsRXNDTHJQbG0wWXQ2d3FiRHNHa0QrRGZaMTMyNWtlY0xWOUF0YXdOQ3p1RFVuRGllNWkvQTBhdGhnUC8rUkdUaU5FMVQ2REtGWU0vUEd3QTJHWHFCbGk3MzdyelRpZDR1RTVvbmtucjRjVTE1bDU0K2J6NktNMGNQeU9Cb1VzUDJCT282cVZnWDFwa3A3dlBnejl2TnZkL1VnNTI5b09rTUpqWkFiaVE4Vlo3RVk2ZXVzeEFWYjBHdmhnWUhkU29GakN3cVg4RHF6UVMvblhhdi9vdXRDWlBHcFVYcUtmbXdldWJvVlFST0RBSWlsOTFvZDJKTEZkeEpCeTcwa0IxdncxZWJlY2ZKS21wd2d0bW5iclU0cHRHL2VVVHN6YlZLbXNOU2R6dDl6NkR3eWNqaHlscFRtdFd1SXZlZndtY3pyclVtTUFUcU5KRllWekwzRTdiQmlyVExqa0pNbnFFN21nbnY0Y2E2ZkR0ZC80TnRIQXlqSDdBdENOUVpVZk0rUmRZOHptOG0rbGZXL2FhUElHSzFvVmwzYURGRGFFNXZqc0hlNDVIbG5JNk5BemZKUmZzaEJHcklzcys4Vk9ZMlQ3eXZnQjdZRHJzT2dwbnowRldOcHpMaHV3TDJXb2RCdW9McUpReXNLTXZGRXIyNzJsTzN3ZzkzNG1zYjhaajBMbGg5SGFDbWlhUXpnY01NQUdYQSsrODlmOCtpMkZObm04YmhMYmhDNml5UldGaWEzaXNMaVFYOEFmVzlFM1FjMzVvWFRLOXZ4d0U1WDE2VFdUd3U1QysxbDEvUFlFU3k3eHZrekRTd056dHNPVUkzRm9GcGo4S04xZHcxM2kwWERNMlFZOHdVTTFxd2ZKdTdpMzdXTDE0OHhQb1BEZFdMcFB1Q2RTTjE1cWRMVnc2ejRFM3Q1aTd3NXJCOC9kWk9VVHRXMHlIclBQV3ZadktnL3pOM1piYkNRVnJuNGFDTm0xMEFqV3lCUXdLTTJaM0hBWFpjWjJrYUVFWWNuK2tseERNdSs0TGFQckhmQUJWdXh6czZ1OE5sS3dMcFliQzkrZWg3MTNRNDNhNG9heHhTNnFNdHVvNk96SjBqUXNISlJ0QTVnQ29XVHEwL1pHcllPaDd6b1B0ZWl1ODlxaHoyc3BNRU5mcmlJUHA0bFRDazBhSkgvZHBERkJEbThHUU1JMHFOUXhrQjV6VUduN1h5SFJEZHFrYVkrRFFDWE1kQzFTRFNyQ3hWK2kwa3pycXZBeVpYenZEbVBzRXRLc2JtaWFhUFhxTldadmtJYm9WZjBETmhmVmZHQWgzVm9NN3Fsck55NjdUOFMzVHFUWjFvTXV0VnBwRUZQNHVVUWNGY3pxR1RyMDl4MkQxUGxpeUcxWmtRdS9HTUw1VjZMQUVjcE9wemtNdFVoQTI5NEtpTm5mcVRCYUlBU3YxaVloV3U0WGxDNmd1YzJIZk4vRCtiOXcrSC9mNWhxeUUwYXRoYXg5L05nbDd5Nzk0SFpidmRkY1hUNkFxbFlTSnJZenJZWGMxcG13QUNhUGtGeWpabmZZN1JDM2NEVEh2WEduTFlOdzZkN1Y0QWhXdHlrYlY4ZytVdUVneWpmeXluNExqbVBreGRIMDdIMEYxckEvMUtvSVloWi9sTHFTeU5xMTNtSHFpZWJJMkJDVXZqMEpDTTA2UlQ1bDZFa2F1ZlMyczdnRWxDa09SWkN1dmhHRHNSdU5kMWFIdHpWWjdBbVBiVithNnl0V2hkdURHZzNEbmxId0U5ZDVUY08vMVpycDljQUNtZldSQ3dkY1doMS9mWWY2Q0luWlUrUmZnYkpRSWdNQTdPU0xVUEZpNEM4UnlQbmJHT3B4b1VCbnFWNEtwYlN3UFFCYjBtbU9zOWxyZkJQTTZXZGQ5RjhPVUQ4MjE5Ty9nWUF1eWxKV2QxMDJvMmZQVUszWVZISDRPU2hRS2ZSSWpNbUI0aGpId2h0NGZDcXIwTU9Pb1JwTnc4eURhdFBoMnVOVythS3g5NXhLdHZNcG11SjRQYzR3bExhaTVZcktVR1FZL3VEQVRQSU5xbWdLaVVmWnBJaytrOFNzZ3Fod05sR3paTW0zdnFRa05LMFBkQ2RiVDlBTHEwR0NvNk1QN053TDU1dkhPRVk3d2grb1oxQ3R0NGVuYlE2dVJlTk4xbzQzV2lQc2lib3g5NnBVWmJ0YXBFYzNodVh0TmluUlM0UDdqb0xuMkFtcjNzOGE2OTBOa01SZnRqU1dlUWUzcVp4Wld1NGhUM09FdGN5Y2NsQmljTXZVRTFPUDFZTGJ0bGRyblZ4Z3IyU3VvVGIxQTFxdWd2TDBkdnJFZHNqYXZCVFhMV0E5azFoWXJTbnBMUldNVUIrWGxkVEJnV1N4TUhwM2k4c1ZObUNNOGxDSWV1Tmc2VHFCa3daKzQzcXdqWllwQ1Q1czJTc1JCZkM2Ui9uZWJLR2xRdG44RlV6K0Nqdy9CMWlPaEFiZzFQZUh1bWxiZTVxL0Jxcyt0YTRtQXB2M2NBdFZ3c3JYemhRZis1dTJBOXZKT2RBenhwRkdwOThDWUJ5TnJyRDNPTWhQQ05TcFdCMktseXhRVmJSRjNadWRSNC9JTXZqYzBtbXFQWGtoOThqQ210clZxRm0wWHJSZXBWd0cyOUxIU1pPbzNjbUVpZUFLMXFBdkljYmxkOWg0M2ptblFQdklibEJOSWdXZmZUTVQwc085Y3NyUEo3aHdVZTdxRW5LOHViS1dKdjFkNVZLekg1V0hxU2F6b3E5K2JzenU3dkpBQnd6S3NPLzhQVUxHSDVUNkhMQTNsUnBoM0pLS0phNDFxZFNNc2VETFNlbTd6Qml6ZWJUVWhHaWRHbjEyYzNoSU50OUM3M1JhNlJuMytOV3crREJKVnJWakNtQU1sQzBHQmZQalpRTE0vbWFudEN5ZzVwZ29QQTR0S3kwbXVsM00zVVhzbmQyVnZLc2hSVkZCa3AzcHlUbWpYQlZTTjB0Q3ZDZnlxZ1pXMjdRZ3NEenVtNnRJUUt1VEcxbjg0RCtLNEJ3M1QrMUxndHV1czhxbExZZno3UG9IYTB0djRkM1paK0NrOE10Tzlta3ZPeWEzaHQ3bkJ1MmdsblVBRjgwdmNTNEtBUWZud0FEU1pGbHJiV3gyZy9TM21ucmhSOHJKSHI4WWdVZG82NWVHR2NsWisyWlVsVHVXTFJvbnRKTk5QdGxkcFROYXM1OTZGTVM1UE1ZS2Q4QU9VQUJBUVFaRXdjK21ob1F1NlBYWXZVNy9wcSthVXlPa2hTZXkrdzJ5ZlFBV3JrVjFEMUw5VEEvanJWbmZtdjcwTGZvQVNOMHBPcGUxU2Z5TElRVU5RZXZ3TXBqMWlYZmRlWkE0WkpvUkZTU1ZIemduU1pKOUJlWnRva2JtRG9HSjU3TE8zUnE1UndkcGtjWC9tTGloVzBKZ0JKUXViTldiRFA2MzJaSHJKU3lOQmtlaUd1RnJQTkk3c2s3aGU0ZXRoZUM3WHU5N0ZBcnJjeXlkQXVYeUNDVkFKVUM0SnVNeVcwS2dFS0pjRVhHWkxhRlFDbEVzQ0xyTWxmaXJyQWxUT1QyVlZtdDZySU96dFN4ZWw0eWlMaGt3QnRVSkI4emdhdCtlaGFsaVorRUNFQzJ5QkFIMFVBM1YxRldCL3ZIOEtLUzllV3FOMU5qV0NIN0daRG5SekFUY2VzOHdJcEt2dTV0MzRmdm82bGN4MnBiZ21Ia25rcVUxd1FwK2pMdVBWUWV0SEJHbjZRUVZMRWwvOU1kaHl2dktqYUVXNldpN1hrWjl1VTd3VTc3Qnl2MGJXbDVmVS8rS2VrVDlMZVZhM1ZRVjRRM0ZsZkViUzYxS2k0YlNXajQ2bHE4WDJzczRmL1V2VFZaTmdsQlNJRiszSy9iemtyQUE4VDdyNk1pSVVISlc0ZkxBMGlZZVU1djRyK29PbHNBck4wbWdmTFAwdm94L3pYMkw0blBJQUFBQUFTVVZPUks1Q1lJST0KLy8gQGF1dGhvciAgICAgICB0aWFueWEzNjUudG9wCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly8qLnRpYW55YTM2NS50b3AvKgovLyBAaW5jbHVkZSAgICAgIGh0dHBzOi8vaGoqLiovKgovLyBAaW5jbHVkZSAgICAgIGh0dHBzOi8vaCpqKi4qLyoKLy8gQGluY2x1ZGUgICAgICBodHRwczovLyouaGoqLiovKgovLyBAaW5jbHVkZSAgICAgIGh0dHBzOi8vaGFpKi50b3AvKgovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vaGFpamlhby5jb20vKgovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vd3d3LmhhaWppYW8uY29tLyoKLy8gQG1hdGNoICAgICAgICBodHRwczovL2gyajVqMDcxMDkudG9wL2hvbWUKLy8gQG1hdGNoICAgICAgICAqOi8vKi9wb3N0L2RldGFpbHMqCi8vIEBjb25uZWN0ICAgICAgKgovLyBAcnVuLWF0ICAgICAgIGRvY3VtZW50LXN0YXJ0Ci8vIEBncmFudCAgICAgICAgbm9uZQovLyBAYW50aWZlYXR1cmUgIHBheW1lbnQKLy8gQGNoYXJzZXQJCSBVVEYtOAovLyBAZG93bmxvYWRVUkwgaHR0cHM6Ly91cGRhdGUuZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy81MjM3NDkvJUU2JUI1JUI3JUU4JUE3JTkyJUU1JUE0JUE5JUU2JUI2JUFGLSVFOCVBNyVBMyVFOSU5NCU4MSVFNiVCNSVCNyVFOCVBNyU5MiVFNyVBNCVCRSVFNSU4QyVCQSVFOCVCNSU4NCVFNiVCQSU5MC51c2VyLmpzCi8vIEB1cGRhdGVVUkwgaHR0cHM6Ly91cGRhdGUuZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy81MjM3NDkvJUU2JUI1JUI3JUU4JUE3JTkyJUU1JUE0JUE5JUU2JUI2JUFGLSVFOCVBNyVBMyVFOSU5NCU4MSVFNiVCNSVCNyVFOCVBNyU5MiVFNyVBNCVCRSVFNSU4QyVCQSVFOCVCNSU4NCVFNiVCQSU5MC5tZXRhLmpzCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uICgpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICBsZXQgdmVyc2lvbiA9ICcxLjQuMCc7CiAgICBsZXQgbmV3VmVyc2lvbiA9ICcnOwogICAgbGV0IG0zdThfdXJsID0gJyc7CiAgICBsZXQgcGxheV91cmwgPSAnJzsKICAgIGxldCBoYXNQaWMgPSBmYWxzZTsKICAgIGxldCB2aWRlbyA9IG51bGw7CiAgICBsZXQgdG9waWMgPSBudWxsOwogICAgbGV0IHNob3J0VmlkZW9VcmwgPSAnJzsKICAgIGxldCBzZXJ2ZXIgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hqdHlfc2VydmVyJyk7CiAgICBsZXQgZnJlZVRva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoanR5X2ZyZWVfdG9rZW4nKTsKCiAgICBpZiAoc2VydmVyID09IG51bGwpIHsKICAgICAgICBzZXJ2ZXIgPSAnaHR0cHM6Ly92aXAudGlhbnlhMzY1LnRvcCc7CiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoanR5X3NlcnZlcicsIHNlcnZlcik7CiAgICB9CgogICAgaWYgKGZyZWVUb2tlbiA9PSBudWxsKSB7CiAgICAgICAgZnJlZVRva2VuID0gJzhiOTU5MWZjZGI0ZTQzNDBiYzgxNWNiMTgzYWEwMmY4JwogICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGp0eV9mcmVlX3Rva2VuJywgZnJlZVRva2VuKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbXBvcnRKcyhzcmMsIG9ubG9hZCkgewogICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBzY3JpcHQuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvamF2YXNjcmlwdCIpOwogICAgICAgIHNjcmlwdC5zcmMgPSBzcmM7CiAgICAgICAgc2NyaXB0Lm9ubG9hZCA9IG9ubG9hZDsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICB9CgogICAgZnVuY3Rpb24gbG9hZFN0eWxlKCkgewogICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoYAo8c3R5bGU+Ci5oanR5LWRpYWxvZy1tYXNre3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDA7bGVmdDogMDt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7YmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO3otaW5kZXg6IDMwMDA7fQouaGp0eS1kaWFsb2d7cG9zaXRpb246IGZpeGVkO3RvcDogNTAlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO2JveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7cGFkZGluZzogMjBweDtmb250LXNpemU6IDE0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZjFmMWYxOwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgd2lkdGg6IDI1MHB4O30KLmhqdHktZGlhbG9nLXRpdGxle2ZvbnQtc2l6ZTogMTZweDtmb250LXdlaWdodDogYm9sZDttYXJnaW4tYm90dG9tOiAxMHB4O3RleHQtYWxpZ246IGNlbnRlcjt9Ci5oanR5LWRpYWxvZy1jb250ZW50IHB7Y29sb3I6ICMzMzMzMzM7bWFyZ2luLWJvdHRvbTogMTBweDt9Ci5oanR5LWRpYWxvZy1jb250ZW50IHVse2xpc3Qtc3R5bGU6IG5vbmU7cGFkZGluZzogMDttYXJnaW46IDA7fQouaGp0eS1kaWFsb2ctY29udGVudCB1bCBsaXsKICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgIGJvcmRlcjogMnB4IHNvbGlkICNkNWQ1ZDU7CiAgICBwYWRkaW5nOiAzcHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6ICNmN2Y3Zjc7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KLmhqdHktZGlhbG9nLWNvbnRlbnQgdWwgbGkuYWN0aXZle2JvcmRlci1jb2xvcjogIzQwOWVmZjtiYWNrZ3JvdW5kOiAjZWNmNWZmO30KLmhqdHktZGlhbG9nLWNvbnRlbnQgdWwgbGkgc3Bhbi5zdGF0dXN7ZGlzcGxheTogaW5saW5lLWJsb2NrO3dpZHRoOiAxMHB4O2hlaWdodDogMTBweDtib3JkZXItcmFkaXVzOiA1MCU7bWFyZ2luLXJpZ2h0OiA1cHg7YmFja2dyb3VuZC1jb2xvcjogI2E5YTlhOTt9Ci5oanR5LWRpYWxvZy1jb250ZW50IHVsIGxpIHNwYW4uc3RhdHVzLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjogIzY3YzIzYTt9Ci5oanR5LWRpYWxvZy1jb250ZW50IHVsIGxpIHNwYW4uc3RhdHVzLWZhaWx7YmFja2dyb3VuZC1jb2xvcjogI2Y1NmM2Yzt9Ci5oanR5LWRpYWxvZy1jb250ZW50IHVsIGxpIHNwYW4udGltZW91dHtjb2xvcjogIzk5OTk5OTtmb250LXNpemU6IDEycHg7ZmxvYXQ6IHJpZ2h0O21hcmdpbi10b3A6IDFweDt9Ci5oanR5LWRpYWxvZy1mb290ZXJ7bWFyZ2luLXRvcDogMjBweDt0ZXh0LWFsaWduOiBjZW50ZXI7fQouaGp0eS1kaWFsb2ctYnRue3BhZGRpbmc6IDVweCAxMHB4O2JhY2tncm91bmQtY29sb3I6ICM0MDllZmY7Y29sb3I6ICNmZmZmZmY7Ym9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6IDRweDtjdXJzb3I6IHBvaW50ZXI7fQojcGxheS1ib3gge2hlaWdodDogMTAwJTtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjogIzAwMDt9Ci52YW4tcG9wdXAudmFuLXBvcHVwLS1jZW50ZXIucGxheS1ib3gge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXgtd2lkdGg6IDEwMCU7fQojYmJzX2Zsb2F0X21lbnV7ei1pbmRleDoxIWltcG9ydGFudDt9CiNib2R5LmVsLXBvcHVwLXBhcmVudC0taGlkZGVue292ZXJmbG93OiBhdXRvO30KLnZhbi1saXN0IC52YW4tbGlzdF9fbG9hZGluZywKLnNlbGwtYnRuOmJlZm9yZSwKLmVsLW1lc3NhZ2UtYm94LAoudi1tb2RhbCwKLmNvbnRhaW5lcmFkdmVydGlzaW5nLAouaXNoaWRlLAouZWwtbWVzc2FnZS1ib3hfX3dyYXBwZXIsCiN0aWRpby1jaGF0e2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9Cjwvc3R5bGUKICAgICAgICBgKTsKICAgIH0KCiAgICBmdW5jdGlvbiBpbXBvcnRDc3MoaHJlZikgewogICAgICAgIGxldCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpOwogICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCJyZWwiLCAic3R5bGVzaGVldCIpOwogICAgICAgIGxpbmsuaHJlZiA9IGhyZWY7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChsaW5rKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjaGVja1VybCh1cmwpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpOwogICAgICAgICAgICB9LCA1MDAwKTsKCiAgICAgICAgICAgIHhoci5vcGVuKCdIRUFEJywgdXJsLCB0cnVlKTsKICAgICAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7CiAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDQwMCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHVybDogdXJsLCB0aW1lOiByZXNwb25zZVRpbWUgfSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJlc29sdmUobnVsbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICB4aHIub25lcnJvciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7CiAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgeGhyLnNlbmQoKTsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBzd2l0Y2hTZXJ2ZXIoKSB7CiAgICAgICAgJCgnYm9keScpLmFwcGVuZChgCjxkaXYgY2xhc3M9ImhqdHktZGlhbG9nLW1hc2siPgogICAgPGRpdiBjbGFzcz0iaGp0eS1kaWFsb2ciPgogICAgICAgIDxkaXYgY2xhc3M9ImhqdHktZGlhbG9nLXRpdGxlIj7mtbfop5LlpKnmtq/mj5DnpLo8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJoanR5LWRpYWxvZy1jb250ZW50Ij4KICAgICAgICAgICAgPHA+6K+36YCJ5oup5pyN5Yqh5Zmo6IqC54K5PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8bGkgZGF0YS11cmw9Imh0dHBzOi8vdmlwLnRpYW55YTM2NS50b3AiPjxzcGFuIGNsYXNzPSJzdGF0dXMiPjwvc3Bhbj4g5pyN5Yqh5ZmoMSA8c3BhbiBjbGFzcz0idGltZW91dCI+5rWL6YCf5LitPC9zcGFuPjwvbGk+CiAgICAgICAgICAgICAgICA8bGkgZGF0YS11cmw9Imh0dHBzOi8vaGFpamlhby50aWFueWEzNjUudG9wIj48c3BhbiBjbGFzcz0ic3RhdHVzIj48L3NwYW4+IOacjeWKoeWZqDIgPHNwYW4gY2xhc3M9InRpbWVvdXQiPua1i+mAn+S4rTwvc3Bhbj48L2xpPgogICAgICAgICAgICAgICAgPGxpIGRhdGEtdXJsPSJodHRwczovL25ldy50aWFueWEzNjUudG9wIj48c3BhbiBjbGFzcz0ic3RhdHVzIj48L3NwYW4+IOacjeWKoeWZqDMgPHNwYW4gY2xhc3M9InRpbWVvdXQiPua1i+mAn+S4rTwvc3Bhbj48L2xpPgogICAgICAgICAgICAgICAgPGxpIGRhdGEtdXJsPSJodHRwczovL2hqLnRpYW55YTM2NS50b3AiPjxzcGFuIGNsYXNzPSJzdGF0dXMiPjwvc3Bhbj4g5pyN5Yqh5ZmoNCA8c3BhbiBjbGFzcz0idGltZW91dCI+5rWL6YCf5LitPC9zcGFuPjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGp0eS1kaWFsb2ctZm9vdGVyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGp0eS1kaWFsb2ctYnRuIj7noa7lrpo8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KICAgICAgICBgKTsKCiAgICAgICAgJCgnLmhqdHktZGlhbG9nLWNvbnRlbnQgdWwgbGknKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtdXJsJyk7CiAgICAgICAgICAgIGlmIChzZXJ2ZXIgPT09IHVybCkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjaGVja1VybCh1cmwgKyAnL2xvZ2luJykudGhlbihyZXN1bHQgPT4gewogICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnN0YXR1cycpLmFkZENsYXNzKCdzdGF0dXMtc3VjY2VzcycpOwogICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnRpbWVvdXQnKS5odG1sKGAke3Jlc3VsdC50aW1lfW1zYCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnN0YXR1cycpLmFkZENsYXNzKCdzdGF0dXMtZmFpbCcpOwogICAgICAgICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnRpbWVvdXQnKS5odG1sKCfotoXml7YnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9KTsKCiAgICAgICAgJCgnLmhqdHktZGlhbG9nLWNvbnRlbnQgdWwgbGknKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgJCgnLmhqdHktZGlhbG9nLWNvbnRlbnQgdWwgbGknKS5ub3QoJCh0aGlzKSkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpOwogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdhY3RpdmUnKTsKICAgICAgICAgICAgc2VydmVyID0gJCh0aGlzKS5hdHRyKCdkYXRhLXVybCcpOwogICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hqdHlfc2VydmVyJywgc2VydmVyKTsKICAgICAgICB9KTsKICAgICAgICAkKCcuaGp0eS1kaWFsb2ctYnRuJykuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpCiAgICAgICAgfSk7CiAgICB9CgogICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBsb2FkU3R5bGUoKTsKICAgICAgICBjaGVja1VybChzZXJ2ZXIpLnRoZW4ocmVzdWx0ID0+IHsKICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgICAgICAgIHN3aXRjaFNlcnZlcigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW1wb3J0Q3NzKHNlcnZlciArICcvc3RhdGljL2xpYnMvdmFudC9saWIvaW5kZXguY3NzJyk7CiAgICAgICAgICAgICAgICBpbXBvcnRKcyhzZXJ2ZXIgKyAnL3N0YXRpYy9saWJzL2F4aW9zL2F4aW9zLm1pbi5qcycpOwogICAgICAgICAgICAgICAgaW1wb3J0SnMoc2VydmVyICsgJy9qcy9iYXNlNjQubWluLmpzJyk7CiAgICAgICAgICAgICAgICBpbXBvcnRKcyhzZXJ2ZXIgKyAnL3N0YXRpYy9saWJzL3Z1ZS92dWUuZ2xvYmFsLnByb2QuanMnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaW1wb3J0SnMoc2VydmVyICsgJy9zdGF0aWMvbGlicy92YW50L2xpYi92YW50LmpzJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBpbml0KCkKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIH0KCiAgICBjb25zdCBkZWNyeXB0ID0gZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh3aW5kb3cuQmFzZTY0LmRlY29kZSh3aW5kb3cuQmFzZTY0LmRlY29kZSh3aW5kb3cuQmFzZTY0LmRlY29kZShkYXRhKSkpKTsKICAgIH0KCiAgICBjb25zdCBlbmNyeXB0ID0gZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICByZXR1cm4gd2luZG93LkJhc2U2NC5lbmNvZGUod2luZG93LkJhc2U2NC5lbmNvZGUod2luZG93LkJhc2U2NC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZm9ybWF0VGl0bGUoZGF0YSkgewogICAgICAgIGRhdGEucmVzdWx0cy5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgICAgICBjb25zdCB0aXBzID0gW107CiAgICAgICAgICAgIHRpcHMucHVzaCgnbW9uZXlfdHlwZScgaW4gaXRlbSA/IFsnJywgJ/CfkrAnLCAn8J+SjiddW2l0ZW0ubW9uZXlfdHlwZV0gOiAnJyk7CiAgICAgICAgICAgIGl0ZW0uaGFzVmlkZW8gJiYgdGlwcy5wdXNoKCfwn46lJyk7CiAgICAgICAgICAgIGl0ZW0uaGFzQXVkaW8gJiYgdGlwcy5wdXNoKCfwn461Jyk7CiAgICAgICAgICAgIGl0ZW0udGl0bGUgPSBgJHt0aXBzLmpvaW4oJyAnKX0gJHtpdGVtLnRpdGxlfWA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0U2hvcnRWaWRlb1VybChyZXNwb25zZVRleHQpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgICAgICBpZiAocmVzWydpc0VuY3J5cHRlZCddKSB7CiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IGRlY3J5cHQocmVzLmRhdGEpOwogICAgICAgICAgICAgICAgaWYgKGRhdGFbJ2NhdGVnb3J5J10gJiYgZGF0YVsnY2F0ZWdvcnknXSA9PT0gJ3ZpZGVvJyAmJiBkYXRhWydyZW1vdGVVcmwnXSkgewogICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVsncmVtb3RlVXJsJ10uc3RhcnRzV2l0aCgnaHR0cCcpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0VmlkZW9VcmwgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgZGF0YVsncmVtb3RlVXJsJ107CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRWaWRlb1VybCA9IGRhdGFbJ3JlbW90ZVVybCddOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZml4U2hvcnRWaWRlbyhyZXNwb25zZVRleHQpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICByZXNwb25zZVRleHQgPSBKU09OLnBhcnNlKHJlc3BvbnNlVGV4dCk7CiAgICAgICAgICAgIGxldCB2aWRlbyA9IGRlY3J5cHQocmVzcG9uc2VUZXh0LmRhdGEpOwogICAgICAgICAgICB2aWRlby50eXBlID0gMTsKICAgICAgICAgICAgdmlkZW8uYW1vdW50ID0gMDsKICAgICAgICAgICAgdmlkZW8ubW9uZXlfdHlwZSA9IDA7CiAgICAgICAgICAgIHZpZGVvLnZpcCA9IDA7CiAgICAgICAgICAgIHZpZGVvLm1lc3NhZ2UgPSAnJzsKICAgICAgICAgICAgcmVzcG9uc2VUZXh0LmRhdGEgPSBlbmNyeXB0KHZpZGVvKTsKICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlVGV4dCk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VUZXh0OwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBpbml0KCkgewogICAgICAgICQoJ2JvZHknKS5hcHBlbmQoYAo8ZGl2IGlkPSJoanR5LWFwcCI+CiAgICA8dmFuLWRpYWxvZyB2LW1vZGVsOnNob3c9ImRpYWxvZ0xvZ2luIiAKICAgICAgICA6YmVmb3JlLWNsb3NlPSJ1c2VyTG9naW4iIAogICAgICAgIHRpdGxlPSLnmbvlvZXmtbfop5LlpKnmtq8iIAogICAgICAgIGNvbmZpcm0tYnV0dG9uLXRleHQ9IueZu+W9lSIgCiAgICAgICAgc2hvdy1jYW5jZWwtYnV0dG9uPSJ0cnVlIgogICAgICAgIGNsb3NlLW9uLWNsaWNrLW92ZXJsYXk9InRydWUiCiAgICAgICAgY2FuY2VsLWJ1dHRvbi10ZXh0PSLms6jlhowiCiAgICAgICAgdGhlbWU9InJvdW5kLWJ1dHRvbiI+CiAgICAgICAgPHZhbi1mb3JtIHN0eWxlPSJwYWRkaW5nOiAxMHB4IDE1cHgiPgogICAgICAgICAgICA8dmFuLWZpZWxkCiAgICAgICAgICAgICAgdi1tb2RlbD0idXNlcm5hbWUiCiAgICAgICAgICAgICAgbmFtZT0i6LSm5Y+3IgogICAgICAgICAgICAgIGxhYmVsPSLotKblj7ciCiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpei0puWPtyIKICAgICAgICAgICAgICA6cnVsZXM9Ilt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+35aGr5YaZ6LSm5Y+3JyB9XSIKICAgICAgICAgICAgPjwvdmFuLWZpZWxkPgogICAgICAgICAgICA8dmFuLWZpZWxkCiAgICAgICAgICAgICAgdi1tb2RlbD0icGFzc3dvcmQiCiAgICAgICAgICAgICAgdHlwZT0icGFzc3dvcmQiCiAgICAgICAgICAgICAgbmFtZT0i5a+G56CBIgogICAgICAgICAgICAgIGxhYmVsPSLlr4bnoIEiCiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeWvhueggSIKICAgICAgICAgICAgICA6cnVsZXM9Ilt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+35aGr5YaZ5a+G56CBJyB9XSIKICAgICAgICAgICAgPjwvdmFuLWZpZWxkPgogICAgICAgIDwvdmFuLWZvcm0+CiAgICA8L3Zhbi1kaWFsb2c+CiAgICA8ZGl2IHN0eWxlPSJ0b3VjaC1hY3Rpb246IG5vbmUiPgogICAgICAgIDx2YW4tZmxvYXRpbmctYnViYmxlCiAgICAgICAgICBheGlzPSJ4eSIKICAgICAgICAgIGljb249ImxvY2siCiAgICAgICAgICBtYWduZXRpYz0ieCIKICAgICAgICAgIEBjbGljaz0idW5sb2NrIgogICAgICAgICAgdi1tb2RlbDpvZmZzZXQ9Im9mZnNldCIKICAgICAgICA+PC92YW4tZmxvYXRpbmctYnViYmxlPgogICAgPC9kaXY+CiAgICA8ZGl2PgogICAgICAgIDx2YW4tYWN0aW9uLXNoZWV0CiAgICAgICAgICB2LW1vZGVsOnNob3c9ImFjdGlvblNob3ciCiAgICAgICAgICA6YWN0aW9ucz0iYWN0aW9ucyIKICAgICAgICAgIEBzZWxlY3Q9Im9uU2VsZWN0IgogICAgICAgICAgY2FuY2VsLXRleHQ9IuWFs+mXrSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSLluJblrZDop6PplIHmiJDlip/vvIzkuIvmu5Hmn6XnnIvmm7TlpJrmk43kvZwiCiAgICAgICAgPjwvdmFuLWFjdGlvbi1zaGVldD4KICAgIDwvZGl2PgogICAgPGRpdj4KICAgICAgICA8dmFuLXBvcHVwIHYtbW9kZWw6c2hvdz0ic2hvd1BsYXllciIgOmNsb3NlYWJsZT0idHJ1ZSIgY2xhc3M9InBsYXktYm94IiBAY2xpY2stY2xvc2UtaWNvbj0ib25QbGF5ZXJDbG9zZSI+CiAgICAgICAgICAgIDxkaXYgaWQ9InBsYXktYm94Ij4KICAgICAgICAgICAgICAgPGlmcmFtZSA6c3JjPSJwbGF5X3VybCIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7Ym9yZGVyOjA7d2lkdGg6IDEwMCU7aGVpZ2h0OiA1MDBweCIgYWxsb3c9ImF1dG9wbGF5OyBlbmNyeXB0ZWQtbWVkaWEiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC92YW4tcG9wdXA+CiAgICA8L2Rpdj4KPC9kaXY+YCk7CgogICAgICAgIGF4aW9zLmRlZmF1bHRzLnRpbWVvdXQgPSA2MDAwMDsKICAgICAgICBWdWUuY3JlYXRlQXBwKHsKICAgICAgICAgICAgZGF0YSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgc2hvd1BsYXllcjogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgZGlhbG9nTG9naW46IGZhbHNlLAogICAgICAgICAgICAgICAgICAgIGRpYWxvZ1Jlc3VsdDogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgYWN0aW9uU2hvdzogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgcGxheV91cmw6ICcnLAogICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiAnJywKICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogJycsCiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB7fSwKICAgICAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgbW91bnRlZCgpIHsKICAgICAgICAgICAgICAgIGlmICghZ2V0VXNlclRva2VuKCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0xvZ2luID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja1VwZGF0ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSB7eDogd2luZG93LmlubmVyV2lkdGggLSA3MiwgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMn07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG1ldGhvZHM6IHsKICAgICAgICAgICAgICAgIHVubG9jaygpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobmV3VmVyc2lvbiAhPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VXBkYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICghZ2V0VXNlclRva2VuKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dMb2dpbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNvb2tpZSgnTk9UTE9HSU4nKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWQgPSB0aGlzLmdldFBpZCgpOwogICAgICAgICAgICAgICAgICAgIGlmICghcGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvXC92aWRlb3BsYXkvLnRlc3QobG9jYXRpb24uaHJlZikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUZXh0KHNob3J0VmlkZW9VcmwpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd1N1Y2Nlc3NUb2FzdCgn55+t6KeG6aKR5Zyw5Z2A5aSN5Yi25oiQ5YqfJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93RmFpbFRvYXN0KCflpI3liLblpLHotKUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93RGlhbG9nKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+a1t+inkuWkqea2rycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+W9k+WJjei0puWPt++8micgKyB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hqdHlfdXNlcl9uYW1lJykgKyAnXG7lpoLpnIDop6PplIHluJblrZDvvIzor7fov5vlhaXluJblrZDlho3mk43kvZwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lOiAncm91bmQtYnV0dG9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+mAgOWHuueZu+W9lScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WFs+mXrScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oYWN0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnY29uZmlybScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoanR5X3VzZXJfdG9rZW4nLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGp0eV91c2VyX25hbWUnLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd1N1Y2Nlc3NUb2FzdCgn6YCA5Ye65oiQ5YqfJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHt9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAobTN1OF91cmwgIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uU2hvdyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93TG9hZGluZ1RvYXN0KHsKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+ino+mUgeS4rS4uLicsCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmJpZENsaWNrOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMCwKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRvcGljKHBpZCkudGhlbigoZGF0YSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dUb3BpYyhkYXRhLCBwaWQpOwogICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFudC5jbG9zZVRvYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd0ZhaWxUb2FzdChlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHNob3dBY3Rpb25zKCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9ucyA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ+aSreaUvuinhumike+8iOermeWGhe+8iScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdwbGF5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym5hbWU6ICflpoLml6Dms5XlnKjnur/mkq3mlL7vvIzlj6/lsJ3or5Xlhbbku5blnKjnur/mkq3mlL7lmajvvIzmiJbkuIvovb3lkI7lho3op4LnnIsnCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICflpI3liLbop4bpopHlnLDlnYAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY29weScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJuYW1lOiAn5Y+v5aSN5Yi26KeG6aKR5Zyw5Z2A5Yiw5YW25LuW5Zyw5pa55pKt5pS+5oiW5LiL6L29JwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn5Zyo57q/5pKt5pS+5ZmoMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdvcGVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym5hbWU6ICfnlLXohJHnq6/lkozmiYvmnLrnq6/lnYflj6/mraPluLjmkq3mlL4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cDovL3Rvb2wubGl1bWluZ3llLmNuL20zdTgvIycgKyBtM3U4X3VybAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn5Zyo57q/5pKt5pS+5ZmoMicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJuYW1lOiAn5omL5py656uv5Y+v6IO95peg5rOV5pKt5pS+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ29wZW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly93d3cuaGxzcGxheWVyLm5ldC9lbWJlZD90eXBlPW0zdTgmc3JjPScgKyBlbmNvZGVVUklDb21wb25lbnQobTN1OF91cmwpCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICflnKjnur/mkq3mlL7lmagzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ29wZW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibmFtZTogJ+aXoOazleaSreaUvuWFjei0ueinhumike+8jOaJi+acuuerr+WPr+iDveaXoOazleaSreaUvicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL20zdThwbGF5ZXIub3JnLycKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ+inhumikeS4i+i9vemAmumBkzEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnb3BlbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJuYW1lOiAn44CQ5o6o6I2Q44CR5pSv5oyB6Ieq5Yqo5LiL6L295ZKM5Zyo57q/5pKt5pS+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vZ2V0bTN1OC5jb20vP3NvdXJjZT0nICsgbTN1OF91cmwgKyAobTN1OF91cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/JykgKyAndGl0bGU9JyArIHRvcGljWyd0aXRsZSddCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICfop4bpopHkuIvovb3pgJrpgZMyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ29wZW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibmFtZTogJ+WFjei0ueinhumikeWPr+iDveaXoOazleS4i+i9ve+8jOaOqOiNkOWcqOeUteiEkeerr+aTjeS9nCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL2Jsb2cubHVja2x5LW1qdy5jbi90b29sLXNob3cvbTN1OC1kb3dubG9hZGVyL2luZGV4Lmh0bWw/c291cmNlPScgKyBtM3U4X3VybCArIChtM3U4X3VybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nKSArICd0aXRsZT0nICsgdG9waWNbJ3RpdGxlJ10KICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ+inhumikeS4i+i9vemAmumBkzMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnb3BlbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJuYW1lOiAn6ZyA6KaB5omL5Yqo54K55Ye75LiL6L2977yM5o6o6I2Q5Zyo55S16ISR56uv5pON5L2cJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2h0dHBzOi8vdG9vbHMudGhhdHdpbmQuY29tL3Rvb2wvbTN1OGRvd25sb2FkZXIjbTN1OD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG0zdThfdXJsKQogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn5rW36KeS5aSp5rav5a6Y572RJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ29wZW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibmFtZTogJ+eCueWHu+iuv+mXricsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNlcnZlciArICcvJwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn5YiH5o2i6IqC54K5JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3N3aXRjaCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJuYW1lOiAn54K55Ye75YiH5o2i5YW25LuW5pyN5Yqh5Zmo6IqC54K5JwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAn6YCA5Ye655m75b2VJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym5hbWU6ICflvZPliY3otKblj7fvvJonKyB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hqdHlfdXNlcl9uYW1lJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdsb2dvdXQnLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25TaG93ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBvblNlbGVjdChpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtLmtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwbGF5JzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxheV91cmwgPSBwbGF5X3VybDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BsYXllciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dUb2FzdCgn6KeG6aKR5Yqg6L295Lit77yM6K+356iN562JLi4uJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb3Blbic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihpdGVtLnVybCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3dpdGNoJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlcnZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xvZ291dCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hqdHlfdXNlcl90b2tlbicsICcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaGp0eV91c2VyX25hbWUnLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dTdWNjZXNzVG9hc3QoJ+mAgOWHuuaIkOWKnycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29weSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5VGV4dChtM3U4X3VybCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93U3VjY2Vzc1RvYXN0KCflpI3liLbmiJDlip8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dGYWlsVG9hc3QoJ+WkjeWItuWksei0pScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldEF0dGFjaG1lbnRzKGRhdGEsIHBpZCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBodG1sID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2F0dGFjaG1lbnRzJ10uZm9yRWFjaChpdGVtID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5jYXRlZ29yeSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZpZGVvJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW8gPSBpdGVtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdWRpbyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPjxhdWRpbyBzcmM9IicgKyBpdGVtWydyZW1vdGVVcmwnXSArICciIGNvbnRyb2xzPSJ0cnVlIiBpZD0ic2hvd2F1ZGlvIj48L2F1ZGlvPjwvcD4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ltYWdlcyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1BpYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVsnY29udGVudCddLmluY2x1ZGVzKGl0ZW1bJ3JlbW90ZVVybCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPHA+PGltZyBkYXRhLXVybD0iJytpdGVtWydyZW1vdGVVcmwnXSsnIiBzcmM9Ii9pbWFnZXMvY29tbW9uL3Byb2plY3QvbG9hZGluZy5naWYiIGFsdD0iIiBkYXRhLWlkPSInICsgaXRlbS5pZCArICciIGxhenk9ImxvYWRlZCI+PC9wPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaHRtbCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2hvd1RvcGljKGRhdGEsIHBpZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhWydhdHRhY2htZW50cyddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QXR0YWNobWVudHMoZGF0YSwgcGlkKS50aGVuKGh0bWwgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh0bWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCgnLnNlbGwtYnRuJykubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5zZWxsLWJ0bicpLnJlcGxhY2VXaXRoKCc8ZGl2IGlkPSJoanNlbGwtY29udGFpbmVyIiBjbGFzcz0iaGpzZWxsLWNvbnRhaW5lciI+PGRpdiBjbGFzcz0iaHNzZWxsLWNvbnRlbnQiPicgKyBodG1sICsgJzwvZGl2PjwvZGl2PicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNoanNlbGwtY29udGFpbmVyIC5oc3NlbGwtY29udGVudCcpLmh0bWwoaHRtbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hqc2VsbC1jb250YWluZXInKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dGYWlsVG9hc3QoJ+ivt+etieW+hemhtemdouWKoOi9veWujOaIkO+8gScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hqc2VsbC1jb250YWluZXInKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cuc2Nyb2xsWSAtIDEwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BpYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dJbWFnZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW8gIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFbJ3NhbGUnXSB8fCBkYXRhWydzYWxlJ11bJ21vbmV5X3R5cGUnXSA9PT0gMCB8fCBkYXRhWydzYWxlJ11bJ2lzX2J1eSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VmlkZW8odmlkZW8sIHBpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeVRvcGljKHBpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LmNsb3NlVG9hc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dTdWNjZXNzVG9hc3QoJ+ino+mUgeaIkOWKnycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dGYWlsVG9hc3QoJ+ayoeacieWPr+ino+mUgeeahOWGheWuuScpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBxdWVyeVRvcGljKHBpZCkgewogICAgICAgICAgICAgICAgICAgIGF4aW9zLmdldChzZXJ2ZXIgKyAnL2FwaS90b3BpYy8nICsgcGlkICsgJz92PScgKyB2ZXJzaW9uLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IGdldFVzZXJUb2tlbigpCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuY2xvc2VUb2FzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuY29kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLm1zZyA9PT0gJ+acieaWsOeJiOacrCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWZXJzaW9uID0gcmVzLmRhdGEuZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dVcGRhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5kYXRhWydtM3U4X3VybCddICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0zdThfdXJsID0gc2VydmVyICsgcmVzLmRhdGEuZGF0YVsnbTN1OF91cmwnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X3VybCA9IHNlcnZlciArICcvcGxheT91cmw9JyArIHdpbmRvdy5CYXNlNjQuZW5jb2RlKG0zdThfdXJsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBY3Rpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd0ZhaWxUb2FzdCgn5rKh5pyJ5Y+v6Kej6ZSB55qE5YaF5a65Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dEaWFsb2coewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn6Kej6ZSB5aSx6LSlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXMuZGF0YS5tc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU6ICdyb3VuZC1idXR0b24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiByZXMuZGF0YS5kYXRhWydjb25maXJtQnV0dG9uVGV4dCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IHJlcy5kYXRhLmRhdGFbJ2NhbmNlbEJ1dHRvblRleHQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiAhIXJlcy5kYXRhLmRhdGFbJ2NhbmNlbEJ1dHRvblRleHQnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oYWN0aW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnY29uZmlybScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLmRhdGFbJ2NvbmZpcm1CdXR0b25UZXh0J10gPT09ICfph43mlrDnmbvlvZUnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hqdHlfdXNlcl90b2tlbicsICcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nTG9naW4gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5kYXRhLmRhdGFbJ2NvbmZpcm1CdXR0b25UZXh0J10gPT09ICfmiZPlvIDlrpjnvZEnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihzZXJ2ZXIgKyAnLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge30pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB2YW50LmNsb3NlVG9hc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93Q29uZmlybURpYWxvZyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+ino+mUgeWksei0pScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pyN5Yqh5Zmo6L+e5o6l5Ye66ZSZ77yM5piv5ZCm5YiH5o2i5Yiw5YW25LuW6IqC54K577yfJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lOiAncm91bmQtYnV0dG9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUNsb3NlOiAoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NvbmZpcm0nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlcnZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2hvd0ltYWdlcygpIHsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjaGpzZWxsLWNvbnRhaW5lciBpbWcnKS5mb3JFYWNoKGltZyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zLmdldChpbWcuZGF0YXNldC51cmwpLnRoZW4ocmVzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBpbWFnZURlY29kZShyZXMuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldFZpZGVvKGl0ZW0sIHBpZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlbW90ZVVybC5pbmNsdWRlcygnaGFpamlhby5saXZlJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbTN1OF91cmwgPSBpdGVtLnJlbW90ZVVybDsKICAgICAgICAgICAgICAgICAgICAgICAgcGxheV91cmwgPSBzZXJ2ZXIgKyAnL3BsYXk/dXJsPScgKyB3aW5kb3cuQmFzZTY0LmVuY29kZShpdGVtLnJlbW90ZVVybCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuY2xvc2VUb2FzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBY3Rpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlkID0gL3VpZD0oW147XSspLy5leGVjKGRvY3VtZW50LmNvb2tpZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gL3Rva2VuPShbXjtdKykvLmV4ZWMoZG9jdW1lbnQuY29va2llKTsKICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3MucG9zdCgnL2FwaS9hdHRhY2htZW50JywgSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9pZDogcGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VfdHlwZTogJ3RvcGljJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6ICcnCiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1gtVXNlci1JZCc6IHVpZCAmJiB0b2tlbiA/IHVpZFsxXSA6ICcxNzI1NjEzNzcwMDInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdYLVVzZXItVG9rZW4nOiB1aWQgJiYgdG9rZW4gPyB0b2tlblsxXSA6IGZyZWVUb2tlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LmNsb3NlVG9hc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuaXNFbmNyeXB0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZSh3aW5kb3cuQmFzZTY0LmRlY29kZSh3aW5kb3cuQmFzZTY0LmRlY29kZSh3aW5kb3cuQmFzZTY0LmRlY29kZShyZXMuZGF0YS5kYXRhKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlcy5kYXRhLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhWydyZW1vdGVVcmwnXS5zdGFydHNXaXRoKCdodHRwJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtM3U4X3VybCA9IHBsYXlfdXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIGRhdGEucmVtb3RlVXJsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtM3U4X3VybCA9IHBsYXlfdXJsID0gZGF0YS5yZW1vdGVVcmw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5X3VybCA9IHNlcnZlciArICcvcGxheT91cmw9JyArIHdpbmRvdy5CYXNlNjQuZW5jb2RlKHBsYXlfdXJsKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBY3Rpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4aW9zLmdldChzZXJ2ZXIgKyAnL2FjYycpLnRoZW4ocmVzID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuY29kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlVG9rZW4gPSByZXMuZGF0YS5kYXRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hqdHlfZnJlZV90b2tlbicsIGZyZWVUb2tlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd0ZhaWxUb2FzdCgn572R57uc6ZSZ6K+vOiDor7fph43or5UnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd0ZhaWxUb2FzdCgn572R57uc6ZSZ6K+vOiAyJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93RmFpbFRvYXN0KCfnvZHnu5zplJnor686IDInKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBnZXRUb3BpYyhwaWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBheGlvcy5nZXQoJy9hcGkvdG9waWMvJyArIHBpZCkudGhlbihyZXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLmlzRW5jcnlwdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9waWMgPSBKU09OLnBhcnNlKHdpbmRvdy5CYXNlNjQuZGVjb2RlKHdpbmRvdy5CYXNlNjQuZGVjb2RlKHdpbmRvdy5CYXNlNjQuZGVjb2RlKHJlcy5kYXRhLmRhdGEpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BpYyA9IHJlcy5kYXRhLmRhdGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRvcGljKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCfnvZHnu5zplJnor686IDMnKQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIG9uUGxheWVyQ2xvc2UoKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5X3VybCA9ICcnOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHVzZXJMb2dpbihhY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnY29uZmlybScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJuYW1lIHx8ICF0aGlzLnBhc3N3b3JkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YW50LnNob3dGYWlsVG9hc3QoJ+ivt+Whq+WGmei0puWPt+WSjOWvhueggScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXhpb3MucG9zdChzZXJ2ZXIgKyAnL2FwaS9sb2dpbicsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy51c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihyZXMgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5jb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd0RpYWxvZyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eZu+W9leWksei0pScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXMuZGF0YS5tc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZTogJ3JvdW5kLWJ1dHRvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2hqdHlfdXNlcl90b2tlbicsIHJlcy5kYXRhLnRva2VuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdoanR5X3VzZXJfbmFtZScsIHRoaXMudXNlcm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0xvZ2luID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbnQuc2hvd0RpYWxvZyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eZu+W9leaIkOWKnycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXMuZGF0YS5tc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZTogJ3JvdW5kLWJ1dHRvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGFjdGlvbiA9PT0gJ2NhbmNlbCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4oc2VydmVyICsgJy9yZWcnKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJuYW1lID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFzc3dvcmQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGdldFBpZCgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoL1wvcG9zdFwvZGV0YWlscy4qcGlkPVxkKy8udGVzdChsb2NhdGlvbi5ocmVmKSkgewogICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2ggPSBsb2NhdGlvbi5ocmVmLm1hdGNoKC9cL3Bvc3RcL2RldGFpbHMuKnBpZD0oXGQrKS9pKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoWzFdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHNob3dVcGRhdGUoKSB7CiAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93RGlhbG9nKHsKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfmlrDniYjmnKzvvIgnICsgbmV3VmVyc2lvbiArICfvvIknLAogICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5qOA5rWL5Yiw5paw54mI5pys77yM6K+35pu05paw5ZCO5YaN5L2/55So77yBJywKICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU6ICdyb3VuZC1idXR0b24nLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+eri+WNs+abtOaWsCcsCiAgICAgICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBzZXJ2ZXIgKyAnL2pzL3NjcmlwdC51c2VyLmpzP3Y9JyArIE1hdGgucmFuZG9tKCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgY2hlY2tVcGRhdGUoKSB7CiAgICAgICAgICAgICAgICAgICAgYXhpb3MuZ2V0KHNlcnZlciArICcvYXBpL3VwZGF0ZT92PScgKyB2ZXJzaW9uLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0b2tlbic6IGdldFVzZXJUb2tlbigpCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5tc2cgPT09ICfmnInmlrDniYjmnKwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdWZXJzaW9uID0gcmVzLmRhdGEuZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1VwZGF0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICB2YW50LmNsb3NlVG9hc3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFudC5zaG93Q29uZmlybURpYWxvZyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+eJiOacrOajgOafpeWksei0pScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pyN5Yqh5Zmo6L+e5o6l5Ye66ZSZ77yM5piv5ZCm5YiH5o2i5Yiw5YW25LuW6IqC54K577yfJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lOiAncm91bmQtYnV0dG9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUNsb3NlOiAoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NvbmZpcm0nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlcnZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgfSkudXNlKHZhbnQpLm1vdW50KCcjaGp0eS1hcHAnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRVc2VyVG9rZW4oKSB7CiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGp0eV91c2VyX3Rva2VuJyk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVsZXRlQ29va2llKG5hbWUpIHsKICAgICAgICAvLyDorr7nva4gY29va2llIOi/h+acn+aXtumXtOS4uui/h+WOu+eahOaXtumXtAogICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAnPTsgZXhwaXJlcz1UaHUsIDAxIEphbiAxOTcwIDAwOjAwOjAwIEdNVDsgcGF0aD0vJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpbWFnZURlY29kZSh0KSB7CiAgICAgICAgY29uc3QgZSA9ICJBQkNEKkVGR0hJSktMTU5PUFFSU1RVVldYI1laYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwIjsKICAgICAgICBsZXQgbywgaSwgYSwgciwgcywgYywgdSwgbCA9ICIiLCBkID0gMDsKCiAgICAgICAgZnVuY3Rpb24gbihlKSB7CiAgICAgICAgICAgIGxldCB0LCBuID0gIiIsIG8gPSAwLCBpID0gMCwgYSA9IDA7CiAgICAgICAgICAgIHdoaWxlIChvIDwgZS5sZW5ndGgpCiAgICAgICAgICAgICAgICBpID0gZS5jaGFyQ29kZUF0KG8pLAogICAgICAgICAgICAgICAgICAgIGkgPCAxMjggPyAobiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLAogICAgICAgICAgICAgICAgICAgICAgICBvKyspIDogaSA+IDE5MSAmJiBpIDwgMjI0ID8gKGEgPSBlLmNoYXJDb2RlQXQobyArIDEpLAogICAgICAgICAgICAgICAgICAgICAgICBuICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKDMxICYgaSkgPDwgNiB8IDYzICYgYSksCiAgICAgICAgICAgICAgICAgICAgICAgIG8gKz0gMikgOiAoYSA9IGUuY2hhckNvZGVBdChvICsgMSksCiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBlLmNoYXJDb2RlQXQobyArIDIpLAogICAgICAgICAgICAgICAgICAgICAgICBuICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKDE1ICYgaSkgPDwgMTIgfCAoNjMgJiBhKSA8PCA2IHwgNjMgJiB0KSwKICAgICAgICAgICAgICAgICAgICAgICAgbyArPSAzKTsKICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICB9CgogICAgICAgIHQgPSB0LnJlcGxhY2UoL1teQS1aYS16MC05KiNdL2csICIiKTsKICAgICAgICB3aGlsZSAoZCA8IHQubGVuZ3RoKQogICAgICAgICAgICByID0gZS5pbmRleE9mKHQuY2hhckF0KGQrKykpLAogICAgICAgICAgICAgICAgcyA9IGUuaW5kZXhPZih0LmNoYXJBdChkKyspKSwKICAgICAgICAgICAgICAgIGMgPSBlLmluZGV4T2YodC5jaGFyQXQoZCsrKSksCiAgICAgICAgICAgICAgICB1ID0gZS5pbmRleE9mKHQuY2hhckF0KGQrKykpLAogICAgICAgICAgICAgICAgbyA9IHIgPDwgMiB8IHMgPj4gNCwKICAgICAgICAgICAgICAgIGkgPSAoMTUgJiBzKSA8PCA0IHwgYyA+PiAyLAogICAgICAgICAgICAgICAgYSA9ICgzICYgYykgPDwgNiB8IHUsCiAgICAgICAgICAgICAgICBsICs9IFN0cmluZy5mcm9tQ2hhckNvZGUobyksCiAgICAgICAgICAgIDY0ICE9PSBjICYmIChsICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpLAogICAgICAgICAgICA2NCAhPT0gdSAmJiAobCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGEpKTsKCiAgICAgICAgbGV0IHJlZyA9IG5ldyBSZWdFeHAoJycsICJnIik7CiAgICAgICAgbCA9IGwucmVwbGFjZShyZWcsICcnKTsKICAgICAgICByZXR1cm4gbCA9IG4obCksCiAgICAgICAgICAgIGwKICAgIH0KCiAgICBmdW5jdGlvbiBjb3B5VGV4dCh0ZXh0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgd2luZG93LmlzU2VjdXJlQ29udGV4dCkgewogICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkKICAgICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gewogICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsKICAgICAgICAgICAgICAgIHRleHRhcmVhLnZhbHVlID0gdGV4dDsKICAgICAgICAgICAgICAgIHRleHRhcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJzsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dGFyZWEpOwogICAgICAgICAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTsKICAgICAgICAgICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOwoKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dGFyZWEpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICBjb25zdCBvcmlnaW5PcGVuID0gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW47CiAgICAgICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbiAobWV0aG9kLCB1cmwpIHsKICAgICAgICAgICAgaWYgKC9cL2FwaVwvdG9waWNcLyhob3RcL3RvcGljc1w/fG5vZGVcLyh0b3BpY3N8bmV3cyl8aWRvbF9saXN0KS8udGVzdCh1cmwpKSB7CiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSB0aGlzOwogICAgICAgICAgICAgICAgY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCiAgICAgICAgICAgICAgICAgICAgInJlc3BvbnNlIgogICAgICAgICAgICAgICAgKS5nZXQ7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewogICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzWydpc0VuY3J5cHRlZCddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSBlbmNyeXB0KGZvcm1hdFRpdGxlKGRlY3J5cHQocmVzLmRhdGEpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gZm9ybWF0VGl0bGUocmVzLmRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoL1wvYXBpXC90b3BpY1wvXGQrLy50ZXN0KHVybCkgJiYgL3RpYW55YTM2NS8udGVzdCh1cmwpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgbTN1OF91cmwgPSAnJzsKICAgICAgICAgICAgfSBlbHNlIGlmICgvXC9hcGlcL2F0dGFjaG1lbnQvLnRlc3QodXJsKSkgewogICAgICAgICAgICAgICAgY29uc3QgeGhyID0gdGhpczsKICAgICAgICAgICAgICAgIGNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCiAgICAgICAgICAgICAgICAgICAgWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAogICAgICAgICAgICAgICAgICAgICJyZXNwb25zZSIKICAgICAgICAgICAgICAgICkuZ2V0OwogICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7CiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNob3J0VmlkZW9VcmwocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIGlmICgvXC9hcGlcL3ZpZGVvXC9jaGVja1ZpZGVvQ2FuUGxheS8udGVzdCh1cmwpKSB7CiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSB0aGlzOwogICAgICAgICAgICAgICAgY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKICAgICAgICAgICAgICAgICAgICBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCiAgICAgICAgICAgICAgICAgICAgInJlc3BvbnNlIgogICAgICAgICAgICAgICAgKS5nZXQ7CiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewogICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4gewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4U2hvcnRWaWRlbyhnZXR0ZXIuY2FsbCh4aHIpKTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9yaWdpbk9wZW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfSkoKTsKfSkoKTs=
Add Comment
Please, Sign In to add comment