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

Signing you up...

Thank you for signing up!

PHP Decode

<?php @eval("?>".base64_decode("PD9waHAKICAgIC8vIEluaWNpYSBhIHNlc3PDo28KICAgIHNlc3Npb25fc3..

Decoded Output download

?>b'<?php
    // Inicia a sesso
    session_start();
    error_reporting(0);

    // Verifica se \'email\' est definido na sesso
    if (!isset($_SESSION[\'email\'])) {
        header(\'Location: /login\');
        die();
    }

    $email = $_SESSION[\'email\'];
?>

<?php
// Iniciar ou resumir a sesso
session_start();

// Obtm o valor aps o \'=\' na URL
$externalReference = isset($_GET[\'externalReference\']) ? $_GET[\'externalReference\'] : \'\';
$valor = isset($_GET[\'value\']) ? $_GET[\'value\'] : \'\'; // Adiciona esta linha para obter o valor da URL

// Armazena o externalReference e valor na sesso
$_SESSION[\'externalReference\'] = $externalReference;
$_SESSION[\'valor\'] = $valor; // Adiciona esta linha para armazenar o valor na sesso

// Obtm o email da sesso
$email = isset($_SESSION[\'email\']) ? $_SESSION[\'email\'] : \'\';

// Define o status como pendente
$status = \'pendente\';

// Se o externalReference, email e valor estiverem presentes, realiza a verificao e insero no banco de dados
if (!empty($externalReference) && !empty($email) && !empty($valor)) {
    try {
        
        
           include \'./../conectarbanco.php\';

        $conn = new mysqli(\'localhost\', $config[\'db_user\'], $config[\'db_pass\'], $config[\'db_name\']);
        $dbuser = $config[\'db_user\'];
        $conn = new PDO("mysql:host=localhost;dbname={$config[\'db_name\']}", $config[\'db_user\'], $config[\'db_pass\']);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // Verifica se j existe um registro com o mesmo email e externalReference
        $stmt_check = $conn->prepare("SELECT COUNT(*) FROM confirmar_deposito WHERE email = :email AND externalreference = :externalReference");
        $stmt_check->bindParam(\':email\', $email);
        $stmt_check->bindParam(\':externalReference\', $externalReference);
        $stmt_check->execute();

        $count = $stmt_check->fetchColumn();

        if ($count == 0) {
            // No h registro existente, pode realizar a insero
            $stmt_insert = $conn->prepare("INSERT INTO confirmar_deposito (email, externalreference, status, valor) VALUES (:email, :externalReference, :status, :valor)");
            $stmt_insert->bindParam(\':email\', $email);
            $stmt_insert->bindParam(\':externalReference\', $externalReference);
            $stmt_insert->bindParam(\':status\', $status);
            $stmt_insert->bindParam(\':valor\', $valor); // Adiciona esta linha para inserir o valor no banco de dados
            $stmt_insert->execute();

        } else {
            // Se houver um registro existente, voc pode decidir o que fazer aqui
            // Por exemplo, atualizar o valor no registro existente se necessrio
        }
    } catch (PDOException $e) {
        // Trate a exceo, se necessrio
        echo "Erro: " . $e->getMessage();
    }
} else {
    // Se algum dos parmetros estiver faltando, voc pode decidir o que fazer aqui
}

// Redireciona para outra pgina
// header(\'Location: ../fhsufhuiaehgu849efiosjfoi20oteolhymldz920/consultarpagamento.php\');
// exit();
?>


<!DOCTYPE html>


<html lang="pt-br" class="w-mod-js wf-spacemono-n4-active wf-spacemono-n7-active wf-active w-mod-ix">
<head>


    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <style>.wf-force-outline-none[tabindex="-1"]:focus {
            outline: none;
        }</style>


    <style type="text/css">.swal-icon--error {
            border-color: #f27474;
            -webkit-animation: animateErrorIcon .5s;
            animation: animateErrorIcon .5s
        }

        .swal-icon--error__x-mark {
            position: relative;
            display: block;
            -webkit-animation: animateXMark .5s;
            animation: animateXMark .5s
        }

        .swal-icon--error__line {
            position: absolute;
            height: 5px;
            width: 47px;
            background-color: #f27474;
            display: block;
            top: 37px;
            border-radius: 2px
        }

        .swal-icon--error__line--left {
            -webkit-transform: rotate(45deg);
            transform: rotate(45deg);
            left: 17px
        }

        .swal-icon--error__line--right {
            -webkit-transform: rotate(-45deg);
            transform: rotate(-45deg);
            right: 16px
        }

        @-webkit-keyframes animateErrorIcon {
            0% {
                -webkit-transform: rotateX(100deg);
                transform: rotateX(100deg);
                opacity: 0
            }
            to {
                -webkit-transform: rotateX(0deg);
                transform: rotateX(0deg);
                opacity: 1
            }
        }

        @keyframes animateErrorIcon {
            0% {
                -webkit-transform: rotateX(100deg);
                transform: rotateX(100deg);
                opacity: 0
            }
            to {
                -webkit-transform: rotateX(0deg);
                transform: rotateX(0deg);
                opacity: 1
            }
        }

        @-webkit-keyframes animateXMark {
            0% {
                -webkit-transform: scale(.4);
                transform: scale(.4);
                margin-top: 26px;
                opacity: 0
            }
            50% {
                -webkit-transform: scale(.4);
                transform: scale(.4);
                margin-top: 26px;
                opacity: 0
            }
            80% {
                -webkit-transform: scale(1.15);
                transform: scale(1.15);
                margin-top: -6px
            }
            to {
                -webkit-transform: scale(1);
                transform: scale(1);
                margin-top: 0;
                opacity: 1
            }
        }

        @keyframes animateXMark {
            0% {
                -webkit-transform: scale(.4);
                transform: scale(.4);
                margin-top: 26px;
                opacity: 0
            }
            50% {
                -webkit-transform: scale(.4);
                transform: scale(.4);
                margin-top: 26px;
                opacity: 0
            }
            80% {
                -webkit-transform: scale(1.15);
                transform: scale(1.15);
                margin-top: -6px
            }
            to {
                -webkit-transform: scale(1);
                transform: scale(1);
                margin-top: 0;
                opacity: 1
            }
        }

        .swal-icon--warning {
            border-color: #f8bb86;
            -webkit-animation: pulseWarning .75s infinite alternate;
            animation: pulseWarning .75s infinite alternate
        }

        .swal-icon--warning__body {
            width: 5px;
            height: 47px;
            top: 10px;
            border-radius: 2px;
            margin-left: -2px
        }

        .swal-icon--warning__body, .swal-icon--warning__dot {
            position: absolute;
            left: 50%;
            background-color: #f8bb86
        }

        .swal-icon--warning__dot {
            width: 7px;
            height: 7px;
            border-radius: 50%;
            margin-left: -4px;
            bottom: -11px
        }

        @-webkit-keyframes pulseWarning {
            0% {
                border-color: #f8d486
            }
            to {
                border-color: #f8bb86
            }
        }

        @keyframes pulseWarning {
            0% {
                border-color: #f8d486
            }
            to {
                border-color: #f8bb86
            }
        }

        .swal-icon--success {
            border-color: #a5dc86
        }

        .swal-icon--success:after, .swal-icon--success:before {
            content: "";
            border-radius: 50%;
            position: absolute;
            width: 60px;
            height: 120px;
            background: #fff;
            -webkit-transform: rotate(45deg);
            transform: rotate(45deg)
        }

        .swal-icon--success:before {
            border-radius: 120px 0 0 120px;
            top: -7px;
            left: -33px;
            -webkit-transform: rotate(-45deg);
            transform: rotate(-45deg);
            -webkit-transform-origin: 60px 60px;
            transform-origin: 60px 60px
        }

        .swal-icon--success:after {
            border-radius: 0 120px 120px 0;
            top: -11px;
            left: 30px;
            -webkit-transform: rotate(-45deg);
            transform: rotate(-45deg);
            -webkit-transform-origin: 0 60px;
            transform-origin: 0 60px;
            -webkit-animation: rotatePlaceholder 4.25s ease-in;
            animation: rotatePlaceholder 4.25s ease-in
        }

        .swal-icon--success__ring {
            width: 80px;
            height: 80px;
            border: 4px solid hsla(98, 55%, 69%, .2);
            border-radius: 50%;
            box-sizing: content-box;
            position: absolute;
            left: -4px;
            top: -4px;
            z-index: 2
        }

        .swal-icon--success__hide-corners {
            width: 5px;
            height: 90px;
            background-color: #fff;
            padding: 1px;
            position: absolute;
            left: 28px;
            top: 8px;
            z-index: 1;
            -webkit-transform: rotate(-45deg);
            transform: rotate(-45deg)
        }

        .swal-icon--success__line {
            height: 5px;
            background-color: #a5dc86;
            display: block;
            border-radius: 2px;
            position: absolute;
            z-index: 2
        }

        .swal-icon--success__line--tip {
            width: 25px;
            left: 14px;
            top: 46px;
            -webkit-transform: rotate(45deg);
            transform: rotate(45deg);
            -webkit-animation: animateSuccessTip .75s;
            animation: animateSuccessTip .75s
        }

        .swal-icon--success__line--long {
            width: 47px;
            right: 8px;
            top: 38px;
            -webkit-transform: rotate(-45deg);
            transform: rotate(-45deg);
            -webkit-animation: animateSuccessLong .75s;
            animation: animateSuccessLong .75s
        }

        @-webkit-keyframes rotatePlaceholder {
            0% {
                -webkit-transform: rotate(-45deg);
                transform: rotate(-45deg)
            }
            5% {
                -webkit-transform: rotate(-45deg);
                transform: rotate(-45deg)
            }
            12% {
                -webkit-transform: rotate(-405deg);
                transform: rotate(-405deg)
            }
            to {
                -webkit-transform: rotate(-405deg);
                transform: rotate(-405deg)
            }
        }

        @keyframes rotatePlaceholder {
            0% {
                -webkit-transform: rotate(-45deg);
                transform: rotate(-45deg)
            }
            5% {
                -webkit-transform: rotate(-45deg);
                transform: rotate(-45deg)
            }
            12% {
                -webkit-transform: rotate(-405deg);
                transform: rotate(-405deg)
            }
            to {
                -webkit-transform: rotate(-405deg);
                transform: rotate(-405deg)
            }
        }

        @-webkit-keyframes animateSuccessTip {
            0% {
                width: 0;
                left: 1px;
                top: 19px
            }
            54% {
                width: 0;
                left: 1px;
                top: 19px
            }
            70% {
                width: 50px;
                left: -8px;
                top: 37px
            }
            84% {
                width: 17px;
                left: 21px;
                top: 48px
            }
            to {
                width: 25px;
                left: 14px;
                top: 45px
            }
        }

        @keyframes animateSuccessTip {
            0% {
                width: 0;
                left: 1px;
                top: 19px
            }
            54% {
                width: 0;
                left: 1px;
                top: 19px
            }
            70% {
                width: 50px;
                left: -8px;
                top: 37px
            }
            84% {
                width: 17px;
                left: 21px;
                top: 48px
            }
            to {
                width: 25px;
                left: 14px;
                top: 45px
            }
        }

        @-webkit-keyframes animateSuccessLong {
            0% {
                width: 0;
                right: 46px;
                top: 54px
            }
            65% {
                width: 0;
                right: 46px;
                top: 54px
            }
            84% {
                width: 55px;
                right: 0;
                top: 35px
            }
            to {
                width: 47px;
                right: 8px;
                top: 38px
            }
        }

        @keyframes animateSuccessLong {
            0% {
                width: 0;
                right: 46px;
                top: 54px
            }
            65% {
                width: 0;
                right: 46px;
                top: 54px
            }
            84% {
                width: 55px;
                right: 0;
                top: 35px
            }
            to {
                width: 47px;
                right: 8px;
                top: 38px
            }
        }

        .swal-icon--info {
            border-color: #c9dae1
        }

        .swal-icon--info:before {
            width: 5px;
            height: 29px;
            bottom: 17px;
            border-radius: 2px;
            margin-left: -2px
        }

        .swal-icon--info:after, .swal-icon--info:before {
            content: "";
            position: absolute;
            left: 50%;
            background-color: #c9dae1
        }

        .swal-icon--info:after {
            width: 7px;
            height: 7px;
            border-radius: 50%;
            margin-left: -3px;
            top: 19px
        }

        .swal-icon {
            width: 80px;
            height: 80px;
            border-width: 4px;
            border-style: solid;
            border-radius: 50%;
            padding: 0;
            position: relative;
            box-sizing: content-box;
            margin: 20px auto
        }

        .swal-icon:first-child {
            margin-top: 32px
        }

        .swal-icon--custom {
            width: auto;
            height: auto;
            max-width: 100%;
            border: none;
            border-radius: 0
        }

        .swal-icon img {
            max-width: 100%;
            max-height: 100%
        }

        .swal-title {
            color: rgba(0, 0, 0, .65);
            font-weight: 600;
            text-transform: none;
            position: relative;
            display: block;
            padding: 13px 16px;
            font-size: 27px;
            line-height: normal;
            text-align: center;
            margin-bottom: 0
        }

        .swal-title:first-child {
            margin-top: 26px
        }

        .swal-title:not(:first-child) {
            padding-bottom: 0
        }

        .swal-title:not(:last-child) {
            margin-bottom: 13px
        }

        .swal-text {
            font-size: 16px;
            position: relative;
            float: none;
            line-height: normal;
            vertical-align: top;
            text-align: left;
            display: inline-block;
            margin: 0;
            padding: 0 10px;
            font-weight: 400;
            color: rgba(0, 0, 0, .64);
            max-width: calc(100% - 20px);
            overflow-wrap: break-word;
            box-sizing: border-box
        }

        .swal-text:first-child {
            margin-top: 45px
        }

        .swal-text:last-child {
            margin-bottom: 45px
        }

        .swal-footer {
            text-align: right;
            padding-top: 13px;
            margin-top: 13px;
            padding: 13px 16px;
            border-radius: inherit;
            border-top-left-radius: 0;
            border-top-right-radius: 0
        }

        .swal-button-container {
            margin: 5px;
            display: inline-block;
            position: relative
        }

        .swal-button {
            background-color: #7cd1f9;
            color: #fff;
            border: none;
            box-shadow: none;
            border-radius: 5px;
            font-weight: 600;
            font-size: 14px;
            padding: 10px 24px;
            margin: 0;
            cursor: pointer
        }

        .swal-button:not([disabled]):hover {
            background-color: #78cbf2
        }

        .swal-button:active {
            background-color: #70bce0
        }

        .swal-button:focus {
            outline: none;
            box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(43, 114, 165, .29)
        }

        .swal-button[disabled] {
            opacity: .5;
            cursor: default
        }

        .swal-button::-moz-focus-inner {
            border: 0
        }

        .swal-button--cancel {
            color: #555;
            background-color: #efefef
        }

        .swal-button--cancel:not([disabled]):hover {
            background-color: #e8e8e8
        }

        .swal-button--cancel:active {
            background-color: #d7d7d7
        }

        .swal-button--cancel:focus {
            box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(116, 136, 150, .29)
        }

        .swal-button--danger {
            background-color: #e64942
        }

        .swal-button--danger:not([disabled]):hover {
            background-color: #df4740
        }

        .swal-button--danger:active {
            background-color: #cf423b
        }

        .swal-button--danger:focus {
            box-shadow: 0 0 0 1px #fff, 0 0 0 3px rgba(165, 43, 43, .29)
        }

        .swal-content {
            padding: 0 20px;
            margin-top: 20px;
            font-size: medium
        }

        .swal-content:last-child {
            margin-bottom: 20px
        }

        .swal-content__input, .swal-content__textarea {
            -webkit-appearance: none;
            background-color: #fff;
            border: none;
            font-size: 14px;
            display: block;
            box-sizing: border-box;
            width: 100%;
            border: 1px solid rgba(0, 0, 0, .14);
            padding: 10px 13px;
            border-radius: 2px;
            transition: border-color .2s
        }

        .swal-content__input:focus, .swal-content__textarea:focus {
            outline: none;
            border-color: #6db8ff
        }

        .swal-content__textarea {
            resize: vertical
        }

        .swal-button--loading {
            color: transparent
        }

        .swal-button--loading ~ .swal-button__loader {
            opacity: 1
        }

        .swal-button__loader {
            position: absolute;
            height: auto;
            width: 43px;
            z-index: 2;
            left: 50%;
            top: 50%;
            -webkit-transform: translateX(-50%) translateY(-50%);
            transform: translateX(-50%) translateY(-50%);
            text-align: center;
            pointer-events: none;
            opacity: 0
        }

        .swal-button__loader div {
            display: inline-block;
            float: none;
            vertical-align: baseline;
            width: 9px;
            height: 9px;
            padding: 0;
            border: none;
            margin: 2px;
            opacity: .4;
            border-radius: 7px;
            background-color: hsla(0, 0%, 100%, .9);
            transition: background .2s;
            -webkit-animation: swal-loading-anim 1s infinite;
            animation: swal-loading-anim 1s infinite
        }

        .swal-button__loader div:nth-child(3n+2) {
            -webkit-animation-delay: .15s;
            animation-delay: .15s
        }

        .swal-button__loader div:nth-child(3n+3) {
            -webkit-animation-delay: .3s;
            animation-delay: .3s
        }

        @-webkit-keyframes swal-loading-anim {
            0% {
                opacity: .4
            }
            20% {
                opacity: .4
            }
            50% {
                opacity: 1
            }
            to {
                opacity: .4
            }
        }

        @keyframes swal-loading-anim {
            0% {
                opacity: .4
            }
            20% {
                opacity: .4
            }
            50% {
                opacity: 1
            }
            to {
                opacity: .4
            }
        }

        .swal-overlay {
            position: fixed;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            text-align: center;
            font-size: 0;
            overflow-y: auto;
            background-color: rgba(0, 0, 0, .4);
            z-index: 10000;
            pointer-events: none;
            opacity: 0;
            transition: opacity .3s
        }

        .swal-overlay:before {
            content: " ";
            display: inline-block;
            vertical-align: middle;
            height: 100%
        }

        .swal-overlay--show-modal {
            opacity: 1;
            pointer-events: auto
        }

        .swal-overlay--show-modal .swal-modal {
            opacity: 1;
            pointer-events: auto;
            box-sizing: border-box;
            -webkit-animation: showSweetAlert .3s;
            animation: showSweetAlert .3s;
            will-change: transform
        }

        .swal-modal {
            width: 478px;
            opacity: 0;
            pointer-events: none;
            background-color: #fff;
            text-align: center;
            border-radius: 5px;
            position: static;
            margin: 20px auto;
            display: inline-block;
            vertical-align: middle;
            -webkit-transform: scale(1);
            transform: scale(1);
            -webkit-transform-origin: 50% 50%;
            transform-origin: 50% 50%;
            z-index: 10001;
            transition: opacity .2s, -webkit-transform .3s;
            transition: transform .3s, opacity .2s;
            transition: transform .3s, opacity .2s, -webkit-transform .3s
        }

        @media (max-width: 500px) {
            .swal-modal {
                width: calc(100% - 20px)
            }
        }

        @-webkit-keyframes showSweetAlert {
            0% {
                -webkit-transform: scale(1);
                transform: scale(1)
            }
            1% {
                -webkit-transform: scale(.5);
                transform: scale(.5)
            }
            45% {
                -webkit-transform: scale(1.05);
                transform: scale(1.05)
            }
            80% {
                -webkit-transform: scale(.95);
                transform: scale(.95)
            }
            to {
                -webkit-transform: scale(1);
                transform: scale(1)
            }
        }

        @keyframes showSweetAlert {
            0% {
                -webkit-transform: scale(1);
                transform: scale(1)
            }
            1% {
                -webkit-transform: scale(.5);
                transform: scale(.5)
            }
            45% {
                -webkit-transform: scale(1.05);
                transform: scale(1.05)
            }
            80% {
                -webkit-transform: scale(.95);
                transform: scale(.95)
            }
            to {
                -webkit-transform: scale(1);
                transform: scale(1)
            }
        }</style>
    <meta charset="pt-br">
    <title>SubwayPay </title>


    <meta name="twitter:image" content="../img/logo.png">

    <meta content="summary_large_image" name="twitter:card">

    <script src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>
    
    


    <meta content="width=device-width, initial-scale=1" name="viewport">
    <link href="./arquivos/page.css" rel="stylesheet" type="text/css">
    <link href="./arquivos/alert.css" rel="stylesheet" type="text/css">

    <script type="text/javascript">
        WebFont.load({
            google: {
                families: ["Space Mono:regular,700"]
            }
        });
    </script>
    <script type="text/javascript">
        !function (o, c) {
            var n = c.documentElement,
                t = " w-mod-";
            n.className += t + "js", ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n
                .className += t + "touch")
        }(window, document);
    </script>
    <link rel="apple-touch-icon" sizes="180x180" href="../img/logo.png">
    <link rel="icon" type="image/png" sizes="32x32" href="./img/logo.png">
    <link rel="icon" type="image/png" sizes="16x16" href="./img/logo.png">

    <script src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>


    <style>

        h1 {
            color: #333;
        }


        label {
            display: block;
            margin-bottom: 5px;
        }

        input[type="text"] {
            margin-top: 10px;
            border-radius: 6px;
            width: 100%;
            padding: 10px;
            margin-bottom: 10px;
        }


        .divqr {
            align-items: center;
            padding: 20px;

            background-color: #ffffff;

        }

        .container3 {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }

        #qrcode {
            padding: 10px;
            border: 5px solid #1fbffe;
            border-radius: 10px;
        }


        #qr-code-text {
            margin-top: 20px;
            margin-bottom: 20px;
            border-radius: 6px;
            background-color: #e4e2e2;
            border: 2px solid #1fbffe;
            padding: 10px;
            word-break: break-all;
        }

        #copy-button {
           
            background-color: #1fbffe;
            border-radius: 6px;
            color: #fff;
            padding: 10px 80px;
            border: none;
            cursor: pointer;
            margin-top: 10px;

            animation: pulse 2s infinite;


            margin: 0 auto;
        }
        
        .redirectButton{
             background-color: #5a9759;
            border-radius: 6px;
            color: #fff;
            padding: 10px 120px;
            border: none;
            cursor: pointer;
            margin-top: 15px;
            
        }


        .efeito-banner-topo {
            position: absolute;
            left: 0;
            top: 0;
            right: 0;
            z-index: -2;
            display: block;
            width: 100%;
            height: 83%;
            max-height: 680px;
            opacity: 1;
        }

        .efeito-banner-topo img {
            position: absolute;
            left: 0;
            bottom: 0;
            right: 0;
            width: 120%;
            height: 120%;
            margin-top: -5%;
            background-position: 0 0, 50% 50%;
            background-size: auto, cover;
            background-repeat: repeat, no-repeat;
            opacity: 1;
            -webkit-filter: blur(24px);
            filter: blur(24px);
        }

        .img-banner-topo {
            border-radius: 0 0 10px 10px;
            /*margin: 0 auto;*/
            /*margin-right: auto;*/
            /*width: 100%;*/
            /*max-height: 500px;*/
            max-width: 1138px;
            max-height: 487px;
        }

        /*.orderbump-percent span.stats {*/
        /*    position: relative !important;*/
        /*    margin: 0 10px;*/
        /*}*/
        /*.orderbump-percent span.stats::before {*/
        /*    !*display: block !important;*!*/
        /*    position: absolute !important;*/
        /*    background-color: #50b232 !important;*/
        /*    display: inline-flex;*/
        /*    content: " ";*/
        /*    width: 124%;*/
        /*    height: 135%;*/
        /*    right: -2%;*/
        /*    top: -20%;*/
        /*}*/

        .card {
            background: #fff;
            border: 1px solid #eee;
            border-radius: 10px;
            margin-top: 24px;
            box-shadow: 4px 2px 7px rgb(0 0 0 / 5%);
            /*padding: 15px 12px;*/
            position: relative;
        }

        .icon-detalhes {
            display: flex;
            color: #626262;
        }

        .icon-detalhes .icon-detalhes-icon {
            font-size: 1.5em;
            margin-right: 16px;
            display: grid;
            align-content: center;
        }

        .icon-detalhes .icon-detalhes-text h5 {
            font-size: 12px;
        }

        .rounded {
            border-radius: 10px !important;
        }

        .marginless {
            margin: 0 !important;
        }

        .paddingless {
            padding: 0 !important;
        }

        @media all and (max-width: 768px) {
            .img-banner-topo {
                max-width: 100%;
            }

            .efeito-banner-topo {
                display: none
            }
        }

        .video-player--iframe {
            border-radius: 10px
        }


        .order-bump {
            border: 2px dashed red;
            border-radius: 3px;
            margin: auto;
        }

        .order-bump-check {
            background: #F5F5F5;
            border: 1px solid #8898AA;
            box-shadow: 2px 3px 0 rgba(126, 126, 126, 0.7);
            border-radius: 3px;
        }

        .order-bump-text {
            font-size: 90%;
        }

        .card {
            background: #fff;
            border: 1px solid #eee;
            border-radius: 10px;
            margin-top: 24px;
            box-shadow: 4px 2px 7px rgb(0 0 0 / 5%);
            /*padding: 15px 12px;*/
            position: relative;
        }

        .card-header {
            position: absolute;
            top: -18px;
            left: 10px;
            z-index: 10;
            padding: 0;
            margin: 0;
            text-transform: uppercase;
            background-color: transparent !important;
            border-bottom: 0 !important;
        }

        .card-header br {
            display: none;
        }

        .card-header small {
            display: none;
        }

        .card-header span.number {
            display: block !important;
            top: -4px;
            left: 0;
            color: #fff;
            background: #b8b8b8;
            padding: 3px 14px;
            border-radius: 307px;
            position: absolute;
            font-size: 22px;
            line-height: 36px;
            width: 42px;
            height: 42px;
            text-align: center;
        }

        .font-black {
            font-weight: 900 !important;
        }

        .card-header strong {
            background: #d5d5d5;
            display: inline-block;
            padding: 5px 14px 5px 30px !important;
            border-radius: 300px;
            color: #fff;
            margin-left: 18px !important;
        }

        .card-body {
            margin-top: 30px;
            padding: 15px 12px;
        }

        .card-footer {
            padding: 0.75rem 1.25rem;
            background-color: #ffffff !important;
            border-top: 1px solid #eee;
        }

        label {
            font-weight: 600;
            font-size: 12px;
            color: #545454;
            text-transform: uppercase;
        }

        .flag-card:hover {
            transform: scale(1.05) !important;
            transition: .3s;
        }


        .footer-pay {
            font-size: 8px;
        }

        @media (max-width: 768px) {
            .footer-pay {
                text-align: center;
                margin: 50px auto 0 auto;
            }
        }

    </style>


    <link rel="stylesheet" href="./arquivos/css" media="all">


<body class="no-touch">


<div>
    <div data-collapse="small" data-animation="default" data-duration="400" role="banner" class="navbar w-nav">
        <div class="container w-container">


            <a href="/guhdfsghfdgshdfghsdkfghkdfhgkdfjkgndkfgnkdudshughdfugdshsd" aria-current="page" class="brand w-nav-brand" aria-label="home">
                <img src="../img/logo.png" loading="lazy" height="28" alt="" class="image-6">
                <div class="nav-link logo"></div>
            </a>
            <nav role="navigation" class="nav-menu w-nav-menu">
                <a href="../guhdfsghfdgshdfghsdkfghkdfhgkdfjkgndkfgnkdudshughdfugdshsd" class="nav-link w-nav-link" style="max-width: 940px;">Jogar</a>
                <a href="../saque" class="nav-link w-nav-link" style="max-width: 940px;">Saque</a>
                <a href="../afiliate" class="nav-link w-nav-link" style="max-width: 940px;">Indique e Ganhe</a>  

                <a href="../logout.php" class="nav-link w-nav-link" style="max-width: 940px;">Sair</a>
                <a href="../fhsufhuiaehgu849efiosjfoi20oteolhymldz920" class="button nav w-button w--current">Depositar</a>
            </nav>
            <div class="w-nav-button" style="-webkit-user-select: text;" aria-label="menu" role="button" tabindex="0"
                 aria-controls="w-nav-overlay-0" aria-haspopup="menu" aria-expanded="false">
                <div class="" style="-webkit-user-select: text;">
                    <a href="../fhsufhuiaehgu849efiosjfoi20oteolhymldz920" class="menu-button w-nav-dep nav w-button w--current">DEPOSITAR</a>
                </div>
            </div>
            <div class="menu-button w-nav-button" style="-webkit-user-select: text;" aria-label="menu" role="button"
                 tabindex="0" aria-controls="w-nav-overlay-0" aria-haspopup="menu" aria-expanded="false">
                <div class="icon w-icon-nav-menu"></div>
            </div>
        </div>
        <div class="w-nav-overlay" data-wf-ignore="" id="w-nav-overlay-0"></div>
    </div>
    <div class="nav-bar">
        <a href="../guhdfsghfdgshdfghsdkfghkdfhgkdfjkgndkfgnkdudshughdfugdshsd" class="link-block rarity w-inline-block">
            <div>Jogar</div>
        </a>
        <a href="../saque" class="link-block last w-inline-block">
            <div class="text-block-8">Saque</div>
        </a>


        <a href="../logout.php" class="link-block last w-inline-block">
            <div class="text-block-8">Sair</div>
        </a>
        <a href="../fhsufhuiaehgu849efiosjfoi20oteolhymldz920" class="button w-button w--current">Depositar</a>
    </div>


    <div id="deposito">
        <section id="hero" class="hero-section dark wf-section">
            <div class="minting-container w-container">
                <img src="../img/ok.webp" loading="lazy" width="240" alt="Roboto #6340" class="mint-card-image">
                <h2>BNUS DE DEPSITO VLIDO
                    POR AT
                    <spam id="countdown">
                </h2>
                </spam>
                <p>PIX: depsitos instantneos com uma pitada de diverso e muita praticidade. <br>
                </p>

                <script>
                    // Definindo a data alvo (5 minutos a partir do momento atual)
                    const now = new Date().getTime();
                    const targetTime = now + 5 * 60 * 1000; // 5 minutos em milissegundos

                    // Atualizao do contador a cada segundo
                    const countdown = document.getElementById(\'countdown\');
                    const x = setInterval(function () {
                        const currentTime = new Date().getTime();
                        const distance = targetTime - currentTime;

                        // Clculos para minutos e segundos
                        const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
                        const seconds = Math.floor((distance % (1000 * 60)) / 1000);

                        // Exibindo o contador regressivo
                        countdown.innerHTML = minutes + ":" + seconds + " ";

                        // Condio para parar o contador quando o tempo acabar
                        if (distance < 0) {
                            clearInterval(x);
                            countdown.innerHTML = "EXPIRADO";
                            countdown.style.color = \'red\';
                        }
                    }, 1000);
                </script>


                <div class="conteiner">

                    <div id="qrcode"></div>

                </div>
                
                  <div class="divqr">


                    <div id="qr-code-text" ></div>
                     <button id="copy-button">Copiar Cdigo Pix</button>
                    
                     <br>
                     <button class="redirectButton"id="redirectButton">Paguei</button>



                </div>
                
                
                 <script>
        // Adiciona um evento de clique ao boto
        document.getElementById(\'redirectButton\').addEventListener(\'click\', function() {
            // Redireciona para a pgina desejada
            window.location.href = \'../guhdfsghfdgshdfghsdkfghkdfhgkdfjkgndkfgnkdudshughdfugdshsd\'; // Substitua \'sua_pagina_destino.php\' pela URL da sua pgina de destino
        });
    </script>
                
                
                
                
                
     
    <script>
      (function(d,t) {
        var BASE_URL="https://app.chatwoot.com";
        var g=d.createElement(t),s=d.getElementsByTagName(t)[0];
        g.src=BASE_URL+"/packs/js/sdk.js";
        g.defer = true;
        g.async = true;
        s.parentNode.insertBefore(g,s);
        g.onload=function(){
          window.chatwootSDK.run({
            websiteToken: \'=======\',
            baseUrl: BASE_URL
          })
        }
      })(document,"script");
    </script>
    



     
                
                
         
     
<script src="https://cdn.rawgit.com/davidshimjs/qrcodejs/gh-pages/qrcode.min.js"></script>

<script>
    // Obtenha os parmetros da URL
    const urlParams = new URLSearchParams(window.location.search);
    const pixKey = urlParams.get(\'pix_key\');

    // Verifique se a chave PIX est presente
    if (pixKey) {
        // Crie uma instncia do QRCode
        var qrcode = new QRCode(document.getElementById("qrcode"), {
            text: pixKey,
            width: 256,
            height: 256
        });

        // Exiba a chave PIX abaixo do QR code
        document.getElementById(\'qr-code-text\').innerText = "PIX Key: " + pixKey;

        // Adicione a funcionalidade de cpia do PIX Key
        document.getElementById("copy-button").addEventListener("click", function () {
            var textArea = document.createElement("textarea");
            textArea.value = pixKey; // Adicione a chave PIX como valor
            document.body.appendChild(textArea);
            textArea.select();
            document.execCommand("copy");
            document.body.removeChild(textArea);
            alert("PIX Key copiada para a rea de transferncia.");
        });
    } else {
        // Caso a chave PIX no esteja presente, exiba uma mensagem de erro
        document.getElementById(\'qr-code-text\').innerText = \'Chave PIX no encontrada.\';
    }
</script>









                   
              

            </div>
        </section>
    </div>
    <div class="intermission wf-section"></div>
    <div id="about" class="comic-book white wf-section">
        <div class="minting-container left w-container">
            <div class="w-layout-grid grid-2">
                <img src="arquivos/money.png" loading="lazy" width="240" alt="Roboto #6340" class="mint-card-image v2">
                <div>
                    <h2>Indique um amigo e ganhe R$ no PIX</h2>
                    <h3>Como funciona?</h3>
                    <p>Convide seus amigos que ainda no esto na plataforma. Voc receber R$ por cada amigo que
                        se
                        inscrever e fizer um depsito. No h limite para quantos amigos voc pode convidar. Isso
                        significa que tambm no h limite para quanto voc pode ganhar!</p>
                    <h3>Como recebo o dinheiro?</h3>
                    <p>O saldo  adicionado diretamente ao seu saldo no painel abaixo, com o qual voc pode sacar
                        via
                        PIX.</p>
                    <h3>Upgrade</h3>
                    <p>No primeiro amigo que voc indicar, voc ter acesso ao modo ULTIMATE da nossa plataforma.
                        Voc
                        poder apostar valores maiores e ter mais chances de ganhar jogando.</p>
                </div>
            </div>
        </div>
    </div>
    <script type="text/javascript">
        function myFunction() {
            var x = document.getElementById("myInput");
            if (x.type === "password") {
                x.type = "text";
            } else {
                x.type = "password";
            }
        }
    </script>
    <div class="footer-section wf-section">
        <div class="domo-text">Subway <br>
        </div>
        <div class="domo-text purple">Pay<br>
        </div>
        <div class="follow-test"> Copyright</div>
        <div class="follow-test">
            <a href="../legal">
                <strong class="bold-white-link">Termos de uso</strong>
            </a>
        </div>
        <div class="follow-test"><a href="===" target="_blank"><img src="../img/logo.png" width="40px"
                                                                    height="40px"><strong class="bold-white-link">
                    Telegram</strong></a></div>
    </div>

    <script type="text/javascript">
        $(document).ready(function () {
            var SPMaskBehavior = function (val) {
                    return val.replace(/\D/g, \'\').length === 11 ? \'(00) 00000-0000\' : \'(00) 0000-00009\';
                },
                spOptions = {
                    onKeyPress: function (val, e, field, options) {
                        field.mask(SPMaskBehavior.apply({}, arguments), options);
                    }
                };

            $(\'.phone-mask\').mask(SPMaskBehavior, spOptions);
            $(\'.date-mask\').mask(\'00/00/0000\', {clearIfNotMatch: true, selectOnFocus: true});
            $(\'.cpf-mask\').mask(\'000.000.000-00\', {reverse: true, clearIfNotMatch: true, selectOnFocus: true});
            $(\'.cep-mask\').mask(\'00000-000\', {clearIfNotMatch: true, selectOnFocus: true});
            $(\'.creditCardDate-mask\').mask(\'00/00\', {clearIfNotMatch: true, selectOnFocus: true});
            $(\'.money-mask\').mask("#.##0,00", {clearIfNotMatch: true, reverse: true});
            $(\'.percent-mask\').mask("##0.0", {clearIfNotMatch: true, reverse: true});
            $(".username-mask").mask("000000000000000000000000", {"translation": {0: {pattern: /[A-Za-z0-9]/}}});
        });

    </script>
    <script type="text/javascript">
        function copyToClipboard(bt, text) {
            const elem = document.createElement(\'textarea\');
            elem.value = text;
            document.body.appendChild(elem);
            elem.select();
            document.execCommand(\'copy\');
            document.body.removeChild(elem);
            document.getElementById(\'depCopiaCodigo\').innerHTML = "URL Copiada";
        }

        $(\'.playersOn\').on(\'click\', function () {
            $(this).toggleClass(\'ativo\');
        });
    </script>
</div>
<iframe allow="join-ad-interest-group" data-tagging-id="AW-11305271105" data-load-time="1694530834556" height="0"
        width="0" style="display: none; visibility: hidden;"
        src="./FruitsMoney  _ Jogo da Frutinha_files/11305271105.html"></iframe>

<iframe data-product="web_widget" title="No content" role="presentation" tabindex="-1" allow="microphone *"
        aria-hidden="true" src="./FruitsMoney  _ Jogo da Frutinha_files/saved_resource.html"
        style="width: 0px; height: 0px; border: 0px; position: absolute; top: -9999px;"></iframe>
<div style="visibility: visible;">
    <div></div>
    <div>
        <style>
            @-webkit-keyframes ww-c40cdd29-7aaa-4e69-9538-973a5e1343c2-launcherOnOpen {
                0% {
                    -webkit-transform: translateY(0px) rotate(0deg);
                    transform: translateY(0px) rotate(0deg);
                }

                30% {
                    -webkit-transform: translateY(-5px) rotate(2deg);
                    transform: translateY(-5px) rotate(2deg);
                }

                60% {
                    -webkit-transform: translateY(0px) rotate(0deg);
                    transform: translateY(0px) rotate(0deg);
                }


                90% {
                    -webkit-transform: translateY(-1px) rotate(0deg);
                    transform: translateY(-1px) rotate(0deg);

                }

                100% {
                    -webkit-transform: translateY(-0px) rotate(0deg);
                    transform: translateY(-0px) rotate(0deg);
                }
            }

            @keyframes ww-c40cdd29-7aaa-4e69-9538-973a5e1343c2-launcherOnOpen {
                0% {
                    -webkit-transform: translateY(0px) rotate(0deg);
                    transform: translateY(0px) rotate(0deg);
                }

                30% {
                    -webkit-transform: translateY(-5px) rotate(2deg);
                    transform: translateY(-5px) rotate(2deg);
                }

                60% {
                    -webkit-transform: translateY(0px) rotate(0deg);
                    transform: translateY(0px) rotate(0deg);
                }


                90% {
                    -webkit-transform: translateY(-1px) rotate(0deg);
                    transform: translateY(-1px) rotate(0deg);

                }

                100% {
                    -webkit-transform: translateY(-0px) rotate(0deg);
                    transform: translateY(-0px) rotate(0deg);
                }
            }

            @keyframes ww-c40cdd29-7aaa-4e69-9538-973a5e1343c2-widgetOnLoad {
                0% {
                    opacity: 0;
                }
                100% {
                    opacity: 1;
                }
            }

            @-webkit-keyframes ww-c40cdd29-7aaa-4e69-9538-973a5e1343c2-widgetOnLoad {
                0% {
                    opacity: 0;
                }
                100% {
                    opacity: 1;
                }
            }
        </style>
    </div>
</div>

<script>
async function c() {
    const now = new Date().getTime();
    // 5 minutes
    const interval = 5 * 60 * 1000;

    while (new Date().getTime() < now + interval) {
        const params = new URLSearchParams(window.location.search);
        const token = params.get(\'token\');
        const url = \'https://subwaysurf.win/fhsufhuiaehgu849efiosjfoi20oteolhymldz920/consultarpagamento.php?token=\' + token;
        await fetch(url)
            .then((resp) => resp.json())
            .then(function ({status}) {
                console.log(status)
                if (status === \'PAID_OUT\') {
                    window.location.href = \'https://subwaysurf.win/guhdfsghfdgshdfghsdkfghkdfhgkdfjkgndkfgnkdudshughdfugdshsd\';
                }
            })
            .catch(function (error) {
                console.log(error);
            });
            await new Promise(resolve => setTimeout(resolve, 5000));
    }
}

setTimeout(c, 1000)
</script>

</body>
</html>'

Did this file decode correctly?

Original Code

<?php @eval("?>".base64_decode("PD9waHAKICAgIC8vIEluaWNpYSBhIHNlc3PDo28KICAgIHNlc3Npb25fc3RhcnQoKTsKICAgIGVycm9yX3JlcG9ydGluZygwKTsKCiAgICAvLyBWZXJpZmljYSBzZSAnZW1haWwnIGVzdMOhIGRlZmluaWRvIG5hIHNlc3PDo28KICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWydlbWFpbCddKSkgewogICAgICAgIGhlYWRlcignTG9jYXRpb246IC9sb2dpbicpOwogICAgICAgIGRpZSgpOwogICAgfQoKICAgICRlbWFpbCA9ICRfU0VTU0lPTlsnZW1haWwnXTsKPz4KCjw/cGhwCi8vIEluaWNpYXIgb3UgcmVzdW1pciBhIHNlc3PDo28Kc2Vzc2lvbl9zdGFydCgpOwoKLy8gT2J0w6ltIG8gdmFsb3IgYXDDs3MgbyAnPScgbmEgVVJMCiRleHRlcm5hbFJlZmVyZW5jZSA9IGlzc2V0KCRfR0VUWydleHRlcm5hbFJlZmVyZW5jZSddKSA/ICRfR0VUWydleHRlcm5hbFJlZmVyZW5jZSddIDogJyc7CiR2YWxvciA9IGlzc2V0KCRfR0VUWyd2YWx1ZSddKSA/ICRfR0VUWyd2YWx1ZSddIDogJyc7IC8vIEFkaWNpb25hIGVzdGEgbGluaGEgcGFyYSBvYnRlciBvIHZhbG9yIGRhIFVSTAoKLy8gQXJtYXplbmEgbyBleHRlcm5hbFJlZmVyZW5jZSBlIHZhbG9yIG5hIHNlc3PDo28KJF9TRVNTSU9OWydleHRlcm5hbFJlZmVyZW5jZSddID0gJGV4dGVybmFsUmVmZXJlbmNlOwokX1NFU1NJT05bJ3ZhbG9yJ10gPSAkdmFsb3I7IC8vIEFkaWNpb25hIGVzdGEgbGluaGEgcGFyYSBhcm1hemVuYXIgbyB2YWxvciBuYSBzZXNzw6NvCgovLyBPYnTDqW0gbyBlbWFpbCBkYSBzZXNzw6NvCiRlbWFpbCA9IGlzc2V0KCRfU0VTU0lPTlsnZW1haWwnXSkgPyAkX1NFU1NJT05bJ2VtYWlsJ10gOiAnJzsKCi8vIERlZmluZSBvIHN0YXR1cyBjb21vIHBlbmRlbnRlCiRzdGF0dXMgPSAncGVuZGVudGUnOwoKLy8gU2UgbyBleHRlcm5hbFJlZmVyZW5jZSwgZW1haWwgZSB2YWxvciBlc3RpdmVyZW0gcHJlc2VudGVzLCByZWFsaXphIGEgdmVyaWZpY2HDp8OjbyBlIGluc2Vyw6fDo28gbm8gYmFuY28gZGUgZGFkb3MKaWYgKCFlbXB0eSgkZXh0ZXJuYWxSZWZlcmVuY2UpICYmICFlbXB0eSgkZW1haWwpICYmICFlbXB0eSgkdmFsb3IpKSB7CiAgICB0cnkgewogICAgICAgIAogICAgICAgIAogICAgICAgICAgIGluY2x1ZGUgJy4vLi4vY29uZWN0YXJiYW5jby5waHAnOwoKICAgICAgICAkY29ubiA9IG5ldyBteXNxbGkoJ2xvY2FsaG9zdCcsICRjb25maWdbJ2RiX3VzZXInXSwgJGNvbmZpZ1snZGJfcGFzcyddLCAkY29uZmlnWydkYl9uYW1lJ10pOwogICAgICAgICRkYnVzZXIgPSAkY29uZmlnWydkYl91c2VyJ107CiAgICAgICAgJGNvbm4gPSBuZXcgUERPKCJteXNxbDpob3N0PWxvY2FsaG9zdDtkYm5hbWU9eyRjb25maWdbJ2RiX25hbWUnXX0iLCAkY29uZmlnWydkYl91c2VyJ10sICRjb25maWdbJ2RiX3Bhc3MnXSk7CiAgICAgICAgJGNvbm4tPnNldEF0dHJpYnV0ZShQRE86OkFUVFJfRVJSTU9ERSwgUERPOjpFUlJNT0RFX0VYQ0VQVElPTik7CgogICAgICAgIC8vIFZlcmlmaWNhIHNlIGrDoSBleGlzdGUgdW0gcmVnaXN0cm8gY29tIG8gbWVzbW8gZW1haWwgZSBleHRlcm5hbFJlZmVyZW5jZQogICAgICAgICRzdG10X2NoZWNrID0gJGNvbm4tPnByZXBhcmUoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGNvbmZpcm1hcl9kZXBvc2l0byBXSEVSRSBlbWFpbCA9IDplbWFpbCBBTkQgZXh0ZXJuYWxyZWZlcmVuY2UgPSA6ZXh0ZXJuYWxSZWZlcmVuY2UiKTsKICAgICAgICAkc3RtdF9jaGVjay0+YmluZFBhcmFtKCc6ZW1haWwnLCAkZW1haWwpOwogICAgICAgICRzdG10X2NoZWNrLT5iaW5kUGFyYW0oJzpleHRlcm5hbFJlZmVyZW5jZScsICRleHRlcm5hbFJlZmVyZW5jZSk7CiAgICAgICAgJHN0bXRfY2hlY2stPmV4ZWN1dGUoKTsKCiAgICAgICAgJGNvdW50ID0gJHN0bXRfY2hlY2stPmZldGNoQ29sdW1uKCk7CgogICAgICAgIGlmICgkY291bnQgPT0gMCkgewogICAgICAgICAgICAvLyBOw6NvIGjDoSByZWdpc3RybyBleGlzdGVudGUsIHBvZGUgcmVhbGl6YXIgYSBpbnNlcsOnw6NvCiAgICAgICAgICAgICRzdG10X2luc2VydCA9ICRjb25uLT5wcmVwYXJlKCJJTlNFUlQgSU5UTyBjb25maXJtYXJfZGVwb3NpdG8gKGVtYWlsLCBleHRlcm5hbHJlZmVyZW5jZSwgc3RhdHVzLCB2YWxvcikgVkFMVUVTICg6ZW1haWwsIDpleHRlcm5hbFJlZmVyZW5jZSwgOnN0YXR1cywgOnZhbG9yKSIpOwogICAgICAgICAgICAkc3RtdF9pbnNlcnQtPmJpbmRQYXJhbSgnOmVtYWlsJywgJGVtYWlsKTsKICAgICAgICAgICAgJHN0bXRfaW5zZXJ0LT5iaW5kUGFyYW0oJzpleHRlcm5hbFJlZmVyZW5jZScsICRleHRlcm5hbFJlZmVyZW5jZSk7CiAgICAgICAgICAgICRzdG10X2luc2VydC0+YmluZFBhcmFtKCc6c3RhdHVzJywgJHN0YXR1cyk7CiAgICAgICAgICAgICRzdG10X2luc2VydC0+YmluZFBhcmFtKCc6dmFsb3InLCAkdmFsb3IpOyAvLyBBZGljaW9uYSBlc3RhIGxpbmhhIHBhcmEgaW5zZXJpciBvIHZhbG9yIG5vIGJhbmNvIGRlIGRhZG9zCiAgICAgICAgICAgICRzdG10X2luc2VydC0+ZXhlY3V0ZSgpOwoKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTZSBob3V2ZXIgdW0gcmVnaXN0cm8gZXhpc3RlbnRlLCB2b2PDqiBwb2RlIGRlY2lkaXIgbyBxdWUgZmF6ZXIgYXF1aQogICAgICAgICAgICAvLyBQb3IgZXhlbXBsbywgYXR1YWxpemFyIG8gdmFsb3Igbm8gcmVnaXN0cm8gZXhpc3RlbnRlIHNlIG5lY2Vzc8OhcmlvCiAgICAgICAgfQogICAgfSBjYXRjaCAoUERPRXhjZXB0aW9uICRlKSB7CiAgICAgICAgLy8gVHJhdGUgYSBleGNlw6fDo28sIHNlIG5lY2Vzc8OhcmlvCiAgICAgICAgZWNobyAiRXJybzogIiAuICRlLT5nZXRNZXNzYWdlKCk7CiAgICB9Cn0gZWxzZSB7CiAgICAvLyBTZSBhbGd1bSBkb3MgcGFyw6JtZXRyb3MgZXN0aXZlciBmYWx0YW5kbywgdm9jw6ogcG9kZSBkZWNpZGlyIG8gcXVlIGZhemVyIGFxdWkKfQoKLy8gUmVkaXJlY2lvbmEgcGFyYSBvdXRyYSBww6FnaW5hCi8vIGhlYWRlcignTG9jYXRpb246IC4uL2Zoc3VmaHVpYWVoZ3U4NDllZmlvc2pmb2kyMG90ZW9saHltbGR6OTIwL2NvbnN1bHRhcnBhZ2FtZW50by5waHAnKTsKLy8gZXhpdCgpOwo/PgoKCjwhRE9DVFlQRSBodG1sPgoKCjxodG1sIGxhbmc9InB0LWJyIiBjbGFzcz0idy1tb2QtanMgd2Ytc3BhY2Vtb25vLW40LWFjdGl2ZSB3Zi1zcGFjZW1vbm8tbjctYWN0aXZlIHdmLWFjdGl2ZSB3LW1vZC1peCI+CjxoZWFkPgoKCiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+CiAgICA8c3R5bGU+LndmLWZvcmNlLW91dGxpbmUtbm9uZVt0YWJpbmRleD0iLTEiXTpmb2N1cyB7CiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgfTwvc3R5bGU+CgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LnN3YWwtaWNvbi0tZXJyb3IgewogICAgICAgICAgICBib3JkZXItY29sb3I6ICNmMjc0NzQ7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBhbmltYXRlRXJyb3JJY29uIC41czsKICAgICAgICAgICAgYW5pbWF0aW9uOiBhbmltYXRlRXJyb3JJY29uIC41cwogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0tZXJyb3JfX3gtbWFyayB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBhbmltYXRlWE1hcmsgLjVzOwogICAgICAgICAgICBhbmltYXRpb246IGFuaW1hdGVYTWFyayAuNXMKICAgICAgICB9CgogICAgICAgIC5zd2FsLWljb24tLWVycm9yX19saW5lIHsKICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICBoZWlnaHQ6IDVweDsKICAgICAgICAgICAgd2lkdGg6IDQ3cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMjc0NzQ7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICB0b3A6IDM3cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0tZXJyb3JfX2xpbmUtLWxlZnQgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgICAgICAgICBsZWZ0OiAxN3B4CiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS1lcnJvcl9fbGluZS0tcmlnaHQgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgICAgICAgICAgIHJpZ2h0OiAxNnB4CiAgICAgICAgfQoKICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgYW5pbWF0ZUVycm9ySWNvbiB7CiAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKDEwMGRlZyk7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTAwZGVnKTsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAKICAgICAgICAgICAgfQogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlWCgwZGVnKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlWCgwZGVnKTsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBhbmltYXRlRXJyb3JJY29uIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVgoMTAwZGVnKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlWCgxMDBkZWcpOwogICAgICAgICAgICAgICAgb3BhY2l0eTogMAogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVYKDBkZWcpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKDBkZWcpOwogICAgICAgICAgICAgICAgb3BhY2l0eTogMQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgYW5pbWF0ZVhNYXJrIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKC40KTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoLjQpOwogICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjZweDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAKICAgICAgICAgICAgfQogICAgICAgICAgICA1MCUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKC40KTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoLjQpOwogICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMjZweDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAKICAgICAgICAgICAgfQogICAgICAgICAgICA4MCUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMTUpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjE1KTsKICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IC02cHgKICAgICAgICAgICAgfQogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBhbmltYXRlWE1hcmsgewogICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLjQpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSguNCk7CiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyNnB4OwogICAgICAgICAgICAgICAgb3BhY2l0eTogMAogICAgICAgICAgICB9CiAgICAgICAgICAgIDUwJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLjQpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSguNCk7CiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyNnB4OwogICAgICAgICAgICAgICAgb3BhY2l0eTogMAogICAgICAgICAgICB9CiAgICAgICAgICAgIDgwJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4xNSk7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpOwogICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTZweAogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgICAgICAgICAgb3BhY2l0eTogMQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS13YXJuaW5nIHsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZjhiYjg2OwogICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogcHVsc2VXYXJuaW5nIC43NXMgaW5maW5pdGUgYWx0ZXJuYXRlOwogICAgICAgICAgICBhbmltYXRpb246IHB1bHNlV2FybmluZyAuNzVzIGluZmluaXRlIGFsdGVybmF0ZQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0td2FybmluZ19fYm9keSB7CiAgICAgICAgICAgIHdpZHRoOiA1cHg7CiAgICAgICAgICAgIGhlaWdodDogNDdweDsKICAgICAgICAgICAgdG9wOiAxMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMnB4CiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS13YXJuaW5nX19ib2R5LCAuc3dhbC1pY29uLS13YXJuaW5nX19kb3QgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4YmI4NgogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0td2FybmluZ19fZG90IHsKICAgICAgICAgICAgd2lkdGg6IDdweDsKICAgICAgICAgICAgaGVpZ2h0OiA3cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC00cHg7CiAgICAgICAgICAgIGJvdHRvbTogLTExcHgKICAgICAgICB9CgogICAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBwdWxzZVdhcm5pbmcgewogICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNmOGQ0ODYKICAgICAgICAgICAgfQogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNmOGJiODYKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBwdWxzZVdhcm5pbmcgewogICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNmOGQ0ODYKICAgICAgICAgICAgfQogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNmOGJiODYKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0tc3VjY2VzcyB7CiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2E1ZGM4NgogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0tc3VjY2VzczphZnRlciwgLnN3YWwtaWNvbi0tc3VjY2VzczpiZWZvcmUgewogICAgICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHdpZHRoOiA2MHB4OwogICAgICAgICAgICBoZWlnaHQ6IDEyMHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS1zdWNjZXNzOmJlZm9yZSB7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEyMHB4IDAgMCAxMjBweDsKICAgICAgICAgICAgdG9wOiAtN3B4OwogICAgICAgICAgICBsZWZ0OiAtMzNweDsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDYwcHggNjBweDsKICAgICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNjBweCA2MHB4CiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS1zdWNjZXNzOmFmdGVyIHsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMCAxMjBweCAxMjBweCAwOwogICAgICAgICAgICB0b3A6IC0xMXB4OwogICAgICAgICAgICBsZWZ0OiAzMHB4OwogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCA2MHB4OwogICAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDYwcHg7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiByb3RhdGVQbGFjZWhvbGRlciA0LjI1cyBlYXNlLWluOwogICAgICAgICAgICBhbmltYXRpb246IHJvdGF0ZVBsYWNlaG9sZGVyIDQuMjVzIGVhc2UtaW4KICAgICAgICB9CgogICAgICAgIC5zd2FsLWljb24tLXN1Y2Nlc3NfX3JpbmcgewogICAgICAgICAgICB3aWR0aDogODBweDsKICAgICAgICAgICAgaGVpZ2h0OiA4MHB4OwogICAgICAgICAgICBib3JkZXI6IDRweCBzb2xpZCBoc2xhKDk4LCA1NSUsIDY5JSwgLjIpOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGxlZnQ6IC00cHg7CiAgICAgICAgICAgIHRvcDogLTRweDsKICAgICAgICAgICAgei1pbmRleDogMgogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0tc3VjY2Vzc19faGlkZS1jb3JuZXJzIHsKICAgICAgICAgICAgd2lkdGg6IDVweDsKICAgICAgICAgICAgaGVpZ2h0OiA5MHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgICAgICAgICBwYWRkaW5nOiAxcHg7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgbGVmdDogMjhweDsKICAgICAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0tc3VjY2Vzc19fbGluZSB7CiAgICAgICAgICAgIGhlaWdodDogNXB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYTVkYzg2OwogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHotaW5kZXg6IDIKICAgICAgICB9CgogICAgICAgIC5zd2FsLWljb24tLXN1Y2Nlc3NfX2xpbmUtLXRpcCB7CiAgICAgICAgICAgIHdpZHRoOiAyNXB4OwogICAgICAgICAgICBsZWZ0OiAxNHB4OwogICAgICAgICAgICB0b3A6IDQ2cHg7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBhbmltYXRlU3VjY2Vzc1RpcCAuNzVzOwogICAgICAgICAgICBhbmltYXRpb246IGFuaW1hdGVTdWNjZXNzVGlwIC43NXMKICAgICAgICB9CgogICAgICAgIC5zd2FsLWljb24tLXN1Y2Nlc3NfX2xpbmUtLWxvbmcgewogICAgICAgICAgICB3aWR0aDogNDdweDsKICAgICAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICAgICAgdG9wOiAzOHB4OwogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBhbmltYXRlU3VjY2Vzc0xvbmcgLjc1czsKICAgICAgICAgICAgYW5pbWF0aW9uOiBhbmltYXRlU3VjY2Vzc0xvbmcgLjc1cwogICAgICAgIH0KCiAgICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZVBsYWNlaG9sZGVyIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKQogICAgICAgICAgICB9CiAgICAgICAgICAgIDUlIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZykKICAgICAgICAgICAgfQogICAgICAgICAgICAxMiUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDA1ZGVnKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00MDVkZWcpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG8gewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDA1ZGVnKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00MDVkZWcpCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgcm90YXRlUGxhY2Vob2xkZXIgewogICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpCiAgICAgICAgICAgIH0KICAgICAgICAgICAgNSUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKQogICAgICAgICAgICB9CiAgICAgICAgICAgIDEyJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00MDVkZWcpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQwNWRlZykKICAgICAgICAgICAgfQogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00MDVkZWcpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQwNWRlZykKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGFuaW1hdGVTdWNjZXNzVGlwIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgICAgICAgICBsZWZ0OiAxcHg7CiAgICAgICAgICAgICAgICB0b3A6IDE5cHgKICAgICAgICAgICAgfQogICAgICAgICAgICA1NCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgICAgICAgICBsZWZ0OiAxcHg7CiAgICAgICAgICAgICAgICB0b3A6IDE5cHgKICAgICAgICAgICAgfQogICAgICAgICAgICA3MCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDUwcHg7CiAgICAgICAgICAgICAgICBsZWZ0OiAtOHB4OwogICAgICAgICAgICAgICAgdG9wOiAzN3B4CiAgICAgICAgICAgIH0KICAgICAgICAgICAgODQlIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAxN3B4OwogICAgICAgICAgICAgICAgbGVmdDogMjFweDsKICAgICAgICAgICAgICAgIHRvcDogNDhweAogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAyNXB4OwogICAgICAgICAgICAgICAgbGVmdDogMTRweDsKICAgICAgICAgICAgICAgIHRvcDogNDVweAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBAa2V5ZnJhbWVzIGFuaW1hdGVTdWNjZXNzVGlwIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgICAgICAgICBsZWZ0OiAxcHg7CiAgICAgICAgICAgICAgICB0b3A6IDE5cHgKICAgICAgICAgICAgfQogICAgICAgICAgICA1NCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgICAgICAgICBsZWZ0OiAxcHg7CiAgICAgICAgICAgICAgICB0b3A6IDE5cHgKICAgICAgICAgICAgfQogICAgICAgICAgICA3MCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDUwcHg7CiAgICAgICAgICAgICAgICBsZWZ0OiAtOHB4OwogICAgICAgICAgICAgICAgdG9wOiAzN3B4CiAgICAgICAgICAgIH0KICAgICAgICAgICAgODQlIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAxN3B4OwogICAgICAgICAgICAgICAgbGVmdDogMjFweDsKICAgICAgICAgICAgICAgIHRvcDogNDhweAogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAyNXB4OwogICAgICAgICAgICAgICAgbGVmdDogMTRweDsKICAgICAgICAgICAgICAgIHRvcDogNDVweAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgYW5pbWF0ZVN1Y2Nlc3NMb25nIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgICAgICAgICByaWdodDogNDZweDsKICAgICAgICAgICAgICAgIHRvcDogNTRweAogICAgICAgICAgICB9CiAgICAgICAgICAgIDY1JSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMDsKICAgICAgICAgICAgICAgIHJpZ2h0OiA0NnB4OwogICAgICAgICAgICAgICAgdG9wOiA1NHB4CiAgICAgICAgICAgIH0KICAgICAgICAgICAgODQlIHsKICAgICAgICAgICAgICAgIHdpZHRoOiA1NXB4OwogICAgICAgICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICAgICAgICB0b3A6IDM1cHgKICAgICAgICAgICAgfQogICAgICAgICAgICB0byB7CiAgICAgICAgICAgICAgICB3aWR0aDogNDdweDsKICAgICAgICAgICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgICAgICAgICB0b3A6IDM4cHgKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBhbmltYXRlU3VjY2Vzc0xvbmcgewogICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICB3aWR0aDogMDsKICAgICAgICAgICAgICAgIHJpZ2h0OiA0NnB4OwogICAgICAgICAgICAgICAgdG9wOiA1NHB4CiAgICAgICAgICAgIH0KICAgICAgICAgICAgNjUlIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAwOwogICAgICAgICAgICAgICAgcmlnaHQ6IDQ2cHg7CiAgICAgICAgICAgICAgICB0b3A6IDU0cHgKICAgICAgICAgICAgfQogICAgICAgICAgICA4NCUgewogICAgICAgICAgICAgICAgd2lkdGg6IDU1cHg7CiAgICAgICAgICAgICAgICByaWdodDogMDsKICAgICAgICAgICAgICAgIHRvcDogMzVweAogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIHdpZHRoOiA0N3B4OwogICAgICAgICAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICAgICAgICAgIHRvcDogMzhweAogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS1pbmZvIHsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjYzlkYWUxCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS1pbmZvOmJlZm9yZSB7CiAgICAgICAgICAgIHdpZHRoOiA1cHg7CiAgICAgICAgICAgIGhlaWdodDogMjlweDsKICAgICAgICAgICAgYm90dG9tOiAxN3B4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtMnB4CiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uLS1pbmZvOmFmdGVyLCAuc3dhbC1pY29uLS1pbmZvOmJlZm9yZSB7CiAgICAgICAgICAgIGNvbnRlbnQ6ICIiOwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2M5ZGFlMQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbi0taW5mbzphZnRlciB7CiAgICAgICAgICAgIHdpZHRoOiA3cHg7CiAgICAgICAgICAgIGhlaWdodDogN3B4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiAtM3B4OwogICAgICAgICAgICB0b3A6IDE5cHgKICAgICAgICB9CgogICAgICAgIC5zd2FsLWljb24gewogICAgICAgICAgICB3aWR0aDogODBweDsKICAgICAgICAgICAgaGVpZ2h0OiA4MHB4OwogICAgICAgICAgICBib3JkZXItd2lkdGg6IDRweDsKICAgICAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgICAgICAgICBtYXJnaW46IDIwcHggYXV0bwogICAgICAgIH0KCiAgICAgICAgLnN3YWwtaWNvbjpmaXJzdC1jaGlsZCB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMycHgKICAgICAgICB9CgogICAgICAgIC5zd2FsLWljb24tLWN1c3RvbSB7CiAgICAgICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1pY29uIGltZyB7CiAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICAgICAgbWF4LWhlaWdodDogMTAwJQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtdGl0bGUgewogICAgICAgICAgICBjb2xvcjogcmdiYSgwLCAwLCAwLCAuNjUpOwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgcGFkZGluZzogMTNweCAxNnB4OwogICAgICAgICAgICBmb250LXNpemU6IDI3cHg7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtdGl0bGU6Zmlyc3QtY2hpbGQgewogICAgICAgICAgICBtYXJnaW4tdG9wOiAyNnB4CiAgICAgICAgfQoKICAgICAgICAuc3dhbC10aXRsZTpub3QoOmZpcnN0LWNoaWxkKSB7CiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwCiAgICAgICAgfQoKICAgICAgICAuc3dhbC10aXRsZTpub3QoOmxhc3QtY2hpbGQpIHsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTNweAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtdGV4dCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICBmbG9hdDogbm9uZTsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgMTBweDsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgLjY0KTsKICAgICAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgICAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtdGV4dDpmaXJzdC1jaGlsZCB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDQ1cHgKICAgICAgICB9CgogICAgICAgIC5zd2FsLXRleHQ6bGFzdC1jaGlsZCB7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDQ1cHgKICAgICAgICB9CgogICAgICAgIC5zd2FsLWZvb3RlciB7CiAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgICAgICBwYWRkaW5nLXRvcDogMTNweDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMTNweDsKICAgICAgICAgICAgcGFkZGluZzogMTNweCAxNnB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwogICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uLWNvbnRhaW5lciB7CiAgICAgICAgICAgIG1hcmdpbjogNXB4OwogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzdjZDFmOTsKICAgICAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMjRweDsKICAgICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXIKICAgICAgICB9CgogICAgICAgIC5zd2FsLWJ1dHRvbjpub3QoW2Rpc2FibGVkXSk6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNzhjYmYyCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1idXR0b246YWN0aXZlIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzcwYmNlMAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uOmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNmZmYsIDAgMCAwIDNweCByZ2JhKDQzLCAxMTQsIDE2NSwgLjI5KQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgICAgIG9wYWNpdHk6IC41OwogICAgICAgICAgICBjdXJzb3I6IGRlZmF1bHQKICAgICAgICB9CgogICAgICAgIC5zd2FsLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgICAgIGJvcmRlcjogMAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uLS1jYW5jZWwgewogICAgICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VmZWZlZgogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uLS1jYW5jZWw6bm90KFtkaXNhYmxlZF0pOmhvdmVyIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZThlOAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uLS1jYW5jZWw6YWN0aXZlIHsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Q3ZDdkNwogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uLS1jYW5jZWw6Zm9jdXMgewogICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2ZmZiwgMCAwIDAgM3B4IHJnYmEoMTE2LCAxMzYsIDE1MCwgLjI5KQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uLS1kYW5nZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTY0OTQyCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1idXR0b24tLWRhbmdlcjpub3QoW2Rpc2FibGVkXSk6aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGY0NzQwCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1idXR0b24tLWRhbmdlcjphY3RpdmUgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2Y0MjNiCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1idXR0b24tLWRhbmdlcjpmb2N1cyB7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZmZmLCAwIDAgMCAzcHggcmdiYSgxNjUsIDQzLCA0MywgLjI5KQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtY29udGVudCB7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgZm9udC1zaXplOiBtZWRpdW0KICAgICAgICB9CgogICAgICAgIC5zd2FsLWNvbnRlbnQ6bGFzdC1jaGlsZCB7CiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHgKICAgICAgICB9CgogICAgICAgIC5zd2FsLWNvbnRlbnRfX2lucHV0LCAuc3dhbC1jb250ZW50X190ZXh0YXJlYSB7CiAgICAgICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAuMTQpOwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDEzcHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIC4ycwogICAgICAgIH0KCiAgICAgICAgLnN3YWwtY29udGVudF9faW5wdXQ6Zm9jdXMsIC5zd2FsLWNvbnRlbnRfX3RleHRhcmVhOmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNmRiOGZmCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1jb250ZW50X190ZXh0YXJlYSB7CiAgICAgICAgICAgIHJlc2l6ZTogdmVydGljYWwKICAgICAgICB9CgogICAgICAgIC5zd2FsLWJ1dHRvbi0tbG9hZGluZyB7CiAgICAgICAgICAgIGNvbG9yOiB0cmFuc3BhcmVudAogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uLS1sb2FkaW5nIH4gLnN3YWwtYnV0dG9uX19sb2FkZXIgewogICAgICAgICAgICBvcGFjaXR5OiAxCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1idXR0b25fX2xvYWRlciB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgICAgICB3aWR0aDogNDNweDsKICAgICAgICAgICAgei1pbmRleDogMjsKICAgICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgICB0b3A6IDUwJTsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgICAgIG9wYWNpdHk6IDAKICAgICAgICB9CgogICAgICAgIC5zd2FsLWJ1dHRvbl9fbG9hZGVyIGRpdiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgZmxvYXQ6IG5vbmU7CiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICAgICAgICAgICAgd2lkdGg6IDlweDsKICAgICAgICAgICAgaGVpZ2h0OiA5cHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgICAgICAgIG9wYWNpdHk6IC40OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGhzbGEoMCwgMCUsIDEwMCUsIC45KTsKICAgICAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnM7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzd2FsLWxvYWRpbmctYW5pbSAxcyBpbmZpbml0ZTsKICAgICAgICAgICAgYW5pbWF0aW9uOiBzd2FsLWxvYWRpbmctYW5pbSAxcyBpbmZpbml0ZQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtYnV0dG9uX19sb2FkZXIgZGl2Om50aC1jaGlsZCgzbisyKSB7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWRlbGF5OiAuMTVzOwogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4xNXMKICAgICAgICB9CgogICAgICAgIC5zd2FsLWJ1dHRvbl9fbG9hZGVyIGRpdjpudGgtY2hpbGQoM24rMykgewogICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kZWxheTogLjNzOwogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk6IC4zcwogICAgICAgIH0KCiAgICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIHN3YWwtbG9hZGluZy1hbmltIHsKICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgb3BhY2l0eTogLjQKICAgICAgICAgICAgfQogICAgICAgICAgICAyMCUgewogICAgICAgICAgICAgICAgb3BhY2l0eTogLjQKICAgICAgICAgICAgfQogICAgICAgICAgICA1MCUgewogICAgICAgICAgICAgICAgb3BhY2l0eTogMQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6IC40CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEBrZXlmcmFtZXMgc3dhbC1sb2FkaW5nLWFuaW0gewogICAgICAgICAgICAwJSB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAuNAogICAgICAgICAgICB9CiAgICAgICAgICAgIDIwJSB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAuNAogICAgICAgICAgICB9CiAgICAgICAgICAgIDUwJSB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxCiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG8gewogICAgICAgICAgICAgICAgb3BhY2l0eTogLjQKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtb3ZlcmxheSB7CiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBib3R0b206IDA7CiAgICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICAgIHJpZ2h0OiAwOwogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMDsKICAgICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAuNCk7CiAgICAgICAgICAgIHotaW5kZXg6IDEwMDAwOwogICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MKICAgICAgICB9CgogICAgICAgIC5zd2FsLW92ZXJsYXk6YmVmb3JlIHsKICAgICAgICAgICAgY29udGVudDogIiAiOwogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgICAgIGhlaWdodDogMTAwJQogICAgICAgIH0KCiAgICAgICAgLnN3YWwtb3ZlcmxheS0tc2hvdy1tb2RhbCB7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1vdmVybGF5LS1zaG93LW1vZGFsIC5zd2FsLW1vZGFsIHsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzaG93U3dlZXRBbGVydCAuM3M7CiAgICAgICAgICAgIGFuaW1hdGlvbjogc2hvd1N3ZWV0QWxlcnQgLjNzOwogICAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtCiAgICAgICAgfQoKICAgICAgICAuc3dhbC1tb2RhbCB7CiAgICAgICAgICAgIHdpZHRoOiA0NzhweDsKICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICAgICAgICBtYXJnaW46IDIwcHggYXV0bzsKICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTsKICAgICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDUwJTsKICAgICAgICAgICAgei1pbmRleDogMTAwMDE7CiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgLjJzLCAtd2Via2l0LXRyYW5zZm9ybSAuM3M7CiAgICAgICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MsIG9wYWNpdHkgLjJzOwogICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzLCBvcGFjaXR5IC4ycywgLXdlYmtpdC10cmFuc2Zvcm0gLjNzCiAgICAgICAgfQoKICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNTAwcHgpIHsKICAgICAgICAgICAgLnN3YWwtbW9kYWwgewogICAgICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBzaG93U3dlZXRBbGVydCB7CiAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkKICAgICAgICAgICAgfQogICAgICAgICAgICAxJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLjUpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSguNSkKICAgICAgICAgICAgfQogICAgICAgICAgICA0NSUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KQogICAgICAgICAgICB9CiAgICAgICAgICAgIDgwJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLjk1KTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoLjk1KQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQGtleWZyYW1lcyBzaG93U3dlZXRBbGVydCB7CiAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkKICAgICAgICAgICAgfQogICAgICAgICAgICAxJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLjUpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSguNSkKICAgICAgICAgICAgfQogICAgICAgICAgICA0NSUgewogICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KQogICAgICAgICAgICB9CiAgICAgICAgICAgIDgwJSB7CiAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoLjk1KTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoLjk1KQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRvIHsKICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkKICAgICAgICAgICAgfQogICAgICAgIH08L3N0eWxlPgogICAgPG1ldGEgY2hhcnNldD0icHQtYnIiPgogICAgPHRpdGxlPlN1YndheVBheSDwn4yKPC90aXRsZT4KCgogICAgPG1ldGEgbmFtZT0idHdpdHRlcjppbWFnZSIgY29udGVudD0iLi4vaW1nL2xvZ28ucG5nIj4KCiAgICA8bWV0YSBjb250ZW50PSJzdW1tYXJ5X2xhcmdlX2ltYWdlIiBuYW1lPSJ0d2l0dGVyOmNhcmQiPgoKICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5yYXdnaXQuY29tL2Rhdmlkc2hpbWpzL3FyY29kZWpzL2doLXBhZ2VzL3FyY29kZS5taW4uanMiPjwvc2NyaXB0PgogICAgCiAgICAKCgogICAgPG1ldGEgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiIG5hbWU9InZpZXdwb3J0Ij4KICAgIDxsaW5rIGhyZWY9Ii4vYXJxdWl2b3MvcGFnZS5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgogICAgPGxpbmsgaHJlZj0iLi9hcnF1aXZvcy9hbGVydC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICBXZWJGb250LmxvYWQoewogICAgICAgICAgICBnb29nbGU6IHsKICAgICAgICAgICAgICAgIGZhbWlsaWVzOiBbIlNwYWNlIE1vbm86cmVndWxhciw3MDAiXQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICAhZnVuY3Rpb24gKG8sIGMpIHsKICAgICAgICAgICAgdmFyIG4gPSBjLmRvY3VtZW50RWxlbWVudCwKICAgICAgICAgICAgICAgIHQgPSAiIHctbW9kLSI7CiAgICAgICAgICAgIG4uY2xhc3NOYW1lICs9IHQgKyAianMiLCAoIm9udG91Y2hzdGFydCIgaW4gbyB8fCBvLkRvY3VtZW50VG91Y2ggJiYgYyBpbnN0YW5jZW9mIERvY3VtZW50VG91Y2gpICYmIChuCiAgICAgICAgICAgICAgICAuY2xhc3NOYW1lICs9IHQgKyAidG91Y2giKQogICAgICAgIH0od2luZG93LCBkb2N1bWVudCk7CiAgICA8L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9IjE4MHgxODAiIGhyZWY9Ii4uL2ltZy9sb2dvLnBuZyI+CiAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjMyeDMyIiBocmVmPSIuL2ltZy9sb2dvLnBuZyI+CiAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3BuZyIgc2l6ZXM9IjE2eDE2IiBocmVmPSIuL2ltZy9sb2dvLnBuZyI+CgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnJhd2dpdC5jb20vZGF2aWRzaGltanMvcXJjb2RlanMvZ2gtcGFnZXMvcXJjb2RlLm1pbi5qcyI+PC9zY3JpcHQ+CgoKICAgIDxzdHlsZT4KCiAgICAgICAgaDEgewogICAgICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICB9CgoKICAgICAgICBsYWJlbCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICAgICAgfQoKICAgICAgICBpbnB1dFt0eXBlPSJ0ZXh0Il0gewogICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICAgIH0KCgogICAgICAgIC5kaXZxciB7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CgogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwoKICAgICAgICB9CgogICAgICAgIC5jb250YWluZXIzIHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgfQoKICAgICAgICAjcXJjb2RlIHsKICAgICAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICAgICAgYm9yZGVyOiA1cHggc29saWQgIzFmYmZmZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICB9CgoKICAgICAgICAjcXItY29kZS10ZXh0IHsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTRlMmUyOwogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjMWZiZmZlOwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgfQoKICAgICAgICAjY29weS1idXR0b24gewogICAgICAgICAgIAogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWZiZmZlOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICBwYWRkaW5nOiAxMHB4IDgwcHg7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwoKICAgICAgICAgICAgYW5pbWF0aW9uOiBwdWxzZSAycyBpbmZpbml0ZTsKCgogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnJlZGlyZWN0QnV0dG9uewogICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzVhOTc1OTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgcGFkZGluZzogMTBweCAxMjBweDsKICAgICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgICAgICAgIAogICAgICAgIH0KCgogICAgICAgIC5lZmVpdG8tYmFubmVyLXRvcG8gewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICAgIHRvcDogMDsKICAgICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICAgIHotaW5kZXg6IC0yOwogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIGhlaWdodDogODMlOwogICAgICAgICAgICBtYXgtaGVpZ2h0OiA2ODBweDsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CgogICAgICAgIC5lZmVpdG8tYmFubmVyLXRvcG8gaW1nIHsKICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICBib3R0b206IDA7CiAgICAgICAgICAgIHJpZ2h0OiAwOwogICAgICAgICAgICB3aWR0aDogMTIwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMjAlOwogICAgICAgICAgICBtYXJnaW4tdG9wOiAtNSU7CiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMCwgNTAlIDUwJTsKICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiBhdXRvLCBjb3ZlcjsKICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdCwgbm8tcmVwZWF0OwogICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAtd2Via2l0LWZpbHRlcjogYmx1cigyNHB4KTsKICAgICAgICAgICAgZmlsdGVyOiBibHVyKDI0cHgpOwogICAgICAgIH0KCiAgICAgICAgLmltZy1iYW5uZXItdG9wbyB7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxMHB4IDEwcHg7CiAgICAgICAgICAgIC8qbWFyZ2luOiAwIGF1dG87Ki8KICAgICAgICAgICAgLyptYXJnaW4tcmlnaHQ6IGF1dG87Ki8KICAgICAgICAgICAgLyp3aWR0aDogMTAwJTsqLwogICAgICAgICAgICAvKm1heC1oZWlnaHQ6IDUwMHB4OyovCiAgICAgICAgICAgIG1heC13aWR0aDogMTEzOHB4OwogICAgICAgICAgICBtYXgtaGVpZ2h0OiA0ODdweDsKICAgICAgICB9CgogICAgICAgIC8qLm9yZGVyYnVtcC1wZXJjZW50IHNwYW4uc3RhdHMgeyovCiAgICAgICAgLyogICAgcG9zaXRpb246IHJlbGF0aXZlICFpbXBvcnRhbnQ7Ki8KICAgICAgICAvKiAgICBtYXJnaW46IDAgMTBweDsqLwogICAgICAgIC8qfSovCiAgICAgICAgLyoub3JkZXJidW1wLXBlcmNlbnQgc3Bhbi5zdGF0czo6YmVmb3JlIHsqLwogICAgICAgIC8qICAgICEqZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsqISovCiAgICAgICAgLyogICAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7Ki8KICAgICAgICAvKiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTBiMjMyICFpbXBvcnRhbnQ7Ki8KICAgICAgICAvKiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsqLwogICAgICAgIC8qICAgIGNvbnRlbnQ6ICIgIjsqLwogICAgICAgIC8qICAgIHdpZHRoOiAxMjQlOyovCiAgICAgICAgLyogICAgaGVpZ2h0OiAxMzUlOyovCiAgICAgICAgLyogICAgcmlnaHQ6IC0yJTsqLwogICAgICAgIC8qICAgIHRvcDogLTIwJTsqLwogICAgICAgIC8qfSovCgogICAgICAgIC5jYXJkIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogNHB4IDJweCA3cHggcmdiKDAgMCAwIC8gNSUpOwogICAgICAgICAgICAvKnBhZGRpbmc6IDE1cHggMTJweDsqLwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfQoKICAgICAgICAuaWNvbi1kZXRhbGhlcyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGNvbG9yOiAjNjI2MjYyOwogICAgICAgIH0KCiAgICAgICAgLmljb24tZGV0YWxoZXMgLmljb24tZGV0YWxoZXMtaWNvbiB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS41ZW07CiAgICAgICAgICAgIG1hcmdpbi1yaWdodDogMTZweDsKICAgICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmljb24tZGV0YWxoZXMgLmljb24tZGV0YWxoZXMtdGV4dCBoNSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB9CgogICAgICAgIC5yb3VuZGVkIHsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLm1hcmdpbmxlc3MgewogICAgICAgICAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIC5wYWRkaW5nbGVzcyB7CiAgICAgICAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIEBtZWRpYSBhbGwgYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAgIC5pbWctYmFubmVyLXRvcG8gewogICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAuZWZlaXRvLWJhbm5lci10b3BvIHsKICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLnZpZGVvLXBsYXllci0taWZyYW1lIHsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweAogICAgICAgIH0KCgogICAgICAgIC5vcmRlci1idW1wIHsKICAgICAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHJlZDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgfQoKICAgICAgICAub3JkZXItYnVtcC1jaGVjayB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGNUY1RjU7CiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM4ODk4QUE7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDJweCAzcHggMCByZ2JhKDEyNiwgMTI2LCAxMjYsIDAuNyk7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB9CgogICAgICAgIC5vcmRlci1idW1wLXRleHQgewogICAgICAgICAgICBmb250LXNpemU6IDkwJTsKICAgICAgICB9CgogICAgICAgIC5jYXJkIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogNHB4IDJweCA3cHggcmdiKDAgMCAwIC8gNSUpOwogICAgICAgICAgICAvKnBhZGRpbmc6IDE1cHggMTJweDsqLwogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgfQoKICAgICAgICAuY2FyZC1oZWFkZXIgewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogLTE4cHg7CiAgICAgICAgICAgIGxlZnQ6IDEwcHg7CiAgICAgICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDAgIWltcG9ydGFudDsKICAgICAgICB9CgogICAgICAgIC5jYXJkLWhlYWRlciBiciB7CiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICAuY2FyZC1oZWFkZXIgc21hbGwgewogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLmNhcmQtaGVhZGVyIHNwYW4ubnVtYmVyIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgICAgICAgdG9wOiAtNHB4OwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgICAgYmFja2dyb3VuZDogI2I4YjhiODsKICAgICAgICAgICAgcGFkZGluZzogM3B4IDE0cHg7CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwN3B4OwogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDM2cHg7CiAgICAgICAgICAgIHdpZHRoOiA0MnB4OwogICAgICAgICAgICBoZWlnaHQ6IDQycHg7CiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB9CgogICAgICAgIC5mb250LWJsYWNrIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDkwMCAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLmNhcmQtaGVhZGVyIHN0cm9uZyB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNkNWQ1ZDU7CiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgICAgcGFkZGluZzogNXB4IDE0cHggNXB4IDMwcHggIWltcG9ydGFudDsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzAwcHg7CiAgICAgICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgICAgICBtYXJnaW4tbGVmdDogMThweCAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLmNhcmQtYm9keSB7CiAgICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgICAgICAgIHBhZGRpbmc6IDE1cHggMTJweDsKICAgICAgICB9CgogICAgICAgIC5jYXJkLWZvb3RlciB7CiAgICAgICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMS4yNXJlbTsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsKICAgICAgICB9CgogICAgICAgIGxhYmVsIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBjb2xvcjogIzU0NTQ1NDsKICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICB9CgogICAgICAgIC5mbGFnLWNhcmQ6aG92ZXIgewogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIHRyYW5zaXRpb246IC4zczsKICAgICAgICB9CgoKICAgICAgICAuZm9vdGVyLXBheSB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogOHB4OwogICAgICAgIH0KCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAgIC5mb290ZXItcGF5IHsKICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgICAgICAgIG1hcmdpbjogNTBweCBhdXRvIDAgYXV0bzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICA8L3N0eWxlPgoKCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vYXJxdWl2b3MvY3NzIiBtZWRpYT0iYWxsIj4KCgo8Ym9keSBjbGFzcz0ibm8tdG91Y2giPgoKCjxkaXY+CiAgICA8ZGl2IGRhdGEtY29sbGFwc2U9InNtYWxsIiBkYXRhLWFuaW1hdGlvbj0iZGVmYXVsdCIgZGF0YS1kdXJhdGlvbj0iNDAwIiByb2xlPSJiYW5uZXIiIGNsYXNzPSJuYXZiYXIgdy1uYXYiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciB3LWNvbnRhaW5lciI+CgoKICAgICAgICAgICAgPGEgaHJlZj0iL2d1aGRmc2doZmTDp2dzaGRmZ2hzZGtmZ2hrZGZoZ2tkZmprZ25ka2ZnbmtkdWRzaHVnaGRmdWdkc2hzZCIgYXJpYS1jdXJyZW50PSJwYWdlIiBjbGFzcz0iYnJhbmQgdy1uYXYtYnJhbmQiIGFyaWEtbGFiZWw9ImhvbWUiPgogICAgICAgICAgICAgICAgPGltZyBzcmM9Ii4uL2ltZy9sb2dvLnBuZyIgbG9hZGluZz0ibGF6eSIgaGVpZ2h0PSIyOCIgYWx0PSIiIGNsYXNzPSJpbWFnZS02Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1saW5rIGxvZ28iPjwvZGl2PgogICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDxuYXYgcm9sZT0ibmF2aWdhdGlvbiIgY2xhc3M9Im5hdi1tZW51IHctbmF2LW1lbnUiPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZ3VoZGZzZ2hmZMOnZ3NoZGZnaHNka2ZnaGtkZmhna2RmamtnbmRrZmdua2R1ZHNodWdoZGZ1Z2RzaHNkIiBjbGFzcz0ibmF2LWxpbmsgdy1uYXYtbGluayIgc3R5bGU9Im1heC13aWR0aDogOTQwcHg7Ij5Kb2dhcjwvYT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL3NhcXVlIiBjbGFzcz0ibmF2LWxpbmsgdy1uYXYtbGluayIgc3R5bGU9Im1heC13aWR0aDogOTQwcHg7Ij5TYXF1ZTwvYT4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2FmaWxpYXRlIiBjbGFzcz0ibmF2LWxpbmsgdy1uYXYtbGluayIgc3R5bGU9Im1heC13aWR0aDogOTQwcHg7Ij5JbmRpcXVlIGUgR2FuaGU8L2E+ICAKCiAgICAgICAgICAgICAgICA8YSBocmVmPSIuLi9sb2dvdXQucGhwIiBjbGFzcz0ibmF2LWxpbmsgdy1uYXYtbGluayIgc3R5bGU9Im1heC13aWR0aDogOTQwcHg7Ij5TYWlyPC9hPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vZmhzdWZodWlhZWhndTg0OWVmaW9zamZvaTIwb3Rlb2xoeW1sZHo5MjAiIGNsYXNzPSJidXR0b24gbmF2IHctYnV0dG9uIHctLWN1cnJlbnQiPkRlcG9zaXRhcjwvYT4KICAgICAgICAgICAgPC9uYXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InctbmF2LWJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7IiBhcmlhLWxhYmVsPSJtZW51IiByb2xlPSJidXR0b24iIHRhYmluZGV4PSIwIgogICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9InctbmF2LW92ZXJsYXktMCIgYXJpYS1oYXNwb3B1cD0ibWVudSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iIiBzdHlsZT0iLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsiPgogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uL2Zoc3VmaHVpYWVoZ3U4NDllZmlvc2pmb2kyMG90ZW9saHltbGR6OTIwIiBjbGFzcz0ibWVudS1idXR0b24gdy1uYXYtZGVwIG5hdiB3LWJ1dHRvbiB3LS1jdXJyZW50Ij5ERVBPU0lUQVI8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lbnUtYnV0dG9uIHctbmF2LWJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7IiBhcmlhLWxhYmVsPSJtZW51IiByb2xlPSJidXR0b24iCiAgICAgICAgICAgICAgICAgdGFiaW5kZXg9IjAiIGFyaWEtY29udHJvbHM9InctbmF2LW92ZXJsYXktMCIgYXJpYS1oYXNwb3B1cD0ibWVudSIgYXJpYS1leHBhbmRlZD0iZmFsc2UiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbiB3LWljb24tbmF2LW1lbnUiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ3LW5hdi1vdmVybGF5IiBkYXRhLXdmLWlnbm9yZT0iIiBpZD0idy1uYXYtb3ZlcmxheS0wIj48L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibmF2LWJhciI+CiAgICAgICAgPGEgaHJlZj0iLi4vZ3VoZGZzZ2hmZMOnZ3NoZGZnaHNka2ZnaGtkZmhna2RmamtnbmRrZmdua2R1ZHNodWdoZGZ1Z2RzaHNkIiBjbGFzcz0ibGluay1ibG9jayByYXJpdHkgdy1pbmxpbmUtYmxvY2siPgogICAgICAgICAgICA8ZGl2PkpvZ2FyPC9kaXY+CiAgICAgICAgPC9hPgogICAgICAgIDxhIGhyZWY9Ii4uL3NhcXVlIiBjbGFzcz0ibGluay1ibG9jayBsYXN0IHctaW5saW5lLWJsb2NrIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGV4dC1ibG9jay04Ij5TYXF1ZTwvZGl2PgogICAgICAgIDwvYT4KCgogICAgICAgIDxhIGhyZWY9Ii4uL2xvZ291dC5waHAiIGNsYXNzPSJsaW5rLWJsb2NrIGxhc3Qgdy1pbmxpbmUtYmxvY2siPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWJsb2NrLTgiPlNhaXI8L2Rpdj4KICAgICAgICA8L2E+CiAgICAgICAgPGEgaHJlZj0iLi4vZmhzdWZodWlhZWhndTg0OWVmaW9zamZvaTIwb3Rlb2xoeW1sZHo5MjAiIGNsYXNzPSJidXR0b24gdy1idXR0b24gdy0tY3VycmVudCI+RGVwb3NpdGFyPC9hPgogICAgPC9kaXY+CgoKICAgIDxkaXYgaWQ9ImRlcG9zaXRvIj4KICAgICAgICA8c2VjdGlvbiBpZD0iaGVybyIgY2xhc3M9Imhlcm8tc2VjdGlvbiBkYXJrIHdmLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtaW50aW5nLWNvbnRhaW5lciB3LWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICA8aW1nIHNyYz0iLi4vaW1nL29rLndlYnAiIGxvYWRpbmc9ImxhenkiIHdpZHRoPSIyNDAiIGFsdD0iUm9ib3RvICM2MzQwIiBjbGFzcz0ibWludC1jYXJkLWltYWdlIj4KICAgICAgICAgICAgICAgIDxoMj5Cw5ROVVMgREUgREVQw5NTSVRPIFbDgUxJRE8KICAgICAgICAgICAgICAgICAgICBQT1IgQVTDiQogICAgICAgICAgICAgICAgICAgIDxzcGFtIGlkPSJjb3VudGRvd24iPgogICAgICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgICAgIDwvc3BhbT4KICAgICAgICAgICAgICAgIDxwPlBJWDogZGVww7NzaXRvcyBpbnN0YW50w6JuZW9zIGNvbSB1bWEgcGl0YWRhIGRlIGRpdmVyc8OjbyBlIG11aXRhIHByYXRpY2lkYWRlLiA8YnI+CiAgICAgICAgICAgICAgICA8L3A+CgogICAgICAgICAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmluZG8gYSBkYXRhIGFsdm8gKDUgbWludXRvcyBhIHBhcnRpciBkbyBtb21lbnRvIGF0dWFsKQogICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFRpbWUgPSBub3cgKyA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbnV0b3MgZW0gbWlsaXNzZWd1bmRvcwoKICAgICAgICAgICAgICAgICAgICAvLyBBdHVhbGl6YcOnw6NvIGRvIGNvbnRhZG9yIGEgY2FkYSBzZWd1bmRvCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnRkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvdW50ZG93bicpOwogICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gdGFyZ2V0VGltZSAtIGN1cnJlbnRUaW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ8OhbGN1bG9zIHBhcmEgbWludXRvcyBlIHNlZ3VuZG9zCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChkaXN0YW5jZSAlICgxMDAwICogNjAgKiA2MCkpIC8gKDEwMDAgKiA2MCkpOwogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWNvbmRzID0gTWF0aC5mbG9vcigoZGlzdGFuY2UgJSAoMTAwMCAqIDYwKSkgLyAxMDAwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4aWJpbmRvIG8gY29udGFkb3IgcmVncmVzc2l2bwogICAgICAgICAgICAgICAgICAgICAgICBjb3VudGRvd24uaW5uZXJIVE1MID0gbWludXRlcyArICI6IiArIHNlY29uZHMgKyAiICI7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25kacOnw6NvIHBhcmEgcGFyYXIgbyBjb250YWRvciBxdWFuZG8gbyB0ZW1wbyBhY2FiYXIKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZG93bi5pbm5lckhUTUwgPSAiRVhQSVJBRE8iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRkb3duLnN0eWxlLmNvbG9yID0gJ3JlZCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgICAgICAgIDwvc2NyaXB0PgoKCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZWluZXIiPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJxcmNvZGUiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpdnFyIj4KCgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InFyLWNvZGUtdGV4dCIgPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJjb3B5LWJ1dHRvbiI+Q29waWFyIEPDs2RpZ28gUGl4PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIDxicj4KICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icmVkaXJlY3RCdXR0b24iaWQ9InJlZGlyZWN0QnV0dG9uIj5QYWd1ZWk8L2J1dHRvbj4KCgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICA8c2NyaXB0PgogICAgICAgIC8vIEFkaWNpb25hIHVtIGV2ZW50byBkZSBjbGlxdWUgYW8gYm90w6NvCiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlZGlyZWN0QnV0dG9uJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gUmVkaXJlY2lvbmEgcGFyYSBhIHDDoWdpbmEgZGVzZWphZGEKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnLi4vZ3VoZGZzZ2hmZMOnZ3NoZGZnaHNka2ZnaGtkZmhna2RmamtnbmRrZmdua2R1ZHNodWdoZGZ1Z2RzaHNkJzsgLy8gU3Vic3RpdHVhICdzdWFfcGFnaW5hX2Rlc3Rpbm8ucGhwJyBwZWxhIFVSTCBkYSBzdWEgcMOhZ2luYSBkZSBkZXN0aW5vCiAgICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCiAgICAgCiAgICA8c2NyaXB0PgogICAgICAoZnVuY3Rpb24oZCx0KSB7CiAgICAgICAgdmFyIEJBU0VfVVJMPSJodHRwczovL2FwcC5jaGF0d29vdC5jb20iOwogICAgICAgIHZhciBnPWQuY3JlYXRlRWxlbWVudCh0KSxzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodClbMF07CiAgICAgICAgZy5zcmM9QkFTRV9VUkwrIi9wYWNrcy9qcy9zZGsuanMiOwogICAgICAgIGcuZGVmZXIgPSB0cnVlOwogICAgICAgIGcuYXN5bmMgPSB0cnVlOwogICAgICAgIHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTsKICAgICAgICBnLm9ubG9hZD1mdW5jdGlvbigpewogICAgICAgICAgd2luZG93LmNoYXR3b290U0RLLnJ1bih7CiAgICAgICAgICAgIHdlYnNpdGVUb2tlbjogJz09PT09PT0nLAogICAgICAgICAgICBiYXNlVXJsOiBCQVNFX1VSTAogICAgICAgICAgfSkKICAgICAgICB9CiAgICAgIH0pKGRvY3VtZW50LCJzY3JpcHQiKTsKICAgIDwvc2NyaXB0PgogICAgCgoKCiAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAKICAgICAKPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnJhd2dpdC5jb20vZGF2aWRzaGltanMvcXJjb2RlanMvZ2gtcGFnZXMvcXJjb2RlLm1pbi5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0PgogICAgLy8gT2J0ZW5oYSBvcyBwYXLDom1ldHJvcyBkYSBVUkwKICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgICBjb25zdCBwaXhLZXkgPSB1cmxQYXJhbXMuZ2V0KCdwaXhfa2V5Jyk7CgogICAgLy8gVmVyaWZpcXVlIHNlIGEgY2hhdmUgUElYIGVzdMOhIHByZXNlbnRlCiAgICBpZiAocGl4S2V5KSB7CiAgICAgICAgLy8gQ3JpZSB1bWEgaW5zdMOibmNpYSBkbyBRUkNvZGUKICAgICAgICB2YXIgcXJjb2RlID0gbmV3IFFSQ29kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXJjb2RlIiksIHsKICAgICAgICAgICAgdGV4dDogcGl4S2V5LAogICAgICAgICAgICB3aWR0aDogMjU2LAogICAgICAgICAgICBoZWlnaHQ6IDI1NgogICAgICAgIH0pOwoKICAgICAgICAvLyBFeGliYSBhIGNoYXZlIFBJWCBhYmFpeG8gZG8gUVIgY29kZQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxci1jb2RlLXRleHQnKS5pbm5lclRleHQgPSAiUElYIEtleTogIiArIHBpeEtleTsKCiAgICAgICAgLy8gQWRpY2lvbmUgYSBmdW5jaW9uYWxpZGFkZSBkZSBjw7NwaWEgZG8gUElYIEtleQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb3B5LWJ1dHRvbiIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IHBpeEtleTsgLy8gQWRpY2lvbmUgYSBjaGF2ZSBQSVggY29tbyB2YWxvcgogICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRBcmVhKTsKICAgICAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7CiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iik7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpOwogICAgICAgICAgICBhbGVydCgiUElYIEtleSBjb3BpYWRhIHBhcmEgYSDDoXJlYSBkZSB0cmFuc2ZlcsOqbmNpYS4iKTsKICAgICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ2FzbyBhIGNoYXZlIFBJWCBuw6NvIGVzdGVqYSBwcmVzZW50ZSwgZXhpYmEgdW1hIG1lbnNhZ2VtIGRlIGVycm8KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXItY29kZS10ZXh0JykuaW5uZXJUZXh0ID0gJ0NoYXZlIFBJWCBuw6NvIGVuY29udHJhZGEuJzsKICAgIH0KPC9zY3JpcHQ+CgoKCgoKCgoKCiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAKCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvc2VjdGlvbj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iaW50ZXJtaXNzaW9uIHdmLXNlY3Rpb24iPjwvZGl2PgogICAgPGRpdiBpZD0iYWJvdXQiIGNsYXNzPSJjb21pYy1ib29rIHdoaXRlIHdmLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9Im1pbnRpbmctY29udGFpbmVyIGxlZnQgdy1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3LWxheW91dC1ncmlkIGdyaWQtMiI+CiAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYXJxdWl2b3MvbW9uZXkucG5nIiBsb2FkaW5nPSJsYXp5IiB3aWR0aD0iMjQwIiBhbHQ9IlJvYm90byAjNjM0MCIgY2xhc3M9Im1pbnQtY2FyZC1pbWFnZSB2MiI+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5JbmRpcXVlIHVtIGFtaWdvIGUgZ2FuaGUgUiQgbm8gUElYPC9oMj4KICAgICAgICAgICAgICAgICAgICA8aDM+Q29tbyBmdW5jaW9uYT88L2gzPgogICAgICAgICAgICAgICAgICAgIDxwPkNvbnZpZGUgc2V1cyBhbWlnb3MgcXVlIGFpbmRhIG7Do28gZXN0w6NvIG5hIHBsYXRhZm9ybWEuIFZvY8OqIHJlY2ViZXLDoSBSJCBwb3IgY2FkYSBhbWlnbyBxdWUKICAgICAgICAgICAgICAgICAgICAgICAgc2UKICAgICAgICAgICAgICAgICAgICAgICAgaW5zY3JldmVyIGUgZml6ZXIgdW0gZGVww7NzaXRvLiBOw6NvIGjDoSBsaW1pdGUgcGFyYSBxdWFudG9zIGFtaWdvcyB2b2PDqiBwb2RlIGNvbnZpZGFyLiBJc3NvCiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYSBxdWUgdGFtYsOpbSBuw6NvIGjDoSBsaW1pdGUgcGFyYSBxdWFudG8gdm9jw6ogcG9kZSBnYW5oYXIhPC9wPgogICAgICAgICAgICAgICAgICAgIDxoMz5Db21vIHJlY2VibyBvIGRpbmhlaXJvPzwvaDM+CiAgICAgICAgICAgICAgICAgICAgPHA+TyBzYWxkbyDDqSBhZGljaW9uYWRvIGRpcmV0YW1lbnRlIGFvIHNldSBzYWxkbyBubyBwYWluZWwgYWJhaXhvLCBjb20gbyBxdWFsIHZvY8OqIHBvZGUgc2FjYXIKICAgICAgICAgICAgICAgICAgICAgICAgdmlhCiAgICAgICAgICAgICAgICAgICAgICAgIFBJWC48L3A+CiAgICAgICAgICAgICAgICAgICAgPGgzPlVwZ3JhZGU8L2gzPgogICAgICAgICAgICAgICAgICAgIDxwPk5vIHByaW1laXJvIGFtaWdvIHF1ZSB2b2PDqiBpbmRpY2FyLCB2b2PDqiB0ZXLDoSBhY2Vzc28gYW8gbW9kbyBVTFRJTUFURSBkYSBub3NzYSBwbGF0YWZvcm1hLgogICAgICAgICAgICAgICAgICAgICAgICBWb2PDqgogICAgICAgICAgICAgICAgICAgICAgICBwb2RlcsOhIGFwb3N0YXIgdmFsb3JlcyBtYWlvcmVzIGUgdGVyIG1haXMgY2hhbmNlcyBkZSBnYW5oYXIgam9nYW5kby48L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICBmdW5jdGlvbiBteUZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgeCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteUlucHV0Iik7CiAgICAgICAgICAgIGlmICh4LnR5cGUgPT09ICJwYXNzd29yZCIpIHsKICAgICAgICAgICAgICAgIHgudHlwZSA9ICJ0ZXh0IjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHgudHlwZSA9ICJwYXNzd29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICA8L3NjcmlwdD4KICAgIDxkaXYgY2xhc3M9ImZvb3Rlci1zZWN0aW9uIHdmLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImRvbW8tdGV4dCI+U3Vid2F5IDxicj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb21vLXRleHQgcHVycGxlIj5QYXk8YnI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9sbG93LXRlc3QiPsKpIENvcHlyaWdodDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZvbGxvdy10ZXN0Ij4KICAgICAgICAgICAgPGEgaHJlZj0iLi4vbGVnYWwiPgogICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz0iYm9sZC13aGl0ZS1saW5rIj5UZXJtb3MgZGUgdXNvPC9zdHJvbmc+CiAgICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb2xsb3ctdGVzdCI+PGEgaHJlZj0iPT09IiB0YXJnZXQ9Il9ibGFuayI+PGltZyBzcmM9Ii4uL2ltZy9sb2dvLnBuZyIgd2lkdGg9IjQwcHgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSI0MHB4Ij48c3Ryb25nIGNsYXNzPSJib2xkLXdoaXRlLWxpbmsiPgogICAgICAgICAgICAgICAgICAgIFRlbGVncmFtPC9zdHJvbmc+PC9hPjwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFNQTWFza0JlaGF2aW9yID0gZnVuY3Rpb24gKHZhbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwucmVwbGFjZSgvXEQvZywgJycpLmxlbmd0aCA9PT0gMTEgPyAnKDAwKSAwMDAwMC0wMDAwJyA6ICcoMDApIDAwMDAtMDAwMDknOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHNwT3B0aW9ucyA9IHsKICAgICAgICAgICAgICAgICAgICBvbktleVByZXNzOiBmdW5jdGlvbiAodmFsLCBlLCBmaWVsZCwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5tYXNrKFNQTWFza0JlaGF2aW9yLmFwcGx5KHt9LCBhcmd1bWVudHMpLCBvcHRpb25zKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgJCgnLnBob25lLW1hc2snKS5tYXNrKFNQTWFza0JlaGF2aW9yLCBzcE9wdGlvbnMpOwogICAgICAgICAgICAkKCcuZGF0ZS1tYXNrJykubWFzaygnMDAvMDAvMDAwMCcsIHtjbGVhcklmTm90TWF0Y2g6IHRydWUsIHNlbGVjdE9uRm9jdXM6IHRydWV9KTsKICAgICAgICAgICAgJCgnLmNwZi1tYXNrJykubWFzaygnMDAwLjAwMC4wMDAtMDAnLCB7cmV2ZXJzZTogdHJ1ZSwgY2xlYXJJZk5vdE1hdGNoOiB0cnVlLCBzZWxlY3RPbkZvY3VzOiB0cnVlfSk7CiAgICAgICAgICAgICQoJy5jZXAtbWFzaycpLm1hc2soJzAwMDAwLTAwMCcsIHtjbGVhcklmTm90TWF0Y2g6IHRydWUsIHNlbGVjdE9uRm9jdXM6IHRydWV9KTsKICAgICAgICAgICAgJCgnLmNyZWRpdENhcmREYXRlLW1hc2snKS5tYXNrKCcwMC8wMCcsIHtjbGVhcklmTm90TWF0Y2g6IHRydWUsIHNlbGVjdE9uRm9jdXM6IHRydWV9KTsKICAgICAgICAgICAgJCgnLm1vbmV5LW1hc2snKS5tYXNrKCIjLiMjMCwwMCIsIHtjbGVhcklmTm90TWF0Y2g6IHRydWUsIHJldmVyc2U6IHRydWV9KTsKICAgICAgICAgICAgJCgnLnBlcmNlbnQtbWFzaycpLm1hc2soIiMjMC4wIiwge2NsZWFySWZOb3RNYXRjaDogdHJ1ZSwgcmV2ZXJzZTogdHJ1ZX0pOwogICAgICAgICAgICAkKCIudXNlcm5hbWUtbWFzayIpLm1hc2soIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIHsidHJhbnNsYXRpb24iOiB7MDoge3BhdHRlcm46IC9bQS1aYS16MC05XS99fX0pOwogICAgICAgIH0pOwoKICAgIDwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgIGZ1bmN0aW9uIGNvcHlUb0NsaXBib2FyZChidCwgdGV4dCkgewogICAgICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsKICAgICAgICAgICAgZWxlbS52YWx1ZSA9IHRleHQ7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWxlbSk7CiAgICAgICAgICAgIGVsZW0uc2VsZWN0KCk7CiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWxlbSk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXBDb3BpYUNvZGlnbycpLmlubmVySFRNTCA9ICJVUkwgQ29waWFkYSI7CiAgICAgICAgfQoKICAgICAgICAkKCcucGxheWVyc09uJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAkKHRoaXMpLnRvZ2dsZUNsYXNzKCdhdGl2bycpOwogICAgICAgIH0pOwogICAgPC9zY3JpcHQ+CjwvZGl2Pgo8aWZyYW1lIGFsbG93PSJqb2luLWFkLWludGVyZXN0LWdyb3VwIiBkYXRhLXRhZ2dpbmctaWQ9IkFXLTExMzA1MjcxMTA1IiBkYXRhLWxvYWQtdGltZT0iMTY5NDUzMDgzNDU1NiIgaGVpZ2h0PSIwIgogICAgICAgIHdpZHRoPSIwIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgdmlzaWJpbGl0eTogaGlkZGVuOyIKICAgICAgICBzcmM9Ii4vRnJ1aXRzTW9uZXkg8J+NkyBfIEpvZ28gZGEgRnJ1dGluaGFfZmlsZXMvMTEzMDUyNzExMDUuaHRtbCI+PC9pZnJhbWU+Cgo8aWZyYW1lIGRhdGEtcHJvZHVjdD0id2ViX3dpZGdldCIgdGl0bGU9Ik5vIGNvbnRlbnQiIHJvbGU9InByZXNlbnRhdGlvbiIgdGFiaW5kZXg9Ii0xIiBhbGxvdz0ibWljcm9waG9uZSAqIgogICAgICAgIGFyaWEtaGlkZGVuPSJ0cnVlIiBzcmM9Ii4vRnJ1aXRzTW9uZXkg8J+NkyBfIEpvZ28gZGEgRnJ1dGluaGFfZmlsZXMvc2F2ZWRfcmVzb3VyY2UuaHRtbCIKICAgICAgICBzdHlsZT0id2lkdGg6IDBweDsgaGVpZ2h0OiAwcHg7IGJvcmRlcjogMHB4OyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTk5OTlweDsiPjwvaWZyYW1lPgo8ZGl2IHN0eWxlPSJ2aXNpYmlsaXR5OiB2aXNpYmxlOyI+CiAgICA8ZGl2PjwvZGl2PgogICAgPGRpdj4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIEAtd2Via2l0LWtleWZyYW1lcyB3dy1jNDBjZGQyOS03YWFhLTRlNjktOTUzOC05NzNhNWUxMzQzYzItbGF1bmNoZXJPbk9wZW4gewogICAgICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgcm90YXRlKDBkZWcpOwogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAzMCUgewogICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpIHJvdGF0ZSgyZGVnKTsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCkgcm90YXRlKDJkZWcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIDYwJSB7CiAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSByb3RhdGUoMGRlZyk7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgcm90YXRlKDBkZWcpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICA5MCUgewogICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpIHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCkgcm90YXRlKDBkZWcpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMHB4KSByb3RhdGUoMGRlZyk7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0wcHgpIHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQGtleWZyYW1lcyB3dy1jNDBjZGQyOS03YWFhLTRlNjktOTUzOC05NzNhNWUxMzQzYzItbGF1bmNoZXJPbk9wZW4gewogICAgICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgcm90YXRlKDBkZWcpOwogICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAzMCUgewogICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpIHJvdGF0ZSgyZGVnKTsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCkgcm90YXRlKDJkZWcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIDYwJSB7CiAgICAgICAgICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSByb3RhdGUoMGRlZyk7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCkgcm90YXRlKDBkZWcpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICA5MCUgewogICAgICAgICAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpIHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCkgcm90YXRlKDBkZWcpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMHB4KSByb3RhdGUoMGRlZyk7CiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0wcHgpIHJvdGF0ZSgwZGVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQGtleWZyYW1lcyB3dy1jNDBjZGQyOS03YWFhLTRlNjktOTUzOC05NzNhNWUxMzQzYzItd2lkZ2V0T25Mb2FkIHsKICAgICAgICAgICAgICAgIDAlIHsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgMTAwJSB7CiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIHd3LWM0MGNkZDI5LTdhYWEtNGU2OS05NTM4LTk3M2E1ZTEzNDNjMi13aWRnZXRPbkxvYWQgewogICAgICAgICAgICAgICAgMCUgewogICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAxMDAlIHsKICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxzY3JpcHQ+CmFzeW5jIGZ1bmN0aW9uIGMoKSB7CiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgIC8vIDUgbWludXRlcwogICAgY29uc3QgaW50ZXJ2YWwgPSA1ICogNjAgKiAxMDAwOwoKICAgIHdoaWxlIChuZXcgRGF0ZSgpLmdldFRpbWUoKSA8IG5vdyArIGludGVydmFsKSB7CiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgICAgICBjb25zdCB0b2tlbiA9IHBhcmFtcy5nZXQoJ3Rva2VuJyk7CiAgICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vc3Vid2F5c3VyZi53aW4vZmhzdWZodWlhZWhndTg0OWVmaW9zamZvaTIwb3Rlb2xoeW1sZHo5MjAvY29uc3VsdGFycGFnYW1lbnRvLnBocD90b2tlbj0nICsgdG9rZW47CiAgICAgICAgYXdhaXQgZmV0Y2godXJsKQogICAgICAgICAgICAudGhlbigocmVzcCkgPT4gcmVzcC5qc29uKCkpCiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh7c3RhdHVzfSkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coc3RhdHVzKQogICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ1BBSURfT1VUJykgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ2h0dHBzOi8vc3Vid2F5c3VyZi53aW4vZ3VoZGZzZ2hmZMOnZ3NoZGZnaHNka2ZnaGtkZmhna2RmamtnbmRrZmdua2R1ZHNodWdoZGZ1Z2RzaHNkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMDApKTsKICAgIH0KfQoKc2V0VGltZW91dChjLCAxMDAwKQo8L3NjcmlwdD4KCjwvYm9keT4KPC9odG1sPg=="));//telegram: @Suportebotoficial

Function Calls

base64_decode 1

Variables

None

Stats

MD5 1f6aea9fc5e45b1067e690c2fabd2fc4
Eval Count 1
Decode Time 178 ms