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 $bs = 'PD9waHAKLyoqIEFkbWluZXIgLSBDb21wYWN0IGRhdGFiYXNlIG1hbmFnZW1lbnQKKiBAbGluayBo..

Decoded Output download

?>b'<?php
/** Adminer - Compact database management
* @link https://www.adminer.org/
* @author Jakub Vrana, https://www.vrana.cz/
* @copyright 2007 Jakub Vrana
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
* @version 4.8.1
*/function
adminer_errors($Ac,$Cc){return!!preg_match(\'~^(Trying to access array offset on value of type null|Undefined array key)~\',$Cc);}error_reporting(6135);set_error_handler(\'adminer_errors\',E_WARNING);$Yc=!preg_match(\'~^(unsafe_raw)?$~\',ini_get("filter.default"));if($Yc||ini_get("filter.default_flags")){foreach(array(\'_GET\',\'_POST\',\'_COOKIE\',\'_SERVER\')as$X){$Fi=filter_input_array(constant("INPUT$X"),FILTER_UNSAFE_RAW);if($Fi)$$X=$Fi;}}if(function_exists("mb_internal_encoding"))mb_internal_encoding("8bit");function
connection(){global$g;return$g;}function
adminer(){global$b;return$b;}function
version(){global$ia;return$ia;}function
idf_unescape($v){if(!preg_match(\'~^[`\\'"]~\',$v))return$v;$ne=substr($v,-1);return
str_replace($ne.$ne,$ne,substr($v,1,-1));}function
escape_string($X){return
substr(q($X),1,-1);}function
number($X){return
preg_replace(\'~[^0-9]+~\',\'\',$X);}function
number_type(){return\'((?<!o)int(?!er)|numeric|real|float|double|decimal|money)\';}function
remove_slashes($qg,$Yc=false){if(function_exists("get_magic_quotes_gpc")&&get_magic_quotes_gpc()){while(list($z,$X)=each($qg)){foreach($X
as$fe=>$W){unset($qg[$z][$fe]);if(is_array($W)){$qg[$z][stripslashes($fe)]=$W;$qg[]=&$qg[$z][stripslashes($fe)];}else$qg[$z][stripslashes($fe)]=($Yc?$W:stripslashes($W));}}}}function
bracket_escape($v,$Ma=false){static$ri=array(\':\'=>\':1\',\']\'=>\':2\',\'[\'=>\':3\',\'"\'=>\':4\');return
strtr($v,($Ma?array_flip($ri):$ri));}function
min_version($Wi,$Ae="",$h=null){global$g;if(!$h)$h=$g;$kh=$h->server_info;if($Ae&&preg_match(\'~([\d.]+)-MariaDB~\',$kh,$C)){$kh=$C[1];$Wi=$Ae;}return(version_compare($kh,$Wi)>=0);}function
charset($g){return(min_version("5.5.3",0,$g)?"utf8mb4":"utf8");}function
script($vh,$qi="\n"){return"<script".nonce().">$vh</script>$qi";}function
script_src($Ki){return"<script src=\'".h($Ki)."\'".nonce()."></script>\n";}function
nonce(){return\' nonce="\'.get_nonce().\'"\';}function
target_blank(){return\' target="_blank" rel="noreferrer noopener"\';}function
h($P){return
str_replace("\0","&#0;",htmlspecialchars($P,ENT_QUOTES,\'utf-8\'));}function
nl_br($P){return
str_replace("\n","<br>",$P);}function
checkbox($D,$Y,$cb,$ke="",$rf="",$gb="",$le=""){$I="<input type=\'checkbox\' name=\'$D\' value=\'".h($Y)."\'".($cb?" checked":"").($le?" aria-labelledby=\'$le\'":"").">".($rf?script("qsl(\'input\').onclick = function () { $rf };",""):"");return($ke!=""||$gb?"<label".($gb?" class=\'$gb\'":"").">$I".h($ke)."</label>":$I);}function
optionlist($xf,$dh=null,$Oi=false){$I="";foreach($xf
as$fe=>$W){$yf=array($fe=>$W);if(is_array($W)){$I.=\'<optgroup label="\'.h($fe).\'">\';$yf=$W;}foreach($yf
as$z=>$X)$I.=\'<option\'.($Oi||is_string($z)?\' value="\'.h($z).\'"\':\'\').(($Oi||is_string($z)?(string)$z:$X)===$dh?\' selected\':\'\').\'>\'.h($X);if(is_array($W))$I.=\'</optgroup>\';}return$I;}function
html_select($D,$xf,$Y="",$qf=true,$le=""){if($qf)return"<select name=\'".h($D)."\'".($le?" aria-labelledby=\'$le\'":"").">".optionlist($xf,$Y)."</select>".(is_string($qf)?script("qsl(\'select\').onchange = function () { $qf };",""):"");$I="";foreach($xf
as$z=>$X)$I.="<label><input type=\'radio\' name=\'".h($D)."\' value=\'".h($z)."\'".($z==$Y?" checked":"").">".h($X)."</label>";return$I;}function
select_input($Ha,$xf,$Y="",$qf="",$cg=""){$Vh=($xf?"select":"input");return"<$Vh$Ha".($xf?"><option value=\'\'>$cg".optionlist($xf,$Y,true)."</select>":" size=\'10\' value=\'".h($Y)."\' placeholder=\'$cg\'>").($qf?script("qsl(\'$Vh\').onchange = $qf;",""):"");}function
confirm($Ke="",$eh="qsl(\'input\')"){return
script("$eh.onclick = function () { return confirm(\'".($Ke?js_escape($Ke):\'Are you sure?\')."\'); };","");}function
print_fieldset($u,$se,$Zi=false){echo"<fieldset><legend>","<a href=\'#fieldset-$u\'>$se</a>",script("qsl(\'a\').onclick = partial(toggle, \'fieldset-$u\');",""),"</legend>","<div id=\'fieldset-$u\'".($Zi?"":" class=\'hidden\'").">\n";}function
bold($Ta,$gb=""){return($Ta?" class=\'active $gb\'":($gb?" class=\'$gb\'":""));}function
odd($I=\' class="odd"\'){static$t=0;if(!$I)$t=-1;return($t++%2?$I:\'\');}function
js_escape($P){return
addcslashes($P,"\r\n\'\\/");}function
json_row($z,$X=null){static$Zc=true;if($Zc)echo"{";if($z!=""){echo($Zc?"":",")."\n\t\"".addcslashes($z,"\r\n\t\"\\/").\'": \'.($X!==null?\'"\'.addcslashes($X,"\r\n\"\\/").\'"\':\'null\');$Zc=false;}else{echo"\n}\n";$Zc=true;}}function
ini_bool($Sd){$X=ini_get($Sd);return(preg_match(\'~^(on|true|yes)$~i\',$X)||(int)$X);}function
sid(){static$I;if($I===null)$I=(SID&&!($_COOKIE&&ini_bool("session.use_cookies")));return$I;}function
set_password($Vi,$M,$V,$F){$_SESSION["pwds"][$Vi][$M][$V]=($_COOKIE["adminer_key"]&&is_string($F)?array(encrypt_string($F,$_COOKIE["adminer_key"])):$F);}function
get_password(){$I=get_session("pwds");if(is_array($I))$I=($_COOKIE["adminer_key"]?decrypt_string($I[0],$_COOKIE["adminer_key"]):false);return$I;}function
q($P){global$g;return$g->quote($P);}function
get_vals($G,$e=0){global$g;$I=array();$H=$g->query($G);if(is_object($H)){while($J=$H->fetch_row())$I[]=$J[$e];}return$I;}function
get_key_vals($G,$h=null,$nh=true){global$g;if(!is_object($h))$h=$g;$I=array();$H=$h->query($G);if(is_object($H)){while($J=$H->fetch_row()){if($nh)$I[$J[0]]=$J[1];else$I[]=$J[0];}}return$I;}function
get_rows($G,$h=null,$n="<p class=\'error\'>"){global$g;$wb=(is_object($h)?$h:$g);$I=array();$H=$wb->query($G);if(is_object($H)){while($J=$H->fetch_assoc())$I[]=$J;}elseif(!$H&&!is_object($h)&&$n&&defined("PAGE_HEADER"))echo$n.error()."\n";return$I;}function
unique_array($J,$x){foreach($x
as$w){if(preg_match("~PRIMARY|UNIQUE~",$w["type"])){$I=array();foreach($w["columns"]as$z){if(!isset($J[$z]))continue
2;$I[$z]=$J[$z];}return$I;}}}function
escape_key($z){if(preg_match(\'(^([\w(]+)(\'.str_replace("_",".*",preg_quote(idf_escape("_"))).\')([ \w)]+)$)\',$z,$C))return$C[1].idf_escape(idf_unescape($C[2])).$C[3];return
idf_escape($z);}function
where($Z,$p=array()){global$g,$y;$I=array();foreach((array)$Z["where"]as$z=>$X){$z=bracket_escape($z,1);$e=escape_key($z);$I[]=$e.($y=="sql"&&is_numeric($X)&&preg_match(\'~\.~\',$X)?" LIKE ".q($X):($y=="mssql"?" LIKE ".q(preg_replace(\'~[_%[]~\',\'[\0]\',$X)):" = ".unconvert_field($p[$z],q($X))));if($y=="sql"&&preg_match(\'~char|text~\',$p[$z]["type"])&&preg_match("~[^ -@]~",$X))$I[]="$e = ".q($X)." COLLATE ".charset($g)."_bin";}foreach((array)$Z["null"]as$z)$I[]=escape_key($z)." IS NULL";return
implode(" AND ",$I);}function
where_check($X,$p=array()){parse_str($X,$ab);remove_slashes(array(&$ab));return
where($ab,$p);}function
where_link($t,$e,$Y,$tf="="){return"&where%5B$t%5D%5Bcol%5D=".urlencode($e)."&where%5B$t%5D%5Bop%5D=".urlencode(($Y!==null?$tf:"IS NULL"))."&where%5B$t%5D%5Bval%5D=".urlencode($Y);}function
convert_fields($f,$p,$L=array()){$I="";foreach($f
as$z=>$X){if($L&&!in_array(idf_escape($z),$L))continue;$Fa=convert_field($p[$z]);if($Fa)$I.=", $Fa AS ".idf_escape($z);}return$I;}function
cookie($D,$Y,$ve=2592000){global$ba;return
header("Set-Cookie: $D=".urlencode($Y).($ve?"; expires=".gmdate("D, d M Y H:i:s",time()+$ve)." GMT":"")."; path=".preg_replace(\'~\?.*~\',\'\',$_SERVER["REQUEST_URI"]).($ba?"; secure":"")."; HttpOnly; SameSite=lax",false);}function
restart_session(){if(!ini_bool("session.use_cookies"))session_start();}function
stop_session($ed=false){$Ni=ini_bool("session.use_cookies");if(!$Ni||$ed){session_write_close();if($Ni&&@ini_set("session.use_cookies",false)===false)session_start();}}function&get_session($z){return$_SESSION[$z][DRIVER][SERVER][$_GET["username"]];}function
set_session($z,$X){$_SESSION[$z][DRIVER][SERVER][$_GET["username"]]=$X;}function
auth_url($Vi,$M,$V,$l=null){global$ic;preg_match(\'~([^?]*)\??(.*)~\',remove_from_uri(implode("|",array_keys($ic))."|username|".($l!==null?"db|":"").session_name()),$C);return"$C[1]?".(sid()?SID."&":"").($Vi!="server"||$M!=""?urlencode($Vi)."=".urlencode($M)."&":"")."username=".urlencode($V).($l!=""?"&db=".urlencode($l):"").($C[2]?"&$C[2]":"");}function
is_ajax(){return($_SERVER["HTTP_X_REQUESTED_WITH"]=="XMLHttpRequest");}function
redirect($B,$Ke=null){if($Ke!==null){restart_session();$_SESSION["messages"][preg_replace(\'~^[^?]*~\',\'\',($B!==null?$B:$_SERVER["REQUEST_URI"]))][]=$Ke;}if($B!==null){if($B=="")$B=".";header("Location: $B");exit;}}function
query_redirect($G,$B,$Ke,$Ag=true,$Hc=true,$Rc=false,$di=""){global$g,$n,$b;if($Hc){$Ch=microtime(true);$Rc=!$g->query($G);$di=format_time($Ch);}$yh="";if($G)$yh=$b->messageQuery($G,$di,$Rc);if($Rc){$n=error().$yh.script("messagesPrint();");return
false;}if($Ag)redirect($B,$Ke.$yh);return
true;}function
queries($G){global$g;static$vg=array();static$Ch;if(!$Ch)$Ch=microtime(true);if($G===null)return
array(implode("\n",$vg),format_time($Ch));$vg[]=(preg_match(\'~;$~\',$G)?"DELIMITER ;;\n$G;\nDELIMITER ":$G).";";return$g->query($G);}function
apply_queries($G,$S,$Dc=\'table\'){foreach($S
as$Q){if(!queries("$G ".$Dc($Q)))return
false;}return
true;}function
queries_redirect($B,$Ke,$Ag){list($vg,$di)=queries(null);return
query_redirect($vg,$B,$Ke,$Ag,false,!$Ag,$di);}function
format_time($Ch){return
sprintf(\'%.3f s\',max(0,microtime(true)-$Ch));}function
relative_uri(){return
str_replace(":","%3a",preg_replace(\'~^[^?]*/([^?]*)~\',\'\1\',$_SERVER["REQUEST_URI"]));}function
remove_from_uri($Nf=""){return
substr(preg_replace("~(?<=[?&])($Nf".(SID?"":"|".session_name()).")=[^&]*&~",\'\',relative_uri()."&"),0,-1);}function
pagination($E,$Nb){return" ".($E==$Nb?$E+1:\'<a href="\'.h(remove_from_uri("page").($E?"&page=$E".($_GET["next"]?"&next=".urlencode($_GET["next"]):""):"")).\'">\'.($E+1)."</a>");}function
get_file($z,$Vb=false){$Xc=$_FILES[$z];if(!$Xc)return
null;foreach($Xc
as$z=>$X)$Xc[$z]=(array)$X;$I=\'\';foreach($Xc["error"]as$z=>$n){if($n)return$n;$D=$Xc["name"][$z];$li=$Xc["tmp_name"][$z];$Bb=file_get_contents($Vb&&preg_match(\'~\.gz$~\',$D)?"compress.zlib://$li":$li);if($Vb){$Ch=substr($Bb,0,3);if(function_exists("iconv")&&preg_match("~^\xFE\xFF|^\xFF\xFE~",$Ch,$Gg))$Bb=iconv("utf-16","utf-8",$Bb);elseif($Ch=="\xEF\xBB\xBF")$Bb=substr($Bb,3);$I.=$Bb."\n\n";}else$I.=$Bb;}return$I;}function
upload_error($n){$He=($n==UPLOAD_ERR_INI_SIZE?ini_get("upload_max_filesize"):0);return($n?\'Unable to upload a file.\'.($He?" ".sprintf(\'Maximum allowed file size is %sB.\',$He):""):\'File does not exist.\');}function
repeat_pattern($Zf,$te){return
str_repeat("$Zf{0,65535}",$te/65535)."$Zf{0,".($te%65535)."}";}function
is_utf8($X){return(preg_match(\'~~u\',$X)&&!preg_match(\'~[\0-\x8\xB\xC\xE-\x1F]~\',$X));}function
shorten_utf8($P,$te=80,$Jh=""){if(!preg_match("(^(".repeat_pattern("[\t\r\n -\x{10FFFF}]",$te).")($)?)u",$P,$C))preg_match("(^(".repeat_pattern("[\t\r\n -~]",$te).")($)?)",$P,$C);return
h($C[1]).$Jh.(isset($C[2])?"":"<i></i>");}function
format_number($X){return
strtr(number_format($X,0,".",\',\'),preg_split(\'~~u\',\'0123456789\',-1,PREG_SPLIT_NO_EMPTY));}function
friendly_url($X){return
preg_replace(\'~[^a-z0-9_]~i\',\'-\',$X);}function
hidden_fields($qg,$Hd=array(),$ig=\'\'){$I=false;foreach($qg
as$z=>$X){if(!in_array($z,$Hd)){if(is_array($X))hidden_fields($X,array(),$z);else{$I=true;echo\'<input type="hidden" name="\'.h($ig?$ig."[$z]":$z).\'" value="\'.h($X).\'">\';}}}return$I;}function
hidden_fields_get(){echo(sid()?\'<input type="hidden" name="\'.session_name().\'" value="\'.h(session_id()).\'">\':\'\'),(SERVER!==null?\'<input type="hidden" name="\'.DRIVER.\'" value="\'.h(SERVER).\'">\':""),\'<input type="hidden" name="username" value="\'.h($_GET["username"]).\'">\';}function
table_status1($Q,$Sc=false){$I=table_status($Q,$Sc);return($I?$I:array("Name"=>$Q));}function
column_foreign_keys($Q){global$b;$I=array();foreach($b->foreignKeys($Q)as$r){foreach($r["source"]as$X)$I[$X][]=$r;}return$I;}function
enum_input($T,$Ha,$o,$Y,$xc=null){global$b;preg_match_all("~\'((?:[^\']|\'\')*)\'~",$o["length"],$Ce);$I=($xc!==null?"<label><input type=\'$T\'$Ha value=\'$xc\'".((is_array($Y)?in_array($xc,$Y):$Y===0)?" checked":"")."><i>".\'empty\'."</i></label>":"");foreach($Ce[1]as$t=>$X){$X=stripcslashes(str_replace("\'\'","\'",$X));$cb=(is_int($Y)?$Y==$t+1:(is_array($Y)?in_array($t+1,$Y):$Y===$X));$I.=" <label><input type=\'$T\'$Ha value=\'".($t+1)."\'".($cb?\' checked\':\'\').\'>\'.h($b->editVal($X,$o)).\'</label>\';}return$I;}function
input($o,$Y,$s){global$U,$b,$y;$D=h(bracket_escape($o["field"]));echo"<td class=\'function\'>";if(is_array($Y)&&!$s){$Da=array($Y);if(version_compare(PHP_VERSION,5.4)>=0)$Da[]=JSON_PRETTY_PRINT;$Y=call_user_func_array(\'json_encode\',$Da);$s="json";}$Kg=($y=="mssql"&&$o["auto_increment"]);if($Kg&&!$_POST["save"])$s=null;$nd=(isset($_GET["select"])||$Kg?array("orig"=>\'original\'):array())+$b->editFunctions($o);$Ha=" name=\'fields[$D]\'";if($o["type"]=="enum")echo
h($nd[""])."<td>".$b->editInput($_GET["edit"],$o,$Ha,$Y);else{$xd=(in_array($s,$nd)||isset($nd[$s]));echo(count($nd)>1?"<select name=\'function[$D]\'>".optionlist($nd,$s===null||$xd?$s:"")."</select>".on_help("getTarget(event).value.replace(/^SQL\$/, \'\')",1).script("qsl(\'select\').onchange = functionChange;",""):h(reset($nd))).\'<td>\';$Ud=$b->editInput($_GET["edit"],$o,$Ha,$Y);if($Ud!="")echo$Ud;elseif(preg_match(\'~bool~\',$o["type"]))echo"<input type=\'hidden\'$Ha value=\'0\'>"."<input type=\'checkbox\'".(preg_match(\'~^(1|t|true|y|yes|on)$~i\',$Y)?" checked=\'checked\'":"")."$Ha value=\'1\'>";elseif($o["type"]=="set"){preg_match_all("~\'((?:[^\']|\'\')*)\'~",$o["length"],$Ce);foreach($Ce[1]as$t=>$X){$X=stripcslashes(str_replace("\'\'","\'",$X));$cb=(is_int($Y)?($Y>>$t)&1:in_array($X,explode(",",$Y),true));echo" <label><input type=\'checkbox\' name=\'fields[$D][$t]\' value=\'".(1<<$t)."\'".($cb?\' checked\':\'\').">".h($b->editVal($X,$o)).\'</label>\';}}elseif(preg_match(\'~blob|bytea|raw|file~\',$o["type"])&&ini_bool("file_uploads"))echo"<input type=\'file\' name=\'fields-$D\'>";elseif(($bi=preg_match(\'~text|lob|memo~i\',$o["type"]))||preg_match("~\n~",$Y)){if($bi&&$y!="sqlite")$Ha.=" cols=\'50\' rows=\'12\'";else{$K=min(12,substr_count($Y,"\n")+1);$Ha.=" cols=\'30\' rows=\'$K\'".($K==1?" style=\'height: 1.2em;\'":"");}echo"<textarea$Ha>".h($Y).\'</textarea>\';}elseif($s=="json"||preg_match(\'~^jsonb?$~\',$o["type"]))echo"<textarea$Ha cols=\'50\' rows=\'12\' class=\'jush-js\'>".h($Y).\'</textarea>\';else{$Je=(!preg_match(\'~int~\',$o["type"])&&preg_match(\'~^(\d+)(,(\d+))?$~\',$o["length"],$C)?((preg_match("~binary~",$o["type"])?2:1)*$C[1]+($C[3]?1:0)+($C[2]&&!$o["unsigned"]?1:0)):($U[$o["type"]]?$U[$o["type"]]+($o["unsigned"]?0:1):0));if($y==\'sql\'&&min_version(5.6)&&preg_match(\'~time~\',$o["type"]))$Je+=7;echo"<input".((!$xd||$s==="")&&preg_match(\'~(?<!o)int(?!er)~\',$o["type"])&&!preg_match(\'~\[\]~\',$o["full_type"])?" type=\'number\'":"")." value=\'".h($Y)."\'".($Je?" data-maxlength=\'$Je\'":"").(preg_match(\'~char|binary~\',$o["type"])&&$Je>20?" size=\'40\'":"")."$Ha>";}echo$b->editHint($_GET["edit"],$o,$Y);$Zc=0;foreach($nd
as$z=>$X){if($z===""||!$X)break;$Zc++;}if($Zc)echo
script("mixin(qsl(\'td\'), {onchange: partial(skipOriginal, $Zc), oninput: function () { this.onchange(); }});");}}function
process_input($o){global$b,$m;$v=bracket_escape($o["field"]);$s=$_POST["function"][$v];$Y=$_POST["fields"][$v];if($o["type"]=="enum"){if($Y==-1)return
false;if($Y=="")return"NULL";return+$Y;}if($o["auto_increment"]&&$Y=="")return
null;if($s=="orig")return(preg_match(\'~^CURRENT_TIMESTAMP~i\',$o["on_update"])?idf_escape($o["field"]):false);if($s=="NULL")return"NULL";if($o["type"]=="set")return
array_sum((array)$Y);if($s=="json"){$s="";$Y=json_decode($Y,true);if(!is_array($Y))return
false;return$Y;}if(preg_match(\'~blob|bytea|raw|file~\',$o["type"])&&ini_bool("file_uploads")){$Xc=get_file("fields-$v");if(!is_string($Xc))return
false;return$m->quoteBinary($Xc);}return$b->processInput($o,$Y,$s);}function
fields_from_edit(){global$m;$I=array();foreach((array)$_POST["field_keys"]as$z=>$X){if($X!=""){$X=bracket_escape($X);$_POST["function"][$X]=$_POST["field_funs"][$z];$_POST["fields"][$X]=$_POST["field_vals"][$z];}}foreach((array)$_POST["fields"]as$z=>$X){$D=bracket_escape($z,1);$I[$D]=array("field"=>$D,"privileges"=>array("insert"=>1,"update"=>1),"null"=>1,"auto_increment"=>($z==$m->primary),);}return$I;}function
search_tables(){global$b,$g;$_GET["where"][0]["val"]=$_POST["query"];$gh="<ul>\n";foreach(table_status(\'\',true)as$Q=>$R){$D=$b->tableName($R);if(isset($R["Engine"])&&$D!=""&&(!$_POST["tables"]||in_array($Q,$_POST["tables"]))){$H=$g->query("SELECT".limit("1 FROM ".table($Q)," WHERE ".implode(" AND ",$b->selectSearchProcess(fields($Q),array())),1));if(!$H||$H->fetch_row()){$mg="<a href=\'".h(ME."select=".urlencode($Q)."&where[0][op]=".urlencode($_GET["where"][0]["op"])."&where[0][val]=".urlencode($_GET["where"][0]["val"]))."\'>$D</a>";echo"$gh<li>".($H?$mg:"<p class=\'error\'>$mg: ".error())."\n";$gh="";}}}echo($gh?"<p class=\'message\'>".\'No tables.\':"</ul>")."\n";}function
dump_headers($Fd,$Se=false){global$b;$I=$b->dumpHeaders($Fd,$Se);$Jf=$_POST["output"];if($Jf!="text")header("Content-Disposition: attachment; filename=".$b->dumpFilename($Fd).".$I".($Jf!="file"&&preg_match(\'~^[0-9a-z]+$~\',$Jf)?".$Jf":""));session_write_close();ob_flush();flush();return$I;}function
dump_csv($J){foreach($J
as$z=>$X){if(preg_match(\'~["\n,;\t]|^0|\.\d*0$~\',$X)||$X==="")$J[$z]=\'"\'.str_replace(\'"\',\'""\',$X).\'"\';}echo
implode(($_POST["format"]=="csv"?",":($_POST["format"]=="tsv"?"\t":";")),$J)."\r\n";}function
apply_sql_function($s,$e){return($s?($s=="unixepoch"?"DATETIME($e, \'$s\')":($s=="count distinct"?"COUNT(DISTINCT ":strtoupper("$s("))."$e)"):$e);}function
get_temp_dir(){$I=ini_get("upload_tmp_dir");if(!$I){if(function_exists(\'sys_get_temp_dir\'))$I=sys_get_temp_dir();else{$q=@tempnam("","");if(!$q)return
false;$I=dirname($q);unlink($q);}}return$I;}function
file_open_lock($q){$ld=@fopen($q,"r+");if(!$ld){$ld=@fopen($q,"w");if(!$ld)return;chmod($q,0660);}flock($ld,LOCK_EX);return$ld;}function
file_write_unlock($ld,$Pb){rewind($ld);fwrite($ld,$Pb);ftruncate($ld,strlen($Pb));flock($ld,LOCK_UN);fclose($ld);}function
password_file($i){$q=get_temp_dir()."/adminer.key";$I=@file_get_contents($q);if($I||!$i)return$I;$ld=@fopen($q,"w");if($ld){chmod($q,0660);$I=rand_string();fwrite($ld,$I);fclose($ld);}return$I;}function
rand_string(){return
md5(uniqid(mt_rand(),true));}function
select_value($X,$A,$o,$ci){global$b;if(is_array($X)){$I="";foreach($X
as$fe=>$W)$I.="<tr>".($X!=array_values($X)?"<th>".h($fe):"")."<td>".select_value($W,$A,$o,$ci);return"<table cellspacing=\'0\'>$I</table>";}if(!$A)$A=$b->selectLink($X,$o);if($A===null){if(is_mail($X))$A="mailto:$X";if(is_url($X))$A=$X;}$I=$b->editVal($X,$o);if($I!==null){if(!is_utf8($I))$I="\0";elseif($ci!=""&&is_shortable($o))$I=shorten_utf8($I,max(0,+$ci));else$I=h($I);}return$b->selectVal($I,$A,$o,$X);}function
is_mail($uc){$Ga=\'[-a-z0-9!#$%&\\'*+/=?^_`{|}~]\';$hc=\'[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])\';$Zf="$Ga+(\\.$Ga+)*@($hc?\\.)+$hc";return
is_string($uc)&&preg_match("(^$Zf(,\\s*$Zf)*\$)i",$uc);}function
is_url($P){$hc=\'[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])\';return
preg_match("~^(https?)://($hc?\\.)+$hc(:\\d+)?(/.*)?(\\?.*)?(#.*)?\$~i",$P);}function
is_shortable($o){return
preg_match(\'~char|text|json|lob|geometry|point|linestring|polygon|string|bytea~\',$o["type"]);}function
count_rows($Q,$Z,$ae,$qd){global$y;$G=" FROM ".table($Q).($Z?" WHERE ".implode(" AND ",$Z):"");return($ae&&($y=="sql"||count($qd)==1)?"SELECT COUNT(DISTINCT ".implode(", ",$qd).")$G":"SELECT COUNT(*)".($ae?" FROM (SELECT 1$G GROUP BY ".implode(", ",$qd).") x":$G));}function
slow_query($G){global$b,$ni,$m;$l=$b->database();$ei=$b->queryTimeout();$sh=$m->slowQuery($G,$ei);if(!$sh&&support("kill")&&is_object($h=connect())&&($l==""||$h->select_db($l))){$ie=$h->result(connection_id());echo\'<script\',nonce(),\'>
var timeout = setTimeout(function () {
	ajax(\\'\',js_escape(ME),\'script=kill\\', function () {
	}, \\'kill=\',$ie,\'&token=\',$ni,\'\\');
}, \',1000*$ei,\');
</script>
\';}else$h=null;ob_flush();flush();$I=@get_key_vals(($sh?$sh:$G),$h,false);if($h){echo
script("clearTimeout(timeout);");ob_flush();flush();}return$I;}function
get_token(){$yg=rand(1,1e6);return($yg^$_SESSION["token"]).":$yg";}function
verify_token(){list($ni,$yg)=explode(":",$_POST["token"]);return($yg^$_SESSION["token"])==$ni;}function
lzw_decompress($Qa){$ec=256;$Ra=8;$ib=array();$Mg=0;$Ng=0;for($t=0;$t<strlen($Qa);$t++){$Mg=($Mg<<8)+ord($Qa[$t]);$Ng+=8;if($Ng>=$Ra){$Ng-=$Ra;$ib[]=$Mg>>$Ng;$Mg&=(1<<$Ng)-1;$ec++;if($ec>>$Ra)$Ra++;}}$dc=range("\0","\xFF");$I="";foreach($ib
as$t=>$hb){$tc=$dc[$hb];if(!isset($tc))$tc=$kj.$kj[0];$I.=$tc;if($t)$dc[]=$kj.$tc[0];$kj=$tc;}return$I;}function
on_help($pb,$ph=0){return
script("mixin(qsl(\'select, input\'), {onmouseover: function (event) { helpMouseover.call(this, event, $pb, $ph) }, onmouseout: helpMouseout});","");}function
edit_form($Q,$p,$J,$Ii){global$b,$y,$ni,$n;$Oh=$b->tableName(table_status1($Q,true));page_header(($Ii?\'Edit\':\'Insert\'),$n,array("select"=>array($Q,$Oh)),$Oh);$b->editRowPrint($Q,$p,$J,$Ii);if($J===false)echo"<p class=\'error\'>".\'No rows.\'."\n";echo\'<form action="" method="post" enctype="multipart/form-data" id="form">
\';if(!$p)echo"<p class=\'error\'>".\'You have no privileges to update this table.\'."\n";else{echo"<table cellspacing=\'0\' class=\'layout\'>".script("qsl(\'table\').onkeydown = editingKeydown;");foreach($p
as$D=>$o){echo"<tr><th>".$b->fieldName($o);$Wb=$_GET["set"][bracket_escape($D)];if($Wb===null){$Wb=$o["default"];if($o["type"]=="bit"&&preg_match("~^b\'([01]*)\'\$~",$Wb,$Gg))$Wb=$Gg[1];}$Y=($J!==null?($J[$D]!=""&&$y=="sql"&&preg_match("~enum|set~",$o["type"])?(is_array($J[$D])?array_sum($J[$D]):+$J[$D]):(is_bool($J[$D])?+$J[$D]:$J[$D])):(!$Ii&&$o["auto_increment"]?"":(isset($_GET["select"])?false:$Wb)));if(!$_POST["save"]&&is_string($Y))$Y=$b->editVal($Y,$o);$s=($_POST["save"]?(string)$_POST["function"][$D]:($Ii&&preg_match(\'~^CURRENT_TIMESTAMP~i\',$o["on_update"])?"now":($Y===false?null:($Y!==null?\'\':\'NULL\'))));if(!$_POST&&!$Ii&&$Y==$o["default"]&&preg_match(\'~^[\w.]+\(~\',$Y))$s="SQL";if(preg_match("~time~",$o["type"])&&preg_match(\'~^CURRENT_TIMESTAMP~i\',$Y)){$Y="";$s="now";}input($o,$Y,$s);echo"\n";}if(!support("table"))echo"<tr>"."<th><input name=\'field_keys[]\'>".script("qsl(\'input\').oninput = fieldChange;")."<td class=\'function\'>".html_select("field_funs[]",$b->editFunctions(array("null"=>isset($_GET["select"]))))."<td><input name=\'field_vals[]\'>"."\n";echo"</table>\n";}echo"<p>\n";if($p){echo"<input type=\'submit\' value=\'".\'Save\'."\'>\n";if(!isset($_GET["select"])){echo"<input type=\'submit\' name=\'insert\' value=\'".($Ii?\'Save and continue edit\':\'Save and insert next\')."\' title=\'Ctrl+Shift+Enter\'>\n",($Ii?script("qsl(\'input\').onclick = function () { return !ajaxForm(this.form, \'".\'Saving\'."\', this); };"):"");}}echo($Ii?"<input type=\'submit\' name=\'delete\' value=\'".\'Delete\'."\'>".confirm()."\n":($_POST||!$p?"":script("focus(qsa(\'td\', qs(\'#form\'))[1].firstChild);")));if(isset($_GET["select"]))hidden_fields(array("check"=>(array)$_POST["check"],"clone"=>$_POST["clone"],"all"=>$_POST["all"]));echo\'<input type="hidden" name="referer" value="\',h(isset($_POST["referer"])?$_POST["referer"]:$_SERVER["HTTP_REFERER"]),\'">
<input type="hidden" name="save" value="1">
<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}if(isset($_GET["file"])){if($_SERVER["HTTP_IF_MODIFIED_SINCE"]){header("HTTP/1.1 304 Not Modified");exit;}header("Expires: ".gmdate("D, d M Y H:i:s",time()+365*24*60*60)." GMT");header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");header("Cache-Control: immutable");if($_GET["file"]=="favicon.ico"){header("Content-Type: image/x-icon");echo
lzw_decompress("\0\0\0` \0\0\n @\0C\"\0`EQ?tvM\'Jdd\\b0\0\"fs5AXPaJ08#RTz`#.cX?-\0Im?.M\0(/(%\0");}elseif($_GET["file"]=="default.css"){header("Content-Type: text/css; charset=utf-8");echo
lzw_decompress("\n1l7B14vb0fsn2Bn:#(b.\rDc)a7Eli1s-4f	i7t4yZf4iATVVf:,:1Qb2`#>:7G1sLXD*bv<#e@:4!fot:<o\ni\',a_:iBv|N4.5NfivphlO= OFQk\$id2Tp6-Z6h:a,2#8#6nJht4O42ok*r@p@!?6r[L:2Bj!HbP=!1V\"0\nSD7DC!!G +=tC.C:+=%c1MR/E42`8([W=ySb=-BS+@pL4Ydq63Ack[&>Zpkm]u-c:Ntp8=#[.~myPP|IQ9v[Q\nr\'g+T2Vz48(	Ey*#j2]R)[NR\$<>:>\$;>\rHT\nwN w<Gw\\Y_Rt^>\r}S\rz4=\nL%J\",Z8i0u?s3#:E]xs^8K^*0w~:iv2w^77cu+U%{P*4LX./!1Cqx!HFdL`65f=Hl V1\0a2;6_\0&ZSd)KE\'n[X\0ZF[P@!Y,`\"0Ee9yF>9bF5:\0}(\$37H MA6R{Mq7GCCm2(Ct>[-t/&C]etG4@r><Sq/QhmL#K|6fKP\r%tV=\"SH\$} )w,W\0Fu@b9\rr2#DXyOI>n%\'_t\rz\\1hl]Q5Mp6kqh\$H~|!*4`SS tPP\\g7\n-:plB7c(wO0\\:wp4{TjO6Hrq\n%%y\']\$aZ.fcq*-FWkzjlg:\$\"N\r#dsc\"j\rPh1/DA)[knp76YR{MP@\n-a6[zJH,dlBho+#Dr^^eE aPJGzt2XVB_%K=EbkU(.!8I.@Kxn:P32mH		C*:vT\nR0u]P/JQd{L:Y2bT 34cV=L4r!BY6MeLio9< GMhm^UNTr5HiM/nT[-<__3/Xr(<uGNX20\r\$^:\'9O;kfN\'ab,V1HI!%6@\$EG1(mUr`iN+)0lf0[UV-:I^\$sb\reugh~9bf+0 hXr!\$e,w+3_Ak\nkrcuWdY\\={.gp8t\rRZvJ:>Y|+@Ct\rjt6%?>/9F`v~KRWzlmwL9Y*qxzSe~Dxi72O_{53t_z3d)C\$?KP%T&&\0PNA^~p \r\$b*+D6J\$(olh&KBS>;zxoz>oZ\n[v2OxV0f2Blbk6ZkhXcd0*KTH=p0lV\rnm)((:#E:CC\rG\r0i:`Z1Q\n:\r\0q:`-M#}1;q#|ShlD\0fiDpL``0y1\r=MQ\\%oq\01211 bi:\r/ `)0@I1NCOZ1q1 ,\rdIvj1 tB0:01A2V0%fi3!&QRc%q&w%\rV#Qw`% m*ry&i+r{*(rg(#(2()R@i- 1\"\0R.e.r,ry(2Cb!B3%,R1&tba\rL-3\0Bp194O\'R3*=\$[^iI;/3i5&}17# 8\"789*23!!1\\\08rk9;S23*:q]5S<#383#e=>~9Sr)T*a@bes:-*;,3!iL#1 +n *@3i71_FS;3F\rA3>x: \r0@-/w7SJ3 .F\$OB%4+t\'gLq\rJtJM2\r7T@)d2P>Fi\nr\0bk(DKQ1\"2tP\r,\$KCt5#)P#Pi.U2C~\"");}elseif($_GET["file"]=="functions.js"){header("Content-Type: text/javascript; charset=utf-8");echo
lzw_decompress("f:gCI\n83)781x:\nOg#)r7\n\"`|2gSiH)NS\r\"0@)`(\$s6O!V/=\' T4=iS6IOG#XVCsZ1.hp8,[H~Cz2lc3sIb4\nF8TIU*fzr0EyfY.:I(c!_l^^(N{S)rqYl33\n+GyixV3wuh^rac\r(.Ch<\r)`743\'m5\nP:2Pq C}38B0hRr(0b\\0Hr44B!p\$rZZ2.(\\5|\nC(\"P.NRT>HN8HP\\7Jp~2%OC1.C8H*jS(/6KU<2pOI`dOH5-4pX25-z7\"(P\\32:]U!]<Ail\r\0v#J8wm<%m;p#`XDiZN09`wJD29t*yNiIh\\9:xyl*Y8W?3!\"6n[\r*\$nzx9\r|*3p:(p\\;mz98Nj2\rHH&(z7ik cet2:SH/)x@tri98yV+^WkZYl4\\E{7\0pDi-T0l%=9(5\n\nn,4\0a}.Rs\02B\\b1S\0003,XPHJspdK CA!2*W2\$+f^\n1zE Iv\\2.*AE(db9Dh&?HsQ2x~nJT2&eRGQTwP\\)6sh\\3\0R	\'\r+*;RH.![\'~%t< pK#!lLe,&\$	`CX0:Mh	G!&3D<!23?hJe h\rmNiNHl7vWI.-5ey\rEJ\ni*\$@RU0,\$UEu)@(tSJkp!~d`>\n;#\rp9j]&Nc(rTQUS\08n`ybLO5,>xf+\"I{kM[\r%[	ea1! F@b)R720\nWLtd+0wgl0n@iM\nAM5n\$ENl%1 AkriFBol,muNx-_C( fl\r1p[9x(iBzQl8C	XU TbI`p+V\0;CbX+s]H[kxG*]awn!6mSIK~/7eeNS/;dA>}l~ %^fpDEat\nx=k*dTj2j\n ,e=M84aj@Tsnf\n6\rd0Y\'%~	<AHG8\$z{u2*a>(wK.bP{oz#28=8>A,e+Cx*-b=m,alzk\$W,mJi+0[.RsKXZL2`(CvZ\$,D?HNxX)M\$,*\n\$<qh!SxsA!:K}RA2kXp\n<l3VV}g&Y!+;<YYE3rCo5kktU)[}ul:D+ _oh1400bKlG#|UdIK7^@O\0HHi6\r\\cg\02B*e\n	zr!nWz& {H\'\$X w@8DGr*H\'p#\nd,,;g~\0#E\rI`\'%E.]`%&m\r%4Sv#\nfH\$%-#qBQ-c2&] qh\rl]sh7n#-jEFrl&dzF6\"|s@z)0rp\0X\0|DL<!o*D{.B<E0nB( |\r\n^ h!r\$(^~/pqBO,\\#RR%dHj` V bSdiEohr<i/k\$-\$o+lO&evijMPA\'u\'( M(h/+WDSo.n.n((\"h&p//1DjE&,\'l\$/.,dWbbO3BsH:J`!.,F7(1ls qX\r~R`Y*:RrJ%L+n\"\rH!qb2Li%Wj#9ObE.I:67\06+%.a7E8VS?(DGB%;/<\r >M@HDsZ[tHEnx(Rx@GkjW>#T/8c8Q0_IIGII!YEdE^tdth`DV!C8\rb3!3@33N}ZB3	330M(>}\\tffI\r337 X\"td,\nbtNO`P;\$\nZ5U5WU^hotPM/5K4EjKQ&53GXXx)<5D\rV\nr5b\\J\">1S\r[-Du\r)00Yk{\n#\r^|uU_nU4U~Yt\rI@R 3:uePMS0TwWXDKOU;U\nOYYQ,M[\0_DWJ*\rg(]\r\"ZC6u+YY60q(8}3AX3Th9jjfMtPJbqMP5>Yk%&\\1dE4 Yn\$<U]1mb^\"NVppeMW\\)\n \nf7\n2r8=Ek7tV7PLa6v@\'6ij&>;`a	\0p(J)\\nm\02eqJPtfj\"[\0X,<\\+md~s%omn),\r48\rmEH]HWM0D~KE}|f^\r>-z]2sxDd[stS\0Qf-K`twT9Z	\nB9 Nb<BI5ooJpJNd\rh2\"xHC:9Yn16zr+z\\m T @Y2lQ<2O+%.h0AZ2R1/hH\rXaNB& M@[x8&LVv*jGH\\	&s\0Q\\\"b	\rBsw	BN`7Co(\n19*E SU0U t\'|m?h[\$.#5	 	pyB@R]@|{P\0x/ w%EsBdCU~OP@X]Z31{eLY\\(*R`	\nQCF*pX|`N\$[@UZ`Zd\"\\\")I:toD\0[-g*`hu%,I7Hm6}N\$MUYf&1e]pzImG/ w !\\#54IdEhqkx|kqDbz?>:[LZX:jw5	Y0 \$\0CdSg{@\n`	C M# t}xN{)CFKZj\0PFYBpFk0<>D<JEg\r.28U@*5fkJD4TDU76/@K+J@=WIOD85MN\$R\05\r_EINly\\qUQ\n@pP7N\rR{*qm\$\0Rq+U@BOf*CMC`_ NT5C \\We&_X_hB3%FW|G\'[V#^\rGRPFgYi z\n+^/\\6bdmh@qAh),JWcmem]ekZb0Y]ymfeB;OwapDW{\0-2/bNsRah&qt\n\"iRmhzeFS7PP:BsmY d7}3?*tlT}~=c	3;TL5*	~#Asx-7f5`#\"NbG@e[s-M6qq he5\0*bISF9}p-`{kP0T<Z90<\r;!g\r\nK\n\0*\nb7(_@,e2\r]K+\0p C\\,0^M@;X\r?\$\rj+/BPJ{\"a6|\n\0\\5	156 .[U\0d8Y:!=X.uC!SopB7Rh\\hE=y:< :u280siTsB@\$ @u	Q.T0M\\/d+\n=dA)\r@@h38.eZa|.7Ykc\'D#Y@Xq=M44B AMdU\"Hw4(>8C?e_`X:A9pGGy6FXrl1B9RzhB{\0^-0%D5F\"\"i`nAf \"tDZ\"_V\$!/DF,25jTy\0Nx\rYl#Eq\nB2\n64!/\nQ*;)bRZ0\0CDo48e\nS%\\PIk(0u/G\\}4FpG_G?)got[v\0?b;`(NS)\nx=+@7j0,1z>0GcLVX%Q+oF>Q-clwz5G@(hcHr?Nb@lx3U`rwUt8=l#l8E\"O6\n1e`\\hKfV/PaYKO x	Ojr7F;B>V\r|\'Jz#PBY5\0NC^\n~LrR[RgeZ\0x^i<Q/)%@fBHf{%P\"\"@)DE(iM2S*yS\"e1\n4`>Q*ynTu~%+WXKQ[lPYy#DD<FL@6\']\rF`!%\n0c%c8WrpG.TDoUL2*|\$:Xt5XYIp# ^\n:#D@1\r*K7@D\0CCxBhEnK,1\"*y[#!l_/x\05Z4\0005Jh\"2%Yaa1SO4%niPq_6~I\\ddD3g^@^6_HD.ksL@nI~\rb@Nt\0s]:uXb@^1\02?T6dLNe+\0:lz6q=xN6O,%@s0\n\\)L<C|PbA>I\"	^K4gIXi@PjE&/1@f	Nx0coa,C\'y#6F@H0{z3t|cXMJ.*B)ZDQ\0T-vXa*,*<b#xdPKG8 yK	\\#=)gh&8])C\n9zW\\gM 7!,9\$T\",%.F! A--g\0002R>KE\'U_I9j(Q@@4/7\'J.RT\0]KSDAp5\rH0!e	d@R9S;7HBbxJ_viU`@SAMXGXiU*\':VWJvDN\'\$zh\$d_yZ]Y8]P*he;pe\$kw*7NDTx_Gi&Ptb\\EH\$iE\"cr0l?>C(W@322aI{B`iGo^6E\rGMp1iIX\00032Kzl&\'IL\\\"7>j(>jFG_& 10IA31=h q\0F_JVq	(/dOC_sm<gx\0\"\n@EkH\0J8(km[S4\nY40+L\n#Bb%RR:<\$!r;	%|(|H\0]c=0Z\"\"=X)fN6V}F=[hu-\0tbW~QiJL5q#kbWnQT!encS[+E<-a]Yb\n\nJ~|J8 Lpo NJ.S2c9jy-`a\0*@\0+mg61Me\0Q _}!IGLf)Xo,Shx\0000\"h+LM Z	j\0/\$>u*Z9Ze+JtzRKDyq0C-fmBI|HBsQlX.|c[ZhZlx@\'mlKrQ26]nd[d\"GJ9uBoZan@nlW|*gX\nn2F|x`DkuPP!Q\rr`W/	1[-o,71bUsN7Gq.\\Q\"CCT\"*?uts]Pz[[YFFD3\"]u)wz:#Iiwp{o0n;\\x\0qm&~79[HqdLO2v|Bt\\HdH\" N\n\0GgFF}\"&QEK{}\ryrt7Nu[Agh;S.|y[_b!+RZX@0NP%jDz	[U\"{e8>EL4J07 d Q^`0`]c<[email protected]\nehaXmSjBQ\"\rK3=>AX[,,\"\'<%a.\$\0%\0sVpM\$@j>}Ve\$@#(3:`UYu@V#EG/XD\$havxS\"]k18a9dJROs`EJUom{lB8(\n}eib, ;NQ\\I5yR\$!>\\guj*?nMh\r%U(dNd#}pA:-\\A*42I\r 0h@\\83rq]d8\"Q:cy4	da6>UA:@2\$eh2FN+\r(Ard*\0[#cj>!(SLeTM	9\0W:BD3J_@srue +\'B}\"B\"z2rlxF[LEa9cdb^,UC=/2/\$C#8}D6`^;6B0U7_=	,1j1V[.	H9(1LzC	\$.AfhDrY	He~or19\\P)\"Q,eLw0\0;wXqo~>9>}dc\0gfq&9-J#3^4m/\0\0006n8>.cph_A@[7|9\$pMh>5KE=hAt^V	\"	cB;iQt@,\n)s`;4Iy-0yeUBv3HPG5s|\r\$01l3(*oF~PK.,\'J/td:n\njYz(wZ#Z	Io@1\$=VWz	nBaAq@Ip	@5lH{UoXf\\z.,-\\^y n^BqzX\$*J72D4.!M0DFGLmc*mcI5^tjl7SQ.ihLB6h&Jl\\Wecf%kj pR=i@.(2klHUW\"ojp!S5pL\'`\0O *Q3XlJ\08\n\r*ar`<&XBh8!x&Bht\$]ncL[d<`\0awO%;BCQ\rpPQZZAu=N&ia\nmK6I}n	t\nd)bp\"g\'07u&@78XNx\$BZB/MgBi\\mmI;5=#&4PqA\\,qc\ncBw\0BgjD@;=0mk\r`\'5k-{\0_Mu2q>)9W\nd+G\rn4O:581:?(yGgWK\r7m5.eHhJAk#L..\\=U:>7W+^yDbGOZ4r(|xPr,y8qaO2kn#p2.cUcj\$8~7ZR:89w(aL%-,#f%8|c%XW\n}6H#&J,\'zMM /y6YQdd:Ep2gg/,\'8^;UWN{OCziKXNdGRCJYiy#>zSMUcROR0)0]:=t\'\$srF67	=\$B!qs	1\"v%Il<b!6(Cd-^<H`~2KzKy,qA*\0}Cpb\\S5\'(|MW5;\$5T|;kt@;9);i.;_F=DM`H\0	 N @%wdPb\$H|k[dCI!:l,<utNeW^w\'6Dfu ihIZ:~rz3+uoCs2buaXwWK	H27>WyMJrpTL|`f:Atd|i[wjW 7aueA5Q\' \03\$\rk)a;H=~IGI<\"I1\'Gcm\0P\nw#>xB\"Em|2\$}<3PYXgod<qE\"`4g8r]\n:qVbTm9K&m7)@Qz=H\n}Oi}\r.vpJW&u550	5PI\nl\0O5*=	P-H\0f%t*S:[email protected](Z\$]onzA!t85<WR2[8n5\$IZ]\'}ET\n.&7V@_Do&J64ij\$ELut+I~SSZTXPYz\"\$V_]M(7t_S/tmH:\05- _Z\'#1P,}(~\0!`-P\ney (`9O!;5\n\${UA7![ YF>8&!CLH(\0\'2d\r%;k4_O>5@D\0VA6\' AYSr4+h@bOM\0r@\rJm0\08O;kA(6|	`8 \0&EV\0VwkNKxdpsALAXku\0t .>(NK\'fldA?++N~kPR\0xBK]bU\\d\0S@Qb\0\0b\0_\\@\nNOAPfAj M4<9+`S w3T7XT!\0ePAIb 1!\04\' @!8\0/!:K,CASXfeM.::t._d81v`B\"!.^*N.^\n&\r(.O0@Pnj#&rH< !3(i @Aa{ #S6F@Y[O(./B)L02B-qpJ<.\0\n\0/@8C4P\r	P)F\$q.]\"B#	#\\84\$s:.(*Oi>|#T\'`Bua/CTKaX8`p\0`\0");}elseif($_GET["file"]=="jush.js"){header("Content-Type: text/javascript; charset=utf-8");echo
lzw_decompress("v0F==FS	_6Mr:ECIo:CXc\rJ(:=Ea28x?\'iSANNxsNBVl0S	Ul(D|P>EyHch-3Eb bpEp9.~\n?Kbiw|`d.x8EN!23\rYy6GFmY8o7\n\r0\0Dbc!Q7d8~N)E`Ns`S)O/<x9o3n2!r:;+9C\n<`b\\?`4\r#`<BeB#N \r.D`j4par>8\$c1cc{n7ANRLi\r1!(j+62X8+.\r!xh\'6S\0RO\n1(W07q:NE:68n+5_(s\r/m6P@EQ9\nV-\".:J8weq|X]Y XezW 7Z1hQfuj4Z{p\\AUJ<k@@}&L7UwuYh2@u P7Ah3XEZ]l@Mplv) HWy>Y-Y/hC[*F#~!`\r#0PCf\\^%B<\\f&/OL\\jFjZ1\\:>NXaFAfh{\"s\n64?8^p\"\\e(PNq[gr&}PhW*r_sPh\nom#.\0@pdW \$QTl0 HdH))PHgUBe\rt:\0)\"t,[(DO\nR8!lAV4hSq<@}gK]]=90\'wA<a~WD|A2XU2y=p)\0P	sn3rf\0FvGI@%+_I`\r.NKI[SJaUfSzM%\"Q|9Bcaq\08#<a:z1Uf>Zle5#U@iUGn%s;gxLpP?BQ\\bQ=7:Q\r:t:y( \nd)\nX;CaA\rPGH!@9\n\nAl~HV\nsbBr3\rP%\r}b/\$5PC\"wB_UgAt^QUjBvh4)+)<j^<L4U*Bg*n-	9O\$zyM3\\9.oE(i7	t-&\nj!\ryyD1g]yR7\"~)TZ0E9MYZtXe!f@{yl	8;R{8e+UL\'F18PE5-	_!7[2J;HR8p@0,psK0\r4\$sJ4DZI\'\$cLRMpY&iz3GzJ%P-[/xT{pzCv:V\'\\KJaM&\"eo^Q+h^iT1ORl,5[\$)jLU`S`Z^|r=nTU	1Hykt+\0vD\r	<jGt*3%kYT*|\"ClhE(\r8r{0D_.6;rBjO\'>\$`^69#4Xmh8:c0;/;\\\'(t\'+^]Nv#,vOi><SA\\\\!3*tl`u\0p\'7P9bs{v{7\"{ra(^Eg/U9g/`\nL\n)(Aa\" 	&P@O\n0(M&FJ\'! 0<H*|*OZm*n/b/.o\0dn)i:RP2m\0/vOXF\"000bgj\$n0}	@=M0nP/pot.g\0)o\n0\rFbio}\n	NQ\'xFaJL\r\r0\'d	oep4Dq(~ \rEprQVFHlKjN&j!H`_bh\r1n!z\\\r`V_k\"\\\'V\0`ACV`\r%\rk@NB !\n\0Z6\$d,%%laH\n#S\$!\$@2I\$r{!J2HZM\\hb,\'||cj~gr`\$+A1E <L\$Y%-FDdL\n@bVf;2_(L<%@,\"dNer\0`Z4\'ld9-#`j6vNf@&B\$(Z&278I P\rk\\2`\rdLb@E2`P( B\'0&{:dB1^*\r\0c<K|5sZ`O35=@5C>@W*	=\0N<g6s67Sm7u?	{<&L.3~D\rx),rin/O\0o{0k]3>m1\0I@9T34+@eGFMC\rE3Etm!#1D @H(n <g,V`R]@3Cr7s~GIi@\0v5\rV\'P\r\$<b%(DdPWbfO x\0} lb&vj4LS5&dsF M4\".HM01uL\"/J`{xYu*\"U.I53Q3QJg5s&juGQMTmGBtl-c*\rZ7*hs/RUVBNiLk.trYi-S3\\TOM^G>ZQj\"iMsSS\$Ib	fu:SB|iY8	v#D4`.^HM_uUz`ZJ	e@Cea\"mb6JRT?XMZpQvjjV{C\r7T 5{P]\r?QAA2V)Ji-N99fl Jm;u@<FejI<+CW@Zl1<2iF7`KG~L&+NYtWHw	ls\'gq+Lzbiz.zW zdW(y)vE4,\0\"d\$B{!)1U5bp#}m=@w	P\0\r`O|	YJEOu_\n`F`}M.#1f*  zuc xf8kZRs2-Z2+(sUcDX!u&-vP\0\'LX Lo	>\r@P\rxFE%=5N?7Nw`hX98 qzd%6t/Ll,KaN~,\'M\rf9w!xx[G8;xA-I&5\$D\$%x]&o-39Lzy6;uzZ 8_x\0D?X7yOY.#38eQ=*Gwm Y]YOYF)z#\$e)/z?z;^FZg`^e#?eM3u0>\"?@Xv\"*\r6v~OV~&^g\'f6:-Z~O6;zx;&!+{9Md \r,9W:\r@+]-[g[s[iiqyx+|7{7|w}EWWk|Jxmq xwyj#e( {yM@Y(g-J(@;y#SYp@%so9;+	;ZN kVu[x|qON?	`u6||X|Ox!:Y]c\rh9n8\'\rS.1USX+z]?C\r\\\$`)U||x\'<e|LMy(lO]{FD}yu,XL\\x;UWtv\\OxWJ9R5WiMi[Kf(\0d\rM7;6KI\rxv\rV3.R|^2^0\$Q[D>1\'^X~t1\"6L+AeI~@pM>m<SK-HT76SMfg=GPP\r>2Sb\$C[()%Q#G`uGwp\rkKezhjzi(rOT=7~4\"ef~dVZU-b\'VJZ7)T8.<RM\$\'by\n5_wU`eiJbguS?`+ Mg7`\0_-_?F\0X[J8&~D#{P4\"\0@\0F ?*^w:u3xK^wy[(#/zr_g?\0?1wMR&M?StT]G:I)B v1<t6:W{x:=:!!\0xq&0}z\"]ozjw6JP[\\ }`S\0qHM/7BP]FT8S5/I\r\n O0aQ\n>2j;=dA=pVL)X\n`e\$TQJk7*O .\r\$#pWT>!v|}.%,;f*?\0pD! #:MRcB/06	7@\0VvghZ\nR\"@F	+EI\n8&2bXP=h[+\r:F\0:*\r}#!\"c;h/0Ej]Z\0@iW_h;VRbP%!b]SBUl	r\r-\0\"Q=Ih	 FLFxR@\0*j5k\00\'	@ElOHCx@\"G41`P(G91\0\"f:Q@`\'>7dR41>rIHGt\nRH	b71fh)D8B`(V<Q8c? 2E4j\09\r@\0\'FD,!H=*E(?&xd_HE6~uG\0RXZ~P\'U=@l+A\nhIiPGZ`\$P.;E\0} Q%jAW\$!3r1 {%i=IfK!e\$80!h#\\HF|i8tl\$lli*(GL	 \$x.q\"Wzs{8d`&W\0&E15jWbVR-#{\0Xig*7VF3`p@#7	0[[h\\o{T]8l`f@reh\nW2*@\0`K(L\0vT\0c\'L: 0@L1T0bhW|\\-DN\ns3\"`2&\rU+^ReSni0ub	J2sps^n<Fla\0\0mA2`|6	nr\0D7&m-)\\\n=;*bTy7c|o/:tP<Y:K&C\'G/@Q*8v/&W6p.\0u3Bq:(eOPp	\r0(ac>N|	t\n6v_e;y6fgQ;y[S	gOuddHH=Z\r\'qC*)gEO \"!k(\'`\nkhT*s5REa\n#!1\0;Si@(lI v\rnj~63I:h\n.2pl9Bt0\$bp+*tJsJQ8;4P(!.Ppk@)65!(\n+{`=H,\\4\"[C1-luo4[E%\"w] ( Te)KAE={ \n`;?-G5I.%q%EsgFs	KGn4i/,i0ux)73SzgV[hDp\'L<TMjP*o\nH\n4M-WNA/@8mHRptpV=h*0	1;\0uGT6@s\0)6T\\(\"U,C:5iKlE*\"r.@jRJQ/L@SZP)(jjJL*\0\r-Q*Qg9~P@H\n-e\0Qw%^ ET< 2H@e\0 e#;ITl+A+C*Yh/D\\!83AEE/}0tJ|1Qmn%(p!\nU)\rsEX5u%B- w]*E)<+qyV@mFH BN#]YQ1:V#\$<&Xxt@]Gj)-@qL\ncIY?qC\rv(@X\0Ov<R3XQJ99lxCud vTZkl\rJ\\o&?o6Eq\r\'3J6\'Y@6FZ50VTyC`\0VS!&66rDf`JvqzF@Z.\$kXkJ\\\"\"i:E\roX\0>PPmi]\0aV=I6jK3ZQmEb0:32V4N6!l^@hhU>:	E>j0g\\|Sh7y\$,5a7&:[WX4q Jc8!HVD+D:9,DUa!X\$GBt9-+otL}qKx6&%xtR\"RIWA`c}l6~*0vkp68z+qXw*EIN*qPKFO\0,(|k *YF5;<6@QU\"\rbOAXvv)Ho`STpbj1+e Qx8@5\\Q,Nb#YHp1kB8NoX3,#U\'\"eeH#zq^rG[:\rmng5V]-(W0~kh\\Z`lk ojW!.hF[tAweM3!nK_SFj-S[rw0^hf-?X5/IY V7ad 8bqbn\n1YRvT,+!NT2IK`K\"O)\nY4!}K^D@na\$@ \$Aj\\D[=	bHpSOAGho!F@lU`Xn\$\\_`HB]2\"z0i1\\w.fyK) p0XS>1	*,]\r\"<cQ\$tq.	<+t,]L!{gX\$6v %GHEX*0)qnC)I\"`KF@d5Ap{\\pNr\'S(+5+\"U0i!nMbrK6r|a@x|ka9WR4\"?5pkr7Hp5YpWG#rAWD+`=\"}@H\\p)C3!sO:)_F/\r4<A\nn/T3f7P16OYq;aXtS<9nwsx@1xs?3@54o0pR\0yqL&S^:Q>\\4OInZnv33+PL(.x\$CCnAkc:L6rwhnrZ==j6}MGu~3bg4s6sQ#:3g~v3<+<a}=e8\'n)cCz4L=h{iJ^~wgDjL^=6N\\DNE?h:S*>+uhhWE1jxt\'t[wS9T[,jvtA#T9jK-YiQe?4_Wz@JkWYhpuj|z4	im	O5\0>|9gVyu=}gs_Vs{k@r^(wH\'a=iN4_{6te[h-Ul?J0O\0^Hl\0.Zxu\"<	/7 i:\n;!3_0`\0H`2\0H#h[P<gm@~(\0kYv#>\nz\n@Q\n(G\n\'k5n5@_`_l1wpPw\0coEl{7o0Ibnz {8w=|/y3a#xq@ka!\08dmR[wvRGp8v\$Zmtuop`2m|;#xmn~;VE3O\r,~ow[N} clyO;?~^j\"Wz:\'xW.	u(q<gvhWq\\;8)M\\5vx=hib-|bpyDHh\rcey7pxG@D= 1!4Ra\r9!\0\'Y@>iS>oofsO 9.\"Fl20E!QD9dBW4\0y`RoF>Fa00	2<IP\'\\I\0\$\n RaU.s\"1eYZq1|#G!PP\0|HFnp>W:`YP%\na8P>`]4`<r\0z484`mh:HDj+p>*808A:]wz>9\n+:iiPoG01)ZneRgMgsLCr8!3R)00sIJVPpK\n|9e[D0z4o,N8ns#{z3>BS\";e5VD0[\$7z0=8	T 3Q\'RnLy\'\0o,\0:[}(|X>xvqW?tBE1wG;!5|0JI@#uI\\p8!\']l-lSB,]1HN8%%	/;FGSh\\ct2|W\$t<hO+#BaN1{yw2\\Z&)db\',Xxm~H@:d	>=-lKJ\0@r@\"(AZ7h>\\#>\0XrYYxq=:\rlomgbD_TxC0.yR]_ZWIG	M(|@\0SOs {@k}FXSb8=_l\0=g{HyG s_J\$hkFqd4\'>[email protected]\"{K?shRd`:yG\nQow\'hS>LX}eG@9W|@_uZ=,!}\0I@#\"\'Y`\\?p,G_\'G	T#oH\r\"o}?O7|\'=8MQyaH? \0bUd67I O\"-2_0\r?hOt\0\0002~ 4K,oh	Pcz`@\"H; ,=\'S.bSCcR,~X@ \'8Z0&(np<p32(.@R3@^\r+@,\$	EtB,h\r><6]#;C.8P3;@L,+>p(#-f1z,8P:9R)e\0R!\nr{eGA@*nD6N\rR8QK0>PNIQ=r<;&fNGJ;UAAP&`);!s\0pp\rn(@%&	SdYuC,8O#oRv,#|7\"CpB`jX3~R@v9B#@\n0>T-5/= E\nd\"!;p*nZ\08/jX\r>F	Pe>OLO0\0)k[	\'L	1 1\0C1T`Rzp< .>5\0> Bn<\"he>s!H{!\r\r\"|>R1d\"U@D63>o\rvL:K2+0>\0 B{!r*Hy;`8\0d\r02A?+\0\0AwSl\r[6co=0z/J+W[~C0e30HQPDPY}4#YDp)	|@&-/F	T	aH5#H.A>0;.Y	*D2=3	pBnuDw\n!zCQ \0HQ4D*7\0J%puD(O=!>u,71TM+31:\"PRQ?P+11= M\$ZlT7,Nq%E!S2&U*>GDS&ozh8881\\:Z0hT C+#A%D!\0XDA3\0!\\#h9bT!dYj2S\nA+HwD`(AB*+%EX.B#&XeEo\"|r8W2@8Da|NhJ8[Wz{Z\"L\0\08xX@ Eh;af1;nhZ3E0| AtB,~W8^<2/	8+O+%P#\n??eO\\]7(#D(!c)NMFE#DXg)0A\0:rB``  QH>!\rB\0V%ceHFHm2B2I`#D>n\n:L9C0\0x((\nL\"G\n@`[\ni\'\0)y)&(p\0N	\"N:8.\r!\'4|~\"cDlt0c5kQQ+ZGk!Fc4Rx@&>z=\$(?(\n>	Cqt-}G,tGW xqHfb\0\0zT9zwDmn\'ccbH\0z3! HHzIy\",-\0\"<2\'#H`d-#clj`i(_dg*j\r\0> 662kj<Cq9I\r\$CAI\$x\rH78 ZpZrR_U\0l\rIRXi\0<r~xS%^%j@^T33GHz&\$(q\0f&8+\r%2hCxIlb(hSY&B`fxvn.L+/\"=I0d\$47rA(42gJ(D=F(-\'XG29Z=,r`);x\"8;>&\',@2pl:0lI\rrJDhAz22p`O2h8HwtBFg`72{,Kl%C%om+X41\n2p	ZB!=V+H6*\0k%< K\',3rI;8\0Z+E`+lW+Y-tfbQ_-+ 95LjJ.G,\\.\$2J\\-1-c.lfxBqK,d8AKo-3Kr/|/\\r,H!Y10@.&|+J\00P3J-ZQ	\r&\nL*j|#\"A/8)1#7\$\"6\n>\n7L1h9\0BZd#b:\0+A22\'\ntO2l.LHC\02+L\\rKk+.;(D1sds9P4@.AnhJ13K03J\$\02Lk3Q;3n\0\0,sI@u/VA1UM<Le4D2V% Ap\n235A-Tu531+fL~\n	-> M4XLSd*\\@YkSDM5 XfDsUs%	p+K6/8X=K6pH%37lIK0LDu`P\rSO&(;L@N>S28(`JErF	2SEMM\$qE\$/I\$\\ID\"\nw.tS	P#\nW-\0C:jR^S8;d`5aE+(XrM;3;B,*1&2XS)< L9;RSNgIs+K<sLY-Z:A<OO*2vW7+|<T9hy\$<#;v\$O\0 ,Hk-\r;O>7>3@O{.4pO?Tb..~O4S>1SS*4P>3\0W>2><P?4@t\nNAxp%=P@C@R?x\n0NwO?TJC@#	.dMt&=\\4A:L\$N:\rI\'Ar;\r/CBi>L7:9|C\$)z@tl:>C\nBi0G,\0FD%p)o\0\n>`)QZIKG%M\0#\0DQ.H\'\$E\n \$%4ID3o:L\$m 0	B\\(8hDCsDX4TK{x`\n,\nE:p\n\'>o\0tI` -\0D/KP`/H\$\n=>UFP0UG}4B\$?E%TWD} *H0T\0t\"!o\0E7R.tfRFu!D\n\0F-4VQH%40uN\0DQRuE	)I\n&Qm)m #\\D(\$x4WFM&R5H%q[F+IF \nTR3DLoy4TQ/E[<t^F)Q+4QI#IF\'TiX!F*nR>5pKm+sIRE+M\0(R?+HJ\"TD\$	4wQ}Tz\0G8|xR6R	4XR6\n4ymNQNM&RH&2Q/7#{\',|\n	.\0>{o#1D;?UJ9*jFNJ #~%-?CL3@EP{`>Q%O)4R%I@%,\"I<\$TP>\n\0QP5DkOFTY<oQ=T\0x	5D,0?i?x  mE}>|[\0&RLHS9GI1M4VHoT-S)QGF [TQRjN#x]N(U8\nuU\n?5,Tm??@U\nu-R9U/S \nU3IEStQYJu.QFo\$&i	KPC6>5G\0uRu)U\'R0DuIUJ@	:V8*Rf%&\\RMU9RfUAU[TUQSe[\0KeZUaUhmS<,Rs`&Tj@G!\\x^0>\0&pQQ)TUPs@%\0W	`\$(1Q?\$CQp\nOJX#V7Xu;!YBSc+V#MUWHURU-+VmY}\\OKM\$SeToVHT!!<{RZA5R!=3U({@*Ratz\0)QP5HN5+P[9V%\"\nGSL9l\rV[ouUIYR_TYp5O\\q`U[Bu\'Uw\\mRU\\Es5K\\V\\S{AZ%O\$F>5EWVm`Wd]& \$!RZ}]}v5ZUgQ^y` !^=FR^vUKex@+r5#@?=usYNsS!^c5\$.u`\0XE~19JUZ@#1_[4J2\n\$VI4n\0?4aR!U~)&B>tRI0_EkTUS|Uk_8&E(?@J5JUBQT}HVjQx\neVsU=VN4\\xR34GD\":	KQ>[\rY_#!#][j<6X	c#KL}>`\'\05XcU[\0(Wt|tR]p/]H2IQO1SQjZHm)d^SXCY\rtu@Jp%M?UQ\n=Rar:E-G\0\$d]meh*QWtc`AY=S\r	m-=MwH]J\"f\"{#9TeMcNIDU6g2eaLQ&&uTX51Y>SQ#Ij\0WP?ub5FULn)V5R@\$!%oP\'EUP-Bp\nF\$S4tUF|{q0Umjs\$jcaZI5Xj26&>v\n\r)2_kGTJeQ-cZVMz>]acc`tHj6+kM\0>##3l=\'^6\0vZ9Se\"bB>)/T=9\0`P\$\0]/0k-6{k[F\r|SJMQD=/WXVa\'atolXj}C@\"KPom3\0#HVv~{?gx	n|[?U[rhG`3#Gk%L\0I`CD	 \"\0#cN6fz;eeF7/N\r:QG9	\$I]TWGsdWMIfBc!#cnu&(S_wSf&TZ:0CSLN`Yj=>Z!=rV]g	rXl-.U\'uJuJ\0sJ\'W%\\>?BVj4J}I/-rRLS3\0,RgqTf>1\0_\\V8Ztc<^\\llj\0T]CwzIZwNpVWjvY>2	o\$|UWL%{toX3_RJ5~6\"Zl}`kceR=^U1w7edvb=\0f,m)Gp-)9L>| \"@5`:\0,t@xlJb6aA\0AR[A0\$qoAS@<@y\"as.V^^\0H[H@bK)z\r=^zB\0No<t<x\00*RI{^E:{K1E0Y/c\"\04F7\'\n0`UT?MPl4r(	Z|&t\"ILw+m}Wi\r>U__u63y[8T-V}x_~%7{jMo_E~]P\$JCaXG9\00075A#\0.\r_%\n\r#<MxJ|2\0;o^a+FLk;_#M\\pr@OR~zANEYO	(1NR8Cn?O)1ADo\0\r?kJ\",OFa-b6]PS)5xC=@jLL:\"l#Bk@N:>|B9	:N\$S CB:j6JkuK_WI=@Tv\n0^o\\?/&u._\rC+c~Jb6e\0y\0wxh8j%SVH@N\'\\N`n\runKqUB+f>G\r=@Gd\n)FO hfCX|I]3auyUi^9y\no^rt\r8#N	VY;c*%V<#h9r\rxcv(\ra(xja`g0VQx(gl{gh`sW<Kj\';)Gnq\$p+_d^& Dx!bv!EjPV\'(=b\r\"bL\0bt\n>J1;4^sQp`fr`7xE<l	8s\'PTz_T[>:`1.;7@[>6!*\$`\0`,@?m>>\0LCRn/+`;C\0*<F+q M;1K\n:b3j1l:c>Yh#;385:\\\0XHaM1\\L[YCvN\0+\0t#\$!@*l	FdhdF&f)=04x\0004ED6K\0nN];q4sj-=-8\0sDf5p4J^\'[H^NR FKwz EgF|!codbx\0-6,E_3up /wz(exRaHYce59d\00@2@YfeyYcMh[ez\rv\\0e\\c[ueNY`]9h~^Yqe]qe_|6!u`fJ{7M{YjeCS6\0DuasFL}\$(Mb,0Bu2gxF{an:i\rPjerrGBYM+qiYd`0,>6fo0o Xf\0VL!fl6 /1e\0>kbf\r!uf<%(ra&	Y!mBg=@\r; \r5phI9bm\$BYgx#@QEOm90\"!tO* \0>%\$orN&s9f4g~jMfwygy\\`X1y5x^z_,& k|1xA6 \no&xgg{r?-|t3}gHgK9J<CC197gh6!0HcdyfDA;9T0\0p! 6^.S?E(P .5hEPJv.+\$5>P+?~g6\rhpz(W`\"y:Fad6:fi\0A;e^wf >y`-\r\0hr\rr8i\"_	9CIfX2\"hL~\"%V:!%xyizygvx]}qgZi|`+ _g6PA\$=9h|p!.!i^i8zVCZ\"(9U)!DgU\0j?`4LTo@BNa{r:\nE8&=E*Z:\n?gh.N5(Shi2*cf@7z\"|rP.L8T\'k:(q2&ED2~9v8@^X=X`qZQ`9j5^@nqv3(I6jdT\\ 3,hk3(3PuV|\0Uk;JQ.	:J\r1nBI\r\0h@?N\nsh\";r~7O\$(5R	jFYF~xf\"vo#aP<h-3/Gxni@\"G?,ZpxX`v4X[I7Xc	!b}j_95qti6f5FipX\'2r0D,#GU2I\rl( =Aa-8dbS4~H;06b{Rs3zN`+4<^ay	}ryk&4@?~cE@LS@z^qqN</Hj^sC`sbgGy^\nN\n:GN}c\n +=p1NTB[d`noj;jwhc9p[y405N+`Xda/zn*P#t~9W	V~=#n)	2;j:JkC!>x5==2.|\'[\';v;:SA	&[men<6ma=Y.:g;Ix[IJ\0~zaYwT\\`V\n~P)zJQ@[{rDBv|i-EK;^n{:Nh;2p699XhQ~iA@D j}ozLV~	8B?#F}FTdezcFg7 6#.ES.J35KJ;n5:ySCvo.{	d\\0?W\0!)\'Eg;+\0YNtbp+c\0B=\"cT:BcPIDV0!ROlON~aF|%)O	WoQw:l0h@:8Q&[nFp,@JTw9(<{O\r	\$m/HnP\$o^U\"{<.nq8\r\0;n+3n{D\$7,Ez7\0l!{8x.s8PAFxrQ1p+@d9OP5lK/\\msqvQ/	!z7oE:qV5?GHOO\$l+,\r;~A{`7|r\'Ji\rc+|#+<&<W,>^P&nJhe%dCizXA\'D>Ek@Bw(.\n99AhNckNd`p`%23Hb2&<9R(tTH	z\' o>4?\rZw4`N\'-I0(Srw,Kr\'-2Hlo-U_\'W#\'/Hj6\0<j1EQTTrBcm16g:w6h@1I:2pL/w:K<E<J76s.sZ/\$AsEyrr:w?!?ZM9\01?AR%7>MARr}sr)\\t-8=U,WOCs#w5ERlM*D1>]gKV\n\\s8se9so~w4xf@D96\0	@.@9\0C;Ky+Ju<\\`c{E>yJ=l/-7Z46uC5PRVlVaNx`?U7(HP}jVJzNQJSs-gQ!aV_SwRO3amZXwZo\'waOoZ![\n<ZO\'Omo[a=Q>:T\n\0=mjATRbu(I:\$vWuS\\V8v\\g!Mu_&is\\CRVM]tXT7\\UoTo_S?alS-LutZGei`	}XZi}QyW[iTYo(ZE\\}nifWd%Tpu3uTf5)v]UR3VEY]X\n^VqSS}XiGfv>SvJMQv\\g]QYE#1Vl5UEK]\0SU?\\BwSU7mZV5\\Wf[eUr{G\\U,W[]xVj5mTVj~u7\0VU\'tw?ms5Vvq}u-Uq]c]W]Tt:fMke][-p}^I[XDYVdO]	seNZWY[tV?3M`t^wd:qTL@@>]j\rFqv-LvGKwiLwIPMoMgv[Uss~	w:BANE{!-do\0}&hXA5%fzLH5d Y_%v!m]%=B>E [#^}hYFa>{gSp[[email protected]\0:2#;vO}9ik]	&{ 2|a&Q)o:&.\05q\0JL64hy3aIzO\"yB{3%5r(mx.7rb%^eM2\0x!b}.Y6\$qS\"^|xEaX59\'TR	c9W1APh6\'o-pT(\nn\r1RRUgxPe#*kT<<>b;\0gL.<kZvz8~y7Y7wOdn><E3wS@ oW1ze1z\0f=cg{>np\0:HBn6FBrW=C>M.1~@3G98q<S|Y8QP`L[qzPN<{_-dOd-NB74BN.V9Q3{IcP\$h<R yy?G:ng;Ah!&+>;M	6SN=#`T#+n;r,X|#\r#?\nD>|VSe~Jm99\ns{S|r],~ qI?\"|w%|j\0rE,kSnqd8B.1\"/|]ENlxI Ic.|\$8DFPK3\\jxUC/A{e\rpU\nWloY{`]\'s/|o3r};[nOM7qq(_lqsNy;igt:qk{?zMo\'jcyggkwf8Vc7fAY+Kx=gKAkT,95rd+G[%Aw7%{m8%_mqV_%!Ei~h~C~%_rLkDy~?p1O!?v\\Pm\"<E6 EVzk9z~/!Q>ONm3r Fle;M_a!~Cfb}3 Kf. 	}.DX	i5|?=\0???@fu~a^nyQ;q)sS,\"G\nu%UYAKl\nBI86VCcO\0`}.x,-N@~TG\'dJy1zlfgABa!M\\<gz4@/C@	Qq)x/.7inD#= *79cFd2(.V3\$g`Arl|mb/qE!bU@9i;ppd=1yxx	=v=(vs_Bo#K\r n\\# fPXu-3&	J&,F(9v0&@khZygCz hi=s9T eT>g3dtF2b&:\0PB-Q8~LSMcgTh\'f(\$.EVLAIrg\r0T1P`1d\r4=6@F F=6A>NAV	(\$A/;?gf^	\n&KOn{]g8c\n7Lt:hFVO\rJ)b(\"OBm	o\$]TSHZ^Kw\\[A9(\'cb0 KsrBx\n*Baz6o\ry&tX1p\'^M<Cg`48GHzd?gX.@,7w:+TiUX16Ls:\rL6fr\r`t67~gxgH9JO=-\$4?r4O:z{D`21F(DM;&U>I6c@\r//_H\n7z 7a[9D\'}BORB#s]z!(D@L^	x@ouOD!e`\nak>0`-*8EZ6=f%cK=F\rShyN[v*v\r@#Ah*L\$AA\\%*	p\r*==8\$W\r [Jx0yZ+&YHA~A\n,\\(p!F<6S&IP`6Xz+df\rJis+&5/rEM^\$R(RQEw3lH*m\0BqarLBQz6~lB\rIGXXVbsmBHc_K\$p-:8Nj:-#F	\0aiBs\\)<.!\\NbIw8tPjW`y\0&0i?:Ia)=C,a&Map\$IIFc\0!Yxa)~C1PZL3TjC\0y`\\W\\t\$2\n+a\0aKb\n]C@?I\rHKs%N^9CL/=%h:?&PEY>5n[G%V*w<gJ]*wd]B5^OQ>%s{;WzGi*RnG9E,(u*XsR:5;)RNvK(RMb_{F<<3:%HVYS\n%L+{o.>Z(QkN!,:rH}nRNkI		[g;mYg%9V~-J_g\\Q\n!t\\UY-tZnd:B*]\')tw[BUm*r4*yvvZ+GHZnP|\nT %#\\AX\0}5b+wrXw1u%Cg=Iv`cre0`..<h+H^\\jyF%]B\0r+>%Zx %C.`Vn1KSk\rX|[;6H	U@D:Mj	?]bA+G\0thxbL`64MY#hfD=ew=c+H:.%^\$DZrAzjfLl7o\0-Edyz\'V W	ZK+d(AfyP?xR^h\'A\0:p\rd(Vdt	SFcH]rrCHY	X_/f 4 7e6D{,<<Z^j\"	\n+MY9A(<Pllp	,>{E9&Ghh{(Agg8(@jTngZJx@ic(p\'oJ0Mn&\r\'\0\rqF4)cL_oJ}5co|6m}Q4Qb[xm( &@;+f|IR48 {	`k`ur`W`\")fI\n;8Zjg~A!j%TE\\\r3EjjFXZ	AykHXdgCQ0dt	zk`@\0001\0nH\04\0g&.\0\0O(P@\rE\0l\0X\rE8x@\0^z@E\0.^Qq\"YD_p&3\0mZ.Pp\rEsv\"0`w,_`\rc/]xq3\0q.pq\0002_iE\0a1bwJ \0l\01,`1y\09#?0T^q\$F6/\$dFDyJ0b\0	W\0.c{c E\0s3l]@\rbF\"\02`\"7/\0a	^04eQ{c<j/_c\0001*28BA\0000xi1F50ljH\"F30\\_q\0fTl_0BE#3]s64_X1\0d``\rS_JMV/f1\0005I6tf4F34fF-6d\"4k\$h#E\06_01c@F/d]XQ#G\n5gqEF\nm\\DnqYFv1/4`q4=8bq|\00043mX1e\0.\\QcI	.7\\x`\"\0i^3(\"Ev4l_q\$Fo\r#UE^9t.\03|r1\069l^xPF-]\n0vQy\"G2,sxQq#F+\0/Diq}8[6,j\0cmoN5ehQvGLH<T_Q?F..\$fyEC2l1s#EDlohj8ebF!9`xqC7hx7^xK<h	,uG);lu#E<kb\0sR.w#z~w2|x(\0001\':v\0001G?|` .2X#G8K@<z1\"9|j	G/6qGs7/\0001b:|8Q#~FW4g#<F\r 2XQ#Fvk7x1#@rhFZ;frcy!\r	_x1\"H10Twc\rF1 \n8dXr2Db{d4HrA<~1dBHI[J?q~k0t#F\r#0\\h\rGEttc7U!=D_cN\0y6a Fg!v1q1K@ecGo\n/E\"3t`#cH<cqF%?Tbd) r0qcE>3\$tyQECl`9)VFHMJ7f\$HHQ ;ri7#F-FHQ#\0G!1^&4vG&7g\$\0G\rr/dR(s6@\'RA&g\0k z=|H^J]sd,\$1<cqJ_bGQvJH5FpIc[@rvH%3Dc<I\$M.dr1c=F.4c2bG.!L|{X{INFdxqsc#Ea)#GJm.\$=GhAN=sEGG\\a10HF.tg8[Idn8F.TF3E6riqsF6xrL=nFTod>-3|2\$0= :xcHI\"NP\$bQ\$F D}F%?(G3\$O\$^x2T0R#D:E|i/2XG8-\$Hv=d `:laxI:XRJRmxJ#\nGG9!N{cI&IR=I\r&j:8g#H\'3_xbH}>7c\"&K<x2H\"6@dbe;)!.]/dm*f6,vL(qAI87d9TtcULX%HI*z:|IXqs-Bq^(Raq(~e9JU+-eq*nT>\$erp\n\$es+VIbeq:#]cc7r\nf,gYTC%	}\0\\*EWPa:E,&Wp)xlM3\0t\0/IipD\'\0	k\$TF]fdMK\$H(@(znW_M*\0elF^H	W*BZPeR/dRR\0Ku,yH)\"SXI\'Z=LR3\n\'[k6@;}RI_)w[ \nnbBrl,\$vH\\s*.QtBdb@?3S`a@K\\.~f),?|&KZ9.X+S|\0PEe/\0V^K\0\n-	:S)0j9TXBK\",2\'2P,xpK\"D#TVD1Ao;/9TH%V`WJ<9aeK/V^/Q\nBZ\"9XM~\$5\$0dIU2^X\n*E7I\nV3+aIiNKKg0az*V#bJyMeZ V`U1C.\rF-j&LUp9s+Q&1RmgZ	,.XryZ032A1eN(?Al ,Nue\$|r_%E05E}\$X2%Ze \n\";<9aha]8*uLdR0+Qm.,GM_2edB,S2>U4vl~e22eYg2nf=\$%Ffa)fTGg2W,[X>)tA]R*&Z6j2|\0(p	9 u?`n-lZn!H9zL9VLyZJhRgEfLU~`4Yx)\$BQR#S,6i#Y,;Cri&X]\nw54Kx\n*&TW+SqNcyIW\0W5c&+Vr)Kg? |gRhR%K)Z#5,k`l:LsC[MUB6ldJ1nl:jL\0h *)p/5\\<9V/hTdjrMbx\n]RWR MaU3=`0o,Zl}mlmLS6\\tL\\%JK7oefMoCYvNV4=RsJ*hhn-m44yHM|isU=A\$i>ppQfq,5sUL8}#XHI9U8c:If7kl5}fLYN2}&	ic,I3R6r3b6>lXYfL)+S,*elU\"ed\"Z6ZDE9%Y9rmtE\'.M[4^;Mw59av+70ld%<3_<lN(v+7YRl].4I)=NT]\'U^?S7XC1u9EkL;NhSqNXk;1[LgpVB1_gs;RlENT8w,s1Pxrq3(;Z	y\'{O	_rMg|I92eLfO\rYnkuSNv9Vk	3.v9zyd)NY&s\$jd\'6Q<V)e+:Yjtpu<3]qMY:9XSgI*mCvGR@jT=:e(\0_Vn,?p	3\'\r|\"igTnP\nq,Sf.YQ AA,ZeSsE\rvTQZ\"pIsUA\0vZ}rKtfPf9{^J\n0%NG*~lD.Ke6[,%O-~jRO;@	enb_%sKYY0LWjr!BPvfwMR22z4rh;#M@}\0|M\0==f-!6pg[P4C[5:\rCtu@<ifNun[!u8j{&9KuFQlRi(CAs4\0Y;fB<{R_I~6|MWTA]4e@JeP|[r5*OBt)%-\0Pjm	us}Bi^*z0YK.`[Y2|XB(?.\$l,XD\njOD->_<\0sh\\ea\\\0eY`7U\"eCYTzt:V9P_aF;\0M2eHCZ?V\'}cYa?Qh8	0QCM`6,JeZZ\"GWuu\r>49KI%LV9Z{VEOX;oagP\$\nRX@}!-SiRqz	ITH.\nk\n\ndT>\n?E`5D+f?#zIZ7T[Qs#D\$PI	3*:9YIHHX0D!u7JmYB}Er8Q\n}\'PS	Q\$`R)^(OP\0aKm3\$H.X)V`9 .Y18eU`X9	\\LcjIE N6WDXB	Z:|:	E-P-&)*l)Puy|RLh.p_*QA@ ?,Y)t<P*jVuQ:2\0L?J,TPHLE%\0yP(YJZTHX\r	Q4hO;\\vV#TWw\\`O?JR2=F]I5TMjI9,(Dv|t)Wy-]zea,pQ6\$I-g=%SW#TP)T&]X15jB8V\nem yh*d4bd!0gRJ\\ Mt1R\n\nx._u+;*4)]\\l(m\"QnT(*\0`1H@2	6hYcH_f?a7=KKdetH2\0/\062@b~`\0.\0v) !~JPTO{t\0005/\rJ^0a!)8%KPP4~H\r+Lb/24)GKe0eS1B	-0jfSwLid L\r1hS MJJht)+?Le5n|FHMN5jSHL4=TDMn6Zm@I@S`)\'7fzSzx~OU1kSFMOU4p2\000076k#xSl\'K77\nlxSuLR77stxS}GM78*qt#xSOM\"78u)\09r)Sr2;)7Njm/xsN:jy4SgO:1=\ncTS;{S/ORH\r=tTIO\\zx4SM>j|TiSO~\$lO}tOz*%]PPvU\"K@\nojH;P>1FdP.5B\r3uB<L#<QPECu*\nyPNl\r6?KmBZijHO2}1JM_MmD&KQ6Fzv6Qj;jj)*mE9FdQv5eGdEM\0+D\"j)SDQpZfmR&HU%{Rv0m0zL@\'ER?eJ>MIYTR/B.UTYRL:jNRL5ji&,OmJD5,9Q1hTfNQ\'7Lih\rcjSzu\0ng9@c\rT%LAfTMT9uQ\n)USuD:jU	Pq*EKSbl\\FGTzgJHSF	\"Q:1;RL*~EoT\\z:]SBU^JuR*kE	TQtRg2UjV\$_SmPHU\\T[U5Jh\\UpV7a_*=R>\0I*VX:hU8jTKZ\\:)jT8	WZUbJ8R=YUVUR\\:-jiV.[z-{TZuojU3 [>E %\\h#bWZ-\\CW>]g4#KTrZwj\$z-RjtjU*Wtp\n4\'NMxUX32[x+\$BUS*qUqXZ}Sx@-W\n5XZJU2=\\F+V0]XXU0-VJ+/Z5sjDU%bV%Y^u@dWRk&YR\\RkYcVO-\\	kdKoXK/9]VO-U<@V[6U=eo4TY0eH\r96(+7ybrI |\0:Fz\n|s<R%J]F3jYZ^<5XIJM`nO\\B&rsQuzx	TVwJ5g	?vqF496zjOV\ru=@fTy	pKaXU9m\nekMo5\nhTVv:s\\p>L:)O=nk}jS&~yeZ)jtVRVsr:+ao,!TlU*n5\\Udv+M\\)]B|Jl;45pL7Li[~bmtSe\"Bvd@S4)Z\$)5ic!\\R*SDw\$9tS\nGfP*	KDVy5uJ\\C\$W,M\\5k^Vs5kM^{uwFQJHgWNk8+1brVX]dLjYTv6twykvx=5h8]x\"c|ufU\05j}PknRlf+>c4W+TDoqSXb}}hn&<?/3-hqn	p%)SyP\rm-f5[\\=T}y )Yd46#Y>3m\n09h;40+ae\n!)@xx}\$AF0N R	iU?b5!+\0Gw{lI )w-4;p8;@\r\n\rN5F\\hgPE il0X%)\nLk^2<5FdI<FjbMd\'	DBmaOYXgg8ZV%mf%F-,\naFwfs0GZ\n	1;J1\"iPByCtz;l4JmLX+l{8\"\nV(\$Y\0d\\6D9BHd%16f \"TJ`/>C=c?e!k*3l~i,Az/dMon\"zTr}e{MaC7fiT/6WP8Fa`5Mf2V][\'}cn4]heZ\r2XllGa`((\0_lOf&f1c8D{Q	S6p\0Y\0\rq3m&*f;p6r^c`&zn^;DSoj^=L\'g5&Ef&|\nK 6?bX*.fE~&9!dk@v\"FGx\\=E7XP2[:\0X~7X64(\";B\nXhy&DZl\nKCp`mS	2U;G8{-WBm\$F\rl&BY2\rmAwZ6R%d_T5``BaGcXK\r\0gN\\;Ns^\nuVwzUF\"\0T-,^\02 / EW/\04;\"K-NZMcRVNeZwj6ayKVlN?jt2T/[Nj|0t% #\0`5F<X@\nZF\\-mcd2p5Gv\'B\'7{k*\'LAZ|Ik\n-.C6k-Sk]_\$+G[^z]k8\\F|?B^B|@BzPW/R?[!bBk\'	(e:xfr7\r_qMa\0#7|Q&\0@)1LA[Pt\0`6\\ezxSvU:T>f\nql+K(|\\GU@(*iS%F\rR\$CL;dg-\$m?lh3?PY\0");}else{header("Content-Type: image/gif");switch($_GET["file"]){case"plus.gif":echo"GIF89a\0\0\0001\0\0\0\0\0!\0\0\0,\0\0\0\0\0\0!M*)o) qe#L\0;";break;case"cross.gif":echo"GIF89a\0\0\0001\0\0\0\0\0!\0\0\0,\0\0\0\0\0\0##\naFo~y._wa1JGL6]\0\0;";break;case"up.gif":echo"GIF89a\0\0\0001\0\0\0\0\0!\0\0\0,\0\0\0\0\0\0 MQN\n}a8ya\0\0;";break;case"down.gif":echo"GIF89a\0\0\0001\0\0\0\0\0!\0\0\0,\0\0\0\0\0\0 M*)[W\\L&\0\0;";break;case"arrow.gif":echo"GIF89a\0\n\0\0\0!\0\0\0,\0\0\0\0\0\n\0\0i\0\0;";break;}}exit;}if($_GET["script"]=="version"){$ld=file_open_lock(get_temp_dir()."/adminer.version");if($ld)file_write_unlock($ld,serialize(array("signature"=>$_POST["signature"],"version"=>$_POST["version"])));exit;}global$b,$g,$m,$ic,$qc,$_c,$n,$nd,$td,$ba,$Td,$y,$ca,$me,$pf,$bg,$Gh,$yd,$ni,$ti,$U,$Hi,$ia;if(!$_SERVER["REQUEST_URI"])$_SERVER["REQUEST_URI"]=$_SERVER["ORIG_PATH_INFO"];if(!strpos($_SERVER["REQUEST_URI"],\'?\')&&$_SERVER["QUERY_STRING"]!="")$_SERVER["REQUEST_URI"].="?$_SERVER[QUERY_STRING]";if($_SERVER["HTTP_X_FORWARDED_PREFIX"])$_SERVER["REQUEST_URI"]=$_SERVER["HTTP_X_FORWARDED_PREFIX"].$_SERVER["REQUEST_URI"];$ba=($_SERVER["HTTPS"]&&strcasecmp($_SERVER["HTTPS"],"off"))||ini_bool("session.cookie_secure");@ini_set("session.use_trans_sid",false);if(!defined("SID")){session_cache_limiter("");session_name("adminer_sid");$Of=array(0,preg_replace(\'~\?.*~\',\'\',$_SERVER["REQUEST_URI"]),"",$ba);if(version_compare(PHP_VERSION,\'5.2.0\')>=0)$Of[]=true;call_user_func_array(\'session_set_cookie_params\',$Of);session_start();}remove_slashes(array(&$_GET,&$_POST,&$_COOKIE),$Yc);if(function_exists("get_magic_quotes_runtime")&&get_magic_quotes_runtime())set_magic_quotes_runtime(false);@set_time_limit(0);@ini_set("zend.ze1_compatibility_mode",false);@ini_set("precision",15);function
get_lang(){return\'en\';}function
lang($si,$ef=null){if(is_array($si)){$eg=($ef==1?0:1);$si=$si[$eg];}$si=str_replace("%d","%s",$si);$ef=format_number($ef);return
sprintf($si,$ef);}if(extension_loaded(\'pdo\')){class
Min_PDO{var$_result,$server_info,$affected_rows,$errno,$error,$pdo;function
__construct(){global$b;$eg=array_search("SQL",$b->operators);if($eg!==false)unset($b->operators[$eg]);}function
dsn($nc,$V,$F,$xf=array()){$xf[PDO::ATTR_ERRMODE]=PDO::ERRMODE_SILENT;$xf[PDO::ATTR_STATEMENT_CLASS]=array(\'Min_PDOStatement\');try{$this->pdo=new
PDO($nc,$V,$F,$xf);}catch(Exception$Fc){auth_error(h($Fc->getMessage()));}$this->server_info=@$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION);}function
quote($P){return$this->pdo->quote($P);}function
query($G,$Bi=false){$H=$this->pdo->query($G);$this->error="";if(!$H){list(,$this->errno,$this->error)=$this->pdo->errorInfo();if(!$this->error)$this->error=\'Unknown error.\';return
false;}$this->store_result($H);return$H;}function
multi_query($G){return$this->_result=$this->query($G);}function
store_result($H=null){if(!$H){$H=$this->_result;if(!$H)return
false;}if($H->columnCount()){$H->num_rows=$H->rowCount();return$H;}$this->affected_rows=$H->rowCount();return
true;}function
next_result(){if(!$this->_result)return
false;$this->_result->_offset=0;return@$this->_result->nextRowset();}function
result($G,$o=0){$H=$this->query($G);if(!$H)return
false;$J=$H->fetch();return$J[$o];}}class
Min_PDOStatement
extends
PDOStatement{var$_offset=0,$num_rows;function
fetch_assoc(){return$this->fetch(PDO::FETCH_ASSOC);}function
fetch_row(){return$this->fetch(PDO::FETCH_NUM);}function
fetch_field(){$J=(object)$this->getColumnMeta($this->_offset++);$J->orgtable=$J->table;$J->orgname=$J->name;$J->charsetnr=(in_array("blob",(array)$J->flags)?63:0);return$J;}}}$ic=array();function
add_driver($u,$D){global$ic;$ic[$u]=$D;}class
Min_SQL{var$_conn;function
__construct($g){$this->_conn=$g;}function
select($Q,$L,$Z,$qd,$zf=array(),$_=1,$E=0,$mg=false){global$b,$y;$ae=(count($qd)<count($L));$G=$b->selectQueryBuild($L,$Z,$qd,$zf,$_,$E);if(!$G)$G="SELECT".limit(($_GET["page"]!="last"&&$_!=""&&$qd&&$ae&&$y=="sql"?"SQL_CALC_FOUND_ROWS ":"").implode(", ",$L)."\nFROM ".table($Q),($Z?"\nWHERE ".implode(" AND ",$Z):"").($qd&&$ae?"\nGROUP BY ".implode(", ",$qd):"").($zf?"\nORDER BY ".implode(", ",$zf):""),($_!=""?+$_:null),($E?$_*$E:0),"\n");$Ch=microtime(true);$I=$this->_conn->query($G);if($mg)echo$b->selectQuery($G,$Ch,!$I);return$I;}function
delete($Q,$wg,$_=0){$G="FROM ".table($Q);return
queries("DELETE".($_?limit1($Q,$G,$wg):" $G$wg"));}function
update($Q,$N,$wg,$_=0,$hh="\n"){$Ti=array();foreach($N
as$z=>$X)$Ti[]="$z = $X";$G=table($Q)." SET$hh".implode(",$hh",$Ti);return
queries("UPDATE".($_?limit1($Q,$G,$wg,$hh):" $G$wg"));}function
insert($Q,$N){return
queries("INSERT INTO ".table($Q).($N?" (".implode(", ",array_keys($N)).")\nVALUES (".implode(", ",$N).")":" DEFAULT VALUES"));}function
insertUpdate($Q,$K,$kg){return
false;}function
begin(){return
queries("BEGIN");}function
commit(){return
queries("COMMIT");}function
rollback(){return
queries("ROLLBACK");}function
slowQuery($G,$ei){}function
convertSearch($v,$X,$o){return$v;}function
value($X,$o){return(method_exists($this->_conn,\'value\')?$this->_conn->value($X,$o):(is_resource($X)?stream_get_contents($X):$X));}function
quoteBinary($Xg){return
q($Xg);}function
warnings(){return\'\';}function
tableHelp($D){}}$ic["sqlite"]="SQLite 3";$ic["sqlite2"]="SQLite 2";if(isset($_GET["sqlite"])||isset($_GET["sqlite2"])){define("DRIVER",(isset($_GET["sqlite"])?"sqlite":"sqlite2"));if(class_exists(isset($_GET["sqlite"])?"SQLite3":"SQLiteDatabase")){if(isset($_GET["sqlite"])){class
Min_SQLite{var$extension="SQLite3",$server_info,$affected_rows,$errno,$error,$_link;function
__construct($q){$this->_link=new
SQLite3($q);$Wi=$this->_link->version();$this->server_info=$Wi["versionString"];}function
query($G){$H=@$this->_link->query($G);$this->error="";if(!$H){$this->errno=$this->_link->lastErrorCode();$this->error=$this->_link->lastErrorMsg();return
false;}elseif($H->numColumns())return
new
Min_Result($H);$this->affected_rows=$this->_link->changes();return
true;}function
quote($P){return(is_utf8($P)?"\'".$this->_link->escapeString($P)."\'":"x\'".reset(unpack(\'H*\',$P))."\'");}function
store_result(){return$this->_result;}function
result($G,$o=0){$H=$this->query($G);if(!is_object($H))return
false;$J=$H->_result->fetchArray();return$J[$o];}}class
Min_Result{var$_result,$_offset=0,$num_rows;function
__construct($H){$this->_result=$H;}function
fetch_assoc(){return$this->_result->fetchArray(SQLITE3_ASSOC);}function
fetch_row(){return$this->_result->fetchArray(SQLITE3_NUM);}function
fetch_field(){$e=$this->_offset++;$T=$this->_result->columnType($e);return(object)array("name"=>$this->_result->columnName($e),"type"=>$T,"charsetnr"=>($T==SQLITE3_BLOB?63:0),);}function
__desctruct(){return$this->_result->finalize();}}}else{class
Min_SQLite{var$extension="SQLite",$server_info,$affected_rows,$error,$_link;function
__construct($q){$this->server_info=sqlite_libversion();$this->_link=new
SQLiteDatabase($q);}function
query($G,$Bi=false){$Pe=($Bi?"unbufferedQuery":"query");$H=@$this->_link->$Pe($G,SQLITE_BOTH,$n);$this->error="";if(!$H){$this->error=$n;return
false;}elseif($H===true){$this->affected_rows=$this->changes();return
true;}return
new
Min_Result($H);}function
quote($P){return"\'".sqlite_escape_string($P)."\'";}function
store_result(){return$this->_result;}function
result($G,$o=0){$H=$this->query($G);if(!is_object($H))return
false;$J=$H->_result->fetch();return$J[$o];}}class
Min_Result{var$_result,$_offset=0,$num_rows;function
__construct($H){$this->_result=$H;if(method_exists($H,\'numRows\'))$this->num_rows=$H->numRows();}function
fetch_assoc(){$J=$this->_result->fetch(SQLITE_ASSOC);if(!$J)return
false;$I=array();foreach($J
as$z=>$X)$I[idf_unescape($z)]=$X;return$I;}function
fetch_row(){return$this->_result->fetch(SQLITE_NUM);}function
fetch_field(){$D=$this->_result->fieldName($this->_offset++);$Zf=\'(\[.*]|"(?:[^"]|"")*"|(.+))\';if(preg_match("~^($Zf\\.)?$Zf\$~",$D,$C)){$Q=($C[3]!=""?$C[3]:idf_unescape($C[2]));$D=($C[5]!=""?$C[5]:idf_unescape($C[4]));}return(object)array("name"=>$D,"orgname"=>$D,"orgtable"=>$Q,);}}}}elseif(extension_loaded("pdo_sqlite")){class
Min_SQLite
extends
Min_PDO{var$extension="PDO_SQLite";function
__construct($q){$this->dsn(DRIVER.":$q","","");}}}if(class_exists("Min_SQLite")){class
Min_DB
extends
Min_SQLite{function
__construct(){parent::__construct(":memory:");$this->query("PRAGMA foreign_keys = 1");}function
select_db($q){if(is_readable($q)&&$this->query("ATTACH ".$this->quote(preg_match("~(^[/\\\\]|:)~",$q)?$q:dirname($_SERVER["SCRIPT_FILENAME"])."/$q")." AS a")){parent::__construct($q);$this->query("PRAGMA foreign_keys = 1");$this->query("PRAGMA busy_timeout = 500");return
true;}return
false;}function
multi_query($G){return$this->_result=$this->query($G);}function
next_result(){return
false;}}}class
Min_Driver
extends
Min_SQL{function
insertUpdate($Q,$K,$kg){$Ti=array();foreach($K
as$N)$Ti[]="(".implode(", ",$N).")";return
queries("REPLACE INTO ".table($Q)." (".implode(", ",array_keys(reset($K))).") VALUES\n".implode(",\n",$Ti));}function
tableHelp($D){if($D=="sqlite_sequence")return"fileformat2.html#seqtab";if($D=="sqlite_master")return"fileformat2.html#$D";}}function
idf_escape($v){return\'"\'.str_replace(\'"\',\'""\',$v).\'"\';}function
table($v){return
idf_escape($v);}function
connect(){global$b;list(,,$F)=$b->credentials();if($F!="")return\'Database does not support password.\';return
new
Min_DB;}function
get_databases(){return
array();}function
limit($G,$Z,$_,$hf=0,$hh=" "){return" $G$Z".($_!==null?$hh."LIMIT $_".($hf?" OFFSET $hf":""):"");}function
limit1($Q,$G,$Z,$hh="\n"){global$g;return(preg_match(\'~^INTO~\',$G)||$g->result("SELECT sqlite_compileoption_used(\'ENABLE_UPDATE_DELETE_LIMIT\')")?limit($G,$Z,1,0,$hh):" $G WHERE rowid = (SELECT rowid FROM ".table($Q).$Z.$hh."LIMIT 1)");}function
db_collation($l,$lb){global$g;return$g->result("PRAGMA encoding");}function
engines(){return
array();}function
logged_user(){return
get_current_user();}function
tables_list(){return
get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN (\'table\', \'view\') ORDER BY (name = \'sqlite_sequence\'), name");}function
count_tables($k){return
array();}function
table_status($D=""){global$g;$I=array();foreach(get_rows("SELECT name AS Name, type AS Engine, \'rowid\' AS Oid, \'\' AS Auto_increment FROM sqlite_master WHERE type IN (\'table\', \'view\') ".($D!=""?"AND name = ".q($D):"ORDER BY name"))as$J){$J["Rows"]=$g->result("SELECT COUNT(*) FROM ".idf_escape($J["Name"]));$I[$J["Name"]]=$J;}foreach(get_rows("SELECT * FROM sqlite_sequence",null,"")as$J)$I[$J["name"]]["Auto_increment"]=$J["seq"];return($D!=""?$I[$D]:$I);}function
is_view($R){return$R["Engine"]=="view";}function
fk_support($R){global$g;return!$g->result("SELECT sqlite_compileoption_used(\'OMIT_FOREIGN_KEY\')");}function
fields($Q){global$g;$I=array();$kg="";foreach(get_rows("PRAGMA table_info(".table($Q).")")as$J){$D=$J["name"];$T=strtolower($J["type"]);$Wb=$J["dflt_value"];$I[$D]=array("field"=>$D,"type"=>(preg_match(\'~int~i\',$T)?"integer":(preg_match(\'~char|clob|text~i\',$T)?"text":(preg_match(\'~blob~i\',$T)?"blob":(preg_match(\'~real|floa|doub~i\',$T)?"real":"numeric")))),"full_type"=>$T,"default"=>(preg_match("~\'(.*)\'~",$Wb,$C)?str_replace("\'\'","\'",$C[1]):($Wb=="NULL"?null:$Wb)),"null"=>!$J["notnull"],"privileges"=>array("select"=>1,"insert"=>1,"update"=>1),"primary"=>$J["pk"],);if($J["pk"]){if($kg!="")$I[$kg]["auto_increment"]=false;elseif(preg_match(\'~^integer$~i\',$T))$I[$D]["auto_increment"]=true;$kg=$D;}}$yh=$g->result("SELECT sql FROM sqlite_master WHERE type = \'table\' AND name = ".q($Q));preg_match_all(\'~(("[^"]*+")+|[a-z0-9_]+)\s+text\s+COLLATE\s+(\\'[^\\']+\\'|\S+)~i\',$yh,$Ce,PREG_SET_ORDER);foreach($Ce
as$C){$D=str_replace(\'""\',\'"\',preg_replace(\'~^"|"$~\',\'\',$C[1]));if($I[$D])$I[$D]["collation"]=trim($C[3],"\'");}return$I;}function
indexes($Q,$h=null){global$g;if(!is_object($h))$h=$g;$I=array();$yh=$h->result("SELECT sql FROM sqlite_master WHERE type = \'table\' AND name = ".q($Q));if(preg_match(\'~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*"|`[^`]*`)++)~i\',$yh,$C)){$I[""]=array("type"=>"PRIMARY","columns"=>array(),"lengths"=>array(),"descs"=>array());preg_match_all(\'~((("[^"]*+")+|(?:`[^`]*+`)+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i\',$C[1],$Ce,PREG_SET_ORDER);foreach($Ce
as$C){$I[""]["columns"][]=idf_unescape($C[2]).$C[4];$I[""]["descs"][]=(preg_match(\'~DESC~i\',$C[5])?\'1\':null);}}if(!$I){foreach(fields($Q)as$D=>$o){if($o["primary"])$I[""]=array("type"=>"PRIMARY","columns"=>array($D),"lengths"=>array(),"descs"=>array(null));}}$Ah=get_key_vals("SELECT name, sql FROM sqlite_master WHERE type = \'index\' AND tbl_name = ".q($Q),$h);foreach(get_rows("PRAGMA index_list(".table($Q).")",$h)as$J){$D=$J["name"];$w=array("type"=>($J["unique"]?"UNIQUE":"INDEX"));$w["lengths"]=array();$w["descs"]=array();foreach(get_rows("PRAGMA index_info(".idf_escape($D).")",$h)as$Wg){$w["columns"][]=$Wg["name"];$w["descs"][]=null;}if(preg_match(\'~^CREATE( UNIQUE)? INDEX \'.preg_quote(idf_escape($D).\' ON \'.idf_escape($Q),\'~\').\' \((.*)\)$~i\',$Ah[$D],$Gg)){preg_match_all(\'/("[^"]*+")+( DESC)?/\',$Gg[2],$Ce);foreach($Ce[2]as$z=>$X){if($X)$w["descs"][$z]=\'1\';}}if(!$I[""]||$w["type"]!="UNIQUE"||$w["columns"]!=$I[""]["columns"]||$w["descs"]!=$I[""]["descs"]||!preg_match("~^sqlite_~",$D))$I[$D]=$w;}return$I;}function
foreign_keys($Q){$I=array();foreach(get_rows("PRAGMA foreign_key_list(".table($Q).")")as$J){$r=&$I[$J["id"]];if(!$r)$r=$J;$r["source"][]=$J["from"];$r["target"][]=$J["to"];}return$I;}function
view($D){global$g;return
array("select"=>preg_replace(\'~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\s+~iU\',\'\',$g->result("SELECT sql FROM sqlite_master WHERE name = ".q($D))));}function
collations(){return(isset($_GET["create"])?get_vals("PRAGMA collation_list",1):array());}function
information_schema($l){return
false;}function
error(){global$g;return
h($g->error);}function
check_sqlite_name($D){global$g;$Oc="db|sdb|sqlite";if(!preg_match("~^[^\\0]*\\.($Oc)\$~",$D)){$g->error=sprintf(\'Please use one of the extensions %s.\',str_replace("|",", ",$Oc));return
false;}return
true;}function
create_database($l,$d){global$g;if(file_exists($l)){$g->error=\'File exists.\';return
false;}if(!check_sqlite_name($l))return
false;try{$A=new
Min_SQLite($l);}catch(Exception$Fc){$g->error=$Fc->getMessage();return
false;}$A->query(\'PRAGMA encoding = "UTF-8"\');$A->query(\'CREATE TABLE adminer (i)\');$A->query(\'DROP TABLE adminer\');return
true;}function
drop_databases($k){global$g;$g->__construct(":memory:");foreach($k
as$l){if(!@unlink($l)){$g->error=\'File exists.\';return
false;}}return
true;}function
rename_database($D,$d){global$g;if(!check_sqlite_name($D))return
false;$g->__construct(":memory:");$g->error=\'File exists.\';return@rename(DB,$D);}function
auto_increment(){return" PRIMARY KEY".(DRIVER=="sqlite"?" AUTOINCREMENT":"");}function
alter_table($Q,$D,$p,$fd,$rb,$yc,$d,$Ka,$Tf){global$g;$Mi=($Q==""||$fd);foreach($p
as$o){if($o[0]!=""||!$o[1]||$o[2]){$Mi=true;break;}}$c=array();$Hf=array();foreach($p
as$o){if($o[1]){$c[]=($Mi?$o[1]:"ADD ".implode($o[1]));if($o[0]!="")$Hf[$o[0]]=$o[1][0];}}if(!$Mi){foreach($c
as$X){if(!queries("ALTER TABLE ".table($Q)." $X"))return
false;}if($Q!=$D&&!queries("ALTER TABLE ".table($Q)." RENAME TO ".table($D)))return
false;}elseif(!recreate_table($Q,$D,$c,$Hf,$fd,$Ka))return
false;if($Ka){queries("BEGIN");queries("UPDATE sqlite_sequence SET seq = $Ka WHERE name = ".q($D));if(!$g->affected_rows)queries("INSERT INTO sqlite_sequence (name, seq) VALUES (".q($D).", $Ka)");queries("COMMIT");}return
true;}function
recreate_table($Q,$D,$p,$Hf,$fd,$Ka,$x=array()){global$g;if($Q!=""){if(!$p){foreach(fields($Q)as$z=>$o){if($x)$o["auto_increment"]=0;$p[]=process_field($o,$o);$Hf[$z]=idf_escape($z);}}$lg=false;foreach($p
as$o){if($o[6])$lg=true;}$lc=array();foreach($x
as$z=>$X){if($X[2]=="DROP"){$lc[$X[1]]=true;unset($x[$z]);}}foreach(indexes($Q)as$ge=>$w){$f=array();foreach($w["columns"]as$z=>$e){if(!$Hf[$e])continue
2;$f[]=$Hf[$e].($w["descs"][$z]?" DESC":"");}if(!$lc[$ge]){if($w["type"]!="PRIMARY"||!$lg)$x[]=array($w["type"],$ge,$f);}}foreach($x
as$z=>$X){if($X[0]=="PRIMARY"){unset($x[$z]);$fd[]="  PRIMARY KEY (".implode(", ",$X[2]).")";}}foreach(foreign_keys($Q)as$ge=>$r){foreach($r["source"]as$z=>$e){if(!$Hf[$e])continue
2;$r["source"][$z]=idf_unescape($Hf[$e]);}if(!isset($fd[" $ge"]))$fd[]=" ".format_foreign_key($r);}queries("BEGIN");}foreach($p
as$z=>$o)$p[$z]="  ".implode($o);$p=array_merge($p,array_filter($fd));$Yh=($Q==$D?"adminer_$D":$D);if(!queries("CREATE TABLE ".table($Yh)." (\n".implode(",\n",$p)."\n)"))return
false;if($Q!=""){if($Hf&&!queries("INSERT INTO ".table($Yh)." (".implode(", ",$Hf).") SELECT ".implode(", ",array_map(\'idf_escape\',array_keys($Hf)))." FROM ".table($Q)))return
false;$zi=array();foreach(triggers($Q)as$xi=>$fi){$wi=trigger($xi);$zi[]="CREATE TRIGGER ".idf_escape($xi)." ".implode(" ",$fi)." ON ".table($D)."\n$wi[Statement]";}$Ka=$Ka?0:$g->result("SELECT seq FROM sqlite_sequence WHERE name = ".q($Q));if(!queries("DROP TABLE ".table($Q))||($Q==$D&&!queries("ALTER TABLE ".table($Yh)." RENAME TO ".table($D)))||!alter_indexes($D,$x))return
false;if($Ka)queries("UPDATE sqlite_sequence SET seq = $Ka WHERE name = ".q($D));foreach($zi
as$wi){if(!queries($wi))return
false;}queries("COMMIT");}return
true;}function
index_sql($Q,$T,$D,$f){return"CREATE $T ".($T!="INDEX"?"INDEX ":"").idf_escape($D!=""?$D:uniqid($Q."_"))." ON ".table($Q)." $f";}function
alter_indexes($Q,$c){foreach($c
as$kg){if($kg[0]=="PRIMARY")return
recreate_table($Q,$Q,array(),array(),array(),0,$c);}foreach(array_reverse($c)as$X){if(!queries($X[2]=="DROP"?"DROP INDEX ".idf_escape($X[1]):index_sql($Q,$X[0],$X[1],"(".implode(", ",$X[2]).")")))return
false;}return
true;}function
truncate_tables($S){return
apply_queries("DELETE FROM",$S);}function
drop_views($Yi){return
apply_queries("DROP VIEW",$Yi);}function
drop_tables($S){return
apply_queries("DROP TABLE",$S);}function
move_tables($S,$Yi,$Wh){return
false;}function
trigger($D){global$g;if($D=="")return
array("Statement"=>"BEGIN\n\t;\nEND");$v=\'(?:[^`"\s]+|`[^`]*`|"[^"]*")+\';$yi=trigger_options();preg_match("~^CREATE\\s+TRIGGER\\s*$v\\s*(".implode("|",$yi["Timing"]).")\\s+([a-z]+)(?:\\s+OF\\s+($v))?\\s+ON\\s*$v\\s*(?:FOR\\s+EACH\\s+ROW\\s)?(.*)~is",$g->result("SELECT sql FROM sqlite_master WHERE type = \'trigger\' AND name = ".q($D)),$C);$gf=$C[3];return
array("Timing"=>strtoupper($C[1]),"Event"=>strtoupper($C[2]).($gf?" OF":""),"Of"=>idf_unescape($gf),"Trigger"=>$D,"Statement"=>$C[4],);}function
triggers($Q){$I=array();$yi=trigger_options();foreach(get_rows("SELECT * FROM sqlite_master WHERE type = \'trigger\' AND tbl_name = ".q($Q))as$J){preg_match(\'~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*(\'.implode("|",$yi["Timing"]).\')\s*(.*?)\s+ON\b~i\',$J["sql"],$C);$I[$J["name"]]=array($C[1],$C[2]);}return$I;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
begin(){return
queries("BEGIN");}function
last_id(){global$g;return$g->result("SELECT LAST_INSERT_ROWID()");}function
explain($g,$G){return$g->query("EXPLAIN QUERY PLAN $G");}function
found_rows($R,$Z){}function
types(){return
array();}function
schemas(){return
array();}function
get_schema(){return"";}function
set_schema($ah){return
true;}function
create_sql($Q,$Ka,$Hh){global$g;$I=$g->result("SELECT sql FROM sqlite_master WHERE type IN (\'table\', \'view\') AND name = ".q($Q));foreach(indexes($Q)as$D=>$w){if($D==\'\')continue;$I.=";\n\n".index_sql($Q,$w[\'type\'],$D,"(".implode(", ",array_map(\'idf_escape\',$w[\'columns\'])).")");}return$I;}function
truncate_sql($Q){return"DELETE FROM ".table($Q);}function
use_sql($j){}function
trigger_sql($Q){return
implode(get_vals("SELECT sql || \';;\n\' FROM sqlite_master WHERE type = \'trigger\' AND tbl_name = ".q($Q)));}function
show_variables(){global$g;$I=array();foreach(array("auto_vacuum","cache_size","count_changes","default_cache_size","empty_result_callbacks","encoding","foreign_keys","full_column_names","fullfsync","journal_mode","journal_size_limit","legacy_file_format","locking_mode","page_size","max_page_count","read_uncommitted","recursive_triggers","reverse_unordered_selects","secure_delete","short_column_names","synchronous","temp_store","temp_store_directory","schema_version","integrity_check","quick_check")as$z)$I[$z]=$g->result("PRAGMA $z");return$I;}function
show_status(){$I=array();foreach(get_vals("PRAGMA compile_options")as$wf){list($z,$X)=explode("=",$wf,2);$I[$z]=$X;}return$I;}function
convert_field($o){}function
unconvert_field($o,$I){return$I;}function
support($Tc){return
preg_match(\'~^(columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~\',$Tc);}function
driver_config(){$U=array("integer"=>0,"real"=>0,"numeric"=>0,"text"=>0,"blob"=>0);return
array(\'possible_drivers\'=>array((isset($_GET["sqlite"])?"SQLite3":"SQLite"),"PDO_SQLite"),\'jush\'=>"sqlite",\'types\'=>$U,\'structured_types\'=>array_keys($U),\'unsigned\'=>array(),\'operators\'=>array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL","SQL"),\'functions\'=>array("hex","length","lower","round","unixepoch","upper"),\'grouping\'=>array("avg","count","count distinct","group_concat","max","min","sum"),\'edit_functions\'=>array(array(),array("integer|real|numeric"=>"+/-","text"=>"||",)),);}}$ic["pgsql"]="PostgreSQL";if(isset($_GET["pgsql"])){define("DRIVER","pgsql");if(extension_loaded("pgsql")){class
Min_DB{var$extension="PgSQL",$_link,$_result,$_string,$_database=true,$server_info,$affected_rows,$error,$timeout;function
_error($Ac,$n){if(ini_bool("html_errors"))$n=html_entity_decode(strip_tags($n));$n=preg_replace(\'~^[^:]*: ~\',\'\',$n);$this->error=$n;}function
connect($M,$V,$F){global$b;$l=$b->database();set_error_handler(array($this,\'_error\'));$this->_string="host=\'".str_replace(":","\' port=\'",addcslashes($M,"\'\\"))."\' user=\'".addcslashes($V,"\'\\")."\' password=\'".addcslashes($F,"\'\\")."\'";$this->_link=@pg_connect("$this->_string dbname=\'".($l!=""?addcslashes($l,"\'\\"):"postgres")."\'",PGSQL_CONNECT_FORCE_NEW);if(!$this->_link&&$l!=""){$this->_database=false;$this->_link=@pg_connect("$this->_string dbname=\'postgres\'",PGSQL_CONNECT_FORCE_NEW);}restore_error_handler();if($this->_link){$Wi=pg_version($this->_link);$this->server_info=$Wi["server"];pg_set_client_encoding($this->_link,"UTF8");}return(bool)$this->_link;}function
quote($P){return"\'".pg_escape_string($this->_link,$P)."\'";}function
value($X,$o){return($o["type"]=="bytea"&&$X!==null?pg_unescape_bytea($X):$X);}function
quoteBinary($P){return"\'".pg_escape_bytea($this->_link,$P)."\'";}function
select_db($j){global$b;if($j==$b->database())return$this->_database;$I=@pg_connect("$this->_string dbname=\'".addcslashes($j,"\'\\")."\'",PGSQL_CONNECT_FORCE_NEW);if($I)$this->_link=$I;return$I;}function
close(){$this->_link=@pg_connect("$this->_string dbname=\'postgres\'");}function
query($G,$Bi=false){$H=@pg_query($this->_link,$G);$this->error="";if(!$H){$this->error=pg_last_error($this->_link);$I=false;}elseif(!pg_num_fields($H)){$this->affected_rows=pg_affected_rows($H);$I=true;}else$I=new
Min_Result($H);if($this->timeout){$this->timeout=0;$this->query("RESET statement_timeout");}return$I;}function
multi_query($G){return$this->_result=$this->query($G);}function
store_result(){return$this->_result;}function
next_result(){return
false;}function
result($G,$o=0){$H=$this->query($G);if(!$H||!$H->num_rows)return
false;return
pg_fetch_result($H->_result,0,$o);}function
warnings(){return
h(pg_last_notice($this->_link));}}class
Min_Result{var$_result,$_offset=0,$num_rows;function
__construct($H){$this->_result=$H;$this->num_rows=pg_num_rows($H);}function
fetch_assoc(){return
pg_fetch_assoc($this->_result);}function
fetch_row(){return
pg_fetch_row($this->_result);}function
fetch_field(){$e=$this->_offset++;$I=new
stdClass;if(function_exists(\'pg_field_table\'))$I->orgtable=pg_field_table($this->_result,$e);$I->name=pg_field_name($this->_result,$e);$I->orgname=$I->name;$I->type=pg_field_type($this->_result,$e);$I->charsetnr=($I->type=="bytea"?63:0);return$I;}function
__destruct(){pg_free_result($this->_result);}}}elseif(extension_loaded("pdo_pgsql")){class
Min_DB
extends
Min_PDO{var$extension="PDO_PgSQL",$timeout;function
connect($M,$V,$F){global$b;$l=$b->database();$this->dsn("pgsql:host=\'".str_replace(":","\' port=\'",addcslashes($M,"\'\\"))."\' client_encoding=utf8 dbname=\'".($l!=""?addcslashes($l,"\'\\"):"postgres")."\'",$V,$F);return
true;}function
select_db($j){global$b;return($b->database()==$j);}function
quoteBinary($Xg){return
q($Xg);}function
query($G,$Bi=false){$I=parent::query($G,$Bi);if($this->timeout){$this->timeout=0;parent::query("RESET statement_timeout");}return$I;}function
warnings(){return\'\';}function
close(){}}}class
Min_Driver
extends
Min_SQL{function
insertUpdate($Q,$K,$kg){global$g;foreach($K
as$N){$Ii=array();$Z=array();foreach($N
as$z=>$X){$Ii[]="$z = $X";if(isset($kg[idf_unescape($z)]))$Z[]="$z = $X";}if(!(($Z&&queries("UPDATE ".table($Q)." SET ".implode(", ",$Ii)." WHERE ".implode(" AND ",$Z))&&$g->affected_rows)||queries("INSERT INTO ".table($Q)." (".implode(", ",array_keys($N)).") VALUES (".implode(", ",$N).")")))return
false;}return
true;}function
slowQuery($G,$ei){$this->_conn->query("SET statement_timeout = ".(1000*$ei));$this->_conn->timeout=1000*$ei;return$G;}function
convertSearch($v,$X,$o){return(preg_match(\'~char|text\'.(!preg_match(\'~LIKE~\',$X["op"])?\'|date|time(stamp)?|boolean|uuid|\'.number_type():\'\').\'~\',$o["type"])?$v:"CAST($v AS text)");}function
quoteBinary($Xg){return$this->_conn->quoteBinary($Xg);}function
warnings(){return$this->_conn->warnings();}function
tableHelp($D){$we=array("information_schema"=>"infoschema","pg_catalog"=>"catalog",);$A=$we[$_GET["ns"]];if($A)return"$A-".str_replace("_","-",$D).".html";}}function
idf_escape($v){return\'"\'.str_replace(\'"\',\'""\',$v).\'"\';}function
table($v){return
idf_escape($v);}function
connect(){global$b,$U,$Gh;$g=new
Min_DB;$Kb=$b->credentials();if($g->connect($Kb[0],$Kb[1],$Kb[2])){if(min_version(9,0,$g)){$g->query("SET application_name = \'Adminer\'");if(min_version(9.2,0,$g)){$Gh[\'Strings\'][]="json";$U["json"]=4294967295;if(min_version(9.4,0,$g)){$Gh[\'Strings\'][]="jsonb";$U["jsonb"]=4294967295;}}}return$g;}return$g->error;}function
get_databases(){return
get_vals("SELECT datname FROM pg_database WHERE has_database_privilege(datname, \'CONNECT\') ORDER BY datname");}function
limit($G,$Z,$_,$hf=0,$hh=" "){return" $G$Z".($_!==null?$hh."LIMIT $_".($hf?" OFFSET $hf":""):"");}function
limit1($Q,$G,$Z,$hh="\n"){return(preg_match(\'~^INTO~\',$G)?limit($G,$Z,1,0,$hh):" $G".(is_view(table_status1($Q))?$Z:" WHERE ctid = (SELECT ctid FROM ".table($Q).$Z.$hh."LIMIT 1)"));}function
db_collation($l,$lb){global$g;return$g->result("SELECT datcollate FROM pg_database WHERE datname = ".q($l));}function
engines(){return
array();}function
logged_user(){global$g;return$g->result("SELECT user");}function
tables_list(){$G="SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = current_schema()";if(support(\'materializedview\'))$G.="
UNION ALL
SELECT matviewname, \'MATERIALIZED VIEW\'
FROM pg_matviews
WHERE schemaname = current_schema()";$G.="
ORDER BY 1";return
get_key_vals($G);}function
count_tables($k){return
array();}function
table_status($D=""){$I=array();foreach(get_rows("SELECT c.relname AS \"Name\", CASE c.relkind WHEN \'r\' THEN \'table\' WHEN \'m\' THEN \'materialized view\' ELSE \'view\' END AS \"Engine\", pg_relation_size(c.oid) AS \"Data_length\", pg_total_relation_size(c.oid) - pg_relation_size(c.oid) AS \"Index_length\", obj_description(c.oid, \'pg_class\') AS \"Comment\", ".(min_version(12)?"\'\'":"CASE WHEN c.relhasoids THEN \'oid\' ELSE \'\' END")." AS \"Oid\", c.reltuples as \"Rows\", n.nspname
FROM pg_class c
JOIN pg_namespace n ON(n.nspname = current_schema() AND n.oid = c.relnamespace)
WHERE relkind IN (\'r\', \'m\', \'v\', \'f\', \'p\')
".($D!=""?"AND relname = ".q($D):"ORDER BY relname"))as$J)$I[$J["Name"]]=$J;return($D!=""?$I[$D]:$I);}function
is_view($R){return
in_array($R["Engine"],array("view","materialized view"));}function
fk_support($R){return
true;}function
fields($Q){$I=array();$Ba=array(\'timestamp without time zone\'=>\'timestamp\',\'timestamp with time zone\'=>\'timestamptz\',);foreach(get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment".(min_version(10)?", a.attidentity":"")."
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
JOIN pg_attribute a ON c.oid = a.attrelid
LEFT JOIN pg_attrdef d ON c.oid = d.adrelid AND a.attnum = d.adnum
WHERE c.relname = ".q($Q)."
AND n.nspname = current_schema()
AND NOT a.attisdropped
AND a.attnum > 0
ORDER BY a.attnum")as$J){preg_match(\'~([^([]+)(\((.*)\))?([a-z ]+)?((\[[0-9]*])*)$~\',$J["full_type"],$C);list(,$T,$te,$J["length"],$wa,$Ea)=$C;$J["length"].=$Ea;$bb=$T.$wa;if(isset($Ba[$bb])){$J["type"]=$Ba[$bb];$J["full_type"]=$J["type"].$te.$Ea;}else{$J["type"]=$T;$J["full_type"]=$J["type"].$te.$wa.$Ea;}if(in_array($J[\'attidentity\'],array(\'a\',\'d\')))$J[\'default\']=\'GENERATED \'.($J[\'attidentity\']==\'d\'?\'BY DEFAULT\':\'ALWAYS\').\' AS IDENTITY\';$J["null"]=!$J["attnotnull"];$J["auto_increment"]=$J[\'attidentity\']||preg_match(\'~^nextval\(~i\',$J["default"]);$J["privileges"]=array("insert"=>1,"select"=>1,"update"=>1);if(preg_match(\'~(.+)::[^,)]+(.*)~\',$J["default"],$C))$J["default"]=($C[1]=="NULL"?null:idf_unescape($C[1]).$C[2]);$I[$J["field"]]=$J;}return$I;}function
indexes($Q,$h=null){global$g;if(!is_object($h))$h=$g;$I=array();$Ph=$h->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = ".q($Q));$f=get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $Ph AND attnum > 0",$h);foreach(get_rows("SELECT relname, indisunique::int, indisprimary::int, indkey, indoption, (indpred IS NOT NULL)::int as indispartial FROM pg_index i, pg_class ci WHERE i.indrelid = $Ph AND ci.oid = i.indexrelid",$h)as$J){$Hg=$J["relname"];$I[$Hg]["type"]=($J["indispartial"]?"INDEX":($J["indisprimary"]?"PRIMARY":($J["indisunique"]?"UNIQUE":"INDEX")));$I[$Hg]["columns"]=array();foreach(explode(" ",$J["indkey"])as$Pd)$I[$Hg]["columns"][]=$f[$Pd];$I[$Hg]["descs"]=array();foreach(explode(" ",$J["indoption"])as$Qd)$I[$Hg]["descs"][]=($Qd&1?\'1\':null);$I[$Hg]["lengths"]=array();}return$I;}function
foreign_keys($Q){global$pf;$I=array();foreach(get_rows("SELECT conname, condeferrable::int AS deferrable, pg_get_constraintdef(oid) AS definition
FROM pg_constraint
WHERE conrelid = (SELECT pc.oid FROM pg_class AS pc INNER JOIN pg_namespace AS pn ON (pn.oid = pc.relnamespace) WHERE pc.relname = ".q($Q)." AND pn.nspname = current_schema())
AND contype = \'f\'::char
ORDER BY conkey, conname")as$J){if(preg_match(\'~FOREIGN KEY\s*\((.+)\)\s*REFERENCES (.+)\((.+)\)(.*)$~iA\',$J[\'definition\'],$C)){$J[\'source\']=array_map(\'idf_unescape\',array_map(\'trim\',explode(\',\',$C[1])));if(preg_match(\'~^(("([^"]|"")+"|[^"]+)\.)?"?("([^"]|"")+"|[^"]+)$~\',$C[2],$Be)){$J[\'ns\']=idf_unescape($Be[2]);$J[\'table\']=idf_unescape($Be[4]);}$J[\'target\']=array_map(\'idf_unescape\',array_map(\'trim\',explode(\',\',$C[3])));$J[\'on_delete\']=(preg_match("~ON DELETE ($pf)~",$C[4],$Be)?$Be[1]:\'NO ACTION\');$J[\'on_update\']=(preg_match("~ON UPDATE ($pf)~",$C[4],$Be)?$Be[1]:\'NO ACTION\');$I[$J[\'conname\']]=$J;}}return$I;}function
constraints($Q){global$pf;$I=array();foreach(get_rows("SELECT conname, consrc
FROM pg_catalog.pg_constraint
INNER JOIN pg_catalog.pg_namespace ON pg_constraint.connamespace = pg_namespace.oid
INNER JOIN pg_catalog.pg_class ON pg_constraint.conrelid = pg_class.oid AND pg_constraint.connamespace = pg_class.relnamespace
WHERE pg_constraint.contype = \'c\'
AND conrelid != 0 -- handle only CONSTRAINTs here, not TYPES
AND nspname = current_schema()
AND relname = ".q($Q)."
ORDER BY connamespace, conname")as$J)$I[$J[\'conname\']]=$J[\'consrc\'];return$I;}function
view($D){global$g;return
array("select"=>trim($g->result("SELECT pg_get_viewdef(".$g->result("SELECT oid FROM pg_class WHERE relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND relname = ".q($D)).")")));}function
collations(){return
array();}function
information_schema($l){return($l=="information_schema");}function
error(){global$g;$I=h($g->error);if(preg_match(\'~^(.*\n)?([^\n]*)\n( *)\^(\n.*)?$~s\',$I,$C))$I=$C[1].preg_replace(\'~((?:[^&]|&[^;]*;){\'.strlen($C[3]).\'})(.*)~\',\'\1<b>\2</b>\',$C[2]).$C[4];return
nl_br($I);}function
create_database($l,$d){return
queries("CREATE DATABASE ".idf_escape($l).($d?" ENCODING ".idf_escape($d):""));}function
drop_databases($k){global$g;$g->close();return
apply_queries("DROP DATABASE",$k,\'idf_escape\');}function
rename_database($D,$d){return
queries("ALTER DATABASE ".idf_escape(DB)." RENAME TO ".idf_escape($D));}function
auto_increment(){return"";}function
alter_table($Q,$D,$p,$fd,$rb,$yc,$d,$Ka,$Tf){$c=array();$vg=array();if($Q!=""&&$Q!=$D)$vg[]="ALTER TABLE ".table($Q)." RENAME TO ".table($D);foreach($p
as$o){$e=idf_escape($o[0]);$X=$o[1];if(!$X)$c[]="DROP $e";else{$Si=$X[5];unset($X[5]);if($o[0]==""){if(isset($X[6]))$X[1]=($X[1]==" bigint"?" big":($X[1]==" smallint"?" small":" "))."serial";$c[]=($Q!=""?"ADD ":"  ").implode($X);if(isset($X[6]))$c[]=($Q!=""?"ADD":" ")." PRIMARY KEY ($X[0])";}else{if($e!=$X[0])$vg[]="ALTER TABLE ".table($D)." RENAME $e TO $X[0]";$c[]="ALTER $e TYPE$X[1]";if(!$X[6]){$c[]="ALTER $e ".($X[3]?"SET$X[3]":"DROP DEFAULT");$c[]="ALTER $e ".($X[2]==" NULL"?"DROP NOT":"SET").$X[2];}}if($o[0]!=""||$Si!="")$vg[]="COMMENT ON COLUMN ".table($D).".$X[0] IS ".($Si!=""?substr($Si,9):"\'\'");}}$c=array_merge($c,$fd);if($Q=="")array_unshift($vg,"CREATE TABLE ".table($D)." (\n".implode(",\n",$c)."\n)");elseif($c)array_unshift($vg,"ALTER TABLE ".table($Q)."\n".implode(",\n",$c));if($Q!=""||$rb!="")$vg[]="COMMENT ON TABLE ".table($D)." IS ".q($rb);if($Ka!=""){}foreach($vg
as$G){if(!queries($G))return
false;}return
true;}function
alter_indexes($Q,$c){$i=array();$jc=array();$vg=array();foreach($c
as$X){if($X[0]!="INDEX")$i[]=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");elseif($X[2]=="DROP")$jc[]=idf_escape($X[1]);else$vg[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($Q."_"))." ON ".table($Q)." (".implode(", ",$X[2]).")";}if($i)array_unshift($vg,"ALTER TABLE ".table($Q).implode(",",$i));if($jc)array_unshift($vg,"DROP INDEX ".implode(", ",$jc));foreach($vg
as$G){if(!queries($G))return
false;}return
true;}function
truncate_tables($S){return
queries("TRUNCATE ".implode(", ",array_map(\'table\',$S)));return
true;}function
drop_views($Yi){return
drop_tables($Yi);}function
drop_tables($S){foreach($S
as$Q){$O=table_status($Q);if(!queries("DROP ".strtoupper($O["Engine"])." ".table($Q)))return
false;}return
true;}function
move_tables($S,$Yi,$Wh){foreach(array_merge($S,$Yi)as$Q){$O=table_status($Q);if(!queries("ALTER ".strtoupper($O["Engine"])." ".table($Q)." SET SCHEMA ".idf_escape($Wh)))return
false;}return
true;}function
trigger($D,$Q){if($D=="")return
array("Statement"=>"EXECUTE PROCEDURE ()");$f=array();$Z="WHERE trigger_schema = current_schema() AND event_object_table = ".q($Q)." AND trigger_name = ".q($D);foreach(get_rows("SELECT * FROM information_schema.triggered_update_columns $Z")as$J)$f[]=$J["event_object_column"];$I=array();foreach(get_rows(\'SELECT trigger_name AS "Trigger", action_timing AS "Timing", event_manipulation AS "Event", \\'FOR EACH \\' || action_orientation AS "Type", action_statement AS "Statement" FROM information_schema.triggers \'."$Z ORDER BY event_manipulation DESC")as$J){if($f&&$J["Event"]=="UPDATE")$J["Event"].=" OF";$J["Of"]=implode(", ",$f);if($I)$J["Event"].=" OR $I[Event]";$I=$J;}return$I;}function
triggers($Q){$I=array();foreach(get_rows("SELECT * FROM information_schema.triggers WHERE trigger_schema = current_schema() AND event_object_table = ".q($Q))as$J){$wi=trigger($J["trigger_name"],$Q);$I[$wi["Trigger"]]=array($wi["Timing"],$wi["Event"]);}return$I;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","UPDATE OF","DELETE","INSERT OR UPDATE","INSERT OR UPDATE OF","DELETE OR INSERT","DELETE OR UPDATE","DELETE OR UPDATE OF","DELETE OR INSERT OR UPDATE","DELETE OR INSERT OR UPDATE OF"),"Type"=>array("FOR EACH ROW","FOR EACH STATEMENT"),);}function
routine($D,$T){$K=get_rows(\'SELECT routine_definition AS definition, LOWER(external_language) AS language, *
FROM information_schema.routines
WHERE routine_schema = current_schema() AND specific_name = \'.q($D));$I=$K[0];$I["returns"]=array("type"=>$I["type_udt_name"]);$I["fields"]=get_rows(\'SELECT parameter_name AS field, data_type AS type, character_maximum_length AS length, parameter_mode AS inout
FROM information_schema.parameters
WHERE specific_schema = current_schema() AND specific_name = \'.q($D).\'
ORDER BY ordinal_position\');return$I;}function
routines(){return
get_rows(\'SELECT specific_name AS "SPECIFIC_NAME", routine_type AS "ROUTINE_TYPE", routine_name AS "ROUTINE_NAME", type_udt_name AS "DTD_IDENTIFIER"
FROM information_schema.routines
WHERE routine_schema = current_schema()
ORDER BY SPECIFIC_NAME\');}function
routine_languages(){return
get_vals("SELECT LOWER(lanname) FROM pg_catalog.pg_language");}function
routine_id($D,$J){$I=array();foreach($J["fields"]as$o)$I[]=$o["type"];return
idf_escape($D)."(".implode(", ",$I).")";}function
last_id(){return
0;}function
explain($g,$G){return$g->query("EXPLAIN $G");}function
found_rows($R,$Z){global$g;if(preg_match("~ rows=([0-9]+)~",$g->result("EXPLAIN SELECT * FROM ".idf_escape($R["Name"]).($Z?" WHERE ".implode(" AND ",$Z):"")),$Gg))return$Gg[1];return
false;}function
types(){return
get_vals("SELECT typname
FROM pg_type
WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema())
AND typtype IN (\'b\',\'d\',\'e\')
AND typelem = 0");}function
schemas(){return
get_vals("SELECT nspname FROM pg_namespace ORDER BY nspname");}function
get_schema(){global$g;return$g->result("SELECT current_schema()");}function
set_schema($Zg,$h=null){global$g,$U,$Gh;if(!$h)$h=$g;$I=$h->query("SET search_path TO ".idf_escape($Zg));foreach(types()as$T){if(!isset($U[$T])){$U[$T]=0;$Gh[\'User types\'][]=$T;}}return$I;}function
foreign_keys_sql($Q){$I="";$O=table_status($Q);$cd=foreign_keys($Q);ksort($cd);foreach($cd
as$bd=>$ad)$I.="ALTER TABLE ONLY ".idf_escape($O[\'nspname\']).".".idf_escape($O[\'Name\'])." ADD CONSTRAINT ".idf_escape($bd)." $ad[definition] ".($ad[\'deferrable\']?\'DEFERRABLE\':\'NOT DEFERRABLE\').";\n";return($I?"$I\n":$I);}function
create_sql($Q,$Ka,$Hh){global$g;$I=\'\';$Pg=array();$jh=array();$O=table_status($Q);if(is_view($O)){$Xi=view($Q);return
rtrim("CREATE VIEW ".idf_escape($Q)." AS $Xi[select]",";");}$p=fields($Q);$x=indexes($Q);ksort($x);$Ab=constraints($Q);if(!$O||empty($p))return
false;$I="CREATE TABLE ".idf_escape($O[\'nspname\']).".".idf_escape($O[\'Name\'])." (\n    ";foreach($p
as$Vc=>$o){$Qf=idf_escape($o[\'field\']).\' \'.$o[\'full_type\'].default_value($o).($o[\'attnotnull\']?" NOT NULL":"");$Pg[]=$Qf;if(preg_match(\'~nextval\(\\'([^\\']+)\\'\)~\',$o[\'default\'],$Ce)){$ih=$Ce[1];$xh=reset(get_rows(min_version(10)?"SELECT *, cache_size AS cache_value FROM pg_sequences WHERE schemaname = current_schema() AND sequencename = ".q($ih):"SELECT * FROM $ih"));$jh[]=($Hh=="DROP+CREATE"?"DROP SEQUENCE IF EXISTS $ih;\n":"")."CREATE SEQUENCE $ih INCREMENT $xh[increment_by] MINVALUE $xh[min_value] MAXVALUE $xh[max_value]".($Ka&&$xh[\'last_value\']?" START $xh[last_value]":"")." CACHE $xh[cache_value];";}}if(!empty($jh))$I=implode("\n\n",$jh)."\n\n$I";foreach($x
as$Kd=>$w){switch($w[\'type\']){case\'UNIQUE\':$Pg[]="CONSTRAINT ".idf_escape($Kd)." UNIQUE (".implode(\', \',array_map(\'idf_escape\',$w[\'columns\'])).")";break;case\'PRIMARY\':$Pg[]="CONSTRAINT ".idf_escape($Kd)." PRIMARY KEY (".implode(\', \',array_map(\'idf_escape\',$w[\'columns\'])).")";break;}}foreach($Ab
as$xb=>$zb)$Pg[]="CONSTRAINT ".idf_escape($xb)." CHECK $zb";$I.=implode(",\n    ",$Pg)."\n) WITH (oids = ".($O[\'Oid\']?\'true\':\'false\').");";foreach($x
as$Kd=>$w){if($w[\'type\']==\'INDEX\'){$f=array();foreach($w[\'columns\']as$z=>$X)$f[]=idf_escape($X).($w[\'descs\'][$z]?" DESC":"");$I.="\n\nCREATE INDEX ".idf_escape($Kd)." ON ".idf_escape($O[\'nspname\']).".".idf_escape($O[\'Name\'])." USING btree (".implode(\', \',$f).");";}}if($O[\'Comment\'])$I.="\n\nCOMMENT ON TABLE ".idf_escape($O[\'nspname\']).".".idf_escape($O[\'Name\'])." IS ".q($O[\'Comment\']).";";foreach($p
as$Vc=>$o){if($o[\'comment\'])$I.="\n\nCOMMENT ON COLUMN ".idf_escape($O[\'nspname\']).".".idf_escape($O[\'Name\']).".".idf_escape($Vc)." IS ".q($o[\'comment\']).";";}return
rtrim($I,\';\');}function
truncate_sql($Q){return"TRUNCATE ".table($Q);}function
trigger_sql($Q){$O=table_status($Q);$I="";foreach(triggers($Q)as$vi=>$ui){$wi=trigger($vi,$O[\'Name\']);$I.="\nCREATE TRIGGER ".idf_escape($wi[\'Trigger\'])." $wi[Timing] $wi[Event] ON ".idf_escape($O["nspname"]).".".idf_escape($O[\'Name\'])." $wi[Type] $wi[Statement];;\n";}return$I;}function
use_sql($j){return"\connect ".idf_escape($j);}function
show_variables(){return
get_key_vals("SHOW ALL");}function
process_list(){return
get_rows("SELECT * FROM pg_stat_activity ORDER BY ".(min_version(9.2)?"pid":"procpid"));}function
show_status(){}function
convert_field($o){}function
unconvert_field($o,$I){return$I;}function
support($Tc){return
preg_match(\'~^(database|table|columns|sql|indexes|descidx|comment|view|\'.(min_version(9.3)?\'materializedview|\':\'\').\'scheme|routine|processlist|sequence|trigger|type|variables|drop_col|kill|dump)$~\',$Tc);}function
kill_process($X){return
queries("SELECT pg_terminate_backend(".number($X).")");}function
connection_id(){return"SELECT pg_backend_pid()";}function
max_connections(){global$g;return$g->result("SHOW max_connections");}function
driver_config(){$U=array();$Gh=array();foreach(array(\'Numbers\'=>array("smallint"=>5,"integer"=>10,"bigint"=>19,"boolean"=>1,"numeric"=>0,"real"=>7,"double precision"=>16,"money"=>20),\'Date and time\'=>array("date"=>13,"time"=>17,"timestamp"=>20,"timestamptz"=>21,"interval"=>0),\'Strings\'=>array("character"=>0,"character varying"=>0,"text"=>0,"tsquery"=>0,"tsvector"=>0,"uuid"=>0,"xml"=>0),\'Binary\'=>array("bit"=>0,"bit varying"=>0,"bytea"=>0),\'Network\'=>array("cidr"=>43,"inet"=>43,"macaddr"=>17,"txid_snapshot"=>0),\'Geometry\'=>array("box"=>0,"circle"=>0,"line"=>0,"lseg"=>0,"path"=>0,"point"=>0,"polygon"=>0),)as$z=>$X){$U+=$X;$Gh[$z]=array_keys($X);}return
array(\'possible_drivers\'=>array("PgSQL","PDO_PgSQL"),\'jush\'=>"pgsql",\'types\'=>$U,\'structured_types\'=>$Gh,\'unsigned\'=>array(),\'operators\'=>array("=","<",">","<=",">=","!=","~","!~","LIKE","LIKE %%","ILIKE","ILIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL"),\'functions\'=>array("char_length","lower","round","to_hex","to_timestamp","upper"),\'grouping\'=>array("avg","count","count distinct","max","min","sum"),\'edit_functions\'=>array(array("char"=>"md5","date|time"=>"now",),array(number_type()=>"+/-","date|time"=>"+ interval/- interval","char|text"=>"||",)),);}}$ic["oracle"]="Oracle (beta)";if(isset($_GET["oracle"])){define("DRIVER","oracle");if(extension_loaded("oci8")){class
Min_DB{var$extension="oci8",$_link,$_result,$server_info,$affected_rows,$errno,$error;var$_current_db;function
_error($Ac,$n){if(ini_bool("html_errors"))$n=html_entity_decode(strip_tags($n));$n=preg_replace(\'~^[^:]*: ~\',\'\',$n);$this->error=$n;}function
connect($M,$V,$F){$this->_link=@oci_new_connect($V,$F,$M,"AL32UTF8");if($this->_link){$this->server_info=oci_server_version($this->_link);return
true;}$n=oci_error();$this->error=$n["message"];return
false;}function
quote($P){return"\'".str_replace("\'","\'\'",$P)."\'";}function
select_db($j){$this->_current_db=$j;return
true;}function
query($G,$Bi=false){$H=oci_parse($this->_link,$G);$this->error="";if(!$H){$n=oci_error($this->_link);$this->errno=$n["code"];$this->error=$n["message"];return
false;}set_error_handler(array($this,\'_error\'));$I=@oci_execute($H);restore_error_handler();if($I){if(oci_num_fields($H))return
new
Min_Result($H);$this->affected_rows=oci_num_rows($H);oci_free_statement($H);}return$I;}function
multi_query($G){return$this->_result=$this->query($G);}function
store_result(){return$this->_result;}function
next_result(){return
false;}function
result($G,$o=1){$H=$this->query($G);if(!is_object($H)||!oci_fetch($H->_result))return
false;return
oci_result($H->_result,$o);}}class
Min_Result{var$_result,$_offset=1,$num_rows;function
__construct($H){$this->_result=$H;}function
_convert($J){foreach((array)$J
as$z=>$X){if(is_a($X,\'OCI-Lob\'))$J[$z]=$X->load();}return$J;}function
fetch_assoc(){return$this->_convert(oci_fetch_assoc($this->_result));}function
fetch_row(){return$this->_convert(oci_fetch_row($this->_result));}function
fetch_field(){$e=$this->_offset++;$I=new
stdClass;$I->name=oci_field_name($this->_result,$e);$I->orgname=$I->name;$I->type=oci_field_type($this->_result,$e);$I->charsetnr=(preg_match("~raw|blob|bfile~",$I->type)?63:0);return$I;}function
__destruct(){oci_free_statement($this->_result);}}}elseif(extension_loaded("pdo_oci")){class
Min_DB
extends
Min_PDO{var$extension="PDO_OCI";var$_current_db;function
connect($M,$V,$F){$this->dsn("oci:dbname=//$M;charset=AL32UTF8",$V,$F);return
true;}function
select_db($j){$this->_current_db=$j;return
true;}}}class
Min_Driver
extends
Min_SQL{function
begin(){return
true;}function
insertUpdate($Q,$K,$kg){global$g;foreach($K
as$N){$Ii=array();$Z=array();foreach($N
as$z=>$X){$Ii[]="$z = $X";if(isset($kg[idf_unescape($z)]))$Z[]="$z = $X";}if(!(($Z&&queries("UPDATE ".table($Q)." SET ".implode(", ",$Ii)." WHERE ".implode(" AND ",$Z))&&$g->affected_rows)||queries("INSERT INTO ".table($Q)." (".implode(", ",array_keys($N)).") VALUES (".implode(", ",$N).")")))return
false;}return
true;}}function
idf_escape($v){return\'"\'.str_replace(\'"\',\'""\',$v).\'"\';}function
table($v){return
idf_escape($v);}function
connect(){global$b;$g=new
Min_DB;$Kb=$b->credentials();if($g->connect($Kb[0],$Kb[1],$Kb[2]))return$g;return$g->error;}function
get_databases(){return
get_vals("SELECT tablespace_name FROM user_tablespaces ORDER BY 1");}function
limit($G,$Z,$_,$hf=0,$hh=" "){return($hf?" * FROM (SELECT t.*, rownum AS rnum FROM (SELECT $G$Z) t WHERE rownum <= ".($_+$hf).") WHERE rnum > $hf":($_!==null?" * FROM (SELECT $G$Z) WHERE rownum <= ".($_+$hf):" $G$Z"));}function
limit1($Q,$G,$Z,$hh="\n"){return" $G$Z";}function
db_collation($l,$lb){global$g;return$g->result("SELECT value FROM nls_database_parameters WHERE parameter = \'NLS_CHARACTERSET\'");}function
engines(){return
array();}function
logged_user(){global$g;return$g->result("SELECT USER FROM DUAL");}function
get_current_db(){global$g;$l=$g->_current_db?$g->_current_db:DB;unset($g->_current_db);return$l;}function
where_owner($ig,$Kf="owner"){if(!$_GET["ns"])return\'\';return"$ig$Kf = sys_context(\'USERENV\', \'CURRENT_SCHEMA\')";}function
views_table($f){$Kf=where_owner(\'\');return"(SELECT $f FROM all_views WHERE ".($Kf?$Kf:"rownum < 0").")";}function
tables_list(){$Xi=views_table("view_name");$Kf=where_owner(" AND ");return
get_key_vals("SELECT table_name, \'table\' FROM all_tables WHERE tablespace_name = ".q(DB)."$Kf
UNION SELECT view_name, \'view\' FROM $Xi
ORDER BY 1");}function
count_tables($k){global$g;$I=array();foreach($k
as$l)$I[$l]=$g->result("SELECT COUNT(*) FROM all_tables WHERE tablespace_name = ".q($l));return$I;}function
table_status($D=""){$I=array();$bh=q($D);$l=get_current_db();$Xi=views_table("view_name");$Kf=where_owner(" AND ");foreach(get_rows(\'SELECT table_name "Name", \\'table\\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = \'.q($l).$Kf.($D!=""?" AND table_name = $bh":"")."
UNION SELECT view_name, \'view\', 0, 0 FROM $Xi".($D!=""?" WHERE view_name = $bh":"")."
ORDER BY 1")as$J){if($D!="")return$J;$I[$J["Name"]]=$J;}return$I;}function
is_view($R){return$R["Engine"]=="view";}function
fk_support($R){return
true;}function
fields($Q){$I=array();$Kf=where_owner(" AND ");foreach(get_rows("SELECT * FROM all_tab_columns WHERE table_name = ".q($Q)."$Kf ORDER BY column_id")as$J){$T=$J["DATA_TYPE"];$te="$J[DATA_PRECISION],$J[DATA_SCALE]";if($te==",")$te=$J["CHAR_COL_DECL_LENGTH"];$I[$J["COLUMN_NAME"]]=array("field"=>$J["COLUMN_NAME"],"full_type"=>$T.($te?"($te)":""),"type"=>strtolower($T),"length"=>$te,"default"=>$J["DATA_DEFAULT"],"null"=>($J["NULLABLE"]=="Y"),"privileges"=>array("insert"=>1,"select"=>1,"update"=>1),);}return$I;}function
indexes($Q,$h=null){$I=array();$Kf=where_owner(" AND ","aic.table_owner");foreach(get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
FROM all_ind_columns aic
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
WHERE aic.table_name = ".q($Q)."$Kf
ORDER BY ac.constraint_type, aic.column_position",$h)as$J){$Kd=$J["INDEX_NAME"];$ob=$J["DATA_DEFAULT"];$ob=($ob?trim($ob,\'"\'):$J["COLUMN_NAME"]);$I[$Kd]["type"]=($J["CONSTRAINT_TYPE"]=="P"?"PRIMARY":($J["CONSTRAINT_TYPE"]=="U"?"UNIQUE":"INDEX"));$I[$Kd]["columns"][]=$ob;$I[$Kd]["lengths"][]=($J["CHAR_LENGTH"]&&$J["CHAR_LENGTH"]!=$J["COLUMN_LENGTH"]?$J["CHAR_LENGTH"]:null);$I[$Kd]["descs"][]=($J["DESCEND"]&&$J["DESCEND"]=="DESC"?\'1\':null);}return$I;}function
view($D){$Xi=views_table("view_name, text");$K=get_rows(\'SELECT text "select" FROM \'.$Xi.\' WHERE view_name = \'.q($D));return
reset($K);}function
collations(){return
array();}function
information_schema($l){return
false;}function
error(){global$g;return
h($g->error);}function
explain($g,$G){$g->query("EXPLAIN PLAN FOR $G");return$g->query("SELECT * FROM plan_table");}function
found_rows($R,$Z){}function
auto_increment(){return"";}function
alter_table($Q,$D,$p,$fd,$rb,$yc,$d,$Ka,$Tf){$c=$jc=array();$Ef=($Q?fields($Q):array());foreach($p
as$o){$X=$o[1];if($X&&$o[0]!=""&&idf_escape($o[0])!=$X[0])queries("ALTER TABLE ".table($Q)." RENAME COLUMN ".idf_escape($o[0])." TO $X[0]");$Df=$Ef[$o[0]];if($X&&$Df){$jf=process_field($Df,$Df);if($X[2]==$jf[2])$X[2]="";}if($X)$c[]=($Q!=""?($o[0]!=""?"MODIFY (":"ADD ("):"  ").implode($X).($Q!=""?")":"");else$jc[]=idf_escape($o[0]);}if($Q=="")return
queries("CREATE TABLE ".table($D)." (\n".implode(",\n",$c)."\n)");return(!$c||queries("ALTER TABLE ".table($Q)."\n".implode("\n",$c)))&&(!$jc||queries("ALTER TABLE ".table($Q)." DROP (".implode(", ",$jc).")"))&&($Q==$D||queries("ALTER TABLE ".table($Q)." RENAME TO ".table($D)));}function
alter_indexes($Q,$c){$jc=array();$vg=array();foreach($c
as$X){if($X[0]!="INDEX"){$X[2]=preg_replace(\'~ DESC$~\',\'\',$X[2]);$i=($X[2]=="DROP"?"\nDROP CONSTRAINT ".idf_escape($X[1]):"\nADD".($X[1]!=""?" CONSTRAINT ".idf_escape($X[1]):"")." $X[0] ".($X[0]=="PRIMARY"?"KEY ":"")."(".implode(", ",$X[2]).")");array_unshift($vg,"ALTER TABLE ".table($Q).$i);}elseif($X[2]=="DROP")$jc[]=idf_escape($X[1]);else$vg[]="CREATE INDEX ".idf_escape($X[1]!=""?$X[1]:uniqid($Q."_"))." ON ".table($Q)." (".implode(", ",$X[2]).")";}if($jc)array_unshift($vg,"DROP INDEX ".implode(", ",$jc));foreach($vg
as$G){if(!queries($G))return
false;}return
true;}function
foreign_keys($Q){$I=array();$G="SELECT c_list.CONSTRAINT_NAME as NAME,
c_src.COLUMN_NAME as SRC_COLUMN,
c_dest.OWNER as DEST_DB,
c_dest.TABLE_NAME as DEST_TABLE,
c_dest.COLUMN_NAME as DEST_COLUMN,
c_list.DELETE_RULE as ON_DELETE
FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest
WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
AND c_list.CONSTRAINT_TYPE = \'R\'
AND c_src.TABLE_NAME = ".q($Q);foreach(get_rows($G)as$J)$I[$J[\'NAME\']]=array("db"=>$J[\'DEST_DB\'],"table"=>$J[\'DEST_TABLE\'],"source"=>array($J[\'SRC_COLUMN\']),"target"=>array($J[\'DEST_COLUMN\']),"on_delete"=>$J[\'ON_DELETE\'],"on_update"=>null,);return$I;}function
truncate_tables($S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views($Yi){return
apply_queries("DROP VIEW",$Yi);}function
drop_tables($S){return
apply_queries("DROP TABLE",$S);}function
last_id(){return
0;}function
schemas(){$I=get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN (\'SYSTEM\',\'SYSAUX\')) ORDER BY 1");return($I?$I:get_vals("SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = ".q(DB)." ORDER BY 1"));}function
get_schema(){global$g;return$g->result("SELECT sys_context(\'USERENV\', \'SESSION_USER\') FROM dual");}function
set_schema($ah,$h=null){global$g;if(!$h)$h=$g;return$h->query("ALTER SESSION SET CURRENT_SCHEMA = ".idf_escape($ah));}function
show_variables(){return
get_key_vals(\'SELECT name, display_value FROM v$parameter\');}function
process_list(){return
get_rows(\'SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
FROM v$session sess LEFT OUTER JOIN v$sql sql
ON sql.sql_id = sess.sql_id
WHERE sess.type = \\'USER\\'
ORDER BY PROCESS
\');}function
show_status(){$K=get_rows(\'SELECT * FROM v$instance\');return
reset($K);}function
convert_field($o){}function
unconvert_field($o,$I){return$I;}function
support($Tc){return
preg_match(\'~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~\',$Tc);}function
driver_config(){$U=array();$Gh=array();foreach(array(\'Numbers\'=>array("number"=>38,"binary_float"=>12,"binary_double"=>21),\'Date and time\'=>array("date"=>10,"timestamp"=>29,"interval year"=>12,"interval day"=>28),\'Strings\'=>array("char"=>2000,"varchar2"=>4000,"nchar"=>2000,"nvarchar2"=>4000,"clob"=>4294967295,"nclob"=>4294967295),\'Binary\'=>array("raw"=>2000,"long raw"=>2147483648,"blob"=>4294967295,"bfile"=>4294967296),)as$z=>$X){$U+=$X;$Gh[$z]=array_keys($X);}return
array(\'possible_drivers\'=>array("OCI8","PDO_OCI"),\'jush\'=>"oracle",\'types\'=>$U,\'structured_types\'=>$Gh,\'unsigned\'=>array(),\'operators\'=>array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL"),\'functions\'=>array("length","lower","round","upper"),\'grouping\'=>array("avg","count","count distinct","max","min","sum"),\'edit_functions\'=>array(array("date"=>"current_date","timestamp"=>"current_timestamp",),array("number|float|double"=>"+/-","date|timestamp"=>"+ interval/- interval","char|clob"=>"||",)),);}}$ic["mssql"]="MS SQL (beta)";if(isset($_GET["mssql"])){define("DRIVER","mssql");if(extension_loaded("sqlsrv")){class
Min_DB{var$extension="sqlsrv",$_link,$_result,$server_info,$affected_rows,$errno,$error;function
_get_error(){$this->error="";foreach(sqlsrv_errors()as$n){$this->errno=$n["code"];$this->error.="$n[message]\n";}$this->error=rtrim($this->error);}function
connect($M,$V,$F){global$b;$l=$b->database();$yb=array("UID"=>$V,"PWD"=>$F,"CharacterSet"=>"UTF-8");if($l!="")$yb["Database"]=$l;$this->_link=@sqlsrv_connect(preg_replace(\'~:~\',\',\',$M),$yb);if($this->_link){$Rd=sqlsrv_server_info($this->_link);$this->server_info=$Rd[\'SQLServerVersion\'];}else$this->_get_error();return(bool)$this->_link;}function
quote($P){return"\'".str_replace("\'","\'\'",$P)."\'";}function
select_db($j){return$this->query("USE ".idf_escape($j));}function
query($G,$Bi=false){$H=sqlsrv_query($this->_link,$G);$this->error="";if(!$H){$this->_get_error();return
false;}return$this->store_result($H);}function
multi_query($G){$this->_result=sqlsrv_query($this->_link,$G);$this->error="";if(!$this->_result){$this->_get_error();return
false;}return
true;}function
store_result($H=null){if(!$H)$H=$this->_result;if(!$H)return
false;if(sqlsrv_field_metadata($H))return
new
Min_Result($H);$this->affected_rows=sqlsrv_rows_affected($H);return
true;}function
next_result(){return$this->_result?sqlsrv_next_result($this->_result):null;}function
result($G,$o=0){$H=$this->query($G);if(!is_object($H))return
false;$J=$H->fetch_row();return$J[$o];}}class
Min_Result{var$_result,$_offset=0,$_fields,$num_rows;function
__construct($H){$this->_result=$H;}function
_convert($J){foreach((array)$J
as$z=>$X){if(is_a($X,\'DateTime\'))$J[$z]=$X->format("Y-m-d H:i:s");}return$J;}function
fetch_assoc(){return$this->_convert(sqlsrv_fetch_array($this->_result,SQLSRV_FETCH_ASSOC));}function
fetch_row(){return$this->_convert(sqlsrv_fetch_array($this->_result,SQLSRV_FETCH_NUMERIC));}function
fetch_field(){if(!$this->_fields)$this->_fields=sqlsrv_field_metadata($this->_result);$o=$this->_fields[$this->_offset++];$I=new
stdClass;$I->name=$o["Name"];$I->orgname=$o["Name"];$I->type=($o["Type"]==1?254:0);return$I;}function
seek($hf){for($t=0;$t<$hf;$t++)sqlsrv_fetch($this->_result);}function
__destruct(){sqlsrv_free_stmt($this->_result);}}}elseif(extension_loaded("mssql")){class
Min_DB{var$extension="MSSQL",$_link,$_result,$server_info,$affected_rows,$error;function
connect($M,$V,$F){$this->_link=@mssql_connect($M,$V,$F);if($this->_link){$H=$this->query("SELECT SERVERPROPERTY(\'ProductLevel\'), SERVERPROPERTY(\'Edition\')");if($H){$J=$H->fetch_row();$this->server_info=$this->result("sp_server_info 2",2)." [$J[0]] $J[1]";}}else$this->error=mssql_get_last_message();return(bool)$this->_link;}function
quote($P){return"\'".str_replace("\'","\'\'",$P)."\'";}function
select_db($j){return
mssql_select_db($j);}function
query($G,$Bi=false){$H=@mssql_query($G,$this->_link);$this->error="";if(!$H){$this->error=mssql_get_last_message();return
false;}if($H===true){$this->affected_rows=mssql_rows_affected($this->_link);return
true;}return
new
Min_Result($H);}function
multi_query($G){return$this->_result=$this->query($G);}function
store_result(){return$this->_result;}function
next_result(){return
mssql_next_result($this->_result->_result);}function
result($G,$o=0){$H=$this->query($G);if(!is_object($H))return
false;return
mssql_result($H->_result,0,$o);}}class
Min_Result{var$_result,$_offset=0,$_fields,$num_rows;function
__construct($H){$this->_result=$H;$this->num_rows=mssql_num_rows($H);}function
fetch_assoc(){return
mssql_fetch_assoc($this->_result);}function
fetch_row(){return
mssql_fetch_row($this->_result);}function
num_rows(){return
mssql_num_rows($this->_result);}function
fetch_field(){$I=mssql_fetch_field($this->_result);$I->orgtable=$I->table;$I->orgname=$I->name;return$I;}function
seek($hf){mssql_data_seek($this->_result,$hf);}function
__destruct(){mssql_free_result($this->_result);}}}elseif(extension_loaded("pdo_dblib")){class
Min_DB
extends
Min_PDO{var$extension="PDO_DBLIB";function
connect($M,$V,$F){$this->dsn("dblib:charset=utf8;host=".str_replace(":",";unix_socket=",preg_replace(\'~:(\d)~\',\';port=\1\',$M)),$V,$F);return
true;}function
select_db($j){return$this->query("USE ".idf_escape($j));}}}class
Min_Driver
extends
Min_SQL{function
insertUpdate($Q,$K,$kg){foreach($K
as$N){$Ii=array();$Z=array();foreach($N
as$z=>$X){$Ii[]="$z = $X";if(isset($kg[idf_unescape($z)]))$Z[]="$z = $X";}if(!queries("MERGE ".table($Q)." USING (VALUES(".implode(", ",$N).")) AS source (c".implode(", c",range(1,count($N))).") ON ".implode(" AND ",$Z)." WHEN MATCHED THEN UPDATE SET ".implode(", ",$Ii)." WHEN NOT MATCHED THEN INSERT (".implode(", ",array_keys($N)).") VALUES (".implode(", ",$N).");"))return
false;}return
true;}function
begin(){return
queries("BEGIN TRANSACTION");}}function
idf_escape($v){return"[".str_replace("]","]]",$v)."]";}function
table($v){return($_GET["ns"]!=""?idf_escape($_GET["ns"]).".":"").idf_escape($v);}function
connect(){global$b;$g=new
Min_DB;$Kb=$b->credentials();if($g->connect($Kb[0],$Kb[1],$Kb[2]))return$g;return$g->error;}function
get_databases(){return
get_vals("SELECT name FROM sys.databases WHERE name NOT IN (\'master\', \'tempdb\', \'model\', \'msdb\')");}function
limit($G,$Z,$_,$hf=0,$hh=" "){return($_!==null?" TOP (".($_+$hf).")":"")." $G$Z";}function
limit1($Q,$G,$Z,$hh="\n"){return
limit($G,$Z,1,0,$hh);}function
db_collation($l,$lb){global$g;return$g->result("SELECT collation_name FROM sys.databases WHERE name = ".q($l));}function
engines(){return
array();}function
logged_user(){global$g;return$g->result("SELECT SUSER_NAME()");}function
tables_list(){return
get_key_vals("SELECT name, type_desc FROM sys.all_objects WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN (\'S\', \'U\', \'V\') ORDER BY name");}function
count_tables($k){global$g;$I=array();foreach($k
as$l){$g->select_db($l);$I[$l]=$g->result("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES");}return$I;}function
table_status($D=""){$I=array();foreach(get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT value FROM fn_listextendedproperty(default, \'SCHEMA\', schema_name(schema_id), \'TABLE\', ao.name, null, null)) AS Comment FROM sys.all_objects AS ao WHERE schema_id = SCHEMA_ID(".q(get_schema()).") AND type IN (\'S\', \'U\', \'V\') ".($D!=""?"AND name = ".q($D):"ORDER BY name"))as$J){if($D!="")return$J;$I[$J["Name"]]=$J;}return$I;}function
is_view($R){return$R["Engine"]=="VIEW";}function
fk_support($R){return
true;}function
fields($Q){$tb=get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty(\'MS_DESCRIPTION\', \'schema\', ".q(get_schema()).", \'table\', ".q($Q).", \'column\', NULL)");$I=array();foreach(get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default]
FROM sys.all_columns c
JOIN sys.all_objects o ON c.object_id = o.object_id
JOIN sys.types t ON c.user_type_id = t.user_type_id
LEFT JOIN sys.default_constraints d ON c.default_object_id = d.parent_column_id
WHERE o.schema_id = SCHEMA_ID(".q(get_schema()).") AND o.type IN (\'S\', \'U\', \'V\') AND o.name = ".q($Q))as$J){$T=$J["type"];$te=(preg_match("~char|binary~",$T)?$J["max_length"]:($T=="decimal"?"$J[precision],$J[scale]":""));$I[$J["name"]]=array("field"=>$J["name"],"full_type"=>$T.($te?"($te)":""),"type"=>$T,"length"=>$te,"default"=>$J["default"],"null"=>$J["is_nullable"],"auto_increment"=>$J["is_identity"],"collation"=>$J["collation_name"],"privileges"=>array("insert"=>1,"select"=>1,"update"=>1),"primary"=>$J["is_identity"],"comment"=>$tb[$J["name"]],);}return$I;}function
indexes($Q,$h=null){$I=array();foreach(get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key
FROM sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
WHERE OBJECT_NAME(i.object_id) = ".q($Q),$h)as$J){$D=$J["name"];$I[$D]["type"]=($J["is_primary_key"]?"PRIMARY":($J["is_unique"]?"UNIQUE":"INDEX"));$I[$D]["lengths"]=array();$I[$D]["columns"][$J["key_ordinal"]]=$J["column_name"];$I[$D]["descs"][$J["key_ordinal"]]=($J["is_descending_key"]?\'1\':null);}return$I;}function
view($D){global$g;return
array("select"=>preg_replace(\'~^(?:[^[]|\[[^]]*])*\s+AS\s+~isU\',\'\',$g->result("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = ".q($D))));}function
collations(){$I=array();foreach(get_vals("SELECT name FROM fn_helpcollations()")as$d)$I[preg_replace(\'~_.*~\',\'\',$d)][]=$d;return$I;}function
information_schema($l){return
false;}function
error(){global$g;return
nl_br(h(preg_replace(\'~^(\[[^]]*])+~m\',\'\',$g->error)));}function
create_database($l,$d){return
queries("CREATE DATABASE ".idf_escape($l).(preg_match(\'~^[a-z0-9_]+$~i\',$d)?" COLLATE $d":""));}function
drop_databases($k){return
queries("DROP DATABASE ".implode(", ",array_map(\'idf_escape\',$k)));}function
rename_database($D,$d){if(preg_match(\'~^[a-z0-9_]+$~i\',$d))queries("ALTER DATABASE ".idf_escape(DB)." COLLATE $d");queries("ALTER DATABASE ".idf_escape(DB)." MODIFY NAME = ".idf_escape($D));return
true;}function
auto_increment(){return" IDENTITY".($_POST["Auto_increment"]!=""?"(".number($_POST["Auto_increment"]).",1)":"")." PRIMARY KEY";}function
alter_table($Q,$D,$p,$fd,$rb,$yc,$d,$Ka,$Tf){$c=array();$tb=array();foreach($p
as$o){$e=idf_escape($o[0]);$X=$o[1];if(!$X)$c["DROP"][]=" COLUMN $e";else{$X[1]=preg_replace("~( COLLATE )\'(\\w+)\'~",\'\1\2\',$X[1]);$tb[$o[0]]=$X[5];unset($X[5]);if($o[0]=="")$c["ADD"][]="\n  ".implode("",$X).($Q==""?substr($fd[$X[0]],16+strlen($X[0])):"");else{unset($X[6]);if($e!=$X[0])queries("EXEC sp_rename ".q(table($Q).".$e").", ".q(idf_unescape($X[0])).", \'COLUMN\'");$c["ALTER COLUMN ".implode("",$X)][]="";}}}if($Q=="")return
queries("CREATE TABLE ".table($D)." (".implode(",",(array)$c["ADD"])."\n)");if($Q!=$D)queries("EXEC sp_rename ".q(table($Q)).", ".q($D));if($fd)$c[""]=$fd;foreach($c
as$z=>$X){if(!queries("ALTER TABLE ".idf_escape($D)." $z".implode(",",$X)))return
false;}foreach($tb
as$z=>$X){$rb=substr($X,9);queries("EXEC sp_dropextendedproperty @name = N\'MS_Description\', @level0type = N\'Schema\', @level0name = ".q(get_schema()).", @level1type = N\'Table\', @level1name = ".q($D).", @level2type = N\'Column\', @level2name = ".q($z));queries("EXEC sp_addextendedproperty @name = N\'MS_Description\', @value = ".$rb.", @level0type = N\'Schema\', @level0name = ".q(get_schema()).", @level1type = N\'Table\', @level1name = ".q($D).", @level2type = N\'Column\', @level2name = ".q($z));}return
true;}function
alter_indexes($Q,$c){$w=array();$jc=array();foreach($c
as$X){if($X[2]=="DROP"){if($X[0]=="PRIMARY")$jc[]=idf_escape($X[1]);else$w[]=idf_escape($X[1])." ON ".table($Q);}elseif(!queries(($X[0]!="PRIMARY"?"CREATE $X[0] ".($X[0]!="INDEX"?"INDEX ":"").idf_escape($X[1]!=""?$X[1]:uniqid($Q."_"))." ON ".table($Q):"ALTER TABLE ".table($Q)." ADD PRIMARY KEY")." (".implode(", ",$X[2]).")"))return
false;}return(!$w||queries("DROP INDEX ".implode(", ",$w)))&&(!$jc||queries("ALTER TABLE ".table($Q)." DROP ".implode(", ",$jc)));}function
last_id(){global$g;return$g->result("SELECT SCOPE_IDENTITY()");}function
explain($g,$G){$g->query("SET SHOWPLAN_ALL ON");$I=$g->query($G);$g->query("SET SHOWPLAN_ALL OFF");return$I;}function
found_rows($R,$Z){}function
foreign_keys($Q){$I=array();foreach(get_rows("EXEC sp_fkeys @fktable_name = ".q($Q))as$J){$r=&$I[$J["FK_NAME"]];$r["db"]=$J["PKTABLE_QUALIFIER"];$r["table"]=$J["PKTABLE_NAME"];$r["source"][]=$J["FKCOLUMN_NAME"];$r["target"][]=$J["PKCOLUMN_NAME"];}return$I;}function
truncate_tables($S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views($Yi){return
queries("DROP VIEW ".implode(", ",array_map(\'table\',$Yi)));}function
drop_tables($S){return
queries("DROP TABLE ".implode(", ",array_map(\'table\',$S)));}function
move_tables($S,$Yi,$Wh){return
apply_queries("ALTER SCHEMA ".idf_escape($Wh)." TRANSFER",array_merge($S,$Yi));}function
trigger($D){if($D=="")return
array();$K=get_rows("SELECT s.name [Trigger],
CASE WHEN OBJECTPROPERTY(s.id, \'ExecIsInsertTrigger\') = 1 THEN \'INSERT\' WHEN OBJECTPROPERTY(s.id, \'ExecIsUpdateTrigger\') = 1 THEN \'UPDATE\' WHEN OBJECTPROPERTY(s.id, \'ExecIsDeleteTrigger\') = 1 THEN \'DELETE\' END [Event],
CASE WHEN OBJECTPROPERTY(s.id, \'ExecIsInsteadOfTrigger\') = 1 THEN \'INSTEAD OF\' ELSE \'AFTER\' END [Timing],
c.text
FROM sysobjects s
JOIN syscomments c ON s.id = c.id
WHERE s.xtype = \'TR\' AND s.name = ".q($D));$I=reset($K);if($I)$I["Statement"]=preg_replace(\'~^.+\s+AS\s+~isU\',\'\',$I["text"]);return$I;}function
triggers($Q){$I=array();foreach(get_rows("SELECT sys1.name,
CASE WHEN OBJECTPROPERTY(sys1.id, \'ExecIsInsertTrigger\') = 1 THEN \'INSERT\' WHEN OBJECTPROPERTY(sys1.id, \'ExecIsUpdateTrigger\') = 1 THEN \'UPDATE\' WHEN OBJECTPROPERTY(sys1.id, \'ExecIsDeleteTrigger\') = 1 THEN \'DELETE\' END [Event],
CASE WHEN OBJECTPROPERTY(sys1.id, \'ExecIsInsteadOfTrigger\') = 1 THEN \'INSTEAD OF\' ELSE \'AFTER\' END [Timing]
FROM sysobjects sys1
JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id
WHERE sys1.xtype = \'TR\' AND sys2.name = ".q($Q))as$J)$I[$J["name"]]=array($J["Timing"],$J["Event"]);return$I;}function
trigger_options(){return
array("Timing"=>array("AFTER","INSTEAD OF"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("AS"),);}function
schemas(){return
get_vals("SELECT name FROM sys.schemas");}function
get_schema(){global$g;if($_GET["ns"]!="")return$_GET["ns"];return$g->result("SELECT SCHEMA_NAME()");}function
set_schema($Zg){return
true;}function
use_sql($j){return"USE ".idf_escape($j);}function
show_variables(){return
array();}function
show_status(){return
array();}function
convert_field($o){}function
unconvert_field($o,$I){return$I;}function
support($Tc){return
preg_match(\'~^(comment|columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~\',$Tc);}function
driver_config(){$U=array();$Gh=array();foreach(array(\'Numbers\'=>array("tinyint"=>3,"smallint"=>5,"int"=>10,"bigint"=>20,"bit"=>1,"decimal"=>0,"real"=>12,"float"=>53,"smallmoney"=>10,"money"=>20),\'Date and time\'=>array("date"=>10,"smalldatetime"=>19,"datetime"=>19,"datetime2"=>19,"time"=>8,"datetimeoffset"=>10),\'Strings\'=>array("char"=>8000,"varchar"=>8000,"text"=>2147483647,"nchar"=>4000,"nvarchar"=>4000,"ntext"=>1073741823),\'Binary\'=>array("binary"=>8000,"varbinary"=>8000,"image"=>2147483647),)as$z=>$X){$U+=$X;$Gh[$z]=array_keys($X);}return
array(\'possible_drivers\'=>array("SQLSRV","MSSQL","PDO_DBLIB"),\'jush\'=>"mssql",\'types\'=>$U,\'structured_types\'=>$Gh,\'unsigned\'=>array(),\'operators\'=>array("=","<",">","<=",">=","!=","LIKE","LIKE %%","IN","IS NULL","NOT LIKE","NOT IN","IS NOT NULL"),\'functions\'=>array("len","lower","round","upper"),\'grouping\'=>array("avg","count","count distinct","max","min","sum"),\'edit_functions\'=>array(array("date|time"=>"getdate",),array("int|decimal|real|float|money|datetime"=>"+/-","char|text"=>"+",)),);}}$ic["mongo"]="MongoDB (alpha)";if(isset($_GET["mongo"])){define("DRIVER","mongo");if(class_exists(\'MongoDB\')){class
Min_DB{var$extension="Mongo",$server_info=MongoClient::VERSION,$error,$last_id,$_link,$_db;function
connect($Ji,$xf){try{$this->_link=new
MongoClient($Ji,$xf);if($xf["password"]!=""){$xf["password"]="";try{new
MongoClient($Ji,$xf);$this->error=\'Database does not support password.\';}catch(Exception$pc){}}}catch(Exception$pc){$this->error=$pc->getMessage();}}function
query($G){return
false;}function
select_db($j){try{$this->_db=$this->_link->selectDB($j);return
true;}catch(Exception$Fc){$this->error=$Fc->getMessage();return
false;}}function
quote($P){return$P;}}class
Min_Result{var$num_rows,$_rows=array(),$_offset=0,$_charset=array();function
__construct($H){foreach($H
as$de){$J=array();foreach($de
as$z=>$X){if(is_a($X,\'MongoBinData\'))$this->_charset[$z]=63;$J[$z]=(is_a($X,\'MongoId\')?"ObjectId(\"$X\")":(is_a($X,\'MongoDate\')?gmdate("Y-m-d H:i:s",$X->sec)." GMT":(is_a($X,\'MongoBinData\')?$X->bin:(is_a($X,\'MongoRegex\')?"$X":(is_object($X)?get_class($X):$X)))));}$this->_rows[]=$J;foreach($J
as$z=>$X){if(!isset($this->_rows[0][$z]))$this->_rows[0][$z]=null;}}$this->num_rows=count($this->_rows);}function
fetch_assoc(){$J=current($this->_rows);if(!$J)return$J;$I=array();foreach($this->_rows[0]as$z=>$X)$I[$z]=$J[$z];next($this->_rows);return$I;}function
fetch_row(){$I=$this->fetch_assoc();if(!$I)return$I;return
array_values($I);}function
fetch_field(){$he=array_keys($this->_rows[0]);$D=$he[$this->_offset++];return(object)array(\'name\'=>$D,\'charsetnr\'=>$this->_charset[$D],);}}class
Min_Driver
extends
Min_SQL{public$kg="_id";function
select($Q,$L,$Z,$qd,$zf=array(),$_=1,$E=0,$mg=false){$L=($L==array("*")?array():array_fill_keys($L,true));$uh=array();foreach($zf
as$X){$X=preg_replace(\'~ DESC$~\',\'\',$X,1,$Gb);$uh[$X]=($Gb?-1:1);}return
new
Min_Result($this->_conn->_db->selectCollection($Q)->find(array(),$L)->sort($uh)->limit($_!=""?+$_:0)->skip($E*$_));}function
insert($Q,$N){try{$I=$this->_conn->_db->selectCollection($Q)->insert($N);$this->_conn->errno=$I[\'code\'];$this->_conn->error=$I[\'err\'];$this->_conn->last_id=$N[\'_id\'];return!$I[\'err\'];}catch(Exception$Fc){$this->_conn->error=$Fc->getMessage();return
false;}}}function
get_databases($dd){global$g;$I=array();$Ub=$g->_link->listDBs();foreach($Ub[\'databases\']as$l)$I[]=$l[\'name\'];return$I;}function
count_tables($k){global$g;$I=array();foreach($k
as$l)$I[$l]=count($g->_link->selectDB($l)->getCollectionNames(true));return$I;}function
tables_list(){global$g;return
array_fill_keys($g->_db->getCollectionNames(true),\'table\');}function
drop_databases($k){global$g;foreach($k
as$l){$Lg=$g->_link->selectDB($l)->drop();if(!$Lg[\'ok\'])return
false;}return
true;}function
indexes($Q,$h=null){global$g;$I=array();foreach($g->_db->selectCollection($Q)->getIndexInfo()as$w){$cc=array();foreach($w["key"]as$e=>$T)$cc[]=($T==-1?\'1\':null);$I[$w["name"]]=array("type"=>($w["name"]=="_id_"?"PRIMARY":($w["unique"]?"UNIQUE":"INDEX")),"columns"=>array_keys($w["key"]),"lengths"=>array(),"descs"=>$cc,);}return$I;}function
fields($Q){return
fields_from_edit();}function
found_rows($R,$Z){global$g;return$g->_db->selectCollection($_GET["select"])->count($Z);}$uf=array("=");}elseif(class_exists(\'MongoDB\Driver\Manager\')){class
Min_DB{var$extension="MongoDB",$server_info=MONGODB_VERSION,$affected_rows,$error,$last_id;var$_link;var$_db,$_db_name;function
connect($Ji,$xf){$gb=\'MongoDB\Driver\Manager\';$this->_link=new$gb($Ji,$xf);$this->executeCommand(\'admin\',array(\'ping\'=>1));}function
executeCommand($l,$pb){$gb=\'MongoDB\Driver\Command\';try{return$this->_link->executeCommand($l,new$gb($pb));}catch(Exception$pc){$this->error=$pc->getMessage();return
array();}}function
executeBulkWrite($We,$Wa,$Hb){try{$Og=$this->_link->executeBulkWrite($We,$Wa);$this->affected_rows=$Og->$Hb();return
true;}catch(Exception$pc){$this->error=$pc->getMessage();return
false;}}function
query($G){return
false;}function
select_db($j){$this->_db_name=$j;return
true;}function
quote($P){return$P;}}class
Min_Result{var$num_rows,$_rows=array(),$_offset=0,$_charset=array();function
__construct($H){foreach($H
as$de){$J=array();foreach($de
as$z=>$X){if(is_a($X,\'MongoDB\BSON\Binary\'))$this->_charset[$z]=63;$J[$z]=(is_a($X,\'MongoDB\BSON\ObjectID\')?\'MongoDB\BSON\ObjectID("\'."$X\")":(is_a($X,\'MongoDB\BSON\UTCDatetime\')?$X->toDateTime()->format(\'Y-m-d H:i:s\'):(is_a($X,\'MongoDB\BSON\Binary\')?$X->getData():(is_a($X,\'MongoDB\BSON\Regex\')?"$X":(is_object($X)||is_array($X)?json_encode($X,256):$X)))));}$this->_rows[]=$J;foreach($J
as$z=>$X){if(!isset($this->_rows[0][$z]))$this->_rows[0][$z]=null;}}$this->num_rows=count($this->_rows);}function
fetch_assoc(){$J=current($this->_rows);if(!$J)return$J;$I=array();foreach($this->_rows[0]as$z=>$X)$I[$z]=$J[$z];next($this->_rows);return$I;}function
fetch_row(){$I=$this->fetch_assoc();if(!$I)return$I;return
array_values($I);}function
fetch_field(){$he=array_keys($this->_rows[0]);$D=$he[$this->_offset++];return(object)array(\'name\'=>$D,\'charsetnr\'=>$this->_charset[$D],);}}class
Min_Driver
extends
Min_SQL{public$kg="_id";function
select($Q,$L,$Z,$qd,$zf=array(),$_=1,$E=0,$mg=false){global$g;$L=($L==array("*")?array():array_fill_keys($L,1));if(count($L)&&!isset($L[\'_id\']))$L[\'_id\']=0;$Z=where_to_query($Z);$uh=array();foreach($zf
as$X){$X=preg_replace(\'~ DESC$~\',\'\',$X,1,$Gb);$uh[$X]=($Gb?-1:1);}if(isset($_GET[\'limit\'])&&is_numeric($_GET[\'limit\'])&&$_GET[\'limit\']>0)$_=$_GET[\'limit\'];$_=min(200,max(1,(int)$_));$rh=$E*$_;$gb=\'MongoDB\Driver\Query\';try{return
new
Min_Result($g->_link->executeQuery("$g->_db_name.$Q",new$gb($Z,array(\'projection\'=>$L,\'limit\'=>$_,\'skip\'=>$rh,\'sort\'=>$uh))));}catch(Exception$pc){$g->error=$pc->getMessage();return
false;}}function
update($Q,$N,$wg,$_=0,$hh="\n"){global$g;$l=$g->_db_name;$Z=sql_query_where_parser($wg);$gb=\'MongoDB\Driver\BulkWrite\';$Wa=new$gb(array());if(isset($N[\'_id\']))unset($N[\'_id\']);$Ig=array();foreach($N
as$z=>$Y){if($Y==\'NULL\'){$Ig[$z]=1;unset($N[$z]);}}$Ii=array(\'$set\'=>$N);if(count($Ig))$Ii[\'$unset\']=$Ig;$Wa->update($Z,$Ii,array(\'upsert\'=>false));return$g->executeBulkWrite("$l.$Q",$Wa,\'getModifiedCount\');}function
delete($Q,$wg,$_=0){global$g;$l=$g->_db_name;$Z=sql_query_where_parser($wg);$gb=\'MongoDB\Driver\BulkWrite\';$Wa=new$gb(array());$Wa->delete($Z,array(\'limit\'=>$_));return$g->executeBulkWrite("$l.$Q",$Wa,\'getDeletedCount\');}function
insert($Q,$N){global$g;$l=$g->_db_name;$gb=\'MongoDB\Driver\BulkWrite\';$Wa=new$gb(array());if($N[\'_id\']==\'\')unset($N[\'_id\']);$Wa->insert($N);return$g->executeBulkWrite("$l.$Q",$Wa,\'getInsertedCount\');}}function
get_databases($dd){global$g;$I=array();foreach($g->executeCommand(\'admin\',array(\'listDatabases\'=>1))as$Ub){foreach($Ub->databases
as$l)$I[]=$l->name;}return$I;}function
count_tables($k){$I=array();return$I;}function
tables_list(){global$g;$mb=array();foreach($g->executeCommand($g->_db_name,array(\'listCollections\'=>1))as$H)$mb[$H->name]=\'table\';return$mb;}function
drop_databases($k){return
false;}function
indexes($Q,$h=null){global$g;$I=array();foreach($g->executeCommand($g->_db_name,array(\'listIndexes\'=>$Q))as$w){$cc=array();$f=array();foreach(get_object_vars($w->key)as$e=>$T){$cc[]=($T==-1?\'1\':null);$f[]=$e;}$I[$w->name]=array("type"=>($w->name=="_id_"?"PRIMARY":(isset($w->unique)?"UNIQUE":"INDEX")),"columns"=>$f,"lengths"=>array(),"descs"=>$cc,);}return$I;}function
fields($Q){global$m;$p=fields_from_edit();if(!$p){$H=$m->select($Q,array("*"),null,null,array(),10);if($H){while($J=$H->fetch_assoc()){foreach($J
as$z=>$X){$J[$z]=null;$p[$z]=array("field"=>$z,"type"=>"string","null"=>($z!=$m->primary),"auto_increment"=>($z==$m->primary),"privileges"=>array("insert"=>1,"select"=>1,"update"=>1,),);}}}}return$p;}function
found_rows($R,$Z){global$g;$Z=where_to_query($Z);$mi=$g->executeCommand($g->_db_name,array(\'count\'=>$R[\'Name\'],\'query\'=>$Z))->toArray();return$mi[0]->n;}function
sql_query_where_parser($wg){$wg=preg_replace(\'~^\sWHERE \(?\(?(.+?)\)?\)?$~\',\'\1\',$wg);$ij=explode(\' AND \',$wg);$jj=explode(\') OR (\',$wg);$Z=array();foreach($ij
as$gj)$Z[]=trim($gj);if(count($jj)==1)$jj=array();elseif(count($jj)>1)$Z=array();return
where_to_query($Z,$jj);}function
where_to_query($ej=array(),$fj=array()){global$b;$Pb=array();foreach(array(\'and\'=>$ej,\'or\'=>$fj)as$T=>$Z){if(is_array($Z)){foreach($Z
as$Lc){list($jb,$sf,$X)=explode(" ",$Lc,3);if($jb=="_id"&&preg_match(\'~^(MongoDB\\\\BSON\\\\ObjectID)\("(.+)"\)$~\',$X,$C)){list(,$gb,$X)=$C;$X=new$gb($X);}if(!in_array($sf,$b->operators))continue;if(preg_match(\'~^\(f\)(.+)~\',$sf,$C)){$X=(float)$X;$sf=$C[1];}elseif(preg_match(\'~^\(date\)(.+)~\',$sf,$C)){$Rb=new
DateTime($X);$gb=\'MongoDB\BSON\UTCDatetime\';$X=new$gb($Rb->getTimestamp()*1000);$sf=$C[1];}switch($sf){case\'=\':$sf=\'$eq\';break;case\'!=\':$sf=\'$ne\';break;case\'>\':$sf=\'$gt\';break;case\'<\':$sf=\'$lt\';break;case\'>=\':$sf=\'$gte\';break;case\'<=\':$sf=\'$lte\';break;case\'regex\':$sf=\'$regex\';break;default:continue
2;}if($T==\'and\')$Pb[\'$and\'][]=array($jb=>array($sf=>$X));elseif($T==\'or\')$Pb[\'$or\'][]=array($jb=>array($sf=>$X));}}}return$Pb;}$uf=array("=","!=",">","<",">=","<=","regex","(f)=","(f)!=","(f)>","(f)<","(f)>=","(f)<=","(date)=","(date)!=","(date)>","(date)<","(date)>=","(date)<=",);}function
table($v){return$v;}function
idf_escape($v){return$v;}function
table_status($D="",$Sc=false){$I=array();foreach(tables_list()as$Q=>$T){$I[$Q]=array("Name"=>$Q);if($D==$Q)return$I[$Q];}return$I;}function
create_database($l,$d){return
true;}function
last_id(){global$g;return$g->last_id;}function
error(){global$g;return
h($g->error);}function
collations(){return
array();}function
logged_user(){global$b;$Kb=$b->credentials();return$Kb[1];}function
connect(){global$b;$g=new
Min_DB;list($M,$V,$F)=$b->credentials();$xf=array();if($V.$F!=""){$xf["username"]=$V;$xf["password"]=$F;}$l=$b->database();if($l!="")$xf["db"]=$l;if(($Ja=getenv("MONGO_AUTH_SOURCE")))$xf["authSource"]=$Ja;$g->connect("mongodb://$M",$xf);if($g->error)return$g->error;return$g;}function
alter_indexes($Q,$c){global$g;foreach($c
as$X){list($T,$D,$N)=$X;if($N=="DROP")$I=$g->_db->command(array("deleteIndexes"=>$Q,"index"=>$D));else{$f=array();foreach($N
as$e){$e=preg_replace(\'~ DESC$~\',\'\',$e,1,$Gb);$f[$e]=($Gb?-1:1);}$I=$g->_db->selectCollection($Q)->ensureIndex($f,array("unique"=>($T=="UNIQUE"),"name"=>$D,));}if($I[\'errmsg\']){$g->error=$I[\'errmsg\'];return
false;}}return
true;}function
support($Tc){return
preg_match("~database|indexes|descidx~",$Tc);}function
db_collation($l,$lb){}function
information_schema(){}function
is_view($R){}function
convert_field($o){}function
unconvert_field($o,$I){return$I;}function
foreign_keys($Q){return
array();}function
fk_support($R){}function
engines(){return
array();}function
alter_table($Q,$D,$p,$fd,$rb,$yc,$d,$Ka,$Tf){global$g;if($Q==""){$g->_db->createCollection($D);return
true;}}function
drop_tables($S){global$g;foreach($S
as$Q){$Lg=$g->_db->selectCollection($Q)->drop();if(!$Lg[\'ok\'])return
false;}return
true;}function
truncate_tables($S){global$g;foreach($S
as$Q){$Lg=$g->_db->selectCollection($Q)->remove();if(!$Lg[\'ok\'])return
false;}return
true;}function
driver_config(){global$uf;return
array(\'possible_drivers\'=>array("mongo","mongodb"),\'jush\'=>"mongo",\'operators\'=>$uf,\'functions\'=>array(),\'grouping\'=>array(),\'edit_functions\'=>array(array("json")),);}}$ic["elastic"]="Elasticsearch (beta)";if(isset($_GET["elastic"])){define("DRIVER","elastic");if(function_exists(\'json_decode\')&&ini_bool(\'allow_url_fopen\')){class
Min_DB{var$extension="JSON",$server_info,$errno,$error,$_url,$_db;function
rootQuery($Xf,$Bb=array(),$Pe=\'GET\'){@ini_set(\'track_errors\',1);$Xc=@file_get_contents("$this->_url/".ltrim($Xf,\'/\'),false,stream_context_create(array(\'http\'=>array(\'method\'=>$Pe,\'content\'=>$Bb===null?$Bb:json_encode($Bb),\'header\'=>\'Content-Type: application/json\',\'ignore_errors\'=>1,))));if(!$Xc){$this->error=$php_errormsg;return$Xc;}if(!preg_match(\'~^HTTP/[0-9.]+ 2~i\',$http_response_header[0])){$this->error=\'Invalid credentials.\'." $http_response_header[0]";return
false;}$I=json_decode($Xc,true);if($I===null){$this->errno=json_last_error();if(function_exists(\'json_last_error_msg\'))$this->error=json_last_error_msg();else{$_b=get_defined_constants(true);foreach($_b[\'json\']as$D=>$Y){if($Y==$this->errno&&preg_match(\'~^JSON_ERROR_~\',$D)){$this->error=$D;break;}}}}return$I;}function
query($Xf,$Bb=array(),$Pe=\'GET\'){return$this->rootQuery(($this->_db!=""?"$this->_db/":"/").ltrim($Xf,\'/\'),$Bb,$Pe);}function
connect($M,$V,$F){preg_match(\'~^(https?://)?(.*)~\',$M,$C);$this->_url=($C[1]?$C[1]:"http://")."$V:$F@$C[2]";$I=$this->query(\'\');if($I)$this->server_info=$I[\'version\'][\'number\'];return(bool)$I;}function
select_db($j){$this->_db=$j;return
true;}function
quote($P){return$P;}}class
Min_Result{var$num_rows,$_rows;function
__construct($K){$this->num_rows=count($K);$this->_rows=$K;reset($this->_rows);}function
fetch_assoc(){$I=current($this->_rows);next($this->_rows);return$I;}function
fetch_row(){return
array_values($this->fetch_assoc());}}}class
Min_Driver
extends
Min_SQL{function
select($Q,$L,$Z,$qd,$zf=array(),$_=1,$E=0,$mg=false){global$b;$Pb=array();$G="$Q/_search";if($L!=array("*"))$Pb["fields"]=$L;if($zf){$uh=array();foreach($zf
as$jb){$jb=preg_replace(\'~ DESC$~\',\'\',$jb,1,$Gb);$uh[]=($Gb?array($jb=>"desc"):$jb);}$Pb["sort"]=$uh;}if($_){$Pb["size"]=+$_;if($E)$Pb["from"]=($E*$_);}foreach($Z
as$X){list($jb,$sf,$X)=explode(" ",$X,3);if($jb=="_id")$Pb["query"]["ids"]["values"][]=$X;elseif($jb.$X!=""){$Zh=array("term"=>array(($jb!=""?$jb:"_all")=>$X));if($sf=="=")$Pb["query"]["filtered"]["filter"]["and"][]=$Zh;else$Pb["query"]["filtered"]["query"]["bool"]["must"][]=$Zh;}}if($Pb["query"]&&!$Pb["query"]["filtered"]["query"]&&!$Pb["query"]["ids"])$Pb["query"]["filtered"]["query"]=array("match_all"=>array());$Ch=microtime(true);$bh=$this->_conn->query($G,$Pb);if($mg)echo$b->selectQuery("$G: ".json_encode($Pb),$Ch,!$bh);if(!$bh)return
false;$I=array();foreach($bh[\'hits\'][\'hits\']as$Cd){$J=array();if($L==array("*"))$J["_id"]=$Cd["_id"];$p=$Cd[\'_source\'];if($L!=array("*")){$p=array();foreach($L
as$z)$p[$z]=$Cd[\'fields\'][$z];}foreach($p
as$z=>$X){if($Pb["fields"])$X=$X[0];$J[$z]=(is_array($X)?json_encode($X):$X);}$I[]=$J;}return
new
Min_Result($I);}function
update($T,$_g,$wg,$_=0,$hh="\n"){$Vf=preg_split(\'~ *= *~\',$wg);if(count($Vf)==2){$u=trim($Vf[1]);$G="$T/$u";return$this->_conn->query($G,$_g,\'POST\');}return
false;}function
insert($T,$_g){$u="";$G="$T/$u";$Lg=$this->_conn->query($G,$_g,\'POST\');$this->_conn->last_id=$Lg[\'_id\'];return$Lg[\'created\'];}function
delete($T,$wg,$_=0){$Gd=array();if(is_array($_GET["where"])&&$_GET["where"]["_id"])$Gd[]=$_GET["where"]["_id"];if(is_array($_POST[\'check\'])){foreach($_POST[\'check\']as$ab){$Vf=preg_split(\'~ *= *~\',$ab);if(count($Vf)==2)$Gd[]=trim($Vf[1]);}}$this->_conn->affected_rows=0;foreach($Gd
as$u){$G="{$T}/{$u}";$Lg=$this->_conn->query($G,\'{}\',\'DELETE\');if(is_array($Lg)&&$Lg[\'found\']==true)$this->_conn->affected_rows++;}return$this->_conn->affected_rows;}}function
connect(){global$b;$g=new
Min_DB;list($M,$V,$F)=$b->credentials();if($F!=""&&$g->connect($M,$V,""))return\'Database does not support password.\';if($g->connect($M,$V,$F))return$g;return$g->error;}function
support($Tc){return
preg_match("~database|table|columns~",$Tc);}function
logged_user(){global$b;$Kb=$b->credentials();return$Kb[1];}function
get_databases(){global$g;$I=$g->rootQuery(\'_aliases\');if($I){$I=array_keys($I);sort($I,SORT_STRING);}return$I;}function
collations(){return
array();}function
db_collation($l,$lb){}function
engines(){return
array();}function
count_tables($k){global$g;$I=array();$H=$g->query(\'_stats\');if($H&&$H[\'indices\']){$Od=$H[\'indices\'];foreach($Od
as$Nd=>$Dh){$Md=$Dh[\'total\'][\'indexing\'];$I[$Nd]=$Md[\'index_total\'];}}return$I;}function
tables_list(){global$g;if(min_version(6))return
array(\'_doc\'=>\'table\');$I=$g->query(\'_mapping\');if($I)$I=array_fill_keys(array_keys($I[$g->_db]["mappings"]),\'table\');return$I;}function
table_status($D="",$Sc=false){global$g;$bh=$g->query("_search",array("size"=>0,"aggregations"=>array("count_by_type"=>array("terms"=>array("field"=>"_type")))),"POST");$I=array();if($bh){$S=$bh["aggregations"]["count_by_type"]["buckets"];foreach($S
as$Q){$I[$Q["key"]]=array("Name"=>$Q["key"],"Engine"=>"table","Rows"=>$Q["doc_count"],);if($D!=""&&$D==$Q["key"])return$I[$D];}}return$I;}function
error(){global$g;return
h($g->error);}function
information_schema(){}function
is_view($R){}function
indexes($Q,$h=null){return
array(array("type"=>"PRIMARY","columns"=>array("_id")),);}function
fields($Q){global$g;$ze=array();if(min_version(6)){$H=$g->query("_mapping");if($H)$ze=$H[$g->_db][\'mappings\'][\'properties\'];}else{$H=$g->query("$Q/_mapping");if($H){$ze=$H[$Q][\'properties\'];if(!$ze)$ze=$H[$g->_db][\'mappings\'][$Q][\'properties\'];}}$I=array();if($ze){foreach($ze
as$D=>$o){$I[$D]=array("field"=>$D,"full_type"=>$o["type"],"type"=>$o["type"],"privileges"=>array("insert"=>1,"select"=>1,"update"=>1),);if($o["properties"]){unset($I[$D]["privileges"]["insert"]);unset($I[$D]["privileges"]["update"]);}}}return$I;}function
foreign_keys($Q){return
array();}function
table($v){return$v;}function
idf_escape($v){return$v;}function
convert_field($o){}function
unconvert_field($o,$I){return$I;}function
fk_support($R){}function
found_rows($R,$Z){return
null;}function
create_database($l){global$g;return$g->rootQuery(urlencode($l),null,\'PUT\');}function
drop_databases($k){global$g;return$g->rootQuery(urlencode(implode(\',\',$k)),array(),\'DELETE\');}function
alter_table($Q,$D,$p,$fd,$rb,$yc,$d,$Ka,$Tf){global$g;$sg=array();foreach($p
as$Qc){$Vc=trim($Qc[1][0]);$Wc=trim($Qc[1][1]?$Qc[1][1]:"text");$sg[$Vc]=array(\'type\'=>$Wc);}if(!empty($sg))$sg=array(\'properties\'=>$sg);return$g->query("_mapping/{$D}",$sg,\'PUT\');}function
drop_tables($S){global$g;$I=true;foreach($S
as$Q)$I=$I&&$g->query(urlencode($Q),array(),\'DELETE\');return$I;}function
last_id(){global$g;return$g->last_id;}function
driver_config(){$U=array();$Gh=array();foreach(array(\'Numbers\'=>array("long"=>3,"integer"=>5,"short"=>8,"byte"=>10,"double"=>20,"float"=>66,"half_float"=>12,"scaled_float"=>21),\'Date and time\'=>array("date"=>10),\'Strings\'=>array("string"=>65535,"text"=>65535),\'Binary\'=>array("binary"=>255),)as$z=>$X){$U+=$X;$Gh[$z]=array_keys($X);}return
array(\'possible_drivers\'=>array("json + allow_url_fopen"),\'jush\'=>"elastic",\'operators\'=>array("=","query"),\'functions\'=>array(),\'grouping\'=>array(),\'edit_functions\'=>array(array("json")),\'types\'=>$U,\'structured_types\'=>$Gh,);}}class
Adminer{var$operators;function
name(){return"<a href=\'https://www.adminer.org/\'".target_blank()." id=\'h1\'>Adminer</a>";}function
credentials(){return
array(SERVER,$_GET["username"],get_password());}function
connectSsl(){}function
permanentLogin($i=false){return
password_file($i);}function
bruteForceKey(){return$_SERVER["REMOTE_ADDR"];}function
serverName($M){return
h($M);}function
database(){return
DB;}function
databases($dd=true){return
get_databases($dd);}function
schemas(){return
schemas();}function
queryTimeout(){return
2;}function
headers(){}function
csp(){return
csp();}function
head(){return
true;}function
css(){$I=array();$q="adminer.css";if(file_exists($q))$I[]="$q?v=".crc32(file_get_contents($q));return$I;}function
loginForm(){global$ic;echo"<table cellspacing=\'0\' class=\'layout\'>\n",$this->loginFormField(\'driver\',\'<tr><th>\'.\'System\'.\'<td>\',html_select("auth[driver]",$ic,DRIVER,"loginDriver(this);")."\n"),$this->loginFormField(\'server\',\'<tr><th>\'.\'Server\'.\'<td>\',\'<input name="auth[server]" value="\'.h(SERVER).\'" title="hostname[:port]" placeholder="localhost" autocapitalize="off">\'."\n"),$this->loginFormField(\'username\',\'<tr><th>\'.\'Username\'.\'<td>\',\'<input name="auth[username]" id="username" value="\'.h($_GET["username"]).\'" autocomplete="username" autocapitalize="off">\'.script("focus(qs(\'#username\')); qs(\'#username\').form[\'auth[driver]\'].onchange();")),$this->loginFormField(\'password\',\'<tr><th>\'.\'Password\'.\'<td>\',\'<input type="password" name="auth[password]" autocomplete="current-password">\'."\n"),$this->loginFormField(\'db\',\'<tr><th>\'.\'Database\'.\'<td>\',\'<input name="auth[db]" value="\'.h($_GET["db"]).\'" autocapitalize="off">\'."\n"),"</table>\n","<p><input type=\'submit\' value=\'".\'Login\'."\'>\n",checkbox("auth[permanent]",1,$_COOKIE["adminer_permanent"],\'Permanent login\')."\n";}function
loginFormField($D,$_d,$Y){return$_d.$Y;}function
login($xe,$F){if($F=="")return
sprintf(\'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.\',target_blank());return
true;}function
tableName($Nh){return
h($Nh["Name"]);}function
fieldName($o,$zf=0){return\'<span title="\'.h($o["full_type"]).\'">\'.h($o["field"]).\'</span>\';}function
selectLinks($Nh,$N=""){global$y,$m;echo\'<p class="links">\';$we=array("select"=>\'Select data\');if(support("table")||support("indexes"))$we["table"]=\'Show structure\';if(support("table")){if(is_view($Nh))$we["view"]=\'Alter view\';else$we["create"]=\'Alter table\';}if($N!==null)$we["edit"]=\'New item\';$D=$Nh["Name"];foreach($we
as$z=>$X)echo" <a href=\'".h(ME)."$z=".urlencode($D).($z=="edit"?$N:"")."\'".bold(isset($_GET[$z])).">$X</a>";echo
doc_link(array($y=>$m->tableHelp($D)),"?"),"\n";}function
foreignKeys($Q){return
foreign_keys($Q);}function
backwardKeys($Q,$Mh){return
array();}function
backwardKeysPrint($Na,$J){}function
selectQuery($G,$Ch,$Rc=false){global$y,$m;$I="</p>\n";if(!$Rc&&($bj=$m->warnings())){$u="warnings";$I=", <a href=\'#$u\'>".\'Warnings\'."</a>".script("qsl(\'a\').onclick = partial(toggle, \'$u\');","")."$I<div id=\'$u\' class=\'hidden\'>\n$bj</div>\n";}return"<p><code class=\'jush-$y\'>".h(str_replace("\n"," ",$G))."</code> <span class=\'time\'>(".format_time($Ch).")</span>".(support("sql")?" <a href=\'".h(ME)."sql=".urlencode($G)."\'>".\'Edit\'."</a>":"").$I;}function
sqlCommandQuery($G){return
shorten_utf8(trim($G),1000);}function
rowDescription($Q){return"";}function
rowDescriptions($K,$gd){return$K;}function
selectLink($X,$o){}function
selectVal($X,$A,$o,$Gf){$I=($X===null?"<i>NULL</i>":(preg_match("~char|binary|boolean~",$o["type"])&&!preg_match("~var~",$o["type"])?"<code>$X</code>":$X));if(preg_match(\'~blob|bytea|raw|file~\',$o["type"])&&!is_utf8($X))$I="<i>".lang(array(\'%d byte\',\'%d bytes\'),strlen($Gf))."</i>";if(preg_match(\'~json~\',$o["type"]))$I="<code class=\'jush-js\'>$I</code>";return($A?"<a href=\'".h($A)."\'".(is_url($A)?target_blank():"").">$I</a>":$I);}function
editVal($X,$o){return$X;}function
tableStructurePrint($p){echo"<div class=\'scrollable\'>\n","<table cellspacing=\'0\' class=\'nowrap\'>\n","<thead><tr><th>".\'Column\'."<td>".\'Type\'.(support("comment")?"<td>".\'Comment\':"")."</thead>\n";foreach($p
as$o){echo"<tr".odd()."><th>".h($o["field"]),"<td><span title=\'".h($o["collation"])."\'>".h($o["full_type"])."</span>",($o["null"]?" <i>NULL</i>":""),($o["auto_increment"]?" <i>".\'Auto Increment\'."</i>":""),(isset($o["default"])?" <span title=\'".\'Default value\'."\'>[<b>".h($o["default"])."</b>]</span>":""),(support("comment")?"<td>".h($o["comment"]):""),"\n";}echo"</table>\n","</div>\n";}function
tableIndexesPrint($x){echo"<table cellspacing=\'0\'>\n";foreach($x
as$D=>$w){ksort($w["columns"]);$mg=array();foreach($w["columns"]as$z=>$X)$mg[]="<i>".h($X)."</i>".($w["lengths"][$z]?"(".$w["lengths"][$z].")":"").($w["descs"][$z]?" DESC":"");echo"<tr title=\'".h($D)."\'><th>$w[type]<td>".implode(", ",$mg)."\n";}echo"</table>\n";}function
selectColumnsPrint($L,$f){global$nd,$td;print_fieldset("select",\'Select\',$L);$t=0;$L[""]=array();foreach($L
as$z=>$X){$X=$_GET["columns"][$z];$e=select_input(" name=\'columns[$t][col]\'",$f,$X["col"],($z!==""?"selectFieldChange":"selectAddRow"));echo"<div>".($nd||$td?"<select name=\'columns[$t][fun]\'>".optionlist(array(-1=>"")+array_filter(array(\'Functions\'=>$nd,\'Aggregation\'=>$td)),$X["fun"])."</select>".on_help("getTarget(event).value && getTarget(event).value.replace(/ |\$/, \'(\') + \')\'",1).script("qsl(\'select\').onchange = function () { helpClose();".($z!==""?"":" qsl(\'select, input\', this.parentNode).onchange();")." };","")."($e)":$e)."</div>\n";$t++;}echo"</div></fieldset>\n";}function
selectSearchPrint($Z,$f,$x){print_fieldset("search",\'Search\',$Z);foreach($x
as$t=>$w){if($w["type"]=="FULLTEXT"){echo"<div>(<i>".implode("</i>, <i>",array_map(\'h\',$w["columns"]))."</i>) AGAINST"," <input type=\'search\' name=\'fulltext[$t]\' value=\'".h($_GET["fulltext"][$t])."\'>",script("qsl(\'input\').oninput = selectFieldChange;",""),checkbox("boolean[$t]",1,isset($_GET["boolean"][$t]),"BOOL"),"</div>\n";}}$Ya="this.parentNode.firstChild.onchange();";foreach(array_merge((array)$_GET["where"],array(array()))as$t=>$X){if(!$X||("$X[col]$X[val]"!=""&&in_array($X["op"],$this->operators))){echo"<div>".select_input(" name=\'where[$t][col]\'",$f,$X["col"],($X?"selectFieldChange":"selectAddRow"),"(".\'anywhere\'.")"),html_select("where[$t][op]",$this->operators,$X["op"],$Ya),"<input type=\'search\' name=\'where[$t][val]\' value=\'".h($X["val"])."\'>",script("mixin(qsl(\'input\'), {oninput: function () { $Ya }, onkeydown: selectSearchKeydown, onsearch: selectSearchSearch});",""),"</div>\n";}}echo"</div></fieldset>\n";}function
selectOrderPrint($zf,$f,$x){print_fieldset("sort",\'Sort\',$zf);$t=0;foreach((array)$_GET["order"]as$z=>$X){if($X!=""){echo"<div>".select_input(" name=\'order[$t]\'",$f,$X,"selectFieldChange"),checkbox("desc[$t]",1,isset($_GET["desc"][$z]),\'descending\')."</div>\n";$t++;}}echo"<div>".select_input(" name=\'order[$t]\'",$f,"","selectAddRow"),checkbox("desc[$t]",1,false,\'descending\')."</div>\n","</div></fieldset>\n";}function
selectLimitPrint($_){echo"<fieldset><legend>".\'Limit\'."</legend><div>";echo"<input type=\'number\' name=\'limit\' class=\'size\' value=\'".h($_)."\'>",script("qsl(\'input\').oninput = selectFieldChange;",""),"</div></fieldset>\n";}function
selectLengthPrint($ci){if($ci!==null){echo"<fieldset><legend>".\'Text length\'."</legend><div>","<input type=\'number\' name=\'text_length\' class=\'size\' value=\'".h($ci)."\'>","</div></fieldset>\n";}}function
selectActionPrint($x){echo"<fieldset><legend>".\'Action\'."</legend><div>","<input type=\'submit\' value=\'".\'Select\'."\'>"," <span id=\'noindex\' title=\'".\'Full table scan\'."\'></span>","<script".nonce().">\n","var indexColumns = ";$f=array();foreach($x
as$w){$Ob=reset($w["columns"]);if($w["type"]!="FULLTEXT"&&$Ob)$f[$Ob]=1;}$f[""]=1;foreach($f
as$z=>$X)json_row($z);echo";\n","selectFieldChange.call(qs(\'#form\')[\'select\']);\n","</script>\n","</div></fieldset>\n";}function
selectCommandPrint(){return!information_schema(DB);}function
selectImportPrint(){return!information_schema(DB);}function
selectEmailPrint($vc,$f){}function
selectColumnsProcess($f,$x){global$nd,$td;$L=array();$qd=array();foreach((array)$_GET["columns"]as$z=>$X){if($X["fun"]=="count"||($X["col"]!=""&&(!$X["fun"]||in_array($X["fun"],$nd)||in_array($X["fun"],$td)))){$L[$z]=apply_sql_function($X["fun"],($X["col"]!=""?idf_escape($X["col"]):"*"));if(!in_array($X["fun"],$td))$qd[]=$L[$z];}}return
array($L,$qd);}function
selectSearchProcess($p,$x){global$g,$m;$I=array();foreach($x
as$t=>$w){if($w["type"]=="FULLTEXT"&&$_GET["fulltext"][$t]!="")$I[]="MATCH (".implode(", ",array_map(\'idf_escape\',$w["columns"])).") AGAINST (".q($_GET["fulltext"][$t]).(isset($_GET["boolean"][$t])?" IN BOOLEAN MODE":"").")";}foreach((array)$_GET["where"]as$z=>$X){if("$X[col]$X[val]"!=""&&in_array($X["op"],$this->operators)){$ig="";$ub=" $X[op]";if(preg_match(\'~IN$~\',$X["op"])){$Jd=process_length($X["val"]);$ub.=" ".($Jd!=""?$Jd:"(NULL)");}elseif($X["op"]=="SQL")$ub=" $X[val]";elseif($X["op"]=="LIKE %%")$ub=" LIKE ".$this->processInput($p[$X["col"]],"%$X[val]%");elseif($X["op"]=="ILIKE %%")$ub=" ILIKE ".$this->processInput($p[$X["col"]],"%$X[val]%");elseif($X["op"]=="FIND_IN_SET"){$ig="$X[op](".q($X["val"]).", ";$ub=")";}elseif(!preg_match(\'~NULL$~\',$X["op"]))$ub.=" ".$this->processInput($p[$X["col"]],$X["val"]);if($X["col"]!="")$I[]=$ig.$m->convertSearch(idf_escape($X["col"]),$X,$p[$X["col"]]).$ub;else{$nb=array();foreach($p
as$D=>$o){if((preg_match(\'~^[-\d.\'.(preg_match(\'~IN$~\',$X["op"])?\',\':\'\').\']+$~\',$X["val"])||!preg_match(\'~\'.number_type().\'|bit~\',$o["type"]))&&(!preg_match("~[\x80-\xFF]~",$X["val"])||preg_match(\'~char|text|enum|set~\',$o["type"]))&&(!preg_match(\'~date|timestamp~\',$o["type"])||preg_match(\'~^\d+-\d+-\d+~\',$X["val"])))$nb[]=$ig.$m->convertSearch(idf_escape($D),$X,$o).$ub;}$I[]=($nb?"(".implode(" OR ",$nb).")":"1 = 0");}}}return$I;}function
selectOrderProcess($p,$x){$I=array();foreach((array)$_GET["order"]as$z=>$X){if($X!="")$I[]=(preg_match(\'~^((COUNT\(DISTINCT |[A-Z0-9_]+\()(`(?:[^`]|``)+`|"(?:[^"]|"")+")\)|COUNT\(\*\))$~\',$X)?$X:idf_escape($X)).(isset($_GET["desc"][$z])?" DESC":"");}return$I;}function
selectLimitProcess(){return(isset($_GET["limit"])?$_GET["limit"]:"50");}function
selectLengthProcess(){return(isset($_GET["text_length"])?$_GET["text_length"]:"100");}function
selectEmailProcess($Z,$gd){return
false;}function
selectQueryBuild($L,$Z,$qd,$zf,$_,$E){return"";}function
messageQuery($G,$di,$Rc=false){global$y,$m;restart_session();$Ad=&get_session("queries");if(!$Ad[$_GET["db"]])$Ad[$_GET["db"]]=array();if(strlen($G)>1e6)$G=preg_replace(\'~[\x80-\xFF]+$~\',\'\',substr($G,0,1e6))."\n";$Ad[$_GET["db"]][]=array($G,time(),$di);$_h="sql-".count($Ad[$_GET["db"]]);$I="<a href=\'#$_h\' class=\'toggle\'>".\'SQL command\'."</a>\n";if(!$Rc&&($bj=$m->warnings())){$u="warnings-".count($Ad[$_GET["db"]]);$I="<a href=\'#$u\' class=\'toggle\'>".\'Warnings\'."</a>, $I<div id=\'$u\' class=\'hidden\'>\n$bj</div>\n";}return" <span class=\'time\'>".@date("H:i:s")."</span>"." $I<div id=\'$_h\' class=\'hidden\'><pre><code class=\'jush-$y\'>".shorten_utf8($G,1000)."</code></pre>".($di?" <span class=\'time\'>($di)</span>":\'\').(support("sql")?\'<p><a href="\'.h(str_replace("db=".urlencode(DB),"db=".urlencode($_GET["db"]),ME).\'sql=&history=\'.(count($Ad[$_GET["db"]])-1)).\'">\'.\'Edit\'.\'</a>\':\'\').\'</div>\';}function
editRowPrint($Q,$p,$J,$Ii){}function
editFunctions($o){global$qc;$I=($o["null"]?"NULL/":"");$Ii=isset($_GET["select"])||where($_GET);foreach($qc
as$z=>$nd){if(!$z||(!isset($_GET["call"])&&$Ii)){foreach($nd
as$Zf=>$X){if(!$Zf||preg_match("~$Zf~",$o["type"]))$I.="/$X";}}if($z&&!preg_match(\'~set|blob|bytea|raw|file|bool~\',$o["type"]))$I.="/SQL";}if($o["auto_increment"]&&!$Ii)$I=\'Auto Increment\';return
explode("/",$I);}function
editInput($Q,$o,$Ha,$Y){if($o["type"]=="enum")return(isset($_GET["select"])?"<label><input type=\'radio\'$Ha value=\'-1\' checked><i>".\'original\'."</i></label> ":"").($o["null"]?"<label><input type=\'radio\'$Ha value=\'\'".($Y!==null||isset($_GET["select"])?"":" checked")."><i>NULL</i></label> ":"").enum_input("radio",$Ha,$o,$Y,0);return"";}function
editHint($Q,$o,$Y){return"";}function
processInput($o,$Y,$s=""){if($s=="SQL")return$Y;$D=$o["field"];$I=q($Y);if(preg_match(\'~^(now|getdate|uuid)$~\',$s))$I="$s()";elseif(preg_match(\'~^current_(date|timestamp)$~\',$s))$I=$s;elseif(preg_match(\'~^([+-]|\|\|)$~\',$s))$I=idf_escape($D)." $s $I";elseif(preg_match(\'~^[+-] interval$~\',$s))$I=idf_escape($D)." $s ".(preg_match("~^(\\d+|\'[0-9.: -]\') [A-Z_]+\$~i",$Y)?$Y:$I);elseif(preg_match(\'~^(addtime|subtime|concat)$~\',$s))$I="$s(".idf_escape($D).", $I)";elseif(preg_match(\'~^(md5|sha1|password|encrypt)$~\',$s))$I="$s($I)";return
unconvert_field($o,$I);}function
dumpOutput(){$I=array(\'text\'=>\'open\',\'file\'=>\'save\');if(function_exists(\'gzencode\'))$I[\'gz\']=\'gzip\';return$I;}function
dumpFormat(){return
array(\'sql\'=>\'SQL\',\'csv\'=>\'CSV,\',\'csv;\'=>\'CSV;\',\'tsv\'=>\'TSV\');}function
dumpDatabase($l){}function
dumpTable($Q,$Hh,$ce=0){if($_POST["format"]!="sql"){echo"\xef\xbb\xbf";if($Hh)dump_csv(array_keys(fields($Q)));}else{if($ce==2){$p=array();foreach(fields($Q)as$D=>$o)$p[]=idf_escape($D)." $o[full_type]";$i="CREATE TABLE ".table($Q)." (".implode(", ",$p).")";}else$i=create_sql($Q,$_POST["auto_increment"],$Hh);set_utf8mb4($i);if($Hh&&$i){if($Hh=="DROP+CREATE"||$ce==1)echo"DROP ".($ce==2?"VIEW":"TABLE")." IF EXISTS ".table($Q).";\n";if($ce==1)$i=remove_definer($i);echo"$i;\n\n";}}}function
dumpData($Q,$Hh,$G){global$g,$y;$Ee=($y=="sqlite"?0:1048576);if($Hh){if($_POST["format"]=="sql"){if($Hh=="TRUNCATE+INSERT")echo
truncate_sql($Q).";\n";$p=fields($Q);}$H=$g->query($G,1);if($H){$Vd="";$Va="";$he=array();$Jh="";$Uc=($Q!=\'\'?\'fetch_assoc\':\'fetch_row\');while($J=$H->$Uc()){if(!$he){$Ti=array();foreach($J
as$X){$o=$H->fetch_field();$he[]=$o->name;$z=idf_escape($o->name);$Ti[]="$z = VALUES($z)";}$Jh=($Hh=="INSERT+UPDATE"?"\nON DUPLICATE KEY UPDATE ".implode(", ",$Ti):"").";\n";}if($_POST["format"]!="sql"){if($Hh=="table"){dump_csv($he);$Hh="INSERT";}dump_csv($J);}else{if(!$Vd)$Vd="INSERT INTO ".table($Q)." (".implode(", ",array_map(\'idf_escape\',$he)).") VALUES";foreach($J
as$z=>$X){$o=$p[$z];$J[$z]=($X!==null?unconvert_field($o,preg_match(number_type(),$o["type"])&&!preg_match(\'~\[~\',$o["full_type"])&&is_numeric($X)?$X:q(($X===false?0:$X))):"NULL");}$Xg=($Ee?"\n":" ")."(".implode(",\t",$J).")";if(!$Va)$Va=$Vd.$Xg;elseif(strlen($Va)+4+strlen($Xg)+strlen($Jh)<$Ee)$Va.=",$Xg";else{echo$Va.$Jh;$Va=$Vd.$Xg;}}}if($Va)echo$Va.$Jh;}elseif($_POST["format"]=="sql")echo"-- ".str_replace("\n"," ",$g->error)."\n";}}function
dumpFilename($Fd){return
friendly_url($Fd!=""?$Fd:(SERVER!=""?SERVER:"localhost"));}function
dumpHeaders($Fd,$Se=false){$Jf=$_POST["output"];$Mc=(preg_match(\'~sql~\',$_POST["format"])?"sql":($Se?"tar":"csv"));header("Content-Type: ".($Jf=="gz"?"application/x-gzip":($Mc=="tar"?"application/x-tar":($Mc=="sql"||$Jf!="file"?"text/plain":"text/csv")."; charset=utf-8")));if($Jf=="gz")ob_start(\'ob_gzencode\',1e6);return$Mc;}function
importServerPath(){return"adminer.sql";}function
homepage(){echo\'<p class="links">\'.($_GET["ns"]==""&&support("database")?\'<a href="\'.h(ME).\'database=">\'.\'Alter database\'."</a>\n":""),(support("scheme")?"<a href=\'".h(ME)."scheme=\'>".($_GET["ns"]!=""?\'Alter schema\':\'Create schema\')."</a>\n":""),($_GET["ns"]!==""?\'<a href="\'.h(ME).\'schema=">\'.\'Database schema\'."</a>\n":""),(support("privileges")?"<a href=\'".h(ME)."privileges=\'>".\'Privileges\'."</a>\n":"");return
true;}function
navigation($Re){global$ia,$y,$ic,$g;echo\'<h1>
\',$this->name(),\' <span class="version">\',$ia,\'</span>
<a href="https://www.adminer.org/#download"\',target_blank(),\' id="version">\',(version_compare($ia,$_COOKIE["adminer_version"])<0?h($_COOKIE["adminer_version"]):""),\'</a>
</h1>
\';if($Re=="auth"){$Jf="";foreach((array)$_SESSION["pwds"]as$Vi=>$lh){foreach($lh
as$M=>$Qi){foreach($Qi
as$V=>$F){if($F!==null){$Ub=$_SESSION["db"][$Vi][$M][$V];foreach(($Ub?array_keys($Ub):array(""))as$l)$Jf.="<li><a href=\'".h(auth_url($Vi,$M,$V,$l))."\'>($ic[$Vi]) ".h($V.($M!=""?"@".$this->serverName($M):"").($l!=""?" - $l":""))."</a>\n";}}}}if($Jf)echo"<ul id=\'logins\'>\n$Jf</ul>\n".script("mixin(qs(\'#logins\'), {onmouseover: menuOver, onmouseout: menuOut});");}else{$S=array();if($_GET["ns"]!==""&&!$Re&&DB!=""){$g->select_db(DB);$S=table_status(\'\',true);}echo
script_src(preg_replace("~\\?.*~","",ME)."?file=jush.js&version=4.8.1");if(support("sql")){echo\'<script\',nonce(),\'>
\';if($S){$we=array();foreach($S
as$Q=>$T)$we[]=preg_quote($Q,\'/\');echo"var jushLinks = { $y: [ \'".js_escape(ME).(support("table")?"table=":"select=")."\$&\', /\\b(".implode("|",$we).")\\b/g ] };\n";foreach(array("bac","bra","sqlite_quo","mssql_bra")as$X)echo"jushLinks.$X = jushLinks.$y;\n";}$kh=$g->server_info;echo\'bodyLoad(\\'\',(is_object($g)?preg_replace(\'~^(\d\.?\d).*~s\',\'\1\',$kh):""),\'\\'\',(preg_match(\'~MariaDB~\',$kh)?", true":""),\');
</script>
\';}$this->databasesPrint($Re);if(DB==""||!$Re){echo"<p class=\'links\'>".(support("sql")?"<a href=\'".h(ME)."sql=\'".bold(isset($_GET["sql"])&&!isset($_GET["import"])).">".\'SQL command\'."</a>\n<a href=\'".h(ME)."import=\'".bold(isset($_GET["import"])).">".\'Import\'."</a>\n":"")."";if(support("dump"))echo"<a href=\'".h(ME)."dump=".urlencode(isset($_GET["table"])?$_GET["table"]:$_GET["select"])."\' id=\'dump\'".bold(isset($_GET["dump"])).">".\'Export\'."</a>\n";}if($_GET["ns"]!==""&&!$Re&&DB!=""){echo\'<a href="\'.h(ME).\'create="\'.bold($_GET["create"]==="").">".\'Create table\'."</a>\n";if(!$S)echo"<p class=\'message\'>".\'No tables.\'."\n";else$this->tablesPrint($S);}}}function
databasesPrint($Re){global$b,$g;$k=$this->databases();if(DB&&$k&&!in_array(DB,$k))array_unshift($k,DB);echo\'<form action="">
<p id="dbs">
\';hidden_fields_get();$Sb=script("mixin(qsl(\'select\'), {onmousedown: dbMouseDown, onchange: dbChange});");echo"<span title=\'".\'database\'."\'>".\'DB\'."</span>: ".($k?"<select name=\'db\'>".optionlist(array(""=>"")+$k,DB)."</select>$Sb":"<input name=\'db\' value=\'".h(DB)."\' autocapitalize=\'off\'>\n"),"<input type=\'submit\' value=\'".\'Use\'."\'".($k?" class=\'hidden\'":"").">\n";if(support("scheme")){if($Re!="db"&&DB!=""&&$g->select_db(DB)){echo"<br>".\'Schema\'.": <select name=\'ns\'>".optionlist(array(""=>"")+$b->schemas(),$_GET["ns"])."</select>$Sb";if($_GET["ns"]!="")set_schema($_GET["ns"]);}}foreach(array("import","sql","schema","dump","privileges")as$X){if(isset($_GET[$X])){echo"<input type=\'hidden\' name=\'$X\' value=\'\'>";break;}}echo"</p></form>\n";}function
tablesPrint($S){echo"<ul id=\'tables\'>".script("mixin(qs(\'#tables\'), {onmouseover: menuOver, onmouseout: menuOut});");foreach($S
as$Q=>$O){$D=$this->tableName($O);if($D!=""){echo\'<li><a href="\'.h(ME).\'select=\'.urlencode($Q).\'"\'.bold($_GET["select"]==$Q||$_GET["edit"]==$Q,"select")." title=\'".\'Select data\'."\'>".\'select\'."</a> ",(support("table")||support("indexes")?\'<a href="\'.h(ME).\'table=\'.urlencode($Q).\'"\'.bold(in_array($Q,array($_GET["table"],$_GET["create"],$_GET["indexes"],$_GET["foreign"],$_GET["trigger"])),(is_view($O)?"view":"structure"))." title=\'".\'Show structure\'."\'>$D</a>":"<span>$D</span>")."\n";}}echo"</ul>\n";}}$b=(function_exists(\'adminer_object\')?adminer_object():new
Adminer);$ic=array("server"=>"MySQL")+$ic;if(!defined("DRIVER")){define("DRIVER","server");if(extension_loaded("mysqli")){class
Min_DB
extends
MySQLi{var$extension="MySQLi";function
__construct(){parent::init();}function
connect($M="",$V="",$F="",$j=null,$dg=null,$th=null){global$b;mysqli_report(MYSQLI_REPORT_OFF);list($Dd,$dg)=explode(":",$M,2);$Bh=$b->connectSsl();if($Bh)$this->ssl_set($Bh[\'key\'],$Bh[\'cert\'],$Bh[\'ca\'],\'\',\'\');$I=@$this->real_connect(($M!=""?$Dd:ini_get("mysqli.default_host")),($M.$V!=""?$V:ini_get("mysqli.default_user")),($M.$V.$F!=""?$F:ini_get("mysqli.default_pw")),$j,(is_numeric($dg)?$dg:ini_get("mysqli.default_port")),(!is_numeric($dg)?$dg:$th),($Bh?64:0));$this->options(MYSQLI_OPT_LOCAL_INFILE,false);return$I;}function
set_charset($Za){if(parent::set_charset($Za))return
true;parent::set_charset(\'utf8\');return$this->query("SET NAMES $Za");}function
result($G,$o=0){$H=$this->query($G);if(!$H)return
false;$J=$H->fetch_array();return$J[$o];}function
quote($P){return"\'".$this->escape_string($P)."\'";}}}elseif(extension_loaded("mysql")&&!((ini_bool("sql.safe_mode")||ini_bool("mysql.allow_local_infile"))&&extension_loaded("pdo_mysql"))){class
Min_DB{var$extension="MySQL",$server_info,$affected_rows,$errno,$error,$_link,$_result;function
connect($M,$V,$F){if(ini_bool("mysql.allow_local_infile")){$this->error=sprintf(\'Disable %s or enable %s or %s extensions.\',"\'mysql.allow_local_infile\'","MySQLi","PDO_MySQL");return
false;}$this->_link=@mysql_connect(($M!=""?$M:ini_get("mysql.default_host")),("$M$V"!=""?$V:ini_get("mysql.default_user")),("$M$V$F"!=""?$F:ini_get("mysql.default_password")),true,131072);if($this->_link)$this->server_info=mysql_get_server_info($this->_link);else$this->error=mysql_error();return(bool)$this->_link;}function
set_charset($Za){if(function_exists(\'mysql_set_charset\')){if(mysql_set_charset($Za,$this->_link))return
true;mysql_set_charset(\'utf8\',$this->_link);}return$this->query("SET NAMES $Za");}function
quote($P){return"\'".mysql_real_escape_string($P,$this->_link)."\'";}function
select_db($j){return
mysql_select_db($j,$this->_link);}function
query($G,$Bi=false){$H=@($Bi?mysql_unbuffered_query($G,$this->_link):mysql_query($G,$this->_link));$this->error="";if(!$H){$this->errno=mysql_errno($this->_link);$this->error=mysql_error($this->_link);return
false;}if($H===true){$this->affected_rows=mysql_affected_rows($this->_link);$this->info=mysql_info($this->_link);return
true;}return
new
Min_Result($H);}function
multi_query($G){return$this->_result=$this->query($G);}function
store_result(){return$this->_result;}function
next_result(){return
false;}function
result($G,$o=0){$H=$this->query($G);if(!$H||!$H->num_rows)return
false;return
mysql_result($H->_result,0,$o);}}class
Min_Result{var$num_rows,$_result,$_offset=0;function
__construct($H){$this->_result=$H;$this->num_rows=mysql_num_rows($H);}function
fetch_assoc(){return
mysql_fetch_assoc($this->_result);}function
fetch_row(){return
mysql_fetch_row($this->_result);}function
fetch_field(){$I=mysql_fetch_field($this->_result,$this->_offset++);$I->orgtable=$I->table;$I->orgname=$I->name;$I->charsetnr=($I->blob?63:0);return$I;}function
__destruct(){mysql_free_result($this->_result);}}}elseif(extension_loaded("pdo_mysql")){class
Min_DB
extends
Min_PDO{var$extension="PDO_MySQL";function
connect($M,$V,$F){global$b;$xf=array(PDO::MYSQL_ATTR_LOCAL_INFILE=>false);$Bh=$b->connectSsl();if($Bh){if(!empty($Bh[\'key\']))$xf[PDO::MYSQL_ATTR_SSL_KEY]=$Bh[\'key\'];if(!empty($Bh[\'cert\']))$xf[PDO::MYSQL_ATTR_SSL_CERT]=$Bh[\'cert\'];if(!empty($Bh[\'ca\']))$xf[PDO::MYSQL_ATTR_SSL_CA]=$Bh[\'ca\'];}$this->dsn("mysql:charset=utf8;host=".str_replace(":",";unix_socket=",preg_replace(\'~:(\d)~\',\';port=\1\',$M)),$V,$F,$xf);return
true;}function
set_charset($Za){$this->query("SET NAMES $Za");}function
select_db($j){return$this->query("USE ".idf_escape($j));}function
query($G,$Bi=false){$this->pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,!$Bi);return
parent::query($G,$Bi);}}}class
Min_Driver
extends
Min_SQL{function
insert($Q,$N){return($N?parent::insert($Q,$N):queries("INSERT INTO ".table($Q)." ()\nVALUES ()"));}function
insertUpdate($Q,$K,$kg){$f=array_keys(reset($K));$ig="INSERT INTO ".table($Q)." (".implode(", ",$f).") VALUES\n";$Ti=array();foreach($f
as$z)$Ti[$z]="$z = VALUES($z)";$Jh="\nON DUPLICATE KEY UPDATE ".implode(", ",$Ti);$Ti=array();$te=0;foreach($K
as$N){$Y="(".implode(", ",$N).")";if($Ti&&(strlen($ig)+$te+strlen($Y)+strlen($Jh)>1e6)){if(!queries($ig.implode(",\n",$Ti).$Jh))return
false;$Ti=array();$te=0;}$Ti[]=$Y;$te+=strlen($Y)+2;}return
queries($ig.implode(",\n",$Ti).$Jh);}function
slowQuery($G,$ei){if(min_version(\'5.7.8\',\'10.1.2\')){if(preg_match(\'~MariaDB~\',$this->_conn->server_info))return"SET STATEMENT max_statement_time=$ei FOR $G";elseif(preg_match(\'~^(SELECT\b)(.+)~is\',$G,$C))return"$C[1] /*+ MAX_EXECUTION_TIME(".($ei*1000).") */ $C[2]";}}function
convertSearch($v,$X,$o){return(preg_match(\'~char|text|enum|set~\',$o["type"])&&!preg_match("~^utf8~",$o["collation"])&&preg_match(\'~[\x80-\xFF]~\',$X[\'val\'])?"CONVERT($v USING ".charset($this->_conn).")":$v);}function
warnings(){$H=$this->_conn->query("SHOW WARNINGS");if($H&&$H->num_rows){ob_start();select($H);return
ob_get_clean();}}function
tableHelp($D){$_e=preg_match(\'~MariaDB~\',$this->_conn->server_info);if(information_schema(DB))return
strtolower(($_e?"information-schema-$D-table/":str_replace("_","-",$D)."-table.html"));if(DB=="mysql")return($_e?"mysql$D-table/":"system-database.html");}}function
idf_escape($v){return"`".str_replace("`","``",$v)."`";}function
table($v){return
idf_escape($v);}function
connect(){global$b,$U,$Gh;$g=new
Min_DB;$Kb=$b->credentials();if($g->connect($Kb[0],$Kb[1],$Kb[2])){$g->set_charset(charset($g));$g->query("SET sql_quote_show_create = 1, autocommit = 1");if(min_version(\'5.7.8\',10.2,$g)){$Gh[\'Strings\'][]="json";$U["json"]=4294967295;}return$g;}$I=$g->error;if(function_exists(\'iconv\')&&!is_utf8($I)&&strlen($Xg=iconv("windows-1250","utf-8",$I))>strlen($I))$I=$Xg;return$I;}function
get_databases($dd){$I=get_session("dbs");if($I===null){$G=(min_version(5)?"SELECT SCHEMA_NAME FROM information_schema.SCHEMATA ORDER BY SCHEMA_NAME":"SHOW DATABASES");$I=($dd?slow_query($G):get_vals($G));restart_session();set_session("dbs",$I);stop_session();}return$I;}function
limit($G,$Z,$_,$hf=0,$hh=" "){return" $G$Z".($_!==null?$hh."LIMIT $_".($hf?" OFFSET $hf":""):"");}function
limit1($Q,$G,$Z,$hh="\n"){return
limit($G,$Z,1,0,$hh);}function
db_collation($l,$lb){global$g;$I=null;$i=$g->result("SHOW CREATE DATABASE ".idf_escape($l),1);if(preg_match(\'~ COLLATE ([^ ]+)~\',$i,$C))$I=$C[1];elseif(preg_match(\'~ CHARACTER SET ([^ ]+)~\',$i,$C))$I=$lb[$C[1]][-1];return$I;}function
engines(){$I=array();foreach(get_rows("SHOW ENGINES")as$J){if(preg_match("~YES|DEFAULT~",$J["Support"]))$I[]=$J["Engine"];}return$I;}function
logged_user(){global$g;return$g->result("SELECT USER()");}function
tables_list(){return
get_key_vals(min_version(5)?"SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME":"SHOW TABLES");}function
count_tables($k){$I=array();foreach($k
as$l)$I[$l]=count(get_vals("SHOW TABLES IN ".idf_escape($l)));return$I;}function
table_status($D="",$Sc=false){$I=array();foreach(get_rows($Sc&&min_version(5)?"SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ".($D!=""?"AND TABLE_NAME = ".q($D):"ORDER BY Name"):"SHOW TABLE STATUS".($D!=""?" LIKE ".q(addcslashes($D,"%_\\")):""))as$J){if($J["Engine"]=="InnoDB")$J["Comment"]=preg_replace(\'~(?:(.+); )?InnoDB free: .*~\',\'\1\',$J["Comment"]);if(!isset($J["Engine"]))$J["Comment"]="";if($D!="")return$J;$I[$J["Name"]]=$J;}return$I;}function
is_view($R){return$R["Engine"]===null;}function
fk_support($R){return
preg_match(\'~InnoDB|IBMDB2I~i\',$R["Engine"])||(preg_match(\'~NDB~i\',$R["Engine"])&&min_version(5.6));}function
fields($Q){$I=array();foreach(get_rows("SHOW FULL COLUMNS FROM ".table($Q))as$J){preg_match(\'~^([^( ]+)(?:\((.+)\))?( unsigned)?( zerofill)?$~\',$J["Type"],$C);$I[$J["Field"]]=array("field"=>$J["Field"],"full_type"=>$J["Type"],"type"=>$C[1],"length"=>$C[2],"unsigned"=>ltrim($C[3].$C[4]),"default"=>($J["Default"]!=""||preg_match("~char|set~",$C[1])?(preg_match(\'~text~\',$C[1])?stripslashes(preg_replace("~^\'(.*)\'\$~",\'\1\',$J["Default"])):$J["Default"]):null),"null"=>($J["Null"]=="YES"),"auto_increment"=>($J["Extra"]=="auto_increment"),"on_update"=>(preg_match(\'~^on update (.+)~i\',$J["Extra"],$C)?$C[1]:""),"collation"=>$J["Collation"],"privileges"=>array_flip(preg_split(\'~, *~\',$J["Privileges"])),"comment"=>$J["Comment"],"primary"=>($J["Key"]=="PRI"),"generated"=>preg_match(\'~^(VIRTUAL|PERSISTENT|STORED)~\',$J["Extra"]),);}return$I;}function
indexes($Q,$h=null){$I=array();foreach(get_rows("SHOW INDEX FROM ".table($Q),$h)as$J){$D=$J["Key_name"];$I[$D]["type"]=($D=="PRIMARY"?"PRIMARY":($J["Index_type"]=="FULLTEXT"?"FULLTEXT":($J["Non_unique"]?($J["Index_type"]=="SPATIAL"?"SPATIAL":"INDEX"):"UNIQUE")));$I[$D]["columns"][]=$J["Column_name"];$I[$D]["lengths"][]=($J["Index_type"]=="SPATIAL"?null:$J["Sub_part"]);$I[$D]["descs"][]=null;}return$I;}function
foreign_keys($Q){global$g,$pf;static$Zf=\'(?:`(?:[^`]|``)+`|"(?:[^"]|"")+")\';$I=array();$Ib=$g->result("SHOW CREATE TABLE ".table($Q),1);if($Ib){preg_match_all("~CONSTRAINT ($Zf) FOREIGN KEY ?\\(((?:$Zf,? ?)+)\\) REFERENCES ($Zf)(?:\\.($Zf))? \\(((?:$Zf,? ?)+)\\)(?: ON DELETE ($pf))?(?: ON UPDATE ($pf))?~",$Ib,$Ce,PREG_SET_ORDER);foreach($Ce
as$C){preg_match_all("~$Zf~",$C[2],$vh);preg_match_all("~$Zf~",$C[5],$Wh);$I[idf_unescape($C[1])]=array("db"=>idf_unescape($C[4]!=""?$C[3]:$C[4]),"table"=>idf_unescape($C[4]!=""?$C[4]:$C[3]),"source"=>array_map(\'idf_unescape\',$vh[0]),"target"=>array_map(\'idf_unescape\',$Wh[0]),"on_delete"=>($C[6]?$C[6]:"RESTRICT"),"on_update"=>($C[7]?$C[7]:"RESTRICT"),);}}return$I;}function
view($D){global$g;return
array("select"=>preg_replace(\'~^(?:[^`]|`[^`]*`)*\s+AS\s+~isU\',\'\',$g->result("SHOW CREATE VIEW ".table($D),1)));}function
collations(){$I=array();foreach(get_rows("SHOW COLLATION")as$J){if($J["Default"])$I[$J["Charset"]][-1]=$J["Collation"];else$I[$J["Charset"]][]=$J["Collation"];}ksort($I);foreach($I
as$z=>$X)asort($I[$z]);return$I;}function
information_schema($l){return(min_version(5)&&$l=="information_schema")||(min_version(5.5)&&$l=="performance_schema");}function
error(){global$g;return
h(preg_replace(\'~^You have an error.*syntax to use~U\',"Syntax error",$g->error));}function
create_database($l,$d){return
queries("CREATE DATABASE ".idf_escape($l).($d?" COLLATE ".q($d):""));}function
drop_databases($k){$I=apply_queries("DROP DATABASE",$k,\'idf_escape\');restart_session();set_session("dbs",null);return$I;}function
rename_database($D,$d){$I=false;if(create_database($D,$d)){$S=array();$Yi=array();foreach(tables_list()as$Q=>$T){if($T==\'VIEW\')$Yi[]=$Q;else$S[]=$Q;}$I=(!$S&&!$Yi)||move_tables($S,$Yi,$D);drop_databases($I?array(DB):array());}return$I;}function
auto_increment(){$La=" PRIMARY KEY";if($_GET["create"]!=""&&$_POST["auto_increment_col"]){foreach(indexes($_GET["create"])as$w){if(in_array($_POST["fields"][$_POST["auto_increment_col"]]["orig"],$w["columns"],true)){$La="";break;}if($w["type"]=="PRIMARY")$La=" UNIQUE";}}return" AUTO_INCREMENT$La";}function
alter_table($Q,$D,$p,$fd,$rb,$yc,$d,$Ka,$Tf){$c=array();foreach($p
as$o)$c[]=($o[1]?($Q!=""?($o[0]!=""?"CHANGE ".idf_escape($o[0]):"ADD"):" ")." ".implode($o[1]).($Q!=""?$o[2]:""):"DROP ".idf_escape($o[0]));$c=array_merge($c,$fd);$O=($rb!==null?" COMMENT=".q($rb):"").($yc?" ENGINE=".q($yc):"").($d?" COLLATE ".q($d):"").($Ka!=""?" AUTO_INCREMENT=$Ka":"");if($Q=="")return
queries("CREATE TABLE ".table($D)." (\n".implode(",\n",$c)."\n)$O$Tf");if($Q!=$D)$c[]="RENAME TO ".table($D);if($O)$c[]=ltrim($O);return($c||$Tf?queries("ALTER TABLE ".table($Q)."\n".implode(",\n",$c).$Tf):true);}function
alter_indexes($Q,$c){foreach($c
as$z=>$X)$c[$z]=($X[2]=="DROP"?"\nDROP INDEX ".idf_escape($X[1]):"\nADD $X[0] ".($X[0]=="PRIMARY"?"KEY ":"").($X[1]!=""?idf_escape($X[1])." ":"")."(".implode(", ",$X[2]).")");return
queries("ALTER TABLE ".table($Q).implode(",",$c));}function
truncate_tables($S){return
apply_queries("TRUNCATE TABLE",$S);}function
drop_views($Yi){return
queries("DROP VIEW ".implode(", ",array_map(\'table\',$Yi)));}function
drop_tables($S){return
queries("DROP TABLE ".implode(", ",array_map(\'table\',$S)));}function
move_tables($S,$Yi,$Wh){global$g;$Jg=array();foreach($S
as$Q)$Jg[]=table($Q)." TO ".idf_escape($Wh).".".table($Q);if(!$Jg||queries("RENAME TABLE ".implode(", ",$Jg))){$Zb=array();foreach($Yi
as$Q)$Zb[table($Q)]=view($Q);$g->select_db($Wh);$l=idf_escape(DB);foreach($Zb
as$D=>$Xi){if(!queries("CREATE VIEW $D AS ".str_replace(" $l."," ",$Xi["select"]))||!queries("DROP VIEW $l.$D"))return
false;}return
true;}return
false;}function
copy_tables($S,$Yi,$Wh){queries("SET sql_mode = \'NO_AUTO_VALUE_ON_ZERO\'");foreach($S
as$Q){$D=($Wh==DB?table("copy_$Q"):idf_escape($Wh).".".table($Q));if(($_POST["overwrite"]&&!queries("\nDROP TABLE IF EXISTS $D"))||!queries("CREATE TABLE $D LIKE ".table($Q))||!queries("INSERT INTO $D SELECT * FROM ".table($Q)))return
false;foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$J){$wi=$J["Trigger"];if(!queries("CREATE TRIGGER ".($Wh==DB?idf_escape("copy_$wi"):idf_escape($Wh).".".idf_escape($wi))." $J[Timing] $J[Event] ON $D FOR EACH ROW\n$J[Statement];"))return
false;}}foreach($Yi
as$Q){$D=($Wh==DB?table("copy_$Q"):idf_escape($Wh).".".table($Q));$Xi=view($Q);if(($_POST["overwrite"]&&!queries("DROP VIEW IF EXISTS $D"))||!queries("CREATE VIEW $D AS $Xi[select]"))return
false;}return
true;}function
trigger($D){if($D=="")return
array();$K=get_rows("SHOW TRIGGERS WHERE `Trigger` = ".q($D));return
reset($K);}function
triggers($Q){$I=array();foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")))as$J)$I[$J["Trigger"]]=array($J["Timing"],$J["Event"]);return$I;}function
trigger_options(){return
array("Timing"=>array("BEFORE","AFTER"),"Event"=>array("INSERT","UPDATE","DELETE"),"Type"=>array("FOR EACH ROW"),);}function
routine($D,$T){global$g,$_c,$Td,$U;$Ba=array("bool","boolean","integer","double precision","real","dec","numeric","fixed","national char","national varchar");$wh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$Ai="((".implode("|",array_merge(array_keys($U),$Ba)).")\\b(?:\\s*\\(((?:[^\'\")]|$_c)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*[\'\"]?([^\'\"\\s,]+)[\'\"]?)?";$Zf="$wh*(".($T=="FUNCTION"?"":$Td).")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$Ai";$i=$g->result("SHOW CREATE $T ".idf_escape($D),2);preg_match("~\\(((?:$Zf\\s*,?)*)\\)\\s*".($T=="FUNCTION"?"RETURNS\\s+$Ai\\s+":"")."(.*)~is",$i,$C);$p=array();preg_match_all("~$Zf\\s*,?~is",$C[1],$Ce,PREG_SET_ORDER);foreach($Ce
as$Nf)$p[]=array("field"=>str_replace("``","`",$Nf[2]).$Nf[3],"type"=>strtolower($Nf[5]),"length"=>preg_replace_callback("~$_c~s",\'normalize_enum\',$Nf[6]),"unsigned"=>strtolower(preg_replace(\'~\s+~\',\' \',trim("$Nf[8] $Nf[7]"))),"null"=>1,"full_type"=>$Nf[4],"inout"=>strtoupper($Nf[1]),"collation"=>strtolower($Nf[9]),);if($T!="FUNCTION")return
array("fields"=>$p,"definition"=>$C[11]);return
array("fields"=>$p,"returns"=>array("type"=>$C[12],"length"=>$C[13],"unsigned"=>$C[15],"collation"=>$C[16]),"definition"=>$C[17],"language"=>"SQL",);}function
routines(){return
get_rows("SELECT ROUTINE_NAME AS SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ".q(DB));}function
routine_languages(){return
array();}function
routine_id($D,$J){return
idf_escape($D);}function
last_id(){global$g;return$g->result("SELECT LAST_INSERT_ID()");}function
explain($g,$G){return$g->query("EXPLAIN ".(min_version(5.1)&&!min_version(5.7)?"PARTITIONS ":"").$G);}function
found_rows($R,$Z){return($Z||$R["Engine"]!="InnoDB"?null:$R["Rows"]);}function
types(){return
array();}function
schemas(){return
array();}function
get_schema(){return"";}function
set_schema($Zg,$h=null){return
true;}function
create_sql($Q,$Ka,$Hh){global$g;$I=$g->result("SHOW CREATE TABLE ".table($Q),1);if(!$Ka)$I=preg_replace(\'~ AUTO_INCREMENT=\d+~\',\'\',$I);return$I;}function
truncate_sql($Q){return"TRUNCATE ".table($Q);}function
use_sql($j){return"USE ".idf_escape($j);}function
trigger_sql($Q){$I="";foreach(get_rows("SHOW TRIGGERS LIKE ".q(addcslashes($Q,"%_\\")),null,"-- ")as$J)$I.="\nCREATE TRIGGER ".idf_escape($J["Trigger"])." $J[Timing] $J[Event] ON ".table($J["Table"])." FOR EACH ROW\n$J[Statement];;\n";return$I;}function
show_variables(){return
get_key_vals("SHOW VARIABLES");}function
process_list(){return
get_rows("SHOW FULL PROCESSLIST");}function
show_status(){return
get_key_vals("SHOW STATUS");}function
convert_field($o){if(preg_match("~binary~",$o["type"]))return"HEX(".idf_escape($o["field"]).")";if($o["type"]=="bit")return"BIN(".idf_escape($o["field"])." + 0)";if(preg_match("~geometry|point|linestring|polygon~",$o["type"]))return(min_version(8)?"ST_":"")."AsWKT(".idf_escape($o["field"]).")";}function
unconvert_field($o,$I){if(preg_match("~binary~",$o["type"]))$I="UNHEX($I)";if($o["type"]=="bit")$I="CONV($I, 2, 10) + 0";if(preg_match("~geometry|point|linestring|polygon~",$o["type"]))$I=(min_version(8)?"ST_":"")."GeomFromText($I, SRID($o[field]))";return$I;}function
support($Tc){return!preg_match("~scheme|sequence|type|view_trigger|materializedview".(min_version(8)?"":"|descidx".(min_version(5.1)?"":"|event|partitioning".(min_version(5)?"":"|routine|trigger|view")))."~",$Tc);}function
kill_process($X){return
queries("KILL ".number($X));}function
connection_id(){return"SELECT CONNECTION_ID()";}function
max_connections(){global$g;return$g->result("SELECT @@max_connections");}function
driver_config(){$U=array();$Gh=array();foreach(array(\'Numbers\'=>array("tinyint"=>3,"smallint"=>5,"mediumint"=>8,"int"=>10,"bigint"=>20,"decimal"=>66,"float"=>12,"double"=>21),\'Date and time\'=>array("date"=>10,"datetime"=>19,"timestamp"=>19,"time"=>10,"year"=>4),\'Strings\'=>array("char"=>255,"varchar"=>65535,"tinytext"=>255,"text"=>65535,"mediumtext"=>16777215,"longtext"=>4294967295),\'Lists\'=>array("enum"=>65535,"set"=>64),\'Binary\'=>array("bit"=>20,"binary"=>255,"varbinary"=>65535,"tinyblob"=>255,"blob"=>65535,"mediumblob"=>16777215,"longblob"=>4294967295),\'Geometry\'=>array("geometry"=>0,"point"=>0,"linestring"=>0,"polygon"=>0,"multipoint"=>0,"multilinestring"=>0,"multipolygon"=>0,"geometrycollection"=>0),)as$z=>$X){$U+=$X;$Gh[$z]=array_keys($X);}return
array(\'possible_drivers\'=>array("MySQLi","MySQL","PDO_MySQL"),\'jush\'=>"sql",\'types\'=>$U,\'structured_types\'=>$Gh,\'unsigned\'=>array("unsigned","zerofill","unsigned zerofill"),\'operators\'=>array("=","<",">","<=",">=","!=","LIKE","LIKE %%","REGEXP","IN","FIND_IN_SET","IS NULL","NOT LIKE","NOT REGEXP","NOT IN","IS NOT NULL","SQL"),\'functions\'=>array("char_length","date","from_unixtime","lower","round","floor","ceil","sec_to_time","time_to_sec","upper"),\'grouping\'=>array("avg","count","count distinct","group_concat","max","min","sum"),\'edit_functions\'=>array(array("char"=>"md5/sha1/password/encrypt/uuid","binary"=>"md5/sha1","date|time"=>"now",),array(number_type()=>"+/-","date"=>"+ interval/- interval","time"=>"addtime/subtime","char|text"=>"concat",)),);}}$vb=driver_config();$hg=$vb[\'possible_drivers\'];$y=$vb[\'jush\'];$U=$vb[\'types\'];$Gh=$vb[\'structured_types\'];$Hi=$vb[\'unsigned\'];$uf=$vb[\'operators\'];$nd=$vb[\'functions\'];$td=$vb[\'grouping\'];$qc=$vb[\'edit_functions\'];if($b->operators===null)$b->operators=$uf;define("SERVER",$_GET[DRIVER]);define("DB",$_GET["db"]);define("ME",preg_replace(\'~\?.*~\',\'\',relative_uri()).\'?\'.(sid()?SID.\'&\':\'\').(SERVER!==null?DRIVER."=".urlencode(SERVER).\'&\':\'\').(isset($_GET["username"])?"username=".urlencode($_GET["username"]).\'&\':\'\').(DB!=""?\'db=\'.urlencode(DB).\'&\'.(isset($_GET["ns"])?"ns=".urlencode($_GET["ns"])."&":""):\'\'));$ia="4.8.1";function
page_header($gi,$n="",$Ua=array(),$hi=""){global$ca,$ia,$b,$ic,$y;page_headers();if(is_ajax()&&$n){page_messages($n);exit;}$ii=$gi.($hi!=""?": $hi":"");$ji=strip_tags($ii.(SERVER!=""&&SERVER!="localhost"?h(" - ".SERVER):"")." - ".$b->name());echo\'<!DOCTYPE html>
<html lang="en" dir="ltr">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="robots" content="noindex">
<title>\',$ji,\'</title>
<link rel="stylesheet" type="text/css" href="\',h(preg_replace("~\\?.*~","",ME)."?file=default.css&version=4.8.1"),\'">
\',script_src(preg_replace("~\\?.*~","",ME)."?file=functions.js&version=4.8.1");if($b->head()){echo\'<link rel="shortcut icon" type="image/x-icon" href="\',h(preg_replace("~\\?.*~","",ME)."?file=favicon.ico&version=4.8.1"),\'">
<link rel="apple-touch-icon" href="\',h(preg_replace("~\\?.*~","",ME)."?file=favicon.ico&version=4.8.1"),\'">
\';foreach($b->css()as$Mb){echo\'<link rel="stylesheet" type="text/css" href="\',h($Mb),\'">
\';}}echo\'
<body class="ltr nojs">
\';$q=get_temp_dir()."/adminer.version";if(!$_COOKIE["adminer_version"]&&function_exists(\'openssl_verify\')&&file_exists($q)&&filemtime($q)+86400>time()){$Wi=unserialize(file_get_contents($q));$tg="-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK
RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs
DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8
h7FIx3jEaw5ckVPVTeo5JRm/1DZzJxjyDenXvBQ/6o9DgZKeNDgxwKzH+sw9/YCO
jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B
nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ
fQIDAQAB
-----END PUBLIC KEY-----
";if(openssl_verify($Wi["version"],base64_decode($Wi["signature"]),$tg)==1)$_COOKIE["adminer_version"]=$Wi["version"];}echo\'<script\',nonce(),\'>
mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick\',(isset($_COOKIE["adminer_version"])?"":", onload: partial(verifyVersion, \'$ia\', \'".js_escape(ME)."\', \'".get_token()."\')");?>});
document.body.className = document.body.className.replace(/ nojs/, \' js\');
var offlineMessage = \'<?php echo
js_escape(\'You are offline.\'),\'\\';
var thousandsSeparator = \\'\',js_escape(\',\'),\'\\';
</script>

<div id="help" class="jush-\',$y,\' jsonly hidden"></div>
\',script("mixin(qs(\'#help\'), {onmouseover: function () { helpOpen = 1; }, onmouseout: helpMouseout});"),\'
<div id="content">
\';if($Ua!==null){$A=substr(preg_replace(\'~\b(username|db|ns)=[^&]*&~\',\'\',ME),0,-1);echo\'<p id="breadcrumb"><a href="\'.h($A?$A:".").\'">\'.$ic[DRIVER].\'</a> &raquo; \';$A=substr(preg_replace(\'~\b(db|ns)=[^&]*&~\',\'\',ME),0,-1);$M=$b->serverName(SERVER);$M=($M!=""?$M:\'Server\');if($Ua===false)echo"$M\n";else{echo"<a href=\'".h($A)."\' accesskey=\'1\' title=\'Alt+Shift+1\'>$M</a> &raquo; ";if($_GET["ns"]!=""||(DB!=""&&is_array($Ua)))echo\'<a href="\'.h($A."&db=".urlencode(DB).(support("scheme")?"&ns=":"")).\'">\'.h(DB).\'</a> &raquo; \';if(is_array($Ua)){if($_GET["ns"]!="")echo\'<a href="\'.h(substr(ME,0,-1)).\'">\'.h($_GET["ns"]).\'</a> &raquo; \';foreach($Ua
as$z=>$X){$bc=(is_array($X)?$X[1]:h($X));if($bc!="")echo"<a href=\'".h(ME."$z=").urlencode(is_array($X)?$X[0]:$X)."\'>$bc</a> &raquo; ";}}echo"$gi\n";}}echo"<h2>$ii</h2>\n","<div id=\'ajaxstatus\' class=\'jsonly hidden\'></div>\n";restart_session();page_messages($n);$k=&get_session("dbs");if(DB!=""&&$k&&!in_array(DB,$k,true))$k=null;stop_session();define("PAGE_HEADER",1);}function
page_headers(){global$b;header("Content-Type: text/html; charset=utf-8");header("Cache-Control: no-cache");header("X-Frame-Options: deny");header("X-XSS-Protection: 0");header("X-Content-Type-Options: nosniff");header("Referrer-Policy: origin-when-cross-origin");foreach($b->csp()as$Lb){$zd=array();foreach($Lb
as$z=>$X)$zd[]="$z $X";header("Content-Security-Policy: ".implode("; ",$zd));}$b->headers();}function
csp(){return
array(array("script-src"=>"\'self\' \'unsafe-inline\' \'nonce-".get_nonce()."\' \'strict-dynamic\'","connect-src"=>"\'self\'","frame-src"=>"https://www.adminer.org","object-src"=>"\'none\'","base-uri"=>"\'none\'","form-action"=>"\'self\'",),);}function
get_nonce(){static$bf;if(!$bf)$bf=base64_encode(rand_string());return$bf;}function
page_messages($n){$Ji=preg_replace(\'~^[^?]*~\',\'\',$_SERVER["REQUEST_URI"]);$Oe=$_SESSION["messages"][$Ji];if($Oe){echo"<div class=\'message\'>".implode("</div>\n<div class=\'message\'>",$Oe)."</div>".script("messagesPrint();");unset($_SESSION["messages"][$Ji]);}if($n)echo"<div class=\'error\'>$n</div>\n";}function
page_footer($Re=""){global$b,$ni;echo\'</div>

\';if($Re!="auth"){echo\'<form action="" method="post">
<p class="logout">
<input type="submit" name="logout" value="Logout" id="logout">
<input type="hidden" name="token" value="\',$ni,\'">
</p>
</form>
\';}echo\'<div id="menu">
\';$b->navigation($Re);echo\'</div>
\',script("setupSubmitHighlight(document);");}function
int32($Ue){while($Ue>=2147483648)$Ue-=4294967296;while($Ue<=-2147483649)$Ue+=4294967296;return(int)$Ue;}function
long2str($W,$aj){$Xg=\'\';foreach($W
as$X)$Xg.=pack(\'V\',$X);if($aj)return
substr($Xg,0,end($W));return$Xg;}function
str2long($Xg,$aj){$W=array_values(unpack(\'V*\',str_pad($Xg,4*ceil(strlen($Xg)/4),"\0")));if($aj)$W[]=strlen($Xg);return$W;}function
xxtea_mx($mj,$lj,$Kh,$fe){return
int32((($mj>>5&0x7FFFFFF)^$lj<<2)+(($lj>>3&0x1FFFFFFF)^$mj<<4))^int32(($Kh^$lj)+($fe^$mj));}function
encrypt_string($Fh,$z){if($Fh=="")return"";$z=array_values(unpack("V*",pack("H*",md5($z))));$W=str2long($Fh,true);$Ue=count($W)-1;$mj=$W[$Ue];$lj=$W[0];$ug=floor(6+52/($Ue+1));$Kh=0;while($ug-->0){$Kh=int32($Kh+0x9E3779B9);$pc=$Kh>>2&3;for($Lf=0;$Lf<$Ue;$Lf++){$lj=$W[$Lf+1];$Te=xxtea_mx($mj,$lj,$Kh,$z[$Lf&3^$pc]);$mj=int32($W[$Lf]+$Te);$W[$Lf]=$mj;}$lj=$W[0];$Te=xxtea_mx($mj,$lj,$Kh,$z[$Lf&3^$pc]);$mj=int32($W[$Ue]+$Te);$W[$Ue]=$mj;}return
long2str($W,false);}function
decrypt_string($Fh,$z){if($Fh=="")return"";if(!$z)return
false;$z=array_values(unpack("V*",pack("H*",md5($z))));$W=str2long($Fh,false);$Ue=count($W)-1;$mj=$W[$Ue];$lj=$W[0];$ug=floor(6+52/($Ue+1));$Kh=int32($ug*0x9E3779B9);while($Kh){$pc=$Kh>>2&3;for($Lf=$Ue;$Lf>0;$Lf--){$mj=$W[$Lf-1];$Te=xxtea_mx($mj,$lj,$Kh,$z[$Lf&3^$pc]);$lj=int32($W[$Lf]-$Te);$W[$Lf]=$lj;}$mj=$W[$Ue];$Te=xxtea_mx($mj,$lj,$Kh,$z[$Lf&3^$pc]);$lj=int32($W[0]-$Te);$W[0]=$lj;$Kh=int32($Kh-0x9E3779B9);}return
long2str($W,true);}$g=\'\';$yd=$_SESSION["token"];if(!$yd)$_SESSION["token"]=rand(1,1e6);$ni=get_token();$bg=array();if($_COOKIE["adminer_permanent"]){foreach(explode(" ",$_COOKIE["adminer_permanent"])as$X){list($z)=explode(":",$X);$bg[$z]=$X;}}function
add_invalid_login(){global$b;$ld=file_open_lock(get_temp_dir()."/adminer.invalid");if(!$ld)return;$Yd=unserialize(stream_get_contents($ld));$di=time();if($Yd){foreach($Yd
as$Zd=>$X){if($X[0]<$di)unset($Yd[$Zd]);}}$Xd=&$Yd[$b->bruteForceKey()];if(!$Xd)$Xd=array($di+30*60,0);$Xd[1]++;file_write_unlock($ld,serialize($Yd));}function
check_invalid_login(){global$b;$Yd=unserialize(@file_get_contents(get_temp_dir()."/adminer.invalid"));$Xd=($Yd?$Yd[$b->bruteForceKey()]:array());$af=($Xd[1]>29?$Xd[0]-time():0);if($af>0)auth_error(lang(array(\'Too many unsuccessful logins, try again in %d minute.\',\'Too many unsuccessful logins, try again in %d minutes.\'),ceil($af/60)));}$Ia=$_POST["auth"];if($Ia){session_regenerate_id();$Vi=$Ia["driver"];$M=$Ia["server"];$V=$Ia["username"];$F=(string)$Ia["password"];$l=$Ia["db"];set_password($Vi,$M,$V,$F);$_SESSION["db"][$Vi][$M][$V][$l]=true;if($Ia["permanent"]){$z=base64_encode($Vi)."-".base64_encode($M)."-".base64_encode($V)."-".base64_encode($l);$ng=$b->permanentLogin(true);$bg[$z]="$z:".base64_encode($ng?encrypt_string($F,$ng):"");cookie("adminer_permanent",implode(" ",$bg));}if(count($_POST)==1||DRIVER!=$Vi||SERVER!=$M||$_GET["username"]!==$V||DB!=$l)redirect(auth_url($Vi,$M,$V,$l));}elseif($_POST["logout"]&&(!$yd||verify_token())){foreach(array("pwds","db","dbs","queries")as$z)set_session($z,null);unset_permanent();redirect(substr(preg_replace(\'~\b(username|db|ns)=[^&]*&~\',\'\',ME),0,-1),\'Logout successful.\'.\' \'.\'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.\');}elseif($bg&&!$_SESSION["pwds"]){session_regenerate_id();$ng=$b->permanentLogin();foreach($bg
as$z=>$X){list(,$fb)=explode(":",$X);list($Vi,$M,$V,$l)=array_map(\'base64_decode\',explode("-",$z));set_password($Vi,$M,$V,decrypt_string(base64_decode($fb),$ng));$_SESSION["db"][$Vi][$M][$V][$l]=true;}}function
unset_permanent(){global$bg;foreach($bg
as$z=>$X){list($Vi,$M,$V,$l)=array_map(\'base64_decode\',explode("-",$z));if($Vi==DRIVER&&$M==SERVER&&$V==$_GET["username"]&&$l==DB)unset($bg[$z]);}cookie("adminer_permanent",implode(" ",$bg));}function
auth_error($n){global$b,$yd;$mh=session_name();if(isset($_GET["username"])){header("HTTP/1.1 403 Forbidden");if(($_COOKIE[$mh]||$_GET[$mh])&&!$yd)$n=\'Session expired, please login again.\';else{restart_session();add_invalid_login();$F=get_password();if($F!==null){if($F===false)$n.=($n?\'<br>\':\'\').sprintf(\'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.\',target_blank(),\'<code>permanentLogin()</code>\');set_password(DRIVER,SERVER,$_GET["username"],null);}unset_permanent();}}if(!$_COOKIE[$mh]&&$_GET[$mh]&&ini_bool("session.use_only_cookies"))$n=\'Session support must be enabled.\';$Of=session_get_cookie_params();cookie("adminer_key",($_COOKIE["adminer_key"]?$_COOKIE["adminer_key"]:rand_string()),$Of["lifetime"]);page_header(\'Login\',$n,null);echo"<form action=\'\' method=\'post\'>\n","<div>";if(hidden_fields($_POST,array("auth")))echo"<p class=\'message\'>".\'The action will be performed after successful login with the same credentials.\'."\n";echo"</div>\n";$b->loginForm();echo"</form>\n";page_footer("auth");exit;}if(isset($_GET["username"])&&!class_exists("Min_DB")){unset($_SESSION["pwds"][DRIVER]);unset_permanent();page_header(\'No extension\',sprintf(\'None of the supported PHP extensions (%s) are available.\',implode(", ",$hg)),false);page_footer("auth");exit;}stop_session(true);if(isset($_GET["username"])&&is_string(get_password())){list($Dd,$dg)=explode(":",SERVER,2);if(preg_match(\'~^\s*([-+]?\d+)~\',$dg,$C)&&($C[1]<1024||$C[1]>65535))auth_error(\'Connecting to privileged ports is not allowed.\');check_invalid_login();$g=connect();$m=new
Min_Driver($g);}$xe=null;if(!is_object($g)||($xe=$b->login($_GET["username"],get_password()))!==true){$n=(is_string($g)?h($g):(is_string($xe)?$xe:\'Invalid credentials.\'));auth_error($n.(preg_match(\'~^ | $~\',get_password())?\'<br>\'.\'There is a space in the input password which might be the cause.\':\'\'));}if($_POST["logout"]&&$yd&&!verify_token()){page_header(\'Logout\',\'Invalid CSRF token. Send the form again.\');page_footer("db");exit;}if($Ia&&$_POST["token"])$_POST["token"]=$ni;$n=\'\';if($_POST){if(!verify_token()){$Sd="max_input_vars";$Ie=ini_get($Sd);if(extension_loaded("suhosin")){foreach(array("suhosin.request.max_vars","suhosin.post.max_vars")as$z){$X=ini_get($z);if($X&&(!$Ie||$X<$Ie)){$Sd=$z;$Ie=$X;}}}$n=(!$_POST["token"]&&$Ie?sprintf(\'Maximum number of allowed fields exceeded. Please increase %s.\',"\'$Sd\'"):\'Invalid CSRF token. Send the form again.\'.\' \'.\'If you did not send this request from Adminer then close this page.\');}}elseif($_SERVER["REQUEST_METHOD"]=="POST"){$n=sprintf(\'Too big POST data. Reduce the data or increase the %s configuration directive.\',"\'post_max_size\'");if(isset($_GET["sql"]))$n.=\' \'.\'You can upload a big SQL file via FTP and import it from server.\';}function
select($H,$h=null,$Bf=array(),$_=0){global$y;$we=array();$x=array();$f=array();$Sa=array();$U=array();$I=array();odd(\'\');for($t=0;(!$_||$t<$_)&&($J=$H->fetch_row());$t++){if(!$t){echo"<div class=\'scrollable\'>\n","<table cellspacing=\'0\' class=\'nowrap\'>\n","<thead><tr>";for($ee=0;$ee<count($J);$ee++){$o=$H->fetch_field();$D=$o->name;$Af=$o->orgtable;$_f=$o->orgname;$I[$o->table]=$Af;if($Bf&&$y=="sql")$we[$ee]=($D=="table"?"table=":($D=="possible_keys"?"indexes=":null));elseif($Af!=""){if(!isset($x[$Af])){$x[$Af]=array();foreach(indexes($Af,$h)as$w){if($w["type"]=="PRIMARY"){$x[$Af]=array_flip($w["columns"]);break;}}$f[$Af]=$x[$Af];}if(isset($f[$Af][$_f])){unset($f[$Af][$_f]);$x[$Af][$_f]=$ee;$we[$ee]=$Af;}}if($o->charsetnr==63)$Sa[$ee]=true;$U[$ee]=$o->type;echo"<th".($Af!=""||$o->name!=$_f?" title=\'".h(($Af!=""?"$Af.":"").$_f)."\'":"").">".h($D).($Bf?doc_link(array(\'sql\'=>"explain-output.html#explain_".strtolower($D),\'mariadb\'=>"explain/#the-columns-in-explain-select",)):"");}echo"</thead>\n";}echo"<tr".odd().">";foreach($J
as$z=>$X){$A="";if(isset($we[$z])&&!$f[$we[$z]]){if($Bf&&$y=="sql"){$Q=$J[array_search("table=",$we)];$A=ME.$we[$z].urlencode($Bf[$Q]!=""?$Bf[$Q]:$Q);}else{$A=ME."edit=".urlencode($we[$z]);foreach($x[$we[$z]]as$jb=>$ee)$A.="&where".urlencode("[".bracket_escape($jb)."]")."=".urlencode($J[$ee]);}}elseif(is_url($X))$A=$X;if($X===null)$X="<i>NULL</i>";elseif($Sa[$z]&&!is_utf8($X))$X="<i>".lang(array(\'%d byte\',\'%d bytes\'),strlen($X))."</i>";else{$X=h($X);if($U[$z]==254)$X="<code>$X</code>";}if($A)$X="<a href=\'".h($A)."\'".(is_url($A)?target_blank():\'\').">$X</a>";echo"<td>$X";}}echo($t?"</table>\n</div>":"<p class=\'message\'>".\'No rows.\')."\n";return$I;}function
referencable_primary($fh){$I=array();foreach(table_status(\'\',true)as$Oh=>$Q){if($Oh!=$fh&&fk_support($Q)){foreach(fields($Oh)as$o){if($o["primary"]){if($I[$Oh]){unset($I[$Oh]);break;}$I[$Oh]=$o;}}}}return$I;}function
adminer_settings(){parse_str($_COOKIE["adminer_settings"],$oh);return$oh;}function
adminer_setting($z){$oh=adminer_settings();return$oh[$z];}function
set_adminer_settings($oh){return
cookie("adminer_settings",http_build_query($oh+adminer_settings()));}function
textarea($D,$Y,$K=10,$nb=80){global$y;echo"<textarea name=\'$D\' rows=\'$K\' cols=\'$nb\' class=\'sqlarea jush-$y\' spellcheck=\'false\' wrap=\'off\'>";if(is_array($Y)){foreach($Y
as$X)echo
h($X[0])."\n\n\n";}else
echo
h($Y);echo"</textarea>";}function
edit_type($z,$o,$lb,$hd=array(),$Pc=array()){global$Gh,$U,$Hi,$pf;$T=$o["type"];echo\'<td><select name="\',h($z),\'[type]" class="type" aria-labelledby="label-type">\';if($T&&!isset($U[$T])&&!isset($hd[$T])&&!in_array($T,$Pc))$Pc[]=$T;if($hd)$Gh[\'Foreign keys\']=$hd;echo
optionlist(array_merge($Pc,$Gh),$T),\'</select><td><input name="\',h($z),\'[length]" value="\',h($o["length"]),\'" size="3"\',(!$o["length"]&&preg_match(\'~var(char|binary)$~\',$T)?" class=\'required\'":"");echo\' aria-labelledby="label-length"><td class="options">\',"<select name=\'".h($z)."[collation]\'".(preg_match(\'~(char|text|enum|set)$~\',$T)?"":" class=\'hidden\'").\'><option value="">(\'.\'collation\'.\')\'.optionlist($lb,$o["collation"]).\'</select>\',($Hi?"<select name=\'".h($z)."[unsigned]\'".(!$T||preg_match(number_type(),$T)?"":" class=\'hidden\'").\'><option>\'.optionlist($Hi,$o["unsigned"]).\'</select>\':\'\'),(isset($o[\'on_update\'])?"<select name=\'".h($z)."[on_update]\'".(preg_match(\'~timestamp|datetime~\',$T)?"":" class=\'hidden\'").\'>\'.optionlist(array(""=>"(".\'ON UPDATE\'.")","CURRENT_TIMESTAMP"),(preg_match(\'~^CURRENT_TIMESTAMP~i\',$o["on_update"])?"CURRENT_TIMESTAMP":$o["on_update"])).\'</select>\':\'\'),($hd?"<select name=\'".h($z)."[on_delete]\'".(preg_match("~`~",$T)?"":" class=\'hidden\'")."><option value=\'\'>(".\'ON DELETE\'.")".optionlist(explode("|",$pf),$o["on_delete"])."</select> ":" ");}function
process_length($te){global$_c;return(preg_match("~^\\s*\\(?\\s*$_c(?:\\s*,\\s*$_c)*+\\s*\\)?\\s*\$~",$te)&&preg_match_all("~$_c~",$te,$Ce)?"(".implode(",",$Ce[0]).")":preg_replace(\'~^[0-9].*~\',\'(\0)\',preg_replace(\'~[^-0-9,+()[\]]~\',\'\',$te)));}function
process_type($o,$kb="COLLATE"){global$Hi;return" $o[type]".process_length($o["length"]).(preg_match(number_type(),$o["type"])&&in_array($o["unsigned"],$Hi)?" $o[unsigned]":"").(preg_match(\'~char|text|enum|set~\',$o["type"])&&$o["collation"]?" $kb ".q($o["collation"]):"");}function
process_field($o,$_i){return
array(idf_escape(trim($o["field"])),process_type($_i),($o["null"]?" NULL":" NOT NULL"),default_value($o),(preg_match(\'~timestamp|datetime~\',$o["type"])&&$o["on_update"]?" ON UPDATE $o[on_update]":""),(support("comment")&&$o["comment"]!=""?" COMMENT ".q($o["comment"]):""),($o["auto_increment"]?auto_increment():null),);}function
default_value($o){$Wb=$o["default"];return($Wb===null?"":" DEFAULT ".(preg_match(\'~char|binary|text|enum|set~\',$o["type"])||preg_match(\'~^(?![a-z])~i\',$Wb)?q($Wb):$Wb));}function
type_class($T){foreach(array(\'char\'=>\'text\',\'date\'=>\'time|year\',\'binary\'=>\'blob\',\'enum\'=>\'set\',)as$z=>$X){if(preg_match("~$z|$X~",$T))return" class=\'$z\'";}}function
edit_fields($p,$lb,$T="TABLE",$hd=array()){global$Td;$p=array_values($p);$Xb=(($_POST?$_POST["defaults"]:adminer_setting("defaults"))?"":" class=\'hidden\'");$sb=(($_POST?$_POST["comments"]:adminer_setting("comments"))?"":" class=\'hidden\'");echo\'<thead><tr>
\';if($T=="PROCEDURE"){echo\'<td>\';}echo\'<th id="label-name">\',($T=="TABLE"?\'Column name\':\'Parameter name\'),\'<td id="label-type">Type<textarea id="enum-edit" rows="4" cols="12" wrap="off" style="display: none;"></textarea>\',script("qs(\'#enum-edit\').onblur = editingLengthBlur;"),\'<td id="label-length">Length
<td>\',\'Options\';if($T=="TABLE"){echo\'<td id="label-null">NULL
<td><input type="radio" name="auto_increment_col" value=""><acronym id="label-ai" title="Auto Increment">AI</acronym>\',doc_link(array(\'sql\'=>"example-auto-increment.html",\'mariadb\'=>"auto_increment/",\'sqlite\'=>"autoinc.html",\'pgsql\'=>"datatype.html#DATATYPE-SERIAL",\'mssql\'=>"ms186775.aspx",)),\'<td id="label-default"\',$Xb,\'>Default value
\',(support("comment")?"<td id=\'label-comment\'$sb>".\'Comment\':"");}echo\'<td>\',"<input type=\'image\' class=\'icon\' name=\'add[".(support("move_col")?0:count($p))."]\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=plus.gif&version=4.8.1")."\' alt=\'+\' title=\'".\'Add next\'."\'>".script("row_count = ".count($p).";"),\'</thead>
<tbody>
\',script("mixin(qsl(\'tbody\'), {onclick: editingClick, onkeydown: editingKeydown, oninput: editingInput});");foreach($p
as$t=>$o){$t++;$Cf=$o[($_POST?"orig":"field")];$fc=(isset($_POST["add"][$t-1])||(isset($o["field"])&&!$_POST["drop_col"][$t]))&&(support("drop_col")||$Cf=="");echo\'<tr\',($fc?"":" style=\'display: none;\'"),\'>
\',($T=="PROCEDURE"?"<td>".html_select("fields[$t][inout]",explode("|",$Td),$o["inout"]):""),\'<th>\';if($fc){echo\'<input name="fields[\',$t,\'][field]" value="\',h($o["field"]),\'" data-maxlength="64" autocapitalize="off" aria-labelledby="label-name">\';}echo\'<input type="hidden" name="fields[\',$t,\'][orig]" value="\',h($Cf),\'">\';edit_type("fields[$t]",$o,$lb,$hd);if($T=="TABLE"){echo\'<td>\',checkbox("fields[$t][null]",1,$o["null"],"","","block","label-null"),\'<td><label class="block"><input type="radio" name="auto_increment_col" value="\',$t,\'"\';if($o["auto_increment"]){echo\' checked\';}echo\' aria-labelledby="label-ai"></label><td\',$Xb,\'>\',checkbox("fields[$t][has_default]",1,$o["has_default"],"","","","label-default"),\'<input name="fields[\',$t,\'][default]" value="\',h($o["default"]),\'" aria-labelledby="label-default">\',(support("comment")?"<td$sb><input name=\'fields[$t][comment]\' value=\'".h($o["comment"])."\' data-maxlength=\'".(min_version(5.5)?1024:255)."\' aria-labelledby=\'label-comment\'>":"");}echo"<td>",(support("move_col")?"<input type=\'image\' class=\'icon\' name=\'add[$t]\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=plus.gif&version=4.8.1")."\' alt=\'+\' title=\'".\'Add next\'."\'> "."<input type=\'image\' class=\'icon\' name=\'up[$t]\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=up.gif&version=4.8.1")."\' alt=\'\' title=\'".\'Move up\'."\'> "."<input type=\'image\' class=\'icon\' name=\'down[$t]\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=down.gif&version=4.8.1")."\' alt=\'\' title=\'".\'Move down\'."\'> ":""),($Cf==""||support("drop_col")?"<input type=\'image\' class=\'icon\' name=\'drop_col[$t]\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=cross.gif&version=4.8.1")."\' alt=\'x\' title=\'".\'Remove\'."\'>":"");}}function
process_fields(&$p){$hf=0;if($_POST["up"]){$ne=0;foreach($p
as$z=>$o){if(key($_POST["up"])==$z){unset($p[$z]);array_splice($p,$ne,0,array($o));break;}if(isset($o["field"]))$ne=$hf;$hf++;}}elseif($_POST["down"]){$jd=false;foreach($p
as$z=>$o){if(isset($o["field"])&&$jd){unset($p[key($_POST["down"])]);array_splice($p,$hf,0,array($jd));break;}if(key($_POST["down"])==$z)$jd=$o;$hf++;}}elseif($_POST["add"]){$p=array_values($p);array_splice($p,key($_POST["add"]),0,array(array()));}elseif(!$_POST["drop_col"])return
false;return
true;}function
normalize_enum($C){return"\'".str_replace("\'","\'\'",addcslashes(stripcslashes(str_replace($C[0][0].$C[0][0],$C[0][0],substr($C[0],1,-1))),\'\\\'))."\'";}function
grant($od,$pg,$f,$of){if(!$pg)return
true;if($pg==array("ALL PRIVILEGES","GRANT OPTION"))return($od=="GRANT"?queries("$od ALL PRIVILEGES$of WITH GRANT OPTION"):queries("$od ALL PRIVILEGES$of")&&queries("$od GRANT OPTION$of"));return
queries("$od ".preg_replace(\'~(GRANT OPTION)\([^)]*\)~\',\'\1\',implode("$f, ",$pg).$f).$of);}function
drop_create($jc,$i,$kc,$ai,$mc,$B,$Ne,$Le,$Me,$lf,$Ye){if($_POST["drop"])query_redirect($jc,$B,$Ne);elseif($lf=="")query_redirect($i,$B,$Me);elseif($lf!=$Ye){$Jb=queries($i);queries_redirect($B,$Le,$Jb&&queries($jc));if($Jb)queries($kc);}else
queries_redirect($B,$Le,queries($ai)&&queries($mc)&&queries($jc)&&queries($i));}function
create_trigger($of,$J){global$y;$fi=" $J[Timing] $J[Event]".(preg_match(\'~ OF~\',$J["Event"])?" $J[Of]":"");return"CREATE TRIGGER ".idf_escape($J["Trigger"]).($y=="mssql"?$of.$fi:$fi.$of).rtrim(" $J[Type]\n$J[Statement]",";").";";}function
create_routine($Tg,$J){global$Td,$y;$N=array();$p=(array)$J["fields"];ksort($p);foreach($p
as$o){if($o["field"]!="")$N[]=(preg_match("~^($Td)\$~",$o["inout"])?"$o[inout] ":"").idf_escape($o["field"]).process_type($o,"CHARACTER SET");}$Yb=rtrim("\n$J[definition]",";");return"CREATE $Tg ".idf_escape(trim($J["name"]))." (".implode(", ",$N).")".(isset($_GET["function"])?" RETURNS".process_type($J["returns"],"CHARACTER SET"):"").($J["language"]?" LANGUAGE $J[language]":"").($y=="pgsql"?" AS ".q($Yb):"$Yb;");}function
remove_definer($G){return
preg_replace(\'~^([A-Z =]+) DEFINER=`\'.preg_replace(\'~@(.*)~\',\'`@`(%|\1)\',logged_user()).\'`~\',\'\1\',$G);}function
format_foreign_key($r){global$pf;$l=$r["db"];$cf=$r["ns"];return" FOREIGN KEY (".implode(", ",array_map(\'idf_escape\',$r["source"])).") REFERENCES ".($l!=""&&$l!=$_GET["db"]?idf_escape($l).".":"").($cf!=""&&$cf!=$_GET["ns"]?idf_escape($cf).".":"").table($r["table"])." (".implode(", ",array_map(\'idf_escape\',$r["target"])).")".(preg_match("~^($pf)\$~",$r["on_delete"])?" ON DELETE $r[on_delete]":"").(preg_match("~^($pf)\$~",$r["on_update"])?" ON UPDATE $r[on_update]":"");}function
tar_file($q,$ki){$I=pack("a100a8a8a8a12a12",$q,644,0,0,decoct($ki->size),decoct(time()));$eb=8*32;for($t=0;$t<strlen($I);$t++)$eb+=ord($I[$t]);$I.=sprintf("%06o",$eb)."\0 ";echo$I,str_repeat("\0",512-strlen($I));$ki->send();echo
str_repeat("\0",511-($ki->size+511)%512);}function
ini_bytes($Sd){$X=ini_get($Sd);switch(strtolower(substr($X,-1))){case\'g\':$X*=1024;case\'m\':$X*=1024;case\'k\':$X*=1024;}return$X;}function
doc_link($Yf,$bi="<sup>?</sup>"){global$y,$g;$kh=$g->server_info;$Wi=preg_replace(\'~^(\d\.?\d).*~s\',\'\1\',$kh);$Li=array(\'sql\'=>"https://dev.mysql.com/doc/refman/$Wi/en/",\'sqlite\'=>"https://www.sqlite.org/",\'pgsql\'=>"https://www.postgresql.org/docs/$Wi/",\'mssql\'=>"https://msdn.microsoft.com/library/",\'oracle\'=>"https://www.oracle.com/pls/topic/lookup?ctx=db".preg_replace(\'~^.* (\d+)\.(\d+)\.\d+\.\d+\.\d+.*~s\',\'\1\2\',$kh)."&id=",);if(preg_match(\'~MariaDB~\',$kh)){$Li[\'sql\']="https://mariadb.com/kb/en/library/";$Yf[\'sql\']=(isset($Yf[\'mariadb\'])?$Yf[\'mariadb\']:str_replace(".html","/",$Yf[\'sql\']));}return($Yf[$y]?"<a href=\'".h($Li[$y].$Yf[$y])."\'".target_blank().">$bi</a>":"");}function
ob_gzencode($P){return
gzencode($P);}function
db_size($l){global$g;if(!$g->select_db($l))return"?";$I=0;foreach(table_status()as$R)$I+=$R["Data_length"]+$R["Index_length"];return
format_number($I);}function
set_utf8mb4($i){global$g;static$N=false;if(!$N&&preg_match(\'~\butf8mb4~i\',$i)){$N=true;echo"SET NAMES ".charset($g).";\n\n";}}function
connect_error(){global$b,$g,$ni,$n,$ic;if(DB!=""){header("HTTP/1.1 404 Not Found");page_header(\'Database\'.": ".h(DB),\'Invalid database.\',true);}else{if($_POST["db"]&&!$n)queries_redirect(substr(ME,0,-1),\'Databases have been dropped.\',drop_databases($_POST["db"]));page_header(\'Select database\',$n,false);echo"<p class=\'links\'>\n";foreach(array(\'database\'=>\'Create database\',\'privileges\'=>\'Privileges\',\'processlist\'=>\'Process list\',\'variables\'=>\'Variables\',\'status\'=>\'Status\',)as$z=>$X){if(support($z))echo"<a href=\'".h(ME)."$z=\'>$X</a>\n";}echo"<p>".sprintf(\'%s version: %s through PHP extension %s\',$ic[DRIVER],"<b>".h($g->server_info)."</b>","<b>$g->extension</b>")."\n","<p>".sprintf(\'Logged as: %s\',"<b>".h(logged_user())."</b>")."\n";$k=$b->databases();if($k){$ah=support("scheme");$lb=collations();echo"<form action=\'\' method=\'post\'>\n","<table cellspacing=\'0\' class=\'checkable\'>\n",script("mixin(qsl(\'table\'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),"<thead><tr>".(support("database")?"<td>":"")."<th>".\'Database\'." - <a href=\'".h(ME)."refresh=1\'>".\'Refresh\'."</a>"."<td>".\'Collation\'."<td>".\'Tables\'."<td>".\'Size\'." - <a href=\'".h(ME)."dbsize=1\'>".\'Compute\'."</a>".script("qsl(\'a\').onclick = partial(ajaxSetHtml, \'".js_escape(ME)."script=connect\');","")."</thead>\n";$k=($_GET["dbsize"]?count_tables($k):array_flip($k));foreach($k
as$l=>$S){$Sg=h(ME)."db=".urlencode($l);$u=h("Db-".$l);echo"<tr".odd().">".(support("database")?"<td>".checkbox("db[]",$l,in_array($l,(array)$_POST["db"]),"","","",$u):""),"<th><a href=\'$Sg\' id=\'$u\'>".h($l)."</a>";$d=h(db_collation($l,$lb));echo"<td>".(support("database")?"<a href=\'$Sg".($ah?"&amp;ns=":"")."&amp;database=\' title=\'".\'Alter database\'."\'>$d</a>":$d),"<td align=\'right\'><a href=\'$Sg&amp;schema=\' id=\'tables-".h($l)."\' title=\'".\'Database schema\'."\'>".($_GET["dbsize"]?$S:"?")."</a>","<td align=\'right\' id=\'size-".h($l)."\'>".($_GET["dbsize"]?db_size($l):"?"),"\n";}echo"</table>\n",(support("database")?"<div class=\'footer\'><div>\n"."<fieldset><legend>".\'Selected\'." <span id=\'selected\'></span></legend><div>\n"."<input type=\'hidden\' name=\'all\' value=\'\'>".script("qsl(\'input\').onclick = function () { selectCount(\'selected\', formChecked(this, /^db/)); };")."<input type=\'submit\' name=\'drop\' value=\'".\'Drop\'."\'>".confirm()."\n"."</div></fieldset>\n"."</div></div>\n":""),"<input type=\'hidden\' name=\'token\' value=\'$ni\'>\n","</form>\n",script("tableCheck();");}}page_footer("db");}if(isset($_GET["status"]))$_GET["variables"]=$_GET["status"];if(isset($_GET["import"]))$_GET["sql"]=$_GET["import"];if(!(DB!=""?$g->select_db(DB):isset($_GET["sql"])||isset($_GET["dump"])||isset($_GET["database"])||isset($_GET["processlist"])||isset($_GET["privileges"])||isset($_GET["user"])||isset($_GET["variables"])||$_GET["script"]=="connect"||$_GET["script"]=="kill")){if(DB!=""||$_GET["refresh"]){restart_session();set_session("dbs",null);}connect_error();exit;}if(support("scheme")){if(DB!=""&&$_GET["ns"]!==""){if(!isset($_GET["ns"]))redirect(preg_replace(\'~ns=[^&]*&~\',\'\',ME)."ns=".get_schema());if(!set_schema($_GET["ns"])){header("HTTP/1.1 404 Not Found");page_header(\'Schema\'.": ".h($_GET["ns"]),\'Invalid schema.\',true);page_footer("ns");exit;}}}$pf="RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT";class
TmpFile{var$handler;var$size;function
__construct(){$this->handler=tmpfile();}function
write($Cb){$this->size+=strlen($Cb);fwrite($this->handler,$Cb);}function
send(){fseek($this->handler,0);fpassthru($this->handler);fclose($this->handler);}}$_c="\'(?:\'\'|[^\'\\\\]|\\\\.)*\'";$Td="IN|OUT|INOUT";if(isset($_GET["select"])&&($_POST["edit"]||$_POST["clone"])&&!$_POST["save"])$_GET["edit"]=$_GET["select"];if(isset($_GET["callf"]))$_GET["call"]=$_GET["callf"];if(isset($_GET["function"]))$_GET["procedure"]=$_GET["function"];if(isset($_GET["download"])){$a=$_GET["download"];$p=fields($a);header("Content-Type: application/octet-stream");header("Content-Disposition: attachment; filename=".friendly_url("$a-".implode("_",$_GET["where"])).".".friendly_url($_GET["field"]));$L=array(idf_escape($_GET["field"]));$H=$m->select($a,$L,array(where($_GET,$p)),$L);$J=($H?$H->fetch_row():array());echo$m->value($J[0],$p[$_GET["field"]]);exit;}elseif(isset($_GET["table"])){$a=$_GET["table"];$p=fields($a);if(!$p)$n=error();$R=table_status1($a,true);$D=$b->tableName($R);page_header(($p&&is_view($R)?$R[\'Engine\']==\'materialized view\'?\'Materialized view\':\'View\':\'Table\').": ".($D!=""?$D:h($a)),$n);$b->selectLinks($R);$rb=$R["Comment"];if($rb!="")echo"<p class=\'nowrap\'>".\'Comment\'.": ".h($rb)."\n";if($p)$b->tableStructurePrint($p);if(!is_view($R)){if(support("indexes")){echo"<h3 id=\'indexes\'>".\'Indexes\'."</h3>\n";$x=indexes($a);if($x)$b->tableIndexesPrint($x);echo\'<p class="links"><a href="\'.h(ME).\'indexes=\'.urlencode($a).\'">\'.\'Alter indexes\'."</a>\n";}if(fk_support($R)){echo"<h3 id=\'foreign-keys\'>".\'Foreign keys\'."</h3>\n";$hd=foreign_keys($a);if($hd){echo"<table cellspacing=\'0\'>\n","<thead><tr><th>".\'Source\'."<td>".\'Target\'."<td>".\'ON DELETE\'."<td>".\'ON UPDATE\'."<td></thead>\n";foreach($hd
as$D=>$r){echo"<tr title=\'".h($D)."\'>","<th><i>".implode("</i>, <i>",array_map(\'h\',$r["source"]))."</i>","<td><a href=\'".h($r["db"]!=""?preg_replace(\'~db=[^&]*~\',"db=".urlencode($r["db"]),ME):($r["ns"]!=""?preg_replace(\'~ns=[^&]*~\',"ns=".urlencode($r["ns"]),ME):ME))."table=".urlencode($r["table"])."\'>".($r["db"]!=""?"<b>".h($r["db"])."</b>.":"").($r["ns"]!=""?"<b>".h($r["ns"])."</b>.":"").h($r["table"])."</a>","(<i>".implode("</i>, <i>",array_map(\'h\',$r["target"]))."</i>)","<td>".h($r["on_delete"])."\n","<td>".h($r["on_update"])."\n",\'<td><a href="\'.h(ME.\'foreign=\'.urlencode($a).\'&name=\'.urlencode($D)).\'">\'.\'Alter\'.\'</a>\';}echo"</table>\n";}echo\'<p class="links"><a href="\'.h(ME).\'foreign=\'.urlencode($a).\'">\'.\'Add foreign key\'."</a>\n";}}if(support(is_view($R)?"view_trigger":"trigger")){echo"<h3 id=\'triggers\'>".\'Triggers\'."</h3>\n";$zi=triggers($a);if($zi){echo"<table cellspacing=\'0\'>\n";foreach($zi
as$z=>$X)echo"<tr valign=\'top\'><td>".h($X[0])."<td>".h($X[1])."<th>".h($z)."<td><a href=\'".h(ME.\'trigger=\'.urlencode($a).\'&name=\'.urlencode($z))."\'>".\'Alter\'."</a>\n";echo"</table>\n";}echo\'<p class="links"><a href="\'.h(ME).\'trigger=\'.urlencode($a).\'">\'.\'Add trigger\'."</a>\n";}}elseif(isset($_GET["schema"])){page_header(\'Database schema\',"",array(),h(DB.($_GET["ns"]?".$_GET[ns]":"")));$Qh=array();$Rh=array();$ea=($_GET["schema"]?$_GET["schema"]:$_COOKIE["adminer_schema-".str_replace(".","_",DB)]);preg_match_all(\'~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~\',$ea,$Ce,PREG_SET_ORDER);foreach($Ce
as$t=>$C){$Qh[$C[1]]=array($C[2],$C[3]);$Rh[]="\n\t\'".js_escape($C[1])."\': [ $C[2], $C[3] ]";}$oi=0;$Pa=-1;$Zg=array();$Eg=array();$re=array();foreach(table_status(\'\',true)as$Q=>$R){if(is_view($R))continue;$eg=0;$Zg[$Q]["fields"]=array();foreach(fields($Q)as$D=>$o){$eg+=1.25;$o["pos"]=$eg;$Zg[$Q]["fields"][$D]=$o;}$Zg[$Q]["pos"]=($Qh[$Q]?$Qh[$Q]:array($oi,0));foreach($b->foreignKeys($Q)as$X){if(!$X["db"]){$pe=$Pa;if($Qh[$Q][1]||$Qh[$X["table"]][1])$pe=min(floatval($Qh[$Q][1]),floatval($Qh[$X["table"]][1]))-1;else$Pa-=.1;while($re[(string)$pe])$pe-=.0001;$Zg[$Q]["references"][$X["table"]][(string)$pe]=array($X["source"],$X["target"]);$Eg[$X["table"]][$Q][(string)$pe]=$X["target"];$re[(string)$pe]=true;}}$oi=max($oi,$Zg[$Q]["pos"][0]+2.5+$eg);}echo\'<div id="schema" style="height: \',$oi,\'em;">
<script\',nonce(),\'>
qs(\\'#schema\\').onselectstart = function () { return false; };
var tablePos = {\',implode(",",$Rh)."\n",\'};
var em = qs(\\'#schema\\').offsetHeight / \',$oi,\';
document.onmousemove = schemaMousemove;
document.onmouseup = partialArg(schemaMouseup, \\'\',js_escape(DB),\'\\');
</script>
\';foreach($Zg
as$D=>$Q){echo"<div class=\'table\' style=\'top: ".$Q["pos"][0]."em; left: ".$Q["pos"][1]."em;\'>",\'<a href="\'.h(ME).\'table=\'.urlencode($D).\'"><b>\'.h($D)."</b></a>",script("qsl(\'div\').onmousedown = schemaMousedown;");foreach($Q["fields"]as$o){$X=\'<span\'.type_class($o["type"]).\' title="\'.h($o["full_type"].($o["null"]?" NULL":\'\')).\'">\'.h($o["field"]).\'</span>\';echo"<br>".($o["primary"]?"<i>$X</i>":$X);}foreach((array)$Q["references"]as$Xh=>$Fg){foreach($Fg
as$pe=>$Bg){$qe=$pe-$Qh[$D][1];$t=0;foreach($Bg[0]as$vh)echo"\n<div class=\'references\' title=\'".h($Xh)."\' id=\'refs$pe-".($t++)."\' style=\'left: $qe"."em; top: ".$Q["fields"][$vh]["pos"]."em; padding-top: .5em;\'><div style=\'border-top: 1px solid Gray; width: ".(-$qe)."em;\'></div></div>";}}foreach((array)$Eg[$D]as$Xh=>$Fg){foreach($Fg
as$pe=>$f){$qe=$pe-$Qh[$D][1];$t=0;foreach($f
as$Wh)echo"\n<div class=\'references\' title=\'".h($Xh)."\' id=\'refd$pe-".($t++)."\' style=\'left: $qe"."em; top: ".$Q["fields"][$Wh]["pos"]."em; height: 1.25em; background: url(".h(preg_replace("~\\?.*~","",ME)."?file=arrow.gif) no-repeat right center;&version=4.8.1")."\'><div style=\'height: .5em; border-bottom: 1px solid Gray; width: ".(-$qe)."em;\'></div></div>";}}echo"\n</div>\n";}foreach($Zg
as$D=>$Q){foreach((array)$Q["references"]as$Xh=>$Fg){foreach($Fg
as$pe=>$Bg){$Qe=$oi;$Ge=-10;foreach($Bg[0]as$z=>$vh){$fg=$Q["pos"][0]+$Q["fields"][$vh]["pos"];$gg=$Zg[$Xh]["pos"][0]+$Zg[$Xh]["fields"][$Bg[1][$z]]["pos"];$Qe=min($Qe,$fg,$gg);$Ge=max($Ge,$fg,$gg);}echo"<div class=\'references\' id=\'refl$pe\' style=\'left: $pe"."em; top: $Qe"."em; padding: .5em 0;\'><div style=\'border-right: 1px solid Gray; margin-top: 1px; height: ".($Ge-$Qe)."em;\'></div></div>\n";}}}echo\'</div>
<p class="links"><a href="\',h(ME."schema=".urlencode($ea)),\'" id="schema-link">Permanent link</a>
\';}elseif(isset($_GET["dump"])){$a=$_GET["dump"];if($_POST&&!$n){$Fb="";foreach(array("output","format","db_style","routines","events","table_style","auto_increment","triggers","data_style")as$z)$Fb.="&$z=".urlencode($_POST[$z]);cookie("adminer_export",substr($Fb,1));$S=array_flip((array)$_POST["tables"])+array_flip((array)$_POST["data"]);$Mc=dump_headers((count($S)==1?key($S):DB),(DB==""||count($S)>1));$be=preg_match(\'~sql~\',$_POST["format"]);if($be){echo"-- Adminer $ia ".$ic[DRIVER]." ".str_replace("\n"," ",$g->server_info)." dump\n\n";if($y=="sql"){echo"SET NAMES utf8;
SET time_zone = \'+00:00\';
SET foreign_key_checks = 0;
".($_POST["data_style"]?"SET sql_mode = \'NO_AUTO_VALUE_ON_ZERO\';
":"")."
";$g->query("SET time_zone = \'+00:00\'");$g->query("SET sql_mode = \'\'");}}$Hh=$_POST["db_style"];$k=array(DB);if(DB==""){$k=$_POST["databases"];if(is_string($k))$k=explode("\n",rtrim(str_replace("\r","",$k),"\n"));}foreach((array)$k
as$l){$b->dumpDatabase($l);if($g->select_db($l)){if($be&&preg_match(\'~CREATE~\',$Hh)&&($i=$g->result("SHOW CREATE DATABASE ".idf_escape($l),1))){set_utf8mb4($i);if($Hh=="DROP+CREATE")echo"DROP DATABASE IF EXISTS ".idf_escape($l).";\n";echo"$i;\n";}if($be){if($Hh)echo
use_sql($l).";\n\n";$If="";if($_POST["routines"]){foreach(array("FUNCTION","PROCEDURE")as$Tg){foreach(get_rows("SHOW $Tg STATUS WHERE Db = ".q($l),null,"-- ")as$J){$i=remove_definer($g->result("SHOW CREATE $Tg ".idf_escape($J["Name"]),2));set_utf8mb4($i);$If.=($Hh!=\'DROP+CREATE\'?"DROP $Tg IF EXISTS ".idf_escape($J["Name"]).";;\n":"")."$i;;\n\n";}}}if($_POST["events"]){foreach(get_rows("SHOW EVENTS",null,"-- ")as$J){$i=remove_definer($g->result("SHOW CREATE EVENT ".idf_escape($J["Name"]),3));set_utf8mb4($i);$If.=($Hh!=\'DROP+CREATE\'?"DROP EVENT IF EXISTS ".idf_escape($J["Name"]).";;\n":"")."$i;;\n\n";}}if($If)echo"DELIMITER ;;\n\n$If"."DELIMITER ;\n\n";}if($_POST["table_style"]||$_POST["data_style"]){$Yi=array();foreach(table_status(\'\',true)as$D=>$R){$Q=(DB==""||in_array($D,(array)$_POST["tables"]));$Pb=(DB==""||in_array($D,(array)$_POST["data"]));if($Q||$Pb){if($Mc=="tar"){$ki=new
TmpFile;ob_start(array($ki,\'write\'),1e5);}$b->dumpTable($D,($Q?$_POST["table_style"]:""),(is_view($R)?2:0));if(is_view($R))$Yi[]=$D;elseif($Pb){$p=fields($D);$b->dumpData($D,$_POST["data_style"],"SELECT *".convert_fields($p,$p)." FROM ".table($D));}if($be&&$_POST["triggers"]&&$Q&&($zi=trigger_sql($D)))echo"\nDELIMITER ;;\n$zi\nDELIMITER ;\n";if($Mc=="tar"){ob_end_flush();tar_file((DB!=""?"":"$l/")."$D.csv",$ki);}elseif($be)echo"\n";}}if(function_exists(\'foreign_keys_sql\')){foreach(table_status(\'\',true)as$D=>$R){$Q=(DB==""||in_array($D,(array)$_POST["tables"]));if($Q&&!is_view($R))echo
foreign_keys_sql($D);}}foreach($Yi
as$Xi)$b->dumpTable($Xi,$_POST["table_style"],1);if($Mc=="tar")echo
pack("x512");}}}if($be)echo"-- ".$g->result("SELECT NOW()")."\n";exit;}page_header(\'Export\',$n,($_GET["export"]!=""?array("table"=>$_GET["export"]):array()),h(DB));echo\'
<form action="" method="post">
<table cellspacing="0" class="layout">
\';$Tb=array(\'\',\'USE\',\'DROP+CREATE\',\'CREATE\');$Sh=array(\'\',\'DROP+CREATE\',\'CREATE\');$Qb=array(\'\',\'TRUNCATE+INSERT\',\'INSERT\');if($y=="sql")$Qb[]=\'INSERT+UPDATE\';parse_str($_COOKIE["adminer_export"],$J);if(!$J)$J=array("output"=>"text","format"=>"sql","db_style"=>(DB!=""?"":"CREATE"),"table_style"=>"DROP+CREATE","data_style"=>"INSERT");if(!isset($J["events"])){$J["routines"]=$J["events"]=($_GET["dump"]=="");$J["triggers"]=$J["table_style"];}echo"<tr><th>".\'Output\'."<td>".html_select("output",$b->dumpOutput(),$J["output"],0)."\n";echo"<tr><th>".\'Format\'."<td>".html_select("format",$b->dumpFormat(),$J["format"],0)."\n";echo($y=="sqlite"?"":"<tr><th>".\'Database\'."<td>".html_select(\'db_style\',$Tb,$J["db_style"]).(support("routine")?checkbox("routines",1,$J["routines"],\'Routines\'):"").(support("event")?checkbox("events",1,$J["events"],\'Events\'):"")),"<tr><th>".\'Tables\'."<td>".html_select(\'table_style\',$Sh,$J["table_style"]).checkbox("auto_increment",1,$J["auto_increment"],\'Auto Increment\').(support("trigger")?checkbox("triggers",1,$J["triggers"],\'Triggers\'):""),"<tr><th>".\'Data\'."<td>".html_select(\'data_style\',$Qb,$J["data_style"]),\'</table>
<p><input type="submit" value="Export">
<input type="hidden" name="token" value="\',$ni,\'">

<table cellspacing="0">
\',script("qsl(\'table\').onclick = dumpClick;");$jg=array();if(DB!=""){$cb=($a!=""?"":" checked");echo"<thead><tr>","<th style=\'text-align: left;\'><label class=\'block\'><input type=\'checkbox\' id=\'check-tables\'$cb>".\'Tables\'."</label>".script("qs(\'#check-tables\').onclick = partial(formCheck, /^tables\\[/);",""),"<th style=\'text-align: right;\'><label class=\'block\'>".\'Data\'."<input type=\'checkbox\' id=\'check-data\'$cb></label>".script("qs(\'#check-data\').onclick = partial(formCheck, /^data\\[/);",""),"</thead>\n";$Yi="";$Th=tables_list();foreach($Th
as$D=>$T){$ig=preg_replace(\'~_.*~\',\'\',$D);$cb=($a==""||$a==(substr($a,-1)=="%"?"$ig%":$D));$mg="<tr><td>".checkbox("tables[]",$D,$cb,$D,"","block");if($T!==null&&!preg_match(\'~table~i\',$T))$Yi.="$mg\n";else
echo"$mg<td align=\'right\'><label class=\'block\'><span id=\'Rows-".h($D)."\'></span>".checkbox("data[]",$D,$cb)."</label>\n";$jg[$ig]++;}echo$Yi;if($Th)echo
script("ajaxSetHtml(\'".js_escape(ME)."script=db\');");}else{echo"<thead><tr><th style=\'text-align: left;\'>","<label class=\'block\'><input type=\'checkbox\' id=\'check-databases\'".($a==""?" checked":"").">".\'Database\'."</label>",script("qs(\'#check-databases\').onclick = partial(formCheck, /^databases\\[/);",""),"</thead>\n";$k=$b->databases();if($k){foreach($k
as$l){if(!information_schema($l)){$ig=preg_replace(\'~_.*~\',\'\',$l);echo"<tr><td>".checkbox("databases[]",$l,$a==""||$a=="$ig%",$l,"","block")."\n";$jg[$ig]++;}}}else
echo"<tr><td><textarea name=\'databases\' rows=\'10\' cols=\'20\'></textarea>";}echo\'</table>
</form>
\';$Zc=true;foreach($jg
as$z=>$X){if($z!=""&&$X>1){echo($Zc?"<p>":" ")."<a href=\'".h(ME)."dump=".urlencode("$z%")."\'>".h($z)."</a>";$Zc=false;}}}elseif(isset($_GET["privileges"])){page_header(\'Privileges\');echo\'<p class="links"><a href="\'.h(ME).\'user=">\'.\'Create user\'."</a>";$H=$g->query("SELECT User, Host FROM mysql.".(DB==""?"user":"db WHERE ".q(DB)." LIKE Db")." ORDER BY Host, User");$od=$H;if(!$H)$H=$g->query("SELECT SUBSTRING_INDEX(CURRENT_USER, \'@\', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, \'@\', -1) AS Host");echo"<form action=\'\'><p>\n";hidden_fields_get();echo"<input type=\'hidden\' name=\'db\' value=\'".h(DB)."\'>\n",($od?"":"<input type=\'hidden\' name=\'grant\' value=\'\'>\n"),"<table cellspacing=\'0\'>\n","<thead><tr><th>".\'Username\'."<th>".\'Server\'."<th></thead>\n";while($J=$H->fetch_assoc())echo\'<tr\'.odd().\'><td>\'.h($J["User"])."<td>".h($J["Host"]).\'<td><a href="\'.h(ME.\'user=\'.urlencode($J["User"]).\'&host=\'.urlencode($J["Host"])).\'">\'.\'Edit\'."</a>\n";if(!$od||DB!="")echo"<tr".odd()."><td><input name=\'user\' autocapitalize=\'off\'><td><input name=\'host\' value=\'localhost\' autocapitalize=\'off\'><td><input type=\'submit\' value=\'".\'Edit\'."\'>\n";echo"</table>\n","</form>\n";}elseif(isset($_GET["sql"])){if(!$n&&$_POST["export"]){dump_headers("sql");$b->dumpTable("","");$b->dumpData("","table",$_POST["query"]);exit;}restart_session();$Bd=&get_session("queries");$Ad=&$Bd[DB];if(!$n&&$_POST["clear"]){$Ad=array();redirect(remove_from_uri("history"));}page_header((isset($_GET["import"])?\'Import\':\'SQL command\'),$n);if(!$n&&$_POST){$ld=false;if(!isset($_GET["import"]))$G=$_POST["query"];elseif($_POST["webfile"]){$zh=$b->importServerPath();$ld=@fopen((file_exists($zh)?$zh:"compress.zlib://$zh.gz"),"rb");$G=($ld?fread($ld,1e6):false);}else$G=get_file("sql_file",true);if(is_string($G)){if(function_exists(\'memory_get_usage\'))@ini_set("memory_limit",max(ini_bytes("memory_limit"),2*strlen($G)+memory_get_usage()+8e6));if($G!=""&&strlen($G)<1e6){$ug=$G.(preg_match("~;[ \t\r\n]*\$~",$G)?"":";");if(!$Ad||reset(end($Ad))!=$ug){restart_session();$Ad[]=array($ug,time());set_session("queries",$Bd);stop_session();}}$wh="(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";$ac=";";$hf=0;$xc=true;$h=connect();if(is_object($h)&&DB!=""){$h->select_db(DB);if($_GET["ns"]!="")set_schema($_GET["ns"],$h);}$qb=0;$Bc=array();$Pf=\'[\\'"\'.($y=="sql"?\'`#\':($y=="sqlite"?\'`[\':($y=="mssql"?\'[\':\'\'))).\']|/\*|-- |$\'.($y=="pgsql"?\'|\$[^$]*\$\':\'\');$pi=microtime(true);parse_str($_COOKIE["adminer_export"],$xa);$oc=$b->dumpFormat();unset($oc["sql"]);while($G!=""){if(!$hf&&preg_match("~^$wh*+DELIMITER\\s+(\\S+)~i",$G,$C)){$ac=$C[1];$G=substr($G,strlen($C[0]));}else{preg_match(\'(\'.preg_quote($ac)."\\s*|$Pf)",$G,$C,PREG_OFFSET_CAPTURE,$hf);list($jd,$eg)=$C[0];if(!$jd&&$ld&&!feof($ld))$G.=fread($ld,1e5);else{if(!$jd&&rtrim($G)=="")break;$hf=$eg+strlen($jd);if($jd&&rtrim($jd)!=$ac){while(preg_match(\'(\'.($jd==\'/*\'?\'\*/\':($jd==\'[\'?\']\':(preg_match(\'~^-- |^#~\',$jd)?"\n":preg_quote($jd)."|\\\\."))).\'|$)s\',$G,$C,PREG_OFFSET_CAPTURE,$hf)){$Xg=$C[0][0];if(!$Xg&&$ld&&!feof($ld))$G.=fread($ld,1e5);else{$hf=$C[0][1]+strlen($Xg);if($Xg[0]!="\\")break;}}}else{$xc=false;$ug=substr($G,0,$eg);$qb++;$mg="<pre id=\'sql-$qb\'><code class=\'jush-$y\'>".$b->sqlCommandQuery($ug)."</code></pre>\n";if($y=="sqlite"&&preg_match("~^$wh*+ATTACH\\b~i",$ug,$C)){echo$mg,"<p class=\'error\'>".\'ATTACH queries are not supported.\'."\n";$Bc[]=" <a href=\'#sql-$qb\'>$qb</a>";if($_POST["error_stops"])break;}else{if(!$_POST["only_errors"]){echo$mg;ob_flush();flush();}$Ch=microtime(true);if($g->multi_query($ug)&&is_object($h)&&preg_match("~^$wh*+USE\\b~i",$ug))$h->query($ug);do{$H=$g->store_result();if($g->error){echo($_POST["only_errors"]?$mg:""),"<p class=\'error\'>".\'Error in query\'.($g->errno?" ($g->errno)":"").": ".error()."\n";$Bc[]=" <a href=\'#sql-$qb\'>$qb</a>";if($_POST["error_stops"])break
2;}else{$di=" <span class=\'time\'>(".format_time($Ch).")</span>".(strlen($ug)<1000?" <a href=\'".h(ME)."sql=".urlencode(trim($ug))."\'>".\'Edit\'."</a>":"");$za=$g->affected_rows;$bj=($_POST["only_errors"]?"":$m->warnings());$cj="warnings-$qb";if($bj)$di.=", <a href=\'#$cj\'>".\'Warnings\'."</a>".script("qsl(\'a\').onclick = partial(toggle, \'$cj\');","");$Jc=null;$Kc="explain-$qb";if(is_object($H)){$_=$_POST["limit"];$Bf=select($H,$h,array(),$_);if(!$_POST["only_errors"]){echo"<form action=\'\' method=\'post\'>\n";$df=$H->num_rows;echo"<p>".($df?($_&&$df>$_?sprintf(\'%d / \',$_):"").lang(array(\'%d row\',\'%d rows\'),$df):""),$di;if($h&&preg_match("~^($wh|\\()*+SELECT\\b~i",$ug)&&($Jc=explain($h,$ug)))echo", <a href=\'#$Kc\'>Explain</a>".script("qsl(\'a\').onclick = partial(toggle, \'$Kc\');","");$u="export-$qb";echo", <a href=\'#$u\'>".\'Export\'."</a>".script("qsl(\'a\').onclick = partial(toggle, \'$u\');","")."<span id=\'$u\' class=\'hidden\'>: ".html_select("output",$b->dumpOutput(),$xa["output"])." ".html_select("format",$oc,$xa["format"])."<input type=\'hidden\' name=\'query\' value=\'".h($ug)."\'>"." <input type=\'submit\' name=\'export\' value=\'".\'Export\'."\'><input type=\'hidden\' name=\'token\' value=\'$ni\'></span>\n"."</form>\n";}}else{if(preg_match("~^$wh*+(CREATE|DROP|ALTER)$wh++(DATABASE|SCHEMA)\\b~i",$ug)){restart_session();set_session("dbs",null);stop_session();}if(!$_POST["only_errors"])echo"<p class=\'message\' title=\'".h($g->info)."\'>".lang(array(\'Query executed OK, %d row affected.\',\'Query executed OK, %d rows affected.\'),$za)."$di\n";}echo($bj?"<div id=\'$cj\' class=\'hidden\'>\n$bj</div>\n":"");if($Jc){echo"<div id=\'$Kc\' class=\'hidden\'>\n";select($Jc,$h,$Bf);echo"</div>\n";}}$Ch=microtime(true);}while($g->next_result());}$G=substr($G,$hf);$hf=0;}}}}if($xc)echo"<p class=\'message\'>".\'No commands to execute.\'."\n";elseif($_POST["only_errors"]){echo"<p class=\'message\'>".lang(array(\'%d query executed OK.\',\'%d queries executed OK.\'),$qb-count($Bc))," <span class=\'time\'>(".format_time($pi).")</span>\n";}elseif($Bc&&$qb>1)echo"<p class=\'error\'>".\'Error in query\'.": ".implode("",$Bc)."\n";}else
echo"<p class=\'error\'>".upload_error($G)."\n";}echo\'
<form action="" method="post" enctype="multipart/form-data" id="form">
\';$Hc="<input type=\'submit\' value=\'".\'Execute\'."\' title=\'Ctrl+Enter\'>";if(!isset($_GET["import"])){$ug=$_GET["sql"];if($_POST)$ug=$_POST["query"];elseif($_GET["history"]=="all")$ug=$Ad;elseif($_GET["history"]!="")$ug=$Ad[$_GET["history"]][0];echo"<p>";textarea("query",$ug,20);echo
script(($_POST?"":"qs(\'textarea\').focus();\n")."qs(\'#form\').onsubmit = partial(sqlSubmit, qs(\'#form\'), \'".js_escape(remove_from_uri("sql|limit|error_stops|only_errors|history"))."\');"),"<p>$Hc\n",\'Limit rows\'.": <input type=\'number\' name=\'limit\' class=\'size\' value=\'".h($_POST?$_POST["limit"]:$_GET["limit"])."\'>\n";}else{echo"<fieldset><legend>".\'File upload\'."</legend><div>";$ud=(extension_loaded("zlib")?"[.gz]":"");echo(ini_bool("file_uploads")?"SQL$ud (&lt; ".ini_get("upload_max_filesize")."B): <input type=\'file\' name=\'sql_file[]\' multiple>\n$Hc":\'File uploads are disabled.\'),"</div></fieldset>\n";$Id=$b->importServerPath();if($Id){echo"<fieldset><legend>".\'From server\'."</legend><div>",sprintf(\'Webserver file %s\',"<code>".h($Id)."$ud</code>"),\' <input type="submit" name="webfile" value="\'.\'Run file\'.\'">\',"</div></fieldset>\n";}echo"<p>";}echo
checkbox("error_stops",1,($_POST?$_POST["error_stops"]:isset($_GET["import"])||$_GET["error_stops"]),\'Stop on error\')."\n",checkbox("only_errors",1,($_POST?$_POST["only_errors"]:isset($_GET["import"])||$_GET["only_errors"]),\'Show only errors\')."\n","<input type=\'hidden\' name=\'token\' value=\'$ni\'>\n";if(!isset($_GET["import"])&&$Ad){print_fieldset("history",\'History\',$_GET["history"]!="");for($X=end($Ad);$X;$X=prev($Ad)){$z=key($Ad);list($ug,$di,$sc)=$X;echo\'<a href="\'.h(ME."sql=&history=$z").\'">\'.\'Edit\'."</a>"." <span class=\'time\' title=\'".@date(\'Y-m-d\',$di)."\'>".@date("H:i:s",$di)."</span>"." <code class=\'jush-$y\'>".shorten_utf8(ltrim(str_replace("\n"," ",str_replace("\r","",preg_replace(\'~^(#|-- ).*~m\',\'\',$ug)))),80,"</code>").($sc?" <span class=\'time\'>($sc)</span>":"")."<br>\n";}echo"<input type=\'submit\' name=\'clear\' value=\'".\'Clear\'."\'>\n","<a href=\'".h(ME."sql=&history=all")."\'>".\'Edit all\'."</a>\n","</div></fieldset>\n";}echo\'</form>
\';}elseif(isset($_GET["edit"])){$a=$_GET["edit"];$p=fields($a);$Z=(isset($_GET["select"])?($_POST["check"]&&count($_POST["check"])==1?where_check($_POST["check"][0],$p):""):where($_GET,$p));$Ii=(isset($_GET["select"])?$_POST["edit"]:$Z);foreach($p
as$D=>$o){if(!isset($o["privileges"][$Ii?"update":"insert"])||$b->fieldName($o)==""||$o["generated"])unset($p[$D]);}if($_POST&&!$n&&!isset($_GET["select"])){$B=$_POST["referer"];if($_POST["insert"])$B=($Ii?null:$_SERVER["REQUEST_URI"]);elseif(!preg_match(\'~^.+&select=.+$~\',$B))$B=ME."select=".urlencode($a);$x=indexes($a);$Di=unique_array($_GET["where"],$x);$xg="\nWHERE $Z";if(isset($_POST["delete"]))queries_redirect($B,\'Item has been deleted.\',$m->delete($a,$xg,!$Di));else{$N=array();foreach($p
as$D=>$o){$X=process_input($o);if($X!==false&&$X!==null)$N[idf_escape($D)]=$X;}if($Ii){if(!$N)redirect($B);queries_redirect($B,\'Item has been updated.\',$m->update($a,$N,$xg,!$Di));if(is_ajax()){page_headers();page_messages($n);exit;}}else{$H=$m->insert($a,$N);$oe=($H?last_id():0);queries_redirect($B,sprintf(\'Item%s has been inserted.\',($oe?" $oe":"")),$H);}}}$J=null;if($_POST["save"])$J=(array)$_POST["fields"];elseif($Z){$L=array();foreach($p
as$D=>$o){if(isset($o["privileges"]["select"])){$Fa=convert_field($o);if($_POST["clone"]&&$o["auto_increment"])$Fa="\'\'";if($y=="sql"&&preg_match("~enum|set~",$o["type"]))$Fa="1*".idf_escape($D);$L[]=($Fa?"$Fa AS ":"").idf_escape($D);}}$J=array();if(!support("table"))$L=array("*");if($L){$H=$m->select($a,$L,array($Z),$L,array(),(isset($_GET["select"])?2:1));if(!$H)$n=error();else{$J=$H->fetch_assoc();if(!$J)$J=false;}if(isset($_GET["select"])&&(!$J||$H->fetch_assoc()))$J=null;}}if(!support("table")&&!$p){if(!$Z){$H=$m->select($a,array("*"),$Z,array("*"));$J=($H?$H->fetch_assoc():false);if(!$J)$J=array($m->primary=>"");}if($J){foreach($J
as$z=>$X){if(!$Z)$J[$z]=null;$p[$z]=array("field"=>$z,"null"=>($z!=$m->primary),"auto_increment"=>($z==$m->primary));}}}edit_form($a,$p,$J,$Ii);}elseif(isset($_GET["create"])){$a=$_GET["create"];$Rf=array();foreach(array(\'HASH\',\'LINEAR HASH\',\'KEY\',\'LINEAR KEY\',\'RANGE\',\'LIST\')as$z)$Rf[$z]=$z;$Dg=referencable_primary($a);$hd=array();foreach($Dg
as$Oh=>$o)$hd[str_replace("`","``",$Oh)."`".str_replace("`","``",$o["field"])]=$Oh;$Ef=array();$R=array();if($a!=""){$Ef=fields($a);$R=table_status($a);if(!$R)$n=\'No tables.\';}$J=$_POST;$J["fields"]=(array)$J["fields"];if($J["auto_increment_col"])$J["fields"][$J["auto_increment_col"]]["auto_increment"]=true;if($_POST)set_adminer_settings(array("comments"=>$_POST["comments"],"defaults"=>$_POST["defaults"]));if($_POST&&!process_fields($J["fields"])&&!$n){if($_POST["drop"])queries_redirect(substr(ME,0,-1),\'Table has been dropped.\',drop_tables(array($a)));else{$p=array();$Ca=array();$Mi=false;$fd=array();$Df=reset($Ef);$Aa=" FIRST";foreach($J["fields"]as$z=>$o){$r=$hd[$o["type"]];$_i=($r!==null?$Dg[$r]:$o);if($o["field"]!=""){if(!$o["has_default"])$o["default"]=null;if($z==$J["auto_increment_col"])$o["auto_increment"]=true;$rg=process_field($o,$_i);$Ca[]=array($o["orig"],$rg,$Aa);if(!$Df||$rg!=process_field($Df,$Df)){$p[]=array($o["orig"],$rg,$Aa);if($o["orig"]!=""||$Aa)$Mi=true;}if($r!==null)$fd[idf_escape($o["field"])]=($a!=""&&$y!="sqlite"?"ADD":" ").format_foreign_key(array(\'table\'=>$hd[$o["type"]],\'source\'=>array($o["field"]),\'target\'=>array($_i["field"]),\'on_delete\'=>$o["on_delete"],));$Aa=" AFTER ".idf_escape($o["field"]);}elseif($o["orig"]!=""){$Mi=true;$p[]=array($o["orig"]);}if($o["orig"]!=""){$Df=next($Ef);if(!$Df)$Aa="";}}$Tf="";if($Rf[$J["partition_by"]]){$Uf=array();if($J["partition_by"]==\'RANGE\'||$J["partition_by"]==\'LIST\'){foreach(array_filter($J["partition_names"])as$z=>$X){$Y=$J["partition_values"][$z];$Uf[]="\n  PARTITION ".idf_escape($X)." VALUES ".($J["partition_by"]==\'RANGE\'?"LESS THAN":"IN").($Y!=""?" ($Y)":" MAXVALUE");}}$Tf.="\nPARTITION BY $J[partition_by]($J[partition])".($Uf?" (".implode(",",$Uf)."\n)":($J["partitions"]?" PARTITIONS ".(+$J["partitions"]):""));}elseif(support("partitioning")&&preg_match("~partitioned~",$R["Create_options"]))$Tf.="\nREMOVE PARTITIONING";$Ke=\'Table has been altered.\';if($a==""){cookie("adminer_engine",$J["Engine"]);$Ke=\'Table has been created.\';}$D=trim($J["name"]);queries_redirect(ME.(support("table")?"table=":"select=").urlencode($D),$Ke,alter_table($a,$D,($y=="sqlite"&&($Mi||$fd)?$Ca:$p),$fd,($J["Comment"]!=$R["Comment"]?$J["Comment"]:null),($J["Engine"]&&$J["Engine"]!=$R["Engine"]?$J["Engine"]:""),($J["Collation"]&&$J["Collation"]!=$R["Collation"]?$J["Collation"]:""),($J["Auto_increment"]!=""?number($J["Auto_increment"]):""),$Tf));}}page_header(($a!=""?\'Alter table\':\'Create table\'),$n,array("table"=>$a),h($a));if(!$_POST){$J=array("Engine"=>$_COOKIE["adminer_engine"],"fields"=>array(array("field"=>"","type"=>(isset($U["int"])?"int":(isset($U["integer"])?"integer":"")),"on_update"=>"")),"partition_names"=>array(""),);if($a!=""){$J=$R;$J["name"]=$a;$J["fields"]=array();if(!$_GET["auto_increment"])$J["Auto_increment"]="";foreach($Ef
as$o){$o["has_default"]=isset($o["default"]);$J["fields"][]=$o;}if(support("partitioning")){$md="FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = ".q(DB)." AND TABLE_NAME = ".q($a);$H=$g->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $md ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");list($J["partition_by"],$J["partitions"],$J["partition"])=$H->fetch_row();$Uf=get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $md AND PARTITION_NAME != \'\' ORDER BY PARTITION_ORDINAL_POSITION");$Uf[""]="";$J["partition_names"]=array_keys($Uf);$J["partition_values"]=array_values($Uf);}}}$lb=collations();$zc=engines();foreach($zc
as$yc){if(!strcasecmp($yc,$J["Engine"])){$J["Engine"]=$yc;break;}}echo\'
<form action="" method="post" id="form">
<p>
\';if(support("columns")||$a==""){echo\'Table name: <input name="name" data-maxlength="64" value="\',h($J["name"]),\'" autocapitalize="off">
\';if($a==""&&!$_POST)echo
script("focus(qs(\'#form\')[\'name\']);");echo($zc?"<select name=\'Engine\'>".optionlist(array(""=>"(".\'engine\'.")")+$zc,$J["Engine"])."</select>".on_help("getTarget(event).value",1).script("qsl(\'select\').onchange = helpClose;"):""),\' \',($lb&&!preg_match("~sqlite|mssql~",$y)?html_select("Collation",array(""=>"(".\'collation\'.")")+$lb,$J["Collation"]):""),\' <input type="submit" value="Save">
\';}echo\'
\';if(support("columns")){echo\'<div class="scrollable">
<table cellspacing="0" id="edit-fields" class="nowrap">
\';edit_fields($J["fields"],$lb,"TABLE",$hd);echo\'</table>
\',script("editFields();"),\'</div>
<p>
Auto Increment: <input type="number" name="Auto_increment" size="6" value="\',h($J["Auto_increment"]),\'">
\',checkbox("defaults",1,($_POST?$_POST["defaults"]:adminer_setting("defaults")),\'Default values\',"columnShow(this.checked, 5)","jsonly"),(support("comment")?checkbox("comments",1,($_POST?$_POST["comments"]:adminer_setting("comments")),\'Comment\',"editingCommentsClick(this, true);","jsonly").\' <input name="Comment" value="\'.h($J["Comment"]).\'" data-maxlength="\'.(min_version(5.5)?2048:60).\'">\':\'\'),\'<p>
<input type="submit" value="Save">
\';}echo\'
\';if($a!=""){echo\'<input type="submit" name="drop" value="Drop">\',confirm(sprintf(\'Drop %s?\',$a));}if(support("partitioning")){$Sf=preg_match(\'~RANGE|LIST~\',$J["partition_by"]);print_fieldset("partition",\'Partition by\',$J["partition_by"]);echo\'<p>
\',"<select name=\'partition_by\'>".optionlist(array(""=>"")+$Rf,$J["partition_by"])."</select>".on_help("getTarget(event).value.replace(/./, \'PARTITION BY \$&\')",1).script("qsl(\'select\').onchange = partitionByChange;"),\'(<input name="partition" value="\',h($J["partition"]),\'">)
Partitions: <input type="number" name="partitions" class="size\',($Sf||!$J["partition_by"]?" hidden":""),\'" value="\',h($J["partitions"]),\'">
<table cellspacing="0" id="partition-table"\',($Sf?"":" class=\'hidden\'"),\'>
<thead><tr><th>Partition name<th>Values</thead>
\';foreach($J["partition_names"]as$z=>$X){echo\'<tr>\',\'<td><input name="partition_names[]" value="\'.h($X).\'" autocapitalize="off">\',($z==count($J["partition_names"])-1?script("qsl(\'input\').oninput = partitionNameChange;"):\'\'),\'<td><input name="partition_values[]" value="\'.h($J["partition_values"][$z]).\'">\';}echo\'</table>
</div></fieldset>
\';}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["indexes"])){$a=$_GET["indexes"];$Ld=array("PRIMARY","UNIQUE","INDEX");$R=table_status($a,true);if(preg_match(\'~MyISAM|M?aria\'.(min_version(5.6,\'10.0.5\')?\'|InnoDB\':\'\').\'~i\',$R["Engine"]))$Ld[]="FULLTEXT";if(preg_match(\'~MyISAM|M?aria\'.(min_version(5.7,\'10.2.2\')?\'|InnoDB\':\'\').\'~i\',$R["Engine"]))$Ld[]="SPATIAL";$x=indexes($a);$kg=array();if($y=="mongo"){$kg=$x["_id_"];unset($Ld[0]);unset($x["_id_"]);}$J=$_POST;if($_POST&&!$n&&!$_POST["add"]&&!$_POST["drop_col"]){$c=array();foreach($J["indexes"]as$w){$D=$w["name"];if(in_array($w["type"],$Ld)){$f=array();$ue=array();$cc=array();$N=array();ksort($w["columns"]);foreach($w["columns"]as$z=>$e){if($e!=""){$te=$w["lengths"][$z];$bc=$w["descs"][$z];$N[]=idf_escape($e).($te?"(".(+$te).")":"").($bc?" DESC":"");$f[]=$e;$ue[]=($te?$te:null);$cc[]=$bc;}}if($f){$Ic=$x[$D];if($Ic){ksort($Ic["columns"]);ksort($Ic["lengths"]);ksort($Ic["descs"]);if($w["type"]==$Ic["type"]&&array_values($Ic["columns"])===$f&&(!$Ic["lengths"]||array_values($Ic["lengths"])===$ue)&&array_values($Ic["descs"])===$cc){unset($x[$D]);continue;}}$c[]=array($w["type"],$D,$N);}}}foreach($x
as$D=>$Ic)$c[]=array($Ic["type"],$D,"DROP");if(!$c)redirect(ME."table=".urlencode($a));queries_redirect(ME."table=".urlencode($a),\'Indexes have been altered.\',alter_indexes($a,$c));}page_header(\'Indexes\',$n,array("table"=>$a),h($a));$p=array_keys(fields($a));if($_POST["add"]){foreach($J["indexes"]as$z=>$w){if($w["columns"][count($w["columns"])]!="")$J["indexes"][$z]["columns"][]="";}$w=end($J["indexes"]);if($w["type"]||array_filter($w["columns"],\'strlen\'))$J["indexes"][]=array("columns"=>array(1=>""));}if(!$J){foreach($x
as$z=>$w){$x[$z]["name"]=$z;$x[$z]["columns"][]="";}$x[]=array("columns"=>array(1=>""));$J["indexes"]=$x;}echo\'
<form action="" method="post">
<div class="scrollable">
<table cellspacing="0" class="nowrap">
<thead><tr>
<th id="label-type">Index Type
<th><input type="submit" class="wayoff">Column (length)
<th id="label-name">Name
<th><noscript>\',"<input type=\'image\' class=\'icon\' name=\'add[0]\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=plus.gif&version=4.8.1")."\' alt=\'+\' title=\'".\'Add next\'."\'>",\'</noscript>
</thead>
\';if($kg){echo"<tr><td>PRIMARY<td>";foreach($kg["columns"]as$z=>$e){echo
select_input(" disabled",$p,$e),"<label><input disabled type=\'checkbox\'>".\'descending\'."</label> ";}echo"<td><td>\n";}$ee=1;foreach($J["indexes"]as$w){if(!$_POST["drop_col"]||$ee!=key($_POST["drop_col"])){echo"<tr><td>".html_select("indexes[$ee][type]",array(-1=>"")+$Ld,$w["type"],($ee==count($J["indexes"])?"indexesAddRow.call(this);":1),"label-type"),"<td>";ksort($w["columns"]);$t=1;foreach($w["columns"]as$z=>$e){echo"<span>".select_input(" name=\'indexes[$ee][columns][$t]\' title=\'".\'Column\'."\'",($p?array_combine($p,$p):$p),$e,"partial(".($t==count($w["columns"])?"indexesAddColumn":"indexesChangeColumn").", \'".js_escape($y=="sql"?"":$_GET["indexes"]."_")."\')"),($y=="sql"||$y=="mssql"?"<input type=\'number\' name=\'indexes[$ee][lengths][$t]\' class=\'size\' value=\'".h($w["lengths"][$z])."\' title=\'".\'Length\'."\'>":""),(support("descidx")?checkbox("indexes[$ee][descs][$t]",1,$w["descs"][$z],\'descending\'):"")," </span>";$t++;}echo"<td><input name=\'indexes[$ee][name]\' value=\'".h($w["name"])."\' autocapitalize=\'off\' aria-labelledby=\'label-name\'>\n","<td><input type=\'image\' class=\'icon\' name=\'drop_col[$ee]\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=cross.gif&version=4.8.1")."\' alt=\'x\' title=\'".\'Remove\'."\'>".script("qsl(\'input\').onclick = partial(editingRemoveRow, \'indexes\$1[type]\');");}$ee++;}echo\'</table>
</div>
<p>
<input type="submit" value="Save">
<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["database"])){$J=$_POST;if($_POST&&!$n&&!isset($_POST["add_x"])){$D=trim($J["name"]);if($_POST["drop"]){$_GET["db"]="";queries_redirect(remove_from_uri("db|database"),\'Database has been dropped.\',drop_databases(array(DB)));}elseif(DB!==$D){if(DB!=""){$_GET["db"]=$D;queries_redirect(preg_replace(\'~\bdb=[^&]*&~\',\'\',ME)."db=".urlencode($D),\'Database has been renamed.\',rename_database($D,$J["collation"]));}else{$k=explode("\n",str_replace("\r","",$D));$Ih=true;$ne="";foreach($k
as$l){if(count($k)==1||$l!=""){if(!create_database($l,$J["collation"]))$Ih=false;$ne=$l;}}restart_session();set_session("dbs",null);queries_redirect(ME."db=".urlencode($ne),\'Database has been created.\',$Ih);}}else{if(!$J["collation"])redirect(substr(ME,0,-1));query_redirect("ALTER DATABASE ".idf_escape($D).(preg_match(\'~^[a-z0-9_]+$~i\',$J["collation"])?" COLLATE $J[collation]":""),substr(ME,0,-1),\'Database has been altered.\');}}page_header(DB!=""?\'Alter database\':\'Create database\',$n,array(),h(DB));$lb=collations();$D=DB;if($_POST)$D=$J["name"];elseif(DB!="")$J["collation"]=db_collation(DB,$lb);elseif($y=="sql"){foreach(get_vals("SHOW GRANTS")as$od){if(preg_match(\'~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~\',$od,$C)&&$C[1]){$D=stripcslashes(idf_unescape("`$C[2]`"));break;}}}echo\'
<form action="" method="post">
<p>
\',($_POST["add_x"]||strpos($D,"\n")?\'<textarea id="name" name="name" rows="10" cols="40">\'.h($D).\'</textarea><br>\':\'<input name="name" id="name" value="\'.h($D).\'" data-maxlength="64" autocapitalize="off">\')."\n".($lb?html_select("collation",array(""=>"(".\'collation\'.")")+$lb,$J["collation"]).doc_link(array(\'sql\'=>"charset-charsets.html",\'mariadb\'=>"supported-character-sets-and-collations/",\'mssql\'=>"ms187963.aspx",)):""),script("focus(qs(\'#name\'));"),\'<input type="submit" value="Save">
\';if(DB!="")echo"<input type=\'submit\' name=\'drop\' value=\'".\'Drop\'."\'>".confirm(sprintf(\'Drop %s?\',DB))."\n";elseif(!$_POST["add_x"]&&$_GET["db"]=="")echo"<input type=\'image\' class=\'icon\' name=\'add\' src=\'".h(preg_replace("~\\?.*~","",ME)."?file=plus.gif&version=4.8.1")."\' alt=\'+\' title=\'".\'Add next\'."\'>\n";echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["scheme"])){$J=$_POST;if($_POST&&!$n){$A=preg_replace(\'~ns=[^&]*&~\',\'\',ME)."ns=";if($_POST["drop"])query_redirect("DROP SCHEMA ".idf_escape($_GET["ns"]),$A,\'Schema has been dropped.\');else{$D=trim($J["name"]);$A.=urlencode($D);if($_GET["ns"]=="")query_redirect("CREATE SCHEMA ".idf_escape($D),$A,\'Schema has been created.\');elseif($_GET["ns"]!=$D)query_redirect("ALTER SCHEMA ".idf_escape($_GET["ns"])." RENAME TO ".idf_escape($D),$A,\'Schema has been altered.\');else
redirect($A);}}page_header($_GET["ns"]!=""?\'Alter schema\':\'Create schema\',$n);if(!$J)$J["name"]=$_GET["ns"];echo\'
<form action="" method="post">
<p><input name="name" id="name" value="\',h($J["name"]),\'" autocapitalize="off">
\',script("focus(qs(\'#name\'));"),\'<input type="submit" value="Save">
\';if($_GET["ns"]!="")echo"<input type=\'submit\' name=\'drop\' value=\'".\'Drop\'."\'>".confirm(sprintf(\'Drop %s?\',$_GET["ns"]))."\n";echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["call"])){$da=($_GET["name"]?$_GET["name"]:$_GET["call"]);page_header(\'Call\'.": ".h($da),$n);$Tg=routine($_GET["call"],(isset($_GET["callf"])?"FUNCTION":"PROCEDURE"));$Jd=array();$If=array();foreach($Tg["fields"]as$t=>$o){if(substr($o["inout"],-3)=="OUT")$If[$t]="@".idf_escape($o["field"])." AS ".idf_escape($o["field"]);if(!$o["inout"]||substr($o["inout"],0,2)=="IN")$Jd[]=$t;}if(!$n&&$_POST){$Xa=array();foreach($Tg["fields"]as$z=>$o){if(in_array($z,$Jd)){$X=process_input($o);if($X===false)$X="\'\'";if(isset($If[$z]))$g->query("SET @".idf_escape($o["field"])." = $X");}$Xa[]=(isset($If[$z])?"@".idf_escape($o["field"]):$X);}$G=(isset($_GET["callf"])?"SELECT":"CALL")." ".table($da)."(".implode(", ",$Xa).")";$Ch=microtime(true);$H=$g->multi_query($G);$za=$g->affected_rows;echo$b->selectQuery($G,$Ch,!$H);if(!$H)echo"<p class=\'error\'>".error()."\n";else{$h=connect();if(is_object($h))$h->select_db(DB);do{$H=$g->store_result();if(is_object($H))select($H,$h);else
echo"<p class=\'message\'>".lang(array(\'Routine has been called, %d row affected.\',\'Routine has been called, %d rows affected.\'),$za)." <span class=\'time\'>".@date("H:i:s")."</span>\n";}while($g->next_result());if($If)select($g->query("SELECT ".implode(", ",$If)));}}echo\'
<form action="" method="post">
\';if($Jd){echo"<table cellspacing=\'0\' class=\'layout\'>\n";foreach($Jd
as$z){$o=$Tg["fields"][$z];$D=$o["field"];echo"<tr><th>".$b->fieldName($o);$Y=$_POST["fields"][$D];if($Y!=""){if($o["type"]=="enum")$Y=+$Y;if($o["type"]=="set")$Y=array_sum($Y);}input($o,$Y,(string)$_POST["function"][$D]);echo"\n";}echo"</table>\n";}echo\'<p>
<input type="submit" value="Call">
<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["foreign"])){$a=$_GET["foreign"];$D=$_GET["name"];$J=$_POST;if($_POST&&!$n&&!$_POST["add"]&&!$_POST["change"]&&!$_POST["change-js"]){$Ke=($_POST["drop"]?\'Foreign key has been dropped.\':($D!=""?\'Foreign key has been altered.\':\'Foreign key has been created.\'));$B=ME."table=".urlencode($a);if(!$_POST["drop"]){$J["source"]=array_filter($J["source"],\'strlen\');ksort($J["source"]);$Wh=array();foreach($J["source"]as$z=>$X)$Wh[$z]=$J["target"][$z];$J["target"]=$Wh;}if($y=="sqlite")queries_redirect($B,$Ke,recreate_table($a,$a,array(),array(),array(" $D"=>($_POST["drop"]?"":" ".format_foreign_key($J)))));else{$c="ALTER TABLE ".table($a);$jc="\nDROP ".($y=="sql"?"FOREIGN KEY ":"CONSTRAINT ").idf_escape($D);if($_POST["drop"])query_redirect($c.$jc,$B,$Ke);else{query_redirect($c.($D!=""?"$jc,":"")."\nADD".format_foreign_key($J),$B,$Ke);$n=\'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.\'."<br>$n";}}}page_header(\'Foreign key\',$n,array("table"=>$a),h($a));if($_POST){ksort($J["source"]);if($_POST["add"])$J["source"][]="";elseif($_POST["change"]||$_POST["change-js"])$J["target"]=array();}elseif($D!=""){$hd=foreign_keys($a);$J=$hd[$D];$J["source"][]="";}else{$J["table"]=$a;$J["source"]=array("");}echo\'
<form action="" method="post">
\';$vh=array_keys(fields($a));if($J["db"]!="")$g->select_db($J["db"]);if($J["ns"]!="")set_schema($J["ns"]);$Cg=array_keys(array_filter(table_status(\'\',true),\'fk_support\'));$Wh=array_keys(fields(in_array($J["table"],$Cg)?$J["table"]:reset($Cg)));$qf="this.form[\'change-js\'].value = \'1\'; this.form.submit();";echo"<p>".\'Target table\'.": ".html_select("table",$Cg,$J["table"],$qf)."\n";if($y=="pgsql")echo\'Schema\'.": ".html_select("ns",$b->schemas(),$J["ns"]!=""?$J["ns"]:$_GET["ns"],$qf);elseif($y!="sqlite"){$Ub=array();foreach($b->databases()as$l){if(!information_schema($l))$Ub[]=$l;}echo\'DB\'.": ".html_select("db",$Ub,$J["db"]!=""?$J["db"]:$_GET["db"],$qf);}echo\'<input type="hidden" name="change-js" value="">
<noscript><p><input type="submit" name="change" value="Change"></noscript>
<table cellspacing="0">
<thead><tr><th id="label-source">Source<th id="label-target">Target</thead>
\';$ee=0;foreach($J["source"]as$z=>$X){echo"<tr>","<td>".html_select("source[".(+$z)."]",array(-1=>"")+$vh,$X,($ee==count($J["source"])-1?"foreignAddRow.call(this);":1),"label-source"),"<td>".html_select("target[".(+$z)."]",$Wh,$J["target"][$z],1,"label-target");$ee++;}echo\'</table>
<p>
ON DELETE: \',html_select("on_delete",array(-1=>"")+explode("|",$pf),$J["on_delete"]),\' ON UPDATE: \',html_select("on_update",array(-1=>"")+explode("|",$pf),$J["on_update"]),doc_link(array(\'sql\'=>"innodb-foreign-key-constraints.html",\'mariadb\'=>"foreign-keys/",\'pgsql\'=>"sql-createtable.html#SQL-CREATETABLE-REFERENCES",\'mssql\'=>"ms174979.aspx",\'oracle\'=>"https://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm#sthref2903",)),\'<p>
<input type="submit" value="Save">
<noscript><p><input type="submit" name="add" value="Add column"></noscript>
\';if($D!=""){echo\'<input type="submit" name="drop" value="Drop">\',confirm(sprintf(\'Drop %s?\',$D));}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["view"])){$a=$_GET["view"];$J=$_POST;$Ff="VIEW";if($y=="pgsql"&&$a!=""){$O=table_status($a);$Ff=strtoupper($O["Engine"]);}if($_POST&&!$n){$D=trim($J["name"]);$Fa=" AS\n$J[select]";$B=ME."table=".urlencode($D);$Ke=\'View has been altered.\';$T=($_POST["materialized"]?"MATERIALIZED VIEW":"VIEW");if(!$_POST["drop"]&&$a==$D&&$y!="sqlite"&&$T=="VIEW"&&$Ff=="VIEW")query_redirect(($y=="mssql"?"ALTER":"CREATE OR REPLACE")." VIEW ".table($D).$Fa,$B,$Ke);else{$Yh=$D."_adminer_".uniqid();drop_create("DROP $Ff ".table($a),"CREATE $T ".table($D).$Fa,"DROP $T ".table($D),"CREATE $T ".table($Yh).$Fa,"DROP $T ".table($Yh),($_POST["drop"]?substr(ME,0,-1):$B),\'View has been dropped.\',$Ke,\'View has been created.\',$a,$D);}}if(!$_POST&&$a!=""){$J=view($a);$J["name"]=$a;$J["materialized"]=($Ff!="VIEW");if(!$n)$n=error();}page_header(($a!=""?\'Alter view\':\'Create view\'),$n,array("table"=>$a),h($a));echo\'
<form action="" method="post">
<p>Name: <input name="name" value="\',h($J["name"]),\'" data-maxlength="64" autocapitalize="off">
\',(support("materializedview")?" ".checkbox("materialized",1,$J["materialized"],\'Materialized view\'):""),\'<p>\';textarea("select",$J["select"]);echo\'<p>
<input type="submit" value="Save">
\';if($a!=""){echo\'<input type="submit" name="drop" value="Drop">\',confirm(sprintf(\'Drop %s?\',$a));}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["event"])){$aa=$_GET["event"];$Wd=array("YEAR","QUARTER","MONTH","DAY","HOUR","MINUTE","WEEK","SECOND","YEAR_MONTH","DAY_HOUR","DAY_MINUTE","DAY_SECOND","HOUR_MINUTE","HOUR_SECOND","MINUTE_SECOND");$Eh=array("ENABLED"=>"ENABLE","DISABLED"=>"DISABLE","SLAVESIDE_DISABLED"=>"DISABLE ON SLAVE");$J=$_POST;if($_POST&&!$n){if($_POST["drop"])query_redirect("DROP EVENT ".idf_escape($aa),substr(ME,0,-1),\'Event has been dropped.\');elseif(in_array($J["INTERVAL_FIELD"],$Wd)&&isset($Eh[$J["STATUS"]])){$Yg="\nON SCHEDULE ".($J["INTERVAL_VALUE"]?"EVERY ".q($J["INTERVAL_VALUE"])." $J[INTERVAL_FIELD]".($J["STARTS"]?" STARTS ".q($J["STARTS"]):"").($J["ENDS"]?" ENDS ".q($J["ENDS"]):""):"AT ".q($J["STARTS"]))." ON COMPLETION".($J["ON_COMPLETION"]?"":" NOT")." PRESERVE";queries_redirect(substr(ME,0,-1),($aa!=""?\'Event has been altered.\':\'Event has been created.\'),queries(($aa!=""?"ALTER EVENT ".idf_escape($aa).$Yg.($aa!=$J["EVENT_NAME"]?"\nRENAME TO ".idf_escape($J["EVENT_NAME"]):""):"CREATE EVENT ".idf_escape($J["EVENT_NAME"]).$Yg)."\n".$Eh[$J["STATUS"]]." COMMENT ".q($J["EVENT_COMMENT"]).rtrim(" DO\n$J[EVENT_DEFINITION]",";").";"));}}page_header(($aa!=""?\'Alter event\'.": ".h($aa):\'Create event\'),$n);if(!$J&&$aa!=""){$K=get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = ".q(DB)." AND EVENT_NAME = ".q($aa));$J=reset($K);}echo\'
<form action="" method="post">
<table cellspacing="0" class="layout">
<tr><th>Name<td><input name="EVENT_NAME" value="\',h($J["EVENT_NAME"]),\'" data-maxlength="64" autocapitalize="off">
<tr><th title="datetime">Start<td><input name="STARTS" value="\',h("$J[EXECUTE_AT]$J[STARTS]"),\'">
<tr><th title="datetime">End<td><input name="ENDS" value="\',h($J["ENDS"]),\'">
<tr><th>Every<td><input type="number" name="INTERVAL_VALUE" value="\',h($J["INTERVAL_VALUE"]),\'" class="size"> \',html_select("INTERVAL_FIELD",$Wd,$J["INTERVAL_FIELD"]),\'<tr><th>Status<td>\',html_select("STATUS",$Eh,$J["STATUS"]),\'<tr><th>Comment<td><input name="EVENT_COMMENT" value="\',h($J["EVENT_COMMENT"]),\'" data-maxlength="64">
<tr><th><td>\',checkbox("ON_COMPLETION","PRESERVE",$J["ON_COMPLETION"]=="PRESERVE",\'On completion preserve\'),\'</table>
<p>\';textarea("EVENT_DEFINITION",$J["EVENT_DEFINITION"]);echo\'<p>
<input type="submit" value="Save">
\';if($aa!=""){echo\'<input type="submit" name="drop" value="Drop">\',confirm(sprintf(\'Drop %s?\',$aa));}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["procedure"])){$da=($_GET["name"]?$_GET["name"]:$_GET["procedure"]);$Tg=(isset($_GET["function"])?"FUNCTION":"PROCEDURE");$J=$_POST;$J["fields"]=(array)$J["fields"];if($_POST&&!process_fields($J["fields"])&&!$n){$Cf=routine($_GET["procedure"],$Tg);$Yh="$J[name]_adminer_".uniqid();drop_create("DROP $Tg ".routine_id($da,$Cf),create_routine($Tg,$J),"DROP $Tg ".routine_id($J["name"],$J),create_routine($Tg,array("name"=>$Yh)+$J),"DROP $Tg ".routine_id($Yh,$J),substr(ME,0,-1),\'Routine has been dropped.\',\'Routine has been altered.\',\'Routine has been created.\',$da,$J["name"]);}page_header(($da!=""?(isset($_GET["function"])?\'Alter function\':\'Alter procedure\').": ".h($da):(isset($_GET["function"])?\'Create function\':\'Create procedure\')),$n);if(!$_POST&&$da!=""){$J=routine($_GET["procedure"],$Tg);$J["name"]=$da;}$lb=get_vals("SHOW CHARACTER SET");sort($lb);$Ug=routine_languages();echo\'
<form action="" method="post" id="form">
<p>Name: <input name="name" value="\',h($J["name"]),\'" data-maxlength="64" autocapitalize="off">
\',($Ug?\'Language\'.": ".html_select("language",$Ug,$J["language"])."\n":""),\'<input type="submit" value="Save">
<div class="scrollable">
<table cellspacing="0" class="nowrap">
\';edit_fields($J["fields"],$lb,$Tg);if(isset($_GET["function"])){echo"<tr><td>".\'Return type\';edit_type("returns",$J["returns"],$lb,array(),($y=="pgsql"?array("void","trigger"):array()));}echo\'</table>
\',script("editFields();"),\'</div>
<p>\';textarea("definition",$J["definition"]);echo\'<p>
<input type="submit" value="Save">
\';if($da!=""){echo\'<input type="submit" name="drop" value="Drop">\',confirm(sprintf(\'Drop %s?\',$da));}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["sequence"])){$fa=$_GET["sequence"];$J=$_POST;if($_POST&&!$n){$A=substr(ME,0,-1);$D=trim($J["name"]);if($_POST["drop"])query_redirect("DROP SEQUENCE ".idf_escape($fa),$A,\'Sequence has been dropped.\');elseif($fa=="")query_redirect("CREATE SEQUENCE ".idf_escape($D),$A,\'Sequence has been created.\');elseif($fa!=$D)query_redirect("ALTER SEQUENCE ".idf_escape($fa)." RENAME TO ".idf_escape($D),$A,\'Sequence has been altered.\');else
redirect($A);}page_header($fa!=""?\'Alter sequence\'.": ".h($fa):\'Create sequence\',$n);if(!$J)$J["name"]=$fa;echo\'
<form action="" method="post">
<p><input name="name" value="\',h($J["name"]),\'" autocapitalize="off">
<input type="submit" value="Save">
\';if($fa!="")echo"<input type=\'submit\' name=\'drop\' value=\'".\'Drop\'."\'>".confirm(sprintf(\'Drop %s?\',$fa))."\n";echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["type"])){$ga=$_GET["type"];$J=$_POST;if($_POST&&!$n){$A=substr(ME,0,-1);if($_POST["drop"])query_redirect("DROP TYPE ".idf_escape($ga),$A,\'Type has been dropped.\');else
query_redirect("CREATE TYPE ".idf_escape(trim($J["name"]))." $J[as]",$A,\'Type has been created.\');}page_header($ga!=""?\'Alter type\'.": ".h($ga):\'Create type\',$n);if(!$J)$J["as"]="AS ";echo\'
<form action="" method="post">
<p>
\';if($ga!="")echo"<input type=\'submit\' name=\'drop\' value=\'".\'Drop\'."\'>".confirm(sprintf(\'Drop %s?\',$ga))."\n";else{echo"<input name=\'name\' value=\'".h($J[\'name\'])."\' autocapitalize=\'off\'>\n";textarea("as",$J["as"]);echo"<p><input type=\'submit\' value=\'".\'Save\'."\'>\n";}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["trigger"])){$a=$_GET["trigger"];$D=$_GET["name"];$yi=trigger_options();$J=(array)trigger($D,$a)+array("Trigger"=>$a."_bi");if($_POST){if(!$n&&in_array($_POST["Timing"],$yi["Timing"])&&in_array($_POST["Event"],$yi["Event"])&&in_array($_POST["Type"],$yi["Type"])){$of=" ON ".table($a);$jc="DROP TRIGGER ".idf_escape($D).($y=="pgsql"?$of:"");$B=ME."table=".urlencode($a);if($_POST["drop"])query_redirect($jc,$B,\'Trigger has been dropped.\');else{if($D!="")queries($jc);queries_redirect($B,($D!=""?\'Trigger has been altered.\':\'Trigger has been created.\'),queries(create_trigger($of,$_POST)));if($D!="")queries(create_trigger($of,$J+array("Type"=>reset($yi["Type"]))));}}$J=$_POST;}page_header(($D!=""?\'Alter trigger\'.": ".h($D):\'Create trigger\'),$n,array("table"=>$a));echo\'
<form action="" method="post" id="form">
<table cellspacing="0" class="layout">
<tr><th>Time<td>\',html_select("Timing",$yi["Timing"],$J["Timing"],"triggerChange(/^".preg_quote($a,"/")."_[ba][iud]$/, \'".js_escape($a)."\', this.form);"),\'<tr><th>Event<td>\',html_select("Event",$yi["Event"],$J["Event"],"this.form[\'Timing\'].onchange();"),(in_array("UPDATE OF",$yi["Event"])?" <input name=\'Of\' value=\'".h($J["Of"])."\' class=\'hidden\'>":""),\'<tr><th>Type<td>\',html_select("Type",$yi["Type"],$J["Type"]),\'</table>
<p>Name: <input name="Trigger" value="\',h($J["Trigger"]),\'" data-maxlength="64" autocapitalize="off">
\',script("qs(\'#form\')[\'Timing\'].onchange();"),\'<p>\';textarea("Statement",$J["Statement"]);echo\'<p>
<input type="submit" value="Save">
\';if($D!=""){echo\'<input type="submit" name="drop" value="Drop">\',confirm(sprintf(\'Drop %s?\',$D));}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["user"])){$ha=$_GET["user"];$pg=array(""=>array("All privileges"=>""));foreach(get_rows("SHOW PRIVILEGES")as$J){foreach(explode(",",($J["Privilege"]=="Grant option"?"":$J["Context"]))as$Db)$pg[$Db][$J["Privilege"]]=$J["Comment"];}$pg["Server Admin"]+=$pg["File access on server"];$pg["Databases"]["Create routine"]=$pg["Procedures"]["Create routine"];unset($pg["Procedures"]["Create routine"]);$pg["Columns"]=array();foreach(array("Select","Insert","Update","References")as$X)$pg["Columns"][$X]=$pg["Tables"][$X];unset($pg["Server Admin"]["Usage"]);foreach($pg["Tables"]as$z=>$X)unset($pg["Databases"][$z]);$Xe=array();if($_POST){foreach($_POST["objects"]as$z=>$X)$Xe[$X]=(array)$Xe[$X]+(array)$_POST["grants"][$z];}$pd=array();$mf="";if(isset($_GET["host"])&&($H=$g->query("SHOW GRANTS FOR ".q($ha)."@".q($_GET["host"])))){while($J=$H->fetch_row()){if(preg_match(\'~GRANT (.*) ON (.*) TO ~\',$J[0],$C)&&preg_match_all(\'~ *([^(,]*[^ ,(])( *\([^)]+\))?~\',$C[1],$Ce,PREG_SET_ORDER)){foreach($Ce
as$X){if($X[1]!="USAGE")$pd["$C[2]$X[2]"][$X[1]]=true;if(preg_match(\'~ WITH GRANT OPTION~\',$J[0]))$pd["$C[2]$X[2]"]["GRANT OPTION"]=true;}}if(preg_match("~ IDENTIFIED BY PASSWORD \'([^\']+)~",$J[0],$C))$mf=$C[1];}}if($_POST&&!$n){$nf=(isset($_GET["host"])?q($ha)."@".q($_GET["host"]):"\'\'");if($_POST["drop"])query_redirect("DROP USER $nf",ME."privileges=",\'User has been dropped.\');else{$Ze=q($_POST["user"])."@".q($_POST["host"]);$Wf=$_POST["pass"];if($Wf!=\'\'&&!$_POST["hashed"]&&!min_version(8)){$Wf=$g->result("SELECT PASSWORD(".q($Wf).")");$n=!$Wf;}$Jb=false;if(!$n){if($nf!=$Ze){$Jb=queries((min_version(5)?"CREATE USER":"GRANT USAGE ON *.* TO")." $Ze IDENTIFIED BY ".(min_version(8)?"":"PASSWORD ").q($Wf));$n=!$Jb;}elseif($Wf!=$mf)queries("SET PASSWORD FOR $Ze = ".q($Wf));}if(!$n){$Qg=array();foreach($Xe
as$ff=>$od){if(isset($_GET["grant"]))$od=array_filter($od);$od=array_keys($od);if(isset($_GET["grant"]))$Qg=array_diff(array_keys(array_filter($Xe[$ff],\'strlen\')),$od);elseif($nf==$Ze){$kf=array_keys((array)$pd[$ff]);$Qg=array_diff($kf,$od);$od=array_diff($od,$kf);unset($pd[$ff]);}if(preg_match(\'~^(.+)\s*(\(.*\))?$~U\',$ff,$C)&&(!grant("REVOKE",$Qg,$C[2]," ON $C[1] FROM $Ze")||!grant("GRANT",$od,$C[2]," ON $C[1] TO $Ze"))){$n=true;break;}}}if(!$n&&isset($_GET["host"])){if($nf!=$Ze)queries("DROP USER $nf");elseif(!isset($_GET["grant"])){foreach($pd
as$ff=>$Qg){if(preg_match(\'~^(.+)(\(.*\))?$~U\',$ff,$C))grant("REVOKE",array_keys($Qg),$C[2]," ON $C[1] FROM $Ze");}}}queries_redirect(ME."privileges=",(isset($_GET["host"])?\'User has been altered.\':\'User has been created.\'),!$n);if($Jb)$g->query("DROP USER $Ze");}}page_header((isset($_GET["host"])?\'Username\'.": ".h("$ha@$_GET[host]"):\'Create user\'),$n,array("privileges"=>array(\'\',\'Privileges\')));if($_POST){$J=$_POST;$pd=$Xe;}else{$J=$_GET+array("host"=>$g->result("SELECT SUBSTRING_INDEX(CURRENT_USER, \'@\', -1)"));$J["pass"]=$mf;if($mf!="")$J["hashed"]=true;$pd[(DB==""||$pd?"":idf_escape(addcslashes(DB,"%_\\"))).".*"]=array();}echo\'<form action="" method="post">
<table cellspacing="0" class="layout">
<tr><th>Server<td><input name="host" data-maxlength="60" value="\',h($J["host"]),\'" autocapitalize="off">
<tr><th>Username<td><input name="user" data-maxlength="80" value="\',h($J["user"]),\'" autocapitalize="off">
<tr><th>Password<td><input name="pass" id="pass" value="\',h($J["pass"]),\'" autocomplete="new-password">
\';if(!$J["hashed"])echo
script("typePassword(qs(\'#pass\'));");echo(min_version(8)?"":checkbox("hashed",1,$J["hashed"],\'Hashed\',"typePassword(this.form[\'pass\'], this.checked);")),\'</table>

\';echo"<table cellspacing=\'0\'>\n","<thead><tr><th colspan=\'2\'>".\'Privileges\'.doc_link(array(\'sql\'=>"grant.html#priv_level"));$t=0;foreach($pd
as$ff=>$od){echo\'<th>\'.($ff!="*.*"?"<input name=\'objects[$t]\' value=\'".h($ff)."\' size=\'10\' autocapitalize=\'off\'>":"<input type=\'hidden\' name=\'objects[$t]\' value=\'*.*\' size=\'10\'>*.*");$t++;}echo"</thead>\n";foreach(array(""=>"","Server Admin"=>\'Server\',"Databases"=>\'Database\',"Tables"=>\'Table\',"Columns"=>\'Column\',"Procedures"=>\'Routine\',)as$Db=>$bc){foreach((array)$pg[$Db]as$og=>$rb){echo"<tr".odd()."><td".($bc?">$bc<td":" colspan=\'2\'").\' lang="en" title="\'.h($rb).\'">\'.h($og);$t=0;foreach($pd
as$ff=>$od){$D="\'grants[$t][".h(strtoupper($og))."]\'";$Y=$od[strtoupper($og)];if($Db=="Server Admin"&&$ff!=(isset($pd["*.*"])?"*.*":".*"))echo"<td>";elseif(isset($_GET["grant"]))echo"<td><select name=$D><option><option value=\'1\'".($Y?" selected":"").">".\'Grant\'."<option value=\'0\'".($Y=="0"?" selected":"").">".\'Revoke\'."</select>";else{echo"<td align=\'center\'><label class=\'block\'>","<input type=\'checkbox\' name=$D value=\'1\'".($Y?" checked":"").($og=="All privileges"?" id=\'grants-$t-all\'>":">".($og=="Grant option"?"":script("qsl(\'input\').onclick = function () { if (this.checked) formUncheck(\'grants-$t-all\'); };"))),"</label>";}$t++;}}}echo"</table>\n",\'<p>
<input type="submit" value="Save">
\';if(isset($_GET["host"])){echo\'<input type="submit" name="drop" value="Drop">\',confirm(sprintf(\'Drop %s?\',"$ha@$_GET[host]"));}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\';}elseif(isset($_GET["processlist"])){if(support("kill")){if($_POST&&!$n){$je=0;foreach((array)$_POST["kill"]as$X){if(kill_process($X))$je++;}queries_redirect(ME."processlist=",lang(array(\'%d process has been killed.\',\'%d processes have been killed.\'),$je),$je||!$_POST["kill"]);}}page_header(\'Process list\',$n);echo\'
<form action="" method="post">
<div class="scrollable">
<table cellspacing="0" class="nowrap checkable">
\',script("mixin(qsl(\'table\'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");$t=-1;foreach(process_list()as$t=>$J){if(!$t){echo"<thead><tr lang=\'en\'>".(support("kill")?"<th>":"");foreach($J
as$z=>$X)echo"<th>$z".doc_link(array(\'sql\'=>"show-processlist.html#processlist_".strtolower($z),\'pgsql\'=>"monitoring-stats.html#PG-STAT-ACTIVITY-VIEW",\'oracle\'=>"REFRN30223",));echo"</thead>\n";}echo"<tr".odd().">".(support("kill")?"<td>".checkbox("kill[]",$J[$y=="sql"?"Id":"pid"],0):"");foreach($J
as$z=>$X)echo"<td>".(($y=="sql"&&$z=="Info"&&preg_match("~Query|Killed~",$J["Command"])&&$X!="")||($y=="pgsql"&&$z=="current_query"&&$X!="<IDLE>")||($y=="oracle"&&$z=="sql_text"&&$X!="")?"<code class=\'jush-$y\'>".shorten_utf8($X,100,"</code>").\' <a href="\'.h(ME.($J["db"]!=""?"db=".urlencode($J["db"])."&":"")."sql=".urlencode($X)).\'">\'.\'Clone\'.\'</a>\':h($X));echo"\n";}echo\'</table>
</div>
<p>
\';if(support("kill")){echo($t+1)."/".sprintf(\'%d in total\',max_connections()),"<p><input type=\'submit\' value=\'".\'Kill\'."\'>\n";}echo\'<input type="hidden" name="token" value="\',$ni,\'">
</form>
\',script("tableCheck();");}elseif(isset($_GET["select"])){$a=$_GET["select"];$R=table_status1($a);$x=indexes($a);$p=fields($a);$hd=column_foreign_keys($a);$if=$R["Oid"];parse_str($_COOKIE["adminer_import"],$ya);$Rg=array();$f=array();$ci=null;foreach($p
as$z=>$o){$D=$b->fieldName($o);if(isset($o["privileges"]["select"])&&$D!=""){$f[$z]=html_entity_decode(strip_tags($D),ENT_QUOTES);if(is_shortable($o))$ci=$b->selectLengthProcess();}$Rg+=$o["privileges"];}list($L,$qd)=$b->selectColumnsProcess($f,$x);$ae=count($qd)<count($L);$Z=$b->selectSearchProcess($p,$x);$zf=$b->selectOrderProcess($p,$x);$_=$b->selectLimitProcess();if($_GET["val"]&&is_ajax()){header("Content-Type: text/plain; charset=utf-8");foreach($_GET["val"]as$Ei=>$J){$Fa=convert_field($p[key($J)]);$L=array($Fa?$Fa:idf_escape(key($J)));$Z[]=where_check($Ei,$p);$I=$m->select($a,$L,$Z,$L);if($I)echo
reset($I->fetch_row());}exit;}$kg=$Gi=null;foreach($x
as$w){if($w["type"]=="PRIMARY"){$kg=array_flip($w["columns"]);$Gi=($L?$kg:array());foreach($Gi
as$z=>$X){if(in_array(idf_escape($z),$L))unset($Gi[$z]);}break;}}if($if&&!$kg){$kg=$Gi=array($if=>0);$x[]=array("type"=>"PRIMARY","columns"=>array($if));}if($_POST&&!$n){$hj=$Z;if(!$_POST["all"]&&is_array($_POST["check"])){$db=array();foreach($_POST["check"]as$ab)$db[]=where_check($ab,$p);$hj[]="((".implode(") OR (",$db)."))";}$hj=($hj?"\nWHERE ".implode(" AND ",$hj):"");if($_POST["export"]){cookie("adminer_import","output=".urlencode($_POST["output"])."&format=".urlencode($_POST["format"]));dump_headers($a);$b->dumpTable($a,"");$md=($L?implode(", ",$L):"*").convert_fields($f,$p,$L)."\nFROM ".table($a);$sd=($qd&&$ae?"\nGROUP BY ".implode(", ",$qd):"").($zf?"\nORDER BY ".implode(", ",$zf):"");if(!is_array($_POST["check"])||$kg)$G="SELECT $md$hj$sd";else{$Ci=array();foreach($_POST["check"]as$X)$Ci[]="(SELECT".limit($md,"\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$p).$sd,1).")";$G=implode(" UNION ALL ",$Ci);}$b->dumpData($a,"table",$G);exit;}if(!$b->selectEmailProcess($Z,$hd)){if($_POST["save"]||$_POST["delete"]){$H=true;$za=0;$N=array();if(!$_POST["delete"]){foreach($f
as$D=>$X){$X=process_input($p[$D]);if($X!==null&&($_POST["clone"]||$X!==false))$N[idf_escape($D)]=($X!==false?$X:idf_escape($D));}}if($_POST["delete"]||$N){if($_POST["clone"])$G="INTO ".table($a)." (".implode(", ",array_keys($N)).")\nSELECT ".implode(", ",$N)."\nFROM ".table($a);if($_POST["all"]||($kg&&is_array($_POST["check"]))||$ae){$H=($_POST["delete"]?$m->delete($a,$hj):($_POST["clone"]?queries("INSERT $G$hj"):$m->update($a,$N,$hj)));$za=$g->affected_rows;}else{foreach((array)$_POST["check"]as$X){$dj="\nWHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($X,$p);$H=($_POST["delete"]?$m->delete($a,$dj,1):($_POST["clone"]?queries("INSERT".limit1($a,$G,$dj)):$m->update($a,$N,$dj,1)));if(!$H)break;$za+=$g->affected_rows;}}}$Ke=lang(array(\'%d item has been affected.\',\'%d items have been affected.\'),$za);if($_POST["clone"]&&$H&&$za==1){$oe=last_id();if($oe)$Ke=sprintf(\'Item%s has been inserted.\'," $oe");}queries_redirect(remove_from_uri($_POST["all"]&&$_POST["delete"]?"page":""),$Ke,$H);if(!$_POST["delete"]){edit_form($a,$p,(array)$_POST["fields"],!$_POST["clone"]);page_footer();exit;}}elseif(!$_POST["import"]){if(!$_POST["val"])$n=\'Ctrl+click on a value to modify it.\';else{$H=true;$za=0;foreach($_POST["val"]as$Ei=>$J){$N=array();foreach($J
as$z=>$X){$z=bracket_escape($z,1);$N[idf_escape($z)]=(preg_match(\'~char|text~\',$p[$z]["type"])||$X!=""?$b->processInput($p[$z],$X):"NULL");}$H=$m->update($a,$N," WHERE ".($Z?implode(" AND ",$Z)." AND ":"").where_check($Ei,$p),!$ae&&!$kg," ");if(!$H)break;$za+=$g->affected_rows;}queries_redirect(remove_from_uri(),lang(array(\'%d item has been affected.\',\'%d items have been affected.\'),$za),$H);}}elseif(!is_string($Xc=get_file("csv_file",true)))$n=upload_error($Xc);elseif(!preg_match(\'~~u\',$Xc))$n=\'File must be in UTF-8 encoding.\';else{cookie("adminer_import","output=".urlencode($ya["output"])."&format=".urlencode($_POST["separator"]));$H=true;$nb=array_keys($p);preg_match_all(\'~(?>"[^"]*"|[^"\r\n]+)+~\',$Xc,$Ce);$za=count($Ce[0]);$m->begin();$hh=($_POST["separator"]=="csv"?",":($_POST["separator"]=="tsv"?"\t":";"));$K=array();foreach($Ce[0]as$z=>$X){preg_match_all("~((?>\"[^\"]*\")+|[^$hh]*)$hh~",$X.$hh,$De);if(!$z&&!array_diff($De[1],$nb)){$nb=$De[1];$za--;}else{$N=array();foreach($De[1]as$t=>$jb)$N[idf_escape($nb[$t])]=($jb==""&&$p[$nb[$t]]["null"]?"NULL":q(str_replace(\'""\',\'"\',preg_replace(\'~^"|"$~\',\'\',$jb))));$K[]=$N;}}$H=(!$K||$m->insertUpdate($a,$K,$kg));if($H)$H=$m->commit();queries_redirect(remove_from_uri("page"),lang(array(\'%d row has been imported.\',\'%d rows have been imported.\'),$za),$H);$m->rollback();}}}$Oh=$b->tableName($R);if(is_ajax()){page_headers();ob_start();}else
page_header(\'Select\'.": $Oh",$n);$N=null;if(isset($Rg["insert"])||!support("table")){$N="";foreach((array)$_GET["where"]as$X){if($hd[$X["col"]]&&count($hd[$X["col"]])==1&&($X["op"]=="="||(!$X["op"]&&!preg_match(\'~[_%]~\',$X["val"]))))$N.="&set".urlencode("[".bracket_escape($X["col"])."]")."=".urlencode($X["val"]);}}$b->selectLinks($R,$N);if(!$f&&support("table"))echo"<p class=\'error\'>".\'Unable to select the table\'.($p?".":": ".error())."\n";else{echo"<form action=\'\' id=\'form\'>\n","<div style=\'display: none;\'>";hidden_fields_get();echo(DB!=""?\'<input type="hidden" name="db" value="\'.h(DB).\'">\'.(isset($_GET["ns"])?\'<input type="hidden" name="ns" value="\'.h($_GET["ns"]).\'">\':""):"");echo\'<input type="hidden" name="select" value="\'.h($a).\'">\',"</div>\n";$b->selectColumnsPrint($L,$f);$b->selectSearchPrint($Z,$f,$x);$b->selectOrderPrint($zf,$f,$x);$b->selectLimitPrint($_);$b->selectLengthPrint($ci);$b->selectActionPrint($x);echo"</form>\n";$E=$_GET["page"];if($E=="last"){$kd=$g->result(count_rows($a,$Z,$ae,$qd));$E=floor(max(0,$kd-1)/$_);}$ch=$L;$rd=$qd;if(!$ch){$ch[]="*";$Eb=convert_fields($f,$p,$L);if($Eb)$ch[]=substr($Eb,2);}foreach($L
as$z=>$X){$o=$p[idf_unescape($X)];if($o&&($Fa=convert_field($o)))$ch[$z]="$Fa AS $X";}if(!$ae&&$Gi){foreach($Gi
as$z=>$X){$ch[]=idf_escape($z);if($rd)$rd[]=idf_escape($z);}}$H=$m->select($a,$ch,$Z,$rd,$zf,$_,$E,true);if(!$H)echo"<p class=\'error\'>".error()."\n";else{if($y=="mssql"&&$E)$H->seek($_*$E);$wc=array();echo"<form action=\'\' method=\'post\' enctype=\'multipart/form-data\'>\n";$K=array();while($J=$H->fetch_assoc()){if($E&&$y=="oracle")unset($J["RNUM"]);$K[]=$J;}if($_GET["page"]!="last"&&$_!=""&&$qd&&$ae&&$y=="sql")$kd=$g->result(" SELECT FOUND_ROWS()");if(!$K)echo"<p class=\'message\'>".\'No rows.\'."\n";else{$Oa=$b->backwardKeys($a,$Oh);echo"<div class=\'scrollable\'>","<table id=\'table\' cellspacing=\'0\' class=\'nowrap checkable\'>",script("mixin(qs(\'#table\'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});"),"<thead><tr>".(!$qd&&$L?"":"<td><input type=\'checkbox\' id=\'all-page\' class=\'jsonly\'>".script("qs(\'#all-page\').onclick = partial(formCheck, /check/);","")." <a href=\'".h($_GET["modify"]?remove_from_uri("modify"):$_SERVER["REQUEST_URI"]."&modify=1")."\'>".\'Modify\'."</a>");$Ve=array();$nd=array();reset($L);$zg=1;foreach($K[0]as$z=>$X){if(!isset($Gi[$z])){$X=$_GET["columns"][key($L)];$o=$p[$L?($X?$X["col"]:current($L)):$z];$D=($o?$b->fieldName($o,$zg):($X["fun"]?"*":$z));if($D!=""){$zg++;$Ve[$z]=$D;$e=idf_escape($z);$Ed=remove_from_uri(\'(order|desc)[^=]*|page\').\'&order%5B0%5D=\'.urlencode($z);$bc="&desc%5B0%5D=1";echo"<th id=\'th[".h(bracket_escape($z))."]\'>".script("mixin(qsl(\'th\'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, \' hidden\')});",""),\'<a href="\'.h($Ed.($zf[0]==$e||$zf[0]==$z||(!$zf&&$ae&&$qd[0]==$e)?$bc:\'\')).\'">\';echo
apply_sql_function($X["fun"],$D)."</a>";echo"<span class=\'column hidden\'>","<a href=\'".h($Ed.$bc)."\' title=\'".\'descending\'."\' class=\'text\'> </a>";if(!$X["fun"]){echo\'<a href="#fieldset-search" title="\'.\'Search\'.\'" class="text jsonly"> =</a>\',script("qsl(\'a\').onclick = partial(selectSearch, \'".js_escape($z)."\');");}echo"</span>";}$nd[$z]=$X["fun"];next($L);}}$ue=array();if($_GET["modify"]){foreach($K
as$J){foreach($J
as$z=>$X)$ue[$z]=max($ue[$z],min(40,strlen(utf8_decode($X))));}}echo($Oa?"<th>".\'Relations\':"")."</thead>\n";if(is_ajax()){if($_%2==1&&$E%2==1)odd();ob_end_clean();}foreach($b->rowDescriptions($K,$hd)as$Ue=>$J){$Di=unique_array($K[$Ue],$x);if(!$Di){$Di=array();foreach($K[$Ue]as$z=>$X){if(!preg_match(\'~^(COUNT\((\*|(DISTINCT )?`(?:[^`]|``)+`)\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\(`(?:[^`]|``)+`\))$~\',$z))$Di[$z]=$X;}}$Ei="";foreach($Di
as$z=>$X){if(($y=="sql"||$y=="pgsql")&&preg_match(\'~char|text|enum|set~\',$p[$z]["type"])&&strlen($X)>64){$z=(strpos($z,\'(\')?$z:idf_escape($z));$z="MD5(".($y!=\'sql\'||preg_match("~^utf8~",$p[$z]["collation"])?$z:"CONVERT($z USING ".charset($g).")").")";$X=md5($X);}$Ei.="&".($X!==null?urlencode("where[".bracket_escape($z)."]")."=".urlencode($X):"null%5B%5D=".urlencode($z));}echo"<tr".odd().">".(!$qd&&$L?"":"<td>".checkbox("check[]",substr($Ei,1),in_array(substr($Ei,1),(array)$_POST["check"])).($ae||information_schema(DB)?"":" <a href=\'".h(ME."edit=".urlencode($a).$Ei)."\' class=\'edit\'>".\'edit\'."</a>"));foreach($J
as$z=>$X){if(isset($Ve[$z])){$o=$p[$z];$X=$m->value($X,$o);if($X!=""&&(!isset($wc[$z])||$wc[$z]!=""))$wc[$z]=(is_mail($X)?$Ve[$z]:"");$A="";if(preg_match(\'~blob|bytea|raw|file~\',$o["type"])&&$X!="")$A=ME.\'download=\'.urlencode($a).\'&field=\'.urlencode($z).$Ei;if(!$A&&$X!==null){foreach((array)$hd[$z]as$r){if(count($hd[$z])==1||end($r["source"])==$z){$A="";foreach($r["source"]as$t=>$vh)$A.=where_link($t,$r["target"][$t],$K[$Ue][$vh]);$A=($r["db"]!=""?preg_replace(\'~([?&]db=)[^&]+~\',\'\1\'.urlencode($r["db"]),ME):ME).\'select=\'.urlencode($r["table"]).$A;if($r["ns"])$A=preg_replace(\'~([?&]ns=)[^&]+~\',\'\1\'.urlencode($r["ns"]),$A);if(count($r["source"])==1)break;}}}if($z=="COUNT(*)"){$A=ME."select=".urlencode($a);$t=0;foreach((array)$_GET["where"]as$W){if(!array_key_exists($W["col"],$Di))$A.=where_link($t++,$W["col"],$W["val"],$W["op"]);}foreach($Di
as$fe=>$W)$A.=where_link($t++,$fe,$W);}$X=select_value($X,$A,$o,$ci);$u=h("val[$Ei][".bracket_escape($z)."]");$Y=$_POST["val"][$Ei][bracket_escape($z)];$rc=!is_array($J[$z])&&is_utf8($X)&&$K[$Ue][$z]==$J[$z]&&!$nd[$z];$bi=preg_match(\'~text|lob~\',$o["type"]);echo"<td id=\'$u\'";if(($_GET["modify"]&&$rc)||$Y!==null){$vd=h($Y!==null?$Y:$J[$z]);echo">".($bi?"<textarea name=\'$u\' cols=\'30\' rows=\'".(substr_count($J[$z],"\n")+1)."\'>$vd</textarea>":"<input name=\'$u\' value=\'$vd\' size=\'$ue[$z]\'>");}else{$ye=strpos($X,"<i></i>");echo" data-text=\'".($ye?2:($bi?1:0))."\'".($rc?"":" data-warning=\'".h(\'Use edit link to modify this value.\')."\'").">$X</td>";}}}if($Oa)echo"<td>";$b->backwardKeysPrint($Oa,$K[$Ue]);echo"</tr>\n";}if(is_ajax())exit;echo"</table>\n","</div>\n";}if(!is_ajax()){if($K||$E){$Gc=true;if($_GET["page"]!="last"){if($_==""||(count($K)<$_&&($K||!$E)))$kd=($E?$E*$_:0)+count($K);elseif($y!="sql"||!$ae){$kd=($ae?false:found_rows($R,$Z));if($kd<max(1e4,2*($E+1)*$_))$kd=reset(slow_query(count_rows($a,$Z,$ae,$qd)));else$Gc=false;}}$Mf=($_!=""&&($kd===false||$kd>$_||$E));if($Mf){echo(($kd===false?count($K)+1:$kd-$E*$_)>$_?\'<p><a href="\'.h(remove_from_uri("page")."&page=".($E+1)).\'" class="loadmore">\'.\'Load more data\'.\'</a>\'.script("qsl(\'a\').onclick = partial(selectLoadMore, ".(+$_).", \'".\'Loading\'."\');",""):\'\'),"\n";}}echo"<div class=\'footer\'><div>\n";if($K||$E){if($Mf){$Fe=($kd===false?$E+(count($K)>=$_?2:1):floor(($kd-1)/$_));echo"<fieldset>";if($y!="simpledb"){echo"<legend><a href=\'".h(remove_from_uri("page"))."\'>".\'Page\'."</a></legend>",script("qsl(\'a\').onclick = function () { pageClick(this.href, +prompt(\'".\'Page\'."\', \'".($E+1)."\')); return false; };"),pagination(0,$E).($E>5?" ":"");for($t=max(1,$E-4);$t<min($Fe,$E+5);$t++)echo
pagination($t,$E);if($Fe>0){echo($E+5<$Fe?" ":""),($Gc&&$kd!==false?pagination($Fe,$E):" <a href=\'".h(remove_from_uri("page")."&page=last")."\' title=\'~$Fe\'>".\'last\'."</a>");}}else{echo"<legend>".\'Page\'."</legend>",pagination(0,$E).($E>1?" ":""),($E?pagination($E,$E):""),($Fe>$E?pagination($E+1,$E).($Fe>$E+1?" ":""):"");}echo"</fieldset>\n";}echo"<fieldset>","<legend>".\'Whole result\'."</legend>";$gc=($Gc?"":"~ ").$kd;echo
checkbox("all",1,0,($kd!==false?($Gc?"":"~ ").lang(array(\'%d row\',\'%d rows\'),$kd):""),"var checked = formChecked(this, /check/); selectCount(\'selected\', this.checked ? \'$gc\' : checked); selectCount(\'selected2\', this.checked || !checked ? \'$gc\' : checked);")."\n","</fieldset>\n";if($b->selectCommandPrint()){echo\'<fieldset\',($_GET["modify"]?\'\':\' class="jsonly"\'),\'><legend>Modify</legend><div>
<input type="submit" value="Save"\',($_GET["modify"]?\'\':\' title="\'.\'Ctrl+click on a value to modify it.\'.\'"\'),\'>
</div></fieldset>
<fieldset><legend>Selected <span id="selected"></span></legend><div>
<input type="submit" name="edit" value="Edit">
<input type="submit" name="clone" value="Clone">
<input type="submit" name="delete" value="Delete">\',confirm(),\'</div></fieldset>
\';}$id=$b->dumpFormat();foreach((array)$_GET["columns"]as$e){if($e["fun"]){unset($id[\'sql\']);break;}}if($id){print_fieldset("export",\'Export\'." <span id=\'selected2\'></span>");$Jf=$b->dumpOutput();echo($Jf?html_select("output",$Jf,$ya["output"])." ":""),html_select("format",$id,$ya["format"])," <input type=\'submit\' name=\'export\' value=\'".\'Export\'."\'>\n","</div></fieldset>\n";}$b->selectEmailPrint(array_filter($wc,\'strlen\'),$f);}echo"</div></div>\n";if($b->selectImportPrint()){echo"<div>","<a href=\'#import\'>".\'Import\'."</a>",script("qsl(\'a\').onclick = partial(toggle, \'import\');",""),"<span id=\'import\' class=\'hidden\'>: ","<input type=\'file\' name=\'csv_file\'> ",html_select("separator",array("csv"=>"CSV,","csv;"=>"CSV;","tsv"=>"TSV"),$ya["format"],1);echo" <input type=\'submit\' name=\'import\' value=\'".\'Import\'."\'>","</span>","</div>";}echo"<input type=\'hidden\' name=\'token\' value=\'$ni\'>\n","</form>\n",(!$qd&&$L?"":script("tableCheck();"));}}}if(is_ajax()){ob_end_clean();exit;}}elseif(isset($_GET["variables"])){$O=isset($_GET["status"]);page_header($O?\'Status\':\'Variables\');$Ui=($O?show_status():show_variables());if(!$Ui)echo"<p class=\'message\'>".\'No rows.\'."\n";else{echo"<table cellspacing=\'0\'>\n";foreach($Ui
as$z=>$X){echo"<tr>","<th><code class=\'jush-".$y.($O?"status":"set")."\'>".h($z)."</code>","<td>".h($X);}echo"</table>\n";}}elseif(isset($_GET["script"])){header("Content-Type: text/javascript; charset=utf-8");if($_GET["script"]=="db"){$Lh=array("Data_length"=>0,"Index_length"=>0,"Data_free"=>0);foreach(table_status()as$D=>$R){json_row("Comment-$D",h($R["Comment"]));if(!is_view($R)){foreach(array("Engine","Collation")as$z)json_row("$z-$D",h($R[$z]));foreach($Lh+array("Auto_increment"=>0,"Rows"=>0)as$z=>$X){if($R[$z]!=""){$X=format_number($R[$z]);json_row("$z-$D",($z=="Rows"&&$X&&$R["Engine"]==($yh=="pgsql"?"table":"InnoDB")?"~ $X":$X));if(isset($Lh[$z]))$Lh[$z]+=($R["Engine"]!="InnoDB"||$z!="Data_free"?$R[$z]:0);}elseif(array_key_exists($z,$R))json_row("$z-$D");}}}foreach($Lh
as$z=>$X)json_row("sum-$z",format_number($X));json_row("");}elseif($_GET["script"]=="kill")$g->query("KILL ".number($_POST["kill"]));else{foreach(count_tables($b->databases())as$l=>$X){json_row("tables-$l",$X);json_row("size-$l",db_size($l));}json_row("");}exit;}else{$Uh=array_merge((array)$_POST["tables"],(array)$_POST["views"]);if($Uh&&!$n&&!$_POST["search"]){$H=true;$Ke="";if($y=="sql"&&$_POST["tables"]&&count($_POST["tables"])>1&&($_POST["drop"]||$_POST["truncate"]||$_POST["copy"]))queries("SET foreign_key_checks = 0");if($_POST["truncate"]){if($_POST["tables"])$H=truncate_tables($_POST["tables"]);$Ke=\'Tables have been truncated.\';}elseif($_POST["move"]){$H=move_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Ke=\'Tables have been moved.\';}elseif($_POST["copy"]){$H=copy_tables((array)$_POST["tables"],(array)$_POST["views"],$_POST["target"]);$Ke=\'Tables have been copied.\';}elseif($_POST["drop"]){if($_POST["views"])$H=drop_views($_POST["views"]);if($H&&$_POST["tables"])$H=drop_tables($_POST["tables"]);$Ke=\'Tables have been dropped.\';}elseif($y!="sql"){$H=($y=="sqlite"?queries("VACUUM"):apply_queries("VACUUM".($_POST["optimize"]?"":" ANALYZE"),$_POST["tables"]));$Ke=\'Tables have been optimized.\';}elseif(!$_POST["tables"])$Ke=\'No tables.\';elseif($H=queries(($_POST["optimize"]?"OPTIMIZE":($_POST["check"]?"CHECK":($_POST["repair"]?"REPAIR":"ANALYZE")))." TABLE ".implode(", ",array_map(\'idf_escape\',$_POST["tables"])))){while($J=$H->fetch_assoc())$Ke.="<b>".h($J["Table"])."</b>: ".h($J["Msg_text"])."<br>";}queries_redirect(substr(ME,0,-1),$Ke,$H);}page_header(($_GET["ns"]==""?\'Database\'.": ".h(DB):\'Schema\'.": ".h($_GET["ns"])),$n,true);if($b->homepage()){if($_GET["ns"]!==""){echo"<h3 id=\'tables-views\'>".\'Tables and views\'."</h3>\n";$Th=tables_list();if(!$Th)echo"<p class=\'message\'>".\'No tables.\'."\n";else{echo"<form action=\'\' method=\'post\'>\n";if(support("table")){echo"<fieldset><legend>".\'Search data in tables\'." <span id=\'selected2\'></span></legend><div>","<input type=\'search\' name=\'query\' value=\'".h($_POST["query"])."\'>",script("qsl(\'input\').onkeydown = partialArg(bodyKeydown, \'search\');","")," <input type=\'submit\' name=\'search\' value=\'".\'Search\'."\'>\n","</div></fieldset>\n";if($_POST["search"]&&$_POST["query"]!=""){$_GET["where"][0]["op"]="LIKE %%";search_tables();}}echo"<div class=\'scrollable\'>\n","<table cellspacing=\'0\' class=\'nowrap checkable\'>\n",script("mixin(qsl(\'table\'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});"),\'<thead><tr class="wrap">\',\'<td><input id="check-all" type="checkbox" class="jsonly">\'.script("qs(\'#check-all\').onclick = partial(formCheck, /^(tables|views)\[/);",""),\'<th>\'.\'Table\',\'<td>\'.\'Engine\'.doc_link(array(\'sql\'=>\'storage-engines.html\')),\'<td>\'.\'Collation\'.doc_link(array(\'sql\'=>\'charset-charsets.html\',\'mariadb\'=>\'supported-character-sets-and-collations/\')),\'<td>\'.\'Data Length\'.doc_link(array(\'sql\'=>\'show-table-status.html\',\'pgsql\'=>\'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT\',\'oracle\'=>\'REFRN20286\')),\'<td>\'.\'Index Length\'.doc_link(array(\'sql\'=>\'show-table-status.html\',\'pgsql\'=>\'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT\')),\'<td>\'.\'Data Free\'.doc_link(array(\'sql\'=>\'show-table-status.html\')),\'<td>\'.\'Auto Increment\'.doc_link(array(\'sql\'=>\'example-auto-increment.html\',\'mariadb\'=>\'auto_increment/\')),\'<td>\'.\'Rows\'.doc_link(array(\'sql\'=>\'show-table-status.html\',\'pgsql\'=>\'catalog-pg-class.html#CATALOG-PG-CLASS\',\'oracle\'=>\'REFRN20286\')),(support("comment")?\'<td>\'.\'Comment\'.doc_link(array(\'sql\'=>\'show-table-status.html\',\'pgsql\'=>\'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE\')):\'\'),"</thead>\n";$S=0;foreach($Th
as$D=>$T){$Xi=($T!==null&&!preg_match(\'~table|sequence~i\',$T));$u=h("Table-".$D);echo\'<tr\'.odd().\'><td>\'.checkbox(($Xi?"views[]":"tables[]"),$D,in_array($D,$Uh,true),"","","",$u),\'<th>\'.(support("table")||support("indexes")?"<a href=\'".h(ME)."table=".urlencode($D)."\' title=\'".\'Show structure\'."\' id=\'$u\'>".h($D).\'</a>\':h($D));if($Xi){echo\'<td colspan="6"><a href="\'.h(ME)."view=".urlencode($D).\'" title="\'.\'Alter view\'.\'">\'.(preg_match(\'~materialized~i\',$T)?\'Materialized view\':\'View\').\'</a>\',\'<td align="right"><a href="\'.h(ME)."select=".urlencode($D).\'" title="\'.\'Select data\'.\'">?</a>\';}else{foreach(array("Engine"=>array(),"Collation"=>array(),"Data_length"=>array("create",\'Alter table\'),"Index_length"=>array("indexes",\'Alter indexes\'),"Data_free"=>array("edit",\'New item\'),"Auto_increment"=>array("auto_increment=1&create",\'Alter table\'),"Rows"=>array("select",\'Select data\'),)as$z=>$A){$u=" id=\'$z-".h($D)."\'";echo($A?"<td align=\'right\'>".(support("table")||$z=="Rows"||(support("indexes")&&$z!="Data_length")?"<a href=\'".h(ME."$A[0]=").urlencode($D)."\'$u title=\'$A[1]\'>?</a>":"<span$u>?</span>"):"<td id=\'$z-".h($D)."\'>");}$S++;}echo(support("comment")?"<td id=\'Comment-".h($D)."\'>":"");}echo"<tr><td><th>".sprintf(\'%d in total\',count($Th)),"<td>".h($y=="sql"?$g->result("SELECT @@default_storage_engine"):""),"<td>".h(db_collation(DB,collations()));foreach(array("Data_length","Index_length","Data_free")as$z)echo"<td align=\'right\' id=\'sum-$z\'>";echo"</table>\n","</div>\n";if(!information_schema(DB)){echo"<div class=\'footer\'><div>\n";$Ri="<input type=\'submit\' value=\'".\'Vacuum\'."\'> ".on_help("\'VACUUM\'");$vf="<input type=\'submit\' name=\'optimize\' value=\'".\'Optimize\'."\'> ".on_help($y=="sql"?"\'OPTIMIZE TABLE\'":"\'VACUUM OPTIMIZE\'");echo"<fieldset><legend>".\'Selected\'." <span id=\'selected\'></span></legend><div>".($y=="sqlite"?$Ri:($y=="pgsql"?$Ri.$vf:($y=="sql"?"<input type=\'submit\' value=\'".\'Analyze\'."\'> ".on_help("\'ANALYZE TABLE\'").$vf."<input type=\'submit\' name=\'check\' value=\'".\'Check\'."\'> ".on_help("\'CHECK TABLE\'")."<input type=\'submit\' name=\'repair\' value=\'".\'Repair\'."\'> ".on_help("\'REPAIR TABLE\'"):"")))."<input type=\'submit\' name=\'truncate\' value=\'".\'Truncate\'."\'> ".on_help($y=="sqlite"?"\'DELETE\'":"\'TRUNCATE".($y=="pgsql"?"\'":" TABLE\'")).confirm()."<input type=\'submit\' name=\'drop\' value=\'".\'Drop\'."\'>".on_help("\'DROP TABLE\'").confirm()."\n";$k=(support("scheme")?$b->schemas():$b->databases());if(count($k)!=1&&$y!="sqlite"){$l=(isset($_POST["target"])?$_POST["target"]:(support("scheme")?$_GET["ns"]:DB));echo"<p>".\'Move to other database\'.": ",($k?html_select("target",$k,$l):\'<input name="target" value="\'.h($l).\'" autocapitalize="off">\')," <input type=\'submit\' name=\'move\' value=\'".\'Move\'."\'>",(support("copy")?" <input type=\'submit\' name=\'copy\' value=\'".\'Copy\'."\'> ".checkbox("overwrite",1,$_POST["overwrite"],\'overwrite\'):""),"\n";}echo"<input type=\'hidden\' name=\'all\' value=\'\'>";echo
script("qsl(\'input\').onclick = function () { selectCount(\'selected\', formChecked(this, /^(tables|views)\[/));".(support("table")?" selectCount(\'selected2\', formChecked(this, /^tables\[/) || $S);":"")." }"),"<input type=\'hidden\' name=\'token\' value=\'$ni\'>\n","</div></fieldset>\n","</div></div>\n";}echo"</form>\n",script("tableCheck();");}echo\'<p class="links"><a href="\'.h(ME).\'create=">\'.\'Create table\'."</a>\n",(support("view")?\'<a href="\'.h(ME).\'view=">\'.\'Create view\'."</a>\n":"");if(support("routine")){echo"<h3 id=\'routines\'>".\'Routines\'."</h3>\n";$Vg=routines();if($Vg){echo"<table cellspacing=\'0\'>\n",\'<thead><tr><th>\'.\'Name\'.\'<td>\'.\'Type\'.\'<td>\'.\'Return type\'."<td></thead>\n";odd(\'\');foreach($Vg
as$J){$D=($J["SPECIFIC_NAME"]==$J["ROUTINE_NAME"]?"":"&name=".urlencode($J["ROUTINE_NAME"]));echo\'<tr\'.odd().\'>\',\'<th><a href="\'.h(ME.($J["ROUTINE_TYPE"]!="PROCEDURE"?\'callf=\':\'call=\').urlencode($J["SPECIFIC_NAME"]).$D).\'">\'.h($J["ROUTINE_NAME"]).\'</a>\',\'<td>\'.h($J["ROUTINE_TYPE"]),\'<td>\'.h($J["DTD_IDENTIFIER"]),\'<td><a href="\'.h(ME.($J["ROUTINE_TYPE"]!="PROCEDURE"?\'function=\':\'procedure=\').urlencode($J["SPECIFIC_NAME"]).$D).\'">\'.\'Alter\'."</a>";}echo"</table>\n";}echo\'<p class="links">\'.(support("procedure")?\'<a href="\'.h(ME).\'procedure=">\'.\'Create procedure\'.\'</a>\':\'\').\'<a href="\'.h(ME).\'function=">\'.\'Create function\'."</a>\n";}if(support("sequence")){echo"<h3 id=\'sequences\'>".\'Sequences\'."</h3>\n";$jh=get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name");if($jh){echo"<table cellspacing=\'0\'>\n","<thead><tr><th>".\'Name\'."</thead>\n";odd(\'\');foreach($jh
as$X)echo"<tr".odd()."><th><a href=\'".h(ME)."sequence=".urlencode($X)."\'>".h($X)."</a>\n";echo"</table>\n";}echo"<p class=\'links\'><a href=\'".h(ME)."sequence=\'>".\'Create sequence\'."</a>\n";}if(support("type")){echo"<h3 id=\'user-types\'>".\'User types\'."</h3>\n";$Pi=types();if($Pi){echo"<table cellspacing=\'0\'>\n","<thead><tr><th>".\'Name\'."</thead>\n";odd(\'\');foreach($Pi
as$X)echo"<tr".odd()."><th><a href=\'".h(ME)."type=".urlencode($X)."\'>".h($X)."</a>\n";echo"</table>\n";}echo"<p class=\'links\'><a href=\'".h(ME)."type=\'>".\'Create type\'."</a>\n";}if(support("event")){echo"<h3 id=\'events\'>".\'Events\'."</h3>\n";$K=get_rows("SHOW EVENTS");if($K){echo"<table cellspacing=\'0\'>\n","<thead><tr><th>".\'Name\'."<td>".\'Schedule\'."<td>".\'Start\'."<td>".\'End\'."<td></thead>\n";foreach($K
as$J){echo"<tr>","<th>".h($J["Name"]),"<td>".($J["Execute at"]?\'At given time\'."<td>".$J["Execute at"]:\'Every\'." ".$J["Interval value"]." ".$J["Interval field"]."<td>$J[Starts]"),"<td>$J[Ends]",\'<td><a href="\'.h(ME).\'event=\'.urlencode($J["Name"]).\'">\'.\'Alter\'.\'</a>\';}echo"</table>\n";$Ec=$g->result("SELECT @@event_scheduler");if($Ec&&$Ec!="ON")echo"<p class=\'error\'><code class=\'jush-sqlset\'>event_scheduler</code>: ".h($Ec)."\n";}echo\'<p class="links"><a href="\'.h(ME).\'event=">\'.\'Create event\'."</a>\n";}if($Th)echo
script("ajaxSetHtml(\'".js_escape(ME)."script=db\');");}}}page_footer();'

Did this file decode correctly?

Original Code

<?php
$bs = 'PD9waHAKLyoqIEFkbWluZXIgLSBDb21wYWN0IGRhdGFiYXNlIG1hbmFnZW1lbnQKKiBAbGluayBodHRwczovL3d3dy5hZG1pbmVyLm9yZy8KKiBAYXV0aG9yIEpha3ViIFZyYW5hLCBodHRwczovL3d3dy52cmFuYS5jei8KKiBAY29weXJpZ2h0IDIwMDcgSmFrdWIgVnJhbmEKKiBAbGljZW5zZSBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAoqIEBsaWNlbnNlIGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgKG9uZSBvciBvdGhlcikKKiBAdmVyc2lvbiA0LjguMQoqL2Z1bmN0aW9uCmFkbWluZXJfZXJyb3JzKCRBYywkQ2Mpe3JldHVybiEhcHJlZ19tYXRjaCgnfl4oVHJ5aW5nIHRvIGFjY2VzcyBhcnJheSBvZmZzZXQgb24gdmFsdWUgb2YgdHlwZSBudWxsfFVuZGVmaW5lZCBhcnJheSBrZXkpficsJENjKTt9ZXJyb3JfcmVwb3J0aW5nKDYxMzUpO3NldF9lcnJvcl9oYW5kbGVyKCdhZG1pbmVyX2Vycm9ycycsRV9XQVJOSU5HKTskWWM9IXByZWdfbWF0Y2goJ35eKHVuc2FmZV9yYXcpPyR+JyxpbmlfZ2V0KCJmaWx0ZXIuZGVmYXVsdCIpKTtpZigkWWN8fGluaV9nZXQoImZpbHRlci5kZWZhdWx0X2ZsYWdzIikpe2ZvcmVhY2goYXJyYXkoJ19HRVQnLCdfUE9TVCcsJ19DT09LSUUnLCdfU0VSVkVSJylhcyRYKXskRmk9ZmlsdGVyX2lucHV0X2FycmF5KGNvbnN0YW50KCJJTlBVVCRYIiksRklMVEVSX1VOU0FGRV9SQVcpO2lmKCRGaSkkJFg9JEZpO319aWYoZnVuY3Rpb25fZXhpc3RzKCJtYl9pbnRlcm5hbF9lbmNvZGluZyIpKW1iX2ludGVybmFsX2VuY29kaW5nKCI4Yml0Iik7ZnVuY3Rpb24KY29ubmVjdGlvbigpe2dsb2JhbCRnO3JldHVybiRnO31mdW5jdGlvbgphZG1pbmVyKCl7Z2xvYmFsJGI7cmV0dXJuJGI7fWZ1bmN0aW9uCnZlcnNpb24oKXtnbG9iYWwkaWE7cmV0dXJuJGlhO31mdW5jdGlvbgppZGZfdW5lc2NhcGUoJHYpe2lmKCFwcmVnX21hdGNoKCd+XltgXCciXX4nLCR2KSlyZXR1cm4kdjskbmU9c3Vic3RyKCR2LC0xKTtyZXR1cm4Kc3RyX3JlcGxhY2UoJG5lLiRuZSwkbmUsc3Vic3RyKCR2LDEsLTEpKTt9ZnVuY3Rpb24KZXNjYXBlX3N0cmluZygkWCl7cmV0dXJuCnN1YnN0cihxKCRYKSwxLC0xKTt9ZnVuY3Rpb24KbnVtYmVyKCRYKXtyZXR1cm4KcHJlZ19yZXBsYWNlKCd+W14wLTldK34nLCcnLCRYKTt9ZnVuY3Rpb24KbnVtYmVyX3R5cGUoKXtyZXR1cm4nKCg/PCFvKWludCg/IWVyKXxudW1lcmljfHJlYWx8ZmxvYXR8ZG91YmxlfGRlY2ltYWx8bW9uZXkpJzt9ZnVuY3Rpb24KcmVtb3ZlX3NsYXNoZXMoJHFnLCRZYz1mYWxzZSl7aWYoZnVuY3Rpb25fZXhpc3RzKCJnZXRfbWFnaWNfcXVvdGVzX2dwYyIpJiZnZXRfbWFnaWNfcXVvdGVzX2dwYygpKXt3aGlsZShsaXN0KCR6LCRYKT1lYWNoKCRxZykpe2ZvcmVhY2goJFgKYXMkZmU9PiRXKXt1bnNldCgkcWdbJHpdWyRmZV0pO2lmKGlzX2FycmF5KCRXKSl7JHFnWyR6XVtzdHJpcHNsYXNoZXMoJGZlKV09JFc7JHFnW109JiRxZ1skel1bc3RyaXBzbGFzaGVzKCRmZSldO31lbHNlJHFnWyR6XVtzdHJpcHNsYXNoZXMoJGZlKV09KCRZYz8kVzpzdHJpcHNsYXNoZXMoJFcpKTt9fX19ZnVuY3Rpb24KYnJhY2tldF9lc2NhcGUoJHYsJE1hPWZhbHNlKXtzdGF0aWMkcmk9YXJyYXkoJzonPT4nOjEnLCddJz0+JzoyJywnWyc9Pic6MycsJyInPT4nOjQnKTtyZXR1cm4Kc3RydHIoJHYsKCRNYT9hcnJheV9mbGlwKCRyaSk6JHJpKSk7fWZ1bmN0aW9uCm1pbl92ZXJzaW9uKCRXaSwkQWU9IiIsJGg9bnVsbCl7Z2xvYmFsJGc7aWYoISRoKSRoPSRnOyRraD0kaC0+c2VydmVyX2luZm87aWYoJEFlJiZwcmVnX21hdGNoKCd+KFtcZC5dKyktTWFyaWFEQn4nLCRraCwkQykpeyRraD0kQ1sxXTskV2k9JEFlO31yZXR1cm4odmVyc2lvbl9jb21wYXJlKCRraCwkV2kpPj0wKTt9ZnVuY3Rpb24KY2hhcnNldCgkZyl7cmV0dXJuKG1pbl92ZXJzaW9uKCI1LjUuMyIsMCwkZyk/InV0ZjhtYjQiOiJ1dGY4Iik7fWZ1bmN0aW9uCnNjcmlwdCgkdmgsJHFpPSJcbiIpe3JldHVybiI8c2NyaXB0Ii5ub25jZSgpLiI+JHZoPC9zY3JpcHQ+JHFpIjt9ZnVuY3Rpb24Kc2NyaXB0X3NyYygkS2kpe3JldHVybiI8c2NyaXB0IHNyYz0nIi5oKCRLaSkuIiciLm5vbmNlKCkuIj48L3NjcmlwdD5cbiI7fWZ1bmN0aW9uCm5vbmNlKCl7cmV0dXJuJyBub25jZT0iJy5nZXRfbm9uY2UoKS4nIic7fWZ1bmN0aW9uCnRhcmdldF9ibGFuaygpe3JldHVybicgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciBub29wZW5lciInO31mdW5jdGlvbgpoKCRQKXtyZXR1cm4Kc3RyX3JlcGxhY2UoIlwwIiwiJiMwOyIsaHRtbHNwZWNpYWxjaGFycygkUCxFTlRfUVVPVEVTLCd1dGYtOCcpKTt9ZnVuY3Rpb24KbmxfYnIoJFApe3JldHVybgpzdHJfcmVwbGFjZSgiXG4iLCI8YnI+IiwkUCk7fWZ1bmN0aW9uCmNoZWNrYm94KCRELCRZLCRjYiwka2U9IiIsJHJmPSIiLCRnYj0iIiwkbGU9IiIpeyRJPSI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9JyREJyB2YWx1ZT0nIi5oKCRZKS4iJyIuKCRjYj8iIGNoZWNrZWQiOiIiKS4oJGxlPyIgYXJpYS1sYWJlbGxlZGJ5PSckbGUnIjoiIikuIj4iLigkcmY/c2NyaXB0KCJxc2woJ2lucHV0Jykub25jbGljayA9IGZ1bmN0aW9uICgpIHsgJHJmIH07IiwiIik6IiIpO3JldHVybigka2UhPSIifHwkZ2I/IjxsYWJlbCIuKCRnYj8iIGNsYXNzPSckZ2InIjoiIikuIj4kSSIuaCgka2UpLiI8L2xhYmVsPiI6JEkpO31mdW5jdGlvbgpvcHRpb25saXN0KCR4ZiwkZGg9bnVsbCwkT2k9ZmFsc2UpeyRJPSIiO2ZvcmVhY2goJHhmCmFzJGZlPT4kVyl7JHlmPWFycmF5KCRmZT0+JFcpO2lmKGlzX2FycmF5KCRXKSl7JEkuPSc8b3B0Z3JvdXAgbGFiZWw9IicuaCgkZmUpLiciPic7JHlmPSRXO31mb3JlYWNoKCR5ZgphcyR6PT4kWCkkSS49JzxvcHRpb24nLigkT2l8fGlzX3N0cmluZygkeik/JyB2YWx1ZT0iJy5oKCR6KS4nIic6JycpLigoJE9pfHxpc19zdHJpbmcoJHopPyhzdHJpbmcpJHo6JFgpPT09JGRoPycgc2VsZWN0ZWQnOicnKS4nPicuaCgkWCk7aWYoaXNfYXJyYXkoJFcpKSRJLj0nPC9vcHRncm91cD4nO31yZXR1cm4kSTt9ZnVuY3Rpb24KaHRtbF9zZWxlY3QoJEQsJHhmLCRZPSIiLCRxZj10cnVlLCRsZT0iIil7aWYoJHFmKXJldHVybiI8c2VsZWN0IG5hbWU9JyIuaCgkRCkuIiciLigkbGU/IiBhcmlhLWxhYmVsbGVkYnk9JyRsZSciOiIiKS4iPiIub3B0aW9ubGlzdCgkeGYsJFkpLiI8L3NlbGVjdD4iLihpc19zdHJpbmcoJHFmKT9zY3JpcHQoInFzbCgnc2VsZWN0Jykub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7ICRxZiB9OyIsIiIpOiIiKTskST0iIjtmb3JlYWNoKCR4ZgphcyR6PT4kWCkkSS49IjxsYWJlbD48aW5wdXQgdHlwZT0ncmFkaW8nIG5hbWU9JyIuaCgkRCkuIicgdmFsdWU9JyIuaCgkeikuIiciLigkej09JFk/IiBjaGVja2VkIjoiIikuIj4iLmgoJFgpLiI8L2xhYmVsPiI7cmV0dXJuJEk7fWZ1bmN0aW9uCnNlbGVjdF9pbnB1dCgkSGEsJHhmLCRZPSIiLCRxZj0iIiwkY2c9IiIpeyRWaD0oJHhmPyJzZWxlY3QiOiJpbnB1dCIpO3JldHVybiI8JFZoJEhhIi4oJHhmPyI+PG9wdGlvbiB2YWx1ZT0nJz4kY2ciLm9wdGlvbmxpc3QoJHhmLCRZLHRydWUpLiI8L3NlbGVjdD4iOiIgc2l6ZT0nMTAnIHZhbHVlPSciLmgoJFkpLiInIHBsYWNlaG9sZGVyPSckY2cnPiIpLigkcWY/c2NyaXB0KCJxc2woJyRWaCcpLm9uY2hhbmdlID0gJHFmOyIsIiIpOiIiKTt9ZnVuY3Rpb24KY29uZmlybSgkS2U9IiIsJGVoPSJxc2woJ2lucHV0JykiKXtyZXR1cm4Kc2NyaXB0KCIkZWgub25jbGljayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbmZpcm0oJyIuKCRLZT9qc19lc2NhcGUoJEtlKTonQXJlIHlvdSBzdXJlPycpLiInKTsgfTsiLCIiKTt9ZnVuY3Rpb24KcHJpbnRfZmllbGRzZXQoJHUsJHNlLCRaaT1mYWxzZSl7ZWNobyI8ZmllbGRzZXQ+PGxlZ2VuZD4iLCI8YSBocmVmPScjZmllbGRzZXQtJHUnPiRzZTwvYT4iLHNjcmlwdCgicXNsKCdhJykub25jbGljayA9IHBhcnRpYWwodG9nZ2xlLCAnZmllbGRzZXQtJHUnKTsiLCIiKSwiPC9sZWdlbmQ+IiwiPGRpdiBpZD0nZmllbGRzZXQtJHUnIi4oJFppPyIiOiIgY2xhc3M9J2hpZGRlbiciKS4iPlxuIjt9ZnVuY3Rpb24KYm9sZCgkVGEsJGdiPSIiKXtyZXR1cm4oJFRhPyIgY2xhc3M9J2FjdGl2ZSAkZ2InIjooJGdiPyIgY2xhc3M9JyRnYiciOiIiKSk7fWZ1bmN0aW9uCm9kZCgkST0nIGNsYXNzPSJvZGQiJyl7c3RhdGljJHQ9MDtpZighJEkpJHQ9LTE7cmV0dXJuKCR0KyslMj8kSTonJyk7fWZ1bmN0aW9uCmpzX2VzY2FwZSgkUCl7cmV0dXJuCmFkZGNzbGFzaGVzKCRQLCJcclxuJ1xcLyIpO31mdW5jdGlvbgpqc29uX3JvdygkeiwkWD1udWxsKXtzdGF0aWMkWmM9dHJ1ZTtpZigkWmMpZWNobyJ7IjtpZigkeiE9IiIpe2VjaG8oJFpjPyIiOiIsIikuIlxuXHRcIiIuYWRkY3NsYXNoZXMoJHosIlxyXG5cdFwiXFwvIikuJyI6ICcuKCRYIT09bnVsbD8nIicuYWRkY3NsYXNoZXMoJFgsIlxyXG5cIlxcLyIpLiciJzonbnVsbCcpOyRaYz1mYWxzZTt9ZWxzZXtlY2hvIlxufVxuIjskWmM9dHJ1ZTt9fWZ1bmN0aW9uCmluaV9ib29sKCRTZCl7JFg9aW5pX2dldCgkU2QpO3JldHVybihwcmVnX21hdGNoKCd+Xihvbnx0cnVlfHllcykkfmknLCRYKXx8KGludCkkWCk7fWZ1bmN0aW9uCnNpZCgpe3N0YXRpYyRJO2lmKCRJPT09bnVsbCkkST0oU0lEJiYhKCRfQ09PS0lFJiZpbmlfYm9vbCgic2Vzc2lvbi51c2VfY29va2llcyIpKSk7cmV0dXJuJEk7fWZ1bmN0aW9uCnNldF9wYXNzd29yZCgkVmksJE0sJFYsJEYpeyRfU0VTU0lPTlsicHdkcyJdWyRWaV1bJE1dWyRWXT0oJF9DT09LSUVbImFkbWluZXJfa2V5Il0mJmlzX3N0cmluZygkRik/YXJyYXkoZW5jcnlwdF9zdHJpbmcoJEYsJF9DT09LSUVbImFkbWluZXJfa2V5Il0pKTokRik7fWZ1bmN0aW9uCmdldF9wYXNzd29yZCgpeyRJPWdldF9zZXNzaW9uKCJwd2RzIik7aWYoaXNfYXJyYXkoJEkpKSRJPSgkX0NPT0tJRVsiYWRtaW5lcl9rZXkiXT9kZWNyeXB0X3N0cmluZygkSVswXSwkX0NPT0tJRVsiYWRtaW5lcl9rZXkiXSk6ZmFsc2UpO3JldHVybiRJO31mdW5jdGlvbgpxKCRQKXtnbG9iYWwkZztyZXR1cm4kZy0+cXVvdGUoJFApO31mdW5jdGlvbgpnZXRfdmFscygkRywkZT0wKXtnbG9iYWwkZzskST1hcnJheSgpOyRIPSRnLT5xdWVyeSgkRyk7aWYoaXNfb2JqZWN0KCRIKSl7d2hpbGUoJEo9JEgtPmZldGNoX3JvdygpKSRJW109JEpbJGVdO31yZXR1cm4kSTt9ZnVuY3Rpb24KZ2V0X2tleV92YWxzKCRHLCRoPW51bGwsJG5oPXRydWUpe2dsb2JhbCRnO2lmKCFpc19vYmplY3QoJGgpKSRoPSRnOyRJPWFycmF5KCk7JEg9JGgtPnF1ZXJ5KCRHKTtpZihpc19vYmplY3QoJEgpKXt3aGlsZSgkSj0kSC0+ZmV0Y2hfcm93KCkpe2lmKCRuaCkkSVskSlswXV09JEpbMV07ZWxzZSRJW109JEpbMF07fX1yZXR1cm4kSTt9ZnVuY3Rpb24KZ2V0X3Jvd3MoJEcsJGg9bnVsbCwkbj0iPHAgY2xhc3M9J2Vycm9yJz4iKXtnbG9iYWwkZzskd2I9KGlzX29iamVjdCgkaCk/JGg6JGcpOyRJPWFycmF5KCk7JEg9JHdiLT5xdWVyeSgkRyk7aWYoaXNfb2JqZWN0KCRIKSl7d2hpbGUoJEo9JEgtPmZldGNoX2Fzc29jKCkpJElbXT0kSjt9ZWxzZWlmKCEkSCYmIWlzX29iamVjdCgkaCkmJiRuJiZkZWZpbmVkKCJQQUdFX0hFQURFUiIpKWVjaG8kbi5lcnJvcigpLiJcbiI7cmV0dXJuJEk7fWZ1bmN0aW9uCnVuaXF1ZV9hcnJheSgkSiwkeCl7Zm9yZWFjaCgkeAphcyR3KXtpZihwcmVnX21hdGNoKCJ+UFJJTUFSWXxVTklRVUV+Iiwkd1sidHlwZSJdKSl7JEk9YXJyYXkoKTtmb3JlYWNoKCR3WyJjb2x1bW5zIl1hcyR6KXtpZighaXNzZXQoJEpbJHpdKSljb250aW51ZQoyOyRJWyR6XT0kSlskel07fXJldHVybiRJO319fWZ1bmN0aW9uCmVzY2FwZV9rZXkoJHope2lmKHByZWdfbWF0Y2goJyheKFtcdyhdKykoJy5zdHJfcmVwbGFjZSgiXyIsIi4qIixwcmVnX3F1b3RlKGlkZl9lc2NhcGUoIl8iKSkpLicpKFsgXHcpXSspJCknLCR6LCRDKSlyZXR1cm4kQ1sxXS5pZGZfZXNjYXBlKGlkZl91bmVzY2FwZSgkQ1syXSkpLiRDWzNdO3JldHVybgppZGZfZXNjYXBlKCR6KTt9ZnVuY3Rpb24Kd2hlcmUoJFosJHA9YXJyYXkoKSl7Z2xvYmFsJGcsJHk7JEk9YXJyYXkoKTtmb3JlYWNoKChhcnJheSkkWlsid2hlcmUiXWFzJHo9PiRYKXskej1icmFja2V0X2VzY2FwZSgkeiwxKTskZT1lc2NhcGVfa2V5KCR6KTskSVtdPSRlLigkeT09InNxbCImJmlzX251bWVyaWMoJFgpJiZwcmVnX21hdGNoKCd+XC5+JywkWCk/IiBMSUtFICIucSgkWCk6KCR5PT0ibXNzcWwiPyIgTElLRSAiLnEocHJlZ19yZXBsYWNlKCd+W18lW11+JywnW1wwXScsJFgpKToiID0gIi51bmNvbnZlcnRfZmllbGQoJHBbJHpdLHEoJFgpKSkpO2lmKCR5PT0ic3FsIiYmcHJlZ19tYXRjaCgnfmNoYXJ8dGV4dH4nLCRwWyR6XVsidHlwZSJdKSYmcHJlZ19tYXRjaCgiflteIC1AXX4iLCRYKSkkSVtdPSIkZSA9ICIucSgkWCkuIiBDT0xMQVRFICIuY2hhcnNldCgkZykuIl9iaW4iO31mb3JlYWNoKChhcnJheSkkWlsibnVsbCJdYXMkeikkSVtdPWVzY2FwZV9rZXkoJHopLiIgSVMgTlVMTCI7cmV0dXJuCmltcGxvZGUoIiBBTkQgIiwkSSk7fWZ1bmN0aW9uCndoZXJlX2NoZWNrKCRYLCRwPWFycmF5KCkpe3BhcnNlX3N0cigkWCwkYWIpO3JlbW92ZV9zbGFzaGVzKGFycmF5KCYkYWIpKTtyZXR1cm4Kd2hlcmUoJGFiLCRwKTt9ZnVuY3Rpb24Kd2hlcmVfbGluaygkdCwkZSwkWSwkdGY9Ij0iKXtyZXR1cm4iJndoZXJlJTVCJHQlNUQlNUJjb2wlNUQ9Ii51cmxlbmNvZGUoJGUpLiImd2hlcmUlNUIkdCU1RCU1Qm9wJTVEPSIudXJsZW5jb2RlKCgkWSE9PW51bGw/JHRmOiJJUyBOVUxMIikpLiImd2hlcmUlNUIkdCU1RCU1QnZhbCU1RD0iLnVybGVuY29kZSgkWSk7fWZ1bmN0aW9uCmNvbnZlcnRfZmllbGRzKCRmLCRwLCRMPWFycmF5KCkpeyRJPSIiO2ZvcmVhY2goJGYKYXMkej0+JFgpe2lmKCRMJiYhaW5fYXJyYXkoaWRmX2VzY2FwZSgkeiksJEwpKWNvbnRpbnVlOyRGYT1jb252ZXJ0X2ZpZWxkKCRwWyR6XSk7aWYoJEZhKSRJLj0iLCAkRmEgQVMgIi5pZGZfZXNjYXBlKCR6KTt9cmV0dXJuJEk7fWZ1bmN0aW9uCmNvb2tpZSgkRCwkWSwkdmU9MjU5MjAwMCl7Z2xvYmFsJGJhO3JldHVybgpoZWFkZXIoIlNldC1Db29raWU6ICREPSIudXJsZW5jb2RlKCRZKS4oJHZlPyI7IGV4cGlyZXM9Ii5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIix0aW1lKCkrJHZlKS4iIEdNVCI6IiIpLiI7IHBhdGg9Ii5wcmVnX3JlcGxhY2UoJ35cPy4qficsJycsJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pLigkYmE/Ijsgc2VjdXJlIjoiIikuIjsgSHR0cE9ubHk7IFNhbWVTaXRlPWxheCIsZmFsc2UpO31mdW5jdGlvbgpyZXN0YXJ0X3Nlc3Npb24oKXtpZighaW5pX2Jvb2woInNlc3Npb24udXNlX2Nvb2tpZXMiKSlzZXNzaW9uX3N0YXJ0KCk7fWZ1bmN0aW9uCnN0b3Bfc2Vzc2lvbigkZWQ9ZmFsc2UpeyROaT1pbmlfYm9vbCgic2Vzc2lvbi51c2VfY29va2llcyIpO2lmKCEkTml8fCRlZCl7c2Vzc2lvbl93cml0ZV9jbG9zZSgpO2lmKCROaSYmQGluaV9zZXQoInNlc3Npb24udXNlX2Nvb2tpZXMiLGZhbHNlKT09PWZhbHNlKXNlc3Npb25fc3RhcnQoKTt9fWZ1bmN0aW9uJmdldF9zZXNzaW9uKCR6KXtyZXR1cm4kX1NFU1NJT05bJHpdW0RSSVZFUl1bU0VSVkVSXVskX0dFVFsidXNlcm5hbWUiXV07fWZ1bmN0aW9uCnNldF9zZXNzaW9uKCR6LCRYKXskX1NFU1NJT05bJHpdW0RSSVZFUl1bU0VSVkVSXVskX0dFVFsidXNlcm5hbWUiXV09JFg7fWZ1bmN0aW9uCmF1dGhfdXJsKCRWaSwkTSwkViwkbD1udWxsKXtnbG9iYWwkaWM7cHJlZ19tYXRjaCgnfihbXj9dKilcPz8oLiopficscmVtb3ZlX2Zyb21fdXJpKGltcGxvZGUoInwiLGFycmF5X2tleXMoJGljKSkuInx1c2VybmFtZXwiLigkbCE9PW51bGw/ImRifCI6IiIpLnNlc3Npb25fbmFtZSgpKSwkQyk7cmV0dXJuIiRDWzFdPyIuKHNpZCgpP1NJRC4iJiI6IiIpLigkVmkhPSJzZXJ2ZXIifHwkTSE9IiI/dXJsZW5jb2RlKCRWaSkuIj0iLnVybGVuY29kZSgkTSkuIiYiOiIiKS4idXNlcm5hbWU9Ii51cmxlbmNvZGUoJFYpLigkbCE9IiI/IiZkYj0iLnVybGVuY29kZSgkbCk6IiIpLigkQ1syXT8iJiRDWzJdIjoiIik7fWZ1bmN0aW9uCmlzX2FqYXgoKXtyZXR1cm4oJF9TRVJWRVJbIkhUVFBfWF9SRVFVRVNURURfV0lUSCJdPT0iWE1MSHR0cFJlcXVlc3QiKTt9ZnVuY3Rpb24KcmVkaXJlY3QoJEIsJEtlPW51bGwpe2lmKCRLZSE9PW51bGwpe3Jlc3RhcnRfc2Vzc2lvbigpOyRfU0VTU0lPTlsibWVzc2FnZXMiXVtwcmVnX3JlcGxhY2UoJ35eW14/XSp+JywnJywoJEIhPT1udWxsPyRCOiRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdKSldW109JEtlO31pZigkQiE9PW51bGwpe2lmKCRCPT0iIikkQj0iLiI7aGVhZGVyKCJMb2NhdGlvbjogJEIiKTtleGl0O319ZnVuY3Rpb24KcXVlcnlfcmVkaXJlY3QoJEcsJEIsJEtlLCRBZz10cnVlLCRIYz10cnVlLCRSYz1mYWxzZSwkZGk9IiIpe2dsb2JhbCRnLCRuLCRiO2lmKCRIYyl7JENoPW1pY3JvdGltZSh0cnVlKTskUmM9ISRnLT5xdWVyeSgkRyk7JGRpPWZvcm1hdF90aW1lKCRDaCk7fSR5aD0iIjtpZigkRykkeWg9JGItPm1lc3NhZ2VRdWVyeSgkRywkZGksJFJjKTtpZigkUmMpeyRuPWVycm9yKCkuJHloLnNjcmlwdCgibWVzc2FnZXNQcmludCgpOyIpO3JldHVybgpmYWxzZTt9aWYoJEFnKXJlZGlyZWN0KCRCLCRLZS4keWgpO3JldHVybgp0cnVlO31mdW5jdGlvbgpxdWVyaWVzKCRHKXtnbG9iYWwkZztzdGF0aWMkdmc9YXJyYXkoKTtzdGF0aWMkQ2g7aWYoISRDaCkkQ2g9bWljcm90aW1lKHRydWUpO2lmKCRHPT09bnVsbClyZXR1cm4KYXJyYXkoaW1wbG9kZSgiXG4iLCR2ZyksZm9ybWF0X3RpbWUoJENoKSk7JHZnW109KHByZWdfbWF0Y2goJ347JH4nLCRHKT8iREVMSU1JVEVSIDs7XG4kRztcbkRFTElNSVRFUiAiOiRHKS4iOyI7cmV0dXJuJGctPnF1ZXJ5KCRHKTt9ZnVuY3Rpb24KYXBwbHlfcXVlcmllcygkRywkUywkRGM9J3RhYmxlJyl7Zm9yZWFjaCgkUwphcyRRKXtpZighcXVlcmllcygiJEcgIi4kRGMoJFEpKSlyZXR1cm4KZmFsc2U7fXJldHVybgp0cnVlO31mdW5jdGlvbgpxdWVyaWVzX3JlZGlyZWN0KCRCLCRLZSwkQWcpe2xpc3QoJHZnLCRkaSk9cXVlcmllcyhudWxsKTtyZXR1cm4KcXVlcnlfcmVkaXJlY3QoJHZnLCRCLCRLZSwkQWcsZmFsc2UsISRBZywkZGkpO31mdW5jdGlvbgpmb3JtYXRfdGltZSgkQ2gpe3JldHVybgpzcHJpbnRmKCclLjNmIHMnLG1heCgwLG1pY3JvdGltZSh0cnVlKS0kQ2gpKTt9ZnVuY3Rpb24KcmVsYXRpdmVfdXJpKCl7cmV0dXJuCnN0cl9yZXBsYWNlKCI6IiwiJTNhIixwcmVnX3JlcGxhY2UoJ35eW14/XSovKFteP10qKX4nLCdcMScsJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pKTt9ZnVuY3Rpb24KcmVtb3ZlX2Zyb21fdXJpKCROZj0iIil7cmV0dXJuCnN1YnN0cihwcmVnX3JlcGxhY2UoIn4oPzw9Wz8mXSkoJE5mIi4oU0lEPyIiOiJ8Ii5zZXNzaW9uX25hbWUoKSkuIik9W14mXSomfiIsJycscmVsYXRpdmVfdXJpKCkuIiYiKSwwLC0xKTt9ZnVuY3Rpb24KcGFnaW5hdGlvbigkRSwkTmIpe3JldHVybiIgIi4oJEU9PSROYj8kRSsxOic8YSBocmVmPSInLmgocmVtb3ZlX2Zyb21fdXJpKCJwYWdlIikuKCRFPyImcGFnZT0kRSIuKCRfR0VUWyJuZXh0Il0/IiZuZXh0PSIudXJsZW5jb2RlKCRfR0VUWyJuZXh0Il0pOiIiKToiIikpLiciPicuKCRFKzEpLiI8L2E+Iik7fWZ1bmN0aW9uCmdldF9maWxlKCR6LCRWYj1mYWxzZSl7JFhjPSRfRklMRVNbJHpdO2lmKCEkWGMpcmV0dXJuCm51bGw7Zm9yZWFjaCgkWGMKYXMkej0+JFgpJFhjWyR6XT0oYXJyYXkpJFg7JEk9Jyc7Zm9yZWFjaCgkWGNbImVycm9yIl1hcyR6PT4kbil7aWYoJG4pcmV0dXJuJG47JEQ9JFhjWyJuYW1lIl1bJHpdOyRsaT0kWGNbInRtcF9uYW1lIl1bJHpdOyRCYj1maWxlX2dldF9jb250ZW50cygkVmImJnByZWdfbWF0Y2goJ35cLmd6JH4nLCREKT8iY29tcHJlc3MuemxpYjovLyRsaSI6JGxpKTtpZigkVmIpeyRDaD1zdWJzdHIoJEJiLDAsMyk7aWYoZnVuY3Rpb25fZXhpc3RzKCJpY29udiIpJiZwcmVnX21hdGNoKCJ+Xlx4RkVceEZGfF5ceEZGXHhGRX4iLCRDaCwkR2cpKSRCYj1pY29udigidXRmLTE2IiwidXRmLTgiLCRCYik7ZWxzZWlmKCRDaD09Ilx4RUZceEJCXHhCRiIpJEJiPXN1YnN0cigkQmIsMyk7JEkuPSRCYi4iXG5cbiI7fWVsc2UkSS49JEJiO31yZXR1cm4kSTt9ZnVuY3Rpb24KdXBsb2FkX2Vycm9yKCRuKXskSGU9KCRuPT1VUExPQURfRVJSX0lOSV9TSVpFP2luaV9nZXQoInVwbG9hZF9tYXhfZmlsZXNpemUiKTowKTtyZXR1cm4oJG4/J1VuYWJsZSB0byB1cGxvYWQgYSBmaWxlLicuKCRIZT8iICIuc3ByaW50ZignTWF4aW11bSBhbGxvd2VkIGZpbGUgc2l6ZSBpcyAlc0IuJywkSGUpOiIiKTonRmlsZSBkb2VzIG5vdCBleGlzdC4nKTt9ZnVuY3Rpb24KcmVwZWF0X3BhdHRlcm4oJFpmLCR0ZSl7cmV0dXJuCnN0cl9yZXBlYXQoIiRaZnswLDY1NTM1fSIsJHRlLzY1NTM1KS4iJFpmezAsIi4oJHRlJTY1NTM1KS4ifSI7fWZ1bmN0aW9uCmlzX3V0ZjgoJFgpe3JldHVybihwcmVnX21hdGNoKCd+fnUnLCRYKSYmIXByZWdfbWF0Y2goJ35bXDAtXHg4XHhCXHhDXHhFLVx4MUZdficsJFgpKTt9ZnVuY3Rpb24Kc2hvcnRlbl91dGY4KCRQLCR0ZT04MCwkSmg9IiIpe2lmKCFwcmVnX21hdGNoKCIoXigiLnJlcGVhdF9wYXR0ZXJuKCJbXHRcclxuIC1ceHsxMEZGRkZ9XSIsJHRlKS4iKSgkKT8pdSIsJFAsJEMpKXByZWdfbWF0Y2goIiheKCIucmVwZWF0X3BhdHRlcm4oIltcdFxyXG4gLX5dIiwkdGUpLiIpKCQpPykiLCRQLCRDKTtyZXR1cm4KaCgkQ1sxXSkuJEpoLihpc3NldCgkQ1syXSk/IiI6IjxpPuKApjwvaT4iKTt9ZnVuY3Rpb24KZm9ybWF0X251bWJlcigkWCl7cmV0dXJuCnN0cnRyKG51bWJlcl9mb3JtYXQoJFgsMCwiLiIsJywnKSxwcmVnX3NwbGl0KCd+fnUnLCcwMTIzNDU2Nzg5JywtMSxQUkVHX1NQTElUX05PX0VNUFRZKSk7fWZ1bmN0aW9uCmZyaWVuZGx5X3VybCgkWCl7cmV0dXJuCnByZWdfcmVwbGFjZSgnflteYS16MC05X11+aScsJy0nLCRYKTt9ZnVuY3Rpb24KaGlkZGVuX2ZpZWxkcygkcWcsJEhkPWFycmF5KCksJGlnPScnKXskST1mYWxzZTtmb3JlYWNoKCRxZwphcyR6PT4kWCl7aWYoIWluX2FycmF5KCR6LCRIZCkpe2lmKGlzX2FycmF5KCRYKSloaWRkZW5fZmllbGRzKCRYLGFycmF5KCksJHopO2Vsc2V7JEk9dHJ1ZTtlY2hvJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicuaCgkaWc/JGlnLiJbJHpdIjokeikuJyIgdmFsdWU9IicuaCgkWCkuJyI+Jzt9fX1yZXR1cm4kSTt9ZnVuY3Rpb24KaGlkZGVuX2ZpZWxkc19nZXQoKXtlY2hvKHNpZCgpPyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInLnNlc3Npb25fbmFtZSgpLiciIHZhbHVlPSInLmgoc2Vzc2lvbl9pZCgpKS4nIj4nOicnKSwoU0VSVkVSIT09bnVsbD8nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJy5EUklWRVIuJyIgdmFsdWU9IicuaChTRVJWRVIpLiciPic6IiIpLCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1c2VybmFtZSIgdmFsdWU9IicuaCgkX0dFVFsidXNlcm5hbWUiXSkuJyI+Jzt9ZnVuY3Rpb24KdGFibGVfc3RhdHVzMSgkUSwkU2M9ZmFsc2UpeyRJPXRhYmxlX3N0YXR1cygkUSwkU2MpO3JldHVybigkST8kSTphcnJheSgiTmFtZSI9PiRRKSk7fWZ1bmN0aW9uCmNvbHVtbl9mb3JlaWduX2tleXMoJFEpe2dsb2JhbCRiOyRJPWFycmF5KCk7Zm9yZWFjaCgkYi0+Zm9yZWlnbktleXMoJFEpYXMkcil7Zm9yZWFjaCgkclsic291cmNlIl1hcyRYKSRJWyRYXVtdPSRyO31yZXR1cm4kSTt9ZnVuY3Rpb24KZW51bV9pbnB1dCgkVCwkSGEsJG8sJFksJHhjPW51bGwpe2dsb2JhbCRiO3ByZWdfbWF0Y2hfYWxsKCJ+JygoPzpbXiddfCcnKSopJ34iLCRvWyJsZW5ndGgiXSwkQ2UpOyRJPSgkeGMhPT1udWxsPyI8bGFiZWw+PGlucHV0IHR5cGU9JyRUJyRIYSB2YWx1ZT0nJHhjJyIuKChpc19hcnJheSgkWSk/aW5fYXJyYXkoJHhjLCRZKTokWT09PTApPyIgY2hlY2tlZCI6IiIpLiI+PGk+Ii4nZW1wdHknLiI8L2k+PC9sYWJlbD4iOiIiKTtmb3JlYWNoKCRDZVsxXWFzJHQ9PiRYKXskWD1zdHJpcGNzbGFzaGVzKHN0cl9yZXBsYWNlKCInJyIsIiciLCRYKSk7JGNiPShpc19pbnQoJFkpPyRZPT0kdCsxOihpc19hcnJheSgkWSk/aW5fYXJyYXkoJHQrMSwkWSk6JFk9PT0kWCkpOyRJLj0iIDxsYWJlbD48aW5wdXQgdHlwZT0nJFQnJEhhIHZhbHVlPSciLigkdCsxKS4iJyIuKCRjYj8nIGNoZWNrZWQnOicnKS4nPicuaCgkYi0+ZWRpdFZhbCgkWCwkbykpLic8L2xhYmVsPic7fXJldHVybiRJO31mdW5jdGlvbgppbnB1dCgkbywkWSwkcyl7Z2xvYmFsJFUsJGIsJHk7JEQ9aChicmFja2V0X2VzY2FwZSgkb1siZmllbGQiXSkpO2VjaG8iPHRkIGNsYXNzPSdmdW5jdGlvbic+IjtpZihpc19hcnJheSgkWSkmJiEkcyl7JERhPWFycmF5KCRZKTtpZih2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sNS40KT49MCkkRGFbXT1KU09OX1BSRVRUWV9QUklOVDskWT1jYWxsX3VzZXJfZnVuY19hcnJheSgnanNvbl9lbmNvZGUnLCREYSk7JHM9Impzb24iO30kS2c9KCR5PT0ibXNzcWwiJiYkb1siYXV0b19pbmNyZW1lbnQiXSk7aWYoJEtnJiYhJF9QT1NUWyJzYXZlIl0pJHM9bnVsbDskbmQ9KGlzc2V0KCRfR0VUWyJzZWxlY3QiXSl8fCRLZz9hcnJheSgib3JpZyI9PidvcmlnaW5hbCcpOmFycmF5KCkpKyRiLT5lZGl0RnVuY3Rpb25zKCRvKTskSGE9IiBuYW1lPSdmaWVsZHNbJERdJyI7aWYoJG9bInR5cGUiXT09ImVudW0iKWVjaG8KaCgkbmRbIiJdKS4iPHRkPiIuJGItPmVkaXRJbnB1dCgkX0dFVFsiZWRpdCJdLCRvLCRIYSwkWSk7ZWxzZXskeGQ9KGluX2FycmF5KCRzLCRuZCl8fGlzc2V0KCRuZFskc10pKTtlY2hvKGNvdW50KCRuZCk+MT8iPHNlbGVjdCBuYW1lPSdmdW5jdGlvblskRF0nPiIub3B0aW9ubGlzdCgkbmQsJHM9PT1udWxsfHwkeGQ/JHM6IiIpLiI8L3NlbGVjdD4iLm9uX2hlbHAoImdldFRhcmdldChldmVudCkudmFsdWUucmVwbGFjZSgvXlNRTFwkLywgJycpIiwxKS5zY3JpcHQoInFzbCgnc2VsZWN0Jykub25jaGFuZ2UgPSBmdW5jdGlvbkNoYW5nZTsiLCIiKTpoKHJlc2V0KCRuZCkpKS4nPHRkPic7JFVkPSRiLT5lZGl0SW5wdXQoJF9HRVRbImVkaXQiXSwkbywkSGEsJFkpO2lmKCRVZCE9IiIpZWNobyRVZDtlbHNlaWYocHJlZ19tYXRjaCgnfmJvb2x+Jywkb1sidHlwZSJdKSllY2hvIjxpbnB1dCB0eXBlPSdoaWRkZW4nJEhhIHZhbHVlPScwJz4iLiI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIi4ocHJlZ19tYXRjaCgnfl4oMXx0fHRydWV8eXx5ZXN8b24pJH5pJywkWSk/IiBjaGVja2VkPSdjaGVja2VkJyI6IiIpLiIkSGEgdmFsdWU9JzEnPiI7ZWxzZWlmKCRvWyJ0eXBlIl09PSJzZXQiKXtwcmVnX21hdGNoX2FsbCgificoKD86W14nXXwnJykqKSd+Iiwkb1sibGVuZ3RoIl0sJENlKTtmb3JlYWNoKCRDZVsxXWFzJHQ9PiRYKXskWD1zdHJpcGNzbGFzaGVzKHN0cl9yZXBsYWNlKCInJyIsIiciLCRYKSk7JGNiPShpc19pbnQoJFkpPygkWT4+JHQpJjE6aW5fYXJyYXkoJFgsZXhwbG9kZSgiLCIsJFkpLHRydWUpKTtlY2hvIiA8bGFiZWw+PGlucHV0IHR5cGU9J2NoZWNrYm94JyBuYW1lPSdmaWVsZHNbJERdWyR0XScgdmFsdWU9JyIuKDE8PCR0KS4iJyIuKCRjYj8nIGNoZWNrZWQnOicnKS4iPiIuaCgkYi0+ZWRpdFZhbCgkWCwkbykpLic8L2xhYmVsPic7fX1lbHNlaWYocHJlZ19tYXRjaCgnfmJsb2J8Ynl0ZWF8cmF3fGZpbGV+Jywkb1sidHlwZSJdKSYmaW5pX2Jvb2woImZpbGVfdXBsb2FkcyIpKWVjaG8iPGlucHV0IHR5cGU9J2ZpbGUnIG5hbWU9J2ZpZWxkcy0kRCc+IjtlbHNlaWYoKCRiaT1wcmVnX21hdGNoKCd+dGV4dHxsb2J8bWVtb35pJywkb1sidHlwZSJdKSl8fHByZWdfbWF0Y2goIn5cbn4iLCRZKSl7aWYoJGJpJiYkeSE9InNxbGl0ZSIpJEhhLj0iIGNvbHM9JzUwJyByb3dzPScxMiciO2Vsc2V7JEs9bWluKDEyLHN1YnN0cl9jb3VudCgkWSwiXG4iKSsxKTskSGEuPSIgY29scz0nMzAnIHJvd3M9JyRLJyIuKCRLPT0xPyIgc3R5bGU9J2hlaWdodDogMS4yZW07JyI6IiIpO31lY2hvIjx0ZXh0YXJlYSRIYT4iLmgoJFkpLic8L3RleHRhcmVhPic7fWVsc2VpZigkcz09Impzb24ifHxwcmVnX21hdGNoKCd+Xmpzb25iPyR+Jywkb1sidHlwZSJdKSllY2hvIjx0ZXh0YXJlYSRIYSBjb2xzPSc1MCcgcm93cz0nMTInIGNsYXNzPSdqdXNoLWpzJz4iLmgoJFkpLic8L3RleHRhcmVhPic7ZWxzZXskSmU9KCFwcmVnX21hdGNoKCd+aW50ficsJG9bInR5cGUiXSkmJnByZWdfbWF0Y2goJ35eKFxkKykoLChcZCspKT8kficsJG9bImxlbmd0aCJdLCRDKT8oKHByZWdfbWF0Y2goIn5iaW5hcnl+Iiwkb1sidHlwZSJdKT8yOjEpKiRDWzFdKygkQ1szXT8xOjApKygkQ1syXSYmISRvWyJ1bnNpZ25lZCJdPzE6MCkpOigkVVskb1sidHlwZSJdXT8kVVskb1sidHlwZSJdXSsoJG9bInVuc2lnbmVkIl0/MDoxKTowKSk7aWYoJHk9PSdzcWwnJiZtaW5fdmVyc2lvbig1LjYpJiZwcmVnX21hdGNoKCd+dGltZX4nLCRvWyJ0eXBlIl0pKSRKZSs9NztlY2hvIjxpbnB1dCIuKCghJHhkfHwkcz09PSIiKSYmcHJlZ19tYXRjaCgnfig/PCFvKWludCg/IWVyKX4nLCRvWyJ0eXBlIl0pJiYhcHJlZ19tYXRjaCgnflxbXF1+Jywkb1siZnVsbF90eXBlIl0pPyIgdHlwZT0nbnVtYmVyJyI6IiIpLiIgdmFsdWU9JyIuaCgkWSkuIiciLigkSmU/IiBkYXRhLW1heGxlbmd0aD0nJEplJyI6IiIpLihwcmVnX21hdGNoKCd+Y2hhcnxiaW5hcnl+Jywkb1sidHlwZSJdKSYmJEplPjIwPyIgc2l6ZT0nNDAnIjoiIikuIiRIYT4iO31lY2hvJGItPmVkaXRIaW50KCRfR0VUWyJlZGl0Il0sJG8sJFkpOyRaYz0wO2ZvcmVhY2goJG5kCmFzJHo9PiRYKXtpZigkej09PSIifHwhJFgpYnJlYWs7JFpjKys7fWlmKCRaYyllY2hvCnNjcmlwdCgibWl4aW4ocXNsKCd0ZCcpLCB7b25jaGFuZ2U6IHBhcnRpYWwoc2tpcE9yaWdpbmFsLCAkWmMpLCBvbmlucHV0OiBmdW5jdGlvbiAoKSB7IHRoaXMub25jaGFuZ2UoKTsgfX0pOyIpO319ZnVuY3Rpb24KcHJvY2Vzc19pbnB1dCgkbyl7Z2xvYmFsJGIsJG07JHY9YnJhY2tldF9lc2NhcGUoJG9bImZpZWxkIl0pOyRzPSRfUE9TVFsiZnVuY3Rpb24iXVskdl07JFk9JF9QT1NUWyJmaWVsZHMiXVskdl07aWYoJG9bInR5cGUiXT09ImVudW0iKXtpZigkWT09LTEpcmV0dXJuCmZhbHNlO2lmKCRZPT0iIilyZXR1cm4iTlVMTCI7cmV0dXJuKyRZO31pZigkb1siYXV0b19pbmNyZW1lbnQiXSYmJFk9PSIiKXJldHVybgpudWxsO2lmKCRzPT0ib3JpZyIpcmV0dXJuKHByZWdfbWF0Y2goJ35eQ1VSUkVOVF9USU1FU1RBTVB+aScsJG9bIm9uX3VwZGF0ZSJdKT9pZGZfZXNjYXBlKCRvWyJmaWVsZCJdKTpmYWxzZSk7aWYoJHM9PSJOVUxMIilyZXR1cm4iTlVMTCI7aWYoJG9bInR5cGUiXT09InNldCIpcmV0dXJuCmFycmF5X3N1bSgoYXJyYXkpJFkpO2lmKCRzPT0ianNvbiIpeyRzPSIiOyRZPWpzb25fZGVjb2RlKCRZLHRydWUpO2lmKCFpc19hcnJheSgkWSkpcmV0dXJuCmZhbHNlO3JldHVybiRZO31pZihwcmVnX21hdGNoKCd+YmxvYnxieXRlYXxyYXd8ZmlsZX4nLCRvWyJ0eXBlIl0pJiZpbmlfYm9vbCgiZmlsZV91cGxvYWRzIikpeyRYYz1nZXRfZmlsZSgiZmllbGRzLSR2Iik7aWYoIWlzX3N0cmluZygkWGMpKXJldHVybgpmYWxzZTtyZXR1cm4kbS0+cXVvdGVCaW5hcnkoJFhjKTt9cmV0dXJuJGItPnByb2Nlc3NJbnB1dCgkbywkWSwkcyk7fWZ1bmN0aW9uCmZpZWxkc19mcm9tX2VkaXQoKXtnbG9iYWwkbTskST1hcnJheSgpO2ZvcmVhY2goKGFycmF5KSRfUE9TVFsiZmllbGRfa2V5cyJdYXMkej0+JFgpe2lmKCRYIT0iIil7JFg9YnJhY2tldF9lc2NhcGUoJFgpOyRfUE9TVFsiZnVuY3Rpb24iXVskWF09JF9QT1NUWyJmaWVsZF9mdW5zIl1bJHpdOyRfUE9TVFsiZmllbGRzIl1bJFhdPSRfUE9TVFsiZmllbGRfdmFscyJdWyR6XTt9fWZvcmVhY2goKGFycmF5KSRfUE9TVFsiZmllbGRzIl1hcyR6PT4kWCl7JEQ9YnJhY2tldF9lc2NhcGUoJHosMSk7JElbJERdPWFycmF5KCJmaWVsZCI9PiRELCJwcml2aWxlZ2VzIj0+YXJyYXkoImluc2VydCI9PjEsInVwZGF0ZSI9PjEpLCJudWxsIj0+MSwiYXV0b19pbmNyZW1lbnQiPT4oJHo9PSRtLT5wcmltYXJ5KSwpO31yZXR1cm4kSTt9ZnVuY3Rpb24Kc2VhcmNoX3RhYmxlcygpe2dsb2JhbCRiLCRnOyRfR0VUWyJ3aGVyZSJdWzBdWyJ2YWwiXT0kX1BPU1RbInF1ZXJ5Il07JGdoPSI8dWw+XG4iO2ZvcmVhY2godGFibGVfc3RhdHVzKCcnLHRydWUpYXMkUT0+JFIpeyREPSRiLT50YWJsZU5hbWUoJFIpO2lmKGlzc2V0KCRSWyJFbmdpbmUiXSkmJiREIT0iIiYmKCEkX1BPU1RbInRhYmxlcyJdfHxpbl9hcnJheSgkUSwkX1BPU1RbInRhYmxlcyJdKSkpeyRIPSRnLT5xdWVyeSgiU0VMRUNUIi5saW1pdCgiMSBGUk9NICIudGFibGUoJFEpLCIgV0hFUkUgIi5pbXBsb2RlKCIgQU5EICIsJGItPnNlbGVjdFNlYXJjaFByb2Nlc3MoZmllbGRzKCRRKSxhcnJheSgpKSksMSkpO2lmKCEkSHx8JEgtPmZldGNoX3JvdygpKXskbWc9IjxhIGhyZWY9JyIuaChNRS4ic2VsZWN0PSIudXJsZW5jb2RlKCRRKS4iJndoZXJlWzBdW29wXT0iLnVybGVuY29kZSgkX0dFVFsid2hlcmUiXVswXVsib3AiXSkuIiZ3aGVyZVswXVt2YWxdPSIudXJsZW5jb2RlKCRfR0VUWyJ3aGVyZSJdWzBdWyJ2YWwiXSkpLiInPiREPC9hPiI7ZWNobyIkZ2g8bGk+Ii4oJEg/JG1nOiI8cCBjbGFzcz0nZXJyb3InPiRtZzogIi5lcnJvcigpKS4iXG4iOyRnaD0iIjt9fX1lY2hvKCRnaD8iPHAgY2xhc3M9J21lc3NhZ2UnPiIuJ05vIHRhYmxlcy4nOiI8L3VsPiIpLiJcbiI7fWZ1bmN0aW9uCmR1bXBfaGVhZGVycygkRmQsJFNlPWZhbHNlKXtnbG9iYWwkYjskST0kYi0+ZHVtcEhlYWRlcnMoJEZkLCRTZSk7JEpmPSRfUE9TVFsib3V0cHV0Il07aWYoJEpmIT0idGV4dCIpaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLiRiLT5kdW1wRmlsZW5hbWUoJEZkKS4iLiRJIi4oJEpmIT0iZmlsZSImJnByZWdfbWF0Y2goJ35eWzAtOWEtel0rJH4nLCRKZik/Ii4kSmYiOiIiKSk7c2Vzc2lvbl93cml0ZV9jbG9zZSgpO29iX2ZsdXNoKCk7Zmx1c2goKTtyZXR1cm4kSTt9ZnVuY3Rpb24KZHVtcF9jc3YoJEope2ZvcmVhY2goJEoKYXMkej0+JFgpe2lmKHByZWdfbWF0Y2goJ35bIlxuLDtcdF18XjB8XC5cZCowJH4nLCRYKXx8JFg9PT0iIikkSlskel09JyInLnN0cl9yZXBsYWNlKCciJywnIiInLCRYKS4nIic7fWVjaG8KaW1wbG9kZSgoJF9QT1NUWyJmb3JtYXQiXT09ImNzdiI/IiwiOigkX1BPU1RbImZvcm1hdCJdPT0idHN2Ij8iXHQiOiI7IikpLCRKKS4iXHJcbiI7fWZ1bmN0aW9uCmFwcGx5X3NxbF9mdW5jdGlvbigkcywkZSl7cmV0dXJuKCRzPygkcz09InVuaXhlcG9jaCI/IkRBVEVUSU1FKCRlLCAnJHMnKSI6KCRzPT0iY291bnQgZGlzdGluY3QiPyJDT1VOVChESVNUSU5DVCAiOnN0cnRvdXBwZXIoIiRzKCIpKS4iJGUpIik6JGUpO31mdW5jdGlvbgpnZXRfdGVtcF9kaXIoKXskST1pbmlfZ2V0KCJ1cGxvYWRfdG1wX2RpciIpO2lmKCEkSSl7aWYoZnVuY3Rpb25fZXhpc3RzKCdzeXNfZ2V0X3RlbXBfZGlyJykpJEk9c3lzX2dldF90ZW1wX2RpcigpO2Vsc2V7JHE9QHRlbXBuYW0oIiIsIiIpO2lmKCEkcSlyZXR1cm4KZmFsc2U7JEk9ZGlybmFtZSgkcSk7dW5saW5rKCRxKTt9fXJldHVybiRJO31mdW5jdGlvbgpmaWxlX29wZW5fbG9jaygkcSl7JGxkPUBmb3BlbigkcSwicisiKTtpZighJGxkKXskbGQ9QGZvcGVuKCRxLCJ3Iik7aWYoISRsZClyZXR1cm47Y2htb2QoJHEsMDY2MCk7fWZsb2NrKCRsZCxMT0NLX0VYKTtyZXR1cm4kbGQ7fWZ1bmN0aW9uCmZpbGVfd3JpdGVfdW5sb2NrKCRsZCwkUGIpe3Jld2luZCgkbGQpO2Z3cml0ZSgkbGQsJFBiKTtmdHJ1bmNhdGUoJGxkLHN0cmxlbigkUGIpKTtmbG9jaygkbGQsTE9DS19VTik7ZmNsb3NlKCRsZCk7fWZ1bmN0aW9uCnBhc3N3b3JkX2ZpbGUoJGkpeyRxPWdldF90ZW1wX2RpcigpLiIvYWRtaW5lci5rZXkiOyRJPUBmaWxlX2dldF9jb250ZW50cygkcSk7aWYoJEl8fCEkaSlyZXR1cm4kSTskbGQ9QGZvcGVuKCRxLCJ3Iik7aWYoJGxkKXtjaG1vZCgkcSwwNjYwKTskST1yYW5kX3N0cmluZygpO2Z3cml0ZSgkbGQsJEkpO2ZjbG9zZSgkbGQpO31yZXR1cm4kSTt9ZnVuY3Rpb24KcmFuZF9zdHJpbmcoKXtyZXR1cm4KbWQ1KHVuaXFpZChtdF9yYW5kKCksdHJ1ZSkpO31mdW5jdGlvbgpzZWxlY3RfdmFsdWUoJFgsJEEsJG8sJGNpKXtnbG9iYWwkYjtpZihpc19hcnJheSgkWCkpeyRJPSIiO2ZvcmVhY2goJFgKYXMkZmU9PiRXKSRJLj0iPHRyPiIuKCRYIT1hcnJheV92YWx1ZXMoJFgpPyI8dGg+Ii5oKCRmZSk6IiIpLiI8dGQ+Ii5zZWxlY3RfdmFsdWUoJFcsJEEsJG8sJGNpKTtyZXR1cm4iPHRhYmxlIGNlbGxzcGFjaW5nPScwJz4kSTwvdGFibGU+Ijt9aWYoISRBKSRBPSRiLT5zZWxlY3RMaW5rKCRYLCRvKTtpZigkQT09PW51bGwpe2lmKGlzX21haWwoJFgpKSRBPSJtYWlsdG86JFgiO2lmKGlzX3VybCgkWCkpJEE9JFg7fSRJPSRiLT5lZGl0VmFsKCRYLCRvKTtpZigkSSE9PW51bGwpe2lmKCFpc191dGY4KCRJKSkkST0iXDAiO2Vsc2VpZigkY2khPSIiJiZpc19zaG9ydGFibGUoJG8pKSRJPXNob3J0ZW5fdXRmOCgkSSxtYXgoMCwrJGNpKSk7ZWxzZSRJPWgoJEkpO31yZXR1cm4kYi0+c2VsZWN0VmFsKCRJLCRBLCRvLCRYKTt9ZnVuY3Rpb24KaXNfbWFpbCgkdWMpeyRHYT0nWy1hLXowLTkhIyQlJlwnKisvPT9eX2B7fH1+XSc7JGhjPSdbYS16MC05XShbLWEtejAtOV17MCw2MX1bYS16MC05XSknOyRaZj0iJEdhKyhcXC4kR2ErKSpAKCRoYz9cXC4pKyRoYyI7cmV0dXJuCmlzX3N0cmluZygkdWMpJiZwcmVnX21hdGNoKCIoXiRaZigsXFxzKiRaZikqXCQpaSIsJHVjKTt9ZnVuY3Rpb24KaXNfdXJsKCRQKXskaGM9J1thLXowLTldKFstYS16MC05XXswLDYxfVthLXowLTldKSc7cmV0dXJuCnByZWdfbWF0Y2goIn5eKGh0dHBzPyk6Ly8oJGhjP1xcLikrJGhjKDpcXGQrKT8oLy4qKT8oXFw/LiopPygjLiopP1wkfmkiLCRQKTt9ZnVuY3Rpb24KaXNfc2hvcnRhYmxlKCRvKXtyZXR1cm4KcHJlZ19tYXRjaCgnfmNoYXJ8dGV4dHxqc29ufGxvYnxnZW9tZXRyeXxwb2ludHxsaW5lc3RyaW5nfHBvbHlnb258c3RyaW5nfGJ5dGVhficsJG9bInR5cGUiXSk7fWZ1bmN0aW9uCmNvdW50X3Jvd3MoJFEsJFosJGFlLCRxZCl7Z2xvYmFsJHk7JEc9IiBGUk9NICIudGFibGUoJFEpLigkWj8iIFdIRVJFICIuaW1wbG9kZSgiIEFORCAiLCRaKToiIik7cmV0dXJuKCRhZSYmKCR5PT0ic3FsInx8Y291bnQoJHFkKT09MSk/IlNFTEVDVCBDT1VOVChESVNUSU5DVCAiLmltcGxvZGUoIiwgIiwkcWQpLiIpJEciOiJTRUxFQ1QgQ09VTlQoKikiLigkYWU/IiBGUk9NIChTRUxFQ1QgMSRHIEdST1VQIEJZICIuaW1wbG9kZSgiLCAiLCRxZCkuIikgeCI6JEcpKTt9ZnVuY3Rpb24Kc2xvd19xdWVyeSgkRyl7Z2xvYmFsJGIsJG5pLCRtOyRsPSRiLT5kYXRhYmFzZSgpOyRlaT0kYi0+cXVlcnlUaW1lb3V0KCk7JHNoPSRtLT5zbG93UXVlcnkoJEcsJGVpKTtpZighJHNoJiZzdXBwb3J0KCJraWxsIikmJmlzX29iamVjdCgkaD1jb25uZWN0KCkpJiYoJGw9PSIifHwkaC0+c2VsZWN0X2RiKCRsKSkpeyRpZT0kaC0+cmVzdWx0KGNvbm5lY3Rpb25faWQoKSk7ZWNobyc8c2NyaXB0Jyxub25jZSgpLCc+CnZhciB0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CglhamF4KFwnJyxqc19lc2NhcGUoTUUpLCdzY3JpcHQ9a2lsbFwnLCBmdW5jdGlvbiAoKSB7Cgl9LCBcJ2tpbGw9JywkaWUsJyZ0b2tlbj0nLCRuaSwnXCcpOwp9LCAnLDEwMDAqJGVpLCcpOwo8L3NjcmlwdD4KJzt9ZWxzZSRoPW51bGw7b2JfZmx1c2goKTtmbHVzaCgpOyRJPUBnZXRfa2V5X3ZhbHMoKCRzaD8kc2g6JEcpLCRoLGZhbHNlKTtpZigkaCl7ZWNobwpzY3JpcHQoImNsZWFyVGltZW91dCh0aW1lb3V0KTsiKTtvYl9mbHVzaCgpO2ZsdXNoKCk7fXJldHVybiRJO31mdW5jdGlvbgpnZXRfdG9rZW4oKXskeWc9cmFuZCgxLDFlNik7cmV0dXJuKCR5Z14kX1NFU1NJT05bInRva2VuIl0pLiI6JHlnIjt9ZnVuY3Rpb24KdmVyaWZ5X3Rva2VuKCl7bGlzdCgkbmksJHlnKT1leHBsb2RlKCI6IiwkX1BPU1RbInRva2VuIl0pO3JldHVybigkeWdeJF9TRVNTSU9OWyJ0b2tlbiJdKT09JG5pO31mdW5jdGlvbgpsendfZGVjb21wcmVzcygkUWEpeyRlYz0yNTY7JFJhPTg7JGliPWFycmF5KCk7JE1nPTA7JE5nPTA7Zm9yKCR0PTA7JHQ8c3RybGVuKCRRYSk7JHQrKyl7JE1nPSgkTWc8PDgpK29yZCgkUWFbJHRdKTskTmcrPTg7aWYoJE5nPj0kUmEpeyROZy09JFJhOyRpYltdPSRNZz4+JE5nOyRNZyY9KDE8PCROZyktMTskZWMrKztpZigkZWM+PiRSYSkkUmErKzt9fSRkYz1yYW5nZSgiXDAiLCJceEZGIik7JEk9IiI7Zm9yZWFjaCgkaWIKYXMkdD0+JGhiKXskdGM9JGRjWyRoYl07aWYoIWlzc2V0KCR0YykpJHRjPSRrai4ka2pbMF07JEkuPSR0YztpZigkdCkkZGNbXT0ka2ouJHRjWzBdOyRraj0kdGM7fXJldHVybiRJO31mdW5jdGlvbgpvbl9oZWxwKCRwYiwkcGg9MCl7cmV0dXJuCnNjcmlwdCgibWl4aW4ocXNsKCdzZWxlY3QsIGlucHV0JyksIHtvbm1vdXNlb3ZlcjogZnVuY3Rpb24gKGV2ZW50KSB7IGhlbHBNb3VzZW92ZXIuY2FsbCh0aGlzLCBldmVudCwgJHBiLCAkcGgpIH0sIG9ubW91c2VvdXQ6IGhlbHBNb3VzZW91dH0pOyIsIiIpO31mdW5jdGlvbgplZGl0X2Zvcm0oJFEsJHAsJEosJElpKXtnbG9iYWwkYiwkeSwkbmksJG47JE9oPSRiLT50YWJsZU5hbWUodGFibGVfc3RhdHVzMSgkUSx0cnVlKSk7cGFnZV9oZWFkZXIoKCRJaT8nRWRpdCc6J0luc2VydCcpLCRuLGFycmF5KCJzZWxlY3QiPT5hcnJheSgkUSwkT2gpKSwkT2gpOyRiLT5lZGl0Um93UHJpbnQoJFEsJHAsJEosJElpKTtpZigkSj09PWZhbHNlKWVjaG8iPHAgY2xhc3M9J2Vycm9yJz4iLidObyByb3dzLicuIlxuIjtlY2hvJzxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGlkPSJmb3JtIj4KJztpZighJHApZWNobyI8cCBjbGFzcz0nZXJyb3InPiIuJ1lvdSBoYXZlIG5vIHByaXZpbGVnZXMgdG8gdXBkYXRlIHRoaXMgdGFibGUuJy4iXG4iO2Vsc2V7ZWNobyI8dGFibGUgY2VsbHNwYWNpbmc9JzAnIGNsYXNzPSdsYXlvdXQnPiIuc2NyaXB0KCJxc2woJ3RhYmxlJykub25rZXlkb3duID0gZWRpdGluZ0tleWRvd247Iik7Zm9yZWFjaCgkcAphcyREPT4kbyl7ZWNobyI8dHI+PHRoPiIuJGItPmZpZWxkTmFtZSgkbyk7JFdiPSRfR0VUWyJzZXQiXVticmFja2V0X2VzY2FwZSgkRCldO2lmKCRXYj09PW51bGwpeyRXYj0kb1siZGVmYXVsdCJdO2lmKCRvWyJ0eXBlIl09PSJiaXQiJiZwcmVnX21hdGNoKCJ+XmInKFswMV0qKSdcJH4iLCRXYiwkR2cpKSRXYj0kR2dbMV07fSRZPSgkSiE9PW51bGw/KCRKWyREXSE9IiImJiR5PT0ic3FsIiYmcHJlZ19tYXRjaCgifmVudW18c2V0fiIsJG9bInR5cGUiXSk/KGlzX2FycmF5KCRKWyREXSk/YXJyYXlfc3VtKCRKWyREXSk6KyRKWyREXSk6KGlzX2Jvb2woJEpbJERdKT8rJEpbJERdOiRKWyREXSkpOighJElpJiYkb1siYXV0b19pbmNyZW1lbnQiXT8iIjooaXNzZXQoJF9HRVRbInNlbGVjdCJdKT9mYWxzZTokV2IpKSk7aWYoISRfUE9TVFsic2F2ZSJdJiZpc19zdHJpbmcoJFkpKSRZPSRiLT5lZGl0VmFsKCRZLCRvKTskcz0oJF9QT1NUWyJzYXZlIl0/KHN0cmluZykkX1BPU1RbImZ1bmN0aW9uIl1bJERdOigkSWkmJnByZWdfbWF0Y2goJ35eQ1VSUkVOVF9USU1FU1RBTVB+aScsJG9bIm9uX3VwZGF0ZSJdKT8ibm93IjooJFk9PT1mYWxzZT9udWxsOigkWSE9PW51bGw/Jyc6J05VTEwnKSkpKTtpZighJF9QT1NUJiYhJElpJiYkWT09JG9bImRlZmF1bHQiXSYmcHJlZ19tYXRjaCgnfl5bXHcuXStcKH4nLCRZKSkkcz0iU1FMIjtpZihwcmVnX21hdGNoKCJ+dGltZX4iLCRvWyJ0eXBlIl0pJiZwcmVnX21hdGNoKCd+XkNVUlJFTlRfVElNRVNUQU1QfmknLCRZKSl7JFk9IiI7JHM9Im5vdyI7fWlucHV0KCRvLCRZLCRzKTtlY2hvIlxuIjt9aWYoIXN1cHBvcnQoInRhYmxlIikpZWNobyI8dHI+Ii4iPHRoPjxpbnB1dCBuYW1lPSdmaWVsZF9rZXlzW10nPiIuc2NyaXB0KCJxc2woJ2lucHV0Jykub25pbnB1dCA9IGZpZWxkQ2hhbmdlOyIpLiI8dGQgY2xhc3M9J2Z1bmN0aW9uJz4iLmh0bWxfc2VsZWN0KCJmaWVsZF9mdW5zW10iLCRiLT5lZGl0RnVuY3Rpb25zKGFycmF5KCJudWxsIj0+aXNzZXQoJF9HRVRbInNlbGVjdCJdKSkpKS4iPHRkPjxpbnB1dCBuYW1lPSdmaWVsZF92YWxzW10nPiIuIlxuIjtlY2hvIjwvdGFibGU+XG4iO31lY2hvIjxwPlxuIjtpZigkcCl7ZWNobyI8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nIi4nU2F2ZScuIic+XG4iO2lmKCFpc3NldCgkX0dFVFsic2VsZWN0Il0pKXtlY2hvIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2luc2VydCcgdmFsdWU9JyIuKCRJaT8nU2F2ZSBhbmQgY29udGludWUgZWRpdCc6J1NhdmUgYW5kIGluc2VydCBuZXh0JykuIicgdGl0bGU9J0N0cmwrU2hpZnQrRW50ZXInPlxuIiwoJElpP3NjcmlwdCgicXNsKCdpbnB1dCcpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAhYWpheEZvcm0odGhpcy5mb3JtLCAnIi4nU2F2aW5nJy4i4oCmJywgdGhpcyk7IH07Iik6IiIpO319ZWNobygkSWk/IjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2RlbGV0ZScgdmFsdWU9JyIuJ0RlbGV0ZScuIic+Ii5jb25maXJtKCkuIlxuIjooJF9QT1NUfHwhJHA/IiI6c2NyaXB0KCJmb2N1cyhxc2EoJ3RkJywgcXMoJyNmb3JtJykpWzFdLmZpcnN0Q2hpbGQpOyIpKSk7aWYoaXNzZXQoJF9HRVRbInNlbGVjdCJdKSloaWRkZW5fZmllbGRzKGFycmF5KCJjaGVjayI9PihhcnJheSkkX1BPU1RbImNoZWNrIl0sImNsb25lIj0+JF9QT1NUWyJjbG9uZSJdLCJhbGwiPT4kX1BPU1RbImFsbCJdKSk7ZWNobyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJyZWZlcmVyIiB2YWx1ZT0iJyxoKGlzc2V0KCRfUE9TVFsicmVmZXJlciJdKT8kX1BPU1RbInJlZmVyZXIiXTokX1NFUlZFUlsiSFRUUF9SRUZFUkVSIl0pLCciPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzYXZlIiB2YWx1ZT0iMSI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvZm9ybT4KJzt9aWYoaXNzZXQoJF9HRVRbImZpbGUiXSkpe2lmKCRfU0VSVkVSWyJIVFRQX0lGX01PRElGSUVEX1NJTkNFIl0pe2hlYWRlcigiSFRUUC8xLjEgMzA0IE5vdCBNb2RpZmllZCIpO2V4aXQ7fWhlYWRlcigiRXhwaXJlczogIi5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIix0aW1lKCkrMzY1KjI0KjYwKjYwKS4iIEdNVCIpO2hlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikuIiBHTVQiKTtoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IGltbXV0YWJsZSIpO2lmKCRfR0VUWyJmaWxlIl09PSJmYXZpY29uLmljbyIpe2hlYWRlcigiQ29udGVudC1UeXBlOiBpbWFnZS94LWljb24iKTtlY2hvCmx6d19kZWNvbXByZXNzKCJcMFwwXDBgIFwwhBYGBFwwXG4gQFwwtAITDghDhBDoFFwiHFwwYEXjUbjgAf8fhz/ABhJ0dk0nlEpkwRlkXFwCExmMYjBcMAjEXCITmcBm04ik7nM1m8/n0UGdFlgRCFACYREISpMwGISlkRo4hCNSilSpkXpgiCMuqcdj7VjD/siAP8AtD1wwBaFJbT+gLharTbYWgFwwyK8SKMyJ/R7AAi8oGyWMXDAiKTt9ZWxzZWlmKCRfR0VUWyJmaWxlIl09PSJkZWZhdWx0LmNzcyIpe2hlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L2NzczsgY2hhcnNldD11dGYtOCIpO2VjaG8KbHp3X2RlY29tcHJlc3MoIlxuMRvMh5PZjN5sN5yHQjGENHZiMJjNZnORvOpuMkLM0bHZmN5uOg6HIwEovGIuGVxyRAVjKcjIYTcYRYQTkaTCbBYSDKbDsZToaTHMjnMDmLTnLTSZh2bTCcjOaTcOhgOzuaTIdDQOhabTeehaZjSdBbBpAZZBVKtWB1YLFZDpZjoOz6YYLB4SOjEbDqZR3bzxYjIZYMcjDP4+OjdH75cx0djSc7CZTJdYRCpidjzcjCOjZUDWOjQb56chZm8dkLfGdDo8pdzlkr6Zb+LcDg9cbmnDxfAnLOm7FmEXX6Q6uWnvhbTBQnb4fE77NC41HU5mgWmidnDQaLiwbKjqodaa3E+mgYnuPSCjGk9GUdDEa1wkpdNp9RqZwMJkMlQM46Fw4Mo2hAGL/oehLdhagI6DoN42vaOA8BAOaDqsEARhzCyOo+sQ7jKNIzjQkLEjkpg2B27i7hGG8UoeiKJoq3SFjLGK5DQGTzQy9L1va94SvipyoKkEAYBAGQYQcEAWhiHEHB2+z8P0/j/QBAQ2wIlyWwON8EwXBsHwizoyQohqpxMhSGIc88NQ5D0QITEcVolcIoiyMIW/XG5TxhnGz0Q3DsPsRNqbww9DIRyGIZvgpkfKjKcgyCuSPREPdEPmqS5DpMA6DCvIyj2qqrqyGKGx5SUfqmPtMU1SL5R/RciSNISpoDKw5LGg42DCOCjh07lbVwvk0Rw9iRx5UwyBYrA91i3cuQhCUwQrC8mvyNz9pQ/4QBcGcB1MNFkRZOMXhHGK+OOm8OqiNgyjM8SsDK+4QWPcjOjOqIxrglsmPvaVqBlawXBrbV2XdS1jOtgVuIhOEXTmEc60cNKdjIo46D2/I5jhWw8u8Nzer40afqCNgW3LeYdQUOF8Sdab+X/AD+wHUao5dluWUZWEXG6W2XL0J2eHK5DhVNEyha1WwfV65DSNozj3jygJvkV5KiNqrDJdEq2VUtLBBpGlKYPAW06tUlwkijw+OvOtPlwkOxSWPqDMXHK7hM5IzcMZVMhcbgd3oU4g5XfYo6bsPO8Oy0d34Pb2FblcXFnzX6BSdF6MPo5ccn2M2VNccnrpND21XG5MlCVK4xOLXCIsWqA4DriemZBp9zB1qT8aqPvR9KFzAjMMI6jZiaA686b7jeO9lhjI3gQfFEVdeN3SDoFzXjiOo0teyfcqMNHed94UA+DI3n6P4/Y67dFp2P6PdjJ3vf+xB/teN5AXDuMI8jejY93RdStVAhsljgN7UNwqNMy86UxYLi8hvIkxQx7F33F4IQRIuQLjRmQI+a1MqKQbqBLEoM9gNgbrDOgHNa4aGplmBYC4xIaoPQdI+GwgjFYEMZObXDBhMtc7gdQ2huD2/l/Zh3/EHlwwJvRa3FOgZClLRSeSgG61kBIPWwtYqbNcMFrJitRGW1CR3phA4N8hGYkO8VnCLGDJFVwi2rcFgcIwRWU5CAt5Rj7L1B05GAMYYrqWjOZGNToU/IiUXDB9BcS0iocoXCQOntMIh+uAMzdI9hyj6CAMTb5BsLI2UpX6e01x3TdHoNoZQ5lDDOptMgOiKIxDdD5b7C10wBkvJkMMm13qZXRH9MysHDRABHI+BsfCEwjlPJpTcRGVL+X6lFHrjWhtjZrA0Mb04/SdTMDcIxDo9EvLfK6ZhDZmS1DdXHIldNQI01Y9BlwioFNIXCSdfSC4gSl3oSxXXDBGBrOqdUDYYgumOYJccnKwMsMjrESMlFiDs9p5T0n5PhS7hW4LgYbHon8l4/mQJ4vdX8GAdFxyz4R6DMRcXDGYaGy8XVE1TXA2a4bQxHFow1wko0h+Bs0CfNIU3SEqNIzxHBDyHBTbYFPr/bJTIHTtUFBcXGex6DeHXG4tB4o66KKqcLSVlIhsi0Kepu6UN9OoGmODKHdPMFxcOgeV0HeUwZ0McDSIk/J7VNr6ak+kBDYGSBocw4q2ctUSpQOQcQdcbgQRpsklJbZ5J10bXCSClGGRWh3TLmZj1XEqLepGV7r6a42EeoMVsLUDapEejrBsZ+GMOodcJFwi3k68XHIjyWTiw4LC/wHQc2PhrMyghBSDXCJqqlxywLaWFaaI1ZK8UGiLMS+CApxEAUEpBqCy3VvAa27BcDcFNsFZtIlSexjhTQWkUPuw8kBcbi24Ybc2/t9bu3pKAUgslmRsFKAVQqNokG+zjewfAgPyHawrhyNEcl4ftV612WWavEW9vZYGIMScYVCJ9PVKR6N6GuDxdA7xoDLHWNkWorTBv1a219/g3hnIsxOJ0UJfJUs9Ram4Yn/lvL7fwqdrVSguIQfcrji4nPzJDEkuQI5LzXhu/qz8OsNQ8w4zBzKrlG3tSAkJQyrsOnYX4lTFXG5SuYOVtYsLMHUEAcLtEIPmHO7Sp10BzhuvmIqUUAsvtUpRZKV7TJbeszpZwY8yYrycVCDxncoz0zSGl+Rj6qVWPZC/FYZMNB7O0HIMxCHfQgPwWbM2D80ZrU1lTAcdHQYHiqrcHeec9vlpwG/QOTwQEyBHlKTGldCZTQgfaG1er1XbTsCMtxcL8lRyCzVIaU2UL6xug+2ds1SgjVstPF8OX+4zL1hyKBU8h6+KhgWuyfSTzAx1EtKWRwxOWDIGMOVcclwkXoeNOic56LZPhe0EO9drjw8DvIYMtWaglk4nYbaUBscOrWLFLMtWpPSFqzG170hJISU2QPoIz1wk0kVHHNqcrDGdKG1VquWFctW97wPf5WCh0GkeTisSCMOc8SmanBbkMGzY0mYwwwa9W1Xi+FbK6C06SV6gmFwk2HOrCGJccmWHkRR1Z8loqn4529+InWKYtfTCyGbkKzCs1CAaaFhy3aypIQNcJJdlLLF3K4T3jOuMM4bMXxDiQYVrmvlcbmvDcvXKm2MZdQxXZFn/XFzXPXsu88SNmJCiFme7iXA4nHRcclJav3aNShU6sj7+o1l8K8VAwIeD2wNDkHRccoCBGmp0gb0SNrLwHgslwj8D4PTHjvGSHj75LwYLpc3H8M45RmDXleTydhF+S6SQ4fbRUtBXi/B6kQzqbG2qdwRMxzlZlSoMcax4xHrx6FNlrt2bs+j3o36aRB3gzeGW9514mL7ryZ9pN5UyH8T40U/duweS+1978fo1M+L6dJCYm1+f9XrUM/lkKYtDr8JcJD9L06pQgSXPz1Qm/gyYJlwwUNdOQY5erX6ig6BwBwbGBSD2Bc+ckw/U9VxyXCTe79DW7GIqK0Q26ramz4je7UpcJA4oyG9s3s1oJgaU7EtCUwY+uIv2Ow56tqZ4xW96Pu2c2hAPAm/EWvBcbsqLWwXPdvWCywLInLWwMvVPeNmQVvgwZvuA+g+v3jJCbMliawLQNlprtQFoWGMOZOowKsJLVOKvSD2tlQfPgJFwMIpsEFbp9Qvo4lxyCLyMpW6ObabvKSiPKPQ6I6aP4vJFidw6Q6hD4NoL4gxccqhHXHLDqQ8w9w6FaQ7m2gyw/jpgWjFRXG46gOBcclww4AvnyAxxEgWxFxGw/DoRARJgvxERLRDITRMjfRIxOxHo/rmLARNxFRGRIxMDfA7xUxGAvqJobJlExAZcMGYGaURw6w5MoI0XYGCZsOcQ0TB5gN8SMYUYgOpccvE9EJFNElFcXAyksxIlbxhxlq1cMNgL8aMSMagyMax/MbCtIL8Ysacb0ZxiaTqT7QFccrEvFdGimyBgBymaxDD5GZEbGEC+DsKbFbEbHsNJHDGrH04U4EPY4Iq1F/FPEbGiWvHjGDGPHrHvGXExIPIdFdH84CzlXHJkSR0RgRXHpnbkau2CMRcgdNpC+JOw4oGSMDqFMAzw8JMxoEEyVoTx4jCg6RvxjyWyZgxpMyERASZRtxpSYyXScSYSdyXR7FxykOBWyBkjyviZUXcXYIseEQElIL6E0m0qcoUQ0nkcEn8mad8rcnsqsrsocmcosSMoMq0o8OUpUkAEaZstoI0giJ6VMVwiD1ww2xqyUo/q/y4SZS5y6xrEEywMoRlyeSgyqkPg6LJi7CFC3o8zBSXStSxSvzGyxibo/nSA5GLoYRBcckyTsy0zEuEToNYMoPMUXDDmC/NCcBGXMfE5NLNPJ1KwfzMqsrM9XCTgWxOjXmlJOy8zaRMRqTXSCyaSfR0xGzeyIyDRuTigvxtcIt830eU4EfE5KtIyM5kh848hMVxcDlwwzziTrR5yazkTsTtThTIztgvg2pMq0zpxXTVTfzyzwSMzjTgz3RMjCAxl0T0TuT4TfjlT6J6zkR1y1SmAjAhUBSoRDGETn0DRltliZRlz2RvUFRujOi3zgI/pxx4qOyyg2JkzEiFptJuRTNKy8AwjMSCNKxluwCCrKrLjQLMzaTe0Fx4xqQ8CBJ60XxATlUaRUzszz0axXHJBr+kSM/U+tHg6gyBccrMwztRAki3ULwIOrNN3FdPbN/GE01ORSjObIOcuRulcJE+kQpKxlyU0qSt0wydn80xxXHJKdIdK9MtNMhRccvTNN/HGBlRAk6O+KQLik6Nkjckyf4BQPs6wDoCdRmngsrT+XG5yXDCeExK4YucZayi0RLa/40tRg6S04xox41wiMnSU9PS6UBToXHLDwCxcJEtDdPI19PYj9PopouFQIwNQaRAuFQzOVRAytRVD5n7eXCLkIik7fWVsc2VpZigkX0dFVFsiZmlsZSJdPT0iZnVuY3Rpb25zLmpzIil7aGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOCIpO2VjaG8KbHp3X2RlY29tcHJlc3MoImY6m4xnQ0m83FxuOJzFBzMpsMsDN5yFhjgx0Mp4OlxuT2cjKdDqcjdcblwihui0YPh8MhvMZ1NplkgpFxxOplOR5KdccoedXCIwucRA5Ckdn2AQKFwkGhBzNk8h0+icVi8ZPZ2MJyBUNOY9hJhpU5iNNklPoEcj0gEFWLdWF0ONxnOhoFoxLtBocDgsHrNbpkjktQsUfkN6p8nlMrlsvmMzms3pc6ORBNlJhmLiNFxuFAbpRjhU4IYaSZjdGqlVKmZ6uQTkcjCeRcYTgcDYeRQbjrjxZo5ZLjoc5hSDSYzKKBjYY7fhBc6LIY1fbJntXrdeKLaaTntTlpMpcstxwVmTlmzZpjOKM9pcbpgrR6XT6nm67YbLabbC7nhWM3cXs3UUaONectjAuh60YduU+rmNY9joXHIOk6jrKC7CiLqBQ2jSPFxyKQjo0aOhYOY3o+3yNDMnbQgUNYyjyBVcboFQ3Doyo1C7qo6LcSDy/8VDk30YxKuI+srB6jM4iw5CGNgwjmhSGonIciicMKWhYlxcMIxIcjQ0jMFCGo0hoXDHXCSOclpaHssy3IkuyYMoXFyONcMLfBRcbkMozlwijwOAUBOFAvD4LguN0E4VzFJUyhXOk8DmPgSBSE4UhYE4SBlQ4VxcrDdKCHB+E4QT3PsyJaHQT0OoMeMug6dDOM6HBQNIyPIqiGqwhQThHPdTKBMMuS8MoeysNktVnMoeh6E8EjIMiXBPSYT01X9gjdTkBuKziGQdT4FIoN41jS38xjSM43BYMjUt0qLy24iwejcMo7gUXCIMKLBQoFxcMzIYOl0XVdoXDOjt4t+FIV24PLdB2wbbpJLQ32nasASLbFxy1FwwdrLOI0o4q893bZ7tDsmkqDyKyaDm/CVtO3AWI+NgWJ1EjPj3aVqN+E4wjJCVyDkL+KjljaDB6GAThY4IdxFKjUS/f74y0jl0jKIqHPjOeezLTmlJaFxcOcbV6NA6DoOA5h0F4XjvrbV5bCqaBciIzhfmWaDcF4f46jiSV7PiP7WOgd6bMwzZ8MohXCI2COWbblusyhdccq0cKlwkDLbGp75uenjGOVxy7HwqM9ejcN4T77u2njoPKHBcXDvUy216G6L8pxI58xzQ0cKM/DhOGIXBkGoyjb0Uq85ccslI7hcOA39IJoyyKMN6hME3adtroyCLiqSCY6SLZfKe/ad0nMzMMjpTSPPIoMMvKZZ43kDp5XSJcmk5pb3165w4z8DL73nSt72wjlbEK15X2qatrGta5lmXbBsVDrfKo4EOgYw0A9bIxouqtgXArBSC8FxcRch77jdcMLlwhhKAlQFEAoCEaZQtVOb+2vswbLAlPcGg0BbLgzkoAYQ1BhDwXG4ZXG6ADm4sNIdcMOgPYRkGfQfcgy6w9h9Sc++CqlwwEzJCXFzbYjGfU7FcMDAwMyzUWFBISnMEcOVkkwQMS4MgQ0EhsDIqV58T1PHaMlwk5CsZwmZeXG6EGAQxjIG08npFgyBJdqRcXOScMskbA6AuKkGwmZQURR4DKGQHseGww2LqHMLchJARxjmHguKAwURokCatqj8QxB1IsHOPUZgyknh+bsOBD0qLVDID+Rcm4+BlB1KcvZlH0lGOkFR36t2Ru/VQAoji41xcoCk2pvTinMLycwVoXFwzqFwwUgkZwCdccisqOx9SGvBI4C6TIdFbzSd+rSV0PCDncNxLI8KR5iEaDvFs38zwTAhljLOcEtksBsTAribhXCQJwb1glBWWQ1iaEA6JBdOGMNat5bz7B7PEOk3paAnn2pxH5NEhJjOgRIE8BCHokDIzhMM/aKQXSqllEAcg2vBo4RFccqFtlZjwThdpArijtI6ShspO2EgQbDehrnaC6ldJDOUuC7TBLdM11qdleQePAVxyDhJFShlcbmkBKgu8XCQHQNpSVTAsXCRVFhu/RYam1NTCqnUpQCh0zhlTSmsF4XAhAoB+rYLgZA9gzD6vlVxuC8M7I1xyCHA5hhdqHMm53F0mTmMocoCIlVRRVaq9U7faAVwwEThuDhJgq5d5lWKkxRaeBUzcTzWC7iyk8p6RPo6ChnjiAeIVsWbktJLi2BobkCuBllwi0UmAe2tNyFtcciXGDFsJpB5lC/QOYdQxISDo/+2z1K6pRkCrYilSn6M3MojuMKFcblcWqJmxTLLcnAbSrnRk1SuB7RzcBzB3Z2z4MG5A8urJotVp7U2rg1xuQadNNW7sXCRFswXXsRZO2+Fsqd0Sn9cW7CWqMSBB3Pu6E/r33Wvxcu5pRkL3EwHP+W9sLG11TngtzV+g1qRDKCAOgZAdBmYc6QFsBFxyMXAQWwU5eA8oabQYQtKWstt6UWz8ujhDA9QJtAKpWFUgVGKj3UndYJVwK1ZcMO6L0TuLE0NizsBY8SvPko1z7/xdSPfSW+Fri3isA0cq9IaPXbdhd276IcU2gvLi29AabVPtvpNJ3s1Ly34vndOlN975ZWVOyfKNqlOrLztk5UGGEhU+fWx+ns/qAyCoJQZetBUMZufYonDanERF7sNht4J0XG54PcNr0I6EGSoaZLrqBPBUFpe6/PtqHTKfyWqcnVxukaDJICyYZT2Rhk04HTT0+9QSYZVqQO5Uw3OP1ORuZqndXG4a7jaqXHJknBC8MN7t9FmKJyXUk+0Y3n4JgdKohjzWEMsLlkHui5ZIv0cbgoE48Rm/nQHOg1wkehAcq/B7truydTIqEYYD4GEPlsA+F7soGHeMGEsuYlCCFXuFgxBvDw/9AZQeEcK0DqsMerUj6wIyDvY4PckLOD6qpLNBLLBlsMCFK+xD6Kd49SrD4dItYj1th5mfLIthksNsemudge9cJFcZ9SyQbY9KaebKp+H3gSuL6P0wsFsLr/8uUspzS/nHG+RY5x3dGloLTMvnMpBgF8wcKO9D4HZaodzdBcC2FwLoXCSB17ks5UQ/SLHWFk54WBb08ymS7o5ND6iJXCTzLI3NKlxu0aMcXCQ8cRn/xZ9oIb+5U5MX4oPAn3hzQSGYOgS0S6XBD33BsgST+ayjnFL+mkEya7dYjnBcbjz3fwf+pv3rbOwOp9kzr/imyBuVVlasfaNnGiZZ3Y0hhivzOzy4Wcfzn1lFMwhys9mO8QabQ+1vNabF+aLVs89ra/6F+LDW26Orzxd095JV+IWtKftb/d/B7n3vGBLYdbSrbBXnojpEn/grz48gX2/jDORoMTQw1uHKMPivYuRLmOOskgyg9v7pBLsMbEeqhCOqmqnqjgWGpqnsfFVk5rZJBARLCKvqwjfgXuzguARAuq4FEk9cMEgExRoE8EhpijZccofbAqncXFxjZwZcMPbj6zIOjkIFxCpl4JBcboCaCYV6cpAMIZBuVxB6JpB/CCB7BkiW8CdcJFggoHdA0jjrDkRHcirrxN0FSOUncCOOxK6AptRcbmT8gPcLLPQPpZcLLPw7Z34MrwwFXDDQI4DMBY6yRY/CBVxy1klgnAUQ7gUngw/wEiVF0i6gXQ5gygzQmw6FHQ7uDAYlJgTQ7m2w/Vxy4t4FJTRThHbwI1xuDqCeZkhcJCXrEAwtwiOtxtFxQuLt5qDAwlEt9A5jMoqnggwmwgzAzF3gmREg6AVxaFxy8Wxd4K5zoNAH0WjkCzcWsW4jsYIMgtot4GpFr0Zy56RsJmQMwNjZ5XrsRja4kIjBXCIPE6Cekwh8v6eic0DfGrGuDuV6DCkwcnDaj1wwglhcMKTZ6HxETDwhsBb0b4QqhxkdRLZ7LkI8RaqLizBuDkIoEe8gjnxcclxu7F6pBo3gjSBosyGC1upyXCSnkiheqn6P6N7CL3CPBnEfshDMQqjFT5oHiPD6LFxctQ+oI1JSzg6PJevkzWTQSGrEC2DCBaD0C67MrSBWBeUTBSBiU5Jkp2kWjkWCDwb4729otHI8aS9rXCQtn1wkb5S8K8bFi876bNLeT7MmZXbGkrxp0mpNUEEnEnUnjs4Mkn8oIE0oaC8rq/JXRL5Tb7cuC263Lg7wbhS4EuzqKJwoXCKtARLAp2j2JnCGqBIvGMsvMUTMiudq5ai4BRJFHejeJuKmgI8sDydsXCQvEQ8uLAXEZKiFgleAYgZiTzPzQrNzSAYRoDpKYCGTLoCqgofA+wGloI8TLEbA0TcoCIfI1L+zCw8L+zGKbOVzINbSjpGylxvFonGiWFxywJqug35S6bCxEWCu0p4E865ZKuQ6Uqj5ckq0E7clTM8rbrhcIoj4XHKmzs2HSCFxYr4y4kxpsSXT3s4TqFdqIznT1E9iRS5JOg+FNsEPAzdcMMs2K6QlsC7IEhIMhd4Fs2E3RThWU+U/ByhER6gO07NC6yU78qz51C88krT6pcBcciDsB7Q++03AsEC2voBIB6BEC3PQC7BaW3RIo0VueCjwjKlSoAV48Y/7QK/+R2tqV5Q+zMLaI1QvOK5jOOlRMMvoX9RJSUdJSZIXIaXwigVZRWTLRbRej3Rk6XRoDsJgRAJWIUPmOI6lXHKttJ9ikzOpITPiBg5A2TMzTn3iWkLzMxAJzzPkfzMw2txNGxUo6j6Cyn3kXFzRdOqCZqAMZozL4klccq4SDIDzMzM3FSBY1FwidGTOLFxuYnROTxEfYBVQ4jsUrRjclQTSrRoFwNQOr1wkXG6Cnt/kWtGtNVU1V1W1XmhvHv3g5gh02VBNLzUESzRFagezS1EmAzUzR1iTWHgp0jw1RA6FEo9ccvtW9Fxu33KiBTVi3IBcXEpcIj6n6DFTAlxyWy0WpspEC3XAXHLS4qfDKTAw81n1yMuiDLdre1xutcQjtd5ccrNet4t86HXcu1XlX27vVTTJVYp+WXTTXHJJmsNA5I+zmVIg8w4zOtJ1ZVAVTVPoMFS1d1evEVjI8vJEqPKkS09V3OCVhztV9VxuoE9ZjelZzRpRLE1bXDD3X6pEms3IV6C+SirsXHJnKF3gqFxyXCJaQ4mpNnXqjyu1WfMOiBNZNsO0kDCqcfUo2fM4fZDzFTNBWDNUB6BoBhY5arYfauBmBxT1TXTlUEoDYnFNUDU+j/DI+LapWRWHayUmXFyCMQxkothFNA4QwCC1WW6QygztXCQ8pVVd04kxiRNtYta2kF7S9Zqg6hIFXCJOVunfcLbrcPWxZU3a3tcbV+ncou5cXOQpEVxuIMtcbmY3XG7XBQcyDgu09XIXOIuXPUVrN3RWmoe1ngU3UKa2B0zJ7WE2DvIVFPJ2QA8nggQ2HWng72omPrHiGDut42DS/2EVCVwwcNqoKLVK0espq1xcv6pu+/LErBJtBFwwvKgygAT0Fg5lD3EFSvatUI30dIzrsWYLavzCXCJbXDCotxWGB6ICWCw8XFyM7rbX4gz35rcrbWSG5X4H4gzgmoXRcyVvsLRtbtcpLNeE5tSHAg8SslxyETS2wjhccrHODLgc121FgkhdgqaY/NZIV61NMBAORO/fgJflfo/LgZhLf5gLf+5FffgZf7gODxgStOB8Zthekwjc11xyPtQtel0yc4J4RAWYZFsYc4d0jlOiDLZcMFFmLRoHS2CtooJ04NgOBIR3VK85gOZagOAJ+FxuQqM5IE5iluM82kIG/kk1bwfXb0rxcMDPSk5k5ctcco1o3o3DFpAykFwi4HjmB0hD4N2NljqN+P05WQRuMTbG9Bd6cit6sfkbEf5cXJIC95Wc9G0g3hWxVAwg9vKg90BZMmxRPDJPKw+lJZPNLtODaPkwQQQU3vG4isNaixOPMlKmwDGjii+vaEh/XHKoWIXIYU5CJqcgxE1A1lt4jAWHyq6l6pbiOCZM2lbNnHbgsQgqmmqk25pHSAflyFxc2a4JmbIOGbYmc9sTXDBRmqBcXAhcIuhioLAJ4MRcckJzm8l3nYIJndnhnkIGTmCaN6cYQ28oBdnDB+CoXG4FDsOonZOoMZo5zCoERZgg8VOF01WQMFW6IHSaJ3yUbZmw3j9oW6JcJC4jyTUJIOUJcIQE4HlC4EBS9F2jheoEQHyEp3uZwMpQXDB4BfQvpiB3oholpEVzQmS/p5pDVZp+T9e3A+BQBeBAWOJdBNQDhRCNqFozqKUxpqV7qWVMWRCJoYzakKJcXJIoKlJgoAngplxuhYoE4I4IusxRBkNGyCqOubmQ4OmcrNpwhlh8YE6ogr5cJIBbhomSQM1VEKIMBeDwBaa2DuBapWBaZFwiXFxcIoWCoqMpq4dJiDrodJrsb0TmC1wwW7Ko4AWxgi2pk6Bn7bOJma4qYGh1JaMCLICUrONJtTfEq7JI87UCbaQ23n2uugZO1s2zXCQMu021VVlmDiYx+Y7Am2VdcA4PeqWn2kmkxW22Ry+jIH+6Bh53INwhlVxcIwU1pTRJpWS5RcJocYDlpgT3F9Gsa+d4fNprpRpxRJpihXo/p7qJPvqDvjqGk1voTNLGrFqwWBqarjqeuYQFt9oajcdqBRrfdzUJtlmBvjAgqcKTra8aXCRcMEOiGYZkU2e46xCCoHudQJRcbmCeCcB/w/xDIKIZt7tNurXiDLuyIyB0fXjOToT3uod7utuwKer7Q4PKRksSAVreD2qZwlwwUEZZlELkcEZrlpswHDzaPgjKRDxKRZmaZ1xy9S6TFTKW/DjpVUAqzjVma6rMGUpE7MjJNI2VVERVNzbJL7Tor0AMt4JLK4TDF/ZKrrrDwhztQNM9jNxXFklPRLM4NQdNF5qNTrpcJFL0D1ww+DUHqFxy4Plf8KoPnOxFnPHPSavPs07nbKPS5XlcXPSRiMdxVYDQUfscDKCqXG5AkqiA27rDcJqsqFAG27GrN9S9Tlxy/VJ7Ko1xbd1cJFwwUpTX1JOKAcXlcdAMEcOIK1VA3kKk5wVPZiqGQ8usuk1DjuRgXwsg6AX88r3LtU7q5lTiNdmmQwPXu6kguAfgXFwFV8MFZSZfWIxf2I1o5ZfCxkIFnDPAjNsl3B8CRlej+4F8mUfemyfFW6/FgsCw2dVWoNAjXlxyEOcMpkdSDoC+mIBQsd1GZwyBovvur8BZaSD7pcd6XG4H4qjeK99eL5OogIK8pb1cXJU26N9iB7xkbWjX4kBx7Q+N1UFo1ikVFixKrddXlsdjbfdlbV2O049lz2taYjDf5Q7+noFZ8V15bYroh2bYHmW5Qhw7udPqT8nAd59hcAhEV/uMydzTe5sIXDCYwC0yL2JOrHPWvd6+UhBhk8+uaAgmcXRcblwi1RppAvZSbfxoes9l+AeG4NxGUze10B1QUPLklqTi3DpCp4ji1XNttq1ZIGQG/N7yN30zPyqCdPry6c9sVNp9mH4OgISPgOQ9Y579rALW3scJntozhTtUELJMB941EioJ8X4jtUGVvoORc454LTf3jmY1YNgjXCJO02L3r0eYDp+L9UDcZfxb7/iBHKTMc5GYgLgOLacBmE02p6NxGXGaBiBoBYBlNYVcMA4OFtKiwLER+irgYvhJU9wSydxGzq45ff1w0y34Gf1ge/1/HrHJlmtQmDBUPISpWjkGHuQwEjwF1Zpccq2AOyHDFohnulxyEFxuS9QLXG6Vh1wwwbAqAb1cbmIVNyjAX7gSQCwRBe5lMlxywBZdlkuFK1wwyf9wFgMgHUNcXBvRoiwWBTAXGKwGXu5N0KeaugKpFQGTEECKO1hccpUYBPA/A1wkXHKHapIVKwUB9i+0F6wPQvbmUKC9ifmoSntcImHNNpjkiZy5fOWjXG5cMLvgXFwFNZOB0AkPCxwxNQw2/4YgLt1bwlUL2K9cMGToELI4WRrnEw46IdEYspE9usBYLrJ1Q6qKjPYhU7q4h2+FcNNC3fzbNxq4rcWvoVJorVxcaIsIRQU9+gR5OjwgBTp1s/MytTgwk3Nppp9Uc0LbQFwkIM0SDulAx3UJyFEBugiQpi70AYJUMAgHG01cXC/qgGQrxoNcbpGhPdQMsBNkjA7F6wNBorgcoikMXHJAQMJoM4AWltk4LmUBWhZhfC7iN50MWWvQYwEbwJgG8ZYnRCOHqFnyFUBYjXGWPU2h7zQ0mhVCHCAEHkFNpK9kVQJcIhEUi0h3NO4dKD6CrDgHqBayw0O4P2VfYNDFWDrEQTnDuJmB9HCrR9Dkh0d5Nr3DRpNYcomhbPcxob3Yu5BCA6LDhTkRUnoGqfVoQoR7jZ4EEYAdmVww6+VegsMt4jCpJRtEnDVGXCJcIuDa3MoDwpkW+h9pxGDLBtluQWaoIFwiHgh0RFpcIl/gVlwknx2qIS+FRBCA4ZqG8BW/tYsItIjZpqHMgEYsMjXJaptU6+GXeVwwhU68eFxy51lsEqaPIxWRxkVxXG7NyEIynFxu7BvgNgEIt4XENNPXFpQhCC8BwgxcbvODFBkeGolRuB29Kq47ESliUrhaMB1cMMRDRG+MC8uejjQ4wJW0tYfQZQORXG4I46ZTJVxc+hBQSWuQA4cXKDDBjHUvDBqZHItHBbLGGBy5igOMvFxcy30ZoDRGcA6RnkcR+18OAvdHPylnyG90gbpbdp7WXDCwuD9iwB47qstgKJXbjOC2Dk5TKVxu43g96NArQATq3DeDEo9q+jCPlyzwMcOFepmTrQYTjT4wCIiJR2Pw40yFVlgL9IMRsQ/b8MoYJcCFwYRRK/iO6W/GRvXI6RjcthHQPlEt42MdkdrHbImhswOkd+DMejUbR5HqgkAoaJFj0xdI9cdyP4iaTmL+QMkfqPbH+LDubHgzi1VghHJ3qqnUEhZVw9QQ9HTYOAfUPcBsI/L1j2z/5KiJOKVFXCKMg5iZTxk2XG6YwjFlo2BcXGhLZpdWGC/Qt1BhWUvnT8z9IBcB6Y/geJEJiU9qhPMbj3I3pUYSO7QC6oFCuwGR6qPtEsySh7w+AeYE0KayVlxyxJYHxHypJwQaSgO1equ8mhMTlCOSUELkBJJZNVwwTkOkXlxufkxyUpLUW8yfHVLDrPFnwGVaXDB4m167aTwGUeMvKQ7TJUDKkBOSmWYFQrJIAWbKHnslUBHgXCJcIr2N+AgSQKoF/o0ZKfKSCJGTREUoaU0yglOSKoN58lPBXCLi8cplzJIxjKvXmFxuNGAeyqk+EqYRE48EUSqm3AF5sG6UEZKepVTkddQMnRri5JTRfiWBKxlXgbJYBEuLjH+jURqhW8qUnuBsAZBQWXkjRNmsRDyrRkz6s9VAwTYnEBVdxouH+wRcckbEYBaxIZUlXG6PMJBj0PTAE8upJWM4V3JwR4MuBlScGkRvvlVMMtgqA+l8XCSsOueBWHQ1xlhZ4gRJiHAj8SCyHl5cbuoHhDqCFyNEAvoZQNYxA1xyKsgESzcSG+BARAJcMI4TuARDkkOjeEJoAgHJRW5L6BwsMRVcIvUqeVsEHeEjIRbz15niA9mZqcoVsGxfoi+AFAb2eMtcMODJ2jXQWsf/NFwwMDA1SsZoXCIyC4iMhxAlWYWBpmGuYTFT+0+dNIjKJW5pBfiaUBqM4N+0EAFxEO4QXwgLyr02BqSalX6KDgPISQhcXL4QFpqRZI0aifoIA2QS0fiBjAWuCJdE3MgalBAYgLUFM2de4/xAXgI21QaEC+7lXwgIwEgCRLcRLmtzTBW01EDCA/nJiOZurUkWCB2mxAbRfgHEXHKTYgigG0C404CVTp50XDBznRTpwl06dfDOWAyAYhgQG0BeBrAxXDC9qaUyP+hUwPM2ZExOZckTmysc6lwwxzqp0IGybKGDAXodBwI2cT3MuniTpwwYHOdONqDcTywlQHObMFxu5lxcKdIMTDzyQ8p8CLeeEqZQnQG2YqIVmLzOHUE+SYuFBeFcIgmM3BleHks0/IsEZwtJWJBpGUBQhWocAkWpJi8ZMRRA5mbcCdRO4bp4MAtjbwZh36fBqonzLEMcJ9x5IzZGHUCh0KCJjUgwxwd7BHozEXSWfBljWE1KEBEuKkLQKVpEUfDlAo9cMLDxk1QtAXalWJ5hKpTdLCrDPGLBlcsjeNGY3WSAUBMYHcbyS0c4lxDGIHmTSwlcXBAdIww96CntZwzIkWiMBybIHDhdKb1DxVxuw7TxwDm8egOIV1xcAZJn/k0gN4qIIcoblaHzC8YWihuWrCzF8jnxsooGGampBVwkVFwiowMsiqglLkYhy5ogQbst4OkPlBwY+LktGuBnEKgRB+KKXDAwMDJSPktFiCfYVdlfSRUSBND37LMTObPLvKFqKBcQkFGwnRIVQMtA8jQvrDf0mBmTJ0oXLuKHUlSFXDBdFEtTE7lEkIcWFpZBcDW8XHLCSAcwIQHkm8K0ZQlkQFIf0p3S4Li0yjmiUwKpOzeeSJFCwGJ48xxK6APWX54GdmnRVWAZQIi1B8NTQU2Fr1jLz0fYWGnZ01UMKqwC2vaAyh/1+xHNfyf4A906VvJXSnajRL6B/04BJ1wk7BB6aFwkZF8IeacSnJNaXZWZrRgE8xxZyhEXsLM42JT+oeZdqFDsnBAGKmiPBp7U1qdlO4C6cGX7olwka+Z3p+wBKjdOskRUeF/U1Ke9R2n0JlD/1IaedM2GqGLoXFxFxkhcJGmNRVwiY3K95TBsiT8+FMHxjJFDKIpXQDMVyMGVMjJhtI2TCEnB4LnVBqF7pUJg3NqzCGnFuEdvXjZFXHKhukeYTaRwMWnZSQO8pFiqXDAwMDOOMgXHGkv8p9P03XpsJtaGiSdJTNZcXM5cIpI3pD6saig+GONq9EZHXxHiBOQmIDEwScYTQTMQMT0HaCBxBFwwxkaKq5YYhMS3it1fwgdKqhgUjITUsxQEVs6WuofchnHZ1Zqi2QnC4CgFLxS+E2QYT0OPXxgRc22nPA5nmAF4E1wwkgSwXCKB8FxuQEVrSBZcMKFKiK2uOA+AKKyor2ttW4kekey/wVM08FxuE1k0MBKbDqsrDEwLXG6KpgbAk5HsI0LTq2IB58AlUgzWlrC1162RAsBSFDrGEDwPBBFcJCHbpXIfkDsBnA+FxwklfMqoAgLhBBAogHyrSIdcMOAF8JHB0A+ME7AYhV0aEsJj0qE9CzCv7VrhqFwiXCI91lgOlZgpvWbrTp+QNlZ9RtXaGT1byRCegeCnomh19C34sVwwdKXlYld+uvVRldUWAmlKivaXTPE1161xI2tinqDdV26rq81R+BhUgyHrBoHCZfVuA2OPU9FbKxnWtEUVrzwth5ZhXcWDiOxZYtNcbghcbkp+5Bd8DkrJgziuIBrsTAJwEJ8GmcHmb/EggE4C5KkB3KiFSi75jcWDExpTAcgIoTJjOR7Daql5EJ8tBmBhFFwwF8T2Birs1ohAXDArtAHYbQVnydo2sDGk1E1lGlwwqstRIIkQXxaEGn0hSfYcB5JHTAyAZgIpDMNYG/FvCyyTU2gBeBgXwgZcMDAwMFwiaPArTAOlTdQYySCq0ZixyloJapdcMLagtS+YnVwkkqg+dRwqlxlaOZTuWuWuZfWrBx4rSpyJmbh0epAByMv7Hsj+UqhLA9Sv0BnR4gZEeY7e2XHhMEOXLWaixRcBbYK2uapCSe18krkZCEhCiZxzUWzAWAewgy7dxfbUHHy4Y4iqwBZbDA6W81poWuXDbJio23jCQCe1oBltbLJLclG2Mja9lV2v0rdup2RbBt328Y6ph2T+gJFcIhQWR0o5dfL7QoNvkx2pWt+W1WGlsm5AwapusGwOVxZ8KmdYtAdcbm4EMuVGrAx8eGBEaxebhHVQUI0hURACXHJyi5kSYAdXL7mMnwkxFRTmWxgtbyw3MWIFVXOYDqKp5064N7LLydtHcbguXFxRXCJDAxBDVFwi5pHglgjE0io/dRkCqHRztomUsMddHuHZqVB6W6VbWR5Gz7mim0ZEM6RcIoGWusddgXXbnSl3C3oFrTojFbbN3Ulpd4rqnXALyZu78XuvAW/WAzBu8LbbO9XiXFzpeLiw2FwwcbeNbeXj7aom2H7C7u6XlDey+MC5OQtbpEjpcWRMEJVPujK0doF8Qq90D43milxcxqSJSGSm6+JIkVwiIPLsEk5cblwwC7epR8VnzkaguEaIfVwi7K0mUUVLvpF7fR1ccnnHjr6YctebdJvAgZ6E74Y3BdQVTnXDs1tB+GdoO1OlLtKggpqxwqULfBx5+c9bFtWGX2LyFsioFawhK1Lx6FpY+UAwTunpBv7BUBaA3gTsJaFqRKPCr3oZCf7glwhb+FVcIrZ7ZZISFDj0nz4clEVMNErQvYUaMJuhpgPoDjcgFoC0B2S3rCALwFFeYDBgnIGVja9dY/A8ZwdAHI6yaHk4mO1wLhFlZlxu8wPOZQFoDIeDYRlYkNrD+BYXbVPf32pCBdqYUVwihx5ccuvXx0szhj0+x6pBWJRbLCwXG1wiJzwHtZsBlhYltmGAq9O0wwS1Llwk8Vww5xQlXDDhkHNWpB3uGhfLcKAFTVwkvEBqAeHX8D4GpK2dfVZlxFwkQBqXzYQLI6eq0CgzOvhgghtV8JpZzA62dQzmGqj7iBDP4hrOAkDEViMGRYkMRy+4/FhEGlwkiGi1g2F2lrwHeFNcIl1rMTgRYRav0Y+BOWRKUk/TinORYEVKsL2n+FVvs217bLlCOKWIwShcbhJ9ZWmxYvwH+CwgjTugTpSqzYf4UdhcXALoD8e4STV5Uhq8XCQDIT4XXFzKiYxnwgR1ahUPKj9usE3T3rJo3fhcciXBs+BVKGSApk5/tWQjfZpwB0EYFRY6rKj9lS1cXOgLQRq7KsQ0gDJJgK7oXHKP1qO7hQQgMAFoDkBcXAXUtckQwDjwM4JycV2P8vlkOFwi8FGgjP/uxpk6A2PG4HkXxzQJz+GRmmRhwoCHzqA2PlXbQdodj9EdgTq9kECYMhuL2w//XCQF8mVoHjIXj7T7GUa7pxzJmU7hK5KMn1xy/tSAKA/uQXIPgrAWZCr8XDBbriMBY2qPivsBtD4hKJBT8Mga6UyIZQb9DFTJxk0JOVwwVzodmQ5CRAL9+IIzSoys1V8fQHPH4Z1ydWUcf4f4pgfwu439FKwgK7onEEKryX0SXCJCXCIb/Hoyju6Lco/rHRRsu3hGW+hMF9nLskVhOQagymNkBWK9Gb5eLNRVQz0vMrvX8rz47C9cJI9DxiPa9zgFoX1EwNt/1zbPEAtgXjs2QjBVN/O3Xz0fCQUsqjHiajFWW6guCUg5KDHvscYbsdKPTHqiQx64CcdcJC5BymZo45arvs3g70QHchhZCf1I2GV+b5cacjE55hKX2YVcXJrfhFCSKVwiw1EfubQs0WXy9hNMvpR3MAbPGVwwHBunl5qWgc87d+wLWA6zx52oiedxb7nvHb5+FR2fq/bn+D459AM+fbLyumRjv1ww5cpnvrZmzvlxlhomHzmXkLkt/UoDI6QGCIoSuKozXjRtL3/MCJmvXDBcMDAwNsAZpm44o7c+5Ii0GBEu05fpf5JjcGixy9n5lZubD7pfQUBbiZU3q3w5XCRwTWigPgGJjME1sEulDvrDRT1o/hiaQdIYHnSKXuJW1wmpXCKPCWOjQjuk9t5pHYXVUdKgG3SsEZvy6UAsXG7YKa3zEIhz02CfmbABsDvRBjS0l4KESe2jDqmR7fnoeYCgLaQwDnllyqgdDpdVEIIPlELuqXazpTNImR0ZUMdHFwTLNervknN8t7pccgXwnRcenhPQXCQw4+jylfIFEjG9qWwzgBDpKCpvRn5QS7SqLv0sJ7dKL4/Tso908BARjYtkkDqal26nXG4PqfAWaoaBWasDeuooxgPzkgT8D5N3GLAY3RKgWuwjWhsPyglJbwIdlUAxxs67DBoXXCTv8rGmPVYdGFd6lQlujkIMBfgXYRR/+puPQbu1caodQJm0SYBwCUDRNdOWjWxIe1W63G9YFvW/ZvCO079cXHq11y6nmrIsLVxc2pdeARh5IB9uXsXXE8oQQhdxt/6FpAceeljjiaGDDlwkDqgqShM3MtVENC6G1R6QhSGkTTC280Tr7EaK4PPjoEehHM9MiG3YYypt7x1jSaPlNcmMu16XdL+qkmpsjDfmm79THLZRoKIuaZLp1tRoqAj1TAbQFtqxQjbUhGiYJu9KoIVsXFyJ8FdlqmPOZiVragUBHJnBIKZww1I9jOQZE2mSQC4Q9aUoBuQyj2tsSFVXXCKZb6VqvaeScCFTNcborXBMJ2AWXDCkTyAqE6ZRM1gFwpOJ3mxKXDAUOFxuhVxyt7K4KoBh8fwB65aevPtyG5lgPKQmAdoXA39YQmjWOCF4mq4m5A4MQmh0pVwk/4f+Xclu34bp88ljTICAW8a1qRxkuOE8YJyBrlwwnICiz4LeYXfmTxklO5GN9UJDu4VRklxyzK3THex/HYzsgBOBcIqkq9hQUbZakrj6WsFBdT1OJtAOaWFcbtFtSzZJBH3R124JmsV0XG4DZCntrtAPyPdicM4PBQOAXCKe8GcnpjCcNwTDdcgmQOILN+U4WKBOncACeBPE4RqQ9q36E1wkBEL531pCEi+2Ta9nFEK7aRym1tGntlxc4m2DbUnMxIAUyuedAzsFNT0jJjSYzOf+UJAWGQLVjYm96fBx7ZJBmeSbXFyFDixxpGPen1xuY+JCloK+1/p3XDBCZ2pEi0A7gQQOPTBtk2sOHa7EXHLEsotgC8CkBBAnNaQPlbZrLYwde6KJXDAQr1+bEU117viDgTKT0teGp7ujwHH4iazwPh4pGjkSyFdcbuQMZA4rhdTUp8AUR1xyG/3DbjSEG4vkT9g6NfYSht44gbsxtTrOmj+lhyh5R2dXHEuNC1xy3TetspOXbTUunIJljEjZaEodq0FrIwy700y2Li6bXFzODj3VAfFV2dCEj5iD0zrQPje6VyteeUQbgpOcYq38FkehkU9aAs0SNO+KcgadKHx4tcb9UHK4oyx5jqnQOHFh3KkQTzIYtYFrqm6YiiNwMr77x4i62JQuvKNjkpYEVZdjlPbk68WCavNcJPTtOMSsfp2aN1pSDjoc8NeGOK05zqh3KGGUTAWkJa0tLNQEyOy/jCMXCPRmgyU4/sl83mOHkayc2tclG1iRV8Jcbn02kpFI7P/x5sueE6ShI7kmSiwnehqTTfxNhQSiiQGM4OC6kdyGsiCRmK4vEB95GB02WVGvkey22rpk05lkwd7zzzoc9eP0o0WDF4xwMmefZ8Ev7izSHMvk2tWIJzjsDF47tFVXToXRxd7Ve8lPQ/KF0Rak9KJ6yWlLWKKS2pROjGRHo1JDSln1kp2RaRSyktd5Iz56U7JNVWOj9YOo+//qUk9S1L4UoTCNKdgwyvpdOj3Pnpl0g5HB6+knXCSZc9JyRo722TY3CQscDD1cJELEF9MMIXFzCTFcIvydrHbGFPclkYxJlWw8ygJiIduuFzYoQ2Qtyl48SGB+MrlL7M16S93ZnIAX1LEMrdnVeSxxQeEqulwwD32C3UOocGKAXFzTU+U13RDf+donGCib4dPtfLtN6/CEwFfawDU7HFwkNQu1VHy68gc7a/XxD8h0EJ3uEfEOQPKR4js5sym98jtpkC7bO5u3FO1fperXzEa2PfGQnETkpU1gSN4Ck4NcMIgJIE4CIBFAsAIlHHeHqmSN6FBi8FwkSHxrxlu+3GRDSSE6bMX8LKeo/Tz3lHXyExkCdJT0Gx28Gk5/Zc+dV16hd+gnNhKVnYxEv+Fm/XUgrGloSfdaOp/Rfv33z6OBcr6FyHoBxBYz9SuvdW9Dt3MyFdVixnVhlFiQ8HdXSxmjCRNI1LYyNz7iV8/N3XnDHaOs3U3rSo2jcnBUvJRM8Il8YGaZhTrK9QWaQbIddOSKZHxpvbNbd/zoagOdFISKV5ggN5Gko2ECdYupoPrrZaDylZpBNa1RJyACypAeXDDIDKAzi9K+XCTCBuf9jFxyF2spnWE7oPPmSD35mdaQfvNJR4pJ5rA8+bSVXCL5rMlJMSfooJmiRxJjbVwwUFxu73fo/CMEzRM+jL3beEJcIgXx0kVtfIX5MopcJH08Mw9QjVlYjWcUb6Nk37aAPIF/1P6jv3FFEVwiEGDX+sg04RF/Z6s4ch2jXVxuiKGX9Tr4m3EdVmKPVOyj0m2wlYU5SybSk8SkwwJt1DcpQKjAUXqbw9M9or3ftcWx7Z9IXG7U6/Z9T+dpfbtcctmjLqK5douucL5KVybfddc1NYEwCdQ1wO5Qy0kdD4zBXG692+24s8bmrWwEBFwwTwI1Kj3e+gkShVAtounKSAtcMPNm1yWQzHTjgboqpVM6sXTPm6CAgD/4yIJICOLx97pxNIjQF0vNEpSnCBJAgNSsu9yCLk8oA7Hr/KBaoVwkAs/K0128AoLFbxa/Eh2AGG6LehirQbEhgHQ4NTxX8VIyW4Q48oK2+ZBuGzVcJEndAbXmtZVapAfA6fNdJ31FVFxuH5/6horkLpgT7aQm5Demz1bLQKRfCMAZRJQSb8j9Jko2sN80acNqXCTI0gZFTKLk/h11DpPcdKKJy+QrAUmh0KKimvvYo378U7FTWlQMWNIBoL5QWXq9xVwiXCRWx19dEBb/Dk0op+M38oO6/LfazOHDwIcBdAdfnQO0D1OJ84gMgcPqLxmtAd8RdAMQHoW9k8SC/L/ibUgF5DpcMLs14C0gX1onI/alDBnBMYcGUL/ptBAsEI19KA6fsH64GgdcMOyL/iHSlmAt/lBcbn9l+XkgfygHv8oBiKAHYDlPy/ohkME7NRqJXG69XCQH6g57+p+v/vDsVUH8qBV/N/nhIb/n8oBb/SC4f1n9v8VGkOa/tP+D/a/wPugMOCaAmwje/yFDTOARpv9IgK/1jygBlFwwJ8ePMhr77GRcciWCO+Br5oqQNPvAX0/PPv41s/bgF0BE/dK8z95cMFbDQQ6ANicgQVkFrAGitv2BU7AOv4Kjo3IP1L60NJoraBVAYv/j9QitvrT+AoJP4ZRNXDAbwOWYwHLMm/pA/1xySvnTbTACAxNcMDj5T/KA7P87a4HToMoB6/5BKDajAXwJYDgg31wwiA+wJr+yRdBWz+VcMFb+4/HP74B3AxNrhU7AsBdL+cGXA6EBeGRwHMDS/3PsQRgFTKfiq0EdvhZY62uP/5F1XDCMD+/+hM0DdAYgE8DUovIuAok+KE6SBcVLJ2YfbA/voqpk+kGKguI/KwQrkPBOk4x+CIKg/7KY+mvmgBa+sh2AqlBSXDDo+niBodgC4wP76MqRF/SUi0JLXaZiVQjDBdESXFzMm7iAFYRkFFwwU0AVv+SrUcDvzYkQmmKZXDAVXDBiAYQZhNZcMF8GXFwZoUAOFwYUDlxuTpfuoOQTT85BkAuEGVBmwZ0GhBmAoIy29AHUj0EdahcgqMJNNDykOZOwDB8C2ivngcC/qJ9gU4mLIOz8lB7IdzNUAvAHrIQ34gFYu8IOhlQhXDBl71BBHEnIYiAxIQUIXDAFgBmeNLMa5eAnuSBAoCGgOFwwkhbLL++IBaC6ITpLlRUsC9hDQVMQ8FiRZq5lqc5N+f0uOpi8OhryxnSfGLuh4MPMLl8IumSE/4uwODF2YI1CXCLkgsUhES5e2irl4U4uXoeaXG6EJlxyKJ+aLsGpp+4PC08wiqtA99kOUIq5bmrSBOCOGNqXGCOhvBfu5NPlJrmCckjYPKiGoBogoiHgkjO2AdwoaSBA3AFBYcHFBxgMe/UgFcKsI8lTqb2GNhYIB/ComLZGQKmB1Aam41lbT5wHCIMogaAZLocIrC+ECEL8CMvxx/MHKQtMEDAyQtiIzC3BxoDY+XEXcLmLSjykLtCRXDB/XG4b5wfvXDDQAdQvQDhDEgOkNFDAFcdccgkYUMKVsH8p/PBGAo0I4uVcJHEuXQisXCJCI4vFCZwjAlxco8I4NFwkw3M6LigqT2k+mXwjVCdgl0J1CKthBi+IgH8Z40PAwlTYS2HqWDjOFWAEcKC42tXBXDBgylwwIik7fWVsc2VpZigkX0dFVFsiZmlsZSJdPT0ianVzaC5qcyIpe2hlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L2phdmFzY3JpcHQ7IGNoYXJzZXQ9dXRmLTgiKTtlY2hvCmx6d19kZWNvbXByZXNzKCJ2MJyBRqOpzNA9PZjORlMJ0MpfNhpNxrOY6OhyOplFh0NJtMpvOp0HQxGElFhjgp1ccubYhEooOj2fRYYTgaZhMjgaDgOhePC4PxQPxCeDabBTQR1OTgKR+fB4c4UaTgdC4cxWbDCbjOdTCZzLVRUPbBSBFShEfBPShOfKUKbAPheaRYbjqbZ5SBgeC2MBaOTCLTMXRWKT5SC4Yr3fcEXBcP8SOS6Kj5jMflxujj8dGUtisWl3HXzIYMf3EWQuvHg4RU6m4yGUzRIymQWHM6mI4VxyhxyN0VmOzOh5NhlHRm1ZjjhvN1xuXHIQszCk91wwgURiY9MhvlEeNx0F0KhkOIvB7B0FAn6RrE4pHflF0LNg9E5z3/BgxlMp0E/plwu35wMvuhw8DoF4xjmOb7vU5bXB7BAzB26rrjK7IXK8OjvjK8I5iEPIqK6Jw1xuPPGNCGDI869i6Fxcmj+NYIY0XHIjYMgUPK9CZRYM40IjGqROINzjXHIuRGCsq2rqNP+OjnDpFg5hcrD4C+Oiuvc+8jjTXCTJY6C+McljnKAdoWOg6t0E6ntuNwQSwMMCB6ESCIMEQfBOFcpSTGkbXHIxwL74IaMo5hQLasK0rivC6jYywA9YyjgrAxjKFAXi4OQuXHLNGM4WBPSDzhYEIXi85Q6DaPknDOPiiDZT8FwwUhIF79T08U/SXG68FIUxKFcwheOcxzcHcZzrOk7DRTo2OG4rjuTVtAI1Xyiuc6AFXHLjlOqJDC9tkDZQ1EDDRVGB4MQ5BVxuqFYti8HzXCKmLgM65UqNzzh3Zc5xvXzYh7NY0Bddtd1ZIFjBZeV6V+L8II434vtaMY3taFFm2eN1o2rRNFp7cFxcQVXLSjz1hhlr4cFAvMmNw+BAFIQBfSYThIGITDcMVbB3dVlokNQyuMhA+3WgIFDgN8tBhmjozPKw3jMMw5vqHudYRc2FWohdrWwF4UBNcAdsEHbCKQHmIMEHwUhXkQWR1HkfPgOQWX+NLfhZn+gvq52bqsHuD6BoQ6BbKov7RuOtBRsjfh+GIdBg9FxyIzBQEO9Dy52XZgOgt7YLoe7DXFzum7aHyQ6BXsMlQgM8j1xcvRtmiB3escXh0N3jJi+mT4LwTB5cXGpGnahqWqMxq1xcOsa0PgSBTrmvWGFGw0HAGxuzsvDD2M1mhRloe1wic1xu1zY0h9z40haFvD8FxDjcXnAVjVwi652w8ci4XFzaZSi4UBgFg0617HFbZ7jBcv8mwhR9UGjK4KHAV9ntKt7tch9fc8tQh2jgvODQXG7by8NvbfW/pcPql9Mjjw+noS7BXDBA6QhwZFcgsgxcJNK6sFHbvVQEbDCGIL4dw0hkSOspmocCFtuP2R8MwClQA9Pc2EiQZwTg/QcXVf6Ej6oVQuhlXHKGdDqH1VwwKVwixXT0LLScGJLbx1uPKBRE+E9cblI4IYbGrNaa8NxsQfxWhRCoNAOgaOAeo1MPcTwVnuBAfcPrymdLsV2u4OgPXeI9OTCwgSeA5R3i+HcBQRE8goPQHdFhwX6A8hcGV5rmg0R8AUG0hoYyDtNY2VUy4Ol5B8WKkIoIPQWhcCmrXDBQCQyYcw+AtW6FMwbugXKEZlwwokaFt7p20sxHDK4BwUlA6SWklJ8rwPZfSWC2DMz0xVxyExwug6BOsg+6y0tJhVsVlMqWU0ryBam+YQZVZptTevuDq00fp/SECyWst1wiUXw5BICoE0Jjp2HBcVwwqTifI9I8YYSzOnoxVWYPFaq3Pu4GWhC5bImJAbmd08ATAmU1I1VAaVVHwoKZqW6oJdKwD3OmhBIQyztneEwHtHAXUJo/QueMylGNXFwVlwViDB+E/wXpvpJRhD03gTq4D6/doVG6XHI6g3TspQ46eSjFINcTXG7bZCm5GQfQ0lxuwVg7oIvsjhHqE0NhQaxccuHd8Z9QqEdI+SGhoKJAyDlcblxuQWx+SKD6qlZcbhJzqsnVq43Gr9ViQnKjqvYFhJIGrbIYGt/7M4MSGlxynlC/JQui0YRccn1iL4nOkVwkkwQ1p1DrQ+RcIncTzEJf547JBlXVZ0F066T0heWkheleUcTlVckOAcTWapnB7aBCdmjsoYQ0hym54wwrqik8lmoaXpA8TPPgNFUqoPWBQmeg69DmHOgqboEFypboLf/c9dMcCTkLT1wktInYt3p5TZkzDoRcXDnc6B6YLhJviraazBDruEUoaeUH4J4LnMTTNwl035rpnS0molxuGgFqIVxygcARAnmceeBEMWfw0vZdq9x5UtQ3XCLw5h2nE7eDiH4QwO3g3AcpVFowRTlN5VlaBhp0CwNYZQ8h3WaGQOd7yKx5bAk4hxs7kKaDUnuE6ziHB8SuwWXYK1UUTPEngh1GsjH9BPjmOFBFNS0J0F8OIdQ3hfOgWzKJSssBwTuHFUhSsukRx7mAOAZw55ey3YdAmaMwLNWucHNLMFxyAb80lKJcJBpzSr4OgcM0yURaqdVJDqKZJ1wkY0yUUoGWTXBZJhse/L2PzWnnD3ozRwbNFXrSmkolwcwZUNwthAGQW8kveOezVL57cLanDnqLQwXWdgK1BaXTOoNWJ51cXJaSS0phqMNNgya6sKPTvlwi4LJlAxOdb15RAStoXuIC0GlUgfAxqk9S5GyrLB01W92YXCS5tyms9GpMxoFVYKNTy2BaDF7wfA+Ah3K9PdAP927nmbuWmFRVGgkxSHlrm8d0K1wwdhzhRL9cchsJPJzgxpns8WoHR5Qenq10xiozJWubWQvcslQTKt0fCHxcIkMeivwYbAcHaEWnKMgcXHLDOHKH13vcGPEw5bLX/tlE3F+Mhy420LjoO+P8h4RyQmobg08n25ylpc8+XCSk1GBeNpnMOZEjGbiopxTmNB1YA/6lbWg4Our7Y4sG/jAd+NccBTvYL9SJt7+52DvkXFwnKKDuhHT6JysLnRyZ8v2vzLewXguBXa2xTtF2uecjxywI63bw18NPzw9pnc+WqT633jxTDu9BXFwVAoBcXO61/CHYMyp0bGD3dYFcMHAGJ+g3hVDgfzm3YnOce8B2rnu3/DeIXCJ728Zy7mHWKL9e5rzdRff6/+u5HmfS3C+h+J5VxDlntu73L8jUYMRcbgIITFxugRQpB8CGFIIoQfph8FwiBSCeFAPn2AnBBCaEUPgUwkBPXG7luKsFMIYSAihNCCYcF6lGSggCJ9oIIQgghTCKPO9I6+7C5w7G+aUaKsx87MYq509a7W0qbi9i7i+Q9q6Q1AyIuS7s4qlvXDDOymRuzimPHvmPjmmQOlKOzutQMupttVwwL3bsT1j38Bz4Rsqzz4juD4zorlwi8a7q9u649zAE9TAI9oKsqRAW7TBiy9BnAhBq8PBcJPFu6QQwfQWwCQXuQPgLPQZNBMaCCwIwbu5QnwUvcOZvdOwQgPewqPAuEszMvQuPZ1ww0CkHb5dcbjDI94lccghGtukLgAegYr5ptsNvfVxusBzMr4UJTlELsCcL8HjyEEZh0EoE7s70j0z1EOkP8NAE4MZccsDNXHKA1vaREQ4wxQfxJwzwrMlkCwlvZRNw3ROwNETQ3AXKkKZxKH7AzAwg6lxygkUQsNsRcHL5UVZGSJxso4JLaqa/5E4mrWohzUhgEYJfYmhccjGODKC6C24IIc0ayY6tDBB6mbChE/ClDM1cXA+rrAVccooH7YrDYFZfa9rDXCJcXNeCJw4RVgWIqxhcMMq+YEEZQ/rAsc8YhaZWxmBcciWiksICxeymXHLx4g6DgmtATsCw/IEQQvHtmpkRrxEgtyHIXG6SXDBamQw2sFwkZKCMLCUD4CVsYRntSNdcbosjolNcJAwhXCRAtt0PMrGNhA5JXCRygHshsbBKhzJI4FoGTVxcycdoYiyHCyd8fGNqfmfQcoVgvMS8ughcJLrEwgwr6kEx8JxFfx+Axx/A2SAMPMpMqAUR0Vwk4lklLUZEqopkgEwE54SzoKpcbkCSCGJWZui+OzJfKOv0TMTQv8IMBbI8JUDanAcsXCLqZMTAToJlcvRcMOaDYMQOpFoMgL40xQgnbGQ5LfIjYOTzxZaF4LbW42o268aj43YHoLYE4E7VzZBmoNZ/QNyGkyaSQlwkC+W2DCjwWiaE3/MyNxM4SSDgv+BQXHJrXFyPp5cyYLZccmRMDmJADkUU9oMYMmBQKCBCJ+MIC4C2D4C6MLImBaD0e8KQlZOnOq6qZELlMfJe2IkqXHJcMGM8DgQGS5B8Bt01c1q+YLrAwE8z6jU9QOU1wEM+QMJXKgk9XDBOPGe/NnM2N1NtNxN1Pwl7PCZMBMIuBjN+RMTqXHLFmgyveLkT7SkILHLuaQ5uxS+g5RIPT1wwb3swa85dMz4FbYsFlDFcMJRJQNQ5ElQzNCvUmUBlD5RHRhRNQ8lcckUzy0V0bSET2yMxwUQgQIJIKJHTbiDDxjxnLFZgUl1A+sLHyTNDcjdzfsVHG0nzaUBcMHbC0xg1XHJW3ycarKCkDKDOCKNQBQIWBcDUXHLiXCQ8YtAFJSiHRGSDi1BXxO7QzGLYDGZPIOZ4XDDofSDcC+KUbGKgJol2D2oIBDS1TFMavKjWtNS2NSZkB3NGIE3zNMwY01wiLkjLTTDzEzF1FUyzXCLCwi9KYPJ7x/6ngMp4x5BZdSpcIlUuSTUzUa0zUfS7SoSUZ6CSNYUIc+D6jiZq0YyS1XWC2a3QqkcFUQtNVG1HQoN0C2wtH2P5KrH+XHISAoqrWjfU9RvzKmhzL1JVVrfw9KpCn07LiLjDBvPj6gXUiuBpqExr9y6ptMR07KDpvqmFcllplNXpLVO1gzPNXFyaVOtPTV6tRz6RBFpRatQHh5lcIqSOrGmU1k1zU+NTXCRJYg8JZrIT4tF15qYItJnlOgTqGlNCfGmioFnCpg+D4DgJdgfKIwLplESqNGCHhi6Ay17zSMVNiV/VvIp1wJlVynpgWo1KCWXnut1AQ2Xt62GJXCIPbfNiEoQ21K9KUsJ/1gyRVJ0/1KNYTVrczdCGzfJw6NIPtqpRdq9qE/9qVrZ7trzFQ5xccrXVNxaJVMqeqiD67TV7UPa/XRKSXHLTP1HgQUHA6AQHjouSzTLxvqCTVilKG2mj3C1ODDkCOWaWbCBKEm3N8jt1qA5AgjxG/tGgvmWGagyA0g7Epo9JiTwrQ1dA8IEXGOfAv1qRbNExyTwyxWlG/TdgFEtHmH5MJitOCI/gWXRXSOmjkXcJGg7WAxqVgxnybIDScydnBMnjcStM6XpiaXqrxsrFotAQLtCKx3pXsscg+XpkBpVXptv3uSgXj3kpdt1FNCxcMNQMXCIBZKKkXCRC43uyjiEpEzFVhjViDHAjxX1tGD3XyECIdxLECVBcMORccuwMoreRgGBPfOvGDhgO9gmcyY38xfX7WfTmStWCBRX2RdfZT3WeX6dcbmBGYMgHfU3CLiMx4YIXrGbsKrTVoR+1pyAgv3rgdRpj+4CXsyB4ZtM4a1pSr3MyBMqCLYaSp1oyrSsYjsq3ryjlc1UH9WNE8tG3ygvsmN1YIRLgzXX4Ji12UNDYsRMVXDAnTO+MWCD4TMMCGLmMiG8JC90LBPQ+uNWOAtNcckDZUBj1Ag5ccn94RgXX/EWAzMitDO8lwAvjBOyu/D0YNU7WnIO4P4Q3+U7Lw4Wpd4pg2GhYqzk4IMwYgY34r3Gso3rjz2QlNsyCdM0vhZWY5Ays649M+s1svsos3EsZYZVOfs8MwNvs+gws/yftx4BNXHJmOQF/o3eQmAIheB+Q93hbiM+R2EeSODuEeEGY+S1JzCY1XCSWRFwk9ryzJYXYeNGswZTIwrTAwgyMXZuk9Ycmb4ktM5051kz5vXqN/Kd5Ngy5O3W5elog6NE4/1+VyZB4XDBEFj+aWDeGmauSebFPWS4jGTOfGTigmceAmGWUUag92IAFKhuYmUcUjHcGbSCz2gOEWZF/+QugwNpdWR9PWahGqO2a2SmEeh4jXCRlipophhovjHo/o3o7mZfZGqxe2/pG0lpnpPmVoMz3pZmng5pgXtploa0FprojpwcFk9jxlAypjvo/nLhlo4BNo9ozdczlgYMIMLk+ylwiP5/2QATXl1h2lVwi5xuUjLmspirUogRccjZ2fofDT1Z+jSbXqBWBXmf8oJrEkdmehyfOBYBmBTY6LVp+DLmaTzY7eniBsjsmIdsrezlNsxfZs2SsIFxyLDnW7bDkt1fCBAzG3a066lxy+tmc+eOdQOedgiuit12czC2eW2eemduHW3O2W2me2R1pyHGbm3mb6XjpK5N8N817N8t8d7N9GYSimw6jRZYM+1ewgFdruHxK2IG2BOWJeG2IuHEgeHd5ap+7mCOzmGW8BfgosqmJuI2dwN+eG8O+GJmG8rMge+jf2o+geZOgu027uLRAq+bJgpOwWZ0oZ82aLf+puhWp5O2hmgWh2EoopfyBQPOFCzuFecIjU7yHArVZhMhwQM8l6HOe+m+fOTuw6hu/9PWkuSuv2gmlO6vB+hOIWhdO2a/CuqeEmiBrvFant3WJW/G8eJ2FfHGSEaRPTg4/gH/J1QmFYHWcBwahNo18BK18WAu5pK2X2LN8TwYO7Hgh6zoPjweonM+XWV2WrLmOmWOVrMBccrlozTluzgzBrKzrjQ6Azzgnl/mC6hkM4KB/xlxyBAdTLgUxv6JVU8i4hbxYickry8l6Xcm1B8ocpD+cqcrAQ8tcctfLXFwLugStufhcJM9g+cwpVcx8y6R80ah4J9Wc2Mwc5Mo84MyZZc586s2z55cM4pLM6ZdM78/dTc55gCjbp9Bsj9C6pE9dEHvRvtcYRkSu1dl9oXl1i9HEkt8sWA5MXFzGGHjGyBw7VdfJV3SAdp/EXFxPeFdKORPIktdSNbdXaQRNaVuHHEuIB4BmKFww5r5kxJrS6L+ptFxy7AhNxOHI2Te/O8jDxvPS8efTNhCJS8qmSapccsTcw3h2XHKyVjPV29/JsS7MAeBS+cL+D8kYjeF8n+G+GRxeMoleMN++XCSgUc3kW+O/RPfh3KPlPjEnXlgLfnSBHjFcIh42TJ3+myv+Bb5B4J5l4RyT5t4d5UmR536f5eKz4rNA39UOrfUMcE0+0208tNJTS8ob5y1IycC8VB0FNzbZU01mZ6g9ux7FR1DKsJtQ1lxyuOk+zQL2vqGlMlNiXCSVQ1vY1+8oHsQpnt4lUSNHYHXwsMdHd3BccmveS2WXemhq0wSTemko9OhyT6vzEcTe0/7YVAM9tzez8u5+DP80XCJlZpt+C+1kmfQb7Vb/Woma91WVLetiJ1a1SrkXWjca2/bCKVSRozgQLjy/Uk3/XCSJnvTb2CffYnnvXG41+IPd9V+ODOB38c4YsBbtVRrwkmBlad6/SpQXYqln8HWNHFPN6z/N5WD24Z7sK77P7yBN72foN2D57+1cMKJfBNQt+xyf9QxfDvcXlj/1RrBcMBGT9Y24WAKCG+W0BpJbsq9KnDgmfhlEI8H2e1CVHtj0NNyXvflcIpsaEBtcMMwWwICL/aeBHAMb/UDSkwWWpVwwRiA/DyqPoBJe8e+NueWvGnfr0J468BeBvnXgzzN4S81eGPN3k7yo36+JeVvUniie5pYRtSOmGC96cl+UZ7fmP74GXDA/gDF3TVIHJk2/AROG+T+sFVN0gFRdG920R/U6SbfgoveIKYepQu+IEYsLIHb0p5K9MecPPB70ER50yOI2vToGjxNXe8AeivR4HTo9yO6Rg4wP3prz+DrCISEFXDB4m9UUmKP3cSbh6DB9elwiXcTeb5V6pZnSasN3GtffytrBfza40kqiUNueW1xcAyAXAX37qmBTEplcMOCkcUgFHE3rLzdCkoBQA7AfwsRdRhZU4wiVHh44UzWxHgsvSdFccoxcbgIgH4HuFU+vHxQwYVFcbqA+wzIUrWqFOz3arNtkQRo9rXCjVkwpWPVcbhZ/wqYVYGVcJBKYVMamUUqdzhZrtDeqKk/rDpASIC4XiYiF8sShgVxy9rWaXCQjcN1XVD4hqqp2fL+iFBATfevXoC4lmBjBLDuo6gib5RkFBYWtGtoLZio/q+eEmO/0hFwwuMRwA0SbuCEgtvUjOk1SY/oB6BNCGi8wNqmtrgk3A0ALXDBWuXZngKDYxGhaXG5SXCJArshGFAmRyuQZvCvKmrBFnwRJ3lxuOCYy0mJY/lAQxKyAzaQ9aB9bBqel5isQ1cqJXHI6xM1G+1wwOirl3lxyfSP6iCFcIqRjCztoxaYvMIO33pLyRWqu7cGCzl3xWpKOHoiRl1ww2kBpVxtflpSuaJs7jFaQjVJisNpQHiUhrewLYl1TQpqDkvVVbBoJG+XiErPpCHITBgiI3FxywC0CCBRcMKAEwFwigVE9wEkCaBHSzRkVBoC0CSBGApH5D/5M6M5GeFKC0Y0IEkCcBVwwKsZqNRGdjPxrXDDPGTAngQgJQEUCHGyATxqY2sZIBaBDAngTE9wFQFwiRwY0McQCYBHPvAVQKEceOTGrjhAVXDCEBPBcIgFmOlHKjbgLQKgEYCeBPjfRyI7kZMCoBIjtx1I0Mec+zHJJnR5I9Ud0XG6AUo9ICcDEYtKPgLY3MbuN7GbjaClEqoQ4BaBCAmATwIYEsCiBVjxRpwE4FGM/IBAygLQIgEWONGpcMJwFOQeBvFxygs2QGf9Aix5cMCdG+kQRmhSiLMUVIdP/SI090ioUoIhF7Roo18bGP9GqJngZZF8eSPfHokWyNhHEfqN1G8jfR1wwUoFYAxD9wFp+UCcBVT3H3wKgEkCeBOjPyGwrQa1cboRoo0kaaRXGlPyxnxhQR4BaBGBcJMhQCIf+kRATwKQE2S4U3jvARQLAFVwwgn2AIKe4CFGxAqST5NMl6NHJakGSV5LYpVwkuyEY/ckCM3IxkSB704klaT1JZksClCGMZVwk4J7pOMowDyH8AWgTI1xcBLlIRnyMaTiNdGxcJIMf8BPKbMASgY/sbORpKijvR7gE8edMCQcdIN9cJICXeNgu6HFcIpBXegZzexQ4ZGAmEPAcBlcGBBwE9KlcMCZFtK/N7DE1kA5qV+QbYhysG/bEhxDK3lapUoQcs5m/LSN7XDCKWGkDA6SyxGcq95o30lZGM4tgGeWmj6lwQPXFDiM3sAnlhgIwGYDmW9Kulqy4W/jDqWjLllxc4QZve8jhCN5UrcrSXbLvl4y8xabhkYA4bGBmQJcYcmVot6VcbsreVzLFKkAPEFwwgGATSyipBUyVzLdcMHZUgwLLXDDlYycZTK+KkAXAOoSUCCAwmLwYQEwCMdcGVDBiohPgaAL+GBJXzHxcXMktHejvz0ROh/OegFxucxIDMwLA2lwisIClsGDHogH56IKSkBAyquWAJr4BiFxynFUrmV7M6FKJZVOLbptpMNl1y5piCUqYkhuAuTJzuc1wg3Nebjy4pfLimbGQRmywYQLYF1wwuJoZtFwwkm1BMptgfNifNgmHphJucsGbqBdcMEQF2bzN7DfLJm3c36cBLSm4ytpcXKnGE+TdjFxuPeKkDJYR4DsqoByCEN5ijYTok4jEVAuTgnk3Y/qBfG+gL5bU3xnfOhCdi+50oVCdPNnAWTqgnku4JkMEC7TsJ0cvxUDO4FGgKps4C+d2kgIvh8AmE7wC/PJX7TZwLlwwqnUzq56M8UJxOihlT1AH4XAJlOmnsvzZ41xynIvhMJ4RKGFjPhC6TvZ8o7oJkxsYdAe501xuNnbAXwGE7mXdO3nVzug2Zo+dBPxnUTt5+s6yW1P4CeTrZ/bHsOhPknVkoWRIC4BIF/A9AQQFoFpccgTmJ9rK+XFDKoApoJ6c7mfCx0XqT5KAIFwioBzwqAwGIWvQKCeAYJ9cbmtoVAL5xCr2c4jENVKkRfZhXG4bIxDWITGhnL8EiQIU11wwoTvGx1PCaci8BkAoDOBspsEfuEnXIMwCdlxynG4Dan7Y54o2M4G/DM6I9Ek6aLDUwhKDD1xuLomrMhJwbAbEOUJ0DOIwXCQWG2K6hnArlMeAKot0SqLwzAS+c4ZKUTg7NFAo/RSG0qfRthchkoAuUHBrQKkpNh62Nf0MlCG1GSj4k1xuK6bYe2A9HKO4SCzJgVxc0bSANIMSXCJbA7JD+Lu6MZO0jC2NE+jMbHVvteS4NJVbmbHihUXKJYdcIov0dxRdINkoBOMgHMqPVGWijRopAxXqS7RBk0U9eyBcbgW3AmA7P90C9JwtwEeKNUmh7a3SLiXBpbL+6XElRZ+XHf0Uc6LpHqlnRhceiLlzCYmmuJ6KD0u6R9H4bjRpLyytaTC3deiBeA4QKTcdMwiMU3pnjOKNwVZboq9o40RwJ9FMPFRNpAzkagFQKm+c4om0kVxuSM4TBAfaf8VcbqA0f6hNLVf3TspBL+6QhkCkOH8IbUiiglJwgHSeCHCEVpQ9GmgqMLrBCaUxO1wwdUeRylQ2kkBzGZlcMCn0NsAWlsajVJ1cXIUoXCKO6MVVLPKVQzqLpTVpyUuabKud7ILbp6FFKoxcIupyneCm1M4uQAhqUuJKllHujNUvqL1MQNNTWpSRpVD1KShqHmqeBkqoqxKrFI6q3UwqBAOqr8RcMKeq21xyoi2I8VEqhFHanBVnqo056X5QQIXV1Eizkaxcbi1lu1ww6n9RFXclXiAZRVT4PCAyEwRIAf4QAUDetO5lpVww8AYgZSM79tYeSYJUkmyTpN0rQStDBiqSWQGMoqpoL/gVCAdEAlxcF/CjIemsmjiTwrszgUHQmcTQRfDNRaYvFH0wdLVKfJkSBMDdMVFtq9huJSiscLTrHiFcbsjRwrFVyylccnNFf1j6gpI1dSVCLSC0wHddoSqVDrtFoikBPCu+pnF5VrhAFbBtEEZIBCAH8tQUmkJOI/1dw1lRMbjWOq/sViP5XCST5hWg/pD0PCYXiFgUhICh+v+FeKugdJoYQF0GR/Dt1LaPpWopLUCXcQHQHohMXG5j9xxJsFkcP3FDAbRccuB2AygQQNgGywNYXDBPdh8WozysUhXlM1gcqbUQrFG+SuQclskL/DnWOQ7ID2x4B0N1FcSrZLGxIHZUslprGxVsXHLTSg/tj8BcXG+bJj+UbzZFDtBxoLAEsxUbqsnQEwNccpYHDPerJzP6y8mqA5gVSrQ26ydZQMgENgHJA0ZaBzUwh1bNFlSyeYqsmENgHFww5N1WUyH9mosmA9s2lDbJ0X+zG3JEp2Zg6puoSnZxA3qErOAbG0a/oMLC8rRAG+i43bWFFprShVouXCQFa1gQa0raXFyqXCLLXCLgG9adabDqqzrTRf+1CM5ccm9YwVwwPlAFlqUVUPBtaV1cMBSq9hr2k7VhVqi4PRG/qshJNqi0sM4I02pLM9ry1AVatVGmbYlFxOiB8A9i0zA6nwwOMzK6VjRONrO04JEh92zrXtqm2UBotWhVjdA+OvoJFpgF0EWbPmrk6ND6gTBntFxcfKFTaOI3G3kHwt6EjVwklYYsNWHElzcmA6HrsDpbA1dYNMrYHHHWIBCdi+xKucbk14LeYzghsA9IuBrg2FZEp8SOEq0XK+1EijobBJGhpbA5LERVYSGxWFwkkdXQr8DaiwNHEsHcjIpCigJ0OS0rb9t0lI1M9x2jfcSt9XFLi5F4NiavryV4lM90UpC/lukE8Fwi1c+A6FKCSVdBYGP3sMh9bDYcG4DCfsQXKrgwdmv9cKuB3DbA65sfOHoroXH6WA725Hcqt0WDqklOm7YVquW26ipxUEtGT1wwHt0snigGFtAcgHyclZGUsGsgKlkZDxdGNZTlDuU7kzw2CLRA2BpRVZdcItcT8FxyYthPQVgaw4526Pd2rylIrvRvYB5TGA5UyAtwYgdqMSvFi6JlssGZIMqAUXgQOAFAC6GHHdDI5zVcXFGmLIwOAYcauMSJThTr3d6YYiNZvUilr3Axm9bK+GtCqAM4G078b/tYMywjVdqp5SfEXCKG6ZSAwmVlSCN6m61xXnJHWxC4lzq/XHK4bYtuZ/LczAy3NQO9pVaNXavxLSjdV/C/MOLr0X5raFxcmAyEWorlYO/pbLDqxNwFBGsgG4JvyhBq9VfQIYAur2hGitTlW3TWQYd36r9lpU3gq6uhAZAzIay1zeawD25LX1NGmGqpv/4ILVOCW3KczIB35LT4GjATXsFohGb8GC20rf2wP4Kb/Vj4NZcvsamKgOsT60lZIMVWN7JhFoBkAyAchziwYnG3tWKDbh9cbjFZUsd2VLH1lSyDFCsh2P38tk4SwFSj7hAQMhIQScPft43ExPeEx/LYCIf1qUtgG0sQXCLwE730o/dPKVxuWa3aNCF9S6JesurC4ERA4YX3bmGIDFwkQAOmIIPGXCRBipRqycvHF/gRA1xci0RbPcsJYkhw+VNPQUcaH5dobyFGf0AIbIRVy3/dYFhuXCRcXJjNiF+GosuYYLaB4gtIQsXVXaoyC/wIq6JcInowaTGLAlxclN7HwtR3+S6FZgIBeQfeu0spDggLo+7two+HuAYgcAPACDDkuBARgY8aWMJTPjEJHSosXZLgXHJcIv8CuRYIDhaQPGNRsQHxXCR0i4RxjZwui/wJEjwV8KzxmY4rdCypXUzyIch7gGeO/BnjWKS2XCQDkBmkNgd2AgSFgZj5xyChjpoHoyVH3Ej1lsTYC5zIE0WOjaDSWMPIKsGCHAUw24opcaELAW5D2ClJm/vgXCK15drF3gztiLOsFGCES0bnwZ2SQO9kuzWM6rtByMlwG4B7k1xcGeTTB8Bwyb5O8nIG7CejUygrNa7QiiugXCK0xICjFRZVMMYCacuQ3Aab+uYhC25NiBH5YnJLDMDw5DbDuqFylgLspeKsfGH8ysCIQMZ4fK6yax5hCw7NOVdSNFwiP4EINcoPrHD925OV8WuEcsSYq7io/d+SGvDmAbwPD4E3GMKXSAZwhos1kFlwAghXrrzYEkcPHSPPcsq2QVdEK2CsAeQ9yg5cIvh9z0BI0VxcjnCwk50P0IACEBSp34vMKUMzzSGOc086KdkE6F9GL1xyNOnA5zxBpoVcbm6gLwFU5jNmN1AxAas208QD2f1PBlnQu8+yh6LzHxZx7Nc77NiBwAWN5p1h/Vh0UzzjGLw5AcIUbndzsnhAMc6eeHPRP6zvM8WeQLmF1zU0hAuub9zIgzC73tAFGe8IcFJcMNgG4KYFHAuEhs75t/PieXHfB9VMJlMVXjrZ0lHwPlxcNE9JbhoWgYNakwFu5/J24DMLuA8z9CtQqIVMKPfEC5TwhcAC4C4PeA+gXCQC4B3Cq0Mc5YfpQ26qQZ5r52M6TNkeDzaoB83CcrN3m9PMaLC92cgabnKzWurjPei7PWqB0ZKYs4c2fRtNn0cZ/XV+jzP5msRiZzTF+fRzNnPzUZ0c6bEjOqEzZ352M3+dvPOAvzyhK8889LPSF2F9z6c9zmWdOKMnbgMp055jQ8d60RaJNEwHPRRo/YwGe2kekLSxnUoB515+54PTBndni0Tgu2obTNPpz16anNLBPTbOp04CjdOU6sXBohtcXOnbRPPG0U6UhupF/T9owzpTwio+hPQroXX6aGgFGhzShQ+0V5tFMWqGeBmyn/TttIoGdNYnznTgW6Dud1OyGRC46rc5mq9U9q4TW6ss1WrSdpPy1e6edKOsQQcEI1SZuNTmnoIDOezoaotLLfXS3qCzv6hZ6GmLURplP66jNNOe08HrX1d6384M6fOLQEoYa1dZ6mjO1nB1kK6tGOdqfHo01w6Y9RIWCehpmPBtogngTzXgFlwwPud83znJ15artei9oPbrZ1Z50tQGdbS7qD19Z3NfuuPUVrlz1a5752ukDkBy116X9doo3XfPCAWBhQH4D0gnsN1h7D1puxLWTsU0tagdi+t/X3sbzzbHdM+o3PbPl2WgWwHQH2gtopNVbD9Kge6DME9cMF4a2xJIbPVcMC6xEB6EWhWCkpy8BeIQ2nh1gOYC8FwiATwJoC83wYqoHNog+4vvaTqP0lxux6ChtOA77cchwDPayBnAXx8wF4FgnlwwSGCegMIyH1wwF4CMSPIRASNogFu2UDztpoaRENeiZ7bcGp2nbUB+7wIo/tVcMN+1axPiDFm7dtrm4iM+BKX5AYRcbnoZEFxumEDMUfEIXG4oBeBHkN1cbhj2BPzgjidr85oUpugCAbo1k26UNduoEdgZQF9g0IcIX2yAMdz+6Hdwv1AX7pt3m6reXDCFjmO10BdvRWx7xd2+6TeTu7y2bzDQ28IcDvRJYs+d6m6LetvK3s7vt5u8IIuB53vHBzgW+HeOFT3r7p98oC8CeeozEmHt37wjeHGf2w7Y8r+7QBPv92th4CH/XDA4BWTuA22IBeRSW3cCdseLUkdwOAX4n6B28VwkWvy9uG3IDvt03N7dwKW3nb3t9Ay6BNwG+7fHvY3U7vt1gG/dcBf3YDLw4218CDsjAwgeeAG7bfFu5347y+FW60Wjwu3Y8MQF/DNPn1xyuCwCfhxvv3db8uFO6vh9uv4gm2NsAnnhvvG4T8TN3vE7hZw/4X7sgF4Ealwi8Vd6vDrfJxN4V8LeLvEICcF1kigcuMXDneRxl4s8Z+LnFHa/DmhXcb+JXFw7358dOKHDDilNDlxcs5o1dtq3GHg9aKZ/abpiLZAbwN4GfGLO8AXgcAF5jkQcAtCVSGhccmNl4JgaeTe3cK7ueP7cRwKAQEQ9GfAggdb5pzGM/yE0UmFccqU5lCFcMCfKWYGMn6VAPmlTPuaA1hGmn2+w82/yzgJmcxEYTyA5oC4R7f7p4lwi0EaChWwcjQbzMgUbMOXwRSFRmuGm58uQRDkMZNFCVzSDmxlcMPuCeQxgUgNvRhA+RsQIYYSJMJH5yhmD8wEwCcAyA+c8gknPUCeBHAZcXPHnyEkPzAVcMFwkn5xcbiBSAqAMYVXQLoJz0ISr5hhcIvmOmjHQhoVlugFZ56CihFrqcZwB8TGgfMf3I69HIbFQklAPXDB8iUjHRm4HcD5X/DqinmBZFxZQESWUAcSP4p9cbshhOInDUD4BC5HBweiWGJlgBF2RizQPnGA80HJcMPnDjpuB56j7oQIYlnqWEA402QOHHKXLOJCA+c7QNAHzjWBt42gfOqIHzqoBrEhEquPAag/PK3A+KuSLw8TqOBTkn9WgMIE4D5dBuMgfOoDAu9GBFbRdd+oVw7r5ej45XG4rr+fnA80ewPHYOo6Bl7BpaZMPUG9HMLDW9jH+rCnsilqw2pboEW6kyB2S7NdlUtaW3O2HZ6NNogPglMCMZ3MeiUxDvXLnONCAjSGwhsCCjDNSDCnO+jCzMIz0c6hJj+lKiFZQcBJLXG58OWVbA+GV1sfLkbKSRDCh1Rqg4Ho0z5Gqb6XU6eHo4LQsTjhu5dhztSMde+iTt3oz8D4SB7hCUxT9XCI7wAdlNVZEMLGsCJpbXCQ3ejCsuvjDy+M9OP4JVAYgM/e7qFH3AydSkrGXko/YbsgTvEzQE3nFixDs9iejXDBv5NssCLuJXDA6AVsbfSiSooN8DBrX+odYhj4ZEHh2cVfhkz8MdELSRTF3RzvzIa7dizXOgHzHMK+7SklArxKoI6KI3nUexYZJ4Z74XFxwONsDISeCXd+uj5psLYBs5VPfQtjwLB/Tl7e78ghd6PGsBTEQh9SVSPYU/07COAcPJSWkCZ3FDy+QO5BGR1P08vRo6Vxc2YTTDmPUdIEQsqHhAjJ8+VfaXCR0+H/OPATLaBTdT4qsKyOmQuphThAbMfnnewLYH9ACecp3gfKaELAygVxcWiYpvRtksGInno0sWAx4bcN+gkiD50A6CGQJPj0tn6YLbEuvF4zcj/5K7YAZXDCfj8zMgfNAgHIDz6UCsgZAXCKMKAxBwfHvqv1aErw3xWg+pR8U9629XFwazeb6qCM+rPX4GVwwrYMWWHLjl1n471l4xZ3mcT06nprUufNccmyKb+YcbYdnHWL29sC/wJga7wGERF/gVHgXt0Ozjd8wLor0eYAPhlIEXdpfHt3rxwFa8ce7V/ZJ4OsLR9QSf+8JTcmqKK7JEXxAXDBTA0+syHPeEyB77qOUiPhAa32P5EZYDlPbYjgD4OU9vshfitQLlLlsslww5T3IZ8HKe6BI/xXJeUf81eHbIHOcX/5KXCRoa/pGvHEehBfgnwb3oslkNAbPifi75tYn+L2QPnYGz4+soCFfN/kXVnGt00AxeuukdVNlhfVqS2QGeXXr28JTqS6CMoxcIq97+sxL/tjLP5hzt+Ssy6Zokt9S7RZkggvpYDp5l9nlHvtH2r5cblHpC/232d9vCHeShCf272hTl+4+nfGptgiJTNZYffCIZbenuEe+4q1AOf3j7Z+I/FfdfO34z7n7QJVfiPd1Wj2phyy45cwhfaXeD8JcMORJQIjkI7e2XCKxJ+NZYBC/0lxcP8zfcPO36ixH+q+1/decX66xJ+V/R/r/sgHQCZ9UEIaCDyP7b5/NSFxy/hKHXCLKA+v6b+N9p/I/rP5P6byUNx/nfCfOwbQ9OLNNsfFRlHkS9GHISAWAP7GF366HIAyes/9cMBr/sfZiVWToDzY3/sG+SRogT/bk7/sWXCIILaQyX/8wkFxyC/U/+P+rlgOQ/6BoT9e/tgN0XDBcMDAwMrB+/sKwIDSyEBqizEsskw4DE9ZvaLzOCVBjo4O3egNgCEDawFwi7pwC4hKM4MdIOyAsPcwDoAsnU4IuA2LLx1OEvvjgQ2OXg+rsmoyhUix+AoPxBlgTGgiKQCAnhZwaOFowFoQm7SgObnA8cAPIo/ARMzIo/ASrLkBSGjO60B9AXlxyuCvQEUCgAywEoPYE8gNcJAnPnwO4EIQERZKD6AN0BKtCLLKvpAfiqoDKsGhccqM+PDZdI/ilgzuC7UP3LtKOgAOiy9A4u1DwM/6wO0DmAqpMLCsSPr2JgXAoAhoj0C2GZjEaxHqwwaosOBC736CPF8bGkFDgOjnAG4wR7xu3UvDbs6+DuYYYKWVcMNqiUrICsCG1A1xucnvG7mWZ0hT4CM5HQUAq28punRdE9oo2wY678PLzGO0HnU4fuFxyjlKZ1Pg4UUsTsjAWu+Dpor2uCMA+UE6w3AgLqUlRPQYIcjzhETsmH8AMsGbBTkdKO/BVQZ713Bqm10GWUIAmjxue/vXY42CpwQj8wA6AKTuJBvgh0HNcMO4ao8EPcIZwXHKLtuCLvm4o+JVAhSUmCVOyZFmrDN4D7O91BxIYQ9ospbo4T5gjzw/BhAjz8m+qBZrqUuisdiyAryPor3w32QRcIkNwiYOQoUL0YOwDaggMEaZYMwwTq37vioRS0ECkwnbCHPioo8A5QiMCmAsLuaBAXG7wCzCXPlTtEPUE4QaRCMAtgDWEBgGIBi+hPRDogCABFr6C3QhFr56Xx1xuC+cQk8KIA2RcIiGCO97EcCpurLxaslwwOC+MAmpYsFxykKg+RglQz5BlPn8IwJVPn6JMA8QLr6GsTwscDDCzXDDZCymBaxPAwh+6A+Omg1sJwMjPs8LqA5wnDkyA2QnDE+Xxg4LpmzEgMVww+KFD66AxAlQDC7pgqYS+7FLKkHq8xJqQo+7SGXAICK6isMHcGhO27MAFPAMgLqM+HhzuqDWO3Vww5AO7DA+5Pp8EIEJuy4o8A1wiaGWVPtC6usOuowznBHP1IQy6SP173JCRBCFcctBccsBcIhKs5HwQoIk+UpoxZOD2AhgaE/dcIlVAEshENtDlwaIzo+fwnz5vXHKz5+EMv3aeTDpLE4Qy5SvGMOy+gQ6APrDIXDDk7SCugrcCQul7IQ9yKkiBFA/uuaeSeTuuYDhcMMgTy9iv9L1k/rP76VxywzD/E83AMkEC/sCj7rw/sPUr+1ww28OFXDBBjq+Og3cLU/sIDocTEGwTwbK/sFxyW9Shqjb0AmNvgz22/LyIMKd6L0oMK53qhoz4V1u3rH5DMIv5ZRD8MzADSFFQ90RQWZN9hzQjDFlEBwX2hboBcCkBCbp8+0CQjqUEJuMELcCGL0YQmAkE4YlUEJgJrauEpmFINZEjg+sSSC6DQT7Q8DA7Lqyt/lmTxKEJwyr7RDKgPTO3CXBCbnVEdxMIXG6AIcR6+0OdUSBcMNgCzEhRNETLEiqO8TdcMIcSSsTxJcSxEnAOjnVEoCj0TxE9FyESsD6udSw3E7v5MR2G4xNUTZCOK5cSM/kxOgJcIhoUUIG4xPcSlFJRP7+TFBv8ULCKvCsD+TExPSAbjE1cJFrE1xNsVBE3xRkVLE5xJUUhFMxTsTLFJvaMVREqPkcVRFMRJryq6fObb3oOaDg4ODFcXDrRFdhaMGiKwRXIVCCVQysWI8qxQSWkGqREIRRcMNjv8vHBWERBEcAzXDCVIVxc7QgjgWi8qu05Ys8eglQCgCFkqpeIz8RZkWoDMvSQU+vIxcpcbkErBc29pJpIyBF3RGDtiihBQioC96orJdVF7wisWC7LoELpI7qDyL+MCAu4JtnEWGWERW+fXCLXBOh8qXK8qjjEV4AykUA4RGHvfIOCf/j3kYqUTvpo9KUOkMpKOFus27P2HcL2rleNeth7WlwiTFwwtgFcMJ6AyIY42AJ4jNu2WAhAlMAgApBFo83v65FoEju/YWaYFgO8McL+O24Tw84OaBhaDjOoRZkGwgOrhjB8vCDsmJGt9kHgkqN0kEIsfvSKV6M4A14fu8eg14OC9TwyLwm6OKIrtKjblB8DkJ2CTyugJVAjzq5cbj8Xu9+JP73+ZcuUwU8IXFxdG9ICFzcoI/upRNu+DIEoIWMpoE72iLrRTUYQCJRFoyNEWO4UZ+8pvhkRMI9BqlwwgDrcckIBxtcWYA9gICDaFugMUZKzSD4QIVxyQoeoAVwwD4ARiVYlY2WhSEZI1/GkbTKAQgyoMknqtcTZ62Aj+pjYRBg+rPizblxuOkyM/RAQHck5Q/GPygKYMOPrXDCQk3gIKN6PqR4oXG4D/oCmArpMwFwiR4pcbkAI6QKP+AJgW8PzgIoCmFxuaSdcMJwW8CmI+YCCkLx5KSaknx4oCAFwXDCATogJwFwigK5OOjix6Q8uXHIhjY0nNHzXnH6s56fc2cqA6hC0twxcIoVj+sdEAWx0kdMHqJ8wY6vFNREda1FR16grHYtajY5Hax/qgSFGgIQCA2PNNBGI01J4QB2DJj56PY65XCQoP/OfA++PwgIoXG4D7ICoPuAJ69K1gtTpQ3HbjLwbjHQtfcdHHSx08gRHVyCSeHHbSGYPq2JcMJ5cMHrV7IPBVDl6HxR3BtCFoghEf21uJ+5jY2KgFkhcMAF6hYnxM7khvIDR1ALFIEjzEdpIeteABY1JAnlcIiyDLaBcMNtcIjyGMh+I7qDQJ5IjSGAfHIZkLQS1I2NsjmoHxJ5gs61pKBcful+NpMhkZ8iO7ceCKtMTalxyqlww8j4SwiA2troDGAXgNskOMvNrauO3PNpDcZHQORTgxJCGyUlcclwkQ5JBB0kbXCR4XHKSSLbIN8o4INyAWrJwWnJSo/Lggl+yVVww5AFsXHKCrklSjVhpXDA8shDkxAPMcoV+kHjDElOs6SWZEtJekx8lakASXsb0FFQzhTPJgEdIBbF6gPEmXCSYKIXJcVwwjJoSZgwmAzgrxVxyyZcl7JYyaEP8eBSZpdVJvQQMmmxiyYCSKGjyU4NZJoHgQqrAFJCMlZJgBpRmBJXyeMl2FKBuLkwr/gObL1wiPUmgCDCrZLxcJDQLqDdyf4zmA7ydQaOE9Sg0oDJnShkoRJjhPUYMD4Sh4rTI5Sirggb7jS0nxKDyWAICR/QCMo05Wj0cmAGSyiwTysByYAcDKTt4XCIfyeQUODuylj77JoGFoR2E8ycsl0CipDLDcGyyf5fkFDoww2xJoQioXHJynEpEkAGIwPrKBLuwsZJoQch6MjJwzgUREWBPMmgDiLE4SIK0xIR3dJgBQkaykIxnYDfJwg7kpTJ7kSxLbKPwmx6M37AlQw8l+gEcb237gL7gA8CStIORK1ij7fvKNAEZMfK5uI5cbsgPMnCK0glaQiHyPVbG3KjoyIDYK0g2ssPKFyroDw+qXDDmAWvV4BaXASU8siD4SycsM9hyxEmgAzuloDhcMFoDFLArERdFGtyt0mAd0AwCiLK9yuMrbK/Iz8tXK6hZ0rUTHy10rYFmy2IUoVHyt8tfLdOAEt6FpyuEtyA5NYpMakouR8qpLFxct/LUhX8uXCSvMthK6FxchC2gwDH/LWOosoLLhy5st2YIjHgDQgJxFkuwLGS3EujLgOI45EG5S28t9Liy7sPmkBSysDNLxhYcr3K+uAEvfKwLysvlL1xcuHK+y/EsoZ1Iz6S4IfBZwDG5MKRArS7ChJ0mfJgS/8viKwTA6UpcMOcwUAwzBkrNLVpRswm7XHImhJHD4Vxu0kzRKsAWy94IapESxIl8EQiX0uXL5iPUvqpcIsu6CJOBkEHK7y/kufL7OI8pMSPvN1wkXCIcyDYTDlxuPlxu9KLDN0yBMeCL8mg5zhhcMI9CHIBau2SYEyOpYjpcMCtBub6pMjLB0yfMlVxudKCSxMycFhzJT8QF5zJsyrMuTKIOlEhDXDCZ6TKgj/MrTKJcXLyZcrRLayu8ubMWy7Mu6oyS6ro7KETGgKLK+TFzgBLVzPIDZM9zOcz6lbygUDTK7Iycz/NAixku7MThC0EHFeTFbmhK3zGyM/MHS/UwhNEzSlwkXDAZ7NIy7UxrM+OI4VHNOzOU0W5cMFwwxBss1HNJzUCM+3UvVkHFMZy1s1VNBOI8xg8VTGU0RNYy/s1WFKIlIKhBcFxuyKwyyc0zNdgE8tACQS0UtJNUzXU1mjPy27kxKxFmTH4G5Fxu9LCDCYT1LRg+o7AEIAwE1tKhTZc0WEzzU4YU9WTZstbNnypcXNpAFs2ogJhZ02ukigOk21NETbs1IFhmHLCgrKpEs3MIpOTAVXMlCasWzLFwK0vpNsTeEC/N1Aj83ZLxOFjkBN6CPUu7NnBI4IaS8SXokDODzas3bNhJo0sw+qTJTO3OGg5Eu7N1g+r1YAWxvQ9QXHL82VNPzZkmKDuzf0xAFoyjz4hOPlP8uDKAyzgo/LPSYEquRbCAcq1GCTL85VNFiZRNDJKGTcjhXCQDcc5Ftp9cJNTDoy9JE1wkXFyT4+FJROUTDlwioIZcbgMU5LG6vXcudM9TCYDmDoTRklAS8PIjXG4SV8b1LVwwQ9K1zgc6apxS7c1eU/zthMU4ATtk7GCUo/I11KqBYcqWx/RFgbkrAygYWHL2Tes7jOwzDwSxO7SV87xCLIyYKhMUMQcmBO6Tw87LMljlU7yI9Sk8zSCtTDk7FPJSU0683gyjwWdJcyvc69OwS4M8rPFztUxZLRhaE5I6QTwU4dPCT08qnPUyds9XNxQZAbm5Hyt89KCAy7s8VNbz1TmgAWiSk7LPeVwkPPTOI8+BO9T20+GbdrFcJPYTkE8I6VwwrSCsLEgBawfy/AQLLeT1E+DPmlxy3Pqyn8+jO4SUE7lPlT7s+ZO3yzc+tKczQE97LjT2cBxPvT9U/GLDz8su6y4Mfk+FNPTPU+/P7D4RMVNTgM8qNLZQyKPzPvy3E8HP7zPtXDDSV88+ELT0MpAD5T486/PfUBkPGj80B4DbQIz0dFxuTsDH+YFBHox4cNz7JT1QC0DFAdJDz0AOhQJSx8ufP3iw81xumLSMME7yd9BPP9UDVA5KQ0D1As4jhAkuZP6Tt03qzHSvJj25XFzkNOjEQcjlOkyTE6WA7Vwk3OnSToOtOoySXHLOyUknxQGylgILQdUCcuGMjTsDXHKgL4DxQx0G9AzI5ULlBdOujGk+TOiKG403OjmNoaGA9g98qUNcJMrLKdH5oa25ekC0dA5sxzo+gPpD6gMMXG6yQmkwR9oCkCxcMLFGRCVwKYFvXDCKArAIqRCDXG4+iPpgKVEGAVpJ6UtH2iVNE1wwI1wwjUTQCKCmUS4CSAjgJ1wkzUVcbhcgq1wk3JAlFDRJ0QNEsDMBbw+iAjpMwFwko84CbREgsYMwAqgJ1EKjXFwCKAiOq4+oAjj8w+mAmgKFFWjMDqtEvRfUQ9FzRFg0VEuApgKMewP2o3jsYFxugCyFvFxuRRmj6jrSAnBcbsAngJY+oOqhb1wwrJMI/XRJj8YCYAsgLVwwi0S9FMAvgK5LUPpgL6TqAvgISNdcJFxuAj0TiQKAhj6NEbRVD/dGUDCj68hVR30WNEJcJD9F/REM29EUniURlFSAV0R9EiAqBqlIMPtUhFwwdBb1G7SGgsLYBVwiIW9cMI1F4jex71Iuk4D6dGZSF0Z1IdSQA0QW8FxuA+9cMIdGAS00VoBRSMUlNITRMAJ1FBROXDCfRPUUFFFSdUXgCSkEj81JEFxuoCZRApNtE4Apx5qSbSAUiSNcXJCYCxST0g9EvRjAKFwkzJN4CzSAgFdGTSbUnFI1SOUlceXSW0aFK8j50UlGIFxuVKtSM0S6TMFvD7CMvHk0VFEvRZ0WtFvRnjytF3Re0stGCPygKVGIA+UrNLBRl0nVI7S9iUlGjSdUadGqAVj/wCHRsUbQKtRuUso+qjXUcNHHS20r1HPH3Bqg+6Pv0uFJ5Rf0n1KBRf0r1Kmk2U1cMPvAKFKwP40rSNKApUrtXCJUwwMLRIgIgapcJJiM4Ak0d1HgAn0eVHpcMItHtTgUfNJ4580fqQNSohb1NsAUUuYCCAk0WFI2XG61HjR50W1OHR7041H3Tk0f4CZS00gdJskyUS8eqjcj6NKbHtx7qSfS0o0sfJSSx85cbrAJLrdcMJg+1HvBbyMxRIU7wMKP0D9VEvSR0pVK8jmAKoCakLhqlP2Ar0aSTqjS0YlK9RIgI9F+JS0/Q/TH30yoMxTVQEVQtHtgPlHGAsiUtQLUJU/tKTTvUiVJikDU9CUsAp1cItUI0/lJ1TyR69PPHuVcJNSJVFA+0FxutQhcMFFQNUQU/9NrTwVG1RxUWR61PMFvD/1RhT1UiVwwrJN4CTUeBqlEpSzCBAMwP80VaQ8Pzj94/iAgum1FfT7OfKTAjMBbyOdcMJ6OgA+VJlIbTID6lEgPq1MVOZUeR5tJm6cx5ICWjoVNNFYPrR5I/gFvVC1TnSlR40fHRiBbw/lUUVJqTrHjI3gCXU4ozFUEkDhcbnUBVVxuPzUsVG3Unj/Q/5ISD9w/gP5AwlUaXG61H3UtgItS6jnj8FUvUyBcblUzD61JRVN0gVFZSnUutVHSDhb1RrRvXCQmjMD7aQmP3EtQCEPzNsI+5TW1R1wwdVKA/3UpVSdSqDCU0IChRHUSFElVhUpACdT3OuVWOCrVElJmAiUmtVxcD79SyAj1TVU5Uvj8FWZVQVUVW1SwVVFTZVuktVwwj0tlWlVhgq1VaPq1bVM8AruuwCxS6I1zqGAmVGoCQA+I50fHIVxcePReozA+qP5cMCYPwI1w/86CUb9RnSlUmFXlUHOuQCVcMJ9XgAlgXCTU8pAoCDHpUQg/1VwkQ+9RcFxutU/USrnxWI0jg/1WN1iQBXU71iFZBELusBLTU+VjA/7RK1ajzsPxI01V1VeVSI/NVf1SshPHhVUtK/TwVm1ZfVxc9YDIT0ulTYPsXCTJU+1lVG9WhIzNSFT50SEhPHu0UtPNWhVBNZxSwSE9M1WZpCiSBHtAKlJhHnR6XDApUYNQNRZI2I/SApPO1bACrU41K5WWD89QkFvU7TnzViVcIrWy1thcbrD98eRHlVMaTJW1j9QW8jmU+cfM65VswBWjiJFcclaI2KTNW5VvdbpVSVmFUhVfVKlZrXA1T9anXFyNcWCrVddb1UJ1J1V3XFxtUlXH1K1cXEVzNQbTS1xcCPqD71bJXFzFU5V710FaJU/1vFwk3AKlRrXUAqw+/RI1RddXVm1g9YBXZAFdJiBcJNHOjMUYldvTIVKlWhV91IVdfXY1wICnWlVnA/TUUV4VeWAg0SFePUaV4VLBXqV2FetVxUtleEArpN4CcjXAI9dAPz0UlHWPzpNzoJWk16VZmk61c1MhXmOdNfBcJC6TdWC13Fwwq1hFfjHvOdIChUoD81VaGqJAshMjMV9brTRK0jID4Fxu4FwkVh1JsjRuu1wwmD/yNGGqUuchVX4pJtPyAUI+dJJS30nVMMAf1AtfRWtUVVPYApx8tf1Va1/COIAmgJtFsPwo4oCYP+JA9QLX10rSNdIVj71KVYYVQlFUAn1IVhnWFpEIaoCkUXhcbmUf1h1Wc1U9g9T9VpFOojTVstiXXFwUeOjS1u9SEjM03Ue/RFwiOglLUf4+mFvVXHLVWV/lIyGqI11bajw2AdiuAVgJqOwPzWMdiZXYI0tMfT5gJ1wwjgKoCDWUWNFjVYEUW1wwkBb1KNTZ0R1XdHx09ICdUl1wwC+jXUgySRUUgFFPi60x4lOpUQhqlVqAqAK4CLRIurSPFW2ozNkpZLVeFFNYQ1lccpB0dUBK63D8tSXT/024CxT4gKjztZPWP9lVUbBcbvY9UuVhcjoVAtS/Re2RwBWlLUcdgFwwXCTRx2S9k/Zd0m1laCrD7FGJV3SE9mOAoWCVmEGqWT1TXHIXrq8PqwltLbSCpD1NBXfWSKNdSuVcIuS0j8QCoAv1/o+tZvVcIrR7IzlUZZyJENnNHhpN1GO58U7qSaPy2d9EpZz1Gdnc51WcNgPZ8WeNf9Ey2dce3Z22ZYMLYa1MtIBRJgIdJnUYVOVYjRg1MVmgPo0do/MP+1MI/daKUSMe6km1pdVqj1ww+w6co8VXoAhQEtH+P3ViNUZV80wdbrYpVjVSokDj61wkCyElb7YD1ANQGPrJJ4CJRbV/VcHUUI0thraapEKNcFxutUZcJJ9TNIV0sVVGAnx7lnHWyJMw+5XOVW1qc87D/ICyAvj9XCS02ptqnYVj69qQjeWm1quAv2FaSTVYgINqnTI2rqQmAh0+do7RXG4CXHIpMhXVX2sdGAPuR7YCHa5UStrBZVEtY+5a8VZNrda9o3o+9V2VYQ+5Y6PLY+yP32B0hJRI2tFq3Rg2uaMra4pNlhZcMIw+jISAIyMzbD0T4CePtAGlXjbNXDCoAcOodqZaOVNlo4BcItfK6h1izqHUQj6dKZUvVMEePRz2OVww+WBQCOBcJFwwv13tLzAS2qoClavktY+9ay2aNt3be2sI/NbhW4FGXHJ8tFPRv0qlG/VNUb9EPRv1L8hXWAWi9pxWl2GsJ7YauelhqAZ0b4CpbOWGttBYagJ9Q0BcIsBLUNvO1gHab22SM1wwI0hWlLWFdvfRfpN7nrUH1j9neAlufFvYP1W25LVbcuq9aLbeR7gCYAv1MyNHayVMo+pcML9JnWBD+UTe6rgJIFwiXDCIjMWntrAjY04dqzbf2rlmjcLUetuO6ro7CNGkw2VlRpY32S9OXHI69OJR8UfVOQlcJNTzSfgI1by6312jrlTd2FdHc6vUZFf1TdpJ4+jR2WaSQmPq26Tq9cL3ISNjbnUmKN5T41/Vd6P5U2brBSZUmlo6jYUwQ/NT2UwaThRg3LNZaj23FA+2PsWyw/FaEyE9gHISVl1nkPsJBNOjcrWgDstYbIzJLS65VcQndUp1Slwwg3OtSrYnVwYCJbe2rVxcPj/yQvbrVq0eajS1BI/PSn1JLy3SnXJSTBa6UxzoEjNcMCxSZ3HTrfTHVGY+3THV71wwpV+VH5THXFxWAjgL9aFa23SFwWPogIYC+jwUXlxc+WwFbLRqXDC+Apj+VKVdQx7d1HcB186Tekm22Vp3ToW2tnBWFVeFana7WbY+nRgyENMJb1wkfFWHV8NMJXt0b1gzX/UXtvJSiUo1fjZcItfjWmx9tGDUa2Otf9Hu22VSPV5VDNSOApWlMfLRvXcYCzdl2BNktd12jtlijz2BFOFcMPlmoA+ALI+zbeWNKRDV6Udw+9Ut07y9KTlM/ZOaPnzU6yAXXCIDzEDo+6Q1DBunYIYGOgOb9Fww6SyACPF0QLrED3i6k/JswwYYSsgOjrtiDqg2oOCFvRqJ3WGO3kFcMNi7QVIGBgjsW0GBu8MwXCRxb5dB4MpT0hL8QMwU+KwBPEDTecQR0FwiAgMHYXMu4s5/COT3D1ZehAOV6K6lXg71m4WXnFww3APISJDBt1sXSEAOkgNiA0uNl6neKXrAXHK3qKSkAz3pkMFev3qIQlwwur+SGqTkTukGbxA8zId0PI8WeAzuo1ww2qwwKlKgukl7pe2utF7mRbXut7g6jXtL1ZCnMUUciDCy01m6ApWb4C/V0WMU6sBcIlwwhOq4DzT4j8lGFY03J4CGAphcbtUw3clgVaNU+aQOP01Q1MDTB2y1yDSM03IMKAm0wVq/fI2EgCaGqXRcIkm1v9bbTKAFdyvSbX2FpxT3gFdpXHI+1lVfX3XF9zYz33lboji1AVQIDC33F9lWz32keOP0X37oJfg32d97H2pN4W9fmgJF+ffY0+t+XRL0UFwk30r1Q2FYR4oMOYRcMDAwN8WDNfNBIwwD4QJcMC6LE8DkXHLLtI6eX9YfogPhwN/aFSX+4cDAGFxugFxyIzxNxXjYSsv5ErEXfLjYARcy8AZcMKiWO28RjF5hK0aA7bgOzuesgExr+sE7wF8a293qI4C+TVxcEpMYrIARC6RwckDkGwiTw7XG1PjC/k9SgL8a8ZYRfgx6x/tBAwHBTkWwWcFPCSgxTgLXiYhS+Kg42B4CHYAOAUMWvI6m66jJbj9PKYO2MYFBDOdEB28XXDDkXHK7x6I/4GsRSuLukZOEXCLiLI5PRhDIzGERhZsS+aotYhzgNl1QU/gpxpkYoDV4EEPiPUBqgbCAxwNMAYGUwR7oyEzumDpcIuiDu86KpGwVI6LA6QVC6GujDwGTiAGbnoDWy0APoJVOjbo66hM+73wFQukDno6QOe4Jq8julDpO/fGdXCR/H+jpU6UgkENCOmo27pfeHumV4M6JSmsalAGGdUvwXxmdV5vNosOYSaA9QFR249JcbjBeb4VcXL8S06A/L8GHJnUf6i7eA9hfmOZccq4X7qVD5uwr2vhjhn6xFEq4YoZ/NtP82GVcMM1589GhXDAdd3jqaMGBOGolU5vAlgNWA0hAEU4EJ4FcXNuvFhOHF8YbTqVgblxyi9IYdd5uiUvocVXDQukr7ZhmPkeHsFxyEbi7iD1AR6TFGeQLZOcBgoYEHFxuA+MprBzQRh5PHsUgEmjKt5uGw4hmG0Meh8mFWHyYh0kPhV3m8DNhdXngVWle4jl51lxuEW9echJ0XHI4jcDNhyPz7tjiTglWAsgS4lmGO8pjKuISJVYb4DwEm4keI9hoOXIPoFxyeGPidgMoXHJhn+GoA+YoeGphoQdgZ7gIMOcEVhrMvLAbD4y/AVGGqXgox+uDwBhnbNWwe5fGZ2hgc1c8BktqsCe/OykBsEducVwkqHDmK87JjF+KyWT4tl4mAyAGr4qYRMJ44BghYuh23iFFahZQVqQnoOLiwSiUPc8CYsJccohcIgiWYqbdTLxcMIC/zGJ0BeGCXG4+SqzU4zE7/Pm81u7biL80XgdzEahRDMFwYNYTFwVmHRByYDeCiKt4qrtFPGzRz+MECThz/q8nUFQQsAv41rrmy4O4sHpfCMpUEQRbPtAIgDrP8wNgErMxLu4IvhKwOzfzQIGBW9EY3j66Ep42IaETFSpcJGATspVcMBnAhOZgLICT+Mfg3cFAsODhGOU/zG2YPoM+XDDqTEPHuPGIUhO4zm6ZsBovK71gOwVDiqPV+FwwBuq9HiqAPEaThPYr64PiBg+EcQsgTYzB/jsxGLpLGAZcbsA6YhWQM2oGMZnUbJY6Yz4D4ZBZgfiPA2gU9OwInt6OE74j1BY74xG03DPWupQTOA7gNcc671xc3u+oDlwwA1hIt8KFtqth/o6uHbgSmU0xA+RcXOZMW1kXQ4UHo3ZOkgW3XDAQK1ww1OR0I/hcJAysxtgW2OAhFkAqqWwepgWECQgORhe7ZGhk3f35HEabkeAmmJjGmGbzuQEpPZimMA6hoDQRhXgPXDAwMDRFRIE2S83y5KKjCLGFlFww8gNuF04eBqhdEDsRcbo0A3NqLco9LTi96g+GXDDmFnPHqPuIuQZECAELAqcIZjVwNIzg6RupSuhe1u0TkhgFJ9OUW/r5SF4et05SECBGHBKYSxB3vHqiA9Ig3NBFlLqT4WdGfCHIY6n05G+VE2RiHMHqF/mBeB3fXDDsLeXgNt8BLEXtE4RfBYbt6jN15XAgG8fCL+V3eqgooNhlf3ieUhlhukgZvFn5Y2WKmjXqOWRcMPOWMAxAMkDSkNZZ+WZleZaOWdljTdeVumjZEMMFldZbuRFlelxydlxcMMFlg5X2XFy5Y8qDhu5b2XVlk5dOWWCV5duWzl05aOWnl35eWXFlsZamXZlxZV98FDYhjt7zGHXvYI5mBwTV7plK5gt76A83uLpNe7ZZ2YcGqRn4aoJlF8bMQ7uiUzZcMAFEdWFzRkx9uhUSXCTIhxzgKOUGlB5NYh6FyODGpCwwQnXOr4XsG6XRgh8y9gxneEbRmXsegWG4fxtuOmlcclBq/RZlz/GYcsgUctjPRxD9QgRZoIhNKwxxGO8LDucWaVmUZMuZ6Y9gMI7ALD42Dq5mb5oRMPmphm+Z8yDmWGaineQT+VwwwFbdTCGTq2aFEYZs4R2cNoEgxS/r5qMxHgVlg5VcMIk+a2ITZulccpgh73Vm8jwl5ChyHMub+RZhJgIMCQv9majgWYDeIaEEGdLxlm1CE2cWPUCD0Fxy5xU7IFxyGN41cAhoSaA5Ym2bXCRCWcuL/5rEZ4945yOJQFFFTwYIx+ZtOZYErsswXCKAuuchnXSomOqGy4m4rtCH508qIMXl/1wwwt0+JQTWAlwk6QZv7pAYck4mczm/ZqOeNOf5mWeK5H5qTflmf5sWd3noZxebDnntXFxgWDF5NXj/jPmeXnoZ7xdfLCYga9HmoukWfKGAwKYxeA4YHufPQZE28BcCIFxu7m/olLsdjCZ42e9nZ5l7coU/57eb/C2wvYWufHTkEDMcsZqIyM19Z0hnS6I5v7+o9RBKwDxDEaBDsKAxhO45/jeHgWf3mhOCGO9oNiEwSOLtExWbY2R5tGb/oQhEQTuDghQ5hQ9U5qL/rjCsxFwwxnDY4PkXhpAeIYcgNl7jLvhTwrI/xgLYBaZFKFCtzoggLubCGqA1gMRoiukGiAZFUEoIdomgLouVoiuXGlwk5zWNjD5QK7U/Fn6JGaFnjBo2XHKz9miivHCreijohlfZxGDClaixXCJ5r/HPOtBGYWTFrA+NNjr5oWaYEd5pXDDsmBTd2OBBO+FlorDg7KznXsrWdxCPZoQgGT55zQaOFQ6Ky/VgLVxyDoraGAYIA4XhXDCtaHJccs5yozhpXCIaEF/aCQONo6O8OaFDSZ25ZljLiDIapomaXCLNxaKJhaD4aKJMfopcIvaFmiVWlTohAiWKnnh56GkCEQ56eQJnhAN2eNpdgh+exn0TcWeNnsTDWgtpjOR8AYyBYMcrIF/6Z+jy+oaZ2aO++huqwsDC6K2eNlBBgMqAXCS2PYEYOR+ijPngzWiLonxwkqAI/6KI6Zjt6CGiji74IQaU/raeEPxp56denPjaacuijjh6VkPM+faMWlwigObk2A4aKMQDpZu5sDnoVSn7pSFEZ1VcMBHDav/jvz9gx/A04wZMVG9AlUKdEaSn+k6GYZp7wxpy5zpcbsyfk0WEuzjDpiY96kWoGCpaOlxuP5ioZ6KP6MyKFqOLEmii9S6VmJKgTv41BRooiFODaNH0AWkyE9YqY4Rm/UAWlZPR3jemBpx6XCLhg3wU1vpyUBuGFhMux4DKTDhUJ7+4a6KI3zoouXEyJpzGRUSxMn6eAv+/2LH+nIyswzkL+9LCdgWjqbw4Dv+DjamWoED66V5YPQNYAmARqpBxWrrQUavWrmA5avg1Xoi55UDnq7jOAm68cQF2ng6x4R2oM7Hax+iKKEk28KpqmmRUsdrCGRRcXAaKIIKfM6Ismc9o6WuiMx/6KOszrJGRUNIDdZVWEc98XDDvp4ZVAeJrO6LMSlG246DpLqDaCTpKXHKOijGf6m4I7EJJXHJcMMmsaECYvD/SEU6xXG5zaJeuA+VcIhTrkvI7pnJ+N0+nXCSg+ijjNRikUhDF6MYJC+jKvWrCAu4FmtgXRllGoJrclKOrfol43r4PqWagulwi44Z225NvmuvLqBa6usK6I4zcYRrS6Ir1tq4BUJOEyzwF4+Fooy0z6bqdL0ccgXiu9bIFnQYCbsdpQFwikkeFP43zpBss7xkDWnDWBHhYYHYbpjRYHcb1GvPg+w+EW4MQSRK2nDeew6VYCwNjCe7FIaEDYueifdpqjF9/vqU54TVxEHRppjZmu56SsLjdGNmeNf/7H+egG0bGueNp0bGpcBFYJ/gyoY5yg4SuMMbGuukCH6dELCNH61UygMzYj+JJjxDoXHICbCgIo5cggOyxo6aoBj3QQRu4YQGA7KmzLQY4m2RiU/6I+wUS9TR+gvQQl0gODDuwwh+tDgEw4DYfHY0Wx2KP6XuqhN66UuYC6MNzM3rrrwzDwIH8Thzw3oSPjmDGy4Yr8qYEraA0PPheYYN5sKwYlAl9GnKwwhPiebT14+H7uGuMJjRAiME/Bn7U5MVjRbTCyBqtQIhMU0CAjOl6XhaPcXFOHaawPC9IgmoIXnNDF+Jg6OZzG2JnR3m5kKTWXhpcbshO81xuOke2Tn0YvGNcbhju2gTV7aQgK6OG7z2GcNkxupJOHbVUQltkwP+2lgWattCLor7cufFgG7Nu2m8WajueasSbd2jY9Z6AYzmDgnDMoVt5NKuotjAaNZzNi07fwSvOv7fQYFhkYeGN5hMvem4DKvZQwIfqwbgjdO0H6LW4fuA5V+4Jmlbi8n4FPbgII9n5bimo7n+0H+4JMtzJO4VqOvWwSuFrhEO4IT54He4DGfk1mqMVPT2mMruXgi4PoAvjfL8nqO7kW4DMJ5c7/Np2vfmrlpMBuISu9xPOGAPrA4HOOzpTQQm6JtBbo20WZYbqEuNujbHr+vuq7pmry7UbpsQflTyfujZtYRGRPVku56WewMU6Fme21P7J6IWA+bCe0DurSd+7eMVblOkEEhBJoQRKXDD3fsJ6YRNZna7tG7ru/HdUXFxglu1WXG7GflAp6XpKvpCp5r388fBRQN3gWxi2DHtyyom1RO4BC0IXhHaX73xpLblF5vgYS4w7Xm67e+rzvRblOk5oOxuWl9oyDsGoxoBwF+fRtDaT+oO7572YORunOaGl9tZYwmhRnH6X29tpQZ9ARCCaaoel7n0Y0W96TFb37xLn0bN++RQZFpWeCThCP+IjDEZ9Aka+VGSt67vh0GUCscN6Y+7nn0bFwIpngjfOl9vq4IAgNv0jLkXCo7zhwNbCo6XwU6MuSjOl9jW7r0vJpfNKmacGCLg7pJeEbjW+vjp5U++RwBBD23Zv1b0umHvx8BAJZFxcMAEG6z9XXDAhKfATJ5oE+7zoRRtnAeE74Cu7j1ww/AsCWaBOdI5icCvAHoYQY4z4k/6jXDCpQj1cIgcEC/ljhlTxnTpCnLHBnqT6GmPw7wyIG/7uxu8WuFCRSdzIRLjCFwNWMMrHIVJPbIlPCJgLTn5hRv58JcnfurO4DqyFEPIpT/m/CRuBVwQZ7G+0gQ77h1Hwd6jIOtmfbBDpMGhAOoOrwNaFOB3uUaMmmVvAbue5Ru/bcCyBw6blQIe6SlT2d7A5vYQo/oacPOl7w8aQT1xy8Qml4A752oJcJG0QhS9IblBcJG8OGl6uVaHMXCK7v+N7xJaFPC7u56EWi26lcThcctVcMDuzbqPE3tTb8Oehn4grzt6zM6K8bnvDRFwkCDcMGawsRXo3FlwwhZMVG2whe5jpOPfhtnjSgrAOLnM4h1BBuUZ423LwF8TT9FHbrgGADrmGMcyFuHArQNhk1BHeOQFPUDW8bEvCL76Rt76YXFxt5vq4xA5zh3G7oO52ulHtL6f/G9wJhCG7tuV6Drw3vm8dnAa/RceG0joTceBWoDWYP0cZoUhPD67iT4YOXCT8bL6aKwcW4o8WLPKcXHI74+ewCL6kkn7OQcSN6Yyz6XvIYDd8hxT/xILE4OtyJ4mwSmlccmMronyXIys8JtKbuTxXLIHDPqK7XvJQ8CZuwkpo0GWHJWS25uzozxzcGwJDg2m2eljDEUH/J0TNPo3JzoihRWujygasQKkEQvJ3KIAulr5cbjk5QeqvaE7mY+5rTo8LvmRgo9DCAXAFYMLysCUy9qa9M0iGy2IyJqg8oDmkUijywIcCdOFUSKwJ4HqR1iec1yCdCG/ywBuLPjQ/1FxyWsx3ytOC5Nc0g2C6yNCH6Y2GtbNOh/Gf6dOA7p4nLUn1yOyG9zAoU6hy2Hcs/LnQ5csTS8oQcs3MJy0yAUhsAW8twVXy4cviX5IOJ1cjJy/8yUjWn6SNrmo2k8yJj6GhyQTgyKuBtlww6YQ8kQ4OhBza+owPjgVqMaRFklGMVNxUj63GcsFCY23tMTbjzYhnHNmrAzp3Ns2vBAWbaEAxxUkZOqTDwZLJ/jLzcPKSTC/OwZ/Cj54Ed/868sWR0874SzzwzEUEDzyC/kqtNzbTgI9z1y7MsnNa898vXCT3QXNFec+c4HLacjoDdz8T1YmUIc8/s+Hqx5nQWpOdTc05u9WdXDDPwTE/QVLNpiXQNz4T1k3HQVJyfQhz6YDxcilcXHQtOB89s/bNy9COVf0GyyxXT0Nz1YaE0CN3vRE1ruGvRVJsA00qr0Sz5zH70Rc+XRjPwGdLpLJWuVxu3Fxc6NzTc4jchzjNuXNlzac5ja1zb85+hKDs83c0eAXgjAeGkvFmQNfQBtxErfY5gIfOyjasgQJcMAlALqkH7pAPskAStAI5XDCKQztLCPSQeSvTSvCTG9zZpYPPdTxcXPtg8mN704ukGkWjPv95jsFKPWyM/O/hL4UVLZc3mP4EBpTQWjQ2qHVDfzWZkVDnzqm0UlbQ8uahAtzh0P3Ks2xW+NJhTnj7FGDVtD9V2zcoSFCTfWpWEdhK63pOFRhRShb3U5a4j7FzLWcWElEhYaUSVhvYX1N3Uv1P9TNhbYcdWlh3Ws1viSfdd2GtidZP2G9atZP1IdkFW1xuPPRagLVPpdK2J8fFT21v91vX02EVkD1RuuQ+gjr1gVTQXG61jqjnXDCKAj2A/W3XBWoY+pZBVMNSxWJ1KMhJ1xN/tOg65dcVXCR2vlf11xW1w/B1xVO/XFxWONjndudcXPWV12chTdC2pnXF1h9ftSbWaXO/XFxD/1KNVk2iXXRYj1Q3XFxVb1TX2G9f1K/dm1M/YdRsyFPYLUx1dFofR2XHFhPV4WlgCX1YWotpfVGVeVdbaa2FVIr2WW+NpqAoWkVcXKgFfW7ZjWmXZpaR2ovZz1fXZNElVP1wdTN1zVT9ZjUpdojbF13VVVIzVkVZXaVYuFxut169p1ZxU71T/X1Y6WlHZpXadgI+rVP9gna7Sk1RnZp2D9qVip2F1NlcXJVnXbRRWUWTzt21IzFW/2w1VdhFS10b1clcMLPY3VP9j1U/XFy6QncfU5VVijeWtNVtWr1WNVxc9blXH2b9wtWnW6VlVXL1e0cHXFy1/VW12iyEncn2kVeFW1149ptW12o1bVTvVtdq3X51N9hcMPtWplW12Cd0/bB3HD9tc93V1MnbNVbdw3Yf3Y9xfdn24d11LVVx1V3dl2Nd2lfd2PVdVHQ67WaKTZRrj7aTZV3uuVstcH1e1ElbqVgVROPpuuVZHb8XEFaXZPXA/U9dCXNlTvWj3N9ar1cdWdpb1XSFFh/IVj/yMwjex7XfTZP28d2ZYND7dF53o2SyOhZxVI9MlUBAPl3BalxyRt1xdrXdLUx2tEedS3dp9Ex3SVBNb5T5x7lNZ3a9//gRW6eBVRtzc6aOFX4J6PWFdzoaQuJBCJGf0U5F+XvkIRst1MNk/Z+Bb1wwtJJ9Jt4LBK2NkGhY1c5BjZY1tSXZo2Z6TNZI2TVkrZQgFFmFXyWFdrTTmSFtmtISXdbrldjSEY/MGCX88Rbf8oD+EOU9QqkOPkUgFFsjXn0b9mhZRtsXYbd/38Y+e6FnU4W28B4PcFvsRvemEM9EYRLrNhFuj+YFDgS0wLYZeDmrpThM6knjiKtOlmE9iFPKQPpiFFBrpi6Z4U7y+Ej5lGxcMPqGEBg64PDolg7uiroyGCPnzpg7vO2udvgDT32AEDkTaWtdCSaue/WJIPir1Q6cBtkyfGGXtwwmFPMH49QXx3/l/95RvaWqsczuzueoGynJ8bVv2YGTx7gaAjrpJi5cMLY1cQFcMErQTL3pgjY0aBF5gDMVCK7eoqu5mGGu3oP5gkkReobBT4KXlvGE5u+uiFwi4bZ5Qgi7yrN7EqozxiWYNXIobdjI4MLhx3guN3LSYiXBhxX8GF6gZYZNgBq7ojKuXDB4l70hiWJ9Lq7iWQM2XCQQBnFTlM9cIl58eEWF5Mj4YQIf4/6RDLzAgOtYx6E1gjmGnh0nVIJSHAnDYznE4+hXohgx3+EW0UHOlFDtpo+f2I9oDAM2J95v8i3g1stwBgu1Bb5UKBNcbm5ccsvFkJPlMQ/UHhyOhFLvDlICVWfb6YPI/pmT53iolVBlI+7pGSqk4msSGhBUPJ88jxA+YjsEi5NcMIGZkMGYFmdMvS6OBDwRa6laduHMD4T4r/N6s7bGOH6s8Hk3gFm478iB6tw3d6jhTwdkBW7SPgQDpDyA+ptF6TOIpncEU5TbhpxAvqHrriBvFfRXxTEMhfH68b7Suh6/euOJZe3eveix5THdGIh691wwZj3Y+WPjiqRnuZ97HunePm6McFwwsc3ozpE6SOmGQm6MNkboxkKvcudXPfbjQz4DTS4xfkAzukftOYc493E8Uxb0fB37WZU4UVDi+2BMW56e1nF6D+eY26tQx+3oTuA8e18tBtmupWQfkE+4+QZkLe5OQjed5DTd7kL5C07B7S5WurcY5znGqJBR+DO6nhZ7SWNQXCSnu7po+74TPA5SIHl5hew/3vKdR9L+Om6Z43+AtQUe9GfNwZz/O0FoIeXU/sEm5QQTuys+8AzLgNs7TcHLjN4Jzf7+wxHv/zZT4u6Kt06QuNqMPQQj8Rvr6/GzsWD8VPwjK+xu+zuVFbdyLILHAr3wps8GWHwj7x/EH1xy/COg78M/XG78RBM+qHxW/FPxD78fCMLaZc+XfkrjbTkGOYXhvlxuc8Z7Uxd8cl0sA37/y7nx+Om/ILVxz0mBP1wifHfxpvj/JXyMEmqRH1wwckXyLGtTbvyh7ee/+HHGlchkOEIu+/GHGTGr0fyzXCIEmd8vfMYStBiA2INd8vyIDLgSrYC3RREW/M+c6E6ybPzM1cYceNbLSbD3zxIgSWPzv8W4LnxcJDhEHrmfRqjdzBCThZhQ1UvG8oAzg/RcXGq+pXhVgc9DL+Tjs9KXvxALQXu5jsAQ0Pv+D2X82hGDkID/0+bXC7bpBty+/4rV9OBccnAD/VVcbufVn1dsb8KtDFnie//0mA8Z42BdBCfW/gz9c56G1S98vG/v/9fgM+cXjsBynvx9i/Y72v9bygYDbs4bufv/up6Xv0/tTTevC9sbyd+j2LxxvrVxKM/QX2ziGBJxj3OBTh33EZN58vvxxOfVOxuMacBnvwZ0l4fFzjoe//3lyOvVmadxaweHv+304Xv3n98/ev2/98/e++rxTciX328e/ewDJ+AUEmqY+u/hf4bjY/h58d+E/eP4Z98fh2drFox3yeJmOLxWY9Q3ZkHMBI1ZkbPlKw9LePGFPZ5nS0Fr/lQsOTVyZOMr+UflwLrt2a+EHoXx/lvS4CWBhUHFBHfmn54XtfoWhRu95Tf53+XgrIWjJbege71t7fo4JV+U/m36lwRxiOBWy8uoX6D+kyWrIR7+RYP6vGkO+H6R+bJooPp+u59Dqt+tfqf5qCWOhoSttZfnX6j+2fof5f+3ckxrRKt5zPqM8H7UP3AGMRdPIT+/BRUHrnYYFcxcXO/ksRtQEW2pH1wiuMw8+4yv75/F+kWpNoUg5EWfjVbws+XOHfGaBHpr7sf6pjkfs3oHyQuq39B+ygMv7OTVuqwVHekhUQKLPv+gT6PlTm0T6PAzcgWI5yBGHPqYbJEf0vplO6RN49+3hZ+6z72eX2EfoLQhEn5Du7xmGYD65QG8Yn0znCBLvGYW+NztLiAfCdnkfS4Tqf67g0RYCWk1v3z6jBo/8MA9XDD1sT/vP7v4P6PeBUCI/8OVo71mdX5hjV6S2G77BOGqebFRO++gGnG5zOCM/imAc5JTvSxcIkeGXG51JcrHVa1Z70FLbFxu0+sdQhjYBEnKODZWQ2NPXDDWGGB9LnipgxDuhCwtBU7hh0B+uuicVBj/R5vnAx/8licF/MQYZNtKg/eCn8Z5MYN6bIfhvcOmZvdn9QKPt/lBQqBh9RQDIf6MTVxcDzyDZ8qD/Xo0A8a/7NxAL7PeQ9zDggHsBED1Ca9RcZ33A5AppBL7eOQRwS/DLjdpA24ERLEjPcAMgZwgKjc5Y8JGsgLL0WQyKLagLsBWgMAztb/52lwkZ2CIQeGni3JsfPhtmLKBtmKngi+vcUWym9XDtAchj2JVQJy/OWniO3Bwyg9k7e3b16Q98DH5AXmWeLB4EIEJmT2Adj34Aa4EKHax76xzX5yzQm/yjcmC49aBI+BLGVxyIBFujhfx7shcXJcjIB3bZphQAljQdS0zFiarCb2bSiYsRsooObYDjXa0MAvBJkBraFryebYEC2fuDkMZ1IuAeiDBlBjDgeOmaGkGPaFzOVQB8cIgZVQ+Z4wYwjPrZN50RgH79hYyYiYBOr7wXDDQUKH3gEKWmi25UcsBujh+BNRMUwLGTeCImdq3Y2fQzvBUA2gn8mYo0Q6z0FwkqC5FjKunVgxMwB+wt5xB/QNJvOMCw9+M8YYFubxyHuKmB+PqZ9tcctzZ4zCnC7acggfrGVTrzjFQYDGSZNTi9NXEXHKmNOLB2j02BEBG/MG8yCBGsczxnD2/yYI2z0G+EY/CPuUXTqVBHBNW3wno2dooXCTOFkEvprcX2Nr1pgs7B6at5xvaP75njGZeCaxcbugm8EtPG7PGboR7XfXQGwaPZ8ubzjjlY6zS0Z6EEpayz7fe/bP/glxuFYHIExU3DkzQF4y2gnQ60tGgs2hGBbBWT1xys+hK+hspG2KDKFwiT0LMbbAJb9jfXCRdVAiEU0jOWl699UuM/xmp5Ah3DPBcXFtBOSgn0tmEY9uRF+Kt3OBiMBaC2NnEIEuSFeCj5eAQsnNyQpl4XG7oKhBCEGHGejZvg1xyAnkmdBhYMXAnm46BXoMdBk23uTziQ2e5YMw0wzhHBkj1k3pkPxBnWJuGLkAsfxgDizd3w+/bnjodK4NUaVV/WAYxNuCTTB+43HOSOp5ccppM6DaHjQMfwbGDZpdyXHJgGuN04I8aNjd+Z7AFeAOIZ0g5DONKwL9PPS0HXCQX8DQEPxBy2ao0vYOooRBPm/voOo2OE3qmp3vI/kRg86gSBIGL0DIxjUaM3LWj0ChE8k3TyjulugS9BvEGEyaWG6GPzcyBqRHU2q2+g1UIPs5JmDaLmWMI3cTym9+4QFxyL5wvuLZ/GNSV/fNfBxZIwBkbg1xuN3oQnesMILb8gJOciTfyYe6gybtbOUSiJ/wfhL/sfUL/gE+bUof0D92fuEIjc5MGvF16IShEwJMbxUBMXoT9CfuzeKPdQG/hF791hE8B5O/BpUS4z9whHI5lYFxuBGGzaz60MGAZ4R0BEISAzC0qmaCIOEWHWjYCPWbM6SWhmd0R12Pjm7CUSz2jAvISpBxGh1xyyhyFwlNo6HlOEvJbdioBduFccsHkEeRAjg8j37ge7YmBqgNBaCrjTFwksMCxQcBBXFyUohKC+tMlwSoJxOdwilxyKj09OH8IDgvsXCRX7lxygyBbsZNKeDB58dtawysmWdlIQX5BGVxuLANcXCjW7HCkIUa2jQPq2jw2UxjYJklQYAQ2WHr8K+2jZBFm3lxyvs9KwqOA3sxpHOuVBHPjK9ImFBg1vOWQL3JFEoXAo01eXCRSKFKRUczSRXcziQ8M9AxsSCptEAJcMAJCcRCsGmGMr3Lo6kwBQpMVjqqlUZC5ejZ+bIHL+UIBjolccgNJwq5H+OZY2bh/WFZic6FtQrdIqpAM1/OZ82PuX0vnXCQdB3DmLTo4hJUOTmoSOsLRhYyhLSOiRuUJXDCSYWlCxnNcXJ0pzjwukCHG3Vxc3xuJTosL0hViSXc4pwTNuQx0hfidUBVqV+SoYJAbtoJ5XDDsE90mBDCYHWk/oYjDDBHSlDoYq0lhHSk9kp0SQ4YsGGEmuk2YYXDGgwxcJN1JgElGGGPmFK3nXDAhhIMEA5gHFhlZxHhhKX4Br0MxhlDSWgxMM1S4ahHdHkNcMHmIkNIYE6QIYIFcXMZXwvwIXFwFdFwkpDK1XG7mK2GkXDBhS2Lo7c5cboSYXeBDQIK6P0kHXHIOF9BI44OuSxJzJc9OqQzwl+HLCF6wz9Q5Q0wvmp49Jduo9Q9oycY6PyZQ/uxFWdI+NaILjgPtEm5bDkcR2ZLXJVYO4OG7KvR3PKX5ARKt1WdKuF26Kul3ZK5d3kKfNV4O89aikk9RPiWtc3u91IUL55WrO+xX9rOJ1nrCR2mu/cAqu/lSbuzRRznQRbCKot4bLCh1KrCx1ZLDl4CKWNVzq+BSjKamHAQ6tTXrO5TmKbBStqbNTvqKyHZLBxTYKJxSsw7dTaKcx2Lw7tTpqV+Hew7VRjw8BTOqOhUlutlIVutZU1xu4SVMK3uUby4+Wii0UWui1sJOqyHD7CyJOnJIfW5S0hVOa0kJCaqHW/K0zOuS06dnzs7WpDttWdKzgWcSmSXxCzlWfi1KXxKz8WeyrZWpy1xclsmuo1Fcbq6WHBkh9XSrXFxVWS10Wm6ooWQ6QrWwyr0U3CrtXScQKXSTsqV3wfmWyasOW0IfVW0q2nI0htiW1Sp5dqK2wXZawNW5K0dIzgflWm6wHVDC3IV8XG5UFKUgJSNcXLdBWFwwfTViK3edcqtYd9yyMXX51yVDZz1JD63ydmAfjWNynmUUyzAWYC4uPLcRGOrwBGiJK4xIzJ1eXFxqrXlG8t0lG8pdDrlCylwwjh/JcoEZxSuAHxY+oCVaeLmaIBLmJUMuqsPsxGBWbq0xS1O+pc5rXHKD9QfnWHy09VvMO/U2SAlVQKlEOt67TWoJzpXbyj8d/aoZXdqk2AiIYpNBK9TFR6NcMA4EdGh4Yv7GTGCUxcA2NE3em8T0ilkjumhmAkQ9ZYDYdz20YxSYK0gchfGhoTqELgF/Ehgl/I8XXlwkAfJEWnJBemr/ZkxsGpsON5JvrIz9sNtcMKiQLeTcGrNFZOTeiXl6J1YgrZMP056vAlcGtAla9hYTp0uYK7BkKEEFzGZ53lA/h3geUpoIXmgY9YW4J5Xm4EFcMIierzpwXHKEZChWB7GMH9wdvZpkBvZ0CVPuRmNIyJ+PuV1yohpyGspDSFkJWF+6L2aDjN3NvSA0IDdlEto2RLN7LNHo/uod2DwOPFpetN1qXCIJ6bVcbivGgE2FWTmFkkGCKDxQbBakbHAJkyw+0ICke0U53CbgR2gcmmgUeygQ/bERkEEGZ2c4oChA3mpU+24Dy2eAWuOG2cWwwUqIwYoIs3immIz8G7xAaWO24NWL9ChwgydvSjAHTW7EgO0myhyns1xyJ1ww1ZH4hFxyB3EU0UYHG+g0GL2wFYoaKf29Y0yYA6f+X8AOb0rafTXv2mOWb6jg4Hw2hG2+fVGqo+E0UevHYoQRt4EQBLV/W/p4q20oIN0mtUDkO8IrAfKYpa4O2g7FZnxJBc4a4BD1AQyUUtA0OIUgewkRYPjorudrYHUOu3Jgf43oHFfjuLFgXCK0jilmSVxuqdQ78jhaahLNHoeWAwZn8H6hmkHOiOgharzEJcTmVKDCRRhcXBCvXHIzRZNqgmrqFaJGWFoJG+LPQXkT5mtIoAgF2Fhk8I1nQ1EEkxaWGrG04c6AGRz+MPBklAz8sqgSsAXv+6EQhvp0qAmcx3prwA5gDEAcXDAwMDFcMG4ElIz450i4wA5cMBqANFwwZxcmLhgDgAdcMAzAG5D6XDBPFyizyANQBkBccqLoRcRcMGxcMOABsANYu6BccuLmReSLxxc4AcADeLulm0AZxdSL1lwwwAGkXpi7sXpAHEXwi+ZcMN4upF6ouFFxXCLpxeCL5lnkwkRfcAcmEeL/gDNcMG0XWi5QA3AG4FxygBhFz4v3FxQBkANziPF2XCLpxeGL5xcaMLRg+L8Rd+Lxxgws8xf8AbxfGLxgXHJjBsXijB8X9i/UXXi4cYKAHIAzXDBxF84ucAOYwnGK4vBcMDAwMoxfF+yzaYSIxNGKouJFxlwwYRjeMeRiGMDRdwFKIBBcMGxcMM4xLGCIujF5XDAYgDkjPxkaMFRe2MdxkaNcJEY2jJ0Yni9cJGSouJGCgBpGRIx5F0owHGKYu1wwDAmqxleMvlww5i6cY7jCkXtjIEXYXDBzGIYzbF0QBkBccmL5Rg+MXCJcMMIy9GCYwZGSXCLxgDeLtRjOL+ADXDAGsZqi6MXTYQkYXjA0Zai6UXtjPMXRjMkXai8cX5jB0ZBjF1wwMDAxjLUYKjI4A0JB4BjjG1wwMDAwjBcZeMaUadi+MZijGkYHjTUYnjBsaki4kZlcIulGAowzGQYwXFxfiL5xmVwwHMZmjKEXVLNsXzAG0YKjQkXEjCMXGjPsXfjS8XOAGca9i9MYhjY0X1jAMZZcMBzGvYvxF+CZZGD412BccqNTxl8CSk1WLxxmgAaxrYAxXDAwMDUCSRgeNnRmgAcRsOM0RqqLwRi2MzRm4AaRoOMBRi2L3xiSNoxkEAaRsVwi94A0jWsXvYRcJGiowrGgI0XFzIz6XDDWNqRfMAcxl2NARguL4RqqL2RdWNdRoyMBR1xui/cYhjWsZxi5cZHjRUZcboxtGFxcwkRumMVxvaNZRnaNMRgWLzRg+OBxveMTgDSNPRviOARiCNdxfMAZXDAwMDSLiRiOM8RtWMExi6NlkfZcMMUa7i6sXFzo4FGXY0nGCY23GC43/FxceNZgDFwi7cYCXDBpGl4z8AMo57GSwBnGXCKORRl2NGxfyMhxroxcJEbxi7EX4AGcb8i+oFxyI1VF5I2pGl45/HSIwZG5ou/GLo4EXDDeM3xyyMQxv1wwGMb2jfkbNjlsXni50bxQCEYtjl0dXG4w1HaI4lF5XCLtRxKLsxgSMixzeMFRcSOZRiuMGFww2S9EacjrcX2jwMc4jlscFjYsavi7XDAMY23Hb43XGk41vGVo4FF2o6tHTI2ASAI8VF8I0FGuoz9GyYvJHS4uXCRm+NvReeOaRfeMQx4WMtxsqNsxcyPYRemMBx1Es2xvaNnRsqNqoBCLssISONRluMWx1GLwRiGN9RzGOdxgeNNxqKOnCJaPQxrGN8RoeNUR2aMTxsWOuxn6N5xeeM3x8Es8x2iPgxn4CSx12OmxkeMBRymPAx3aO2x1GODADCPuRd+OuRv+PPxrCNvR7WL+xtxcMHMbUi6sd7jWsZ4jesZ+jncYkjJ8eCjaEffi8FwwMDAxjScahjrcdolcMDAwMZHjokfmjL8Xpj98YPjykX+jh8bzjtsgLjKoA1jcwA4jk0eokDhLxkA8ehi+MZajHMa5jh8eXCI5fGqI0tHQ4wlHpI4vHeY23HGI3tH2gBtHwY9zF9Y3+S8ZXDAwMDGLYvzH343tGrY6fIM42lHaI35Gu49XHoI06WeYzNICIzxGXHKPtSCaMvyDWMFRzCP/RnaQax3uN7R/eNIx2iPOxcaOmx2mQKxyaNzRwOPqRpSN7RdaO6xmyOVyEGO/FnmLkSFccgnkX3jrMb9cIvxIMY/PF7YwVHfo2bIcY1xyRgOPMSBcbjhkgVi7chLj0MbUjKcc3jJEYuj9sXtkNEiIjBsYckE8fsjZMbFkQkhJkFsbSj+8gbjF0h6jccd+kGsXujDUdNjY0gMjhEZccpAjGZ4wXFxoqO4SXHKkR8h/ju0ZkkV0dNjoke1jN8hVjL8h1j1EX4jo8ghjTsdcMJF5F9Y2FGHZEfHrpCBGZ43nIXYxzHHYyDHY40vHh5C7F+JA5GXo99GzYwNHb5DzHFxuL6yM+MayGOOIReOLwVwinjN0YKkZ8fYjY0gTjrUfgjzcY/jTcYHi/EbukCUYhj9UYui5sbBkKccPi6kgcjAUgvjM8XFjv0X4juMYPjNcJHR5DlHSo4XJBI5FF5JDbGA5GRIppFZGSI9NH0o3lGb49hHEXCRISFGPgSAGO/xyaRiSNyMGRrONLRsaRqR/SMZR9yNcMEcFjbchgjHkXsj+JjSkdkcmkfsbFjfUZ+jgsYNcJFwwRw+OXHIfci/EZNkYUhCkKMbjkXMdNkCkk9knUkHjgcesjZsdyAGUjPkmkaKklsdnXDBrIHo9tHxI2bHJ44fF4IzJGF5KtF0IwNFzZKTHLI0HXCSSMZSNqOASPGNxx6aSnxrqSpxf+M8RwWLnR4iOUR12SrSQuNix3uMSSDWMCxmiRvRwCNzASWOsyFuLix7OQNRyyM8SB6R2SOUl4x+2M0SUqMfyG2M8SVwkjk0cFi5kl9kIcjFjPUaejvcYLjSEY4jVMhdi6UcujIEhpkx8e1jX0bOje0kdj6sXTkb0ZHj3cXNj3sbdjb8j/kW8YSkTkdEjuUeUjYMejkqsbbkukftcJD1HaJJBF049rHOJA9HFpAJFzZFHGv5HXFxhGTHyMKTbSKGRwRdGLnRnOOqRw6RbyPKP/ximSWRuuP7yOOMGRoCL2RzWLlSSqPvxt4AZRjORRRy6NhxyaRxxuONzRryOCxrWNsR4GLpyHuPaxkyQPRduRlSeGRTSb2Sgxz6NLR+qM/R8qRIyFFwk/TCEkT0ZIOI6AQYQkXhjkkjLAklcIk5QXCRiuNtR8VwkDkYRjfEgrkTEgpjm0e/kfUbqjAclqj/knyjuEg6j6slHlDNcJIJPXCReeMIyVKLpxvEZ1RuOMIyh8FKSi8wjyESMOoTyRaR8aS8yjKNYR4iSlASSOKyVuS0R+VwkSMl2jaUY1j1kmokgEeikHMdgkvkekjpsYXjk0fqi8EmmkB8dojrsl1jiUkqk0hLxlAEZ0lLMbXjqkkojXG5HR5M5IRJOHJCo5BJ7YxdJ9ZLTJuZJrKDpHVI9o4BJXHKM+SZqOuSROMPSZyO4SBuL4ScOM4RfeLiyYqSBSH2Uoxw+NxSD6OjximPMx9mPG1wiJks8eNjKMqHj50iGi6VcIjZAZGLo67GtZTvJKYwbIZYuxF35L/KRZJfKAo5tKmY2LHapFBGXyarKHYujHqpM5IHJKHG1o0FJOJQXHQ43ZIQ5VBF0Y/TKFJIDGIJVTJVYyPIdJRtIoZRJKno6zHxJWHFz4agC8xAtFsIWQtDFEuRxFF4olVK8u2FxKH5lEAsF0fGvpw+gATlK6BhVhystZXEqblTgrdA+oVwk1dGrGGVykgeVzrGhcFxuxdW8y1wkZXMr7lYCo51JmrrHYqv4ZXE63yNdDpVjY643clxu2R1mLGdZ+LNUAUOyJYzxCdR9y1wwlhayqVxcKuxFV1DmYeg6z0WlLCZX8sZwKRLFHabLFnhssk3hwsQQM1wwdFwwpi9JaXDxRAIRJ1wwCWtcJFSkrEaHGKRdZrrNZE3yyIAdS1wkHZS8/UgofwJA7smUi7solnq1blfSpNlfik3dlCq6XDCmAWXZbEaZXkgJVx8qQpaQH5ZaUBVlvRLF1piH01IvDp1kUsKXUsqFXDAdSxx1oyx5SCm2XCJTylhJJ665WoMDPecMTPhS5TOO5cTSXG7AJ5pbawPwrc02QBQ7fVKU7f1JsvKz9AysX+kpoHcC6oJb88Ag+1xu3wS0nW6WEKq8jMqTYkJyuBZsLFwkdtbtzd3UsIeIwNUUSKngh4UOFlxcoovZcyrIHaC65ZYLLlF0kkKFumSIYhqRvZdA7xg/M7xTnWBhQKRLqlxcLqu0jeB+x2aqjZ4prKsGqO8sP3wm07YRS8CjAYVaOS7dWLMrU5HifMCcndhcMFDKvBqijEWT8udlgi/KXDBW69ZeS8RcMAVcbi0JOsvJU9iyKdeq+zBqkQgWOQNUBFiV5Z5C8IO9S1wi5cWvsZXCsiwCMsYnhzLL5dYBmFAELKF4ivTgcMAP0OFL6peqtAwCmpv1XCLKRKIjA1RWGrKcAUS/9THxF0FvO9iV1y85VEgEJVZgEldKPDmYBK9hZcqwoAhLL1ZeL6hRhqTYXG5C8QRaXCI5DO3LxljSr01+XCSwNYSK39pcJDADZOi9DEmAGFWTzRIeszK8XlhcbrwMKuNFN0lcblYzqxmWhSvOYYzDSWnS0k7LS0uYZzCSYYywhHoqk1aQqbojYkp5TdKmZfXiWpYgAYVWoKKdYJLQBRTy0FUxy0OYny5cckayqhEtas4mG0xVmHCnOXOC6bmKK1EmMajiUm0OpdXTsWdaqrKWCSwuWHILeVrssrAwqM/cM6wymEExqdaCkmWJTvsVAqm4mPqyKD9BGxNsIBXeHMwaLE7odWWyz1wkfHL54V8lHwKy8UUDMDVFfbNcJKHcAYVYMqsl2lqqZSCAXG5cIjs8OWG+aBILGeO2peBhXfrK7Jk4sYHgKul1rwvlwapMpQ+mtrFkUr/wMKu4waor3lFtLvwMLEf5lqsCpk2u71+xMuVlkBVkQurN3bgssFOFMsEQsj5V1err1LC7NHZs635lMqnyMqRlxLXLBVlnMm5mkj3A/lwkgSXzzNmWnkZmYey1KYvqp+WUzGZUxrbhR6TN12cyulcRLFuZmu3KWBI+KXTKQV2cuplSKromHVq3xTZqMg58kaVcMKCwKAIbqXAJ6jnXIMz5ddKq9D/00GAFbuUVnC1sWm7rFSFIBDmdsufmekzwmhiiOVZMz7l50tDdohIfWtgfSmhSm4lnk0VmTKkTVYqyfmA0zVmIEOfmeCkUXCRCsVFSI8OVU+p/lKXLyw/1LDZpI8BZppMsFTtDsZpyrOJp2SbHWKr7XejNXG53NTStSxKJeI9cbiomnqlUmhSj7lf80/mKkw+mqSsYU9C7cU5jt3md80lX5K/bXDBXNR5j1NLJq4vwJgQrj5q28BVWcuUprOrOFKNLZ5qqvtQ/iSC1ipMWpXyrZ1Kmr4ZoUrQlS+u5FZwpWiOLNeSOLNa1lmuF5ry7YJoU7B5sOuCVTHNDlFtNiVVCqTZsZNEF0ZNKprCqn5XvMW5sOrr5lWqNpstM35aiXDCuaOO2IAsqKaVwL66a3qc1XFyUPDm081amhS+Lmt6rrmhUxxVkarXlck1ieFxuiF1SErnnV6pSiSBNYVW1Mz3XBLVgMLNvyMssWpmssxZsC8DFfcjzpm2o7JuU7bJs9M4ZtBMX1W1M5VM26lxcknTOmbnyuhfoTAeXFO7JXFwczyWRSraUg0vlmfE3Dm8E0amfpGVmgE0Cmgijkm9Du1mhk3bmha1OVsM0PVIU0Rmic0rdyc32Aqy2KmjU1elobuTmjy1tm+k0id804Hmk8wFI8U37m3zuymlzrFU9E4Pd2s1BXCTarfJpuc+ZvpOFnfbNPpbq7spw4rxw+/NRZvir7prAp6pxLNTVNXOKVUwc+ZqjOH3drMXZqpOMFfcjw1hIsdnd7N9Jq6vupxO8OVW1OO1jOrNJu+7tZrSq0A+xN9JrbOQ1fdD3ZrlMWZXwrOFOMt6wCPN9Jr0JaZrqrvFjLOVJuTOLF9rEUpypNhpy5NiJzDNipvvNjZzHNj5sWAVZvwH7Zv1MB5wpK9lTLNmJzCr5ZWzN9JlVEFwiZWTmGbpcIlrnGaralo82klpE30U5sOElyM6Cm1k5cm1040Uc0PMnLk2yWzSsgl6E5cm3DusXO027d9k1hdcUzTm40vOdYaymdis3MAJszcnT02Qlo8w8nPkzil886ZVsTrKmiiiAdis3WVJszoUW06pdhy4MldU0qUmzrim8sz3Wg06uVJofXdu5J1Ve0z/nU6u8D703vlhDrsWp06jVMc0Xdbk5qUW035myaxbnTDsOnZykTmjM7BnAUxfdcU4IWGs7MVuE0vUa00xncAFWnELuMV+k4aUVzsVnc6ygmp07rVJs7tVFE4jX307wVMc49ncs7unFc6+VMc1QeHLrinGU6onfM42mrCiqnQ878Vra/Ql5074ne08JX7S+6nIU75nIqk1nfM5JnfM5MmVM5xnK85RmvE9cclmKj25r3OV1FoqZlFNOyXYdOVZr4pMJyzPHpy7Mm3YHOXp5ZOYp4ROTpshO0FkU7CZzXCTs+c1qZCc2zZScUTzNVtznKegTZecrzwGbpzrR2KzqWWoTdKWhw3CHdTyx3cqWyd8zol1xTbCeWTo5WOO1BVOzvmdJq8OdKr8SbeTGxEPr+QP9nnYPoEcR3+zcUkDAEtavrGpUlz2okDqPZaAT28AoXDBfVm6pLD9wBJAJM94nF86gmbiokdgCjZnvEtIVXHKshpW8H/Z8XCLeafASumdUkm6d/gFQ55qksFxu05TlcSzbU2a4LlnQBLVRIBNBj7xBhxssDlrK2mUTU+UUm5hzRcCN7Fxy+pF2FguEVIusUZ9aqVwicPOySfNz61VBz5tcML7rdlq4fRWuctkUpUsFnxZ0EmbpHFAL5GYWORHnlq64Enu8thVeSoDn38+Cn5S/GAKa+KmVXG4wJauATkfaqyp+bPwSRC67ps5LZZ+5NqJbLNQlkMATiPBP1ZjJLYZ+7LWVlvP6pWqun1JPOwQC+oxACcuoZW6bYl8OviVzS7/FnBPrFILD71n/D+Z/us5Z0TD8pcNMy1eqpoFqct/VkPMDA+jPhqAQ66khQprZ8ZQD5oRQEXa0o2Z32qvJ+IAR5+NNw1IytDKAeowCNHL6aA870iNNQIV9hVwwiXzr46gHTcNcMIU92oE9AuWhEuBmjS0hnxABNnAZG8oGoBZnW1A0nYK0hoHM7AUZFBAW80PaWzU6loJccgO1Q3QRqB7Nw6B1QP3bujzpn+RpZoTQTnW8j25b8SF1OGp7JjlLdaBGH1FsUpNpwBQUKBvLQ6DHQQ6B5K6ZczQQiOtcMFmgzTtmg0I81HuUFOWYvFJfEEmafhqahTb0Hdd8TVdUF0HtXTT3ZUBKrWXJUHxb+qiWcjUGKhDB/5cDT86g7UIFdL0GKaTqryXQLQJcMFCqaoFtCXWBc+GnfdCYn5NCaV4CqdoTKqadetAwWUsu+WBbr1n7Mu3WBdCrl3ywBlhC0cXB08EoP9CXD7EuXCSTbLwFkrMsFObOHFi2H0TnzVxu6hLrauahT0SgLT4GXzy8pdULAtadh9lcMJqj2dUSrKXBc/hoXFyBhaGVDmVhXFzTGlwwyvZl5JGZWQK1AmAEvKV/tDdV2FwiZaHHQ1lU7PHZenQ6VjlQmV+as4VhgtCVRtQ73YBcME2forSGhTKTZfrrSEPp0PNakT/uVvK85ZwUJ9cIrOWH5LN9YxS+Wfxh9eiErOUP/T9RaBw4CfC0MJULURSHAUNNYLqfFavzNub4LIufokqRZVq+WlwiFEeXV6qhdYYflnVcchHVPjQ56I9L/ZfwSSVMCJa5f83dVjnP/JgC3daJtPhaE+t7VkVPxFgBO6nh0c/Qb+BhZ39QwlwkXG6yUlhAfSEtU2mAFAfyUqq+onF61gn26klUSC6hD9TtXG5rXG7vmgOgXG4VZM+umFSPuomyPtBcbu7ClqCtPw+jRYVgssw1RCsEZhiSPyN6s4VJWvwVN1RbqIBRcyP5RA6BiAKKXCQLq9XPUPmi7EkChhUSCfszvtcaKrw63TlZSbLjSIuzDNRIrqxYqzDlRIohdTdKuJZtrgSgWUJ9RaqwigGzv5fnroCi8nKUEjhRlflcbn0nD1D1U+KyCVGx0AX14fqojpGwXCQIp8VgUscpXuH1KE+AUFwwrgERYUu9tfX0begzrIpcJBJILoT5GliE6/HU5ynQVgKumWCUrdo5IBOoLq5ZmZExOI3i2mUSExRVwZJgWOc5Ho6CtAmM8OTnXFxMY4hqsElFIE7pjauqpjaAV6EFRKZYQtgJWos6lHzPpDoJRS1QLRfaJs7B6L8p+obwpw6IKtP6EdRswClQwnWMj3l8UrAZj7NMaP8ucKQEp+lfKqBRQaCGQCC3PyzGp+qQWerWKXSCHhzRh5w87cFQKurl3GqSVnVR/joHMlwwkEy4BT9K6+fo0SxUUEhMArLB+kUUJZadrB9cMKqieVAoBVmBSlql7qn6VAVIxVhccgmVUTSOaE/SO1xcFI92VvUj5cBUj1d3h+9cXGCO9U/SocV/qz8VAtJKUjKz8pI9GPVG8+Jdu9ASn4FJNVRNDmpJ6znpLCjGpANEdnx0ySmdilcUeS2mXXqo2mWCjIlhEywXcFE2XCTrSS1nPSUVkVPUVwUj7VRQp9yQpMkpq1QmXd7R9VgxNWqGEpRCOISE5lbP06VcbuwCZW0geZOUjmibKuik/LuOhLAFZOcMNM+CEbcDYghkAh0hMAUUpIFnUpQUG0pcXAPNINZNdIPAFDFSA1xuXG6N7+J46KHo3MGqLvZfvvx1GRvyByvGvMc7gf2LKjSIzrgpEl3AXFyhbBrcKAcWbVwi8Z6DUYZuVI2BiCgqXDCsDGAZ8DFI7EAXEzIJNgZoDOAZ6lnAY56QAZ5IXwvM2shm8D+w0GGrljc9S0tkZcJ090jgGMAyXDAvXDCFGTYyQANifoHLYLdcMC6UgFwwvAMUdtkpIAwhfrqASlAcxJ1Ul8G99L2SloW1pfMXwpfaT4N7dL4CvlwwMDA1pgIHvpgdL+CvgFxyqYPBSgxeFfABvTDaYSG2KX+AOKYlS96YUBJQBzTF6X7TFAJIBJKY4ffQxfS83O1cciumBUximKUvMhUBNCmT0x2mR0vqmWUwimUUy+mAUzGmHEKoCS0wambUxOmaUwymd0zOmcRp6mQghemg0xamf0y6mlxyMbpo9MipnFMgppdNEkpKE8podL4pqNMrFj9MtpplNRNulNPpfEZIjMlNTpf1Nepq1MmpmVNIk9VMlpflNMk9VNjptNNEk9VNbpq9NlptQElAGlNgpiknqpnVNxpm8nqpn1N6pngBfk9VMRprlL+k9VNGpv1NAk9VNKpw9NmjMlwwMDAwpuwYvjeFNoprFNEjeFNspydL4jeFN1xubJTN43hTdacHTFI3hTeac3Tf43hTfadHTQI3hTgqcXTTI3hThqdPTVwiN4U4qnX06ynG049cML8YkpqVOfpyEZkpy1NypokYMpr9O6AL9PAp3tM3p4FOapttL4p4FOep1dO/pnNO2p4FOmp5NL+p4FOqp2dPOjH9PVxuY1T2qadTzaeVGZKclTvqe/Glqe5TyKcvT1JIXHI9ynRU9OmKSd2npU+emKRcXHp4NPepf1Pyp4tN/p+VPmp8VP1pulO2kbNPhpm8jZp+9NBcJGzT+qgDT/aeFI2afXT8AxfI2affT+6YpI2aetT7KgaBJaddUFAC/I2adlUGXCL6092nr0vioO1AXG5v9QdqAdNIqDtQGqEdPpqBMaPp/0ZkqB9QHi41Qti4lQyqXHLUDKgzHRKcdUK5PLULTCPUPKhRUBJFnUPKgXUEKlxuxduoeVBOobRsqoL1XHKLNtPzqD9L+qJtQlpplRNqH9NIqJtPMqJ9MUqJtRDpm9RNqF9N/qJtRIqIgBfqJtRLqMdRNqGtRnp2tPCLNtO5p+lRap3lO2qNtRVqKdQqqN4YvqNtRcqMFQuqOUZkqMVRdjVlR9jJtR9kpNSEqEVNXDAr5UTqgxVcImopU0SpE1HSpHASWma1Hel/xoKnbVImov1IipJVGJLbgSWne1J2MG0wepQVFh0PpeSnn0zGpQVA+pQVJxLW1BapRVK2P2VK9z4VGum41J2o3U2SpbVJ+pWyAapZVKaO21L1L6VCypUVLupVVLupWVLOoZ1MOpkVGmpO1IWplVKaod1M+pg1D2ppJiyOiU/qpm1KRN81LOM51MCprVEapqnNCOiVMepoVGapm07IARgGmNLR3qVRgCepzje+p0xpaLiyXHJjatSdjJFTeqcUdZqfXDBu4wbUuqlnF7an2Ac5FNVAYxLVBIxcclQapyVMGMXVQapmVK2OTVQSOXVRXG6f1Smi51UQqbVTuqh1RDqTsZdqiFUJqa0XxqiFUNqWcYkqgkXaqktTYqVsXFzapLVGqpTUxapHVHqnFGdKpLVIqlNGDKoJHlwiqb1ROpgxkeqb1RepOxeGqb1S6qa1TCp+Rd+qb1TSpgxcXHqgkYSqpdU6qa0X4qpdU+qVsZ+qpdVCqpNVEqgUXkqpdVIqa0X1qgkXFqr9VOqcUXTqr9VSqWcXMqr9VWqrtVZcJMXVX6q5U4izbVBIxlVcXKqxVPyMW1XKqzVKaNm1XFyqtVVwqtkZoquVVvA3YV8qgNMfqwsdEqw9Uoc+XDBJKryl9JQfVh6r7Vg6aFU4aslU5ktaBJKsFFxcOoPVKWrHVLerOJixCeVXWrNVYpLySjirCx5SrT1ZGrNVVhCeVZarF1IOrKRcXDqZ1S1qy9TRq2lWLqalW3q0sdKqwsctq3tUsq3FWqqddW9q11W7qzMgGqHNW6qx1T6q2MgGq0UgGq0lXFy6sbVoI2LVhYupV1quLVxcurj1Q+rm1RGru1c+qK1d2rpnNCO21cCrS1Ryru1ayqQVd2rj1Vwkq5sbeqwtUmq99XRq0FUqq99Xmqx0cFxuvjT1gBGB8AQXJ5ZOlU26tLIGqnhV/gOZWAIzMlt48pV/KwMBrpPLXCRCsFVTKr31ceqbVc2qcVharn1TysLVeOrB1UCsLVdcbjXdWFqo1YWq49VKq5tVMrE9XFz6qhWJ6w5GK6vxVoIwXVhYwVWMquzWMKuPG46sLVZKubIHKxzWL6vJF4KxzVrKrjVzarnWRKufVd6yJWLYybWPqsHH96sLVgKyJVmaXnVAZKTVopKTV9DmhJSaxbJSayYGnIzxWVKsnVxcpMWSUmsa1lmpY1bGTy1cXJqXCWtk8tPhS29YArKlS8rNFS/rOdZdk8tWqk8tVYk8tZlA3cnlrKVWzrNbnwMI9ZurNlW5rQKXkMI9ZYrPtW+rNFTdrRtZ4jCNZUjG1aSqXHLKzTmrE6KVrDbgKPOunZUrGp6BN855YtNySQsgp3zEB1wwlzpGegTwyehcboWnfKoWnHM8sAJSvSVK08sXBwfUXRKm9UYE6LUz9a0UjIlqos6juVkCrrVak75eBzw1nli3SUoM8sVNYBLXbk8SXFyjQia2cpP1gXPF55BRiHV6qKJ4vOW56BMaCQOsVIiupFZ3zRZKDDW4ZwnPP3YSqHFGNO+VObPTnbe7E63VNqp6BWr56BPVHYdPVpW/XHLOdco9wkDKkmZUzZqc8O/2ebSzCYAS1qtwS2FYVTmabbKzha1cbo1la01vm8M1XG5oVN4VhuqmpoVWoK4SrHaAgv06C67RFnOugZ5/XFxwPsEb0kzTOqaLKfGtTz1ua31qpVP1qya31q6eDqp+tYqkeangEmWUrNya31rWtfEpatgVrpR01xdWUqJWtb1ztXLKOithzW+tiywhVP1sig9Vz5XeKm6tmzW+tlxc8FX3ZHYrkk1cXK4pXUK2fPFK6xW0pmw7NJivNfZwTNb507XYpjdMaQ/9W35ibXTJ5lNlgFwiu7CbDgFCur12qbRkk+dAzadTwTQp2JKXWu8VvB27XCQprvE1aWMhHZm1tKKdvc6MluruElxcUvkq31NEppLOd1wkmznmdFPBXG7hlEdm8lDUm8buyri039rjKqYJS830rUS3Vnn7uTXNdcimSteRmhdcXJq1Q7mVXCSTfx3ZVyyvTVxcurv05crmNazr0xKWrmtelVbVc4roNa5roda7r01e6rX9e8AFdbCnFs+kd0YfUeAE30rpSPtnHVdOoWs4/rrNHYr0yokruLunmKUxYnLE7fnLldjr01bcWI1dnWRM52rttFlUmc52ruc2lnQVd3nLld5r8tfrreCrdng9fwSFNeBoFbuynRLvBr30OJddysGR8cu3eBQBXCJjfNB1ZlX/g/7YXDCY0qc13mrIqX2UUGtuzJpSbL6JZhrZquAr8hWT0dujgqI+YzTG11crDFT9RG+u0u+gkgTH93Hur8kQgFNYkqjdYn19xWhutSY8zz+ZLzO6lC0Sw6FoAw6GsKlxbon9pwn1cAyDJSlTBcl5UFxyhX/bzbX/bS3PZp01sIoBuluAXFyWPcxU4H0U+HkgKf3noBdZZOer2KQ0NiNZPqUFGDPUHYwe16AWDgWaFW2p+lxuMDloOxOyNJiwwjCCwyvfYYFlXG4YyIPEsMieIYHKDsX80SmRG0D0eKJ4EQd9h1wkptYd3xsV/UFGjPrDkbIwTvYgUuMJurD+04Toadyl/KxVrD+9oQKXYjXtISvXrVwwR5j92Hd7thwV7tOklxzvCGxJIKMpknctDDQVAztwOMLO2KQ7QFxyXG4HGlxyCwethdpONRKBxoVGBxhcXNO5aGdQRSBpBgIBbAMQBjALputYpiWSKVxuiNhMaxTIF48UXoKBxjKiBhTdPDVG2BYZ7GSJSYM88UbGahizYgNNrGQQJwPhCbbGskSj4hLujo9CbWGyAdAD0vaF/U8UWfFYZ2e8OKXnEloWDFYZ2BAlbWas1CXlgBNGoS2lLB4CyQNcboOR/WH5pEbHd2YUg/QDcwS556zKMEfkuZEO2FqyXG4JMYY7SoHtljHBGAJcImlQ8ULIeRS0Q6yWzPuydJd604kV49HWDhA7bII04hDI0qGCg0qHlG1MGBxYsitsAeGYqvV7CMI4rFwiCOIGXG7MVsHAmsTbKBfaXCQBWVww7WRcXBHdhjabRDkaQrRIf7FkJabT7pYxj9vBmDZmBCDRXCLKElSQStYZ2mAGL7KHFD7KQz3EDmOT7KixvLI/ZQQQIf1rKrEzbH6DwxIO02kVEv+rLAvXQYKdD3ovZOALqBKmTW/sxe202rJu0Vwiyb2EkM3C68Z6A1RyfWXZjHtNGxXAYUPUN5FmDGlUuvWXyy82V6KpgVCy7BzWzDiGRmFg3ey+BzWzFvOpuU2FZjJWXZxbJ31jbhI0XRJot+3WZRerposDWoDFp1xymYsyycgRvVhsbEdhYCitmZfbCCiCisTyXDDoFQbE/ZrQX/ZsT5gf+WYmBWbEMWMQOOxEGnu8URPmAdwJUwILNvZwXDDkWcKY5ga5mJnuXDBccvZxhTMLEm0mKmbOO8xw8jZyXmOMz7OolxpgybUmeoBuXtqx+TtEAcjoUx7jpG9qXuM9v0wnZ5QcNZyTxCaD7OSHRWYm8d7PfFxuSyA2P2JYBCoDrC5mz4hFg/uWfiY52SGY52SMa0CJdlwiFkasR5oBeFxc6T39RYo37w8UWFAyWzoewbZcMIMG147goRqgWH4Rphi9NxASt83iFlg2hjSynMkoE8NcIjtC7Fxu3v1Y1xrRaHm5zCabRNaI2wJaHQIaGLwDbFxuS0OWie0Xmp8CHoaQcNgVksRgGG0XUxR/rgky0FWiO0fglZEDOLa0eweS0S2UsVdCbewTuFwkRoD4XHIQ4GwmQhaHWQgyXHK0qG1BkMWRsHfEWtg22FIa0JIdv9AlZLSM3cIV2l+ynFT0FTWmYGBCYdAd2Ue01WMV4VhL9lxytphcMK3YZ068+VxckbS+O07gqODE2nMMXlxujMx1p+S/Fp+tAh3RslZ3esRVoEZcIlwwVBktsSxeks4BXDCLzvaX6DIgBi/mmSDzws/gRVeeFi9cMMK88pbSxL7LNAY7XCLsSy1OWpoLDr3QTWPOu1JWTmWcWqYEd2qWwoo26x+vYQIctvd5zIjZ57sTi0tWrmxOP4Gxw2p0Mq2WtlQvW+1OpPsCsWp8MHQlICOwlIDindFcMPTTYKP4NUY8lrSDoFhAA1xu06LB7ZXLWkZcXC1tm7yzY2QyxHA1R7p2J0LfJ6I3e2uKDAEqJ5BM3EGqWnxJsWu0XG4tLkOiNrwEq7keC8drEpUtrxPXBY6pU9r6sPdr0QRdr8tfXCQHhQfaKwVHFfLXoBNbXoetrXoMCxtda9HROBGbXFz2v0Z8p6I/QojYFRnBC16QCM8VQqiJzI588ZnrQIoUrcL3Qq+lelAWFumeGFcHL1I/WyEDYhFCluG5E2vAidGgAicJKONlOngEG2bgcg+CN1xyXx0W7eJxtgdNYepcMCOx5Dd86VEmXDAFFsmBDkApCLUE9IbADjEZ8uuuhkxBW1B0wFwwnAKZ/WCHNtVcXGWRn7Z6eNLaU92ADnbViM+AVToeAZ7asb9UvMGHiM+XDj4eBGbbXG5xi2yAxStLKHy2XFx/jrTRoBMUR4+bVdiLswIMHMZAKPAqyWkeU5AlRqhcclJcJKmVQ7a2TNDdxPY7yWS17MS8Z+stXCQQbT/2bGjKnRSBijM/UKpZj1wwIik7fWVsc2V7aGVhZGVyKCJDb250ZW50LVR5cGU6IGltYWdlL2dpZiIpO3N3aXRjaCgkX0dFVFsiZmlsZSJdKXtjYXNlInBsdXMuZ2lmIjplY2hvIkdJRjg5YRJcMBJcMIFcMDAwMe7u7lwwXDCAmZmZXDBcMFwwIfkEAVwwXDABXDAsXDBcMFwwXDASXDASXDABAiGEj6nL7Q9NCPHMKim+b/qvKSAIcZUZoWWIte4jxPJMywVcMDsiO2JyZWFrO2Nhc2UiY3Jvc3MuZ2lmIjplY2hvIkdJRjg5YRJcMBJcMIFcMDAwMe7u7lwwXDCAmZmZXDBcMFwwIfkEAVwwXDABXDAsXDBcMFwwXDASXDASXDABAiOEj6nL7Q8jXG5h1kZvfnnDLoFfd2GU4THnsUruC0fCTNc2XVwwXDA7IjticmVhaztjYXNlInVwLmdpZiI6ZWNobyJHSUY4OWESXDASXDCBXDAwMDHu7u5cMFwwgJmZmVwwXDBcMCH5BAFcMFwwAVwwLFwwXDBcMFwwElwwElwwAQIghI+py+0PTQhRTlxu730T9J5hFTiKEXmaYcW2rlwwx/IcF1wwOyI7YnJlYWs7Y2FzZSJkb3duLmdpZiI6ZWNobyJHSUY4OWESXDASXDCBXDAwMDHu7u5cMFwwgJmZmVwwXDBcMCH5BAFcMFwwAVwwLFwwXDBcMFwwElwwElwwAQIghI+py+0PTQjxzCopvltX/lxcosdMJtmcHca2lVwwx/IcF1wwOyI7YnJlYWs7Y2FzZSJhcnJvdy5naWYiOmVjaG8iR0lGODlhCFwwXG5cMIBcMFwwgICA////IfkEAVwwXDABXDAsXDBcMFwwXDAIXDBcblwwXDACDwSCaZaxi56UEarTst67XDBcMDsiO2JyZWFrO319ZXhpdDt9aWYoJF9HRVRbInNjcmlwdCJdPT0idmVyc2lvbiIpeyRsZD1maWxlX29wZW5fbG9jayhnZXRfdGVtcF9kaXIoKS4iL2FkbWluZXIudmVyc2lvbiIpO2lmKCRsZClmaWxlX3dyaXRlX3VubG9jaygkbGQsc2VyaWFsaXplKGFycmF5KCJzaWduYXR1cmUiPT4kX1BPU1RbInNpZ25hdHVyZSJdLCJ2ZXJzaW9uIj0+JF9QT1NUWyJ2ZXJzaW9uIl0pKSk7ZXhpdDt9Z2xvYmFsJGIsJGcsJG0sJGljLCRxYywkX2MsJG4sJG5kLCR0ZCwkYmEsJFRkLCR5LCRjYSwkbWUsJHBmLCRiZywkR2gsJHlkLCRuaSwkdGksJFUsJEhpLCRpYTtpZighJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl09JF9TRVJWRVJbIk9SSUdfUEFUSF9JTkZPIl07aWYoIXN0cnBvcygkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSwnPycpJiYkX1NFUlZFUlsiUVVFUllfU1RSSU5HIl0hPSIiKSRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLj0iPyRfU0VSVkVSW1FVRVJZX1NUUklOR10iO2lmKCRfU0VSVkVSWyJIVFRQX1hfRk9SV0FSREVEX1BSRUZJWCJdKSRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdPSRfU0VSVkVSWyJIVFRQX1hfRk9SV0FSREVEX1BSRUZJWCJdLiRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOyRiYT0oJF9TRVJWRVJbIkhUVFBTIl0mJnN0cmNhc2VjbXAoJF9TRVJWRVJbIkhUVFBTIl0sIm9mZiIpKXx8aW5pX2Jvb2woInNlc3Npb24uY29va2llX3NlY3VyZSIpO0Bpbmlfc2V0KCJzZXNzaW9uLnVzZV90cmFuc19zaWQiLGZhbHNlKTtpZighZGVmaW5lZCgiU0lEIikpe3Nlc3Npb25fY2FjaGVfbGltaXRlcigiIik7c2Vzc2lvbl9uYW1lKCJhZG1pbmVyX3NpZCIpOyRPZj1hcnJheSgwLHByZWdfcmVwbGFjZSgnflw/Lip+JywnJywkX1NFUlZFUlsiUkVRVUVTVF9VUkkiXSksIiIsJGJhKTtpZih2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sJzUuMi4wJyk+PTApJE9mW109dHJ1ZTtjYWxsX3VzZXJfZnVuY19hcnJheSgnc2Vzc2lvbl9zZXRfY29va2llX3BhcmFtcycsJE9mKTtzZXNzaW9uX3N0YXJ0KCk7fXJlbW92ZV9zbGFzaGVzKGFycmF5KCYkX0dFVCwmJF9QT1NULCYkX0NPT0tJRSksJFljKTtpZihmdW5jdGlvbl9leGlzdHMoImdldF9tYWdpY19xdW90ZXNfcnVudGltZSIpJiZnZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoKSlzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoZmFsc2UpO0BzZXRfdGltZV9saW1pdCgwKTtAaW5pX3NldCgiemVuZC56ZTFfY29tcGF0aWJpbGl0eV9tb2RlIixmYWxzZSk7QGluaV9zZXQoInByZWNpc2lvbiIsMTUpO2Z1bmN0aW9uCmdldF9sYW5nKCl7cmV0dXJuJ2VuJzt9ZnVuY3Rpb24KbGFuZygkc2ksJGVmPW51bGwpe2lmKGlzX2FycmF5KCRzaSkpeyRlZz0oJGVmPT0xPzA6MSk7JHNpPSRzaVskZWddO30kc2k9c3RyX3JlcGxhY2UoIiVkIiwiJXMiLCRzaSk7JGVmPWZvcm1hdF9udW1iZXIoJGVmKTtyZXR1cm4Kc3ByaW50Zigkc2ksJGVmKTt9aWYoZXh0ZW5zaW9uX2xvYWRlZCgncGRvJykpe2NsYXNzCk1pbl9QRE97dmFyJF9yZXN1bHQsJHNlcnZlcl9pbmZvLCRhZmZlY3RlZF9yb3dzLCRlcnJubywkZXJyb3IsJHBkbztmdW5jdGlvbgpfX2NvbnN0cnVjdCgpe2dsb2JhbCRiOyRlZz1hcnJheV9zZWFyY2goIlNRTCIsJGItPm9wZXJhdG9ycyk7aWYoJGVnIT09ZmFsc2UpdW5zZXQoJGItPm9wZXJhdG9yc1skZWddKTt9ZnVuY3Rpb24KZHNuKCRuYywkViwkRiwkeGY9YXJyYXkoKSl7JHhmW1BETzo6QVRUUl9FUlJNT0RFXT1QRE86OkVSUk1PREVfU0lMRU5UOyR4ZltQRE86OkFUVFJfU1RBVEVNRU5UX0NMQVNTXT1hcnJheSgnTWluX1BET1N0YXRlbWVudCcpO3RyeXskdGhpcy0+cGRvPW5ldwpQRE8oJG5jLCRWLCRGLCR4Zik7fWNhdGNoKEV4Y2VwdGlvbiRGYyl7YXV0aF9lcnJvcihoKCRGYy0+Z2V0TWVzc2FnZSgpKSk7fSR0aGlzLT5zZXJ2ZXJfaW5mbz1AJHRoaXMtPnBkby0+Z2V0QXR0cmlidXRlKFBETzo6QVRUUl9TRVJWRVJfVkVSU0lPTik7fWZ1bmN0aW9uCnF1b3RlKCRQKXtyZXR1cm4kdGhpcy0+cGRvLT5xdW90ZSgkUCk7fWZ1bmN0aW9uCnF1ZXJ5KCRHLCRCaT1mYWxzZSl7JEg9JHRoaXMtPnBkby0+cXVlcnkoJEcpOyR0aGlzLT5lcnJvcj0iIjtpZighJEgpe2xpc3QoLCR0aGlzLT5lcnJubywkdGhpcy0+ZXJyb3IpPSR0aGlzLT5wZG8tPmVycm9ySW5mbygpO2lmKCEkdGhpcy0+ZXJyb3IpJHRoaXMtPmVycm9yPSdVbmtub3duIGVycm9yLic7cmV0dXJuCmZhbHNlO30kdGhpcy0+c3RvcmVfcmVzdWx0KCRIKTtyZXR1cm4kSDt9ZnVuY3Rpb24KbXVsdGlfcXVlcnkoJEcpe3JldHVybiR0aGlzLT5fcmVzdWx0PSR0aGlzLT5xdWVyeSgkRyk7fWZ1bmN0aW9uCnN0b3JlX3Jlc3VsdCgkSD1udWxsKXtpZighJEgpeyRIPSR0aGlzLT5fcmVzdWx0O2lmKCEkSClyZXR1cm4KZmFsc2U7fWlmKCRILT5jb2x1bW5Db3VudCgpKXskSC0+bnVtX3Jvd3M9JEgtPnJvd0NvdW50KCk7cmV0dXJuJEg7fSR0aGlzLT5hZmZlY3RlZF9yb3dzPSRILT5yb3dDb3VudCgpO3JldHVybgp0cnVlO31mdW5jdGlvbgpuZXh0X3Jlc3VsdCgpe2lmKCEkdGhpcy0+X3Jlc3VsdClyZXR1cm4KZmFsc2U7JHRoaXMtPl9yZXN1bHQtPl9vZmZzZXQ9MDtyZXR1cm5AJHRoaXMtPl9yZXN1bHQtPm5leHRSb3dzZXQoKTt9ZnVuY3Rpb24KcmVzdWx0KCRHLCRvPTApeyRIPSR0aGlzLT5xdWVyeSgkRyk7aWYoISRIKXJldHVybgpmYWxzZTskSj0kSC0+ZmV0Y2goKTtyZXR1cm4kSlskb107fX1jbGFzcwpNaW5fUERPU3RhdGVtZW50CmV4dGVuZHMKUERPU3RhdGVtZW50e3ZhciRfb2Zmc2V0PTAsJG51bV9yb3dzO2Z1bmN0aW9uCmZldGNoX2Fzc29jKCl7cmV0dXJuJHRoaXMtPmZldGNoKFBETzo6RkVUQ0hfQVNTT0MpO31mdW5jdGlvbgpmZXRjaF9yb3coKXtyZXR1cm4kdGhpcy0+ZmV0Y2goUERPOjpGRVRDSF9OVU0pO31mdW5jdGlvbgpmZXRjaF9maWVsZCgpeyRKPShvYmplY3QpJHRoaXMtPmdldENvbHVtbk1ldGEoJHRoaXMtPl9vZmZzZXQrKyk7JEotPm9yZ3RhYmxlPSRKLT50YWJsZTskSi0+b3JnbmFtZT0kSi0+bmFtZTskSi0+Y2hhcnNldG5yPShpbl9hcnJheSgiYmxvYiIsKGFycmF5KSRKLT5mbGFncyk/NjM6MCk7cmV0dXJuJEo7fX19JGljPWFycmF5KCk7ZnVuY3Rpb24KYWRkX2RyaXZlcigkdSwkRCl7Z2xvYmFsJGljOyRpY1skdV09JEQ7fWNsYXNzCk1pbl9TUUx7dmFyJF9jb25uO2Z1bmN0aW9uCl9fY29uc3RydWN0KCRnKXskdGhpcy0+X2Nvbm49JGc7fWZ1bmN0aW9uCnNlbGVjdCgkUSwkTCwkWiwkcWQsJHpmPWFycmF5KCksJF89MSwkRT0wLCRtZz1mYWxzZSl7Z2xvYmFsJGIsJHk7JGFlPShjb3VudCgkcWQpPGNvdW50KCRMKSk7JEc9JGItPnNlbGVjdFF1ZXJ5QnVpbGQoJEwsJFosJHFkLCR6ZiwkXywkRSk7aWYoISRHKSRHPSJTRUxFQ1QiLmxpbWl0KCgkX0dFVFsicGFnZSJdIT0ibGFzdCImJiRfIT0iIiYmJHFkJiYkYWUmJiR5PT0ic3FsIj8iU1FMX0NBTENfRk9VTkRfUk9XUyAiOiIiKS5pbXBsb2RlKCIsICIsJEwpLiJcbkZST00gIi50YWJsZSgkUSksKCRaPyJcbldIRVJFICIuaW1wbG9kZSgiIEFORCAiLCRaKToiIikuKCRxZCYmJGFlPyJcbkdST1VQIEJZICIuaW1wbG9kZSgiLCAiLCRxZCk6IiIpLigkemY/IlxuT1JERVIgQlkgIi5pbXBsb2RlKCIsICIsJHpmKToiIiksKCRfIT0iIj8rJF86bnVsbCksKCRFPyRfKiRFOjApLCJcbiIpOyRDaD1taWNyb3RpbWUodHJ1ZSk7JEk9JHRoaXMtPl9jb25uLT5xdWVyeSgkRyk7aWYoJG1nKWVjaG8kYi0+c2VsZWN0UXVlcnkoJEcsJENoLCEkSSk7cmV0dXJuJEk7fWZ1bmN0aW9uCmRlbGV0ZSgkUSwkd2csJF89MCl7JEc9IkZST00gIi50YWJsZSgkUSk7cmV0dXJuCnF1ZXJpZXMoIkRFTEVURSIuKCRfP2xpbWl0MSgkUSwkRywkd2cpOiIgJEckd2ciKSk7fWZ1bmN0aW9uCnVwZGF0ZSgkUSwkTiwkd2csJF89MCwkaGg9IlxuIil7JFRpPWFycmF5KCk7Zm9yZWFjaCgkTgphcyR6PT4kWCkkVGlbXT0iJHogPSAkWCI7JEc9dGFibGUoJFEpLiIgU0VUJGhoIi5pbXBsb2RlKCIsJGhoIiwkVGkpO3JldHVybgpxdWVyaWVzKCJVUERBVEUiLigkXz9saW1pdDEoJFEsJEcsJHdnLCRoaCk6IiAkRyR3ZyIpKTt9ZnVuY3Rpb24KaW5zZXJ0KCRRLCROKXtyZXR1cm4KcXVlcmllcygiSU5TRVJUIElOVE8gIi50YWJsZSgkUSkuKCROPyIgKCIuaW1wbG9kZSgiLCAiLGFycmF5X2tleXMoJE4pKS4iKVxuVkFMVUVTICgiLmltcGxvZGUoIiwgIiwkTikuIikiOiIgREVGQVVMVCBWQUxVRVMiKSk7fWZ1bmN0aW9uCmluc2VydFVwZGF0ZSgkUSwkSywka2cpe3JldHVybgpmYWxzZTt9ZnVuY3Rpb24KYmVnaW4oKXtyZXR1cm4KcXVlcmllcygiQkVHSU4iKTt9ZnVuY3Rpb24KY29tbWl0KCl7cmV0dXJuCnF1ZXJpZXMoIkNPTU1JVCIpO31mdW5jdGlvbgpyb2xsYmFjaygpe3JldHVybgpxdWVyaWVzKCJST0xMQkFDSyIpO31mdW5jdGlvbgpzbG93UXVlcnkoJEcsJGVpKXt9ZnVuY3Rpb24KY29udmVydFNlYXJjaCgkdiwkWCwkbyl7cmV0dXJuJHY7fWZ1bmN0aW9uCnZhbHVlKCRYLCRvKXtyZXR1cm4obWV0aG9kX2V4aXN0cygkdGhpcy0+X2Nvbm4sJ3ZhbHVlJyk/JHRoaXMtPl9jb25uLT52YWx1ZSgkWCwkbyk6KGlzX3Jlc291cmNlKCRYKT9zdHJlYW1fZ2V0X2NvbnRlbnRzKCRYKTokWCkpO31mdW5jdGlvbgpxdW90ZUJpbmFyeSgkWGcpe3JldHVybgpxKCRYZyk7fWZ1bmN0aW9uCndhcm5pbmdzKCl7cmV0dXJuJyc7fWZ1bmN0aW9uCnRhYmxlSGVscCgkRCl7fX0kaWNbInNxbGl0ZSJdPSJTUUxpdGUgMyI7JGljWyJzcWxpdGUyIl09IlNRTGl0ZSAyIjtpZihpc3NldCgkX0dFVFsic3FsaXRlIl0pfHxpc3NldCgkX0dFVFsic3FsaXRlMiJdKSl7ZGVmaW5lKCJEUklWRVIiLChpc3NldCgkX0dFVFsic3FsaXRlIl0pPyJzcWxpdGUiOiJzcWxpdGUyIikpO2lmKGNsYXNzX2V4aXN0cyhpc3NldCgkX0dFVFsic3FsaXRlIl0pPyJTUUxpdGUzIjoiU1FMaXRlRGF0YWJhc2UiKSl7aWYoaXNzZXQoJF9HRVRbInNxbGl0ZSJdKSl7Y2xhc3MKTWluX1NRTGl0ZXt2YXIkZXh0ZW5zaW9uPSJTUUxpdGUzIiwkc2VydmVyX2luZm8sJGFmZmVjdGVkX3Jvd3MsJGVycm5vLCRlcnJvciwkX2xpbms7ZnVuY3Rpb24KX19jb25zdHJ1Y3QoJHEpeyR0aGlzLT5fbGluaz1uZXcKU1FMaXRlMygkcSk7JFdpPSR0aGlzLT5fbGluay0+dmVyc2lvbigpOyR0aGlzLT5zZXJ2ZXJfaW5mbz0kV2lbInZlcnNpb25TdHJpbmciXTt9ZnVuY3Rpb24KcXVlcnkoJEcpeyRIPUAkdGhpcy0+X2xpbmstPnF1ZXJ5KCRHKTskdGhpcy0+ZXJyb3I9IiI7aWYoISRIKXskdGhpcy0+ZXJybm89JHRoaXMtPl9saW5rLT5sYXN0RXJyb3JDb2RlKCk7JHRoaXMtPmVycm9yPSR0aGlzLT5fbGluay0+bGFzdEVycm9yTXNnKCk7cmV0dXJuCmZhbHNlO31lbHNlaWYoJEgtPm51bUNvbHVtbnMoKSlyZXR1cm4KbmV3Ck1pbl9SZXN1bHQoJEgpOyR0aGlzLT5hZmZlY3RlZF9yb3dzPSR0aGlzLT5fbGluay0+Y2hhbmdlcygpO3JldHVybgp0cnVlO31mdW5jdGlvbgpxdW90ZSgkUCl7cmV0dXJuKGlzX3V0ZjgoJFApPyInIi4kdGhpcy0+X2xpbmstPmVzY2FwZVN0cmluZygkUCkuIiciOiJ4JyIucmVzZXQodW5wYWNrKCdIKicsJFApKS4iJyIpO31mdW5jdGlvbgpzdG9yZV9yZXN1bHQoKXtyZXR1cm4kdGhpcy0+X3Jlc3VsdDt9ZnVuY3Rpb24KcmVzdWx0KCRHLCRvPTApeyRIPSR0aGlzLT5xdWVyeSgkRyk7aWYoIWlzX29iamVjdCgkSCkpcmV0dXJuCmZhbHNlOyRKPSRILT5fcmVzdWx0LT5mZXRjaEFycmF5KCk7cmV0dXJuJEpbJG9dO319Y2xhc3MKTWluX1Jlc3VsdHt2YXIkX3Jlc3VsdCwkX29mZnNldD0wLCRudW1fcm93cztmdW5jdGlvbgpfX2NvbnN0cnVjdCgkSCl7JHRoaXMtPl9yZXN1bHQ9JEg7fWZ1bmN0aW9uCmZldGNoX2Fzc29jKCl7cmV0dXJuJHRoaXMtPl9yZXN1bHQtPmZldGNoQXJyYXkoU1FMSVRFM19BU1NPQyk7fWZ1bmN0aW9uCmZldGNoX3Jvdygpe3JldHVybiR0aGlzLT5fcmVzdWx0LT5mZXRjaEFycmF5KFNRTElURTNfTlVNKTt9ZnVuY3Rpb24KZmV0Y2hfZmllbGQoKXskZT0kdGhpcy0+X29mZnNldCsrOyRUPSR0aGlzLT5fcmVzdWx0LT5jb2x1bW5UeXBlKCRlKTtyZXR1cm4ob2JqZWN0KWFycmF5KCJuYW1lIj0+JHRoaXMtPl9yZXN1bHQtPmNvbHVtbk5hbWUoJGUpLCJ0eXBlIj0+JFQsImNoYXJzZXRuciI9PigkVD09U1FMSVRFM19CTE9CPzYzOjApLCk7fWZ1bmN0aW9uCl9fZGVzY3RydWN0KCl7cmV0dXJuJHRoaXMtPl9yZXN1bHQtPmZpbmFsaXplKCk7fX19ZWxzZXtjbGFzcwpNaW5fU1FMaXRle3ZhciRleHRlbnNpb249IlNRTGl0ZSIsJHNlcnZlcl9pbmZvLCRhZmZlY3RlZF9yb3dzLCRlcnJvciwkX2xpbms7ZnVuY3Rpb24KX19jb25zdHJ1Y3QoJHEpeyR0aGlzLT5zZXJ2ZXJfaW5mbz1zcWxpdGVfbGlidmVyc2lvbigpOyR0aGlzLT5fbGluaz1uZXcKU1FMaXRlRGF0YWJhc2UoJHEpO31mdW5jdGlvbgpxdWVyeSgkRywkQmk9ZmFsc2UpeyRQZT0oJEJpPyJ1bmJ1ZmZlcmVkUXVlcnkiOiJxdWVyeSIpOyRIPUAkdGhpcy0+X2xpbmstPiRQZSgkRyxTUUxJVEVfQk9USCwkbik7JHRoaXMtPmVycm9yPSIiO2lmKCEkSCl7JHRoaXMtPmVycm9yPSRuO3JldHVybgpmYWxzZTt9ZWxzZWlmKCRIPT09dHJ1ZSl7JHRoaXMtPmFmZmVjdGVkX3Jvd3M9JHRoaXMtPmNoYW5nZXMoKTtyZXR1cm4KdHJ1ZTt9cmV0dXJuCm5ldwpNaW5fUmVzdWx0KCRIKTt9ZnVuY3Rpb24KcXVvdGUoJFApe3JldHVybiInIi5zcWxpdGVfZXNjYXBlX3N0cmluZygkUCkuIiciO31mdW5jdGlvbgpzdG9yZV9yZXN1bHQoKXtyZXR1cm4kdGhpcy0+X3Jlc3VsdDt9ZnVuY3Rpb24KcmVzdWx0KCRHLCRvPTApeyRIPSR0aGlzLT5xdWVyeSgkRyk7aWYoIWlzX29iamVjdCgkSCkpcmV0dXJuCmZhbHNlOyRKPSRILT5fcmVzdWx0LT5mZXRjaCgpO3JldHVybiRKWyRvXTt9fWNsYXNzCk1pbl9SZXN1bHR7dmFyJF9yZXN1bHQsJF9vZmZzZXQ9MCwkbnVtX3Jvd3M7ZnVuY3Rpb24KX19jb25zdHJ1Y3QoJEgpeyR0aGlzLT5fcmVzdWx0PSRIO2lmKG1ldGhvZF9leGlzdHMoJEgsJ251bVJvd3MnKSkkdGhpcy0+bnVtX3Jvd3M9JEgtPm51bVJvd3MoKTt9ZnVuY3Rpb24KZmV0Y2hfYXNzb2MoKXskSj0kdGhpcy0+X3Jlc3VsdC0+ZmV0Y2goU1FMSVRFX0FTU09DKTtpZighJEopcmV0dXJuCmZhbHNlOyRJPWFycmF5KCk7Zm9yZWFjaCgkSgphcyR6PT4kWCkkSVtpZGZfdW5lc2NhcGUoJHopXT0kWDtyZXR1cm4kSTt9ZnVuY3Rpb24KZmV0Y2hfcm93KCl7cmV0dXJuJHRoaXMtPl9yZXN1bHQtPmZldGNoKFNRTElURV9OVU0pO31mdW5jdGlvbgpmZXRjaF9maWVsZCgpeyREPSR0aGlzLT5fcmVzdWx0LT5maWVsZE5hbWUoJHRoaXMtPl9vZmZzZXQrKyk7JFpmPScoXFsuKl18Iig/OlteIl18IiIpKiJ8KC4rKSknO2lmKHByZWdfbWF0Y2goIn5eKCRaZlxcLik/JFpmXCR+IiwkRCwkQykpeyRRPSgkQ1szXSE9IiI/JENbM106aWRmX3VuZXNjYXBlKCRDWzJdKSk7JEQ9KCRDWzVdIT0iIj8kQ1s1XTppZGZfdW5lc2NhcGUoJENbNF0pKTt9cmV0dXJuKG9iamVjdClhcnJheSgibmFtZSI9PiRELCJvcmduYW1lIj0+JEQsIm9yZ3RhYmxlIj0+JFEsKTt9fX19ZWxzZWlmKGV4dGVuc2lvbl9sb2FkZWQoInBkb19zcWxpdGUiKSl7Y2xhc3MKTWluX1NRTGl0ZQpleHRlbmRzCk1pbl9QRE97dmFyJGV4dGVuc2lvbj0iUERPX1NRTGl0ZSI7ZnVuY3Rpb24KX19jb25zdHJ1Y3QoJHEpeyR0aGlzLT5kc24oRFJJVkVSLiI6JHEiLCIiLCIiKTt9fX1pZihjbGFzc19leGlzdHMoIk1pbl9TUUxpdGUiKSl7Y2xhc3MKTWluX0RCCmV4dGVuZHMKTWluX1NRTGl0ZXtmdW5jdGlvbgpfX2NvbnN0cnVjdCgpe3BhcmVudDo6X19jb25zdHJ1Y3QoIjptZW1vcnk6Iik7JHRoaXMtPnF1ZXJ5KCJQUkFHTUEgZm9yZWlnbl9rZXlzID0gMSIpO31mdW5jdGlvbgpzZWxlY3RfZGIoJHEpe2lmKGlzX3JlYWRhYmxlKCRxKSYmJHRoaXMtPnF1ZXJ5KCJBVFRBQ0ggIi4kdGhpcy0+cXVvdGUocHJlZ19tYXRjaCgifiheWy9cXFxcXXw6KX4iLCRxKT8kcTpkaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSkuIi8kcSIpLiIgQVMgYSIpKXtwYXJlbnQ6Ol9fY29uc3RydWN0KCRxKTskdGhpcy0+cXVlcnkoIlBSQUdNQSBmb3JlaWduX2tleXMgPSAxIik7JHRoaXMtPnF1ZXJ5KCJQUkFHTUEgYnVzeV90aW1lb3V0ID0gNTAwIik7cmV0dXJuCnRydWU7fXJldHVybgpmYWxzZTt9ZnVuY3Rpb24KbXVsdGlfcXVlcnkoJEcpe3JldHVybiR0aGlzLT5fcmVzdWx0PSR0aGlzLT5xdWVyeSgkRyk7fWZ1bmN0aW9uCm5leHRfcmVzdWx0KCl7cmV0dXJuCmZhbHNlO319fWNsYXNzCk1pbl9Ecml2ZXIKZXh0ZW5kcwpNaW5fU1FMe2Z1bmN0aW9uCmluc2VydFVwZGF0ZSgkUSwkSywka2cpeyRUaT1hcnJheSgpO2ZvcmVhY2goJEsKYXMkTikkVGlbXT0iKCIuaW1wbG9kZSgiLCAiLCROKS4iKSI7cmV0dXJuCnF1ZXJpZXMoIlJFUExBQ0UgSU5UTyAiLnRhYmxlKCRRKS4iICgiLmltcGxvZGUoIiwgIixhcnJheV9rZXlzKHJlc2V0KCRLKSkpLiIpIFZBTFVFU1xuIi5pbXBsb2RlKCIsXG4iLCRUaSkpO31mdW5jdGlvbgp0YWJsZUhlbHAoJEQpe2lmKCREPT0ic3FsaXRlX3NlcXVlbmNlIilyZXR1cm4iZmlsZWZvcm1hdDIuaHRtbCNzZXF0YWIiO2lmKCREPT0ic3FsaXRlX21hc3RlciIpcmV0dXJuImZpbGVmb3JtYXQyLmh0bWwjJEQiO319ZnVuY3Rpb24KaWRmX2VzY2FwZSgkdil7cmV0dXJuJyInLnN0cl9yZXBsYWNlKCciJywnIiInLCR2KS4nIic7fWZ1bmN0aW9uCnRhYmxlKCR2KXtyZXR1cm4KaWRmX2VzY2FwZSgkdik7fWZ1bmN0aW9uCmNvbm5lY3QoKXtnbG9iYWwkYjtsaXN0KCwsJEYpPSRiLT5jcmVkZW50aWFscygpO2lmKCRGIT0iIilyZXR1cm4nRGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBwYXNzd29yZC4nO3JldHVybgpuZXcKTWluX0RCO31mdW5jdGlvbgpnZXRfZGF0YWJhc2VzKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmxpbWl0KCRHLCRaLCRfLCRoZj0wLCRoaD0iICIpe3JldHVybiIgJEckWiIuKCRfIT09bnVsbD8kaGguIkxJTUlUICRfIi4oJGhmPyIgT0ZGU0VUICRoZiI6IiIpOiIiKTt9ZnVuY3Rpb24KbGltaXQxKCRRLCRHLCRaLCRoaD0iXG4iKXtnbG9iYWwkZztyZXR1cm4ocHJlZ19tYXRjaCgnfl5JTlRPficsJEcpfHwkZy0+cmVzdWx0KCJTRUxFQ1Qgc3FsaXRlX2NvbXBpbGVvcHRpb25fdXNlZCgnRU5BQkxFX1VQREFURV9ERUxFVEVfTElNSVQnKSIpP2xpbWl0KCRHLCRaLDEsMCwkaGgpOiIgJEcgV0hFUkUgcm93aWQgPSAoU0VMRUNUIHJvd2lkIEZST00gIi50YWJsZSgkUSkuJFouJGhoLiJMSU1JVCAxKSIpO31mdW5jdGlvbgpkYl9jb2xsYXRpb24oJGwsJGxiKXtnbG9iYWwkZztyZXR1cm4kZy0+cmVzdWx0KCJQUkFHTUEgZW5jb2RpbmciKTt9ZnVuY3Rpb24KZW5naW5lcygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgpsb2dnZWRfdXNlcigpe3JldHVybgpnZXRfY3VycmVudF91c2VyKCk7fWZ1bmN0aW9uCnRhYmxlc19saXN0KCl7cmV0dXJuCmdldF9rZXlfdmFscygiU0VMRUNUIG5hbWUsIHR5cGUgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgSU4gKCd0YWJsZScsICd2aWV3JykgT1JERVIgQlkgKG5hbWUgPSAnc3FsaXRlX3NlcXVlbmNlJyksIG5hbWUiKTt9ZnVuY3Rpb24KY291bnRfdGFibGVzKCRrKXtyZXR1cm4KYXJyYXkoKTt9ZnVuY3Rpb24KdGFibGVfc3RhdHVzKCREPSIiKXtnbG9iYWwkZzskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCBuYW1lIEFTIE5hbWUsIHR5cGUgQVMgRW5naW5lLCAncm93aWQnIEFTIE9pZCwgJycgQVMgQXV0b19pbmNyZW1lbnQgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgSU4gKCd0YWJsZScsICd2aWV3JykgIi4oJEQhPSIiPyJBTkQgbmFtZSA9ICIucSgkRCk6Ik9SREVSIEJZIG5hbWUiKSlhcyRKKXskSlsiUm93cyJdPSRnLT5yZXN1bHQoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICIuaWRmX2VzY2FwZSgkSlsiTmFtZSJdKSk7JElbJEpbIk5hbWUiXV09JEo7fWZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCAqIEZST00gc3FsaXRlX3NlcXVlbmNlIixudWxsLCIiKWFzJEopJElbJEpbIm5hbWUiXV1bIkF1dG9faW5jcmVtZW50Il09JEpbInNlcSJdO3JldHVybigkRCE9IiI/JElbJERdOiRJKTt9ZnVuY3Rpb24KaXNfdmlldygkUil7cmV0dXJuJFJbIkVuZ2luZSJdPT0idmlldyI7fWZ1bmN0aW9uCmZrX3N1cHBvcnQoJFIpe2dsb2JhbCRnO3JldHVybiEkZy0+cmVzdWx0KCJTRUxFQ1Qgc3FsaXRlX2NvbXBpbGVvcHRpb25fdXNlZCgnT01JVF9GT1JFSUdOX0tFWScpIik7fWZ1bmN0aW9uCmZpZWxkcygkUSl7Z2xvYmFsJGc7JEk9YXJyYXkoKTska2c9IiI7Zm9yZWFjaChnZXRfcm93cygiUFJBR01BIHRhYmxlX2luZm8oIi50YWJsZSgkUSkuIikiKWFzJEopeyREPSRKWyJuYW1lIl07JFQ9c3RydG9sb3dlcigkSlsidHlwZSJdKTskV2I9JEpbImRmbHRfdmFsdWUiXTskSVskRF09YXJyYXkoImZpZWxkIj0+JEQsInR5cGUiPT4ocHJlZ19tYXRjaCgnfmludH5pJywkVCk/ImludGVnZXIiOihwcmVnX21hdGNoKCd+Y2hhcnxjbG9ifHRleHR+aScsJFQpPyJ0ZXh0IjoocHJlZ19tYXRjaCgnfmJsb2J+aScsJFQpPyJibG9iIjoocHJlZ19tYXRjaCgnfnJlYWx8ZmxvYXxkb3VifmknLCRUKT8icmVhbCI6Im51bWVyaWMiKSkpKSwiZnVsbF90eXBlIj0+JFQsImRlZmF1bHQiPT4ocHJlZ19tYXRjaCgificoLiopJ34iLCRXYiwkQyk/c3RyX3JlcGxhY2UoIicnIiwiJyIsJENbMV0pOigkV2I9PSJOVUxMIj9udWxsOiRXYikpLCJudWxsIj0+ISRKWyJub3RudWxsIl0sInByaXZpbGVnZXMiPT5hcnJheSgic2VsZWN0Ij0+MSwiaW5zZXJ0Ij0+MSwidXBkYXRlIj0+MSksInByaW1hcnkiPT4kSlsicGsiXSwpO2lmKCRKWyJwayJdKXtpZigka2chPSIiKSRJWyRrZ11bImF1dG9faW5jcmVtZW50Il09ZmFsc2U7ZWxzZWlmKHByZWdfbWF0Y2goJ35eaW50ZWdlciR+aScsJFQpKSRJWyREXVsiYXV0b19pbmNyZW1lbnQiXT10cnVlOyRrZz0kRDt9fSR5aD0kZy0+cmVzdWx0KCJTRUxFQ1Qgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RhYmxlJyBBTkQgbmFtZSA9ICIucSgkUSkpO3ByZWdfbWF0Y2hfYWxsKCd+KCgiW14iXSorIikrfFthLXowLTlfXSspXHMrdGV4dFxzK0NPTExBVEVccysoXCdbXlwnXStcJ3xcUyspfmknLCR5aCwkQ2UsUFJFR19TRVRfT1JERVIpO2ZvcmVhY2goJENlCmFzJEMpeyREPXN0cl9yZXBsYWNlKCciIicsJyInLHByZWdfcmVwbGFjZSgnfl4ifCIkficsJycsJENbMV0pKTtpZigkSVskRF0pJElbJERdWyJjb2xsYXRpb24iXT10cmltKCRDWzNdLCInIik7fXJldHVybiRJO31mdW5jdGlvbgppbmRleGVzKCRRLCRoPW51bGwpe2dsb2JhbCRnO2lmKCFpc19vYmplY3QoJGgpKSRoPSRnOyRJPWFycmF5KCk7JHloPSRoLT5yZXN1bHQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndGFibGUnIEFORCBuYW1lID0gIi5xKCRRKSk7aWYocHJlZ19tYXRjaCgnflxiUFJJTUFSWVxzK0tFWVxzKlwoKChbXikiXSt8IlteIl0qInxgW15gXSpgKSsrKX5pJywkeWgsJEMpKXskSVsiIl09YXJyYXkoInR5cGUiPT4iUFJJTUFSWSIsImNvbHVtbnMiPT5hcnJheSgpLCJsZW5ndGhzIj0+YXJyYXkoKSwiZGVzY3MiPT5hcnJheSgpKTtwcmVnX21hdGNoX2FsbCgnfigoKCJbXiJdKisiKSt8KD86YFteYF0qK2ApKyl8KFxTKykpKFxzKyhBU0N8REVTQykpPygsXHMqfCQpfmknLCRDWzFdLCRDZSxQUkVHX1NFVF9PUkRFUik7Zm9yZWFjaCgkQ2UKYXMkQyl7JElbIiJdWyJjb2x1bW5zIl1bXT1pZGZfdW5lc2NhcGUoJENbMl0pLiRDWzRdOyRJWyIiXVsiZGVzY3MiXVtdPShwcmVnX21hdGNoKCd+REVTQ35pJywkQ1s1XSk/JzEnOm51bGwpO319aWYoISRJKXtmb3JlYWNoKGZpZWxkcygkUSlhcyREPT4kbyl7aWYoJG9bInByaW1hcnkiXSkkSVsiIl09YXJyYXkoInR5cGUiPT4iUFJJTUFSWSIsImNvbHVtbnMiPT5hcnJheSgkRCksImxlbmd0aHMiPT5hcnJheSgpLCJkZXNjcyI9PmFycmF5KG51bGwpKTt9fSRBaD1nZXRfa2V5X3ZhbHMoIlNFTEVDVCBuYW1lLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAnaW5kZXgnIEFORCB0YmxfbmFtZSA9ICIucSgkUSksJGgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlBSQUdNQSBpbmRleF9saXN0KCIudGFibGUoJFEpLiIpIiwkaClhcyRKKXskRD0kSlsibmFtZSJdOyR3PWFycmF5KCJ0eXBlIj0+KCRKWyJ1bmlxdWUiXT8iVU5JUVVFIjoiSU5ERVgiKSk7JHdbImxlbmd0aHMiXT1hcnJheSgpOyR3WyJkZXNjcyJdPWFycmF5KCk7Zm9yZWFjaChnZXRfcm93cygiUFJBR01BIGluZGV4X2luZm8oIi5pZGZfZXNjYXBlKCREKS4iKSIsJGgpYXMkV2cpeyR3WyJjb2x1bW5zIl1bXT0kV2dbIm5hbWUiXTskd1siZGVzY3MiXVtdPW51bGw7fWlmKHByZWdfbWF0Y2goJ35eQ1JFQVRFKCBVTklRVUUpPyBJTkRFWCAnLnByZWdfcXVvdGUoaWRmX2VzY2FwZSgkRCkuJyBPTiAnLmlkZl9lc2NhcGUoJFEpLCd+JykuJyBcKCguKilcKSR+aScsJEFoWyREXSwkR2cpKXtwcmVnX21hdGNoX2FsbCgnLygiW14iXSorIikrKCBERVNDKT8vJywkR2dbMl0sJENlKTtmb3JlYWNoKCRDZVsyXWFzJHo9PiRYKXtpZigkWCkkd1siZGVzY3MiXVskel09JzEnO319aWYoISRJWyIiXXx8JHdbInR5cGUiXSE9IlVOSVFVRSJ8fCR3WyJjb2x1bW5zIl0hPSRJWyIiXVsiY29sdW1ucyJdfHwkd1siZGVzY3MiXSE9JElbIiJdWyJkZXNjcyJdfHwhcHJlZ19tYXRjaCgifl5zcWxpdGVffiIsJEQpKSRJWyREXT0kdzt9cmV0dXJuJEk7fWZ1bmN0aW9uCmZvcmVpZ25fa2V5cygkUSl7JEk9YXJyYXkoKTtmb3JlYWNoKGdldF9yb3dzKCJQUkFHTUEgZm9yZWlnbl9rZXlfbGlzdCgiLnRhYmxlKCRRKS4iKSIpYXMkSil7JHI9JiRJWyRKWyJpZCJdXTtpZighJHIpJHI9JEo7JHJbInNvdXJjZSJdW109JEpbImZyb20iXTskclsidGFyZ2V0Il1bXT0kSlsidG8iXTt9cmV0dXJuJEk7fWZ1bmN0aW9uCnZpZXcoJEQpe2dsb2JhbCRnO3JldHVybgphcnJheSgic2VsZWN0Ij0+cHJlZ19yZXBsYWNlKCd+Xig/OlteYCJbXSt8YFteYF0qYHwiW14iXSoiKSogQVNccyt+aVUnLCcnLCRnLT5yZXN1bHQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIG5hbWUgPSAiLnEoJEQpKSkpO31mdW5jdGlvbgpjb2xsYXRpb25zKCl7cmV0dXJuKGlzc2V0KCRfR0VUWyJjcmVhdGUiXSk/Z2V0X3ZhbHMoIlBSQUdNQSBjb2xsYXRpb25fbGlzdCIsMSk6YXJyYXkoKSk7fWZ1bmN0aW9uCmluZm9ybWF0aW9uX3NjaGVtYSgkbCl7cmV0dXJuCmZhbHNlO31mdW5jdGlvbgplcnJvcigpe2dsb2JhbCRnO3JldHVybgpoKCRnLT5lcnJvcik7fWZ1bmN0aW9uCmNoZWNrX3NxbGl0ZV9uYW1lKCREKXtnbG9iYWwkZzskT2M9ImRifHNkYnxzcWxpdGUiO2lmKCFwcmVnX21hdGNoKCJ+XlteXFwwXSpcXC4oJE9jKVwkfiIsJEQpKXskZy0+ZXJyb3I9c3ByaW50ZignUGxlYXNlIHVzZSBvbmUgb2YgdGhlIGV4dGVuc2lvbnMgJXMuJyxzdHJfcmVwbGFjZSgifCIsIiwgIiwkT2MpKTtyZXR1cm4KZmFsc2U7fXJldHVybgp0cnVlO31mdW5jdGlvbgpjcmVhdGVfZGF0YWJhc2UoJGwsJGQpe2dsb2JhbCRnO2lmKGZpbGVfZXhpc3RzKCRsKSl7JGctPmVycm9yPSdGaWxlIGV4aXN0cy4nO3JldHVybgpmYWxzZTt9aWYoIWNoZWNrX3NxbGl0ZV9uYW1lKCRsKSlyZXR1cm4KZmFsc2U7dHJ5eyRBPW5ldwpNaW5fU1FMaXRlKCRsKTt9Y2F0Y2goRXhjZXB0aW9uJEZjKXskZy0+ZXJyb3I9JEZjLT5nZXRNZXNzYWdlKCk7cmV0dXJuCmZhbHNlO30kQS0+cXVlcnkoJ1BSQUdNQSBlbmNvZGluZyA9ICJVVEYtOCInKTskQS0+cXVlcnkoJ0NSRUFURSBUQUJMRSBhZG1pbmVyIChpKScpOyRBLT5xdWVyeSgnRFJPUCBUQUJMRSBhZG1pbmVyJyk7cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmRyb3BfZGF0YWJhc2VzKCRrKXtnbG9iYWwkZzskZy0+X19jb25zdHJ1Y3QoIjptZW1vcnk6Iik7Zm9yZWFjaCgkawphcyRsKXtpZighQHVubGluaygkbCkpeyRnLT5lcnJvcj0nRmlsZSBleGlzdHMuJztyZXR1cm4KZmFsc2U7fX1yZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KcmVuYW1lX2RhdGFiYXNlKCRELCRkKXtnbG9iYWwkZztpZighY2hlY2tfc3FsaXRlX25hbWUoJEQpKXJldHVybgpmYWxzZTskZy0+X19jb25zdHJ1Y3QoIjptZW1vcnk6Iik7JGctPmVycm9yPSdGaWxlIGV4aXN0cy4nO3JldHVybkByZW5hbWUoREIsJEQpO31mdW5jdGlvbgphdXRvX2luY3JlbWVudCgpe3JldHVybiIgUFJJTUFSWSBLRVkiLihEUklWRVI9PSJzcWxpdGUiPyIgQVVUT0lOQ1JFTUVOVCI6IiIpO31mdW5jdGlvbgphbHRlcl90YWJsZSgkUSwkRCwkcCwkZmQsJHJiLCR5YywkZCwkS2EsJFRmKXtnbG9iYWwkZzskTWk9KCRRPT0iInx8JGZkKTtmb3JlYWNoKCRwCmFzJG8pe2lmKCRvWzBdIT0iInx8ISRvWzFdfHwkb1syXSl7JE1pPXRydWU7YnJlYWs7fX0kYz1hcnJheSgpOyRIZj1hcnJheSgpO2ZvcmVhY2goJHAKYXMkbyl7aWYoJG9bMV0peyRjW109KCRNaT8kb1sxXToiQUREICIuaW1wbG9kZSgkb1sxXSkpO2lmKCRvWzBdIT0iIikkSGZbJG9bMF1dPSRvWzFdWzBdO319aWYoISRNaSl7Zm9yZWFjaCgkYwphcyRYKXtpZighcXVlcmllcygiQUxURVIgVEFCTEUgIi50YWJsZSgkUSkuIiAkWCIpKXJldHVybgpmYWxzZTt9aWYoJFEhPSREJiYhcXVlcmllcygiQUxURVIgVEFCTEUgIi50YWJsZSgkUSkuIiBSRU5BTUUgVE8gIi50YWJsZSgkRCkpKXJldHVybgpmYWxzZTt9ZWxzZWlmKCFyZWNyZWF0ZV90YWJsZSgkUSwkRCwkYywkSGYsJGZkLCRLYSkpcmV0dXJuCmZhbHNlO2lmKCRLYSl7cXVlcmllcygiQkVHSU4iKTtxdWVyaWVzKCJVUERBVEUgc3FsaXRlX3NlcXVlbmNlIFNFVCBzZXEgPSAkS2EgV0hFUkUgbmFtZSA9ICIucSgkRCkpO2lmKCEkZy0+YWZmZWN0ZWRfcm93cylxdWVyaWVzKCJJTlNFUlQgSU5UTyBzcWxpdGVfc2VxdWVuY2UgKG5hbWUsIHNlcSkgVkFMVUVTICgiLnEoJEQpLiIsICRLYSkiKTtxdWVyaWVzKCJDT01NSVQiKTt9cmV0dXJuCnRydWU7fWZ1bmN0aW9uCnJlY3JlYXRlX3RhYmxlKCRRLCRELCRwLCRIZiwkZmQsJEthLCR4PWFycmF5KCkpe2dsb2JhbCRnO2lmKCRRIT0iIil7aWYoISRwKXtmb3JlYWNoKGZpZWxkcygkUSlhcyR6PT4kbyl7aWYoJHgpJG9bImF1dG9faW5jcmVtZW50Il09MDskcFtdPXByb2Nlc3NfZmllbGQoJG8sJG8pOyRIZlskel09aWRmX2VzY2FwZSgkeik7fX0kbGc9ZmFsc2U7Zm9yZWFjaCgkcAphcyRvKXtpZigkb1s2XSkkbGc9dHJ1ZTt9JGxjPWFycmF5KCk7Zm9yZWFjaCgkeAphcyR6PT4kWCl7aWYoJFhbMl09PSJEUk9QIil7JGxjWyRYWzFdXT10cnVlO3Vuc2V0KCR4WyR6XSk7fX1mb3JlYWNoKGluZGV4ZXMoJFEpYXMkZ2U9PiR3KXskZj1hcnJheSgpO2ZvcmVhY2goJHdbImNvbHVtbnMiXWFzJHo9PiRlKXtpZighJEhmWyRlXSljb250aW51ZQoyOyRmW109JEhmWyRlXS4oJHdbImRlc2NzIl1bJHpdPyIgREVTQyI6IiIpO31pZighJGxjWyRnZV0pe2lmKCR3WyJ0eXBlIl0hPSJQUklNQVJZInx8ISRsZykkeFtdPWFycmF5KCR3WyJ0eXBlIl0sJGdlLCRmKTt9fWZvcmVhY2goJHgKYXMkej0+JFgpe2lmKCRYWzBdPT0iUFJJTUFSWSIpe3Vuc2V0KCR4WyR6XSk7JGZkW109IiAgUFJJTUFSWSBLRVkgKCIuaW1wbG9kZSgiLCAiLCRYWzJdKS4iKSI7fX1mb3JlYWNoKGZvcmVpZ25fa2V5cygkUSlhcyRnZT0+JHIpe2ZvcmVhY2goJHJbInNvdXJjZSJdYXMkej0+JGUpe2lmKCEkSGZbJGVdKWNvbnRpbnVlCjI7JHJbInNvdXJjZSJdWyR6XT1pZGZfdW5lc2NhcGUoJEhmWyRlXSk7fWlmKCFpc3NldCgkZmRbIiAkZ2UiXSkpJGZkW109IiAiLmZvcm1hdF9mb3JlaWduX2tleSgkcik7fXF1ZXJpZXMoIkJFR0lOIik7fWZvcmVhY2goJHAKYXMkej0+JG8pJHBbJHpdPSIgICIuaW1wbG9kZSgkbyk7JHA9YXJyYXlfbWVyZ2UoJHAsYXJyYXlfZmlsdGVyKCRmZCkpOyRZaD0oJFE9PSREPyJhZG1pbmVyXyREIjokRCk7aWYoIXF1ZXJpZXMoIkNSRUFURSBUQUJMRSAiLnRhYmxlKCRZaCkuIiAoXG4iLmltcGxvZGUoIixcbiIsJHApLiJcbikiKSlyZXR1cm4KZmFsc2U7aWYoJFEhPSIiKXtpZigkSGYmJiFxdWVyaWVzKCJJTlNFUlQgSU5UTyAiLnRhYmxlKCRZaCkuIiAoIi5pbXBsb2RlKCIsICIsJEhmKS4iKSBTRUxFQ1QgIi5pbXBsb2RlKCIsICIsYXJyYXlfbWFwKCdpZGZfZXNjYXBlJyxhcnJheV9rZXlzKCRIZikpKS4iIEZST00gIi50YWJsZSgkUSkpKXJldHVybgpmYWxzZTskemk9YXJyYXkoKTtmb3JlYWNoKHRyaWdnZXJzKCRRKWFzJHhpPT4kZmkpeyR3aT10cmlnZ2VyKCR4aSk7JHppW109IkNSRUFURSBUUklHR0VSICIuaWRmX2VzY2FwZSgkeGkpLiIgIi5pbXBsb2RlKCIgIiwkZmkpLiIgT04gIi50YWJsZSgkRCkuIlxuJHdpW1N0YXRlbWVudF0iO30kS2E9JEthPzA6JGctPnJlc3VsdCgiU0VMRUNUIHNlcSBGUk9NIHNxbGl0ZV9zZXF1ZW5jZSBXSEVSRSBuYW1lID0gIi5xKCRRKSk7aWYoIXF1ZXJpZXMoIkRST1AgVEFCTEUgIi50YWJsZSgkUSkpfHwoJFE9PSREJiYhcXVlcmllcygiQUxURVIgVEFCTEUgIi50YWJsZSgkWWgpLiIgUkVOQU1FIFRPICIudGFibGUoJEQpKSl8fCFhbHRlcl9pbmRleGVzKCRELCR4KSlyZXR1cm4KZmFsc2U7aWYoJEthKXF1ZXJpZXMoIlVQREFURSBzcWxpdGVfc2VxdWVuY2UgU0VUIHNlcSA9ICRLYSBXSEVSRSBuYW1lID0gIi5xKCREKSk7Zm9yZWFjaCgkemkKYXMkd2kpe2lmKCFxdWVyaWVzKCR3aSkpcmV0dXJuCmZhbHNlO31xdWVyaWVzKCJDT01NSVQiKTt9cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmluZGV4X3NxbCgkUSwkVCwkRCwkZil7cmV0dXJuIkNSRUFURSAkVCAiLigkVCE9IklOREVYIj8iSU5ERVggIjoiIikuaWRmX2VzY2FwZSgkRCE9IiI/JEQ6dW5pcWlkKCRRLiJfIikpLiIgT04gIi50YWJsZSgkUSkuIiAkZiI7fWZ1bmN0aW9uCmFsdGVyX2luZGV4ZXMoJFEsJGMpe2ZvcmVhY2goJGMKYXMka2cpe2lmKCRrZ1swXT09IlBSSU1BUlkiKXJldHVybgpyZWNyZWF0ZV90YWJsZSgkUSwkUSxhcnJheSgpLGFycmF5KCksYXJyYXkoKSwwLCRjKTt9Zm9yZWFjaChhcnJheV9yZXZlcnNlKCRjKWFzJFgpe2lmKCFxdWVyaWVzKCRYWzJdPT0iRFJPUCI/IkRST1AgSU5ERVggIi5pZGZfZXNjYXBlKCRYWzFdKTppbmRleF9zcWwoJFEsJFhbMF0sJFhbMV0sIigiLmltcGxvZGUoIiwgIiwkWFsyXSkuIikiKSkpcmV0dXJuCmZhbHNlO31yZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KdHJ1bmNhdGVfdGFibGVzKCRTKXtyZXR1cm4KYXBwbHlfcXVlcmllcygiREVMRVRFIEZST00iLCRTKTt9ZnVuY3Rpb24KZHJvcF92aWV3cygkWWkpe3JldHVybgphcHBseV9xdWVyaWVzKCJEUk9QIFZJRVciLCRZaSk7fWZ1bmN0aW9uCmRyb3BfdGFibGVzKCRTKXtyZXR1cm4KYXBwbHlfcXVlcmllcygiRFJPUCBUQUJMRSIsJFMpO31mdW5jdGlvbgptb3ZlX3RhYmxlcygkUywkWWksJFdoKXtyZXR1cm4KZmFsc2U7fWZ1bmN0aW9uCnRyaWdnZXIoJEQpe2dsb2JhbCRnO2lmKCREPT0iIilyZXR1cm4KYXJyYXkoIlN0YXRlbWVudCI9PiJCRUdJTlxuXHQ7XG5FTkQiKTskdj0nKD86W15gIlxzXSt8YFteYF0qYHwiW14iXSoiKSsnOyR5aT10cmlnZ2VyX29wdGlvbnMoKTtwcmVnX21hdGNoKCJ+XkNSRUFURVxccytUUklHR0VSXFxzKiR2XFxzKigiLmltcGxvZGUoInwiLCR5aVsiVGltaW5nIl0pLiIpXFxzKyhbYS16XSspKD86XFxzK09GXFxzKygkdikpP1xccytPTlxccyokdlxccyooPzpGT1JcXHMrRUFDSFxccytST1dcXHMpPyguKil+aXMiLCRnLT5yZXN1bHQoIlNFTEVDVCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHR5cGUgPSAndHJpZ2dlcicgQU5EIG5hbWUgPSAiLnEoJEQpKSwkQyk7JGdmPSRDWzNdO3JldHVybgphcnJheSgiVGltaW5nIj0+c3RydG91cHBlcigkQ1sxXSksIkV2ZW50Ij0+c3RydG91cHBlcigkQ1syXSkuKCRnZj8iIE9GIjoiIiksIk9mIj0+aWRmX3VuZXNjYXBlKCRnZiksIlRyaWdnZXIiPT4kRCwiU3RhdGVtZW50Ij0+JENbNF0sKTt9ZnVuY3Rpb24KdHJpZ2dlcnMoJFEpeyRJPWFycmF5KCk7JHlpPXRyaWdnZXJfb3B0aW9ucygpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCAqIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0eXBlID0gJ3RyaWdnZXInIEFORCB0YmxfbmFtZSA9ICIucSgkUSkpYXMkSil7cHJlZ19tYXRjaCgnfl5DUkVBVEVccytUUklHR0VSXHMqKD86W15gIlxzXSt8YFteYF0qYHwiW14iXSoiKStccyooJy5pbXBsb2RlKCJ8IiwkeWlbIlRpbWluZyJdKS4nKVxzKiguKj8pXHMrT05cYn5pJywkSlsic3FsIl0sJEMpOyRJWyRKWyJuYW1lIl1dPWFycmF5KCRDWzFdLCRDWzJdKTt9cmV0dXJuJEk7fWZ1bmN0aW9uCnRyaWdnZXJfb3B0aW9ucygpe3JldHVybgphcnJheSgiVGltaW5nIj0+YXJyYXkoIkJFRk9SRSIsIkFGVEVSIiwiSU5TVEVBRCBPRiIpLCJFdmVudCI9PmFycmF5KCJJTlNFUlQiLCJVUERBVEUiLCJVUERBVEUgT0YiLCJERUxFVEUiKSwiVHlwZSI9PmFycmF5KCJGT1IgRUFDSCBST1ciKSwpO31mdW5jdGlvbgpiZWdpbigpe3JldHVybgpxdWVyaWVzKCJCRUdJTiIpO31mdW5jdGlvbgpsYXN0X2lkKCl7Z2xvYmFsJGc7cmV0dXJuJGctPnJlc3VsdCgiU0VMRUNUIExBU1RfSU5TRVJUX1JPV0lEKCkiKTt9ZnVuY3Rpb24KZXhwbGFpbigkZywkRyl7cmV0dXJuJGctPnF1ZXJ5KCJFWFBMQUlOIFFVRVJZIFBMQU4gJEciKTt9ZnVuY3Rpb24KZm91bmRfcm93cygkUiwkWil7fWZ1bmN0aW9uCnR5cGVzKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCnNjaGVtYXMoKXtyZXR1cm4KYXJyYXkoKTt9ZnVuY3Rpb24KZ2V0X3NjaGVtYSgpe3JldHVybiIiO31mdW5jdGlvbgpzZXRfc2NoZW1hKCRhaCl7cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmNyZWF0ZV9zcWwoJFEsJEthLCRIaCl7Z2xvYmFsJGc7JEk9JGctPnJlc3VsdCgiU0VMRUNUIHNxbCBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSBJTiAoJ3RhYmxlJywgJ3ZpZXcnKSBBTkQgbmFtZSA9ICIucSgkUSkpO2ZvcmVhY2goaW5kZXhlcygkUSlhcyREPT4kdyl7aWYoJEQ9PScnKWNvbnRpbnVlOyRJLj0iO1xuXG4iLmluZGV4X3NxbCgkUSwkd1sndHlwZSddLCRELCIoIi5pbXBsb2RlKCIsICIsYXJyYXlfbWFwKCdpZGZfZXNjYXBlJywkd1snY29sdW1ucyddKSkuIikiKTt9cmV0dXJuJEk7fWZ1bmN0aW9uCnRydW5jYXRlX3NxbCgkUSl7cmV0dXJuIkRFTEVURSBGUk9NICIudGFibGUoJFEpO31mdW5jdGlvbgp1c2Vfc3FsKCRqKXt9ZnVuY3Rpb24KdHJpZ2dlcl9zcWwoJFEpe3JldHVybgppbXBsb2RlKGdldF92YWxzKCJTRUxFQ1Qgc3FsIHx8ICc7O1xuJyBGUk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdHlwZSA9ICd0cmlnZ2VyJyBBTkQgdGJsX25hbWUgPSAiLnEoJFEpKSk7fWZ1bmN0aW9uCnNob3dfdmFyaWFibGVzKCl7Z2xvYmFsJGc7JEk9YXJyYXkoKTtmb3JlYWNoKGFycmF5KCJhdXRvX3ZhY3V1bSIsImNhY2hlX3NpemUiLCJjb3VudF9jaGFuZ2VzIiwiZGVmYXVsdF9jYWNoZV9zaXplIiwiZW1wdHlfcmVzdWx0X2NhbGxiYWNrcyIsImVuY29kaW5nIiwiZm9yZWlnbl9rZXlzIiwiZnVsbF9jb2x1bW5fbmFtZXMiLCJmdWxsZnN5bmMiLCJqb3VybmFsX21vZGUiLCJqb3VybmFsX3NpemVfbGltaXQiLCJsZWdhY3lfZmlsZV9mb3JtYXQiLCJsb2NraW5nX21vZGUiLCJwYWdlX3NpemUiLCJtYXhfcGFnZV9jb3VudCIsInJlYWRfdW5jb21taXR0ZWQiLCJyZWN1cnNpdmVfdHJpZ2dlcnMiLCJyZXZlcnNlX3Vub3JkZXJlZF9zZWxlY3RzIiwic2VjdXJlX2RlbGV0ZSIsInNob3J0X2NvbHVtbl9uYW1lcyIsInN5bmNocm9ub3VzIiwidGVtcF9zdG9yZSIsInRlbXBfc3RvcmVfZGlyZWN0b3J5Iiwic2NoZW1hX3ZlcnNpb24iLCJpbnRlZ3JpdHlfY2hlY2siLCJxdWlja19jaGVjayIpYXMkeikkSVskel09JGctPnJlc3VsdCgiUFJBR01BICR6Iik7cmV0dXJuJEk7fWZ1bmN0aW9uCnNob3dfc3RhdHVzKCl7JEk9YXJyYXkoKTtmb3JlYWNoKGdldF92YWxzKCJQUkFHTUEgY29tcGlsZV9vcHRpb25zIilhcyR3Zil7bGlzdCgkeiwkWCk9ZXhwbG9kZSgiPSIsJHdmLDIpOyRJWyR6XT0kWDt9cmV0dXJuJEk7fWZ1bmN0aW9uCmNvbnZlcnRfZmllbGQoJG8pe31mdW5jdGlvbgp1bmNvbnZlcnRfZmllbGQoJG8sJEkpe3JldHVybiRJO31mdW5jdGlvbgpzdXBwb3J0KCRUYyl7cmV0dXJuCnByZWdfbWF0Y2goJ35eKGNvbHVtbnN8ZGF0YWJhc2V8ZHJvcF9jb2x8ZHVtcHxpbmRleGVzfGRlc2NpZHh8bW92ZV9jb2x8c3FsfHN0YXR1c3x0YWJsZXx0cmlnZ2VyfHZhcmlhYmxlc3x2aWV3fHZpZXdfdHJpZ2dlcikkficsJFRjKTt9ZnVuY3Rpb24KZHJpdmVyX2NvbmZpZygpeyRVPWFycmF5KCJpbnRlZ2VyIj0+MCwicmVhbCI9PjAsIm51bWVyaWMiPT4wLCJ0ZXh0Ij0+MCwiYmxvYiI9PjApO3JldHVybgphcnJheSgncG9zc2libGVfZHJpdmVycyc9PmFycmF5KChpc3NldCgkX0dFVFsic3FsaXRlIl0pPyJTUUxpdGUzIjoiU1FMaXRlIiksIlBET19TUUxpdGUiKSwnanVzaCc9PiJzcWxpdGUiLCd0eXBlcyc9PiRVLCdzdHJ1Y3R1cmVkX3R5cGVzJz0+YXJyYXlfa2V5cygkVSksJ3Vuc2lnbmVkJz0+YXJyYXkoKSwnb3BlcmF0b3JzJz0+YXJyYXkoIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCIhPSIsIkxJS0UiLCJMSUtFICUlIiwiSU4iLCJJUyBOVUxMIiwiTk9UIExJS0UiLCJOT1QgSU4iLCJJUyBOT1QgTlVMTCIsIlNRTCIpLCdmdW5jdGlvbnMnPT5hcnJheSgiaGV4IiwibGVuZ3RoIiwibG93ZXIiLCJyb3VuZCIsInVuaXhlcG9jaCIsInVwcGVyIiksJ2dyb3VwaW5nJz0+YXJyYXkoImF2ZyIsImNvdW50IiwiY291bnQgZGlzdGluY3QiLCJncm91cF9jb25jYXQiLCJtYXgiLCJtaW4iLCJzdW0iKSwnZWRpdF9mdW5jdGlvbnMnPT5hcnJheShhcnJheSgpLGFycmF5KCJpbnRlZ2VyfHJlYWx8bnVtZXJpYyI9PiIrLy0iLCJ0ZXh0Ij0+Inx8IiwpKSwpO319JGljWyJwZ3NxbCJdPSJQb3N0Z3JlU1FMIjtpZihpc3NldCgkX0dFVFsicGdzcWwiXSkpe2RlZmluZSgiRFJJVkVSIiwicGdzcWwiKTtpZihleHRlbnNpb25fbG9hZGVkKCJwZ3NxbCIpKXtjbGFzcwpNaW5fREJ7dmFyJGV4dGVuc2lvbj0iUGdTUUwiLCRfbGluaywkX3Jlc3VsdCwkX3N0cmluZywkX2RhdGFiYXNlPXRydWUsJHNlcnZlcl9pbmZvLCRhZmZlY3RlZF9yb3dzLCRlcnJvciwkdGltZW91dDtmdW5jdGlvbgpfZXJyb3IoJEFjLCRuKXtpZihpbmlfYm9vbCgiaHRtbF9lcnJvcnMiKSkkbj1odG1sX2VudGl0eV9kZWNvZGUoc3RyaXBfdGFncygkbikpOyRuPXByZWdfcmVwbGFjZSgnfl5bXjpdKjogficsJycsJG4pOyR0aGlzLT5lcnJvcj0kbjt9ZnVuY3Rpb24KY29ubmVjdCgkTSwkViwkRil7Z2xvYmFsJGI7JGw9JGItPmRhdGFiYXNlKCk7c2V0X2Vycm9yX2hhbmRsZXIoYXJyYXkoJHRoaXMsJ19lcnJvcicpKTskdGhpcy0+X3N0cmluZz0iaG9zdD0nIi5zdHJfcmVwbGFjZSgiOiIsIicgcG9ydD0nIixhZGRjc2xhc2hlcygkTSwiJ1xcIikpLiInIHVzZXI9JyIuYWRkY3NsYXNoZXMoJFYsIidcXCIpLiInIHBhc3N3b3JkPSciLmFkZGNzbGFzaGVzKCRGLCInXFwiKS4iJyI7JHRoaXMtPl9saW5rPUBwZ19jb25uZWN0KCIkdGhpcy0+X3N0cmluZyBkYm5hbWU9JyIuKCRsIT0iIj9hZGRjc2xhc2hlcygkbCwiJ1xcIik6InBvc3RncmVzIikuIiciLFBHU1FMX0NPTk5FQ1RfRk9SQ0VfTkVXKTtpZighJHRoaXMtPl9saW5rJiYkbCE9IiIpeyR0aGlzLT5fZGF0YWJhc2U9ZmFsc2U7JHRoaXMtPl9saW5rPUBwZ19jb25uZWN0KCIkdGhpcy0+X3N0cmluZyBkYm5hbWU9J3Bvc3RncmVzJyIsUEdTUUxfQ09OTkVDVF9GT1JDRV9ORVcpO31yZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTtpZigkdGhpcy0+X2xpbmspeyRXaT1wZ192ZXJzaW9uKCR0aGlzLT5fbGluayk7JHRoaXMtPnNlcnZlcl9pbmZvPSRXaVsic2VydmVyIl07cGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0+X2xpbmssIlVURjgiKTt9cmV0dXJuKGJvb2wpJHRoaXMtPl9saW5rO31mdW5jdGlvbgpxdW90ZSgkUCl7cmV0dXJuIiciLnBnX2VzY2FwZV9zdHJpbmcoJHRoaXMtPl9saW5rLCRQKS4iJyI7fWZ1bmN0aW9uCnZhbHVlKCRYLCRvKXtyZXR1cm4oJG9bInR5cGUiXT09ImJ5dGVhIiYmJFghPT1udWxsP3BnX3VuZXNjYXBlX2J5dGVhKCRYKTokWCk7fWZ1bmN0aW9uCnF1b3RlQmluYXJ5KCRQKXtyZXR1cm4iJyIucGdfZXNjYXBlX2J5dGVhKCR0aGlzLT5fbGluaywkUCkuIiciO31mdW5jdGlvbgpzZWxlY3RfZGIoJGope2dsb2JhbCRiO2lmKCRqPT0kYi0+ZGF0YWJhc2UoKSlyZXR1cm4kdGhpcy0+X2RhdGFiYXNlOyRJPUBwZ19jb25uZWN0KCIkdGhpcy0+X3N0cmluZyBkYm5hbWU9JyIuYWRkY3NsYXNoZXMoJGosIidcXCIpLiInIixQR1NRTF9DT05ORUNUX0ZPUkNFX05FVyk7aWYoJEkpJHRoaXMtPl9saW5rPSRJO3JldHVybiRJO31mdW5jdGlvbgpjbG9zZSgpeyR0aGlzLT5fbGluaz1AcGdfY29ubmVjdCgiJHRoaXMtPl9zdHJpbmcgZGJuYW1lPSdwb3N0Z3JlcyciKTt9ZnVuY3Rpb24KcXVlcnkoJEcsJEJpPWZhbHNlKXskSD1AcGdfcXVlcnkoJHRoaXMtPl9saW5rLCRHKTskdGhpcy0+ZXJyb3I9IiI7aWYoISRIKXskdGhpcy0+ZXJyb3I9cGdfbGFzdF9lcnJvcigkdGhpcy0+X2xpbmspOyRJPWZhbHNlO31lbHNlaWYoIXBnX251bV9maWVsZHMoJEgpKXskdGhpcy0+YWZmZWN0ZWRfcm93cz1wZ19hZmZlY3RlZF9yb3dzKCRIKTskST10cnVlO31lbHNlJEk9bmV3Ck1pbl9SZXN1bHQoJEgpO2lmKCR0aGlzLT50aW1lb3V0KXskdGhpcy0+dGltZW91dD0wOyR0aGlzLT5xdWVyeSgiUkVTRVQgc3RhdGVtZW50X3RpbWVvdXQiKTt9cmV0dXJuJEk7fWZ1bmN0aW9uCm11bHRpX3F1ZXJ5KCRHKXtyZXR1cm4kdGhpcy0+X3Jlc3VsdD0kdGhpcy0+cXVlcnkoJEcpO31mdW5jdGlvbgpzdG9yZV9yZXN1bHQoKXtyZXR1cm4kdGhpcy0+X3Jlc3VsdDt9ZnVuY3Rpb24KbmV4dF9yZXN1bHQoKXtyZXR1cm4KZmFsc2U7fWZ1bmN0aW9uCnJlc3VsdCgkRywkbz0wKXskSD0kdGhpcy0+cXVlcnkoJEcpO2lmKCEkSHx8ISRILT5udW1fcm93cylyZXR1cm4KZmFsc2U7cmV0dXJuCnBnX2ZldGNoX3Jlc3VsdCgkSC0+X3Jlc3VsdCwwLCRvKTt9ZnVuY3Rpb24Kd2FybmluZ3MoKXtyZXR1cm4KaChwZ19sYXN0X25vdGljZSgkdGhpcy0+X2xpbmspKTt9fWNsYXNzCk1pbl9SZXN1bHR7dmFyJF9yZXN1bHQsJF9vZmZzZXQ9MCwkbnVtX3Jvd3M7ZnVuY3Rpb24KX19jb25zdHJ1Y3QoJEgpeyR0aGlzLT5fcmVzdWx0PSRIOyR0aGlzLT5udW1fcm93cz1wZ19udW1fcm93cygkSCk7fWZ1bmN0aW9uCmZldGNoX2Fzc29jKCl7cmV0dXJuCnBnX2ZldGNoX2Fzc29jKCR0aGlzLT5fcmVzdWx0KTt9ZnVuY3Rpb24KZmV0Y2hfcm93KCl7cmV0dXJuCnBnX2ZldGNoX3JvdygkdGhpcy0+X3Jlc3VsdCk7fWZ1bmN0aW9uCmZldGNoX2ZpZWxkKCl7JGU9JHRoaXMtPl9vZmZzZXQrKzskST1uZXcKc3RkQ2xhc3M7aWYoZnVuY3Rpb25fZXhpc3RzKCdwZ19maWVsZF90YWJsZScpKSRJLT5vcmd0YWJsZT1wZ19maWVsZF90YWJsZSgkdGhpcy0+X3Jlc3VsdCwkZSk7JEktPm5hbWU9cGdfZmllbGRfbmFtZSgkdGhpcy0+X3Jlc3VsdCwkZSk7JEktPm9yZ25hbWU9JEktPm5hbWU7JEktPnR5cGU9cGdfZmllbGRfdHlwZSgkdGhpcy0+X3Jlc3VsdCwkZSk7JEktPmNoYXJzZXRucj0oJEktPnR5cGU9PSJieXRlYSI/NjM6MCk7cmV0dXJuJEk7fWZ1bmN0aW9uCl9fZGVzdHJ1Y3QoKXtwZ19mcmVlX3Jlc3VsdCgkdGhpcy0+X3Jlc3VsdCk7fX19ZWxzZWlmKGV4dGVuc2lvbl9sb2FkZWQoInBkb19wZ3NxbCIpKXtjbGFzcwpNaW5fREIKZXh0ZW5kcwpNaW5fUERPe3ZhciRleHRlbnNpb249IlBET19QZ1NRTCIsJHRpbWVvdXQ7ZnVuY3Rpb24KY29ubmVjdCgkTSwkViwkRil7Z2xvYmFsJGI7JGw9JGItPmRhdGFiYXNlKCk7JHRoaXMtPmRzbigicGdzcWw6aG9zdD0nIi5zdHJfcmVwbGFjZSgiOiIsIicgcG9ydD0nIixhZGRjc2xhc2hlcygkTSwiJ1xcIikpLiInIGNsaWVudF9lbmNvZGluZz11dGY4IGRibmFtZT0nIi4oJGwhPSIiP2FkZGNzbGFzaGVzKCRsLCInXFwiKToicG9zdGdyZXMiKS4iJyIsJFYsJEYpO3JldHVybgp0cnVlO31mdW5jdGlvbgpzZWxlY3RfZGIoJGope2dsb2JhbCRiO3JldHVybigkYi0+ZGF0YWJhc2UoKT09JGopO31mdW5jdGlvbgpxdW90ZUJpbmFyeSgkWGcpe3JldHVybgpxKCRYZyk7fWZ1bmN0aW9uCnF1ZXJ5KCRHLCRCaT1mYWxzZSl7JEk9cGFyZW50OjpxdWVyeSgkRywkQmkpO2lmKCR0aGlzLT50aW1lb3V0KXskdGhpcy0+dGltZW91dD0wO3BhcmVudDo6cXVlcnkoIlJFU0VUIHN0YXRlbWVudF90aW1lb3V0Iik7fXJldHVybiRJO31mdW5jdGlvbgp3YXJuaW5ncygpe3JldHVybicnO31mdW5jdGlvbgpjbG9zZSgpe319fWNsYXNzCk1pbl9Ecml2ZXIKZXh0ZW5kcwpNaW5fU1FMe2Z1bmN0aW9uCmluc2VydFVwZGF0ZSgkUSwkSywka2cpe2dsb2JhbCRnO2ZvcmVhY2goJEsKYXMkTil7JElpPWFycmF5KCk7JFo9YXJyYXkoKTtmb3JlYWNoKCROCmFzJHo9PiRYKXskSWlbXT0iJHogPSAkWCI7aWYoaXNzZXQoJGtnW2lkZl91bmVzY2FwZSgkeildKSkkWltdPSIkeiA9ICRYIjt9aWYoISgoJFomJnF1ZXJpZXMoIlVQREFURSAiLnRhYmxlKCRRKS4iIFNFVCAiLmltcGxvZGUoIiwgIiwkSWkpLiIgV0hFUkUgIi5pbXBsb2RlKCIgQU5EICIsJFopKSYmJGctPmFmZmVjdGVkX3Jvd3MpfHxxdWVyaWVzKCJJTlNFUlQgSU5UTyAiLnRhYmxlKCRRKS4iICgiLmltcGxvZGUoIiwgIixhcnJheV9rZXlzKCROKSkuIikgVkFMVUVTICgiLmltcGxvZGUoIiwgIiwkTikuIikiKSkpcmV0dXJuCmZhbHNlO31yZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24Kc2xvd1F1ZXJ5KCRHLCRlaSl7JHRoaXMtPl9jb25uLT5xdWVyeSgiU0VUIHN0YXRlbWVudF90aW1lb3V0ID0gIi4oMTAwMCokZWkpKTskdGhpcy0+X2Nvbm4tPnRpbWVvdXQ9MTAwMCokZWk7cmV0dXJuJEc7fWZ1bmN0aW9uCmNvbnZlcnRTZWFyY2goJHYsJFgsJG8pe3JldHVybihwcmVnX21hdGNoKCd+Y2hhcnx0ZXh0Jy4oIXByZWdfbWF0Y2goJ35MSUtFficsJFhbIm9wIl0pPyd8ZGF0ZXx0aW1lKHN0YW1wKT98Ym9vbGVhbnx1dWlkfCcubnVtYmVyX3R5cGUoKTonJykuJ34nLCRvWyJ0eXBlIl0pPyR2OiJDQVNUKCR2IEFTIHRleHQpIik7fWZ1bmN0aW9uCnF1b3RlQmluYXJ5KCRYZyl7cmV0dXJuJHRoaXMtPl9jb25uLT5xdW90ZUJpbmFyeSgkWGcpO31mdW5jdGlvbgp3YXJuaW5ncygpe3JldHVybiR0aGlzLT5fY29ubi0+d2FybmluZ3MoKTt9ZnVuY3Rpb24KdGFibGVIZWxwKCREKXskd2U9YXJyYXkoImluZm9ybWF0aW9uX3NjaGVtYSI9PiJpbmZvc2NoZW1hIiwicGdfY2F0YWxvZyI9PiJjYXRhbG9nIiwpOyRBPSR3ZVskX0dFVFsibnMiXV07aWYoJEEpcmV0dXJuIiRBLSIuc3RyX3JlcGxhY2UoIl8iLCItIiwkRCkuIi5odG1sIjt9fWZ1bmN0aW9uCmlkZl9lc2NhcGUoJHYpe3JldHVybiciJy5zdHJfcmVwbGFjZSgnIicsJyIiJywkdikuJyInO31mdW5jdGlvbgp0YWJsZSgkdil7cmV0dXJuCmlkZl9lc2NhcGUoJHYpO31mdW5jdGlvbgpjb25uZWN0KCl7Z2xvYmFsJGIsJFUsJEdoOyRnPW5ldwpNaW5fREI7JEtiPSRiLT5jcmVkZW50aWFscygpO2lmKCRnLT5jb25uZWN0KCRLYlswXSwkS2JbMV0sJEtiWzJdKSl7aWYobWluX3ZlcnNpb24oOSwwLCRnKSl7JGctPnF1ZXJ5KCJTRVQgYXBwbGljYXRpb25fbmFtZSA9ICdBZG1pbmVyJyIpO2lmKG1pbl92ZXJzaW9uKDkuMiwwLCRnKSl7JEdoWydTdHJpbmdzJ11bXT0ianNvbiI7JFVbImpzb24iXT00Mjk0OTY3Mjk1O2lmKG1pbl92ZXJzaW9uKDkuNCwwLCRnKSl7JEdoWydTdHJpbmdzJ11bXT0ianNvbmIiOyRVWyJqc29uYiJdPTQyOTQ5NjcyOTU7fX19cmV0dXJuJGc7fXJldHVybiRnLT5lcnJvcjt9ZnVuY3Rpb24KZ2V0X2RhdGFiYXNlcygpe3JldHVybgpnZXRfdmFscygiU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBoYXNfZGF0YWJhc2VfcHJpdmlsZWdlKGRhdG5hbWUsICdDT05ORUNUJykgT1JERVIgQlkgZGF0bmFtZSIpO31mdW5jdGlvbgpsaW1pdCgkRywkWiwkXywkaGY9MCwkaGg9IiAiKXtyZXR1cm4iICRHJFoiLigkXyE9PW51bGw/JGhoLiJMSU1JVCAkXyIuKCRoZj8iIE9GRlNFVCAkaGYiOiIiKToiIik7fWZ1bmN0aW9uCmxpbWl0MSgkUSwkRywkWiwkaGg9IlxuIil7cmV0dXJuKHByZWdfbWF0Y2goJ35eSU5UT34nLCRHKT9saW1pdCgkRywkWiwxLDAsJGhoKToiICRHIi4oaXNfdmlldyh0YWJsZV9zdGF0dXMxKCRRKSk/JFo6IiBXSEVSRSBjdGlkID0gKFNFTEVDVCBjdGlkIEZST00gIi50YWJsZSgkUSkuJFouJGhoLiJMSU1JVCAxKSIpKTt9ZnVuY3Rpb24KZGJfY29sbGF0aW9uKCRsLCRsYil7Z2xvYmFsJGc7cmV0dXJuJGctPnJlc3VsdCgiU0VMRUNUIGRhdGNvbGxhdGUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRuYW1lID0gIi5xKCRsKSk7fWZ1bmN0aW9uCmVuZ2luZXMoKXtyZXR1cm4KYXJyYXkoKTt9ZnVuY3Rpb24KbG9nZ2VkX3VzZXIoKXtnbG9iYWwkZztyZXR1cm4kZy0+cmVzdWx0KCJTRUxFQ1QgdXNlciIpO31mdW5jdGlvbgp0YWJsZXNfbGlzdCgpeyRHPSJTRUxFQ1QgdGFibGVfbmFtZSwgdGFibGVfdHlwZSBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgV0hFUkUgdGFibGVfc2NoZW1hID0gY3VycmVudF9zY2hlbWEoKSI7aWYoc3VwcG9ydCgnbWF0ZXJpYWxpemVkdmlldycpKSRHLj0iClVOSU9OIEFMTApTRUxFQ1QgbWF0dmlld25hbWUsICdNQVRFUklBTElaRUQgVklFVycKRlJPTSBwZ19tYXR2aWV3cwpXSEVSRSBzY2hlbWFuYW1lID0gY3VycmVudF9zY2hlbWEoKSI7JEcuPSIKT1JERVIgQlkgMSI7cmV0dXJuCmdldF9rZXlfdmFscygkRyk7fWZ1bmN0aW9uCmNvdW50X3RhYmxlcygkayl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCnRhYmxlX3N0YXR1cygkRD0iIil7JEk9YXJyYXkoKTtmb3JlYWNoKGdldF9yb3dzKCJTRUxFQ1QgYy5yZWxuYW1lIEFTIFwiTmFtZVwiLCBDQVNFIGMucmVsa2luZCBXSEVOICdyJyBUSEVOICd0YWJsZScgV0hFTiAnbScgVEhFTiAnbWF0ZXJpYWxpemVkIHZpZXcnIEVMU0UgJ3ZpZXcnIEVORCBBUyBcIkVuZ2luZVwiLCBwZ19yZWxhdGlvbl9zaXplKGMub2lkKSBBUyBcIkRhdGFfbGVuZ3RoXCIsIHBnX3RvdGFsX3JlbGF0aW9uX3NpemUoYy5vaWQpIC0gcGdfcmVsYXRpb25fc2l6ZShjLm9pZCkgQVMgXCJJbmRleF9sZW5ndGhcIiwgb2JqX2Rlc2NyaXB0aW9uKGMub2lkLCAncGdfY2xhc3MnKSBBUyBcIkNvbW1lbnRcIiwgIi4obWluX3ZlcnNpb24oMTIpPyInJyI6IkNBU0UgV0hFTiBjLnJlbGhhc29pZHMgVEhFTiAnb2lkJyBFTFNFICcnIEVORCIpLiIgQVMgXCJPaWRcIiwgYy5yZWx0dXBsZXMgYXMgXCJSb3dzXCIsIG4ubnNwbmFtZQpGUk9NIHBnX2NsYXNzIGMKSk9JTiBwZ19uYW1lc3BhY2UgbiBPTihuLm5zcG5hbWUgPSBjdXJyZW50X3NjaGVtYSgpIEFORCBuLm9pZCA9IGMucmVsbmFtZXNwYWNlKQpXSEVSRSByZWxraW5kIElOICgncicsICdtJywgJ3YnLCAnZicsICdwJykKIi4oJEQhPSIiPyJBTkQgcmVsbmFtZSA9ICIucSgkRCk6Ik9SREVSIEJZIHJlbG5hbWUiKSlhcyRKKSRJWyRKWyJOYW1lIl1dPSRKO3JldHVybigkRCE9IiI/JElbJERdOiRJKTt9ZnVuY3Rpb24KaXNfdmlldygkUil7cmV0dXJuCmluX2FycmF5KCRSWyJFbmdpbmUiXSxhcnJheSgidmlldyIsIm1hdGVyaWFsaXplZCB2aWV3IikpO31mdW5jdGlvbgpma19zdXBwb3J0KCRSKXtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KZmllbGRzKCRRKXskST1hcnJheSgpOyRCYT1hcnJheSgndGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lJz0+J3RpbWVzdGFtcCcsJ3RpbWVzdGFtcCB3aXRoIHRpbWUgem9uZSc9Pid0aW1lc3RhbXB0eicsKTtmb3JlYWNoKGdldF9yb3dzKCJTRUxFQ1QgYS5hdHRuYW1lIEFTIGZpZWxkLCBmb3JtYXRfdHlwZShhLmF0dHR5cGlkLCBhLmF0dHR5cG1vZCkgQVMgZnVsbF90eXBlLCBwZ19nZXRfZXhwcihkLmFkYmluLCBkLmFkcmVsaWQpIEFTIGRlZmF1bHQsIGEuYXR0bm90bnVsbDo6aW50LCBjb2xfZGVzY3JpcHRpb24oYy5vaWQsIGEuYXR0bnVtKSBBUyBjb21tZW50Ii4obWluX3ZlcnNpb24oMTApPyIsIGEuYXR0aWRlbnRpdHkiOiIiKS4iCkZST00gcGdfY2xhc3MgYwpKT0lOIHBnX25hbWVzcGFjZSBuIE9OIGMucmVsbmFtZXNwYWNlID0gbi5vaWQKSk9JTiBwZ19hdHRyaWJ1dGUgYSBPTiBjLm9pZCA9IGEuYXR0cmVsaWQKTEVGVCBKT0lOIHBnX2F0dHJkZWYgZCBPTiBjLm9pZCA9IGQuYWRyZWxpZCBBTkQgYS5hdHRudW0gPSBkLmFkbnVtCldIRVJFIGMucmVsbmFtZSA9ICIucSgkUSkuIgpBTkQgbi5uc3BuYW1lID0gY3VycmVudF9zY2hlbWEoKQpBTkQgTk9UIGEuYXR0aXNkcm9wcGVkCkFORCBhLmF0dG51bSA+IDAKT1JERVIgQlkgYS5hdHRudW0iKWFzJEope3ByZWdfbWF0Y2goJ34oW14oW10rKShcKCguKilcKSk/KFthLXogXSspPygoXFtbMC05XSpdKSopJH4nLCRKWyJmdWxsX3R5cGUiXSwkQyk7bGlzdCgsJFQsJHRlLCRKWyJsZW5ndGgiXSwkd2EsJEVhKT0kQzskSlsibGVuZ3RoIl0uPSRFYTskYmI9JFQuJHdhO2lmKGlzc2V0KCRCYVskYmJdKSl7JEpbInR5cGUiXT0kQmFbJGJiXTskSlsiZnVsbF90eXBlIl09JEpbInR5cGUiXS4kdGUuJEVhO31lbHNleyRKWyJ0eXBlIl09JFQ7JEpbImZ1bGxfdHlwZSJdPSRKWyJ0eXBlIl0uJHRlLiR3YS4kRWE7fWlmKGluX2FycmF5KCRKWydhdHRpZGVudGl0eSddLGFycmF5KCdhJywnZCcpKSkkSlsnZGVmYXVsdCddPSdHRU5FUkFURUQgJy4oJEpbJ2F0dGlkZW50aXR5J109PSdkJz8nQlkgREVGQVVMVCc6J0FMV0FZUycpLicgQVMgSURFTlRJVFknOyRKWyJudWxsIl09ISRKWyJhdHRub3RudWxsIl07JEpbImF1dG9faW5jcmVtZW50Il09JEpbJ2F0dGlkZW50aXR5J118fHByZWdfbWF0Y2goJ35ebmV4dHZhbFwofmknLCRKWyJkZWZhdWx0Il0pOyRKWyJwcml2aWxlZ2VzIl09YXJyYXkoImluc2VydCI9PjEsInNlbGVjdCI9PjEsInVwZGF0ZSI9PjEpO2lmKHByZWdfbWF0Y2goJ34oLispOjpbXiwpXSsoLiopficsJEpbImRlZmF1bHQiXSwkQykpJEpbImRlZmF1bHQiXT0oJENbMV09PSJOVUxMIj9udWxsOmlkZl91bmVzY2FwZSgkQ1sxXSkuJENbMl0pOyRJWyRKWyJmaWVsZCJdXT0kSjt9cmV0dXJuJEk7fWZ1bmN0aW9uCmluZGV4ZXMoJFEsJGg9bnVsbCl7Z2xvYmFsJGc7aWYoIWlzX29iamVjdCgkaCkpJGg9JGc7JEk9YXJyYXkoKTskUGg9JGgtPnJlc3VsdCgiU0VMRUNUIG9pZCBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWVzcGFjZSA9IChTRUxFQ1Qgb2lkIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgPSBjdXJyZW50X3NjaGVtYSgpKSBBTkQgcmVsbmFtZSA9ICIucSgkUSkpOyRmPWdldF9rZXlfdmFscygiU0VMRUNUIGF0dG51bSwgYXR0bmFtZSBGUk9NIHBnX2F0dHJpYnV0ZSBXSEVSRSBhdHRyZWxpZCA9ICRQaCBBTkQgYXR0bnVtID4gMCIsJGgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCByZWxuYW1lLCBpbmRpc3VuaXF1ZTo6aW50LCBpbmRpc3ByaW1hcnk6OmludCwgaW5ka2V5LCBpbmRvcHRpb24sIChpbmRwcmVkIElTIE5PVCBOVUxMKTo6aW50IGFzIGluZGlzcGFydGlhbCBGUk9NIHBnX2luZGV4IGksIHBnX2NsYXNzIGNpIFdIRVJFIGkuaW5kcmVsaWQgPSAkUGggQU5EIGNpLm9pZCA9IGkuaW5kZXhyZWxpZCIsJGgpYXMkSil7JEhnPSRKWyJyZWxuYW1lIl07JElbJEhnXVsidHlwZSJdPSgkSlsiaW5kaXNwYXJ0aWFsIl0/IklOREVYIjooJEpbImluZGlzcHJpbWFyeSJdPyJQUklNQVJZIjooJEpbImluZGlzdW5pcXVlIl0/IlVOSVFVRSI6IklOREVYIikpKTskSVskSGddWyJjb2x1bW5zIl09YXJyYXkoKTtmb3JlYWNoKGV4cGxvZGUoIiAiLCRKWyJpbmRrZXkiXSlhcyRQZCkkSVskSGddWyJjb2x1bW5zIl1bXT0kZlskUGRdOyRJWyRIZ11bImRlc2NzIl09YXJyYXkoKTtmb3JlYWNoKGV4cGxvZGUoIiAiLCRKWyJpbmRvcHRpb24iXSlhcyRRZCkkSVskSGddWyJkZXNjcyJdW109KCRRZCYxPycxJzpudWxsKTskSVskSGddWyJsZW5ndGhzIl09YXJyYXkoKTt9cmV0dXJuJEk7fWZ1bmN0aW9uCmZvcmVpZ25fa2V5cygkUSl7Z2xvYmFsJHBmOyRJPWFycmF5KCk7Zm9yZWFjaChnZXRfcm93cygiU0VMRUNUIGNvbm5hbWUsIGNvbmRlZmVycmFibGU6OmludCBBUyBkZWZlcnJhYmxlLCBwZ19nZXRfY29uc3RyYWludGRlZihvaWQpIEFTIGRlZmluaXRpb24KRlJPTSBwZ19jb25zdHJhaW50CldIRVJFIGNvbnJlbGlkID0gKFNFTEVDVCBwYy5vaWQgRlJPTSBwZ19jbGFzcyBBUyBwYyBJTk5FUiBKT0lOIHBnX25hbWVzcGFjZSBBUyBwbiBPTiAocG4ub2lkID0gcGMucmVsbmFtZXNwYWNlKSBXSEVSRSBwYy5yZWxuYW1lID0gIi5xKCRRKS4iIEFORCBwbi5uc3BuYW1lID0gY3VycmVudF9zY2hlbWEoKSkKQU5EIGNvbnR5cGUgPSAnZic6OmNoYXIKT1JERVIgQlkgY29ua2V5LCBjb25uYW1lIilhcyRKKXtpZihwcmVnX21hdGNoKCd+Rk9SRUlHTiBLRVlccypcKCguKylcKVxzKlJFRkVSRU5DRVMgKC4rKVwoKC4rKVwpKC4qKSR+aUEnLCRKWydkZWZpbml0aW9uJ10sJEMpKXskSlsnc291cmNlJ109YXJyYXlfbWFwKCdpZGZfdW5lc2NhcGUnLGFycmF5X21hcCgndHJpbScsZXhwbG9kZSgnLCcsJENbMV0pKSk7aWYocHJlZ19tYXRjaCgnfl4oKCIoW14iXXwiIikrInxbXiJdKylcLik/Ij8oIihbXiJdfCIiKSsifFteIl0rKSR+JywkQ1syXSwkQmUpKXskSlsnbnMnXT1pZGZfdW5lc2NhcGUoJEJlWzJdKTskSlsndGFibGUnXT1pZGZfdW5lc2NhcGUoJEJlWzRdKTt9JEpbJ3RhcmdldCddPWFycmF5X21hcCgnaWRmX3VuZXNjYXBlJyxhcnJheV9tYXAoJ3RyaW0nLGV4cGxvZGUoJywnLCRDWzNdKSkpOyRKWydvbl9kZWxldGUnXT0ocHJlZ19tYXRjaCgifk9OIERFTEVURSAoJHBmKX4iLCRDWzRdLCRCZSk/JEJlWzFdOidOTyBBQ1RJT04nKTskSlsnb25fdXBkYXRlJ109KHByZWdfbWF0Y2goIn5PTiBVUERBVEUgKCRwZil+IiwkQ1s0XSwkQmUpPyRCZVsxXTonTk8gQUNUSU9OJyk7JElbJEpbJ2Nvbm5hbWUnXV09JEo7fX1yZXR1cm4kSTt9ZnVuY3Rpb24KY29uc3RyYWludHMoJFEpe2dsb2JhbCRwZjskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCBjb25uYW1lLCBjb25zcmMKRlJPTSBwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQKSU5ORVIgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBPTiBwZ19jb25zdHJhaW50LmNvbm5hbWVzcGFjZSA9IHBnX25hbWVzcGFjZS5vaWQKSU5ORVIgSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIE9OIHBnX2NvbnN0cmFpbnQuY29ucmVsaWQgPSBwZ19jbGFzcy5vaWQgQU5EIHBnX2NvbnN0cmFpbnQuY29ubmFtZXNwYWNlID0gcGdfY2xhc3MucmVsbmFtZXNwYWNlCldIRVJFIHBnX2NvbnN0cmFpbnQuY29udHlwZSA9ICdjJwpBTkQgY29ucmVsaWQgIT0gMCAtLSBoYW5kbGUgb25seSBDT05TVFJBSU5UcyBoZXJlLCBub3QgVFlQRVMKQU5EIG5zcG5hbWUgPSBjdXJyZW50X3NjaGVtYSgpCkFORCByZWxuYW1lID0gIi5xKCRRKS4iCk9SREVSIEJZIGNvbm5hbWVzcGFjZSwgY29ubmFtZSIpYXMkSikkSVskSlsnY29ubmFtZSddXT0kSlsnY29uc3JjJ107cmV0dXJuJEk7fWZ1bmN0aW9uCnZpZXcoJEQpe2dsb2JhbCRnO3JldHVybgphcnJheSgic2VsZWN0Ij0+dHJpbSgkZy0+cmVzdWx0KCJTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoIi4kZy0+cmVzdWx0KCJTRUxFQ1Qgb2lkIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IGN1cnJlbnRfc2NoZW1hKCkpIEFORCByZWxuYW1lID0gIi5xKCREKSkuIikiKSkpO31mdW5jdGlvbgpjb2xsYXRpb25zKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmluZm9ybWF0aW9uX3NjaGVtYSgkbCl7cmV0dXJuKCRsPT0iaW5mb3JtYXRpb25fc2NoZW1hIik7fWZ1bmN0aW9uCmVycm9yKCl7Z2xvYmFsJGc7JEk9aCgkZy0+ZXJyb3IpO2lmKHByZWdfbWF0Y2goJ35eKC4qXG4pPyhbXlxuXSopXG4oICopXF4oXG4uKik/JH5zJywkSSwkQykpJEk9JENbMV0ucHJlZ19yZXBsYWNlKCd+KCg/OlteJl18JlteO10qOyl7Jy5zdHJsZW4oJENbM10pLid9KSguKil+JywnXDE8Yj5cMjwvYj4nLCRDWzJdKS4kQ1s0XTtyZXR1cm4KbmxfYnIoJEkpO31mdW5jdGlvbgpjcmVhdGVfZGF0YWJhc2UoJGwsJGQpe3JldHVybgpxdWVyaWVzKCJDUkVBVEUgREFUQUJBU0UgIi5pZGZfZXNjYXBlKCRsKS4oJGQ/IiBFTkNPRElORyAiLmlkZl9lc2NhcGUoJGQpOiIiKSk7fWZ1bmN0aW9uCmRyb3BfZGF0YWJhc2VzKCRrKXtnbG9iYWwkZzskZy0+Y2xvc2UoKTtyZXR1cm4KYXBwbHlfcXVlcmllcygiRFJPUCBEQVRBQkFTRSIsJGssJ2lkZl9lc2NhcGUnKTt9ZnVuY3Rpb24KcmVuYW1lX2RhdGFiYXNlKCRELCRkKXtyZXR1cm4KcXVlcmllcygiQUxURVIgREFUQUJBU0UgIi5pZGZfZXNjYXBlKERCKS4iIFJFTkFNRSBUTyAiLmlkZl9lc2NhcGUoJEQpKTt9ZnVuY3Rpb24KYXV0b19pbmNyZW1lbnQoKXtyZXR1cm4iIjt9ZnVuY3Rpb24KYWx0ZXJfdGFibGUoJFEsJEQsJHAsJGZkLCRyYiwkeWMsJGQsJEthLCRUZil7JGM9YXJyYXkoKTskdmc9YXJyYXkoKTtpZigkUSE9IiImJiRRIT0kRCkkdmdbXT0iQUxURVIgVEFCTEUgIi50YWJsZSgkUSkuIiBSRU5BTUUgVE8gIi50YWJsZSgkRCk7Zm9yZWFjaCgkcAphcyRvKXskZT1pZGZfZXNjYXBlKCRvWzBdKTskWD0kb1sxXTtpZighJFgpJGNbXT0iRFJPUCAkZSI7ZWxzZXskU2k9JFhbNV07dW5zZXQoJFhbNV0pO2lmKCRvWzBdPT0iIil7aWYoaXNzZXQoJFhbNl0pKSRYWzFdPSgkWFsxXT09IiBiaWdpbnQiPyIgYmlnIjooJFhbMV09PSIgc21hbGxpbnQiPyIgc21hbGwiOiIgIikpLiJzZXJpYWwiOyRjW109KCRRIT0iIj8iQUREICI6IiAgIikuaW1wbG9kZSgkWCk7aWYoaXNzZXQoJFhbNl0pKSRjW109KCRRIT0iIj8iQUREIjoiICIpLiIgUFJJTUFSWSBLRVkgKCRYWzBdKSI7fWVsc2V7aWYoJGUhPSRYWzBdKSR2Z1tdPSJBTFRFUiBUQUJMRSAiLnRhYmxlKCREKS4iIFJFTkFNRSAkZSBUTyAkWFswXSI7JGNbXT0iQUxURVIgJGUgVFlQRSRYWzFdIjtpZighJFhbNl0peyRjW109IkFMVEVSICRlICIuKCRYWzNdPyJTRVQkWFszXSI6IkRST1AgREVGQVVMVCIpOyRjW109IkFMVEVSICRlICIuKCRYWzJdPT0iIE5VTEwiPyJEUk9QIE5PVCI6IlNFVCIpLiRYWzJdO319aWYoJG9bMF0hPSIifHwkU2khPSIiKSR2Z1tdPSJDT01NRU5UIE9OIENPTFVNTiAiLnRhYmxlKCREKS4iLiRYWzBdIElTICIuKCRTaSE9IiI/c3Vic3RyKCRTaSw5KToiJyciKTt9fSRjPWFycmF5X21lcmdlKCRjLCRmZCk7aWYoJFE9PSIiKWFycmF5X3Vuc2hpZnQoJHZnLCJDUkVBVEUgVEFCTEUgIi50YWJsZSgkRCkuIiAoXG4iLmltcGxvZGUoIixcbiIsJGMpLiJcbikiKTtlbHNlaWYoJGMpYXJyYXlfdW5zaGlmdCgkdmcsIkFMVEVSIFRBQkxFICIudGFibGUoJFEpLiJcbiIuaW1wbG9kZSgiLFxuIiwkYykpO2lmKCRRIT0iInx8JHJiIT0iIikkdmdbXT0iQ09NTUVOVCBPTiBUQUJMRSAiLnRhYmxlKCREKS4iIElTICIucSgkcmIpO2lmKCRLYSE9IiIpe31mb3JlYWNoKCR2ZwphcyRHKXtpZighcXVlcmllcygkRykpcmV0dXJuCmZhbHNlO31yZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KYWx0ZXJfaW5kZXhlcygkUSwkYyl7JGk9YXJyYXkoKTskamM9YXJyYXkoKTskdmc9YXJyYXkoKTtmb3JlYWNoKCRjCmFzJFgpe2lmKCRYWzBdIT0iSU5ERVgiKSRpW109KCRYWzJdPT0iRFJPUCI/IlxuRFJPUCBDT05TVFJBSU5UICIuaWRmX2VzY2FwZSgkWFsxXSk6IlxuQUREIi4oJFhbMV0hPSIiPyIgQ09OU1RSQUlOVCAiLmlkZl9lc2NhcGUoJFhbMV0pOiIiKS4iICRYWzBdICIuKCRYWzBdPT0iUFJJTUFSWSI/IktFWSAiOiIiKS4iKCIuaW1wbG9kZSgiLCAiLCRYWzJdKS4iKSIpO2Vsc2VpZigkWFsyXT09IkRST1AiKSRqY1tdPWlkZl9lc2NhcGUoJFhbMV0pO2Vsc2UkdmdbXT0iQ1JFQVRFIElOREVYICIuaWRmX2VzY2FwZSgkWFsxXSE9IiI/JFhbMV06dW5pcWlkKCRRLiJfIikpLiIgT04gIi50YWJsZSgkUSkuIiAoIi5pbXBsb2RlKCIsICIsJFhbMl0pLiIpIjt9aWYoJGkpYXJyYXlfdW5zaGlmdCgkdmcsIkFMVEVSIFRBQkxFICIudGFibGUoJFEpLmltcGxvZGUoIiwiLCRpKSk7aWYoJGpjKWFycmF5X3Vuc2hpZnQoJHZnLCJEUk9QIElOREVYICIuaW1wbG9kZSgiLCAiLCRqYykpO2ZvcmVhY2goJHZnCmFzJEcpe2lmKCFxdWVyaWVzKCRHKSlyZXR1cm4KZmFsc2U7fXJldHVybgp0cnVlO31mdW5jdGlvbgp0cnVuY2F0ZV90YWJsZXMoJFMpe3JldHVybgpxdWVyaWVzKCJUUlVOQ0FURSAiLmltcGxvZGUoIiwgIixhcnJheV9tYXAoJ3RhYmxlJywkUykpKTtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KZHJvcF92aWV3cygkWWkpe3JldHVybgpkcm9wX3RhYmxlcygkWWkpO31mdW5jdGlvbgpkcm9wX3RhYmxlcygkUyl7Zm9yZWFjaCgkUwphcyRRKXskTz10YWJsZV9zdGF0dXMoJFEpO2lmKCFxdWVyaWVzKCJEUk9QICIuc3RydG91cHBlcigkT1siRW5naW5lIl0pLiIgIi50YWJsZSgkUSkpKXJldHVybgpmYWxzZTt9cmV0dXJuCnRydWU7fWZ1bmN0aW9uCm1vdmVfdGFibGVzKCRTLCRZaSwkV2gpe2ZvcmVhY2goYXJyYXlfbWVyZ2UoJFMsJFlpKWFzJFEpeyRPPXRhYmxlX3N0YXR1cygkUSk7aWYoIXF1ZXJpZXMoIkFMVEVSICIuc3RydG91cHBlcigkT1siRW5naW5lIl0pLiIgIi50YWJsZSgkUSkuIiBTRVQgU0NIRU1BICIuaWRmX2VzY2FwZSgkV2gpKSlyZXR1cm4KZmFsc2U7fXJldHVybgp0cnVlO31mdW5jdGlvbgp0cmlnZ2VyKCRELCRRKXtpZigkRD09IiIpcmV0dXJuCmFycmF5KCJTdGF0ZW1lbnQiPT4iRVhFQ1VURSBQUk9DRURVUkUgKCkiKTskZj1hcnJheSgpOyRaPSJXSEVSRSB0cmlnZ2VyX3NjaGVtYSA9IGN1cnJlbnRfc2NoZW1hKCkgQU5EIGV2ZW50X29iamVjdF90YWJsZSA9ICIucSgkUSkuIiBBTkQgdHJpZ2dlcl9uYW1lID0gIi5xKCREKTtmb3JlYWNoKGdldF9yb3dzKCJTRUxFQ1QgKiBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS50cmlnZ2VyZWRfdXBkYXRlX2NvbHVtbnMgJFoiKWFzJEopJGZbXT0kSlsiZXZlbnRfb2JqZWN0X2NvbHVtbiJdOyRJPWFycmF5KCk7Zm9yZWFjaChnZXRfcm93cygnU0VMRUNUIHRyaWdnZXJfbmFtZSBBUyAiVHJpZ2dlciIsIGFjdGlvbl90aW1pbmcgQVMgIlRpbWluZyIsIGV2ZW50X21hbmlwdWxhdGlvbiBBUyAiRXZlbnQiLCBcJ0ZPUiBFQUNIIFwnIHx8IGFjdGlvbl9vcmllbnRhdGlvbiBBUyAiVHlwZSIsIGFjdGlvbl9zdGF0ZW1lbnQgQVMgIlN0YXRlbWVudCIgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEudHJpZ2dlcnMgJy4iJFogT1JERVIgQlkgZXZlbnRfbWFuaXB1bGF0aW9uIERFU0MiKWFzJEope2lmKCRmJiYkSlsiRXZlbnQiXT09IlVQREFURSIpJEpbIkV2ZW50Il0uPSIgT0YiOyRKWyJPZiJdPWltcGxvZGUoIiwgIiwkZik7aWYoJEkpJEpbIkV2ZW50Il0uPSIgT1IgJElbRXZlbnRdIjskST0kSjt9cmV0dXJuJEk7fWZ1bmN0aW9uCnRyaWdnZXJzKCRRKXskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCAqIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLnRyaWdnZXJzIFdIRVJFIHRyaWdnZXJfc2NoZW1hID0gY3VycmVudF9zY2hlbWEoKSBBTkQgZXZlbnRfb2JqZWN0X3RhYmxlID0gIi5xKCRRKSlhcyRKKXskd2k9dHJpZ2dlcigkSlsidHJpZ2dlcl9uYW1lIl0sJFEpOyRJWyR3aVsiVHJpZ2dlciJdXT1hcnJheSgkd2lbIlRpbWluZyJdLCR3aVsiRXZlbnQiXSk7fXJldHVybiRJO31mdW5jdGlvbgp0cmlnZ2VyX29wdGlvbnMoKXtyZXR1cm4KYXJyYXkoIlRpbWluZyI9PmFycmF5KCJCRUZPUkUiLCJBRlRFUiIpLCJFdmVudCI9PmFycmF5KCJJTlNFUlQiLCJVUERBVEUiLCJVUERBVEUgT0YiLCJERUxFVEUiLCJJTlNFUlQgT1IgVVBEQVRFIiwiSU5TRVJUIE9SIFVQREFURSBPRiIsIkRFTEVURSBPUiBJTlNFUlQiLCJERUxFVEUgT1IgVVBEQVRFIiwiREVMRVRFIE9SIFVQREFURSBPRiIsIkRFTEVURSBPUiBJTlNFUlQgT1IgVVBEQVRFIiwiREVMRVRFIE9SIElOU0VSVCBPUiBVUERBVEUgT0YiKSwiVHlwZSI9PmFycmF5KCJGT1IgRUFDSCBST1ciLCJGT1IgRUFDSCBTVEFURU1FTlQiKSwpO31mdW5jdGlvbgpyb3V0aW5lKCRELCRUKXskSz1nZXRfcm93cygnU0VMRUNUIHJvdXRpbmVfZGVmaW5pdGlvbiBBUyBkZWZpbml0aW9uLCBMT1dFUihleHRlcm5hbF9sYW5ndWFnZSkgQVMgbGFuZ3VhZ2UsICoKRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEucm91dGluZXMKV0hFUkUgcm91dGluZV9zY2hlbWEgPSBjdXJyZW50X3NjaGVtYSgpIEFORCBzcGVjaWZpY19uYW1lID0gJy5xKCREKSk7JEk9JEtbMF07JElbInJldHVybnMiXT1hcnJheSgidHlwZSI9PiRJWyJ0eXBlX3VkdF9uYW1lIl0pOyRJWyJmaWVsZHMiXT1nZXRfcm93cygnU0VMRUNUIHBhcmFtZXRlcl9uYW1lIEFTIGZpZWxkLCBkYXRhX3R5cGUgQVMgdHlwZSwgY2hhcmFjdGVyX21heGltdW1fbGVuZ3RoIEFTIGxlbmd0aCwgcGFyYW1ldGVyX21vZGUgQVMgaW5vdXQKRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEucGFyYW1ldGVycwpXSEVSRSBzcGVjaWZpY19zY2hlbWEgPSBjdXJyZW50X3NjaGVtYSgpIEFORCBzcGVjaWZpY19uYW1lID0gJy5xKCREKS4nCk9SREVSIEJZIG9yZGluYWxfcG9zaXRpb24nKTtyZXR1cm4kSTt9ZnVuY3Rpb24Kcm91dGluZXMoKXtyZXR1cm4KZ2V0X3Jvd3MoJ1NFTEVDVCBzcGVjaWZpY19uYW1lIEFTICJTUEVDSUZJQ19OQU1FIiwgcm91dGluZV90eXBlIEFTICJST1VUSU5FX1RZUEUiLCByb3V0aW5lX25hbWUgQVMgIlJPVVRJTkVfTkFNRSIsIHR5cGVfdWR0X25hbWUgQVMgIkRURF9JREVOVElGSUVSIgpGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5yb3V0aW5lcwpXSEVSRSByb3V0aW5lX3NjaGVtYSA9IGN1cnJlbnRfc2NoZW1hKCkKT1JERVIgQlkgU1BFQ0lGSUNfTkFNRScpO31mdW5jdGlvbgpyb3V0aW5lX2xhbmd1YWdlcygpe3JldHVybgpnZXRfdmFscygiU0VMRUNUIExPV0VSKGxhbm5hbWUpIEZST00gcGdfY2F0YWxvZy5wZ19sYW5ndWFnZSIpO31mdW5jdGlvbgpyb3V0aW5lX2lkKCRELCRKKXskST1hcnJheSgpO2ZvcmVhY2goJEpbImZpZWxkcyJdYXMkbykkSVtdPSRvWyJ0eXBlIl07cmV0dXJuCmlkZl9lc2NhcGUoJEQpLiIoIi5pbXBsb2RlKCIsICIsJEkpLiIpIjt9ZnVuY3Rpb24KbGFzdF9pZCgpe3JldHVybgowO31mdW5jdGlvbgpleHBsYWluKCRnLCRHKXtyZXR1cm4kZy0+cXVlcnkoIkVYUExBSU4gJEciKTt9ZnVuY3Rpb24KZm91bmRfcm93cygkUiwkWil7Z2xvYmFsJGc7aWYocHJlZ19tYXRjaCgifiByb3dzPShbMC05XSspfiIsJGctPnJlc3VsdCgiRVhQTEFJTiBTRUxFQ1QgKiBGUk9NICIuaWRmX2VzY2FwZSgkUlsiTmFtZSJdKS4oJFo/IiBXSEVSRSAiLmltcGxvZGUoIiBBTkQgIiwkWik6IiIpKSwkR2cpKXJldHVybiRHZ1sxXTtyZXR1cm4KZmFsc2U7fWZ1bmN0aW9uCnR5cGVzKCl7cmV0dXJuCmdldF92YWxzKCJTRUxFQ1QgdHlwbmFtZQpGUk9NIHBnX3R5cGUKV0hFUkUgdHlwbmFtZXNwYWNlID0gKFNFTEVDVCBvaWQgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgbnNwbmFtZSA9IGN1cnJlbnRfc2NoZW1hKCkpCkFORCB0eXB0eXBlIElOICgnYicsJ2QnLCdlJykKQU5EIHR5cGVsZW0gPSAwIik7fWZ1bmN0aW9uCnNjaGVtYXMoKXtyZXR1cm4KZ2V0X3ZhbHMoIlNFTEVDVCBuc3BuYW1lIEZST00gcGdfbmFtZXNwYWNlIE9SREVSIEJZIG5zcG5hbWUiKTt9ZnVuY3Rpb24KZ2V0X3NjaGVtYSgpe2dsb2JhbCRnO3JldHVybiRnLT5yZXN1bHQoIlNFTEVDVCBjdXJyZW50X3NjaGVtYSgpIik7fWZ1bmN0aW9uCnNldF9zY2hlbWEoJFpnLCRoPW51bGwpe2dsb2JhbCRnLCRVLCRHaDtpZighJGgpJGg9JGc7JEk9JGgtPnF1ZXJ5KCJTRVQgc2VhcmNoX3BhdGggVE8gIi5pZGZfZXNjYXBlKCRaZykpO2ZvcmVhY2godHlwZXMoKWFzJFQpe2lmKCFpc3NldCgkVVskVF0pKXskVVskVF09MDskR2hbJ1VzZXIgdHlwZXMnXVtdPSRUO319cmV0dXJuJEk7fWZ1bmN0aW9uCmZvcmVpZ25fa2V5c19zcWwoJFEpeyRJPSIiOyRPPXRhYmxlX3N0YXR1cygkUSk7JGNkPWZvcmVpZ25fa2V5cygkUSk7a3NvcnQoJGNkKTtmb3JlYWNoKCRjZAphcyRiZD0+JGFkKSRJLj0iQUxURVIgVEFCTEUgT05MWSAiLmlkZl9lc2NhcGUoJE9bJ25zcG5hbWUnXSkuIi4iLmlkZl9lc2NhcGUoJE9bJ05hbWUnXSkuIiBBREQgQ09OU1RSQUlOVCAiLmlkZl9lc2NhcGUoJGJkKS4iICRhZFtkZWZpbml0aW9uXSAiLigkYWRbJ2RlZmVycmFibGUnXT8nREVGRVJSQUJMRSc6J05PVCBERUZFUlJBQkxFJykuIjtcbiI7cmV0dXJuKCRJPyIkSVxuIjokSSk7fWZ1bmN0aW9uCmNyZWF0ZV9zcWwoJFEsJEthLCRIaCl7Z2xvYmFsJGc7JEk9Jyc7JFBnPWFycmF5KCk7JGpoPWFycmF5KCk7JE89dGFibGVfc3RhdHVzKCRRKTtpZihpc192aWV3KCRPKSl7JFhpPXZpZXcoJFEpO3JldHVybgpydHJpbSgiQ1JFQVRFIFZJRVcgIi5pZGZfZXNjYXBlKCRRKS4iIEFTICRYaVtzZWxlY3RdIiwiOyIpO30kcD1maWVsZHMoJFEpOyR4PWluZGV4ZXMoJFEpO2tzb3J0KCR4KTskQWI9Y29uc3RyYWludHMoJFEpO2lmKCEkT3x8ZW1wdHkoJHApKXJldHVybgpmYWxzZTskST0iQ1JFQVRFIFRBQkxFICIuaWRmX2VzY2FwZSgkT1snbnNwbmFtZSddKS4iLiIuaWRmX2VzY2FwZSgkT1snTmFtZSddKS4iIChcbiAgICAiO2ZvcmVhY2goJHAKYXMkVmM9PiRvKXskUWY9aWRmX2VzY2FwZSgkb1snZmllbGQnXSkuJyAnLiRvWydmdWxsX3R5cGUnXS5kZWZhdWx0X3ZhbHVlKCRvKS4oJG9bJ2F0dG5vdG51bGwnXT8iIE5PVCBOVUxMIjoiIik7JFBnW109JFFmO2lmKHByZWdfbWF0Y2goJ35uZXh0dmFsXChcJyhbXlwnXSspXCdcKX4nLCRvWydkZWZhdWx0J10sJENlKSl7JGloPSRDZVsxXTskeGg9cmVzZXQoZ2V0X3Jvd3MobWluX3ZlcnNpb24oMTApPyJTRUxFQ1QgKiwgY2FjaGVfc2l6ZSBBUyBjYWNoZV92YWx1ZSBGUk9NIHBnX3NlcXVlbmNlcyBXSEVSRSBzY2hlbWFuYW1lID0gY3VycmVudF9zY2hlbWEoKSBBTkQgc2VxdWVuY2VuYW1lID0gIi5xKCRpaCk6IlNFTEVDVCAqIEZST00gJGloIikpOyRqaFtdPSgkSGg9PSJEUk9QK0NSRUFURSI/IkRST1AgU0VRVUVOQ0UgSUYgRVhJU1RTICRpaDtcbiI6IiIpLiJDUkVBVEUgU0VRVUVOQ0UgJGloIElOQ1JFTUVOVCAkeGhbaW5jcmVtZW50X2J5XSBNSU5WQUxVRSAkeGhbbWluX3ZhbHVlXSBNQVhWQUxVRSAkeGhbbWF4X3ZhbHVlXSIuKCRLYSYmJHhoWydsYXN0X3ZhbHVlJ10/IiBTVEFSVCAkeGhbbGFzdF92YWx1ZV0iOiIiKS4iIENBQ0hFICR4aFtjYWNoZV92YWx1ZV07Ijt9fWlmKCFlbXB0eSgkamgpKSRJPWltcGxvZGUoIlxuXG4iLCRqaCkuIlxuXG4kSSI7Zm9yZWFjaCgkeAphcyRLZD0+JHcpe3N3aXRjaCgkd1sndHlwZSddKXtjYXNlJ1VOSVFVRSc6JFBnW109IkNPTlNUUkFJTlQgIi5pZGZfZXNjYXBlKCRLZCkuIiBVTklRVUUgKCIuaW1wbG9kZSgnLCAnLGFycmF5X21hcCgnaWRmX2VzY2FwZScsJHdbJ2NvbHVtbnMnXSkpLiIpIjticmVhaztjYXNlJ1BSSU1BUlknOiRQZ1tdPSJDT05TVFJBSU5UICIuaWRmX2VzY2FwZSgkS2QpLiIgUFJJTUFSWSBLRVkgKCIuaW1wbG9kZSgnLCAnLGFycmF5X21hcCgnaWRmX2VzY2FwZScsJHdbJ2NvbHVtbnMnXSkpLiIpIjticmVhazt9fWZvcmVhY2goJEFiCmFzJHhiPT4kemIpJFBnW109IkNPTlNUUkFJTlQgIi5pZGZfZXNjYXBlKCR4YikuIiBDSEVDSyAkemIiOyRJLj1pbXBsb2RlKCIsXG4gICAgIiwkUGcpLiJcbikgV0lUSCAob2lkcyA9ICIuKCRPWydPaWQnXT8ndHJ1ZSc6J2ZhbHNlJykuIik7Ijtmb3JlYWNoKCR4CmFzJEtkPT4kdyl7aWYoJHdbJ3R5cGUnXT09J0lOREVYJyl7JGY9YXJyYXkoKTtmb3JlYWNoKCR3Wydjb2x1bW5zJ11hcyR6PT4kWCkkZltdPWlkZl9lc2NhcGUoJFgpLigkd1snZGVzY3MnXVskel0/IiBERVNDIjoiIik7JEkuPSJcblxuQ1JFQVRFIElOREVYICIuaWRmX2VzY2FwZSgkS2QpLiIgT04gIi5pZGZfZXNjYXBlKCRPWyduc3BuYW1lJ10pLiIuIi5pZGZfZXNjYXBlKCRPWydOYW1lJ10pLiIgVVNJTkcgYnRyZWUgKCIuaW1wbG9kZSgnLCAnLCRmKS4iKTsiO319aWYoJE9bJ0NvbW1lbnQnXSkkSS49IlxuXG5DT01NRU5UIE9OIFRBQkxFICIuaWRmX2VzY2FwZSgkT1snbnNwbmFtZSddKS4iLiIuaWRmX2VzY2FwZSgkT1snTmFtZSddKS4iIElTICIucSgkT1snQ29tbWVudCddKS4iOyI7Zm9yZWFjaCgkcAphcyRWYz0+JG8pe2lmKCRvWydjb21tZW50J10pJEkuPSJcblxuQ09NTUVOVCBPTiBDT0xVTU4gIi5pZGZfZXNjYXBlKCRPWyduc3BuYW1lJ10pLiIuIi5pZGZfZXNjYXBlKCRPWydOYW1lJ10pLiIuIi5pZGZfZXNjYXBlKCRWYykuIiBJUyAiLnEoJG9bJ2NvbW1lbnQnXSkuIjsiO31yZXR1cm4KcnRyaW0oJEksJzsnKTt9ZnVuY3Rpb24KdHJ1bmNhdGVfc3FsKCRRKXtyZXR1cm4iVFJVTkNBVEUgIi50YWJsZSgkUSk7fWZ1bmN0aW9uCnRyaWdnZXJfc3FsKCRRKXskTz10YWJsZV9zdGF0dXMoJFEpOyRJPSIiO2ZvcmVhY2godHJpZ2dlcnMoJFEpYXMkdmk9PiR1aSl7JHdpPXRyaWdnZXIoJHZpLCRPWydOYW1lJ10pOyRJLj0iXG5DUkVBVEUgVFJJR0dFUiAiLmlkZl9lc2NhcGUoJHdpWydUcmlnZ2VyJ10pLiIgJHdpW1RpbWluZ10gJHdpW0V2ZW50XSBPTiAiLmlkZl9lc2NhcGUoJE9bIm5zcG5hbWUiXSkuIi4iLmlkZl9lc2NhcGUoJE9bJ05hbWUnXSkuIiAkd2lbVHlwZV0gJHdpW1N0YXRlbWVudF07O1xuIjt9cmV0dXJuJEk7fWZ1bmN0aW9uCnVzZV9zcWwoJGope3JldHVybiJcY29ubmVjdCAiLmlkZl9lc2NhcGUoJGopO31mdW5jdGlvbgpzaG93X3ZhcmlhYmxlcygpe3JldHVybgpnZXRfa2V5X3ZhbHMoIlNIT1cgQUxMIik7fWZ1bmN0aW9uCnByb2Nlc3NfbGlzdCgpe3JldHVybgpnZXRfcm93cygiU0VMRUNUICogRlJPTSBwZ19zdGF0X2FjdGl2aXR5IE9SREVSIEJZICIuKG1pbl92ZXJzaW9uKDkuMik/InBpZCI6InByb2NwaWQiKSk7fWZ1bmN0aW9uCnNob3dfc3RhdHVzKCl7fWZ1bmN0aW9uCmNvbnZlcnRfZmllbGQoJG8pe31mdW5jdGlvbgp1bmNvbnZlcnRfZmllbGQoJG8sJEkpe3JldHVybiRJO31mdW5jdGlvbgpzdXBwb3J0KCRUYyl7cmV0dXJuCnByZWdfbWF0Y2goJ35eKGRhdGFiYXNlfHRhYmxlfGNvbHVtbnN8c3FsfGluZGV4ZXN8ZGVzY2lkeHxjb21tZW50fHZpZXd8Jy4obWluX3ZlcnNpb24oOS4zKT8nbWF0ZXJpYWxpemVkdmlld3wnOicnKS4nc2NoZW1lfHJvdXRpbmV8cHJvY2Vzc2xpc3R8c2VxdWVuY2V8dHJpZ2dlcnx0eXBlfHZhcmlhYmxlc3xkcm9wX2NvbHxraWxsfGR1bXApJH4nLCRUYyk7fWZ1bmN0aW9uCmtpbGxfcHJvY2VzcygkWCl7cmV0dXJuCnF1ZXJpZXMoIlNFTEVDVCBwZ190ZXJtaW5hdGVfYmFja2VuZCgiLm51bWJlcigkWCkuIikiKTt9ZnVuY3Rpb24KY29ubmVjdGlvbl9pZCgpe3JldHVybiJTRUxFQ1QgcGdfYmFja2VuZF9waWQoKSI7fWZ1bmN0aW9uCm1heF9jb25uZWN0aW9ucygpe2dsb2JhbCRnO3JldHVybiRnLT5yZXN1bHQoIlNIT1cgbWF4X2Nvbm5lY3Rpb25zIik7fWZ1bmN0aW9uCmRyaXZlcl9jb25maWcoKXskVT1hcnJheSgpOyRHaD1hcnJheSgpO2ZvcmVhY2goYXJyYXkoJ051bWJlcnMnPT5hcnJheSgic21hbGxpbnQiPT41LCJpbnRlZ2VyIj0+MTAsImJpZ2ludCI9PjE5LCJib29sZWFuIj0+MSwibnVtZXJpYyI9PjAsInJlYWwiPT43LCJkb3VibGUgcHJlY2lzaW9uIj0+MTYsIm1vbmV5Ij0+MjApLCdEYXRlIGFuZCB0aW1lJz0+YXJyYXkoImRhdGUiPT4xMywidGltZSI9PjE3LCJ0aW1lc3RhbXAiPT4yMCwidGltZXN0YW1wdHoiPT4yMSwiaW50ZXJ2YWwiPT4wKSwnU3RyaW5ncyc9PmFycmF5KCJjaGFyYWN0ZXIiPT4wLCJjaGFyYWN0ZXIgdmFyeWluZyI9PjAsInRleHQiPT4wLCJ0c3F1ZXJ5Ij0+MCwidHN2ZWN0b3IiPT4wLCJ1dWlkIj0+MCwieG1sIj0+MCksJ0JpbmFyeSc9PmFycmF5KCJiaXQiPT4wLCJiaXQgdmFyeWluZyI9PjAsImJ5dGVhIj0+MCksJ05ldHdvcmsnPT5hcnJheSgiY2lkciI9PjQzLCJpbmV0Ij0+NDMsIm1hY2FkZHIiPT4xNywidHhpZF9zbmFwc2hvdCI9PjApLCdHZW9tZXRyeSc9PmFycmF5KCJib3giPT4wLCJjaXJjbGUiPT4wLCJsaW5lIj0+MCwibHNlZyI9PjAsInBhdGgiPT4wLCJwb2ludCI9PjAsInBvbHlnb24iPT4wKSwpYXMkej0+JFgpeyRVKz0kWDskR2hbJHpdPWFycmF5X2tleXMoJFgpO31yZXR1cm4KYXJyYXkoJ3Bvc3NpYmxlX2RyaXZlcnMnPT5hcnJheSgiUGdTUUwiLCJQRE9fUGdTUUwiKSwnanVzaCc9PiJwZ3NxbCIsJ3R5cGVzJz0+JFUsJ3N0cnVjdHVyZWRfdHlwZXMnPT4kR2gsJ3Vuc2lnbmVkJz0+YXJyYXkoKSwnb3BlcmF0b3JzJz0+YXJyYXkoIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCIhPSIsIn4iLCIhfiIsIkxJS0UiLCJMSUtFICUlIiwiSUxJS0UiLCJJTElLRSAlJSIsIklOIiwiSVMgTlVMTCIsIk5PVCBMSUtFIiwiTk9UIElOIiwiSVMgTk9UIE5VTEwiKSwnZnVuY3Rpb25zJz0+YXJyYXkoImNoYXJfbGVuZ3RoIiwibG93ZXIiLCJyb3VuZCIsInRvX2hleCIsInRvX3RpbWVzdGFtcCIsInVwcGVyIiksJ2dyb3VwaW5nJz0+YXJyYXkoImF2ZyIsImNvdW50IiwiY291bnQgZGlzdGluY3QiLCJtYXgiLCJtaW4iLCJzdW0iKSwnZWRpdF9mdW5jdGlvbnMnPT5hcnJheShhcnJheSgiY2hhciI9PiJtZDUiLCJkYXRlfHRpbWUiPT4ibm93IiwpLGFycmF5KG51bWJlcl90eXBlKCk9PiIrLy0iLCJkYXRlfHRpbWUiPT4iKyBpbnRlcnZhbC8tIGludGVydmFsIiwiY2hhcnx0ZXh0Ij0+Inx8IiwpKSwpO319JGljWyJvcmFjbGUiXT0iT3JhY2xlIChiZXRhKSI7aWYoaXNzZXQoJF9HRVRbIm9yYWNsZSJdKSl7ZGVmaW5lKCJEUklWRVIiLCJvcmFjbGUiKTtpZihleHRlbnNpb25fbG9hZGVkKCJvY2k4Iikpe2NsYXNzCk1pbl9EQnt2YXIkZXh0ZW5zaW9uPSJvY2k4IiwkX2xpbmssJF9yZXN1bHQsJHNlcnZlcl9pbmZvLCRhZmZlY3RlZF9yb3dzLCRlcnJubywkZXJyb3I7dmFyJF9jdXJyZW50X2RiO2Z1bmN0aW9uCl9lcnJvcigkQWMsJG4pe2lmKGluaV9ib29sKCJodG1sX2Vycm9ycyIpKSRuPWh0bWxfZW50aXR5X2RlY29kZShzdHJpcF90YWdzKCRuKSk7JG49cHJlZ19yZXBsYWNlKCd+XlteOl0qOiB+JywnJywkbik7JHRoaXMtPmVycm9yPSRuO31mdW5jdGlvbgpjb25uZWN0KCRNLCRWLCRGKXskdGhpcy0+X2xpbms9QG9jaV9uZXdfY29ubmVjdCgkViwkRiwkTSwiQUwzMlVURjgiKTtpZigkdGhpcy0+X2xpbmspeyR0aGlzLT5zZXJ2ZXJfaW5mbz1vY2lfc2VydmVyX3ZlcnNpb24oJHRoaXMtPl9saW5rKTtyZXR1cm4KdHJ1ZTt9JG49b2NpX2Vycm9yKCk7JHRoaXMtPmVycm9yPSRuWyJtZXNzYWdlIl07cmV0dXJuCmZhbHNlO31mdW5jdGlvbgpxdW90ZSgkUCl7cmV0dXJuIiciLnN0cl9yZXBsYWNlKCInIiwiJyciLCRQKS4iJyI7fWZ1bmN0aW9uCnNlbGVjdF9kYigkail7JHRoaXMtPl9jdXJyZW50X2RiPSRqO3JldHVybgp0cnVlO31mdW5jdGlvbgpxdWVyeSgkRywkQmk9ZmFsc2UpeyRIPW9jaV9wYXJzZSgkdGhpcy0+X2xpbmssJEcpOyR0aGlzLT5lcnJvcj0iIjtpZighJEgpeyRuPW9jaV9lcnJvcigkdGhpcy0+X2xpbmspOyR0aGlzLT5lcnJubz0kblsiY29kZSJdOyR0aGlzLT5lcnJvcj0kblsibWVzc2FnZSJdO3JldHVybgpmYWxzZTt9c2V0X2Vycm9yX2hhbmRsZXIoYXJyYXkoJHRoaXMsJ19lcnJvcicpKTskST1Ab2NpX2V4ZWN1dGUoJEgpO3Jlc3RvcmVfZXJyb3JfaGFuZGxlcigpO2lmKCRJKXtpZihvY2lfbnVtX2ZpZWxkcygkSCkpcmV0dXJuCm5ldwpNaW5fUmVzdWx0KCRIKTskdGhpcy0+YWZmZWN0ZWRfcm93cz1vY2lfbnVtX3Jvd3MoJEgpO29jaV9mcmVlX3N0YXRlbWVudCgkSCk7fXJldHVybiRJO31mdW5jdGlvbgptdWx0aV9xdWVyeSgkRyl7cmV0dXJuJHRoaXMtPl9yZXN1bHQ9JHRoaXMtPnF1ZXJ5KCRHKTt9ZnVuY3Rpb24Kc3RvcmVfcmVzdWx0KCl7cmV0dXJuJHRoaXMtPl9yZXN1bHQ7fWZ1bmN0aW9uCm5leHRfcmVzdWx0KCl7cmV0dXJuCmZhbHNlO31mdW5jdGlvbgpyZXN1bHQoJEcsJG89MSl7JEg9JHRoaXMtPnF1ZXJ5KCRHKTtpZighaXNfb2JqZWN0KCRIKXx8IW9jaV9mZXRjaCgkSC0+X3Jlc3VsdCkpcmV0dXJuCmZhbHNlO3JldHVybgpvY2lfcmVzdWx0KCRILT5fcmVzdWx0LCRvKTt9fWNsYXNzCk1pbl9SZXN1bHR7dmFyJF9yZXN1bHQsJF9vZmZzZXQ9MSwkbnVtX3Jvd3M7ZnVuY3Rpb24KX19jb25zdHJ1Y3QoJEgpeyR0aGlzLT5fcmVzdWx0PSRIO31mdW5jdGlvbgpfY29udmVydCgkSil7Zm9yZWFjaCgoYXJyYXkpJEoKYXMkej0+JFgpe2lmKGlzX2EoJFgsJ09DSS1Mb2InKSkkSlskel09JFgtPmxvYWQoKTt9cmV0dXJuJEo7fWZ1bmN0aW9uCmZldGNoX2Fzc29jKCl7cmV0dXJuJHRoaXMtPl9jb252ZXJ0KG9jaV9mZXRjaF9hc3NvYygkdGhpcy0+X3Jlc3VsdCkpO31mdW5jdGlvbgpmZXRjaF9yb3coKXtyZXR1cm4kdGhpcy0+X2NvbnZlcnQob2NpX2ZldGNoX3JvdygkdGhpcy0+X3Jlc3VsdCkpO31mdW5jdGlvbgpmZXRjaF9maWVsZCgpeyRlPSR0aGlzLT5fb2Zmc2V0Kys7JEk9bmV3CnN0ZENsYXNzOyRJLT5uYW1lPW9jaV9maWVsZF9uYW1lKCR0aGlzLT5fcmVzdWx0LCRlKTskSS0+b3JnbmFtZT0kSS0+bmFtZTskSS0+dHlwZT1vY2lfZmllbGRfdHlwZSgkdGhpcy0+X3Jlc3VsdCwkZSk7JEktPmNoYXJzZXRucj0ocHJlZ19tYXRjaCgifnJhd3xibG9ifGJmaWxlfiIsJEktPnR5cGUpPzYzOjApO3JldHVybiRJO31mdW5jdGlvbgpfX2Rlc3RydWN0KCl7b2NpX2ZyZWVfc3RhdGVtZW50KCR0aGlzLT5fcmVzdWx0KTt9fX1lbHNlaWYoZXh0ZW5zaW9uX2xvYWRlZCgicGRvX29jaSIpKXtjbGFzcwpNaW5fREIKZXh0ZW5kcwpNaW5fUERPe3ZhciRleHRlbnNpb249IlBET19PQ0kiO3ZhciRfY3VycmVudF9kYjtmdW5jdGlvbgpjb25uZWN0KCRNLCRWLCRGKXskdGhpcy0+ZHNuKCJvY2k6ZGJuYW1lPS8vJE07Y2hhcnNldD1BTDMyVVRGOCIsJFYsJEYpO3JldHVybgp0cnVlO31mdW5jdGlvbgpzZWxlY3RfZGIoJGopeyR0aGlzLT5fY3VycmVudF9kYj0kajtyZXR1cm4KdHJ1ZTt9fX1jbGFzcwpNaW5fRHJpdmVyCmV4dGVuZHMKTWluX1NRTHtmdW5jdGlvbgpiZWdpbigpe3JldHVybgp0cnVlO31mdW5jdGlvbgppbnNlcnRVcGRhdGUoJFEsJEssJGtnKXtnbG9iYWwkZztmb3JlYWNoKCRLCmFzJE4peyRJaT1hcnJheSgpOyRaPWFycmF5KCk7Zm9yZWFjaCgkTgphcyR6PT4kWCl7JElpW109IiR6ID0gJFgiO2lmKGlzc2V0KCRrZ1tpZGZfdW5lc2NhcGUoJHopXSkpJFpbXT0iJHogPSAkWCI7fWlmKCEoKCRaJiZxdWVyaWVzKCJVUERBVEUgIi50YWJsZSgkUSkuIiBTRVQgIi5pbXBsb2RlKCIsICIsJElpKS4iIFdIRVJFICIuaW1wbG9kZSgiIEFORCAiLCRaKSkmJiRnLT5hZmZlY3RlZF9yb3dzKXx8cXVlcmllcygiSU5TRVJUIElOVE8gIi50YWJsZSgkUSkuIiAoIi5pbXBsb2RlKCIsICIsYXJyYXlfa2V5cygkTikpLiIpIFZBTFVFUyAoIi5pbXBsb2RlKCIsICIsJE4pLiIpIikpKXJldHVybgpmYWxzZTt9cmV0dXJuCnRydWU7fX1mdW5jdGlvbgppZGZfZXNjYXBlKCR2KXtyZXR1cm4nIicuc3RyX3JlcGxhY2UoJyInLCciIicsJHYpLiciJzt9ZnVuY3Rpb24KdGFibGUoJHYpe3JldHVybgppZGZfZXNjYXBlKCR2KTt9ZnVuY3Rpb24KY29ubmVjdCgpe2dsb2JhbCRiOyRnPW5ldwpNaW5fREI7JEtiPSRiLT5jcmVkZW50aWFscygpO2lmKCRnLT5jb25uZWN0KCRLYlswXSwkS2JbMV0sJEtiWzJdKSlyZXR1cm4kZztyZXR1cm4kZy0+ZXJyb3I7fWZ1bmN0aW9uCmdldF9kYXRhYmFzZXMoKXtyZXR1cm4KZ2V0X3ZhbHMoIlNFTEVDVCB0YWJsZXNwYWNlX25hbWUgRlJPTSB1c2VyX3RhYmxlc3BhY2VzIE9SREVSIEJZIDEiKTt9ZnVuY3Rpb24KbGltaXQoJEcsJFosJF8sJGhmPTAsJGhoPSIgIil7cmV0dXJuKCRoZj8iICogRlJPTSAoU0VMRUNUIHQuKiwgcm93bnVtIEFTIHJudW0gRlJPTSAoU0VMRUNUICRHJFopIHQgV0hFUkUgcm93bnVtIDw9ICIuKCRfKyRoZikuIikgV0hFUkUgcm51bSA+ICRoZiI6KCRfIT09bnVsbD8iICogRlJPTSAoU0VMRUNUICRHJFopIFdIRVJFIHJvd251bSA8PSAiLigkXyskaGYpOiIgJEckWiIpKTt9ZnVuY3Rpb24KbGltaXQxKCRRLCRHLCRaLCRoaD0iXG4iKXtyZXR1cm4iICRHJFoiO31mdW5jdGlvbgpkYl9jb2xsYXRpb24oJGwsJGxiKXtnbG9iYWwkZztyZXR1cm4kZy0+cmVzdWx0KCJTRUxFQ1QgdmFsdWUgRlJPTSBubHNfZGF0YWJhc2VfcGFyYW1ldGVycyBXSEVSRSBwYXJhbWV0ZXIgPSAnTkxTX0NIQVJBQ1RFUlNFVCciKTt9ZnVuY3Rpb24KZW5naW5lcygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgpsb2dnZWRfdXNlcigpe2dsb2JhbCRnO3JldHVybiRnLT5yZXN1bHQoIlNFTEVDVCBVU0VSIEZST00gRFVBTCIpO31mdW5jdGlvbgpnZXRfY3VycmVudF9kYigpe2dsb2JhbCRnOyRsPSRnLT5fY3VycmVudF9kYj8kZy0+X2N1cnJlbnRfZGI6REI7dW5zZXQoJGctPl9jdXJyZW50X2RiKTtyZXR1cm4kbDt9ZnVuY3Rpb24Kd2hlcmVfb3duZXIoJGlnLCRLZj0ib3duZXIiKXtpZighJF9HRVRbIm5zIl0pcmV0dXJuJyc7cmV0dXJuIiRpZyRLZiA9IHN5c19jb250ZXh0KCdVU0VSRU5WJywgJ0NVUlJFTlRfU0NIRU1BJykiO31mdW5jdGlvbgp2aWV3c190YWJsZSgkZil7JEtmPXdoZXJlX293bmVyKCcnKTtyZXR1cm4iKFNFTEVDVCAkZiBGUk9NIGFsbF92aWV3cyBXSEVSRSAiLigkS2Y/JEtmOiJyb3dudW0gPCAwIikuIikiO31mdW5jdGlvbgp0YWJsZXNfbGlzdCgpeyRYaT12aWV3c190YWJsZSgidmlld19uYW1lIik7JEtmPXdoZXJlX293bmVyKCIgQU5EICIpO3JldHVybgpnZXRfa2V5X3ZhbHMoIlNFTEVDVCB0YWJsZV9uYW1lLCAndGFibGUnIEZST00gYWxsX3RhYmxlcyBXSEVSRSB0YWJsZXNwYWNlX25hbWUgPSAiLnEoREIpLiIkS2YKVU5JT04gU0VMRUNUIHZpZXdfbmFtZSwgJ3ZpZXcnIEZST00gJFhpCk9SREVSIEJZIDEiKTt9ZnVuY3Rpb24KY291bnRfdGFibGVzKCRrKXtnbG9iYWwkZzskST1hcnJheSgpO2ZvcmVhY2goJGsKYXMkbCkkSVskbF09JGctPnJlc3VsdCgiU0VMRUNUIENPVU5UKCopIEZST00gYWxsX3RhYmxlcyBXSEVSRSB0YWJsZXNwYWNlX25hbWUgPSAiLnEoJGwpKTtyZXR1cm4kSTt9ZnVuY3Rpb24KdGFibGVfc3RhdHVzKCREPSIiKXskST1hcnJheSgpOyRiaD1xKCREKTskbD1nZXRfY3VycmVudF9kYigpOyRYaT12aWV3c190YWJsZSgidmlld19uYW1lIik7JEtmPXdoZXJlX293bmVyKCIgQU5EICIpO2ZvcmVhY2goZ2V0X3Jvd3MoJ1NFTEVDVCB0YWJsZV9uYW1lICJOYW1lIiwgXCd0YWJsZVwnICJFbmdpbmUiLCBhdmdfcm93X2xlbiAqIG51bV9yb3dzICJEYXRhX2xlbmd0aCIsIG51bV9yb3dzICJSb3dzIiBGUk9NIGFsbF90YWJsZXMgV0hFUkUgdGFibGVzcGFjZV9uYW1lID0gJy5xKCRsKS4kS2YuKCREIT0iIj8iIEFORCB0YWJsZV9uYW1lID0gJGJoIjoiIikuIgpVTklPTiBTRUxFQ1Qgdmlld19uYW1lLCAndmlldycsIDAsIDAgRlJPTSAkWGkiLigkRCE9IiI/IiBXSEVSRSB2aWV3X25hbWUgPSAkYmgiOiIiKS4iCk9SREVSIEJZIDEiKWFzJEope2lmKCREIT0iIilyZXR1cm4kSjskSVskSlsiTmFtZSJdXT0kSjt9cmV0dXJuJEk7fWZ1bmN0aW9uCmlzX3ZpZXcoJFIpe3JldHVybiRSWyJFbmdpbmUiXT09InZpZXciO31mdW5jdGlvbgpma19zdXBwb3J0KCRSKXtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KZmllbGRzKCRRKXskST1hcnJheSgpOyRLZj13aGVyZV9vd25lcigiIEFORCAiKTtmb3JlYWNoKGdldF9yb3dzKCJTRUxFQ1QgKiBGUk9NIGFsbF90YWJfY29sdW1ucyBXSEVSRSB0YWJsZV9uYW1lID0gIi5xKCRRKS4iJEtmIE9SREVSIEJZIGNvbHVtbl9pZCIpYXMkSil7JFQ9JEpbIkRBVEFfVFlQRSJdOyR0ZT0iJEpbREFUQV9QUkVDSVNJT05dLCRKW0RBVEFfU0NBTEVdIjtpZigkdGU9PSIsIikkdGU9JEpbIkNIQVJfQ09MX0RFQ0xfTEVOR1RIIl07JElbJEpbIkNPTFVNTl9OQU1FIl1dPWFycmF5KCJmaWVsZCI9PiRKWyJDT0xVTU5fTkFNRSJdLCJmdWxsX3R5cGUiPT4kVC4oJHRlPyIoJHRlKSI6IiIpLCJ0eXBlIj0+c3RydG9sb3dlcigkVCksImxlbmd0aCI9PiR0ZSwiZGVmYXVsdCI9PiRKWyJEQVRBX0RFRkFVTFQiXSwibnVsbCI9PigkSlsiTlVMTEFCTEUiXT09IlkiKSwicHJpdmlsZWdlcyI9PmFycmF5KCJpbnNlcnQiPT4xLCJzZWxlY3QiPT4xLCJ1cGRhdGUiPT4xKSwpO31yZXR1cm4kSTt9ZnVuY3Rpb24KaW5kZXhlcygkUSwkaD1udWxsKXskST1hcnJheSgpOyRLZj13aGVyZV9vd25lcigiIEFORCAiLCJhaWMudGFibGVfb3duZXIiKTtmb3JlYWNoKGdldF9yb3dzKCJTRUxFQ1QgYWljLiosIGFjLmNvbnN0cmFpbnRfdHlwZSwgYXRjLmRhdGFfZGVmYXVsdApGUk9NIGFsbF9pbmRfY29sdW1ucyBhaWMKTEVGVCBKT0lOIGFsbF9jb25zdHJhaW50cyBhYyBPTiBhaWMuaW5kZXhfbmFtZSA9IGFjLmNvbnN0cmFpbnRfbmFtZSBBTkQgYWljLnRhYmxlX25hbWUgPSBhYy50YWJsZV9uYW1lIEFORCBhaWMuaW5kZXhfb3duZXIgPSBhYy5vd25lcgpMRUZUIEpPSU4gYWxsX3RhYl9jb2xzIGF0YyBPTiBhaWMuY29sdW1uX25hbWUgPSBhdGMuY29sdW1uX25hbWUgQU5EIGFpYy50YWJsZV9uYW1lID0gYXRjLnRhYmxlX25hbWUgQU5EIGFpYy5pbmRleF9vd25lciA9IGF0Yy5vd25lcgpXSEVSRSBhaWMudGFibGVfbmFtZSA9ICIucSgkUSkuIiRLZgpPUkRFUiBCWSBhYy5jb25zdHJhaW50X3R5cGUsIGFpYy5jb2x1bW5fcG9zaXRpb24iLCRoKWFzJEopeyRLZD0kSlsiSU5ERVhfTkFNRSJdOyRvYj0kSlsiREFUQV9ERUZBVUxUIl07JG9iPSgkb2I/dHJpbSgkb2IsJyInKTokSlsiQ09MVU1OX05BTUUiXSk7JElbJEtkXVsidHlwZSJdPSgkSlsiQ09OU1RSQUlOVF9UWVBFIl09PSJQIj8iUFJJTUFSWSI6KCRKWyJDT05TVFJBSU5UX1RZUEUiXT09IlUiPyJVTklRVUUiOiJJTkRFWCIpKTskSVskS2RdWyJjb2x1bW5zIl1bXT0kb2I7JElbJEtkXVsibGVuZ3RocyJdW109KCRKWyJDSEFSX0xFTkdUSCJdJiYkSlsiQ0hBUl9MRU5HVEgiXSE9JEpbIkNPTFVNTl9MRU5HVEgiXT8kSlsiQ0hBUl9MRU5HVEgiXTpudWxsKTskSVskS2RdWyJkZXNjcyJdW109KCRKWyJERVNDRU5EIl0mJiRKWyJERVNDRU5EIl09PSJERVNDIj8nMSc6bnVsbCk7fXJldHVybiRJO31mdW5jdGlvbgp2aWV3KCREKXskWGk9dmlld3NfdGFibGUoInZpZXdfbmFtZSwgdGV4dCIpOyRLPWdldF9yb3dzKCdTRUxFQ1QgdGV4dCAic2VsZWN0IiBGUk9NICcuJFhpLicgV0hFUkUgdmlld19uYW1lID0gJy5xKCREKSk7cmV0dXJuCnJlc2V0KCRLKTt9ZnVuY3Rpb24KY29sbGF0aW9ucygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgppbmZvcm1hdGlvbl9zY2hlbWEoJGwpe3JldHVybgpmYWxzZTt9ZnVuY3Rpb24KZXJyb3IoKXtnbG9iYWwkZztyZXR1cm4KaCgkZy0+ZXJyb3IpO31mdW5jdGlvbgpleHBsYWluKCRnLCRHKXskZy0+cXVlcnkoIkVYUExBSU4gUExBTiBGT1IgJEciKTtyZXR1cm4kZy0+cXVlcnkoIlNFTEVDVCAqIEZST00gcGxhbl90YWJsZSIpO31mdW5jdGlvbgpmb3VuZF9yb3dzKCRSLCRaKXt9ZnVuY3Rpb24KYXV0b19pbmNyZW1lbnQoKXtyZXR1cm4iIjt9ZnVuY3Rpb24KYWx0ZXJfdGFibGUoJFEsJEQsJHAsJGZkLCRyYiwkeWMsJGQsJEthLCRUZil7JGM9JGpjPWFycmF5KCk7JEVmPSgkUT9maWVsZHMoJFEpOmFycmF5KCkpO2ZvcmVhY2goJHAKYXMkbyl7JFg9JG9bMV07aWYoJFgmJiRvWzBdIT0iIiYmaWRmX2VzY2FwZSgkb1swXSkhPSRYWzBdKXF1ZXJpZXMoIkFMVEVSIFRBQkxFICIudGFibGUoJFEpLiIgUkVOQU1FIENPTFVNTiAiLmlkZl9lc2NhcGUoJG9bMF0pLiIgVE8gJFhbMF0iKTskRGY9JEVmWyRvWzBdXTtpZigkWCYmJERmKXskamY9cHJvY2Vzc19maWVsZCgkRGYsJERmKTtpZigkWFsyXT09JGpmWzJdKSRYWzJdPSIiO31pZigkWCkkY1tdPSgkUSE9IiI/KCRvWzBdIT0iIj8iTU9ESUZZICgiOiJBREQgKCIpOiIgICIpLmltcGxvZGUoJFgpLigkUSE9IiI/IikiOiIiKTtlbHNlJGpjW109aWRmX2VzY2FwZSgkb1swXSk7fWlmKCRRPT0iIilyZXR1cm4KcXVlcmllcygiQ1JFQVRFIFRBQkxFICIudGFibGUoJEQpLiIgKFxuIi5pbXBsb2RlKCIsXG4iLCRjKS4iXG4pIik7cmV0dXJuKCEkY3x8cXVlcmllcygiQUxURVIgVEFCTEUgIi50YWJsZSgkUSkuIlxuIi5pbXBsb2RlKCJcbiIsJGMpKSkmJighJGpjfHxxdWVyaWVzKCJBTFRFUiBUQUJMRSAiLnRhYmxlKCRRKS4iIERST1AgKCIuaW1wbG9kZSgiLCAiLCRqYykuIikiKSkmJigkUT09JER8fHF1ZXJpZXMoIkFMVEVSIFRBQkxFICIudGFibGUoJFEpLiIgUkVOQU1FIFRPICIudGFibGUoJEQpKSk7fWZ1bmN0aW9uCmFsdGVyX2luZGV4ZXMoJFEsJGMpeyRqYz1hcnJheSgpOyR2Zz1hcnJheSgpO2ZvcmVhY2goJGMKYXMkWCl7aWYoJFhbMF0hPSJJTkRFWCIpeyRYWzJdPXByZWdfcmVwbGFjZSgnfiBERVNDJH4nLCcnLCRYWzJdKTskaT0oJFhbMl09PSJEUk9QIj8iXG5EUk9QIENPTlNUUkFJTlQgIi5pZGZfZXNjYXBlKCRYWzFdKToiXG5BREQiLigkWFsxXSE9IiI/IiBDT05TVFJBSU5UICIuaWRmX2VzY2FwZSgkWFsxXSk6IiIpLiIgJFhbMF0gIi4oJFhbMF09PSJQUklNQVJZIj8iS0VZICI6IiIpLiIoIi5pbXBsb2RlKCIsICIsJFhbMl0pLiIpIik7YXJyYXlfdW5zaGlmdCgkdmcsIkFMVEVSIFRBQkxFICIudGFibGUoJFEpLiRpKTt9ZWxzZWlmKCRYWzJdPT0iRFJPUCIpJGpjW109aWRmX2VzY2FwZSgkWFsxXSk7ZWxzZSR2Z1tdPSJDUkVBVEUgSU5ERVggIi5pZGZfZXNjYXBlKCRYWzFdIT0iIj8kWFsxXTp1bmlxaWQoJFEuIl8iKSkuIiBPTiAiLnRhYmxlKCRRKS4iICgiLmltcGxvZGUoIiwgIiwkWFsyXSkuIikiO31pZigkamMpYXJyYXlfdW5zaGlmdCgkdmcsIkRST1AgSU5ERVggIi5pbXBsb2RlKCIsICIsJGpjKSk7Zm9yZWFjaCgkdmcKYXMkRyl7aWYoIXF1ZXJpZXMoJEcpKXJldHVybgpmYWxzZTt9cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmZvcmVpZ25fa2V5cygkUSl7JEk9YXJyYXkoKTskRz0iU0VMRUNUIGNfbGlzdC5DT05TVFJBSU5UX05BTUUgYXMgTkFNRSwKY19zcmMuQ09MVU1OX05BTUUgYXMgU1JDX0NPTFVNTiwKY19kZXN0Lk9XTkVSIGFzIERFU1RfREIsCmNfZGVzdC5UQUJMRV9OQU1FIGFzIERFU1RfVEFCTEUsCmNfZGVzdC5DT0xVTU5fTkFNRSBhcyBERVNUX0NPTFVNTiwKY19saXN0LkRFTEVURV9SVUxFIGFzIE9OX0RFTEVURQpGUk9NIEFMTF9DT05TVFJBSU5UUyBjX2xpc3QsIEFMTF9DT05TX0NPTFVNTlMgY19zcmMsIEFMTF9DT05TX0NPTFVNTlMgY19kZXN0CldIRVJFIGNfbGlzdC5DT05TVFJBSU5UX05BTUUgPSBjX3NyYy5DT05TVFJBSU5UX05BTUUKQU5EIGNfbGlzdC5SX0NPTlNUUkFJTlRfTkFNRSA9IGNfZGVzdC5DT05TVFJBSU5UX05BTUUKQU5EIGNfbGlzdC5DT05TVFJBSU5UX1RZUEUgPSAnUicKQU5EIGNfc3JjLlRBQkxFX05BTUUgPSAiLnEoJFEpO2ZvcmVhY2goZ2V0X3Jvd3MoJEcpYXMkSikkSVskSlsnTkFNRSddXT1hcnJheSgiZGIiPT4kSlsnREVTVF9EQiddLCJ0YWJsZSI9PiRKWydERVNUX1RBQkxFJ10sInNvdXJjZSI9PmFycmF5KCRKWydTUkNfQ09MVU1OJ10pLCJ0YXJnZXQiPT5hcnJheSgkSlsnREVTVF9DT0xVTU4nXSksIm9uX2RlbGV0ZSI9PiRKWydPTl9ERUxFVEUnXSwib25fdXBkYXRlIj0+bnVsbCwpO3JldHVybiRJO31mdW5jdGlvbgp0cnVuY2F0ZV90YWJsZXMoJFMpe3JldHVybgphcHBseV9xdWVyaWVzKCJUUlVOQ0FURSBUQUJMRSIsJFMpO31mdW5jdGlvbgpkcm9wX3ZpZXdzKCRZaSl7cmV0dXJuCmFwcGx5X3F1ZXJpZXMoIkRST1AgVklFVyIsJFlpKTt9ZnVuY3Rpb24KZHJvcF90YWJsZXMoJFMpe3JldHVybgphcHBseV9xdWVyaWVzKCJEUk9QIFRBQkxFIiwkUyk7fWZ1bmN0aW9uCmxhc3RfaWQoKXtyZXR1cm4KMDt9ZnVuY3Rpb24Kc2NoZW1hcygpeyRJPWdldF92YWxzKCJTRUxFQ1QgRElTVElOQ1Qgb3duZXIgRlJPTSBkYmFfc2VnbWVudHMgV0hFUkUgb3duZXIgSU4gKFNFTEVDVCB1c2VybmFtZSBGUk9NIGRiYV91c2VycyBXSEVSRSBkZWZhdWx0X3RhYmxlc3BhY2UgTk9UIElOICgnU1lTVEVNJywnU1lTQVVYJykpIE9SREVSIEJZIDEiKTtyZXR1cm4oJEk/JEk6Z2V0X3ZhbHMoIlNFTEVDVCBESVNUSU5DVCBvd25lciBGUk9NIGFsbF90YWJsZXMgV0hFUkUgdGFibGVzcGFjZV9uYW1lID0gIi5xKERCKS4iIE9SREVSIEJZIDEiKSk7fWZ1bmN0aW9uCmdldF9zY2hlbWEoKXtnbG9iYWwkZztyZXR1cm4kZy0+cmVzdWx0KCJTRUxFQ1Qgc3lzX2NvbnRleHQoJ1VTRVJFTlYnLCAnU0VTU0lPTl9VU0VSJykgRlJPTSBkdWFsIik7fWZ1bmN0aW9uCnNldF9zY2hlbWEoJGFoLCRoPW51bGwpe2dsb2JhbCRnO2lmKCEkaCkkaD0kZztyZXR1cm4kaC0+cXVlcnkoIkFMVEVSIFNFU1NJT04gU0VUIENVUlJFTlRfU0NIRU1BID0gIi5pZGZfZXNjYXBlKCRhaCkpO31mdW5jdGlvbgpzaG93X3ZhcmlhYmxlcygpe3JldHVybgpnZXRfa2V5X3ZhbHMoJ1NFTEVDVCBuYW1lLCBkaXNwbGF5X3ZhbHVlIEZST00gdiRwYXJhbWV0ZXInKTt9ZnVuY3Rpb24KcHJvY2Vzc19saXN0KCl7cmV0dXJuCmdldF9yb3dzKCdTRUxFQ1Qgc2Vzcy5wcm9jZXNzIEFTICJwcm9jZXNzIiwgc2Vzcy51c2VybmFtZSBBUyAidXNlciIsIHNlc3Muc2NoZW1hbmFtZSBBUyAic2NoZW1hIiwgc2Vzcy5zdGF0dXMgQVMgInN0YXR1cyIsIHNlc3Mud2FpdF9jbGFzcyBBUyAid2FpdF9jbGFzcyIsIHNlc3Muc2Vjb25kc19pbl93YWl0IEFTICJzZWNvbmRzX2luX3dhaXQiLCBzcWwuc3FsX3RleHQgQVMgInNxbF90ZXh0Iiwgc2Vzcy5tYWNoaW5lIEFTICJtYWNoaW5lIiwgc2Vzcy5wb3J0IEFTICJwb3J0IgpGUk9NIHYkc2Vzc2lvbiBzZXNzIExFRlQgT1VURVIgSk9JTiB2JHNxbCBzcWwKT04gc3FsLnNxbF9pZCA9IHNlc3Muc3FsX2lkCldIRVJFIHNlc3MudHlwZSA9IFwnVVNFUlwnCk9SREVSIEJZIFBST0NFU1MKJyk7fWZ1bmN0aW9uCnNob3dfc3RhdHVzKCl7JEs9Z2V0X3Jvd3MoJ1NFTEVDVCAqIEZST00gdiRpbnN0YW5jZScpO3JldHVybgpyZXNldCgkSyk7fWZ1bmN0aW9uCmNvbnZlcnRfZmllbGQoJG8pe31mdW5jdGlvbgp1bmNvbnZlcnRfZmllbGQoJG8sJEkpe3JldHVybiRJO31mdW5jdGlvbgpzdXBwb3J0KCRUYyl7cmV0dXJuCnByZWdfbWF0Y2goJ35eKGNvbHVtbnN8ZGF0YWJhc2V8ZHJvcF9jb2x8aW5kZXhlc3xkZXNjaWR4fHByb2Nlc3NsaXN0fHNjaGVtZXxzcWx8c3RhdHVzfHRhYmxlfHZhcmlhYmxlc3x2aWV3KSR+JywkVGMpO31mdW5jdGlvbgpkcml2ZXJfY29uZmlnKCl7JFU9YXJyYXkoKTskR2g9YXJyYXkoKTtmb3JlYWNoKGFycmF5KCdOdW1iZXJzJz0+YXJyYXkoIm51bWJlciI9PjM4LCJiaW5hcnlfZmxvYXQiPT4xMiwiYmluYXJ5X2RvdWJsZSI9PjIxKSwnRGF0ZSBhbmQgdGltZSc9PmFycmF5KCJkYXRlIj0+MTAsInRpbWVzdGFtcCI9PjI5LCJpbnRlcnZhbCB5ZWFyIj0+MTIsImludGVydmFsIGRheSI9PjI4KSwnU3RyaW5ncyc9PmFycmF5KCJjaGFyIj0+MjAwMCwidmFyY2hhcjIiPT40MDAwLCJuY2hhciI9PjIwMDAsIm52YXJjaGFyMiI9PjQwMDAsImNsb2IiPT40Mjk0OTY3Mjk1LCJuY2xvYiI9PjQyOTQ5NjcyOTUpLCdCaW5hcnknPT5hcnJheSgicmF3Ij0+MjAwMCwibG9uZyByYXciPT4yMTQ3NDgzNjQ4LCJibG9iIj0+NDI5NDk2NzI5NSwiYmZpbGUiPT40Mjk0OTY3Mjk2KSwpYXMkej0+JFgpeyRVKz0kWDskR2hbJHpdPWFycmF5X2tleXMoJFgpO31yZXR1cm4KYXJyYXkoJ3Bvc3NpYmxlX2RyaXZlcnMnPT5hcnJheSgiT0NJOCIsIlBET19PQ0kiKSwnanVzaCc9PiJvcmFjbGUiLCd0eXBlcyc9PiRVLCdzdHJ1Y3R1cmVkX3R5cGVzJz0+JEdoLCd1bnNpZ25lZCc9PmFycmF5KCksJ29wZXJhdG9ycyc9PmFycmF5KCI9IiwiPCIsIj4iLCI8PSIsIj49IiwiIT0iLCJMSUtFIiwiTElLRSAlJSIsIklOIiwiSVMgTlVMTCIsIk5PVCBMSUtFIiwiTk9UIFJFR0VYUCIsIk5PVCBJTiIsIklTIE5PVCBOVUxMIiwiU1FMIiksJ2Z1bmN0aW9ucyc9PmFycmF5KCJsZW5ndGgiLCJsb3dlciIsInJvdW5kIiwidXBwZXIiKSwnZ3JvdXBpbmcnPT5hcnJheSgiYXZnIiwiY291bnQiLCJjb3VudCBkaXN0aW5jdCIsIm1heCIsIm1pbiIsInN1bSIpLCdlZGl0X2Z1bmN0aW9ucyc9PmFycmF5KGFycmF5KCJkYXRlIj0+ImN1cnJlbnRfZGF0ZSIsInRpbWVzdGFtcCI9PiJjdXJyZW50X3RpbWVzdGFtcCIsKSxhcnJheSgibnVtYmVyfGZsb2F0fGRvdWJsZSI9PiIrLy0iLCJkYXRlfHRpbWVzdGFtcCI9PiIrIGludGVydmFsLy0gaW50ZXJ2YWwiLCJjaGFyfGNsb2IiPT4ifHwiLCkpLCk7fX0kaWNbIm1zc3FsIl09Ik1TIFNRTCAoYmV0YSkiO2lmKGlzc2V0KCRfR0VUWyJtc3NxbCJdKSl7ZGVmaW5lKCJEUklWRVIiLCJtc3NxbCIpO2lmKGV4dGVuc2lvbl9sb2FkZWQoInNxbHNydiIpKXtjbGFzcwpNaW5fREJ7dmFyJGV4dGVuc2lvbj0ic3Fsc3J2IiwkX2xpbmssJF9yZXN1bHQsJHNlcnZlcl9pbmZvLCRhZmZlY3RlZF9yb3dzLCRlcnJubywkZXJyb3I7ZnVuY3Rpb24KX2dldF9lcnJvcigpeyR0aGlzLT5lcnJvcj0iIjtmb3JlYWNoKHNxbHNydl9lcnJvcnMoKWFzJG4peyR0aGlzLT5lcnJubz0kblsiY29kZSJdOyR0aGlzLT5lcnJvci49IiRuW21lc3NhZ2VdXG4iO30kdGhpcy0+ZXJyb3I9cnRyaW0oJHRoaXMtPmVycm9yKTt9ZnVuY3Rpb24KY29ubmVjdCgkTSwkViwkRil7Z2xvYmFsJGI7JGw9JGItPmRhdGFiYXNlKCk7JHliPWFycmF5KCJVSUQiPT4kViwiUFdEIj0+JEYsIkNoYXJhY3RlclNldCI9PiJVVEYtOCIpO2lmKCRsIT0iIikkeWJbIkRhdGFiYXNlIl09JGw7JHRoaXMtPl9saW5rPUBzcWxzcnZfY29ubmVjdChwcmVnX3JlcGxhY2UoJ346ficsJywnLCRNKSwkeWIpO2lmKCR0aGlzLT5fbGluayl7JFJkPXNxbHNydl9zZXJ2ZXJfaW5mbygkdGhpcy0+X2xpbmspOyR0aGlzLT5zZXJ2ZXJfaW5mbz0kUmRbJ1NRTFNlcnZlclZlcnNpb24nXTt9ZWxzZSR0aGlzLT5fZ2V0X2Vycm9yKCk7cmV0dXJuKGJvb2wpJHRoaXMtPl9saW5rO31mdW5jdGlvbgpxdW90ZSgkUCl7cmV0dXJuIiciLnN0cl9yZXBsYWNlKCInIiwiJyciLCRQKS4iJyI7fWZ1bmN0aW9uCnNlbGVjdF9kYigkail7cmV0dXJuJHRoaXMtPnF1ZXJ5KCJVU0UgIi5pZGZfZXNjYXBlKCRqKSk7fWZ1bmN0aW9uCnF1ZXJ5KCRHLCRCaT1mYWxzZSl7JEg9c3Fsc3J2X3F1ZXJ5KCR0aGlzLT5fbGluaywkRyk7JHRoaXMtPmVycm9yPSIiO2lmKCEkSCl7JHRoaXMtPl9nZXRfZXJyb3IoKTtyZXR1cm4KZmFsc2U7fXJldHVybiR0aGlzLT5zdG9yZV9yZXN1bHQoJEgpO31mdW5jdGlvbgptdWx0aV9xdWVyeSgkRyl7JHRoaXMtPl9yZXN1bHQ9c3Fsc3J2X3F1ZXJ5KCR0aGlzLT5fbGluaywkRyk7JHRoaXMtPmVycm9yPSIiO2lmKCEkdGhpcy0+X3Jlc3VsdCl7JHRoaXMtPl9nZXRfZXJyb3IoKTtyZXR1cm4KZmFsc2U7fXJldHVybgp0cnVlO31mdW5jdGlvbgpzdG9yZV9yZXN1bHQoJEg9bnVsbCl7aWYoISRIKSRIPSR0aGlzLT5fcmVzdWx0O2lmKCEkSClyZXR1cm4KZmFsc2U7aWYoc3Fsc3J2X2ZpZWxkX21ldGFkYXRhKCRIKSlyZXR1cm4KbmV3Ck1pbl9SZXN1bHQoJEgpOyR0aGlzLT5hZmZlY3RlZF9yb3dzPXNxbHNydl9yb3dzX2FmZmVjdGVkKCRIKTtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KbmV4dF9yZXN1bHQoKXtyZXR1cm4kdGhpcy0+X3Jlc3VsdD9zcWxzcnZfbmV4dF9yZXN1bHQoJHRoaXMtPl9yZXN1bHQpOm51bGw7fWZ1bmN0aW9uCnJlc3VsdCgkRywkbz0wKXskSD0kdGhpcy0+cXVlcnkoJEcpO2lmKCFpc19vYmplY3QoJEgpKXJldHVybgpmYWxzZTskSj0kSC0+ZmV0Y2hfcm93KCk7cmV0dXJuJEpbJG9dO319Y2xhc3MKTWluX1Jlc3VsdHt2YXIkX3Jlc3VsdCwkX29mZnNldD0wLCRfZmllbGRzLCRudW1fcm93cztmdW5jdGlvbgpfX2NvbnN0cnVjdCgkSCl7JHRoaXMtPl9yZXN1bHQ9JEg7fWZ1bmN0aW9uCl9jb252ZXJ0KCRKKXtmb3JlYWNoKChhcnJheSkkSgphcyR6PT4kWCl7aWYoaXNfYSgkWCwnRGF0ZVRpbWUnKSkkSlskel09JFgtPmZvcm1hdCgiWS1tLWQgSDppOnMiKTt9cmV0dXJuJEo7fWZ1bmN0aW9uCmZldGNoX2Fzc29jKCl7cmV0dXJuJHRoaXMtPl9jb252ZXJ0KHNxbHNydl9mZXRjaF9hcnJheSgkdGhpcy0+X3Jlc3VsdCxTUUxTUlZfRkVUQ0hfQVNTT0MpKTt9ZnVuY3Rpb24KZmV0Y2hfcm93KCl7cmV0dXJuJHRoaXMtPl9jb252ZXJ0KHNxbHNydl9mZXRjaF9hcnJheSgkdGhpcy0+X3Jlc3VsdCxTUUxTUlZfRkVUQ0hfTlVNRVJJQykpO31mdW5jdGlvbgpmZXRjaF9maWVsZCgpe2lmKCEkdGhpcy0+X2ZpZWxkcykkdGhpcy0+X2ZpZWxkcz1zcWxzcnZfZmllbGRfbWV0YWRhdGEoJHRoaXMtPl9yZXN1bHQpOyRvPSR0aGlzLT5fZmllbGRzWyR0aGlzLT5fb2Zmc2V0KytdOyRJPW5ldwpzdGRDbGFzczskSS0+bmFtZT0kb1siTmFtZSJdOyRJLT5vcmduYW1lPSRvWyJOYW1lIl07JEktPnR5cGU9KCRvWyJUeXBlIl09PTE/MjU0OjApO3JldHVybiRJO31mdW5jdGlvbgpzZWVrKCRoZil7Zm9yKCR0PTA7JHQ8JGhmOyR0Kyspc3Fsc3J2X2ZldGNoKCR0aGlzLT5fcmVzdWx0KTt9ZnVuY3Rpb24KX19kZXN0cnVjdCgpe3NxbHNydl9mcmVlX3N0bXQoJHRoaXMtPl9yZXN1bHQpO319fWVsc2VpZihleHRlbnNpb25fbG9hZGVkKCJtc3NxbCIpKXtjbGFzcwpNaW5fREJ7dmFyJGV4dGVuc2lvbj0iTVNTUUwiLCRfbGluaywkX3Jlc3VsdCwkc2VydmVyX2luZm8sJGFmZmVjdGVkX3Jvd3MsJGVycm9yO2Z1bmN0aW9uCmNvbm5lY3QoJE0sJFYsJEYpeyR0aGlzLT5fbGluaz1AbXNzcWxfY29ubmVjdCgkTSwkViwkRik7aWYoJHRoaXMtPl9saW5rKXskSD0kdGhpcy0+cXVlcnkoIlNFTEVDVCBTRVJWRVJQUk9QRVJUWSgnUHJvZHVjdExldmVsJyksIFNFUlZFUlBST1BFUlRZKCdFZGl0aW9uJykiKTtpZigkSCl7JEo9JEgtPmZldGNoX3JvdygpOyR0aGlzLT5zZXJ2ZXJfaW5mbz0kdGhpcy0+cmVzdWx0KCJzcF9zZXJ2ZXJfaW5mbyAyIiwyKS4iIFskSlswXV0gJEpbMV0iO319ZWxzZSR0aGlzLT5lcnJvcj1tc3NxbF9nZXRfbGFzdF9tZXNzYWdlKCk7cmV0dXJuKGJvb2wpJHRoaXMtPl9saW5rO31mdW5jdGlvbgpxdW90ZSgkUCl7cmV0dXJuIiciLnN0cl9yZXBsYWNlKCInIiwiJyciLCRQKS4iJyI7fWZ1bmN0aW9uCnNlbGVjdF9kYigkail7cmV0dXJuCm1zc3FsX3NlbGVjdF9kYigkaik7fWZ1bmN0aW9uCnF1ZXJ5KCRHLCRCaT1mYWxzZSl7JEg9QG1zc3FsX3F1ZXJ5KCRHLCR0aGlzLT5fbGluayk7JHRoaXMtPmVycm9yPSIiO2lmKCEkSCl7JHRoaXMtPmVycm9yPW1zc3FsX2dldF9sYXN0X21lc3NhZ2UoKTtyZXR1cm4KZmFsc2U7fWlmKCRIPT09dHJ1ZSl7JHRoaXMtPmFmZmVjdGVkX3Jvd3M9bXNzcWxfcm93c19hZmZlY3RlZCgkdGhpcy0+X2xpbmspO3JldHVybgp0cnVlO31yZXR1cm4KbmV3Ck1pbl9SZXN1bHQoJEgpO31mdW5jdGlvbgptdWx0aV9xdWVyeSgkRyl7cmV0dXJuJHRoaXMtPl9yZXN1bHQ9JHRoaXMtPnF1ZXJ5KCRHKTt9ZnVuY3Rpb24Kc3RvcmVfcmVzdWx0KCl7cmV0dXJuJHRoaXMtPl9yZXN1bHQ7fWZ1bmN0aW9uCm5leHRfcmVzdWx0KCl7cmV0dXJuCm1zc3FsX25leHRfcmVzdWx0KCR0aGlzLT5fcmVzdWx0LT5fcmVzdWx0KTt9ZnVuY3Rpb24KcmVzdWx0KCRHLCRvPTApeyRIPSR0aGlzLT5xdWVyeSgkRyk7aWYoIWlzX29iamVjdCgkSCkpcmV0dXJuCmZhbHNlO3JldHVybgptc3NxbF9yZXN1bHQoJEgtPl9yZXN1bHQsMCwkbyk7fX1jbGFzcwpNaW5fUmVzdWx0e3ZhciRfcmVzdWx0LCRfb2Zmc2V0PTAsJF9maWVsZHMsJG51bV9yb3dzO2Z1bmN0aW9uCl9fY29uc3RydWN0KCRIKXskdGhpcy0+X3Jlc3VsdD0kSDskdGhpcy0+bnVtX3Jvd3M9bXNzcWxfbnVtX3Jvd3MoJEgpO31mdW5jdGlvbgpmZXRjaF9hc3NvYygpe3JldHVybgptc3NxbF9mZXRjaF9hc3NvYygkdGhpcy0+X3Jlc3VsdCk7fWZ1bmN0aW9uCmZldGNoX3Jvdygpe3JldHVybgptc3NxbF9mZXRjaF9yb3coJHRoaXMtPl9yZXN1bHQpO31mdW5jdGlvbgpudW1fcm93cygpe3JldHVybgptc3NxbF9udW1fcm93cygkdGhpcy0+X3Jlc3VsdCk7fWZ1bmN0aW9uCmZldGNoX2ZpZWxkKCl7JEk9bXNzcWxfZmV0Y2hfZmllbGQoJHRoaXMtPl9yZXN1bHQpOyRJLT5vcmd0YWJsZT0kSS0+dGFibGU7JEktPm9yZ25hbWU9JEktPm5hbWU7cmV0dXJuJEk7fWZ1bmN0aW9uCnNlZWsoJGhmKXttc3NxbF9kYXRhX3NlZWsoJHRoaXMtPl9yZXN1bHQsJGhmKTt9ZnVuY3Rpb24KX19kZXN0cnVjdCgpe21zc3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5fcmVzdWx0KTt9fX1lbHNlaWYoZXh0ZW5zaW9uX2xvYWRlZCgicGRvX2RibGliIikpe2NsYXNzCk1pbl9EQgpleHRlbmRzCk1pbl9QRE97dmFyJGV4dGVuc2lvbj0iUERPX0RCTElCIjtmdW5jdGlvbgpjb25uZWN0KCRNLCRWLCRGKXskdGhpcy0+ZHNuKCJkYmxpYjpjaGFyc2V0PXV0Zjg7aG9zdD0iLnN0cl9yZXBsYWNlKCI6IiwiO3VuaXhfc29ja2V0PSIscHJlZ19yZXBsYWNlKCd+OihcZCl+JywnO3BvcnQ9XDEnLCRNKSksJFYsJEYpO3JldHVybgp0cnVlO31mdW5jdGlvbgpzZWxlY3RfZGIoJGope3JldHVybiR0aGlzLT5xdWVyeSgiVVNFICIuaWRmX2VzY2FwZSgkaikpO319fWNsYXNzCk1pbl9Ecml2ZXIKZXh0ZW5kcwpNaW5fU1FMe2Z1bmN0aW9uCmluc2VydFVwZGF0ZSgkUSwkSywka2cpe2ZvcmVhY2goJEsKYXMkTil7JElpPWFycmF5KCk7JFo9YXJyYXkoKTtmb3JlYWNoKCROCmFzJHo9PiRYKXskSWlbXT0iJHogPSAkWCI7aWYoaXNzZXQoJGtnW2lkZl91bmVzY2FwZSgkeildKSkkWltdPSIkeiA9ICRYIjt9aWYoIXF1ZXJpZXMoIk1FUkdFICIudGFibGUoJFEpLiIgVVNJTkcgKFZBTFVFUygiLmltcGxvZGUoIiwgIiwkTikuIikpIEFTIHNvdXJjZSAoYyIuaW1wbG9kZSgiLCBjIixyYW5nZSgxLGNvdW50KCROKSkpLiIpIE9OICIuaW1wbG9kZSgiIEFORCAiLCRaKS4iIFdIRU4gTUFUQ0hFRCBUSEVOIFVQREFURSBTRVQgIi5pbXBsb2RlKCIsICIsJElpKS4iIFdIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNFUlQgKCIuaW1wbG9kZSgiLCAiLGFycmF5X2tleXMoJE4pKS4iKSBWQUxVRVMgKCIuaW1wbG9kZSgiLCAiLCROKS4iKTsiKSlyZXR1cm4KZmFsc2U7fXJldHVybgp0cnVlO31mdW5jdGlvbgpiZWdpbigpe3JldHVybgpxdWVyaWVzKCJCRUdJTiBUUkFOU0FDVElPTiIpO319ZnVuY3Rpb24KaWRmX2VzY2FwZSgkdil7cmV0dXJuIlsiLnN0cl9yZXBsYWNlKCJdIiwiXV0iLCR2KS4iXSI7fWZ1bmN0aW9uCnRhYmxlKCR2KXtyZXR1cm4oJF9HRVRbIm5zIl0hPSIiP2lkZl9lc2NhcGUoJF9HRVRbIm5zIl0pLiIuIjoiIikuaWRmX2VzY2FwZSgkdik7fWZ1bmN0aW9uCmNvbm5lY3QoKXtnbG9iYWwkYjskZz1uZXcKTWluX0RCOyRLYj0kYi0+Y3JlZGVudGlhbHMoKTtpZigkZy0+Y29ubmVjdCgkS2JbMF0sJEtiWzFdLCRLYlsyXSkpcmV0dXJuJGc7cmV0dXJuJGctPmVycm9yO31mdW5jdGlvbgpnZXRfZGF0YWJhc2VzKCl7cmV0dXJuCmdldF92YWxzKCJTRUxFQ1QgbmFtZSBGUk9NIHN5cy5kYXRhYmFzZXMgV0hFUkUgbmFtZSBOT1QgSU4gKCdtYXN0ZXInLCAndGVtcGRiJywgJ21vZGVsJywgJ21zZGInKSIpO31mdW5jdGlvbgpsaW1pdCgkRywkWiwkXywkaGY9MCwkaGg9IiAiKXtyZXR1cm4oJF8hPT1udWxsPyIgVE9QICgiLigkXyskaGYpLiIpIjoiIikuIiAkRyRaIjt9ZnVuY3Rpb24KbGltaXQxKCRRLCRHLCRaLCRoaD0iXG4iKXtyZXR1cm4KbGltaXQoJEcsJFosMSwwLCRoaCk7fWZ1bmN0aW9uCmRiX2NvbGxhdGlvbigkbCwkbGIpe2dsb2JhbCRnO3JldHVybiRnLT5yZXN1bHQoIlNFTEVDVCBjb2xsYXRpb25fbmFtZSBGUk9NIHN5cy5kYXRhYmFzZXMgV0hFUkUgbmFtZSA9ICIucSgkbCkpO31mdW5jdGlvbgplbmdpbmVzKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmxvZ2dlZF91c2VyKCl7Z2xvYmFsJGc7cmV0dXJuJGctPnJlc3VsdCgiU0VMRUNUIFNVU0VSX05BTUUoKSIpO31mdW5jdGlvbgp0YWJsZXNfbGlzdCgpe3JldHVybgpnZXRfa2V5X3ZhbHMoIlNFTEVDVCBuYW1lLCB0eXBlX2Rlc2MgRlJPTSBzeXMuYWxsX29iamVjdHMgV0hFUkUgc2NoZW1hX2lkID0gU0NIRU1BX0lEKCIucShnZXRfc2NoZW1hKCkpLiIpIEFORCB0eXBlIElOICgnUycsICdVJywgJ1YnKSBPUkRFUiBCWSBuYW1lIik7fWZ1bmN0aW9uCmNvdW50X3RhYmxlcygkayl7Z2xvYmFsJGc7JEk9YXJyYXkoKTtmb3JlYWNoKCRrCmFzJGwpeyRnLT5zZWxlY3RfZGIoJGwpOyRJWyRsXT0kZy0+cmVzdWx0KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBJTkZPUk1BVElPTl9TQ0hFTUEuVEFCTEVTIik7fXJldHVybiRJO31mdW5jdGlvbgp0YWJsZV9zdGF0dXMoJEQ9IiIpeyRJPWFycmF5KCk7Zm9yZWFjaChnZXRfcm93cygiU0VMRUNUIGFvLm5hbWUgQVMgTmFtZSwgYW8udHlwZV9kZXNjIEFTIEVuZ2luZSwgKFNFTEVDVCB2YWx1ZSBGUk9NIGZuX2xpc3RleHRlbmRlZHByb3BlcnR5KGRlZmF1bHQsICdTQ0hFTUEnLCBzY2hlbWFfbmFtZShzY2hlbWFfaWQpLCAnVEFCTEUnLCBhby5uYW1lLCBudWxsLCBudWxsKSkgQVMgQ29tbWVudCBGUk9NIHN5cy5hbGxfb2JqZWN0cyBBUyBhbyBXSEVSRSBzY2hlbWFfaWQgPSBTQ0hFTUFfSUQoIi5xKGdldF9zY2hlbWEoKSkuIikgQU5EIHR5cGUgSU4gKCdTJywgJ1UnLCAnVicpICIuKCREIT0iIj8iQU5EIG5hbWUgPSAiLnEoJEQpOiJPUkRFUiBCWSBuYW1lIikpYXMkSil7aWYoJEQhPSIiKXJldHVybiRKOyRJWyRKWyJOYW1lIl1dPSRKO31yZXR1cm4kSTt9ZnVuY3Rpb24KaXNfdmlldygkUil7cmV0dXJuJFJbIkVuZ2luZSJdPT0iVklFVyI7fWZ1bmN0aW9uCmZrX3N1cHBvcnQoJFIpe3JldHVybgp0cnVlO31mdW5jdGlvbgpmaWVsZHMoJFEpeyR0Yj1nZXRfa2V5X3ZhbHMoIlNFTEVDVCBvYmpuYW1lLCBjYXN0KHZhbHVlIGFzIHZhcmNoYXIobWF4KSkgRlJPTSBmbl9saXN0ZXh0ZW5kZWRwcm9wZXJ0eSgnTVNfREVTQ1JJUFRJT04nLCAnc2NoZW1hJywgIi5xKGdldF9zY2hlbWEoKSkuIiwgJ3RhYmxlJywgIi5xKCRRKS4iLCAnY29sdW1uJywgTlVMTCkiKTskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCBjLm1heF9sZW5ndGgsIGMucHJlY2lzaW9uLCBjLnNjYWxlLCBjLm5hbWUsIGMuaXNfbnVsbGFibGUsIGMuaXNfaWRlbnRpdHksIGMuY29sbGF0aW9uX25hbWUsIHQubmFtZSB0eXBlLCBDQVNUKGQuZGVmaW5pdGlvbiBhcyB0ZXh0KSBbZGVmYXVsdF0KRlJPTSBzeXMuYWxsX2NvbHVtbnMgYwpKT0lOIHN5cy5hbGxfb2JqZWN0cyBvIE9OIGMub2JqZWN0X2lkID0gby5vYmplY3RfaWQKSk9JTiBzeXMudHlwZXMgdCBPTiBjLnVzZXJfdHlwZV9pZCA9IHQudXNlcl90eXBlX2lkCkxFRlQgSk9JTiBzeXMuZGVmYXVsdF9jb25zdHJhaW50cyBkIE9OIGMuZGVmYXVsdF9vYmplY3RfaWQgPSBkLnBhcmVudF9jb2x1bW5faWQKV0hFUkUgby5zY2hlbWFfaWQgPSBTQ0hFTUFfSUQoIi5xKGdldF9zY2hlbWEoKSkuIikgQU5EIG8udHlwZSBJTiAoJ1MnLCAnVScsICdWJykgQU5EIG8ubmFtZSA9ICIucSgkUSkpYXMkSil7JFQ9JEpbInR5cGUiXTskdGU9KHByZWdfbWF0Y2goIn5jaGFyfGJpbmFyeX4iLCRUKT8kSlsibWF4X2xlbmd0aCJdOigkVD09ImRlY2ltYWwiPyIkSltwcmVjaXNpb25dLCRKW3NjYWxlXSI6IiIpKTskSVskSlsibmFtZSJdXT1hcnJheSgiZmllbGQiPT4kSlsibmFtZSJdLCJmdWxsX3R5cGUiPT4kVC4oJHRlPyIoJHRlKSI6IiIpLCJ0eXBlIj0+JFQsImxlbmd0aCI9PiR0ZSwiZGVmYXVsdCI9PiRKWyJkZWZhdWx0Il0sIm51bGwiPT4kSlsiaXNfbnVsbGFibGUiXSwiYXV0b19pbmNyZW1lbnQiPT4kSlsiaXNfaWRlbnRpdHkiXSwiY29sbGF0aW9uIj0+JEpbImNvbGxhdGlvbl9uYW1lIl0sInByaXZpbGVnZXMiPT5hcnJheSgiaW5zZXJ0Ij0+MSwic2VsZWN0Ij0+MSwidXBkYXRlIj0+MSksInByaW1hcnkiPT4kSlsiaXNfaWRlbnRpdHkiXSwiY29tbWVudCI9PiR0YlskSlsibmFtZSJdXSwpO31yZXR1cm4kSTt9ZnVuY3Rpb24KaW5kZXhlcygkUSwkaD1udWxsKXskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNFTEVDVCBpLm5hbWUsIGtleV9vcmRpbmFsLCBpc191bmlxdWUsIGlzX3ByaW1hcnlfa2V5LCBjLm5hbWUgQVMgY29sdW1uX25hbWUsIGlzX2Rlc2NlbmRpbmdfa2V5CkZST00gc3lzLmluZGV4ZXMgaQpJTk5FUiBKT0lOIHN5cy5pbmRleF9jb2x1bW5zIGljIE9OIGkub2JqZWN0X2lkID0gaWMub2JqZWN0X2lkIEFORCBpLmluZGV4X2lkID0gaWMuaW5kZXhfaWQKSU5ORVIgSk9JTiBzeXMuY29sdW1ucyBjIE9OIGljLm9iamVjdF9pZCA9IGMub2JqZWN0X2lkIEFORCBpYy5jb2x1bW5faWQgPSBjLmNvbHVtbl9pZApXSEVSRSBPQkpFQ1RfTkFNRShpLm9iamVjdF9pZCkgPSAiLnEoJFEpLCRoKWFzJEopeyREPSRKWyJuYW1lIl07JElbJERdWyJ0eXBlIl09KCRKWyJpc19wcmltYXJ5X2tleSJdPyJQUklNQVJZIjooJEpbImlzX3VuaXF1ZSJdPyJVTklRVUUiOiJJTkRFWCIpKTskSVskRF1bImxlbmd0aHMiXT1hcnJheSgpOyRJWyREXVsiY29sdW1ucyJdWyRKWyJrZXlfb3JkaW5hbCJdXT0kSlsiY29sdW1uX25hbWUiXTskSVskRF1bImRlc2NzIl1bJEpbImtleV9vcmRpbmFsIl1dPSgkSlsiaXNfZGVzY2VuZGluZ19rZXkiXT8nMSc6bnVsbCk7fXJldHVybiRJO31mdW5jdGlvbgp2aWV3KCREKXtnbG9iYWwkZztyZXR1cm4KYXJyYXkoInNlbGVjdCI9PnByZWdfcmVwbGFjZSgnfl4oPzpbXltdfFxbW15dXSpdKSpccytBU1xzK35pc1UnLCcnLCRnLT5yZXN1bHQoIlNFTEVDVCBWSUVXX0RFRklOSVRJT04gRlJPTSBJTkZPUk1BVElPTl9TQ0hFTUEuVklFV1MgV0hFUkUgVEFCTEVfU0NIRU1BID0gU0NIRU1BX05BTUUoKSBBTkQgVEFCTEVfTkFNRSA9ICIucSgkRCkpKSk7fWZ1bmN0aW9uCmNvbGxhdGlvbnMoKXskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3ZhbHMoIlNFTEVDVCBuYW1lIEZST00gZm5faGVscGNvbGxhdGlvbnMoKSIpYXMkZCkkSVtwcmVnX3JlcGxhY2UoJ35fLip+JywnJywkZCldW109JGQ7cmV0dXJuJEk7fWZ1bmN0aW9uCmluZm9ybWF0aW9uX3NjaGVtYSgkbCl7cmV0dXJuCmZhbHNlO31mdW5jdGlvbgplcnJvcigpe2dsb2JhbCRnO3JldHVybgpubF9icihoKHByZWdfcmVwbGFjZSgnfl4oXFtbXl1dKl0pK35tJywnJywkZy0+ZXJyb3IpKSk7fWZ1bmN0aW9uCmNyZWF0ZV9kYXRhYmFzZSgkbCwkZCl7cmV0dXJuCnF1ZXJpZXMoIkNSRUFURSBEQVRBQkFTRSAiLmlkZl9lc2NhcGUoJGwpLihwcmVnX21hdGNoKCd+XlthLXowLTlfXSskfmknLCRkKT8iIENPTExBVEUgJGQiOiIiKSk7fWZ1bmN0aW9uCmRyb3BfZGF0YWJhc2VzKCRrKXtyZXR1cm4KcXVlcmllcygiRFJPUCBEQVRBQkFTRSAiLmltcGxvZGUoIiwgIixhcnJheV9tYXAoJ2lkZl9lc2NhcGUnLCRrKSkpO31mdW5jdGlvbgpyZW5hbWVfZGF0YWJhc2UoJEQsJGQpe2lmKHByZWdfbWF0Y2goJ35eW2EtejAtOV9dKyR+aScsJGQpKXF1ZXJpZXMoIkFMVEVSIERBVEFCQVNFICIuaWRmX2VzY2FwZShEQikuIiBDT0xMQVRFICRkIik7cXVlcmllcygiQUxURVIgREFUQUJBU0UgIi5pZGZfZXNjYXBlKERCKS4iIE1PRElGWSBOQU1FID0gIi5pZGZfZXNjYXBlKCREKSk7cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmF1dG9faW5jcmVtZW50KCl7cmV0dXJuIiBJREVOVElUWSIuKCRfUE9TVFsiQXV0b19pbmNyZW1lbnQiXSE9IiI/IigiLm51bWJlcigkX1BPU1RbIkF1dG9faW5jcmVtZW50Il0pLiIsMSkiOiIiKS4iIFBSSU1BUlkgS0VZIjt9ZnVuY3Rpb24KYWx0ZXJfdGFibGUoJFEsJEQsJHAsJGZkLCRyYiwkeWMsJGQsJEthLCRUZil7JGM9YXJyYXkoKTskdGI9YXJyYXkoKTtmb3JlYWNoKCRwCmFzJG8peyRlPWlkZl9lc2NhcGUoJG9bMF0pOyRYPSRvWzFdO2lmKCEkWCkkY1siRFJPUCJdW109IiBDT0xVTU4gJGUiO2Vsc2V7JFhbMV09cHJlZ19yZXBsYWNlKCJ+KCBDT0xMQVRFICknKFxcdyspJ34iLCdcMVwyJywkWFsxXSk7JHRiWyRvWzBdXT0kWFs1XTt1bnNldCgkWFs1XSk7aWYoJG9bMF09PSIiKSRjWyJBREQiXVtdPSJcbiAgIi5pbXBsb2RlKCIiLCRYKS4oJFE9PSIiP3N1YnN0cigkZmRbJFhbMF1dLDE2K3N0cmxlbigkWFswXSkpOiIiKTtlbHNle3Vuc2V0KCRYWzZdKTtpZigkZSE9JFhbMF0pcXVlcmllcygiRVhFQyBzcF9yZW5hbWUgIi5xKHRhYmxlKCRRKS4iLiRlIikuIiwgIi5xKGlkZl91bmVzY2FwZSgkWFswXSkpLiIsICdDT0xVTU4nIik7JGNbIkFMVEVSIENPTFVNTiAiLmltcGxvZGUoIiIsJFgpXVtdPSIiO319fWlmKCRRPT0iIilyZXR1cm4KcXVlcmllcygiQ1JFQVRFIFRBQkxFICIudGFibGUoJEQpLiIgKCIuaW1wbG9kZSgiLCIsKGFycmF5KSRjWyJBREQiXSkuIlxuKSIpO2lmKCRRIT0kRClxdWVyaWVzKCJFWEVDIHNwX3JlbmFtZSAiLnEodGFibGUoJFEpKS4iLCAiLnEoJEQpKTtpZigkZmQpJGNbIiJdPSRmZDtmb3JlYWNoKCRjCmFzJHo9PiRYKXtpZighcXVlcmllcygiQUxURVIgVEFCTEUgIi5pZGZfZXNjYXBlKCREKS4iICR6Ii5pbXBsb2RlKCIsIiwkWCkpKXJldHVybgpmYWxzZTt9Zm9yZWFjaCgkdGIKYXMkej0+JFgpeyRyYj1zdWJzdHIoJFgsOSk7cXVlcmllcygiRVhFQyBzcF9kcm9wZXh0ZW5kZWRwcm9wZXJ0eSBAbmFtZSA9IE4nTVNfRGVzY3JpcHRpb24nLCBAbGV2ZWwwdHlwZSA9IE4nU2NoZW1hJywgQGxldmVsMG5hbWUgPSAiLnEoZ2V0X3NjaGVtYSgpKS4iLCBAbGV2ZWwxdHlwZSA9IE4nVGFibGUnLCBAbGV2ZWwxbmFtZSA9ICIucSgkRCkuIiwgQGxldmVsMnR5cGUgPSBOJ0NvbHVtbicsIEBsZXZlbDJuYW1lID0gIi5xKCR6KSk7cXVlcmllcygiRVhFQyBzcF9hZGRleHRlbmRlZHByb3BlcnR5IEBuYW1lID0gTidNU19EZXNjcmlwdGlvbicsIEB2YWx1ZSA9ICIuJHJiLiIsIEBsZXZlbDB0eXBlID0gTidTY2hlbWEnLCBAbGV2ZWwwbmFtZSA9ICIucShnZXRfc2NoZW1hKCkpLiIsIEBsZXZlbDF0eXBlID0gTidUYWJsZScsIEBsZXZlbDFuYW1lID0gIi5xKCREKS4iLCBAbGV2ZWwydHlwZSA9IE4nQ29sdW1uJywgQGxldmVsMm5hbWUgPSAiLnEoJHopKTt9cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmFsdGVyX2luZGV4ZXMoJFEsJGMpeyR3PWFycmF5KCk7JGpjPWFycmF5KCk7Zm9yZWFjaCgkYwphcyRYKXtpZigkWFsyXT09IkRST1AiKXtpZigkWFswXT09IlBSSU1BUlkiKSRqY1tdPWlkZl9lc2NhcGUoJFhbMV0pO2Vsc2Ukd1tdPWlkZl9lc2NhcGUoJFhbMV0pLiIgT04gIi50YWJsZSgkUSk7fWVsc2VpZighcXVlcmllcygoJFhbMF0hPSJQUklNQVJZIj8iQ1JFQVRFICRYWzBdICIuKCRYWzBdIT0iSU5ERVgiPyJJTkRFWCAiOiIiKS5pZGZfZXNjYXBlKCRYWzFdIT0iIj8kWFsxXTp1bmlxaWQoJFEuIl8iKSkuIiBPTiAiLnRhYmxlKCRRKToiQUxURVIgVEFCTEUgIi50YWJsZSgkUSkuIiBBREQgUFJJTUFSWSBLRVkiKS4iICgiLmltcGxvZGUoIiwgIiwkWFsyXSkuIikiKSlyZXR1cm4KZmFsc2U7fXJldHVybighJHd8fHF1ZXJpZXMoIkRST1AgSU5ERVggIi5pbXBsb2RlKCIsICIsJHcpKSkmJighJGpjfHxxdWVyaWVzKCJBTFRFUiBUQUJMRSAiLnRhYmxlKCRRKS4iIERST1AgIi5pbXBsb2RlKCIsICIsJGpjKSkpO31mdW5jdGlvbgpsYXN0X2lkKCl7Z2xvYmFsJGc7cmV0dXJuJGctPnJlc3VsdCgiU0VMRUNUIFNDT1BFX0lERU5USVRZKCkiKTt9ZnVuY3Rpb24KZXhwbGFpbigkZywkRyl7JGctPnF1ZXJ5KCJTRVQgU0hPV1BMQU5fQUxMIE9OIik7JEk9JGctPnF1ZXJ5KCRHKTskZy0+cXVlcnkoIlNFVCBTSE9XUExBTl9BTEwgT0ZGIik7cmV0dXJuJEk7fWZ1bmN0aW9uCmZvdW5kX3Jvd3MoJFIsJFope31mdW5jdGlvbgpmb3JlaWduX2tleXMoJFEpeyRJPWFycmF5KCk7Zm9yZWFjaChnZXRfcm93cygiRVhFQyBzcF9ma2V5cyBAZmt0YWJsZV9uYW1lID0gIi5xKCRRKSlhcyRKKXskcj0mJElbJEpbIkZLX05BTUUiXV07JHJbImRiIl09JEpbIlBLVEFCTEVfUVVBTElGSUVSIl07JHJbInRhYmxlIl09JEpbIlBLVEFCTEVfTkFNRSJdOyRyWyJzb3VyY2UiXVtdPSRKWyJGS0NPTFVNTl9OQU1FIl07JHJbInRhcmdldCJdW109JEpbIlBLQ09MVU1OX05BTUUiXTt9cmV0dXJuJEk7fWZ1bmN0aW9uCnRydW5jYXRlX3RhYmxlcygkUyl7cmV0dXJuCmFwcGx5X3F1ZXJpZXMoIlRSVU5DQVRFIFRBQkxFIiwkUyk7fWZ1bmN0aW9uCmRyb3Bfdmlld3MoJFlpKXtyZXR1cm4KcXVlcmllcygiRFJPUCBWSUVXICIuaW1wbG9kZSgiLCAiLGFycmF5X21hcCgndGFibGUnLCRZaSkpKTt9ZnVuY3Rpb24KZHJvcF90YWJsZXMoJFMpe3JldHVybgpxdWVyaWVzKCJEUk9QIFRBQkxFICIuaW1wbG9kZSgiLCAiLGFycmF5X21hcCgndGFibGUnLCRTKSkpO31mdW5jdGlvbgptb3ZlX3RhYmxlcygkUywkWWksJFdoKXtyZXR1cm4KYXBwbHlfcXVlcmllcygiQUxURVIgU0NIRU1BICIuaWRmX2VzY2FwZSgkV2gpLiIgVFJBTlNGRVIiLGFycmF5X21lcmdlKCRTLCRZaSkpO31mdW5jdGlvbgp0cmlnZ2VyKCREKXtpZigkRD09IiIpcmV0dXJuCmFycmF5KCk7JEs9Z2V0X3Jvd3MoIlNFTEVDVCBzLm5hbWUgW1RyaWdnZXJdLApDQVNFIFdIRU4gT0JKRUNUUFJPUEVSVFkocy5pZCwgJ0V4ZWNJc0luc2VydFRyaWdnZXInKSA9IDEgVEhFTiAnSU5TRVJUJyBXSEVOIE9CSkVDVFBST1BFUlRZKHMuaWQsICdFeGVjSXNVcGRhdGVUcmlnZ2VyJykgPSAxIFRIRU4gJ1VQREFURScgV0hFTiBPQkpFQ1RQUk9QRVJUWShzLmlkLCAnRXhlY0lzRGVsZXRlVHJpZ2dlcicpID0gMSBUSEVOICdERUxFVEUnIEVORCBbRXZlbnRdLApDQVNFIFdIRU4gT0JKRUNUUFJPUEVSVFkocy5pZCwgJ0V4ZWNJc0luc3RlYWRPZlRyaWdnZXInKSA9IDEgVEhFTiAnSU5TVEVBRCBPRicgRUxTRSAnQUZURVInIEVORCBbVGltaW5nXSwKYy50ZXh0CkZST00gc3lzb2JqZWN0cyBzCkpPSU4gc3lzY29tbWVudHMgYyBPTiBzLmlkID0gYy5pZApXSEVSRSBzLnh0eXBlID0gJ1RSJyBBTkQgcy5uYW1lID0gIi5xKCREKSk7JEk9cmVzZXQoJEspO2lmKCRJKSRJWyJTdGF0ZW1lbnQiXT1wcmVnX3JlcGxhY2UoJ35eLitccytBU1xzK35pc1UnLCcnLCRJWyJ0ZXh0Il0pO3JldHVybiRJO31mdW5jdGlvbgp0cmlnZ2VycygkUSl7JEk9YXJyYXkoKTtmb3JlYWNoKGdldF9yb3dzKCJTRUxFQ1Qgc3lzMS5uYW1lLApDQVNFIFdIRU4gT0JKRUNUUFJPUEVSVFkoc3lzMS5pZCwgJ0V4ZWNJc0luc2VydFRyaWdnZXInKSA9IDEgVEhFTiAnSU5TRVJUJyBXSEVOIE9CSkVDVFBST1BFUlRZKHN5czEuaWQsICdFeGVjSXNVcGRhdGVUcmlnZ2VyJykgPSAxIFRIRU4gJ1VQREFURScgV0hFTiBPQkpFQ1RQUk9QRVJUWShzeXMxLmlkLCAnRXhlY0lzRGVsZXRlVHJpZ2dlcicpID0gMSBUSEVOICdERUxFVEUnIEVORCBbRXZlbnRdLApDQVNFIFdIRU4gT0JKRUNUUFJPUEVSVFkoc3lzMS5pZCwgJ0V4ZWNJc0luc3RlYWRPZlRyaWdnZXInKSA9IDEgVEhFTiAnSU5TVEVBRCBPRicgRUxTRSAnQUZURVInIEVORCBbVGltaW5nXQpGUk9NIHN5c29iamVjdHMgc3lzMQpKT0lOIHN5c29iamVjdHMgc3lzMiBPTiBzeXMxLnBhcmVudF9vYmogPSBzeXMyLmlkCldIRVJFIHN5czEueHR5cGUgPSAnVFInIEFORCBzeXMyLm5hbWUgPSAiLnEoJFEpKWFzJEopJElbJEpbIm5hbWUiXV09YXJyYXkoJEpbIlRpbWluZyJdLCRKWyJFdmVudCJdKTtyZXR1cm4kSTt9ZnVuY3Rpb24KdHJpZ2dlcl9vcHRpb25zKCl7cmV0dXJuCmFycmF5KCJUaW1pbmciPT5hcnJheSgiQUZURVIiLCJJTlNURUFEIE9GIiksIkV2ZW50Ij0+YXJyYXkoIklOU0VSVCIsIlVQREFURSIsIkRFTEVURSIpLCJUeXBlIj0+YXJyYXkoIkFTIiksKTt9ZnVuY3Rpb24Kc2NoZW1hcygpe3JldHVybgpnZXRfdmFscygiU0VMRUNUIG5hbWUgRlJPTSBzeXMuc2NoZW1hcyIpO31mdW5jdGlvbgpnZXRfc2NoZW1hKCl7Z2xvYmFsJGc7aWYoJF9HRVRbIm5zIl0hPSIiKXJldHVybiRfR0VUWyJucyJdO3JldHVybiRnLT5yZXN1bHQoIlNFTEVDVCBTQ0hFTUFfTkFNRSgpIik7fWZ1bmN0aW9uCnNldF9zY2hlbWEoJFpnKXtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KdXNlX3NxbCgkail7cmV0dXJuIlVTRSAiLmlkZl9lc2NhcGUoJGopO31mdW5jdGlvbgpzaG93X3ZhcmlhYmxlcygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgpzaG93X3N0YXR1cygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgpjb252ZXJ0X2ZpZWxkKCRvKXt9ZnVuY3Rpb24KdW5jb252ZXJ0X2ZpZWxkKCRvLCRJKXtyZXR1cm4kSTt9ZnVuY3Rpb24Kc3VwcG9ydCgkVGMpe3JldHVybgpwcmVnX21hdGNoKCd+Xihjb21tZW50fGNvbHVtbnN8ZGF0YWJhc2V8ZHJvcF9jb2x8aW5kZXhlc3xkZXNjaWR4fHNjaGVtZXxzcWx8dGFibGV8dHJpZ2dlcnx2aWV3fHZpZXdfdHJpZ2dlcikkficsJFRjKTt9ZnVuY3Rpb24KZHJpdmVyX2NvbmZpZygpeyRVPWFycmF5KCk7JEdoPWFycmF5KCk7Zm9yZWFjaChhcnJheSgnTnVtYmVycyc9PmFycmF5KCJ0aW55aW50Ij0+Mywic21hbGxpbnQiPT41LCJpbnQiPT4xMCwiYmlnaW50Ij0+MjAsImJpdCI9PjEsImRlY2ltYWwiPT4wLCJyZWFsIj0+MTIsImZsb2F0Ij0+NTMsInNtYWxsbW9uZXkiPT4xMCwibW9uZXkiPT4yMCksJ0RhdGUgYW5kIHRpbWUnPT5hcnJheSgiZGF0ZSI9PjEwLCJzbWFsbGRhdGV0aW1lIj0+MTksImRhdGV0aW1lIj0+MTksImRhdGV0aW1lMiI9PjE5LCJ0aW1lIj0+OCwiZGF0ZXRpbWVvZmZzZXQiPT4xMCksJ1N0cmluZ3MnPT5hcnJheSgiY2hhciI9PjgwMDAsInZhcmNoYXIiPT44MDAwLCJ0ZXh0Ij0+MjE0NzQ4MzY0NywibmNoYXIiPT40MDAwLCJudmFyY2hhciI9PjQwMDAsIm50ZXh0Ij0+MTA3Mzc0MTgyMyksJ0JpbmFyeSc9PmFycmF5KCJiaW5hcnkiPT44MDAwLCJ2YXJiaW5hcnkiPT44MDAwLCJpbWFnZSI9PjIxNDc0ODM2NDcpLClhcyR6PT4kWCl7JFUrPSRYOyRHaFskel09YXJyYXlfa2V5cygkWCk7fXJldHVybgphcnJheSgncG9zc2libGVfZHJpdmVycyc9PmFycmF5KCJTUUxTUlYiLCJNU1NRTCIsIlBET19EQkxJQiIpLCdqdXNoJz0+Im1zc3FsIiwndHlwZXMnPT4kVSwnc3RydWN0dXJlZF90eXBlcyc9PiRHaCwndW5zaWduZWQnPT5hcnJheSgpLCdvcGVyYXRvcnMnPT5hcnJheSgiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIiE9IiwiTElLRSIsIkxJS0UgJSUiLCJJTiIsIklTIE5VTEwiLCJOT1QgTElLRSIsIk5PVCBJTiIsIklTIE5PVCBOVUxMIiksJ2Z1bmN0aW9ucyc9PmFycmF5KCJsZW4iLCJsb3dlciIsInJvdW5kIiwidXBwZXIiKSwnZ3JvdXBpbmcnPT5hcnJheSgiYXZnIiwiY291bnQiLCJjb3VudCBkaXN0aW5jdCIsIm1heCIsIm1pbiIsInN1bSIpLCdlZGl0X2Z1bmN0aW9ucyc9PmFycmF5KGFycmF5KCJkYXRlfHRpbWUiPT4iZ2V0ZGF0ZSIsKSxhcnJheSgiaW50fGRlY2ltYWx8cmVhbHxmbG9hdHxtb25leXxkYXRldGltZSI9PiIrLy0iLCJjaGFyfHRleHQiPT4iKyIsKSksKTt9fSRpY1sibW9uZ28iXT0iTW9uZ29EQiAoYWxwaGEpIjtpZihpc3NldCgkX0dFVFsibW9uZ28iXSkpe2RlZmluZSgiRFJJVkVSIiwibW9uZ28iKTtpZihjbGFzc19leGlzdHMoJ01vbmdvREInKSl7Y2xhc3MKTWluX0RCe3ZhciRleHRlbnNpb249Ik1vbmdvIiwkc2VydmVyX2luZm89TW9uZ29DbGllbnQ6OlZFUlNJT04sJGVycm9yLCRsYXN0X2lkLCRfbGluaywkX2RiO2Z1bmN0aW9uCmNvbm5lY3QoJEppLCR4Zil7dHJ5eyR0aGlzLT5fbGluaz1uZXcKTW9uZ29DbGllbnQoJEppLCR4Zik7aWYoJHhmWyJwYXNzd29yZCJdIT0iIil7JHhmWyJwYXNzd29yZCJdPSIiO3RyeXtuZXcKTW9uZ29DbGllbnQoJEppLCR4Zik7JHRoaXMtPmVycm9yPSdEYXRhYmFzZSBkb2VzIG5vdCBzdXBwb3J0IHBhc3N3b3JkLic7fWNhdGNoKEV4Y2VwdGlvbiRwYyl7fX19Y2F0Y2goRXhjZXB0aW9uJHBjKXskdGhpcy0+ZXJyb3I9JHBjLT5nZXRNZXNzYWdlKCk7fX1mdW5jdGlvbgpxdWVyeSgkRyl7cmV0dXJuCmZhbHNlO31mdW5jdGlvbgpzZWxlY3RfZGIoJGope3RyeXskdGhpcy0+X2RiPSR0aGlzLT5fbGluay0+c2VsZWN0REIoJGopO3JldHVybgp0cnVlO31jYXRjaChFeGNlcHRpb24kRmMpeyR0aGlzLT5lcnJvcj0kRmMtPmdldE1lc3NhZ2UoKTtyZXR1cm4KZmFsc2U7fX1mdW5jdGlvbgpxdW90ZSgkUCl7cmV0dXJuJFA7fX1jbGFzcwpNaW5fUmVzdWx0e3ZhciRudW1fcm93cywkX3Jvd3M9YXJyYXkoKSwkX29mZnNldD0wLCRfY2hhcnNldD1hcnJheSgpO2Z1bmN0aW9uCl9fY29uc3RydWN0KCRIKXtmb3JlYWNoKCRICmFzJGRlKXskSj1hcnJheSgpO2ZvcmVhY2goJGRlCmFzJHo9PiRYKXtpZihpc19hKCRYLCdNb25nb0JpbkRhdGEnKSkkdGhpcy0+X2NoYXJzZXRbJHpdPTYzOyRKWyR6XT0oaXNfYSgkWCwnTW9uZ29JZCcpPyJPYmplY3RJZChcIiRYXCIpIjooaXNfYSgkWCwnTW9uZ29EYXRlJyk/Z21kYXRlKCJZLW0tZCBIOmk6cyIsJFgtPnNlYykuIiBHTVQiOihpc19hKCRYLCdNb25nb0JpbkRhdGEnKT8kWC0+YmluOihpc19hKCRYLCdNb25nb1JlZ2V4Jyk/IiRYIjooaXNfb2JqZWN0KCRYKT9nZXRfY2xhc3MoJFgpOiRYKSkpKSk7fSR0aGlzLT5fcm93c1tdPSRKO2ZvcmVhY2goJEoKYXMkej0+JFgpe2lmKCFpc3NldCgkdGhpcy0+X3Jvd3NbMF1bJHpdKSkkdGhpcy0+X3Jvd3NbMF1bJHpdPW51bGw7fX0kdGhpcy0+bnVtX3Jvd3M9Y291bnQoJHRoaXMtPl9yb3dzKTt9ZnVuY3Rpb24KZmV0Y2hfYXNzb2MoKXskSj1jdXJyZW50KCR0aGlzLT5fcm93cyk7aWYoISRKKXJldHVybiRKOyRJPWFycmF5KCk7Zm9yZWFjaCgkdGhpcy0+X3Jvd3NbMF1hcyR6PT4kWCkkSVskel09JEpbJHpdO25leHQoJHRoaXMtPl9yb3dzKTtyZXR1cm4kSTt9ZnVuY3Rpb24KZmV0Y2hfcm93KCl7JEk9JHRoaXMtPmZldGNoX2Fzc29jKCk7aWYoISRJKXJldHVybiRJO3JldHVybgphcnJheV92YWx1ZXMoJEkpO31mdW5jdGlvbgpmZXRjaF9maWVsZCgpeyRoZT1hcnJheV9rZXlzKCR0aGlzLT5fcm93c1swXSk7JEQ9JGhlWyR0aGlzLT5fb2Zmc2V0KytdO3JldHVybihvYmplY3QpYXJyYXkoJ25hbWUnPT4kRCwnY2hhcnNldG5yJz0+JHRoaXMtPl9jaGFyc2V0WyREXSwpO319Y2xhc3MKTWluX0RyaXZlcgpleHRlbmRzCk1pbl9TUUx7cHVibGljJGtnPSJfaWQiO2Z1bmN0aW9uCnNlbGVjdCgkUSwkTCwkWiwkcWQsJHpmPWFycmF5KCksJF89MSwkRT0wLCRtZz1mYWxzZSl7JEw9KCRMPT1hcnJheSgiKiIpP2FycmF5KCk6YXJyYXlfZmlsbF9rZXlzKCRMLHRydWUpKTskdWg9YXJyYXkoKTtmb3JlYWNoKCR6ZgphcyRYKXskWD1wcmVnX3JlcGxhY2UoJ34gREVTQyR+JywnJywkWCwxLCRHYik7JHVoWyRYXT0oJEdiPy0xOjEpO31yZXR1cm4KbmV3Ck1pbl9SZXN1bHQoJHRoaXMtPl9jb25uLT5fZGItPnNlbGVjdENvbGxlY3Rpb24oJFEpLT5maW5kKGFycmF5KCksJEwpLT5zb3J0KCR1aCktPmxpbWl0KCRfIT0iIj8rJF86MCktPnNraXAoJEUqJF8pKTt9ZnVuY3Rpb24KaW5zZXJ0KCRRLCROKXt0cnl7JEk9JHRoaXMtPl9jb25uLT5fZGItPnNlbGVjdENvbGxlY3Rpb24oJFEpLT5pbnNlcnQoJE4pOyR0aGlzLT5fY29ubi0+ZXJybm89JElbJ2NvZGUnXTskdGhpcy0+X2Nvbm4tPmVycm9yPSRJWydlcnInXTskdGhpcy0+X2Nvbm4tPmxhc3RfaWQ9JE5bJ19pZCddO3JldHVybiEkSVsnZXJyJ107fWNhdGNoKEV4Y2VwdGlvbiRGYyl7JHRoaXMtPl9jb25uLT5lcnJvcj0kRmMtPmdldE1lc3NhZ2UoKTtyZXR1cm4KZmFsc2U7fX19ZnVuY3Rpb24KZ2V0X2RhdGFiYXNlcygkZGQpe2dsb2JhbCRnOyRJPWFycmF5KCk7JFViPSRnLT5fbGluay0+bGlzdERCcygpO2ZvcmVhY2goJFViWydkYXRhYmFzZXMnXWFzJGwpJElbXT0kbFsnbmFtZSddO3JldHVybiRJO31mdW5jdGlvbgpjb3VudF90YWJsZXMoJGspe2dsb2JhbCRnOyRJPWFycmF5KCk7Zm9yZWFjaCgkawphcyRsKSRJWyRsXT1jb3VudCgkZy0+X2xpbmstPnNlbGVjdERCKCRsKS0+Z2V0Q29sbGVjdGlvbk5hbWVzKHRydWUpKTtyZXR1cm4kSTt9ZnVuY3Rpb24KdGFibGVzX2xpc3QoKXtnbG9iYWwkZztyZXR1cm4KYXJyYXlfZmlsbF9rZXlzKCRnLT5fZGItPmdldENvbGxlY3Rpb25OYW1lcyh0cnVlKSwndGFibGUnKTt9ZnVuY3Rpb24KZHJvcF9kYXRhYmFzZXMoJGspe2dsb2JhbCRnO2ZvcmVhY2goJGsKYXMkbCl7JExnPSRnLT5fbGluay0+c2VsZWN0REIoJGwpLT5kcm9wKCk7aWYoISRMZ1snb2snXSlyZXR1cm4KZmFsc2U7fXJldHVybgp0cnVlO31mdW5jdGlvbgppbmRleGVzKCRRLCRoPW51bGwpe2dsb2JhbCRnOyRJPWFycmF5KCk7Zm9yZWFjaCgkZy0+X2RiLT5zZWxlY3RDb2xsZWN0aW9uKCRRKS0+Z2V0SW5kZXhJbmZvKClhcyR3KXskY2M9YXJyYXkoKTtmb3JlYWNoKCR3WyJrZXkiXWFzJGU9PiRUKSRjY1tdPSgkVD09LTE/JzEnOm51bGwpOyRJWyR3WyJuYW1lIl1dPWFycmF5KCJ0eXBlIj0+KCR3WyJuYW1lIl09PSJfaWRfIj8iUFJJTUFSWSI6KCR3WyJ1bmlxdWUiXT8iVU5JUVVFIjoiSU5ERVgiKSksImNvbHVtbnMiPT5hcnJheV9rZXlzKCR3WyJrZXkiXSksImxlbmd0aHMiPT5hcnJheSgpLCJkZXNjcyI9PiRjYywpO31yZXR1cm4kSTt9ZnVuY3Rpb24KZmllbGRzKCRRKXtyZXR1cm4KZmllbGRzX2Zyb21fZWRpdCgpO31mdW5jdGlvbgpmb3VuZF9yb3dzKCRSLCRaKXtnbG9iYWwkZztyZXR1cm4kZy0+X2RiLT5zZWxlY3RDb2xsZWN0aW9uKCRfR0VUWyJzZWxlY3QiXSktPmNvdW50KCRaKTt9JHVmPWFycmF5KCI9Iik7fWVsc2VpZihjbGFzc19leGlzdHMoJ01vbmdvREJcRHJpdmVyXE1hbmFnZXInKSl7Y2xhc3MKTWluX0RCe3ZhciRleHRlbnNpb249Ik1vbmdvREIiLCRzZXJ2ZXJfaW5mbz1NT05HT0RCX1ZFUlNJT04sJGFmZmVjdGVkX3Jvd3MsJGVycm9yLCRsYXN0X2lkO3ZhciRfbGluazt2YXIkX2RiLCRfZGJfbmFtZTtmdW5jdGlvbgpjb25uZWN0KCRKaSwkeGYpeyRnYj0nTW9uZ29EQlxEcml2ZXJcTWFuYWdlcic7JHRoaXMtPl9saW5rPW5ldyRnYigkSmksJHhmKTskdGhpcy0+ZXhlY3V0ZUNvbW1hbmQoJ2FkbWluJyxhcnJheSgncGluZyc9PjEpKTt9ZnVuY3Rpb24KZXhlY3V0ZUNvbW1hbmQoJGwsJHBiKXskZ2I9J01vbmdvREJcRHJpdmVyXENvbW1hbmQnO3RyeXtyZXR1cm4kdGhpcy0+X2xpbmstPmV4ZWN1dGVDb21tYW5kKCRsLG5ldyRnYigkcGIpKTt9Y2F0Y2goRXhjZXB0aW9uJHBjKXskdGhpcy0+ZXJyb3I9JHBjLT5nZXRNZXNzYWdlKCk7cmV0dXJuCmFycmF5KCk7fX1mdW5jdGlvbgpleGVjdXRlQnVsa1dyaXRlKCRXZSwkV2EsJEhiKXt0cnl7JE9nPSR0aGlzLT5fbGluay0+ZXhlY3V0ZUJ1bGtXcml0ZSgkV2UsJFdhKTskdGhpcy0+YWZmZWN0ZWRfcm93cz0kT2ctPiRIYigpO3JldHVybgp0cnVlO31jYXRjaChFeGNlcHRpb24kcGMpeyR0aGlzLT5lcnJvcj0kcGMtPmdldE1lc3NhZ2UoKTtyZXR1cm4KZmFsc2U7fX1mdW5jdGlvbgpxdWVyeSgkRyl7cmV0dXJuCmZhbHNlO31mdW5jdGlvbgpzZWxlY3RfZGIoJGopeyR0aGlzLT5fZGJfbmFtZT0kajtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KcXVvdGUoJFApe3JldHVybiRQO319Y2xhc3MKTWluX1Jlc3VsdHt2YXIkbnVtX3Jvd3MsJF9yb3dzPWFycmF5KCksJF9vZmZzZXQ9MCwkX2NoYXJzZXQ9YXJyYXkoKTtmdW5jdGlvbgpfX2NvbnN0cnVjdCgkSCl7Zm9yZWFjaCgkSAphcyRkZSl7JEo9YXJyYXkoKTtmb3JlYWNoKCRkZQphcyR6PT4kWCl7aWYoaXNfYSgkWCwnTW9uZ29EQlxCU09OXEJpbmFyeScpKSR0aGlzLT5fY2hhcnNldFskel09NjM7JEpbJHpdPShpc19hKCRYLCdNb25nb0RCXEJTT05cT2JqZWN0SUQnKT8nTW9uZ29EQlxCU09OXE9iamVjdElEKCInLiIkWFwiKSI6KGlzX2EoJFgsJ01vbmdvREJcQlNPTlxVVENEYXRldGltZScpPyRYLT50b0RhdGVUaW1lKCktPmZvcm1hdCgnWS1tLWQgSDppOnMnKTooaXNfYSgkWCwnTW9uZ29EQlxCU09OXEJpbmFyeScpPyRYLT5nZXREYXRhKCk6KGlzX2EoJFgsJ01vbmdvREJcQlNPTlxSZWdleCcpPyIkWCI6KGlzX29iamVjdCgkWCl8fGlzX2FycmF5KCRYKT9qc29uX2VuY29kZSgkWCwyNTYpOiRYKSkpKSk7fSR0aGlzLT5fcm93c1tdPSRKO2ZvcmVhY2goJEoKYXMkej0+JFgpe2lmKCFpc3NldCgkdGhpcy0+X3Jvd3NbMF1bJHpdKSkkdGhpcy0+X3Jvd3NbMF1bJHpdPW51bGw7fX0kdGhpcy0+bnVtX3Jvd3M9Y291bnQoJHRoaXMtPl9yb3dzKTt9ZnVuY3Rpb24KZmV0Y2hfYXNzb2MoKXskSj1jdXJyZW50KCR0aGlzLT5fcm93cyk7aWYoISRKKXJldHVybiRKOyRJPWFycmF5KCk7Zm9yZWFjaCgkdGhpcy0+X3Jvd3NbMF1hcyR6PT4kWCkkSVskel09JEpbJHpdO25leHQoJHRoaXMtPl9yb3dzKTtyZXR1cm4kSTt9ZnVuY3Rpb24KZmV0Y2hfcm93KCl7JEk9JHRoaXMtPmZldGNoX2Fzc29jKCk7aWYoISRJKXJldHVybiRJO3JldHVybgphcnJheV92YWx1ZXMoJEkpO31mdW5jdGlvbgpmZXRjaF9maWVsZCgpeyRoZT1hcnJheV9rZXlzKCR0aGlzLT5fcm93c1swXSk7JEQ9JGhlWyR0aGlzLT5fb2Zmc2V0KytdO3JldHVybihvYmplY3QpYXJyYXkoJ25hbWUnPT4kRCwnY2hhcnNldG5yJz0+JHRoaXMtPl9jaGFyc2V0WyREXSwpO319Y2xhc3MKTWluX0RyaXZlcgpleHRlbmRzCk1pbl9TUUx7cHVibGljJGtnPSJfaWQiO2Z1bmN0aW9uCnNlbGVjdCgkUSwkTCwkWiwkcWQsJHpmPWFycmF5KCksJF89MSwkRT0wLCRtZz1mYWxzZSl7Z2xvYmFsJGc7JEw9KCRMPT1hcnJheSgiKiIpP2FycmF5KCk6YXJyYXlfZmlsbF9rZXlzKCRMLDEpKTtpZihjb3VudCgkTCkmJiFpc3NldCgkTFsnX2lkJ10pKSRMWydfaWQnXT0wOyRaPXdoZXJlX3RvX3F1ZXJ5KCRaKTskdWg9YXJyYXkoKTtmb3JlYWNoKCR6ZgphcyRYKXskWD1wcmVnX3JlcGxhY2UoJ34gREVTQyR+JywnJywkWCwxLCRHYik7JHVoWyRYXT0oJEdiPy0xOjEpO31pZihpc3NldCgkX0dFVFsnbGltaXQnXSkmJmlzX251bWVyaWMoJF9HRVRbJ2xpbWl0J10pJiYkX0dFVFsnbGltaXQnXT4wKSRfPSRfR0VUWydsaW1pdCddOyRfPW1pbigyMDAsbWF4KDEsKGludCkkXykpOyRyaD0kRSokXzskZ2I9J01vbmdvREJcRHJpdmVyXFF1ZXJ5Jzt0cnl7cmV0dXJuCm5ldwpNaW5fUmVzdWx0KCRnLT5fbGluay0+ZXhlY3V0ZVF1ZXJ5KCIkZy0+X2RiX25hbWUuJFEiLG5ldyRnYigkWixhcnJheSgncHJvamVjdGlvbic9PiRMLCdsaW1pdCc9PiRfLCdza2lwJz0+JHJoLCdzb3J0Jz0+JHVoKSkpKTt9Y2F0Y2goRXhjZXB0aW9uJHBjKXskZy0+ZXJyb3I9JHBjLT5nZXRNZXNzYWdlKCk7cmV0dXJuCmZhbHNlO319ZnVuY3Rpb24KdXBkYXRlKCRRLCROLCR3ZywkXz0wLCRoaD0iXG4iKXtnbG9iYWwkZzskbD0kZy0+X2RiX25hbWU7JFo9c3FsX3F1ZXJ5X3doZXJlX3BhcnNlcigkd2cpOyRnYj0nTW9uZ29EQlxEcml2ZXJcQnVsa1dyaXRlJzskV2E9bmV3JGdiKGFycmF5KCkpO2lmKGlzc2V0KCROWydfaWQnXSkpdW5zZXQoJE5bJ19pZCddKTskSWc9YXJyYXkoKTtmb3JlYWNoKCROCmFzJHo9PiRZKXtpZigkWT09J05VTEwnKXskSWdbJHpdPTE7dW5zZXQoJE5bJHpdKTt9fSRJaT1hcnJheSgnJHNldCc9PiROKTtpZihjb3VudCgkSWcpKSRJaVsnJHVuc2V0J109JElnOyRXYS0+dXBkYXRlKCRaLCRJaSxhcnJheSgndXBzZXJ0Jz0+ZmFsc2UpKTtyZXR1cm4kZy0+ZXhlY3V0ZUJ1bGtXcml0ZSgiJGwuJFEiLCRXYSwnZ2V0TW9kaWZpZWRDb3VudCcpO31mdW5jdGlvbgpkZWxldGUoJFEsJHdnLCRfPTApe2dsb2JhbCRnOyRsPSRnLT5fZGJfbmFtZTskWj1zcWxfcXVlcnlfd2hlcmVfcGFyc2VyKCR3Zyk7JGdiPSdNb25nb0RCXERyaXZlclxCdWxrV3JpdGUnOyRXYT1uZXckZ2IoYXJyYXkoKSk7JFdhLT5kZWxldGUoJFosYXJyYXkoJ2xpbWl0Jz0+JF8pKTtyZXR1cm4kZy0+ZXhlY3V0ZUJ1bGtXcml0ZSgiJGwuJFEiLCRXYSwnZ2V0RGVsZXRlZENvdW50Jyk7fWZ1bmN0aW9uCmluc2VydCgkUSwkTil7Z2xvYmFsJGc7JGw9JGctPl9kYl9uYW1lOyRnYj0nTW9uZ29EQlxEcml2ZXJcQnVsa1dyaXRlJzskV2E9bmV3JGdiKGFycmF5KCkpO2lmKCROWydfaWQnXT09JycpdW5zZXQoJE5bJ19pZCddKTskV2EtPmluc2VydCgkTik7cmV0dXJuJGctPmV4ZWN1dGVCdWxrV3JpdGUoIiRsLiRRIiwkV2EsJ2dldEluc2VydGVkQ291bnQnKTt9fWZ1bmN0aW9uCmdldF9kYXRhYmFzZXMoJGRkKXtnbG9iYWwkZzskST1hcnJheSgpO2ZvcmVhY2goJGctPmV4ZWN1dGVDb21tYW5kKCdhZG1pbicsYXJyYXkoJ2xpc3REYXRhYmFzZXMnPT4xKSlhcyRVYil7Zm9yZWFjaCgkVWItPmRhdGFiYXNlcwphcyRsKSRJW109JGwtPm5hbWU7fXJldHVybiRJO31mdW5jdGlvbgpjb3VudF90YWJsZXMoJGspeyRJPWFycmF5KCk7cmV0dXJuJEk7fWZ1bmN0aW9uCnRhYmxlc19saXN0KCl7Z2xvYmFsJGc7JG1iPWFycmF5KCk7Zm9yZWFjaCgkZy0+ZXhlY3V0ZUNvbW1hbmQoJGctPl9kYl9uYW1lLGFycmF5KCdsaXN0Q29sbGVjdGlvbnMnPT4xKSlhcyRIKSRtYlskSC0+bmFtZV09J3RhYmxlJztyZXR1cm4kbWI7fWZ1bmN0aW9uCmRyb3BfZGF0YWJhc2VzKCRrKXtyZXR1cm4KZmFsc2U7fWZ1bmN0aW9uCmluZGV4ZXMoJFEsJGg9bnVsbCl7Z2xvYmFsJGc7JEk9YXJyYXkoKTtmb3JlYWNoKCRnLT5leGVjdXRlQ29tbWFuZCgkZy0+X2RiX25hbWUsYXJyYXkoJ2xpc3RJbmRleGVzJz0+JFEpKWFzJHcpeyRjYz1hcnJheSgpOyRmPWFycmF5KCk7Zm9yZWFjaChnZXRfb2JqZWN0X3ZhcnMoJHctPmtleSlhcyRlPT4kVCl7JGNjW109KCRUPT0tMT8nMSc6bnVsbCk7JGZbXT0kZTt9JElbJHctPm5hbWVdPWFycmF5KCJ0eXBlIj0+KCR3LT5uYW1lPT0iX2lkXyI/IlBSSU1BUlkiOihpc3NldCgkdy0+dW5pcXVlKT8iVU5JUVVFIjoiSU5ERVgiKSksImNvbHVtbnMiPT4kZiwibGVuZ3RocyI9PmFycmF5KCksImRlc2NzIj0+JGNjLCk7fXJldHVybiRJO31mdW5jdGlvbgpmaWVsZHMoJFEpe2dsb2JhbCRtOyRwPWZpZWxkc19mcm9tX2VkaXQoKTtpZighJHApeyRIPSRtLT5zZWxlY3QoJFEsYXJyYXkoIioiKSxudWxsLG51bGwsYXJyYXkoKSwxMCk7aWYoJEgpe3doaWxlKCRKPSRILT5mZXRjaF9hc3NvYygpKXtmb3JlYWNoKCRKCmFzJHo9PiRYKXskSlskel09bnVsbDskcFskel09YXJyYXkoImZpZWxkIj0+JHosInR5cGUiPT4ic3RyaW5nIiwibnVsbCI9PigkeiE9JG0tPnByaW1hcnkpLCJhdXRvX2luY3JlbWVudCI9Pigkej09JG0tPnByaW1hcnkpLCJwcml2aWxlZ2VzIj0+YXJyYXkoImluc2VydCI9PjEsInNlbGVjdCI9PjEsInVwZGF0ZSI9PjEsKSwpO319fX1yZXR1cm4kcDt9ZnVuY3Rpb24KZm91bmRfcm93cygkUiwkWil7Z2xvYmFsJGc7JFo9d2hlcmVfdG9fcXVlcnkoJFopOyRtaT0kZy0+ZXhlY3V0ZUNvbW1hbmQoJGctPl9kYl9uYW1lLGFycmF5KCdjb3VudCc9PiRSWydOYW1lJ10sJ3F1ZXJ5Jz0+JFopKS0+dG9BcnJheSgpO3JldHVybiRtaVswXS0+bjt9ZnVuY3Rpb24Kc3FsX3F1ZXJ5X3doZXJlX3BhcnNlcigkd2cpeyR3Zz1wcmVnX3JlcGxhY2UoJ35eXHNXSEVSRSBcKD9cKD8oLis/KVwpP1wpPyR+JywnXDEnLCR3Zyk7JGlqPWV4cGxvZGUoJyBBTkQgJywkd2cpOyRqaj1leHBsb2RlKCcpIE9SICgnLCR3Zyk7JFo9YXJyYXkoKTtmb3JlYWNoKCRpagphcyRnaikkWltdPXRyaW0oJGdqKTtpZihjb3VudCgkamopPT0xKSRqaj1hcnJheSgpO2Vsc2VpZihjb3VudCgkamopPjEpJFo9YXJyYXkoKTtyZXR1cm4Kd2hlcmVfdG9fcXVlcnkoJFosJGpqKTt9ZnVuY3Rpb24Kd2hlcmVfdG9fcXVlcnkoJGVqPWFycmF5KCksJGZqPWFycmF5KCkpe2dsb2JhbCRiOyRQYj1hcnJheSgpO2ZvcmVhY2goYXJyYXkoJ2FuZCc9PiRlaiwnb3InPT4kZmopYXMkVD0+JFope2lmKGlzX2FycmF5KCRaKSl7Zm9yZWFjaCgkWgphcyRMYyl7bGlzdCgkamIsJHNmLCRYKT1leHBsb2RlKCIgIiwkTGMsMyk7aWYoJGpiPT0iX2lkIiYmcHJlZ19tYXRjaCgnfl4oTW9uZ29EQlxcXFxCU09OXFxcXE9iamVjdElEKVwoIiguKykiXCkkficsJFgsJEMpKXtsaXN0KCwkZ2IsJFgpPSRDOyRYPW5ldyRnYigkWCk7fWlmKCFpbl9hcnJheSgkc2YsJGItPm9wZXJhdG9ycykpY29udGludWU7aWYocHJlZ19tYXRjaCgnfl5cKGZcKSguKyl+Jywkc2YsJEMpKXskWD0oZmxvYXQpJFg7JHNmPSRDWzFdO31lbHNlaWYocHJlZ19tYXRjaCgnfl5cKGRhdGVcKSguKyl+Jywkc2YsJEMpKXskUmI9bmV3CkRhdGVUaW1lKCRYKTskZ2I9J01vbmdvREJcQlNPTlxVVENEYXRldGltZSc7JFg9bmV3JGdiKCRSYi0+Z2V0VGltZXN0YW1wKCkqMTAwMCk7JHNmPSRDWzFdO31zd2l0Y2goJHNmKXtjYXNlJz0nOiRzZj0nJGVxJzticmVhaztjYXNlJyE9Jzokc2Y9JyRuZSc7YnJlYWs7Y2FzZSc+Jzokc2Y9JyRndCc7YnJlYWs7Y2FzZSc8Jzokc2Y9JyRsdCc7YnJlYWs7Y2FzZSc+PSc6JHNmPSckZ3RlJzticmVhaztjYXNlJzw9Jzokc2Y9JyRsdGUnO2JyZWFrO2Nhc2UncmVnZXgnOiRzZj0nJHJlZ2V4JzticmVhaztkZWZhdWx0OmNvbnRpbnVlCjI7fWlmKCRUPT0nYW5kJykkUGJbJyRhbmQnXVtdPWFycmF5KCRqYj0+YXJyYXkoJHNmPT4kWCkpO2Vsc2VpZigkVD09J29yJykkUGJbJyRvciddW109YXJyYXkoJGpiPT5hcnJheSgkc2Y9PiRYKSk7fX19cmV0dXJuJFBiO30kdWY9YXJyYXkoIj0iLCIhPSIsIj4iLCI8IiwiPj0iLCI8PSIsInJlZ2V4IiwiKGYpPSIsIihmKSE9IiwiKGYpPiIsIihmKTwiLCIoZik+PSIsIihmKTw9IiwiKGRhdGUpPSIsIihkYXRlKSE9IiwiKGRhdGUpPiIsIihkYXRlKTwiLCIoZGF0ZSk+PSIsIihkYXRlKTw9IiwpO31mdW5jdGlvbgp0YWJsZSgkdil7cmV0dXJuJHY7fWZ1bmN0aW9uCmlkZl9lc2NhcGUoJHYpe3JldHVybiR2O31mdW5jdGlvbgp0YWJsZV9zdGF0dXMoJEQ9IiIsJFNjPWZhbHNlKXskST1hcnJheSgpO2ZvcmVhY2godGFibGVzX2xpc3QoKWFzJFE9PiRUKXskSVskUV09YXJyYXkoIk5hbWUiPT4kUSk7aWYoJEQ9PSRRKXJldHVybiRJWyRRXTt9cmV0dXJuJEk7fWZ1bmN0aW9uCmNyZWF0ZV9kYXRhYmFzZSgkbCwkZCl7cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmxhc3RfaWQoKXtnbG9iYWwkZztyZXR1cm4kZy0+bGFzdF9pZDt9ZnVuY3Rpb24KZXJyb3IoKXtnbG9iYWwkZztyZXR1cm4KaCgkZy0+ZXJyb3IpO31mdW5jdGlvbgpjb2xsYXRpb25zKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmxvZ2dlZF91c2VyKCl7Z2xvYmFsJGI7JEtiPSRiLT5jcmVkZW50aWFscygpO3JldHVybiRLYlsxXTt9ZnVuY3Rpb24KY29ubmVjdCgpe2dsb2JhbCRiOyRnPW5ldwpNaW5fREI7bGlzdCgkTSwkViwkRik9JGItPmNyZWRlbnRpYWxzKCk7JHhmPWFycmF5KCk7aWYoJFYuJEYhPSIiKXskeGZbInVzZXJuYW1lIl09JFY7JHhmWyJwYXNzd29yZCJdPSRGO30kbD0kYi0+ZGF0YWJhc2UoKTtpZigkbCE9IiIpJHhmWyJkYiJdPSRsO2lmKCgkSmE9Z2V0ZW52KCJNT05HT19BVVRIX1NPVVJDRSIpKSkkeGZbImF1dGhTb3VyY2UiXT0kSmE7JGctPmNvbm5lY3QoIm1vbmdvZGI6Ly8kTSIsJHhmKTtpZigkZy0+ZXJyb3IpcmV0dXJuJGctPmVycm9yO3JldHVybiRnO31mdW5jdGlvbgphbHRlcl9pbmRleGVzKCRRLCRjKXtnbG9iYWwkZztmb3JlYWNoKCRjCmFzJFgpe2xpc3QoJFQsJEQsJE4pPSRYO2lmKCROPT0iRFJPUCIpJEk9JGctPl9kYi0+Y29tbWFuZChhcnJheSgiZGVsZXRlSW5kZXhlcyI9PiRRLCJpbmRleCI9PiREKSk7ZWxzZXskZj1hcnJheSgpO2ZvcmVhY2goJE4KYXMkZSl7JGU9cHJlZ19yZXBsYWNlKCd+IERFU0MkficsJycsJGUsMSwkR2IpOyRmWyRlXT0oJEdiPy0xOjEpO30kST0kZy0+X2RiLT5zZWxlY3RDb2xsZWN0aW9uKCRRKS0+ZW5zdXJlSW5kZXgoJGYsYXJyYXkoInVuaXF1ZSI9PigkVD09IlVOSVFVRSIpLCJuYW1lIj0+JEQsKSk7fWlmKCRJWydlcnJtc2cnXSl7JGctPmVycm9yPSRJWydlcnJtc2cnXTtyZXR1cm4KZmFsc2U7fX1yZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24Kc3VwcG9ydCgkVGMpe3JldHVybgpwcmVnX21hdGNoKCJ+ZGF0YWJhc2V8aW5kZXhlc3xkZXNjaWR4fiIsJFRjKTt9ZnVuY3Rpb24KZGJfY29sbGF0aW9uKCRsLCRsYil7fWZ1bmN0aW9uCmluZm9ybWF0aW9uX3NjaGVtYSgpe31mdW5jdGlvbgppc192aWV3KCRSKXt9ZnVuY3Rpb24KY29udmVydF9maWVsZCgkbyl7fWZ1bmN0aW9uCnVuY29udmVydF9maWVsZCgkbywkSSl7cmV0dXJuJEk7fWZ1bmN0aW9uCmZvcmVpZ25fa2V5cygkUSl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmZrX3N1cHBvcnQoJFIpe31mdW5jdGlvbgplbmdpbmVzKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmFsdGVyX3RhYmxlKCRRLCRELCRwLCRmZCwkcmIsJHljLCRkLCRLYSwkVGYpe2dsb2JhbCRnO2lmKCRRPT0iIil7JGctPl9kYi0+Y3JlYXRlQ29sbGVjdGlvbigkRCk7cmV0dXJuCnRydWU7fX1mdW5jdGlvbgpkcm9wX3RhYmxlcygkUyl7Z2xvYmFsJGc7Zm9yZWFjaCgkUwphcyRRKXskTGc9JGctPl9kYi0+c2VsZWN0Q29sbGVjdGlvbigkUSktPmRyb3AoKTtpZighJExnWydvayddKXJldHVybgpmYWxzZTt9cmV0dXJuCnRydWU7fWZ1bmN0aW9uCnRydW5jYXRlX3RhYmxlcygkUyl7Z2xvYmFsJGc7Zm9yZWFjaCgkUwphcyRRKXskTGc9JGctPl9kYi0+c2VsZWN0Q29sbGVjdGlvbigkUSktPnJlbW92ZSgpO2lmKCEkTGdbJ29rJ10pcmV0dXJuCmZhbHNlO31yZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KZHJpdmVyX2NvbmZpZygpe2dsb2JhbCR1ZjtyZXR1cm4KYXJyYXkoJ3Bvc3NpYmxlX2RyaXZlcnMnPT5hcnJheSgibW9uZ28iLCJtb25nb2RiIiksJ2p1c2gnPT4ibW9uZ28iLCdvcGVyYXRvcnMnPT4kdWYsJ2Z1bmN0aW9ucyc9PmFycmF5KCksJ2dyb3VwaW5nJz0+YXJyYXkoKSwnZWRpdF9mdW5jdGlvbnMnPT5hcnJheShhcnJheSgianNvbiIpKSwpO319JGljWyJlbGFzdGljIl09IkVsYXN0aWNzZWFyY2ggKGJldGEpIjtpZihpc3NldCgkX0dFVFsiZWxhc3RpYyJdKSl7ZGVmaW5lKCJEUklWRVIiLCJlbGFzdGljIik7aWYoZnVuY3Rpb25fZXhpc3RzKCdqc29uX2RlY29kZScpJiZpbmlfYm9vbCgnYWxsb3dfdXJsX2ZvcGVuJykpe2NsYXNzCk1pbl9EQnt2YXIkZXh0ZW5zaW9uPSJKU09OIiwkc2VydmVyX2luZm8sJGVycm5vLCRlcnJvciwkX3VybCwkX2RiO2Z1bmN0aW9uCnJvb3RRdWVyeSgkWGYsJEJiPWFycmF5KCksJFBlPSdHRVQnKXtAaW5pX3NldCgndHJhY2tfZXJyb3JzJywxKTskWGM9QGZpbGVfZ2V0X2NvbnRlbnRzKCIkdGhpcy0+X3VybC8iLmx0cmltKCRYZiwnLycpLGZhbHNlLHN0cmVhbV9jb250ZXh0X2NyZWF0ZShhcnJheSgnaHR0cCc9PmFycmF5KCdtZXRob2QnPT4kUGUsJ2NvbnRlbnQnPT4kQmI9PT1udWxsPyRCYjpqc29uX2VuY29kZSgkQmIpLCdoZWFkZXInPT4nQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uJywnaWdub3JlX2Vycm9ycyc9PjEsKSkpKTtpZighJFhjKXskdGhpcy0+ZXJyb3I9JHBocF9lcnJvcm1zZztyZXR1cm4kWGM7fWlmKCFwcmVnX21hdGNoKCd+XkhUVFAvWzAtOS5dKyAyfmknLCRodHRwX3Jlc3BvbnNlX2hlYWRlclswXSkpeyR0aGlzLT5lcnJvcj0nSW52YWxpZCBjcmVkZW50aWFscy4nLiIgJGh0dHBfcmVzcG9uc2VfaGVhZGVyWzBdIjtyZXR1cm4KZmFsc2U7fSRJPWpzb25fZGVjb2RlKCRYYyx0cnVlKTtpZigkST09PW51bGwpeyR0aGlzLT5lcnJubz1qc29uX2xhc3RfZXJyb3IoKTtpZihmdW5jdGlvbl9leGlzdHMoJ2pzb25fbGFzdF9lcnJvcl9tc2cnKSkkdGhpcy0+ZXJyb3I9anNvbl9sYXN0X2Vycm9yX21zZygpO2Vsc2V7JF9iPWdldF9kZWZpbmVkX2NvbnN0YW50cyh0cnVlKTtmb3JlYWNoKCRfYlsnanNvbiddYXMkRD0+JFkpe2lmKCRZPT0kdGhpcy0+ZXJybm8mJnByZWdfbWF0Y2goJ35eSlNPTl9FUlJPUl9+JywkRCkpeyR0aGlzLT5lcnJvcj0kRDticmVhazt9fX19cmV0dXJuJEk7fWZ1bmN0aW9uCnF1ZXJ5KCRYZiwkQmI9YXJyYXkoKSwkUGU9J0dFVCcpe3JldHVybiR0aGlzLT5yb290UXVlcnkoKCR0aGlzLT5fZGIhPSIiPyIkdGhpcy0+X2RiLyI6Ii8iKS5sdHJpbSgkWGYsJy8nKSwkQmIsJFBlKTt9ZnVuY3Rpb24KY29ubmVjdCgkTSwkViwkRil7cHJlZ19tYXRjaCgnfl4oaHR0cHM/Oi8vKT8oLiopficsJE0sJEMpOyR0aGlzLT5fdXJsPSgkQ1sxXT8kQ1sxXToiaHR0cDovLyIpLiIkVjokRkAkQ1syXSI7JEk9JHRoaXMtPnF1ZXJ5KCcnKTtpZigkSSkkdGhpcy0+c2VydmVyX2luZm89JElbJ3ZlcnNpb24nXVsnbnVtYmVyJ107cmV0dXJuKGJvb2wpJEk7fWZ1bmN0aW9uCnNlbGVjdF9kYigkail7JHRoaXMtPl9kYj0kajtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KcXVvdGUoJFApe3JldHVybiRQO319Y2xhc3MKTWluX1Jlc3VsdHt2YXIkbnVtX3Jvd3MsJF9yb3dzO2Z1bmN0aW9uCl9fY29uc3RydWN0KCRLKXskdGhpcy0+bnVtX3Jvd3M9Y291bnQoJEspOyR0aGlzLT5fcm93cz0kSztyZXNldCgkdGhpcy0+X3Jvd3MpO31mdW5jdGlvbgpmZXRjaF9hc3NvYygpeyRJPWN1cnJlbnQoJHRoaXMtPl9yb3dzKTtuZXh0KCR0aGlzLT5fcm93cyk7cmV0dXJuJEk7fWZ1bmN0aW9uCmZldGNoX3Jvdygpe3JldHVybgphcnJheV92YWx1ZXMoJHRoaXMtPmZldGNoX2Fzc29jKCkpO319fWNsYXNzCk1pbl9Ecml2ZXIKZXh0ZW5kcwpNaW5fU1FMe2Z1bmN0aW9uCnNlbGVjdCgkUSwkTCwkWiwkcWQsJHpmPWFycmF5KCksJF89MSwkRT0wLCRtZz1mYWxzZSl7Z2xvYmFsJGI7JFBiPWFycmF5KCk7JEc9IiRRL19zZWFyY2giO2lmKCRMIT1hcnJheSgiKiIpKSRQYlsiZmllbGRzIl09JEw7aWYoJHpmKXskdWg9YXJyYXkoKTtmb3JlYWNoKCR6ZgphcyRqYil7JGpiPXByZWdfcmVwbGFjZSgnfiBERVNDJH4nLCcnLCRqYiwxLCRHYik7JHVoW109KCRHYj9hcnJheSgkamI9PiJkZXNjIik6JGpiKTt9JFBiWyJzb3J0Il09JHVoO31pZigkXyl7JFBiWyJzaXplIl09KyRfO2lmKCRFKSRQYlsiZnJvbSJdPSgkRSokXyk7fWZvcmVhY2goJFoKYXMkWCl7bGlzdCgkamIsJHNmLCRYKT1leHBsb2RlKCIgIiwkWCwzKTtpZigkamI9PSJfaWQiKSRQYlsicXVlcnkiXVsiaWRzIl1bInZhbHVlcyJdW109JFg7ZWxzZWlmKCRqYi4kWCE9IiIpeyRaaD1hcnJheSgidGVybSI9PmFycmF5KCgkamIhPSIiPyRqYjoiX2FsbCIpPT4kWCkpO2lmKCRzZj09Ij0iKSRQYlsicXVlcnkiXVsiZmlsdGVyZWQiXVsiZmlsdGVyIl1bImFuZCJdW109JFpoO2Vsc2UkUGJbInF1ZXJ5Il1bImZpbHRlcmVkIl1bInF1ZXJ5Il1bImJvb2wiXVsibXVzdCJdW109JFpoO319aWYoJFBiWyJxdWVyeSJdJiYhJFBiWyJxdWVyeSJdWyJmaWx0ZXJlZCJdWyJxdWVyeSJdJiYhJFBiWyJxdWVyeSJdWyJpZHMiXSkkUGJbInF1ZXJ5Il1bImZpbHRlcmVkIl1bInF1ZXJ5Il09YXJyYXkoIm1hdGNoX2FsbCI9PmFycmF5KCkpOyRDaD1taWNyb3RpbWUodHJ1ZSk7JGJoPSR0aGlzLT5fY29ubi0+cXVlcnkoJEcsJFBiKTtpZigkbWcpZWNobyRiLT5zZWxlY3RRdWVyeSgiJEc6ICIuanNvbl9lbmNvZGUoJFBiKSwkQ2gsISRiaCk7aWYoISRiaClyZXR1cm4KZmFsc2U7JEk9YXJyYXkoKTtmb3JlYWNoKCRiaFsnaGl0cyddWydoaXRzJ11hcyRDZCl7JEo9YXJyYXkoKTtpZigkTD09YXJyYXkoIioiKSkkSlsiX2lkIl09JENkWyJfaWQiXTskcD0kQ2RbJ19zb3VyY2UnXTtpZigkTCE9YXJyYXkoIioiKSl7JHA9YXJyYXkoKTtmb3JlYWNoKCRMCmFzJHopJHBbJHpdPSRDZFsnZmllbGRzJ11bJHpdO31mb3JlYWNoKCRwCmFzJHo9PiRYKXtpZigkUGJbImZpZWxkcyJdKSRYPSRYWzBdOyRKWyR6XT0oaXNfYXJyYXkoJFgpP2pzb25fZW5jb2RlKCRYKTokWCk7fSRJW109JEo7fXJldHVybgpuZXcKTWluX1Jlc3VsdCgkSSk7fWZ1bmN0aW9uCnVwZGF0ZSgkVCwkX2csJHdnLCRfPTAsJGhoPSJcbiIpeyRWZj1wcmVnX3NwbGl0KCd+ICo9ICp+Jywkd2cpO2lmKGNvdW50KCRWZik9PTIpeyR1PXRyaW0oJFZmWzFdKTskRz0iJFQvJHUiO3JldHVybiR0aGlzLT5fY29ubi0+cXVlcnkoJEcsJF9nLCdQT1NUJyk7fXJldHVybgpmYWxzZTt9ZnVuY3Rpb24KaW5zZXJ0KCRULCRfZyl7JHU9IiI7JEc9IiRULyR1IjskTGc9JHRoaXMtPl9jb25uLT5xdWVyeSgkRywkX2csJ1BPU1QnKTskdGhpcy0+X2Nvbm4tPmxhc3RfaWQ9JExnWydfaWQnXTtyZXR1cm4kTGdbJ2NyZWF0ZWQnXTt9ZnVuY3Rpb24KZGVsZXRlKCRULCR3ZywkXz0wKXskR2Q9YXJyYXkoKTtpZihpc19hcnJheSgkX0dFVFsid2hlcmUiXSkmJiRfR0VUWyJ3aGVyZSJdWyJfaWQiXSkkR2RbXT0kX0dFVFsid2hlcmUiXVsiX2lkIl07aWYoaXNfYXJyYXkoJF9QT1NUWydjaGVjayddKSl7Zm9yZWFjaCgkX1BPU1RbJ2NoZWNrJ11hcyRhYil7JFZmPXByZWdfc3BsaXQoJ34gKj0gKn4nLCRhYik7aWYoY291bnQoJFZmKT09MikkR2RbXT10cmltKCRWZlsxXSk7fX0kdGhpcy0+X2Nvbm4tPmFmZmVjdGVkX3Jvd3M9MDtmb3JlYWNoKCRHZAphcyR1KXskRz0ieyRUfS97JHV9IjskTGc9JHRoaXMtPl9jb25uLT5xdWVyeSgkRywne30nLCdERUxFVEUnKTtpZihpc19hcnJheSgkTGcpJiYkTGdbJ2ZvdW5kJ109PXRydWUpJHRoaXMtPl9jb25uLT5hZmZlY3RlZF9yb3dzKys7fXJldHVybiR0aGlzLT5fY29ubi0+YWZmZWN0ZWRfcm93czt9fWZ1bmN0aW9uCmNvbm5lY3QoKXtnbG9iYWwkYjskZz1uZXcKTWluX0RCO2xpc3QoJE0sJFYsJEYpPSRiLT5jcmVkZW50aWFscygpO2lmKCRGIT0iIiYmJGctPmNvbm5lY3QoJE0sJFYsIiIpKXJldHVybidEYXRhYmFzZSBkb2VzIG5vdCBzdXBwb3J0IHBhc3N3b3JkLic7aWYoJGctPmNvbm5lY3QoJE0sJFYsJEYpKXJldHVybiRnO3JldHVybiRnLT5lcnJvcjt9ZnVuY3Rpb24Kc3VwcG9ydCgkVGMpe3JldHVybgpwcmVnX21hdGNoKCJ+ZGF0YWJhc2V8dGFibGV8Y29sdW1uc34iLCRUYyk7fWZ1bmN0aW9uCmxvZ2dlZF91c2VyKCl7Z2xvYmFsJGI7JEtiPSRiLT5jcmVkZW50aWFscygpO3JldHVybiRLYlsxXTt9ZnVuY3Rpb24KZ2V0X2RhdGFiYXNlcygpe2dsb2JhbCRnOyRJPSRnLT5yb290UXVlcnkoJ19hbGlhc2VzJyk7aWYoJEkpeyRJPWFycmF5X2tleXMoJEkpO3NvcnQoJEksU09SVF9TVFJJTkcpO31yZXR1cm4kSTt9ZnVuY3Rpb24KY29sbGF0aW9ucygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgpkYl9jb2xsYXRpb24oJGwsJGxiKXt9ZnVuY3Rpb24KZW5naW5lcygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgpjb3VudF90YWJsZXMoJGspe2dsb2JhbCRnOyRJPWFycmF5KCk7JEg9JGctPnF1ZXJ5KCdfc3RhdHMnKTtpZigkSCYmJEhbJ2luZGljZXMnXSl7JE9kPSRIWydpbmRpY2VzJ107Zm9yZWFjaCgkT2QKYXMkTmQ9PiREaCl7JE1kPSREaFsndG90YWwnXVsnaW5kZXhpbmcnXTskSVskTmRdPSRNZFsnaW5kZXhfdG90YWwnXTt9fXJldHVybiRJO31mdW5jdGlvbgp0YWJsZXNfbGlzdCgpe2dsb2JhbCRnO2lmKG1pbl92ZXJzaW9uKDYpKXJldHVybgphcnJheSgnX2RvYyc9Pid0YWJsZScpOyRJPSRnLT5xdWVyeSgnX21hcHBpbmcnKTtpZigkSSkkST1hcnJheV9maWxsX2tleXMoYXJyYXlfa2V5cygkSVskZy0+X2RiXVsibWFwcGluZ3MiXSksJ3RhYmxlJyk7cmV0dXJuJEk7fWZ1bmN0aW9uCnRhYmxlX3N0YXR1cygkRD0iIiwkU2M9ZmFsc2Upe2dsb2JhbCRnOyRiaD0kZy0+cXVlcnkoIl9zZWFyY2giLGFycmF5KCJzaXplIj0+MCwiYWdncmVnYXRpb25zIj0+YXJyYXkoImNvdW50X2J5X3R5cGUiPT5hcnJheSgidGVybXMiPT5hcnJheSgiZmllbGQiPT4iX3R5cGUiKSkpKSwiUE9TVCIpOyRJPWFycmF5KCk7aWYoJGJoKXskUz0kYmhbImFnZ3JlZ2F0aW9ucyJdWyJjb3VudF9ieV90eXBlIl1bImJ1Y2tldHMiXTtmb3JlYWNoKCRTCmFzJFEpeyRJWyRRWyJrZXkiXV09YXJyYXkoIk5hbWUiPT4kUVsia2V5Il0sIkVuZ2luZSI9PiJ0YWJsZSIsIlJvd3MiPT4kUVsiZG9jX2NvdW50Il0sKTtpZigkRCE9IiImJiREPT0kUVsia2V5Il0pcmV0dXJuJElbJERdO319cmV0dXJuJEk7fWZ1bmN0aW9uCmVycm9yKCl7Z2xvYmFsJGc7cmV0dXJuCmgoJGctPmVycm9yKTt9ZnVuY3Rpb24KaW5mb3JtYXRpb25fc2NoZW1hKCl7fWZ1bmN0aW9uCmlzX3ZpZXcoJFIpe31mdW5jdGlvbgppbmRleGVzKCRRLCRoPW51bGwpe3JldHVybgphcnJheShhcnJheSgidHlwZSI9PiJQUklNQVJZIiwiY29sdW1ucyI9PmFycmF5KCJfaWQiKSksKTt9ZnVuY3Rpb24KZmllbGRzKCRRKXtnbG9iYWwkZzskemU9YXJyYXkoKTtpZihtaW5fdmVyc2lvbig2KSl7JEg9JGctPnF1ZXJ5KCJfbWFwcGluZyIpO2lmKCRIKSR6ZT0kSFskZy0+X2RiXVsnbWFwcGluZ3MnXVsncHJvcGVydGllcyddO31lbHNleyRIPSRnLT5xdWVyeSgiJFEvX21hcHBpbmciKTtpZigkSCl7JHplPSRIWyRRXVsncHJvcGVydGllcyddO2lmKCEkemUpJHplPSRIWyRnLT5fZGJdWydtYXBwaW5ncyddWyRRXVsncHJvcGVydGllcyddO319JEk9YXJyYXkoKTtpZigkemUpe2ZvcmVhY2goJHplCmFzJEQ9PiRvKXskSVskRF09YXJyYXkoImZpZWxkIj0+JEQsImZ1bGxfdHlwZSI9PiRvWyJ0eXBlIl0sInR5cGUiPT4kb1sidHlwZSJdLCJwcml2aWxlZ2VzIj0+YXJyYXkoImluc2VydCI9PjEsInNlbGVjdCI9PjEsInVwZGF0ZSI9PjEpLCk7aWYoJG9bInByb3BlcnRpZXMiXSl7dW5zZXQoJElbJERdWyJwcml2aWxlZ2VzIl1bImluc2VydCJdKTt1bnNldCgkSVskRF1bInByaXZpbGVnZXMiXVsidXBkYXRlIl0pO319fXJldHVybiRJO31mdW5jdGlvbgpmb3JlaWduX2tleXMoJFEpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgp0YWJsZSgkdil7cmV0dXJuJHY7fWZ1bmN0aW9uCmlkZl9lc2NhcGUoJHYpe3JldHVybiR2O31mdW5jdGlvbgpjb252ZXJ0X2ZpZWxkKCRvKXt9ZnVuY3Rpb24KdW5jb252ZXJ0X2ZpZWxkKCRvLCRJKXtyZXR1cm4kSTt9ZnVuY3Rpb24KZmtfc3VwcG9ydCgkUil7fWZ1bmN0aW9uCmZvdW5kX3Jvd3MoJFIsJFope3JldHVybgpudWxsO31mdW5jdGlvbgpjcmVhdGVfZGF0YWJhc2UoJGwpe2dsb2JhbCRnO3JldHVybiRnLT5yb290UXVlcnkodXJsZW5jb2RlKCRsKSxudWxsLCdQVVQnKTt9ZnVuY3Rpb24KZHJvcF9kYXRhYmFzZXMoJGspe2dsb2JhbCRnO3JldHVybiRnLT5yb290UXVlcnkodXJsZW5jb2RlKGltcGxvZGUoJywnLCRrKSksYXJyYXkoKSwnREVMRVRFJyk7fWZ1bmN0aW9uCmFsdGVyX3RhYmxlKCRRLCRELCRwLCRmZCwkcmIsJHljLCRkLCRLYSwkVGYpe2dsb2JhbCRnOyRzZz1hcnJheSgpO2ZvcmVhY2goJHAKYXMkUWMpeyRWYz10cmltKCRRY1sxXVswXSk7JFdjPXRyaW0oJFFjWzFdWzFdPyRRY1sxXVsxXToidGV4dCIpOyRzZ1skVmNdPWFycmF5KCd0eXBlJz0+JFdjKTt9aWYoIWVtcHR5KCRzZykpJHNnPWFycmF5KCdwcm9wZXJ0aWVzJz0+JHNnKTtyZXR1cm4kZy0+cXVlcnkoIl9tYXBwaW5nL3skRH0iLCRzZywnUFVUJyk7fWZ1bmN0aW9uCmRyb3BfdGFibGVzKCRTKXtnbG9iYWwkZzskST10cnVlO2ZvcmVhY2goJFMKYXMkUSkkST0kSSYmJGctPnF1ZXJ5KHVybGVuY29kZSgkUSksYXJyYXkoKSwnREVMRVRFJyk7cmV0dXJuJEk7fWZ1bmN0aW9uCmxhc3RfaWQoKXtnbG9iYWwkZztyZXR1cm4kZy0+bGFzdF9pZDt9ZnVuY3Rpb24KZHJpdmVyX2NvbmZpZygpeyRVPWFycmF5KCk7JEdoPWFycmF5KCk7Zm9yZWFjaChhcnJheSgnTnVtYmVycyc9PmFycmF5KCJsb25nIj0+MywiaW50ZWdlciI9PjUsInNob3J0Ij0+OCwiYnl0ZSI9PjEwLCJkb3VibGUiPT4yMCwiZmxvYXQiPT42NiwiaGFsZl9mbG9hdCI9PjEyLCJzY2FsZWRfZmxvYXQiPT4yMSksJ0RhdGUgYW5kIHRpbWUnPT5hcnJheSgiZGF0ZSI9PjEwKSwnU3RyaW5ncyc9PmFycmF5KCJzdHJpbmciPT42NTUzNSwidGV4dCI9PjY1NTM1KSwnQmluYXJ5Jz0+YXJyYXkoImJpbmFyeSI9PjI1NSksKWFzJHo9PiRYKXskVSs9JFg7JEdoWyR6XT1hcnJheV9rZXlzKCRYKTt9cmV0dXJuCmFycmF5KCdwb3NzaWJsZV9kcml2ZXJzJz0+YXJyYXkoImpzb24gKyBhbGxvd191cmxfZm9wZW4iKSwnanVzaCc9PiJlbGFzdGljIiwnb3BlcmF0b3JzJz0+YXJyYXkoIj0iLCJxdWVyeSIpLCdmdW5jdGlvbnMnPT5hcnJheSgpLCdncm91cGluZyc9PmFycmF5KCksJ2VkaXRfZnVuY3Rpb25zJz0+YXJyYXkoYXJyYXkoImpzb24iKSksJ3R5cGVzJz0+JFUsJ3N0cnVjdHVyZWRfdHlwZXMnPT4kR2gsKTt9fWNsYXNzCkFkbWluZXJ7dmFyJG9wZXJhdG9ycztmdW5jdGlvbgpuYW1lKCl7cmV0dXJuIjxhIGhyZWY9J2h0dHBzOi8vd3d3LmFkbWluZXIub3JnLyciLnRhcmdldF9ibGFuaygpLiIgaWQ9J2gxJz5BZG1pbmVyPC9hPiI7fWZ1bmN0aW9uCmNyZWRlbnRpYWxzKCl7cmV0dXJuCmFycmF5KFNFUlZFUiwkX0dFVFsidXNlcm5hbWUiXSxnZXRfcGFzc3dvcmQoKSk7fWZ1bmN0aW9uCmNvbm5lY3RTc2woKXt9ZnVuY3Rpb24KcGVybWFuZW50TG9naW4oJGk9ZmFsc2Upe3JldHVybgpwYXNzd29yZF9maWxlKCRpKTt9ZnVuY3Rpb24KYnJ1dGVGb3JjZUtleSgpe3JldHVybiRfU0VSVkVSWyJSRU1PVEVfQUREUiJdO31mdW5jdGlvbgpzZXJ2ZXJOYW1lKCRNKXtyZXR1cm4KaCgkTSk7fWZ1bmN0aW9uCmRhdGFiYXNlKCl7cmV0dXJuCkRCO31mdW5jdGlvbgpkYXRhYmFzZXMoJGRkPXRydWUpe3JldHVybgpnZXRfZGF0YWJhc2VzKCRkZCk7fWZ1bmN0aW9uCnNjaGVtYXMoKXtyZXR1cm4Kc2NoZW1hcygpO31mdW5jdGlvbgpxdWVyeVRpbWVvdXQoKXtyZXR1cm4KMjt9ZnVuY3Rpb24KaGVhZGVycygpe31mdW5jdGlvbgpjc3AoKXtyZXR1cm4KY3NwKCk7fWZ1bmN0aW9uCmhlYWQoKXtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KY3NzKCl7JEk9YXJyYXkoKTskcT0iYWRtaW5lci5jc3MiO2lmKGZpbGVfZXhpc3RzKCRxKSkkSVtdPSIkcT92PSIuY3JjMzIoZmlsZV9nZXRfY29udGVudHMoJHEpKTtyZXR1cm4kSTt9ZnVuY3Rpb24KbG9naW5Gb3JtKCl7Z2xvYmFsJGljO2VjaG8iPHRhYmxlIGNlbGxzcGFjaW5nPScwJyBjbGFzcz0nbGF5b3V0Jz5cbiIsJHRoaXMtPmxvZ2luRm9ybUZpZWxkKCdkcml2ZXInLCc8dHI+PHRoPicuJ1N5c3RlbScuJzx0ZD4nLGh0bWxfc2VsZWN0KCJhdXRoW2RyaXZlcl0iLCRpYyxEUklWRVIsImxvZ2luRHJpdmVyKHRoaXMpOyIpLiJcbiIpLCR0aGlzLT5sb2dpbkZvcm1GaWVsZCgnc2VydmVyJywnPHRyPjx0aD4nLidTZXJ2ZXInLic8dGQ+JywnPGlucHV0IG5hbWU9ImF1dGhbc2VydmVyXSIgdmFsdWU9IicuaChTRVJWRVIpLiciIHRpdGxlPSJob3N0bmFtZVs6cG9ydF0iIHBsYWNlaG9sZGVyPSJsb2NhbGhvc3QiIGF1dG9jYXBpdGFsaXplPSJvZmYiPicuIlxuIiksJHRoaXMtPmxvZ2luRm9ybUZpZWxkKCd1c2VybmFtZScsJzx0cj48dGg+Jy4nVXNlcm5hbWUnLic8dGQ+JywnPGlucHV0IG5hbWU9ImF1dGhbdXNlcm5hbWVdIiBpZD0idXNlcm5hbWUiIHZhbHVlPSInLmgoJF9HRVRbInVzZXJuYW1lIl0pLiciIGF1dG9jb21wbGV0ZT0idXNlcm5hbWUiIGF1dG9jYXBpdGFsaXplPSJvZmYiPicuc2NyaXB0KCJmb2N1cyhxcygnI3VzZXJuYW1lJykpOyBxcygnI3VzZXJuYW1lJykuZm9ybVsnYXV0aFtkcml2ZXJdJ10ub25jaGFuZ2UoKTsiKSksJHRoaXMtPmxvZ2luRm9ybUZpZWxkKCdwYXNzd29yZCcsJzx0cj48dGg+Jy4nUGFzc3dvcmQnLic8dGQ+JywnPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJhdXRoW3Bhc3N3b3JkXSIgYXV0b2NvbXBsZXRlPSJjdXJyZW50LXBhc3N3b3JkIj4nLiJcbiIpLCR0aGlzLT5sb2dpbkZvcm1GaWVsZCgnZGInLCc8dHI+PHRoPicuJ0RhdGFiYXNlJy4nPHRkPicsJzxpbnB1dCBuYW1lPSJhdXRoW2RiXSIgdmFsdWU9IicuaCgkX0dFVFsiZGIiXSkuJyIgYXV0b2NhcGl0YWxpemU9Im9mZiI+Jy4iXG4iKSwiPC90YWJsZT5cbiIsIjxwPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSciLidMb2dpbicuIic+XG4iLGNoZWNrYm94KCJhdXRoW3Blcm1hbmVudF0iLDEsJF9DT09LSUVbImFkbWluZXJfcGVybWFuZW50Il0sJ1Blcm1hbmVudCBsb2dpbicpLiJcbiI7fWZ1bmN0aW9uCmxvZ2luRm9ybUZpZWxkKCRELCRfZCwkWSl7cmV0dXJuJF9kLiRZO31mdW5jdGlvbgpsb2dpbigkeGUsJEYpe2lmKCRGPT0iIilyZXR1cm4Kc3ByaW50ZignQWRtaW5lciBkb2VzIG5vdCBzdXBwb3J0IGFjY2Vzc2luZyBhIGRhdGFiYXNlIHdpdGhvdXQgYSBwYXNzd29yZCwgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYWRtaW5lci5vcmcvZW4vcGFzc3dvcmQvIiVzPm1vcmUgaW5mb3JtYXRpb248L2E+LicsdGFyZ2V0X2JsYW5rKCkpO3JldHVybgp0cnVlO31mdW5jdGlvbgp0YWJsZU5hbWUoJE5oKXtyZXR1cm4KaCgkTmhbIk5hbWUiXSk7fWZ1bmN0aW9uCmZpZWxkTmFtZSgkbywkemY9MCl7cmV0dXJuJzxzcGFuIHRpdGxlPSInLmgoJG9bImZ1bGxfdHlwZSJdKS4nIj4nLmgoJG9bImZpZWxkIl0pLic8L3NwYW4+Jzt9ZnVuY3Rpb24Kc2VsZWN0TGlua3MoJE5oLCROPSIiKXtnbG9iYWwkeSwkbTtlY2hvJzxwIGNsYXNzPSJsaW5rcyI+Jzskd2U9YXJyYXkoInNlbGVjdCI9PidTZWxlY3QgZGF0YScpO2lmKHN1cHBvcnQoInRhYmxlIil8fHN1cHBvcnQoImluZGV4ZXMiKSkkd2VbInRhYmxlIl09J1Nob3cgc3RydWN0dXJlJztpZihzdXBwb3J0KCJ0YWJsZSIpKXtpZihpc192aWV3KCROaCkpJHdlWyJ2aWV3Il09J0FsdGVyIHZpZXcnO2Vsc2Ukd2VbImNyZWF0ZSJdPSdBbHRlciB0YWJsZSc7fWlmKCROIT09bnVsbCkkd2VbImVkaXQiXT0nTmV3IGl0ZW0nOyREPSROaFsiTmFtZSJdO2ZvcmVhY2goJHdlCmFzJHo9PiRYKWVjaG8iIDxhIGhyZWY9JyIuaChNRSkuIiR6PSIudXJsZW5jb2RlKCREKS4oJHo9PSJlZGl0Ij8kTjoiIikuIiciLmJvbGQoaXNzZXQoJF9HRVRbJHpdKSkuIj4kWDwvYT4iO2VjaG8KZG9jX2xpbmsoYXJyYXkoJHk9PiRtLT50YWJsZUhlbHAoJEQpKSwiPyIpLCJcbiI7fWZ1bmN0aW9uCmZvcmVpZ25LZXlzKCRRKXtyZXR1cm4KZm9yZWlnbl9rZXlzKCRRKTt9ZnVuY3Rpb24KYmFja3dhcmRLZXlzKCRRLCRNaCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmJhY2t3YXJkS2V5c1ByaW50KCROYSwkSil7fWZ1bmN0aW9uCnNlbGVjdFF1ZXJ5KCRHLCRDaCwkUmM9ZmFsc2Upe2dsb2JhbCR5LCRtOyRJPSI8L3A+XG4iO2lmKCEkUmMmJigkYmo9JG0tPndhcm5pbmdzKCkpKXskdT0id2FybmluZ3MiOyRJPSIsIDxhIGhyZWY9JyMkdSc+Ii4nV2FybmluZ3MnLiI8L2E+Ii5zY3JpcHQoInFzbCgnYScpLm9uY2xpY2sgPSBwYXJ0aWFsKHRvZ2dsZSwgJyR1Jyk7IiwiIikuIiRJPGRpdiBpZD0nJHUnIGNsYXNzPSdoaWRkZW4nPlxuJGJqPC9kaXY+XG4iO31yZXR1cm4iPHA+PGNvZGUgY2xhc3M9J2p1c2gtJHknPiIuaChzdHJfcmVwbGFjZSgiXG4iLCIgIiwkRykpLiI8L2NvZGU+IDxzcGFuIGNsYXNzPSd0aW1lJz4oIi5mb3JtYXRfdGltZSgkQ2gpLiIpPC9zcGFuPiIuKHN1cHBvcnQoInNxbCIpPyIgPGEgaHJlZj0nIi5oKE1FKS4ic3FsPSIudXJsZW5jb2RlKCRHKS4iJz4iLidFZGl0Jy4iPC9hPiI6IiIpLiRJO31mdW5jdGlvbgpzcWxDb21tYW5kUXVlcnkoJEcpe3JldHVybgpzaG9ydGVuX3V0ZjgodHJpbSgkRyksMTAwMCk7fWZ1bmN0aW9uCnJvd0Rlc2NyaXB0aW9uKCRRKXtyZXR1cm4iIjt9ZnVuY3Rpb24Kcm93RGVzY3JpcHRpb25zKCRLLCRnZCl7cmV0dXJuJEs7fWZ1bmN0aW9uCnNlbGVjdExpbmsoJFgsJG8pe31mdW5jdGlvbgpzZWxlY3RWYWwoJFgsJEEsJG8sJEdmKXskST0oJFg9PT1udWxsPyI8aT5OVUxMPC9pPiI6KHByZWdfbWF0Y2goIn5jaGFyfGJpbmFyeXxib29sZWFufiIsJG9bInR5cGUiXSkmJiFwcmVnX21hdGNoKCJ+dmFyfiIsJG9bInR5cGUiXSk/Ijxjb2RlPiRYPC9jb2RlPiI6JFgpKTtpZihwcmVnX21hdGNoKCd+YmxvYnxieXRlYXxyYXd8ZmlsZX4nLCRvWyJ0eXBlIl0pJiYhaXNfdXRmOCgkWCkpJEk9IjxpPiIubGFuZyhhcnJheSgnJWQgYnl0ZScsJyVkIGJ5dGVzJyksc3RybGVuKCRHZikpLiI8L2k+IjtpZihwcmVnX21hdGNoKCd+anNvbn4nLCRvWyJ0eXBlIl0pKSRJPSI8Y29kZSBjbGFzcz0nanVzaC1qcyc+JEk8L2NvZGU+IjtyZXR1cm4oJEE/IjxhIGhyZWY9JyIuaCgkQSkuIiciLihpc191cmwoJEEpP3RhcmdldF9ibGFuaygpOiIiKS4iPiRJPC9hPiI6JEkpO31mdW5jdGlvbgplZGl0VmFsKCRYLCRvKXtyZXR1cm4kWDt9ZnVuY3Rpb24KdGFibGVTdHJ1Y3R1cmVQcmludCgkcCl7ZWNobyI8ZGl2IGNsYXNzPSdzY3JvbGxhYmxlJz5cbiIsIjx0YWJsZSBjZWxsc3BhY2luZz0nMCcgY2xhc3M9J25vd3JhcCc+XG4iLCI8dGhlYWQ+PHRyPjx0aD4iLidDb2x1bW4nLiI8dGQ+Ii4nVHlwZScuKHN1cHBvcnQoImNvbW1lbnQiKT8iPHRkPiIuJ0NvbW1lbnQnOiIiKS4iPC90aGVhZD5cbiI7Zm9yZWFjaCgkcAphcyRvKXtlY2hvIjx0ciIub2RkKCkuIj48dGg+Ii5oKCRvWyJmaWVsZCJdKSwiPHRkPjxzcGFuIHRpdGxlPSciLmgoJG9bImNvbGxhdGlvbiJdKS4iJz4iLmgoJG9bImZ1bGxfdHlwZSJdKS4iPC9zcGFuPiIsKCRvWyJudWxsIl0/IiA8aT5OVUxMPC9pPiI6IiIpLCgkb1siYXV0b19pbmNyZW1lbnQiXT8iIDxpPiIuJ0F1dG8gSW5jcmVtZW50Jy4iPC9pPiI6IiIpLChpc3NldCgkb1siZGVmYXVsdCJdKT8iIDxzcGFuIHRpdGxlPSciLidEZWZhdWx0IHZhbHVlJy4iJz5bPGI+Ii5oKCRvWyJkZWZhdWx0Il0pLiI8L2I+XTwvc3Bhbj4iOiIiKSwoc3VwcG9ydCgiY29tbWVudCIpPyI8dGQ+Ii5oKCRvWyJjb21tZW50Il0pOiIiKSwiXG4iO31lY2hvIjwvdGFibGU+XG4iLCI8L2Rpdj5cbiI7fWZ1bmN0aW9uCnRhYmxlSW5kZXhlc1ByaW50KCR4KXtlY2hvIjx0YWJsZSBjZWxsc3BhY2luZz0nMCc+XG4iO2ZvcmVhY2goJHgKYXMkRD0+JHcpe2tzb3J0KCR3WyJjb2x1bW5zIl0pOyRtZz1hcnJheSgpO2ZvcmVhY2goJHdbImNvbHVtbnMiXWFzJHo9PiRYKSRtZ1tdPSI8aT4iLmgoJFgpLiI8L2k+Ii4oJHdbImxlbmd0aHMiXVskel0/IigiLiR3WyJsZW5ndGhzIl1bJHpdLiIpIjoiIikuKCR3WyJkZXNjcyJdWyR6XT8iIERFU0MiOiIiKTtlY2hvIjx0ciB0aXRsZT0nIi5oKCREKS4iJz48dGg+JHdbdHlwZV08dGQ+Ii5pbXBsb2RlKCIsICIsJG1nKS4iXG4iO31lY2hvIjwvdGFibGU+XG4iO31mdW5jdGlvbgpzZWxlY3RDb2x1bW5zUHJpbnQoJEwsJGYpe2dsb2JhbCRuZCwkdGQ7cHJpbnRfZmllbGRzZXQoInNlbGVjdCIsJ1NlbGVjdCcsJEwpOyR0PTA7JExbIiJdPWFycmF5KCk7Zm9yZWFjaCgkTAphcyR6PT4kWCl7JFg9JF9HRVRbImNvbHVtbnMiXVskel07JGU9c2VsZWN0X2lucHV0KCIgbmFtZT0nY29sdW1uc1skdF1bY29sXSciLCRmLCRYWyJjb2wiXSwoJHohPT0iIj8ic2VsZWN0RmllbGRDaGFuZ2UiOiJzZWxlY3RBZGRSb3ciKSk7ZWNobyI8ZGl2PiIuKCRuZHx8JHRkPyI8c2VsZWN0IG5hbWU9J2NvbHVtbnNbJHRdW2Z1bl0nPiIub3B0aW9ubGlzdChhcnJheSgtMT0+IiIpK2FycmF5X2ZpbHRlcihhcnJheSgnRnVuY3Rpb25zJz0+JG5kLCdBZ2dyZWdhdGlvbic9PiR0ZCkpLCRYWyJmdW4iXSkuIjwvc2VsZWN0PiIub25faGVscCgiZ2V0VGFyZ2V0KGV2ZW50KS52YWx1ZSAmJiBnZXRUYXJnZXQoZXZlbnQpLnZhbHVlLnJlcGxhY2UoLyB8XCQvLCAnKCcpICsgJyknIiwxKS5zY3JpcHQoInFzbCgnc2VsZWN0Jykub25jaGFuZ2UgPSBmdW5jdGlvbiAoKSB7IGhlbHBDbG9zZSgpOyIuKCR6IT09IiI/IiI6IiBxc2woJ3NlbGVjdCwgaW5wdXQnLCB0aGlzLnBhcmVudE5vZGUpLm9uY2hhbmdlKCk7IikuIiB9OyIsIiIpLiIoJGUpIjokZSkuIjwvZGl2PlxuIjskdCsrO31lY2hvIjwvZGl2PjwvZmllbGRzZXQ+XG4iO31mdW5jdGlvbgpzZWxlY3RTZWFyY2hQcmludCgkWiwkZiwkeCl7cHJpbnRfZmllbGRzZXQoInNlYXJjaCIsJ1NlYXJjaCcsJFopO2ZvcmVhY2goJHgKYXMkdD0+JHcpe2lmKCR3WyJ0eXBlIl09PSJGVUxMVEVYVCIpe2VjaG8iPGRpdj4oPGk+Ii5pbXBsb2RlKCI8L2k+LCA8aT4iLGFycmF5X21hcCgnaCcsJHdbImNvbHVtbnMiXSkpLiI8L2k+KSBBR0FJTlNUIiwiIDxpbnB1dCB0eXBlPSdzZWFyY2gnIG5hbWU9J2Z1bGx0ZXh0WyR0XScgdmFsdWU9JyIuaCgkX0dFVFsiZnVsbHRleHQiXVskdF0pLiInPiIsc2NyaXB0KCJxc2woJ2lucHV0Jykub25pbnB1dCA9IHNlbGVjdEZpZWxkQ2hhbmdlOyIsIiIpLGNoZWNrYm94KCJib29sZWFuWyR0XSIsMSxpc3NldCgkX0dFVFsiYm9vbGVhbiJdWyR0XSksIkJPT0wiKSwiPC9kaXY+XG4iO319JFlhPSJ0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZC5vbmNoYW5nZSgpOyI7Zm9yZWFjaChhcnJheV9tZXJnZSgoYXJyYXkpJF9HRVRbIndoZXJlIl0sYXJyYXkoYXJyYXkoKSkpYXMkdD0+JFgpe2lmKCEkWHx8KCIkWFtjb2xdJFhbdmFsXSIhPSIiJiZpbl9hcnJheSgkWFsib3AiXSwkdGhpcy0+b3BlcmF0b3JzKSkpe2VjaG8iPGRpdj4iLnNlbGVjdF9pbnB1dCgiIG5hbWU9J3doZXJlWyR0XVtjb2xdJyIsJGYsJFhbImNvbCJdLCgkWD8ic2VsZWN0RmllbGRDaGFuZ2UiOiJzZWxlY3RBZGRSb3ciKSwiKCIuJ2FueXdoZXJlJy4iKSIpLGh0bWxfc2VsZWN0KCJ3aGVyZVskdF1bb3BdIiwkdGhpcy0+b3BlcmF0b3JzLCRYWyJvcCJdLCRZYSksIjxpbnB1dCB0eXBlPSdzZWFyY2gnIG5hbWU9J3doZXJlWyR0XVt2YWxdJyB2YWx1ZT0nIi5oKCRYWyJ2YWwiXSkuIic+IixzY3JpcHQoIm1peGluKHFzbCgnaW5wdXQnKSwge29uaW5wdXQ6IGZ1bmN0aW9uICgpIHsgJFlhIH0sIG9ua2V5ZG93bjogc2VsZWN0U2VhcmNoS2V5ZG93biwgb25zZWFyY2g6IHNlbGVjdFNlYXJjaFNlYXJjaH0pOyIsIiIpLCI8L2Rpdj5cbiI7fX1lY2hvIjwvZGl2PjwvZmllbGRzZXQ+XG4iO31mdW5jdGlvbgpzZWxlY3RPcmRlclByaW50KCR6ZiwkZiwkeCl7cHJpbnRfZmllbGRzZXQoInNvcnQiLCdTb3J0JywkemYpOyR0PTA7Zm9yZWFjaCgoYXJyYXkpJF9HRVRbIm9yZGVyIl1hcyR6PT4kWCl7aWYoJFghPSIiKXtlY2hvIjxkaXY+Ii5zZWxlY3RfaW5wdXQoIiBuYW1lPSdvcmRlclskdF0nIiwkZiwkWCwic2VsZWN0RmllbGRDaGFuZ2UiKSxjaGVja2JveCgiZGVzY1skdF0iLDEsaXNzZXQoJF9HRVRbImRlc2MiXVskel0pLCdkZXNjZW5kaW5nJykuIjwvZGl2PlxuIjskdCsrO319ZWNobyI8ZGl2PiIuc2VsZWN0X2lucHV0KCIgbmFtZT0nb3JkZXJbJHRdJyIsJGYsIiIsInNlbGVjdEFkZFJvdyIpLGNoZWNrYm94KCJkZXNjWyR0XSIsMSxmYWxzZSwnZGVzY2VuZGluZycpLiI8L2Rpdj5cbiIsIjwvZGl2PjwvZmllbGRzZXQ+XG4iO31mdW5jdGlvbgpzZWxlY3RMaW1pdFByaW50KCRfKXtlY2hvIjxmaWVsZHNldD48bGVnZW5kPiIuJ0xpbWl0Jy4iPC9sZWdlbmQ+PGRpdj4iO2VjaG8iPGlucHV0IHR5cGU9J251bWJlcicgbmFtZT0nbGltaXQnIGNsYXNzPSdzaXplJyB2YWx1ZT0nIi5oKCRfKS4iJz4iLHNjcmlwdCgicXNsKCdpbnB1dCcpLm9uaW5wdXQgPSBzZWxlY3RGaWVsZENoYW5nZTsiLCIiKSwiPC9kaXY+PC9maWVsZHNldD5cbiI7fWZ1bmN0aW9uCnNlbGVjdExlbmd0aFByaW50KCRjaSl7aWYoJGNpIT09bnVsbCl7ZWNobyI8ZmllbGRzZXQ+PGxlZ2VuZD4iLidUZXh0IGxlbmd0aCcuIjwvbGVnZW5kPjxkaXY+IiwiPGlucHV0IHR5cGU9J251bWJlcicgbmFtZT0ndGV4dF9sZW5ndGgnIGNsYXNzPSdzaXplJyB2YWx1ZT0nIi5oKCRjaSkuIic+IiwiPC9kaXY+PC9maWVsZHNldD5cbiI7fX1mdW5jdGlvbgpzZWxlY3RBY3Rpb25QcmludCgkeCl7ZWNobyI8ZmllbGRzZXQ+PGxlZ2VuZD4iLidBY3Rpb24nLiI8L2xlZ2VuZD48ZGl2PiIsIjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSciLidTZWxlY3QnLiInPiIsIiA8c3BhbiBpZD0nbm9pbmRleCcgdGl0bGU9JyIuJ0Z1bGwgdGFibGUgc2NhbicuIic+PC9zcGFuPiIsIjxzY3JpcHQiLm5vbmNlKCkuIj5cbiIsInZhciBpbmRleENvbHVtbnMgPSAiOyRmPWFycmF5KCk7Zm9yZWFjaCgkeAphcyR3KXskT2I9cmVzZXQoJHdbImNvbHVtbnMiXSk7aWYoJHdbInR5cGUiXSE9IkZVTExURVhUIiYmJE9iKSRmWyRPYl09MTt9JGZbIiJdPTE7Zm9yZWFjaCgkZgphcyR6PT4kWClqc29uX3Jvdygkeik7ZWNobyI7XG4iLCJzZWxlY3RGaWVsZENoYW5nZS5jYWxsKHFzKCcjZm9ybScpWydzZWxlY3QnXSk7XG4iLCI8L3NjcmlwdD5cbiIsIjwvZGl2PjwvZmllbGRzZXQ+XG4iO31mdW5jdGlvbgpzZWxlY3RDb21tYW5kUHJpbnQoKXtyZXR1cm4haW5mb3JtYXRpb25fc2NoZW1hKERCKTt9ZnVuY3Rpb24Kc2VsZWN0SW1wb3J0UHJpbnQoKXtyZXR1cm4haW5mb3JtYXRpb25fc2NoZW1hKERCKTt9ZnVuY3Rpb24Kc2VsZWN0RW1haWxQcmludCgkdmMsJGYpe31mdW5jdGlvbgpzZWxlY3RDb2x1bW5zUHJvY2VzcygkZiwkeCl7Z2xvYmFsJG5kLCR0ZDskTD1hcnJheSgpOyRxZD1hcnJheSgpO2ZvcmVhY2goKGFycmF5KSRfR0VUWyJjb2x1bW5zIl1hcyR6PT4kWCl7aWYoJFhbImZ1biJdPT0iY291bnQifHwoJFhbImNvbCJdIT0iIiYmKCEkWFsiZnVuIl18fGluX2FycmF5KCRYWyJmdW4iXSwkbmQpfHxpbl9hcnJheSgkWFsiZnVuIl0sJHRkKSkpKXskTFskel09YXBwbHlfc3FsX2Z1bmN0aW9uKCRYWyJmdW4iXSwoJFhbImNvbCJdIT0iIj9pZGZfZXNjYXBlKCRYWyJjb2wiXSk6IioiKSk7aWYoIWluX2FycmF5KCRYWyJmdW4iXSwkdGQpKSRxZFtdPSRMWyR6XTt9fXJldHVybgphcnJheSgkTCwkcWQpO31mdW5jdGlvbgpzZWxlY3RTZWFyY2hQcm9jZXNzKCRwLCR4KXtnbG9iYWwkZywkbTskST1hcnJheSgpO2ZvcmVhY2goJHgKYXMkdD0+JHcpe2lmKCR3WyJ0eXBlIl09PSJGVUxMVEVYVCImJiRfR0VUWyJmdWxsdGV4dCJdWyR0XSE9IiIpJElbXT0iTUFUQ0ggKCIuaW1wbG9kZSgiLCAiLGFycmF5X21hcCgnaWRmX2VzY2FwZScsJHdbImNvbHVtbnMiXSkpLiIpIEFHQUlOU1QgKCIucSgkX0dFVFsiZnVsbHRleHQiXVskdF0pLihpc3NldCgkX0dFVFsiYm9vbGVhbiJdWyR0XSk/IiBJTiBCT09MRUFOIE1PREUiOiIiKS4iKSI7fWZvcmVhY2goKGFycmF5KSRfR0VUWyJ3aGVyZSJdYXMkej0+JFgpe2lmKCIkWFtjb2xdJFhbdmFsXSIhPSIiJiZpbl9hcnJheSgkWFsib3AiXSwkdGhpcy0+b3BlcmF0b3JzKSl7JGlnPSIiOyR1Yj0iICRYW29wXSI7aWYocHJlZ19tYXRjaCgnfklOJH4nLCRYWyJvcCJdKSl7JEpkPXByb2Nlc3NfbGVuZ3RoKCRYWyJ2YWwiXSk7JHViLj0iICIuKCRKZCE9IiI/JEpkOiIoTlVMTCkiKTt9ZWxzZWlmKCRYWyJvcCJdPT0iU1FMIikkdWI9IiAkWFt2YWxdIjtlbHNlaWYoJFhbIm9wIl09PSJMSUtFICUlIikkdWI9IiBMSUtFICIuJHRoaXMtPnByb2Nlc3NJbnB1dCgkcFskWFsiY29sIl1dLCIlJFhbdmFsXSUiKTtlbHNlaWYoJFhbIm9wIl09PSJJTElLRSAlJSIpJHViPSIgSUxJS0UgIi4kdGhpcy0+cHJvY2Vzc0lucHV0KCRwWyRYWyJjb2wiXV0sIiUkWFt2YWxdJSIpO2Vsc2VpZigkWFsib3AiXT09IkZJTkRfSU5fU0VUIil7JGlnPSIkWFtvcF0oIi5xKCRYWyJ2YWwiXSkuIiwgIjskdWI9IikiO31lbHNlaWYoIXByZWdfbWF0Y2goJ35OVUxMJH4nLCRYWyJvcCJdKSkkdWIuPSIgIi4kdGhpcy0+cHJvY2Vzc0lucHV0KCRwWyRYWyJjb2wiXV0sJFhbInZhbCJdKTtpZigkWFsiY29sIl0hPSIiKSRJW109JGlnLiRtLT5jb252ZXJ0U2VhcmNoKGlkZl9lc2NhcGUoJFhbImNvbCJdKSwkWCwkcFskWFsiY29sIl1dKS4kdWI7ZWxzZXskbmI9YXJyYXkoKTtmb3JlYWNoKCRwCmFzJEQ9PiRvKXtpZigocHJlZ19tYXRjaCgnfl5bLVxkLicuKHByZWdfbWF0Y2goJ35JTiR+JywkWFsib3AiXSk/JywnOicnKS4nXSskficsJFhbInZhbCJdKXx8IXByZWdfbWF0Y2goJ34nLm51bWJlcl90eXBlKCkuJ3xiaXR+Jywkb1sidHlwZSJdKSkmJighcHJlZ19tYXRjaCgifltceDgwLVx4RkZdfiIsJFhbInZhbCJdKXx8cHJlZ19tYXRjaCgnfmNoYXJ8dGV4dHxlbnVtfHNldH4nLCRvWyJ0eXBlIl0pKSYmKCFwcmVnX21hdGNoKCd+ZGF0ZXx0aW1lc3RhbXB+Jywkb1sidHlwZSJdKXx8cHJlZ19tYXRjaCgnfl5cZCstXGQrLVxkK34nLCRYWyJ2YWwiXSkpKSRuYltdPSRpZy4kbS0+Y29udmVydFNlYXJjaChpZGZfZXNjYXBlKCREKSwkWCwkbykuJHViO30kSVtdPSgkbmI/IigiLmltcGxvZGUoIiBPUiAiLCRuYikuIikiOiIxID0gMCIpO319fXJldHVybiRJO31mdW5jdGlvbgpzZWxlY3RPcmRlclByb2Nlc3MoJHAsJHgpeyRJPWFycmF5KCk7Zm9yZWFjaCgoYXJyYXkpJF9HRVRbIm9yZGVyIl1hcyR6PT4kWCl7aWYoJFghPSIiKSRJW109KHByZWdfbWF0Y2goJ35eKChDT1VOVFwoRElTVElOQ1QgfFtBLVowLTlfXStcKCkoYCg/OlteYF18YGApK2B8Iig/OlteIl18IiIpKyIpXCl8Q09VTlRcKFwqXCkpJH4nLCRYKT8kWDppZGZfZXNjYXBlKCRYKSkuKGlzc2V0KCRfR0VUWyJkZXNjIl1bJHpdKT8iIERFU0MiOiIiKTt9cmV0dXJuJEk7fWZ1bmN0aW9uCnNlbGVjdExpbWl0UHJvY2Vzcygpe3JldHVybihpc3NldCgkX0dFVFsibGltaXQiXSk/JF9HRVRbImxpbWl0Il06IjUwIik7fWZ1bmN0aW9uCnNlbGVjdExlbmd0aFByb2Nlc3MoKXtyZXR1cm4oaXNzZXQoJF9HRVRbInRleHRfbGVuZ3RoIl0pPyRfR0VUWyJ0ZXh0X2xlbmd0aCJdOiIxMDAiKTt9ZnVuY3Rpb24Kc2VsZWN0RW1haWxQcm9jZXNzKCRaLCRnZCl7cmV0dXJuCmZhbHNlO31mdW5jdGlvbgpzZWxlY3RRdWVyeUJ1aWxkKCRMLCRaLCRxZCwkemYsJF8sJEUpe3JldHVybiIiO31mdW5jdGlvbgptZXNzYWdlUXVlcnkoJEcsJGRpLCRSYz1mYWxzZSl7Z2xvYmFsJHksJG07cmVzdGFydF9zZXNzaW9uKCk7JEFkPSZnZXRfc2Vzc2lvbigicXVlcmllcyIpO2lmKCEkQWRbJF9HRVRbImRiIl1dKSRBZFskX0dFVFsiZGIiXV09YXJyYXkoKTtpZihzdHJsZW4oJEcpPjFlNikkRz1wcmVnX3JlcGxhY2UoJ35bXHg4MC1ceEZGXSskficsJycsc3Vic3RyKCRHLDAsMWU2KSkuIlxu4oCmIjskQWRbJF9HRVRbImRiIl1dW109YXJyYXkoJEcsdGltZSgpLCRkaSk7JF9oPSJzcWwtIi5jb3VudCgkQWRbJF9HRVRbImRiIl1dKTskST0iPGEgaHJlZj0nIyRfaCcgY2xhc3M9J3RvZ2dsZSc+Ii4nU1FMIGNvbW1hbmQnLiI8L2E+XG4iO2lmKCEkUmMmJigkYmo9JG0tPndhcm5pbmdzKCkpKXskdT0id2FybmluZ3MtIi5jb3VudCgkQWRbJF9HRVRbImRiIl1dKTskST0iPGEgaHJlZj0nIyR1JyBjbGFzcz0ndG9nZ2xlJz4iLidXYXJuaW5ncycuIjwvYT4sICRJPGRpdiBpZD0nJHUnIGNsYXNzPSdoaWRkZW4nPlxuJGJqPC9kaXY+XG4iO31yZXR1cm4iIDxzcGFuIGNsYXNzPSd0aW1lJz4iLkBkYXRlKCJIOmk6cyIpLiI8L3NwYW4+Ii4iICRJPGRpdiBpZD0nJF9oJyBjbGFzcz0naGlkZGVuJz48cHJlPjxjb2RlIGNsYXNzPSdqdXNoLSR5Jz4iLnNob3J0ZW5fdXRmOCgkRywxMDAwKS4iPC9jb2RlPjwvcHJlPiIuKCRkaT8iIDxzcGFuIGNsYXNzPSd0aW1lJz4oJGRpKTwvc3Bhbj4iOicnKS4oc3VwcG9ydCgic3FsIik/JzxwPjxhIGhyZWY9IicuaChzdHJfcmVwbGFjZSgiZGI9Ii51cmxlbmNvZGUoREIpLCJkYj0iLnVybGVuY29kZSgkX0dFVFsiZGIiXSksTUUpLidzcWw9Jmhpc3Rvcnk9Jy4oY291bnQoJEFkWyRfR0VUWyJkYiJdXSktMSkpLiciPicuJ0VkaXQnLic8L2E+JzonJykuJzwvZGl2Pic7fWZ1bmN0aW9uCmVkaXRSb3dQcmludCgkUSwkcCwkSiwkSWkpe31mdW5jdGlvbgplZGl0RnVuY3Rpb25zKCRvKXtnbG9iYWwkcWM7JEk9KCRvWyJudWxsIl0/Ik5VTEwvIjoiIik7JElpPWlzc2V0KCRfR0VUWyJzZWxlY3QiXSl8fHdoZXJlKCRfR0VUKTtmb3JlYWNoKCRxYwphcyR6PT4kbmQpe2lmKCEkenx8KCFpc3NldCgkX0dFVFsiY2FsbCJdKSYmJElpKSl7Zm9yZWFjaCgkbmQKYXMkWmY9PiRYKXtpZighJFpmfHxwcmVnX21hdGNoKCJ+JFpmfiIsJG9bInR5cGUiXSkpJEkuPSIvJFgiO319aWYoJHomJiFwcmVnX21hdGNoKCd+c2V0fGJsb2J8Ynl0ZWF8cmF3fGZpbGV8Ym9vbH4nLCRvWyJ0eXBlIl0pKSRJLj0iL1NRTCI7fWlmKCRvWyJhdXRvX2luY3JlbWVudCJdJiYhJElpKSRJPSdBdXRvIEluY3JlbWVudCc7cmV0dXJuCmV4cGxvZGUoIi8iLCRJKTt9ZnVuY3Rpb24KZWRpdElucHV0KCRRLCRvLCRIYSwkWSl7aWYoJG9bInR5cGUiXT09ImVudW0iKXJldHVybihpc3NldCgkX0dFVFsic2VsZWN0Il0pPyI8bGFiZWw+PGlucHV0IHR5cGU9J3JhZGlvJyRIYSB2YWx1ZT0nLTEnIGNoZWNrZWQ+PGk+Ii4nb3JpZ2luYWwnLiI8L2k+PC9sYWJlbD4gIjoiIikuKCRvWyJudWxsIl0/IjxsYWJlbD48aW5wdXQgdHlwZT0ncmFkaW8nJEhhIHZhbHVlPScnIi4oJFkhPT1udWxsfHxpc3NldCgkX0dFVFsic2VsZWN0Il0pPyIiOiIgY2hlY2tlZCIpLiI+PGk+TlVMTDwvaT48L2xhYmVsPiAiOiIiKS5lbnVtX2lucHV0KCJyYWRpbyIsJEhhLCRvLCRZLDApO3JldHVybiIiO31mdW5jdGlvbgplZGl0SGludCgkUSwkbywkWSl7cmV0dXJuIiI7fWZ1bmN0aW9uCnByb2Nlc3NJbnB1dCgkbywkWSwkcz0iIil7aWYoJHM9PSJTUUwiKXJldHVybiRZOyREPSRvWyJmaWVsZCJdOyRJPXEoJFkpO2lmKHByZWdfbWF0Y2goJ35eKG5vd3xnZXRkYXRlfHV1aWQpJH4nLCRzKSkkST0iJHMoKSI7ZWxzZWlmKHByZWdfbWF0Y2goJ35eY3VycmVudF8oZGF0ZXx0aW1lc3RhbXApJH4nLCRzKSkkST0kcztlbHNlaWYocHJlZ19tYXRjaCgnfl4oWystXXxcfFx8KSR+JywkcykpJEk9aWRmX2VzY2FwZSgkRCkuIiAkcyAkSSI7ZWxzZWlmKHByZWdfbWF0Y2goJ35eWystXSBpbnRlcnZhbCR+JywkcykpJEk9aWRmX2VzY2FwZSgkRCkuIiAkcyAiLihwcmVnX21hdGNoKCJ+XihcXGQrfCdbMC05LjogLV0nKSBbQS1aX10rXCR+aSIsJFkpPyRZOiRJKTtlbHNlaWYocHJlZ19tYXRjaCgnfl4oYWRkdGltZXxzdWJ0aW1lfGNvbmNhdCkkficsJHMpKSRJPSIkcygiLmlkZl9lc2NhcGUoJEQpLiIsICRJKSI7ZWxzZWlmKHByZWdfbWF0Y2goJ35eKG1kNXxzaGExfHBhc3N3b3JkfGVuY3J5cHQpJH4nLCRzKSkkST0iJHMoJEkpIjtyZXR1cm4KdW5jb252ZXJ0X2ZpZWxkKCRvLCRJKTt9ZnVuY3Rpb24KZHVtcE91dHB1dCgpeyRJPWFycmF5KCd0ZXh0Jz0+J29wZW4nLCdmaWxlJz0+J3NhdmUnKTtpZihmdW5jdGlvbl9leGlzdHMoJ2d6ZW5jb2RlJykpJElbJ2d6J109J2d6aXAnO3JldHVybiRJO31mdW5jdGlvbgpkdW1wRm9ybWF0KCl7cmV0dXJuCmFycmF5KCdzcWwnPT4nU1FMJywnY3N2Jz0+J0NTViwnLCdjc3Y7Jz0+J0NTVjsnLCd0c3YnPT4nVFNWJyk7fWZ1bmN0aW9uCmR1bXBEYXRhYmFzZSgkbCl7fWZ1bmN0aW9uCmR1bXBUYWJsZSgkUSwkSGgsJGNlPTApe2lmKCRfUE9TVFsiZm9ybWF0Il0hPSJzcWwiKXtlY2hvIlx4ZWZceGJiXHhiZiI7aWYoJEhoKWR1bXBfY3N2KGFycmF5X2tleXMoZmllbGRzKCRRKSkpO31lbHNle2lmKCRjZT09Mil7JHA9YXJyYXkoKTtmb3JlYWNoKGZpZWxkcygkUSlhcyREPT4kbykkcFtdPWlkZl9lc2NhcGUoJEQpLiIgJG9bZnVsbF90eXBlXSI7JGk9IkNSRUFURSBUQUJMRSAiLnRhYmxlKCRRKS4iICgiLmltcGxvZGUoIiwgIiwkcCkuIikiO31lbHNlJGk9Y3JlYXRlX3NxbCgkUSwkX1BPU1RbImF1dG9faW5jcmVtZW50Il0sJEhoKTtzZXRfdXRmOG1iNCgkaSk7aWYoJEhoJiYkaSl7aWYoJEhoPT0iRFJPUCtDUkVBVEUifHwkY2U9PTEpZWNobyJEUk9QICIuKCRjZT09Mj8iVklFVyI6IlRBQkxFIikuIiBJRiBFWElTVFMgIi50YWJsZSgkUSkuIjtcbiI7aWYoJGNlPT0xKSRpPXJlbW92ZV9kZWZpbmVyKCRpKTtlY2hvIiRpO1xuXG4iO319fWZ1bmN0aW9uCmR1bXBEYXRhKCRRLCRIaCwkRyl7Z2xvYmFsJGcsJHk7JEVlPSgkeT09InNxbGl0ZSI/MDoxMDQ4NTc2KTtpZigkSGgpe2lmKCRfUE9TVFsiZm9ybWF0Il09PSJzcWwiKXtpZigkSGg9PSJUUlVOQ0FURStJTlNFUlQiKWVjaG8KdHJ1bmNhdGVfc3FsKCRRKS4iO1xuIjskcD1maWVsZHMoJFEpO30kSD0kZy0+cXVlcnkoJEcsMSk7aWYoJEgpeyRWZD0iIjskVmE9IiI7JGhlPWFycmF5KCk7JEpoPSIiOyRVYz0oJFEhPScnPydmZXRjaF9hc3NvYyc6J2ZldGNoX3JvdycpO3doaWxlKCRKPSRILT4kVWMoKSl7aWYoISRoZSl7JFRpPWFycmF5KCk7Zm9yZWFjaCgkSgphcyRYKXskbz0kSC0+ZmV0Y2hfZmllbGQoKTskaGVbXT0kby0+bmFtZTskej1pZGZfZXNjYXBlKCRvLT5uYW1lKTskVGlbXT0iJHogPSBWQUxVRVMoJHopIjt9JEpoPSgkSGg9PSJJTlNFUlQrVVBEQVRFIj8iXG5PTiBEVVBMSUNBVEUgS0VZIFVQREFURSAiLmltcGxvZGUoIiwgIiwkVGkpOiIiKS4iO1xuIjt9aWYoJF9QT1NUWyJmb3JtYXQiXSE9InNxbCIpe2lmKCRIaD09InRhYmxlIil7ZHVtcF9jc3YoJGhlKTskSGg9IklOU0VSVCI7fWR1bXBfY3N2KCRKKTt9ZWxzZXtpZighJFZkKSRWZD0iSU5TRVJUIElOVE8gIi50YWJsZSgkUSkuIiAoIi5pbXBsb2RlKCIsICIsYXJyYXlfbWFwKCdpZGZfZXNjYXBlJywkaGUpKS4iKSBWQUxVRVMiO2ZvcmVhY2goJEoKYXMkej0+JFgpeyRvPSRwWyR6XTskSlskel09KCRYIT09bnVsbD91bmNvbnZlcnRfZmllbGQoJG8scHJlZ19tYXRjaChudW1iZXJfdHlwZSgpLCRvWyJ0eXBlIl0pJiYhcHJlZ19tYXRjaCgnflxbficsJG9bImZ1bGxfdHlwZSJdKSYmaXNfbnVtZXJpYygkWCk/JFg6cSgoJFg9PT1mYWxzZT8wOiRYKSkpOiJOVUxMIik7fSRYZz0oJEVlPyJcbiI6IiAiKS4iKCIuaW1wbG9kZSgiLFx0IiwkSikuIikiO2lmKCEkVmEpJFZhPSRWZC4kWGc7ZWxzZWlmKHN0cmxlbigkVmEpKzQrc3RybGVuKCRYZykrc3RybGVuKCRKaCk8JEVlKSRWYS49IiwkWGciO2Vsc2V7ZWNobyRWYS4kSmg7JFZhPSRWZC4kWGc7fX19aWYoJFZhKWVjaG8kVmEuJEpoO31lbHNlaWYoJF9QT1NUWyJmb3JtYXQiXT09InNxbCIpZWNobyItLSAiLnN0cl9yZXBsYWNlKCJcbiIsIiAiLCRnLT5lcnJvcikuIlxuIjt9fWZ1bmN0aW9uCmR1bXBGaWxlbmFtZSgkRmQpe3JldHVybgpmcmllbmRseV91cmwoJEZkIT0iIj8kRmQ6KFNFUlZFUiE9IiI/U0VSVkVSOiJsb2NhbGhvc3QiKSk7fWZ1bmN0aW9uCmR1bXBIZWFkZXJzKCRGZCwkU2U9ZmFsc2UpeyRKZj0kX1BPU1RbIm91dHB1dCJdOyRNYz0ocHJlZ19tYXRjaCgnfnNxbH4nLCRfUE9TVFsiZm9ybWF0Il0pPyJzcWwiOigkU2U/InRhciI6ImNzdiIpKTtoZWFkZXIoIkNvbnRlbnQtVHlwZTogIi4oJEpmPT0iZ3oiPyJhcHBsaWNhdGlvbi94LWd6aXAiOigkTWM9PSJ0YXIiPyJhcHBsaWNhdGlvbi94LXRhciI6KCRNYz09InNxbCJ8fCRKZiE9ImZpbGUiPyJ0ZXh0L3BsYWluIjoidGV4dC9jc3YiKS4iOyBjaGFyc2V0PXV0Zi04IikpKTtpZigkSmY9PSJneiIpb2Jfc3RhcnQoJ29iX2d6ZW5jb2RlJywxZTYpO3JldHVybiRNYzt9ZnVuY3Rpb24KaW1wb3J0U2VydmVyUGF0aCgpe3JldHVybiJhZG1pbmVyLnNxbCI7fWZ1bmN0aW9uCmhvbWVwYWdlKCl7ZWNobyc8cCBjbGFzcz0ibGlua3MiPicuKCRfR0VUWyJucyJdPT0iIiYmc3VwcG9ydCgiZGF0YWJhc2UiKT8nPGEgaHJlZj0iJy5oKE1FKS4nZGF0YWJhc2U9Ij4nLidBbHRlciBkYXRhYmFzZScuIjwvYT5cbiI6IiIpLChzdXBwb3J0KCJzY2hlbWUiKT8iPGEgaHJlZj0nIi5oKE1FKS4ic2NoZW1lPSc+Ii4oJF9HRVRbIm5zIl0hPSIiPydBbHRlciBzY2hlbWEnOidDcmVhdGUgc2NoZW1hJykuIjwvYT5cbiI6IiIpLCgkX0dFVFsibnMiXSE9PSIiPyc8YSBocmVmPSInLmgoTUUpLidzY2hlbWE9Ij4nLidEYXRhYmFzZSBzY2hlbWEnLiI8L2E+XG4iOiIiKSwoc3VwcG9ydCgicHJpdmlsZWdlcyIpPyI8YSBocmVmPSciLmgoTUUpLiJwcml2aWxlZ2VzPSc+Ii4nUHJpdmlsZWdlcycuIjwvYT5cbiI6IiIpO3JldHVybgp0cnVlO31mdW5jdGlvbgpuYXZpZ2F0aW9uKCRSZSl7Z2xvYmFsJGlhLCR5LCRpYywkZztlY2hvJzxoMT4KJywkdGhpcy0+bmFtZSgpLCcgPHNwYW4gY2xhc3M9InZlcnNpb24iPicsJGlhLCc8L3NwYW4+CjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFkbWluZXIub3JnLyNkb3dubG9hZCInLHRhcmdldF9ibGFuaygpLCcgaWQ9InZlcnNpb24iPicsKHZlcnNpb25fY29tcGFyZSgkaWEsJF9DT09LSUVbImFkbWluZXJfdmVyc2lvbiJdKTwwP2goJF9DT09LSUVbImFkbWluZXJfdmVyc2lvbiJdKToiIiksJzwvYT4KPC9oMT4KJztpZigkUmU9PSJhdXRoIil7JEpmPSIiO2ZvcmVhY2goKGFycmF5KSRfU0VTU0lPTlsicHdkcyJdYXMkVmk9PiRsaCl7Zm9yZWFjaCgkbGgKYXMkTT0+JFFpKXtmb3JlYWNoKCRRaQphcyRWPT4kRil7aWYoJEYhPT1udWxsKXskVWI9JF9TRVNTSU9OWyJkYiJdWyRWaV1bJE1dWyRWXTtmb3JlYWNoKCgkVWI/YXJyYXlfa2V5cygkVWIpOmFycmF5KCIiKSlhcyRsKSRKZi49IjxsaT48YSBocmVmPSciLmgoYXV0aF91cmwoJFZpLCRNLCRWLCRsKSkuIic+KCRpY1skVmldKSAiLmgoJFYuKCRNIT0iIj8iQCIuJHRoaXMtPnNlcnZlck5hbWUoJE0pOiIiKS4oJGwhPSIiPyIgLSAkbCI6IiIpKS4iPC9hPlxuIjt9fX19aWYoJEpmKWVjaG8iPHVsIGlkPSdsb2dpbnMnPlxuJEpmPC91bD5cbiIuc2NyaXB0KCJtaXhpbihxcygnI2xvZ2lucycpLCB7b25tb3VzZW92ZXI6IG1lbnVPdmVyLCBvbm1vdXNlb3V0OiBtZW51T3V0fSk7Iik7fWVsc2V7JFM9YXJyYXkoKTtpZigkX0dFVFsibnMiXSE9PSIiJiYhJFJlJiZEQiE9IiIpeyRnLT5zZWxlY3RfZGIoREIpOyRTPXRhYmxlX3N0YXR1cygnJyx0cnVlKTt9ZWNobwpzY3JpcHRfc3JjKHByZWdfcmVwbGFjZSgiflxcPy4qfiIsIiIsTUUpLiI/ZmlsZT1qdXNoLmpzJnZlcnNpb249NC44LjEiKTtpZihzdXBwb3J0KCJzcWwiKSl7ZWNobyc8c2NyaXB0Jyxub25jZSgpLCc+Cic7aWYoJFMpeyR3ZT1hcnJheSgpO2ZvcmVhY2goJFMKYXMkUT0+JFQpJHdlW109cHJlZ19xdW90ZSgkUSwnLycpO2VjaG8idmFyIGp1c2hMaW5rcyA9IHsgJHk6IFsgJyIuanNfZXNjYXBlKE1FKS4oc3VwcG9ydCgidGFibGUiKT8idGFibGU9Ijoic2VsZWN0PSIpLiJcJCYnLCAvXFxiKCIuaW1wbG9kZSgifCIsJHdlKS4iKVxcYi9nIF0gfTtcbiI7Zm9yZWFjaChhcnJheSgiYmFjIiwiYnJhIiwic3FsaXRlX3F1byIsIm1zc3FsX2JyYSIpYXMkWCllY2hvImp1c2hMaW5rcy4kWCA9IGp1c2hMaW5rcy4keTtcbiI7fSRraD0kZy0+c2VydmVyX2luZm87ZWNobydib2R5TG9hZChcJycsKGlzX29iamVjdCgkZyk/cHJlZ19yZXBsYWNlKCd+XihcZFwuP1xkKS4qfnMnLCdcMScsJGtoKToiIiksJ1wnJywocHJlZ19tYXRjaCgnfk1hcmlhREJ+Jywka2gpPyIsIHRydWUiOiIiKSwnKTsKPC9zY3JpcHQ+Cic7fSR0aGlzLT5kYXRhYmFzZXNQcmludCgkUmUpO2lmKERCPT0iInx8ISRSZSl7ZWNobyI8cCBjbGFzcz0nbGlua3MnPiIuKHN1cHBvcnQoInNxbCIpPyI8YSBocmVmPSciLmgoTUUpLiJzcWw9JyIuYm9sZChpc3NldCgkX0dFVFsic3FsIl0pJiYhaXNzZXQoJF9HRVRbImltcG9ydCJdKSkuIj4iLidTUUwgY29tbWFuZCcuIjwvYT5cbjxhIGhyZWY9JyIuaChNRSkuImltcG9ydD0nIi5ib2xkKGlzc2V0KCRfR0VUWyJpbXBvcnQiXSkpLiI+Ii4nSW1wb3J0Jy4iPC9hPlxuIjoiIikuIiI7aWYoc3VwcG9ydCgiZHVtcCIpKWVjaG8iPGEgaHJlZj0nIi5oKE1FKS4iZHVtcD0iLnVybGVuY29kZShpc3NldCgkX0dFVFsidGFibGUiXSk/JF9HRVRbInRhYmxlIl06JF9HRVRbInNlbGVjdCJdKS4iJyBpZD0nZHVtcCciLmJvbGQoaXNzZXQoJF9HRVRbImR1bXAiXSkpLiI+Ii4nRXhwb3J0Jy4iPC9hPlxuIjt9aWYoJF9HRVRbIm5zIl0hPT0iIiYmISRSZSYmREIhPSIiKXtlY2hvJzxhIGhyZWY9IicuaChNRSkuJ2NyZWF0ZT0iJy5ib2xkKCRfR0VUWyJjcmVhdGUiXT09PSIiKS4iPiIuJ0NyZWF0ZSB0YWJsZScuIjwvYT5cbiI7aWYoISRTKWVjaG8iPHAgY2xhc3M9J21lc3NhZ2UnPiIuJ05vIHRhYmxlcy4nLiJcbiI7ZWxzZSR0aGlzLT50YWJsZXNQcmludCgkUyk7fX19ZnVuY3Rpb24KZGF0YWJhc2VzUHJpbnQoJFJlKXtnbG9iYWwkYiwkZzskaz0kdGhpcy0+ZGF0YWJhc2VzKCk7aWYoREImJiRrJiYhaW5fYXJyYXkoREIsJGspKWFycmF5X3Vuc2hpZnQoJGssREIpO2VjaG8nPGZvcm0gYWN0aW9uPSIiPgo8cCBpZD0iZGJzIj4KJztoaWRkZW5fZmllbGRzX2dldCgpOyRTYj1zY3JpcHQoIm1peGluKHFzbCgnc2VsZWN0JyksIHtvbm1vdXNlZG93bjogZGJNb3VzZURvd24sIG9uY2hhbmdlOiBkYkNoYW5nZX0pOyIpO2VjaG8iPHNwYW4gdGl0bGU9JyIuJ2RhdGFiYXNlJy4iJz4iLidEQicuIjwvc3Bhbj46ICIuKCRrPyI8c2VsZWN0IG5hbWU9J2RiJz4iLm9wdGlvbmxpc3QoYXJyYXkoIiI9PiIiKSskayxEQikuIjwvc2VsZWN0PiRTYiI6IjxpbnB1dCBuYW1lPSdkYicgdmFsdWU9JyIuaChEQikuIicgYXV0b2NhcGl0YWxpemU9J29mZic+XG4iKSwiPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyIuJ1VzZScuIiciLigkaz8iIGNsYXNzPSdoaWRkZW4nIjoiIikuIj5cbiI7aWYoc3VwcG9ydCgic2NoZW1lIikpe2lmKCRSZSE9ImRiIiYmREIhPSIiJiYkZy0+c2VsZWN0X2RiKERCKSl7ZWNobyI8YnI+Ii4nU2NoZW1hJy4iOiA8c2VsZWN0IG5hbWU9J25zJz4iLm9wdGlvbmxpc3QoYXJyYXkoIiI9PiIiKSskYi0+c2NoZW1hcygpLCRfR0VUWyJucyJdKS4iPC9zZWxlY3Q+JFNiIjtpZigkX0dFVFsibnMiXSE9IiIpc2V0X3NjaGVtYSgkX0dFVFsibnMiXSk7fX1mb3JlYWNoKGFycmF5KCJpbXBvcnQiLCJzcWwiLCJzY2hlbWEiLCJkdW1wIiwicHJpdmlsZWdlcyIpYXMkWCl7aWYoaXNzZXQoJF9HRVRbJFhdKSl7ZWNobyI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSckWCcgdmFsdWU9Jyc+IjticmVhazt9fWVjaG8iPC9wPjwvZm9ybT5cbiI7fWZ1bmN0aW9uCnRhYmxlc1ByaW50KCRTKXtlY2hvIjx1bCBpZD0ndGFibGVzJz4iLnNjcmlwdCgibWl4aW4ocXMoJyN0YWJsZXMnKSwge29ubW91c2VvdmVyOiBtZW51T3Zlciwgb25tb3VzZW91dDogbWVudU91dH0pOyIpO2ZvcmVhY2goJFMKYXMkUT0+JE8peyREPSR0aGlzLT50YWJsZU5hbWUoJE8pO2lmKCREIT0iIil7ZWNobyc8bGk+PGEgaHJlZj0iJy5oKE1FKS4nc2VsZWN0PScudXJsZW5jb2RlKCRRKS4nIicuYm9sZCgkX0dFVFsic2VsZWN0Il09PSRRfHwkX0dFVFsiZWRpdCJdPT0kUSwic2VsZWN0IikuIiB0aXRsZT0nIi4nU2VsZWN0IGRhdGEnLiInPiIuJ3NlbGVjdCcuIjwvYT4gIiwoc3VwcG9ydCgidGFibGUiKXx8c3VwcG9ydCgiaW5kZXhlcyIpPyc8YSBocmVmPSInLmgoTUUpLid0YWJsZT0nLnVybGVuY29kZSgkUSkuJyInLmJvbGQoaW5fYXJyYXkoJFEsYXJyYXkoJF9HRVRbInRhYmxlIl0sJF9HRVRbImNyZWF0ZSJdLCRfR0VUWyJpbmRleGVzIl0sJF9HRVRbImZvcmVpZ24iXSwkX0dFVFsidHJpZ2dlciJdKSksKGlzX3ZpZXcoJE8pPyJ2aWV3Ijoic3RydWN0dXJlIikpLiIgdGl0bGU9JyIuJ1Nob3cgc3RydWN0dXJlJy4iJz4kRDwvYT4iOiI8c3Bhbj4kRDwvc3Bhbj4iKS4iXG4iO319ZWNobyI8L3VsPlxuIjt9fSRiPShmdW5jdGlvbl9leGlzdHMoJ2FkbWluZXJfb2JqZWN0Jyk/YWRtaW5lcl9vYmplY3QoKTpuZXcKQWRtaW5lcik7JGljPWFycmF5KCJzZXJ2ZXIiPT4iTXlTUUwiKSskaWM7aWYoIWRlZmluZWQoIkRSSVZFUiIpKXtkZWZpbmUoIkRSSVZFUiIsInNlcnZlciIpO2lmKGV4dGVuc2lvbl9sb2FkZWQoIm15c3FsaSIpKXtjbGFzcwpNaW5fREIKZXh0ZW5kcwpNeVNRTGl7dmFyJGV4dGVuc2lvbj0iTXlTUUxpIjtmdW5jdGlvbgpfX2NvbnN0cnVjdCgpe3BhcmVudDo6aW5pdCgpO31mdW5jdGlvbgpjb25uZWN0KCRNPSIiLCRWPSIiLCRGPSIiLCRqPW51bGwsJGRnPW51bGwsJHRoPW51bGwpe2dsb2JhbCRiO215c3FsaV9yZXBvcnQoTVlTUUxJX1JFUE9SVF9PRkYpO2xpc3QoJERkLCRkZyk9ZXhwbG9kZSgiOiIsJE0sMik7JEJoPSRiLT5jb25uZWN0U3NsKCk7aWYoJEJoKSR0aGlzLT5zc2xfc2V0KCRCaFsna2V5J10sJEJoWydjZXJ0J10sJEJoWydjYSddLCcnLCcnKTskST1AJHRoaXMtPnJlYWxfY29ubmVjdCgoJE0hPSIiPyREZDppbmlfZ2V0KCJteXNxbGkuZGVmYXVsdF9ob3N0IikpLCgkTS4kViE9IiI/JFY6aW5pX2dldCgibXlzcWxpLmRlZmF1bHRfdXNlciIpKSwoJE0uJFYuJEYhPSIiPyRGOmluaV9nZXQoIm15c3FsaS5kZWZhdWx0X3B3IikpLCRqLChpc19udW1lcmljKCRkZyk/JGRnOmluaV9nZXQoIm15c3FsaS5kZWZhdWx0X3BvcnQiKSksKCFpc19udW1lcmljKCRkZyk/JGRnOiR0aCksKCRCaD82NDowKSk7JHRoaXMtPm9wdGlvbnMoTVlTUUxJX09QVF9MT0NBTF9JTkZJTEUsZmFsc2UpO3JldHVybiRJO31mdW5jdGlvbgpzZXRfY2hhcnNldCgkWmEpe2lmKHBhcmVudDo6c2V0X2NoYXJzZXQoJFphKSlyZXR1cm4KdHJ1ZTtwYXJlbnQ6OnNldF9jaGFyc2V0KCd1dGY4Jyk7cmV0dXJuJHRoaXMtPnF1ZXJ5KCJTRVQgTkFNRVMgJFphIik7fWZ1bmN0aW9uCnJlc3VsdCgkRywkbz0wKXskSD0kdGhpcy0+cXVlcnkoJEcpO2lmKCEkSClyZXR1cm4KZmFsc2U7JEo9JEgtPmZldGNoX2FycmF5KCk7cmV0dXJuJEpbJG9dO31mdW5jdGlvbgpxdW90ZSgkUCl7cmV0dXJuIiciLiR0aGlzLT5lc2NhcGVfc3RyaW5nKCRQKS4iJyI7fX19ZWxzZWlmKGV4dGVuc2lvbl9sb2FkZWQoIm15c3FsIikmJiEoKGluaV9ib29sKCJzcWwuc2FmZV9tb2RlIil8fGluaV9ib29sKCJteXNxbC5hbGxvd19sb2NhbF9pbmZpbGUiKSkmJmV4dGVuc2lvbl9sb2FkZWQoInBkb19teXNxbCIpKSl7Y2xhc3MKTWluX0RCe3ZhciRleHRlbnNpb249Ik15U1FMIiwkc2VydmVyX2luZm8sJGFmZmVjdGVkX3Jvd3MsJGVycm5vLCRlcnJvciwkX2xpbmssJF9yZXN1bHQ7ZnVuY3Rpb24KY29ubmVjdCgkTSwkViwkRil7aWYoaW5pX2Jvb2woIm15c3FsLmFsbG93X2xvY2FsX2luZmlsZSIpKXskdGhpcy0+ZXJyb3I9c3ByaW50ZignRGlzYWJsZSAlcyBvciBlbmFibGUgJXMgb3IgJXMgZXh0ZW5zaW9ucy4nLCInbXlzcWwuYWxsb3dfbG9jYWxfaW5maWxlJyIsIk15U1FMaSIsIlBET19NeVNRTCIpO3JldHVybgpmYWxzZTt9JHRoaXMtPl9saW5rPUBteXNxbF9jb25uZWN0KCgkTSE9IiI/JE06aW5pX2dldCgibXlzcWwuZGVmYXVsdF9ob3N0IikpLCgiJE0kViIhPSIiPyRWOmluaV9nZXQoIm15c3FsLmRlZmF1bHRfdXNlciIpKSwoIiRNJFYkRiIhPSIiPyRGOmluaV9nZXQoIm15c3FsLmRlZmF1bHRfcGFzc3dvcmQiKSksdHJ1ZSwxMzEwNzIpO2lmKCR0aGlzLT5fbGluaykkdGhpcy0+c2VydmVyX2luZm89bXlzcWxfZ2V0X3NlcnZlcl9pbmZvKCR0aGlzLT5fbGluayk7ZWxzZSR0aGlzLT5lcnJvcj1teXNxbF9lcnJvcigpO3JldHVybihib29sKSR0aGlzLT5fbGluazt9ZnVuY3Rpb24Kc2V0X2NoYXJzZXQoJFphKXtpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX3NldF9jaGFyc2V0Jykpe2lmKG15c3FsX3NldF9jaGFyc2V0KCRaYSwkdGhpcy0+X2xpbmspKXJldHVybgp0cnVlO215c3FsX3NldF9jaGFyc2V0KCd1dGY4JywkdGhpcy0+X2xpbmspO31yZXR1cm4kdGhpcy0+cXVlcnkoIlNFVCBOQU1FUyAkWmEiKTt9ZnVuY3Rpb24KcXVvdGUoJFApe3JldHVybiInIi5teXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJFAsJHRoaXMtPl9saW5rKS4iJyI7fWZ1bmN0aW9uCnNlbGVjdF9kYigkail7cmV0dXJuCm15c3FsX3NlbGVjdF9kYigkaiwkdGhpcy0+X2xpbmspO31mdW5jdGlvbgpxdWVyeSgkRywkQmk9ZmFsc2UpeyRIPUAoJEJpP215c3FsX3VuYnVmZmVyZWRfcXVlcnkoJEcsJHRoaXMtPl9saW5rKTpteXNxbF9xdWVyeSgkRywkdGhpcy0+X2xpbmspKTskdGhpcy0+ZXJyb3I9IiI7aWYoISRIKXskdGhpcy0+ZXJybm89bXlzcWxfZXJybm8oJHRoaXMtPl9saW5rKTskdGhpcy0+ZXJyb3I9bXlzcWxfZXJyb3IoJHRoaXMtPl9saW5rKTtyZXR1cm4KZmFsc2U7fWlmKCRIPT09dHJ1ZSl7JHRoaXMtPmFmZmVjdGVkX3Jvd3M9bXlzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+X2xpbmspOyR0aGlzLT5pbmZvPW15c3FsX2luZm8oJHRoaXMtPl9saW5rKTtyZXR1cm4KdHJ1ZTt9cmV0dXJuCm5ldwpNaW5fUmVzdWx0KCRIKTt9ZnVuY3Rpb24KbXVsdGlfcXVlcnkoJEcpe3JldHVybiR0aGlzLT5fcmVzdWx0PSR0aGlzLT5xdWVyeSgkRyk7fWZ1bmN0aW9uCnN0b3JlX3Jlc3VsdCgpe3JldHVybiR0aGlzLT5fcmVzdWx0O31mdW5jdGlvbgpuZXh0X3Jlc3VsdCgpe3JldHVybgpmYWxzZTt9ZnVuY3Rpb24KcmVzdWx0KCRHLCRvPTApeyRIPSR0aGlzLT5xdWVyeSgkRyk7aWYoISRIfHwhJEgtPm51bV9yb3dzKXJldHVybgpmYWxzZTtyZXR1cm4KbXlzcWxfcmVzdWx0KCRILT5fcmVzdWx0LDAsJG8pO319Y2xhc3MKTWluX1Jlc3VsdHt2YXIkbnVtX3Jvd3MsJF9yZXN1bHQsJF9vZmZzZXQ9MDtmdW5jdGlvbgpfX2NvbnN0cnVjdCgkSCl7JHRoaXMtPl9yZXN1bHQ9JEg7JHRoaXMtPm51bV9yb3dzPW15c3FsX251bV9yb3dzKCRIKTt9ZnVuY3Rpb24KZmV0Y2hfYXNzb2MoKXtyZXR1cm4KbXlzcWxfZmV0Y2hfYXNzb2MoJHRoaXMtPl9yZXN1bHQpO31mdW5jdGlvbgpmZXRjaF9yb3coKXtyZXR1cm4KbXlzcWxfZmV0Y2hfcm93KCR0aGlzLT5fcmVzdWx0KTt9ZnVuY3Rpb24KZmV0Y2hfZmllbGQoKXskST1teXNxbF9mZXRjaF9maWVsZCgkdGhpcy0+X3Jlc3VsdCwkdGhpcy0+X29mZnNldCsrKTskSS0+b3JndGFibGU9JEktPnRhYmxlOyRJLT5vcmduYW1lPSRJLT5uYW1lOyRJLT5jaGFyc2V0bnI9KCRJLT5ibG9iPzYzOjApO3JldHVybiRJO31mdW5jdGlvbgpfX2Rlc3RydWN0KCl7bXlzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPl9yZXN1bHQpO319fWVsc2VpZihleHRlbnNpb25fbG9hZGVkKCJwZG9fbXlzcWwiKSl7Y2xhc3MKTWluX0RCCmV4dGVuZHMKTWluX1BET3t2YXIkZXh0ZW5zaW9uPSJQRE9fTXlTUUwiO2Z1bmN0aW9uCmNvbm5lY3QoJE0sJFYsJEYpe2dsb2JhbCRiOyR4Zj1hcnJheShQRE86Ok1ZU1FMX0FUVFJfTE9DQUxfSU5GSUxFPT5mYWxzZSk7JEJoPSRiLT5jb25uZWN0U3NsKCk7aWYoJEJoKXtpZighZW1wdHkoJEJoWydrZXknXSkpJHhmW1BETzo6TVlTUUxfQVRUUl9TU0xfS0VZXT0kQmhbJ2tleSddO2lmKCFlbXB0eSgkQmhbJ2NlcnQnXSkpJHhmW1BETzo6TVlTUUxfQVRUUl9TU0xfQ0VSVF09JEJoWydjZXJ0J107aWYoIWVtcHR5KCRCaFsnY2EnXSkpJHhmW1BETzo6TVlTUUxfQVRUUl9TU0xfQ0FdPSRCaFsnY2EnXTt9JHRoaXMtPmRzbigibXlzcWw6Y2hhcnNldD11dGY4O2hvc3Q9Ii5zdHJfcmVwbGFjZSgiOiIsIjt1bml4X3NvY2tldD0iLHByZWdfcmVwbGFjZSgnfjooXGQpficsJztwb3J0PVwxJywkTSkpLCRWLCRGLCR4Zik7cmV0dXJuCnRydWU7fWZ1bmN0aW9uCnNldF9jaGFyc2V0KCRaYSl7JHRoaXMtPnF1ZXJ5KCJTRVQgTkFNRVMgJFphIik7fWZ1bmN0aW9uCnNlbGVjdF9kYigkail7cmV0dXJuJHRoaXMtPnF1ZXJ5KCJVU0UgIi5pZGZfZXNjYXBlKCRqKSk7fWZ1bmN0aW9uCnF1ZXJ5KCRHLCRCaT1mYWxzZSl7JHRoaXMtPnBkby0+c2V0QXR0cmlidXRlKFBETzo6TVlTUUxfQVRUUl9VU0VfQlVGRkVSRURfUVVFUlksISRCaSk7cmV0dXJuCnBhcmVudDo6cXVlcnkoJEcsJEJpKTt9fX1jbGFzcwpNaW5fRHJpdmVyCmV4dGVuZHMKTWluX1NRTHtmdW5jdGlvbgppbnNlcnQoJFEsJE4pe3JldHVybigkTj9wYXJlbnQ6Omluc2VydCgkUSwkTik6cXVlcmllcygiSU5TRVJUIElOVE8gIi50YWJsZSgkUSkuIiAoKVxuVkFMVUVTICgpIikpO31mdW5jdGlvbgppbnNlcnRVcGRhdGUoJFEsJEssJGtnKXskZj1hcnJheV9rZXlzKHJlc2V0KCRLKSk7JGlnPSJJTlNFUlQgSU5UTyAiLnRhYmxlKCRRKS4iICgiLmltcGxvZGUoIiwgIiwkZikuIikgVkFMVUVTXG4iOyRUaT1hcnJheSgpO2ZvcmVhY2goJGYKYXMkeikkVGlbJHpdPSIkeiA9IFZBTFVFUygkeikiOyRKaD0iXG5PTiBEVVBMSUNBVEUgS0VZIFVQREFURSAiLmltcGxvZGUoIiwgIiwkVGkpOyRUaT1hcnJheSgpOyR0ZT0wO2ZvcmVhY2goJEsKYXMkTil7JFk9IigiLmltcGxvZGUoIiwgIiwkTikuIikiO2lmKCRUaSYmKHN0cmxlbigkaWcpKyR0ZStzdHJsZW4oJFkpK3N0cmxlbigkSmgpPjFlNikpe2lmKCFxdWVyaWVzKCRpZy5pbXBsb2RlKCIsXG4iLCRUaSkuJEpoKSlyZXR1cm4KZmFsc2U7JFRpPWFycmF5KCk7JHRlPTA7fSRUaVtdPSRZOyR0ZSs9c3RybGVuKCRZKSsyO31yZXR1cm4KcXVlcmllcygkaWcuaW1wbG9kZSgiLFxuIiwkVGkpLiRKaCk7fWZ1bmN0aW9uCnNsb3dRdWVyeSgkRywkZWkpe2lmKG1pbl92ZXJzaW9uKCc1LjcuOCcsJzEwLjEuMicpKXtpZihwcmVnX21hdGNoKCd+TWFyaWFEQn4nLCR0aGlzLT5fY29ubi0+c2VydmVyX2luZm8pKXJldHVybiJTRVQgU1RBVEVNRU5UIG1heF9zdGF0ZW1lbnRfdGltZT0kZWkgRk9SICRHIjtlbHNlaWYocHJlZ19tYXRjaCgnfl4oU0VMRUNUXGIpKC4rKX5pcycsJEcsJEMpKXJldHVybiIkQ1sxXSAvKisgTUFYX0VYRUNVVElPTl9USU1FKCIuKCRlaSoxMDAwKS4iKSAqLyAkQ1syXSI7fX1mdW5jdGlvbgpjb252ZXJ0U2VhcmNoKCR2LCRYLCRvKXtyZXR1cm4ocHJlZ19tYXRjaCgnfmNoYXJ8dGV4dHxlbnVtfHNldH4nLCRvWyJ0eXBlIl0pJiYhcHJlZ19tYXRjaCgifl51dGY4fiIsJG9bImNvbGxhdGlvbiJdKSYmcHJlZ19tYXRjaCgnfltceDgwLVx4RkZdficsJFhbJ3ZhbCddKT8iQ09OVkVSVCgkdiBVU0lORyAiLmNoYXJzZXQoJHRoaXMtPl9jb25uKS4iKSI6JHYpO31mdW5jdGlvbgp3YXJuaW5ncygpeyRIPSR0aGlzLT5fY29ubi0+cXVlcnkoIlNIT1cgV0FSTklOR1MiKTtpZigkSCYmJEgtPm51bV9yb3dzKXtvYl9zdGFydCgpO3NlbGVjdCgkSCk7cmV0dXJuCm9iX2dldF9jbGVhbigpO319ZnVuY3Rpb24KdGFibGVIZWxwKCREKXskX2U9cHJlZ19tYXRjaCgnfk1hcmlhREJ+JywkdGhpcy0+X2Nvbm4tPnNlcnZlcl9pbmZvKTtpZihpbmZvcm1hdGlvbl9zY2hlbWEoREIpKXJldHVybgpzdHJ0b2xvd2VyKCgkX2U/ImluZm9ybWF0aW9uLXNjaGVtYS0kRC10YWJsZS8iOnN0cl9yZXBsYWNlKCJfIiwiLSIsJEQpLiItdGFibGUuaHRtbCIpKTtpZihEQj09Im15c3FsIilyZXR1cm4oJF9lPyJteXNxbCRELXRhYmxlLyI6InN5c3RlbS1kYXRhYmFzZS5odG1sIik7fX1mdW5jdGlvbgppZGZfZXNjYXBlKCR2KXtyZXR1cm4iYCIuc3RyX3JlcGxhY2UoImAiLCJgYCIsJHYpLiJgIjt9ZnVuY3Rpb24KdGFibGUoJHYpe3JldHVybgppZGZfZXNjYXBlKCR2KTt9ZnVuY3Rpb24KY29ubmVjdCgpe2dsb2JhbCRiLCRVLCRHaDskZz1uZXcKTWluX0RCOyRLYj0kYi0+Y3JlZGVudGlhbHMoKTtpZigkZy0+Y29ubmVjdCgkS2JbMF0sJEtiWzFdLCRLYlsyXSkpeyRnLT5zZXRfY2hhcnNldChjaGFyc2V0KCRnKSk7JGctPnF1ZXJ5KCJTRVQgc3FsX3F1b3RlX3Nob3dfY3JlYXRlID0gMSwgYXV0b2NvbW1pdCA9IDEiKTtpZihtaW5fdmVyc2lvbignNS43LjgnLDEwLjIsJGcpKXskR2hbJ1N0cmluZ3MnXVtdPSJqc29uIjskVVsianNvbiJdPTQyOTQ5NjcyOTU7fXJldHVybiRnO30kST0kZy0+ZXJyb3I7aWYoZnVuY3Rpb25fZXhpc3RzKCdpY29udicpJiYhaXNfdXRmOCgkSSkmJnN0cmxlbigkWGc9aWNvbnYoIndpbmRvd3MtMTI1MCIsInV0Zi04IiwkSSkpPnN0cmxlbigkSSkpJEk9JFhnO3JldHVybiRJO31mdW5jdGlvbgpnZXRfZGF0YWJhc2VzKCRkZCl7JEk9Z2V0X3Nlc3Npb24oImRicyIpO2lmKCRJPT09bnVsbCl7JEc9KG1pbl92ZXJzaW9uKDUpPyJTRUxFQ1QgU0NIRU1BX05BTUUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuU0NIRU1BVEEgT1JERVIgQlkgU0NIRU1BX05BTUUiOiJTSE9XIERBVEFCQVNFUyIpOyRJPSgkZGQ/c2xvd19xdWVyeSgkRyk6Z2V0X3ZhbHMoJEcpKTtyZXN0YXJ0X3Nlc3Npb24oKTtzZXRfc2Vzc2lvbigiZGJzIiwkSSk7c3RvcF9zZXNzaW9uKCk7fXJldHVybiRJO31mdW5jdGlvbgpsaW1pdCgkRywkWiwkXywkaGY9MCwkaGg9IiAiKXtyZXR1cm4iICRHJFoiLigkXyE9PW51bGw/JGhoLiJMSU1JVCAkXyIuKCRoZj8iIE9GRlNFVCAkaGYiOiIiKToiIik7fWZ1bmN0aW9uCmxpbWl0MSgkUSwkRywkWiwkaGg9IlxuIil7cmV0dXJuCmxpbWl0KCRHLCRaLDEsMCwkaGgpO31mdW5jdGlvbgpkYl9jb2xsYXRpb24oJGwsJGxiKXtnbG9iYWwkZzskST1udWxsOyRpPSRnLT5yZXN1bHQoIlNIT1cgQ1JFQVRFIERBVEFCQVNFICIuaWRmX2VzY2FwZSgkbCksMSk7aWYocHJlZ19tYXRjaCgnfiBDT0xMQVRFIChbXiBdKyl+JywkaSwkQykpJEk9JENbMV07ZWxzZWlmKHByZWdfbWF0Y2goJ34gQ0hBUkFDVEVSIFNFVCAoW14gXSspficsJGksJEMpKSRJPSRsYlskQ1sxXV1bLTFdO3JldHVybiRJO31mdW5jdGlvbgplbmdpbmVzKCl7JEk9YXJyYXkoKTtmb3JlYWNoKGdldF9yb3dzKCJTSE9XIEVOR0lORVMiKWFzJEope2lmKHByZWdfbWF0Y2goIn5ZRVN8REVGQVVMVH4iLCRKWyJTdXBwb3J0Il0pKSRJW109JEpbIkVuZ2luZSJdO31yZXR1cm4kSTt9ZnVuY3Rpb24KbG9nZ2VkX3VzZXIoKXtnbG9iYWwkZztyZXR1cm4kZy0+cmVzdWx0KCJTRUxFQ1QgVVNFUigpIik7fWZ1bmN0aW9uCnRhYmxlc19saXN0KCl7cmV0dXJuCmdldF9rZXlfdmFscyhtaW5fdmVyc2lvbig1KT8iU0VMRUNUIFRBQkxFX05BTUUsIFRBQkxFX1RZUEUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuVEFCTEVTIFdIRVJFIFRBQkxFX1NDSEVNQSA9IERBVEFCQVNFKCkgT1JERVIgQlkgVEFCTEVfTkFNRSI6IlNIT1cgVEFCTEVTIik7fWZ1bmN0aW9uCmNvdW50X3RhYmxlcygkayl7JEk9YXJyYXkoKTtmb3JlYWNoKCRrCmFzJGwpJElbJGxdPWNvdW50KGdldF92YWxzKCJTSE9XIFRBQkxFUyBJTiAiLmlkZl9lc2NhcGUoJGwpKSk7cmV0dXJuJEk7fWZ1bmN0aW9uCnRhYmxlX3N0YXR1cygkRD0iIiwkU2M9ZmFsc2UpeyRJPWFycmF5KCk7Zm9yZWFjaChnZXRfcm93cygkU2MmJm1pbl92ZXJzaW9uKDUpPyJTRUxFQ1QgVEFCTEVfTkFNRSBBUyBOYW1lLCBFTkdJTkUgQVMgRW5naW5lLCBUQUJMRV9DT01NRU5UIEFTIENvbW1lbnQgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuVEFCTEVTIFdIRVJFIFRBQkxFX1NDSEVNQSA9IERBVEFCQVNFKCkgIi4oJEQhPSIiPyJBTkQgVEFCTEVfTkFNRSA9ICIucSgkRCk6Ik9SREVSIEJZIE5hbWUiKToiU0hPVyBUQUJMRSBTVEFUVVMiLigkRCE9IiI/IiBMSUtFICIucShhZGRjc2xhc2hlcygkRCwiJV9cXCIpKToiIikpYXMkSil7aWYoJEpbIkVuZ2luZSJdPT0iSW5ub0RCIikkSlsiQ29tbWVudCJdPXByZWdfcmVwbGFjZSgnfig/OiguKyk7ICk/SW5ub0RCIGZyZWU6IC4qficsJ1wxJywkSlsiQ29tbWVudCJdKTtpZighaXNzZXQoJEpbIkVuZ2luZSJdKSkkSlsiQ29tbWVudCJdPSIiO2lmKCREIT0iIilyZXR1cm4kSjskSVskSlsiTmFtZSJdXT0kSjt9cmV0dXJuJEk7fWZ1bmN0aW9uCmlzX3ZpZXcoJFIpe3JldHVybiRSWyJFbmdpbmUiXT09PW51bGw7fWZ1bmN0aW9uCmZrX3N1cHBvcnQoJFIpe3JldHVybgpwcmVnX21hdGNoKCd+SW5ub0RCfElCTURCMkl+aScsJFJbIkVuZ2luZSJdKXx8KHByZWdfbWF0Y2goJ35OREJ+aScsJFJbIkVuZ2luZSJdKSYmbWluX3ZlcnNpb24oNS42KSk7fWZ1bmN0aW9uCmZpZWxkcygkUSl7JEk9YXJyYXkoKTtmb3JlYWNoKGdldF9yb3dzKCJTSE9XIEZVTEwgQ09MVU1OUyBGUk9NICIudGFibGUoJFEpKWFzJEope3ByZWdfbWF0Y2goJ35eKFteKCBdKykoPzpcKCguKylcKSk/KCB1bnNpZ25lZCk/KCB6ZXJvZmlsbCk/JH4nLCRKWyJUeXBlIl0sJEMpOyRJWyRKWyJGaWVsZCJdXT1hcnJheSgiZmllbGQiPT4kSlsiRmllbGQiXSwiZnVsbF90eXBlIj0+JEpbIlR5cGUiXSwidHlwZSI9PiRDWzFdLCJsZW5ndGgiPT4kQ1syXSwidW5zaWduZWQiPT5sdHJpbSgkQ1szXS4kQ1s0XSksImRlZmF1bHQiPT4oJEpbIkRlZmF1bHQiXSE9IiJ8fHByZWdfbWF0Y2goIn5jaGFyfHNldH4iLCRDWzFdKT8ocHJlZ19tYXRjaCgnfnRleHR+JywkQ1sxXSk/c3RyaXBzbGFzaGVzKHByZWdfcmVwbGFjZSgifl4nKC4qKSdcJH4iLCdcMScsJEpbIkRlZmF1bHQiXSkpOiRKWyJEZWZhdWx0Il0pOm51bGwpLCJudWxsIj0+KCRKWyJOdWxsIl09PSJZRVMiKSwiYXV0b19pbmNyZW1lbnQiPT4oJEpbIkV4dHJhIl09PSJhdXRvX2luY3JlbWVudCIpLCJvbl91cGRhdGUiPT4ocHJlZ19tYXRjaCgnfl5vbiB1cGRhdGUgKC4rKX5pJywkSlsiRXh0cmEiXSwkQyk/JENbMV06IiIpLCJjb2xsYXRpb24iPT4kSlsiQ29sbGF0aW9uIl0sInByaXZpbGVnZXMiPT5hcnJheV9mbGlwKHByZWdfc3BsaXQoJ34sICp+JywkSlsiUHJpdmlsZWdlcyJdKSksImNvbW1lbnQiPT4kSlsiQ29tbWVudCJdLCJwcmltYXJ5Ij0+KCRKWyJLZXkiXT09IlBSSSIpLCJnZW5lcmF0ZWQiPT5wcmVnX21hdGNoKCd+XihWSVJUVUFMfFBFUlNJU1RFTlR8U1RPUkVEKX4nLCRKWyJFeHRyYSJdKSwpO31yZXR1cm4kSTt9ZnVuY3Rpb24KaW5kZXhlcygkUSwkaD1udWxsKXskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNIT1cgSU5ERVggRlJPTSAiLnRhYmxlKCRRKSwkaClhcyRKKXskRD0kSlsiS2V5X25hbWUiXTskSVskRF1bInR5cGUiXT0oJEQ9PSJQUklNQVJZIj8iUFJJTUFSWSI6KCRKWyJJbmRleF90eXBlIl09PSJGVUxMVEVYVCI/IkZVTExURVhUIjooJEpbIk5vbl91bmlxdWUiXT8oJEpbIkluZGV4X3R5cGUiXT09IlNQQVRJQUwiPyJTUEFUSUFMIjoiSU5ERVgiKToiVU5JUVVFIikpKTskSVskRF1bImNvbHVtbnMiXVtdPSRKWyJDb2x1bW5fbmFtZSJdOyRJWyREXVsibGVuZ3RocyJdW109KCRKWyJJbmRleF90eXBlIl09PSJTUEFUSUFMIj9udWxsOiRKWyJTdWJfcGFydCJdKTskSVskRF1bImRlc2NzIl1bXT1udWxsO31yZXR1cm4kSTt9ZnVuY3Rpb24KZm9yZWlnbl9rZXlzKCRRKXtnbG9iYWwkZywkcGY7c3RhdGljJFpmPScoPzpgKD86W15gXXxgYCkrYHwiKD86W14iXXwiIikrIiknOyRJPWFycmF5KCk7JEliPSRnLT5yZXN1bHQoIlNIT1cgQ1JFQVRFIFRBQkxFICIudGFibGUoJFEpLDEpO2lmKCRJYil7cHJlZ19tYXRjaF9hbGwoIn5DT05TVFJBSU5UICgkWmYpIEZPUkVJR04gS0VZID9cXCgoKD86JFpmLD8gPykrKVxcKSBSRUZFUkVOQ0VTICgkWmYpKD86XFwuKCRaZikpPyBcXCgoKD86JFpmLD8gPykrKVxcKSg/OiBPTiBERUxFVEUgKCRwZikpPyg/OiBPTiBVUERBVEUgKCRwZikpP34iLCRJYiwkQ2UsUFJFR19TRVRfT1JERVIpO2ZvcmVhY2goJENlCmFzJEMpe3ByZWdfbWF0Y2hfYWxsKCJ+JFpmfiIsJENbMl0sJHZoKTtwcmVnX21hdGNoX2FsbCgifiRaZn4iLCRDWzVdLCRXaCk7JElbaWRmX3VuZXNjYXBlKCRDWzFdKV09YXJyYXkoImRiIj0+aWRmX3VuZXNjYXBlKCRDWzRdIT0iIj8kQ1szXTokQ1s0XSksInRhYmxlIj0+aWRmX3VuZXNjYXBlKCRDWzRdIT0iIj8kQ1s0XTokQ1szXSksInNvdXJjZSI9PmFycmF5X21hcCgnaWRmX3VuZXNjYXBlJywkdmhbMF0pLCJ0YXJnZXQiPT5hcnJheV9tYXAoJ2lkZl91bmVzY2FwZScsJFdoWzBdKSwib25fZGVsZXRlIj0+KCRDWzZdPyRDWzZdOiJSRVNUUklDVCIpLCJvbl91cGRhdGUiPT4oJENbN10/JENbN106IlJFU1RSSUNUIiksKTt9fXJldHVybiRJO31mdW5jdGlvbgp2aWV3KCREKXtnbG9iYWwkZztyZXR1cm4KYXJyYXkoInNlbGVjdCI9PnByZWdfcmVwbGFjZSgnfl4oPzpbXmBdfGBbXmBdKmApKlxzK0FTXHMrfmlzVScsJycsJGctPnJlc3VsdCgiU0hPVyBDUkVBVEUgVklFVyAiLnRhYmxlKCREKSwxKSkpO31mdW5jdGlvbgpjb2xsYXRpb25zKCl7JEk9YXJyYXkoKTtmb3JlYWNoKGdldF9yb3dzKCJTSE9XIENPTExBVElPTiIpYXMkSil7aWYoJEpbIkRlZmF1bHQiXSkkSVskSlsiQ2hhcnNldCJdXVstMV09JEpbIkNvbGxhdGlvbiJdO2Vsc2UkSVskSlsiQ2hhcnNldCJdXVtdPSRKWyJDb2xsYXRpb24iXTt9a3NvcnQoJEkpO2ZvcmVhY2goJEkKYXMkej0+JFgpYXNvcnQoJElbJHpdKTtyZXR1cm4kSTt9ZnVuY3Rpb24KaW5mb3JtYXRpb25fc2NoZW1hKCRsKXtyZXR1cm4obWluX3ZlcnNpb24oNSkmJiRsPT0iaW5mb3JtYXRpb25fc2NoZW1hIil8fChtaW5fdmVyc2lvbig1LjUpJiYkbD09InBlcmZvcm1hbmNlX3NjaGVtYSIpO31mdW5jdGlvbgplcnJvcigpe2dsb2JhbCRnO3JldHVybgpoKHByZWdfcmVwbGFjZSgnfl5Zb3UgaGF2ZSBhbiBlcnJvci4qc3ludGF4IHRvIHVzZX5VJywiU3ludGF4IGVycm9yIiwkZy0+ZXJyb3IpKTt9ZnVuY3Rpb24KY3JlYXRlX2RhdGFiYXNlKCRsLCRkKXtyZXR1cm4KcXVlcmllcygiQ1JFQVRFIERBVEFCQVNFICIuaWRmX2VzY2FwZSgkbCkuKCRkPyIgQ09MTEFURSAiLnEoJGQpOiIiKSk7fWZ1bmN0aW9uCmRyb3BfZGF0YWJhc2VzKCRrKXskST1hcHBseV9xdWVyaWVzKCJEUk9QIERBVEFCQVNFIiwkaywnaWRmX2VzY2FwZScpO3Jlc3RhcnRfc2Vzc2lvbigpO3NldF9zZXNzaW9uKCJkYnMiLG51bGwpO3JldHVybiRJO31mdW5jdGlvbgpyZW5hbWVfZGF0YWJhc2UoJEQsJGQpeyRJPWZhbHNlO2lmKGNyZWF0ZV9kYXRhYmFzZSgkRCwkZCkpeyRTPWFycmF5KCk7JFlpPWFycmF5KCk7Zm9yZWFjaCh0YWJsZXNfbGlzdCgpYXMkUT0+JFQpe2lmKCRUPT0nVklFVycpJFlpW109JFE7ZWxzZSRTW109JFE7fSRJPSghJFMmJiEkWWkpfHxtb3ZlX3RhYmxlcygkUywkWWksJEQpO2Ryb3BfZGF0YWJhc2VzKCRJP2FycmF5KERCKTphcnJheSgpKTt9cmV0dXJuJEk7fWZ1bmN0aW9uCmF1dG9faW5jcmVtZW50KCl7JExhPSIgUFJJTUFSWSBLRVkiO2lmKCRfR0VUWyJjcmVhdGUiXSE9IiImJiRfUE9TVFsiYXV0b19pbmNyZW1lbnRfY29sIl0pe2ZvcmVhY2goaW5kZXhlcygkX0dFVFsiY3JlYXRlIl0pYXMkdyl7aWYoaW5fYXJyYXkoJF9QT1NUWyJmaWVsZHMiXVskX1BPU1RbImF1dG9faW5jcmVtZW50X2NvbCJdXVsib3JpZyJdLCR3WyJjb2x1bW5zIl0sdHJ1ZSkpeyRMYT0iIjticmVhazt9aWYoJHdbInR5cGUiXT09IlBSSU1BUlkiKSRMYT0iIFVOSVFVRSI7fX1yZXR1cm4iIEFVVE9fSU5DUkVNRU5UJExhIjt9ZnVuY3Rpb24KYWx0ZXJfdGFibGUoJFEsJEQsJHAsJGZkLCRyYiwkeWMsJGQsJEthLCRUZil7JGM9YXJyYXkoKTtmb3JlYWNoKCRwCmFzJG8pJGNbXT0oJG9bMV0/KCRRIT0iIj8oJG9bMF0hPSIiPyJDSEFOR0UgIi5pZGZfZXNjYXBlKCRvWzBdKToiQUREIik6IiAiKS4iICIuaW1wbG9kZSgkb1sxXSkuKCRRIT0iIj8kb1syXToiIik6IkRST1AgIi5pZGZfZXNjYXBlKCRvWzBdKSk7JGM9YXJyYXlfbWVyZ2UoJGMsJGZkKTskTz0oJHJiIT09bnVsbD8iIENPTU1FTlQ9Ii5xKCRyYik6IiIpLigkeWM/IiBFTkdJTkU9Ii5xKCR5Yyk6IiIpLigkZD8iIENPTExBVEUgIi5xKCRkKToiIikuKCRLYSE9IiI/IiBBVVRPX0lOQ1JFTUVOVD0kS2EiOiIiKTtpZigkUT09IiIpcmV0dXJuCnF1ZXJpZXMoIkNSRUFURSBUQUJMRSAiLnRhYmxlKCREKS4iIChcbiIuaW1wbG9kZSgiLFxuIiwkYykuIlxuKSRPJFRmIik7aWYoJFEhPSREKSRjW109IlJFTkFNRSBUTyAiLnRhYmxlKCREKTtpZigkTykkY1tdPWx0cmltKCRPKTtyZXR1cm4oJGN8fCRUZj9xdWVyaWVzKCJBTFRFUiBUQUJMRSAiLnRhYmxlKCRRKS4iXG4iLmltcGxvZGUoIixcbiIsJGMpLiRUZik6dHJ1ZSk7fWZ1bmN0aW9uCmFsdGVyX2luZGV4ZXMoJFEsJGMpe2ZvcmVhY2goJGMKYXMkej0+JFgpJGNbJHpdPSgkWFsyXT09IkRST1AiPyJcbkRST1AgSU5ERVggIi5pZGZfZXNjYXBlKCRYWzFdKToiXG5BREQgJFhbMF0gIi4oJFhbMF09PSJQUklNQVJZIj8iS0VZICI6IiIpLigkWFsxXSE9IiI/aWRmX2VzY2FwZSgkWFsxXSkuIiAiOiIiKS4iKCIuaW1wbG9kZSgiLCAiLCRYWzJdKS4iKSIpO3JldHVybgpxdWVyaWVzKCJBTFRFUiBUQUJMRSAiLnRhYmxlKCRRKS5pbXBsb2RlKCIsIiwkYykpO31mdW5jdGlvbgp0cnVuY2F0ZV90YWJsZXMoJFMpe3JldHVybgphcHBseV9xdWVyaWVzKCJUUlVOQ0FURSBUQUJMRSIsJFMpO31mdW5jdGlvbgpkcm9wX3ZpZXdzKCRZaSl7cmV0dXJuCnF1ZXJpZXMoIkRST1AgVklFVyAiLmltcGxvZGUoIiwgIixhcnJheV9tYXAoJ3RhYmxlJywkWWkpKSk7fWZ1bmN0aW9uCmRyb3BfdGFibGVzKCRTKXtyZXR1cm4KcXVlcmllcygiRFJPUCBUQUJMRSAiLmltcGxvZGUoIiwgIixhcnJheV9tYXAoJ3RhYmxlJywkUykpKTt9ZnVuY3Rpb24KbW92ZV90YWJsZXMoJFMsJFlpLCRXaCl7Z2xvYmFsJGc7JEpnPWFycmF5KCk7Zm9yZWFjaCgkUwphcyRRKSRKZ1tdPXRhYmxlKCRRKS4iIFRPICIuaWRmX2VzY2FwZSgkV2gpLiIuIi50YWJsZSgkUSk7aWYoISRKZ3x8cXVlcmllcygiUkVOQU1FIFRBQkxFICIuaW1wbG9kZSgiLCAiLCRKZykpKXskWmI9YXJyYXkoKTtmb3JlYWNoKCRZaQphcyRRKSRaYlt0YWJsZSgkUSldPXZpZXcoJFEpOyRnLT5zZWxlY3RfZGIoJFdoKTskbD1pZGZfZXNjYXBlKERCKTtmb3JlYWNoKCRaYgphcyREPT4kWGkpe2lmKCFxdWVyaWVzKCJDUkVBVEUgVklFVyAkRCBBUyAiLnN0cl9yZXBsYWNlKCIgJGwuIiwiICIsJFhpWyJzZWxlY3QiXSkpfHwhcXVlcmllcygiRFJPUCBWSUVXICRsLiREIikpcmV0dXJuCmZhbHNlO31yZXR1cm4KdHJ1ZTt9cmV0dXJuCmZhbHNlO31mdW5jdGlvbgpjb3B5X3RhYmxlcygkUywkWWksJFdoKXtxdWVyaWVzKCJTRVQgc3FsX21vZGUgPSAnTk9fQVVUT19WQUxVRV9PTl9aRVJPJyIpO2ZvcmVhY2goJFMKYXMkUSl7JEQ9KCRXaD09REI/dGFibGUoImNvcHlfJFEiKTppZGZfZXNjYXBlKCRXaCkuIi4iLnRhYmxlKCRRKSk7aWYoKCRfUE9TVFsib3ZlcndyaXRlIl0mJiFxdWVyaWVzKCJcbkRST1AgVEFCTEUgSUYgRVhJU1RTICREIikpfHwhcXVlcmllcygiQ1JFQVRFIFRBQkxFICREIExJS0UgIi50YWJsZSgkUSkpfHwhcXVlcmllcygiSU5TRVJUIElOVE8gJEQgU0VMRUNUICogRlJPTSAiLnRhYmxlKCRRKSkpcmV0dXJuCmZhbHNlO2ZvcmVhY2goZ2V0X3Jvd3MoIlNIT1cgVFJJR0dFUlMgTElLRSAiLnEoYWRkY3NsYXNoZXMoJFEsIiVfXFwiKSkpYXMkSil7JHdpPSRKWyJUcmlnZ2VyIl07aWYoIXF1ZXJpZXMoIkNSRUFURSBUUklHR0VSICIuKCRXaD09REI/aWRmX2VzY2FwZSgiY29weV8kd2kiKTppZGZfZXNjYXBlKCRXaCkuIi4iLmlkZl9lc2NhcGUoJHdpKSkuIiAkSltUaW1pbmddICRKW0V2ZW50XSBPTiAkRCBGT1IgRUFDSCBST1dcbiRKW1N0YXRlbWVudF07IikpcmV0dXJuCmZhbHNlO319Zm9yZWFjaCgkWWkKYXMkUSl7JEQ9KCRXaD09REI/dGFibGUoImNvcHlfJFEiKTppZGZfZXNjYXBlKCRXaCkuIi4iLnRhYmxlKCRRKSk7JFhpPXZpZXcoJFEpO2lmKCgkX1BPU1RbIm92ZXJ3cml0ZSJdJiYhcXVlcmllcygiRFJPUCBWSUVXIElGIEVYSVNUUyAkRCIpKXx8IXF1ZXJpZXMoIkNSRUFURSBWSUVXICREIEFTICRYaVtzZWxlY3RdIikpcmV0dXJuCmZhbHNlO31yZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24KdHJpZ2dlcigkRCl7aWYoJEQ9PSIiKXJldHVybgphcnJheSgpOyRLPWdldF9yb3dzKCJTSE9XIFRSSUdHRVJTIFdIRVJFIGBUcmlnZ2VyYCA9ICIucSgkRCkpO3JldHVybgpyZXNldCgkSyk7fWZ1bmN0aW9uCnRyaWdnZXJzKCRRKXskST1hcnJheSgpO2ZvcmVhY2goZ2V0X3Jvd3MoIlNIT1cgVFJJR0dFUlMgTElLRSAiLnEoYWRkY3NsYXNoZXMoJFEsIiVfXFwiKSkpYXMkSikkSVskSlsiVHJpZ2dlciJdXT1hcnJheSgkSlsiVGltaW5nIl0sJEpbIkV2ZW50Il0pO3JldHVybiRJO31mdW5jdGlvbgp0cmlnZ2VyX29wdGlvbnMoKXtyZXR1cm4KYXJyYXkoIlRpbWluZyI9PmFycmF5KCJCRUZPUkUiLCJBRlRFUiIpLCJFdmVudCI9PmFycmF5KCJJTlNFUlQiLCJVUERBVEUiLCJERUxFVEUiKSwiVHlwZSI9PmFycmF5KCJGT1IgRUFDSCBST1ciKSwpO31mdW5jdGlvbgpyb3V0aW5lKCRELCRUKXtnbG9iYWwkZywkX2MsJFRkLCRVOyRCYT1hcnJheSgiYm9vbCIsImJvb2xlYW4iLCJpbnRlZ2VyIiwiZG91YmxlIHByZWNpc2lvbiIsInJlYWwiLCJkZWMiLCJudW1lcmljIiwiZml4ZWQiLCJuYXRpb25hbCBjaGFyIiwibmF0aW9uYWwgdmFyY2hhciIpOyR3aD0iKD86XFxzfC9cXCpbXHNcU10qP1xcKi98KD86I3wtLSApW15cbl0qXG4/fC0tXHI/XG4pIjskQWk9IigoIi5pbXBsb2RlKCJ8IixhcnJheV9tZXJnZShhcnJheV9rZXlzKCRVKSwkQmEpKS4iKVxcYig/OlxccypcXCgoKD86W14nXCIpXXwkX2MpKyspXFwpKT9cXHMqKHplcm9maWxsXFxzKik/KHVuc2lnbmVkKD86XFxzK3plcm9maWxsKT8pPykoPzpcXHMqKD86Q0hBUlNFVHxDSEFSQUNURVJcXHMrU0VUKVxccypbJ1wiXT8oW14nXCJcXHMsXSspWydcIl0/KT8iOyRaZj0iJHdoKigiLigkVD09IkZVTkNUSU9OIj8iIjokVGQpLiIpP1xccyooPzpgKCg/OlteYF18YGApKilgXFxzKnxcXGIoXFxTKylcXHMrKSRBaSI7JGk9JGctPnJlc3VsdCgiU0hPVyBDUkVBVEUgJFQgIi5pZGZfZXNjYXBlKCREKSwyKTtwcmVnX21hdGNoKCJ+XFwoKCg/OiRaZlxccyosPykqKVxcKVxccyoiLigkVD09IkZVTkNUSU9OIj8iUkVUVVJOU1xccyskQWlcXHMrIjoiIikuIiguKil+aXMiLCRpLCRDKTskcD1hcnJheSgpO3ByZWdfbWF0Y2hfYWxsKCJ+JFpmXFxzKiw/fmlzIiwkQ1sxXSwkQ2UsUFJFR19TRVRfT1JERVIpO2ZvcmVhY2goJENlCmFzJE5mKSRwW109YXJyYXkoImZpZWxkIj0+c3RyX3JlcGxhY2UoImBgIiwiYCIsJE5mWzJdKS4kTmZbM10sInR5cGUiPT5zdHJ0b2xvd2VyKCROZls1XSksImxlbmd0aCI9PnByZWdfcmVwbGFjZV9jYWxsYmFjaygifiRfY35zIiwnbm9ybWFsaXplX2VudW0nLCROZls2XSksInVuc2lnbmVkIj0+c3RydG9sb3dlcihwcmVnX3JlcGxhY2UoJ35ccyt+JywnICcsdHJpbSgiJE5mWzhdICROZls3XSIpKSksIm51bGwiPT4xLCJmdWxsX3R5cGUiPT4kTmZbNF0sImlub3V0Ij0+c3RydG91cHBlcigkTmZbMV0pLCJjb2xsYXRpb24iPT5zdHJ0b2xvd2VyKCROZls5XSksKTtpZigkVCE9IkZVTkNUSU9OIilyZXR1cm4KYXJyYXkoImZpZWxkcyI9PiRwLCJkZWZpbml0aW9uIj0+JENbMTFdKTtyZXR1cm4KYXJyYXkoImZpZWxkcyI9PiRwLCJyZXR1cm5zIj0+YXJyYXkoInR5cGUiPT4kQ1sxMl0sImxlbmd0aCI9PiRDWzEzXSwidW5zaWduZWQiPT4kQ1sxNV0sImNvbGxhdGlvbiI9PiRDWzE2XSksImRlZmluaXRpb24iPT4kQ1sxN10sImxhbmd1YWdlIj0+IlNRTCIsKTt9ZnVuY3Rpb24Kcm91dGluZXMoKXtyZXR1cm4KZ2V0X3Jvd3MoIlNFTEVDVCBST1VUSU5FX05BTUUgQVMgU1BFQ0lGSUNfTkFNRSwgUk9VVElORV9OQU1FLCBST1VUSU5FX1RZUEUsIERURF9JREVOVElGSUVSIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLlJPVVRJTkVTIFdIRVJFIFJPVVRJTkVfU0NIRU1BID0gIi5xKERCKSk7fWZ1bmN0aW9uCnJvdXRpbmVfbGFuZ3VhZ2VzKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCnJvdXRpbmVfaWQoJEQsJEope3JldHVybgppZGZfZXNjYXBlKCREKTt9ZnVuY3Rpb24KbGFzdF9pZCgpe2dsb2JhbCRnO3JldHVybiRnLT5yZXN1bHQoIlNFTEVDVCBMQVNUX0lOU0VSVF9JRCgpIik7fWZ1bmN0aW9uCmV4cGxhaW4oJGcsJEcpe3JldHVybiRnLT5xdWVyeSgiRVhQTEFJTiAiLihtaW5fdmVyc2lvbig1LjEpJiYhbWluX3ZlcnNpb24oNS43KT8iUEFSVElUSU9OUyAiOiIiKS4kRyk7fWZ1bmN0aW9uCmZvdW5kX3Jvd3MoJFIsJFope3JldHVybigkWnx8JFJbIkVuZ2luZSJdIT0iSW5ub0RCIj9udWxsOiRSWyJSb3dzIl0pO31mdW5jdGlvbgp0eXBlcygpe3JldHVybgphcnJheSgpO31mdW5jdGlvbgpzY2hlbWFzKCl7cmV0dXJuCmFycmF5KCk7fWZ1bmN0aW9uCmdldF9zY2hlbWEoKXtyZXR1cm4iIjt9ZnVuY3Rpb24Kc2V0X3NjaGVtYSgkWmcsJGg9bnVsbCl7cmV0dXJuCnRydWU7fWZ1bmN0aW9uCmNyZWF0ZV9zcWwoJFEsJEthLCRIaCl7Z2xvYmFsJGc7JEk9JGctPnJlc3VsdCgiU0hPVyBDUkVBVEUgVEFCTEUgIi50YWJsZSgkUSksMSk7aWYoISRLYSkkST1wcmVnX3JlcGxhY2UoJ34gQVVUT19JTkNSRU1FTlQ9XGQrficsJycsJEkpO3JldHVybiRJO31mdW5jdGlvbgp0cnVuY2F0ZV9zcWwoJFEpe3JldHVybiJUUlVOQ0FURSAiLnRhYmxlKCRRKTt9ZnVuY3Rpb24KdXNlX3NxbCgkail7cmV0dXJuIlVTRSAiLmlkZl9lc2NhcGUoJGopO31mdW5jdGlvbgp0cmlnZ2VyX3NxbCgkUSl7JEk9IiI7Zm9yZWFjaChnZXRfcm93cygiU0hPVyBUUklHR0VSUyBMSUtFICIucShhZGRjc2xhc2hlcygkUSwiJV9cXCIpKSxudWxsLCItLSAiKWFzJEopJEkuPSJcbkNSRUFURSBUUklHR0VSICIuaWRmX2VzY2FwZSgkSlsiVHJpZ2dlciJdKS4iICRKW1RpbWluZ10gJEpbRXZlbnRdIE9OICIudGFibGUoJEpbIlRhYmxlIl0pLiIgRk9SIEVBQ0ggUk9XXG4kSltTdGF0ZW1lbnRdOztcbiI7cmV0dXJuJEk7fWZ1bmN0aW9uCnNob3dfdmFyaWFibGVzKCl7cmV0dXJuCmdldF9rZXlfdmFscygiU0hPVyBWQVJJQUJMRVMiKTt9ZnVuY3Rpb24KcHJvY2Vzc19saXN0KCl7cmV0dXJuCmdldF9yb3dzKCJTSE9XIEZVTEwgUFJPQ0VTU0xJU1QiKTt9ZnVuY3Rpb24Kc2hvd19zdGF0dXMoKXtyZXR1cm4KZ2V0X2tleV92YWxzKCJTSE9XIFNUQVRVUyIpO31mdW5jdGlvbgpjb252ZXJ0X2ZpZWxkKCRvKXtpZihwcmVnX21hdGNoKCJ+YmluYXJ5fiIsJG9bInR5cGUiXSkpcmV0dXJuIkhFWCgiLmlkZl9lc2NhcGUoJG9bImZpZWxkIl0pLiIpIjtpZigkb1sidHlwZSJdPT0iYml0IilyZXR1cm4iQklOKCIuaWRmX2VzY2FwZSgkb1siZmllbGQiXSkuIiArIDApIjtpZihwcmVnX21hdGNoKCJ+Z2VvbWV0cnl8cG9pbnR8bGluZXN0cmluZ3xwb2x5Z29ufiIsJG9bInR5cGUiXSkpcmV0dXJuKG1pbl92ZXJzaW9uKDgpPyJTVF8iOiIiKS4iQXNXS1QoIi5pZGZfZXNjYXBlKCRvWyJmaWVsZCJdKS4iKSI7fWZ1bmN0aW9uCnVuY29udmVydF9maWVsZCgkbywkSSl7aWYocHJlZ19tYXRjaCgifmJpbmFyeX4iLCRvWyJ0eXBlIl0pKSRJPSJVTkhFWCgkSSkiO2lmKCRvWyJ0eXBlIl09PSJiaXQiKSRJPSJDT05WKCRJLCAyLCAxMCkgKyAwIjtpZihwcmVnX21hdGNoKCJ+Z2VvbWV0cnl8cG9pbnR8bGluZXN0cmluZ3xwb2x5Z29ufiIsJG9bInR5cGUiXSkpJEk9KG1pbl92ZXJzaW9uKDgpPyJTVF8iOiIiKS4iR2VvbUZyb21UZXh0KCRJLCBTUklEKCRvW2ZpZWxkXSkpIjtyZXR1cm4kSTt9ZnVuY3Rpb24Kc3VwcG9ydCgkVGMpe3JldHVybiFwcmVnX21hdGNoKCJ+c2NoZW1lfHNlcXVlbmNlfHR5cGV8dmlld190cmlnZ2VyfG1hdGVyaWFsaXplZHZpZXciLihtaW5fdmVyc2lvbig4KT8iIjoifGRlc2NpZHgiLihtaW5fdmVyc2lvbig1LjEpPyIiOiJ8ZXZlbnR8cGFydGl0aW9uaW5nIi4obWluX3ZlcnNpb24oNSk/IiI6Inxyb3V0aW5lfHRyaWdnZXJ8dmlldyIpKSkuIn4iLCRUYyk7fWZ1bmN0aW9uCmtpbGxfcHJvY2VzcygkWCl7cmV0dXJuCnF1ZXJpZXMoIktJTEwgIi5udW1iZXIoJFgpKTt9ZnVuY3Rpb24KY29ubmVjdGlvbl9pZCgpe3JldHVybiJTRUxFQ1QgQ09OTkVDVElPTl9JRCgpIjt9ZnVuY3Rpb24KbWF4X2Nvbm5lY3Rpb25zKCl7Z2xvYmFsJGc7cmV0dXJuJGctPnJlc3VsdCgiU0VMRUNUIEBAbWF4X2Nvbm5lY3Rpb25zIik7fWZ1bmN0aW9uCmRyaXZlcl9jb25maWcoKXskVT1hcnJheSgpOyRHaD1hcnJheSgpO2ZvcmVhY2goYXJyYXkoJ051bWJlcnMnPT5hcnJheSgidGlueWludCI9PjMsInNtYWxsaW50Ij0+NSwibWVkaXVtaW50Ij0+OCwiaW50Ij0+MTAsImJpZ2ludCI9PjIwLCJkZWNpbWFsIj0+NjYsImZsb2F0Ij0+MTIsImRvdWJsZSI9PjIxKSwnRGF0ZSBhbmQgdGltZSc9PmFycmF5KCJkYXRlIj0+MTAsImRhdGV0aW1lIj0+MTksInRpbWVzdGFtcCI9PjE5LCJ0aW1lIj0+MTAsInllYXIiPT40KSwnU3RyaW5ncyc9PmFycmF5KCJjaGFyIj0+MjU1LCJ2YXJjaGFyIj0+NjU1MzUsInRpbnl0ZXh0Ij0+MjU1LCJ0ZXh0Ij0+NjU1MzUsIm1lZGl1bXRleHQiPT4xNjc3NzIxNSwibG9uZ3RleHQiPT40Mjk0OTY3Mjk1KSwnTGlzdHMnPT5hcnJheSgiZW51bSI9PjY1NTM1LCJzZXQiPT42NCksJ0JpbmFyeSc9PmFycmF5KCJiaXQiPT4yMCwiYmluYXJ5Ij0+MjU1LCJ2YXJiaW5hcnkiPT42NTUzNSwidGlueWJsb2IiPT4yNTUsImJsb2IiPT42NTUzNSwibWVkaXVtYmxvYiI9PjE2Nzc3MjE1LCJsb25nYmxvYiI9PjQyOTQ5NjcyOTUpLCdHZW9tZXRyeSc9PmFycmF5KCJnZW9tZXRyeSI9PjAsInBvaW50Ij0+MCwibGluZXN0cmluZyI9PjAsInBvbHlnb24iPT4wLCJtdWx0aXBvaW50Ij0+MCwibXVsdGlsaW5lc3RyaW5nIj0+MCwibXVsdGlwb2x5Z29uIj0+MCwiZ2VvbWV0cnljb2xsZWN0aW9uIj0+MCksKWFzJHo9PiRYKXskVSs9JFg7JEdoWyR6XT1hcnJheV9rZXlzKCRYKTt9cmV0dXJuCmFycmF5KCdwb3NzaWJsZV9kcml2ZXJzJz0+YXJyYXkoIk15U1FMaSIsIk15U1FMIiwiUERPX015U1FMIiksJ2p1c2gnPT4ic3FsIiwndHlwZXMnPT4kVSwnc3RydWN0dXJlZF90eXBlcyc9PiRHaCwndW5zaWduZWQnPT5hcnJheSgidW5zaWduZWQiLCJ6ZXJvZmlsbCIsInVuc2lnbmVkIHplcm9maWxsIiksJ29wZXJhdG9ycyc9PmFycmF5KCI9IiwiPCIsIj4iLCI8PSIsIj49IiwiIT0iLCJMSUtFIiwiTElLRSAlJSIsIlJFR0VYUCIsIklOIiwiRklORF9JTl9TRVQiLCJJUyBOVUxMIiwiTk9UIExJS0UiLCJOT1QgUkVHRVhQIiwiTk9UIElOIiwiSVMgTk9UIE5VTEwiLCJTUUwiKSwnZnVuY3Rpb25zJz0+YXJyYXkoImNoYXJfbGVuZ3RoIiwiZGF0ZSIsImZyb21fdW5peHRpbWUiLCJsb3dlciIsInJvdW5kIiwiZmxvb3IiLCJjZWlsIiwic2VjX3RvX3RpbWUiLCJ0aW1lX3RvX3NlYyIsInVwcGVyIiksJ2dyb3VwaW5nJz0+YXJyYXkoImF2ZyIsImNvdW50IiwiY291bnQgZGlzdGluY3QiLCJncm91cF9jb25jYXQiLCJtYXgiLCJtaW4iLCJzdW0iKSwnZWRpdF9mdW5jdGlvbnMnPT5hcnJheShhcnJheSgiY2hhciI9PiJtZDUvc2hhMS9wYXNzd29yZC9lbmNyeXB0L3V1aWQiLCJiaW5hcnkiPT4ibWQ1L3NoYTEiLCJkYXRlfHRpbWUiPT4ibm93IiwpLGFycmF5KG51bWJlcl90eXBlKCk9PiIrLy0iLCJkYXRlIj0+IisgaW50ZXJ2YWwvLSBpbnRlcnZhbCIsInRpbWUiPT4iYWRkdGltZS9zdWJ0aW1lIiwiY2hhcnx0ZXh0Ij0+ImNvbmNhdCIsKSksKTt9fSR2Yj1kcml2ZXJfY29uZmlnKCk7JGhnPSR2YlsncG9zc2libGVfZHJpdmVycyddOyR5PSR2YlsnanVzaCddOyRVPSR2YlsndHlwZXMnXTskR2g9JHZiWydzdHJ1Y3R1cmVkX3R5cGVzJ107JEhpPSR2YlsndW5zaWduZWQnXTskdWY9JHZiWydvcGVyYXRvcnMnXTskbmQ9JHZiWydmdW5jdGlvbnMnXTskdGQ9JHZiWydncm91cGluZyddOyRxYz0kdmJbJ2VkaXRfZnVuY3Rpb25zJ107aWYoJGItPm9wZXJhdG9ycz09PW51bGwpJGItPm9wZXJhdG9ycz0kdWY7ZGVmaW5lKCJTRVJWRVIiLCRfR0VUW0RSSVZFUl0pO2RlZmluZSgiREIiLCRfR0VUWyJkYiJdKTtkZWZpbmUoIk1FIixwcmVnX3JlcGxhY2UoJ35cPy4qficsJycscmVsYXRpdmVfdXJpKCkpLic/Jy4oc2lkKCk/U0lELicmJzonJykuKFNFUlZFUiE9PW51bGw/RFJJVkVSLiI9Ii51cmxlbmNvZGUoU0VSVkVSKS4nJic6JycpLihpc3NldCgkX0dFVFsidXNlcm5hbWUiXSk/InVzZXJuYW1lPSIudXJsZW5jb2RlKCRfR0VUWyJ1c2VybmFtZSJdKS4nJic6JycpLihEQiE9IiI/J2RiPScudXJsZW5jb2RlKERCKS4nJicuKGlzc2V0KCRfR0VUWyJucyJdKT8ibnM9Ii51cmxlbmNvZGUoJF9HRVRbIm5zIl0pLiImIjoiIik6JycpKTskaWE9IjQuOC4xIjtmdW5jdGlvbgpwYWdlX2hlYWRlcigkZ2ksJG49IiIsJFVhPWFycmF5KCksJGhpPSIiKXtnbG9iYWwkY2EsJGlhLCRiLCRpYywkeTtwYWdlX2hlYWRlcnMoKTtpZihpc19hamF4KCkmJiRuKXtwYWdlX21lc3NhZ2VzKCRuKTtleGl0O30kaWk9JGdpLigkaGkhPSIiPyI6ICRoaSI6IiIpOyRqaT1zdHJpcF90YWdzKCRpaS4oU0VSVkVSIT0iIiYmU0VSVkVSIT0ibG9jYWxob3N0Ij9oKCIgLSAiLlNFUlZFUik6IiIpLiIgLSAiLiRiLT5uYW1lKCkpO2VjaG8nPCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIiBkaXI9Imx0ciI+CjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KPG1ldGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4Ij4KPHRpdGxlPicsJGppLCc8L3RpdGxlPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLGgocHJlZ19yZXBsYWNlKCJ+XFw/Lip+IiwiIixNRSkuIj9maWxlPWRlZmF1bHQuY3NzJnZlcnNpb249NC44LjEiKSwnIj4KJyxzY3JpcHRfc3JjKHByZWdfcmVwbGFjZSgiflxcPy4qfiIsIiIsTUUpLiI/ZmlsZT1mdW5jdGlvbnMuanMmdmVyc2lvbj00LjguMSIpO2lmKCRiLT5oZWFkKCkpe2VjaG8nPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9IicsaChwcmVnX3JlcGxhY2UoIn5cXD8uKn4iLCIiLE1FKS4iP2ZpbGU9ZmF2aWNvbi5pY28mdmVyc2lvbj00LjguMSIpLCciPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9IicsaChwcmVnX3JlcGxhY2UoIn5cXD8uKn4iLCIiLE1FKS4iP2ZpbGU9ZmF2aWNvbi5pY28mdmVyc2lvbj00LjguMSIpLCciPgonO2ZvcmVhY2goJGItPmNzcygpYXMkTWIpe2VjaG8nPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJyxoKCRNYiksJyI+Cic7fX1lY2hvJwo8Ym9keSBjbGFzcz0ibHRyIG5vanMiPgonOyRxPWdldF90ZW1wX2RpcigpLiIvYWRtaW5lci52ZXJzaW9uIjtpZighJF9DT09LSUVbImFkbWluZXJfdmVyc2lvbiJdJiZmdW5jdGlvbl9leGlzdHMoJ29wZW5zc2xfdmVyaWZ5JykmJmZpbGVfZXhpc3RzKCRxKSYmZmlsZW10aW1lKCRxKSs4NjQwMD50aW1lKCkpeyRXaT11bnNlcmlhbGl6ZShmaWxlX2dldF9jb250ZW50cygkcSkpOyR0Zz0iLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3cVdPVnVGNXV3Ny8rWjcwZGpvSwpSbEhJWkZaUE8wdVlSZXpxOTArN0FtaytGRE5kN0trTDVlRHZlK3ZIUkpCTEFzekYvN1hLWGUxMXh3bGlJc0ZzCkRGV1Fsc0FCVlpCM29pc0tDQkV1STcxSjRrUEg4ZEtHRVdSOWpESEZ3M2NXbW9IM1BtcUltWDZGSVNXYkczQjgKaDdGSXgzakVhdzVja1ZQVlRlbzVKUm0vMURaekp4anlEZW5YdkJRLzZvOURnWktlTkRneHdLekgrc3c5L1lDTwpqSG5xMWNGcE9JSVN6QVJsckhNYS80M1lmZU5SQW0vdHNCWGpTeGVtYkJQbzdhUVpMQVdIbWFqNStLMTlIMTBCCm5DcHo5WSsrY2lwa1ZFaUtSR2loNFpFdmpvRnlzRU9kUkxqNldpRC91VU5reTR4R2VBNkxhSnFoNVhwa0ZrY1EKZlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCiI7aWYob3BlbnNzbF92ZXJpZnkoJFdpWyJ2ZXJzaW9uIl0sYmFzZTY0X2RlY29kZSgkV2lbInNpZ25hdHVyZSJdKSwkdGcpPT0xKSRfQ09PS0lFWyJhZG1pbmVyX3ZlcnNpb24iXT0kV2lbInZlcnNpb24iXTt9ZWNobyc8c2NyaXB0Jyxub25jZSgpLCc+Cm1peGluKGRvY3VtZW50LmJvZHksIHtvbmtleWRvd246IGJvZHlLZXlkb3duLCBvbmNsaWNrOiBib2R5Q2xpY2snLChpc3NldCgkX0NPT0tJRVsiYWRtaW5lcl92ZXJzaW9uIl0pPyIiOiIsIG9ubG9hZDogcGFydGlhbCh2ZXJpZnlWZXJzaW9uLCAnJGlhJywgJyIuanNfZXNjYXBlKE1FKS4iJywgJyIuZ2V0X3Rva2VuKCkuIicpIik7Pz59KTsKZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgPSBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZS5yZXBsYWNlKC8gbm9qcy8sICcganMnKTsKdmFyIG9mZmxpbmVNZXNzYWdlID0gJzw/cGhwIGVjaG8KanNfZXNjYXBlKCdZb3UgYXJlIG9mZmxpbmUuJyksJ1wnOwp2YXIgdGhvdXNhbmRzU2VwYXJhdG9yID0gXCcnLGpzX2VzY2FwZSgnLCcpLCdcJzsKPC9zY3JpcHQ+Cgo8ZGl2IGlkPSJoZWxwIiBjbGFzcz0ianVzaC0nLCR5LCcganNvbmx5IGhpZGRlbiI+PC9kaXY+Cicsc2NyaXB0KCJtaXhpbihxcygnI2hlbHAnKSwge29ubW91c2VvdmVyOiBmdW5jdGlvbiAoKSB7IGhlbHBPcGVuID0gMTsgfSwgb25tb3VzZW91dDogaGVscE1vdXNlb3V0fSk7IiksJwo8ZGl2IGlkPSJjb250ZW50Ij4KJztpZigkVWEhPT1udWxsKXskQT1zdWJzdHIocHJlZ19yZXBsYWNlKCd+XGIodXNlcm5hbWV8ZGJ8bnMpPVteJl0qJn4nLCcnLE1FKSwwLC0xKTtlY2hvJzxwIGlkPSJicmVhZGNydW1iIj48YSBocmVmPSInLmgoJEE/JEE6Ii4iKS4nIj4nLiRpY1tEUklWRVJdLic8L2E+ICZyYXF1bzsgJzskQT1zdWJzdHIocHJlZ19yZXBsYWNlKCd+XGIoZGJ8bnMpPVteJl0qJn4nLCcnLE1FKSwwLC0xKTskTT0kYi0+c2VydmVyTmFtZShTRVJWRVIpOyRNPSgkTSE9IiI/JE06J1NlcnZlcicpO2lmKCRVYT09PWZhbHNlKWVjaG8iJE1cbiI7ZWxzZXtlY2hvIjxhIGhyZWY9JyIuaCgkQSkuIicgYWNjZXNza2V5PScxJyB0aXRsZT0nQWx0K1NoaWZ0KzEnPiRNPC9hPiAmcmFxdW87ICI7aWYoJF9HRVRbIm5zIl0hPSIifHwoREIhPSIiJiZpc19hcnJheSgkVWEpKSllY2hvJzxhIGhyZWY9IicuaCgkQS4iJmRiPSIudXJsZW5jb2RlKERCKS4oc3VwcG9ydCgic2NoZW1lIik/IiZucz0iOiIiKSkuJyI+Jy5oKERCKS4nPC9hPiAmcmFxdW87ICc7aWYoaXNfYXJyYXkoJFVhKSl7aWYoJF9HRVRbIm5zIl0hPSIiKWVjaG8nPGEgaHJlZj0iJy5oKHN1YnN0cihNRSwwLC0xKSkuJyI+Jy5oKCRfR0VUWyJucyJdKS4nPC9hPiAmcmFxdW87ICc7Zm9yZWFjaCgkVWEKYXMkej0+JFgpeyRiYz0oaXNfYXJyYXkoJFgpPyRYWzFdOmgoJFgpKTtpZigkYmMhPSIiKWVjaG8iPGEgaHJlZj0nIi5oKE1FLiIkej0iKS51cmxlbmNvZGUoaXNfYXJyYXkoJFgpPyRYWzBdOiRYKS4iJz4kYmM8L2E+ICZyYXF1bzsgIjt9fWVjaG8iJGdpXG4iO319ZWNobyI8aDI+JGlpPC9oMj5cbiIsIjxkaXYgaWQ9J2FqYXhzdGF0dXMnIGNsYXNzPSdqc29ubHkgaGlkZGVuJz48L2Rpdj5cbiI7cmVzdGFydF9zZXNzaW9uKCk7cGFnZV9tZXNzYWdlcygkbik7JGs9JmdldF9zZXNzaW9uKCJkYnMiKTtpZihEQiE9IiImJiRrJiYhaW5fYXJyYXkoREIsJGssdHJ1ZSkpJGs9bnVsbDtzdG9wX3Nlc3Npb24oKTtkZWZpbmUoIlBBR0VfSEVBREVSIiwxKTt9ZnVuY3Rpb24KcGFnZV9oZWFkZXJzKCl7Z2xvYmFsJGI7aGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIpO2hlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUiKTtoZWFkZXIoIlgtRnJhbWUtT3B0aW9uczogZGVueSIpO2hlYWRlcigiWC1YU1MtUHJvdGVjdGlvbjogMCIpO2hlYWRlcigiWC1Db250ZW50LVR5cGUtT3B0aW9uczogbm9zbmlmZiIpO2hlYWRlcigiUmVmZXJyZXItUG9saWN5OiBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4iKTtmb3JlYWNoKCRiLT5jc3AoKWFzJExiKXskemQ9YXJyYXkoKTtmb3JlYWNoKCRMYgphcyR6PT4kWCkkemRbXT0iJHogJFgiO2hlYWRlcigiQ29udGVudC1TZWN1cml0eS1Qb2xpY3k6ICIuaW1wbG9kZSgiOyAiLCR6ZCkpO30kYi0+aGVhZGVycygpO31mdW5jdGlvbgpjc3AoKXtyZXR1cm4KYXJyYXkoYXJyYXkoInNjcmlwdC1zcmMiPT4iJ3NlbGYnICd1bnNhZmUtaW5saW5lJyAnbm9uY2UtIi5nZXRfbm9uY2UoKS4iJyAnc3RyaWN0LWR5bmFtaWMnIiwiY29ubmVjdC1zcmMiPT4iJ3NlbGYnIiwiZnJhbWUtc3JjIj0+Imh0dHBzOi8vd3d3LmFkbWluZXIub3JnIiwib2JqZWN0LXNyYyI9PiInbm9uZSciLCJiYXNlLXVyaSI9PiInbm9uZSciLCJmb3JtLWFjdGlvbiI9PiInc2VsZiciLCksKTt9ZnVuY3Rpb24KZ2V0X25vbmNlKCl7c3RhdGljJGJmO2lmKCEkYmYpJGJmPWJhc2U2NF9lbmNvZGUocmFuZF9zdHJpbmcoKSk7cmV0dXJuJGJmO31mdW5jdGlvbgpwYWdlX21lc3NhZ2VzKCRuKXskSmk9cHJlZ19yZXBsYWNlKCd+XlteP10qficsJycsJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl0pOyRPZT0kX1NFU1NJT05bIm1lc3NhZ2VzIl1bJEppXTtpZigkT2Upe2VjaG8iPGRpdiBjbGFzcz0nbWVzc2FnZSc+Ii5pbXBsb2RlKCI8L2Rpdj5cbjxkaXYgY2xhc3M9J21lc3NhZ2UnPiIsJE9lKS4iPC9kaXY+Ii5zY3JpcHQoIm1lc3NhZ2VzUHJpbnQoKTsiKTt1bnNldCgkX1NFU1NJT05bIm1lc3NhZ2VzIl1bJEppXSk7fWlmKCRuKWVjaG8iPGRpdiBjbGFzcz0nZXJyb3InPiRuPC9kaXY+XG4iO31mdW5jdGlvbgpwYWdlX2Zvb3RlcigkUmU9IiIpe2dsb2JhbCRiLCRuaTtlY2hvJzwvZGl2PgoKJztpZigkUmUhPSJhdXRoIil7ZWNobyc8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KPHAgY2xhc3M9ImxvZ291dCI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ291dCIgdmFsdWU9IkxvZ291dCIgaWQ9ImxvZ291dCI+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvcD4KPC9mb3JtPgonO31lY2hvJzxkaXYgaWQ9Im1lbnUiPgonOyRiLT5uYXZpZ2F0aW9uKCRSZSk7ZWNobyc8L2Rpdj4KJyxzY3JpcHQoInNldHVwU3VibWl0SGlnaGxpZ2h0KGRvY3VtZW50KTsiKTt9ZnVuY3Rpb24KaW50MzIoJFVlKXt3aGlsZSgkVWU+PTIxNDc0ODM2NDgpJFVlLT00Mjk0OTY3Mjk2O3doaWxlKCRVZTw9LTIxNDc0ODM2NDkpJFVlKz00Mjk0OTY3Mjk2O3JldHVybihpbnQpJFVlO31mdW5jdGlvbgpsb25nMnN0cigkVywkYWopeyRYZz0nJztmb3JlYWNoKCRXCmFzJFgpJFhnLj1wYWNrKCdWJywkWCk7aWYoJGFqKXJldHVybgpzdWJzdHIoJFhnLDAsZW5kKCRXKSk7cmV0dXJuJFhnO31mdW5jdGlvbgpzdHIybG9uZygkWGcsJGFqKXskVz1hcnJheV92YWx1ZXModW5wYWNrKCdWKicsc3RyX3BhZCgkWGcsNCpjZWlsKHN0cmxlbigkWGcpLzQpLCJcMCIpKSk7aWYoJGFqKSRXW109c3RybGVuKCRYZyk7cmV0dXJuJFc7fWZ1bmN0aW9uCnh4dGVhX214KCRtaiwkbGosJEtoLCRmZSl7cmV0dXJuCmludDMyKCgoJG1qPj41JjB4N0ZGRkZGRileJGxqPDwyKSsoKCRsaj4+MyYweDFGRkZGRkZGKV4kbWo8PDQpKV5pbnQzMigoJEtoXiRsaikrKCRmZV4kbWopKTt9ZnVuY3Rpb24KZW5jcnlwdF9zdHJpbmcoJEZoLCR6KXtpZigkRmg9PSIiKXJldHVybiIiOyR6PWFycmF5X3ZhbHVlcyh1bnBhY2soIlYqIixwYWNrKCJIKiIsbWQ1KCR6KSkpKTskVz1zdHIybG9uZygkRmgsdHJ1ZSk7JFVlPWNvdW50KCRXKS0xOyRtaj0kV1skVWVdOyRsaj0kV1swXTskdWc9Zmxvb3IoNis1Mi8oJFVlKzEpKTskS2g9MDt3aGlsZSgkdWctLT4wKXskS2g9aW50MzIoJEtoKzB4OUUzNzc5QjkpOyRwYz0kS2g+PjImMztmb3IoJExmPTA7JExmPCRVZTskTGYrKyl7JGxqPSRXWyRMZisxXTskVGU9eHh0ZWFfbXgoJG1qLCRsaiwkS2gsJHpbJExmJjNeJHBjXSk7JG1qPWludDMyKCRXWyRMZl0rJFRlKTskV1skTGZdPSRtajt9JGxqPSRXWzBdOyRUZT14eHRlYV9teCgkbWosJGxqLCRLaCwkelskTGYmM14kcGNdKTskbWo9aW50MzIoJFdbJFVlXSskVGUpOyRXWyRVZV09JG1qO31yZXR1cm4KbG9uZzJzdHIoJFcsZmFsc2UpO31mdW5jdGlvbgpkZWNyeXB0X3N0cmluZygkRmgsJHope2lmKCRGaD09IiIpcmV0dXJuIiI7aWYoISR6KXJldHVybgpmYWxzZTskej1hcnJheV92YWx1ZXModW5wYWNrKCJWKiIscGFjaygiSCoiLG1kNSgkeikpKSk7JFc9c3RyMmxvbmcoJEZoLGZhbHNlKTskVWU9Y291bnQoJFcpLTE7JG1qPSRXWyRVZV07JGxqPSRXWzBdOyR1Zz1mbG9vcig2KzUyLygkVWUrMSkpOyRLaD1pbnQzMigkdWcqMHg5RTM3NzlCOSk7d2hpbGUoJEtoKXskcGM9JEtoPj4yJjM7Zm9yKCRMZj0kVWU7JExmPjA7JExmLS0peyRtaj0kV1skTGYtMV07JFRlPXh4dGVhX214KCRtaiwkbGosJEtoLCR6WyRMZiYzXiRwY10pOyRsaj1pbnQzMigkV1skTGZdLSRUZSk7JFdbJExmXT0kbGo7fSRtaj0kV1skVWVdOyRUZT14eHRlYV9teCgkbWosJGxqLCRLaCwkelskTGYmM14kcGNdKTskbGo9aW50MzIoJFdbMF0tJFRlKTskV1swXT0kbGo7JEtoPWludDMyKCRLaC0weDlFMzc3OUI5KTt9cmV0dXJuCmxvbmcyc3RyKCRXLHRydWUpO30kZz0nJzskeWQ9JF9TRVNTSU9OWyJ0b2tlbiJdO2lmKCEkeWQpJF9TRVNTSU9OWyJ0b2tlbiJdPXJhbmQoMSwxZTYpOyRuaT1nZXRfdG9rZW4oKTskYmc9YXJyYXkoKTtpZigkX0NPT0tJRVsiYWRtaW5lcl9wZXJtYW5lbnQiXSl7Zm9yZWFjaChleHBsb2RlKCIgIiwkX0NPT0tJRVsiYWRtaW5lcl9wZXJtYW5lbnQiXSlhcyRYKXtsaXN0KCR6KT1leHBsb2RlKCI6IiwkWCk7JGJnWyR6XT0kWDt9fWZ1bmN0aW9uCmFkZF9pbnZhbGlkX2xvZ2luKCl7Z2xvYmFsJGI7JGxkPWZpbGVfb3Blbl9sb2NrKGdldF90ZW1wX2RpcigpLiIvYWRtaW5lci5pbnZhbGlkIik7aWYoISRsZClyZXR1cm47JFlkPXVuc2VyaWFsaXplKHN0cmVhbV9nZXRfY29udGVudHMoJGxkKSk7JGRpPXRpbWUoKTtpZigkWWQpe2ZvcmVhY2goJFlkCmFzJFpkPT4kWCl7aWYoJFhbMF08JGRpKXVuc2V0KCRZZFskWmRdKTt9fSRYZD0mJFlkWyRiLT5icnV0ZUZvcmNlS2V5KCldO2lmKCEkWGQpJFhkPWFycmF5KCRkaSszMCo2MCwwKTskWGRbMV0rKztmaWxlX3dyaXRlX3VubG9jaygkbGQsc2VyaWFsaXplKCRZZCkpO31mdW5jdGlvbgpjaGVja19pbnZhbGlkX2xvZ2luKCl7Z2xvYmFsJGI7JFlkPXVuc2VyaWFsaXplKEBmaWxlX2dldF9jb250ZW50cyhnZXRfdGVtcF9kaXIoKS4iL2FkbWluZXIuaW52YWxpZCIpKTskWGQ9KCRZZD8kWWRbJGItPmJydXRlRm9yY2VLZXkoKV06YXJyYXkoKSk7JGFmPSgkWGRbMV0+Mjk/JFhkWzBdLXRpbWUoKTowKTtpZigkYWY+MClhdXRoX2Vycm9yKGxhbmcoYXJyYXkoJ1RvbyBtYW55IHVuc3VjY2Vzc2Z1bCBsb2dpbnMsIHRyeSBhZ2FpbiBpbiAlZCBtaW51dGUuJywnVG9vIG1hbnkgdW5zdWNjZXNzZnVsIGxvZ2lucywgdHJ5IGFnYWluIGluICVkIG1pbnV0ZXMuJyksY2VpbCgkYWYvNjApKSk7fSRJYT0kX1BPU1RbImF1dGgiXTtpZigkSWEpe3Nlc3Npb25fcmVnZW5lcmF0ZV9pZCgpOyRWaT0kSWFbImRyaXZlciJdOyRNPSRJYVsic2VydmVyIl07JFY9JElhWyJ1c2VybmFtZSJdOyRGPShzdHJpbmcpJElhWyJwYXNzd29yZCJdOyRsPSRJYVsiZGIiXTtzZXRfcGFzc3dvcmQoJFZpLCRNLCRWLCRGKTskX1NFU1NJT05bImRiIl1bJFZpXVskTV1bJFZdWyRsXT10cnVlO2lmKCRJYVsicGVybWFuZW50Il0peyR6PWJhc2U2NF9lbmNvZGUoJFZpKS4iLSIuYmFzZTY0X2VuY29kZSgkTSkuIi0iLmJhc2U2NF9lbmNvZGUoJFYpLiItIi5iYXNlNjRfZW5jb2RlKCRsKTskbmc9JGItPnBlcm1hbmVudExvZ2luKHRydWUpOyRiZ1skel09IiR6OiIuYmFzZTY0X2VuY29kZSgkbmc/ZW5jcnlwdF9zdHJpbmcoJEYsJG5nKToiIik7Y29va2llKCJhZG1pbmVyX3Blcm1hbmVudCIsaW1wbG9kZSgiICIsJGJnKSk7fWlmKGNvdW50KCRfUE9TVCk9PTF8fERSSVZFUiE9JFZpfHxTRVJWRVIhPSRNfHwkX0dFVFsidXNlcm5hbWUiXSE9PSRWfHxEQiE9JGwpcmVkaXJlY3QoYXV0aF91cmwoJFZpLCRNLCRWLCRsKSk7fWVsc2VpZigkX1BPU1RbImxvZ291dCJdJiYoISR5ZHx8dmVyaWZ5X3Rva2VuKCkpKXtmb3JlYWNoKGFycmF5KCJwd2RzIiwiZGIiLCJkYnMiLCJxdWVyaWVzIilhcyR6KXNldF9zZXNzaW9uKCR6LG51bGwpO3Vuc2V0X3Blcm1hbmVudCgpO3JlZGlyZWN0KHN1YnN0cihwcmVnX3JlcGxhY2UoJ35cYih1c2VybmFtZXxkYnxucyk9W14mXSomficsJycsTUUpLDAsLTEpLCdMb2dvdXQgc3VjY2Vzc2Z1bC4nLicgJy4nVGhhbmtzIGZvciB1c2luZyBBZG1pbmVyLCBjb25zaWRlciA8YSBocmVmPSJodHRwczovL3d3dy5hZG1pbmVyLm9yZy9lbi9kb25hdGlvbi8iPmRvbmF0aW5nPC9hPi4nKTt9ZWxzZWlmKCRiZyYmISRfU0VTU0lPTlsicHdkcyJdKXtzZXNzaW9uX3JlZ2VuZXJhdGVfaWQoKTskbmc9JGItPnBlcm1hbmVudExvZ2luKCk7Zm9yZWFjaCgkYmcKYXMkej0+JFgpe2xpc3QoLCRmYik9ZXhwbG9kZSgiOiIsJFgpO2xpc3QoJFZpLCRNLCRWLCRsKT1hcnJheV9tYXAoJ2Jhc2U2NF9kZWNvZGUnLGV4cGxvZGUoIi0iLCR6KSk7c2V0X3Bhc3N3b3JkKCRWaSwkTSwkVixkZWNyeXB0X3N0cmluZyhiYXNlNjRfZGVjb2RlKCRmYiksJG5nKSk7JF9TRVNTSU9OWyJkYiJdWyRWaV1bJE1dWyRWXVskbF09dHJ1ZTt9fWZ1bmN0aW9uCnVuc2V0X3Blcm1hbmVudCgpe2dsb2JhbCRiZztmb3JlYWNoKCRiZwphcyR6PT4kWCl7bGlzdCgkVmksJE0sJFYsJGwpPWFycmF5X21hcCgnYmFzZTY0X2RlY29kZScsZXhwbG9kZSgiLSIsJHopKTtpZigkVmk9PURSSVZFUiYmJE09PVNFUlZFUiYmJFY9PSRfR0VUWyJ1c2VybmFtZSJdJiYkbD09REIpdW5zZXQoJGJnWyR6XSk7fWNvb2tpZSgiYWRtaW5lcl9wZXJtYW5lbnQiLGltcGxvZGUoIiAiLCRiZykpO31mdW5jdGlvbgphdXRoX2Vycm9yKCRuKXtnbG9iYWwkYiwkeWQ7JG1oPXNlc3Npb25fbmFtZSgpO2lmKGlzc2V0KCRfR0VUWyJ1c2VybmFtZSJdKSl7aGVhZGVyKCJIVFRQLzEuMSA0MDMgRm9yYmlkZGVuIik7aWYoKCRfQ09PS0lFWyRtaF18fCRfR0VUWyRtaF0pJiYhJHlkKSRuPSdTZXNzaW9uIGV4cGlyZWQsIHBsZWFzZSBsb2dpbiBhZ2Fpbi4nO2Vsc2V7cmVzdGFydF9zZXNzaW9uKCk7YWRkX2ludmFsaWRfbG9naW4oKTskRj1nZXRfcGFzc3dvcmQoKTtpZigkRiE9PW51bGwpe2lmKCRGPT09ZmFsc2UpJG4uPSgkbj8nPGJyPic6JycpLnNwcmludGYoJ01hc3RlciBwYXNzd29yZCBleHBpcmVkLiA8YSBocmVmPSJodHRwczovL3d3dy5hZG1pbmVyLm9yZy9lbi9leHRlbnNpb24vIiVzPkltcGxlbWVudDwvYT4gJXMgbWV0aG9kIHRvIG1ha2UgaXQgcGVybWFuZW50LicsdGFyZ2V0X2JsYW5rKCksJzxjb2RlPnBlcm1hbmVudExvZ2luKCk8L2NvZGU+Jyk7c2V0X3Bhc3N3b3JkKERSSVZFUixTRVJWRVIsJF9HRVRbInVzZXJuYW1lIl0sbnVsbCk7fXVuc2V0X3Blcm1hbmVudCgpO319aWYoISRfQ09PS0lFWyRtaF0mJiRfR0VUWyRtaF0mJmluaV9ib29sKCJzZXNzaW9uLnVzZV9vbmx5X2Nvb2tpZXMiKSkkbj0nU2Vzc2lvbiBzdXBwb3J0IG11c3QgYmUgZW5hYmxlZC4nOyRPZj1zZXNzaW9uX2dldF9jb29raWVfcGFyYW1zKCk7Y29va2llKCJhZG1pbmVyX2tleSIsKCRfQ09PS0lFWyJhZG1pbmVyX2tleSJdPyRfQ09PS0lFWyJhZG1pbmVyX2tleSJdOnJhbmRfc3RyaW5nKCkpLCRPZlsibGlmZXRpbWUiXSk7cGFnZV9oZWFkZXIoJ0xvZ2luJywkbixudWxsKTtlY2hvIjxmb3JtIGFjdGlvbj0nJyBtZXRob2Q9J3Bvc3QnPlxuIiwiPGRpdj4iO2lmKGhpZGRlbl9maWVsZHMoJF9QT1NULGFycmF5KCJhdXRoIikpKWVjaG8iPHAgY2xhc3M9J21lc3NhZ2UnPiIuJ1RoZSBhY3Rpb24gd2lsbCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCBsb2dpbiB3aXRoIHRoZSBzYW1lIGNyZWRlbnRpYWxzLicuIlxuIjtlY2hvIjwvZGl2PlxuIjskYi0+bG9naW5Gb3JtKCk7ZWNobyI8L2Zvcm0+XG4iO3BhZ2VfZm9vdGVyKCJhdXRoIik7ZXhpdDt9aWYoaXNzZXQoJF9HRVRbInVzZXJuYW1lIl0pJiYhY2xhc3NfZXhpc3RzKCJNaW5fREIiKSl7dW5zZXQoJF9TRVNTSU9OWyJwd2RzIl1bRFJJVkVSXSk7dW5zZXRfcGVybWFuZW50KCk7cGFnZV9oZWFkZXIoJ05vIGV4dGVuc2lvbicsc3ByaW50ZignTm9uZSBvZiB0aGUgc3VwcG9ydGVkIFBIUCBleHRlbnNpb25zICglcykgYXJlIGF2YWlsYWJsZS4nLGltcGxvZGUoIiwgIiwkaGcpKSxmYWxzZSk7cGFnZV9mb290ZXIoImF1dGgiKTtleGl0O31zdG9wX3Nlc3Npb24odHJ1ZSk7aWYoaXNzZXQoJF9HRVRbInVzZXJuYW1lIl0pJiZpc19zdHJpbmcoZ2V0X3Bhc3N3b3JkKCkpKXtsaXN0KCREZCwkZGcpPWV4cGxvZGUoIjoiLFNFUlZFUiwyKTtpZihwcmVnX21hdGNoKCd+XlxzKihbLStdP1xkKyl+JywkZGcsJEMpJiYoJENbMV08MTAyNHx8JENbMV0+NjU1MzUpKWF1dGhfZXJyb3IoJ0Nvbm5lY3RpbmcgdG8gcHJpdmlsZWdlZCBwb3J0cyBpcyBub3QgYWxsb3dlZC4nKTtjaGVja19pbnZhbGlkX2xvZ2luKCk7JGc9Y29ubmVjdCgpOyRtPW5ldwpNaW5fRHJpdmVyKCRnKTt9JHhlPW51bGw7aWYoIWlzX29iamVjdCgkZyl8fCgkeGU9JGItPmxvZ2luKCRfR0VUWyJ1c2VybmFtZSJdLGdldF9wYXNzd29yZCgpKSkhPT10cnVlKXskbj0oaXNfc3RyaW5nKCRnKT9oKCRnKTooaXNfc3RyaW5nKCR4ZSk/JHhlOidJbnZhbGlkIGNyZWRlbnRpYWxzLicpKTthdXRoX2Vycm9yKCRuLihwcmVnX21hdGNoKCd+XiB8ICR+JyxnZXRfcGFzc3dvcmQoKSk/Jzxicj4nLidUaGVyZSBpcyBhIHNwYWNlIGluIHRoZSBpbnB1dCBwYXNzd29yZCB3aGljaCBtaWdodCBiZSB0aGUgY2F1c2UuJzonJykpO31pZigkX1BPU1RbImxvZ291dCJdJiYkeWQmJiF2ZXJpZnlfdG9rZW4oKSl7cGFnZV9oZWFkZXIoJ0xvZ291dCcsJ0ludmFsaWQgQ1NSRiB0b2tlbi4gU2VuZCB0aGUgZm9ybSBhZ2Fpbi4nKTtwYWdlX2Zvb3RlcigiZGIiKTtleGl0O31pZigkSWEmJiRfUE9TVFsidG9rZW4iXSkkX1BPU1RbInRva2VuIl09JG5pOyRuPScnO2lmKCRfUE9TVCl7aWYoIXZlcmlmeV90b2tlbigpKXskU2Q9Im1heF9pbnB1dF92YXJzIjskSWU9aW5pX2dldCgkU2QpO2lmKGV4dGVuc2lvbl9sb2FkZWQoInN1aG9zaW4iKSl7Zm9yZWFjaChhcnJheSgic3Vob3Npbi5yZXF1ZXN0Lm1heF92YXJzIiwic3Vob3Npbi5wb3N0Lm1heF92YXJzIilhcyR6KXskWD1pbmlfZ2V0KCR6KTtpZigkWCYmKCEkSWV8fCRYPCRJZSkpeyRTZD0kejskSWU9JFg7fX19JG49KCEkX1BPU1RbInRva2VuIl0mJiRJZT9zcHJpbnRmKCdNYXhpbXVtIG51bWJlciBvZiBhbGxvd2VkIGZpZWxkcyBleGNlZWRlZC4gUGxlYXNlIGluY3JlYXNlICVzLicsIickU2QnIik6J0ludmFsaWQgQ1NSRiB0b2tlbi4gU2VuZCB0aGUgZm9ybSBhZ2Fpbi4nLicgJy4nSWYgeW91IGRpZCBub3Qgc2VuZCB0aGlzIHJlcXVlc3QgZnJvbSBBZG1pbmVyIHRoZW4gY2xvc2UgdGhpcyBwYWdlLicpO319ZWxzZWlmKCRfU0VSVkVSWyJSRVFVRVNUX01FVEhPRCJdPT0iUE9TVCIpeyRuPXNwcmludGYoJ1RvbyBiaWcgUE9TVCBkYXRhLiBSZWR1Y2UgdGhlIGRhdGEgb3IgaW5jcmVhc2UgdGhlICVzIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlLicsIidwb3N0X21heF9zaXplJyIpO2lmKGlzc2V0KCRfR0VUWyJzcWwiXSkpJG4uPScgJy4nWW91IGNhbiB1cGxvYWQgYSBiaWcgU1FMIGZpbGUgdmlhIEZUUCBhbmQgaW1wb3J0IGl0IGZyb20gc2VydmVyLic7fWZ1bmN0aW9uCnNlbGVjdCgkSCwkaD1udWxsLCRCZj1hcnJheSgpLCRfPTApe2dsb2JhbCR5OyR3ZT1hcnJheSgpOyR4PWFycmF5KCk7JGY9YXJyYXkoKTskU2E9YXJyYXkoKTskVT1hcnJheSgpOyRJPWFycmF5KCk7b2RkKCcnKTtmb3IoJHQ9MDsoISRffHwkdDwkXykmJigkSj0kSC0+ZmV0Y2hfcm93KCkpOyR0Kyspe2lmKCEkdCl7ZWNobyI8ZGl2IGNsYXNzPSdzY3JvbGxhYmxlJz5cbiIsIjx0YWJsZSBjZWxsc3BhY2luZz0nMCcgY2xhc3M9J25vd3JhcCc+XG4iLCI8dGhlYWQ+PHRyPiI7Zm9yKCRlZT0wOyRlZTxjb3VudCgkSik7JGVlKyspeyRvPSRILT5mZXRjaF9maWVsZCgpOyREPSRvLT5uYW1lOyRBZj0kby0+b3JndGFibGU7JF9mPSRvLT5vcmduYW1lOyRJWyRvLT50YWJsZV09JEFmO2lmKCRCZiYmJHk9PSJzcWwiKSR3ZVskZWVdPSgkRD09InRhYmxlIj8idGFibGU9IjooJEQ9PSJwb3NzaWJsZV9rZXlzIj8iaW5kZXhlcz0iOm51bGwpKTtlbHNlaWYoJEFmIT0iIil7aWYoIWlzc2V0KCR4WyRBZl0pKXskeFskQWZdPWFycmF5KCk7Zm9yZWFjaChpbmRleGVzKCRBZiwkaClhcyR3KXtpZigkd1sidHlwZSJdPT0iUFJJTUFSWSIpeyR4WyRBZl09YXJyYXlfZmxpcCgkd1siY29sdW1ucyJdKTticmVhazt9fSRmWyRBZl09JHhbJEFmXTt9aWYoaXNzZXQoJGZbJEFmXVskX2ZdKSl7dW5zZXQoJGZbJEFmXVskX2ZdKTskeFskQWZdWyRfZl09JGVlOyR3ZVskZWVdPSRBZjt9fWlmKCRvLT5jaGFyc2V0bnI9PTYzKSRTYVskZWVdPXRydWU7JFVbJGVlXT0kby0+dHlwZTtlY2hvIjx0aCIuKCRBZiE9IiJ8fCRvLT5uYW1lIT0kX2Y/IiB0aXRsZT0nIi5oKCgkQWYhPSIiPyIkQWYuIjoiIikuJF9mKS4iJyI6IiIpLiI+Ii5oKCREKS4oJEJmP2RvY19saW5rKGFycmF5KCdzcWwnPT4iZXhwbGFpbi1vdXRwdXQuaHRtbCNleHBsYWluXyIuc3RydG9sb3dlcigkRCksJ21hcmlhZGInPT4iZXhwbGFpbi8jdGhlLWNvbHVtbnMtaW4tZXhwbGFpbi1zZWxlY3QiLCkpOiIiKTt9ZWNobyI8L3RoZWFkPlxuIjt9ZWNobyI8dHIiLm9kZCgpLiI+Ijtmb3JlYWNoKCRKCmFzJHo9PiRYKXskQT0iIjtpZihpc3NldCgkd2VbJHpdKSYmISRmWyR3ZVskel1dKXtpZigkQmYmJiR5PT0ic3FsIil7JFE9JEpbYXJyYXlfc2VhcmNoKCJ0YWJsZT0iLCR3ZSldOyRBPU1FLiR3ZVskel0udXJsZW5jb2RlKCRCZlskUV0hPSIiPyRCZlskUV06JFEpO31lbHNleyRBPU1FLiJlZGl0PSIudXJsZW5jb2RlKCR3ZVskel0pO2ZvcmVhY2goJHhbJHdlWyR6XV1hcyRqYj0+JGVlKSRBLj0iJndoZXJlIi51cmxlbmNvZGUoIlsiLmJyYWNrZXRfZXNjYXBlKCRqYikuIl0iKS4iPSIudXJsZW5jb2RlKCRKWyRlZV0pO319ZWxzZWlmKGlzX3VybCgkWCkpJEE9JFg7aWYoJFg9PT1udWxsKSRYPSI8aT5OVUxMPC9pPiI7ZWxzZWlmKCRTYVskel0mJiFpc191dGY4KCRYKSkkWD0iPGk+Ii5sYW5nKGFycmF5KCclZCBieXRlJywnJWQgYnl0ZXMnKSxzdHJsZW4oJFgpKS4iPC9pPiI7ZWxzZXskWD1oKCRYKTtpZigkVVskel09PTI1NCkkWD0iPGNvZGU+JFg8L2NvZGU+Ijt9aWYoJEEpJFg9IjxhIGhyZWY9JyIuaCgkQSkuIiciLihpc191cmwoJEEpP3RhcmdldF9ibGFuaygpOicnKS4iPiRYPC9hPiI7ZWNobyI8dGQ+JFgiO319ZWNobygkdD8iPC90YWJsZT5cbjwvZGl2PiI6IjxwIGNsYXNzPSdtZXNzYWdlJz4iLidObyByb3dzLicpLiJcbiI7cmV0dXJuJEk7fWZ1bmN0aW9uCnJlZmVyZW5jYWJsZV9wcmltYXJ5KCRmaCl7JEk9YXJyYXkoKTtmb3JlYWNoKHRhYmxlX3N0YXR1cygnJyx0cnVlKWFzJE9oPT4kUSl7aWYoJE9oIT0kZmgmJmZrX3N1cHBvcnQoJFEpKXtmb3JlYWNoKGZpZWxkcygkT2gpYXMkbyl7aWYoJG9bInByaW1hcnkiXSl7aWYoJElbJE9oXSl7dW5zZXQoJElbJE9oXSk7YnJlYWs7fSRJWyRPaF09JG87fX19fXJldHVybiRJO31mdW5jdGlvbgphZG1pbmVyX3NldHRpbmdzKCl7cGFyc2Vfc3RyKCRfQ09PS0lFWyJhZG1pbmVyX3NldHRpbmdzIl0sJG9oKTtyZXR1cm4kb2g7fWZ1bmN0aW9uCmFkbWluZXJfc2V0dGluZygkeil7JG9oPWFkbWluZXJfc2V0dGluZ3MoKTtyZXR1cm4kb2hbJHpdO31mdW5jdGlvbgpzZXRfYWRtaW5lcl9zZXR0aW5ncygkb2gpe3JldHVybgpjb29raWUoImFkbWluZXJfc2V0dGluZ3MiLGh0dHBfYnVpbGRfcXVlcnkoJG9oK2FkbWluZXJfc2V0dGluZ3MoKSkpO31mdW5jdGlvbgp0ZXh0YXJlYSgkRCwkWSwkSz0xMCwkbmI9ODApe2dsb2JhbCR5O2VjaG8iPHRleHRhcmVhIG5hbWU9JyREJyByb3dzPSckSycgY29scz0nJG5iJyBjbGFzcz0nc3FsYXJlYSBqdXNoLSR5JyBzcGVsbGNoZWNrPSdmYWxzZScgd3JhcD0nb2ZmJz4iO2lmKGlzX2FycmF5KCRZKSl7Zm9yZWFjaCgkWQphcyRYKWVjaG8KaCgkWFswXSkuIlxuXG5cbiI7fWVsc2UKZWNobwpoKCRZKTtlY2hvIjwvdGV4dGFyZWE+Ijt9ZnVuY3Rpb24KZWRpdF90eXBlKCR6LCRvLCRsYiwkaGQ9YXJyYXkoKSwkUGM9YXJyYXkoKSl7Z2xvYmFsJEdoLCRVLCRIaSwkcGY7JFQ9JG9bInR5cGUiXTtlY2hvJzx0ZD48c2VsZWN0IG5hbWU9IicsaCgkeiksJ1t0eXBlXSIgY2xhc3M9InR5cGUiIGFyaWEtbGFiZWxsZWRieT0ibGFiZWwtdHlwZSI+JztpZigkVCYmIWlzc2V0KCRVWyRUXSkmJiFpc3NldCgkaGRbJFRdKSYmIWluX2FycmF5KCRULCRQYykpJFBjW109JFQ7aWYoJGhkKSRHaFsnRm9yZWlnbiBrZXlzJ109JGhkO2VjaG8Kb3B0aW9ubGlzdChhcnJheV9tZXJnZSgkUGMsJEdoKSwkVCksJzwvc2VsZWN0Pjx0ZD48aW5wdXQgbmFtZT0iJyxoKCR6KSwnW2xlbmd0aF0iIHZhbHVlPSInLGgoJG9bImxlbmd0aCJdKSwnIiBzaXplPSIzIicsKCEkb1sibGVuZ3RoIl0mJnByZWdfbWF0Y2goJ352YXIoY2hhcnxiaW5hcnkpJH4nLCRUKT8iIGNsYXNzPSdyZXF1aXJlZCciOiIiKTtlY2hvJyBhcmlhLWxhYmVsbGVkYnk9ImxhYmVsLWxlbmd0aCI+PHRkIGNsYXNzPSJvcHRpb25zIj4nLCI8c2VsZWN0IG5hbWU9JyIuaCgkeikuIltjb2xsYXRpb25dJyIuKHByZWdfbWF0Y2goJ34oY2hhcnx0ZXh0fGVudW18c2V0KSR+JywkVCk/IiI6IiBjbGFzcz0naGlkZGVuJyIpLic+PG9wdGlvbiB2YWx1ZT0iIj4oJy4nY29sbGF0aW9uJy4nKScub3B0aW9ubGlzdCgkbGIsJG9bImNvbGxhdGlvbiJdKS4nPC9zZWxlY3Q+JywoJEhpPyI8c2VsZWN0IG5hbWU9JyIuaCgkeikuIlt1bnNpZ25lZF0nIi4oISRUfHxwcmVnX21hdGNoKG51bWJlcl90eXBlKCksJFQpPyIiOiIgY2xhc3M9J2hpZGRlbiciKS4nPjxvcHRpb24+Jy5vcHRpb25saXN0KCRIaSwkb1sidW5zaWduZWQiXSkuJzwvc2VsZWN0Pic6JycpLChpc3NldCgkb1snb25fdXBkYXRlJ10pPyI8c2VsZWN0IG5hbWU9JyIuaCgkeikuIltvbl91cGRhdGVdJyIuKHByZWdfbWF0Y2goJ350aW1lc3RhbXB8ZGF0ZXRpbWV+JywkVCk/IiI6IiBjbGFzcz0naGlkZGVuJyIpLic+Jy5vcHRpb25saXN0KGFycmF5KCIiPT4iKCIuJ09OIFVQREFURScuIikiLCJDVVJSRU5UX1RJTUVTVEFNUCIpLChwcmVnX21hdGNoKCd+XkNVUlJFTlRfVElNRVNUQU1QfmknLCRvWyJvbl91cGRhdGUiXSk/IkNVUlJFTlRfVElNRVNUQU1QIjokb1sib25fdXBkYXRlIl0pKS4nPC9zZWxlY3Q+JzonJyksKCRoZD8iPHNlbGVjdCBuYW1lPSciLmgoJHopLiJbb25fZGVsZXRlXSciLihwcmVnX21hdGNoKCJ+YH4iLCRUKT8iIjoiIGNsYXNzPSdoaWRkZW4nIikuIj48b3B0aW9uIHZhbHVlPScnPigiLidPTiBERUxFVEUnLiIpIi5vcHRpb25saXN0KGV4cGxvZGUoInwiLCRwZiksJG9bIm9uX2RlbGV0ZSJdKS4iPC9zZWxlY3Q+ICI6IiAiKTt9ZnVuY3Rpb24KcHJvY2Vzc19sZW5ndGgoJHRlKXtnbG9iYWwkX2M7cmV0dXJuKHByZWdfbWF0Y2goIn5eXFxzKlxcKD9cXHMqJF9jKD86XFxzKixcXHMqJF9jKSorXFxzKlxcKT9cXHMqXCR+IiwkdGUpJiZwcmVnX21hdGNoX2FsbCgifiRfY34iLCR0ZSwkQ2UpPyIoIi5pbXBsb2RlKCIsIiwkQ2VbMF0pLiIpIjpwcmVnX3JlcGxhY2UoJ35eWzAtOV0uKn4nLCcoXDApJyxwcmVnX3JlcGxhY2UoJ35bXi0wLTksKygpW1xdXX4nLCcnLCR0ZSkpKTt9ZnVuY3Rpb24KcHJvY2Vzc190eXBlKCRvLCRrYj0iQ09MTEFURSIpe2dsb2JhbCRIaTtyZXR1cm4iICRvW3R5cGVdIi5wcm9jZXNzX2xlbmd0aCgkb1sibGVuZ3RoIl0pLihwcmVnX21hdGNoKG51bWJlcl90eXBlKCksJG9bInR5cGUiXSkmJmluX2FycmF5KCRvWyJ1bnNpZ25lZCJdLCRIaSk/IiAkb1t1bnNpZ25lZF0iOiIiKS4ocHJlZ19tYXRjaCgnfmNoYXJ8dGV4dHxlbnVtfHNldH4nLCRvWyJ0eXBlIl0pJiYkb1siY29sbGF0aW9uIl0/IiAka2IgIi5xKCRvWyJjb2xsYXRpb24iXSk6IiIpO31mdW5jdGlvbgpwcm9jZXNzX2ZpZWxkKCRvLCRfaSl7cmV0dXJuCmFycmF5KGlkZl9lc2NhcGUodHJpbSgkb1siZmllbGQiXSkpLHByb2Nlc3NfdHlwZSgkX2kpLCgkb1sibnVsbCJdPyIgTlVMTCI6IiBOT1QgTlVMTCIpLGRlZmF1bHRfdmFsdWUoJG8pLChwcmVnX21hdGNoKCd+dGltZXN0YW1wfGRhdGV0aW1lficsJG9bInR5cGUiXSkmJiRvWyJvbl91cGRhdGUiXT8iIE9OIFVQREFURSAkb1tvbl91cGRhdGVdIjoiIiksKHN1cHBvcnQoImNvbW1lbnQiKSYmJG9bImNvbW1lbnQiXSE9IiI/IiBDT01NRU5UICIucSgkb1siY29tbWVudCJdKToiIiksKCRvWyJhdXRvX2luY3JlbWVudCJdP2F1dG9faW5jcmVtZW50KCk6bnVsbCksKTt9ZnVuY3Rpb24KZGVmYXVsdF92YWx1ZSgkbyl7JFdiPSRvWyJkZWZhdWx0Il07cmV0dXJuKCRXYj09PW51bGw/IiI6IiBERUZBVUxUICIuKHByZWdfbWF0Y2goJ35jaGFyfGJpbmFyeXx0ZXh0fGVudW18c2V0ficsJG9bInR5cGUiXSl8fHByZWdfbWF0Y2goJ35eKD8hW2Etel0pfmknLCRXYik/cSgkV2IpOiRXYikpO31mdW5jdGlvbgp0eXBlX2NsYXNzKCRUKXtmb3JlYWNoKGFycmF5KCdjaGFyJz0+J3RleHQnLCdkYXRlJz0+J3RpbWV8eWVhcicsJ2JpbmFyeSc9PidibG9iJywnZW51bSc9PidzZXQnLClhcyR6PT4kWCl7aWYocHJlZ19tYXRjaCgifiR6fCRYfiIsJFQpKXJldHVybiIgY2xhc3M9JyR6JyI7fX1mdW5jdGlvbgplZGl0X2ZpZWxkcygkcCwkbGIsJFQ9IlRBQkxFIiwkaGQ9YXJyYXkoKSl7Z2xvYmFsJFRkOyRwPWFycmF5X3ZhbHVlcygkcCk7JFhiPSgoJF9QT1NUPyRfUE9TVFsiZGVmYXVsdHMiXTphZG1pbmVyX3NldHRpbmcoImRlZmF1bHRzIikpPyIiOiIgY2xhc3M9J2hpZGRlbiciKTskc2I9KCgkX1BPU1Q/JF9QT1NUWyJjb21tZW50cyJdOmFkbWluZXJfc2V0dGluZygiY29tbWVudHMiKSk/IiI6IiBjbGFzcz0naGlkZGVuJyIpO2VjaG8nPHRoZWFkPjx0cj4KJztpZigkVD09IlBST0NFRFVSRSIpe2VjaG8nPHRkPic7fWVjaG8nPHRoIGlkPSJsYWJlbC1uYW1lIj4nLCgkVD09IlRBQkxFIj8nQ29sdW1uIG5hbWUnOidQYXJhbWV0ZXIgbmFtZScpLCc8dGQgaWQ9ImxhYmVsLXR5cGUiPlR5cGU8dGV4dGFyZWEgaWQ9ImVudW0tZWRpdCIgcm93cz0iNCIgY29scz0iMTIiIHdyYXA9Im9mZiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48L3RleHRhcmVhPicsc2NyaXB0KCJxcygnI2VudW0tZWRpdCcpLm9uYmx1ciA9IGVkaXRpbmdMZW5ndGhCbHVyOyIpLCc8dGQgaWQ9ImxhYmVsLWxlbmd0aCI+TGVuZ3RoCjx0ZD4nLCdPcHRpb25zJztpZigkVD09IlRBQkxFIil7ZWNobyc8dGQgaWQ9ImxhYmVsLW51bGwiPk5VTEwKPHRkPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYXV0b19pbmNyZW1lbnRfY29sIiB2YWx1ZT0iIj48YWNyb255bSBpZD0ibGFiZWwtYWkiIHRpdGxlPSJBdXRvIEluY3JlbWVudCI+QUk8L2Fjcm9ueW0+Jyxkb2NfbGluayhhcnJheSgnc3FsJz0+ImV4YW1wbGUtYXV0by1pbmNyZW1lbnQuaHRtbCIsJ21hcmlhZGInPT4iYXV0b19pbmNyZW1lbnQvIiwnc3FsaXRlJz0+ImF1dG9pbmMuaHRtbCIsJ3Bnc3FsJz0+ImRhdGF0eXBlLmh0bWwjREFUQVRZUEUtU0VSSUFMIiwnbXNzcWwnPT4ibXMxODY3NzUuYXNweCIsKSksJzx0ZCBpZD0ibGFiZWwtZGVmYXVsdCInLCRYYiwnPkRlZmF1bHQgdmFsdWUKJywoc3VwcG9ydCgiY29tbWVudCIpPyI8dGQgaWQ9J2xhYmVsLWNvbW1lbnQnJHNiPiIuJ0NvbW1lbnQnOiIiKTt9ZWNobyc8dGQ+JywiPGlucHV0IHR5cGU9J2ltYWdlJyBjbGFzcz0naWNvbicgbmFtZT0nYWRkWyIuKHN1cHBvcnQoIm1vdmVfY29sIik/MDpjb3VudCgkcCkpLiJdJyBzcmM9JyIuaChwcmVnX3JlcGxhY2UoIn5cXD8uKn4iLCIiLE1FKS4iP2ZpbGU9cGx1cy5naWYmdmVyc2lvbj00LjguMSIpLiInIGFsdD0nKycgdGl0bGU9JyIuJ0FkZCBuZXh0Jy4iJz4iLnNjcmlwdCgicm93X2NvdW50ID0gIi5jb3VudCgkcCkuIjsiKSwnPC90aGVhZD4KPHRib2R5PgonLHNjcmlwdCgibWl4aW4ocXNsKCd0Ym9keScpLCB7b25jbGljazogZWRpdGluZ0NsaWNrLCBvbmtleWRvd246IGVkaXRpbmdLZXlkb3duLCBvbmlucHV0OiBlZGl0aW5nSW5wdXR9KTsiKTtmb3JlYWNoKCRwCmFzJHQ9PiRvKXskdCsrOyRDZj0kb1soJF9QT1NUPyJvcmlnIjoiZmllbGQiKV07JGZjPShpc3NldCgkX1BPU1RbImFkZCJdWyR0LTFdKXx8KGlzc2V0KCRvWyJmaWVsZCJdKSYmISRfUE9TVFsiZHJvcF9jb2wiXVskdF0pKSYmKHN1cHBvcnQoImRyb3BfY29sIil8fCRDZj09IiIpO2VjaG8nPHRyJywoJGZjPyIiOiIgc3R5bGU9J2Rpc3BsYXk6IG5vbmU7JyIpLCc+CicsKCRUPT0iUFJPQ0VEVVJFIj8iPHRkPiIuaHRtbF9zZWxlY3QoImZpZWxkc1skdF1baW5vdXRdIixleHBsb2RlKCJ8IiwkVGQpLCRvWyJpbm91dCJdKToiIiksJzx0aD4nO2lmKCRmYyl7ZWNobyc8aW5wdXQgbmFtZT0iZmllbGRzWycsJHQsJ11bZmllbGRdIiB2YWx1ZT0iJyxoKCRvWyJmaWVsZCJdKSwnIiBkYXRhLW1heGxlbmd0aD0iNjQiIGF1dG9jYXBpdGFsaXplPSJvZmYiIGFyaWEtbGFiZWxsZWRieT0ibGFiZWwtbmFtZSI+Jzt9ZWNobyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWVsZHNbJywkdCwnXVtvcmlnXSIgdmFsdWU9IicsaCgkQ2YpLCciPic7ZWRpdF90eXBlKCJmaWVsZHNbJHRdIiwkbywkbGIsJGhkKTtpZigkVD09IlRBQkxFIil7ZWNobyc8dGQ+JyxjaGVja2JveCgiZmllbGRzWyR0XVtudWxsXSIsMSwkb1sibnVsbCJdLCIiLCIiLCJibG9jayIsImxhYmVsLW51bGwiKSwnPHRkPjxsYWJlbCBjbGFzcz0iYmxvY2siPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYXV0b19pbmNyZW1lbnRfY29sIiB2YWx1ZT0iJywkdCwnIic7aWYoJG9bImF1dG9faW5jcmVtZW50Il0pe2VjaG8nIGNoZWNrZWQnO31lY2hvJyBhcmlhLWxhYmVsbGVkYnk9ImxhYmVsLWFpIj48L2xhYmVsPjx0ZCcsJFhiLCc+JyxjaGVja2JveCgiZmllbGRzWyR0XVtoYXNfZGVmYXVsdF0iLDEsJG9bImhhc19kZWZhdWx0Il0sIiIsIiIsIiIsImxhYmVsLWRlZmF1bHQiKSwnPGlucHV0IG5hbWU9ImZpZWxkc1snLCR0LCddW2RlZmF1bHRdIiB2YWx1ZT0iJyxoKCRvWyJkZWZhdWx0Il0pLCciIGFyaWEtbGFiZWxsZWRieT0ibGFiZWwtZGVmYXVsdCI+Jywoc3VwcG9ydCgiY29tbWVudCIpPyI8dGQkc2I+PGlucHV0IG5hbWU9J2ZpZWxkc1skdF1bY29tbWVudF0nIHZhbHVlPSciLmgoJG9bImNvbW1lbnQiXSkuIicgZGF0YS1tYXhsZW5ndGg9JyIuKG1pbl92ZXJzaW9uKDUuNSk/MTAyNDoyNTUpLiInIGFyaWEtbGFiZWxsZWRieT0nbGFiZWwtY29tbWVudCc+IjoiIik7fWVjaG8iPHRkPiIsKHN1cHBvcnQoIm1vdmVfY29sIik/IjxpbnB1dCB0eXBlPSdpbWFnZScgY2xhc3M9J2ljb24nIG5hbWU9J2FkZFskdF0nIHNyYz0nIi5oKHByZWdfcmVwbGFjZSgiflxcPy4qfiIsIiIsTUUpLiI/ZmlsZT1wbHVzLmdpZiZ2ZXJzaW9uPTQuOC4xIikuIicgYWx0PScrJyB0aXRsZT0nIi4nQWRkIG5leHQnLiInPiAiLiI8aW5wdXQgdHlwZT0naW1hZ2UnIGNsYXNzPSdpY29uJyBuYW1lPSd1cFskdF0nIHNyYz0nIi5oKHByZWdfcmVwbGFjZSgiflxcPy4qfiIsIiIsTUUpLiI/ZmlsZT11cC5naWYmdmVyc2lvbj00LjguMSIpLiInIGFsdD0n4oaRJyB0aXRsZT0nIi4nTW92ZSB1cCcuIic+ICIuIjxpbnB1dCB0eXBlPSdpbWFnZScgY2xhc3M9J2ljb24nIG5hbWU9J2Rvd25bJHRdJyBzcmM9JyIuaChwcmVnX3JlcGxhY2UoIn5cXD8uKn4iLCIiLE1FKS4iP2ZpbGU9ZG93bi5naWYmdmVyc2lvbj00LjguMSIpLiInIGFsdD0n4oaTJyB0aXRsZT0nIi4nTW92ZSBkb3duJy4iJz4gIjoiIiksKCRDZj09IiJ8fHN1cHBvcnQoImRyb3BfY29sIik/IjxpbnB1dCB0eXBlPSdpbWFnZScgY2xhc3M9J2ljb24nIG5hbWU9J2Ryb3BfY29sWyR0XScgc3JjPSciLmgocHJlZ19yZXBsYWNlKCJ+XFw/Lip+IiwiIixNRSkuIj9maWxlPWNyb3NzLmdpZiZ2ZXJzaW9uPTQuOC4xIikuIicgYWx0PSd4JyB0aXRsZT0nIi4nUmVtb3ZlJy4iJz4iOiIiKTt9fWZ1bmN0aW9uCnByb2Nlc3NfZmllbGRzKCYkcCl7JGhmPTA7aWYoJF9QT1NUWyJ1cCJdKXskbmU9MDtmb3JlYWNoKCRwCmFzJHo9PiRvKXtpZihrZXkoJF9QT1NUWyJ1cCJdKT09JHope3Vuc2V0KCRwWyR6XSk7YXJyYXlfc3BsaWNlKCRwLCRuZSwwLGFycmF5KCRvKSk7YnJlYWs7fWlmKGlzc2V0KCRvWyJmaWVsZCJdKSkkbmU9JGhmOyRoZisrO319ZWxzZWlmKCRfUE9TVFsiZG93biJdKXskamQ9ZmFsc2U7Zm9yZWFjaCgkcAphcyR6PT4kbyl7aWYoaXNzZXQoJG9bImZpZWxkIl0pJiYkamQpe3Vuc2V0KCRwW2tleSgkX1BPU1RbImRvd24iXSldKTthcnJheV9zcGxpY2UoJHAsJGhmLDAsYXJyYXkoJGpkKSk7YnJlYWs7fWlmKGtleSgkX1BPU1RbImRvd24iXSk9PSR6KSRqZD0kbzskaGYrKzt9fWVsc2VpZigkX1BPU1RbImFkZCJdKXskcD1hcnJheV92YWx1ZXMoJHApO2FycmF5X3NwbGljZSgkcCxrZXkoJF9QT1NUWyJhZGQiXSksMCxhcnJheShhcnJheSgpKSk7fWVsc2VpZighJF9QT1NUWyJkcm9wX2NvbCJdKXJldHVybgpmYWxzZTtyZXR1cm4KdHJ1ZTt9ZnVuY3Rpb24Kbm9ybWFsaXplX2VudW0oJEMpe3JldHVybiInIi5zdHJfcmVwbGFjZSgiJyIsIicnIixhZGRjc2xhc2hlcyhzdHJpcGNzbGFzaGVzKHN0cl9yZXBsYWNlKCRDWzBdWzBdLiRDWzBdWzBdLCRDWzBdWzBdLHN1YnN0cigkQ1swXSwxLC0xKSkpLCdcXCcpKS4iJyI7fWZ1bmN0aW9uCmdyYW50KCRvZCwkcGcsJGYsJG9mKXtpZighJHBnKXJldHVybgp0cnVlO2lmKCRwZz09YXJyYXkoIkFMTCBQUklWSUxFR0VTIiwiR1JBTlQgT1BUSU9OIikpcmV0dXJuKCRvZD09IkdSQU5UIj9xdWVyaWVzKCIkb2QgQUxMIFBSSVZJTEVHRVMkb2YgV0lUSCBHUkFOVCBPUFRJT04iKTpxdWVyaWVzKCIkb2QgQUxMIFBSSVZJTEVHRVMkb2YiKSYmcXVlcmllcygiJG9kIEdSQU5UIE9QVElPTiRvZiIpKTtyZXR1cm4KcXVlcmllcygiJG9kICIucHJlZ19yZXBsYWNlKCd+KEdSQU5UIE9QVElPTilcKFteKV0qXCl+JywnXDEnLGltcGxvZGUoIiRmLCAiLCRwZykuJGYpLiRvZik7fWZ1bmN0aW9uCmRyb3BfY3JlYXRlKCRqYywkaSwka2MsJGFpLCRtYywkQiwkTmUsJExlLCRNZSwkbGYsJFllKXtpZigkX1BPU1RbImRyb3AiXSlxdWVyeV9yZWRpcmVjdCgkamMsJEIsJE5lKTtlbHNlaWYoJGxmPT0iIilxdWVyeV9yZWRpcmVjdCgkaSwkQiwkTWUpO2Vsc2VpZigkbGYhPSRZZSl7JEpiPXF1ZXJpZXMoJGkpO3F1ZXJpZXNfcmVkaXJlY3QoJEIsJExlLCRKYiYmcXVlcmllcygkamMpKTtpZigkSmIpcXVlcmllcygka2MpO31lbHNlCnF1ZXJpZXNfcmVkaXJlY3QoJEIsJExlLHF1ZXJpZXMoJGFpKSYmcXVlcmllcygkbWMpJiZxdWVyaWVzKCRqYykmJnF1ZXJpZXMoJGkpKTt9ZnVuY3Rpb24KY3JlYXRlX3RyaWdnZXIoJG9mLCRKKXtnbG9iYWwkeTskZmk9IiAkSltUaW1pbmddICRKW0V2ZW50XSIuKHByZWdfbWF0Y2goJ34gT0Z+JywkSlsiRXZlbnQiXSk/IiAkSltPZl0iOiIiKTtyZXR1cm4iQ1JFQVRFIFRSSUdHRVIgIi5pZGZfZXNjYXBlKCRKWyJUcmlnZ2VyIl0pLigkeT09Im1zc3FsIj8kb2YuJGZpOiRmaS4kb2YpLnJ0cmltKCIgJEpbVHlwZV1cbiRKW1N0YXRlbWVudF0iLCI7IikuIjsiO31mdW5jdGlvbgpjcmVhdGVfcm91dGluZSgkVGcsJEope2dsb2JhbCRUZCwkeTskTj1hcnJheSgpOyRwPShhcnJheSkkSlsiZmllbGRzIl07a3NvcnQoJHApO2ZvcmVhY2goJHAKYXMkbyl7aWYoJG9bImZpZWxkIl0hPSIiKSROW109KHByZWdfbWF0Y2goIn5eKCRUZClcJH4iLCRvWyJpbm91dCJdKT8iJG9baW5vdXRdICI6IiIpLmlkZl9lc2NhcGUoJG9bImZpZWxkIl0pLnByb2Nlc3NfdHlwZSgkbywiQ0hBUkFDVEVSIFNFVCIpO30kWWI9cnRyaW0oIlxuJEpbZGVmaW5pdGlvbl0iLCI7Iik7cmV0dXJuIkNSRUFURSAkVGcgIi5pZGZfZXNjYXBlKHRyaW0oJEpbIm5hbWUiXSkpLiIgKCIuaW1wbG9kZSgiLCAiLCROKS4iKSIuKGlzc2V0KCRfR0VUWyJmdW5jdGlvbiJdKT8iIFJFVFVSTlMiLnByb2Nlc3NfdHlwZSgkSlsicmV0dXJucyJdLCJDSEFSQUNURVIgU0VUIik6IiIpLigkSlsibGFuZ3VhZ2UiXT8iIExBTkdVQUdFICRKW2xhbmd1YWdlXSI6IiIpLigkeT09InBnc3FsIj8iIEFTICIucSgkWWIpOiIkWWI7Iik7fWZ1bmN0aW9uCnJlbW92ZV9kZWZpbmVyKCRHKXtyZXR1cm4KcHJlZ19yZXBsYWNlKCd+XihbQS1aID1dKykgREVGSU5FUj1gJy5wcmVnX3JlcGxhY2UoJ35AKC4qKX4nLCdgQGAoJXxcMSknLGxvZ2dlZF91c2VyKCkpLidgficsJ1wxJywkRyk7fWZ1bmN0aW9uCmZvcm1hdF9mb3JlaWduX2tleSgkcil7Z2xvYmFsJHBmOyRsPSRyWyJkYiJdOyRjZj0kclsibnMiXTtyZXR1cm4iIEZPUkVJR04gS0VZICgiLmltcGxvZGUoIiwgIixhcnJheV9tYXAoJ2lkZl9lc2NhcGUnLCRyWyJzb3VyY2UiXSkpLiIpIFJFRkVSRU5DRVMgIi4oJGwhPSIiJiYkbCE9JF9HRVRbImRiIl0/aWRmX2VzY2FwZSgkbCkuIi4iOiIiKS4oJGNmIT0iIiYmJGNmIT0kX0dFVFsibnMiXT9pZGZfZXNjYXBlKCRjZikuIi4iOiIiKS50YWJsZSgkclsidGFibGUiXSkuIiAoIi5pbXBsb2RlKCIsICIsYXJyYXlfbWFwKCdpZGZfZXNjYXBlJywkclsidGFyZ2V0Il0pKS4iKSIuKHByZWdfbWF0Y2goIn5eKCRwZilcJH4iLCRyWyJvbl9kZWxldGUiXSk/IiBPTiBERUxFVEUgJHJbb25fZGVsZXRlXSI6IiIpLihwcmVnX21hdGNoKCJ+XigkcGYpXCR+Iiwkclsib25fdXBkYXRlIl0pPyIgT04gVVBEQVRFICRyW29uX3VwZGF0ZV0iOiIiKTt9ZnVuY3Rpb24KdGFyX2ZpbGUoJHEsJGtpKXskST1wYWNrKCJhMTAwYThhOGE4YTEyYTEyIiwkcSw2NDQsMCwwLGRlY29jdCgka2ktPnNpemUpLGRlY29jdCh0aW1lKCkpKTskZWI9OCozMjtmb3IoJHQ9MDskdDxzdHJsZW4oJEkpOyR0KyspJGViKz1vcmQoJElbJHRdKTskSS49c3ByaW50ZigiJTA2byIsJGViKS4iXDAgIjtlY2hvJEksc3RyX3JlcGVhdCgiXDAiLDUxMi1zdHJsZW4oJEkpKTska2ktPnNlbmQoKTtlY2hvCnN0cl9yZXBlYXQoIlwwIiw1MTEtKCRraS0+c2l6ZSs1MTEpJTUxMik7fWZ1bmN0aW9uCmluaV9ieXRlcygkU2QpeyRYPWluaV9nZXQoJFNkKTtzd2l0Y2goc3RydG9sb3dlcihzdWJzdHIoJFgsLTEpKSl7Y2FzZSdnJzokWCo9MTAyNDtjYXNlJ20nOiRYKj0xMDI0O2Nhc2Unayc6JFgqPTEwMjQ7fXJldHVybiRYO31mdW5jdGlvbgpkb2NfbGluaygkWWYsJGJpPSI8c3VwPj88L3N1cD4iKXtnbG9iYWwkeSwkZzska2g9JGctPnNlcnZlcl9pbmZvOyRXaT1wcmVnX3JlcGxhY2UoJ35eKFxkXC4/XGQpLip+cycsJ1wxJywka2gpOyRMaT1hcnJheSgnc3FsJz0+Imh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLyRXaS9lbi8iLCdzcWxpdGUnPT4iaHR0cHM6Ly93d3cuc3FsaXRlLm9yZy8iLCdwZ3NxbCc9PiJodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLyRXaS8iLCdtc3NxbCc9PiJodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5LyIsJ29yYWNsZSc9PiJodHRwczovL3d3dy5vcmFjbGUuY29tL3Bscy90b3BpYy9sb29rdXA/Y3R4PWRiIi5wcmVnX3JlcGxhY2UoJ35eLiogKFxkKylcLihcZCspXC5cZCtcLlxkK1wuXGQrLip+cycsJ1wxXDInLCRraCkuIiZpZD0iLCk7aWYocHJlZ19tYXRjaCgnfk1hcmlhREJ+Jywka2gpKXskTGlbJ3NxbCddPSJodHRwczovL21hcmlhZGIuY29tL2tiL2VuL2xpYnJhcnkvIjskWWZbJ3NxbCddPShpc3NldCgkWWZbJ21hcmlhZGInXSk/JFlmWydtYXJpYWRiJ106c3RyX3JlcGxhY2UoIi5odG1sIiwiLyIsJFlmWydzcWwnXSkpO31yZXR1cm4oJFlmWyR5XT8iPGEgaHJlZj0nIi5oKCRMaVskeV0uJFlmWyR5XSkuIiciLnRhcmdldF9ibGFuaygpLiI+JGJpPC9hPiI6IiIpO31mdW5jdGlvbgpvYl9nemVuY29kZSgkUCl7cmV0dXJuCmd6ZW5jb2RlKCRQKTt9ZnVuY3Rpb24KZGJfc2l6ZSgkbCl7Z2xvYmFsJGc7aWYoISRnLT5zZWxlY3RfZGIoJGwpKXJldHVybiI/IjskST0wO2ZvcmVhY2godGFibGVfc3RhdHVzKClhcyRSKSRJKz0kUlsiRGF0YV9sZW5ndGgiXSskUlsiSW5kZXhfbGVuZ3RoIl07cmV0dXJuCmZvcm1hdF9udW1iZXIoJEkpO31mdW5jdGlvbgpzZXRfdXRmOG1iNCgkaSl7Z2xvYmFsJGc7c3RhdGljJE49ZmFsc2U7aWYoISROJiZwcmVnX21hdGNoKCd+XGJ1dGY4bWI0fmknLCRpKSl7JE49dHJ1ZTtlY2hvIlNFVCBOQU1FUyAiLmNoYXJzZXQoJGcpLiI7XG5cbiI7fX1mdW5jdGlvbgpjb25uZWN0X2Vycm9yKCl7Z2xvYmFsJGIsJGcsJG5pLCRuLCRpYztpZihEQiE9IiIpe2hlYWRlcigiSFRUUC8xLjEgNDA0IE5vdCBGb3VuZCIpO3BhZ2VfaGVhZGVyKCdEYXRhYmFzZScuIjogIi5oKERCKSwnSW52YWxpZCBkYXRhYmFzZS4nLHRydWUpO31lbHNle2lmKCRfUE9TVFsiZGIiXSYmISRuKXF1ZXJpZXNfcmVkaXJlY3Qoc3Vic3RyKE1FLDAsLTEpLCdEYXRhYmFzZXMgaGF2ZSBiZWVuIGRyb3BwZWQuJyxkcm9wX2RhdGFiYXNlcygkX1BPU1RbImRiIl0pKTtwYWdlX2hlYWRlcignU2VsZWN0IGRhdGFiYXNlJywkbixmYWxzZSk7ZWNobyI8cCBjbGFzcz0nbGlua3MnPlxuIjtmb3JlYWNoKGFycmF5KCdkYXRhYmFzZSc9PidDcmVhdGUgZGF0YWJhc2UnLCdwcml2aWxlZ2VzJz0+J1ByaXZpbGVnZXMnLCdwcm9jZXNzbGlzdCc9PidQcm9jZXNzIGxpc3QnLCd2YXJpYWJsZXMnPT4nVmFyaWFibGVzJywnc3RhdHVzJz0+J1N0YXR1cycsKWFzJHo9PiRYKXtpZihzdXBwb3J0KCR6KSllY2hvIjxhIGhyZWY9JyIuaChNRSkuIiR6PSc+JFg8L2E+XG4iO31lY2hvIjxwPiIuc3ByaW50ZignJXMgdmVyc2lvbjogJXMgdGhyb3VnaCBQSFAgZXh0ZW5zaW9uICVzJywkaWNbRFJJVkVSXSwiPGI+Ii5oKCRnLT5zZXJ2ZXJfaW5mbykuIjwvYj4iLCI8Yj4kZy0+ZXh0ZW5zaW9uPC9iPiIpLiJcbiIsIjxwPiIuc3ByaW50ZignTG9nZ2VkIGFzOiAlcycsIjxiPiIuaChsb2dnZWRfdXNlcigpKS4iPC9iPiIpLiJcbiI7JGs9JGItPmRhdGFiYXNlcygpO2lmKCRrKXskYWg9c3VwcG9ydCgic2NoZW1lIik7JGxiPWNvbGxhdGlvbnMoKTtlY2hvIjxmb3JtIGFjdGlvbj0nJyBtZXRob2Q9J3Bvc3QnPlxuIiwiPHRhYmxlIGNlbGxzcGFjaW5nPScwJyBjbGFzcz0nY2hlY2thYmxlJz5cbiIsc2NyaXB0KCJtaXhpbihxc2woJ3RhYmxlJyksIHtvbmNsaWNrOiB0YWJsZUNsaWNrLCBvbmRibGNsaWNrOiBwYXJ0aWFsQXJnKHRhYmxlQ2xpY2ssIHRydWUpfSk7IiksIjx0aGVhZD48dHI+Ii4oc3VwcG9ydCgiZGF0YWJhc2UiKT8iPHRkPiI6IiIpLiI8dGg+Ii4nRGF0YWJhc2UnLiIgLSA8YSBocmVmPSciLmgoTUUpLiJyZWZyZXNoPTEnPiIuJ1JlZnJlc2gnLiI8L2E+Ii4iPHRkPiIuJ0NvbGxhdGlvbicuIjx0ZD4iLidUYWJsZXMnLiI8dGQ+Ii4nU2l6ZScuIiAtIDxhIGhyZWY9JyIuaChNRSkuImRic2l6ZT0xJz4iLidDb21wdXRlJy4iPC9hPiIuc2NyaXB0KCJxc2woJ2EnKS5vbmNsaWNrID0gcGFydGlhbChhamF4U2V0SHRtbCwgJyIuanNfZXNjYXBlKE1FKS4ic2NyaXB0PWNvbm5lY3QnKTsiLCIiKS4iPC90aGVhZD5cbiI7JGs9KCRfR0VUWyJkYnNpemUiXT9jb3VudF90YWJsZXMoJGspOmFycmF5X2ZsaXAoJGspKTtmb3JlYWNoKCRrCmFzJGw9PiRTKXskU2c9aChNRSkuImRiPSIudXJsZW5jb2RlKCRsKTskdT1oKCJEYi0iLiRsKTtlY2hvIjx0ciIub2RkKCkuIj4iLihzdXBwb3J0KCJkYXRhYmFzZSIpPyI8dGQ+Ii5jaGVja2JveCgiZGJbXSIsJGwsaW5fYXJyYXkoJGwsKGFycmF5KSRfUE9TVFsiZGIiXSksIiIsIiIsIiIsJHUpOiIiKSwiPHRoPjxhIGhyZWY9JyRTZycgaWQ9JyR1Jz4iLmgoJGwpLiI8L2E+IjskZD1oKGRiX2NvbGxhdGlvbigkbCwkbGIpKTtlY2hvIjx0ZD4iLihzdXBwb3J0KCJkYXRhYmFzZSIpPyI8YSBocmVmPSckU2ciLigkYWg/IiZhbXA7bnM9IjoiIikuIiZhbXA7ZGF0YWJhc2U9JyB0aXRsZT0nIi4nQWx0ZXIgZGF0YWJhc2UnLiInPiRkPC9hPiI6JGQpLCI8dGQgYWxpZ249J3JpZ2h0Jz48YSBocmVmPSckU2cmYW1wO3NjaGVtYT0nIGlkPSd0YWJsZXMtIi5oKCRsKS4iJyB0aXRsZT0nIi4nRGF0YWJhc2Ugc2NoZW1hJy4iJz4iLigkX0dFVFsiZGJzaXplIl0/JFM6Ij8iKS4iPC9hPiIsIjx0ZCBhbGlnbj0ncmlnaHQnIGlkPSdzaXplLSIuaCgkbCkuIic+Ii4oJF9HRVRbImRic2l6ZSJdP2RiX3NpemUoJGwpOiI/IiksIlxuIjt9ZWNobyI8L3RhYmxlPlxuIiwoc3VwcG9ydCgiZGF0YWJhc2UiKT8iPGRpdiBjbGFzcz0nZm9vdGVyJz48ZGl2PlxuIi4iPGZpZWxkc2V0PjxsZWdlbmQ+Ii4nU2VsZWN0ZWQnLiIgPHNwYW4gaWQ9J3NlbGVjdGVkJz48L3NwYW4+PC9sZWdlbmQ+PGRpdj5cbiIuIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2FsbCcgdmFsdWU9Jyc+Ii5zY3JpcHQoInFzbCgnaW5wdXQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxlY3RDb3VudCgnc2VsZWN0ZWQnLCBmb3JtQ2hlY2tlZCh0aGlzLCAvXmRiLykpOyB9OyIpLiI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdkcm9wJyB2YWx1ZT0nIi4nRHJvcCcuIic+Ii5jb25maXJtKCkuIlxuIi4iPC9kaXY+PC9maWVsZHNldD5cbiIuIjwvZGl2PjwvZGl2PlxuIjoiIiksIjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3Rva2VuJyB2YWx1ZT0nJG5pJz5cbiIsIjwvZm9ybT5cbiIsc2NyaXB0KCJ0YWJsZUNoZWNrKCk7Iik7fX1wYWdlX2Zvb3RlcigiZGIiKTt9aWYoaXNzZXQoJF9HRVRbInN0YXR1cyJdKSkkX0dFVFsidmFyaWFibGVzIl09JF9HRVRbInN0YXR1cyJdO2lmKGlzc2V0KCRfR0VUWyJpbXBvcnQiXSkpJF9HRVRbInNxbCJdPSRfR0VUWyJpbXBvcnQiXTtpZighKERCIT0iIj8kZy0+c2VsZWN0X2RiKERCKTppc3NldCgkX0dFVFsic3FsIl0pfHxpc3NldCgkX0dFVFsiZHVtcCJdKXx8aXNzZXQoJF9HRVRbImRhdGFiYXNlIl0pfHxpc3NldCgkX0dFVFsicHJvY2Vzc2xpc3QiXSl8fGlzc2V0KCRfR0VUWyJwcml2aWxlZ2VzIl0pfHxpc3NldCgkX0dFVFsidXNlciJdKXx8aXNzZXQoJF9HRVRbInZhcmlhYmxlcyJdKXx8JF9HRVRbInNjcmlwdCJdPT0iY29ubmVjdCJ8fCRfR0VUWyJzY3JpcHQiXT09ImtpbGwiKSl7aWYoREIhPSIifHwkX0dFVFsicmVmcmVzaCJdKXtyZXN0YXJ0X3Nlc3Npb24oKTtzZXRfc2Vzc2lvbigiZGJzIixudWxsKTt9Y29ubmVjdF9lcnJvcigpO2V4aXQ7fWlmKHN1cHBvcnQoInNjaGVtZSIpKXtpZihEQiE9IiImJiRfR0VUWyJucyJdIT09IiIpe2lmKCFpc3NldCgkX0dFVFsibnMiXSkpcmVkaXJlY3QocHJlZ19yZXBsYWNlKCd+bnM9W14mXSomficsJycsTUUpLiJucz0iLmdldF9zY2hlbWEoKSk7aWYoIXNldF9zY2hlbWEoJF9HRVRbIm5zIl0pKXtoZWFkZXIoIkhUVFAvMS4xIDQwNCBOb3QgRm91bmQiKTtwYWdlX2hlYWRlcignU2NoZW1hJy4iOiAiLmgoJF9HRVRbIm5zIl0pLCdJbnZhbGlkIHNjaGVtYS4nLHRydWUpO3BhZ2VfZm9vdGVyKCJucyIpO2V4aXQ7fX19JHBmPSJSRVNUUklDVHxOTyBBQ1RJT058Q0FTQ0FERXxTRVQgTlVMTHxTRVQgREVGQVVMVCI7Y2xhc3MKVG1wRmlsZXt2YXIkaGFuZGxlcjt2YXIkc2l6ZTtmdW5jdGlvbgpfX2NvbnN0cnVjdCgpeyR0aGlzLT5oYW5kbGVyPXRtcGZpbGUoKTt9ZnVuY3Rpb24Kd3JpdGUoJENiKXskdGhpcy0+c2l6ZSs9c3RybGVuKCRDYik7ZndyaXRlKCR0aGlzLT5oYW5kbGVyLCRDYik7fWZ1bmN0aW9uCnNlbmQoKXtmc2VlaygkdGhpcy0+aGFuZGxlciwwKTtmcGFzc3RocnUoJHRoaXMtPmhhbmRsZXIpO2ZjbG9zZSgkdGhpcy0+aGFuZGxlcik7fX0kX2M9IicoPzonJ3xbXidcXFxcXXxcXFxcLikqJyI7JFRkPSJJTnxPVVR8SU5PVVQiO2lmKGlzc2V0KCRfR0VUWyJzZWxlY3QiXSkmJigkX1BPU1RbImVkaXQiXXx8JF9QT1NUWyJjbG9uZSJdKSYmISRfUE9TVFsic2F2ZSJdKSRfR0VUWyJlZGl0Il09JF9HRVRbInNlbGVjdCJdO2lmKGlzc2V0KCRfR0VUWyJjYWxsZiJdKSkkX0dFVFsiY2FsbCJdPSRfR0VUWyJjYWxsZiJdO2lmKGlzc2V0KCRfR0VUWyJmdW5jdGlvbiJdKSkkX0dFVFsicHJvY2VkdXJlIl09JF9HRVRbImZ1bmN0aW9uIl07aWYoaXNzZXQoJF9HRVRbImRvd25sb2FkIl0pKXskYT0kX0dFVFsiZG93bmxvYWQiXTskcD1maWVsZHMoJGEpO2hlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKTtoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIuZnJpZW5kbHlfdXJsKCIkYS0iLmltcGxvZGUoIl8iLCRfR0VUWyJ3aGVyZSJdKSkuIi4iLmZyaWVuZGx5X3VybCgkX0dFVFsiZmllbGQiXSkpOyRMPWFycmF5KGlkZl9lc2NhcGUoJF9HRVRbImZpZWxkIl0pKTskSD0kbS0+c2VsZWN0KCRhLCRMLGFycmF5KHdoZXJlKCRfR0VULCRwKSksJEwpOyRKPSgkSD8kSC0+ZmV0Y2hfcm93KCk6YXJyYXkoKSk7ZWNobyRtLT52YWx1ZSgkSlswXSwkcFskX0dFVFsiZmllbGQiXV0pO2V4aXQ7fWVsc2VpZihpc3NldCgkX0dFVFsidGFibGUiXSkpeyRhPSRfR0VUWyJ0YWJsZSJdOyRwPWZpZWxkcygkYSk7aWYoISRwKSRuPWVycm9yKCk7JFI9dGFibGVfc3RhdHVzMSgkYSx0cnVlKTskRD0kYi0+dGFibGVOYW1lKCRSKTtwYWdlX2hlYWRlcigoJHAmJmlzX3ZpZXcoJFIpPyRSWydFbmdpbmUnXT09J21hdGVyaWFsaXplZCB2aWV3Jz8nTWF0ZXJpYWxpemVkIHZpZXcnOidWaWV3JzonVGFibGUnKS4iOiAiLigkRCE9IiI/JEQ6aCgkYSkpLCRuKTskYi0+c2VsZWN0TGlua3MoJFIpOyRyYj0kUlsiQ29tbWVudCJdO2lmKCRyYiE9IiIpZWNobyI8cCBjbGFzcz0nbm93cmFwJz4iLidDb21tZW50Jy4iOiAiLmgoJHJiKS4iXG4iO2lmKCRwKSRiLT50YWJsZVN0cnVjdHVyZVByaW50KCRwKTtpZighaXNfdmlldygkUikpe2lmKHN1cHBvcnQoImluZGV4ZXMiKSl7ZWNobyI8aDMgaWQ9J2luZGV4ZXMnPiIuJ0luZGV4ZXMnLiI8L2gzPlxuIjskeD1pbmRleGVzKCRhKTtpZigkeCkkYi0+dGFibGVJbmRleGVzUHJpbnQoJHgpO2VjaG8nPHAgY2xhc3M9ImxpbmtzIj48YSBocmVmPSInLmgoTUUpLidpbmRleGVzPScudXJsZW5jb2RlKCRhKS4nIj4nLidBbHRlciBpbmRleGVzJy4iPC9hPlxuIjt9aWYoZmtfc3VwcG9ydCgkUikpe2VjaG8iPGgzIGlkPSdmb3JlaWduLWtleXMnPiIuJ0ZvcmVpZ24ga2V5cycuIjwvaDM+XG4iOyRoZD1mb3JlaWduX2tleXMoJGEpO2lmKCRoZCl7ZWNobyI8dGFibGUgY2VsbHNwYWNpbmc9JzAnPlxuIiwiPHRoZWFkPjx0cj48dGg+Ii4nU291cmNlJy4iPHRkPiIuJ1RhcmdldCcuIjx0ZD4iLidPTiBERUxFVEUnLiI8dGQ+Ii4nT04gVVBEQVRFJy4iPHRkPjwvdGhlYWQ+XG4iO2ZvcmVhY2goJGhkCmFzJEQ9PiRyKXtlY2hvIjx0ciB0aXRsZT0nIi5oKCREKS4iJz4iLCI8dGg+PGk+Ii5pbXBsb2RlKCI8L2k+LCA8aT4iLGFycmF5X21hcCgnaCcsJHJbInNvdXJjZSJdKSkuIjwvaT4iLCI8dGQ+PGEgaHJlZj0nIi5oKCRyWyJkYiJdIT0iIj9wcmVnX3JlcGxhY2UoJ35kYj1bXiZdKn4nLCJkYj0iLnVybGVuY29kZSgkclsiZGIiXSksTUUpOigkclsibnMiXSE9IiI/cHJlZ19yZXBsYWNlKCd+bnM9W14mXSp+JywibnM9Ii51cmxlbmNvZGUoJHJbIm5zIl0pLE1FKTpNRSkpLiJ0YWJsZT0iLnVybGVuY29kZSgkclsidGFibGUiXSkuIic+Ii4oJHJbImRiIl0hPSIiPyI8Yj4iLmgoJHJbImRiIl0pLiI8L2I+LiI6IiIpLigkclsibnMiXSE9IiI/IjxiPiIuaCgkclsibnMiXSkuIjwvYj4uIjoiIikuaCgkclsidGFibGUiXSkuIjwvYT4iLCIoPGk+Ii5pbXBsb2RlKCI8L2k+LCA8aT4iLGFycmF5X21hcCgnaCcsJHJbInRhcmdldCJdKSkuIjwvaT4pIiwiPHRkPiIuaCgkclsib25fZGVsZXRlIl0pLiJcbiIsIjx0ZD4iLmgoJHJbIm9uX3VwZGF0ZSJdKS4iXG4iLCc8dGQ+PGEgaHJlZj0iJy5oKE1FLidmb3JlaWduPScudXJsZW5jb2RlKCRhKS4nJm5hbWU9Jy51cmxlbmNvZGUoJEQpKS4nIj4nLidBbHRlcicuJzwvYT4nO31lY2hvIjwvdGFibGU+XG4iO31lY2hvJzxwIGNsYXNzPSJsaW5rcyI+PGEgaHJlZj0iJy5oKE1FKS4nZm9yZWlnbj0nLnVybGVuY29kZSgkYSkuJyI+Jy4nQWRkIGZvcmVpZ24ga2V5Jy4iPC9hPlxuIjt9fWlmKHN1cHBvcnQoaXNfdmlldygkUik/InZpZXdfdHJpZ2dlciI6InRyaWdnZXIiKSl7ZWNobyI8aDMgaWQ9J3RyaWdnZXJzJz4iLidUcmlnZ2VycycuIjwvaDM+XG4iOyR6aT10cmlnZ2VycygkYSk7aWYoJHppKXtlY2hvIjx0YWJsZSBjZWxsc3BhY2luZz0nMCc+XG4iO2ZvcmVhY2goJHppCmFzJHo9PiRYKWVjaG8iPHRyIHZhbGlnbj0ndG9wJz48dGQ+Ii5oKCRYWzBdKS4iPHRkPiIuaCgkWFsxXSkuIjx0aD4iLmgoJHopLiI8dGQ+PGEgaHJlZj0nIi5oKE1FLid0cmlnZ2VyPScudXJsZW5jb2RlKCRhKS4nJm5hbWU9Jy51cmxlbmNvZGUoJHopKS4iJz4iLidBbHRlcicuIjwvYT5cbiI7ZWNobyI8L3RhYmxlPlxuIjt9ZWNobyc8cCBjbGFzcz0ibGlua3MiPjxhIGhyZWY9IicuaChNRSkuJ3RyaWdnZXI9Jy51cmxlbmNvZGUoJGEpLiciPicuJ0FkZCB0cmlnZ2VyJy4iPC9hPlxuIjt9fWVsc2VpZihpc3NldCgkX0dFVFsic2NoZW1hIl0pKXtwYWdlX2hlYWRlcignRGF0YWJhc2Ugc2NoZW1hJywiIixhcnJheSgpLGgoREIuKCRfR0VUWyJucyJdPyIuJF9HRVRbbnNdIjoiIikpKTskUWg9YXJyYXkoKTskUmg9YXJyYXkoKTskZWE9KCRfR0VUWyJzY2hlbWEiXT8kX0dFVFsic2NoZW1hIl06JF9DT09LSUVbImFkbWluZXJfc2NoZW1hLSIuc3RyX3JlcGxhY2UoIi4iLCJfIixEQildKTtwcmVnX21hdGNoX2FsbCgnfihbXjpdKyk6KFstMC05Ll0rKXgoWy0wLTkuXSspKF98JCl+JywkZWEsJENlLFBSRUdfU0VUX09SREVSKTtmb3JlYWNoKCRDZQphcyR0PT4kQyl7JFFoWyRDWzFdXT1hcnJheSgkQ1syXSwkQ1szXSk7JFJoW109IlxuXHQnIi5qc19lc2NhcGUoJENbMV0pLiInOiBbICRDWzJdLCAkQ1szXSBdIjt9JG9pPTA7JFBhPS0xOyRaZz1hcnJheSgpOyRFZz1hcnJheSgpOyRyZT1hcnJheSgpO2ZvcmVhY2godGFibGVfc3RhdHVzKCcnLHRydWUpYXMkUT0+JFIpe2lmKGlzX3ZpZXcoJFIpKWNvbnRpbnVlOyRlZz0wOyRaZ1skUV1bImZpZWxkcyJdPWFycmF5KCk7Zm9yZWFjaChmaWVsZHMoJFEpYXMkRD0+JG8peyRlZys9MS4yNTskb1sicG9zIl09JGVnOyRaZ1skUV1bImZpZWxkcyJdWyREXT0kbzt9JFpnWyRRXVsicG9zIl09KCRRaFskUV0/JFFoWyRRXTphcnJheSgkb2ksMCkpO2ZvcmVhY2goJGItPmZvcmVpZ25LZXlzKCRRKWFzJFgpe2lmKCEkWFsiZGIiXSl7JHBlPSRQYTtpZigkUWhbJFFdWzFdfHwkUWhbJFhbInRhYmxlIl1dWzFdKSRwZT1taW4oZmxvYXR2YWwoJFFoWyRRXVsxXSksZmxvYXR2YWwoJFFoWyRYWyJ0YWJsZSJdXVsxXSkpLTE7ZWxzZSRQYS09LjE7d2hpbGUoJHJlWyhzdHJpbmcpJHBlXSkkcGUtPS4wMDAxOyRaZ1skUV1bInJlZmVyZW5jZXMiXVskWFsidGFibGUiXV1bKHN0cmluZykkcGVdPWFycmF5KCRYWyJzb3VyY2UiXSwkWFsidGFyZ2V0Il0pOyRFZ1skWFsidGFibGUiXV1bJFFdWyhzdHJpbmcpJHBlXT0kWFsidGFyZ2V0Il07JHJlWyhzdHJpbmcpJHBlXT10cnVlO319JG9pPW1heCgkb2ksJFpnWyRRXVsicG9zIl1bMF0rMi41KyRlZyk7fWVjaG8nPGRpdiBpZD0ic2NoZW1hIiBzdHlsZT0iaGVpZ2h0OiAnLCRvaSwnZW07Ij4KPHNjcmlwdCcsbm9uY2UoKSwnPgpxcyhcJyNzY2hlbWFcJykub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9Owp2YXIgdGFibGVQb3MgPSB7JyxpbXBsb2RlKCIsIiwkUmgpLiJcbiIsJ307CnZhciBlbSA9IHFzKFwnI3NjaGVtYVwnKS5vZmZzZXRIZWlnaHQgLyAnLCRvaSwnOwpkb2N1bWVudC5vbm1vdXNlbW92ZSA9IHNjaGVtYU1vdXNlbW92ZTsKZG9jdW1lbnQub25tb3VzZXVwID0gcGFydGlhbEFyZyhzY2hlbWFNb3VzZXVwLCBcJycsanNfZXNjYXBlKERCKSwnXCcpOwo8L3NjcmlwdD4KJztmb3JlYWNoKCRaZwphcyREPT4kUSl7ZWNobyI8ZGl2IGNsYXNzPSd0YWJsZScgc3R5bGU9J3RvcDogIi4kUVsicG9zIl1bMF0uImVtOyBsZWZ0OiAiLiRRWyJwb3MiXVsxXS4iZW07Jz4iLCc8YSBocmVmPSInLmgoTUUpLid0YWJsZT0nLnVybGVuY29kZSgkRCkuJyI+PGI+Jy5oKCREKS4iPC9iPjwvYT4iLHNjcmlwdCgicXNsKCdkaXYnKS5vbm1vdXNlZG93biA9IHNjaGVtYU1vdXNlZG93bjsiKTtmb3JlYWNoKCRRWyJmaWVsZHMiXWFzJG8peyRYPSc8c3BhbicudHlwZV9jbGFzcygkb1sidHlwZSJdKS4nIHRpdGxlPSInLmgoJG9bImZ1bGxfdHlwZSJdLigkb1sibnVsbCJdPyIgTlVMTCI6JycpKS4nIj4nLmgoJG9bImZpZWxkIl0pLic8L3NwYW4+JztlY2hvIjxicj4iLigkb1sicHJpbWFyeSJdPyI8aT4kWDwvaT4iOiRYKTt9Zm9yZWFjaCgoYXJyYXkpJFFbInJlZmVyZW5jZXMiXWFzJFhoPT4kRmcpe2ZvcmVhY2goJEZnCmFzJHBlPT4kQmcpeyRxZT0kcGUtJFFoWyREXVsxXTskdD0wO2ZvcmVhY2goJEJnWzBdYXMkdmgpZWNobyJcbjxkaXYgY2xhc3M9J3JlZmVyZW5jZXMnIHRpdGxlPSciLmgoJFhoKS4iJyBpZD0ncmVmcyRwZS0iLigkdCsrKS4iJyBzdHlsZT0nbGVmdDogJHFlIi4iZW07IHRvcDogIi4kUVsiZmllbGRzIl1bJHZoXVsicG9zIl0uImVtOyBwYWRkaW5nLXRvcDogLjVlbTsnPjxkaXYgc3R5bGU9J2JvcmRlci10b3A6IDFweCBzb2xpZCBHcmF5OyB3aWR0aDogIi4oLSRxZSkuImVtOyc+PC9kaXY+PC9kaXY+Ijt9fWZvcmVhY2goKGFycmF5KSRFZ1skRF1hcyRYaD0+JEZnKXtmb3JlYWNoKCRGZwphcyRwZT0+JGYpeyRxZT0kcGUtJFFoWyREXVsxXTskdD0wO2ZvcmVhY2goJGYKYXMkV2gpZWNobyJcbjxkaXYgY2xhc3M9J3JlZmVyZW5jZXMnIHRpdGxlPSciLmgoJFhoKS4iJyBpZD0ncmVmZCRwZS0iLigkdCsrKS4iJyBzdHlsZT0nbGVmdDogJHFlIi4iZW07IHRvcDogIi4kUVsiZmllbGRzIl1bJFdoXVsicG9zIl0uImVtOyBoZWlnaHQ6IDEuMjVlbTsgYmFja2dyb3VuZDogdXJsKCIuaChwcmVnX3JlcGxhY2UoIn5cXD8uKn4iLCIiLE1FKS4iP2ZpbGU9YXJyb3cuZ2lmKSBuby1yZXBlYXQgcmlnaHQgY2VudGVyOyZ2ZXJzaW9uPTQuOC4xIikuIic+PGRpdiBzdHlsZT0naGVpZ2h0OiAuNWVtOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgR3JheTsgd2lkdGg6ICIuKC0kcWUpLiJlbTsnPjwvZGl2PjwvZGl2PiI7fX1lY2hvIlxuPC9kaXY+XG4iO31mb3JlYWNoKCRaZwphcyREPT4kUSl7Zm9yZWFjaCgoYXJyYXkpJFFbInJlZmVyZW5jZXMiXWFzJFhoPT4kRmcpe2ZvcmVhY2goJEZnCmFzJHBlPT4kQmcpeyRRZT0kb2k7JEdlPS0xMDtmb3JlYWNoKCRCZ1swXWFzJHo9PiR2aCl7JGZnPSRRWyJwb3MiXVswXSskUVsiZmllbGRzIl1bJHZoXVsicG9zIl07JGdnPSRaZ1skWGhdWyJwb3MiXVswXSskWmdbJFhoXVsiZmllbGRzIl1bJEJnWzFdWyR6XV1bInBvcyJdOyRRZT1taW4oJFFlLCRmZywkZ2cpOyRHZT1tYXgoJEdlLCRmZywkZ2cpO31lY2hvIjxkaXYgY2xhc3M9J3JlZmVyZW5jZXMnIGlkPSdyZWZsJHBlJyBzdHlsZT0nbGVmdDogJHBlIi4iZW07IHRvcDogJFFlIi4iZW07IHBhZGRpbmc6IC41ZW0gMDsnPjxkaXYgc3R5bGU9J2JvcmRlci1yaWdodDogMXB4IHNvbGlkIEdyYXk7IG1hcmdpbi10b3A6IDFweDsgaGVpZ2h0OiAiLigkR2UtJFFlKS4iZW07Jz48L2Rpdj48L2Rpdj5cbiI7fX19ZWNobyc8L2Rpdj4KPHAgY2xhc3M9ImxpbmtzIj48YSBocmVmPSInLGgoTUUuInNjaGVtYT0iLnVybGVuY29kZSgkZWEpKSwnIiBpZD0ic2NoZW1hLWxpbmsiPlBlcm1hbmVudCBsaW5rPC9hPgonO31lbHNlaWYoaXNzZXQoJF9HRVRbImR1bXAiXSkpeyRhPSRfR0VUWyJkdW1wIl07aWYoJF9QT1NUJiYhJG4peyRGYj0iIjtmb3JlYWNoKGFycmF5KCJvdXRwdXQiLCJmb3JtYXQiLCJkYl9zdHlsZSIsInJvdXRpbmVzIiwiZXZlbnRzIiwidGFibGVfc3R5bGUiLCJhdXRvX2luY3JlbWVudCIsInRyaWdnZXJzIiwiZGF0YV9zdHlsZSIpYXMkeikkRmIuPSImJHo9Ii51cmxlbmNvZGUoJF9QT1NUWyR6XSk7Y29va2llKCJhZG1pbmVyX2V4cG9ydCIsc3Vic3RyKCRGYiwxKSk7JFM9YXJyYXlfZmxpcCgoYXJyYXkpJF9QT1NUWyJ0YWJsZXMiXSkrYXJyYXlfZmxpcCgoYXJyYXkpJF9QT1NUWyJkYXRhIl0pOyRNYz1kdW1wX2hlYWRlcnMoKGNvdW50KCRTKT09MT9rZXkoJFMpOkRCKSwoREI9PSIifHxjb3VudCgkUyk+MSkpOyRiZT1wcmVnX21hdGNoKCd+c3FsficsJF9QT1NUWyJmb3JtYXQiXSk7aWYoJGJlKXtlY2hvIi0tIEFkbWluZXIgJGlhICIuJGljW0RSSVZFUl0uIiAiLnN0cl9yZXBsYWNlKCJcbiIsIiAiLCRnLT5zZXJ2ZXJfaW5mbykuIiBkdW1wXG5cbiI7aWYoJHk9PSJzcWwiKXtlY2hvIlNFVCBOQU1FUyB1dGY4OwpTRVQgdGltZV96b25lID0gJyswMDowMCc7ClNFVCBmb3JlaWduX2tleV9jaGVja3MgPSAwOwoiLigkX1BPU1RbImRhdGFfc3R5bGUiXT8iU0VUIHNxbF9tb2RlID0gJ05PX0FVVE9fVkFMVUVfT05fWkVSTyc7CiI6IiIpLiIKIjskZy0+cXVlcnkoIlNFVCB0aW1lX3pvbmUgPSAnKzAwOjAwJyIpOyRnLT5xdWVyeSgiU0VUIHNxbF9tb2RlID0gJyciKTt9fSRIaD0kX1BPU1RbImRiX3N0eWxlIl07JGs9YXJyYXkoREIpO2lmKERCPT0iIil7JGs9JF9QT1NUWyJkYXRhYmFzZXMiXTtpZihpc19zdHJpbmcoJGspKSRrPWV4cGxvZGUoIlxuIixydHJpbShzdHJfcmVwbGFjZSgiXHIiLCIiLCRrKSwiXG4iKSk7fWZvcmVhY2goKGFycmF5KSRrCmFzJGwpeyRiLT5kdW1wRGF0YWJhc2UoJGwpO2lmKCRnLT5zZWxlY3RfZGIoJGwpKXtpZigkYmUmJnByZWdfbWF0Y2goJ35DUkVBVEV+JywkSGgpJiYoJGk9JGctPnJlc3VsdCgiU0hPVyBDUkVBVEUgREFUQUJBU0UgIi5pZGZfZXNjYXBlKCRsKSwxKSkpe3NldF91dGY4bWI0KCRpKTtpZigkSGg9PSJEUk9QK0NSRUFURSIpZWNobyJEUk9QIERBVEFCQVNFIElGIEVYSVNUUyAiLmlkZl9lc2NhcGUoJGwpLiI7XG4iO2VjaG8iJGk7XG4iO31pZigkYmUpe2lmKCRIaCllY2hvCnVzZV9zcWwoJGwpLiI7XG5cbiI7JElmPSIiO2lmKCRfUE9TVFsicm91dGluZXMiXSl7Zm9yZWFjaChhcnJheSgiRlVOQ1RJT04iLCJQUk9DRURVUkUiKWFzJFRnKXtmb3JlYWNoKGdldF9yb3dzKCJTSE9XICRUZyBTVEFUVVMgV0hFUkUgRGIgPSAiLnEoJGwpLG51bGwsIi0tICIpYXMkSil7JGk9cmVtb3ZlX2RlZmluZXIoJGctPnJlc3VsdCgiU0hPVyBDUkVBVEUgJFRnICIuaWRmX2VzY2FwZSgkSlsiTmFtZSJdKSwyKSk7c2V0X3V0ZjhtYjQoJGkpOyRJZi49KCRIaCE9J0RST1ArQ1JFQVRFJz8iRFJPUCAkVGcgSUYgRVhJU1RTICIuaWRmX2VzY2FwZSgkSlsiTmFtZSJdKS4iOztcbiI6IiIpLiIkaTs7XG5cbiI7fX19aWYoJF9QT1NUWyJldmVudHMiXSl7Zm9yZWFjaChnZXRfcm93cygiU0hPVyBFVkVOVFMiLG51bGwsIi0tICIpYXMkSil7JGk9cmVtb3ZlX2RlZmluZXIoJGctPnJlc3VsdCgiU0hPVyBDUkVBVEUgRVZFTlQgIi5pZGZfZXNjYXBlKCRKWyJOYW1lIl0pLDMpKTtzZXRfdXRmOG1iNCgkaSk7JElmLj0oJEhoIT0nRFJPUCtDUkVBVEUnPyJEUk9QIEVWRU5UIElGIEVYSVNUUyAiLmlkZl9lc2NhcGUoJEpbIk5hbWUiXSkuIjs7XG4iOiIiKS4iJGk7O1xuXG4iO319aWYoJElmKWVjaG8iREVMSU1JVEVSIDs7XG5cbiRJZiIuIkRFTElNSVRFUiA7XG5cbiI7fWlmKCRfUE9TVFsidGFibGVfc3R5bGUiXXx8JF9QT1NUWyJkYXRhX3N0eWxlIl0peyRZaT1hcnJheSgpO2ZvcmVhY2godGFibGVfc3RhdHVzKCcnLHRydWUpYXMkRD0+JFIpeyRRPShEQj09IiJ8fGluX2FycmF5KCRELChhcnJheSkkX1BPU1RbInRhYmxlcyJdKSk7JFBiPShEQj09IiJ8fGluX2FycmF5KCRELChhcnJheSkkX1BPU1RbImRhdGEiXSkpO2lmKCRRfHwkUGIpe2lmKCRNYz09InRhciIpeyRraT1uZXcKVG1wRmlsZTtvYl9zdGFydChhcnJheSgka2ksJ3dyaXRlJyksMWU1KTt9JGItPmR1bXBUYWJsZSgkRCwoJFE/JF9QT1NUWyJ0YWJsZV9zdHlsZSJdOiIiKSwoaXNfdmlldygkUik/MjowKSk7aWYoaXNfdmlldygkUikpJFlpW109JEQ7ZWxzZWlmKCRQYil7JHA9ZmllbGRzKCREKTskYi0+ZHVtcERhdGEoJEQsJF9QT1NUWyJkYXRhX3N0eWxlIl0sIlNFTEVDVCAqIi5jb252ZXJ0X2ZpZWxkcygkcCwkcCkuIiBGUk9NICIudGFibGUoJEQpKTt9aWYoJGJlJiYkX1BPU1RbInRyaWdnZXJzIl0mJiRRJiYoJHppPXRyaWdnZXJfc3FsKCREKSkpZWNobyJcbkRFTElNSVRFUiA7O1xuJHppXG5ERUxJTUlURVIgO1xuIjtpZigkTWM9PSJ0YXIiKXtvYl9lbmRfZmx1c2goKTt0YXJfZmlsZSgoREIhPSIiPyIiOiIkbC8iKS4iJEQuY3N2Iiwka2kpO31lbHNlaWYoJGJlKWVjaG8iXG4iO319aWYoZnVuY3Rpb25fZXhpc3RzKCdmb3JlaWduX2tleXNfc3FsJykpe2ZvcmVhY2godGFibGVfc3RhdHVzKCcnLHRydWUpYXMkRD0+JFIpeyRRPShEQj09IiJ8fGluX2FycmF5KCRELChhcnJheSkkX1BPU1RbInRhYmxlcyJdKSk7aWYoJFEmJiFpc192aWV3KCRSKSllY2hvCmZvcmVpZ25fa2V5c19zcWwoJEQpO319Zm9yZWFjaCgkWWkKYXMkWGkpJGItPmR1bXBUYWJsZSgkWGksJF9QT1NUWyJ0YWJsZV9zdHlsZSJdLDEpO2lmKCRNYz09InRhciIpZWNobwpwYWNrKCJ4NTEyIik7fX19aWYoJGJlKWVjaG8iLS0gIi4kZy0+cmVzdWx0KCJTRUxFQ1QgTk9XKCkiKS4iXG4iO2V4aXQ7fXBhZ2VfaGVhZGVyKCdFeHBvcnQnLCRuLCgkX0dFVFsiZXhwb3J0Il0hPSIiP2FycmF5KCJ0YWJsZSI9PiRfR0VUWyJleHBvcnQiXSk6YXJyYXkoKSksaChEQikpO2VjaG8nCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJsYXlvdXQiPgonOyRUYj1hcnJheSgnJywnVVNFJywnRFJPUCtDUkVBVEUnLCdDUkVBVEUnKTskU2g9YXJyYXkoJycsJ0RST1ArQ1JFQVRFJywnQ1JFQVRFJyk7JFFiPWFycmF5KCcnLCdUUlVOQ0FURStJTlNFUlQnLCdJTlNFUlQnKTtpZigkeT09InNxbCIpJFFiW109J0lOU0VSVCtVUERBVEUnO3BhcnNlX3N0cigkX0NPT0tJRVsiYWRtaW5lcl9leHBvcnQiXSwkSik7aWYoISRKKSRKPWFycmF5KCJvdXRwdXQiPT4idGV4dCIsImZvcm1hdCI9PiJzcWwiLCJkYl9zdHlsZSI9PihEQiE9IiI/IiI6IkNSRUFURSIpLCJ0YWJsZV9zdHlsZSI9PiJEUk9QK0NSRUFURSIsImRhdGFfc3R5bGUiPT4iSU5TRVJUIik7aWYoIWlzc2V0KCRKWyJldmVudHMiXSkpeyRKWyJyb3V0aW5lcyJdPSRKWyJldmVudHMiXT0oJF9HRVRbImR1bXAiXT09IiIpOyRKWyJ0cmlnZ2VycyJdPSRKWyJ0YWJsZV9zdHlsZSJdO31lY2hvIjx0cj48dGg+Ii4nT3V0cHV0Jy4iPHRkPiIuaHRtbF9zZWxlY3QoIm91dHB1dCIsJGItPmR1bXBPdXRwdXQoKSwkSlsib3V0cHV0Il0sMCkuIlxuIjtlY2hvIjx0cj48dGg+Ii4nRm9ybWF0Jy4iPHRkPiIuaHRtbF9zZWxlY3QoImZvcm1hdCIsJGItPmR1bXBGb3JtYXQoKSwkSlsiZm9ybWF0Il0sMCkuIlxuIjtlY2hvKCR5PT0ic3FsaXRlIj8iIjoiPHRyPjx0aD4iLidEYXRhYmFzZScuIjx0ZD4iLmh0bWxfc2VsZWN0KCdkYl9zdHlsZScsJFRiLCRKWyJkYl9zdHlsZSJdKS4oc3VwcG9ydCgicm91dGluZSIpP2NoZWNrYm94KCJyb3V0aW5lcyIsMSwkSlsicm91dGluZXMiXSwnUm91dGluZXMnKToiIikuKHN1cHBvcnQoImV2ZW50Iik/Y2hlY2tib3goImV2ZW50cyIsMSwkSlsiZXZlbnRzIl0sJ0V2ZW50cycpOiIiKSksIjx0cj48dGg+Ii4nVGFibGVzJy4iPHRkPiIuaHRtbF9zZWxlY3QoJ3RhYmxlX3N0eWxlJywkU2gsJEpbInRhYmxlX3N0eWxlIl0pLmNoZWNrYm94KCJhdXRvX2luY3JlbWVudCIsMSwkSlsiYXV0b19pbmNyZW1lbnQiXSwnQXV0byBJbmNyZW1lbnQnKS4oc3VwcG9ydCgidHJpZ2dlciIpP2NoZWNrYm94KCJ0cmlnZ2VycyIsMSwkSlsidHJpZ2dlcnMiXSwnVHJpZ2dlcnMnKToiIiksIjx0cj48dGg+Ii4nRGF0YScuIjx0ZD4iLmh0bWxfc2VsZWN0KCdkYXRhX3N0eWxlJywkUWIsJEpbImRhdGFfc3R5bGUiXSksJzwvdGFibGU+CjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFeHBvcnQiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9IicsJG5pLCciPgoKPHRhYmxlIGNlbGxzcGFjaW5nPSIwIj4KJyxzY3JpcHQoInFzbCgndGFibGUnKS5vbmNsaWNrID0gZHVtcENsaWNrOyIpOyRqZz1hcnJheSgpO2lmKERCIT0iIil7JGNiPSgkYSE9IiI/IiI6IiBjaGVja2VkIik7ZWNobyI8dGhlYWQ+PHRyPiIsIjx0aCBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDsnPjxsYWJlbCBjbGFzcz0nYmxvY2snPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgaWQ9J2NoZWNrLXRhYmxlcyckY2I+Ii4nVGFibGVzJy4iPC9sYWJlbD4iLnNjcmlwdCgicXMoJyNjaGVjay10YWJsZXMnKS5vbmNsaWNrID0gcGFydGlhbChmb3JtQ2hlY2ssIC9edGFibGVzXFxbLyk7IiwiIiksIjx0aCBzdHlsZT0ndGV4dC1hbGlnbjogcmlnaHQ7Jz48bGFiZWwgY2xhc3M9J2Jsb2NrJz4iLidEYXRhJy4iPGlucHV0IHR5cGU9J2NoZWNrYm94JyBpZD0nY2hlY2stZGF0YSckY2I+PC9sYWJlbD4iLnNjcmlwdCgicXMoJyNjaGVjay1kYXRhJykub25jbGljayA9IHBhcnRpYWwoZm9ybUNoZWNrLCAvXmRhdGFcXFsvKTsiLCIiKSwiPC90aGVhZD5cbiI7JFlpPSIiOyRUaD10YWJsZXNfbGlzdCgpO2ZvcmVhY2goJFRoCmFzJEQ9PiRUKXskaWc9cHJlZ19yZXBsYWNlKCd+Xy4qficsJycsJEQpOyRjYj0oJGE9PSIifHwkYT09KHN1YnN0cigkYSwtMSk9PSIlIj8iJGlnJSI6JEQpKTskbWc9Ijx0cj48dGQ+Ii5jaGVja2JveCgidGFibGVzW10iLCRELCRjYiwkRCwiIiwiYmxvY2siKTtpZigkVCE9PW51bGwmJiFwcmVnX21hdGNoKCd+dGFibGV+aScsJFQpKSRZaS49IiRtZ1xuIjtlbHNlCmVjaG8iJG1nPHRkIGFsaWduPSdyaWdodCc+PGxhYmVsIGNsYXNzPSdibG9jayc+PHNwYW4gaWQ9J1Jvd3MtIi5oKCREKS4iJz48L3NwYW4+Ii5jaGVja2JveCgiZGF0YVtdIiwkRCwkY2IpLiI8L2xhYmVsPlxuIjskamdbJGlnXSsrO31lY2hvJFlpO2lmKCRUaCllY2hvCnNjcmlwdCgiYWpheFNldEh0bWwoJyIuanNfZXNjYXBlKE1FKS4ic2NyaXB0PWRiJyk7Iik7fWVsc2V7ZWNobyI8dGhlYWQ+PHRyPjx0aCBzdHlsZT0ndGV4dC1hbGlnbjogbGVmdDsnPiIsIjxsYWJlbCBjbGFzcz0nYmxvY2snPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgaWQ9J2NoZWNrLWRhdGFiYXNlcyciLigkYT09IiI/IiBjaGVja2VkIjoiIikuIj4iLidEYXRhYmFzZScuIjwvbGFiZWw+IixzY3JpcHQoInFzKCcjY2hlY2stZGF0YWJhc2VzJykub25jbGljayA9IHBhcnRpYWwoZm9ybUNoZWNrLCAvXmRhdGFiYXNlc1xcWy8pOyIsIiIpLCI8L3RoZWFkPlxuIjskaz0kYi0+ZGF0YWJhc2VzKCk7aWYoJGspe2ZvcmVhY2goJGsKYXMkbCl7aWYoIWluZm9ybWF0aW9uX3NjaGVtYSgkbCkpeyRpZz1wcmVnX3JlcGxhY2UoJ35fLip+JywnJywkbCk7ZWNobyI8dHI+PHRkPiIuY2hlY2tib3goImRhdGFiYXNlc1tdIiwkbCwkYT09IiJ8fCRhPT0iJGlnJSIsJGwsIiIsImJsb2NrIikuIlxuIjskamdbJGlnXSsrO319fWVsc2UKZWNobyI8dHI+PHRkPjx0ZXh0YXJlYSBuYW1lPSdkYXRhYmFzZXMnIHJvd3M9JzEwJyBjb2xzPScyMCc+PC90ZXh0YXJlYT4iO31lY2hvJzwvdGFibGU+CjwvZm9ybT4KJzskWmM9dHJ1ZTtmb3JlYWNoKCRqZwphcyR6PT4kWCl7aWYoJHohPSIiJiYkWD4xKXtlY2hvKCRaYz8iPHA+IjoiICIpLiI8YSBocmVmPSciLmgoTUUpLiJkdW1wPSIudXJsZW5jb2RlKCIkeiUiKS4iJz4iLmgoJHopLiI8L2E+IjskWmM9ZmFsc2U7fX19ZWxzZWlmKGlzc2V0KCRfR0VUWyJwcml2aWxlZ2VzIl0pKXtwYWdlX2hlYWRlcignUHJpdmlsZWdlcycpO2VjaG8nPHAgY2xhc3M9ImxpbmtzIj48YSBocmVmPSInLmgoTUUpLid1c2VyPSI+Jy4nQ3JlYXRlIHVzZXInLiI8L2E+IjskSD0kZy0+cXVlcnkoIlNFTEVDVCBVc2VyLCBIb3N0IEZST00gbXlzcWwuIi4oREI9PSIiPyJ1c2VyIjoiZGIgV0hFUkUgIi5xKERCKS4iIExJS0UgRGIiKS4iIE9SREVSIEJZIEhvc3QsIFVzZXIiKTskb2Q9JEg7aWYoISRIKSRIPSRnLT5xdWVyeSgiU0VMRUNUIFNVQlNUUklOR19JTkRFWChDVVJSRU5UX1VTRVIsICdAJywgMSkgQVMgVXNlciwgU1VCU1RSSU5HX0lOREVYKENVUlJFTlRfVVNFUiwgJ0AnLCAtMSkgQVMgSG9zdCIpO2VjaG8iPGZvcm0gYWN0aW9uPScnPjxwPlxuIjtoaWRkZW5fZmllbGRzX2dldCgpO2VjaG8iPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZGInIHZhbHVlPSciLmgoREIpLiInPlxuIiwoJG9kPyIiOiI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdncmFudCcgdmFsdWU9Jyc+XG4iKSwiPHRhYmxlIGNlbGxzcGFjaW5nPScwJz5cbiIsIjx0aGVhZD48dHI+PHRoPiIuJ1VzZXJuYW1lJy4iPHRoPiIuJ1NlcnZlcicuIjx0aD48L3RoZWFkPlxuIjt3aGlsZSgkSj0kSC0+ZmV0Y2hfYXNzb2MoKSllY2hvJzx0cicub2RkKCkuJz48dGQ+Jy5oKCRKWyJVc2VyIl0pLiI8dGQ+Ii5oKCRKWyJIb3N0Il0pLic8dGQ+PGEgaHJlZj0iJy5oKE1FLid1c2VyPScudXJsZW5jb2RlKCRKWyJVc2VyIl0pLicmaG9zdD0nLnVybGVuY29kZSgkSlsiSG9zdCJdKSkuJyI+Jy4nRWRpdCcuIjwvYT5cbiI7aWYoISRvZHx8REIhPSIiKWVjaG8iPHRyIi5vZGQoKS4iPjx0ZD48aW5wdXQgbmFtZT0ndXNlcicgYXV0b2NhcGl0YWxpemU9J29mZic+PHRkPjxpbnB1dCBuYW1lPSdob3N0JyB2YWx1ZT0nbG9jYWxob3N0JyBhdXRvY2FwaXRhbGl6ZT0nb2ZmJz48dGQ+PGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyIuJ0VkaXQnLiInPlxuIjtlY2hvIjwvdGFibGU+XG4iLCI8L2Zvcm0+XG4iO31lbHNlaWYoaXNzZXQoJF9HRVRbInNxbCJdKSl7aWYoISRuJiYkX1BPU1RbImV4cG9ydCJdKXtkdW1wX2hlYWRlcnMoInNxbCIpOyRiLT5kdW1wVGFibGUoIiIsIiIpOyRiLT5kdW1wRGF0YSgiIiwidGFibGUiLCRfUE9TVFsicXVlcnkiXSk7ZXhpdDt9cmVzdGFydF9zZXNzaW9uKCk7JEJkPSZnZXRfc2Vzc2lvbigicXVlcmllcyIpOyRBZD0mJEJkW0RCXTtpZighJG4mJiRfUE9TVFsiY2xlYXIiXSl7JEFkPWFycmF5KCk7cmVkaXJlY3QocmVtb3ZlX2Zyb21fdXJpKCJoaXN0b3J5IikpO31wYWdlX2hlYWRlcigoaXNzZXQoJF9HRVRbImltcG9ydCJdKT8nSW1wb3J0JzonU1FMIGNvbW1hbmQnKSwkbik7aWYoISRuJiYkX1BPU1QpeyRsZD1mYWxzZTtpZighaXNzZXQoJF9HRVRbImltcG9ydCJdKSkkRz0kX1BPU1RbInF1ZXJ5Il07ZWxzZWlmKCRfUE9TVFsid2ViZmlsZSJdKXskemg9JGItPmltcG9ydFNlcnZlclBhdGgoKTskbGQ9QGZvcGVuKChmaWxlX2V4aXN0cygkemgpPyR6aDoiY29tcHJlc3MuemxpYjovLyR6aC5neiIpLCJyYiIpOyRHPSgkbGQ/ZnJlYWQoJGxkLDFlNik6ZmFsc2UpO31lbHNlJEc9Z2V0X2ZpbGUoInNxbF9maWxlIix0cnVlKTtpZihpc19zdHJpbmcoJEcpKXtpZihmdW5jdGlvbl9leGlzdHMoJ21lbW9yeV9nZXRfdXNhZ2UnKSlAaW5pX3NldCgibWVtb3J5X2xpbWl0IixtYXgoaW5pX2J5dGVzKCJtZW1vcnlfbGltaXQiKSwyKnN0cmxlbigkRykrbWVtb3J5X2dldF91c2FnZSgpKzhlNikpO2lmKCRHIT0iIiYmc3RybGVuKCRHKTwxZTYpeyR1Zz0kRy4ocHJlZ19tYXRjaCgifjtbIFx0XHJcbl0qXCR+IiwkRyk/IiI6IjsiKTtpZighJEFkfHxyZXNldChlbmQoJEFkKSkhPSR1Zyl7cmVzdGFydF9zZXNzaW9uKCk7JEFkW109YXJyYXkoJHVnLHRpbWUoKSk7c2V0X3Nlc3Npb24oInF1ZXJpZXMiLCRCZCk7c3RvcF9zZXNzaW9uKCk7fX0kd2g9Iig/Olxcc3wvXFwqW1xzXFNdKj9cXCovfCg/OiN8LS0gKVteXG5dKlxuP3wtLVxyP1xuKSI7JGFjPSI7IjskaGY9MDskeGM9dHJ1ZTskaD1jb25uZWN0KCk7aWYoaXNfb2JqZWN0KCRoKSYmREIhPSIiKXskaC0+c2VsZWN0X2RiKERCKTtpZigkX0dFVFsibnMiXSE9IiIpc2V0X3NjaGVtYSgkX0dFVFsibnMiXSwkaCk7fSRxYj0wOyRCYz1hcnJheSgpOyRQZj0nW1wnIicuKCR5PT0ic3FsIj8nYCMnOigkeT09InNxbGl0ZSI/J2BbJzooJHk9PSJtc3NxbCI/J1snOicnKSkpLiddfC9cKnwtLSB8JCcuKCR5PT0icGdzcWwiPyd8XCRbXiRdKlwkJzonJyk7JHBpPW1pY3JvdGltZSh0cnVlKTtwYXJzZV9zdHIoJF9DT09LSUVbImFkbWluZXJfZXhwb3J0Il0sJHhhKTskb2M9JGItPmR1bXBGb3JtYXQoKTt1bnNldCgkb2NbInNxbCJdKTt3aGlsZSgkRyE9IiIpe2lmKCEkaGYmJnByZWdfbWF0Y2goIn5eJHdoKitERUxJTUlURVJcXHMrKFxcUyspfmkiLCRHLCRDKSl7JGFjPSRDWzFdOyRHPXN1YnN0cigkRyxzdHJsZW4oJENbMF0pKTt9ZWxzZXtwcmVnX21hdGNoKCcoJy5wcmVnX3F1b3RlKCRhYykuIlxccyp8JFBmKSIsJEcsJEMsUFJFR19PRkZTRVRfQ0FQVFVSRSwkaGYpO2xpc3QoJGpkLCRlZyk9JENbMF07aWYoISRqZCYmJGxkJiYhZmVvZigkbGQpKSRHLj1mcmVhZCgkbGQsMWU1KTtlbHNle2lmKCEkamQmJnJ0cmltKCRHKT09IiIpYnJlYWs7JGhmPSRlZytzdHJsZW4oJGpkKTtpZigkamQmJnJ0cmltKCRqZCkhPSRhYyl7d2hpbGUocHJlZ19tYXRjaCgnKCcuKCRqZD09Jy8qJz8nXCovJzooJGpkPT0nWyc/J10nOihwcmVnX21hdGNoKCd+Xi0tIHxeI34nLCRqZCk/IlxuIjpwcmVnX3F1b3RlKCRqZCkuInxcXFxcLiIpKSkuJ3wkKXMnLCRHLCRDLFBSRUdfT0ZGU0VUX0NBUFRVUkUsJGhmKSl7JFhnPSRDWzBdWzBdO2lmKCEkWGcmJiRsZCYmIWZlb2YoJGxkKSkkRy49ZnJlYWQoJGxkLDFlNSk7ZWxzZXskaGY9JENbMF1bMV0rc3RybGVuKCRYZyk7aWYoJFhnWzBdIT0iXFwiKWJyZWFrO319fWVsc2V7JHhjPWZhbHNlOyR1Zz1zdWJzdHIoJEcsMCwkZWcpOyRxYisrOyRtZz0iPHByZSBpZD0nc3FsLSRxYic+PGNvZGUgY2xhc3M9J2p1c2gtJHknPiIuJGItPnNxbENvbW1hbmRRdWVyeSgkdWcpLiI8L2NvZGU+PC9wcmU+XG4iO2lmKCR5PT0ic3FsaXRlIiYmcHJlZ19tYXRjaCgifl4kd2gqK0FUVEFDSFxcYn5pIiwkdWcsJEMpKXtlY2hvJG1nLCI8cCBjbGFzcz0nZXJyb3InPiIuJ0FUVEFDSCBxdWVyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLicuIlxuIjskQmNbXT0iIDxhIGhyZWY9JyNzcWwtJHFiJz4kcWI8L2E+IjtpZigkX1BPU1RbImVycm9yX3N0b3BzIl0pYnJlYWs7fWVsc2V7aWYoISRfUE9TVFsib25seV9lcnJvcnMiXSl7ZWNobyRtZztvYl9mbHVzaCgpO2ZsdXNoKCk7fSRDaD1taWNyb3RpbWUodHJ1ZSk7aWYoJGctPm11bHRpX3F1ZXJ5KCR1ZykmJmlzX29iamVjdCgkaCkmJnByZWdfbWF0Y2goIn5eJHdoKitVU0VcXGJ+aSIsJHVnKSkkaC0+cXVlcnkoJHVnKTtkb3skSD0kZy0+c3RvcmVfcmVzdWx0KCk7aWYoJGctPmVycm9yKXtlY2hvKCRfUE9TVFsib25seV9lcnJvcnMiXT8kbWc6IiIpLCI8cCBjbGFzcz0nZXJyb3InPiIuJ0Vycm9yIGluIHF1ZXJ5Jy4oJGctPmVycm5vPyIgKCRnLT5lcnJubykiOiIiKS4iOiAiLmVycm9yKCkuIlxuIjskQmNbXT0iIDxhIGhyZWY9JyNzcWwtJHFiJz4kcWI8L2E+IjtpZigkX1BPU1RbImVycm9yX3N0b3BzIl0pYnJlYWsKMjt9ZWxzZXskZGk9IiA8c3BhbiBjbGFzcz0ndGltZSc+KCIuZm9ybWF0X3RpbWUoJENoKS4iKTwvc3Bhbj4iLihzdHJsZW4oJHVnKTwxMDAwPyIgPGEgaHJlZj0nIi5oKE1FKS4ic3FsPSIudXJsZW5jb2RlKHRyaW0oJHVnKSkuIic+Ii4nRWRpdCcuIjwvYT4iOiIiKTskemE9JGctPmFmZmVjdGVkX3Jvd3M7JGJqPSgkX1BPU1RbIm9ubHlfZXJyb3JzIl0/IiI6JG0tPndhcm5pbmdzKCkpOyRjaj0id2FybmluZ3MtJHFiIjtpZigkYmopJGRpLj0iLCA8YSBocmVmPScjJGNqJz4iLidXYXJuaW5ncycuIjwvYT4iLnNjcmlwdCgicXNsKCdhJykub25jbGljayA9IHBhcnRpYWwodG9nZ2xlLCAnJGNqJyk7IiwiIik7JEpjPW51bGw7JEtjPSJleHBsYWluLSRxYiI7aWYoaXNfb2JqZWN0KCRIKSl7JF89JF9QT1NUWyJsaW1pdCJdOyRCZj1zZWxlY3QoJEgsJGgsYXJyYXkoKSwkXyk7aWYoISRfUE9TVFsib25seV9lcnJvcnMiXSl7ZWNobyI8Zm9ybSBhY3Rpb249JycgbWV0aG9kPSdwb3N0Jz5cbiI7JGRmPSRILT5udW1fcm93cztlY2hvIjxwPiIuKCRkZj8oJF8mJiRkZj4kXz9zcHJpbnRmKCclZCAvICcsJF8pOiIiKS5sYW5nKGFycmF5KCclZCByb3cnLCclZCByb3dzJyksJGRmKToiIiksJGRpO2lmKCRoJiZwcmVnX21hdGNoKCJ+Xigkd2h8XFwoKSorU0VMRUNUXFxifmkiLCR1ZykmJigkSmM9ZXhwbGFpbigkaCwkdWcpKSllY2hvIiwgPGEgaHJlZj0nIyRLYyc+RXhwbGFpbjwvYT4iLnNjcmlwdCgicXNsKCdhJykub25jbGljayA9IHBhcnRpYWwodG9nZ2xlLCAnJEtjJyk7IiwiIik7JHU9ImV4cG9ydC0kcWIiO2VjaG8iLCA8YSBocmVmPScjJHUnPiIuJ0V4cG9ydCcuIjwvYT4iLnNjcmlwdCgicXNsKCdhJykub25jbGljayA9IHBhcnRpYWwodG9nZ2xlLCAnJHUnKTsiLCIiKS4iPHNwYW4gaWQ9JyR1JyBjbGFzcz0naGlkZGVuJz46ICIuaHRtbF9zZWxlY3QoIm91dHB1dCIsJGItPmR1bXBPdXRwdXQoKSwkeGFbIm91dHB1dCJdKS4iICIuaHRtbF9zZWxlY3QoImZvcm1hdCIsJG9jLCR4YVsiZm9ybWF0Il0pLiI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdxdWVyeScgdmFsdWU9JyIuaCgkdWcpLiInPiIuIiA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdleHBvcnQnIHZhbHVlPSciLidFeHBvcnQnLiInPjxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J3Rva2VuJyB2YWx1ZT0nJG5pJz48L3NwYW4+XG4iLiI8L2Zvcm0+XG4iO319ZWxzZXtpZihwcmVnX21hdGNoKCJ+XiR3aCorKENSRUFURXxEUk9QfEFMVEVSKSR3aCsrKERBVEFCQVNFfFNDSEVNQSlcXGJ+aSIsJHVnKSl7cmVzdGFydF9zZXNzaW9uKCk7c2V0X3Nlc3Npb24oImRicyIsbnVsbCk7c3RvcF9zZXNzaW9uKCk7fWlmKCEkX1BPU1RbIm9ubHlfZXJyb3JzIl0pZWNobyI8cCBjbGFzcz0nbWVzc2FnZScgdGl0bGU9JyIuaCgkZy0+aW5mbykuIic+Ii5sYW5nKGFycmF5KCdRdWVyeSBleGVjdXRlZCBPSywgJWQgcm93IGFmZmVjdGVkLicsJ1F1ZXJ5IGV4ZWN1dGVkIE9LLCAlZCByb3dzIGFmZmVjdGVkLicpLCR6YSkuIiRkaVxuIjt9ZWNobygkYmo/IjxkaXYgaWQ9JyRjaicgY2xhc3M9J2hpZGRlbic+XG4kYmo8L2Rpdj5cbiI6IiIpO2lmKCRKYyl7ZWNobyI8ZGl2IGlkPSckS2MnIGNsYXNzPSdoaWRkZW4nPlxuIjtzZWxlY3QoJEpjLCRoLCRCZik7ZWNobyI8L2Rpdj5cbiI7fX0kQ2g9bWljcm90aW1lKHRydWUpO313aGlsZSgkZy0+bmV4dF9yZXN1bHQoKSk7fSRHPXN1YnN0cigkRywkaGYpOyRoZj0wO319fX1pZigkeGMpZWNobyI8cCBjbGFzcz0nbWVzc2FnZSc+Ii4nTm8gY29tbWFuZHMgdG8gZXhlY3V0ZS4nLiJcbiI7ZWxzZWlmKCRfUE9TVFsib25seV9lcnJvcnMiXSl7ZWNobyI8cCBjbGFzcz0nbWVzc2FnZSc+Ii5sYW5nKGFycmF5KCclZCBxdWVyeSBleGVjdXRlZCBPSy4nLCclZCBxdWVyaWVzIGV4ZWN1dGVkIE9LLicpLCRxYi1jb3VudCgkQmMpKSwiIDxzcGFuIGNsYXNzPSd0aW1lJz4oIi5mb3JtYXRfdGltZSgkcGkpLiIpPC9zcGFuPlxuIjt9ZWxzZWlmKCRCYyYmJHFiPjEpZWNobyI8cCBjbGFzcz0nZXJyb3InPiIuJ0Vycm9yIGluIHF1ZXJ5Jy4iOiAiLmltcGxvZGUoIiIsJEJjKS4iXG4iO31lbHNlCmVjaG8iPHAgY2xhc3M9J2Vycm9yJz4iLnVwbG9hZF9lcnJvcigkRykuIlxuIjt9ZWNobycKPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgaWQ9ImZvcm0iPgonOyRIYz0iPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyIuJ0V4ZWN1dGUnLiInIHRpdGxlPSdDdHJsK0VudGVyJz4iO2lmKCFpc3NldCgkX0dFVFsiaW1wb3J0Il0pKXskdWc9JF9HRVRbInNxbCJdO2lmKCRfUE9TVCkkdWc9JF9QT1NUWyJxdWVyeSJdO2Vsc2VpZigkX0dFVFsiaGlzdG9yeSJdPT0iYWxsIikkdWc9JEFkO2Vsc2VpZigkX0dFVFsiaGlzdG9yeSJdIT0iIikkdWc9JEFkWyRfR0VUWyJoaXN0b3J5Il1dWzBdO2VjaG8iPHA+Ijt0ZXh0YXJlYSgicXVlcnkiLCR1ZywyMCk7ZWNobwpzY3JpcHQoKCRfUE9TVD8iIjoicXMoJ3RleHRhcmVhJykuZm9jdXMoKTtcbiIpLiJxcygnI2Zvcm0nKS5vbnN1Ym1pdCA9IHBhcnRpYWwoc3FsU3VibWl0LCBxcygnI2Zvcm0nKSwgJyIuanNfZXNjYXBlKHJlbW92ZV9mcm9tX3VyaSgic3FsfGxpbWl0fGVycm9yX3N0b3BzfG9ubHlfZXJyb3JzfGhpc3RvcnkiKSkuIicpOyIpLCI8cD4kSGNcbiIsJ0xpbWl0IHJvd3MnLiI6IDxpbnB1dCB0eXBlPSdudW1iZXInIG5hbWU9J2xpbWl0JyBjbGFzcz0nc2l6ZScgdmFsdWU9JyIuaCgkX1BPU1Q/JF9QT1NUWyJsaW1pdCJdOiRfR0VUWyJsaW1pdCJdKS4iJz5cbiI7fWVsc2V7ZWNobyI8ZmllbGRzZXQ+PGxlZ2VuZD4iLidGaWxlIHVwbG9hZCcuIjwvbGVnZW5kPjxkaXY+IjskdWQ9KGV4dGVuc2lvbl9sb2FkZWQoInpsaWIiKT8iWy5nel0iOiIiKTtlY2hvKGluaV9ib29sKCJmaWxlX3VwbG9hZHMiKT8iU1FMJHVkICgmbHQ7ICIuaW5pX2dldCgidXBsb2FkX21heF9maWxlc2l6ZSIpLiJCKTogPGlucHV0IHR5cGU9J2ZpbGUnIG5hbWU9J3NxbF9maWxlW10nIG11bHRpcGxlPlxuJEhjIjonRmlsZSB1cGxvYWRzIGFyZSBkaXNhYmxlZC4nKSwiPC9kaXY+PC9maWVsZHNldD5cbiI7JElkPSRiLT5pbXBvcnRTZXJ2ZXJQYXRoKCk7aWYoJElkKXtlY2hvIjxmaWVsZHNldD48bGVnZW5kPiIuJ0Zyb20gc2VydmVyJy4iPC9sZWdlbmQ+PGRpdj4iLHNwcmludGYoJ1dlYnNlcnZlciBmaWxlICVzJywiPGNvZGU+Ii5oKCRJZCkuIiR1ZDwvY29kZT4iKSwnIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9IndlYmZpbGUiIHZhbHVlPSInLidSdW4gZmlsZScuJyI+JywiPC9kaXY+PC9maWVsZHNldD5cbiI7fWVjaG8iPHA+Ijt9ZWNobwpjaGVja2JveCgiZXJyb3Jfc3RvcHMiLDEsKCRfUE9TVD8kX1BPU1RbImVycm9yX3N0b3BzIl06aXNzZXQoJF9HRVRbImltcG9ydCJdKXx8JF9HRVRbImVycm9yX3N0b3BzIl0pLCdTdG9wIG9uIGVycm9yJykuIlxuIixjaGVja2JveCgib25seV9lcnJvcnMiLDEsKCRfUE9TVD8kX1BPU1RbIm9ubHlfZXJyb3JzIl06aXNzZXQoJF9HRVRbImltcG9ydCJdKXx8JF9HRVRbIm9ubHlfZXJyb3JzIl0pLCdTaG93IG9ubHkgZXJyb3JzJykuIlxuIiwiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0ndG9rZW4nIHZhbHVlPSckbmknPlxuIjtpZighaXNzZXQoJF9HRVRbImltcG9ydCJdKSYmJEFkKXtwcmludF9maWVsZHNldCgiaGlzdG9yeSIsJ0hpc3RvcnknLCRfR0VUWyJoaXN0b3J5Il0hPSIiKTtmb3IoJFg9ZW5kKCRBZCk7JFg7JFg9cHJldigkQWQpKXskej1rZXkoJEFkKTtsaXN0KCR1ZywkZGksJHNjKT0kWDtlY2hvJzxhIGhyZWY9IicuaChNRS4ic3FsPSZoaXN0b3J5PSR6IikuJyI+Jy4nRWRpdCcuIjwvYT4iLiIgPHNwYW4gY2xhc3M9J3RpbWUnIHRpdGxlPSciLkBkYXRlKCdZLW0tZCcsJGRpKS4iJz4iLkBkYXRlKCJIOmk6cyIsJGRpKS4iPC9zcGFuPiIuIiA8Y29kZSBjbGFzcz0nanVzaC0keSc+Ii5zaG9ydGVuX3V0ZjgobHRyaW0oc3RyX3JlcGxhY2UoIlxuIiwiICIsc3RyX3JlcGxhY2UoIlxyIiwiIixwcmVnX3JlcGxhY2UoJ35eKCN8LS0gKS4qfm0nLCcnLCR1ZykpKSksODAsIjwvY29kZT4iKS4oJHNjPyIgPHNwYW4gY2xhc3M9J3RpbWUnPigkc2MpPC9zcGFuPiI6IiIpLiI8YnI+XG4iO31lY2hvIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2NsZWFyJyB2YWx1ZT0nIi4nQ2xlYXInLiInPlxuIiwiPGEgaHJlZj0nIi5oKE1FLiJzcWw9Jmhpc3Rvcnk9YWxsIikuIic+Ii4nRWRpdCBhbGwnLiI8L2E+XG4iLCI8L2Rpdj48L2ZpZWxkc2V0PlxuIjt9ZWNobyc8L2Zvcm0+Cic7fWVsc2VpZihpc3NldCgkX0dFVFsiZWRpdCJdKSl7JGE9JF9HRVRbImVkaXQiXTskcD1maWVsZHMoJGEpOyRaPShpc3NldCgkX0dFVFsic2VsZWN0Il0pPygkX1BPU1RbImNoZWNrIl0mJmNvdW50KCRfUE9TVFsiY2hlY2siXSk9PTE/d2hlcmVfY2hlY2soJF9QT1NUWyJjaGVjayJdWzBdLCRwKToiIik6d2hlcmUoJF9HRVQsJHApKTskSWk9KGlzc2V0KCRfR0VUWyJzZWxlY3QiXSk/JF9QT1NUWyJlZGl0Il06JFopO2ZvcmVhY2goJHAKYXMkRD0+JG8pe2lmKCFpc3NldCgkb1sicHJpdmlsZWdlcyJdWyRJaT8idXBkYXRlIjoiaW5zZXJ0Il0pfHwkYi0+ZmllbGROYW1lKCRvKT09IiJ8fCRvWyJnZW5lcmF0ZWQiXSl1bnNldCgkcFskRF0pO31pZigkX1BPU1QmJiEkbiYmIWlzc2V0KCRfR0VUWyJzZWxlY3QiXSkpeyRCPSRfUE9TVFsicmVmZXJlciJdO2lmKCRfUE9TVFsiaW5zZXJ0Il0pJEI9KCRJaT9udWxsOiRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdKTtlbHNlaWYoIXByZWdfbWF0Y2goJ35eLismc2VsZWN0PS4rJH4nLCRCKSkkQj1NRS4ic2VsZWN0PSIudXJsZW5jb2RlKCRhKTskeD1pbmRleGVzKCRhKTskRGk9dW5pcXVlX2FycmF5KCRfR0VUWyJ3aGVyZSJdLCR4KTskeGc9IlxuV0hFUkUgJFoiO2lmKGlzc2V0KCRfUE9TVFsiZGVsZXRlIl0pKXF1ZXJpZXNfcmVkaXJlY3QoJEIsJ0l0ZW0gaGFzIGJlZW4gZGVsZXRlZC4nLCRtLT5kZWxldGUoJGEsJHhnLCEkRGkpKTtlbHNleyROPWFycmF5KCk7Zm9yZWFjaCgkcAphcyREPT4kbyl7JFg9cHJvY2Vzc19pbnB1dCgkbyk7aWYoJFghPT1mYWxzZSYmJFghPT1udWxsKSROW2lkZl9lc2NhcGUoJEQpXT0kWDt9aWYoJElpKXtpZighJE4pcmVkaXJlY3QoJEIpO3F1ZXJpZXNfcmVkaXJlY3QoJEIsJ0l0ZW0gaGFzIGJlZW4gdXBkYXRlZC4nLCRtLT51cGRhdGUoJGEsJE4sJHhnLCEkRGkpKTtpZihpc19hamF4KCkpe3BhZ2VfaGVhZGVycygpO3BhZ2VfbWVzc2FnZXMoJG4pO2V4aXQ7fX1lbHNleyRIPSRtLT5pbnNlcnQoJGEsJE4pOyRvZT0oJEg/bGFzdF9pZCgpOjApO3F1ZXJpZXNfcmVkaXJlY3QoJEIsc3ByaW50ZignSXRlbSVzIGhhcyBiZWVuIGluc2VydGVkLicsKCRvZT8iICRvZSI6IiIpKSwkSCk7fX19JEo9bnVsbDtpZigkX1BPU1RbInNhdmUiXSkkSj0oYXJyYXkpJF9QT1NUWyJmaWVsZHMiXTtlbHNlaWYoJFopeyRMPWFycmF5KCk7Zm9yZWFjaCgkcAphcyREPT4kbyl7aWYoaXNzZXQoJG9bInByaXZpbGVnZXMiXVsic2VsZWN0Il0pKXskRmE9Y29udmVydF9maWVsZCgkbyk7aWYoJF9QT1NUWyJjbG9uZSJdJiYkb1siYXV0b19pbmNyZW1lbnQiXSkkRmE9IicnIjtpZigkeT09InNxbCImJnByZWdfbWF0Y2goIn5lbnVtfHNldH4iLCRvWyJ0eXBlIl0pKSRGYT0iMSoiLmlkZl9lc2NhcGUoJEQpOyRMW109KCRGYT8iJEZhIEFTICI6IiIpLmlkZl9lc2NhcGUoJEQpO319JEo9YXJyYXkoKTtpZighc3VwcG9ydCgidGFibGUiKSkkTD1hcnJheSgiKiIpO2lmKCRMKXskSD0kbS0+c2VsZWN0KCRhLCRMLGFycmF5KCRaKSwkTCxhcnJheSgpLChpc3NldCgkX0dFVFsic2VsZWN0Il0pPzI6MSkpO2lmKCEkSCkkbj1lcnJvcigpO2Vsc2V7JEo9JEgtPmZldGNoX2Fzc29jKCk7aWYoISRKKSRKPWZhbHNlO31pZihpc3NldCgkX0dFVFsic2VsZWN0Il0pJiYoISRKfHwkSC0+ZmV0Y2hfYXNzb2MoKSkpJEo9bnVsbDt9fWlmKCFzdXBwb3J0KCJ0YWJsZSIpJiYhJHApe2lmKCEkWil7JEg9JG0tPnNlbGVjdCgkYSxhcnJheSgiKiIpLCRaLGFycmF5KCIqIikpOyRKPSgkSD8kSC0+ZmV0Y2hfYXNzb2MoKTpmYWxzZSk7aWYoISRKKSRKPWFycmF5KCRtLT5wcmltYXJ5PT4iIik7fWlmKCRKKXtmb3JlYWNoKCRKCmFzJHo9PiRYKXtpZighJFopJEpbJHpdPW51bGw7JHBbJHpdPWFycmF5KCJmaWVsZCI9PiR6LCJudWxsIj0+KCR6IT0kbS0+cHJpbWFyeSksImF1dG9faW5jcmVtZW50Ij0+KCR6PT0kbS0+cHJpbWFyeSkpO319fWVkaXRfZm9ybSgkYSwkcCwkSiwkSWkpO31lbHNlaWYoaXNzZXQoJF9HRVRbImNyZWF0ZSJdKSl7JGE9JF9HRVRbImNyZWF0ZSJdOyRSZj1hcnJheSgpO2ZvcmVhY2goYXJyYXkoJ0hBU0gnLCdMSU5FQVIgSEFTSCcsJ0tFWScsJ0xJTkVBUiBLRVknLCdSQU5HRScsJ0xJU1QnKWFzJHopJFJmWyR6XT0kejskRGc9cmVmZXJlbmNhYmxlX3ByaW1hcnkoJGEpOyRoZD1hcnJheSgpO2ZvcmVhY2goJERnCmFzJE9oPT4kbykkaGRbc3RyX3JlcGxhY2UoImAiLCJgYCIsJE9oKS4iYCIuc3RyX3JlcGxhY2UoImAiLCJgYCIsJG9bImZpZWxkIl0pXT0kT2g7JEVmPWFycmF5KCk7JFI9YXJyYXkoKTtpZigkYSE9IiIpeyRFZj1maWVsZHMoJGEpOyRSPXRhYmxlX3N0YXR1cygkYSk7aWYoISRSKSRuPSdObyB0YWJsZXMuJzt9JEo9JF9QT1NUOyRKWyJmaWVsZHMiXT0oYXJyYXkpJEpbImZpZWxkcyJdO2lmKCRKWyJhdXRvX2luY3JlbWVudF9jb2wiXSkkSlsiZmllbGRzIl1bJEpbImF1dG9faW5jcmVtZW50X2NvbCJdXVsiYXV0b19pbmNyZW1lbnQiXT10cnVlO2lmKCRfUE9TVClzZXRfYWRtaW5lcl9zZXR0aW5ncyhhcnJheSgiY29tbWVudHMiPT4kX1BPU1RbImNvbW1lbnRzIl0sImRlZmF1bHRzIj0+JF9QT1NUWyJkZWZhdWx0cyJdKSk7aWYoJF9QT1NUJiYhcHJvY2Vzc19maWVsZHMoJEpbImZpZWxkcyJdKSYmISRuKXtpZigkX1BPU1RbImRyb3AiXSlxdWVyaWVzX3JlZGlyZWN0KHN1YnN0cihNRSwwLC0xKSwnVGFibGUgaGFzIGJlZW4gZHJvcHBlZC4nLGRyb3BfdGFibGVzKGFycmF5KCRhKSkpO2Vsc2V7JHA9YXJyYXkoKTskQ2E9YXJyYXkoKTskTWk9ZmFsc2U7JGZkPWFycmF5KCk7JERmPXJlc2V0KCRFZik7JEFhPSIgRklSU1QiO2ZvcmVhY2goJEpbImZpZWxkcyJdYXMkej0+JG8peyRyPSRoZFskb1sidHlwZSJdXTskX2k9KCRyIT09bnVsbD8kRGdbJHJdOiRvKTtpZigkb1siZmllbGQiXSE9IiIpe2lmKCEkb1siaGFzX2RlZmF1bHQiXSkkb1siZGVmYXVsdCJdPW51bGw7aWYoJHo9PSRKWyJhdXRvX2luY3JlbWVudF9jb2wiXSkkb1siYXV0b19pbmNyZW1lbnQiXT10cnVlOyRyZz1wcm9jZXNzX2ZpZWxkKCRvLCRfaSk7JENhW109YXJyYXkoJG9bIm9yaWciXSwkcmcsJEFhKTtpZighJERmfHwkcmchPXByb2Nlc3NfZmllbGQoJERmLCREZikpeyRwW109YXJyYXkoJG9bIm9yaWciXSwkcmcsJEFhKTtpZigkb1sib3JpZyJdIT0iInx8JEFhKSRNaT10cnVlO31pZigkciE9PW51bGwpJGZkW2lkZl9lc2NhcGUoJG9bImZpZWxkIl0pXT0oJGEhPSIiJiYkeSE9InNxbGl0ZSI/IkFERCI6IiAiKS5mb3JtYXRfZm9yZWlnbl9rZXkoYXJyYXkoJ3RhYmxlJz0+JGhkWyRvWyJ0eXBlIl1dLCdzb3VyY2UnPT5hcnJheSgkb1siZmllbGQiXSksJ3RhcmdldCc9PmFycmF5KCRfaVsiZmllbGQiXSksJ29uX2RlbGV0ZSc9PiRvWyJvbl9kZWxldGUiXSwpKTskQWE9IiBBRlRFUiAiLmlkZl9lc2NhcGUoJG9bImZpZWxkIl0pO31lbHNlaWYoJG9bIm9yaWciXSE9IiIpeyRNaT10cnVlOyRwW109YXJyYXkoJG9bIm9yaWciXSk7fWlmKCRvWyJvcmlnIl0hPSIiKXskRGY9bmV4dCgkRWYpO2lmKCEkRGYpJEFhPSIiO319JFRmPSIiO2lmKCRSZlskSlsicGFydGl0aW9uX2J5Il1dKXskVWY9YXJyYXkoKTtpZigkSlsicGFydGl0aW9uX2J5Il09PSdSQU5HRSd8fCRKWyJwYXJ0aXRpb25fYnkiXT09J0xJU1QnKXtmb3JlYWNoKGFycmF5X2ZpbHRlcigkSlsicGFydGl0aW9uX25hbWVzIl0pYXMkej0+JFgpeyRZPSRKWyJwYXJ0aXRpb25fdmFsdWVzIl1bJHpdOyRVZltdPSJcbiAgUEFSVElUSU9OICIuaWRmX2VzY2FwZSgkWCkuIiBWQUxVRVMgIi4oJEpbInBhcnRpdGlvbl9ieSJdPT0nUkFOR0UnPyJMRVNTIFRIQU4iOiJJTiIpLigkWSE9IiI/IiAoJFkpIjoiIE1BWFZBTFVFIik7fX0kVGYuPSJcblBBUlRJVElPTiBCWSAkSltwYXJ0aXRpb25fYnldKCRKW3BhcnRpdGlvbl0pIi4oJFVmPyIgKCIuaW1wbG9kZSgiLCIsJFVmKS4iXG4pIjooJEpbInBhcnRpdGlvbnMiXT8iIFBBUlRJVElPTlMgIi4oKyRKWyJwYXJ0aXRpb25zIl0pOiIiKSk7fWVsc2VpZihzdXBwb3J0KCJwYXJ0aXRpb25pbmciKSYmcHJlZ19tYXRjaCgifnBhcnRpdGlvbmVkfiIsJFJbIkNyZWF0ZV9vcHRpb25zIl0pKSRUZi49IlxuUkVNT1ZFIFBBUlRJVElPTklORyI7JEtlPSdUYWJsZSBoYXMgYmVlbiBhbHRlcmVkLic7aWYoJGE9PSIiKXtjb29raWUoImFkbWluZXJfZW5naW5lIiwkSlsiRW5naW5lIl0pOyRLZT0nVGFibGUgaGFzIGJlZW4gY3JlYXRlZC4nO30kRD10cmltKCRKWyJuYW1lIl0pO3F1ZXJpZXNfcmVkaXJlY3QoTUUuKHN1cHBvcnQoInRhYmxlIik/InRhYmxlPSI6InNlbGVjdD0iKS51cmxlbmNvZGUoJEQpLCRLZSxhbHRlcl90YWJsZSgkYSwkRCwoJHk9PSJzcWxpdGUiJiYoJE1pfHwkZmQpPyRDYTokcCksJGZkLCgkSlsiQ29tbWVudCJdIT0kUlsiQ29tbWVudCJdPyRKWyJDb21tZW50Il06bnVsbCksKCRKWyJFbmdpbmUiXSYmJEpbIkVuZ2luZSJdIT0kUlsiRW5naW5lIl0/JEpbIkVuZ2luZSJdOiIiKSwoJEpbIkNvbGxhdGlvbiJdJiYkSlsiQ29sbGF0aW9uIl0hPSRSWyJDb2xsYXRpb24iXT8kSlsiQ29sbGF0aW9uIl06IiIpLCgkSlsiQXV0b19pbmNyZW1lbnQiXSE9IiI/bnVtYmVyKCRKWyJBdXRvX2luY3JlbWVudCJdKToiIiksJFRmKSk7fX1wYWdlX2hlYWRlcigoJGEhPSIiPydBbHRlciB0YWJsZSc6J0NyZWF0ZSB0YWJsZScpLCRuLGFycmF5KCJ0YWJsZSI9PiRhKSxoKCRhKSk7aWYoISRfUE9TVCl7JEo9YXJyYXkoIkVuZ2luZSI9PiRfQ09PS0lFWyJhZG1pbmVyX2VuZ2luZSJdLCJmaWVsZHMiPT5hcnJheShhcnJheSgiZmllbGQiPT4iIiwidHlwZSI9Pihpc3NldCgkVVsiaW50Il0pPyJpbnQiOihpc3NldCgkVVsiaW50ZWdlciJdKT8iaW50ZWdlciI6IiIpKSwib25fdXBkYXRlIj0+IiIpKSwicGFydGl0aW9uX25hbWVzIj0+YXJyYXkoIiIpLCk7aWYoJGEhPSIiKXskSj0kUjskSlsibmFtZSJdPSRhOyRKWyJmaWVsZHMiXT1hcnJheSgpO2lmKCEkX0dFVFsiYXV0b19pbmNyZW1lbnQiXSkkSlsiQXV0b19pbmNyZW1lbnQiXT0iIjtmb3JlYWNoKCRFZgphcyRvKXskb1siaGFzX2RlZmF1bHQiXT1pc3NldCgkb1siZGVmYXVsdCJdKTskSlsiZmllbGRzIl1bXT0kbzt9aWYoc3VwcG9ydCgicGFydGl0aW9uaW5nIikpeyRtZD0iRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuUEFSVElUSU9OUyBXSEVSRSBUQUJMRV9TQ0hFTUEgPSAiLnEoREIpLiIgQU5EIFRBQkxFX05BTUUgPSAiLnEoJGEpOyRIPSRnLT5xdWVyeSgiU0VMRUNUIFBBUlRJVElPTl9NRVRIT0QsIFBBUlRJVElPTl9PUkRJTkFMX1BPU0lUSU9OLCBQQVJUSVRJT05fRVhQUkVTU0lPTiAkbWQgT1JERVIgQlkgUEFSVElUSU9OX09SRElOQUxfUE9TSVRJT04gREVTQyBMSU1JVCAxIik7bGlzdCgkSlsicGFydGl0aW9uX2J5Il0sJEpbInBhcnRpdGlvbnMiXSwkSlsicGFydGl0aW9uIl0pPSRILT5mZXRjaF9yb3coKTskVWY9Z2V0X2tleV92YWxzKCJTRUxFQ1QgUEFSVElUSU9OX05BTUUsIFBBUlRJVElPTl9ERVNDUklQVElPTiAkbWQgQU5EIFBBUlRJVElPTl9OQU1FICE9ICcnIE9SREVSIEJZIFBBUlRJVElPTl9PUkRJTkFMX1BPU0lUSU9OIik7JFVmWyIiXT0iIjskSlsicGFydGl0aW9uX25hbWVzIl09YXJyYXlfa2V5cygkVWYpOyRKWyJwYXJ0aXRpb25fdmFsdWVzIl09YXJyYXlfdmFsdWVzKCRVZik7fX19JGxiPWNvbGxhdGlvbnMoKTskemM9ZW5naW5lcygpO2ZvcmVhY2goJHpjCmFzJHljKXtpZighc3RyY2FzZWNtcCgkeWMsJEpbIkVuZ2luZSJdKSl7JEpbIkVuZ2luZSJdPSR5YzticmVhazt9fWVjaG8nCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGlkPSJmb3JtIj4KPHA+Cic7aWYoc3VwcG9ydCgiY29sdW1ucyIpfHwkYT09IiIpe2VjaG8nVGFibGUgbmFtZTogPGlucHV0IG5hbWU9Im5hbWUiIGRhdGEtbWF4bGVuZ3RoPSI2NCIgdmFsdWU9IicsaCgkSlsibmFtZSJdKSwnIiBhdXRvY2FwaXRhbGl6ZT0ib2ZmIj4KJztpZigkYT09IiImJiEkX1BPU1QpZWNobwpzY3JpcHQoImZvY3VzKHFzKCcjZm9ybScpWyduYW1lJ10pOyIpO2VjaG8oJHpjPyI8c2VsZWN0IG5hbWU9J0VuZ2luZSc+Ii5vcHRpb25saXN0KGFycmF5KCIiPT4iKCIuJ2VuZ2luZScuIikiKSskemMsJEpbIkVuZ2luZSJdKS4iPC9zZWxlY3Q+Ii5vbl9oZWxwKCJnZXRUYXJnZXQoZXZlbnQpLnZhbHVlIiwxKS5zY3JpcHQoInFzbCgnc2VsZWN0Jykub25jaGFuZ2UgPSBoZWxwQ2xvc2U7Iik6IiIpLCcgJywoJGxiJiYhcHJlZ19tYXRjaCgifnNxbGl0ZXxtc3NxbH4iLCR5KT9odG1sX3NlbGVjdCgiQ29sbGF0aW9uIixhcnJheSgiIj0+IigiLidjb2xsYXRpb24nLiIpIikrJGxiLCRKWyJDb2xsYXRpb24iXSk6IiIpLCcgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPgonO31lY2hvJwonO2lmKHN1cHBvcnQoImNvbHVtbnMiKSl7ZWNobyc8ZGl2IGNsYXNzPSJzY3JvbGxhYmxlIj4KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBpZD0iZWRpdC1maWVsZHMiIGNsYXNzPSJub3dyYXAiPgonO2VkaXRfZmllbGRzKCRKWyJmaWVsZHMiXSwkbGIsIlRBQkxFIiwkaGQpO2VjaG8nPC90YWJsZT4KJyxzY3JpcHQoImVkaXRGaWVsZHMoKTsiKSwnPC9kaXY+CjxwPgpBdXRvIEluY3JlbWVudDogPGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iQXV0b19pbmNyZW1lbnQiIHNpemU9IjYiIHZhbHVlPSInLGgoJEpbIkF1dG9faW5jcmVtZW50Il0pLCciPgonLGNoZWNrYm94KCJkZWZhdWx0cyIsMSwoJF9QT1NUPyRfUE9TVFsiZGVmYXVsdHMiXTphZG1pbmVyX3NldHRpbmcoImRlZmF1bHRzIikpLCdEZWZhdWx0IHZhbHVlcycsImNvbHVtblNob3codGhpcy5jaGVja2VkLCA1KSIsImpzb25seSIpLChzdXBwb3J0KCJjb21tZW50Iik/Y2hlY2tib3goImNvbW1lbnRzIiwxLCgkX1BPU1Q/JF9QT1NUWyJjb21tZW50cyJdOmFkbWluZXJfc2V0dGluZygiY29tbWVudHMiKSksJ0NvbW1lbnQnLCJlZGl0aW5nQ29tbWVudHNDbGljayh0aGlzLCB0cnVlKTsiLCJqc29ubHkiKS4nIDxpbnB1dCBuYW1lPSJDb21tZW50IiB2YWx1ZT0iJy5oKCRKWyJDb21tZW50Il0pLiciIGRhdGEtbWF4bGVuZ3RoPSInLihtaW5fdmVyc2lvbig1LjUpPzIwNDg6NjApLiciPic6JycpLCc8cD4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPgonO31lY2hvJwonO2lmKCRhIT0iIil7ZWNobyc8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJkcm9wIiB2YWx1ZT0iRHJvcCI+Jyxjb25maXJtKHNwcmludGYoJ0Ryb3AgJXM/JywkYSkpO31pZihzdXBwb3J0KCJwYXJ0aXRpb25pbmciKSl7JFNmPXByZWdfbWF0Y2goJ35SQU5HRXxMSVNUficsJEpbInBhcnRpdGlvbl9ieSJdKTtwcmludF9maWVsZHNldCgicGFydGl0aW9uIiwnUGFydGl0aW9uIGJ5JywkSlsicGFydGl0aW9uX2J5Il0pO2VjaG8nPHA+CicsIjxzZWxlY3QgbmFtZT0ncGFydGl0aW9uX2J5Jz4iLm9wdGlvbmxpc3QoYXJyYXkoIiI9PiIiKSskUmYsJEpbInBhcnRpdGlvbl9ieSJdKS4iPC9zZWxlY3Q+Ii5vbl9oZWxwKCJnZXRUYXJnZXQoZXZlbnQpLnZhbHVlLnJlcGxhY2UoLy4vLCAnUEFSVElUSU9OIEJZIFwkJicpIiwxKS5zY3JpcHQoInFzbCgnc2VsZWN0Jykub25jaGFuZ2UgPSBwYXJ0aXRpb25CeUNoYW5nZTsiKSwnKDxpbnB1dCBuYW1lPSJwYXJ0aXRpb24iIHZhbHVlPSInLGgoJEpbInBhcnRpdGlvbiJdKSwnIj4pClBhcnRpdGlvbnM6IDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9InBhcnRpdGlvbnMiIGNsYXNzPSJzaXplJywoJFNmfHwhJEpbInBhcnRpdGlvbl9ieSJdPyIgaGlkZGVuIjoiIiksJyIgdmFsdWU9IicsaCgkSlsicGFydGl0aW9ucyJdKSwnIj4KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBpZD0icGFydGl0aW9uLXRhYmxlIicsKCRTZj8iIjoiIGNsYXNzPSdoaWRkZW4nIiksJz4KPHRoZWFkPjx0cj48dGg+UGFydGl0aW9uIG5hbWU8dGg+VmFsdWVzPC90aGVhZD4KJztmb3JlYWNoKCRKWyJwYXJ0aXRpb25fbmFtZXMiXWFzJHo9PiRYKXtlY2hvJzx0cj4nLCc8dGQ+PGlucHV0IG5hbWU9InBhcnRpdGlvbl9uYW1lc1tdIiB2YWx1ZT0iJy5oKCRYKS4nIiBhdXRvY2FwaXRhbGl6ZT0ib2ZmIj4nLCgkej09Y291bnQoJEpbInBhcnRpdGlvbl9uYW1lcyJdKS0xP3NjcmlwdCgicXNsKCdpbnB1dCcpLm9uaW5wdXQgPSBwYXJ0aXRpb25OYW1lQ2hhbmdlOyIpOicnKSwnPHRkPjxpbnB1dCBuYW1lPSJwYXJ0aXRpb25fdmFsdWVzW10iIHZhbHVlPSInLmgoJEpbInBhcnRpdGlvbl92YWx1ZXMiXVskel0pLiciPic7fWVjaG8nPC90YWJsZT4KPC9kaXY+PC9maWVsZHNldD4KJzt9ZWNobyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9IicsJG5pLCciPgo8L2Zvcm0+Cic7fWVsc2VpZihpc3NldCgkX0dFVFsiaW5kZXhlcyJdKSl7JGE9JF9HRVRbImluZGV4ZXMiXTskTGQ9YXJyYXkoIlBSSU1BUlkiLCJVTklRVUUiLCJJTkRFWCIpOyRSPXRhYmxlX3N0YXR1cygkYSx0cnVlKTtpZihwcmVnX21hdGNoKCd+TXlJU0FNfE0/YXJpYScuKG1pbl92ZXJzaW9uKDUuNiwnMTAuMC41Jyk/J3xJbm5vREInOicnKS4nfmknLCRSWyJFbmdpbmUiXSkpJExkW109IkZVTExURVhUIjtpZihwcmVnX21hdGNoKCd+TXlJU0FNfE0/YXJpYScuKG1pbl92ZXJzaW9uKDUuNywnMTAuMi4yJyk/J3xJbm5vREInOicnKS4nfmknLCRSWyJFbmdpbmUiXSkpJExkW109IlNQQVRJQUwiOyR4PWluZGV4ZXMoJGEpOyRrZz1hcnJheSgpO2lmKCR5PT0ibW9uZ28iKXska2c9JHhbIl9pZF8iXTt1bnNldCgkTGRbMF0pO3Vuc2V0KCR4WyJfaWRfIl0pO30kSj0kX1BPU1Q7aWYoJF9QT1NUJiYhJG4mJiEkX1BPU1RbImFkZCJdJiYhJF9QT1NUWyJkcm9wX2NvbCJdKXskYz1hcnJheSgpO2ZvcmVhY2goJEpbImluZGV4ZXMiXWFzJHcpeyREPSR3WyJuYW1lIl07aWYoaW5fYXJyYXkoJHdbInR5cGUiXSwkTGQpKXskZj1hcnJheSgpOyR1ZT1hcnJheSgpOyRjYz1hcnJheSgpOyROPWFycmF5KCk7a3NvcnQoJHdbImNvbHVtbnMiXSk7Zm9yZWFjaCgkd1siY29sdW1ucyJdYXMkej0+JGUpe2lmKCRlIT0iIil7JHRlPSR3WyJsZW5ndGhzIl1bJHpdOyRiYz0kd1siZGVzY3MiXVskel07JE5bXT1pZGZfZXNjYXBlKCRlKS4oJHRlPyIoIi4oKyR0ZSkuIikiOiIiKS4oJGJjPyIgREVTQyI6IiIpOyRmW109JGU7JHVlW109KCR0ZT8kdGU6bnVsbCk7JGNjW109JGJjO319aWYoJGYpeyRJYz0keFskRF07aWYoJEljKXtrc29ydCgkSWNbImNvbHVtbnMiXSk7a3NvcnQoJEljWyJsZW5ndGhzIl0pO2tzb3J0KCRJY1siZGVzY3MiXSk7aWYoJHdbInR5cGUiXT09JEljWyJ0eXBlIl0mJmFycmF5X3ZhbHVlcygkSWNbImNvbHVtbnMiXSk9PT0kZiYmKCEkSWNbImxlbmd0aHMiXXx8YXJyYXlfdmFsdWVzKCRJY1sibGVuZ3RocyJdKT09PSR1ZSkmJmFycmF5X3ZhbHVlcygkSWNbImRlc2NzIl0pPT09JGNjKXt1bnNldCgkeFskRF0pO2NvbnRpbnVlO319JGNbXT1hcnJheSgkd1sidHlwZSJdLCRELCROKTt9fX1mb3JlYWNoKCR4CmFzJEQ9PiRJYykkY1tdPWFycmF5KCRJY1sidHlwZSJdLCRELCJEUk9QIik7aWYoISRjKXJlZGlyZWN0KE1FLiJ0YWJsZT0iLnVybGVuY29kZSgkYSkpO3F1ZXJpZXNfcmVkaXJlY3QoTUUuInRhYmxlPSIudXJsZW5jb2RlKCRhKSwnSW5kZXhlcyBoYXZlIGJlZW4gYWx0ZXJlZC4nLGFsdGVyX2luZGV4ZXMoJGEsJGMpKTt9cGFnZV9oZWFkZXIoJ0luZGV4ZXMnLCRuLGFycmF5KCJ0YWJsZSI9PiRhKSxoKCRhKSk7JHA9YXJyYXlfa2V5cyhmaWVsZHMoJGEpKTtpZigkX1BPU1RbImFkZCJdKXtmb3JlYWNoKCRKWyJpbmRleGVzIl1hcyR6PT4kdyl7aWYoJHdbImNvbHVtbnMiXVtjb3VudCgkd1siY29sdW1ucyJdKV0hPSIiKSRKWyJpbmRleGVzIl1bJHpdWyJjb2x1bW5zIl1bXT0iIjt9JHc9ZW5kKCRKWyJpbmRleGVzIl0pO2lmKCR3WyJ0eXBlIl18fGFycmF5X2ZpbHRlcigkd1siY29sdW1ucyJdLCdzdHJsZW4nKSkkSlsiaW5kZXhlcyJdW109YXJyYXkoImNvbHVtbnMiPT5hcnJheSgxPT4iIikpO31pZighJEope2ZvcmVhY2goJHgKYXMkej0+JHcpeyR4WyR6XVsibmFtZSJdPSR6OyR4WyR6XVsiY29sdW1ucyJdW109IiI7fSR4W109YXJyYXkoImNvbHVtbnMiPT5hcnJheSgxPT4iIikpOyRKWyJpbmRleGVzIl09JHg7fWVjaG8nCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgo8ZGl2IGNsYXNzPSJzY3JvbGxhYmxlIj4KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibm93cmFwIj4KPHRoZWFkPjx0cj4KPHRoIGlkPSJsYWJlbC10eXBlIj5JbmRleCBUeXBlCjx0aD48aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0id2F5b2ZmIj5Db2x1bW4gKGxlbmd0aCkKPHRoIGlkPSJsYWJlbC1uYW1lIj5OYW1lCjx0aD48bm9zY3JpcHQ+JywiPGlucHV0IHR5cGU9J2ltYWdlJyBjbGFzcz0naWNvbicgbmFtZT0nYWRkWzBdJyBzcmM9JyIuaChwcmVnX3JlcGxhY2UoIn5cXD8uKn4iLCIiLE1FKS4iP2ZpbGU9cGx1cy5naWYmdmVyc2lvbj00LjguMSIpLiInIGFsdD0nKycgdGl0bGU9JyIuJ0FkZCBuZXh0Jy4iJz4iLCc8L25vc2NyaXB0Pgo8L3RoZWFkPgonO2lmKCRrZyl7ZWNobyI8dHI+PHRkPlBSSU1BUlk8dGQ+Ijtmb3JlYWNoKCRrZ1siY29sdW1ucyJdYXMkej0+JGUpe2VjaG8Kc2VsZWN0X2lucHV0KCIgZGlzYWJsZWQiLCRwLCRlKSwiPGxhYmVsPjxpbnB1dCBkaXNhYmxlZCB0eXBlPSdjaGVja2JveCc+Ii4nZGVzY2VuZGluZycuIjwvbGFiZWw+ICI7fWVjaG8iPHRkPjx0ZD5cbiI7fSRlZT0xO2ZvcmVhY2goJEpbImluZGV4ZXMiXWFzJHcpe2lmKCEkX1BPU1RbImRyb3BfY29sIl18fCRlZSE9a2V5KCRfUE9TVFsiZHJvcF9jb2wiXSkpe2VjaG8iPHRyPjx0ZD4iLmh0bWxfc2VsZWN0KCJpbmRleGVzWyRlZV1bdHlwZV0iLGFycmF5KC0xPT4iIikrJExkLCR3WyJ0eXBlIl0sKCRlZT09Y291bnQoJEpbImluZGV4ZXMiXSk/ImluZGV4ZXNBZGRSb3cuY2FsbCh0aGlzKTsiOjEpLCJsYWJlbC10eXBlIiksIjx0ZD4iO2tzb3J0KCR3WyJjb2x1bW5zIl0pOyR0PTE7Zm9yZWFjaCgkd1siY29sdW1ucyJdYXMkej0+JGUpe2VjaG8iPHNwYW4+Ii5zZWxlY3RfaW5wdXQoIiBuYW1lPSdpbmRleGVzWyRlZV1bY29sdW1uc11bJHRdJyB0aXRsZT0nIi4nQ29sdW1uJy4iJyIsKCRwP2FycmF5X2NvbWJpbmUoJHAsJHApOiRwKSwkZSwicGFydGlhbCgiLigkdD09Y291bnQoJHdbImNvbHVtbnMiXSk/ImluZGV4ZXNBZGRDb2x1bW4iOiJpbmRleGVzQ2hhbmdlQ29sdW1uIikuIiwgJyIuanNfZXNjYXBlKCR5PT0ic3FsIj8iIjokX0dFVFsiaW5kZXhlcyJdLiJfIikuIicpIiksKCR5PT0ic3FsInx8JHk9PSJtc3NxbCI/IjxpbnB1dCB0eXBlPSdudW1iZXInIG5hbWU9J2luZGV4ZXNbJGVlXVtsZW5ndGhzXVskdF0nIGNsYXNzPSdzaXplJyB2YWx1ZT0nIi5oKCR3WyJsZW5ndGhzIl1bJHpdKS4iJyB0aXRsZT0nIi4nTGVuZ3RoJy4iJz4iOiIiKSwoc3VwcG9ydCgiZGVzY2lkeCIpP2NoZWNrYm94KCJpbmRleGVzWyRlZV1bZGVzY3NdWyR0XSIsMSwkd1siZGVzY3MiXVskel0sJ2Rlc2NlbmRpbmcnKToiIiksIiA8L3NwYW4+IjskdCsrO31lY2hvIjx0ZD48aW5wdXQgbmFtZT0naW5kZXhlc1skZWVdW25hbWVdJyB2YWx1ZT0nIi5oKCR3WyJuYW1lIl0pLiInIGF1dG9jYXBpdGFsaXplPSdvZmYnIGFyaWEtbGFiZWxsZWRieT0nbGFiZWwtbmFtZSc+XG4iLCI8dGQ+PGlucHV0IHR5cGU9J2ltYWdlJyBjbGFzcz0naWNvbicgbmFtZT0nZHJvcF9jb2xbJGVlXScgc3JjPSciLmgocHJlZ19yZXBsYWNlKCJ+XFw/Lip+IiwiIixNRSkuIj9maWxlPWNyb3NzLmdpZiZ2ZXJzaW9uPTQuOC4xIikuIicgYWx0PSd4JyB0aXRsZT0nIi4nUmVtb3ZlJy4iJz4iLnNjcmlwdCgicXNsKCdpbnB1dCcpLm9uY2xpY2sgPSBwYXJ0aWFsKGVkaXRpbmdSZW1vdmVSb3csICdpbmRleGVzXCQxW3R5cGVdJyk7Iik7fSRlZSsrO31lY2hvJzwvdGFibGU+CjwvZGl2Pgo8cD4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9IicsJG5pLCciPgo8L2Zvcm0+Cic7fWVsc2VpZihpc3NldCgkX0dFVFsiZGF0YWJhc2UiXSkpeyRKPSRfUE9TVDtpZigkX1BPU1QmJiEkbiYmIWlzc2V0KCRfUE9TVFsiYWRkX3giXSkpeyREPXRyaW0oJEpbIm5hbWUiXSk7aWYoJF9QT1NUWyJkcm9wIl0peyRfR0VUWyJkYiJdPSIiO3F1ZXJpZXNfcmVkaXJlY3QocmVtb3ZlX2Zyb21fdXJpKCJkYnxkYXRhYmFzZSIpLCdEYXRhYmFzZSBoYXMgYmVlbiBkcm9wcGVkLicsZHJvcF9kYXRhYmFzZXMoYXJyYXkoREIpKSk7fWVsc2VpZihEQiE9PSREKXtpZihEQiE9IiIpeyRfR0VUWyJkYiJdPSREO3F1ZXJpZXNfcmVkaXJlY3QocHJlZ19yZXBsYWNlKCd+XGJkYj1bXiZdKiZ+JywnJyxNRSkuImRiPSIudXJsZW5jb2RlKCREKSwnRGF0YWJhc2UgaGFzIGJlZW4gcmVuYW1lZC4nLHJlbmFtZV9kYXRhYmFzZSgkRCwkSlsiY29sbGF0aW9uIl0pKTt9ZWxzZXskaz1leHBsb2RlKCJcbiIsc3RyX3JlcGxhY2UoIlxyIiwiIiwkRCkpOyRJaD10cnVlOyRuZT0iIjtmb3JlYWNoKCRrCmFzJGwpe2lmKGNvdW50KCRrKT09MXx8JGwhPSIiKXtpZighY3JlYXRlX2RhdGFiYXNlKCRsLCRKWyJjb2xsYXRpb24iXSkpJEloPWZhbHNlOyRuZT0kbDt9fXJlc3RhcnRfc2Vzc2lvbigpO3NldF9zZXNzaW9uKCJkYnMiLG51bGwpO3F1ZXJpZXNfcmVkaXJlY3QoTUUuImRiPSIudXJsZW5jb2RlKCRuZSksJ0RhdGFiYXNlIGhhcyBiZWVuIGNyZWF0ZWQuJywkSWgpO319ZWxzZXtpZighJEpbImNvbGxhdGlvbiJdKXJlZGlyZWN0KHN1YnN0cihNRSwwLC0xKSk7cXVlcnlfcmVkaXJlY3QoIkFMVEVSIERBVEFCQVNFICIuaWRmX2VzY2FwZSgkRCkuKHByZWdfbWF0Y2goJ35eW2EtejAtOV9dKyR+aScsJEpbImNvbGxhdGlvbiJdKT8iIENPTExBVEUgJEpbY29sbGF0aW9uXSI6IiIpLHN1YnN0cihNRSwwLC0xKSwnRGF0YWJhc2UgaGFzIGJlZW4gYWx0ZXJlZC4nKTt9fXBhZ2VfaGVhZGVyKERCIT0iIj8nQWx0ZXIgZGF0YWJhc2UnOidDcmVhdGUgZGF0YWJhc2UnLCRuLGFycmF5KCksaChEQikpOyRsYj1jb2xsYXRpb25zKCk7JEQ9REI7aWYoJF9QT1NUKSREPSRKWyJuYW1lIl07ZWxzZWlmKERCIT0iIikkSlsiY29sbGF0aW9uIl09ZGJfY29sbGF0aW9uKERCLCRsYik7ZWxzZWlmKCR5PT0ic3FsIil7Zm9yZWFjaChnZXRfdmFscygiU0hPVyBHUkFOVFMiKWFzJG9kKXtpZihwcmVnX21hdGNoKCd+IE9OIChgKChbXlxcXFxgXXxgYHxcXFxcLikqKSVgXC5cKik/ficsJG9kLCRDKSYmJENbMV0peyREPXN0cmlwY3NsYXNoZXMoaWRmX3VuZXNjYXBlKCJgJENbMl1gIikpO2JyZWFrO319fWVjaG8nCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgo8cD4KJywoJF9QT1NUWyJhZGRfeCJdfHxzdHJwb3MoJEQsIlxuIik/Jzx0ZXh0YXJlYSBpZD0ibmFtZSIgbmFtZT0ibmFtZSIgcm93cz0iMTAiIGNvbHM9IjQwIj4nLmgoJEQpLic8L3RleHRhcmVhPjxicj4nOic8aW5wdXQgbmFtZT0ibmFtZSIgaWQ9Im5hbWUiIHZhbHVlPSInLmgoJEQpLiciIGRhdGEtbWF4bGVuZ3RoPSI2NCIgYXV0b2NhcGl0YWxpemU9Im9mZiI+JykuIlxuIi4oJGxiP2h0bWxfc2VsZWN0KCJjb2xsYXRpb24iLGFycmF5KCIiPT4iKCIuJ2NvbGxhdGlvbicuIikiKSskbGIsJEpbImNvbGxhdGlvbiJdKS5kb2NfbGluayhhcnJheSgnc3FsJz0+ImNoYXJzZXQtY2hhcnNldHMuaHRtbCIsJ21hcmlhZGInPT4ic3VwcG9ydGVkLWNoYXJhY3Rlci1zZXRzLWFuZC1jb2xsYXRpb25zLyIsJ21zc3FsJz0+Im1zMTg3OTYzLmFzcHgiLCkpOiIiKSxzY3JpcHQoImZvY3VzKHFzKCcjbmFtZScpKTsiKSwnPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPgonO2lmKERCIT0iIillY2hvIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2Ryb3AnIHZhbHVlPSciLidEcm9wJy4iJz4iLmNvbmZpcm0oc3ByaW50ZignRHJvcCAlcz8nLERCKSkuIlxuIjtlbHNlaWYoISRfUE9TVFsiYWRkX3giXSYmJF9HRVRbImRiIl09PSIiKWVjaG8iPGlucHV0IHR5cGU9J2ltYWdlJyBjbGFzcz0naWNvbicgbmFtZT0nYWRkJyBzcmM9JyIuaChwcmVnX3JlcGxhY2UoIn5cXD8uKn4iLCIiLE1FKS4iP2ZpbGU9cGx1cy5naWYmdmVyc2lvbj00LjguMSIpLiInIGFsdD0nKycgdGl0bGU9JyIuJ0FkZCBuZXh0Jy4iJz5cbiI7ZWNobyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9IicsJG5pLCciPgo8L2Zvcm0+Cic7fWVsc2VpZihpc3NldCgkX0dFVFsic2NoZW1lIl0pKXskSj0kX1BPU1Q7aWYoJF9QT1NUJiYhJG4peyRBPXByZWdfcmVwbGFjZSgnfm5zPVteJl0qJn4nLCcnLE1FKS4ibnM9IjtpZigkX1BPU1RbImRyb3AiXSlxdWVyeV9yZWRpcmVjdCgiRFJPUCBTQ0hFTUEgIi5pZGZfZXNjYXBlKCRfR0VUWyJucyJdKSwkQSwnU2NoZW1hIGhhcyBiZWVuIGRyb3BwZWQuJyk7ZWxzZXskRD10cmltKCRKWyJuYW1lIl0pOyRBLj11cmxlbmNvZGUoJEQpO2lmKCRfR0VUWyJucyJdPT0iIilxdWVyeV9yZWRpcmVjdCgiQ1JFQVRFIFNDSEVNQSAiLmlkZl9lc2NhcGUoJEQpLCRBLCdTY2hlbWEgaGFzIGJlZW4gY3JlYXRlZC4nKTtlbHNlaWYoJF9HRVRbIm5zIl0hPSREKXF1ZXJ5X3JlZGlyZWN0KCJBTFRFUiBTQ0hFTUEgIi5pZGZfZXNjYXBlKCRfR0VUWyJucyJdKS4iIFJFTkFNRSBUTyAiLmlkZl9lc2NhcGUoJEQpLCRBLCdTY2hlbWEgaGFzIGJlZW4gYWx0ZXJlZC4nKTtlbHNlCnJlZGlyZWN0KCRBKTt9fXBhZ2VfaGVhZGVyKCRfR0VUWyJucyJdIT0iIj8nQWx0ZXIgc2NoZW1hJzonQ3JlYXRlIHNjaGVtYScsJG4pO2lmKCEkSikkSlsibmFtZSJdPSRfR0VUWyJucyJdO2VjaG8nCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgo8cD48aW5wdXQgbmFtZT0ibmFtZSIgaWQ9Im5hbWUiIHZhbHVlPSInLGgoJEpbIm5hbWUiXSksJyIgYXV0b2NhcGl0YWxpemU9Im9mZiI+Cicsc2NyaXB0KCJmb2N1cyhxcygnI25hbWUnKSk7IiksJzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTYXZlIj4KJztpZigkX0dFVFsibnMiXSE9IiIpZWNobyI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdkcm9wJyB2YWx1ZT0nIi4nRHJvcCcuIic+Ii5jb25maXJtKHNwcmludGYoJ0Ryb3AgJXM/JywkX0dFVFsibnMiXSkpLiJcbiI7ZWNobyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0b2tlbiIgdmFsdWU9IicsJG5pLCciPgo8L2Zvcm0+Cic7fWVsc2VpZihpc3NldCgkX0dFVFsiY2FsbCJdKSl7JGRhPSgkX0dFVFsibmFtZSJdPyRfR0VUWyJuYW1lIl06JF9HRVRbImNhbGwiXSk7cGFnZV9oZWFkZXIoJ0NhbGwnLiI6ICIuaCgkZGEpLCRuKTskVGc9cm91dGluZSgkX0dFVFsiY2FsbCJdLChpc3NldCgkX0dFVFsiY2FsbGYiXSk/IkZVTkNUSU9OIjoiUFJPQ0VEVVJFIikpOyRKZD1hcnJheSgpOyRJZj1hcnJheSgpO2ZvcmVhY2goJFRnWyJmaWVsZHMiXWFzJHQ9PiRvKXtpZihzdWJzdHIoJG9bImlub3V0Il0sLTMpPT0iT1VUIikkSWZbJHRdPSJAIi5pZGZfZXNjYXBlKCRvWyJmaWVsZCJdKS4iIEFTICIuaWRmX2VzY2FwZSgkb1siZmllbGQiXSk7aWYoISRvWyJpbm91dCJdfHxzdWJzdHIoJG9bImlub3V0Il0sMCwyKT09IklOIikkSmRbXT0kdDt9aWYoISRuJiYkX1BPU1QpeyRYYT1hcnJheSgpO2ZvcmVhY2goJFRnWyJmaWVsZHMiXWFzJHo9PiRvKXtpZihpbl9hcnJheSgkeiwkSmQpKXskWD1wcm9jZXNzX2lucHV0KCRvKTtpZigkWD09PWZhbHNlKSRYPSInJyI7aWYoaXNzZXQoJElmWyR6XSkpJGctPnF1ZXJ5KCJTRVQgQCIuaWRmX2VzY2FwZSgkb1siZmllbGQiXSkuIiA9ICRYIik7fSRYYVtdPShpc3NldCgkSWZbJHpdKT8iQCIuaWRmX2VzY2FwZSgkb1siZmllbGQiXSk6JFgpO30kRz0oaXNzZXQoJF9HRVRbImNhbGxmIl0pPyJTRUxFQ1QiOiJDQUxMIikuIiAiLnRhYmxlKCRkYSkuIigiLmltcGxvZGUoIiwgIiwkWGEpLiIpIjskQ2g9bWljcm90aW1lKHRydWUpOyRIPSRnLT5tdWx0aV9xdWVyeSgkRyk7JHphPSRnLT5hZmZlY3RlZF9yb3dzO2VjaG8kYi0+c2VsZWN0UXVlcnkoJEcsJENoLCEkSCk7aWYoISRIKWVjaG8iPHAgY2xhc3M9J2Vycm9yJz4iLmVycm9yKCkuIlxuIjtlbHNleyRoPWNvbm5lY3QoKTtpZihpc19vYmplY3QoJGgpKSRoLT5zZWxlY3RfZGIoREIpO2RveyRIPSRnLT5zdG9yZV9yZXN1bHQoKTtpZihpc19vYmplY3QoJEgpKXNlbGVjdCgkSCwkaCk7ZWxzZQplY2hvIjxwIGNsYXNzPSdtZXNzYWdlJz4iLmxhbmcoYXJyYXkoJ1JvdXRpbmUgaGFzIGJlZW4gY2FsbGVkLCAlZCByb3cgYWZmZWN0ZWQuJywnUm91dGluZSBoYXMgYmVlbiBjYWxsZWQsICVkIHJvd3MgYWZmZWN0ZWQuJyksJHphKS4iIDxzcGFuIGNsYXNzPSd0aW1lJz4iLkBkYXRlKCJIOmk6cyIpLiI8L3NwYW4+XG4iO313aGlsZSgkZy0+bmV4dF9yZXN1bHQoKSk7aWYoJElmKXNlbGVjdCgkZy0+cXVlcnkoIlNFTEVDVCAiLmltcGxvZGUoIiwgIiwkSWYpKSk7fX1lY2hvJwo8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KJztpZigkSmQpe2VjaG8iPHRhYmxlIGNlbGxzcGFjaW5nPScwJyBjbGFzcz0nbGF5b3V0Jz5cbiI7Zm9yZWFjaCgkSmQKYXMkeil7JG89JFRnWyJmaWVsZHMiXVskel07JEQ9JG9bImZpZWxkIl07ZWNobyI8dHI+PHRoPiIuJGItPmZpZWxkTmFtZSgkbyk7JFk9JF9QT1NUWyJmaWVsZHMiXVskRF07aWYoJFkhPSIiKXtpZigkb1sidHlwZSJdPT0iZW51bSIpJFk9KyRZO2lmKCRvWyJ0eXBlIl09PSJzZXQiKSRZPWFycmF5X3N1bSgkWSk7fWlucHV0KCRvLCRZLChzdHJpbmcpJF9QT1NUWyJmdW5jdGlvbiJdWyREXSk7ZWNobyJcbiI7fWVjaG8iPC90YWJsZT5cbiI7fWVjaG8nPHA+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDYWxsIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSInLCRuaSwnIj4KPC9mb3JtPgonO31lbHNlaWYoaXNzZXQoJF9HRVRbImZvcmVpZ24iXSkpeyRhPSRfR0VUWyJmb3JlaWduIl07JEQ9JF9HRVRbIm5hbWUiXTskSj0kX1BPU1Q7aWYoJF9QT1NUJiYhJG4mJiEkX1BPU1RbImFkZCJdJiYhJF9QT1NUWyJjaGFuZ2UiXSYmISRfUE9TVFsiY2hhbmdlLWpzIl0peyRLZT0oJF9QT1NUWyJkcm9wIl0/J0ZvcmVpZ24ga2V5IGhhcyBiZWVuIGRyb3BwZWQuJzooJEQhPSIiPydGb3JlaWduIGtleSBoYXMgYmVlbiBhbHRlcmVkLic6J0ZvcmVpZ24ga2V5IGhhcyBiZWVuIGNyZWF0ZWQuJykpOyRCPU1FLiJ0YWJsZT0iLnVybGVuY29kZSgkYSk7aWYoISRfUE9TVFsiZHJvcCJdKXskSlsic291cmNlIl09YXJyYXlfZmlsdGVyKCRKWyJzb3VyY2UiXSwnc3RybGVuJyk7a3NvcnQoJEpbInNvdXJjZSJdKTskV2g9YXJyYXkoKTtmb3JlYWNoKCRKWyJzb3VyY2UiXWFzJHo9PiRYKSRXaFskel09JEpbInRhcmdldCJdWyR6XTskSlsidGFyZ2V0Il09JFdoO31pZigkeT09InNxbGl0ZSIpcXVlcmllc19yZWRpcmVjdCgkQiwkS2UscmVjcmVhdGVfdGFibGUoJGEsJGEsYXJyYXkoKSxhcnJheSgpLGFycmF5KCIgJEQiPT4oJF9QT1NUWyJkcm9wIl0/IiI6IiAiLmZvcm1hdF9mb3JlaWduX2tleSgkSikpKSkpO2Vsc2V7JGM9IkFMVEVSIFRBQkxFICIudGFibGUoJGEpOyRqYz0iXG5EUk9QICIuKCR5PT0ic3FsIj8iRk9SRUlHTiBLRVkgIjoiQ09OU1RSQUlOVCAiKS5pZGZfZXNjYXBlKCREKTtpZigkX1BPU1RbImRyb3AiXSlxdWVyeV9yZWRpcmVjdCgkYy4kamMsJEIsJEtlKTtlbHNle3F1ZXJ5X3JlZGlyZWN0KCRjLigkRCE9IiI/IiRqYywiOiIiKS4iXG5BREQiLmZvcm1hdF9mb3JlaWduX2tleSgkSiksJEIsJEtlKTskbj0nU291cmNlIGFuZCB0YXJnZXQgY29sdW1ucyBtdXN0IGhhdmUgdGhlIHNhbWUgZGF0YSB0eXBlLCB0aGVyZSBtdXN0IGJlIGFuIGluZGV4IG9uIHRoZSB0YXJnZXQgY29sdW1ucyBhbmQgcmVmZXJlbmNlZCBkYXRhIG11c3QgZXhpc3QuJy4iPGJyPiRuIjt9fX1wYWdlX2hlYWRlcignRm9yZWlnbiBrZXknLCRuLGFycmF5KCJ0YWJsZSI9PiRhKSxoKCRhKSk7aWYoJF9QT1NUKXtrc29ydCgkSlsic291cmNlIl0pO2lmKCRfUE9TVFsiYWRkIl0pJEpbInNvdXJjZSJdW109IiI7ZWxzZWlmKCRfUE9TVFsiY2hhbmdlIl18fCRfUE9TVFsiY2hhbmdlLWpzIl0pJEpbInRhcmdldCJdPWFycmF5KCk7fWVsc2VpZigkRCE9IiIpeyRoZD1mb3JlaWduX2tleXMoJGEpOyRKPSRoZFskRF07JEpbInNvdXJjZSJdW109IiI7fWVsc2V7JEpbInRhYmxlIl09JGE7JEpbInNvdXJjZSJdPWFycmF5KCIiKTt9ZWNobycKPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+Cic7JHZoPWFycmF5X2tleXMoZmllbGRzKCRhKSk7aWYoJEpbImRiIl0hPSIiKSRnLT5zZWxlY3RfZGIoJEpbImRiIl0pO2lmKCRKWyJucyJdIT0iIilzZXRfc2NoZW1hKCRKWyJucyJdKTskQ2c9YXJyYXlfa2V5cyhhcnJheV9maWx0ZXIodGFibGVfc3RhdHVzKCcnLHRydWUpLCdma19zdXBwb3J0JykpOyRXaD1hcnJheV9rZXlzKGZpZWxkcyhpbl9hcnJheSgkSlsidGFibGUiXSwkQ2cpPyRKWyJ0YWJsZSJdOnJlc2V0KCRDZykpKTskcWY9InRoaXMuZm9ybVsnY2hhbmdlLWpzJ10udmFsdWUgPSAnMSc7IHRoaXMuZm9ybS5zdWJtaXQoKTsiO2VjaG8iPHA+Ii4nVGFyZ2V0IHRhYmxlJy4iOiAiLmh0bWxfc2VsZWN0KCJ0YWJsZSIsJENnLCRKWyJ0YWJsZSJdLCRxZikuIlxuIjtpZigkeT09InBnc3FsIillY2hvJ1NjaGVtYScuIjogIi5odG1sX3NlbGVjdCgibnMiLCRiLT5zY2hlbWFzKCksJEpbIm5zIl0hPSIiPyRKWyJucyJdOiRfR0VUWyJucyJdLCRxZik7ZWxzZWlmKCR5IT0ic3FsaXRlIil7JFViPWFycmF5KCk7Zm9yZWFjaCgkYi0+ZGF0YWJhc2VzKClhcyRsKXtpZighaW5mb3JtYXRpb25fc2NoZW1hKCRsKSkkVWJbXT0kbDt9ZWNobydEQicuIjogIi5odG1sX3NlbGVjdCgiZGIiLCRVYiwkSlsiZGIiXSE9IiI/JEpbImRiIl06JF9HRVRbImRiIl0sJHFmKTt9ZWNobyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjaGFuZ2UtanMiIHZhbHVlPSIiPgo8bm9zY3JpcHQ+PHA+PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iY2hhbmdlIiB2YWx1ZT0iQ2hhbmdlIj48L25vc2NyaXB0Pgo8dGFibGUgY2VsbHNwYWNpbmc9IjAiPgo8dGhlYWQ+PHRyPjx0aCBpZD0ibGFiZWwtc291cmNlIj5Tb3VyY2U8dGggaWQ9ImxhYmVsLXRhcmdldCI+VGFyZ2V0PC90aGVhZD4KJzskZWU9MDtmb3JlYWNoKCRKWyJzb3VyY2UiXWFzJHo9PiRYKXtlY2hvIjx0cj4iLCI8dGQ+Ii5odG1sX3NlbGVjdCgic291cmNlWyIuKCskeikuIl0iLGFycmF5KC0xPT4iIikrJHZoLCRYLCgkZWU9PWNvdW50KCRKWyJzb3VyY2UiXSktMT8iZm9yZWlnbkFkZFJvdy5jYWxsKHRoaXMpOyI6MSksImxhYmVsLXNvdXJjZSIpLCI8dGQ+Ii5odG1sX3NlbGVjdCgidGFyZ2V0WyIuKCskeikuIl0iLCRXaCwkSlsidGFyZ2V0Il1bJHpdLDEsImxhYmVsLXRhcmdldCIpOyRlZSsrO31lY2hvJzwvdGFibGU+CjxwPgpPTiBERUxFVEU6ICcsaHRtbF9zZWxlY3QoIm9uX2RlbGV0ZSIsYXJyYXkoLTE9PiIiKStleHBsb2RlKCJ8IiwkcGYpLCRKWyJvbl9kZWxldGUiXSksJyBPTiBVUERBVEU6ICcsaHRtbF9zZWxlY3QoIm9uX3VwZGF0ZSIsYXJyYXkoLTE9PiIiKStleHBsb2RlKCJ8IiwkcGYpLCRKWyJvbl91cGRhdGUiXSksZG9jX2xpbmsoYXJyYXkoJ3NxbCc9PiJpbm5vZGItZm9yZWlnbi1rZXktY29uc3RyYWludHMuaHRtbCIsJ21hcmlhZGInPT4iZm9yZWlnbi1rZXlzLyIsJ3Bnc3FsJz0+InNxbC1jcmVhdGV0YWJsZS5odG1sI1NRTC1DUkVBVEVUQUJMRS1SRUZFUkVOQ0VTIiwnbXNzcWwnPT4ibXMxNzQ5NzkuYXNweCIsJ29yYWNsZSc9PiJodHRwczovL2RvY3Mub3JhY2xlLmNvbS9jZC9CMTkzMDZfMDEvc2VydmVyLjEwMi9iMTQyMDAvY2xhdXNlczAwMi5odG0jc3RocmVmMjkwMyIsKSksJzxwPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2F2ZSI+Cjxub3NjcmlwdD48cD48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhZGQiIHZhbHVlPSJBZGQgY29sdW1uIj48L25vc2NyaXB0PgonO2lmKCREIT0iIil7ZWNobyc8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJkcm9wIiB2YWx1ZT0iRHJvcCI+Jyxjb25maXJtKHNwcmludGYoJ0Ryb3AgJXM/JywkRCkpO31lY2hvJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvZm9ybT4KJzt9ZWxzZWlmKGlzc2V0KCRfR0VUWyJ2aWV3Il0pKXskYT0kX0dFVFsidmlldyJdOyRKPSRfUE9TVDskRmY9IlZJRVciO2lmKCR5PT0icGdzcWwiJiYkYSE9IiIpeyRPPXRhYmxlX3N0YXR1cygkYSk7JEZmPXN0cnRvdXBwZXIoJE9bIkVuZ2luZSJdKTt9aWYoJF9QT1NUJiYhJG4peyREPXRyaW0oJEpbIm5hbWUiXSk7JEZhPSIgQVNcbiRKW3NlbGVjdF0iOyRCPU1FLiJ0YWJsZT0iLnVybGVuY29kZSgkRCk7JEtlPSdWaWV3IGhhcyBiZWVuIGFsdGVyZWQuJzskVD0oJF9QT1NUWyJtYXRlcmlhbGl6ZWQiXT8iTUFURVJJQUxJWkVEIFZJRVciOiJWSUVXIik7aWYoISRfUE9TVFsiZHJvcCJdJiYkYT09JEQmJiR5IT0ic3FsaXRlIiYmJFQ9PSJWSUVXIiYmJEZmPT0iVklFVyIpcXVlcnlfcmVkaXJlY3QoKCR5PT0ibXNzcWwiPyJBTFRFUiI6IkNSRUFURSBPUiBSRVBMQUNFIikuIiBWSUVXICIudGFibGUoJEQpLiRGYSwkQiwkS2UpO2Vsc2V7JFloPSRELiJfYWRtaW5lcl8iLnVuaXFpZCgpO2Ryb3BfY3JlYXRlKCJEUk9QICRGZiAiLnRhYmxlKCRhKSwiQ1JFQVRFICRUICIudGFibGUoJEQpLiRGYSwiRFJPUCAkVCAiLnRhYmxlKCREKSwiQ1JFQVRFICRUICIudGFibGUoJFloKS4kRmEsIkRST1AgJFQgIi50YWJsZSgkWWgpLCgkX1BPU1RbImRyb3AiXT9zdWJzdHIoTUUsMCwtMSk6JEIpLCdWaWV3IGhhcyBiZWVuIGRyb3BwZWQuJywkS2UsJ1ZpZXcgaGFzIGJlZW4gY3JlYXRlZC4nLCRhLCREKTt9fWlmKCEkX1BPU1QmJiRhIT0iIil7JEo9dmlldygkYSk7JEpbIm5hbWUiXT0kYTskSlsibWF0ZXJpYWxpemVkIl09KCRGZiE9IlZJRVciKTtpZighJG4pJG49ZXJyb3IoKTt9cGFnZV9oZWFkZXIoKCRhIT0iIj8nQWx0ZXIgdmlldyc6J0NyZWF0ZSB2aWV3JyksJG4sYXJyYXkoInRhYmxlIj0+JGEpLGgoJGEpKTtlY2hvJwo8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KPHA+TmFtZTogPGlucHV0IG5hbWU9Im5hbWUiIHZhbHVlPSInLGgoJEpbIm5hbWUiXSksJyIgZGF0YS1tYXhsZW5ndGg9IjY0IiBhdXRvY2FwaXRhbGl6ZT0ib2ZmIj4KJywoc3VwcG9ydCgibWF0ZXJpYWxpemVkdmlldyIpPyIgIi5jaGVja2JveCgibWF0ZXJpYWxpemVkIiwxLCRKWyJtYXRlcmlhbGl6ZWQiXSwnTWF0ZXJpYWxpemVkIHZpZXcnKToiIiksJzxwPic7dGV4dGFyZWEoInNlbGVjdCIsJEpbInNlbGVjdCJdKTtlY2hvJzxwPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2F2ZSI+Cic7aWYoJGEhPSIiKXtlY2hvJzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImRyb3AiIHZhbHVlPSJEcm9wIj4nLGNvbmZpcm0oc3ByaW50ZignRHJvcCAlcz8nLCRhKSk7fWVjaG8nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSInLCRuaSwnIj4KPC9mb3JtPgonO31lbHNlaWYoaXNzZXQoJF9HRVRbImV2ZW50Il0pKXskYWE9JF9HRVRbImV2ZW50Il07JFdkPWFycmF5KCJZRUFSIiwiUVVBUlRFUiIsIk1PTlRIIiwiREFZIiwiSE9VUiIsIk1JTlVURSIsIldFRUsiLCJTRUNPTkQiLCJZRUFSX01PTlRIIiwiREFZX0hPVVIiLCJEQVlfTUlOVVRFIiwiREFZX1NFQ09ORCIsIkhPVVJfTUlOVVRFIiwiSE9VUl9TRUNPTkQiLCJNSU5VVEVfU0VDT05EIik7JEVoPWFycmF5KCJFTkFCTEVEIj0+IkVOQUJMRSIsIkRJU0FCTEVEIj0+IkRJU0FCTEUiLCJTTEFWRVNJREVfRElTQUJMRUQiPT4iRElTQUJMRSBPTiBTTEFWRSIpOyRKPSRfUE9TVDtpZigkX1BPU1QmJiEkbil7aWYoJF9QT1NUWyJkcm9wIl0pcXVlcnlfcmVkaXJlY3QoIkRST1AgRVZFTlQgIi5pZGZfZXNjYXBlKCRhYSksc3Vic3RyKE1FLDAsLTEpLCdFdmVudCBoYXMgYmVlbiBkcm9wcGVkLicpO2Vsc2VpZihpbl9hcnJheSgkSlsiSU5URVJWQUxfRklFTEQiXSwkV2QpJiZpc3NldCgkRWhbJEpbIlNUQVRVUyJdXSkpeyRZZz0iXG5PTiBTQ0hFRFVMRSAiLigkSlsiSU5URVJWQUxfVkFMVUUiXT8iRVZFUlkgIi5xKCRKWyJJTlRFUlZBTF9WQUxVRSJdKS4iICRKW0lOVEVSVkFMX0ZJRUxEXSIuKCRKWyJTVEFSVFMiXT8iIFNUQVJUUyAiLnEoJEpbIlNUQVJUUyJdKToiIikuKCRKWyJFTkRTIl0/IiBFTkRTICIucSgkSlsiRU5EUyJdKToiIik6IkFUICIucSgkSlsiU1RBUlRTIl0pKS4iIE9OIENPTVBMRVRJT04iLigkSlsiT05fQ09NUExFVElPTiJdPyIiOiIgTk9UIikuIiBQUkVTRVJWRSI7cXVlcmllc19yZWRpcmVjdChzdWJzdHIoTUUsMCwtMSksKCRhYSE9IiI/J0V2ZW50IGhhcyBiZWVuIGFsdGVyZWQuJzonRXZlbnQgaGFzIGJlZW4gY3JlYXRlZC4nKSxxdWVyaWVzKCgkYWEhPSIiPyJBTFRFUiBFVkVOVCAiLmlkZl9lc2NhcGUoJGFhKS4kWWcuKCRhYSE9JEpbIkVWRU5UX05BTUUiXT8iXG5SRU5BTUUgVE8gIi5pZGZfZXNjYXBlKCRKWyJFVkVOVF9OQU1FIl0pOiIiKToiQ1JFQVRFIEVWRU5UICIuaWRmX2VzY2FwZSgkSlsiRVZFTlRfTkFNRSJdKS4kWWcpLiJcbiIuJEVoWyRKWyJTVEFUVVMiXV0uIiBDT01NRU5UICIucSgkSlsiRVZFTlRfQ09NTUVOVCJdKS5ydHJpbSgiIERPXG4kSltFVkVOVF9ERUZJTklUSU9OXSIsIjsiKS4iOyIpKTt9fXBhZ2VfaGVhZGVyKCgkYWEhPSIiPydBbHRlciBldmVudCcuIjogIi5oKCRhYSk6J0NyZWF0ZSBldmVudCcpLCRuKTtpZighJEomJiRhYSE9IiIpeyRLPWdldF9yb3dzKCJTRUxFQ1QgKiBGUk9NIGluZm9ybWF0aW9uX3NjaGVtYS5FVkVOVFMgV0hFUkUgRVZFTlRfU0NIRU1BID0gIi5xKERCKS4iIEFORCBFVkVOVF9OQU1FID0gIi5xKCRhYSkpOyRKPXJlc2V0KCRLKTt9ZWNobycKPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+Cjx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxheW91dCI+Cjx0cj48dGg+TmFtZTx0ZD48aW5wdXQgbmFtZT0iRVZFTlRfTkFNRSIgdmFsdWU9IicsaCgkSlsiRVZFTlRfTkFNRSJdKSwnIiBkYXRhLW1heGxlbmd0aD0iNjQiIGF1dG9jYXBpdGFsaXplPSJvZmYiPgo8dHI+PHRoIHRpdGxlPSJkYXRldGltZSI+U3RhcnQ8dGQ+PGlucHV0IG5hbWU9IlNUQVJUUyIgdmFsdWU9IicsaCgiJEpbRVhFQ1VURV9BVF0kSltTVEFSVFNdIiksJyI+Cjx0cj48dGggdGl0bGU9ImRhdGV0aW1lIj5FbmQ8dGQ+PGlucHV0IG5hbWU9IkVORFMiIHZhbHVlPSInLGgoJEpbIkVORFMiXSksJyI+Cjx0cj48dGg+RXZlcnk8dGQ+PGlucHV0IHR5cGU9Im51bWJlciIgbmFtZT0iSU5URVJWQUxfVkFMVUUiIHZhbHVlPSInLGgoJEpbIklOVEVSVkFMX1ZBTFVFIl0pLCciIGNsYXNzPSJzaXplIj4gJyxodG1sX3NlbGVjdCgiSU5URVJWQUxfRklFTEQiLCRXZCwkSlsiSU5URVJWQUxfRklFTEQiXSksJzx0cj48dGg+U3RhdHVzPHRkPicsaHRtbF9zZWxlY3QoIlNUQVRVUyIsJEVoLCRKWyJTVEFUVVMiXSksJzx0cj48dGg+Q29tbWVudDx0ZD48aW5wdXQgbmFtZT0iRVZFTlRfQ09NTUVOVCIgdmFsdWU9IicsaCgkSlsiRVZFTlRfQ09NTUVOVCJdKSwnIiBkYXRhLW1heGxlbmd0aD0iNjQiPgo8dHI+PHRoPjx0ZD4nLGNoZWNrYm94KCJPTl9DT01QTEVUSU9OIiwiUFJFU0VSVkUiLCRKWyJPTl9DT01QTEVUSU9OIl09PSJQUkVTRVJWRSIsJ09uIGNvbXBsZXRpb24gcHJlc2VydmUnKSwnPC90YWJsZT4KPHA+Jzt0ZXh0YXJlYSgiRVZFTlRfREVGSU5JVElPTiIsJEpbIkVWRU5UX0RFRklOSVRJT04iXSk7ZWNobyc8cD4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPgonO2lmKCRhYSE9IiIpe2VjaG8nPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iZHJvcCIgdmFsdWU9IkRyb3AiPicsY29uZmlybShzcHJpbnRmKCdEcm9wICVzPycsJGFhKSk7fWVjaG8nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSInLCRuaSwnIj4KPC9mb3JtPgonO31lbHNlaWYoaXNzZXQoJF9HRVRbInByb2NlZHVyZSJdKSl7JGRhPSgkX0dFVFsibmFtZSJdPyRfR0VUWyJuYW1lIl06JF9HRVRbInByb2NlZHVyZSJdKTskVGc9KGlzc2V0KCRfR0VUWyJmdW5jdGlvbiJdKT8iRlVOQ1RJT04iOiJQUk9DRURVUkUiKTskSj0kX1BPU1Q7JEpbImZpZWxkcyJdPShhcnJheSkkSlsiZmllbGRzIl07aWYoJF9QT1NUJiYhcHJvY2Vzc19maWVsZHMoJEpbImZpZWxkcyJdKSYmISRuKXskQ2Y9cm91dGluZSgkX0dFVFsicHJvY2VkdXJlIl0sJFRnKTskWWg9IiRKW25hbWVdX2FkbWluZXJfIi51bmlxaWQoKTtkcm9wX2NyZWF0ZSgiRFJPUCAkVGcgIi5yb3V0aW5lX2lkKCRkYSwkQ2YpLGNyZWF0ZV9yb3V0aW5lKCRUZywkSiksIkRST1AgJFRnICIucm91dGluZV9pZCgkSlsibmFtZSJdLCRKKSxjcmVhdGVfcm91dGluZSgkVGcsYXJyYXkoIm5hbWUiPT4kWWgpKyRKKSwiRFJPUCAkVGcgIi5yb3V0aW5lX2lkKCRZaCwkSiksc3Vic3RyKE1FLDAsLTEpLCdSb3V0aW5lIGhhcyBiZWVuIGRyb3BwZWQuJywnUm91dGluZSBoYXMgYmVlbiBhbHRlcmVkLicsJ1JvdXRpbmUgaGFzIGJlZW4gY3JlYXRlZC4nLCRkYSwkSlsibmFtZSJdKTt9cGFnZV9oZWFkZXIoKCRkYSE9IiI/KGlzc2V0KCRfR0VUWyJmdW5jdGlvbiJdKT8nQWx0ZXIgZnVuY3Rpb24nOidBbHRlciBwcm9jZWR1cmUnKS4iOiAiLmgoJGRhKTooaXNzZXQoJF9HRVRbImZ1bmN0aW9uIl0pPydDcmVhdGUgZnVuY3Rpb24nOidDcmVhdGUgcHJvY2VkdXJlJykpLCRuKTtpZighJF9QT1NUJiYkZGEhPSIiKXskSj1yb3V0aW5lKCRfR0VUWyJwcm9jZWR1cmUiXSwkVGcpOyRKWyJuYW1lIl09JGRhO30kbGI9Z2V0X3ZhbHMoIlNIT1cgQ0hBUkFDVEVSIFNFVCIpO3NvcnQoJGxiKTskVWc9cm91dGluZV9sYW5ndWFnZXMoKTtlY2hvJwo8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBpZD0iZm9ybSI+CjxwPk5hbWU6IDxpbnB1dCBuYW1lPSJuYW1lIiB2YWx1ZT0iJyxoKCRKWyJuYW1lIl0pLCciIGRhdGEtbWF4bGVuZ3RoPSI2NCIgYXV0b2NhcGl0YWxpemU9Im9mZiI+CicsKCRVZz8nTGFuZ3VhZ2UnLiI6ICIuaHRtbF9zZWxlY3QoImxhbmd1YWdlIiwkVWcsJEpbImxhbmd1YWdlIl0pLiJcbiI6IiIpLCc8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU2F2ZSI+CjxkaXYgY2xhc3M9InNjcm9sbGFibGUiPgo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJub3dyYXAiPgonO2VkaXRfZmllbGRzKCRKWyJmaWVsZHMiXSwkbGIsJFRnKTtpZihpc3NldCgkX0dFVFsiZnVuY3Rpb24iXSkpe2VjaG8iPHRyPjx0ZD4iLidSZXR1cm4gdHlwZSc7ZWRpdF90eXBlKCJyZXR1cm5zIiwkSlsicmV0dXJucyJdLCRsYixhcnJheSgpLCgkeT09InBnc3FsIj9hcnJheSgidm9pZCIsInRyaWdnZXIiKTphcnJheSgpKSk7fWVjaG8nPC90YWJsZT4KJyxzY3JpcHQoImVkaXRGaWVsZHMoKTsiKSwnPC9kaXY+CjxwPic7dGV4dGFyZWEoImRlZmluaXRpb24iLCRKWyJkZWZpbml0aW9uIl0pO2VjaG8nPHA+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTYXZlIj4KJztpZigkZGEhPSIiKXtlY2hvJzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImRyb3AiIHZhbHVlPSJEcm9wIj4nLGNvbmZpcm0oc3ByaW50ZignRHJvcCAlcz8nLCRkYSkpO31lY2hvJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvZm9ybT4KJzt9ZWxzZWlmKGlzc2V0KCRfR0VUWyJzZXF1ZW5jZSJdKSl7JGZhPSRfR0VUWyJzZXF1ZW5jZSJdOyRKPSRfUE9TVDtpZigkX1BPU1QmJiEkbil7JEE9c3Vic3RyKE1FLDAsLTEpOyREPXRyaW0oJEpbIm5hbWUiXSk7aWYoJF9QT1NUWyJkcm9wIl0pcXVlcnlfcmVkaXJlY3QoIkRST1AgU0VRVUVOQ0UgIi5pZGZfZXNjYXBlKCRmYSksJEEsJ1NlcXVlbmNlIGhhcyBiZWVuIGRyb3BwZWQuJyk7ZWxzZWlmKCRmYT09IiIpcXVlcnlfcmVkaXJlY3QoIkNSRUFURSBTRVFVRU5DRSAiLmlkZl9lc2NhcGUoJEQpLCRBLCdTZXF1ZW5jZSBoYXMgYmVlbiBjcmVhdGVkLicpO2Vsc2VpZigkZmEhPSREKXF1ZXJ5X3JlZGlyZWN0KCJBTFRFUiBTRVFVRU5DRSAiLmlkZl9lc2NhcGUoJGZhKS4iIFJFTkFNRSBUTyAiLmlkZl9lc2NhcGUoJEQpLCRBLCdTZXF1ZW5jZSBoYXMgYmVlbiBhbHRlcmVkLicpO2Vsc2UKcmVkaXJlY3QoJEEpO31wYWdlX2hlYWRlcigkZmEhPSIiPydBbHRlciBzZXF1ZW5jZScuIjogIi5oKCRmYSk6J0NyZWF0ZSBzZXF1ZW5jZScsJG4pO2lmKCEkSikkSlsibmFtZSJdPSRmYTtlY2hvJwo8Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0Ij4KPHA+PGlucHV0IG5hbWU9Im5hbWUiIHZhbHVlPSInLGgoJEpbIm5hbWUiXSksJyIgYXV0b2NhcGl0YWxpemU9Im9mZiI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTYXZlIj4KJztpZigkZmEhPSIiKWVjaG8iPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nZHJvcCcgdmFsdWU9JyIuJ0Ryb3AnLiInPiIuY29uZmlybShzcHJpbnRmKCdEcm9wICVzPycsJGZhKSkuIlxuIjtlY2hvJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvZm9ybT4KJzt9ZWxzZWlmKGlzc2V0KCRfR0VUWyJ0eXBlIl0pKXskZ2E9JF9HRVRbInR5cGUiXTskSj0kX1BPU1Q7aWYoJF9QT1NUJiYhJG4peyRBPXN1YnN0cihNRSwwLC0xKTtpZigkX1BPU1RbImRyb3AiXSlxdWVyeV9yZWRpcmVjdCgiRFJPUCBUWVBFICIuaWRmX2VzY2FwZSgkZ2EpLCRBLCdUeXBlIGhhcyBiZWVuIGRyb3BwZWQuJyk7ZWxzZQpxdWVyeV9yZWRpcmVjdCgiQ1JFQVRFIFRZUEUgIi5pZGZfZXNjYXBlKHRyaW0oJEpbIm5hbWUiXSkpLiIgJEpbYXNdIiwkQSwnVHlwZSBoYXMgYmVlbiBjcmVhdGVkLicpO31wYWdlX2hlYWRlcigkZ2EhPSIiPydBbHRlciB0eXBlJy4iOiAiLmgoJGdhKTonQ3JlYXRlIHR5cGUnLCRuKTtpZighJEopJEpbImFzIl09IkFTICI7ZWNobycKPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CjxwPgonO2lmKCRnYSE9IiIpZWNobyI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdkcm9wJyB2YWx1ZT0nIi4nRHJvcCcuIic+Ii5jb25maXJtKHNwcmludGYoJ0Ryb3AgJXM/JywkZ2EpKS4iXG4iO2Vsc2V7ZWNobyI8aW5wdXQgbmFtZT0nbmFtZScgdmFsdWU9JyIuaCgkSlsnbmFtZSddKS4iJyBhdXRvY2FwaXRhbGl6ZT0nb2ZmJz5cbiI7dGV4dGFyZWEoImFzIiwkSlsiYXMiXSk7ZWNobyI8cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nIi4nU2F2ZScuIic+XG4iO31lY2hvJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvZm9ybT4KJzt9ZWxzZWlmKGlzc2V0KCRfR0VUWyJ0cmlnZ2VyIl0pKXskYT0kX0dFVFsidHJpZ2dlciJdOyREPSRfR0VUWyJuYW1lIl07JHlpPXRyaWdnZXJfb3B0aW9ucygpOyRKPShhcnJheSl0cmlnZ2VyKCRELCRhKSthcnJheSgiVHJpZ2dlciI9PiRhLiJfYmkiKTtpZigkX1BPU1Qpe2lmKCEkbiYmaW5fYXJyYXkoJF9QT1NUWyJUaW1pbmciXSwkeWlbIlRpbWluZyJdKSYmaW5fYXJyYXkoJF9QT1NUWyJFdmVudCJdLCR5aVsiRXZlbnQiXSkmJmluX2FycmF5KCRfUE9TVFsiVHlwZSJdLCR5aVsiVHlwZSJdKSl7JG9mPSIgT04gIi50YWJsZSgkYSk7JGpjPSJEUk9QIFRSSUdHRVIgIi5pZGZfZXNjYXBlKCREKS4oJHk9PSJwZ3NxbCI/JG9mOiIiKTskQj1NRS4idGFibGU9Ii51cmxlbmNvZGUoJGEpO2lmKCRfUE9TVFsiZHJvcCJdKXF1ZXJ5X3JlZGlyZWN0KCRqYywkQiwnVHJpZ2dlciBoYXMgYmVlbiBkcm9wcGVkLicpO2Vsc2V7aWYoJEQhPSIiKXF1ZXJpZXMoJGpjKTtxdWVyaWVzX3JlZGlyZWN0KCRCLCgkRCE9IiI/J1RyaWdnZXIgaGFzIGJlZW4gYWx0ZXJlZC4nOidUcmlnZ2VyIGhhcyBiZWVuIGNyZWF0ZWQuJykscXVlcmllcyhjcmVhdGVfdHJpZ2dlcigkb2YsJF9QT1NUKSkpO2lmKCREIT0iIilxdWVyaWVzKGNyZWF0ZV90cmlnZ2VyKCRvZiwkSithcnJheSgiVHlwZSI9PnJlc2V0KCR5aVsiVHlwZSJdKSkpKTt9fSRKPSRfUE9TVDt9cGFnZV9oZWFkZXIoKCREIT0iIj8nQWx0ZXIgdHJpZ2dlcicuIjogIi5oKCREKTonQ3JlYXRlIHRyaWdnZXInKSwkbixhcnJheSgidGFibGUiPT4kYSkpO2VjaG8nCjxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiIGlkPSJmb3JtIj4KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ibGF5b3V0Ij4KPHRyPjx0aD5UaW1lPHRkPicsaHRtbF9zZWxlY3QoIlRpbWluZyIsJHlpWyJUaW1pbmciXSwkSlsiVGltaW5nIl0sInRyaWdnZXJDaGFuZ2UoL14iLnByZWdfcXVvdGUoJGEsIi8iKS4iX1tiYV1baXVkXSQvLCAnIi5qc19lc2NhcGUoJGEpLiInLCB0aGlzLmZvcm0pOyIpLCc8dHI+PHRoPkV2ZW50PHRkPicsaHRtbF9zZWxlY3QoIkV2ZW50IiwkeWlbIkV2ZW50Il0sJEpbIkV2ZW50Il0sInRoaXMuZm9ybVsnVGltaW5nJ10ub25jaGFuZ2UoKTsiKSwoaW5fYXJyYXkoIlVQREFURSBPRiIsJHlpWyJFdmVudCJdKT8iIDxpbnB1dCBuYW1lPSdPZicgdmFsdWU9JyIuaCgkSlsiT2YiXSkuIicgY2xhc3M9J2hpZGRlbic+IjoiIiksJzx0cj48dGg+VHlwZTx0ZD4nLGh0bWxfc2VsZWN0KCJUeXBlIiwkeWlbIlR5cGUiXSwkSlsiVHlwZSJdKSwnPC90YWJsZT4KPHA+TmFtZTogPGlucHV0IG5hbWU9IlRyaWdnZXIiIHZhbHVlPSInLGgoJEpbIlRyaWdnZXIiXSksJyIgZGF0YS1tYXhsZW5ndGg9IjY0IiBhdXRvY2FwaXRhbGl6ZT0ib2ZmIj4KJyxzY3JpcHQoInFzKCcjZm9ybScpWydUaW1pbmcnXS5vbmNoYW5nZSgpOyIpLCc8cD4nO3RleHRhcmVhKCJTdGF0ZW1lbnQiLCRKWyJTdGF0ZW1lbnQiXSk7ZWNobyc8cD4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPgonO2lmKCREIT0iIil7ZWNobyc8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJkcm9wIiB2YWx1ZT0iRHJvcCI+Jyxjb25maXJtKHNwcmludGYoJ0Ryb3AgJXM/JywkRCkpO31lY2hvJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvZm9ybT4KJzt9ZWxzZWlmKGlzc2V0KCRfR0VUWyJ1c2VyIl0pKXskaGE9JF9HRVRbInVzZXIiXTskcGc9YXJyYXkoIiI9PmFycmF5KCJBbGwgcHJpdmlsZWdlcyI9PiIiKSk7Zm9yZWFjaChnZXRfcm93cygiU0hPVyBQUklWSUxFR0VTIilhcyRKKXtmb3JlYWNoKGV4cGxvZGUoIiwiLCgkSlsiUHJpdmlsZWdlIl09PSJHcmFudCBvcHRpb24iPyIiOiRKWyJDb250ZXh0Il0pKWFzJERiKSRwZ1skRGJdWyRKWyJQcml2aWxlZ2UiXV09JEpbIkNvbW1lbnQiXTt9JHBnWyJTZXJ2ZXIgQWRtaW4iXSs9JHBnWyJGaWxlIGFjY2VzcyBvbiBzZXJ2ZXIiXTskcGdbIkRhdGFiYXNlcyJdWyJDcmVhdGUgcm91dGluZSJdPSRwZ1siUHJvY2VkdXJlcyJdWyJDcmVhdGUgcm91dGluZSJdO3Vuc2V0KCRwZ1siUHJvY2VkdXJlcyJdWyJDcmVhdGUgcm91dGluZSJdKTskcGdbIkNvbHVtbnMiXT1hcnJheSgpO2ZvcmVhY2goYXJyYXkoIlNlbGVjdCIsIkluc2VydCIsIlVwZGF0ZSIsIlJlZmVyZW5jZXMiKWFzJFgpJHBnWyJDb2x1bW5zIl1bJFhdPSRwZ1siVGFibGVzIl1bJFhdO3Vuc2V0KCRwZ1siU2VydmVyIEFkbWluIl1bIlVzYWdlIl0pO2ZvcmVhY2goJHBnWyJUYWJsZXMiXWFzJHo9PiRYKXVuc2V0KCRwZ1siRGF0YWJhc2VzIl1bJHpdKTskWGU9YXJyYXkoKTtpZigkX1BPU1Qpe2ZvcmVhY2goJF9QT1NUWyJvYmplY3RzIl1hcyR6PT4kWCkkWGVbJFhdPShhcnJheSkkWGVbJFhdKyhhcnJheSkkX1BPU1RbImdyYW50cyJdWyR6XTt9JHBkPWFycmF5KCk7JG1mPSIiO2lmKGlzc2V0KCRfR0VUWyJob3N0Il0pJiYoJEg9JGctPnF1ZXJ5KCJTSE9XIEdSQU5UUyBGT1IgIi5xKCRoYSkuIkAiLnEoJF9HRVRbImhvc3QiXSkpKSl7d2hpbGUoJEo9JEgtPmZldGNoX3JvdygpKXtpZihwcmVnX21hdGNoKCd+R1JBTlQgKC4qKSBPTiAoLiopIFRPIH4nLCRKWzBdLCRDKSYmcHJlZ19tYXRjaF9hbGwoJ34gKihbXigsXSpbXiAsKF0pKCAqXChbXildK1wpKT9+JywkQ1sxXSwkQ2UsUFJFR19TRVRfT1JERVIpKXtmb3JlYWNoKCRDZQphcyRYKXtpZigkWFsxXSE9IlVTQUdFIikkcGRbIiRDWzJdJFhbMl0iXVskWFsxXV09dHJ1ZTtpZihwcmVnX21hdGNoKCd+IFdJVEggR1JBTlQgT1BUSU9OficsJEpbMF0pKSRwZFsiJENbMl0kWFsyXSJdWyJHUkFOVCBPUFRJT04iXT10cnVlO319aWYocHJlZ19tYXRjaCgifiBJREVOVElGSUVEIEJZIFBBU1NXT1JEICcoW14nXSspfiIsJEpbMF0sJEMpKSRtZj0kQ1sxXTt9fWlmKCRfUE9TVCYmISRuKXskbmY9KGlzc2V0KCRfR0VUWyJob3N0Il0pP3EoJGhhKS4iQCIucSgkX0dFVFsiaG9zdCJdKToiJyciKTtpZigkX1BPU1RbImRyb3AiXSlxdWVyeV9yZWRpcmVjdCgiRFJPUCBVU0VSICRuZiIsTUUuInByaXZpbGVnZXM9IiwnVXNlciBoYXMgYmVlbiBkcm9wcGVkLicpO2Vsc2V7JFplPXEoJF9QT1NUWyJ1c2VyIl0pLiJAIi5xKCRfUE9TVFsiaG9zdCJdKTskV2Y9JF9QT1NUWyJwYXNzIl07aWYoJFdmIT0nJyYmISRfUE9TVFsiaGFzaGVkIl0mJiFtaW5fdmVyc2lvbig4KSl7JFdmPSRnLT5yZXN1bHQoIlNFTEVDVCBQQVNTV09SRCgiLnEoJFdmKS4iKSIpOyRuPSEkV2Y7fSRKYj1mYWxzZTtpZighJG4pe2lmKCRuZiE9JFplKXskSmI9cXVlcmllcygobWluX3ZlcnNpb24oNSk/IkNSRUFURSBVU0VSIjoiR1JBTlQgVVNBR0UgT04gKi4qIFRPIikuIiAkWmUgSURFTlRJRklFRCBCWSAiLihtaW5fdmVyc2lvbig4KT8iIjoiUEFTU1dPUkQgIikucSgkV2YpKTskbj0hJEpiO31lbHNlaWYoJFdmIT0kbWYpcXVlcmllcygiU0VUIFBBU1NXT1JEIEZPUiAkWmUgPSAiLnEoJFdmKSk7fWlmKCEkbil7JFFnPWFycmF5KCk7Zm9yZWFjaCgkWGUKYXMkZmY9PiRvZCl7aWYoaXNzZXQoJF9HRVRbImdyYW50Il0pKSRvZD1hcnJheV9maWx0ZXIoJG9kKTskb2Q9YXJyYXlfa2V5cygkb2QpO2lmKGlzc2V0KCRfR0VUWyJncmFudCJdKSkkUWc9YXJyYXlfZGlmZihhcnJheV9rZXlzKGFycmF5X2ZpbHRlcigkWGVbJGZmXSwnc3RybGVuJykpLCRvZCk7ZWxzZWlmKCRuZj09JFplKXska2Y9YXJyYXlfa2V5cygoYXJyYXkpJHBkWyRmZl0pOyRRZz1hcnJheV9kaWZmKCRrZiwkb2QpOyRvZD1hcnJheV9kaWZmKCRvZCwka2YpO3Vuc2V0KCRwZFskZmZdKTt9aWYocHJlZ19tYXRjaCgnfl4oLispXHMqKFwoLipcKSk/JH5VJywkZmYsJEMpJiYoIWdyYW50KCJSRVZPS0UiLCRRZywkQ1syXSwiIE9OICRDWzFdIEZST00gJFplIil8fCFncmFudCgiR1JBTlQiLCRvZCwkQ1syXSwiIE9OICRDWzFdIFRPICRaZSIpKSl7JG49dHJ1ZTticmVhazt9fX1pZighJG4mJmlzc2V0KCRfR0VUWyJob3N0Il0pKXtpZigkbmYhPSRaZSlxdWVyaWVzKCJEUk9QIFVTRVIgJG5mIik7ZWxzZWlmKCFpc3NldCgkX0dFVFsiZ3JhbnQiXSkpe2ZvcmVhY2goJHBkCmFzJGZmPT4kUWcpe2lmKHByZWdfbWF0Y2goJ35eKC4rKShcKC4qXCkpPyR+VScsJGZmLCRDKSlncmFudCgiUkVWT0tFIixhcnJheV9rZXlzKCRRZyksJENbMl0sIiBPTiAkQ1sxXSBGUk9NICRaZSIpO319fXF1ZXJpZXNfcmVkaXJlY3QoTUUuInByaXZpbGVnZXM9IiwoaXNzZXQoJF9HRVRbImhvc3QiXSk/J1VzZXIgaGFzIGJlZW4gYWx0ZXJlZC4nOidVc2VyIGhhcyBiZWVuIGNyZWF0ZWQuJyksISRuKTtpZigkSmIpJGctPnF1ZXJ5KCJEUk9QIFVTRVIgJFplIik7fX1wYWdlX2hlYWRlcigoaXNzZXQoJF9HRVRbImhvc3QiXSk/J1VzZXJuYW1lJy4iOiAiLmgoIiRoYUAkX0dFVFtob3N0XSIpOidDcmVhdGUgdXNlcicpLCRuLGFycmF5KCJwcml2aWxlZ2VzIj0+YXJyYXkoJycsJ1ByaXZpbGVnZXMnKSkpO2lmKCRfUE9TVCl7JEo9JF9QT1NUOyRwZD0kWGU7fWVsc2V7JEo9JF9HRVQrYXJyYXkoImhvc3QiPT4kZy0+cmVzdWx0KCJTRUxFQ1QgU1VCU1RSSU5HX0lOREVYKENVUlJFTlRfVVNFUiwgJ0AnLCAtMSkiKSk7JEpbInBhc3MiXT0kbWY7aWYoJG1mIT0iIikkSlsiaGFzaGVkIl09dHJ1ZTskcGRbKERCPT0iInx8JHBkPyIiOmlkZl9lc2NhcGUoYWRkY3NsYXNoZXMoREIsIiVfXFwiKSkpLiIuKiJdPWFycmF5KCk7fWVjaG8nPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+Cjx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxheW91dCI+Cjx0cj48dGg+U2VydmVyPHRkPjxpbnB1dCBuYW1lPSJob3N0IiBkYXRhLW1heGxlbmd0aD0iNjAiIHZhbHVlPSInLGgoJEpbImhvc3QiXSksJyIgYXV0b2NhcGl0YWxpemU9Im9mZiI+Cjx0cj48dGg+VXNlcm5hbWU8dGQ+PGlucHV0IG5hbWU9InVzZXIiIGRhdGEtbWF4bGVuZ3RoPSI4MCIgdmFsdWU9IicsaCgkSlsidXNlciJdKSwnIiBhdXRvY2FwaXRhbGl6ZT0ib2ZmIj4KPHRyPjx0aD5QYXNzd29yZDx0ZD48aW5wdXQgbmFtZT0icGFzcyIgaWQ9InBhc3MiIHZhbHVlPSInLGgoJEpbInBhc3MiXSksJyIgYXV0b2NvbXBsZXRlPSJuZXctcGFzc3dvcmQiPgonO2lmKCEkSlsiaGFzaGVkIl0pZWNobwpzY3JpcHQoInR5cGVQYXNzd29yZChxcygnI3Bhc3MnKSk7Iik7ZWNobyhtaW5fdmVyc2lvbig4KT8iIjpjaGVja2JveCgiaGFzaGVkIiwxLCRKWyJoYXNoZWQiXSwnSGFzaGVkJywidHlwZVBhc3N3b3JkKHRoaXMuZm9ybVsncGFzcyddLCB0aGlzLmNoZWNrZWQpOyIpKSwnPC90YWJsZT4KCic7ZWNobyI8dGFibGUgY2VsbHNwYWNpbmc9JzAnPlxuIiwiPHRoZWFkPjx0cj48dGggY29sc3Bhbj0nMic+Ii4nUHJpdmlsZWdlcycuZG9jX2xpbmsoYXJyYXkoJ3NxbCc9PiJncmFudC5odG1sI3ByaXZfbGV2ZWwiKSk7JHQ9MDtmb3JlYWNoKCRwZAphcyRmZj0+JG9kKXtlY2hvJzx0aD4nLigkZmYhPSIqLioiPyI8aW5wdXQgbmFtZT0nb2JqZWN0c1skdF0nIHZhbHVlPSciLmgoJGZmKS4iJyBzaXplPScxMCcgYXV0b2NhcGl0YWxpemU9J29mZic+IjoiPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nb2JqZWN0c1skdF0nIHZhbHVlPScqLionIHNpemU9JzEwJz4qLioiKTskdCsrO31lY2hvIjwvdGhlYWQ+XG4iO2ZvcmVhY2goYXJyYXkoIiI9PiIiLCJTZXJ2ZXIgQWRtaW4iPT4nU2VydmVyJywiRGF0YWJhc2VzIj0+J0RhdGFiYXNlJywiVGFibGVzIj0+J1RhYmxlJywiQ29sdW1ucyI9PidDb2x1bW4nLCJQcm9jZWR1cmVzIj0+J1JvdXRpbmUnLClhcyREYj0+JGJjKXtmb3JlYWNoKChhcnJheSkkcGdbJERiXWFzJG9nPT4kcmIpe2VjaG8iPHRyIi5vZGQoKS4iPjx0ZCIuKCRiYz8iPiRiYzx0ZCI6IiBjb2xzcGFuPScyJyIpLicgbGFuZz0iZW4iIHRpdGxlPSInLmgoJHJiKS4nIj4nLmgoJG9nKTskdD0wO2ZvcmVhY2goJHBkCmFzJGZmPT4kb2QpeyREPSInZ3JhbnRzWyR0XVsiLmgoc3RydG91cHBlcigkb2cpKS4iXSciOyRZPSRvZFtzdHJ0b3VwcGVyKCRvZyldO2lmKCREYj09IlNlcnZlciBBZG1pbiImJiRmZiE9KGlzc2V0KCRwZFsiKi4qIl0pPyIqLioiOiIuKiIpKWVjaG8iPHRkPiI7ZWxzZWlmKGlzc2V0KCRfR0VUWyJncmFudCJdKSllY2hvIjx0ZD48c2VsZWN0IG5hbWU9JEQ+PG9wdGlvbj48b3B0aW9uIHZhbHVlPScxJyIuKCRZPyIgc2VsZWN0ZWQiOiIiKS4iPiIuJ0dyYW50Jy4iPG9wdGlvbiB2YWx1ZT0nMCciLigkWT09IjAiPyIgc2VsZWN0ZWQiOiIiKS4iPiIuJ1Jldm9rZScuIjwvc2VsZWN0PiI7ZWxzZXtlY2hvIjx0ZCBhbGlnbj0nY2VudGVyJz48bGFiZWwgY2xhc3M9J2Jsb2NrJz4iLCI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG5hbWU9JEQgdmFsdWU9JzEnIi4oJFk/IiBjaGVja2VkIjoiIikuKCRvZz09IkFsbCBwcml2aWxlZ2VzIj8iIGlkPSdncmFudHMtJHQtYWxsJz4iOiI+Ii4oJG9nPT0iR3JhbnQgb3B0aW9uIj8iIjpzY3JpcHQoInFzbCgnaW5wdXQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBpZiAodGhpcy5jaGVja2VkKSBmb3JtVW5jaGVjaygnZ3JhbnRzLSR0LWFsbCcpOyB9OyIpKSksIjwvbGFiZWw+Ijt9JHQrKzt9fX1lY2hvIjwvdGFibGU+XG4iLCc8cD4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiPgonO2lmKGlzc2V0KCRfR0VUWyJob3N0Il0pKXtlY2hvJzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImRyb3AiIHZhbHVlPSJEcm9wIj4nLGNvbmZpcm0oc3ByaW50ZignRHJvcCAlcz8nLCIkaGFAJF9HRVRbaG9zdF0iKSk7fWVjaG8nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idG9rZW4iIHZhbHVlPSInLCRuaSwnIj4KPC9mb3JtPgonO31lbHNlaWYoaXNzZXQoJF9HRVRbInByb2Nlc3NsaXN0Il0pKXtpZihzdXBwb3J0KCJraWxsIikpe2lmKCRfUE9TVCYmISRuKXskamU9MDtmb3JlYWNoKChhcnJheSkkX1BPU1RbImtpbGwiXWFzJFgpe2lmKGtpbGxfcHJvY2VzcygkWCkpJGplKys7fXF1ZXJpZXNfcmVkaXJlY3QoTUUuInByb2Nlc3NsaXN0PSIsbGFuZyhhcnJheSgnJWQgcHJvY2VzcyBoYXMgYmVlbiBraWxsZWQuJywnJWQgcHJvY2Vzc2VzIGhhdmUgYmVlbiBraWxsZWQuJyksJGplKSwkamV8fCEkX1BPU1RbImtpbGwiXSk7fX1wYWdlX2hlYWRlcignUHJvY2VzcyBsaXN0Jywkbik7ZWNobycKPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+CjxkaXYgY2xhc3M9InNjcm9sbGFibGUiPgo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJub3dyYXAgY2hlY2thYmxlIj4KJyxzY3JpcHQoIm1peGluKHFzbCgndGFibGUnKSwge29uY2xpY2s6IHRhYmxlQ2xpY2ssIG9uZGJsY2xpY2s6IHBhcnRpYWxBcmcodGFibGVDbGljaywgdHJ1ZSl9KTsiKTskdD0tMTtmb3JlYWNoKHByb2Nlc3NfbGlzdCgpYXMkdD0+JEope2lmKCEkdCl7ZWNobyI8dGhlYWQ+PHRyIGxhbmc9J2VuJz4iLihzdXBwb3J0KCJraWxsIik/Ijx0aD4iOiIiKTtmb3JlYWNoKCRKCmFzJHo9PiRYKWVjaG8iPHRoPiR6Ii5kb2NfbGluayhhcnJheSgnc3FsJz0+InNob3ctcHJvY2Vzc2xpc3QuaHRtbCNwcm9jZXNzbGlzdF8iLnN0cnRvbG93ZXIoJHopLCdwZ3NxbCc9PiJtb25pdG9yaW5nLXN0YXRzLmh0bWwjUEctU1RBVC1BQ1RJVklUWS1WSUVXIiwnb3JhY2xlJz0+IlJFRlJOMzAyMjMiLCkpO2VjaG8iPC90aGVhZD5cbiI7fWVjaG8iPHRyIi5vZGQoKS4iPiIuKHN1cHBvcnQoImtpbGwiKT8iPHRkPiIuY2hlY2tib3goImtpbGxbXSIsJEpbJHk9PSJzcWwiPyJJZCI6InBpZCJdLDApOiIiKTtmb3JlYWNoKCRKCmFzJHo9PiRYKWVjaG8iPHRkPiIuKCgkeT09InNxbCImJiR6PT0iSW5mbyImJnByZWdfbWF0Y2goIn5RdWVyeXxLaWxsZWR+IiwkSlsiQ29tbWFuZCJdKSYmJFghPSIiKXx8KCR5PT0icGdzcWwiJiYkej09ImN1cnJlbnRfcXVlcnkiJiYkWCE9IjxJRExFPiIpfHwoJHk9PSJvcmFjbGUiJiYkej09InNxbF90ZXh0IiYmJFghPSIiKT8iPGNvZGUgY2xhc3M9J2p1c2gtJHknPiIuc2hvcnRlbl91dGY4KCRYLDEwMCwiPC9jb2RlPiIpLicgPGEgaHJlZj0iJy5oKE1FLigkSlsiZGIiXSE9IiI/ImRiPSIudXJsZW5jb2RlKCRKWyJkYiJdKS4iJiI6IiIpLiJzcWw9Ii51cmxlbmNvZGUoJFgpKS4nIj4nLidDbG9uZScuJzwvYT4nOmgoJFgpKTtlY2hvIlxuIjt9ZWNobyc8L3RhYmxlPgo8L2Rpdj4KPHA+Cic7aWYoc3VwcG9ydCgia2lsbCIpKXtlY2hvKCR0KzEpLiIvIi5zcHJpbnRmKCclZCBpbiB0b3RhbCcsbWF4X2Nvbm5lY3Rpb25zKCkpLCI8cD48aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nIi4nS2lsbCcuIic+XG4iO31lY2hvJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRva2VuIiB2YWx1ZT0iJywkbmksJyI+CjwvZm9ybT4KJyxzY3JpcHQoInRhYmxlQ2hlY2soKTsiKTt9ZWxzZWlmKGlzc2V0KCRfR0VUWyJzZWxlY3QiXSkpeyRhPSRfR0VUWyJzZWxlY3QiXTskUj10YWJsZV9zdGF0dXMxKCRhKTskeD1pbmRleGVzKCRhKTskcD1maWVsZHMoJGEpOyRoZD1jb2x1bW5fZm9yZWlnbl9rZXlzKCRhKTskaWY9JFJbIk9pZCJdO3BhcnNlX3N0cigkX0NPT0tJRVsiYWRtaW5lcl9pbXBvcnQiXSwkeWEpOyRSZz1hcnJheSgpOyRmPWFycmF5KCk7JGNpPW51bGw7Zm9yZWFjaCgkcAphcyR6PT4kbyl7JEQ9JGItPmZpZWxkTmFtZSgkbyk7aWYoaXNzZXQoJG9bInByaXZpbGVnZXMiXVsic2VsZWN0Il0pJiYkRCE9IiIpeyRmWyR6XT1odG1sX2VudGl0eV9kZWNvZGUoc3RyaXBfdGFncygkRCksRU5UX1FVT1RFUyk7aWYoaXNfc2hvcnRhYmxlKCRvKSkkY2k9JGItPnNlbGVjdExlbmd0aFByb2Nlc3MoKTt9JFJnKz0kb1sicHJpdmlsZWdlcyJdO31saXN0KCRMLCRxZCk9JGItPnNlbGVjdENvbHVtbnNQcm9jZXNzKCRmLCR4KTskYWU9Y291bnQoJHFkKTxjb3VudCgkTCk7JFo9JGItPnNlbGVjdFNlYXJjaFByb2Nlc3MoJHAsJHgpOyR6Zj0kYi0+c2VsZWN0T3JkZXJQcm9jZXNzKCRwLCR4KTskXz0kYi0+c2VsZWN0TGltaXRQcm9jZXNzKCk7aWYoJF9HRVRbInZhbCJdJiZpc19hamF4KCkpe2hlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7Zm9yZWFjaCgkX0dFVFsidmFsIl1hcyRFaT0+JEopeyRGYT1jb252ZXJ0X2ZpZWxkKCRwW2tleSgkSildKTskTD1hcnJheSgkRmE/JEZhOmlkZl9lc2NhcGUoa2V5KCRKKSkpOyRaW109d2hlcmVfY2hlY2soJEVpLCRwKTskST0kbS0+c2VsZWN0KCRhLCRMLCRaLCRMKTtpZigkSSllY2hvCnJlc2V0KCRJLT5mZXRjaF9yb3coKSk7fWV4aXQ7fSRrZz0kR2k9bnVsbDtmb3JlYWNoKCR4CmFzJHcpe2lmKCR3WyJ0eXBlIl09PSJQUklNQVJZIil7JGtnPWFycmF5X2ZsaXAoJHdbImNvbHVtbnMiXSk7JEdpPSgkTD8ka2c6YXJyYXkoKSk7Zm9yZWFjaCgkR2kKYXMkej0+JFgpe2lmKGluX2FycmF5KGlkZl9lc2NhcGUoJHopLCRMKSl1bnNldCgkR2lbJHpdKTt9YnJlYWs7fX1pZigkaWYmJiEka2cpeyRrZz0kR2k9YXJyYXkoJGlmPT4wKTskeFtdPWFycmF5KCJ0eXBlIj0+IlBSSU1BUlkiLCJjb2x1bW5zIj0+YXJyYXkoJGlmKSk7fWlmKCRfUE9TVCYmISRuKXskaGo9JFo7aWYoISRfUE9TVFsiYWxsIl0mJmlzX2FycmF5KCRfUE9TVFsiY2hlY2siXSkpeyRkYj1hcnJheSgpO2ZvcmVhY2goJF9QT1NUWyJjaGVjayJdYXMkYWIpJGRiW109d2hlcmVfY2hlY2soJGFiLCRwKTskaGpbXT0iKCgiLmltcGxvZGUoIikgT1IgKCIsJGRiKS4iKSkiO30kaGo9KCRoaj8iXG5XSEVSRSAiLmltcGxvZGUoIiBBTkQgIiwkaGopOiIiKTtpZigkX1BPU1RbImV4cG9ydCJdKXtjb29raWUoImFkbWluZXJfaW1wb3J0Iiwib3V0cHV0PSIudXJsZW5jb2RlKCRfUE9TVFsib3V0cHV0Il0pLiImZm9ybWF0PSIudXJsZW5jb2RlKCRfUE9TVFsiZm9ybWF0Il0pKTtkdW1wX2hlYWRlcnMoJGEpOyRiLT5kdW1wVGFibGUoJGEsIiIpOyRtZD0oJEw/aW1wbG9kZSgiLCAiLCRMKToiKiIpLmNvbnZlcnRfZmllbGRzKCRmLCRwLCRMKS4iXG5GUk9NICIudGFibGUoJGEpOyRzZD0oJHFkJiYkYWU/IlxuR1JPVVAgQlkgIi5pbXBsb2RlKCIsICIsJHFkKToiIikuKCR6Zj8iXG5PUkRFUiBCWSAiLmltcGxvZGUoIiwgIiwkemYpOiIiKTtpZighaXNfYXJyYXkoJF9QT1NUWyJjaGVjayJdKXx8JGtnKSRHPSJTRUxFQ1QgJG1kJGhqJHNkIjtlbHNleyRDaT1hcnJheSgpO2ZvcmVhY2goJF9QT1NUWyJjaGVjayJdYXMkWCkkQ2lbXT0iKFNFTEVDVCIubGltaXQoJG1kLCJcbldIRVJFICIuKCRaP2ltcGxvZGUoIiBBTkQgIiwkWikuIiBBTkQgIjoiIikud2hlcmVfY2hlY2soJFgsJHApLiRzZCwxKS4iKSI7JEc9aW1wbG9kZSgiIFVOSU9OIEFMTCAiLCRDaSk7fSRiLT5kdW1wRGF0YSgkYSwidGFibGUiLCRHKTtleGl0O31pZighJGItPnNlbGVjdEVtYWlsUHJvY2VzcygkWiwkaGQpKXtpZigkX1BPU1RbInNhdmUiXXx8JF9QT1NUWyJkZWxldGUiXSl7JEg9dHJ1ZTskemE9MDskTj1hcnJheSgpO2lmKCEkX1BPU1RbImRlbGV0ZSJdKXtmb3JlYWNoKCRmCmFzJEQ9PiRYKXskWD1wcm9jZXNzX2lucHV0KCRwWyREXSk7aWYoJFghPT1udWxsJiYoJF9QT1NUWyJjbG9uZSJdfHwkWCE9PWZhbHNlKSkkTltpZGZfZXNjYXBlKCREKV09KCRYIT09ZmFsc2U/JFg6aWRmX2VzY2FwZSgkRCkpO319aWYoJF9QT1NUWyJkZWxldGUiXXx8JE4pe2lmKCRfUE9TVFsiY2xvbmUiXSkkRz0iSU5UTyAiLnRhYmxlKCRhKS4iICgiLmltcGxvZGUoIiwgIixhcnJheV9rZXlzKCROKSkuIilcblNFTEVDVCAiLmltcGxvZGUoIiwgIiwkTikuIlxuRlJPTSAiLnRhYmxlKCRhKTtpZigkX1BPU1RbImFsbCJdfHwoJGtnJiZpc19hcnJheSgkX1BPU1RbImNoZWNrIl0pKXx8JGFlKXskSD0oJF9QT1NUWyJkZWxldGUiXT8kbS0+ZGVsZXRlKCRhLCRoaik6KCRfUE9TVFsiY2xvbmUiXT9xdWVyaWVzKCJJTlNFUlQgJEckaGoiKTokbS0+dXBkYXRlKCRhLCROLCRoaikpKTskemE9JGctPmFmZmVjdGVkX3Jvd3M7fWVsc2V7Zm9yZWFjaCgoYXJyYXkpJF9QT1NUWyJjaGVjayJdYXMkWCl7JGRqPSJcbldIRVJFICIuKCRaP2ltcGxvZGUoIiBBTkQgIiwkWikuIiBBTkQgIjoiIikud2hlcmVfY2hlY2soJFgsJHApOyRIPSgkX1BPU1RbImRlbGV0ZSJdPyRtLT5kZWxldGUoJGEsJGRqLDEpOigkX1BPU1RbImNsb25lIl0/cXVlcmllcygiSU5TRVJUIi5saW1pdDEoJGEsJEcsJGRqKSk6JG0tPnVwZGF0ZSgkYSwkTiwkZGosMSkpKTtpZighJEgpYnJlYWs7JHphKz0kZy0+YWZmZWN0ZWRfcm93czt9fX0kS2U9bGFuZyhhcnJheSgnJWQgaXRlbSBoYXMgYmVlbiBhZmZlY3RlZC4nLCclZCBpdGVtcyBoYXZlIGJlZW4gYWZmZWN0ZWQuJyksJHphKTtpZigkX1BPU1RbImNsb25lIl0mJiRIJiYkemE9PTEpeyRvZT1sYXN0X2lkKCk7aWYoJG9lKSRLZT1zcHJpbnRmKCdJdGVtJXMgaGFzIGJlZW4gaW5zZXJ0ZWQuJywiICRvZSIpO31xdWVyaWVzX3JlZGlyZWN0KHJlbW92ZV9mcm9tX3VyaSgkX1BPU1RbImFsbCJdJiYkX1BPU1RbImRlbGV0ZSJdPyJwYWdlIjoiIiksJEtlLCRIKTtpZighJF9QT1NUWyJkZWxldGUiXSl7ZWRpdF9mb3JtKCRhLCRwLChhcnJheSkkX1BPU1RbImZpZWxkcyJdLCEkX1BPU1RbImNsb25lIl0pO3BhZ2VfZm9vdGVyKCk7ZXhpdDt9fWVsc2VpZighJF9QT1NUWyJpbXBvcnQiXSl7aWYoISRfUE9TVFsidmFsIl0pJG49J0N0cmwrY2xpY2sgb24gYSB2YWx1ZSB0byBtb2RpZnkgaXQuJztlbHNleyRIPXRydWU7JHphPTA7Zm9yZWFjaCgkX1BPU1RbInZhbCJdYXMkRWk9PiRKKXskTj1hcnJheSgpO2ZvcmVhY2goJEoKYXMkej0+JFgpeyR6PWJyYWNrZXRfZXNjYXBlKCR6LDEpOyROW2lkZl9lc2NhcGUoJHopXT0ocHJlZ19tYXRjaCgnfmNoYXJ8dGV4dH4nLCRwWyR6XVsidHlwZSJdKXx8JFghPSIiPyRiLT5wcm9jZXNzSW5wdXQoJHBbJHpdLCRYKToiTlVMTCIpO30kSD0kbS0+dXBkYXRlKCRhLCROLCIgV0hFUkUgIi4oJFo/aW1wbG9kZSgiIEFORCAiLCRaKS4iIEFORCAiOiIiKS53aGVyZV9jaGVjaygkRWksJHApLCEkYWUmJiEka2csIiAiKTtpZighJEgpYnJlYWs7JHphKz0kZy0+YWZmZWN0ZWRfcm93czt9cXVlcmllc19yZWRpcmVjdChyZW1vdmVfZnJvbV91cmkoKSxsYW5nKGFycmF5KCclZCBpdGVtIGhhcyBiZWVuIGFmZmVjdGVkLicsJyVkIGl0ZW1zIGhhdmUgYmVlbiBhZmZlY3RlZC4nKSwkemEpLCRIKTt9fWVsc2VpZighaXNfc3RyaW5nKCRYYz1nZXRfZmlsZSgiY3N2X2ZpbGUiLHRydWUpKSkkbj11cGxvYWRfZXJyb3IoJFhjKTtlbHNlaWYoIXByZWdfbWF0Y2goJ35+dScsJFhjKSkkbj0nRmlsZSBtdXN0IGJlIGluIFVURi04IGVuY29kaW5nLic7ZWxzZXtjb29raWUoImFkbWluZXJfaW1wb3J0Iiwib3V0cHV0PSIudXJsZW5jb2RlKCR5YVsib3V0cHV0Il0pLiImZm9ybWF0PSIudXJsZW5jb2RlKCRfUE9TVFsic2VwYXJhdG9yIl0pKTskSD10cnVlOyRuYj1hcnJheV9rZXlzKCRwKTtwcmVnX21hdGNoX2FsbCgnfig/PiJbXiJdKiJ8W14iXHJcbl0rKSt+JywkWGMsJENlKTskemE9Y291bnQoJENlWzBdKTskbS0+YmVnaW4oKTskaGg9KCRfUE9TVFsic2VwYXJhdG9yIl09PSJjc3YiPyIsIjooJF9QT1NUWyJzZXBhcmF0b3IiXT09InRzdiI/Ilx0IjoiOyIpKTskSz1hcnJheSgpO2ZvcmVhY2goJENlWzBdYXMkej0+JFgpe3ByZWdfbWF0Y2hfYWxsKCJ+KCg/PlwiW15cIl0qXCIpK3xbXiRoaF0qKSRoaH4iLCRYLiRoaCwkRGUpO2lmKCEkeiYmIWFycmF5X2RpZmYoJERlWzFdLCRuYikpeyRuYj0kRGVbMV07JHphLS07fWVsc2V7JE49YXJyYXkoKTtmb3JlYWNoKCREZVsxXWFzJHQ9PiRqYikkTltpZGZfZXNjYXBlKCRuYlskdF0pXT0oJGpiPT0iIiYmJHBbJG5iWyR0XV1bIm51bGwiXT8iTlVMTCI6cShzdHJfcmVwbGFjZSgnIiInLCciJyxwcmVnX3JlcGxhY2UoJ35eInwiJH4nLCcnLCRqYikpKSk7JEtbXT0kTjt9fSRIPSghJEt8fCRtLT5pbnNlcnRVcGRhdGUoJGEsJEssJGtnKSk7aWYoJEgpJEg9JG0tPmNvbW1pdCgpO3F1ZXJpZXNfcmVkaXJlY3QocmVtb3ZlX2Zyb21fdXJpKCJwYWdlIiksbGFuZyhhcnJheSgnJWQgcm93IGhhcyBiZWVuIGltcG9ydGVkLicsJyVkIHJvd3MgaGF2ZSBiZWVuIGltcG9ydGVkLicpLCR6YSksJEgpOyRtLT5yb2xsYmFjaygpO319fSRPaD0kYi0+dGFibGVOYW1lKCRSKTtpZihpc19hamF4KCkpe3BhZ2VfaGVhZGVycygpO29iX3N0YXJ0KCk7fWVsc2UKcGFnZV9oZWFkZXIoJ1NlbGVjdCcuIjogJE9oIiwkbik7JE49bnVsbDtpZihpc3NldCgkUmdbImluc2VydCJdKXx8IXN1cHBvcnQoInRhYmxlIikpeyROPSIiO2ZvcmVhY2goKGFycmF5KSRfR0VUWyJ3aGVyZSJdYXMkWCl7aWYoJGhkWyRYWyJjb2wiXV0mJmNvdW50KCRoZFskWFsiY29sIl1dKT09MSYmKCRYWyJvcCJdPT0iPSJ8fCghJFhbIm9wIl0mJiFwcmVnX21hdGNoKCd+W18lXX4nLCRYWyJ2YWwiXSkpKSkkTi49IiZzZXQiLnVybGVuY29kZSgiWyIuYnJhY2tldF9lc2NhcGUoJFhbImNvbCJdKS4iXSIpLiI9Ii51cmxlbmNvZGUoJFhbInZhbCJdKTt9fSRiLT5zZWxlY3RMaW5rcygkUiwkTik7aWYoISRmJiZzdXBwb3J0KCJ0YWJsZSIpKWVjaG8iPHAgY2xhc3M9J2Vycm9yJz4iLidVbmFibGUgdG8gc2VsZWN0IHRoZSB0YWJsZScuKCRwPyIuIjoiOiAiLmVycm9yKCkpLiJcbiI7ZWxzZXtlY2hvIjxmb3JtIGFjdGlvbj0nJyBpZD0nZm9ybSc+XG4iLCI8ZGl2IHN0eWxlPSdkaXNwbGF5OiBub25lOyc+IjtoaWRkZW5fZmllbGRzX2dldCgpO2VjaG8oREIhPSIiPyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkYiIgdmFsdWU9IicuaChEQikuJyI+Jy4oaXNzZXQoJF9HRVRbIm5zIl0pPyc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJucyIgdmFsdWU9IicuaCgkX0dFVFsibnMiXSkuJyI+JzoiIik6IiIpO2VjaG8nPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VsZWN0IiB2YWx1ZT0iJy5oKCRhKS4nIj4nLCI8L2Rpdj5cbiI7JGItPnNlbGVjdENvbHVtbnNQcmludCgkTCwkZik7JGItPnNlbGVjdFNlYXJjaFByaW50KCRaLCRmLCR4KTskYi0+c2VsZWN0T3JkZXJQcmludCgkemYsJGYsJHgpOyRiLT5zZWxlY3RMaW1pdFByaW50KCRfKTskYi0+c2VsZWN0TGVuZ3RoUHJpbnQoJGNpKTskYi0+c2VsZWN0QWN0aW9uUHJpbnQoJHgpO2VjaG8iPC9mb3JtPlxuIjskRT0kX0dFVFsicGFnZSJdO2lmKCRFPT0ibGFzdCIpeyRrZD0kZy0+cmVzdWx0KGNvdW50X3Jvd3MoJGEsJFosJGFlLCRxZCkpOyRFPWZsb29yKG1heCgwLCRrZC0xKS8kXyk7fSRjaD0kTDskcmQ9JHFkO2lmKCEkY2gpeyRjaFtdPSIqIjskRWI9Y29udmVydF9maWVsZHMoJGYsJHAsJEwpO2lmKCRFYikkY2hbXT1zdWJzdHIoJEViLDIpO31mb3JlYWNoKCRMCmFzJHo9PiRYKXskbz0kcFtpZGZfdW5lc2NhcGUoJFgpXTtpZigkbyYmKCRGYT1jb252ZXJ0X2ZpZWxkKCRvKSkpJGNoWyR6XT0iJEZhIEFTICRYIjt9aWYoISRhZSYmJEdpKXtmb3JlYWNoKCRHaQphcyR6PT4kWCl7JGNoW109aWRmX2VzY2FwZSgkeik7aWYoJHJkKSRyZFtdPWlkZl9lc2NhcGUoJHopO319JEg9JG0tPnNlbGVjdCgkYSwkY2gsJFosJHJkLCR6ZiwkXywkRSx0cnVlKTtpZighJEgpZWNobyI8cCBjbGFzcz0nZXJyb3InPiIuZXJyb3IoKS4iXG4iO2Vsc2V7aWYoJHk9PSJtc3NxbCImJiRFKSRILT5zZWVrKCRfKiRFKTskd2M9YXJyYXkoKTtlY2hvIjxmb3JtIGFjdGlvbj0nJyBtZXRob2Q9J3Bvc3QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPlxuIjskSz1hcnJheSgpO3doaWxlKCRKPSRILT5mZXRjaF9hc3NvYygpKXtpZigkRSYmJHk9PSJvcmFjbGUiKXVuc2V0KCRKWyJSTlVNIl0pOyRLW109JEo7fWlmKCRfR0VUWyJwYWdlIl0hPSJsYXN0IiYmJF8hPSIiJiYkcWQmJiRhZSYmJHk9PSJzcWwiKSRrZD0kZy0+cmVzdWx0KCIgU0VMRUNUIEZPVU5EX1JPV1MoKSIpO2lmKCEkSyllY2hvIjxwIGNsYXNzPSdtZXNzYWdlJz4iLidObyByb3dzLicuIlxuIjtlbHNleyRPYT0kYi0+YmFja3dhcmRLZXlzKCRhLCRPaCk7ZWNobyI8ZGl2IGNsYXNzPSdzY3JvbGxhYmxlJz4iLCI8dGFibGUgaWQ9J3RhYmxlJyBjZWxsc3BhY2luZz0nMCcgY2xhc3M9J25vd3JhcCBjaGVja2FibGUnPiIsc2NyaXB0KCJtaXhpbihxcygnI3RhYmxlJyksIHtvbmNsaWNrOiB0YWJsZUNsaWNrLCBvbmRibGNsaWNrOiBwYXJ0aWFsQXJnKHRhYmxlQ2xpY2ssIHRydWUpLCBvbmtleWRvd246IGVkaXRpbmdLZXlkb3dufSk7IiksIjx0aGVhZD48dHI+Ii4oISRxZCYmJEw/IiI6Ijx0ZD48aW5wdXQgdHlwZT0nY2hlY2tib3gnIGlkPSdhbGwtcGFnZScgY2xhc3M9J2pzb25seSc+Ii5zY3JpcHQoInFzKCcjYWxsLXBhZ2UnKS5vbmNsaWNrID0gcGFydGlhbChmb3JtQ2hlY2ssIC9jaGVjay8pOyIsIiIpLiIgPGEgaHJlZj0nIi5oKCRfR0VUWyJtb2RpZnkiXT9yZW1vdmVfZnJvbV91cmkoIm1vZGlmeSIpOiRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdLiImbW9kaWZ5PTEiKS4iJz4iLidNb2RpZnknLiI8L2E+Iik7JFZlPWFycmF5KCk7JG5kPWFycmF5KCk7cmVzZXQoJEwpOyR6Zz0xO2ZvcmVhY2goJEtbMF1hcyR6PT4kWCl7aWYoIWlzc2V0KCRHaVskel0pKXskWD0kX0dFVFsiY29sdW1ucyJdW2tleSgkTCldOyRvPSRwWyRMPygkWD8kWFsiY29sIl06Y3VycmVudCgkTCkpOiR6XTskRD0oJG8/JGItPmZpZWxkTmFtZSgkbywkemcpOigkWFsiZnVuIl0/IioiOiR6KSk7aWYoJEQhPSIiKXskemcrKzskVmVbJHpdPSREOyRlPWlkZl9lc2NhcGUoJHopOyRFZD1yZW1vdmVfZnJvbV91cmkoJyhvcmRlcnxkZXNjKVtePV0qfHBhZ2UnKS4nJm9yZGVyJTVCMCU1RD0nLnVybGVuY29kZSgkeik7JGJjPSImZGVzYyU1QjAlNUQ9MSI7ZWNobyI8dGggaWQ9J3RoWyIuaChicmFja2V0X2VzY2FwZSgkeikpLiJdJz4iLnNjcmlwdCgibWl4aW4ocXNsKCd0aCcpLCB7b25tb3VzZW92ZXI6IHBhcnRpYWwoY29sdW1uTW91c2UpLCBvbm1vdXNlb3V0OiBwYXJ0aWFsKGNvbHVtbk1vdXNlLCAnIGhpZGRlbicpfSk7IiwiIiksJzxhIGhyZWY9IicuaCgkRWQuKCR6ZlswXT09JGV8fCR6ZlswXT09JHp8fCghJHpmJiYkYWUmJiRxZFswXT09JGUpPyRiYzonJykpLiciPic7ZWNobwphcHBseV9zcWxfZnVuY3Rpb24oJFhbImZ1biJdLCREKS4iPC9hPiI7ZWNobyI8c3BhbiBjbGFzcz0nY29sdW1uIGhpZGRlbic+IiwiPGEgaHJlZj0nIi5oKCRFZC4kYmMpLiInIHRpdGxlPSciLidkZXNjZW5kaW5nJy4iJyBjbGFzcz0ndGV4dCc+IOKGkzwvYT4iO2lmKCEkWFsiZnVuIl0pe2VjaG8nPGEgaHJlZj0iI2ZpZWxkc2V0LXNlYXJjaCIgdGl0bGU9IicuJ1NlYXJjaCcuJyIgY2xhc3M9InRleHQganNvbmx5Ij4gPTwvYT4nLHNjcmlwdCgicXNsKCdhJykub25jbGljayA9IHBhcnRpYWwoc2VsZWN0U2VhcmNoLCAnIi5qc19lc2NhcGUoJHopLiInKTsiKTt9ZWNobyI8L3NwYW4+Ijt9JG5kWyR6XT0kWFsiZnVuIl07bmV4dCgkTCk7fX0kdWU9YXJyYXkoKTtpZigkX0dFVFsibW9kaWZ5Il0pe2ZvcmVhY2goJEsKYXMkSil7Zm9yZWFjaCgkSgphcyR6PT4kWCkkdWVbJHpdPW1heCgkdWVbJHpdLG1pbig0MCxzdHJsZW4odXRmOF9kZWNvZGUoJFgpKSkpO319ZWNobygkT2E/Ijx0aD4iLidSZWxhdGlvbnMnOiIiKS4iPC90aGVhZD5cbiI7aWYoaXNfYWpheCgpKXtpZigkXyUyPT0xJiYkRSUyPT0xKW9kZCgpO29iX2VuZF9jbGVhbigpO31mb3JlYWNoKCRiLT5yb3dEZXNjcmlwdGlvbnMoJEssJGhkKWFzJFVlPT4kSil7JERpPXVuaXF1ZV9hcnJheSgkS1skVWVdLCR4KTtpZighJERpKXskRGk9YXJyYXkoKTtmb3JlYWNoKCRLWyRVZV1hcyR6PT4kWCl7aWYoIXByZWdfbWF0Y2goJ35eKENPVU5UXCgoXCp8KERJU1RJTkNUICk/YCg/OlteYF18YGApK2ApXCl8KEFWR3xHUk9VUF9DT05DQVR8TUFYfE1JTnxTVU0pXChgKD86W15gXXxgYCkrYFwpKSR+JywkeikpJERpWyR6XT0kWDt9fSRFaT0iIjtmb3JlYWNoKCREaQphcyR6PT4kWCl7aWYoKCR5PT0ic3FsInx8JHk9PSJwZ3NxbCIpJiZwcmVnX21hdGNoKCd+Y2hhcnx0ZXh0fGVudW18c2V0ficsJHBbJHpdWyJ0eXBlIl0pJiZzdHJsZW4oJFgpPjY0KXskej0oc3RycG9zKCR6LCcoJyk/JHo6aWRmX2VzY2FwZSgkeikpOyR6PSJNRDUoIi4oJHkhPSdzcWwnfHxwcmVnX21hdGNoKCJ+XnV0Zjh+IiwkcFskel1bImNvbGxhdGlvbiJdKT8kejoiQ09OVkVSVCgkeiBVU0lORyAiLmNoYXJzZXQoJGcpLiIpIikuIikiOyRYPW1kNSgkWCk7fSRFaS49IiYiLigkWCE9PW51bGw/dXJsZW5jb2RlKCJ3aGVyZVsiLmJyYWNrZXRfZXNjYXBlKCR6KS4iXSIpLiI9Ii51cmxlbmNvZGUoJFgpOiJudWxsJTVCJTVEPSIudXJsZW5jb2RlKCR6KSk7fWVjaG8iPHRyIi5vZGQoKS4iPiIuKCEkcWQmJiRMPyIiOiI8dGQ+Ii5jaGVja2JveCgiY2hlY2tbXSIsc3Vic3RyKCRFaSwxKSxpbl9hcnJheShzdWJzdHIoJEVpLDEpLChhcnJheSkkX1BPU1RbImNoZWNrIl0pKS4oJGFlfHxpbmZvcm1hdGlvbl9zY2hlbWEoREIpPyIiOiIgPGEgaHJlZj0nIi5oKE1FLiJlZGl0PSIudXJsZW5jb2RlKCRhKS4kRWkpLiInIGNsYXNzPSdlZGl0Jz4iLidlZGl0Jy4iPC9hPiIpKTtmb3JlYWNoKCRKCmFzJHo9PiRYKXtpZihpc3NldCgkVmVbJHpdKSl7JG89JHBbJHpdOyRYPSRtLT52YWx1ZSgkWCwkbyk7aWYoJFghPSIiJiYoIWlzc2V0KCR3Y1skel0pfHwkd2NbJHpdIT0iIikpJHdjWyR6XT0oaXNfbWFpbCgkWCk/JFZlWyR6XToiIik7JEE9IiI7aWYocHJlZ19tYXRjaCgnfmJsb2J8Ynl0ZWF8cmF3fGZpbGV+Jywkb1sidHlwZSJdKSYmJFghPSIiKSRBPU1FLidkb3dubG9hZD0nLnVybGVuY29kZSgkYSkuJyZmaWVsZD0nLnVybGVuY29kZSgkeikuJEVpO2lmKCEkQSYmJFghPT1udWxsKXtmb3JlYWNoKChhcnJheSkkaGRbJHpdYXMkcil7aWYoY291bnQoJGhkWyR6XSk9PTF8fGVuZCgkclsic291cmNlIl0pPT0keil7JEE9IiI7Zm9yZWFjaCgkclsic291cmNlIl1hcyR0PT4kdmgpJEEuPXdoZXJlX2xpbmsoJHQsJHJbInRhcmdldCJdWyR0XSwkS1skVWVdWyR2aF0pOyRBPSgkclsiZGIiXSE9IiI/cHJlZ19yZXBsYWNlKCd+KFs/Jl1kYj0pW14mXSt+JywnXDEnLnVybGVuY29kZSgkclsiZGIiXSksTUUpOk1FKS4nc2VsZWN0PScudXJsZW5jb2RlKCRyWyJ0YWJsZSJdKS4kQTtpZigkclsibnMiXSkkQT1wcmVnX3JlcGxhY2UoJ34oWz8mXW5zPSlbXiZdK34nLCdcMScudXJsZW5jb2RlKCRyWyJucyJdKSwkQSk7aWYoY291bnQoJHJbInNvdXJjZSJdKT09MSlicmVhazt9fX1pZigkej09IkNPVU5UKCopIil7JEE9TUUuInNlbGVjdD0iLnVybGVuY29kZSgkYSk7JHQ9MDtmb3JlYWNoKChhcnJheSkkX0dFVFsid2hlcmUiXWFzJFcpe2lmKCFhcnJheV9rZXlfZXhpc3RzKCRXWyJjb2wiXSwkRGkpKSRBLj13aGVyZV9saW5rKCR0KyssJFdbImNvbCJdLCRXWyJ2YWwiXSwkV1sib3AiXSk7fWZvcmVhY2goJERpCmFzJGZlPT4kVykkQS49d2hlcmVfbGluaygkdCsrLCRmZSwkVyk7fSRYPXNlbGVjdF92YWx1ZSgkWCwkQSwkbywkY2kpOyR1PWgoInZhbFskRWldWyIuYnJhY2tldF9lc2NhcGUoJHopLiJdIik7JFk9JF9QT1NUWyJ2YWwiXVskRWldW2JyYWNrZXRfZXNjYXBlKCR6KV07JHJjPSFpc19hcnJheSgkSlskel0pJiZpc191dGY4KCRYKSYmJEtbJFVlXVskel09PSRKWyR6XSYmISRuZFskel07JGJpPXByZWdfbWF0Y2goJ350ZXh0fGxvYn4nLCRvWyJ0eXBlIl0pO2VjaG8iPHRkIGlkPSckdSciO2lmKCgkX0dFVFsibW9kaWZ5Il0mJiRyYyl8fCRZIT09bnVsbCl7JHZkPWgoJFkhPT1udWxsPyRZOiRKWyR6XSk7ZWNobyI+Ii4oJGJpPyI8dGV4dGFyZWEgbmFtZT0nJHUnIGNvbHM9JzMwJyByb3dzPSciLihzdWJzdHJfY291bnQoJEpbJHpdLCJcbiIpKzEpLiInPiR2ZDwvdGV4dGFyZWE+IjoiPGlucHV0IG5hbWU9JyR1JyB2YWx1ZT0nJHZkJyBzaXplPSckdWVbJHpdJz4iKTt9ZWxzZXskeWU9c3RycG9zKCRYLCI8aT7igKY8L2k+Iik7ZWNobyIgZGF0YS10ZXh0PSciLigkeWU/MjooJGJpPzE6MCkpLiInIi4oJHJjPyIiOiIgZGF0YS13YXJuaW5nPSciLmgoJ1VzZSBlZGl0IGxpbmsgdG8gbW9kaWZ5IHRoaXMgdmFsdWUuJykuIiciKS4iPiRYPC90ZD4iO319fWlmKCRPYSllY2hvIjx0ZD4iOyRiLT5iYWNrd2FyZEtleXNQcmludCgkT2EsJEtbJFVlXSk7ZWNobyI8L3RyPlxuIjt9aWYoaXNfYWpheCgpKWV4aXQ7ZWNobyI8L3RhYmxlPlxuIiwiPC9kaXY+XG4iO31pZighaXNfYWpheCgpKXtpZigkS3x8JEUpeyRHYz10cnVlO2lmKCRfR0VUWyJwYWdlIl0hPSJsYXN0Iil7aWYoJF89PSIifHwoY291bnQoJEspPCRfJiYoJEt8fCEkRSkpKSRrZD0oJEU/JEUqJF86MCkrY291bnQoJEspO2Vsc2VpZigkeSE9InNxbCJ8fCEkYWUpeyRrZD0oJGFlP2ZhbHNlOmZvdW5kX3Jvd3MoJFIsJFopKTtpZigka2Q8bWF4KDFlNCwyKigkRSsxKSokXykpJGtkPXJlc2V0KHNsb3dfcXVlcnkoY291bnRfcm93cygkYSwkWiwkYWUsJHFkKSkpO2Vsc2UkR2M9ZmFsc2U7fX0kTWY9KCRfIT0iIiYmKCRrZD09PWZhbHNlfHwka2Q+JF98fCRFKSk7aWYoJE1mKXtlY2hvKCgka2Q9PT1mYWxzZT9jb3VudCgkSykrMToka2QtJEUqJF8pPiRfPyc8cD48YSBocmVmPSInLmgocmVtb3ZlX2Zyb21fdXJpKCJwYWdlIikuIiZwYWdlPSIuKCRFKzEpKS4nIiBjbGFzcz0ibG9hZG1vcmUiPicuJ0xvYWQgbW9yZSBkYXRhJy4nPC9hPicuc2NyaXB0KCJxc2woJ2EnKS5vbmNsaWNrID0gcGFydGlhbChzZWxlY3RMb2FkTW9yZSwgIi4oKyRfKS4iLCAnIi4nTG9hZGluZycuIuKApicpOyIsIiIpOicnKSwiXG4iO319ZWNobyI8ZGl2IGNsYXNzPSdmb290ZXInPjxkaXY+XG4iO2lmKCRLfHwkRSl7aWYoJE1mKXskRmU9KCRrZD09PWZhbHNlPyRFKyhjb3VudCgkSyk+PSRfPzI6MSk6Zmxvb3IoKCRrZC0xKS8kXykpO2VjaG8iPGZpZWxkc2V0PiI7aWYoJHkhPSJzaW1wbGVkYiIpe2VjaG8iPGxlZ2VuZD48YSBocmVmPSciLmgocmVtb3ZlX2Zyb21fdXJpKCJwYWdlIikpLiInPiIuJ1BhZ2UnLiI8L2E+PC9sZWdlbmQ+IixzY3JpcHQoInFzbCgnYScpLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7IHBhZ2VDbGljayh0aGlzLmhyZWYsICtwcm9tcHQoJyIuJ1BhZ2UnLiInLCAnIi4oJEUrMSkuIicpKTsgcmV0dXJuIGZhbHNlOyB9OyIpLHBhZ2luYXRpb24oMCwkRSkuKCRFPjU/IiDigKYiOiIiKTtmb3IoJHQ9bWF4KDEsJEUtNCk7JHQ8bWluKCRGZSwkRSs1KTskdCsrKWVjaG8KcGFnaW5hdGlvbigkdCwkRSk7aWYoJEZlPjApe2VjaG8oJEUrNTwkRmU/IiDigKYiOiIiKSwoJEdjJiYka2QhPT1mYWxzZT9wYWdpbmF0aW9uKCRGZSwkRSk6IiA8YSBocmVmPSciLmgocmVtb3ZlX2Zyb21fdXJpKCJwYWdlIikuIiZwYWdlPWxhc3QiKS4iJyB0aXRsZT0nfiRGZSc+Ii4nbGFzdCcuIjwvYT4iKTt9fWVsc2V7ZWNobyI8bGVnZW5kPiIuJ1BhZ2UnLiI8L2xlZ2VuZD4iLHBhZ2luYXRpb24oMCwkRSkuKCRFPjE/IiDigKYiOiIiKSwoJEU/cGFnaW5hdGlvbigkRSwkRSk6IiIpLCgkRmU+JEU/cGFnaW5hdGlvbigkRSsxLCRFKS4oJEZlPiRFKzE/IiDigKYiOiIiKToiIik7fWVjaG8iPC9maWVsZHNldD5cbiI7fWVjaG8iPGZpZWxkc2V0PiIsIjxsZWdlbmQ+Ii4nV2hvbGUgcmVzdWx0Jy4iPC9sZWdlbmQ+IjskZ2M9KCRHYz8iIjoifiAiKS4ka2Q7ZWNobwpjaGVja2JveCgiYWxsIiwxLDAsKCRrZCE9PWZhbHNlPygkR2M/IiI6In4gIikubGFuZyhhcnJheSgnJWQgcm93JywnJWQgcm93cycpLCRrZCk6IiIpLCJ2YXIgY2hlY2tlZCA9IGZvcm1DaGVja2VkKHRoaXMsIC9jaGVjay8pOyBzZWxlY3RDb3VudCgnc2VsZWN0ZWQnLCB0aGlzLmNoZWNrZWQgPyAnJGdjJyA6IGNoZWNrZWQpOyBzZWxlY3RDb3VudCgnc2VsZWN0ZWQyJywgdGhpcy5jaGVja2VkIHx8ICFjaGVja2VkID8gJyRnYycgOiBjaGVja2VkKTsiKS4iXG4iLCI8L2ZpZWxkc2V0PlxuIjtpZigkYi0+c2VsZWN0Q29tbWFuZFByaW50KCkpe2VjaG8nPGZpZWxkc2V0JywoJF9HRVRbIm1vZGlmeSJdPycnOicgY2xhc3M9Impzb25seSInKSwnPjxsZWdlbmQ+TW9kaWZ5PC9sZWdlbmQ+PGRpdj4KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUiJywoJF9HRVRbIm1vZGlmeSJdPycnOicgdGl0bGU9IicuJ0N0cmwrY2xpY2sgb24gYSB2YWx1ZSB0byBtb2RpZnkgaXQuJy4nIicpLCc+CjwvZGl2PjwvZmllbGRzZXQ+CjxmaWVsZHNldD48bGVnZW5kPlNlbGVjdGVkIDxzcGFuIGlkPSJzZWxlY3RlZCI+PC9zcGFuPjwvbGVnZW5kPjxkaXY+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImVkaXQiIHZhbHVlPSJFZGl0Ij4KPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iY2xvbmUiIHZhbHVlPSJDbG9uZSI+CjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImRlbGV0ZSIgdmFsdWU9IkRlbGV0ZSI+Jyxjb25maXJtKCksJzwvZGl2PjwvZmllbGRzZXQ+Cic7fSRpZD0kYi0+ZHVtcEZvcm1hdCgpO2ZvcmVhY2goKGFycmF5KSRfR0VUWyJjb2x1bW5zIl1hcyRlKXtpZigkZVsiZnVuIl0pe3Vuc2V0KCRpZFsnc3FsJ10pO2JyZWFrO319aWYoJGlkKXtwcmludF9maWVsZHNldCgiZXhwb3J0IiwnRXhwb3J0Jy4iIDxzcGFuIGlkPSdzZWxlY3RlZDInPjwvc3Bhbj4iKTskSmY9JGItPmR1bXBPdXRwdXQoKTtlY2hvKCRKZj9odG1sX3NlbGVjdCgib3V0cHV0IiwkSmYsJHlhWyJvdXRwdXQiXSkuIiAiOiIiKSxodG1sX3NlbGVjdCgiZm9ybWF0IiwkaWQsJHlhWyJmb3JtYXQiXSksIiA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdleHBvcnQnIHZhbHVlPSciLidFeHBvcnQnLiInPlxuIiwiPC9kaXY+PC9maWVsZHNldD5cbiI7fSRiLT5zZWxlY3RFbWFpbFByaW50KGFycmF5X2ZpbHRlcigkd2MsJ3N0cmxlbicpLCRmKTt9ZWNobyI8L2Rpdj48L2Rpdj5cbiI7aWYoJGItPnNlbGVjdEltcG9ydFByaW50KCkpe2VjaG8iPGRpdj4iLCI8YSBocmVmPScjaW1wb3J0Jz4iLidJbXBvcnQnLiI8L2E+IixzY3JpcHQoInFzbCgnYScpLm9uY2xpY2sgPSBwYXJ0aWFsKHRvZ2dsZSwgJ2ltcG9ydCcpOyIsIiIpLCI8c3BhbiBpZD0naW1wb3J0JyBjbGFzcz0naGlkZGVuJz46ICIsIjxpbnB1dCB0eXBlPSdmaWxlJyBuYW1lPSdjc3ZfZmlsZSc+ICIsaHRtbF9zZWxlY3QoInNlcGFyYXRvciIsYXJyYXkoImNzdiI9PiJDU1YsIiwiY3N2OyI9PiJDU1Y7IiwidHN2Ij0+IlRTViIpLCR5YVsiZm9ybWF0Il0sMSk7ZWNobyIgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0naW1wb3J0JyB2YWx1ZT0nIi4nSW1wb3J0Jy4iJz4iLCI8L3NwYW4+IiwiPC9kaXY+Ijt9ZWNobyI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0b2tlbicgdmFsdWU9JyRuaSc+XG4iLCI8L2Zvcm0+XG4iLCghJHFkJiYkTD8iIjpzY3JpcHQoInRhYmxlQ2hlY2soKTsiKSk7fX19aWYoaXNfYWpheCgpKXtvYl9lbmRfY2xlYW4oKTtleGl0O319ZWxzZWlmKGlzc2V0KCRfR0VUWyJ2YXJpYWJsZXMiXSkpeyRPPWlzc2V0KCRfR0VUWyJzdGF0dXMiXSk7cGFnZV9oZWFkZXIoJE8/J1N0YXR1cyc6J1ZhcmlhYmxlcycpOyRVaT0oJE8/c2hvd19zdGF0dXMoKTpzaG93X3ZhcmlhYmxlcygpKTtpZighJFVpKWVjaG8iPHAgY2xhc3M9J21lc3NhZ2UnPiIuJ05vIHJvd3MuJy4iXG4iO2Vsc2V7ZWNobyI8dGFibGUgY2VsbHNwYWNpbmc9JzAnPlxuIjtmb3JlYWNoKCRVaQphcyR6PT4kWCl7ZWNobyI8dHI+IiwiPHRoPjxjb2RlIGNsYXNzPSdqdXNoLSIuJHkuKCRPPyJzdGF0dXMiOiJzZXQiKS4iJz4iLmgoJHopLiI8L2NvZGU+IiwiPHRkPiIuaCgkWCk7fWVjaG8iPC90YWJsZT5cbiI7fX1lbHNlaWYoaXNzZXQoJF9HRVRbInNjcmlwdCJdKSl7aGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvamF2YXNjcmlwdDsgY2hhcnNldD11dGYtOCIpO2lmKCRfR0VUWyJzY3JpcHQiXT09ImRiIil7JExoPWFycmF5KCJEYXRhX2xlbmd0aCI9PjAsIkluZGV4X2xlbmd0aCI9PjAsIkRhdGFfZnJlZSI9PjApO2ZvcmVhY2godGFibGVfc3RhdHVzKClhcyREPT4kUil7anNvbl9yb3coIkNvbW1lbnQtJEQiLGgoJFJbIkNvbW1lbnQiXSkpO2lmKCFpc192aWV3KCRSKSl7Zm9yZWFjaChhcnJheSgiRW5naW5lIiwiQ29sbGF0aW9uIilhcyR6KWpzb25fcm93KCIkei0kRCIsaCgkUlskel0pKTtmb3JlYWNoKCRMaCthcnJheSgiQXV0b19pbmNyZW1lbnQiPT4wLCJSb3dzIj0+MClhcyR6PT4kWCl7aWYoJFJbJHpdIT0iIil7JFg9Zm9ybWF0X251bWJlcigkUlskel0pO2pzb25fcm93KCIkei0kRCIsKCR6PT0iUm93cyImJiRYJiYkUlsiRW5naW5lIl09PSgkeWg9PSJwZ3NxbCI/InRhYmxlIjoiSW5ub0RCIik/In4gJFgiOiRYKSk7aWYoaXNzZXQoJExoWyR6XSkpJExoWyR6XSs9KCRSWyJFbmdpbmUiXSE9Iklubm9EQiJ8fCR6IT0iRGF0YV9mcmVlIj8kUlskel06MCk7fWVsc2VpZihhcnJheV9rZXlfZXhpc3RzKCR6LCRSKSlqc29uX3JvdygiJHotJEQiKTt9fX1mb3JlYWNoKCRMaAphcyR6PT4kWClqc29uX3Jvdygic3VtLSR6Iixmb3JtYXRfbnVtYmVyKCRYKSk7anNvbl9yb3coIiIpO31lbHNlaWYoJF9HRVRbInNjcmlwdCJdPT0ia2lsbCIpJGctPnF1ZXJ5KCJLSUxMICIubnVtYmVyKCRfUE9TVFsia2lsbCJdKSk7ZWxzZXtmb3JlYWNoKGNvdW50X3RhYmxlcygkYi0+ZGF0YWJhc2VzKCkpYXMkbD0+JFgpe2pzb25fcm93KCJ0YWJsZXMtJGwiLCRYKTtqc29uX3Jvdygic2l6ZS0kbCIsZGJfc2l6ZSgkbCkpO31qc29uX3JvdygiIik7fWV4aXQ7fWVsc2V7JFVoPWFycmF5X21lcmdlKChhcnJheSkkX1BPU1RbInRhYmxlcyJdLChhcnJheSkkX1BPU1RbInZpZXdzIl0pO2lmKCRVaCYmISRuJiYhJF9QT1NUWyJzZWFyY2giXSl7JEg9dHJ1ZTskS2U9IiI7aWYoJHk9PSJzcWwiJiYkX1BPU1RbInRhYmxlcyJdJiZjb3VudCgkX1BPU1RbInRhYmxlcyJdKT4xJiYoJF9QT1NUWyJkcm9wIl18fCRfUE9TVFsidHJ1bmNhdGUiXXx8JF9QT1NUWyJjb3B5Il0pKXF1ZXJpZXMoIlNFVCBmb3JlaWduX2tleV9jaGVja3MgPSAwIik7aWYoJF9QT1NUWyJ0cnVuY2F0ZSJdKXtpZigkX1BPU1RbInRhYmxlcyJdKSRIPXRydW5jYXRlX3RhYmxlcygkX1BPU1RbInRhYmxlcyJdKTskS2U9J1RhYmxlcyBoYXZlIGJlZW4gdHJ1bmNhdGVkLic7fWVsc2VpZigkX1BPU1RbIm1vdmUiXSl7JEg9bW92ZV90YWJsZXMoKGFycmF5KSRfUE9TVFsidGFibGVzIl0sKGFycmF5KSRfUE9TVFsidmlld3MiXSwkX1BPU1RbInRhcmdldCJdKTskS2U9J1RhYmxlcyBoYXZlIGJlZW4gbW92ZWQuJzt9ZWxzZWlmKCRfUE9TVFsiY29weSJdKXskSD1jb3B5X3RhYmxlcygoYXJyYXkpJF9QT1NUWyJ0YWJsZXMiXSwoYXJyYXkpJF9QT1NUWyJ2aWV3cyJdLCRfUE9TVFsidGFyZ2V0Il0pOyRLZT0nVGFibGVzIGhhdmUgYmVlbiBjb3BpZWQuJzt9ZWxzZWlmKCRfUE9TVFsiZHJvcCJdKXtpZigkX1BPU1RbInZpZXdzIl0pJEg9ZHJvcF92aWV3cygkX1BPU1RbInZpZXdzIl0pO2lmKCRIJiYkX1BPU1RbInRhYmxlcyJdKSRIPWRyb3BfdGFibGVzKCRfUE9TVFsidGFibGVzIl0pOyRLZT0nVGFibGVzIGhhdmUgYmVlbiBkcm9wcGVkLic7fWVsc2VpZigkeSE9InNxbCIpeyRIPSgkeT09InNxbGl0ZSI/cXVlcmllcygiVkFDVVVNIik6YXBwbHlfcXVlcmllcygiVkFDVVVNIi4oJF9QT1NUWyJvcHRpbWl6ZSJdPyIiOiIgQU5BTFlaRSIpLCRfUE9TVFsidGFibGVzIl0pKTskS2U9J1RhYmxlcyBoYXZlIGJlZW4gb3B0aW1pemVkLic7fWVsc2VpZighJF9QT1NUWyJ0YWJsZXMiXSkkS2U9J05vIHRhYmxlcy4nO2Vsc2VpZigkSD1xdWVyaWVzKCgkX1BPU1RbIm9wdGltaXplIl0/Ik9QVElNSVpFIjooJF9QT1NUWyJjaGVjayJdPyJDSEVDSyI6KCRfUE9TVFsicmVwYWlyIl0/IlJFUEFJUiI6IkFOQUxZWkUiKSkpLiIgVEFCTEUgIi5pbXBsb2RlKCIsICIsYXJyYXlfbWFwKCdpZGZfZXNjYXBlJywkX1BPU1RbInRhYmxlcyJdKSkpKXt3aGlsZSgkSj0kSC0+ZmV0Y2hfYXNzb2MoKSkkS2UuPSI8Yj4iLmgoJEpbIlRhYmxlIl0pLiI8L2I+OiAiLmgoJEpbIk1zZ190ZXh0Il0pLiI8YnI+Ijt9cXVlcmllc19yZWRpcmVjdChzdWJzdHIoTUUsMCwtMSksJEtlLCRIKTt9cGFnZV9oZWFkZXIoKCRfR0VUWyJucyJdPT0iIj8nRGF0YWJhc2UnLiI6ICIuaChEQik6J1NjaGVtYScuIjogIi5oKCRfR0VUWyJucyJdKSksJG4sdHJ1ZSk7aWYoJGItPmhvbWVwYWdlKCkpe2lmKCRfR0VUWyJucyJdIT09IiIpe2VjaG8iPGgzIGlkPSd0YWJsZXMtdmlld3MnPiIuJ1RhYmxlcyBhbmQgdmlld3MnLiI8L2gzPlxuIjskVGg9dGFibGVzX2xpc3QoKTtpZighJFRoKWVjaG8iPHAgY2xhc3M9J21lc3NhZ2UnPiIuJ05vIHRhYmxlcy4nLiJcbiI7ZWxzZXtlY2hvIjxmb3JtIGFjdGlvbj0nJyBtZXRob2Q9J3Bvc3QnPlxuIjtpZihzdXBwb3J0KCJ0YWJsZSIpKXtlY2hvIjxmaWVsZHNldD48bGVnZW5kPiIuJ1NlYXJjaCBkYXRhIGluIHRhYmxlcycuIiA8c3BhbiBpZD0nc2VsZWN0ZWQyJz48L3NwYW4+PC9sZWdlbmQ+PGRpdj4iLCI8aW5wdXQgdHlwZT0nc2VhcmNoJyBuYW1lPSdxdWVyeScgdmFsdWU9JyIuaCgkX1BPU1RbInF1ZXJ5Il0pLiInPiIsc2NyaXB0KCJxc2woJ2lucHV0Jykub25rZXlkb3duID0gcGFydGlhbEFyZyhib2R5S2V5ZG93biwgJ3NlYXJjaCcpOyIsIiIpLCIgPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nc2VhcmNoJyB2YWx1ZT0nIi4nU2VhcmNoJy4iJz5cbiIsIjwvZGl2PjwvZmllbGRzZXQ+XG4iO2lmKCRfUE9TVFsic2VhcmNoIl0mJiRfUE9TVFsicXVlcnkiXSE9IiIpeyRfR0VUWyJ3aGVyZSJdWzBdWyJvcCJdPSJMSUtFICUlIjtzZWFyY2hfdGFibGVzKCk7fX1lY2hvIjxkaXYgY2xhc3M9J3Njcm9sbGFibGUnPlxuIiwiPHRhYmxlIGNlbGxzcGFjaW5nPScwJyBjbGFzcz0nbm93cmFwIGNoZWNrYWJsZSc+XG4iLHNjcmlwdCgibWl4aW4ocXNsKCd0YWJsZScpLCB7b25jbGljazogdGFibGVDbGljaywgb25kYmxjbGljazogcGFydGlhbEFyZyh0YWJsZUNsaWNrLCB0cnVlKX0pOyIpLCc8dGhlYWQ+PHRyIGNsYXNzPSJ3cmFwIj4nLCc8dGQ+PGlucHV0IGlkPSJjaGVjay1hbGwiIHR5cGU9ImNoZWNrYm94IiBjbGFzcz0ianNvbmx5Ij4nLnNjcmlwdCgicXMoJyNjaGVjay1hbGwnKS5vbmNsaWNrID0gcGFydGlhbChmb3JtQ2hlY2ssIC9eKHRhYmxlc3x2aWV3cylcWy8pOyIsIiIpLCc8dGg+Jy4nVGFibGUnLCc8dGQ+Jy4nRW5naW5lJy5kb2NfbGluayhhcnJheSgnc3FsJz0+J3N0b3JhZ2UtZW5naW5lcy5odG1sJykpLCc8dGQ+Jy4nQ29sbGF0aW9uJy5kb2NfbGluayhhcnJheSgnc3FsJz0+J2NoYXJzZXQtY2hhcnNldHMuaHRtbCcsJ21hcmlhZGInPT4nc3VwcG9ydGVkLWNoYXJhY3Rlci1zZXRzLWFuZC1jb2xsYXRpb25zLycpKSwnPHRkPicuJ0RhdGEgTGVuZ3RoJy5kb2NfbGluayhhcnJheSgnc3FsJz0+J3Nob3ctdGFibGUtc3RhdHVzLmh0bWwnLCdwZ3NxbCc9PidmdW5jdGlvbnMtYWRtaW4uaHRtbCNGVU5DVElPTlMtQURNSU4tREJPQkpFQ1QnLCdvcmFjbGUnPT4nUkVGUk4yMDI4NicpKSwnPHRkPicuJ0luZGV4IExlbmd0aCcuZG9jX2xpbmsoYXJyYXkoJ3NxbCc9PidzaG93LXRhYmxlLXN0YXR1cy5odG1sJywncGdzcWwnPT4nZnVuY3Rpb25zLWFkbWluLmh0bWwjRlVOQ1RJT05TLUFETUlOLURCT0JKRUNUJykpLCc8dGQ+Jy4nRGF0YSBGcmVlJy5kb2NfbGluayhhcnJheSgnc3FsJz0+J3Nob3ctdGFibGUtc3RhdHVzLmh0bWwnKSksJzx0ZD4nLidBdXRvIEluY3JlbWVudCcuZG9jX2xpbmsoYXJyYXkoJ3NxbCc9PidleGFtcGxlLWF1dG8taW5jcmVtZW50Lmh0bWwnLCdtYXJpYWRiJz0+J2F1dG9faW5jcmVtZW50LycpKSwnPHRkPicuJ1Jvd3MnLmRvY19saW5rKGFycmF5KCdzcWwnPT4nc2hvdy10YWJsZS1zdGF0dXMuaHRtbCcsJ3Bnc3FsJz0+J2NhdGFsb2ctcGctY2xhc3MuaHRtbCNDQVRBTE9HLVBHLUNMQVNTJywnb3JhY2xlJz0+J1JFRlJOMjAyODYnKSksKHN1cHBvcnQoImNvbW1lbnQiKT8nPHRkPicuJ0NvbW1lbnQnLmRvY19saW5rKGFycmF5KCdzcWwnPT4nc2hvdy10YWJsZS1zdGF0dXMuaHRtbCcsJ3Bnc3FsJz0+J2Z1bmN0aW9ucy1pbmZvLmh0bWwjRlVOQ1RJT05TLUlORk8tQ09NTUVOVC1UQUJMRScpKTonJyksIjwvdGhlYWQ+XG4iOyRTPTA7Zm9yZWFjaCgkVGgKYXMkRD0+JFQpeyRYaT0oJFQhPT1udWxsJiYhcHJlZ19tYXRjaCgnfnRhYmxlfHNlcXVlbmNlfmknLCRUKSk7JHU9aCgiVGFibGUtIi4kRCk7ZWNobyc8dHInLm9kZCgpLic+PHRkPicuY2hlY2tib3goKCRYaT8idmlld3NbXSI6InRhYmxlc1tdIiksJEQsaW5fYXJyYXkoJEQsJFVoLHRydWUpLCIiLCIiLCIiLCR1KSwnPHRoPicuKHN1cHBvcnQoInRhYmxlIil8fHN1cHBvcnQoImluZGV4ZXMiKT8iPGEgaHJlZj0nIi5oKE1FKS4idGFibGU9Ii51cmxlbmNvZGUoJEQpLiInIHRpdGxlPSciLidTaG93IHN0cnVjdHVyZScuIicgaWQ9JyR1Jz4iLmgoJEQpLic8L2E+JzpoKCREKSk7aWYoJFhpKXtlY2hvJzx0ZCBjb2xzcGFuPSI2Ij48YSBocmVmPSInLmgoTUUpLiJ2aWV3PSIudXJsZW5jb2RlKCREKS4nIiB0aXRsZT0iJy4nQWx0ZXIgdmlldycuJyI+Jy4ocHJlZ19tYXRjaCgnfm1hdGVyaWFsaXplZH5pJywkVCk/J01hdGVyaWFsaXplZCB2aWV3JzonVmlldycpLic8L2E+JywnPHRkIGFsaWduPSJyaWdodCI+PGEgaHJlZj0iJy5oKE1FKS4ic2VsZWN0PSIudXJsZW5jb2RlKCREKS4nIiB0aXRsZT0iJy4nU2VsZWN0IGRhdGEnLiciPj88L2E+Jzt9ZWxzZXtmb3JlYWNoKGFycmF5KCJFbmdpbmUiPT5hcnJheSgpLCJDb2xsYXRpb24iPT5hcnJheSgpLCJEYXRhX2xlbmd0aCI9PmFycmF5KCJjcmVhdGUiLCdBbHRlciB0YWJsZScpLCJJbmRleF9sZW5ndGgiPT5hcnJheSgiaW5kZXhlcyIsJ0FsdGVyIGluZGV4ZXMnKSwiRGF0YV9mcmVlIj0+YXJyYXkoImVkaXQiLCdOZXcgaXRlbScpLCJBdXRvX2luY3JlbWVudCI9PmFycmF5KCJhdXRvX2luY3JlbWVudD0xJmNyZWF0ZSIsJ0FsdGVyIHRhYmxlJyksIlJvd3MiPT5hcnJheSgic2VsZWN0IiwnU2VsZWN0IGRhdGEnKSwpYXMkej0+JEEpeyR1PSIgaWQ9JyR6LSIuaCgkRCkuIiciO2VjaG8oJEE/Ijx0ZCBhbGlnbj0ncmlnaHQnPiIuKHN1cHBvcnQoInRhYmxlIil8fCR6PT0iUm93cyJ8fChzdXBwb3J0KCJpbmRleGVzIikmJiR6IT0iRGF0YV9sZW5ndGgiKT8iPGEgaHJlZj0nIi5oKE1FLiIkQVswXT0iKS51cmxlbmNvZGUoJEQpLiInJHUgdGl0bGU9JyRBWzFdJz4/PC9hPiI6IjxzcGFuJHU+Pzwvc3Bhbj4iKToiPHRkIGlkPSckei0iLmgoJEQpLiInPiIpO30kUysrO31lY2hvKHN1cHBvcnQoImNvbW1lbnQiKT8iPHRkIGlkPSdDb21tZW50LSIuaCgkRCkuIic+IjoiIik7fWVjaG8iPHRyPjx0ZD48dGg+Ii5zcHJpbnRmKCclZCBpbiB0b3RhbCcsY291bnQoJFRoKSksIjx0ZD4iLmgoJHk9PSJzcWwiPyRnLT5yZXN1bHQoIlNFTEVDVCBAQGRlZmF1bHRfc3RvcmFnZV9lbmdpbmUiKToiIiksIjx0ZD4iLmgoZGJfY29sbGF0aW9uKERCLGNvbGxhdGlvbnMoKSkpO2ZvcmVhY2goYXJyYXkoIkRhdGFfbGVuZ3RoIiwiSW5kZXhfbGVuZ3RoIiwiRGF0YV9mcmVlIilhcyR6KWVjaG8iPHRkIGFsaWduPSdyaWdodCcgaWQ9J3N1bS0keic+IjtlY2hvIjwvdGFibGU+XG4iLCI8L2Rpdj5cbiI7aWYoIWluZm9ybWF0aW9uX3NjaGVtYShEQikpe2VjaG8iPGRpdiBjbGFzcz0nZm9vdGVyJz48ZGl2PlxuIjskUmk9IjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSciLidWYWN1dW0nLiInPiAiLm9uX2hlbHAoIidWQUNVVU0nIik7JHZmPSI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdvcHRpbWl6ZScgdmFsdWU9JyIuJ09wdGltaXplJy4iJz4gIi5vbl9oZWxwKCR5PT0ic3FsIj8iJ09QVElNSVpFIFRBQkxFJyI6IidWQUNVVU0gT1BUSU1JWkUnIik7ZWNobyI8ZmllbGRzZXQ+PGxlZ2VuZD4iLidTZWxlY3RlZCcuIiA8c3BhbiBpZD0nc2VsZWN0ZWQnPjwvc3Bhbj48L2xlZ2VuZD48ZGl2PiIuKCR5PT0ic3FsaXRlIj8kUmk6KCR5PT0icGdzcWwiPyRSaS4kdmY6KCR5PT0ic3FsIj8iPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyIuJ0FuYWx5emUnLiInPiAiLm9uX2hlbHAoIidBTkFMWVpFIFRBQkxFJyIpLiR2Zi4iPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nY2hlY2snIHZhbHVlPSciLidDaGVjaycuIic+ICIub25faGVscCgiJ0NIRUNLIFRBQkxFJyIpLiI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdyZXBhaXInIHZhbHVlPSciLidSZXBhaXInLiInPiAiLm9uX2hlbHAoIidSRVBBSVIgVEFCTEUnIik6IiIpKSkuIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J3RydW5jYXRlJyB2YWx1ZT0nIi4nVHJ1bmNhdGUnLiInPiAiLm9uX2hlbHAoJHk9PSJzcWxpdGUiPyInREVMRVRFJyI6IidUUlVOQ0FURSIuKCR5PT0icGdzcWwiPyInIjoiIFRBQkxFJyIpKS5jb25maXJtKCkuIjxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J2Ryb3AnIHZhbHVlPSciLidEcm9wJy4iJz4iLm9uX2hlbHAoIidEUk9QIFRBQkxFJyIpLmNvbmZpcm0oKS4iXG4iOyRrPShzdXBwb3J0KCJzY2hlbWUiKT8kYi0+c2NoZW1hcygpOiRiLT5kYXRhYmFzZXMoKSk7aWYoY291bnQoJGspIT0xJiYkeSE9InNxbGl0ZSIpeyRsPShpc3NldCgkX1BPU1RbInRhcmdldCJdKT8kX1BPU1RbInRhcmdldCJdOihzdXBwb3J0KCJzY2hlbWUiKT8kX0dFVFsibnMiXTpEQikpO2VjaG8iPHA+Ii4nTW92ZSB0byBvdGhlciBkYXRhYmFzZScuIjogIiwoJGs/aHRtbF9zZWxlY3QoInRhcmdldCIsJGssJGwpOic8aW5wdXQgbmFtZT0idGFyZ2V0IiB2YWx1ZT0iJy5oKCRsKS4nIiBhdXRvY2FwaXRhbGl6ZT0ib2ZmIj4nKSwiIDxpbnB1dCB0eXBlPSdzdWJtaXQnIG5hbWU9J21vdmUnIHZhbHVlPSciLidNb3ZlJy4iJz4iLChzdXBwb3J0KCJjb3B5Iik/IiA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdjb3B5JyB2YWx1ZT0nIi4nQ29weScuIic+ICIuY2hlY2tib3goIm92ZXJ3cml0ZSIsMSwkX1BPU1RbIm92ZXJ3cml0ZSJdLCdvdmVyd3JpdGUnKToiIiksIlxuIjt9ZWNobyI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhbGwnIHZhbHVlPScnPiI7ZWNobwpzY3JpcHQoInFzbCgnaW5wdXQnKS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeyBzZWxlY3RDb3VudCgnc2VsZWN0ZWQnLCBmb3JtQ2hlY2tlZCh0aGlzLCAvXih0YWJsZXN8dmlld3MpXFsvKSk7Ii4oc3VwcG9ydCgidGFibGUiKT8iIHNlbGVjdENvdW50KCdzZWxlY3RlZDInLCBmb3JtQ2hlY2tlZCh0aGlzLCAvXnRhYmxlc1xbLykgfHwgJFMpOyI6IiIpLiIgfSIpLCI8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSd0b2tlbicgdmFsdWU9JyRuaSc+XG4iLCI8L2Rpdj48L2ZpZWxkc2V0PlxuIiwiPC9kaXY+PC9kaXY+XG4iO31lY2hvIjwvZm9ybT5cbiIsc2NyaXB0KCJ0YWJsZUNoZWNrKCk7Iik7fWVjaG8nPHAgY2xhc3M9ImxpbmtzIj48YSBocmVmPSInLmgoTUUpLidjcmVhdGU9Ij4nLidDcmVhdGUgdGFibGUnLiI8L2E+XG4iLChzdXBwb3J0KCJ2aWV3Iik/JzxhIGhyZWY9IicuaChNRSkuJ3ZpZXc9Ij4nLidDcmVhdGUgdmlldycuIjwvYT5cbiI6IiIpO2lmKHN1cHBvcnQoInJvdXRpbmUiKSl7ZWNobyI8aDMgaWQ9J3JvdXRpbmVzJz4iLidSb3V0aW5lcycuIjwvaDM+XG4iOyRWZz1yb3V0aW5lcygpO2lmKCRWZyl7ZWNobyI8dGFibGUgY2VsbHNwYWNpbmc9JzAnPlxuIiwnPHRoZWFkPjx0cj48dGg+Jy4nTmFtZScuJzx0ZD4nLidUeXBlJy4nPHRkPicuJ1JldHVybiB0eXBlJy4iPHRkPjwvdGhlYWQ+XG4iO29kZCgnJyk7Zm9yZWFjaCgkVmcKYXMkSil7JEQ9KCRKWyJTUEVDSUZJQ19OQU1FIl09PSRKWyJST1VUSU5FX05BTUUiXT8iIjoiJm5hbWU9Ii51cmxlbmNvZGUoJEpbIlJPVVRJTkVfTkFNRSJdKSk7ZWNobyc8dHInLm9kZCgpLic+JywnPHRoPjxhIGhyZWY9IicuaChNRS4oJEpbIlJPVVRJTkVfVFlQRSJdIT0iUFJPQ0VEVVJFIj8nY2FsbGY9JzonY2FsbD0nKS51cmxlbmNvZGUoJEpbIlNQRUNJRklDX05BTUUiXSkuJEQpLiciPicuaCgkSlsiUk9VVElORV9OQU1FIl0pLic8L2E+JywnPHRkPicuaCgkSlsiUk9VVElORV9UWVBFIl0pLCc8dGQ+Jy5oKCRKWyJEVERfSURFTlRJRklFUiJdKSwnPHRkPjxhIGhyZWY9IicuaChNRS4oJEpbIlJPVVRJTkVfVFlQRSJdIT0iUFJPQ0VEVVJFIj8nZnVuY3Rpb249JzoncHJvY2VkdXJlPScpLnVybGVuY29kZSgkSlsiU1BFQ0lGSUNfTkFNRSJdKS4kRCkuJyI+Jy4nQWx0ZXInLiI8L2E+Ijt9ZWNobyI8L3RhYmxlPlxuIjt9ZWNobyc8cCBjbGFzcz0ibGlua3MiPicuKHN1cHBvcnQoInByb2NlZHVyZSIpPyc8YSBocmVmPSInLmgoTUUpLidwcm9jZWR1cmU9Ij4nLidDcmVhdGUgcHJvY2VkdXJlJy4nPC9hPic6JycpLic8YSBocmVmPSInLmgoTUUpLidmdW5jdGlvbj0iPicuJ0NyZWF0ZSBmdW5jdGlvbicuIjwvYT5cbiI7fWlmKHN1cHBvcnQoInNlcXVlbmNlIikpe2VjaG8iPGgzIGlkPSdzZXF1ZW5jZXMnPiIuJ1NlcXVlbmNlcycuIjwvaDM+XG4iOyRqaD1nZXRfdmFscygiU0VMRUNUIHNlcXVlbmNlX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuc2VxdWVuY2VzIFdIRVJFIHNlcXVlbmNlX3NjaGVtYSA9IGN1cnJlbnRfc2NoZW1hKCkgT1JERVIgQlkgc2VxdWVuY2VfbmFtZSIpO2lmKCRqaCl7ZWNobyI8dGFibGUgY2VsbHNwYWNpbmc9JzAnPlxuIiwiPHRoZWFkPjx0cj48dGg+Ii4nTmFtZScuIjwvdGhlYWQ+XG4iO29kZCgnJyk7Zm9yZWFjaCgkamgKYXMkWCllY2hvIjx0ciIub2RkKCkuIj48dGg+PGEgaHJlZj0nIi5oKE1FKS4ic2VxdWVuY2U9Ii51cmxlbmNvZGUoJFgpLiInPiIuaCgkWCkuIjwvYT5cbiI7ZWNobyI8L3RhYmxlPlxuIjt9ZWNobyI8cCBjbGFzcz0nbGlua3MnPjxhIGhyZWY9JyIuaChNRSkuInNlcXVlbmNlPSc+Ii4nQ3JlYXRlIHNlcXVlbmNlJy4iPC9hPlxuIjt9aWYoc3VwcG9ydCgidHlwZSIpKXtlY2hvIjxoMyBpZD0ndXNlci10eXBlcyc+Ii4nVXNlciB0eXBlcycuIjwvaDM+XG4iOyRQaT10eXBlcygpO2lmKCRQaSl7ZWNobyI8dGFibGUgY2VsbHNwYWNpbmc9JzAnPlxuIiwiPHRoZWFkPjx0cj48dGg+Ii4nTmFtZScuIjwvdGhlYWQ+XG4iO29kZCgnJyk7Zm9yZWFjaCgkUGkKYXMkWCllY2hvIjx0ciIub2RkKCkuIj48dGg+PGEgaHJlZj0nIi5oKE1FKS4idHlwZT0iLnVybGVuY29kZSgkWCkuIic+Ii5oKCRYKS4iPC9hPlxuIjtlY2hvIjwvdGFibGU+XG4iO31lY2hvIjxwIGNsYXNzPSdsaW5rcyc+PGEgaHJlZj0nIi5oKE1FKS4idHlwZT0nPiIuJ0NyZWF0ZSB0eXBlJy4iPC9hPlxuIjt9aWYoc3VwcG9ydCgiZXZlbnQiKSl7ZWNobyI8aDMgaWQ9J2V2ZW50cyc+Ii4nRXZlbnRzJy4iPC9oMz5cbiI7JEs9Z2V0X3Jvd3MoIlNIT1cgRVZFTlRTIik7aWYoJEspe2VjaG8iPHRhYmxlIGNlbGxzcGFjaW5nPScwJz5cbiIsIjx0aGVhZD48dHI+PHRoPiIuJ05hbWUnLiI8dGQ+Ii4nU2NoZWR1bGUnLiI8dGQ+Ii4nU3RhcnQnLiI8dGQ+Ii4nRW5kJy4iPHRkPjwvdGhlYWQ+XG4iO2ZvcmVhY2goJEsKYXMkSil7ZWNobyI8dHI+IiwiPHRoPiIuaCgkSlsiTmFtZSJdKSwiPHRkPiIuKCRKWyJFeGVjdXRlIGF0Il0/J0F0IGdpdmVuIHRpbWUnLiI8dGQ+Ii4kSlsiRXhlY3V0ZSBhdCJdOidFdmVyeScuIiAiLiRKWyJJbnRlcnZhbCB2YWx1ZSJdLiIgIi4kSlsiSW50ZXJ2YWwgZmllbGQiXS4iPHRkPiRKW1N0YXJ0c10iKSwiPHRkPiRKW0VuZHNdIiwnPHRkPjxhIGhyZWY9IicuaChNRSkuJ2V2ZW50PScudXJsZW5jb2RlKCRKWyJOYW1lIl0pLiciPicuJ0FsdGVyJy4nPC9hPic7fWVjaG8iPC90YWJsZT5cbiI7JEVjPSRnLT5yZXN1bHQoIlNFTEVDVCBAQGV2ZW50X3NjaGVkdWxlciIpO2lmKCRFYyYmJEVjIT0iT04iKWVjaG8iPHAgY2xhc3M9J2Vycm9yJz48Y29kZSBjbGFzcz0nanVzaC1zcWxzZXQnPmV2ZW50X3NjaGVkdWxlcjwvY29kZT46ICIuaCgkRWMpLiJcbiI7fWVjaG8nPHAgY2xhc3M9ImxpbmtzIj48YSBocmVmPSInLmgoTUUpLidldmVudD0iPicuJ0NyZWF0ZSBldmVudCcuIjwvYT5cbiI7fWlmKCRUaCllY2hvCnNjcmlwdCgiYWpheFNldEh0bWwoJyIuanNfZXNjYXBlKE1FKS4ic2NyaXB0PWRiJyk7Iik7fX19cGFnZV9mb290ZXIoKTs=';
eval('?>'.base64_decode($bs));exit;
?>

Function Calls

base64_decode 1

Variables

$bs PD9waHAKLyoqIEFkbWluZXIgLSBDb21wYWN0IGRhdGFiYXNlIG1hbmFnZW1l..

Stats

MD5 637c0d8a558d038cb8c81ded9fe3faf3
Eval Count 1
Decode Time 709 ms