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

Decoded Output download

?>b'<?php
/**
 * Created by PhpStorm.
 * User: MHN-LAPTOP
 * Date: 11/16/2018
 * Time: 9:54 AM
 */




date_default_timezone_set("Asia/Tehran");
require_once \'connect_database.php\';
require_once \'simple_html_dom.php\';
//require_once \'functions.php\';
$items = Array(
    \'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36\',
    \'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko\',
    \'Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12 Version/12.16\',
    \'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\',
    \'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)\',
    \'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0\',
    \'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0\',
    \'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko\',
    \'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)\',
    \'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko\',
    \'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1\',
    \'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)\',
    \'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.11 (KHTML like Gecko) Chrome/23.0.1271.95 Safari/537.11\',
    \'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0\',
    \'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.143 Safari/537.36\',
    \'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0\',
    \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36\',
    \'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\',
    \'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0\',
    \'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)\',
    \'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0\'
);

function FaucetClaim($domain, $email, $captcha){

    //  moondash.co.in
    //  moonbitcoin.cash

    global $items;
    $user_agent = $items[array_rand($items)];
    $cookie_saved = "./".$domain.".txt";

    if (file_exists($cookie_saved)) {
        $fh = fopen($cookie_saved, "w");
        fwrite($fh, \'\');
        fclose($fh);
    }else{
        touch($cookie_saved);
    }

    $vars = \'{"request":{"email":"\'.$email.\'","captchaResponse":"\'.$captcha.\'"}}\';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://".$domain."/api/security/service.svc/SignIn");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);  //Post Fields
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_COOKIE, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_saved);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_saved);
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    $headers = [
        \'User-Agent: \'.$user_agent.\'\',
        \'Host: \'.$domain.\'\',
        \'Accept: application/json, text/javascript, */*; q=0.01\',
        \'Accept-Language: en-US,en;q=0.5\',
        \'Accept-Encoding: gzip, deflate\',
        \'Referer: http://\'.$domain.\'/\',
        \'Content-Type: application/json; charset=utf-8\',
        \'X-Requested-With: XMLHttpRequest\'
    ];
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    $server_output = curl_exec($ch);
    $jsonArray = json_decode($server_output, true);
    //print_r($jsonArray);exit;
    if($jsonArray["d"]["result"] == true){
        curl_setopt($ch, CURLOPT_URL, "http://".$domain."/faucet");
        curl_setopt($ch, CURLOPT_POST, 0);
        curl_setopt($ch, CURLOPT_POSTFIELDS, \'\');  //Post Fields
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_saved);
        $headers = [
            \'User-Agent: \'.$user_agent.\'\',
            \'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\',
            \'Accept-Language: en-US,en;q=0.5\',
            \'Accept-Encoding: gzip, deflate\',
            \'Referer: http://\'.$domain.\'/\',
            \'Connection: keep-alive\',
            \'Upgrade-Insecure-Requests: 1\',
            \'Cache-Control: max-age=0\'
        ];
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $server_output = curl_exec($ch);
        $html = str_get_html($server_output);
        foreach($html->find("input#faucetVersion") as $e)
            $faucetVersion = $e->value;

        /* GetFaucetSummary */
        $vars = \'{"request":{"interval":60000,"referralURL":"","balance":0,"referralCount":0,"referralTotal":0,"alert":false,"alertWhenClaimReady":true,"alertAtClaimThreshold":false,"alertAtClaimThresholdAmount":"0.00000000","alertPageTitle":true,"alertPlaySound":true,"claimAmount":0,"canClaim":true,"resultHtml":"","captchaType":0,"alerted":false,"currentAnimate":null,"fp":"","pageTitle":"Moon Dash | Free dash faucet","claimedAmount":0,"baseClaimedAmount":0,"loyaltyBonus":0,"referralBonus":0,"mysteryBonus":0}}\';
        curl_setopt($ch, CURLOPT_URL, "http://".$domain."/api/faucet/service.svc/GetFaucetSummary");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);  //Post Fields
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
        curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_saved);
        $headers = [
            \'User-Agent: \'.$user_agent.\'\',
            \'Host: \'.$domain.\'\',
            \'Accept: application/json, text/javascript, */*; q=0.01\',
            \'Accept-Language: en-US,en;q=0.5\',
            \'Accept-Encoding: gzip, deflate\',
            \'Referer: http://\'.$domain.\'/faucet\',
            \'Content-Type: application/json; charset=utf-8\',
            \'X-Requested-With: XMLHttpRequest\',
            \'Connection: keep-alive\'
        ];
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $server_output = curl_exec($ch);
        $jsonArray = json_decode($server_output, true);
        //print_r($jsonArray);exit;
        if($jsonArray["d"]["result"] == true){
            $balance = $jsonArray["d"]["balance"];
            $balance = sprintf("%.8f", $balance);
            $email = $jsonArray["d"]["email"];
            $referralURL = $jsonArray["d"]["referralURL"];

            /* GetClaimSummary */
            $vars = \'{"request":{"interval":60000,"referralURL":"\'.$referralURL.\'","balance":\'.$balance.\',"referralCount":0,"referralTotal":0,"alert":false,"alertWhenClaimReady":true,"alertAtClaimThreshold":false,"alertAtClaimThresholdAmount":"0.00000000","alertPageTitle":true,"alertPlaySound":true,"claimAmount":0,"canClaim":true,"resultHtml":"Faucet summary retrieved successfully.","captchaType":0,"alerted":false,"currentAnimate":null,"fp":"","pageTitle":"Moon Dash | Free dash faucet","claimedAmount":0,"baseClaimedAmount":0,"loyaltyBonus":0,"referralBonus":0,"mysteryBonus":0,"__type":"GetFaucetSummaryResponse:#MoonFaucet.Web.API.Faucet","authenticationRequired":false,"result":true,"resultDetails":"Faucet summary retrieved successfully.","email":"\'.$email.\'","__ko_mapping__":{"ignore":[],"include":["_destroy"],"copy":[],"observe":[],"mappedProperties":{"__type":true,"authenticationRequired":true,"result":true,"resultDetails":true,"balance":true,"email":true,"referralCount":true,"referralTotal":true,"referralURL":true,"resultHtml":true},"copiedProperties":{}},"referralDetails":"Your referral link is...<br/><h3>\'.$referralURL.\'</h3><br/>To date you have 0 referrals and have been paid <img src=\'coin/logo.png\' style=\'height:16px;margin-bottom:4px\'>&nbsp;0.00000000  in referral commission (last 30 days)"}}\';

            curl_setopt($ch, CURLOPT_URL, "http://".$domain."/api/faucet/service.svc/GetClaimSummary");
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);  //Post Fields
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
            curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
            curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_saved);
            $headers = [
                \'User-Agent: \'.$user_agent.\'\',
                \'Host: \'.$domain.\'\',
                \'Accept: application/json, text/javascript, */*; q=0.01\',
                \'Accept-Language: en-US,en;q=0.5\',
                \'Accept-Encoding: gzip, deflate\',
                \'Referer: http://\'.$domain.\'/faucet\',
                \'Content-Type: application/json; charset=utf-8\',
                \'X-Requested-With: XMLHttpRequest\',
                \'Connection: keep-alive\'
            ];
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            $server_output = curl_exec($ch);
            $jsonArray = json_decode($server_output, true);
            //print_r($jsonArray);exit;
            if($jsonArray["d"]["result"] == true){
                /* FaucetClaim */
                $vars = \'{"request":{"adBlocked":false,"captchaResponse":"\'.$captcha.\'","instantClaim":true,"fp":"","version":"\'.$faucetVersion.\'"}}\';
                curl_setopt($ch, CURLOPT_URL, "http://".$domain."/api/faucet/service.svc/FaucetClaim");
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);  //Post Fields
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
                curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
                curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_saved);
                $headers = [
                    \'User-Agent: \'.$user_agent.\'\',
                    \'Host: \'.$domain.\'\',
                    \'Accept: application/json, text/javascript, */*; q=0.01\',
                    \'Accept-Language: en-US,en;q=0.5\',
                    \'Accept-Encoding: gzip, deflate\',
                    \'Referer: http://\'.$domain.\'/faucet\',
                    \'Content-Type: application/json; charset=utf-8\',
                    \'X-Requested-With: XMLHttpRequest\',
                    \'Connection: keep-alive\'
                ];
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                $server_output = curl_exec($ch);
                $jsonArray = json_decode($server_output, true);
                #print_r($jsonArray);
                if($jsonArray["d"]["result"] == true){

                    //echo "n";
                    //echo \'Faucet claim successful for \'.$email . \' \';
                    //echo "n";
                    //echo $user_agent;
                    //echo "n";
                    $out = \'successfull\';
                }
                else{
                    //echo "n";
                    //echo $jsonArray["d"]["resultDetails"] . \' for \'.$email . \' :(\';
                    //echo "n";
                    //echo $user_agent;
                    //echo "n";
                    $out = $jsonArray["d"]["resultDetails"];
                }
            }
            else{
                //echo \'Error in GetClaimSummary\';
                //$out = \'error\';
                $out = $jsonArray["d"]["resultDetails"];
                //exit;
            }
            /* GetClaimSummary */
        }
        else{
            //echo \'Error in GetFaucetSummary\';
            $out = \'error\';
            $out = $jsonArray["d"]["resultDetails"];
            //exit;
        }
        /* GetFaucetSummary */

        /*$vars = \'{"request":null}\';
        curl_setopt($ch, CURLOPT_URL, "http://".$domain."/api/security/service.svc/SignOut");
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);  //Post Fields
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_saved);

        $headers = [
            \'Content-Type:  application/json\',
            \'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0\'
        ];
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        $server_output = curl_exec($ch);
        $jsonArray = json_decode($server_output, true);
        print_r($jsonArray);*/
    }
    else{
        //echo \'There is a problem!\';
        $out = \'error\';
        $out = $jsonArray["d"]["resultDetails"];
        //exit;
    }

    return $out;

}
function adb($cmd){
    if($cmd == \'on\'){
        $cmd = \'enable\';
    }
    else
        if($cmd == \'off\'){
            $cmd = \'disable\';
        }
    ob_start();
    system(\'d:adbadb shell svc data \'.$cmd.\'\');
    $mycom = ob_get_contents();
    //ob_clean();
    ob_end_clean();

    if($mycom != \'\'){
        return \'error\';
        //exit;
    }
    else if($mycom == \'\'){
        return \'successfull\';
    }
    else{
        return \'error\';
    }
}
function Switch_Modem($type){

    if ($type == \'off\') {
        $vars = \'[LTE_WAN_CFG#2,1,0,0,0,0#0,0,0,0,0,0]0,1
dataSwitchStatusBackup=0

\';
    } else if ($type == \'on\') {
        $vars = \'[LTE_WAN_CFG#2,1,0,0,0,0#0,0,0,0,0,0]0,1
dataSwitchStatusBackup=1

\';
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://192.168.1.7/cgi?2");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);  //Post Fields
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $headers = [
        \'Host: 192.168.1.7\',
        \'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0\',
        \'Accept: */*\',
        \'Accept-Language: en-US,en;q=0.5\',
        \'Accept-Encoding: gzip, deflate\',
        \'Referer: http://192.168.1.7/\',
        \'Content-Type:text/plain\',
        \'Cookie: Authorization=Basic bWhuMTIz\',
        \'Connection: keep-alive\',
        \'Pragma: no-cache\',
        \'Cache-Control: no-cache\'
    ];
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $server_output = curl_exec($ch);

    if($server_output == \'[error]0\'){
        return \'successfull\';
    }
    else{
        return \'error\';
    }
}



$i = 0;
while(true){

    $sql_time = "SELECT * FROM accounts WHERE active = 1";
    $result_time = $db->query($sql_time);
    if(mysqli_num_rows($result_time) > 0){
        while($data_time = $result_time->fetch_array()){

            $current_time = date("Y-m-d H:i:s");

            if($current_time >= $data_time[\'next_claim\']){

                /*$adb_on = adb(\'on\');
                sleep(1.5);*/

                $adb_on = Switch_Modem(\'on\');
                sleep(1.5);



                $claim = FaucetClaim(\'moondash.co.in\', $data_time[\'email\'], \'03AMGVjXgHESV2TCZrXN3thndCbMSnnhk6VT13J_0Og3SRRin4nEEZmcrrQ8rIrCr5gxIr9FdUDptHum6keZo9ZQHzk1WDqC2Cnp9aGRTl4KI7D13HA88tH5ULLMHTGxzBoRlkwdyEEYAcPgn9cWEm3htnGyYcbWLoapWp8lDPcmBMWPYOZddD79bz0nLOZIkiBqMWF9bvJl0PucoilNMSpqenuOcgPps6uKT98trnL4-35gWsnkbB8gaWPM02RPuVkQbw_KMSChm4qlkgqjTbKXZ8qTh6LujGtg\');
                $claim2 = FaucetClaim(\'moonbitcoin.cash\', $data_time[\'email\'], \'03AMGVjXgHESV2TCZrXN3thndCbMSnnhk6VT13J_0Og3SRRin4nEEZmcrrQ8rIrCr5gxIr9FdUDptHum6keZo9ZQHzk1WDqC2Cnp9aGRTl4KI7D13HA88tH5ULLMHTGxzBoRlkwdyEEYAcPgn9cWEm3htnGyYcbWLoapWp8lDPcmBMWPYOZddD79bz0nLOZIkiBqMWF9bvJl0PucoilNMSpqenuOcgPps6uKT98trnL4-35gWsnkbB8gaWPM02RPuVkQbw_KMSChm4qlkgqjTbKXZ8qTh6LujGtg\');

                if($claim == \'successfull\'  AND $adb_on == \'successfull\')
                //if($claim == \'successfull\')
                {

                    $current_time = date("Y-m-d H:i:s");
                    $DateTime = DateTime::createFromFormat(\'Y-m-d H:i:s\', \'\'.$current_time.\'\');
                    $DateTime->modify(\'+5 minutes\');
                    $next_claim = $DateTime->format(\'Y-m-d H:i:s\');

                    $sql = "UPDATE `accounts` SET 
                          `used` = 1,
                          `last_claim` = \'".$current_time."\',
                          `next_claim` = \'".$next_claim."\'
                          
                           WHERE  `id` = \'".$data_time[\'id\']."\'";
                    $db->query($sql);
                    echo "n";
                    echo \'Success claim for \'.$data_time[\'email\'];
                    echo "nn";

                }
                else{
                    $sql = "UPDATE `accounts` SET 
                          `used` = 0
                           WHERE  `id` = \'".$data_time[\'id\']."\'";
                    $db->query($sql);
                    echo "n";
                    echo \'Error claim for \'.$data_time[\'email\'];
                    echo "n";
                    echo $claim;
                    echo "nn";
                }
            }
            else
                if($current_time <= $data_time[\'next_claim\']){
                    $sql = "UPDATE `accounts` SET 
                          `used` = 0
                           WHERE  `id` = \'".$data_time[\'id\']."\'";
                    $db->query($sql);
                }
        }
    }


    /*if($adb_on == \'successfull\'){
        adb(\'off\');
    }*/

    if($adb_on == \'successfull\'){
        Switch_Modem(\'off\');
    }

    $i++;
    sleep(1);
    echo \'Sleep one second -> \'.$i;
    echo "n";



}'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("PD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IE1ITi1MQVBUT1ANCiAqIERhdGU6IDExLzE2LzIwMTgNCiAqIFRpbWU6IDk6NTQgQU0NCiAqLw0KDQoNCg0KDQpkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCJBc2lhL1RlaHJhbiIpOw0KcmVxdWlyZV9vbmNlICdjb25uZWN0X2RhdGFiYXNlLnBocCc7DQpyZXF1aXJlX29uY2UgJ3NpbXBsZV9odG1sX2RvbS5waHAnOw0KLy9yZXF1aXJlX29uY2UgJ2Z1bmN0aW9ucy5waHAnOw0KJGl0ZW1zID0gQXJyYXkoDQogICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMSkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQxLjAuMjIyOC4wIFNhZmFyaS81MzcuMzYnLA0KICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjE7IFdPVzY0OyBUcmlkZW50LzcuMDsgcnY6MTEuMCkgbGlrZSBHZWNrbycsDQogICAgJ09wZXJhLzkuODAgKFdpbmRvd3MgTlQgNi4yOyBXaW42NDsgeDY0KSBQcmVzdG8vMi4xMiBWZXJzaW9uLzEyLjE2JywNCiAgICAnTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE1TSUUgOS4wOyBXaW5kb3dzIE5UIDYuMTsgVHJpZGVudC81LjApJywNCiAgICAnTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE1TSUUgOS4wOyBXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNS4wKScsDQogICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMzsgV09XNjQ7IHJ2OjU0LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvNTQuMCcsDQogICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMzsgV09XNjQ7IHJ2OjQ1LjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvNDUuMCcsDQogICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMTsgVHJpZGVudC83LjA7IHJ2OjExLjApIGxpa2UgR2Vja28nLA0KICAgICdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgTVNJRSAxMC4wOyBXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNi4wKScsDQogICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDYuMzsgV09XNjQ7IFRyaWRlbnQvNy4wOyBydjoxMS4wKSBsaWtlIEdlY2tvJywNCiAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXT1c2NDsgcnY6NDAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC80MC4xJywNCiAgICAnTW96aWxsYS80LjAgKGNvbXBhdGlibGU7IE1TSUUgNy4wOyBXaW5kb3dzIE5UIDYuMTsgV09XNjQ7IFRyaWRlbnQvNS4wOyBTTENDMjsgLk5FVCBDTFIgMi4wLjUwNzI3OyAuTkVUIENMUiAzLjUuMzA3Mjk7IC5ORVQgQ0xSIDMuMC4zMDcyOTsgTWVkaWEgQ2VudGVyIFBDIDYuMDsgLk5FVDQuMEM7IC5ORVQ0LjBFKScsDQogICAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDUuMSkgQXBwbGVXZWJLaXQvNTM3LjExIChLSFRNTCBsaWtlIEdlY2tvKSBDaHJvbWUvMjMuMC4xMjcxLjk1IFNhZmFyaS81MzcuMTEnLA0KICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjE7IFdPVzY0OyBydjozMS4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzMxLjAnLA0KICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjE7IFdPVzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MIGxpa2UgR2Vja28pIENocm9tZS8zNi4wLjE5ODUuMTQzIFNhZmFyaS81MzcuMzYnLA0KICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCA2LjE7IFdPVzY0OyBydjozMi4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzMyLjAnLA0KICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNjguMC4zNDQwLjEwNiBTYWZhcmkvNTM3LjM2JywNCiAgICAnTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IEdvb2dsZWJvdC8yLjE7ICtodHRwOi8vd3d3Lmdvb2dsZS5jb20vYm90Lmh0bWwpJywNCiAgICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXT1c2NDsgcnY6MzAuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC8zMC4wJywNCiAgICAnTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IE1TSUUgMTAuMDsgV2luZG93cyBOVCA2LjI7IFdPVzY0OyBUcmlkZW50LzYuMCknLA0KICAgICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0OyBydjo2Mi4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzYyLjAnDQopOw0KDQpmdW5jdGlvbiBGYXVjZXRDbGFpbSgkZG9tYWluLCAkZW1haWwsICRjYXB0Y2hhKXsNCg0KICAgIC8vICBtb29uZGFzaC5jby5pbg0KICAgIC8vICBtb29uYml0Y29pbi5jYXNoDQoNCiAgICBnbG9iYWwgJGl0ZW1zOw0KICAgICR1c2VyX2FnZW50ID0gJGl0ZW1zW2FycmF5X3JhbmQoJGl0ZW1zKV07DQogICAgJGNvb2tpZV9zYXZlZCA9ICIuLyIuJGRvbWFpbi4iLnR4dCI7DQoNCiAgICBpZiAoZmlsZV9leGlzdHMoJGNvb2tpZV9zYXZlZCkpIHsNCiAgICAgICAgJGZoID0gZm9wZW4oJGNvb2tpZV9zYXZlZCwgInciKTsNCiAgICAgICAgZndyaXRlKCRmaCwgJycpOw0KICAgICAgICBmY2xvc2UoJGZoKTsNCiAgICB9ZWxzZXsNCiAgICAgICAgdG91Y2goJGNvb2tpZV9zYXZlZCk7DQogICAgfQ0KDQogICAgJHZhcnMgPSAneyJyZXF1ZXN0Ijp7ImVtYWlsIjoiJy4kZW1haWwuJyIsImNhcHRjaGFSZXNwb25zZSI6IicuJGNhcHRjaGEuJyJ9fSc7DQogICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly8iLiRkb21haW4uIi9hcGkvc2VjdXJpdHkvc2VydmljZS5zdmMvU2lnbkluIik7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkdmFycyk7ICAvL1Bvc3QgRmllbGRzDQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDApOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCA0MDApOyAvL3RpbWVvdXQgaW4gc2Vjb25kcw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgdHJ1ZSk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRUpBUiwgJGNvb2tpZV9zYXZlZCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRUZJTEUsICRjb29raWVfc2F2ZWQpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9WRVJCT1NFLCB0cnVlKTsNCiAgICAkaGVhZGVycyA9IFsNCiAgICAgICAgJ1VzZXItQWdlbnQ6ICcuJHVzZXJfYWdlbnQuJycsDQogICAgICAgICdIb3N0OiAnLiRkb21haW4uJycsDQogICAgICAgICdBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qOyBxPTAuMDEnLA0KICAgICAgICAnQWNjZXB0LUxhbmd1YWdlOiBlbi1VUyxlbjtxPTAuNScsDQogICAgICAgICdBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUnLA0KICAgICAgICAnUmVmZXJlcjogaHR0cDovLycuJGRvbWFpbi4nLycsDQogICAgICAgICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLA0KICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QnDQogICAgXTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTElORk9fSEVBREVSX09VVCwgdHJ1ZSk7DQogICAgJHNlcnZlcl9vdXRwdXQgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICAkanNvbkFycmF5ID0ganNvbl9kZWNvZGUoJHNlcnZlcl9vdXRwdXQsIHRydWUpOw0KICAgIC8vcHJpbnRfcigkanNvbkFycmF5KTtleGl0Ow0KICAgIGlmKCRqc29uQXJyYXlbImQiXVsicmVzdWx0Il0gPT0gdHJ1ZSl7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vIi4kZG9tYWluLiIvZmF1Y2V0Iik7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICcnKTsgIC8vUG9zdCBGaWVsZHMNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VULCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1RJTUVPVVQsIDQwMCk7IC8vdGltZW91dCBpbiBzZWNvbmRzDQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkY29va2llX3NhdmVkKTsNCiAgICAgICAgJGhlYWRlcnMgPSBbDQogICAgICAgICAgICAnVXNlci1BZ2VudDogJy4kdXNlcl9hZ2VudC4nJywNCiAgICAgICAgICAgICdBY2NlcHQ6IHRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOCcsDQogICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlOiBlbi1VUyxlbjtxPTAuNScsDQogICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nOiBnemlwLCBkZWZsYXRlJywNCiAgICAgICAgICAgICdSZWZlcmVyOiBodHRwOi8vJy4kZG9tYWluLicvJywNCiAgICAgICAgICAgICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJywNCiAgICAgICAgICAgICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzOiAxJywNCiAgICAgICAgICAgICdDYWNoZS1Db250cm9sOiBtYXgtYWdlPTAnDQogICAgICAgIF07DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaGVhZGVycyk7DQogICAgICAgICRzZXJ2ZXJfb3V0cHV0ID0gY3VybF9leGVjKCRjaCk7DQogICAgICAgICRodG1sID0gc3RyX2dldF9odG1sKCRzZXJ2ZXJfb3V0cHV0KTsNCiAgICAgICAgZm9yZWFjaCgkaHRtbC0+ZmluZCgiaW5wdXQjZmF1Y2V0VmVyc2lvbiIpIGFzICRlKQ0KICAgICAgICAgICAgJGZhdWNldFZlcnNpb24gPSAkZS0+dmFsdWU7DQoNCiAgICAgICAgLyogR2V0RmF1Y2V0U3VtbWFyeSAqLw0KICAgICAgICAkdmFycyA9ICd7InJlcXVlc3QiOnsiaW50ZXJ2YWwiOjYwMDAwLCJyZWZlcnJhbFVSTCI6IiIsImJhbGFuY2UiOjAsInJlZmVycmFsQ291bnQiOjAsInJlZmVycmFsVG90YWwiOjAsImFsZXJ0IjpmYWxzZSwiYWxlcnRXaGVuQ2xhaW1SZWFkeSI6dHJ1ZSwiYWxlcnRBdENsYWltVGhyZXNob2xkIjpmYWxzZSwiYWxlcnRBdENsYWltVGhyZXNob2xkQW1vdW50IjoiMC4wMDAwMDAwMCIsImFsZXJ0UGFnZVRpdGxlIjp0cnVlLCJhbGVydFBsYXlTb3VuZCI6dHJ1ZSwiY2xhaW1BbW91bnQiOjAsImNhbkNsYWltIjp0cnVlLCJyZXN1bHRIdG1sIjoiIiwiY2FwdGNoYVR5cGUiOjAsImFsZXJ0ZWQiOmZhbHNlLCJjdXJyZW50QW5pbWF0ZSI6bnVsbCwiZnAiOiIiLCJwYWdlVGl0bGUiOiJNb29uIERhc2ggfCBGcmVlIGRhc2ggZmF1Y2V0IiwiY2xhaW1lZEFtb3VudCI6MCwiYmFzZUNsYWltZWRBbW91bnQiOjAsImxveWFsdHlCb251cyI6MCwicmVmZXJyYWxCb251cyI6MCwibXlzdGVyeUJvbnVzIjowfX0nOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiaHR0cDovLyIuJGRvbWFpbi4iL2FwaS9mYXVjZXQvc2VydmljZS5zdmMvR2V0RmF1Y2V0U3VtbWFyeSIpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkdmFycyk7ICAvL1Bvc3QgRmllbGRzDQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCA0MDApOyAvL3RpbWVvdXQgaW4gc2Vjb25kcw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgJGNvb2tpZV9zYXZlZCk7DQogICAgICAgICRoZWFkZXJzID0gWw0KICAgICAgICAgICAgJ1VzZXItQWdlbnQ6ICcuJHVzZXJfYWdlbnQuJycsDQogICAgICAgICAgICAnSG9zdDogJy4kZG9tYWluLicnLA0KICAgICAgICAgICAgJ0FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyo7IHE9MC4wMScsDQogICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlOiBlbi1VUyxlbjtxPTAuNScsDQogICAgICAgICAgICAnQWNjZXB0LUVuY29kaW5nOiBnemlwLCBkZWZsYXRlJywNCiAgICAgICAgICAgICdSZWZlcmVyOiBodHRwOi8vJy4kZG9tYWluLicvZmF1Y2V0JywNCiAgICAgICAgICAgICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLA0KICAgICAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGg6IFhNTEh0dHBSZXF1ZXN0JywNCiAgICAgICAgICAgICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJw0KICAgICAgICBdOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KICAgICAgICAkc2VydmVyX291dHB1dCA9IGN1cmxfZXhlYygkY2gpOw0KICAgICAgICAkanNvbkFycmF5ID0ganNvbl9kZWNvZGUoJHNlcnZlcl9vdXRwdXQsIHRydWUpOw0KICAgICAgICAvL3ByaW50X3IoJGpzb25BcnJheSk7ZXhpdDsNCiAgICAgICAgaWYoJGpzb25BcnJheVsiZCJdWyJyZXN1bHQiXSA9PSB0cnVlKXsNCiAgICAgICAgICAgICRiYWxhbmNlID0gJGpzb25BcnJheVsiZCJdWyJiYWxhbmNlIl07DQogICAgICAgICAgICAkYmFsYW5jZSA9IHNwcmludGYoIiUuOGYiLCAkYmFsYW5jZSk7DQogICAgICAgICAgICAkZW1haWwgPSAkanNvbkFycmF5WyJkIl1bImVtYWlsIl07DQogICAgICAgICAgICAkcmVmZXJyYWxVUkwgPSAkanNvbkFycmF5WyJkIl1bInJlZmVycmFsVVJMIl07DQoNCiAgICAgICAgICAgIC8qIEdldENsYWltU3VtbWFyeSAqLw0KICAgICAgICAgICAgJHZhcnMgPSAneyJyZXF1ZXN0Ijp7ImludGVydmFsIjo2MDAwMCwicmVmZXJyYWxVUkwiOiInLiRyZWZlcnJhbFVSTC4nIiwiYmFsYW5jZSI6Jy4kYmFsYW5jZS4nLCJyZWZlcnJhbENvdW50IjowLCJyZWZlcnJhbFRvdGFsIjowLCJhbGVydCI6ZmFsc2UsImFsZXJ0V2hlbkNsYWltUmVhZHkiOnRydWUsImFsZXJ0QXRDbGFpbVRocmVzaG9sZCI6ZmFsc2UsImFsZXJ0QXRDbGFpbVRocmVzaG9sZEFtb3VudCI6IjAuMDAwMDAwMDAiLCJhbGVydFBhZ2VUaXRsZSI6dHJ1ZSwiYWxlcnRQbGF5U291bmQiOnRydWUsImNsYWltQW1vdW50IjowLCJjYW5DbGFpbSI6dHJ1ZSwicmVzdWx0SHRtbCI6IkZhdWNldCBzdW1tYXJ5IHJldHJpZXZlZCBzdWNjZXNzZnVsbHkuIiwiY2FwdGNoYVR5cGUiOjAsImFsZXJ0ZWQiOmZhbHNlLCJjdXJyZW50QW5pbWF0ZSI6bnVsbCwiZnAiOiIiLCJwYWdlVGl0bGUiOiJNb29uIERhc2ggfCBGcmVlIGRhc2ggZmF1Y2V0IiwiY2xhaW1lZEFtb3VudCI6MCwiYmFzZUNsYWltZWRBbW91bnQiOjAsImxveWFsdHlCb251cyI6MCwicmVmZXJyYWxCb251cyI6MCwibXlzdGVyeUJvbnVzIjowLCJfX3R5cGUiOiJHZXRGYXVjZXRTdW1tYXJ5UmVzcG9uc2U6I01vb25GYXVjZXQuV2ViLkFQSS5GYXVjZXQiLCJhdXRoZW50aWNhdGlvblJlcXVpcmVkIjpmYWxzZSwicmVzdWx0Ijp0cnVlLCJyZXN1bHREZXRhaWxzIjoiRmF1Y2V0IHN1bW1hcnkgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseS4iLCJlbWFpbCI6IicuJGVtYWlsLiciLCJfX2tvX21hcHBpbmdfXyI6eyJpZ25vcmUiOltdLCJpbmNsdWRlIjpbIl9kZXN0cm95Il0sImNvcHkiOltdLCJvYnNlcnZlIjpbXSwibWFwcGVkUHJvcGVydGllcyI6eyJfX3R5cGUiOnRydWUsImF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiOnRydWUsInJlc3VsdCI6dHJ1ZSwicmVzdWx0RGV0YWlscyI6dHJ1ZSwiYmFsYW5jZSI6dHJ1ZSwiZW1haWwiOnRydWUsInJlZmVycmFsQ291bnQiOnRydWUsInJlZmVycmFsVG90YWwiOnRydWUsInJlZmVycmFsVVJMIjp0cnVlLCJyZXN1bHRIdG1sIjp0cnVlfSwiY29waWVkUHJvcGVydGllcyI6e319LCJyZWZlcnJhbERldGFpbHMiOiJZb3VyIHJlZmVycmFsIGxpbmsgaXMuLi48YnIvPjxoMz4nLiRyZWZlcnJhbFVSTC4nPC9oMz48YnIvPlRvIGRhdGUgeW91IGhhdmUgMCByZWZlcnJhbHMgYW5kIGhhdmUgYmVlbiBwYWlkIDxpbWcgc3JjPSdjb2luL2xvZ28ucG5nJyBzdHlsZT0naGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbTo0cHgnPiZuYnNwOzAuMDAwMDAwMDAgIGluIHJlZmVycmFsIGNvbW1pc3Npb24gKGxhc3QgMzAgZGF5cykifX0nOw0KDQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiaHR0cDovLyIuJGRvbWFpbi4iL2FwaS9mYXVjZXQvc2VydmljZS5zdmMvR2V0Q2xhaW1TdW1tYXJ5Iik7DQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHZhcnMpOyAgLy9Qb3N0IEZpZWxkcw0KICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCwgMCk7DQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgNDAwKTsgLy90aW1lb3V0IGluIHNlY29uZHMNCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkY29va2llX3NhdmVkKTsNCiAgICAgICAgICAgICRoZWFkZXJzID0gWw0KICAgICAgICAgICAgICAgICdVc2VyLUFnZW50OiAnLiR1c2VyX2FnZW50LicnLA0KICAgICAgICAgICAgICAgICdIb3N0OiAnLiRkb21haW4uJycsDQogICAgICAgICAgICAgICAgJ0FjY2VwdDogYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyo7IHE9MC4wMScsDQogICAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZTogZW4tVVMsZW47cT0wLjUnLA0KICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUnLA0KICAgICAgICAgICAgICAgICdSZWZlcmVyOiBodHRwOi8vJy4kZG9tYWluLicvZmF1Y2V0JywNCiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JywNCiAgICAgICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QnLA0KICAgICAgICAgICAgICAgICdDb25uZWN0aW9uOiBrZWVwLWFsaXZlJw0KICAgICAgICAgICAgXTsNCiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaGVhZGVycyk7DQogICAgICAgICAgICAkc2VydmVyX291dHB1dCA9IGN1cmxfZXhlYygkY2gpOw0KICAgICAgICAgICAgJGpzb25BcnJheSA9IGpzb25fZGVjb2RlKCRzZXJ2ZXJfb3V0cHV0LCB0cnVlKTsNCiAgICAgICAgICAgIC8vcHJpbnRfcigkanNvbkFycmF5KTtleGl0Ow0KICAgICAgICAgICAgaWYoJGpzb25BcnJheVsiZCJdWyJyZXN1bHQiXSA9PSB0cnVlKXsNCiAgICAgICAgICAgICAgICAvKiBGYXVjZXRDbGFpbSAqLw0KICAgICAgICAgICAgICAgICR2YXJzID0gJ3sicmVxdWVzdCI6eyJhZEJsb2NrZWQiOmZhbHNlLCJjYXB0Y2hhUmVzcG9uc2UiOiInLiRjYXB0Y2hhLiciLCJpbnN0YW50Q2xhaW0iOnRydWUsImZwIjoiIiwidmVyc2lvbiI6IicuJGZhdWNldFZlcnNpb24uJyJ9fSc7DQogICAgICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgImh0dHA6Ly8iLiRkb21haW4uIi9hcGkvZmF1Y2V0L3NlcnZpY2Uuc3ZjL0ZhdWNldENsYWltIik7DQogICAgICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkdmFycyk7ICAvL1Bvc3QgRmllbGRzDQogICAgICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCiAgICAgICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDApOw0KICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCA0MDApOyAvL3RpbWVvdXQgaW4gc2Vjb25kcw0KICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkY29va2llX3NhdmVkKTsNCiAgICAgICAgICAgICAgICAkaGVhZGVycyA9IFsNCiAgICAgICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQ6ICcuJHVzZXJfYWdlbnQuJycsDQogICAgICAgICAgICAgICAgICAgICdIb3N0OiAnLiRkb21haW4uJycsDQogICAgICAgICAgICAgICAgICAgICdBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCwgKi8qOyBxPTAuMDEnLA0KICAgICAgICAgICAgICAgICAgICAnQWNjZXB0LUxhbmd1YWdlOiBlbi1VUyxlbjtxPTAuNScsDQogICAgICAgICAgICAgICAgICAgICdBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUnLA0KICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcjogaHR0cDovLycuJGRvbWFpbi4nL2ZhdWNldCcsDQogICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLA0KICAgICAgICAgICAgICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aDogWE1MSHR0cFJlcXVlc3QnLA0KICAgICAgICAgICAgICAgICAgICAnQ29ubmVjdGlvbjoga2VlcC1hbGl2ZScNCiAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaGVhZGVycyk7DQogICAgICAgICAgICAgICAgJHNlcnZlcl9vdXRwdXQgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICAgICAgICAgICAgICAkanNvbkFycmF5ID0ganNvbl9kZWNvZGUoJHNlcnZlcl9vdXRwdXQsIHRydWUpOw0KICAgICAgICAgICAgICAgICNwcmludF9yKCRqc29uQXJyYXkpOw0KICAgICAgICAgICAgICAgIGlmKCRqc29uQXJyYXlbImQiXVsicmVzdWx0Il0gPT0gdHJ1ZSl7DQoNCiAgICAgICAgICAgICAgICAgICAgLy9lY2hvICJuIjsNCiAgICAgICAgICAgICAgICAgICAgLy9lY2hvICdGYXVjZXQgY2xhaW0gc3VjY2Vzc2Z1bCBmb3IgJy4kZW1haWwgLiAnIOKZpSc7DQogICAgICAgICAgICAgICAgICAgIC8vZWNobyAibiI7DQogICAgICAgICAgICAgICAgICAgIC8vZWNobyAkdXNlcl9hZ2VudDsNCiAgICAgICAgICAgICAgICAgICAgLy9lY2hvICJuIjsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9ICdzdWNjZXNzZnVsbCc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2V7DQogICAgICAgICAgICAgICAgICAgIC8vZWNobyAibiI7DQogICAgICAgICAgICAgICAgICAgIC8vZWNobyAkanNvbkFycmF5WyJkIl1bInJlc3VsdERldGFpbHMiXSAuICcgZm9yICcuJGVtYWlsIC4gJyA6KCc7DQogICAgICAgICAgICAgICAgICAgIC8vZWNobyAibiI7DQogICAgICAgICAgICAgICAgICAgIC8vZWNobyAkdXNlcl9hZ2VudDsNCiAgICAgICAgICAgICAgICAgICAgLy9lY2hvICJuIjsNCiAgICAgICAgICAgICAgICAgICAgJG91dCA9ICRqc29uQXJyYXlbImQiXVsicmVzdWx0RGV0YWlscyJdOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2V7DQogICAgICAgICAgICAgICAgLy9lY2hvICdFcnJvciBpbiBHZXRDbGFpbVN1bW1hcnknOw0KICAgICAgICAgICAgICAgIC8vJG91dCA9ICdlcnJvcic7DQogICAgICAgICAgICAgICAgJG91dCA9ICRqc29uQXJyYXlbImQiXVsicmVzdWx0RGV0YWlscyJdOw0KICAgICAgICAgICAgICAgIC8vZXhpdDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8qIEdldENsYWltU3VtbWFyeSAqLw0KICAgICAgICB9DQogICAgICAgIGVsc2V7DQogICAgICAgICAgICAvL2VjaG8gJ0Vycm9yIGluIEdldEZhdWNldFN1bW1hcnknOw0KICAgICAgICAgICAgJG91dCA9ICdlcnJvcic7DQogICAgICAgICAgICAkb3V0ID0gJGpzb25BcnJheVsiZCJdWyJyZXN1bHREZXRhaWxzIl07DQogICAgICAgICAgICAvL2V4aXQ7DQogICAgICAgIH0NCiAgICAgICAgLyogR2V0RmF1Y2V0U3VtbWFyeSAqLw0KDQogICAgICAgIC8qJHZhcnMgPSAneyJyZXF1ZXN0IjpudWxsfSc7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICJodHRwOi8vIi4kZG9tYWluLiIvYXBpL3NlY3VyaXR5L3NlcnZpY2Uuc3ZjL1NpZ25PdXQiKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHZhcnMpOyAgLy9Qb3N0IEZpZWxkcw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgNjApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfQ09PS0lFRklMRSwgJGNvb2tpZV9zYXZlZCk7DQoNCiAgICAgICAgJGhlYWRlcnMgPSBbDQogICAgICAgICAgICAnQ29udGVudC1UeXBlOiAgYXBwbGljYXRpb24vanNvbicsDQogICAgICAgICAgICAnVXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6NjIuMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC82Mi4wJw0KICAgICAgICBdOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KICAgICAgICAkc2VydmVyX291dHB1dCA9IGN1cmxfZXhlYygkY2gpOw0KICAgICAgICAkanNvbkFycmF5ID0ganNvbl9kZWNvZGUoJHNlcnZlcl9vdXRwdXQsIHRydWUpOw0KICAgICAgICBwcmludF9yKCRqc29uQXJyYXkpOyovDQogICAgfQ0KICAgIGVsc2V7DQogICAgICAgIC8vZWNobyAnVGhlcmUgaXMgYSBwcm9ibGVtISc7DQogICAgICAgICRvdXQgPSAnZXJyb3InOw0KICAgICAgICAkb3V0ID0gJGpzb25BcnJheVsiZCJdWyJyZXN1bHREZXRhaWxzIl07DQogICAgICAgIC8vZXhpdDsNCiAgICB9DQoNCiAgICByZXR1cm4gJG91dDsNCg0KfQ0KZnVuY3Rpb24gYWRiKCRjbWQpew0KICAgIGlmKCRjbWQgPT0gJ29uJyl7DQogICAgICAgICRjbWQgPSAnZW5hYmxlJzsNCiAgICB9DQogICAgZWxzZQ0KICAgICAgICBpZigkY21kID09ICdvZmYnKXsNCiAgICAgICAgICAgICRjbWQgPSAnZGlzYWJsZSc7DQogICAgICAgIH0NCiAgICBvYl9zdGFydCgpOw0KICAgIHN5c3RlbSgnZDphZGJhZGIgc2hlbGwgc3ZjIGRhdGEgJy4kY21kLicnKTsNCiAgICAkbXljb20gPSBvYl9nZXRfY29udGVudHMoKTsNCiAgICAvL29iX2NsZWFuKCk7DQogICAgb2JfZW5kX2NsZWFuKCk7DQoNCiAgICBpZigkbXljb20gIT0gJycpew0KICAgICAgICByZXR1cm4gJ2Vycm9yJzsNCiAgICAgICAgLy9leGl0Ow0KICAgIH0NCiAgICBlbHNlIGlmKCRteWNvbSA9PSAnJyl7DQogICAgICAgIHJldHVybiAnc3VjY2Vzc2Z1bGwnOw0KICAgIH0NCiAgICBlbHNlew0KICAgICAgICByZXR1cm4gJ2Vycm9yJzsNCiAgICB9DQp9DQpmdW5jdGlvbiBTd2l0Y2hfTW9kZW0oJHR5cGUpew0KDQogICAgaWYgKCR0eXBlID09ICdvZmYnKSB7DQogICAgICAgICR2YXJzID0gJ1tMVEVfV0FOX0NGRyMyLDEsMCwwLDAsMCMwLDAsMCwwLDAsMF0wLDENCmRhdGFTd2l0Y2hTdGF0dXNCYWNrdXA9MA0KDQonOw0KICAgIH0gZWxzZSBpZiAoJHR5cGUgPT0gJ29uJykgew0KICAgICAgICAkdmFycyA9ICdbTFRFX1dBTl9DRkcjMiwxLDAsMCwwLDAjMCwwLDAsMCwwLDBdMCwxDQpkYXRhU3dpdGNoU3RhdHVzQmFja3VwPTENCg0KJzsNCiAgICB9DQoNCiAgICAkY2ggPSBjdXJsX2luaXQoKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiaHR0cDovLzE5Mi4xNjguMS43L2NnaT8yIik7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCAkdmFycyk7ICAvL1Bvc3QgRmllbGRzDQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgNjApOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7DQogICAgJGhlYWRlcnMgPSBbDQogICAgICAgICdIb3N0OiAxOTIuMTY4LjEuNycsDQogICAgICAgICdVc2VyLUFnZW50OiBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0OyBydjo2Mi4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzYyLjAnLA0KICAgICAgICAnQWNjZXB0OiAqLyonLA0KICAgICAgICAnQWNjZXB0LUxhbmd1YWdlOiBlbi1VUyxlbjtxPTAuNScsDQogICAgICAgICdBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUnLA0KICAgICAgICAnUmVmZXJlcjogaHR0cDovLzE5Mi4xNjguMS43LycsDQogICAgICAgICdDb250ZW50LVR5cGU6dGV4dC9wbGFpbicsDQogICAgICAgICdDb29raWU6IEF1dGhvcml6YXRpb249QmFzaWMgYldodU1USXonLA0KICAgICAgICAnQ29ubmVjdGlvbjoga2VlcC1hbGl2ZScsDQogICAgICAgICdQcmFnbWE6IG5vLWNhY2hlJywNCiAgICAgICAgJ0NhY2hlLUNvbnRyb2w6IG5vLWNhY2hlJw0KICAgIF07DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hUVFBIRUFERVIsICRoZWFkZXJzKTsNCiAgICAkc2VydmVyX291dHB1dCA9IGN1cmxfZXhlYygkY2gpOw0KDQogICAgaWYoJHNlcnZlcl9vdXRwdXQgPT0gJ1tlcnJvcl0wJyl7DQogICAgICAgIHJldHVybiAnc3VjY2Vzc2Z1bGwnOw0KICAgIH0NCiAgICBlbHNlew0KICAgICAgICByZXR1cm4gJ2Vycm9yJzsNCiAgICB9DQp9DQoNCg0KDQokaSA9IDA7DQp3aGlsZSh0cnVlKXsNCg0KICAgICRzcWxfdGltZSA9ICJTRUxFQ1QgKiBGUk9NIGFjY291bnRzIFdIRVJFIGFjdGl2ZSA9IDEiOw0KICAgICRyZXN1bHRfdGltZSA9ICRkYi0+cXVlcnkoJHNxbF90aW1lKTsNCiAgICBpZihteXNxbGlfbnVtX3Jvd3MoJHJlc3VsdF90aW1lKSA+IDApew0KICAgICAgICB3aGlsZSgkZGF0YV90aW1lID0gJHJlc3VsdF90aW1lLT5mZXRjaF9hcnJheSgpKXsNCg0KICAgICAgICAgICAgJGN1cnJlbnRfdGltZSA9IGRhdGUoIlktbS1kIEg6aTpzIik7DQoNCiAgICAgICAgICAgIGlmKCRjdXJyZW50X3RpbWUgPj0gJGRhdGFfdGltZVsnbmV4dF9jbGFpbSddKXsNCg0KICAgICAgICAgICAgICAgIC8qJGFkYl9vbiA9IGFkYignb24nKTsNCiAgICAgICAgICAgICAgICBzbGVlcCgxLjUpOyovDQoNCiAgICAgICAgICAgICAgICAkYWRiX29uID0gU3dpdGNoX01vZGVtKCdvbicpOw0KICAgICAgICAgICAgICAgIHNsZWVwKDEuNSk7DQoNCg0KDQogICAgICAgICAgICAgICAgJGNsYWltID0gRmF1Y2V0Q2xhaW0oJ21vb25kYXNoLmNvLmluJywgJGRhdGFfdGltZVsnZW1haWwnXSwgJzAzQU1HVmpYZ0hFU1YyVENaclhOM3RobmRDYk1Tbm5oazZWVDEzSl8wT2czU1JSaW40bkVFWm1jcnJROHJJckNyNWd4SXI5RmRVRHB0SHVtNmtlWm85WlFIemsxV0RxQzJDbnA5YUdSVGw0S0k3RDEzSEE4OHRINVVMTE1IVEd4ekJvUmxrd2R5RUVZQWNQZ245Y1dFbTNodG5HeVljYldMb2FwV3A4bERQY21CTVdQWU9aZGRENzliejBuTE9aSWtpQnFNV0Y5YnZKbDBQdWNvaWxOTVNwcWVudU9jZ1BwczZ1S1Q5OHRybkw0LTM1Z1dzbmtiQjhnYVdQTTAyUlB1VmtRYndfS01TQ2htNHFsa2dxalRiS1haOHFUaDZMdWpHdGcnKTsNCiAgICAgICAgICAgICAgICAkY2xhaW0yID0gRmF1Y2V0Q2xhaW0oJ21vb25iaXRjb2luLmNhc2gnLCAkZGF0YV90aW1lWydlbWFpbCddLCAnMDNBTUdWalhnSEVTVjJUQ1pyWE4zdGhuZENiTVNubmhrNlZUMTNKXzBPZzNTUlJpbjRuRUVabWNyclE4cklyQ3I1Z3hJcjlGZFVEcHRIdW02a2VabzlaUUh6azFXRHFDMkNucDlhR1JUbDRLSTdEMTNIQTg4dEg1VUxMTUhUR3h6Qm9SbGt3ZHlFRVlBY1BnbjljV0VtM2h0bkd5WWNiV0xvYXBXcDhsRFBjbUJNV1BZT1pkZEQ3OWJ6MG5MT1pJa2lCcU1XRjlidkpsMFB1Y29pbE5NU3BxZW51T2NnUHBzNnVLVDk4dHJuTDQtMzVnV3Nua2JCOGdhV1BNMDJSUHVWa1Fid19LTVNDaG00cWxrZ3FqVGJLWFo4cVRoNkx1akd0ZycpOw0KDQogICAgICAgICAgICAgICAgaWYoJGNsYWltID09ICdzdWNjZXNzZnVsbCcgIEFORCAkYWRiX29uID09ICdzdWNjZXNzZnVsbCcpDQogICAgICAgICAgICAgICAgLy9pZigkY2xhaW0gPT0gJ3N1Y2Nlc3NmdWxsJykNCiAgICAgICAgICAgICAgICB7DQoNCiAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRfdGltZSA9IGRhdGUoIlktbS1kIEg6aTpzIik7DQogICAgICAgICAgICAgICAgICAgICREYXRlVGltZSA9IERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdZLW0tZCBIOmk6cycsICcnLiRjdXJyZW50X3RpbWUuJycpOw0KICAgICAgICAgICAgICAgICAgICAkRGF0ZVRpbWUtPm1vZGlmeSgnKzUgbWludXRlcycpOw0KICAgICAgICAgICAgICAgICAgICAkbmV4dF9jbGFpbSA9ICREYXRlVGltZS0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpOw0KDQogICAgICAgICAgICAgICAgICAgICRzcWwgPSAiVVBEQVRFIGBhY2NvdW50c2AgU0VUIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBgdXNlZGAgPSAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBgbGFzdF9jbGFpbWAgPSAnIi4kY3VycmVudF90aW1lLiInLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBgbmV4dF9jbGFpbWAgPSAnIi4kbmV4dF9jbGFpbS4iJw0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIRVJFICBgaWRgID0gJyIuJGRhdGFfdGltZVsnaWQnXS4iJyI7DQogICAgICAgICAgICAgICAgICAgICRkYi0+cXVlcnkoJHNxbCk7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIm4iOw0KICAgICAgICAgICAgICAgICAgICBlY2hvICdTdWNjZXNzIGNsYWltIGZvciAnLiRkYXRhX3RpbWVbJ2VtYWlsJ107DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIm5uIjsNCg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlew0KICAgICAgICAgICAgICAgICAgICAkc3FsID0gIlVQREFURSBgYWNjb3VudHNgIFNFVCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgYHVzZWRgID0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hFUkUgIGBpZGAgPSAnIi4kZGF0YV90aW1lWydpZCddLiInIjsNCiAgICAgICAgICAgICAgICAgICAgJGRiLT5xdWVyeSgkc3FsKTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAibiI7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gJ0Vycm9yIGNsYWltIGZvciAnLiRkYXRhX3RpbWVbJ2VtYWlsJ107DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIm4iOw0KICAgICAgICAgICAgICAgICAgICBlY2hvICRjbGFpbTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAibm4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBpZigkY3VycmVudF90aW1lIDw9ICRkYXRhX3RpbWVbJ25leHRfY2xhaW0nXSl7DQogICAgICAgICAgICAgICAgICAgICRzcWwgPSAiVVBEQVRFIGBhY2NvdW50c2AgU0VUIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBgdXNlZGAgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSAgYGlkYCA9ICciLiRkYXRhX3RpbWVbJ2lkJ10uIiciOw0KICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCRzcWwpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KDQogICAgLyppZigkYWRiX29uID09ICdzdWNjZXNzZnVsbCcpew0KICAgICAgICBhZGIoJ29mZicpOw0KICAgIH0qLw0KDQogICAgaWYoJGFkYl9vbiA9PSAnc3VjY2Vzc2Z1bGwnKXsNCiAgICAgICAgU3dpdGNoX01vZGVtKCdvZmYnKTsNCiAgICB9DQoNCiAgICAkaSsrOw0KICAgIHNsZWVwKDEpOw0KICAgIGVjaG8gJ1NsZWVwIG9uZSBzZWNvbmQgLT4gJy4kaTsNCiAgICBlY2hvICJuIjsNCg0KDQoNCn0=")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 bf7650203bb6e07e2e60ee52698b572e
Eval Count 1
Decode Time 100 ms