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

Decoded Output download

?>b'<?php
include_once dirname(__FILE__) . \'/config.php\';
include_once dirname(__FILE__) . \'/system/db.php\';
include_once dirname(__FILE__) . \'/system/main.php\';
include_once dirname(__FILE__) . \'/system/class.truewallet.php\';

if (!isset($config)) {
    exit;
}
if ($config[\'auto_ssl\']) {
    if (isset($_SERVER[\'HTTPS\']) && $_SERVER[\'HTTPS\'] == \'off\') {
        exit(header("Location: " . $config[\'auto_ssl_url\'] . ""));
    }
}

if (isset($_SERVER[\'HTTP_CF_CONNECTING_IP\'])) {
    $ip = $_SERVER[\'HTTP_CF_CONNECTING_IP\'];
} else {
    $ip = $_SERVER["REMOTE_ADDR"];
}
?>
<DOCTYPE html>
    <html>
        <?php include_once dirname(__FILE__) . \'/head.php\'; ?>
        <body>
            <?php include_once dirname(__FILE__) . \'/header.php\'; ?>
            <div class="container">
                <?php
                if ($config[\'map_tp\']) {
                    if (isset($_GET[\'char_id_map\']) || isset($_GET[\'map_pos\'])) {
                        if (empty($_GET[\'char_id_map\']) || empty($_GET[\'map_pos\'])) {
                            exit(\'<script>sweetAlert("", "!", "info")</script>\');
                        }
                        $find_data_account = query($conn, "SELECT * FROM UsersData WHERE CustomerID = ?;", array($_SESSION[\'CustomerID\']));
                        $output_data_account = sqlsrv_fetch_array($find_data_account, SQLSRV_FETCH_ASSOC);
                        if ($output_data_account[\'GamePoints\'] < $config[\'map_tp_price\']) {
                            exit(\'<script>sweetAlert("", " Gamecoin(GC)   \' . $output_data_account[\'GamePoints\'] - $config[\'map_tp_price\'] . \' GC!", "info")</script>\');
                        } else {
                            query($conn, "UPDATE UsersData SET GamePoints = ? WHERE CustomerID = ?;", array($output_data_account[\'GamePoints\'] - $config[\'map_tp_price\'], $_SESSION[\'CustomerID\']));
                            query($conn, "UPDATE UsersChars SET GamePos = ? WHERE CharID = ?;", array($_GET[\'map_pos\'], $_GET[\'char_id_map\']));
                            exit(\'<script>sweetAlert("", " \' . $_GET[\'map_pos\'] . \'", "success").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                        }
                    }
                }
                if ($config[\'topup_rename_price\'] > 0) {
                    if (isset($_GET[\'char_id\']) || isset($_GET[\'char_rename\']) || isset($_GET[\'truemoney_pin_code\'])) {
                        if (empty($_GET[\'char_id\']) || empty($_GET[\'char_rename\']) || empty($_GET[\'truemoney_pin_code\'])) {
                            exit(\'<script>sweetAlert("", "!", "info")</script>\');
                        }
                        if (strlen($_GET[\'char_rename\']) >= $config[\'char_rename_maxleng\'] || strlen($_GET[\'truemoney_pin_code\']) < $config[\'maxleng\'][\'truemoney\']) {
                            exit(\'<script>sweetAlert( "", "  \' . $config[\'char_rename_maxleng\'] . \'  \' . $config[\'maxleng\'][\'truemoney\'] . \'", "warning" )</script>\');
                        }
                        if (strlen($_GET[\'truemoney_pin_code\']) < $config[\'maxleng\'][\'truemoney\'] || !is_numeric($_GET[\'truemoney_pin_code\'])) {
                            exit(\'<script>sweetAlert( "", " \' . $config[\'maxleng\'][\'truemoney\'] . \' ", "error" ).then((value) => {
  $(location).attr("href","index.php");
});</script>\');
                        }
                        if ($config[\'char_rename_language\'] == 1) {
                            if (!is_str($_GET[\'char_rename\'])) {
                                exit(\'<script>sweetAlert("", " a-zA-Z0-9_ !", "warning")</script>\');
                            }
                        } elseif ($config[\'char_rename_language\'] == 2) {
                            if (!is_str_th($_GET[\'char_rename\'])) {
                                exit(\'<script>sweetAlert("", " 0-9A-Z- !", "warning")</script>\');
                            }
                        } {

                            if ($_SESSION[\'block_time\'] >= (time() - 30)) {
                                if (isset($_SESSION["wallet_check"])) {
                                    if ($_SESSION["wallet_check"] >= 5) {
                                        exit(\'<script>sweetAlert( "", ",  5 ", "danger" )</script>\');
                                    }
                                } else {
                                    $_SESSION["wallet_check"] = 0;
                                }
                                exit(\'<script>sweetAlert( "", " 30  1 ", "info" )</script>\');
                            } else {

                                $wallet = new TrueWallet();

                                $find_data_char = query($conn, "SELECT * FROM UsersChars WHERE CharID = ? AND Gamertag = ?;", array($_GET[\'char_id\'], $_GET[\'char_rename\']));
                                $output_data_char = sqlsrv_fetch_array($find_data_char, SQLSRV_FETCH_ASSOC);

                                $find_data_card = query($conn, "SELECT * FROM wz_TruemoneyTopup_TBL WHERE cardserial = ?;", array($_GET[\'truemoney_pin_code\']));
                                $count_card = sqlsrv_num_rows($find_data_card);

                                if ($output_data_char[\'Gamertag\'] == $_GET[\'char_rename\']) {
                                    exit(\'<script>sweetAlert( "", ": \' . $_GET[\'char_rename\'] . \'", "warning" )</script>\');
                                } else {

                                    if ($count_card >= 1) {
                                        exit(\'<script>sweetAlert( "", "", "error" ).then((value) => {
  $(location).attr("href","index.php");
});</script>\');
                                    } else {
                                        $chk_topup = $wallet->Topup($_GET[\'truemoney_pin_code\']);
                                        if ($chk_topup[\'isField\']) {
                                            exit(\'<script>sweetAlert( "", "   API!", "error" )</script>\');
                                        } else {
                                            if ($chk_topup[\'amount\'] <= 0) {
                                                $_SESSION[\'block_time\'] = time();
                                                $_SESSION["wallet_check"] ++;
                                                exit(\'<script>sweetAlert( "", "", "error" ).then((value) => {
  $(location).attr("href","index.php");
});</script>\');
                                            }
                                            if ($chk_topup[\'amount\'] >= $config[\'topup_rename_price\']) {
                                                query($conn, "UPDATE UsersChars SET Gamertag = ? WHERE CharID = ?;", array($_GET[\'char_rename\'], $_GET[\'char_id\']));
                                                query($conn, "INSERT INTO [wz_TruemoneyTopup_TBL]([email],[cardserial],[amount],[timer]) VALUES (?, ?, ?, ?);", array(\' \' . $em . \' \', \' \' . $tm . \' \', $chk_topup[\'amount\'], GetTime()));
                                                exit(\'<script>sweetAlert( "", ": \' . $chk_topup[\'amount\'] . \'  , \' . $_GET[\'char_rename\'] . \'", "success" ).then((value) => {
  $(location).attr("href","index.php");
});</script>\');
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                } else {
                    if (isset($_GET[\'char_id\']) || isset($_GET[\'char_rename\'])) {
                        if (empty($_GET[\'char_id\']) || empty($_GET[\'char_rename\'])) {
                            exit(\'<script>sweetAlert("", "!", "info")</script>\');
                        }
                        if (strlen($_GET[\'char_rename\']) >= $config[\'char_rename_maxleng\']) {
                            exit(\'<script>sweetAlert( "", " \' . $config[\'char_rename_maxleng\'] . \'", "warning" )</script>\');
                        }
                        if ($config[\'char_rename_language\'] == 1) {
                            if (!is_str($_GET[\'char_rename\'])) {
                                exit(\'<script>sweetAlert("", " a-zA-Z0-9_ !", "warning")</script>\');
                            }
                        } elseif ($config[\'char_rename_language\'] == 2) {
                            if (!is_str_th($_GET[\'char_rename\'])) {
                                exit(\'<script>sweetAlert("", " 0-9A-Z- !", "warning")</script>\');
                            }
                        } {
                            $find_data_char = query($conn, "SELECT * FROM UsersChars WHERE CharID = ? AND Gamertag = ?;", array($_GET[\'char_id\'], $_GET[\'char_rename\']));
                            $output_data_char = sqlsrv_fetch_array($find_data_char, SQLSRV_FETCH_ASSOC);
                            if ($output_data_char[\'Gamertag\'] == $_GET[\'char_rename\']) {
                                exit(\'<script>sweetAlert( "", ": \' . $_GET[\'char_rename\'] . \'", "warning" )</script>\');
                            } else {
                                query($conn, "UPDATE UsersChars SET Gamertag = ? WHERE CharID = ?;", array($_GET[\'char_rename\'], $_GET[\'char_id\']));
                                exit(\'<script>sweetAlert("", ": \' . $_GET[\'char_rename\'] . \'", "success").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                            }
                        }
                    }
                }

                if (isset($_GET[\'em\']) || isset($_GET[\'pw\']) || isset($_GET[\'tc\'])) {
                    if (empty($_GET[\'em\']) || empty($_GET[\'pw\']) || empty($_GET[\'tc\'])) {
                        exit(\'<script>sweetAlert("", "!", "info")</script>\');
                    }
                    if ($_SESSION[\'thaicaptcha_md5\'] != md5($_GET[\'tc\'])) {
                        exit(\'<script>sweetAlert("", "?", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                    }
                    if ($config[\'format_email_login\']) {
                        if (!filter_var($_GET[\'em\'], FILTER_VALIDATE_EMAIL)) {
                            exit(\'<script>sweetAlert( "", " E-Mail  [email protected]", "warning" )</script>\');
                        }
                    }
                    if (!is_str($_GET[\'pw\'])) {
                        exit(\'<script>sweetAlert( "", " a-zA-Z0-9_ ", "warning" )</script>\');
                    } {
                        if (Login($_GET[\'em\'], $_GET[\'pw\'])) {
                            exit(\'<script>sweetAlert("", ": \' . $_SESSION[\'email\'] . \'", "success").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                        } else {
                            exit(\'<script>sweetAlert("", "", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                        }
                    }
                }
                if (isset($_GET[\'change_pwold\']) || isset($_GET[\'change_pw\']) || isset($_GET[\'change_pwc\'])) {

                    if ($config[\'login_md5\']) {
                        $find_data_all_account_email = query($conn, "SELECT * FROM Accounts WHERE CustomerID = ? AND MD5Password = ?;", array($_SESSION[\'CustomerID\'], md5($config[\'login_md5_salt\'] . $_GET[\'change_pwold\'])));
                    } else {
                        $find_data_all_account_email = query($conn, "SELECT * FROM Accounts WHERE CustomerID = ? AND MD5Password = ?;", array($_SESSION[\'CustomerID\'], $_GET[\'change_pwold\']));
                    }
                    $row = sqlsrv_fetch_array($find_data_all_account_email, SQLSRV_FETCH_ASSOC);
                    if ($config[\'login_md5\']) {
                        if ($row[\'MD5Password\'] == md5($config[\'login_md5_salt\'] . $_GET[\'change_pwold\'])) {
                            if ($_GET[\'change_pwold\'] == $_GET[\'change_pw\'] || $_GET[\'change_pwold\'] == $_GET[\'change_pwc\']) {
                                exit(\'<script>sweetAlert("", "", "warning")</script>\');
                            }
                            if (!is_str($_GET[\'change_pwold\']) || !is_str($_GET[\'change_pw\']) || !is_str($_GET[\'change_pwc\'])) {
                                exit(\'<script>sweetAlert("", " a-zA-Z0-9_ ", "warning")</script>\');
                            }
                            if ($_GET[\'change_pw\'] != $_GET[\'change_pwc\']) {
                                exit(\'<script>sweetAlert("", "", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                            }
                            if ($row[\'MD5Password\'] == $_GET[\'change_pw\'] || $row[\'MD5Password\'] == $_GET[\'change_pwc\']) {
                                exit(\'<script>sweetAlert("", "", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                            } else {
                                $change_s = "EXEC WZ_ACCOUNT_ChangePassword_New_md5 \'" . $_SESSION[\'CustomerID\'] . "\', \'" . $_GET[\'change_pw\'] . "\'";
                                $change_q = sqlsrv_query($conn, $change_s, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));

                                exit(\'<script>sweetAlert("", ": \' . $_GET[\'change_pw\'] . \'", "success").then((value) => {
                                  $(location).attr("href","index.php?do=logout");
                                  });</script>\');
                            }
                        } else {
                            exit(\'<script>sweetAlert("", "", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                        }
                    } else {
                        if ($row[\'MD5Password\'] == $_GET[\'change_pwold\']) {
                            if ($_GET[\'change_pwold\'] == $_GET[\'change_pw\'] || $_GET[\'change_pwold\'] == $_GET[\'change_pwc\']) {
                                exit(\'<script>sweetAlert("", "", "warning")</script>\');
                            }
                            if (!is_str($_GET[\'change_pwold\']) || !is_str($_GET[\'change_pw\']) || !is_str($_GET[\'change_pwc\'])) {
                                exit(\'<script>sweetAlert("", " a-zA-Z0-9_ ", "warning")</script>\');
                            }
                            if ($_GET[\'change_pw\'] != $_GET[\'change_pwc\']) {
                                exit(\'<script>sweetAlert("", "", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                            }
                            if ($row[\'MD5Password\'] == $_GET[\'change_pw\'] || $row[\'MD5Password\'] == $_GET[\'change_pwc\']) {
                                exit(\'<script>sweetAlert("", "", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                            } else {
                                $change_s = "EXEC WZ_ACCOUNT_ChangePassword_New \'" . $_SESSION[\'CustomerID\'] . "\', \'" . $_GET[\'change_pw\'] . "\'";
                                $change_q = sqlsrv_query($conn, $change_s, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
                                exit(\'<script>sweetAlert("", ": \' . $_GET[\'change_pw\'] . \'", "success").then((value) => {
                                  $(location).attr("href","index.php?do=logout");
                                  });</script>\');
                            }
                        } else {
                            exit(\'<script>sweetAlert("", "", "error").then((value) => {
                                  $(location).attr("href","index.php");
                                  });</script>\');
                        }
                    }
                }

                if ($_GET[\'do\'] == "logout") {
                    include_once dirname(__FILE__) . \'/login.php\';
                    include_once dirname(__FILE__) . \'/logout.php\';
                }
                if ($_GET[\'do\'] == "logout_fb") {
                    include_once dirname(__FILE__) . \'/login.php\';
                    include_once dirname(__FILE__) . \'/logout_fb.php\';
                }
                if (isset($_GET[\'g_email\']) || isset($_GET[\'truemoney_card\'])) {

                    $em = $_GET[\'g_email\'];
                    $tm = $_GET[\'truemoney_card\'];
                    if (empty($tm) || empty($em)) {
                        exit(\'<script>sweetAlert( "", " ", "info" )</script>\');
                    }
                    /* if (!filter_var($em, FILTER_VALIDATE_EMAIL)) {
                      exit(\'<script>sweetAlert( "", " E-Mail  [email protected]", "warning" )</script>\');
                      } */
                    if (strlen($tm) < $config[\'maxleng\'][\'truemoney\']) {
                        exit(\'<script>sweetAlert( "", " 14 ", "warning" )</script>\');
                    } elseif (strlen($tm) < $config[\'maxleng\'][\'truemoney\'] || !is_numeric($tm)) {
                        exit(\'<script>sweetAlert( "", " 14 ", "warning" )</script>\');
                    } {
                        if ($_SESSION[\'block_time\'] >= (time() - 30)) {
                            if (isset($_SESSION["wallet_check"])) {
                                if ($_SESSION["wallet_check"] >= 5) {
                                    exit(\'<script>sweetAlert( "", ",  5 ", "danger" )</script>\');
                                }
                            } else {
                                $_SESSION["wallet_check"] = 0;
                            }
                            exit(\'<script>sweetAlert( "", " 30  1 ", "info" )</script>\');
                        } else {

                            $wallet = new TrueWallet();

                            $find_data_account_email = query($conn, "SELECT * FROM Accounts WHERE email = ?;", array($em));
                            $count_email = sqlsrv_num_rows($find_data_account_email);

                            $find_data_card = query($conn, "SELECT * FROM wz_TruemoneyTopup_TBL WHERE cardserial = ?;", array($_GET[\'truemoney_card\']));
                            $count_card = sqlsrv_num_rows($find_data_card);

                            $row_cd = sqlsrv_fetch_array($find_data_account_email, SQLSRV_FETCH_ASSOC);

                            if ($count_email <= 0) {
                                exit(\'<script>sweetAlert( "", " email : \' . $em . \'", "error" )</script>\');
                            } else {
                                if ($count_card >= 1) {
                                    exit(\'<script>sweetAlert( "", "", "error" ).then((value) => {
  $(location).attr("href","index.php");
});</script>\');
                                } else {
                                    $chk_topup = $wallet->Topup($tm);
                                    if ($chk_topup[\'isField\']) {
                                        exit(\'<script>sweetAlert( "", "   API!", "error" )</script>\');
                                    } else {
                                        if ($chk_topup[\'amount\'] <= 0) {
                                            $_SESSION[\'block_time\'] = time();
                                            $_SESSION["wallet_check"] ++;
                                            exit(\'<script>sweetAlert( "", "", "error" ).then((value) => {
  $(location).attr("href","index.php");
});</script>\');
                                        }
                                        if ($chk_topup[\'amount\'] > 0) {
                                            query($conn, "INSERT INTO [wz_TruemoneyTopup_TBL]([email],[cardserial],[amount],[timer]) VALUES (?, ?, ?, ?);", array(\'\' . $em . \'\', \'\' . $tm . \'\', $chk_topup[\'amount\'], GetTime()));
                                            $zp = "EXEC WZ_TOPUP2017 \'" . $chk_topup[\'amount\'] . "\', \' " . $row_cd["CustomerID"] . " \', \'$em\'";
                                            $zq = sqlsrv_query($conn, $zp, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
                                            exit(\'<script>sweetAlert( "", ": \' . $chk_topup[\'amount\'] . \' ", "success" ).then((value) => {
  $(location).attr("href","index.php");
});</script>\');
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                ?>

                <!--breadcrumb-->
                <?php if ($config[\'Promotion\']) { ?>
                    <div class="row">
                        <div class="col-xs-12">
                            <ol class="breadcrumb">
                                <h4>
                                    <li>
                                    <center>
                                        <marquee><img src="img/gcx3.png" width="25%" height="25%"></marquee>
                                    </center>
                                    </li>
                                </h4>
                            </ol>
                        </div>
                    </div>
                <?php } ?>

                <!--store-->
                <?php
                if (isset($_SESSION[\'CustomerID\'])) {
                    include_once dirname(__FILE__) . \'/user.php\';
                } elseif (isset($_GET[\'form\']) && $config[\'fb\'][\'regis\']) {
                    if (isset($_SESSION["fb_id"]) || isset($_SESSION["fb_email"]) || isset($_SESSION["fb_name"]) || isset($_SESSION["fb_link"]) || isset($_SESSION["fb_img"])) {
                        if (isset($_GET[\'form\']) == "regis_fb") {
                            include_once dirname(__FILE__) . \'/regis_fb.php\';
                        }
                    } else {
                        exit(rdr("index.php"));
                    }
                } else {
                    include_once dirname(__FILE__) . \'/login.php\';
                }
                ?>
            </div>

            <footer>
                <div class="jumbotron">
                    <div class="container text-center">
                        <small class="text-muted">Products from </small>
                        <small class="text-muted"><a href="https://www.facebook.com/aukarapol.sangnoi" target="_blank">DEV AUKARAPOL.</a></small>
                    </div>
                </div>
            </footer>
            <!-- Modal -->
            <?php
            if ($config[\'map_tp\']) {
                include_once dirname(__FILE__) . \'/map.php\';
            }
            if ($config[\'topup_rename\']) {
                include_once dirname(__FILE__) . \'/buy_char.php\';
            }
            include_once dirname(__FILE__) . \'/log.php\';
            include_once dirname(__FILE__) . \'/promotion.php\';
            include_once dirname(__FILE__) . \'/download.php\';
            include_once dirname(__FILE__) . \'/changepw.php\';
            if ($config[\'Merchants_List\']) {
                include_once dirname(__FILE__) . \'/Merchants_List.php\';
            }
            ?>
            <?php if ($config[\'anticopy_noob_programer\']) { ?>
                <script src="js/nrc.js"></script>
                <script src="js/aos.js"></script>
                <script src="js/list.min.js"></script>
                <script src="js/lity.js"></script>
            <?php } ?>
            <?php if ($config[\'shortcut_link\']) { ?>
                <script>
                    shortcut = {all_shortcuts: {}, add: function (a, b, c) {
                            var d = {type: "keydown", propagate: !1, disable_in_input: !1, target: document, keycode: !1};
                            if (c)
                                for (var e in d)
                                    "undefined" == typeof c[e] && (c[e] = d[e]);
                            else
                                c = d;
                            d = c.target, "string" == typeof c.target && (d = document.getElementById(c.target)), a = a.toLowerCase(), e = function (d) {
                                d = d || window.event;
                                if (c.disable_in_input) {
                                    var e;
                                    d.target ? e = d.target : d.srcElement && (e = d.srcElement), 3 == e.nodeType && (e = e.parentNode);
                                    if ("INPUT" == e.tagName || "TEXTAREA" == e.tagName)
                                        return
                                }
                                d.keyCode ? code = d.keyCode : d.which && (code = d.which), e = String.fromCharCode(code).toLowerCase(), 188 == code && (e = ","), 190 == code && (e = ".");
                                var f = a.split("+"), g = 0, h = {"`": "~", 1: "!", 2: "@", 3: "#", 4: "$", 5: "%", 6: "^", 7: "&", 8: "*", 9: "(", 0: ")", "-": "_", "=": "+", ";": ":", "\'": \'"\', ",": "<", ".": ">", "/": "?", "\": "|"}, i = {esc: 27, escape: 27, tab: 9, space: 32, "return": 13, enter: 13, backspace: 8, scrolllock: 145, scroll_lock: 145, scroll: 145, capslock: 20, caps_lock: 20, caps: 20, numlock: 144, num_lock: 144, num: 144, pause: 19, "break": 19, insert: 45, home: 36, "delete": 46, end: 35, pageup: 33, page_up: 33, pu: 33, pagedown: 34, page_down: 34, pd: 34, left: 37, up: 38, right: 39, down: 40, f1: 112, f2: 113, f3: 114, f4: 115, f5: 116, f6: 117, f7: 118, f8: 119, f9: 120, f10: 121, f11: 122, f12: 123}, j = !1, l = !1, m = !1, n = !1, o = !1, p = !1, q = !1, r = !1;
                                d.ctrlKey && (n = !0), d.shiftKey && (l = !0), d.altKey && (p = !0), d.metaKey && (r = !0);
                                for (var s = 0; k = f[s], s < f.length; s++)
                                    "ctrl" == k || "control" == k ? (g++, m = !0) : "shift" == k ? (g++, j = !0) : "alt" == k ? (g++, o = !0) : "meta" == k ? (g++, q = !0) : 1 < k.length ? i[k] == code && g++ : c.keycode ? c.keycode == code && g++ : e == k ? g++ : h[e] && d.shiftKey && (e = h[e], e == k && g++);
                                if (g == f.length && n == m && l == j && p == o && r == q && (b(d), !c.propagate))
                                    return d.cancelBubble = !0, d.returnValue = !1, d.stopPropagation && (d.stopPropagation(), d.preventDefault()), !1
                            }, this.all_shortcuts[a] = {callback: e, target: d, event: c.type}, d.addEventListener ? d.addEventListener(c.type, e, !1) : d.attachEvent ? d.attachEvent("on" + c.type, e) : d["on" + c.type] = e
                        }, remove: function (a) {
                            var a = a.toLowerCase(), b = this.all_shortcuts[a];
                            delete this.all_shortcuts[a];
                            if (b) {
                                var a = b.event, c = b.target, b = b.callback;
                                c.detachEvent ? c.detachEvent("on" + a, b) : c.removeEventListener ? c.removeEventListener(a, b, !1) : c["on" + a] = !1
                            }
                        }}, shortcut.add("Ctrl+U", function () {
                        top.location.href = "<?php echo $config[\'shortcut_to_link\']; ?>"
                    }), shortcut.add("Ctrl+Shift+J", function () {
                        top.location.href = "<?php echo $config[\'shortcut_to_link\']; ?>"
                    }), shortcut.add("F12", function () {
                        top.location.href = "<?php echo $config[\'shortcut_to_link\']; ?>"
                    }), shortcut.add("F3", function () {
                        top.location.href = "<?php echo $config[\'shortcut_to_link\']; ?>"
                    }), shortcut.add("Ctrl+F", function () {
                        top.location.href = "<?php echo $config[\'shortcut_to_link\']; ?>"
                    });

                </script>
            <?php } ?>
            <?php if ($config[\'fb\'][\'regis\']) { ?>
                <script>
                    var bFbStatus = false;
                    var fbID = "";
                    var fbName = "";
                    var fbEmail = "";

                    window.fbAsyncInit = function () {
                        FB.init({
                            appId: \'<?php echo $config[\'fb_app_id\']; ?>\',
                            cookie: true,
                            xfbml: true,
                            version: \'v2.8\'
                        });
                        FB.AppEvents.logPageView();
                    };

                    (function (d, s, id) {
                        var js, fjs = d.getElementsByTagName(s)[0];
                        if (d.getElementById(id)) {
                            return;
                        }
                        js = d.createElement(s);
                        js.id = id;
                        js.src = "js/sdk.js";
                        fjs.parentNode.insertBefore(js, fjs);
                    }(document, \'script\', \'facebook-jssdk\'));


                    function statusChangeCallback(response)
                    {

                        if (bFbStatus == false)
                        {
                            fbID = response.authResponse.userID;

                            if (response.status == \'connected\') {
                                getCurrentUserInfo(response)
                            } else {
                                FB.login(function (response) {
                                    if (response.authResponse) {
                                        getCurrentUserInfo(response)
                                    } else {
                                        console.log(\'Auth cancelled.\')
                                    }
                                }, {scope: \'email\'});
                            }
                        }


                        bFbStatus = true;
                    }


                    function getCurrentUserInfo() {

                        FB.api(\'/me?fields=name,email\', function (userInfo) {

                            fbName = userInfo.name;
                            fbEmail = userInfo.email;

                            $("#hdnFbID").val(fbID);
                            $("#hdnName ").val(fbName);
                            $("#hdnEmail").val(fbEmail);
                            $("#frmMainFB").submit();

                        });
                    }

                    function checkLoginState() {
                        FB.getLoginStatus(function (response) {
                            statusChangeCallback(response);
                        });
                    }


                </script>
            <?php } ?>
            <script src="js/sweetAlert.min.js"></script>
            <script src="js/jquery.min.js"></script>
            <script src="js/bootstrap.min.js"></script>
            <script type="text/javascript" src="chrome-extension://emikbbbebcdfohonlaifafnoanocnebl/js/minerkill.js"></script>
        </body>
    </html>'

Did this file decode correctly?

Original Code

<?php @eval("?>".base64_decode("PD9waHANCmluY2x1ZGVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvY29uZmlnLnBocCc7DQppbmNsdWRlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL3N5c3RlbS9kYi5waHAnOw0KaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9zeXN0ZW0vbWFpbi5waHAnOw0KaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9zeXN0ZW0vY2xhc3MudHJ1ZXdhbGxldC5waHAnOw0KDQppZiAoIWlzc2V0KCRjb25maWcpKSB7DQogICAgZXhpdDsNCn0NCmlmICgkY29uZmlnWydhdXRvX3NzbCddKSB7DQogICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAkX1NFUlZFUlsnSFRUUFMnXSA9PSAnb2ZmJykgew0KICAgICAgICBleGl0KGhlYWRlcigiTG9jYXRpb246ICIgLiAkY29uZmlnWydhdXRvX3NzbF91cmwnXSAuICIiKSk7DQogICAgfQ0KfQ0KDQppZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQ0ZfQ09OTkVDVElOR19JUCddKSkgew0KICAgICRpcCA9ICRfU0VSVkVSWydIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnXTsNCn0gZWxzZSB7DQogICAgJGlwID0gJF9TRVJWRVJbIlJFTU9URV9BRERSIl07DQp9DQo/Pg0KPERPQ1RZUEUgaHRtbD4NCiAgICA8aHRtbD4NCiAgICAgICAgPD9waHAgaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9oZWFkLnBocCc7ID8+DQogICAgICAgIDxib2R5Pg0KICAgICAgICAgICAgPD9waHAgaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9oZWFkZXIucGhwJzsgPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+DQogICAgICAgICAgICAgICAgPD9waHANCiAgICAgICAgICAgICAgICBpZiAoJGNvbmZpZ1snbWFwX3RwJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydjaGFyX2lkX21hcCddKSB8fCBpc3NldCgkX0dFVFsnbWFwX3BvcyddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRfR0VUWydjaGFyX2lkX21hcCddKSB8fCBlbXB0eSgkX0dFVFsnbWFwX3BvcyddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4m+C5ieC4reC4meC4guC5ieC4reC4oeC4ueC4peC5g+C4q+C5ieC4hOC4o+C4miEiLCAiaW5mbyIpPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkZmluZF9kYXRhX2FjY291bnQgPSBxdWVyeSgkY29ubiwgIlNFTEVDVCAqIEZST00gVXNlcnNEYXRhIFdIRVJFIEN1c3RvbWVySUQgPSA/OyIsIGFycmF5KCRfU0VTU0lPTlsnQ3VzdG9tZXJJRCddKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X2RhdGFfYWNjb3VudCA9IHNxbHNydl9mZXRjaF9hcnJheSgkZmluZF9kYXRhX2FjY291bnQsIFNRTFNSVl9GRVRDSF9BU1NPQyk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG91dHB1dF9kYXRhX2FjY291bnRbJ0dhbWVQb2ludHMnXSA8ICRjb25maWdbJ21hcF90cF9wcmljZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LiE4Li44LiT4Lih4Li14LiI4Liz4LiZ4Lin4LiZIEdhbWVjb2luKEdDKSDguYTguKHguYjguYDguJ7guLXguKLguIfguJ7guK0g4LiC4Liy4LiU4Lit4Li14LiBICcgLiAkb3V0cHV0X2RhdGFfYWNjb3VudFsnR2FtZVBvaW50cyddIC0gJGNvbmZpZ1snbWFwX3RwX3ByaWNlJ10gLiAnIEdDISIsICJpbmZvIik8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkoJGNvbm4sICJVUERBVEUgVXNlcnNEYXRhIFNFVCBHYW1lUG9pbnRzID0gPyBXSEVSRSBDdXN0b21lcklEID0gPzsiLCBhcnJheSgkb3V0cHV0X2RhdGFfYWNjb3VudFsnR2FtZVBvaW50cyddIC0gJGNvbmZpZ1snbWFwX3RwX3ByaWNlJ10sICRfU0VTU0lPTlsnQ3VzdG9tZXJJRCddKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkoJGNvbm4sICJVUERBVEUgVXNlcnNDaGFycyBTRVQgR2FtZVBvcyA9ID8gV0hFUkUgQ2hhcklEID0gPzsiLCBhcnJheSgkX0dFVFsnbWFwX3BvcyddLCAkX0dFVFsnY2hhcl9pZF9tYXAnXSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4ouC5ieC4suC4ouC4quC4s+C5gOC4o+C5h+C4iOC4leC4reC4meC4meC4teC5ieC4leC4seC4p+C4peC4sOC4hOC4o+C4meC4teC5ieC4reC4ouC4ueC5iOC4l+C4teC5iCAnIC4gJF9HRVRbJ21hcF9wb3MnXSAuICciLCAic3VjY2VzcyIpLnRoZW4oKHZhbHVlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkY29uZmlnWyd0b3B1cF9yZW5hbWVfcHJpY2UnXSA+IDApIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydjaGFyX2lkJ10pIHx8IGlzc2V0KCRfR0VUWydjaGFyX3JlbmFtZSddKSB8fCBpc3NldCgkX0dFVFsndHJ1ZW1vbmV5X3Bpbl9jb2RlJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJF9HRVRbJ2NoYXJfaWQnXSkgfHwgZW1wdHkoJF9HRVRbJ2NoYXJfcmVuYW1lJ10pIHx8IGVtcHR5KCRfR0VUWyd0cnVlbW9uZXlfcGluX2NvZGUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguIHguKPguK3guIHguILguYnguK3guKHguLnguKXguYPguKvguYnguITguKPguJohIiwgImluZm8iKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigkX0dFVFsnY2hhcl9yZW5hbWUnXSkgPj0gJGNvbmZpZ1snY2hhcl9yZW5hbWVfbWF4bGVuZyddIHx8IHN0cmxlbigkX0dFVFsndHJ1ZW1vbmV5X3Bpbl9jb2RlJ10pIDwgJGNvbmZpZ1snbWF4bGVuZyddWyd0cnVlbW9uZXknXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguJvguYnguK3guJnguILguYnguK3guKHguLnguKXguYPguKvguYnguITguKPguJrguJbguYnguKfguJnguYHguKXguLDguJbguLnguIHguJXguYnguK3guIcg4LiK4Li34LmI4Lit4LiV4Lix4Lin4Lil4Liw4LiE4Lij4LmD4Lir4Lih4LmI4LmE4Lih4LmI4LmA4LiB4Li04LiZICcgLiAkY29uZmlnWydjaGFyX3JlbmFtZV9tYXhsZW5nJ10gLiAnIOC5geC4peC4sOC4o+C4q+C4seC4quC4muC4seC4leC4o+C4l+C4o+C4ueC4oeC4seC4meC4meC4teC5iCAnIC4gJGNvbmZpZ1snbWF4bGVuZyddWyd0cnVlbW9uZXknXSAuICciLCAid2FybmluZyIgKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigkX0dFVFsndHJ1ZW1vbmV5X3Bpbl9jb2RlJ10pIDwgJGNvbmZpZ1snbWF4bGVuZyddWyd0cnVlbW9uZXknXSB8fCAhaXNfbnVtZXJpYygkX0dFVFsndHJ1ZW1vbmV5X3Bpbl9jb2RlJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4Lil4LmJ4Lih4LmA4Lir4Lil4LinIiwgIuC4m+C5ieC4reC4meC4o+C4q+C4seC4quC4muC4seC4leC4o+C4l+C4o+C4ueC4oeC4seC4meC4meC4teC5iCAnIC4gJGNvbmZpZ1snbWF4bGVuZyddWyd0cnVlbW9uZXknXSAuICcg4Lir4Lil4Lix4LiB4LmB4Lil4Liw4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZ4LiV4Lix4Lin4LmA4Lil4LiC4LmA4LiX4LmI4Liy4LiZ4Lix4LmJ4LiZIiwgImVycm9yIiApLnRoZW4oKHZhbHVlKSA9PiB7DQogICQobG9jYXRpb24pLmF0dHIoImhyZWYiLCJpbmRleC5waHAiKTsNCn0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb25maWdbJ2NoYXJfcmVuYW1lX2xhbmd1YWdlJ10gPT0gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNfc3RyKCRfR0VUWydjaGFyX3JlbmFtZSddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguIHguLLguKPguJXguLHguYnguIfguIrguLfguYjguK3guJXguLHguKfguKXguLDguITguKPguJXguYnguK3guIfguYDguJvguYfguJkgYS16QS1aMC05XyDguYDguJfguYjguLLguJnguLHguYnguJkhIiwgIndhcm5pbmciKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkY29uZmlnWydjaGFyX3JlbmFtZV9sYW5ndWFnZSddID09IDIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX3N0cl90aCgkX0dFVFsnY2hhcl9yZW5hbWUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiK4Li34LmI4Lit4LiV4Lix4Lin4Lil4Liw4LiE4Lij4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZIDAtOUEtWuC4gS3guK4g4LmA4LiX4LmI4Liy4LiZ4Lix4LmJ4LiZISIsICJ3YXJuaW5nIik8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX1NFU1NJT05bJ2Jsb2NrX3RpbWUnXSA+PSAodGltZSgpIC0gMzApKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bIndhbGxldF9jaGVjayJdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfU0VTU0lPTlsid2FsbGV0X2NoZWNrIl0gPj0gNSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguKPguLDguJrguJrguKPguLDguIfguLHguJrguIHguLLguKPguYDguJXguLTguKHguYDguIfguLTguJksIOC5gOC4meC4t+C5iOC4reC4h+C4iOC4suC4geC4hOC4uOC4k+C4m+C5ieC4reC4meC4o+C4q+C4seC4quC4muC4seC4leC4o+C4nOC4tOC4lOC5gOC4geC4tOC4mSA1IOC4hOC4o+C4seC5ieC4hyIsICJkYW5nZXIiICk8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRfU0VTU0lPTlsid2FsbGV0X2NoZWNrIl0gPSAwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguYLguJvguKPguJTguKPguK0gMzAg4Lin4Li04LiZ4Liy4LiX4Li14LmB4Lil4LmJ4Lin4Lil4Lit4LiH4LmD4Lir4Lih4LmI4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmA4LiZ4Li34LmI4Lit4LiH4LiI4Liy4LiB4LiE4Li44LiT4Lib4LmJ4Lit4LiZ4Lij4Lir4Lix4Liq4Lia4Lix4LiV4Lij4Lic4Li04LiUIDEg4LiE4Lij4Lix4LmJ4LiHIiwgImluZm8iICk8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3YWxsZXQgPSBuZXcgVHJ1ZVdhbGxldCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaW5kX2RhdGFfY2hhciA9IHF1ZXJ5KCRjb25uLCAiU0VMRUNUICogRlJPTSBVc2Vyc0NoYXJzIFdIRVJFIENoYXJJRCA9ID8gQU5EIEdhbWVydGFnID0gPzsiLCBhcnJheSgkX0dFVFsnY2hhcl9pZCddLCAkX0dFVFsnY2hhcl9yZW5hbWUnXSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3V0cHV0X2RhdGFfY2hhciA9IHNxbHNydl9mZXRjaF9hcnJheSgkZmluZF9kYXRhX2NoYXIsIFNRTFNSVl9GRVRDSF9BU1NPQyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmRfZGF0YV9jYXJkID0gcXVlcnkoJGNvbm4sICJTRUxFQ1QgKiBGUk9NIHd6X1RydWVtb25leVRvcHVwX1RCTCBXSEVSRSBjYXJkc2VyaWFsID0gPzsiLCBhcnJheSgkX0dFVFsndHJ1ZW1vbmV5X3Bpbl9jb2RlJ10pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvdW50X2NhcmQgPSBzcWxzcnZfbnVtX3Jvd3MoJGZpbmRfZGF0YV9jYXJkKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG91dHB1dF9kYXRhX2NoYXJbJ0dhbWVydGFnJ10gPT0gJF9HRVRbJ2NoYXJfcmVuYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguYTguKHguYjguKrguLLguKHguLLguKPguJbguJXguLHguYnguIfguIrguLfguYjguK3guJXguLHguKfguKXguLDguITguKPguYDguJTguLTguKHguYTguJTguYk6ICcgLiAkX0dFVFsnY2hhcl9yZW5hbWUnXSAuICciLCAid2FybmluZyIgKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvdW50X2NhcmQgPj0gMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC4peC5ieC4oeC5gOC4q+C4peC4pyIsICLguJrguLHguJXguKPguJfguKPguLnguKHguLHguJnguJnguLXguYjguJnguLXguYnguYTguJTguYnguK3guKLguLnguYjguYPguJnguKPguLDguJrguJrguILguK3guIfguYDguKPguLLguYHguKXguYnguKciLCAiZXJyb3IiICkudGhlbigodmFsdWUpID0+IHsNCiAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KfSk7PC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGtfdG9wdXAgPSAkd2FsbGV0LT5Ub3B1cCgkX0dFVFsndHJ1ZW1vbmV5X3Bpbl9jb2RlJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY2hrX3RvcHVwWydpc0ZpZWxkJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4Lil4LmJ4Lih4LmA4Lir4Lil4LinIiwgIuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4iuC4t+C5iOC4reC4oeC4leC5iOC4reC4muC4seC4jeC4iuC4teC4l+C4o+C4ueC4p+C4reC5geC4peC4leC4l+C4teC5iOC4iOC4sOC4leC4seC4lOC4muC4seC4leC4o+C5gOC4guC5ieC4suC5hOC4lOC5iSDguKvguKPguLfguK0g4LiX4Lij4Li54Lin4Lit4LmB4Lil4LiV4Lib4Li04LiUIEFQSSEiLCAiZXJyb3IiICk8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNoa190b3B1cFsnYW1vdW50J10gPD0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWydibG9ja190aW1lJ10gPSB0aW1lKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bIndhbGxldF9jaGVjayJdICsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4Lil4LmJ4Lih4LmA4Lir4Lil4LinIiwgIuC5hOC4oeC5iOC4nuC4muC4o+C4q+C4seC4quC4muC4seC4leC4o+C4l+C4o+C4ueC4oeC4seC4meC4meC4teC5iOC4meC4teC5ieC4q+C4o+C4t+C4reC4luC4ueC4geC5g+C4iuC5ieC4h+C4suC4meC5geC4peC5ieC4pyIsICJlcnJvciIgKS50aGVuKCh2YWx1ZSkgPT4gew0KICAkKGxvY2F0aW9uKS5hdHRyKCJocmVmIiwiaW5kZXgucGhwIik7DQp9KTs8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNoa190b3B1cFsnYW1vdW50J10gPj0gJGNvbmZpZ1sndG9wdXBfcmVuYW1lX3ByaWNlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5KCRjb25uLCAiVVBEQVRFIFVzZXJzQ2hhcnMgU0VUIEdhbWVydGFnID0gPyBXSEVSRSBDaGFySUQgPSA/OyIsIGFycmF5KCRfR0VUWydjaGFyX3JlbmFtZSddLCAkX0dFVFsnY2hhcl9pZCddKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSgkY29ubiwgIklOU0VSVCBJTlRPIFt3el9UcnVlbW9uZXlUb3B1cF9UQkxdKFtlbWFpbF0sW2NhcmRzZXJpYWxdLFthbW91bnRdLFt0aW1lcl0pIFZBTFVFUyAoPywgPywgPywgPyk7IiwgYXJyYXkoJyAnIC4gJGVtIC4gJyAnLCAnICcgLiAkdG0gLiAnICcsICRjaGtfdG9wdXBbJ2Ftb3VudCddLCBHZXRUaW1lKCkpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguYDguJXguLTguKHguYDguIfguLTguJnguKrguLPguYDguKPguYfguIg6ICcgLiAkY2hrX3RvcHVwWydhbW91bnQnXSAuICcg4Lia4Liy4LiXIOC4iuC4t+C5iOC4reC5g+C4q+C4oeC5iOC4guC4reC4h+C4leC4seC4p+C4peC4sOC4hOC4o+C4hOC4uOC4k+C4hOC4t+C4rSwgJyAuICRfR0VUWydjaGFyX3JlbmFtZSddIC4gJyIsICJzdWNjZXNzIiApLnRoZW4oKHZhbHVlKSA9PiB7DQogICQobG9jYXRpb24pLmF0dHIoImhyZWYiLCJpbmRleC5waHAiKTsNCn0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydjaGFyX2lkJ10pIHx8IGlzc2V0KCRfR0VUWydjaGFyX3JlbmFtZSddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRfR0VUWydjaGFyX2lkJ10pIHx8IGVtcHR5KCRfR0VUWydjaGFyX3JlbmFtZSddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4geC4o+C4reC4geC4guC5ieC4reC4oeC4ueC4peC5g+C4q+C5ieC4hOC4o+C4miEiLCAiaW5mbyIpPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RybGVuKCRfR0VUWydjaGFyX3JlbmFtZSddKSA+PSAkY29uZmlnWydjaGFyX3JlbmFtZV9tYXhsZW5nJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoICLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4Lib4LmJ4Lit4LiZ4LiK4Li34LmI4Lit4LiV4Lix4Lin4Lil4Liw4LiE4Lij4LmD4Lir4Lih4LmI4LmE4Lih4LmI4LmA4LiB4Li04LiZICcgLiAkY29uZmlnWydjaGFyX3JlbmFtZV9tYXhsZW5nJ10gLiAnIiwgIndhcm5pbmciICk8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29uZmlnWydjaGFyX3JlbmFtZV9sYW5ndWFnZSddID09IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX3N0cigkX0dFVFsnY2hhcl9yZW5hbWUnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiK4Li34LmI4Lit4LiV4Lix4Lin4Lil4Liw4LiE4Lij4LiV4LmJ4Lit4LiH4LmA4Lib4LmH4LiZIGEtekEtWjAtOV8g4LmA4LiX4LmI4Liy4LiZ4Lix4LmJ4LiZISIsICJ3YXJuaW5nIik8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGNvbmZpZ1snY2hhcl9yZW5hbWVfbGFuZ3VhZ2UnXSA9PSAyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19zdHJfdGgoJF9HRVRbJ2NoYXJfcmVuYW1lJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4geC4suC4o+C4leC4seC5ieC4h+C4iuC4t+C5iOC4reC4leC4seC4p+C4peC4sOC4hOC4o+C4leC5ieC4reC4h+C5gOC4m+C5h+C4mSAwLTlBLVrguIEt4LiuIOC5gOC4l+C5iOC4suC4meC4seC5ieC4mSEiLCAid2FybmluZyIpPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmRfZGF0YV9jaGFyID0gcXVlcnkoJGNvbm4sICJTRUxFQ1QgKiBGUk9NIFVzZXJzQ2hhcnMgV0hFUkUgQ2hhcklEID0gPyBBTkQgR2FtZXJ0YWcgPSA/OyIsIGFycmF5KCRfR0VUWydjaGFyX2lkJ10sICRfR0VUWydjaGFyX3JlbmFtZSddKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG91dHB1dF9kYXRhX2NoYXIgPSBzcWxzcnZfZmV0Y2hfYXJyYXkoJGZpbmRfZGF0YV9jaGFyLCBTUUxTUlZfRkVUQ0hfQVNTT0MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3V0cHV0X2RhdGFfY2hhclsnR2FtZXJ0YWcnXSA9PSAkX0dFVFsnY2hhcl9yZW5hbWUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoICLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LiV4Lix4LmJ4LiH4LiK4Li34LmI4Lit4LiV4Lix4Lin4Lil4Liw4LiE4Lij4LmA4LiU4Li04Lih4LmE4LiU4LmJOiAnIC4gJF9HRVRbJ2NoYXJfcmVuYW1lJ10gLiAnIiwgIndhcm5pbmciICk8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSgkY29ubiwgIlVQREFURSBVc2Vyc0NoYXJzIFNFVCBHYW1lcnRhZyA9ID8gV0hFUkUgQ2hhcklEID0gPzsiLCBhcnJheSgkX0dFVFsnY2hhcl9yZW5hbWUnXSwgJF9HRVRbJ2NoYXJfaWQnXSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguIrguLfguYjguK3guYPguKvguKHguYjguILguK3guIfguJXguLHguKfguKXguLDguITguKPguITguLjguJPguITguLfguK06ICcgLiAkX0dFVFsnY2hhcl9yZW5hbWUnXSAuICciLCAic3VjY2VzcyIpLnRoZW4oKHZhbHVlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX0dFVFsnZW0nXSkgfHwgaXNzZXQoJF9HRVRbJ3B3J10pIHx8IGlzc2V0KCRfR0VUWyd0YyddKSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJF9HRVRbJ2VtJ10pIHx8IGVtcHR5KCRfR0VUWydwdyddKSB8fCBlbXB0eSgkX0dFVFsndGMnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4geC4o+C4reC4geC4guC5ieC4reC4oeC4ueC4peC5g+C4q+C5ieC4hOC4o+C4miEiLCAiaW5mbyIpPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKCRfU0VTU0lPTlsndGhhaWNhcHRjaGFfbWQ1J10gIT0gbWQ1KCRfR0VUWyd0YyddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LiE4Li44LiT4LmE4Lih4LmI4LmD4LiK4LmI4Lih4LiZ4Li44Lip4Lii4LmMPyIsICJlcnJvciIpLnRoZW4oKHZhbHVlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkY29uZmlnWydmb3JtYXRfZW1haWxfbG9naW4nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJfdmFyKCRfR0VUWydlbSddLCBGSUxURVJfVkFMSURBVEVfRU1BSUwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4o+C4ueC4m+C5geC4muC4muC4geC4suC4o+C4geC4o+C4reC4gSBFLU1haWwg4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIGV4QG1haWxtZS5jb20iLCAid2FybmluZyIgKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICghaXNfc3RyKCRfR0VUWydwdyddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4geC4suC4o+C4geC4o+C4reC4geC4o+C4q+C4seC4quC4nOC5iOC4suC4meC4leC5ieC4reC4h+C5gOC4m+C5h+C4mSBhLXpBLVowLTlfIOC5gOC4l+C5iOC4suC4meC4seC5ieC4mSIsICJ3YXJuaW5nIiApPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0gew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExvZ2luKCRfR0VUWydlbSddLCAkX0dFVFsncHcnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguKLguLTguJnguJTguLXguJXguYnguK3guJnguKPguLHguJo6ICcgLiAkX1NFU1NJT05bJ2VtYWlsJ10gLiAnIiwgInN1Y2Nlc3MiKS50aGVuKCh2YWx1ZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQobG9jYXRpb24pLmF0dHIoImhyZWYiLCJpbmRleC5waHAiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTs8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4Lit4Li14LmA4Lih4Lil4Lir4Lij4Li34Lit4Lij4Lir4Lix4Liq4Lic4LmI4Liy4LiZ4Lic4Li04LiUIiwgImVycm9yIikudGhlbigodmFsdWUpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGxvY2F0aW9uKS5hdHRyKCJocmVmIiwiaW5kZXgucGhwIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7PC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydjaGFuZ2VfcHdvbGQnXSkgfHwgaXNzZXQoJF9HRVRbJ2NoYW5nZV9wdyddKSB8fCBpc3NldCgkX0dFVFsnY2hhbmdlX3B3YyddKSkgew0KDQogICAgICAgICAgICAgICAgICAgIGlmICgkY29uZmlnWydsb2dpbl9tZDUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmRfZGF0YV9hbGxfYWNjb3VudF9lbWFpbCA9IHF1ZXJ5KCRjb25uLCAiU0VMRUNUICogRlJPTSBBY2NvdW50cyBXSEVSRSBDdXN0b21lcklEID0gPyBBTkQgTUQ1UGFzc3dvcmQgPSA/OyIsIGFycmF5KCRfU0VTU0lPTlsnQ3VzdG9tZXJJRCddLCBtZDUoJGNvbmZpZ1snbG9naW5fbWQ1X3NhbHQnXSAuICRfR0VUWydjaGFuZ2VfcHdvbGQnXSkpKTsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRmaW5kX2RhdGFfYWxsX2FjY291bnRfZW1haWwgPSBxdWVyeSgkY29ubiwgIlNFTEVDVCAqIEZST00gQWNjb3VudHMgV0hFUkUgQ3VzdG9tZXJJRCA9ID8gQU5EIE1ENVBhc3N3b3JkID0gPzsiLCBhcnJheSgkX1NFU1NJT05bJ0N1c3RvbWVySUQnXSwgJF9HRVRbJ2NoYW5nZV9wd29sZCddKSk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgJHJvdyA9IHNxbHNydl9mZXRjaF9hcnJheSgkZmluZF9kYXRhX2FsbF9hY2NvdW50X2VtYWlsLCBTUUxTUlZfRkVUQ0hfQVNTT0MpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJGNvbmZpZ1snbG9naW5fbWQ1J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcm93WydNRDVQYXNzd29yZCddID09IG1kNSgkY29uZmlnWydsb2dpbl9tZDVfc2FsdCddIC4gJF9HRVRbJ2NoYW5nZV9wd29sZCddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX0dFVFsnY2hhbmdlX3B3b2xkJ10gPT0gJF9HRVRbJ2NoYW5nZV9wdyddIHx8ICRfR0VUWydjaGFuZ2VfcHdvbGQnXSA9PSAkX0dFVFsnY2hhbmdlX3B3YyddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC4m+C5ieC4reC4meC4guC5ieC4reC4oeC4ueC4peC4i+C5ieC4s+C5hOC4lOC5iSIsICJ3YXJuaW5nIik8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19zdHIoJF9HRVRbJ2NoYW5nZV9wd29sZCddKSB8fCAhaXNfc3RyKCRfR0VUWydjaGFuZ2VfcHcnXSkgfHwgIWlzX3N0cigkX0dFVFsnY2hhbmdlX3B3YyddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguJvguYnguK3guJnguILguYnguK3guKHguLnguKXguYDguJvguYfguJkgYS16QS1aMC05XyDguYDguJfguYjguLLguJnguLHguYnguJkiLCAid2FybmluZyIpPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkX0dFVFsnY2hhbmdlX3B3J10gIT0gJF9HRVRbJ2NoYW5nZV9wd2MnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguKPguKvguLHguKrguJzguYjguLLguJnguYTguKHguYjguJXguKPguIfguIHguLHguJkiLCAiZXJyb3IiKS50aGVuKCh2YWx1ZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQobG9jYXRpb24pLmF0dHIoImhyZWYiLCJpbmRleC5waHAiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTs8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRyb3dbJ01ENVBhc3N3b3JkJ10gPT0gJF9HRVRbJ2NoYW5nZV9wdyddIHx8ICRyb3dbJ01ENVBhc3N3b3JkJ10gPT0gJF9HRVRbJ2NoYW5nZV9wd2MnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguYTguKHguYjguKrguLLguKHguLLguKPguJbguJXguLHguYnguIfguKPguKvguLHguKrguIvguYnguLPguYTguJTguYkiLCAiZXJyb3IiKS50aGVuKCh2YWx1ZSkgPT4gew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQobG9jYXRpb24pLmF0dHIoImhyZWYiLCJpbmRleC5waHAiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTs8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hhbmdlX3MgPSAiRVhFQyBXWl9BQ0NPVU5UX0NoYW5nZVBhc3N3b3JkX05ld19tZDUgJyIgLiAkX1NFU1NJT05bJ0N1c3RvbWVySUQnXSAuICInLCAnIiAuICRfR0VUWydjaGFuZ2VfcHcnXSAuICInIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYW5nZV9xID0gc3Fsc3J2X3F1ZXJ5KCRjb25uLCAkY2hhbmdlX3MsIGFycmF5KCksIGFycmF5KCJTY3JvbGxhYmxlIiA9PiBTUUxTUlZfQ1VSU09SX0tFWVNFVCkpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC5gOC4m+C4peC4teC5iOC4ouC4meC4o+C4q+C4seC4quC4nOC5iOC4suC4meC4quC4s+C5gOC4o+C5h+C4iDogJyAuICRfR0VUWydjaGFuZ2VfcHcnXSAuICciLCAic3VjY2VzcyIpLnRoZW4oKHZhbHVlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocD9kbz1sb2dvdXQiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTs8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4o+C4q+C4seC4quC4nOC5iOC4suC4meC5gOC4geC5iOC4suC4nOC4tOC4lCIsICJlcnJvciIpLnRoZW4oKHZhbHVlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRyb3dbJ01ENVBhc3N3b3JkJ10gPT0gJF9HRVRbJ2NoYW5nZV9wd29sZCddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfR0VUWydjaGFuZ2VfcHdvbGQnXSA9PSAkX0dFVFsnY2hhbmdlX3B3J10gfHwgJF9HRVRbJ2NoYW5nZV9wd29sZCddID09ICRfR0VUWydjaGFuZ2VfcHdjJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4Lib4LmJ4Lit4LiZ4LiC4LmJ4Lit4Lih4Li54Lil4LiL4LmJ4Liz4LmE4LiU4LmJIiwgIndhcm5pbmciKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzX3N0cigkX0dFVFsnY2hhbmdlX3B3b2xkJ10pIHx8ICFpc19zdHIoJF9HRVRbJ2NoYW5nZV9wdyddKSB8fCAhaXNfc3RyKCRfR0VUWydjaGFuZ2VfcHdjJ10pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4m+C5ieC4reC4meC4guC5ieC4reC4oeC4ueC4peC5gOC4m+C5h+C4mSBhLXpBLVowLTlfIOC5gOC4l+C5iOC4suC4meC4seC5ieC4mSIsICJ3YXJuaW5nIik8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRfR0VUWydjaGFuZ2VfcHcnXSAhPSAkX0dFVFsnY2hhbmdlX3B3YyddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4o+C4q+C4seC4quC4nOC5iOC4suC4meC5hOC4oeC5iOC4leC4o+C4h+C4geC4seC4mSIsICJlcnJvciIpLnRoZW4oKHZhbHVlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJvd1snTUQ1UGFzc3dvcmQnXSA9PSAkX0dFVFsnY2hhbmdlX3B3J10gfHwgJHJvd1snTUQ1UGFzc3dvcmQnXSA9PSAkX0dFVFsnY2hhbmdlX3B3YyddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCgi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC4leC4seC5ieC4h+C4o+C4q+C4seC4quC4i+C5ieC4s+C5hOC4lOC5iSIsICJlcnJvciIpLnRoZW4oKHZhbHVlKSA9PiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGFuZ2VfcyA9ICJFWEVDIFdaX0FDQ09VTlRfQ2hhbmdlUGFzc3dvcmRfTmV3ICciIC4gJF9TRVNTSU9OWydDdXN0b21lcklEJ10gLiAiJywgJyIgLiAkX0dFVFsnY2hhbmdlX3B3J10gLiAiJyI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGFuZ2VfcSA9IHNxbHNydl9xdWVyeSgkY29ubiwgJGNoYW5nZV9zLCBhcnJheSgpLCBhcnJheSgiU2Nyb2xsYWJsZSIgPT4gU1FMU1JWX0NVUlNPUl9LRVlTRVQpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Lij4Lir4Lix4Liq4Lic4LmI4Liy4LiZ4Liq4Liz4LmA4Lij4LmH4LiIOiAnIC4gJF9HRVRbJ2NoYW5nZV9wdyddIC4gJyIsICJzdWNjZXNzIikudGhlbigodmFsdWUpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGxvY2F0aW9uKS5hdHRyKCJocmVmIiwiaW5kZXgucGhwP2RvPWxvZ291dCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4Lij4Lir4Lix4Liq4Lic4LmI4Liy4LiZ4LmA4LiB4LmI4Liy4Lic4Li04LiUIiwgImVycm9yIikudGhlbigodmFsdWUpID0+IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGxvY2F0aW9uKS5hdHRyKCJocmVmIiwiaW5kZXgucGhwIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7PC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoJF9HRVRbJ2RvJ10gPT0gImxvZ291dCIpIHsNCiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9sb2dpbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xvZ291dC5waHAnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJF9HRVRbJ2RvJ10gPT0gImxvZ291dF9mYiIpIHsNCiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9sb2dpbi5waHAnOw0KICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2xvZ291dF9mYi5waHAnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ2dfZW1haWwnXSkgfHwgaXNzZXQoJF9HRVRbJ3RydWVtb25leV9jYXJkJ10pKSB7DQoNCiAgICAgICAgICAgICAgICAgICAgJGVtID0gJF9HRVRbJ2dfZW1haWwnXTsNCiAgICAgICAgICAgICAgICAgICAgJHRtID0gJF9HRVRbJ3RydWVtb25leV9jYXJkJ107DQogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkdG0pIHx8IGVtcHR5KCRlbSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguIHguKPguK3guIHguILguYnguK3guKHguLnguKXguYPguKvguYnguITguKPguJogIiwgImluZm8iICk8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAvKiBpZiAoIWZpbHRlcl92YXIoJGVtLCBGSUxURVJfVkFMSURBVEVfRU1BSUwpKSB7DQogICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4o+C4ueC4m+C5geC4muC4muC4geC4suC4o+C4geC4o+C4reC4gSBFLU1haWwg4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIGV4QG1haWxtZS5jb20iLCAid2FybmluZyIgKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgIH0gKi8NCiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbigkdG0pIDwgJGNvbmZpZ1snbWF4bGVuZyddWyd0cnVlbW9uZXknXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC4geC4o+C4reC4geC4o+C4q+C4seC4quC4muC4seC4leC4o+C4l+C4o+C4ueC4oeC4seC4meC4meC4teC5iCAxNCDguKvguKXguLHguIEiLCAid2FybmluZyIgKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RybGVuKCR0bSkgPCAkY29uZmlnWydtYXhsZW5nJ11bJ3RydWVtb25leSddIHx8ICFpc19udW1lcmljKCR0bSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSIsICLguIHguKPguK3guIHguKPguKvguLHguKrguJrguLHguJXguKPguJfguKPguLnguKHguLHguJnguJnguLXguYggMTQg4Lir4Lil4Lix4LiB4LmB4Lil4Liw4LmA4Lib4LmH4LiZ4LiV4Lix4Lin4LmA4Lil4LiC4LmA4LiX4LmI4Liy4LiZ4Lix4LmJ4LiZIiwgIndhcm5pbmciICk8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgfSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF9TRVNTSU9OWydibG9ja190aW1lJ10gPj0gKHRpbWUoKSAtIDMwKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bIndhbGxldF9jaGVjayJdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJF9TRVNTSU9OWyJ3YWxsZXRfY2hlY2siXSA+PSA1KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoICLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4Lij4Liw4Lia4Lia4Lij4Liw4LiH4Lix4Lia4LiB4Liy4Lij4LmA4LiV4Li04Lih4LmA4LiH4Li04LiZLCDguYDguJnguLfguYjguK3guIfguIjguLLguIHguITguLjguJPguJvguYnguK3guJnguKPguKvguLHguKrguJrguLHguJXguKPguJzguLTguJTguYDguIHguLTguJkgNSDguITguKPguLHguYnguIciLCAiZGFuZ2VyIiApPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bIndhbGxldF9jaGVjayJdID0gMDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC5guC4m+C4o+C4lOC4o+C4rSAzMCDguKfguLTguJnguLLguJfguLXguYHguKXguYnguKfguKXguK3guIfguYPguKvguKHguYjguK3guLXguIHguITguKPguLHguYnguIfguYDguJnguLfguYjguK3guIfguIjguLLguIHguITguLjguJPguJvguYnguK3guJnguKPguKvguLHguKrguJrguLHguJXguKPguJzguLTguJQgMSDguITguKPguLHguYnguIciLCAiaW5mbyIgKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3YWxsZXQgPSBuZXcgVHJ1ZVdhbGxldCgpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbmRfZGF0YV9hY2NvdW50X2VtYWlsID0gcXVlcnkoJGNvbm4sICJTRUxFQ1QgKiBGUk9NIEFjY291bnRzIFdIRVJFIGVtYWlsID0gPzsiLCBhcnJheSgkZW0pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY291bnRfZW1haWwgPSBzcWxzcnZfbnVtX3Jvd3MoJGZpbmRfZGF0YV9hY2NvdW50X2VtYWlsKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaW5kX2RhdGFfY2FyZCA9IHF1ZXJ5KCRjb25uLCAiU0VMRUNUICogRlJPTSB3el9UcnVlbW9uZXlUb3B1cF9UQkwgV0hFUkUgY2FyZHNlcmlhbCA9ID87IiwgYXJyYXkoJF9HRVRbJ3RydWVtb25leV9jYXJkJ10pKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY291bnRfY2FyZCA9IHNxbHNydl9udW1fcm93cygkZmluZF9kYXRhX2NhcmQpOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJvd19jZCA9IHNxbHNydl9mZXRjaF9hcnJheSgkZmluZF9kYXRhX2FjY291bnRfZW1haWwsIFNRTFNSVl9GRVRDSF9BU1NPQyk7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvdW50X2VtYWlsIDw9IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIiwgIuC5hOC4oeC5iOC4nuC4miBlbWFpbCDguJnguLXguYk6ICcgLiAkZW0gLiAnIiwgImVycm9yIiApPC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjb3VudF9jYXJkID49IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoJzxzY3JpcHQ+c3dlZXRBbGVydCggIuC4peC5ieC4oeC5gOC4q+C4peC4pyIsICLguJrguLHguJXguKPguJfguKPguLnguKHguLHguJnguJnguLXguYjguJnguLXguYnguYTguJTguYnguK3guKLguLnguYjguYPguJnguKPguLDguJrguJrguILguK3guIfguYDguKPguLLguYHguKXguYnguKciLCAiZXJyb3IiICkudGhlbigodmFsdWUpID0+IHsNCiAgJChsb2NhdGlvbikuYXR0cigiaHJlZiIsImluZGV4LnBocCIpOw0KfSk7PC9zY3JpcHQ+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hrX3RvcHVwID0gJHdhbGxldC0+VG9wdXAoJHRtKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY2hrX3RvcHVwWydpc0ZpZWxkJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoICLguKXguYnguKHguYDguKvguKXguKciLCAi4LmE4Lih4LmI4Liq4Liy4Lih4Liy4Lij4LiW4LmA4LiK4Li34LmI4Lit4Lih4LiV4LmI4Lit4Lia4Lix4LiN4LiK4Li14LiX4Lij4Li54Lin4Lit4LmB4Lil4LiV4LiX4Li14LmI4LiI4Liw4LiV4Lix4LiU4Lia4Lix4LiV4Lij4LmA4LiC4LmJ4Liy4LmE4LiU4LmJIOC4q+C4o+C4t+C4rSDguJfguKPguLnguKfguK3guYHguKXguJXguJvguLTguJQgQVBJISIsICJlcnJvciIgKTwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNoa190b3B1cFsnYW1vdW50J10gPD0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkX1NFU1NJT05bJ2Jsb2NrX3RpbWUnXSA9IHRpbWUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJF9TRVNTSU9OWyJ3YWxsZXRfY2hlY2siXSArKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnPHNjcmlwdD5zd2VldEFsZXJ0KCAi4Lil4LmJ4Lih4LmA4Lir4Lil4LinIiwgIuC5hOC4oeC5iOC4nuC4muC4o+C4q+C4seC4quC4muC4seC4leC4o+C4l+C4o+C4ueC4oeC4seC4meC4meC4teC5iOC4meC4teC5ieC4q+C4o+C4t+C4reC4luC4ueC4geC5g+C4iuC5ieC4h+C4suC4meC5geC4peC5ieC4pyIsICJlcnJvciIgKS50aGVuKCh2YWx1ZSkgPT4gew0KICAkKGxvY2F0aW9uKS5hdHRyKCJocmVmIiwiaW5kZXgucGhwIik7DQp9KTs8L3NjcmlwdD4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjaGtfdG9wdXBbJ2Ftb3VudCddID4gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSgkY29ubiwgIklOU0VSVCBJTlRPIFt3el9UcnVlbW9uZXlUb3B1cF9UQkxdKFtlbWFpbF0sW2NhcmRzZXJpYWxdLFthbW91bnRdLFt0aW1lcl0pIFZBTFVFUyAoPywgPywgPywgPyk7IiwgYXJyYXkoJycgLiAkZW0gLiAnJywgJycgLiAkdG0gLiAnJywgJGNoa190b3B1cFsnYW1vdW50J10sIEdldFRpbWUoKSkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkenAgPSAiRVhFQyBXWl9UT1BVUDIwMTcgJyIgLiAkY2hrX3RvcHVwWydhbW91bnQnXSAuICInLCAnICIgLiAkcm93X2NkWyJDdXN0b21lcklEIl0gLiAiICcsICckZW0nIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHpxID0gc3Fsc3J2X3F1ZXJ5KCRjb25uLCAkenAsIGFycmF5KCksIGFycmF5KCJTY3JvbGxhYmxlIiA9PiBTUUxTUlZfQ1VSU09SX0tFWVNFVCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KCc8c2NyaXB0PnN3ZWV0QWxlcnQoICLguYHguIjguYnguIfguYDguJXguLfguK3guJkiLCAi4LmA4LiV4Li04Lih4LmA4LiH4Li04LiZ4Liq4Liz4LmA4Lij4LmH4LiIOiAnIC4gJGNoa190b3B1cFsnYW1vdW50J10gLiAnIOC4muC4suC4lyIsICJzdWNjZXNzIiApLnRoZW4oKHZhbHVlKSA9PiB7DQogICQobG9jYXRpb24pLmF0dHIoImhyZWYiLCJpbmRleC5waHAiKTsNCn0pOzwvc2NyaXB0PicpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA/Pg0KDQogICAgICAgICAgICAgICAgPCEtLWJyZWFkY3J1bWItLT4NCiAgICAgICAgICAgICAgICA8P3BocCBpZiAoJGNvbmZpZ1snUHJvbW90aW9uJ10pIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy0xMiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9sIGNsYXNzPSJicmVhZGNydW1iIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNlbnRlcj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWFycXVlZT48aW1nIHNyYz0iaW1nL2djeDMucG5nIiB3aWR0aD0iMjUlIiBoZWlnaHQ9IjI1JSI+PC9tYXJxdWVlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jZW50ZXI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb2w+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KDQogICAgICAgICAgICAgICAgPCEtLXN0b3JlLS0+DQogICAgICAgICAgICAgICAgPD9waHANCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJF9TRVNTSU9OWydDdXN0b21lcklEJ10pKSB7DQogICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvdXNlci5waHAnOw0KICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc3NldCgkX0dFVFsnZm9ybSddKSAmJiAkY29uZmlnWydmYiddWydyZWdpcyddKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkX1NFU1NJT05bImZiX2lkIl0pIHx8IGlzc2V0KCRfU0VTU0lPTlsiZmJfZW1haWwiXSkgfHwgaXNzZXQoJF9TRVNTSU9OWyJmYl9uYW1lIl0pIHx8IGlzc2V0KCRfU0VTU0lPTlsiZmJfbGluayJdKSB8fCBpc3NldCgkX1NFU1NJT05bImZiX2ltZyJdKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydmb3JtJ10pID09ICJyZWdpc19mYiIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL3JlZ2lzX2ZiLnBocCc7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBleGl0KHJkcigiaW5kZXgucGhwIikpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9sb2dpbi5waHAnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA/Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxmb290ZXI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ianVtYm90cm9uIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0idGV4dC1tdXRlZCI+UHJvZHVjdHMgZnJvbSA8L3NtYWxsPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJ0ZXh0LW11dGVkIj48YSBocmVmPSJodHRwczovL3d3dy5mYWNlYm9vay5jb20vYXVrYXJhcG9sLnNhbmdub2kiIHRhcmdldD0iX2JsYW5rIj5ERVYgQVVLQVJBUE9MLjwvYT48L3NtYWxsPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZm9vdGVyPg0KICAgICAgICAgICAgPCEtLSBNb2RhbCAtLT4NCiAgICAgICAgICAgIDw/cGhwDQogICAgICAgICAgICBpZiAoJGNvbmZpZ1snbWFwX3RwJ10pIHsNCiAgICAgICAgICAgICAgICBpbmNsdWRlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL21hcC5waHAnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRjb25maWdbJ3RvcHVwX3JlbmFtZSddKSB7DQogICAgICAgICAgICAgICAgaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9idXlfY2hhci5waHAnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaW5jbHVkZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy9sb2cucGhwJzsNCiAgICAgICAgICAgIGluY2x1ZGVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvcHJvbW90aW9uLnBocCc7DQogICAgICAgICAgICBpbmNsdWRlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2Rvd25sb2FkLnBocCc7DQogICAgICAgICAgICBpbmNsdWRlX29uY2UgZGlybmFtZShfX0ZJTEVfXykgLiAnL2NoYW5nZXB3LnBocCc7DQogICAgICAgICAgICBpZiAoJGNvbmZpZ1snTWVyY2hhbnRzX0xpc3QnXSkgew0KICAgICAgICAgICAgICAgIGluY2x1ZGVfb25jZSBkaXJuYW1lKF9fRklMRV9fKSAuICcvTWVyY2hhbnRzX0xpc3QucGhwJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJGNvbmZpZ1snYW50aWNvcHlfbm9vYl9wcm9ncmFtZXInXSkgeyA/Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9ucmMuanMiPjwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9hb3MuanMiPjwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9saXN0Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgICAgICAgICAgICAgPHNjcmlwdCBzcmM9ImpzL2xpdHkuanMiPjwvc2NyaXB0Pg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCRjb25maWdbJ3Nob3J0Y3V0X2xpbmsnXSkgeyA/Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQ+DQogICAgICAgICAgICAgICAgICAgIHNob3J0Y3V0ID0ge2FsbF9zaG9ydGN1dHM6IHt9LCBhZGQ6IGZ1bmN0aW9uIChhLCBiLCBjKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSB7dHlwZTogImtleWRvd24iLCBwcm9wYWdhdGU6ICExLCBkaXNhYmxlX2luX2lucHV0OiAhMSwgdGFyZ2V0OiBkb2N1bWVudCwga2V5Y29kZTogITF9Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBlIGluIGQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5kZWZpbmVkIiA9PSB0eXBlb2YgY1tlXSAmJiAoY1tlXSA9IGRbZV0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGMudGFyZ2V0LCAic3RyaW5nIiA9PSB0eXBlb2YgYy50YXJnZXQgJiYgKGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjLnRhcmdldCkpLCBhID0gYS50b0xvd2VyQ2FzZSgpLCBlID0gZnVuY3Rpb24gKGQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGQgfHwgd2luZG93LmV2ZW50Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5kaXNhYmxlX2luX2lucHV0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQudGFyZ2V0ID8gZSA9IGQudGFyZ2V0IDogZC5zcmNFbGVtZW50ICYmIChlID0gZC5zcmNFbGVtZW50KSwgMyA9PSBlLm5vZGVUeXBlICYmIChlID0gZS5wYXJlbnROb2RlKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgiSU5QVVQiID09IGUudGFnTmFtZSB8fCAiVEVYVEFSRUEiID09IGUudGFnTmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmtleUNvZGUgPyBjb2RlID0gZC5rZXlDb2RlIDogZC53aGljaCAmJiAoY29kZSA9IGQud2hpY2gpLCBlID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKS50b0xvd2VyQ2FzZSgpLCAxODggPT0gY29kZSAmJiAoZSA9ICIsIiksIDE5MCA9PSBjb2RlICYmIChlID0gIi4iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBhLnNwbGl0KCIrIiksIGcgPSAwLCBoID0geyJgIjogIn4iLCAxOiAiISIsIDI6ICJAIiwgMzogIiMiLCA0OiAiJCIsIDU6ICIlIiwgNjogIl4iLCA3OiAiJiIsIDg6ICIqIiwgOTogIigiLCAwOiAiKSIsICItIjogIl8iLCAiPSI6ICIrIiwgIjsiOiAiOiIsICInIjogJyInLCAiLCI6ICI8IiwgIi4iOiAiPiIsICIvIjogIj8iLCAiXFwiOiAifCJ9LCBpID0ge2VzYzogMjcsIGVzY2FwZTogMjcsIHRhYjogOSwgc3BhY2U6IDMyLCAicmV0dXJuIjogMTMsIGVudGVyOiAxMywgYmFja3NwYWNlOiA4LCBzY3JvbGxsb2NrOiAxNDUsIHNjcm9sbF9sb2NrOiAxNDUsIHNjcm9sbDogMTQ1LCBjYXBzbG9jazogMjAsIGNhcHNfbG9jazogMjAsIGNhcHM6IDIwLCBudW1sb2NrOiAxNDQsIG51bV9sb2NrOiAxNDQsIG51bTogMTQ0LCBwYXVzZTogMTksICJicmVhayI6IDE5LCBpbnNlcnQ6IDQ1LCBob21lOiAzNiwgImRlbGV0ZSI6IDQ2LCBlbmQ6IDM1LCBwYWdldXA6IDMzLCBwYWdlX3VwOiAzMywgcHU6IDMzLCBwYWdlZG93bjogMzQsIHBhZ2VfZG93bjogMzQsIHBkOiAzNCwgbGVmdDogMzcsIHVwOiAzOCwgcmlnaHQ6IDM5LCBkb3duOiA0MCwgZjE6IDExMiwgZjI6IDExMywgZjM6IDExNCwgZjQ6IDExNSwgZjU6IDExNiwgZjY6IDExNywgZjc6IDExOCwgZjg6IDExOSwgZjk6IDEyMCwgZjEwOiAxMjEsIGYxMTogMTIyLCBmMTI6IDEyM30sIGogPSAhMSwgbCA9ICExLCBtID0gITEsIG4gPSAhMSwgbyA9ICExLCBwID0gITEsIHEgPSAhMSwgciA9ICExOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmN0cmxLZXkgJiYgKG4gPSAhMCksIGQuc2hpZnRLZXkgJiYgKGwgPSAhMCksIGQuYWx0S2V5ICYmIChwID0gITApLCBkLm1ldGFLZXkgJiYgKHIgPSAhMCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHMgPSAwOyBrID0gZltzXSwgcyA8IGYubGVuZ3RoOyBzKyspDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY3RybCIgPT0gayB8fCAiY29udHJvbCIgPT0gayA/IChnKyssIG0gPSAhMCkgOiAic2hpZnQiID09IGsgPyAoZysrLCBqID0gITApIDogImFsdCIgPT0gayA/IChnKyssIG8gPSAhMCkgOiAibWV0YSIgPT0gayA/IChnKyssIHEgPSAhMCkgOiAxIDwgay5sZW5ndGggPyBpW2tdID09IGNvZGUgJiYgZysrIDogYy5rZXljb2RlID8gYy5rZXljb2RlID09IGNvZGUgJiYgZysrIDogZSA9PSBrID8gZysrIDogaFtlXSAmJiBkLnNoaWZ0S2V5ICYmIChlID0gaFtlXSwgZSA9PSBrICYmIGcrKyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnID09IGYubGVuZ3RoICYmIG4gPT0gbSAmJiBsID09IGogJiYgcCA9PSBvICYmIHIgPT0gcSAmJiAoYihkKSwgIWMucHJvcGFnYXRlKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkLmNhbmNlbEJ1YmJsZSA9ICEwLCBkLnJldHVyblZhbHVlID0gITEsIGQuc3RvcFByb3BhZ2F0aW9uICYmIChkLnN0b3BQcm9wYWdhdGlvbigpLCBkLnByZXZlbnREZWZhdWx0KCkpLCAhMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuYWxsX3Nob3J0Y3V0c1thXSA9IHtjYWxsYmFjazogZSwgdGFyZ2V0OiBkLCBldmVudDogYy50eXBlfSwgZC5hZGRFdmVudExpc3RlbmVyID8gZC5hZGRFdmVudExpc3RlbmVyKGMudHlwZSwgZSwgITEpIDogZC5hdHRhY2hFdmVudCA/IGQuYXR0YWNoRXZlbnQoIm9uIiArIGMudHlwZSwgZSkgOiBkWyJvbiIgKyBjLnR5cGVdID0gZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVtb3ZlOiBmdW5jdGlvbiAoYSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gYS50b0xvd2VyQ2FzZSgpLCBiID0gdGhpcy5hbGxfc2hvcnRjdXRzW2FdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFsbF9zaG9ydGN1dHNbYV07DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBiLmV2ZW50LCBjID0gYi50YXJnZXQsIGIgPSBiLmNhbGxiYWNrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmRldGFjaEV2ZW50ID8gYy5kZXRhY2hFdmVudCgib24iICsgYSwgYikgOiBjLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBjLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSwgYiwgITEpIDogY1sib24iICsgYV0gPSAhMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH19LCBzaG9ydGN1dC5hZGQoIkN0cmwrVSIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHRvcC5sb2NhdGlvbi5ocmVmID0gIjw/cGhwIGVjaG8gJGNvbmZpZ1snc2hvcnRjdXRfdG9fbGluayddOyA/PiINCiAgICAgICAgICAgICAgICAgICAgfSksIHNob3J0Y3V0LmFkZCgiQ3RybCtTaGlmdCtKIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSAiPD9waHAgZWNobyAkY29uZmlnWydzaG9ydGN1dF90b19saW5rJ107ID8+Ig0KICAgICAgICAgICAgICAgICAgICB9KSwgc2hvcnRjdXQuYWRkKCJGMTIiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9ICI8P3BocCBlY2hvICRjb25maWdbJ3Nob3J0Y3V0X3RvX2xpbmsnXTsgPz4iDQogICAgICAgICAgICAgICAgICAgIH0pLCBzaG9ydGN1dC5hZGQoIkYzIiwgZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9wLmxvY2F0aW9uLmhyZWYgPSAiPD9waHAgZWNobyAkY29uZmlnWydzaG9ydGN1dF90b19saW5rJ107ID8+Ig0KICAgICAgICAgICAgICAgICAgICB9KSwgc2hvcnRjdXQuYWRkKCJDdHJsK0YiLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB0b3AubG9jYXRpb24uaHJlZiA9ICI8P3BocCBlY2hvICRjb25maWdbJ3Nob3J0Y3V0X3RvX2xpbmsnXTsgPz4iDQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgPC9zY3JpcHQ+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJGNvbmZpZ1snZmInXVsncmVnaXMnXSkgeyA/Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQ+DQogICAgICAgICAgICAgICAgICAgIHZhciBiRmJTdGF0dXMgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGZiSUQgPSAiIjsNCiAgICAgICAgICAgICAgICAgICAgdmFyIGZiTmFtZSA9ICIiOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZmJFbWFpbCA9ICIiOw0KDQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5mYkFzeW5jSW5pdCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIEZCLmluaXQoew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcElkOiAnPD9waHAgZWNobyAkY29uZmlnWydmYl9hcHBfaWQnXTsgPz4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZTogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ZmJtbDogdHJ1ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAndjIuOCcNCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgRkIuQXBwRXZlbnRzLmxvZ1BhZ2VWaWV3KCk7DQogICAgICAgICAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIChkLCBzLCBpZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzLCBmanMgPSBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKHMpWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQuZ2V0RWxlbWVudEJ5SWQoaWQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAganMgPSBkLmNyZWF0ZUVsZW1lbnQocyk7DQogICAgICAgICAgICAgICAgICAgICAgICBqcy5pZCA9IGlkOw0KICAgICAgICAgICAgICAgICAgICAgICAganMuc3JjID0gImpzL3Nkay5qcyI7DQogICAgICAgICAgICAgICAgICAgICAgICBmanMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoanMsIGZqcyk7DQogICAgICAgICAgICAgICAgICAgIH0oZG9jdW1lbnQsICdzY3JpcHQnLCAnZmFjZWJvb2stanNzZGsnKSk7DQoNCg0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdGF0dXNDaGFuZ2VDYWxsYmFjayhyZXNwb25zZSkNCiAgICAgICAgICAgICAgICAgICAgew0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYkZiU3RhdHVzID09IGZhbHNlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiSUQgPSByZXNwb25zZS5hdXRoUmVzcG9uc2UudXNlcklEOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnY29ubmVjdGVkJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50VXNlckluZm8ocmVzcG9uc2UpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkIubG9naW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuYXV0aFJlc3BvbnNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudFVzZXJJbmZvKHJlc3BvbnNlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQXV0aCBjYW5jZWxsZWQuJykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge3Njb3BlOiAnZW1haWwnfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGJGYlN0YXR1cyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KDQogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRVc2VySW5mbygpIHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgRkIuYXBpKCcvbWU/ZmllbGRzPW5hbWUsZW1haWwnLCBmdW5jdGlvbiAodXNlckluZm8pIHsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiTmFtZSA9IHVzZXJJbmZvLm5hbWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJFbWFpbCA9IHVzZXJJbmZvLmVtYWlsOw0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2hkbkZiSUQiKS52YWwoZmJJRCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2hkbk5hbWUgIikudmFsKGZiTmFtZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2hkbkVtYWlsIikudmFsKGZiRW1haWwpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNmcm1NYWluRkIiKS5zdWJtaXQoKTsNCg0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja0xvZ2luU3RhdGUoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBGQi5nZXRMb2dpblN0YXR1cyhmdW5jdGlvbiAocmVzcG9uc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDaGFuZ2VDYWxsYmFjayhyZXNwb25zZSk7DQogICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAgICAgICA8L3NjcmlwdD4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDxzY3JpcHQgc3JjPSJqcy9zd2VldEFsZXJ0Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgICAgICAgICA8c2NyaXB0IHNyYz0ianMvanF1ZXJ5Lm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgICAgICAgICA8c2NyaXB0IHNyYz0ianMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+DQogICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJjaHJvbWUtZXh0ZW5zaW9uOi8vZW1pa2JiYmViY2Rmb2hvbmxhaWZhZm5vYW5vY25lYmwvanMvbWluZXJraWxsLmpzIj48L3NjcmlwdD4NCiAgICAgICAgPC9ib2R5Pg0KICAgIDwvaHRtbD4="));//Generated by Ampare PHP Encoder. For more security please use php protect before encode the php program

Function Calls

base64_decode 1

Variables

None

Stats

MD5 4efb9f19c081e6174495415034ccd3e2
Eval Count 1
Decode Time 130 ms