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 $code = base64_decode("PD9waHAKcmVxdWlyZV9vbmNlICdnYnByaW1lcGF5LnBocCc7CnJlcXVpcmVf..
Decoded Output download
?>b'<?php
require_once \'gbprimepay.php\';
require_once \'setting.php\'; //
$token = "GP+alaxLq6m+m9a0y8w2risPptl8nbuNj6iD7HJOUN9gqu7AhE/iT7MAxNIZGPgwrjWU0MnwYR46/2JQoRGWEFBXfuaGhB2MIyX7D1bS5WoDleLSlQoHz6sF8uJBhd6dHa+mH+ziAEuKWJqJZw5NVb3kdyc=";
$qrcode = \'\';
$error_message = \'\';
// $users_username
$users_username = $users_username; //
if ($_SERVER[\'REQUEST_METHOD\'] === \'POST\' && isset($_POST[\'amount\'])) {
$amount = $_POST[\'amount\'];
if (!empty($amount) && is_numeric($amount) && $amount >= 1) {
//
$result = $connect->query("SELECT tel FROM tbl_users WHERE username = \'".$users_username."\';");
if ($result && $result->num_rows > 0) {
$user = $result->fetch_object();
$tel = $user->tel; //
// 5
$randomDigits = rand(10000, 99999); // 5
// referenceNo
$referenceNo = $tel . $randomDigits; // "081234567812345"
$adjustedAmount = $amount * 1.005; // increase by 0.5%
$formattedAmount = number_format($adjustedAmount, 2, \'.\', \'\');
// QR Code
$gbprimepay = new GBPrimePay();
$qrcode = $gbprimepay->promptpay([
\'amount\' => $formattedAmount,
\'referenceNo\' => substr($referenceNo, 0, 15),
\'backgroundUrl\' => \'https://beer-shop.xyz/gbprimepay.webhook.php\',
], $token);
if (!$qrcode) {
$error_message = \' QR Code\';
}
} else {
$error_message = \'\';
}
} else {
$error_message = \'\';
}
} else {
$error_message = \'\';
}
?>
<div class="col-md-12 col-sm-12 mt-4">
<ol class="breadcrumb mt-3 crad_tung text-white">
<li class="breadcrumb-item text-white hvr-shrink pointer" onclick="CradURL(\'./page/home\')"></li>
<li class="breadcrumb-item text-white active"></li>
</ol>
</div>
<!-- <div class="col-md-6 col-sm-12 mt-4">
<div class="card crad_tung mb-3 text-white ">
<div class="card-header"><i class="fa-solid fa-circle-dollar-to-slot" style="color:#C46A00;"></i> Topup - </div>
<div class="card-body">
<div class="mb-4 text-center">
<img src="assets/img/icons/truewallet.png" style="height: 9.9rem;width: 9.9rem; " alt="a" class="card-img-top img-proflie">
</div>
<div class="form-group mb-3">
<label class="col-form-label" for="inputDefault"><i class="fa-solid fa-link"></i> Aungpao - <a href="" data-bs-toggle="modal" data-bs-target="#howtotopup"> </a> </label>
<input type="text" class="form-control" placeholder="https://gift.truemoney.com/campaign/?v=xxxx" id="link_topup">
</div>
<div class="form-group mb-3">
<div class="g-recaptcha d-flex align-items-center justify-content-center" style="margin-top: 15px;" data-sitekey="<?php echo SITE_KEY; ?>"></div>
</div>
<div class="form-group mb-3">
<button onclick="topups0()" class="btn btn-primary w-100"><i class="fa-solid fa-circle-check"></i> </button>
</div>
</div>
</div>
</div> -->
<div class="col-md-6 col-sm-12 mt-4" data-aos="zoom-in">
<div class="card crad_tung mb-3 text-white ">
<div class="card-header"><i class="fa-solid fa-circle-dollar-to-slot" style="color:#C46A00;"></i> QR Code PromptPay</div>
<div class="card-body">
<div class="mb-4 text-center">
<img src="https://png.pngtree.com/png-vector/20230311/ourlarge/pngtree-seamless-contactless-payments-with-qr-codes-vector-code-electronic-vector-png-image_50700798.jpg" style="height: 9.9rem;width: 9.9rem; " alt="a" class="card-img-top img-proflie">
</div>
<form id="topupForm" method="post">
<div class="form-group mb-3">
<label class="col-form-label" for="amount"><i class="fa-solid fa-money-bill"></i> </label>
<input type="number" class="form-control" id="amount" name="amount" placeholder="" min="1" step="1" required>
</div>
<div class="form-group mb-3">
<button type="submit" class="btn btn-primary w-100"><i class="fa-solid fa-qrcode"></i> </button>
</div>
</form>
<?php if ($error_message): ?>
<div class="alert alert-danger mt-3"><?php echo $error_message; ?></div>
<?php endif; ?>
</div>
</div>
</div>
<!-- Modal for QR Code -->
<div class="modal fade" id="qrCodeModal" tabindex="-1" aria-labelledby="qrCodeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="qrCodeModalLabel">QR Code 0.5</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body text-center">
<?php if ($qrcode): ?>
<img src="<?php echo htmlspecialchars($qrcode); ?>" alt="QR Code" style="max-width: 100%;">
<p class="mt-2"> QR Code <?php echo number_format($amount * 1.005, 2); ?> </p>
<div id="timer" class="mt-3"></div>
<?php endif; ?>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal"></button>
</div>
</div>
</div>
</div>
<div class="col-md-6 col-sm-12 mt-4" data-aos="zoom-in">
<div class="card crad_tung mb-3 text-white">
<div class="card-header"><i class="fa-solid fa-circle-dollar-to-slot"></i> Topup Slip - </div>
<div class="card-body">
<!-- <h6><i class="fa-solid fa-circle-dollar-to-slot"></i> Topup Slip - </h6> -->
<div class="form-group">
<div class="text-center pointer">
<img src="assets/img/icons/bank/brand-05.png" alt="null" width="30%"><br>
<span class="badge rounded-pill bg-info mb-2 mt-3" style="font-size: 0.9rem;" > : <span> </span></span><br>
<span class="badge rounded-pill bg-info mb-2" style="font-size: 0.9rem;" > : <span id="backid">0770221432</span></span><br>
<button class="btn btn-success btn-sm" onclick="copy_backid()"><i class="fa-solid fa-copy"></i> </button>
</div>
</div>
<div class="form-group mt-4">
<div class="text-center pointer mb-2">
<img src="assets/img/icons/picture.png" alt="null" width="20%" id="output" onclick="click_image()">
</div>
</div>
<div class="form-group ">
<label for="formFile" class="form-label mt-4"><i class="fa-regular fa-image"></i> <span class="badge rounded-pill bg-danger" style="font-size: 0.9rem;" > Qrcode !!</span></label>
<input class="form-control" type="file" id="photo" accept="image/*" onchange="loadFile(event)">
<small class="text-center" id="msg" style="color:red"></small>
</div>
<div class="form-group mt-4">
<button onclick="ok_slip()" class="btn btn-primary btn-slip w-100"><i class="fa-solid fa-circle-check"></i> </button>
</div>
</div>
</div>
</div>
<div class="col-md-12 col-sm-12 mt-4">
<!-- crad_tung text-white -->
<div class="card mb-3">
<div class="card-header"><i class="fa-solid fa-wallet" style="color:#3D9B00;"></i> Topup History - </div>
<div class="card-body">
<?php
$result = $connect->query("SELECT * FROM tbl_topup WHERE username = \'".$users_username."\'; ");
$rewardshistorys = $result->fetch_all(MYSQLI_ASSOC);
?>
<?php if($result->num_rows == 0) : ?>
<div class="alert alert-dismissible alert-warning">
<!-- <button type="button" class="btn-close" data-bs-dismiss="alert"></button> -->
<h4 class="alert-heading">Warning!</h4>
<p class="mb-0">.</p>
</div>
<?php else: ?>
<div class="row">
<div class="col-md-12 col-sm-12 text-center mt-2">
<div class="table-responsive">
<table id="tbl_topuphistory" cellspacing="1" class="table table-striped table-bordered display text-white">
<thead>
<tr>
<th>#Order</th>
<th><i class="fa-solid fa-computer"></i> Pay</th>
<th><i class="fa-solid fa-credit-card"></i> Credit</th>
<th><i class="fa-solid fa-font-awesome"></i> Status</th>
<th><i class="fa-solid fa-clock"></i> Time</th>
</tr>
</thead>
<tbody>
<?php
foreach($rewardshistorys as $rewardshistory) : ?>
<tr>
<td><?= $rewardshistory[\'id\']; ?></td>
<td><?= $rewardshistory[\'topupby\']; ?></td>
<td><?= $rewardshistory[\'point\']; ?></td>
<td>
<?php if($rewardshistory[\'status\'] == 1): ?>
<span style="color:#1b4d0a;"><i class="fa-solid fa-check"></i> </span>
<?php else: ?>
<span style="color:#1b4d0a;"><i class="fa-solid fa-circle-info"></i> </span>
<?php endif ?>
</td>
<td><?= th($rewardshistory[\'topuptime\']); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="howtotopup" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel"></h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<img src="assets/img/aungpao_truewallet.png" style="height: 100%;width: 100%; " alt="a" class="card-img-top img-proflie">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-info w-100" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
var loadFile = function(event) {
var reader = new FileReader();
reader.onload = function(){
var output = document.getElementById(\'output\');
output.src = reader.result;
};
reader.readAsDataURL(event.target.files[0]);
};
function click_image(){
$(\'#photo\').click();
}
</script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jsQR.js"></script>
<script>
<?php if ($qrcode): ?>
document.addEventListener(\'DOMContentLoaded\', function() {
var myModal = new bootstrap.Modal(document.getElementById(\'qrCodeModal\'));
myModal.show();
});
<?php endif; ?>
</script>
<script>
function File2Base64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = (error) => reject(error);
});
}
async function imageDataFromSource(source) {
const image = Object.assign(new Image(), {
src: source
});
await new Promise((resolve) => image.addEventListener(\'load\', () => resolve()));
const context = Object.assign(document.createElement(\'canvas\'), {
width: image.width,
height: image.height,
}).getContext(\'2d\');
context.imageSmoothingEnabled = false;
context.drawImage(image, 0, 0);
return context.getImageData(0, 0, image.width, image.height);
}
//
</script>
<script>
function ok_slip(){
var vidFileLength = $("#photo")[0].files.length;
var url = $(\'#photo\').val();
var idxDot = url.lastIndexOf(".") + 1;
var extFile = url.substr(idxDot, url.length).toLowerCase();
// console.log(extFile)
if(vidFileLength === 0){
$(\'#msg\').html(\'<i class="fa-solid fa-triangle-exclamation"></i> \');
return false;
}
var property = document.getElementById(\'photo\').files[0];
if (extFile == "png" || extFile == "jpeg" || extFile == "jpg") {
var qrcode;
const reader = new FileReader();
reader.onload = async function(e) {
const URLBase64 = await File2Base64(property);
const ImageData = await imageDataFromSource(URLBase64);
const code = jsQR(ImageData.data, ImageData.width, ImageData.height);
qrcode = code.data;
console.log(qrcode)
if (code && code.data) {
//--
var form_data = new FormData();
form_data.append( \'qrcode\', qrcode );
console.log(qrcode);
$.ajax({
url: \'idpass.php?rdcwslipapi=api\',
// url: \'cmd.php?slipapi=api\',
method: \'POST\',
data: form_data,
contentType: false,
cache: false,
processData: false,
beforeSend: function() {
$(\'#msg\').html(\'<i class="fa fa-spinner fa-spin fa-fw"></i> ..\');
$(".btn-slip").html(\'<i class="fa fa-spinner fa-spin fa-fw"></i> ..\');
$(".btn-slip").prop("disabled", true);
},
success: function(data) {
$( "#return" ).html( data );
// $("#btn").prop("disabled", false);
$(".btn-slip").prop("disabled", false);
$(".btn-slip").html(\'<i class="fa-solid fa-circle-check"></i> \');
$(\'#msg\').html(\'<i class="fa-solid fa-triangle-exclamation"></i> .\');
}
});
//--
}
}
reader.readAsDataURL(property);
}else{
$(\'#msg\').html(\'<i class="fa-solid fa-triangle-exclamation"></i> \');
}
}
document.getElementById("cp_btn").addEventListener("click", copy_backid);
function copy_backid() {
var copyText = document.getElementById("backid");
var textArea = document.createElement("textarea");
textArea.value = copyText.textContent;
document.body.appendChild(textArea);
textArea.select();
document.execCommand("Copy");
Swal.fire(
\'\',
\' \'+ textArea.value +\' !!\',
\'success\'
)
textArea.remove();
}
window.onload = function() {
document.getElementById(\'topupForm\').reset(); //
};
</script>
<script>
// modal
if (!localStorage.getItem(\'qrModalShown\') && \'<?php echo $qrcode ? "true" : "false"; ?>\') {
// 14
let timeLeft = 14 * 60; // 14
const timerElement = document.getElementById(\'timer\');
const countdown = setInterval(() => {
if (timeLeft <= 0) {
clearInterval(countdown);
timerElement.innerHTML = "!";
document.querySelector(\'.btn-close\').click(); // modal
localStorage.setItem(\'qrModalShown\', \'true\'); //
} else {
const minutes = Math.floor(timeLeft / 60);
const seconds = timeLeft % 60;
timerElement.innerHTML = `: ${minutes} ${seconds} `;
timeLeft--;
}
}, 1000);
// modal
$(\'#qrCodeModal\').modal(\'show\');
}
</script>
'
Did this file decode correctly?
Original Code
<?php
$code = base64_decode("PD9waHAKcmVxdWlyZV9vbmNlICdnYnByaW1lcGF5LnBocCc7CnJlcXVpcmVfb25jZSAnc2V0dGluZy5waHAnOyAvLyDguYDguIrguLfguYjguK3guKHguJXguYjguK3guJDguLLguJnguILguYnguK3guKHguLnguKUKCiR0b2tlbiA9ICJHUCthbGF4THE2bSttOWEweTh3MnJpc1BwdGw4bmJ1Tmo2aUQ3SEpPVU45Z3F1N0FoRS9pVDdNQXhOSVpHUGd3cmpXVTBNbndZUjQ2LzJKUW9SR1dFRkJYZnVhR2hCMk1JeVg3RDFiUzVXb0RsZUxTbFFvSHo2c0Y4dUpCaGQ2ZEhhK21IK3ppQUV1S1dKcUpadzVOVmIza2R5Yz0iOwoKJHFyY29kZSA9ICcnOwokZXJyb3JfbWVzc2FnZSA9ICcnOwoKLy8g4Liq4Lih4Lih4Li44LiV4Li04Lin4LmI4Liy4LmE4LiU4LmJ4LiK4Li34LmI4Lit4Lic4Li54LmJ4LmD4LiK4LmJ4LiI4Liy4LiB4LiX4Li14LmI4Lit4Li34LmI4LiZIOC5gOC4iuC5iOC4mSDguIjguLLguIHguJXguLHguKfguYHguJvguKMgJHVzZXJzX3VzZXJuYW1lCiR1c2Vyc191c2VybmFtZSA9ICR1c2Vyc191c2VybmFtZTsgLy8g4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmA4Lib4LmH4LiZ4LiK4Li34LmI4Lit4Lic4Li54LmJ4LmD4LiK4LmJ4LiI4Lij4Li04LiHCgppZiAoJF9TRVJWRVJbJ1JFUVVFU1RfTUVUSE9EJ10gPT09ICdQT1NUJyAmJiBpc3NldCgkX1BPU1RbJ2Ftb3VudCddKSkgewogICAgJGFtb3VudCA9ICRfUE9TVFsnYW1vdW50J107CgogICAgaWYgKCFlbXB0eSgkYW1vdW50KSAmJiBpc19udW1lcmljKCRhbW91bnQpICYmICRhbW91bnQgPj0gMSkgewogICAgICAgIC8vIOC4lOC4tuC4h+C4guC5ieC4reC4oeC4ueC4peC4nOC4ueC5ieC5g+C4iuC5ieC4iOC4suC4geC4iuC4t+C5iOC4reC4nOC4ueC5ieC5g+C4iuC5iQogICAgICAgICRyZXN1bHQgPSAkY29ubmVjdC0+cXVlcnkoIlNFTEVDVCB0ZWwgRlJPTSB0YmxfdXNlcnMgV0hFUkUgdXNlcm5hbWUgPSAnIi4kdXNlcnNfdXNlcm5hbWUuIic7Iik7CgogICAgICAgIGlmICgkcmVzdWx0ICYmICRyZXN1bHQtPm51bV9yb3dzID4gMCkgewogICAgICAgICAgICAkdXNlciA9ICRyZXN1bHQtPmZldGNoX29iamVjdCgpOwogICAgICAgICAgICAkdGVsID0gJHVzZXItPnRlbDsgLy8g4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LiC4Lit4LiH4Lic4Li54LmJ4LmD4LiK4LmJCgogICAgICAgICAgICAvLyDguKrguLjguYjguKHguJXguLHguKfguYDguKXguIIgNSDguJXguLHguKcKICAgICAgICAgICAgJHJhbmRvbURpZ2l0cyA9IHJhbmQoMTAwMDAsIDk5OTk5KTsgLy8g4Liq4Li44LmI4LihIDUg4LiV4Lix4LinCgogICAgICAgICAgICAvLyDguKrguKPguYnguLLguIcgcmVmZXJlbmNlTm8g4LmC4LiU4Lii4Lij4Lin4Lih4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmB4Lil4Liw4LiV4Lix4Lin4LmA4Lil4LiC4Liq4Li44LmI4LihCiAgICAgICAgICAgICRyZWZlcmVuY2VObyA9ICR0ZWwgLiAkcmFuZG9tRGlnaXRzOyAvLyDguIjguLDguYTguJTguYnguYDguIrguYjguJkgIjA4MTIzNDU2NzgxMjM0NSIKCiAgICAgICAgICAgICRhZGp1c3RlZEFtb3VudCA9ICRhbW91bnQgKiAxLjAwNTsgLy8gaW5jcmVhc2UgYnkgMC41JQogICAgICAgICAgICAkZm9ybWF0dGVkQW1vdW50ID0gbnVtYmVyX2Zvcm1hdCgkYWRqdXN0ZWRBbW91bnQsIDIsICcuJywgJycpOwoKICAgICAgICAgICAgLy8g4Liq4Lij4LmJ4Liy4LiHIFFSIENvZGUKICAgICAgICAgICAgJGdicHJpbWVwYXkgPSBuZXcgR0JQcmltZVBheSgpOwogICAgICAgICAgICAkcXJjb2RlID0gJGdicHJpbWVwYXktPnByb21wdHBheShbCiAgICAgICAgICAgICAgICAnYW1vdW50JyA9PiAkZm9ybWF0dGVkQW1vdW50LAogICAgICAgICAgICAgICAgJ3JlZmVyZW5jZU5vJyA9PiAgc3Vic3RyKCRyZWZlcmVuY2VObywgMCwgMTUpLAogICAgICAgICAgICAgICAgJ2JhY2tncm91bmRVcmwnID0+ICdodHRwczovL2JlZXItc2hvcC54eXovZ2JwcmltZXBheS53ZWJob29rLnBocCcsCiAgICAgICAgICAgIF0sICR0b2tlbik7CgogICAgICAgICAgICBpZiAoISRxcmNvZGUpIHsKICAgICAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlID0gJ+C5gOC4geC4tOC4lOC4guC5ieC4reC4nOC4tOC4lOC4nuC4peC4suC4lOC5g+C4meC4geC4suC4o+C4quC4o+C5ieC4suC4hyBRUiBDb2RlJzsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRlcnJvcl9tZXNzYWdlID0gJ+C5hOC4oeC5iOC4nuC4muC4nOC4ueC5ieC5g+C4iuC5ieC4iOC4suC4geC4iuC4t+C5iOC4reC4nOC4ueC5ieC5g+C4iuC5ieC4l+C4teC5iOC4o+C4sOC4muC4uCc7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkZXJyb3JfbWVzc2FnZSA9ICfguIHguKPguLjguJPguLLguIHguKPguK3guIHguIjguLPguJnguKfguJnguYDguIfguLTguJnguJfguLXguYjguJbguLnguIHguJXguYnguK3guIcnOwogICAgfQp9IGVsc2UgewogICAgJGVycm9yX21lc3NhZ2UgPSAn4LiB4Lij4Li44LiT4Liy4LiB4Lij4Lit4LiB4LiC4LmJ4Lit4Lih4Li54Lil4LmD4Lir4LmJ4LiE4Lij4Lia4LiW4LmJ4Lin4LiZJzsKfQo/PgoKCgoKCjxkaXYgY2xhc3M9ImNvbC1tZC0xMiBjb2wtc20tMTIgbXQtNCI+CiAgICA8b2wgY2xhc3M9ImJyZWFkY3J1bWIgbXQtMyBjcmFkX3R1bmcgdGV4dC13aGl0ZSI+CiAgICAgICAgPGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gdGV4dC13aGl0ZSBodnItc2hyaW5rIHBvaW50ZXIiIG9uY2xpY2s9IkNyYWRVUkwoJy4vcGFnZS9ob21lJykiPuC4q+C4meC5ieC4suC5geC4o+C4gTwvbGk+CiAgICAgICAgPGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gdGV4dC13aGl0ZSBhY3RpdmUiPuC5gOC4leC4tOC4oeC5gOC4h+C4tOC4mTwvbGk+CiAgICA8L29sPgo8L2Rpdj4KCjwhLS0gPGRpdiBjbGFzcz0iY29sLW1kLTYgY29sLXNtLTEyIG10LTQiPgogICAgPGRpdiBjbGFzcz0iY2FyZCBjcmFkX3R1bmcgbWItMyB0ZXh0LXdoaXRlICI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jaXJjbGUtZG9sbGFyLXRvLXNsb3QiIHN0eWxlPSJjb2xvcjojQzQ2QTAwOyI+PC9pPiBUb3B1cCAtIOC5gOC4leC4tOC4oeC5gOC4h+C4tOC4mTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi00IHRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJhc3NldHMvaW1nL2ljb25zL3RydWV3YWxsZXQucG5nIiBzdHlsZT0iaGVpZ2h0OiA5LjlyZW07d2lkdGg6IDkuOXJlbTsgIiBhbHQ9ImEiIGNsYXNzPSJjYXJkLWltZy10b3AgaW1nLXByb2ZsaWUiPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBtYi0zIj4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLWZvcm0tbGFiZWwiIGZvcj0iaW5wdXREZWZhdWx0Ij48aSBjbGFzcz0iZmEtc29saWQgZmEtbGluayI+PC9pPiBBdW5ncGFvIC0g4Lil4Li04LmJ4LiH4Lit4Lix4LiH4LmA4Lib4LmI4LiyIDxhIGhyZWY9IiIgZGF0YS1icy10b2dnbGU9Im1vZGFsIiBkYXRhLWJzLXRhcmdldD0iI2hvd3RvdG9wdXAiPiDguKfguLTguJjguLXguYDguJXguLTguKHguYDguIfguLTguJnguJTguYnguKfguKLguK3guLHguIfguYDguJvguYjguLI8L2E+IDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Imh0dHBzOi8vZ2lmdC50cnVlbW9uZXkuY29tL2NhbXBhaWduLz92PXh4eHgiIGlkPSJsaW5rX3RvcHVwIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgbWItMyI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJnLXJlY2FwdGNoYSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIiIHN0eWxlPSJtYXJnaW4tdG9wOiAxNXB4OyIgZGF0YS1zaXRla2V5PSI8P3BocCBlY2hvIFNJVEVfS0VZOyA/PiI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBtYi0zIj4KICAgICAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0idG9wdXBzMCgpIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IHctMTAwIj48aSBjbGFzcz0iZmEtc29saWQgZmEtY2lyY2xlLWNoZWNrIj48L2k+IOC4leC4o+C4p+C4iOC4quC4reC4muC4guC5ieC4reC4oeC4ueC4pTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+IC0tPgoKCgo8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtc20tMTIgbXQtNCIgZGF0YS1hb3M9Inpvb20taW4iPgogICAgPGRpdiBjbGFzcz0iY2FyZCBjcmFkX3R1bmcgbWItMyB0ZXh0LXdoaXRlICI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1oZWFkZXIiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jaXJjbGUtZG9sbGFyLXRvLXNsb3QiIHN0eWxlPSJjb2xvcjojQzQ2QTAwOyI+PC9pPuC5gOC4leC4tOC4oeC5gOC4h+C4tOC4mSBRUiBDb2RlIFByb21wdFBheTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1iLTQgdGV4dC1jZW50ZXIiPgogICAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vcG5nLnBuZ3RyZWUuY29tL3BuZy12ZWN0b3IvMjAyMzAzMTEvb3VybGFyZ2UvcG5ndHJlZS1zZWFtbGVzcy1jb250YWN0bGVzcy1wYXltZW50cy13aXRoLXFyLWNvZGVzLXZlY3Rvci1jb2RlLWVsZWN0cm9uaWMtdmVjdG9yLXBuZy1pbWFnZV81MDcwMDc5OC5qcGciIHN0eWxlPSJoZWlnaHQ6IDkuOXJlbTt3aWR0aDogOS45cmVtOyAiIGFsdD0iYSIgY2xhc3M9ImNhcmQtaW1nLXRvcCBpbWctcHJvZmxpZSI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8Zm9ybSBpZD0idG9wdXBGb3JtIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCBtYi0zIj4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbC1mb3JtLWxhYmVsIiBmb3I9ImFtb3VudCI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLW1vbmV5LWJpbGwiPjwvaT4g4LiI4Liz4LiZ4Lin4LiZ4LmA4LiH4Li04LiZPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYW1vdW50IiBuYW1lPSJhbW91bnQiIHBsYWNlaG9sZGVyPSLguIHguKPguK3guIHguIjguLPguJnguKfguJnguYDguIfguLTguJkiIG1pbj0iMSIgc3RlcD0iMSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgbWItMyI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgdy0xMDAiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1xcmNvZGUiPjwvaT4g4LmA4LiV4Li04Lih4LmA4LiH4Li04LiZPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8P3BocCBpZiAoJGVycm9yX21lc3NhZ2UpOiA/PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIG10LTMiPjw/cGhwIGVjaG8gJGVycm9yX21lc3NhZ2U7ID8+PC9kaXY+CiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBNb2RhbCBmb3IgUVIgQ29kZSAtLT4KPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InFyQ29kZU1vZGFsIiB0YWJpbmRleD0iLTEiIGFyaWEtbGFiZWxsZWRieT0icXJDb2RlTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJxckNvZGVNb2RhbExhYmVsIj5RUiBDb2RlIOC4quC4s+C4q+C4o+C4seC4muC4geC4suC4o+C4iuC4s+C4o+C4sOC5gOC4h+C4tOC4mSDguJjguKPguKPguKHguYDguJnguLXguKLguKEgMC41PC9oNT4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuLWNsb3NlIiBkYXRhLWJzLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5IHRleHQtY2VudGVyIj4KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkcXJjb2RlKTogPz4KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRxcmNvZGUpOyA/PiIgYWx0PSJRUiBDb2RlIiBzdHlsZT0ibWF4LXdpZHRoOiAxMDAlOyI+CiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9Im10LTIiPuC4quC5geC4geC4mSBRUiBDb2RlIOC5gOC4nuC4t+C5iOC4reC4iuC4s+C4o+C4sOC5gOC4h+C4tOC4mSDguIjguLPguJnguKfguJkgPD9waHAgZWNobyBudW1iZXJfZm9ybWF0KCRhbW91bnQgKiAxLjAwNSwgMik7ID8+IOC4muC4suC4lzwvcD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJ0aW1lciIgY2xhc3M9Im10LTMiPjwvZGl2PgogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCI+4Lib4Li04LiUPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKCgo8ZGl2IGNsYXNzPSJjb2wtbWQtNiBjb2wtc20tMTIgbXQtNCIgZGF0YS1hb3M9Inpvb20taW4iPgogICAgPGRpdiBjbGFzcz0iY2FyZCBjcmFkX3R1bmcgbWItMyB0ZXh0LXdoaXRlIj4KICAgIDxkaXYgY2xhc3M9ImNhcmQtaGVhZGVyIj48aSBjbGFzcz0iZmEtc29saWQgZmEtY2lyY2xlLWRvbGxhci10by1zbG90Ij48L2k+IFRvcHVwIFNsaXAgLSDguYDguJXguLTguKHguYDguIfguLTguJnguKrguKXguLTguJs8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgICAgICAKICAgICAgICAgICAgPCEtLSA8aDY+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWNpcmNsZS1kb2xsYXItdG8tc2xvdCI+PC9pPiBUb3B1cCBTbGlwIC0g4LmA4LiV4Li04Lih4LmA4LiH4Li04LiZ4Liq4Lil4Li04LibPC9oNj4gLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIgcG9pbnRlciI+CiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9pbWcvaWNvbnMvYmFuay9icmFuZC0wNS5wbmciIGFsdD0ibnVsbCIgd2lkdGg9IjMwJSI+PGJyPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSByb3VuZGVkLXBpbGwgYmctaW5mbyBtYi0yIG10LTMiIHN0eWxlPSJmb250LXNpemU6IDAuOXJlbTsiID7guIrguLfguYjguK3guJrguLHguI3guIrguLUgOiA8c3Bhbj7guJnguLLguKIg4LmA4Lit4LiB4Lil4Lix4LiB4Lip4LiT4LmMIOC4reC4s+C4meC4p+C4ojwvc3Bhbj48L3NwYW4+PGJyPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSByb3VuZGVkLXBpbGwgYmctaW5mbyBtYi0yIiBzdHlsZT0iZm9udC1zaXplOiAwLjlyZW07IiA+4LmA4Lil4LiC4LiX4Li14LmI4Lia4Lix4LiN4LiK4Li1IDogPHNwYW4gaWQ9ImJhY2tpZCI+MDc3MDIyMTQzMjwvc3Bhbj48L3NwYW4+PGJyPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biBidG4tc3VjY2VzcyBidG4tc20iIG9uY2xpY2s9ImNvcHlfYmFja2lkKCkiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jb3B5Ij48L2k+IOC4hOC4seC4lOC4peC4reC4geC5gOC4peC4guC4muC4seC4jeC4iuC4tTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIG10LTQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1jZW50ZXIgcG9pbnRlciBtYi0yIj4KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYXNzZXRzL2ltZy9pY29ucy9waWN0dXJlLnBuZyIgYWx0PSJudWxsIiB3aWR0aD0iMjAlIiBpZD0ib3V0cHV0IiBvbmNsaWNrPSJjbGlja19pbWFnZSgpIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCAiPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZm9ybUZpbGUiIGNsYXNzPSJmb3JtLWxhYmVsIG10LTQiPjxpIGNsYXNzPSJmYS1yZWd1bGFyIGZhLWltYWdlIj48L2k+IOC4o+C4ueC4m+C4quC4peC4tOC4myA8c3BhbiBjbGFzcz0iYmFkZ2Ugcm91bmRlZC1waWxsIGJnLWRhbmdlciIgc3R5bGU9ImZvbnQtc2l6ZTogMC45cmVtOyIgPuC4quC4peC4tOC4m+C4l+C4teC5iOC4oeC4tSBRcmNvZGUg4LmA4LiX4LmI4Liy4LiZ4Lix4LmJ4LiZISE8L3NwYW4+PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiB0eXBlPSJmaWxlIiBpZD0icGhvdG8iIGFjY2VwdD0iaW1hZ2UvKiIgb25jaGFuZ2U9ImxvYWRGaWxlKGV2ZW50KSI+CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0idGV4dC1jZW50ZXIiIGlkPSJtc2ciIHN0eWxlPSJjb2xvcjpyZWQiPjwvc21hbGw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIG10LTQiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJva19zbGlwKCkiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkgYnRuLXNsaXAgdy0xMDAiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jaXJjbGUtY2hlY2siPjwvaT4g4LiV4Lij4Lin4LiI4Liq4Lit4Lia4LiC4LmJ4Lit4Lih4Li54LilPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImNvbC1tZC0xMiBjb2wtc20tMTIgbXQtNCI+CjwhLS0gY3JhZF90dW5nIHRleHQtd2hpdGUgLS0+CiAgICA8ZGl2IGNsYXNzPSJjYXJkIG1iLTMiPiAKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLXdhbGxldCIgc3R5bGU9ImNvbG9yOiMzRDlCMDA7Ij48L2k+IFRvcHVwIEhpc3RvcnkgLSDguJvguKPguLDguKfguLHguJXguLTguIHguLLguKPguYDguJXguLTguKHguYDguIfguLTguJk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPgogICAgICAgIDw/cGhwCiAgICAgICAgICAgICRyZXN1bHQgPSAkY29ubmVjdC0+cXVlcnkoIlNFTEVDVCAqIEZST00gdGJsX3RvcHVwIFdIRVJFIHVzZXJuYW1lID0gJyIuJHVzZXJzX3VzZXJuYW1lLiInOyAiKTsKICAgICAgICAgICAgJHJld2FyZHNoaXN0b3J5cyA9ICRyZXN1bHQtPmZldGNoX2FsbChNWVNRTElfQVNTT0MpOwogICAgICAgID8+CiAgICAgICAgPD9waHAgaWYoJHJlc3VsdC0+bnVtX3Jvd3MgPT0gMCkgOiA/PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1kaXNtaXNzaWJsZSBhbGVydC13YXJuaW5nIj4KICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJhbGVydCI+PC9idXR0b24+IC0tPgogICAgICAgICAgICA8aDQgY2xhc3M9ImFsZXJ0LWhlYWRpbmciPldhcm5pbmchPC9oND4KICAgICAgICAgICAgPHAgY2xhc3M9Im1iLTAiPuC4ouC4seC4h+C5hOC4oeC5iOC4oeC4teC4m+C4o+C4sOC4p+C4seC4leC4tOC4geC4suC4o+C4l+C4s+C4o+C4suC4ouC4geC4suC4oy48L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgPD9waHAgZWxzZTogPz4gICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiBjb2wtc20tMTIgdGV4dC1jZW50ZXIgbXQtMiI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtcmVzcG9uc2l2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBpZD0idGJsX3RvcHVwaGlzdG9yeSIgY2VsbHNwYWNpbmc9IjEiIGNsYXNzPSJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkIGRpc3BsYXkgdGV4dC13aGl0ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+I09yZGVyPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jb21wdXRlciI+PC9pPiBQYXk8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGkgY2xhc3M9ImZhLXNvbGlkIGZhLWNyZWRpdC1jYXJkIj48L2k+IENyZWRpdDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48aSBjbGFzcz0iZmEtc29saWQgZmEtZm9udC1hd2Vzb21lIj48L2k+IFN0YXR1czwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48aSBjbGFzcz0iZmEtc29saWQgZmEtY2xvY2siPjwvaT4gVGltZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJHJld2FyZHNoaXN0b3J5cyBhcyAkcmV3YXJkc2hpc3RvcnkpIDogID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PD89ICRyZXdhcmRzaGlzdG9yeVsnaWQnXTsgPz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PD89ICRyZXdhcmRzaGlzdG9yeVsndG9wdXBieSddOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Pz0gJHJld2FyZHNoaXN0b3J5Wydwb2ludCddOyA/PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmKCRyZXdhcmRzaGlzdG9yeVsnc3RhdHVzJ10gPT0gMSk6ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IzFiNGQwYTsiPjxpIGNsYXNzPSJmYS1zb2xpZCBmYS1jaGVjayI+PC9pPiDguJzguYjguLLguJk8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiMxYjRkMGE7Ij48aSBjbGFzcz0iZmEtc29saWQgZmEtY2lyY2xlLWluZm8iPjwvaT4g4Lij4Lit4LmB4Lit4LiU4Lih4Li04LiZ4LiV4Lij4Lin4LiI4Liq4Lit4LiaPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWYgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjw/PSB0aCgkcmV3YXJkc2hpc3RvcnlbJ3RvcHVwdGltZSddKTsgPz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgIDw/cGhwIGVuZGlmOyA/PiAgCiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8IS0tIE1vZGFsIC0tPgo8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iaG93dG90b3B1cCIgdGFiaW5kZXg9Ii0xIiBhcmlhLWxhYmVsbGVkYnk9ImV4YW1wbGVNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWxnIj4KICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJleGFtcGxlTW9kYWxMYWJlbCI+4Lin4Li04LiY4Li14LmA4LiV4Li04Lih4LmA4LiH4Li04LiZ4LiU4LmJ4Lin4Lii4Lit4Lix4LiH4LmA4Lib4LmI4LiyPC9oNT4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0bi1jbG9zZSIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgPGltZyBzcmM9ImFzc2V0cy9pbWcvYXVuZ3Bhb190cnVld2FsbGV0LnBuZyIgc3R5bGU9ImhlaWdodDogMTAwJTt3aWR0aDogMTAwJTsgIiBhbHQ9ImEiIGNsYXNzPSJjYXJkLWltZy10b3AgaW1nLXByb2ZsaWUiPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4taW5mbyB3LTEwMCIgZGF0YS1icy1kaXNtaXNzPSJtb2RhbCI+Q2xvc2U8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+CjxzY3JpcHQ+CgogICAgdmFyIGxvYWRGaWxlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKXsKICAgICAgICB2YXIgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ291dHB1dCcpOwogICAgICAgIG91dHB1dC5zcmMgPSByZWFkZXIucmVzdWx0OwogICAgICAgIH07CiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZXZlbnQudGFyZ2V0LmZpbGVzWzBdKTsKICAgIH07CgogICAgZnVuY3Rpb24gY2xpY2tfaW1hZ2UoKXsKICAgICAgICAkKCcjcGhvdG8nKS5jbGljaygpOwogICAgfQoKPC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzcXJAMS4xLjAvZGlzdC9qc1FSLmpzIj48L3NjcmlwdD4KCjxzY3JpcHQ+Cjw/cGhwIGlmICgkcXJjb2RlKTogPz4KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgbXlNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3FyQ29kZU1vZGFsJykpOwogICAgICAgIG15TW9kYWwuc2hvdygpOwogICAgfSk7Cjw/cGhwIGVuZGlmOyA/Pgo8L3NjcmlwdD4KCjxzY3JpcHQ+CgogICAgZnVuY3Rpb24gRmlsZTJCYXNlNjQoZmlsZSkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0KTsKICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7CiAgICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBmdW5jdGlvbiBpbWFnZURhdGFGcm9tU291cmNlKHNvdXJjZSkgewogICAgICAgIGNvbnN0IGltYWdlID0gT2JqZWN0LmFzc2lnbihuZXcgSW1hZ2UoKSwgewogICAgICAgICAgICBzcmM6IHNvdXJjZQogICAgICAgIH0pOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBpbWFnZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgKCkgPT4gcmVzb2x2ZSgpKSk7CiAgICAgICAgY29uc3QgY29udGV4dCA9IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyksIHsKICAgICAgICAgICAgd2lkdGg6IGltYWdlLndpZHRoLAogICAgICAgICAgICBoZWlnaHQ6IGltYWdlLmhlaWdodCwKICAgICAgICB9KS5nZXRDb250ZXh0KCcyZCcpOwogICAgICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7CiAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApOwogICAgICAgIHJldHVybiBjb250ZXh0LmdldEltYWdlRGF0YSgwLCAwLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0KTsKICAgIH0KICAgIC8vCjwvc2NyaXB0Pgo8c2NyaXB0PgoKICAgIGZ1bmN0aW9uIG9rX3NsaXAoKXsKCiAgICAgICAgdmFyIHZpZEZpbGVMZW5ndGggPSAkKCIjcGhvdG8iKVswXS5maWxlcy5sZW5ndGg7CiAgICAgICAgdmFyIHVybCA9ICQoJyNwaG90bycpLnZhbCgpOwogICAgICAgIHZhciBpZHhEb3QgPSB1cmwubGFzdEluZGV4T2YoIi4iKSArIDE7CiAgICAgICAgdmFyIGV4dEZpbGUgPSB1cmwuc3Vic3RyKGlkeERvdCwgdXJsLmxlbmd0aCkudG9Mb3dlckNhc2UoKTsKICAgICAgICAvLyBjb25zb2xlLmxvZyhleHRGaWxlKQogICAgICAgIGlmKHZpZEZpbGVMZW5ndGggPT09IDApewogICAgICAgICAgICAkKCcjbXNnJykuaHRtbCgnPGkgY2xhc3M9ImZhLXNvbGlkIGZhLXRyaWFuZ2xlLWV4Y2xhbWF0aW9uIj48L2k+IOC4geC4o+C4uOC4k+C4suC5gOC4peC4t+C4reC4geC4o+C4ueC4m+C4oOC4suC4nuC4quC4peC4t+C4mycpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBwcm9wZXJ0eSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwaG90bycpLmZpbGVzWzBdOwogICAgICAgIAogICAgICAgIGlmIChleHRGaWxlID09ICJwbmciIHx8IGV4dEZpbGUgPT0gImpwZWciIHx8IGV4dEZpbGUgPT0gImpwZyIpIHsKICAgICAgICAgICAgCiAgICAgICAgICAgIHZhciBxcmNvZGU7CiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBhc3luYyBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBjb25zdCBVUkxCYXNlNjQgPSBhd2FpdCBGaWxlMkJhc2U2NChwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICBjb25zdCBJbWFnZURhdGEgPSBhd2FpdCBpbWFnZURhdGFGcm9tU291cmNlKFVSTEJhc2U2NCk7CiAgICAgICAgICAgICAgICBjb25zdCBjb2RlID0ganNRUihJbWFnZURhdGEuZGF0YSwgSW1hZ2VEYXRhLndpZHRoLCBJbWFnZURhdGEuaGVpZ2h0KTsKICAgICAgICAgICAgICAgIHFyY29kZSA9IGNvZGUuZGF0YTsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHFyY29kZSkKICAgICAgICAgICAgICAgIGlmIChjb2RlICYmIGNvZGUuZGF0YSkgewogICAgICAgICAgICAgICAgLy8tLQogICAgICAgICAgICAgICAgICAgIHZhciBmb3JtX2RhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgICAgICAgICBmb3JtX2RhdGEuYXBwZW5kKCAncXJjb2RlJywgcXJjb2RlICk7CiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocXJjb2RlKTsKICAgICAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdpZHBhc3MucGhwP3JkY3dzbGlwYXBpPWFwaScsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVybDogJ2NtZC5waHA/c2xpcGFwaT1hcGknLAogICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNtc2cnKS5odG1sKCc8aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIGZhLWZ3Ij48L2k+IOC4geC4s+C4peC4seC4h+C4leC4o+C4p+C4iOC4quC4reC4muC4guC5ieC4reC4oeC4ueC4pS4uJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuYnRuLXNsaXAiKS5odG1sKCc8aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBmYS1zcGluIGZhLWZ3Ij48L2k+IOC4geC4s+C4peC4seC4h+C4leC4o+C4p+C4iOC4quC4reC4muC4guC5ieC4reC4oeC4ueC4pS4uJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuYnRuLXNsaXAiKS5wcm9wKCJkaXNhYmxlZCIsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCAiI3JldHVybiIgKS5odG1sKCBkYXRhICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkKCIjYnRuIikucHJvcCgiZGlzYWJsZWQiLCBmYWxzZSk7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLmJ0bi1zbGlwIikucHJvcCgiZGlzYWJsZWQiLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuYnRuLXNsaXAiKS5odG1sKCc8aSBjbGFzcz0iZmEtc29saWQgZmEtY2lyY2xlLWNoZWNrIj48L2k+IOC4leC4o+C4p+C4iOC4quC4reC4muC4guC5ieC4reC4oeC4ueC4pScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI21zZycpLmh0bWwoJzxpIGNsYXNzPSJmYS1zb2xpZCBmYS10cmlhbmdsZS1leGNsYW1hdGlvbiI+PC9pPiDguYDguJXguLTguKHguYDguIfguLTguJnguYTguKHguYjguKrguLPguYDguKPguYfguIguJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8tLQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHByb3BlcnR5KTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgJCgnI21zZycpLmh0bWwoJzxpIGNsYXNzPSJmYS1zb2xpZCBmYS10cmlhbmdsZS1leGNsYW1hdGlvbiI+PC9pPiDguJnguLLguKHguKrguIHguLjguKXguYTguJ/guKXguYzguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcnKTsKICAgICAgICB9CiAgICAgICAKICAgIH0KCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY3BfYnRuIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjb3B5X2JhY2tpZCk7CgogICAgZnVuY3Rpb24gY29weV9iYWNraWQoKSB7CiAgICAgICAgdmFyIGNvcHlUZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJhY2tpZCIpOwogICAgICAgIHZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICAgICAgdGV4dEFyZWEudmFsdWUgPSBjb3B5VGV4dC50ZXh0Q29udGVudDsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRBcmVhKTsKICAgICAgICB0ZXh0QXJlYS5zZWxlY3QoKTsKICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiQ29weSIpOwoKICAgICAgICBTd2FsLmZpcmUoCiAgICAgICAgICAgICfguITguLHguJTguKXguK3guIEnLAogICAgICAgICAgICAn4LmA4Lil4LiC4Lia4Lix4LiN4LiK4Li1ICcrIHRleHRBcmVhLnZhbHVlICsnIOC5geC4peC5ieC4pyEhJywKICAgICAgICAgICAgJ3N1Y2Nlc3MnCiAgICAgICAgKQoKICAgICAgICB0ZXh0QXJlYS5yZW1vdmUoKTsKICAgICAgICAKICAgICAgICAKICAgIH0KCiAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvcHVwRm9ybScpLnJlc2V0KCk7IC8vIOC4o+C4teC5gOC4i+C5h+C4leC4n+C4reC4o+C5jOC4oeC5gOC4oeC4t+C5iOC4reC5guC4q+C4peC4lOC4q+C4meC5ieC4sgogICAgfTsKPC9zY3JpcHQ+CgoKCjxzY3JpcHQ+CiAgICAvLyDguJXguKPguKfguIjguKrguK3guJrguKfguYjguLIgbW9kYWwg4LmE4LiU4LmJ4LmB4Liq4LiU4LiH4LmB4Lil4LmJ4Lin4Lir4Lij4Li34Lit4LmE4Lih4LmICiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdxck1vZGFsU2hvd24nKSAmJiAnPD9waHAgZWNobyAkcXJjb2RlID8gInRydWUiIDogImZhbHNlIjsgPz4nKSB7CiAgICAgICAgLy8g4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LmA4Lin4Lil4LiyIDE0IOC4meC4suC4l+C4tQogICAgICAgIGxldCB0aW1lTGVmdCA9IDE0ICogNjA7IC8vIDE0IOC4meC4suC4l+C4tSDguYDguJvguYfguJnguKfguLTguJnguLLguJfguLUKICAgICAgICBjb25zdCB0aW1lckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGltZXInKTsKCiAgICAgICAgY29uc3QgY291bnRkb3duID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICBpZiAodGltZUxlZnQgPD0gMCkgewogICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjb3VudGRvd24pOwogICAgICAgICAgICAgICAgdGltZXJFbGVtZW50LmlubmVySFRNTCA9ICLguKvguKHguJTguYDguKfguKXguLLguYHguKXguYnguKchIjsKICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5idG4tY2xvc2UnKS5jbGljaygpOyAvLyDguJvguLTguJQgbW9kYWwKICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdxck1vZGFsU2hvd24nLCAndHJ1ZScpOyAvLyDguJrguLHguJnguJfguLbguIHguKrguJbguLLguJnguLAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRpbWVMZWZ0IC8gNjApOwogICAgICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHRpbWVMZWZ0ICUgNjA7CiAgICAgICAgICAgICAgICB0aW1lckVsZW1lbnQuaW5uZXJIVE1MID0gYOC5gOC4p+C4peC4suC4l+C4teC5iOC5gOC4q+C4peC4t+C4rTogJHttaW51dGVzfSDguJnguLLguJfguLUgJHtzZWNvbmRzfSDguKfguLTguJnguLLguJfguLVgOwogICAgICAgICAgICAgICAgdGltZUxlZnQtLTsKICAgICAgICAgICAgfQogICAgICAgIH0sIDEwMDApOwoKICAgICAgICAvLyDguYHguKrguJTguIcgbW9kYWwKICAgICAgICAkKCcjcXJDb2RlTW9kYWwnKS5tb2RhbCgnc2hvdycpOwogICAgfQogICAgCjwvc2NyaXB0PgoKCgoKCg==");
eval('?>'.$code);
?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 1eef3688fbcc90c3cae3565f9e1ce86e |
Eval Count | 1 |
Decode Time | 95 ms |