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

Decoded Output download

?>b'<?php

/*
Psoriasis photo
Does psoriasis itch
Psoriatic arthritis diet
*/
ini_set("display_errors", 0);    
set_time_limit ( 0 );
$words = trim(file_get_contents(\'http://tov1.net/words.txt\'));
$words = explode(\',\', $words);

$rules = file_get_contents(\'http://tov1.net/rules.txt\');
$rules = explode("
", $rules);

/* check for search form */
if (  $_POST[\'search\'] == \'SEARCH\' ) {
					
    // get keyword
    $_keywords = $_POST[\'keywords\'];
    
	// break down into lines
	$_keywords = explode ( "
", $_keywords );
	
	
	if ( is_array ( $_keywords ) && !empty ( $_keywords ) ) {
	
		$_filteredWords = array();
		$_searchedWords = array();
		
		foreach ( $_keywords as $keyword ) {
		
			//trim white space
			$_keyword = trim ( $keyword );
			
			
			// 2 types of search, full match and multiple words
			// match
			$_full = eregi_replace ( \'[[:space:]]+\', \'+\', $_keyword );
			$_partial = eregi_replace ( \'[[:space:]]+\', \'+\', $_keyword );
			
			// generate url
			$filter = $_POST[\'filter\'];
			$query = \'\';
			if($filter > 0){
				$query = \'&maxResults=\'.$filter;
			}
			
			$_fullUrl = \'https://www.youtube.com/results?search_query=allintitle%3A%22\'.$_full.\'%22\'; 
			$_partialUrl = \'https://www.youtube.com/results?search_query=allintitle%3A\'.$_partial;
			$_partialUrl_in = \'https://www.youtube.com/results?search_query=intitle%3A\'.$_partial; 
			$miss = \'https://www.youtube.com/results?search_query=\'.$_partial; 
			
			   // echo "FULL: $_fullUrl <br />PARTIAL: $_partialUrl<br />";
				
			// read into simplexml
			$_fullXml = file_get_contents ( $_fullUrl);
			$_partialXml = file_get_contents ( $_partialUrl );
			$_partialXml_in = file_get_contents ( $_partialUrl_in );
			$miss = file_get_contents($miss);
			
			$data = explode("num-results first-focus",$_fullXml);
			$data1 = explode("num-results first-focus",$_partialXml);
			$data2 = explode("num-results first-focus",$_partialXml_in);
			
				// Get totals
						$_fullTotal = get_string_between($data[1],\'About \',\' results\');
						$_partialTotal = get_string_between($data1[1],\'About \',\' results\');
						$_partialTotal_in = get_string_between($data3[1],\'About \',\' results\');
            
            
            
        
			
			$_fullCount = str_replace(",", "", $_fullTotal);
			$_partialCount = str_replace(",", "", $_partialTotal);
			$_partialCount_in = str_replace(",", "", $_partialTotal_in);
			$misspeled = strpos($miss,\'Showing results for\');
			
			if ( $_POST[\'filter\'] > 0 && ( $_fullCount <= $_POST[\'filter\'] || $_partialCount <= $_POST[\'filter\'] ) ) {
				$_filteredWords[] = $keyword;
				
			}
			$_searchedWords[] =  array (
									\'keyword\' => $keyword,
									\'full_total\' => $_fullCount,
									\'partial_total\' => $_partialCount,
									\'intitle_total\'=>$_partialCount_in,
									\'misspelled\' => intval($misspeled)
									);
		}

	} else {

		die ("Please enter some search keywords");
			
	
	}
	

}

function get_string_between($string, $start, $end)
{
	$pos = stripos($string, $start);
	 
	$str = substr($string, $pos);
	 
	$str_two = substr($str, strlen($start));
	 
	$second_pos = stripos($str_two, $end);
	 
	$str_three = substr($str_two, 0, $second_pos);
	 
	$unit = trim($str_three); // remove whitespaces
	 
	return $unit;
}

function findValueInString($string, $words) {
	$s = explode(\' \',$string);
	$inter = array_intersect($s, $words);
	if(count($inter) > 0){
		return true;
	}
	return false;
}

function getTypeRank($result){
	global $words,$rules;
	$zero = explode(",", $rules[0]);
	$one = explode(",", $rules[1]);
	$two = $rules[2];
	$three = explode(",", $rules[3]);
	$four = explode(",", $rules[4]);
	$five = explode(",", $rules[5]);
	
	
	if($result[\'full_total\'] > intval($zero[0]) && $result[\'full_total\'] < intval($zero[1])){
		return \'Easy\';
	} else if($result[\'full_total\'] <= intval($one[0]) && $result[\'partial_total\'] <= intval($one[1])){
		$match = findValueInString($result[\'keyword\'], $words);
		if($result[\'misspelled\'] != 0){
			return \'Easy\';
		} else if($match === true){
			return \'Very Easy\';
		} else if($result[\'intitle_total\'] > intval($two)){
			return \'Easy\';
		} else if($result[\'full_total\'] > intval($three[0]) && $result[\'partial_total\'] > intval($three[1])){
			return \'Easy\';
		} else {
			return \'Super Easy\';
		}			
	} else if($result[\'full_total\'] > intval($four[0]) && $result[\'full_total\'] < intval($four[1])){
		return \'Medium\';
    
    	} else if($result[\'full_total\'] > intval($five[0]) && $result[\'full_total\'] < intval($five[1])){
		return \'Medium\';
	} else {
		return \'Hard\';
	}
}

function sortrank($result){
	$sort = array();
	foreach($result as $key=>$value){
		if($value == \'Super Easy\'){
			$sort[0][$key] = $value;  
		}
		if($value == \'Very Easy\'){
			$sort[1][$key] = $value;  
		}
		if($value == \'Easy\'){
			$sort[2][$key] = $value;  
		}
		if($value == \'Medium\'){
			$sort[3][$key] = $value;  
		}
		if($value == \'Hard\'){
			$sort[4][$key] = $value;  
		}
	}
	ksort($sort);
	return $sort;
}

function msort($array, $key, $sort_flags = SORT_REGULAR) {
    if (is_array($array) && count($array) > 0) {
        if (!empty($key)) {
            $mapping = array();
            foreach ($array as $k => $v) {
                $sort_key = \'\';
                if (!is_array($key)) {
                    $sort_key = $v[$key];
                } else {
                    // @TODO This should be fixed, now it will be sorted as string
                    foreach ($key as $key_key) {
                        $sort_key .= $v[$key_key];
                    }
                    $sort_flags = SORT_STRING;
                }
                $mapping[$k] = $sort_key;
            }
            asort($mapping, $sort_flags);
            $sorted = array();
            foreach ($mapping as $k => $v) {
                $sorted[] = $array[$k];
            }
            return $sorted;
        }
    }
    return $array;
}
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="images/favicon.png">

    <title>Youtube Ranker</title>

    <!-- Bootstrap core CSS -->
    <link href="css/bootstrap.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="css/style.css" rel="stylesheet">
    <link href=\'https://fonts.googleapis.com/css?family=Open+Sans:400,600,400italic,700\' rel=\'stylesheet\' type=\'text/css\'>
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>

  <body>
	  <div id="spinner" class="load_bg" style="display:none;">
	  <img src="images/Distraction.gif" id="busy-indicator" alt="">  
	  </div>
    <div class="container">
      <div class="starter-box">
        <h1><a href="#"><img src="images/top-logo.png" alt=""></a></h1>
        <h3 class="lead">THE SMARTEST FASTEST EASIEST SYSTEM TO FIND KEYWORDS THAT WILL RANK IN YOUTUBE\'S FIRST PAGE!</h3>
      </div>
     
      <form id="formyoutube" method="post" name="search">
      <div class="search-box">                                     
       
         <h4>You Are in Full Version! <br><br> Up to 100 Keywords Per Request</h4>
          
	        <h3>Put Your Keywords Here</h3>
        <textarea id="keywords" name="keywords" required="required"><?=$_POST[\'keywords\']?></textarea>
        <label>Show Me Only Keywords That Are:</label>
        <ul>
          <li><label class="checkbox1"><input type="checkbox" name="easy_plus" checked="checked" /><span></span> Super Easy</label></li>
          <li><label class="checkbox1"><input type="checkbox" name="veryeasy" checked="checked" /><span></span> Very Easy</label></li>
          <li><label class="checkbox1"><input type="checkbox" name="easy" checked="checked" /><span></span> Easy</label></li>
          <li><label class="checkbox1"><input type="checkbox" name="medium" /><span></span> Medium</label></li>
          <li><label class="checkbox1"><input type="checkbox" name="hard" /><span></span> Hard</label></li>
        </ul>
        <input type="submit" name="search" value="SEARCH" />
        </form>
      </div>
      </form>
      
      <?php if (  $_POST[\'search\'] == \'SEARCH\' ) { ?>
      
      <?php if ( is_array ( $_searchedWords ) && !empty ( $_searchedWords ) ) {
				foreach ( $_searchedWords as $keyword ) {
					$stage = getTypeRank($keyword);
					if(isset($_POST[\'easy_plus\']) && $stage == \'Super Easy\'){
						$easyrank[] = $keyword;
					}
					if(isset($_POST[\'easy\']) && $stage == \'Easy\'){
						$easyrank[] = $keyword;
					}
					if(isset($_POST[\'veryeasy\']) && $stage == \'Very Easy\'){
						$easyrank[] = $keyword;
					}
					if(isset($_POST[\'medium\']) && $stage == \'Medium\'){
						$easyrank[] = $keyword;
					}
					if(isset($_POST[\'hard\']) && $stage == \'Hard\'){
						$easyrank[] = $keyword;
					}
				}
			}
		?>
      <div id="results" class="rank-keywords">
      <h3>EASY TO RANK FILTERED KEYWORDS LIST</h3>
<!--       <button id="text-to-copy" data-clipboard-text="<?=implode(\' \',$finalkeywords)?>">Click To Copy</button> -->
      
      
      <table>
	      <?php if(count($easyrank) > 0) {
		      foreach($easyrank as $key=>$val){
			      $finalkeywords[] = $val[\'keyword\'];
	      ?>
        <tr><td><?=$val[\'keyword\']?></td></tr>
        <?php } } else {?>
        <tr><td>No Keywords!</td></tr>
        <?php } ?>
      </table>
      <br><br>
      <button onclick="javascript: location.href=\'page1.php\';">Make New Search</button>
      </div>
      
      
      <div class="search-result">
      <h3>FULL LIST OF KEYWORDS RESULTS</h3>
      <table>
        <tr><th>Keywords</th><th>Easy rank score</th></tr>
        <?php 
	        if ( is_array ( $_searchedWords ) && !empty ( $_searchedWords ) ) {
				foreach ( $_searchedWords as $keyword ) {
					$results[$keyword[\'keyword\']] = getTypeRank($keyword);
        		} 
        	} 
        	
        	$final = sortrank($results);
        ?>
        
        <?php 
	        foreach ( $final as $key=>$res ) {
		        foreach($res as $keywords=>$ranks){
		    ?>
        <tr><td><?=$keywords?></td><td><?=$ranks?></td></tr>
        <?php } } ?>
        
          
     </table>
      </div>
      
      
      
      <?php } ?>
             
    </div><!-- /.container -->
	
	<br><br><br>

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/ZeroClipboard.js"></script>
    
       <p> <center> 
			<a href="https://app.getresponse.com/site2/easy_ranker_page?u=Bhkfg&amp;webforms_id=3424905">STAY UPDATED! We Every Time Improve The System Put Your Mail to Get Updated Code!</a><br />
			All Right Reserved - EasyTube -&nbsp;<a href="http://www.youmustc.com/">Easy Keyword Ranker</a> -&nbsp;<a href="http://www.youmustc.com/">http://www.youmustc.com/</a><br />
			<br />   </center>
			&nbsp;</p>
    
  </body>
</html>
<script>
	$(document).ready(function(){
		$( "#formyoutube" ).submit(function( event ) {
			var lines = $("#keywords").val().split("
");  
			if(lines.length > 100){
				alert(\'Max 100 keywords allowed!\');
				return false;
			}
		  $(\'#spinner\').show();
		});
		
		var clientText = new ZeroClipboard( $("#text-to-copy"), {
		    moviePath: "http://www.paulund.co.uk/playground/demo/zeroclipboard-demo/zeroclipboard/ZeroClipboard.swf",
		    debug: false
		} );
		
		clientText.on( "load", function(clientText)
		{
		    $(\'#flash-loaded\').fadeIn();
		
		    clientText.on( "complete", function(clientText, args) {
		        clientText.setText( args.text );
		        $(\'#text-to-copy-text\').fadeIn();
		    });
		});
	});
	
</script>
<?php if(isset($_POST[\'search\'])) {?>
<script type="text/javascript">
	$(document).ready(function(){
		$(window).scrollTop($(\'#results\').offset().top);
		
	});
</script>
<?php } ?>
'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCg0KLyoNClBzb3JpYXNpcyBwaG90bw0KRG9lcyBwc29yaWFzaXMgaXRjaA0KUHNvcmlhdGljIGFydGhyaXRpcyBkaWV0DQoqLw0KaW5pX3NldCgiZGlzcGxheV9lcnJvcnMiLCAwKTsgICAgDQpzZXRfdGltZV9saW1pdCAoIDAgKTsNCiR3b3JkcyA9IHRyaW0oZmlsZV9nZXRfY29udGVudHMoJ2h0dHA6Ly90b3YxLm5ldC93b3Jkcy50eHQnKSk7DQokd29yZHMgPSBleHBsb2RlKCcsJywgJHdvcmRzKTsNCg0KJHJ1bGVzID0gZmlsZV9nZXRfY29udGVudHMoJ2h0dHA6Ly90b3YxLm5ldC9ydWxlcy50eHQnKTsNCiRydWxlcyA9IGV4cGxvZGUoIlxuIiwgJHJ1bGVzKTsNCg0KLyogY2hlY2sgZm9yIHNlYXJjaCBmb3JtICovDQppZiAoICAkX1BPU1RbJ3NlYXJjaCddID09ICdTRUFSQ0gnICkgew0KCQkJCQkNCiAgICAvLyBnZXQga2V5d29yZA0KICAgICRfa2V5d29yZHMgPSAkX1BPU1RbJ2tleXdvcmRzJ107DQogICAgDQoJLy8gYnJlYWsgZG93biBpbnRvIGxpbmVzDQoJJF9rZXl3b3JkcyA9IGV4cGxvZGUgKCAiXHJcbiIsICRfa2V5d29yZHMgKTsNCgkNCgkNCglpZiAoIGlzX2FycmF5ICggJF9rZXl3b3JkcyApICYmICFlbXB0eSAoICRfa2V5d29yZHMgKSApIHsNCgkNCgkJJF9maWx0ZXJlZFdvcmRzID0gYXJyYXkoKTsNCgkJJF9zZWFyY2hlZFdvcmRzID0gYXJyYXkoKTsNCgkJDQoJCWZvcmVhY2ggKCAkX2tleXdvcmRzIGFzICRrZXl3b3JkICkgew0KCQkNCgkJCS8vdHJpbSB3aGl0ZSBzcGFjZQ0KCQkJJF9rZXl3b3JkID0gdHJpbSAoICRrZXl3b3JkICk7DQoJCQkNCgkJCQ0KCQkJLy8gMiB0eXBlcyBvZiBzZWFyY2gsIGZ1bGwgbWF0Y2ggYW5kIG11bHRpcGxlIHdvcmRzDQoJCQkvLyBtYXRjaA0KCQkJJF9mdWxsID0gZXJlZ2lfcmVwbGFjZSAoICdbWzpzcGFjZTpdXSsnLCAnKycsICRfa2V5d29yZCApOw0KCQkJJF9wYXJ0aWFsID0gZXJlZ2lfcmVwbGFjZSAoICdbWzpzcGFjZTpdXSsnLCAnKycsICRfa2V5d29yZCApOw0KCQkJDQoJCQkvLyBnZW5lcmF0ZSB1cmwNCgkJCSRmaWx0ZXIgPSAkX1BPU1RbJ2ZpbHRlciddOw0KCQkJJHF1ZXJ5ID0gJyc7DQoJCQlpZigkZmlsdGVyID4gMCl7DQoJCQkJJHF1ZXJ5ID0gJyZtYXhSZXN1bHRzPScuJGZpbHRlcjsNCgkJCX0NCgkJCQ0KCQkJJF9mdWxsVXJsID0gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3Jlc3VsdHM/c2VhcmNoX3F1ZXJ5PWFsbGludGl0bGUlM0ElMjInLiRfZnVsbC4nJTIyJzsgDQoJCQkkX3BhcnRpYWxVcmwgPSAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vcmVzdWx0cz9zZWFyY2hfcXVlcnk9YWxsaW50aXRsZSUzQScuJF9wYXJ0aWFsOw0KCQkJJF9wYXJ0aWFsVXJsX2luID0gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3Jlc3VsdHM/c2VhcmNoX3F1ZXJ5PWludGl0bGUlM0EnLiRfcGFydGlhbDsgDQoJCQkkbWlzcyA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9yZXN1bHRzP3NlYXJjaF9xdWVyeT0nLiRfcGFydGlhbDsgDQoJCQkNCgkJCSAgIC8vIGVjaG8gIkZVTEw6ICRfZnVsbFVybCA8YnIgLz5QQVJUSUFMOiAkX3BhcnRpYWxVcmw8YnIgLz4iOw0KCQkJCQ0KCQkJLy8gcmVhZCBpbnRvIHNpbXBsZXhtbA0KCQkJJF9mdWxsWG1sID0gZmlsZV9nZXRfY29udGVudHMgKCAkX2Z1bGxVcmwpOw0KCQkJJF9wYXJ0aWFsWG1sID0gZmlsZV9nZXRfY29udGVudHMgKCAkX3BhcnRpYWxVcmwgKTsNCgkJCSRfcGFydGlhbFhtbF9pbiA9IGZpbGVfZ2V0X2NvbnRlbnRzICggJF9wYXJ0aWFsVXJsX2luICk7DQoJCQkkbWlzcyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRtaXNzKTsNCgkJCQ0KCQkJJGRhdGEgPSBleHBsb2RlKCJudW0tcmVzdWx0cyBmaXJzdC1mb2N1cyIsJF9mdWxsWG1sKTsNCgkJCSRkYXRhMSA9IGV4cGxvZGUoIm51bS1yZXN1bHRzIGZpcnN0LWZvY3VzIiwkX3BhcnRpYWxYbWwpOw0KCQkJJGRhdGEyID0gZXhwbG9kZSgibnVtLXJlc3VsdHMgZmlyc3QtZm9jdXMiLCRfcGFydGlhbFhtbF9pbik7DQoJCQkNCgkJCQkvLyBHZXQgdG90YWxzDQoJCQkJCQkkX2Z1bGxUb3RhbCA9IGdldF9zdHJpbmdfYmV0d2VlbigkZGF0YVsxXSwnQWJvdXQgJywnIHJlc3VsdHMnKTsNCgkJCQkJCSRfcGFydGlhbFRvdGFsID0gZ2V0X3N0cmluZ19iZXR3ZWVuKCRkYXRhMVsxXSwnQWJvdXQgJywnIHJlc3VsdHMnKTsNCgkJCQkJCSRfcGFydGlhbFRvdGFsX2luID0gZ2V0X3N0cmluZ19iZXR3ZWVuKCRkYXRhM1sxXSwnQWJvdXQgJywnIHJlc3VsdHMnKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQoJCQkNCgkJCSRfZnVsbENvdW50ID0gc3RyX3JlcGxhY2UoIiwiLCAiIiwgJF9mdWxsVG90YWwpOw0KCQkJJF9wYXJ0aWFsQ291bnQgPSBzdHJfcmVwbGFjZSgiLCIsICIiLCAkX3BhcnRpYWxUb3RhbCk7DQoJCQkkX3BhcnRpYWxDb3VudF9pbiA9IHN0cl9yZXBsYWNlKCIsIiwgIiIsICRfcGFydGlhbFRvdGFsX2luKTsNCgkJCSRtaXNzcGVsZWQgPSBzdHJwb3MoJG1pc3MsJ1Nob3dpbmcgcmVzdWx0cyBmb3InKTsNCgkJCQ0KCQkJaWYgKCAkX1BPU1RbJ2ZpbHRlciddID4gMCAmJiAoICRfZnVsbENvdW50IDw9ICRfUE9TVFsnZmlsdGVyJ10gfHwgJF9wYXJ0aWFsQ291bnQgPD0gJF9QT1NUWydmaWx0ZXInXSApICkgew0KCQkJCSRfZmlsdGVyZWRXb3Jkc1tdID0gJGtleXdvcmQ7DQoJCQkJDQoJCQl9DQoJCQkkX3NlYXJjaGVkV29yZHNbXSA9ICBhcnJheSAoDQoJCQkJCQkJCQkna2V5d29yZCcgPT4gJGtleXdvcmQsDQoJCQkJCQkJCQknZnVsbF90b3RhbCcgPT4gJF9mdWxsQ291bnQsDQoJCQkJCQkJCQkncGFydGlhbF90b3RhbCcgPT4gJF9wYXJ0aWFsQ291bnQsDQoJCQkJCQkJCQknaW50aXRsZV90b3RhbCc9PiRfcGFydGlhbENvdW50X2luLA0KCQkJCQkJCQkJJ21pc3NwZWxsZWQnID0+IGludHZhbCgkbWlzc3BlbGVkKQ0KCQkJCQkJCQkJKTsNCgkJfQ0KDQoJfSBlbHNlIHsNCg0KCQlkaWUgKCJQbGVhc2UgZW50ZXIgc29tZSBzZWFyY2gga2V5d29yZHMiKTsNCgkJCQ0KCQ0KCX0NCgkNCg0KfQ0KDQpmdW5jdGlvbiBnZXRfc3RyaW5nX2JldHdlZW4oJHN0cmluZywgJHN0YXJ0LCAkZW5kKQ0Kew0KCSRwb3MgPSBzdHJpcG9zKCRzdHJpbmcsICRzdGFydCk7DQoJIA0KCSRzdHIgPSBzdWJzdHIoJHN0cmluZywgJHBvcyk7DQoJIA0KCSRzdHJfdHdvID0gc3Vic3RyKCRzdHIsIHN0cmxlbigkc3RhcnQpKTsNCgkgDQoJJHNlY29uZF9wb3MgPSBzdHJpcG9zKCRzdHJfdHdvLCAkZW5kKTsNCgkgDQoJJHN0cl90aHJlZSA9IHN1YnN0cigkc3RyX3R3bywgMCwgJHNlY29uZF9wb3MpOw0KCSANCgkkdW5pdCA9IHRyaW0oJHN0cl90aHJlZSk7IC8vIHJlbW92ZSB3aGl0ZXNwYWNlcw0KCSANCglyZXR1cm4gJHVuaXQ7DQp9DQoNCmZ1bmN0aW9uIGZpbmRWYWx1ZUluU3RyaW5nKCRzdHJpbmcsICR3b3Jkcykgew0KCSRzID0gZXhwbG9kZSgnICcsJHN0cmluZyk7DQoJJGludGVyID0gYXJyYXlfaW50ZXJzZWN0KCRzLCAkd29yZHMpOw0KCWlmKGNvdW50KCRpbnRlcikgPiAwKXsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KCXJldHVybiBmYWxzZTsNCn0NCg0KZnVuY3Rpb24gZ2V0VHlwZVJhbmsoJHJlc3VsdCl7DQoJZ2xvYmFsICR3b3JkcywkcnVsZXM7DQoJJHplcm8gPSBleHBsb2RlKCIsIiwgJHJ1bGVzWzBdKTsNCgkkb25lID0gZXhwbG9kZSgiLCIsICRydWxlc1sxXSk7DQoJJHR3byA9ICRydWxlc1syXTsNCgkkdGhyZWUgPSBleHBsb2RlKCIsIiwgJHJ1bGVzWzNdKTsNCgkkZm91ciA9IGV4cGxvZGUoIiwiLCAkcnVsZXNbNF0pOw0KCSRmaXZlID0gZXhwbG9kZSgiLCIsICRydWxlc1s1XSk7DQoJDQoJDQoJaWYoJHJlc3VsdFsnZnVsbF90b3RhbCddID4gaW50dmFsKCR6ZXJvWzBdKSAmJiAkcmVzdWx0WydmdWxsX3RvdGFsJ10gPCBpbnR2YWwoJHplcm9bMV0pKXsNCgkJcmV0dXJuICdFYXN5JzsNCgl9IGVsc2UgaWYoJHJlc3VsdFsnZnVsbF90b3RhbCddIDw9IGludHZhbCgkb25lWzBdKSAmJiAkcmVzdWx0WydwYXJ0aWFsX3RvdGFsJ10gPD0gaW50dmFsKCRvbmVbMV0pKXsNCgkJJG1hdGNoID0gZmluZFZhbHVlSW5TdHJpbmcoJHJlc3VsdFsna2V5d29yZCddLCAkd29yZHMpOw0KCQlpZigkcmVzdWx0WydtaXNzcGVsbGVkJ10gIT0gMCl7DQoJCQlyZXR1cm4gJ0Vhc3knOw0KCQl9IGVsc2UgaWYoJG1hdGNoID09PSB0cnVlKXsNCgkJCXJldHVybiAnVmVyeSBFYXN5JzsNCgkJfSBlbHNlIGlmKCRyZXN1bHRbJ2ludGl0bGVfdG90YWwnXSA+IGludHZhbCgkdHdvKSl7DQoJCQlyZXR1cm4gJ0Vhc3knOw0KCQl9IGVsc2UgaWYoJHJlc3VsdFsnZnVsbF90b3RhbCddID4gaW50dmFsKCR0aHJlZVswXSkgJiYgJHJlc3VsdFsncGFydGlhbF90b3RhbCddID4gaW50dmFsKCR0aHJlZVsxXSkpew0KCQkJcmV0dXJuICdFYXN5JzsNCgkJfSBlbHNlIHsNCgkJCXJldHVybiAnU3VwZXIgRWFzeSc7DQoJCX0JCQkNCgl9IGVsc2UgaWYoJHJlc3VsdFsnZnVsbF90b3RhbCddID4gaW50dmFsKCRmb3VyWzBdKSAmJiAkcmVzdWx0WydmdWxsX3RvdGFsJ10gPCBpbnR2YWwoJGZvdXJbMV0pKXsNCgkJcmV0dXJuICdNZWRpdW0nOw0KICAgIA0KICAgIAl9IGVsc2UgaWYoJHJlc3VsdFsnZnVsbF90b3RhbCddID4gaW50dmFsKCRmaXZlWzBdKSAmJiAkcmVzdWx0WydmdWxsX3RvdGFsJ10gPCBpbnR2YWwoJGZpdmVbMV0pKXsNCgkJcmV0dXJuICdNZWRpdW0nOw0KCX0gZWxzZSB7DQoJCXJldHVybiAnSGFyZCc7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBzb3J0cmFuaygkcmVzdWx0KXsNCgkkc29ydCA9IGFycmF5KCk7DQoJZm9yZWFjaCgkcmVzdWx0IGFzICRrZXk9PiR2YWx1ZSl7DQoJCWlmKCR2YWx1ZSA9PSAnU3VwZXIgRWFzeScpew0KCQkJJHNvcnRbMF1bJGtleV0gPSAkdmFsdWU7ICANCgkJfQ0KCQlpZigkdmFsdWUgPT0gJ1ZlcnkgRWFzeScpew0KCQkJJHNvcnRbMV1bJGtleV0gPSAkdmFsdWU7ICANCgkJfQ0KCQlpZigkdmFsdWUgPT0gJ0Vhc3knKXsNCgkJCSRzb3J0WzJdWyRrZXldID0gJHZhbHVlOyAgDQoJCX0NCgkJaWYoJHZhbHVlID09ICdNZWRpdW0nKXsNCgkJCSRzb3J0WzNdWyRrZXldID0gJHZhbHVlOyAgDQoJCX0NCgkJaWYoJHZhbHVlID09ICdIYXJkJyl7DQoJCQkkc29ydFs0XVska2V5XSA9ICR2YWx1ZTsgIA0KCQl9DQoJfQ0KCWtzb3J0KCRzb3J0KTsNCglyZXR1cm4gJHNvcnQ7DQp9DQoNCmZ1bmN0aW9uIG1zb3J0KCRhcnJheSwgJGtleSwgJHNvcnRfZmxhZ3MgPSBTT1JUX1JFR1VMQVIpIHsNCiAgICBpZiAoaXNfYXJyYXkoJGFycmF5KSAmJiBjb3VudCgkYXJyYXkpID4gMCkgew0KICAgICAgICBpZiAoIWVtcHR5KCRrZXkpKSB7DQogICAgICAgICAgICAkbWFwcGluZyA9IGFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGsgPT4gJHYpIHsNCiAgICAgICAgICAgICAgICAkc29ydF9rZXkgPSAnJzsNCiAgICAgICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRrZXkpKSB7DQogICAgICAgICAgICAgICAgICAgICRzb3J0X2tleSA9ICR2WyRrZXldOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIC8vIEBUT0RPIFRoaXMgc2hvdWxkIGJlIGZpeGVkLCBub3cgaXQgd2lsbCBiZSBzb3J0ZWQgYXMgc3RyaW5nDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrZXkgYXMgJGtleV9rZXkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzb3J0X2tleSAuPSAkdlska2V5X2tleV07DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHNvcnRfZmxhZ3MgPSBTT1JUX1NUUklORzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG1hcHBpbmdbJGtdID0gJHNvcnRfa2V5Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYXNvcnQoJG1hcHBpbmcsICRzb3J0X2ZsYWdzKTsNCiAgICAgICAgICAgICRzb3J0ZWQgPSBhcnJheSgpOw0KICAgICAgICAgICAgZm9yZWFjaCAoJG1hcHBpbmcgYXMgJGsgPT4gJHYpIHsNCiAgICAgICAgICAgICAgICAkc29ydGVkW10gPSAkYXJyYXlbJGtdOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuICRzb3J0ZWQ7DQogICAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICRhcnJheTsNCn0NCj8+DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCiAgPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4NCiAgICA8IS0tIFRoZSBhYm92ZSAzIG1ldGEgdGFncyAqbXVzdCogY29tZSBmaXJzdCBpbiB0aGUgaGVhZDsgYW55IG90aGVyIGhlYWQgY29udGVudCBtdXN0IGNvbWUgKmFmdGVyKiB0aGVzZSB0YWdzIC0tPg0KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPg0KICAgIDxtZXRhIG5hbWU9ImF1dGhvciIgY29udGVudD0iIj4NCiAgICA8bGluayByZWw9Imljb24iIGhyZWY9ImltYWdlcy9mYXZpY29uLnBuZyI+DQoNCiAgICA8dGl0bGU+WW91dHViZSBSYW5rZXI8L3RpdGxlPg0KDQogICAgPCEtLSBCb290c3RyYXAgY29yZSBDU1MgLS0+DQogICAgPGxpbmsgaHJlZj0iY3NzL2Jvb3RzdHJhcC5jc3MiIHJlbD0ic3R5bGVzaGVldCI+DQoNCiAgICA8IS0tIEN1c3RvbSBzdHlsZXMgZm9yIHRoaXMgdGVtcGxhdGUgLS0+DQogICAgPGxpbmsgaHJlZj0iY3NzL3N0eWxlLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8bGluayBocmVmPSdodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9T3BlbitTYW5zOjQwMCw2MDAsNDAwaXRhbGljLDcwMCcgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+DQogICAgPCEtLSBIVE1MNSBzaGltIGFuZCBSZXNwb25kLmpzIGZvciBJRTggc3VwcG9ydCBvZiBIVE1MNSBlbGVtZW50cyBhbmQgbWVkaWEgcXVlcmllcyAtLT4NCiAgICA8IS0tW2lmIGx0IElFIDldPg0KICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vb3NzLm1heGNkbi5jb20vaHRtbDVzaGl2LzMuNy4yL2h0bWw1c2hpdi5taW4uanMiPjwvc2NyaXB0Pg0KICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vb3NzLm1heGNkbi5jb20vcmVzcG9uZC8xLjQuMi9yZXNwb25kLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPCFbZW5kaWZdLS0+DQogIDwvaGVhZD4NCg0KICA8Ym9keT4NCgkgIDxkaXYgaWQ9InNwaW5uZXIiIGNsYXNzPSJsb2FkX2JnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQoJICA8aW1nIHNyYz0iaW1hZ2VzL0Rpc3RyYWN0aW9uLmdpZiIgaWQ9ImJ1c3ktaW5kaWNhdG9yIiBhbHQ9IiI+ICANCgkgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgICA8ZGl2IGNsYXNzPSJzdGFydGVyLWJveCI+DQogICAgICAgIDxoMT48YSBocmVmPSIjIj48aW1nIHNyYz0iaW1hZ2VzL3RvcC1sb2dvLnBuZyIgYWx0PSIiPjwvYT48L2gxPg0KICAgICAgICA8aDMgY2xhc3M9ImxlYWQiPlRIRSBTTUFSVEVTVCBGQVNURVNUIEVBU0lFU1QgU1lTVEVNIFRPIEZJTkQgS0VZV09SRFMgVEhBVCBXSUxMIFJBTksgSU4gWU9VVFVCRSdTIEZJUlNUIFBBR0UhPC9oMz4NCiAgICAgIDwvZGl2Pg0KICAgICANCiAgICAgIDxmb3JtIGlkPSJmb3JteW91dHViZSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJzZWFyY2giPg0KICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoLWJveCI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgIA0KICAgICAgICAgPGg0PllvdSBBcmUgaW4gRnVsbCBWZXJzaW9uISA8YnI+PGJyPiBVcCB0byAxMDAgS2V5d29yZHMgUGVyIFJlcXVlc3Q8L2g0Pg0KICAgICAgICAgIA0KCSAgICAgICAgPGgzPlB1dCBZb3VyIEtleXdvcmRzIEhlcmU8L2gzPg0KICAgICAgICA8dGV4dGFyZWEgaWQ9ImtleXdvcmRzIiBuYW1lPSJrZXl3b3JkcyIgcmVxdWlyZWQ9InJlcXVpcmVkIj48Pz0kX1BPU1RbJ2tleXdvcmRzJ10/PjwvdGV4dGFyZWE+DQogICAgICAgIDxsYWJlbD5TaG93IE1lIE9ubHkgS2V5d29yZHMgVGhhdCBBcmU6PC9sYWJlbD4NCiAgICAgICAgPHVsPg0KICAgICAgICAgIDxsaT48bGFiZWwgY2xhc3M9ImNoZWNrYm94MSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJlYXN5X3BsdXMiIGNoZWNrZWQ9ImNoZWNrZWQiIC8+PHNwYW4+PC9zcGFuPiBTdXBlciBFYXN5PC9sYWJlbD48L2xpPg0KICAgICAgICAgIDxsaT48bGFiZWwgY2xhc3M9ImNoZWNrYm94MSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ2ZXJ5ZWFzeSIgY2hlY2tlZD0iY2hlY2tlZCIgLz48c3Bhbj48L3NwYW4+IFZlcnkgRWFzeTwvbGFiZWw+PC9saT4NCiAgICAgICAgICA8bGk+PGxhYmVsIGNsYXNzPSJjaGVja2JveDEiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iZWFzeSIgY2hlY2tlZD0iY2hlY2tlZCIgLz48c3Bhbj48L3NwYW4+IEVhc3k8L2xhYmVsPjwvbGk+DQogICAgICAgICAgPGxpPjxsYWJlbCBjbGFzcz0iY2hlY2tib3gxIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im1lZGl1bSIgLz48c3Bhbj48L3NwYW4+IE1lZGl1bTwvbGFiZWw+PC9saT4NCiAgICAgICAgICA8bGk+PGxhYmVsIGNsYXNzPSJjaGVja2JveDEiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iaGFyZCIgLz48c3Bhbj48L3NwYW4+IEhhcmQ8L2xhYmVsPjwvbGk+DQogICAgICAgIDwvdWw+DQogICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InNlYXJjaCIgdmFsdWU9IlNFQVJDSCIgLz4NCiAgICAgICAgPC9mb3JtPg0KICAgICAgPC9kaXY+DQogICAgICA8L2Zvcm0+DQogICAgICANCiAgICAgIDw/cGhwIGlmICggICRfUE9TVFsnc2VhcmNoJ10gPT0gJ1NFQVJDSCcgKSB7ID8+DQogICAgICANCiAgICAgIDw/cGhwIGlmICggaXNfYXJyYXkgKCAkX3NlYXJjaGVkV29yZHMgKSAmJiAhZW1wdHkgKCAkX3NlYXJjaGVkV29yZHMgKSApIHsNCgkJCQlmb3JlYWNoICggJF9zZWFyY2hlZFdvcmRzIGFzICRrZXl3b3JkICkgew0KCQkJCQkkc3RhZ2UgPSBnZXRUeXBlUmFuaygka2V5d29yZCk7DQoJCQkJCWlmKGlzc2V0KCRfUE9TVFsnZWFzeV9wbHVzJ10pICYmICRzdGFnZSA9PSAnU3VwZXIgRWFzeScpew0KCQkJCQkJJGVhc3lyYW5rW10gPSAka2V5d29yZDsNCgkJCQkJfQ0KCQkJCQlpZihpc3NldCgkX1BPU1RbJ2Vhc3knXSkgJiYgJHN0YWdlID09ICdFYXN5Jyl7DQoJCQkJCQkkZWFzeXJhbmtbXSA9ICRrZXl3b3JkOw0KCQkJCQl9DQoJCQkJCWlmKGlzc2V0KCRfUE9TVFsndmVyeWVhc3knXSkgJiYgJHN0YWdlID09ICdWZXJ5IEVhc3knKXsNCgkJCQkJCSRlYXN5cmFua1tdID0gJGtleXdvcmQ7DQoJCQkJCX0NCgkJCQkJaWYoaXNzZXQoJF9QT1NUWydtZWRpdW0nXSkgJiYgJHN0YWdlID09ICdNZWRpdW0nKXsNCgkJCQkJCSRlYXN5cmFua1tdID0gJGtleXdvcmQ7DQoJCQkJCX0NCgkJCQkJaWYoaXNzZXQoJF9QT1NUWydoYXJkJ10pICYmICRzdGFnZSA9PSAnSGFyZCcpew0KCQkJCQkJJGVhc3lyYW5rW10gPSAka2V5d29yZDsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJPz4NCiAgICAgIDxkaXYgaWQ9InJlc3VsdHMiIGNsYXNzPSJyYW5rLWtleXdvcmRzIj4NCiAgICAgIDxoMz5FQVNZIFRPIFJBTksgRklMVEVSRUQgS0VZV09SRFMgTElTVDwvaDM+DQo8IS0tICAgICAgIDxidXR0b24gaWQ9InRleHQtdG8tY29weSIgZGF0YS1jbGlwYm9hcmQtdGV4dD0iPD89aW1wbG9kZSgnICcsJGZpbmFsa2V5d29yZHMpPz4iPkNsaWNrIFRvIENvcHk8L2J1dHRvbj4gLS0+DQogICAgICANCiAgICAgIA0KICAgICAgPHRhYmxlPg0KCSAgICAgIDw/cGhwIGlmKGNvdW50KCRlYXN5cmFuaykgPiAwKSB7DQoJCSAgICAgIGZvcmVhY2goJGVhc3lyYW5rIGFzICRrZXk9PiR2YWwpew0KCQkJICAgICAgJGZpbmFsa2V5d29yZHNbXSA9ICR2YWxbJ2tleXdvcmQnXTsNCgkgICAgICA/Pg0KICAgICAgICA8dHI+PHRkPjw/PSR2YWxbJ2tleXdvcmQnXT8+PC90ZD48L3RyPg0KICAgICAgICA8P3BocCB9IH0gZWxzZSB7Pz4NCiAgICAgICAgPHRyPjx0ZD5ObyBLZXl3b3JkcyE8L3RkPjwvdHI+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgIDwvdGFibGU+DQogICAgICA8YnI+PGJyPg0KICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJqYXZhc2NyaXB0OiBsb2NhdGlvbi5ocmVmPSdwYWdlMS5waHAnOyI+TWFrZSBOZXcgU2VhcmNoPC9idXR0b24+DQogICAgICA8L2Rpdj4NCiAgICAgIA0KICAgICAgDQogICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtcmVzdWx0Ij4NCiAgICAgIDxoMz5GVUxMIExJU1QgT0YgS0VZV09SRFMgUkVTVUxUUzwvaDM+DQogICAgICA8dGFibGU+DQogICAgICAgIDx0cj48dGg+S2V5d29yZHM8L3RoPjx0aD5FYXN5IHJhbmsgc2NvcmU8L3RoPjwvdHI+DQogICAgICAgIDw/cGhwIA0KCSAgICAgICAgaWYgKCBpc19hcnJheSAoICRfc2VhcmNoZWRXb3JkcyApICYmICFlbXB0eSAoICRfc2VhcmNoZWRXb3JkcyApICkgew0KCQkJCWZvcmVhY2ggKCAkX3NlYXJjaGVkV29yZHMgYXMgJGtleXdvcmQgKSB7DQoJCQkJCSRyZXN1bHRzWyRrZXl3b3JkWydrZXl3b3JkJ11dID0gZ2V0VHlwZVJhbmsoJGtleXdvcmQpOw0KICAgICAgICAJCX0gDQogICAgICAgIAl9IA0KICAgICAgICAJDQogICAgICAgIAkkZmluYWwgPSBzb3J0cmFuaygkcmVzdWx0cyk7DQogICAgICAgID8+DQogICAgICAgIA0KICAgICAgICA8P3BocCANCgkgICAgICAgIGZvcmVhY2ggKCAkZmluYWwgYXMgJGtleT0+JHJlcyApIHsNCgkJICAgICAgICBmb3JlYWNoKCRyZXMgYXMgJGtleXdvcmRzPT4kcmFua3Mpew0KCQkgICAgPz4NCiAgICAgICAgPHRyPjx0ZD48Pz0ka2V5d29yZHM/PjwvdGQ+PHRkPjw/PSRyYW5rcz8+PC90ZD48L3RyPg0KICAgICAgICA8P3BocCB9IH0gPz4NCiAgICAgICAgDQogICAgICAgICAgDQogICAgIDwvdGFibGU+DQogICAgICA8L2Rpdj4NCiAgICAgIA0KICAgICAgDQogICAgICANCiAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICANCiAgICA8L2Rpdj48IS0tIC8uY29udGFpbmVyIC0tPg0KCQ0KCTxicj48YnI+PGJyPg0KDQogICAgPCEtLSBCb290c3RyYXAgY29yZSBKYXZhU2NyaXB0DQogICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgPCEtLSBQbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQgc28gdGhlIHBhZ2VzIGxvYWQgZmFzdGVyIC0tPg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjExLjMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgPHNjcmlwdCBzcmM9ImpzL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSJqcy9aZXJvQ2xpcGJvYXJkLmpzIj48L3NjcmlwdD4NCiAgICANCiAgICAgICA8cD4gPGNlbnRlcj4gDQoJCQk8YSBocmVmPSJodHRwczovL2FwcC5nZXRyZXNwb25zZS5jb20vc2l0ZTIvZWFzeV9yYW5rZXJfcGFnZT91PUJoa2ZnJmFtcDt3ZWJmb3Jtc19pZD0zNDI0OTA1Ij5TVEFZIFVQREFURUQhIFdlIEV2ZXJ5IFRpbWUgSW1wcm92ZSBUaGUgU3lzdGVtIFB1dCBZb3VyIE1haWwgdG8gR2V0IFVwZGF0ZWQgQ29kZSE8L2E+PGJyIC8+DQoJCQlBbGwgUmlnaHQgUmVzZXJ2ZWQgLSBFYXN5VHViZSAtJm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy55b3VtdXN0Yy5jb20vIj5FYXN5IEtleXdvcmQgUmFua2VyPC9hPiAtJm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy55b3VtdXN0Yy5jb20vIj5odHRwOi8vd3d3LnlvdW11c3RjLmNvbS88L2E+PGJyIC8+DQoJCQk8YnIgLz4gICA8L2NlbnRlcj4NCgkJCSZuYnNwOzwvcD4NCiAgICANCiAgPC9ib2R5Pg0KPC9odG1sPg0KPHNjcmlwdD4NCgkkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpew0KCQkkKCAiI2Zvcm15b3V0dWJlIiApLnN1Ym1pdChmdW5jdGlvbiggZXZlbnQgKSB7DQoJCQl2YXIgbGluZXMgPSAkKCIja2V5d29yZHMiKS52YWwoKS5zcGxpdCgiXG4iKTsgIA0KCQkJaWYobGluZXMubGVuZ3RoID4gMTAwKXsNCgkJCQlhbGVydCgnTWF4IDEwMCBrZXl3b3JkcyBhbGxvd2VkIScpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCX0NCgkJICAkKCcjc3Bpbm5lcicpLnNob3coKTsNCgkJfSk7DQoJCQ0KCQl2YXIgY2xpZW50VGV4dCA9IG5ldyBaZXJvQ2xpcGJvYXJkKCAkKCIjdGV4dC10by1jb3B5IiksIHsNCgkJICAgIG1vdmllUGF0aDogImh0dHA6Ly93d3cucGF1bHVuZC5jby51ay9wbGF5Z3JvdW5kL2RlbW8vemVyb2NsaXBib2FyZC1kZW1vL3plcm9jbGlwYm9hcmQvWmVyb0NsaXBib2FyZC5zd2YiLA0KCQkgICAgZGVidWc6IGZhbHNlDQoJCX0gKTsNCgkJDQoJCWNsaWVudFRleHQub24oICJsb2FkIiwgZnVuY3Rpb24oY2xpZW50VGV4dCkNCgkJew0KCQkgICAgJCgnI2ZsYXNoLWxvYWRlZCcpLmZhZGVJbigpOw0KCQkNCgkJICAgIGNsaWVudFRleHQub24oICJjb21wbGV0ZSIsIGZ1bmN0aW9uKGNsaWVudFRleHQsIGFyZ3MpIHsNCgkJICAgICAgICBjbGllbnRUZXh0LnNldFRleHQoIGFyZ3MudGV4dCApOw0KCQkgICAgICAgICQoJyN0ZXh0LXRvLWNvcHktdGV4dCcpLmZhZGVJbigpOw0KCQkgICAgfSk7DQoJCX0pOw0KCX0pOw0KCQ0KPC9zY3JpcHQ+DQo8P3BocCBpZihpc3NldCgkX1BPU1RbJ3NlYXJjaCddKSkgez8+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsNCgkJJCh3aW5kb3cpLnNjcm9sbFRvcCgkKCcjcmVzdWx0cycpLm9mZnNldCgpLnRvcCk7DQoJCQ0KCX0pOw0KPC9zY3JpcHQ+DQo8P3BocCB9ID8+DQo=")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 03f39eeb2d913d3b3f27e1846f51d7c6
Eval Count 1
Decode Time 96 ms